タグ付けされた質問 「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前者の前に読み込まれない場合、エラーが発生します。 以下は、一度ダンプするpg_dumpと復元できないデータベースを生成するSSCCEです。 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のドキュメント、それは言います 非ヌル制約は、機能的にチェック制約の作成と同等です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;
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.