7

70 個のテーブルで構成される運用 Postgresql データベースがあります。それらのいくつかは非常に大きく、いくつかは小さいです。そして、ローカル マシンにローカルの Postgresql データベースがあります。ローカル データベース テーブルのコンテンツの一部を本番環境のものと同じにしたいと考えています。運用データベースでpgAdminを使用していくつかのテーブルをバックアップし、ローカルマシンで復元しようとすると、制約エラーが発生しました。たとえば、テーブルAにはテーブルBへの外部キーがあるためです。

運用データベースからいくつかのテーブルをコピーし、既にスキーマとテーブルがあり、制約エラーなしでローカル マシンに正常に復元するにはどうすればよいですか?

Ps 一部のテーブルが非常に大きいため、すべての運用データベースをダンプすることはできませんでした。

4

3 に答える 3

1

完全な本番データベースをダンプしますが、大きなテーブルの場合はデータはありません:

$ pg_dump -t <VERY_BIG_TABLE_NAME> -s

データも必要な場合は、-sオプションを避けてください。これを 70 回繰り返す必要があるため、より迅速な解決策はテーブルをスキーマに分割することです。

$ pg_dump -n <SCHEMA_NAME_WITH_VERY_BIG_TABLES> -s
$ pg_dump -n <SCHEMA_NAME_WITH_SMALL_TABLES>
于 2012-08-21T11:57:11.963 に答える
0

理解したかどうかはわかりませんが、制約チェックエラーが発生した場合は、外部キー制約を無効にし、テーブルを復元して再度有効にすることができます。

于 2012-08-21T11:48:22.163 に答える
0
  1. ローカル データベースにテーブル構造を再作成しますが、問題のDEFERRABLE INITIALLY DEFERREDある外部キーにオプションを追加しますCONSTRAINT
  2. pg_dump を使用して、選択したテーブルデータを本番 DB からファイルにダンプし、最初に次のように書き込みますBEGIN;。ファイルの最後に追加: UPDATE TABLE problem_no_1 SET fkey_column = NULL;問題を引き起こすすべてのFK列に対して、そしてもちろんCOMMIT;最後に
  3. このファイルをローカル DB で実行します。
于 2012-08-21T13:05:22.327 に答える