相关疑难解决方法(0)

将新值添加到现有ENUM类型

我有一个使用enum类型的表列.我希望更新该enum类型以获得额外的可能值.我不想删除任何现有值,只需添加新值.最简单的方法是什么?

database postgresql enums

178
推荐指数
12
解决办法
10万
查看次数

SQL:ENUM与一对多关系的优势?

我很少看到野外使用的ENUM数据类型; 开发人员几乎总是只使用如下所示的辅助表:

CREATE TABLE officer_ranks (
id int PRIMARY KEY
,title varchar NOT NULL UNIQUE);
INSERT INTO ranks VALUES (1,'2LT'),(2,'1LT'),(3,'CPT'),(4,'MAJ'),(5,'LTC'),(6,'COL'),(7,'BG'),(8,'MG'),(9,'LTG'),(10,'GEN');

CREATE TABLE officers (
solider_name varchar NOT NULL
,rank int NOT NULL REFERENCES officer_ranks(id) ON DELETE RESTRICT
,serial_num varchar PRIMARY KEY);
Run Code Online (Sandbox Code Playgroud)

但是也可以使用用户定义的类型/ ENUM显示相同的内容:

CREATE TYPE officer_rank AS ENUM ('2LT', '1LT','CPT','MAJ','LTC','COL','BG','MG','LTG','GEN');

CREATE TABLE officers (
solider_name varchar NOT NULL
,rank officer_rank NOT NULL
,serial_num varchar PRIMARY KEY);
Run Code Online (Sandbox Code Playgroud)

(使用PostgreSQL显示的示例,但其他RDBMS具有类似的语法)

我看到使用ENUM的最大缺点是从应用程序内部更新更加困难.它也可能会使曾经习惯使用SQL DB的缺乏经验的开发人员感到困惑.

假设信息大多是静态的(工作日名称,月份名称,美国军队等级),使用ENUM是否有任何优势?

sql postgresql database-design

15
推荐指数
6
解决办法
1万
查看次数

ProgrammingError:列"product"的类型为product [],但表达式的类型为text [] enum postgres

我想保存一系列枚举.

我有以下内容:

CREATE TABLE public.campaign
(
  id integer NOT NULL,
  product product[]
)
Run Code Online (Sandbox Code Playgroud)

产品是一个enum.

在Django我定义它是这样的:

PRODUCT = (
    ('car', 'car'),
    ('truck', 'truck')
)
class Campaign(models.Model):
    product = ArrayField(models.CharField(null=True, choices=PRODUCT))
Run Code Online (Sandbox Code Playgroud)

但是,当我写下以下内容时:

campaign = Campaign(id=5, product=["car", "truck"])
campaign.save()
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

ProgrammingError: column "product" is of type product[] but expression is of type text[]
LINE 1: ..."product" = ARRAY['car...
Run Code Online (Sandbox Code Playgroud)

注意 我看到了这个答案,但我不使用sqlalchemy,如果不需要,我宁愿不使用它.

编辑 我在下面尝试了@Roman Konoval建议:

class PRODUCT(Enum):
    CAR = 'car'
    TRUCK = 'truck'

class Campaign(models.Model):
        product = ArrayField(EnumField(PRODUCT, max_length=10))
Run Code Online (Sandbox Code Playgroud)

与:

campaign …
Run Code Online (Sandbox Code Playgroud)

python database django postgresql enums

12
推荐指数
1
解决办法
760
查看次数

枚举与字符串/整数枚举

我注意到像 Postgres 这样的一些数据库添加了,Enum但问题是,

什么时候integer/string based enum会成为性能问题?

下面这个回答关于Postgresql enum的差异有哪些优点和缺点?

因为当您使用 Rails 或在本例中使用EctoElixir 语言时,存在一定程度的抽象,因此列出的两个优点之一根本不会成为问题,因此只需要performance关注。

因此,当该优势确实很重要时,您就放弃了其中列出的劣势

database postgresql enums database-performance

9
推荐指数
1
解决办法
1万
查看次数