Table-Postgres 中的宽约束

Table-wide constraint in Postgres

我是 Postgres 的新手。有什么方法可以为 table 编写一个约束,检查所有字符字段并测试以确保没有前导字符或尾随字符(如果字段中有任何值)?

这样我在编写约束时就不必逐条列出每个字符字段。

谢谢!

不,据我所知,你不能写这样的约束。

您可以做的是 create a DOMAIN 具有检查功能,然后将所有 table 列设为该域类型。假设你指的字符是空格:

CREATE DOMAIN varchar_no_spaces AS varchar
CHECK ( left(VALUE, 1) <> ' ' AND right(VALUE, 1) <> ' ') );

这个 CHECK 表达式有很多变体,包括正则表达式和使用不同或多个字符。有关更多选项,请参阅 string functions

然后:

CREATE TABLE mytable (
  f1     varchar_no_spaces,
  ...
);

有效地将约束检查中继到域级别。