在PostgreSQL DB中,假设您想要添加一个名为vehicle_type
的列,并且只希望出现以下3个条目中的一个:car
、truck
或motorcycle
。我以为会有一个方法来定义它,但尝试一个我可能,并阅读了很多文章,我不知道如何做。
注意:我正在使用DBeaver客户端,但也可以运行任何SQL命令。
有办法吗?
发布于 2022-07-02 21:50:45
CREATE TYPE vehicle_type AS ENUM ('car', 'truck', 'motorcycle');
-- add column with default
ALTER TABLE tbl ADD COLUMN v_type vehicle_type NOT NULL DEFAULT 'car';
由于“您只希望以下3个条目中的一个可能出现”,因此也使其不为空。
一个enum
占用4个字节。为了将磁盘占用保持在最低限度,您可以选择使用一个占用1字节的"char"
字段;
ALTER TABLE tbl
ADD column v_type2 "char" NOT NULL DEFAULT 'c'
, ADD CONSTRAINT v_type_allowed CHECK (v_type2 IN ('c', 't', 'm'));
正面:小,快。
缺点:Postgres-特定的,可读性较低。
db<>fiddle https://dbfiddle.uk/?rdbms=postgres_14&fiddle=bdeec59353fb7493f0ccdfa258d11094
请参见:
https://stackoverflow.com/questions/72842588
复制相似问题