小编Rob*_*eph的帖子

Postgres:SET NOT NULL 如何比 CHECK 约束“更有效”

PostgreSQL docs for Constraints 中,它说

非空约束在功能上等同于创建检查约束CHECK (column_name IS NOT NULL),但在 PostgreSQL 中创建显式非空约束更有效。

我很好奇

  • “更高效”究竟是什么意思?
  • 使用CHECK (column_name IS NOT NULL)而不是有SET NOT NULL什么危害?

我希望能够添加一个NOT VALID CHECK约束并单独验证它(因此AccessExclusiveLock仅在添加约束时保留一小段时间,然后ShareUpdateExclusiveLock为更长的验证步骤保留a ):

ALTER TABLE table_name
  ADD CONSTRAINT column_constraint
  CHECK (column_name IS NOT NULL)
  NOT VALID;
ALTER TABLE table_name
  VALIDATE CONSTRAINT column_constraint;
Run Code Online (Sandbox Code Playgroud)

代替:

ALTER TABLE table_name
  ALTER COLUMN column_name
  SET NOT NULL;
Run Code Online (Sandbox Code Playgroud)

postgresql check-constraints postgresql-9.5

22
推荐指数
1
解决办法
2315
查看次数