小编典典

在Postgres中,如何限制特定列的可能值?

sql

我想element_type在表(称为discussion)中创建一列,该列允许文本值“教训”或“测验”,但如果在该列中插入任何其他值,则会产生错误。

我知道我可以创建一个单独的表element_types,该表使用列element_id(主键,int)和element_type(唯一键,文本)来调用,并foreign_element_iddiscussion引用该表element_types的column的表中创建一个外键element_id。或者,我可能会element_id完全忘记而只是将其设置element_type为主键。但我要避免创建新表。

有没有更直接的方法来限制列中可能的值而无需创建新表?


阅读 208

收藏
2021-04-15

共1个答案

小编典典

您可以添加一个 CHECK CONSTRAINT:

ALTER TABLE distributors 
   ADD CONSTRAINT check_types 
   CHECK (element_type = 'lesson' OR element_type = 'quiz');

尽管IMO更加清洁的选择是创建ENUM

CREATE TYPE element_type AS ENUM ('lesson', 'quiz');
2021-04-15