检查postgres数组中是否存在值以通过检查约束进行分区

时间:2015-07-29 08:29:57

标签: arrays postgresql

我发现this非常相似的问题,但所有答案都以“选择”语句开头。我想检查一个字符串是否包含在一个包含大约30个其他字符串的常量数组中。我可以写一个很长的x == a OR x == b OR...声明,但我认为可能会有更清洁的方式。

因此,这不能用作约束检查:SELECT language = ANY ('{"en", "pt", "es", "fr"}'::text[])

1 个答案:

答案 0 :(得分:0)

只需删除SELECT即可:

CHECK(
    language = ANY ('{"en", "pt", "es", "fr"}'::text[])
)

但正如a_horse_with_no_name所指出的那样:

不使用数组甚至更好,因为这不会破坏分区优化。

CHECK(
    not( language in ('en', 'pt', 'es'))
)

现在SELECT * FROM myTable WHERE language='de';甚至不会查看此表。