【问题标题】:Postgres check constraint in text array for the validity of the valuesPostgres 检查文本数组中的约束以确保值的有效性
【发布时间】:2019-07-19 11:31:31
【问题描述】:

我想创建类似的东西

CHECK (ALL(scopes) IN ('read', 'write', 'delete', 'update'))

scopes 这是表中的一个字段text[],我想确保该数组中的所有值都是上述值之一。对此有何看法?是否有可能通过SELECT 从另一个表中获取这些值?

我看过下面的解决方案,但我很好奇是否有更简单的解决方案。

Postgresql check constraint on all individual elements in array using function

【问题讨论】:

    标签: sql postgresql


    【解决方案1】:

    demo:db<>fiddle

    使用&lt;@ operator:

    CHECK(scopes <@ ARRAY['read', 'write', 'delete', 'update'])
    

    不知道您的确切用例,但我更喜欢更规范的解决方案:将四个操作放入一个可以更新的单独表中。然后您可以使用外键而不是检查约束。如果必须更新这四个关键字,则不需要更改表 DDL,只需更改外表中的值即可。

    【讨论】:

    • 很好的答案和建议!
    • 非常感谢您的快速回答。已经工作了。我也在考虑这个选择,但很高兴知道我手头有这个我可以一直依赖的选择。详细讨论在这里:stackoverflow.com/questions/10923213/…
    • @leventunver 对此添加了评论。
    猜你喜欢
    • 2010-11-13
    • 2022-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多