Questions tagged «check-constraints»

2
恢复转储时禁用所有约束和表检查
我已经获得了PostgreSQL数据库的转储,其中包括: pg_dump -U user-name -d db-name -f dumpfile 然后我继续使用以下命令在另一个数据库中还原: psql X -U postgres -d db-name-b -f dumpfile 我的问题是数据库包含引用约束,检查和触发器,并且其中某些(特别是看起来是检查的)约束在恢复期间失败,因为未按照导致遵守这些检查的顺序来加载信息。例如,在表中插入行可能与CHECK调用plpgsql函数检查条件是否存在于其他不相关的表中的函数相关联。如果后一个表未psql在前一个表之前加载,则会发生错误。 以下是产生这样的数据库的SSCCE,该数据库一旦被转储pg_dump就无法恢复: CREATE OR REPLACE FUNCTION fail_if_b_empty () RETURNS BOOLEAN AS $$ SELECT EXISTS (SELECT 1 FROM b) $$ LANGUAGE SQL; CREATE TABLE IF NOT EXISTS a ( i INTEGER NOT NULL ); …

1
Postgres:SET NOT NULL如何比CHECK约束“更有效”
在PostgreSQL文档Constraints中,它说 非空约束在功能上等同于创建检查约束CHECK (column_name IS NOT NULL),但是在PostgreSQL中,创建显式非空约束更为有效。 我很好奇 “更有效”到底是什么意思? 使用CHECK (column_name IS NOT NULL)代替的不利之处是SET NOT NULL什么? 我希望能够添加一个NOT VALID CHECK约束并分别对其进行验证(因此,AccessExclusiveLock对于添加约束,该约束仅保留很短的时间,然后ShareUpdateExclusiveLock对于较长的验证步骤,将其保持一段时间): ALTER TABLE table_name ADD CONSTRAINT column_constraint CHECK (column_name IS NOT NULL) NOT VALID; ALTER TABLE table_name VALIDATE CONSTRAINT column_constraint; 代替: ALTER TABLE table_name ALTER COLUMN column_name SET NOT NULL;
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.