web-dev-qa-db-ja.com

postgresバージョン間のpg_dumpカスタムフォーマット

Postgresのバージョン間でカスタムpg_dump形式がどれほど安定しているか疑問に思っていました。たとえば、Postgres 8.xで作成したカスタム形式のダンプをpostgres 9.xに復元できますか?

背景:

PostgreSQL DB内のすべての構成を含む仮想アプライアンスを構築しています。バックアップにSQL形式とカスタム形式のどちらを使用するかを決定する必要があります。アプライアンスが時間の経過とともに(数年)進化するので、新しいPostgreSQLバージョンを使用しますが、それでも多くの問題なしに古いバックアップを復元できる必要があります。

7
circus

私の経験では、フォーマットせずにpg_dumpを使用して、バージョン間でデータベースを問題なくバックアップおよび復元できます。これは、pg_dumpを使用して単にSQLファイルを生成する場合です。

pg_dump mydb > db.sql

ただし、オプションとして-Fcを使用する場合

$ pg_dump -Fc mydb > db.dump

ダンプファイルを復元できるのは、より新しい、つまりより新しいバージョンのPostgreSQLのみです。したがって、PostgreSQL 8.1でダンプファイルを作成した場合、pg_dumpを使用して同じファイルを復元できるのは、8.1以降のバージョンのPostgreSQLからのみです。

Plpgsqlやpostgisなどの同じ要素がソースサーバーに存在する場合、ターゲットサーバーに存在する必要のある他の要素がある可能性があります。

これが、pg_dumpのPostgresによる documentation です。

ここに関連する段落があります

Pg_dumpは新しいバージョンのPostgreSQLにデータを転送するために使用されるため、pg_dumpの出力は、pg_dumpのバージョンより新しいPostgreSQLサーバーのバージョンにロードされることが期待できます。 pg_dumpは、自身のバージョンより古いPostgreSQLサーバーからダンプすることもできます。 (現在、バージョン7.0に戻るサーバーがサポートされています。)ただし、pg_dumpは、それ自体のメジャーバージョンより新しいPostgreSQLサーバーからダンプできません。無効なダンプを作成するリスクを負うのではなく、試行を拒否します。また、pg_dumpの出力が古いメジャーバージョンのサーバーに読み込まれることは保証されていません。そのバージョンのサーバーからダンプが取得された場合でも同様です。古いサーバーにダンプファイルをロードするには、古いサーバーで理解されていない構文を削除するために、ダンプファイルを手動で編集する必要がある場合があります。

10
Craig Efrein