仅允许在postgresql列中使用特定值的正确方法是什么?
说我有一个名为 colors 的列,varchar数据类型带有NOT NULL约束。我只想允许新行的值为White,Blue或Black。也许它们是产品,我们只制造那些特定的颜色。
通过使用CHECK (color in("White", "Blue", "Black"))
有什么办法可以使列始终全部大写或小写,以便我不必担心Blue vs blue?是通过
处理该问题的最佳方法ALTER TABLE test_table ADD CONSTRAINT CHECK (color = lower(color));
确保颜色条目的所有新行都是小写的正确方法是吗?显然,我需要将上面的颜色更新为“蓝色”,等等。
答案 0 :(得分:0)
答案 1 :(得分:0)
如果您有一组已知的值(又名枚举),则应改用enum type,这样不仅可以强制执行这些值,还可以强制执行大小写,并且具有减少磁盘上存储空间的优势。以及内部索引,例如:
CREATE TYPE my_color AS ENUM ('White', 'Blue', 'Black');
CREATE TABLE my_table (
...
color my_color,
...
);
对于检查约束版本(如果您拥有不断扩展/动态的值集),您已经找到了最好的变体。