回答

收藏

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

技术问答 技术问答 515 人阅读 | 0 人回复 | 2023-09-11

我想element_type在表(称为discussion)该列允许文本值教训或测试,但如果在该列中插入任何其他值,则会产生错误。
! T' p. G0 J5 W3 J8 {  X* ~) s我知道我可以创建一个单独的表element_types,该表使用列element_id(主键,int)和element_type(唯一键,文本)来调用,并foreign_element_id在discussion引用该表element_types的column在表中创建外键element_id。或者,我可能会element_id完全忘记,只是设置它element_type主键。但是我想避免创建新手表。1 y2 U! s4 C% m0 k" c5 y( D
在不创建新表的情况下,有没有更直接的方法来限制列中可能的值?9 c8 E% J; Q" C4 i' @, r! ~7 g
                                                                * A( `6 U' U) V/ E, s) b, _
    解决方案:                                                               
  L" y$ X, s' S/ d5 L                                                                可以加一个 CHECKCONSTRAINT:
9 i* S/ I. \: {" c6 eALTER TABLE distributors    ADD CONSTRAINT check_types    CHECK (element_type = 'lesson' OR element_type = 'quiz');尽管IMO更清洁的选择是创造ENUM:
6 e) ~! i( E9 \) n" a; M9 O& Z" lCREATE TYPE element_type AS ENUM ('lesson','quiz);
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则