2

2 つの PostgreSQL データベース (開発データベースから運用データベースへのいくつかのテーブル) を同期する必要がある場合があります。

だから私はこのスクリプトを思いついた:

[...]
pg_dump -a -F tar -t table1 -t table2 -U user1 dbname1 | \
pg_restore -a -U user2 -d dbname2
[...]

問題は、これが新しく追加された行に対してのみ機能することです。PK 以外の列を編集すると、制約エラーが発生し、行が更新されません。ダンプされた行ごとに、それが宛先データベースに存在するかどうか (PK によって) を確認し、存在する場合は INSERT/COPY の前に削除する必要があります。

アドバイスをありがとう。

4

1 に答える 1

1

これを行う:

pg_dump -t table1 production_database > /tmp/old_production_database_table1.sql
pg_dump -t table1 devel_database > /tmp/devel_database_table1.sql
psql production_database
truncate table1
\i /tmp/devel_database_table1.sql
\i /tmp/old_production_database_table1.sql

2番目に重複する主キーエラーが多数発生し\iますが、必要な処理が実行されます。develのすべての行が更新され、develにないすべての行が更新または削除されません。

table1への参照がある場合は、インポート前にそれらを削除し、インポート後に再作成する必要があります。特に、、またはtable1への参照を確認してくださいon delete cascadeset nullset defaultのテーブルがある場合は、他のテーブルのデータが失われます。

于 2009-11-27T14:24:10.050 に答える