web-dev-qa-db-ja.com

外部キー制約のあるpg_dumpからの復元

pg_dumpからデータベースを復元すると、いくつかのエラーが生成され、その後、テーブル全体が無視されます。例:

ERROR:  insert or update on table "channelproducts" violates foreign key constraint "fk_Rails_dfaae373a5"
DETAIL:  Key (channel_id)=(1) is not present in table "channels".

興味深いことに、ロードのシーケンスのために、これらのすべてのインスタンスがポップアップしていることに気付きました。 channelschannelproductsの後にアルファベット順とファイル内の両方であり、親なしで子を作成する必要があるとpostgresが不満を言う理由を理解できます。

警告:外部キーはRails 4.2:ソースで問題を取り除くことができましたが、それでも実際には問題を解決できません...によって自動的に生成されています

バージョン:PostgreSQL 9.4.4。

データベーステーブルと列が既に作成されている場合、外部キー制約のケースでpsqlからどのように復元できますか?

9
Jerome

SET session_replication_role = replica; SQLファイルの先頭。これにより、データ挿入中の制約は無視されます。設定はセッションベースであるため、制約はこのスクリプトの外部でも引き続き機能します。

ただし、この設定がアクティブなときに一貫性のないデータを作成すると、postgresはそれらを保持します。制約は挿入/更新時にのみチェックされます。

このアプローチの長所と短所の詳細については、 https://www.endpoint.com/blog/2015/01/28/postgres-sessionreplication-role を参照してください。

6
achimh

空のテーブルを含む新しいデータベースを作成して、データベースを復元してください。問題はおそらくテーブル間の既存の関係にあります。

0
Suman Astani