12

PostgreSQL v9.0を実行している(本番)DBサーバーとPostgreSQLv8.4を実行している開発マシンがあります。本番DBのダンプを取り、開発マシンで使用したいと思います。開発マシンでpostgresをアップグレードできません。

本番マシンで、次のコマンドを実行します。

pg_dump -f nvdls.db -F p -U nvdladmin nvdlstats

開発マシンで、次のコマンドを実行します。

pg_restore -d nvdlstats -U nvdladmin nvdls.db

そして、私はこのエラーを受け取りました:

pg_restore: [archiver] unsupported version (1.12) in file header

これは、ダンプ時にcustom、tar、plain_textのいずれの形式を選択したかに関係なく発生します。

オンラインで、開発マシンで新しいバージョンを使用する必要があることを示唆するディスカッションを1つ見つけました。pg_restore9.0バイナリを開発マシンにコピーするだけでこれを試しましたが、リンクの問題が原因で失敗します(予期しないことではありません)。

plain_textダンプを使用するポイントは、それが生の移植可能なSQLになることだと思いました。どうやらそうではありません。

9.0 DBを8.4インストールに組み込むにはどうすればよいですか?

4

5 に答える 5

29

pg_restoreは、「カスタム」形式で取得されたダンプを復元するためだけのものです。

「プレーンテキスト」ダンプを実行する場合は、psqlを使用して生成されたSQLスクリプトを実行する必要があります。

psql -f nvdls.db dbname username 
于 2011-01-05T00:30:22.897 に答える
5

pg_dump/pg_restoreを使用した9.0から8.4への移動はサポートされていません。前進のみがサポートされています。

ただし、通常は(データのみのダンプで)データを取得でき、場合によってはスキーマを取得できますが、ほとんどの場合、使用している機能によって異なります。

通常は、ターゲットバージョンのpg_dumpとpg_restoreを使用する必要があります。つまり、この場合、8.4のバイナリを使用する必要があります。ただし、同じバージョンのpg_dumpとpg_restoreを使用する必要があります。どちらのツールもネットワーク全体で正常に機能するため、バイナリをコピーする必要はありません。

また、a_horse_with_no_nameが言うように、平文モードでpg_dumpを使用する方がよい場合があります。これにより、必要に応じてダンプを手動で編集できます。特に、1つのスキーマのみのダンプ(-sを使用)と1つのデータのみのダンプを作成できます。スキーマダンプのみが編集を必要とする可能性があります。

于 2011-01-05T16:01:33.180 に答える
2

9.0データベースにbytea列が含まれている場合は、さらに大きな問題が発生します。

これらの列は、「16進」表現を使用してpg_dumpによってエクスポートされ、次のようにダンプファイルに表示されます。

SELECT pg_catalog.lowrite(0、'\ x0a2')

9.0より前のpostgresバックエンドのどのバージョンもbyteaの16進表現を取得できず、9.0側のpg_dumpにそれを使用しないように指示するオプションが見つかりません。データベースまたはサーバー全体のデフォルトの「bytea_output」設定をESCAPEに設定すると、pg_dumpによって無視されるように見えます。

ダンプファイルを後処理して、16進数でエンコードされたすべてのbytea値をエスケープされた値に実際に変更することは可能だと思いますが、byteaに通常保存されている種類のもの(画像、PDFなど)を追跡できないほど破損するリスクはありません。私を興奮させます。

于 2011-05-25T14:41:26.440 に答える
2

postgresqlを8.Xから9.2.4にアップグレードすることでこれを解決しました。Mac OS-Xでbrewを使用している場合は、-を使用します。

brew upgrade postgresql

これが完了したら、新しいpostgresインストールがパスの一番上にあることを確認してください。次のようになります(バージョンのインストールパスによって異なります)-

export PATH=/usr/local/Cellar/postgresql/9.2.4/bin:$PATH
于 2013-08-09T23:05:12.333 に答える
0

私も同じ問題を抱えていました。DBのエクスポート/インポートにはpgdumpとpsqlを使用しました。

1.PGPASSWORDを設定します

export PGPASSWORD='h0ld1tn0w';

2.pg_dumpを使用してDBをエクスポートします

pg_dump -h <<host>> -U <<username>> <<dbname>> > /opt/db.out 

/opt/db.outはダンプパスです。自分で指定できます。

3.次に、別のホストのPGPASSWORDを再度設定します。ホストが同じであるか、パスワードが同じである場合、これは必要ありません。

4.別のホストにdbをインポートします

psql -h <<host>> -U <<username>> -d <<dbname>> -f /opt/db.out

ユーザー名が異なる場合は、db.outファイルでローカルユーザー名を見つけて置き換えます。また、データではなく、ユーザー名が置き換えられていることを確認してください。

于 2016-10-19T08:20:37.163 に答える