我发现this非常相似的问题,但所有答案都以“选择”语句开头。我想检查一个字符串是否包含在一个包含大约30个其他字符串的常量数组中。我可以写一个很长的x == a OR x == b OR...
声明,但我认为可能会有更清洁的方式。
因此,这不能用作约束检查:SELECT language = ANY ('{"en", "pt", "es", "fr"}'::text[])
答案 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';
甚至不会查看此表。