Postgresql:如何在postgresql中创建类型

bmvo0sr5  于 2022-12-26  发布在  PostgreSQL
关注(0)|答案(2)|浏览(237)

我是postgresql的新手。我想在SQL中创建具有以下值的类型,但却无法创建相同的类型。
我明白它类似于表,但我不能想出解决办法。
我想使用postgresql创建以下类型

"Completed", "Pending", "Failed", "Created"
yacmzcpb

yacmzcpb1#

执行此操作的正确方法是使用查找表和外键:

create table status
(
   id   integer primary key,
   name text not null 
);

insert into status (id, name) 
values
  (1, 'Completed'),
  (2, 'Pending'),
  (3, 'Failed'),
  (4, 'Created');

create table some_table
(
   id integer primary key, 
   status_id integer not null references status
);

这是在关系数据库中处理这个问题的最灵活的方法。
如果您知道您几乎不会更改这些值,则可以使用检查约束:

create table some_table
(
   id integer primary key, 
   status text not null, 
   constraint check_status 
       status in ('Completed', 'Pending', 'Failed', 'Created')
);

这样做的缺点是,您要一遍又一遍地存储相同的值,因此与外键解决方案相比,表的大小会更大。
第三个选项是使用enum type

create type status_type AS ENUM (''Completed', 'Pending', 'Failed', 'Created');

然后使用表中的类型:

create table some_table
(
   id integer primary key, 
   status status_type not null
);

这与外键解决方案具有类似的存储要求,但将状态显示为“明文”。

ezykj2lf

ezykj2lf2#

CREATE TYPE color AS ENUM ('red', 'green', 'blue');

相关问题