在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)