動作する完全なPostgreSQL DBバックアップとテストを取得する方法


45

MS SQL Serverの場合と同じようにPostgresの完全なバックアップを作成し、孤立したユーザーの世話をする方法について明確な答えが得られることを望んでいました。

私が読んだことから、それは間違っている可能性がありますが、良いPostgreSQLブログを見つけることは挑戦的でしたので、私にいくつかをお勧めしてくださいレプリケーション。開発者customdirectorytarを選択してPgadminIIIから取得したバックアップを復元し、OIDs を選択してフォーマットしましたが、2つはロードされtarませんでしたが、データではなくディレクトリのみでしたと彼は言い​​ました。今は本当に混乱しています。

  1. 私はPGAdminIIIを使用していますが、オプションがpg_dumpありpg_dumpallます。このデータベースをどこかでテスト復元するために必要なすべてのものをバックアップし、必要なすべてのデータとバックアップが適切であることを確認したいと思います。最終的には、一度に1日に1回、自動復元スクリプトを書きたいと思います。

pg_dumpall明らかに-globalsすべてをバックアップすることになっているオプションがありますが、ヘルプはオプションではなくをpg_dumpall示して-g, --globals-only dump only global objects, no databases--globalsます。

pg_dumpall少なくとも外部キーをバックアップすると思っていましたが、それでも「オプション」のようです。ドキュメントによれば、外部キーをバックアップpg_dumpallする-oオプションを使用する必要がある場合でも、外部キーをバックアップしたくない時期は本当に想像できません。これはデフォルトオプションとしてより理にかなっています。

  1. 孤立したユーザーをどのように処理し、すべてが揃っているかを検証するにはどうすればよいですか?実際にバックアップファイルを別のサーバーに復元し、すべてが機能することを確認したいと思います。PostgreSQLで実際のバックアップを作成して復元する方法について誰かが何か提案をしてくれたら、とても感謝しています。

PostgreSQLサーバーがありましたが、なぜアプリがOIDデフォルトでsをバックアップしないのか、まだ推測できません!あなたがそれを望むだろう時間の99.9%のようです。

更新1:

Postgresのドキュメントでは、globals私が探していたオプションはこのバージョンのデフォルトオプションのようですが、それでも-oオプションが必要であると述べています。誰かが必要なすべてを備えた単一のデータベースを別の場所に復元するためのコマンドを確認したり、私にサンプルを提供したりできるなら、ありがたいです。

編集:サイトから質問を編集して、この質問の一意性を示すように求められます。この質問により、問題が発生し、バックアップのOID、グローバルと非グローバルの違い、およびバックアップが適切であるかどうかを確認するための復元推奨事項のテストが明確になります。答えがあったので、cronジョブを使用してPostgresでバックアップ、グローバル/ OIDの把握、およびテスト復元プロセスを毎晩開始することができました。助けてくれてありがとう!


回答:


58

pg_dumpallを使用して、PostgreSQLクラスター全体をダンプできます。これが、単一クラスターのすべてのデータベースとすべてのグローバルです。サーバーのコマンドラインから、このようなことをします。(私のポートはデフォルトのポートではなくポート5433でリッスンしています。)--cleanオプションは必要な場合と必要ない場合があります。

$ pg_dumpall -U postgres -h localhost -p 5433 --clean --file=dump.sql

これには、ユーザーとグループ、表領域などに関するグローバルが含まれます。

単一のデータベースをバックアップしてスクラッチサーバーに移動する場合、pg_dumpでデータベースをダンプし、次のいずれかでグローバルをダンプします

  • pg_dumpall --globals-only、 または
  • pg_dumpall --roles-only (ロールのみが必要な場合)

このような。

$ pg_dump -U postgres -h localhost -p 5433 --clean --file=sandbox.sql sandbox
$ pg_dumpall -U postgres -h localhost -p 5433 --clean --globals-only --file=globals.sql

出力は単なるテキストファイルです。

これらのファイルを別のサーバーに移動した後、最初にグローバルをロードし、次にデータベースダンプをロードします。

$ psql -U postgres -h localhost -p 5433 < globals.sql
$ psql -U postgres -h localhost -p 5433 < sandbox.sql

pg_dumpallは少なくとも外部キーをバックアップすると思っていましたが、それでも「オプション」のようです。によると:http : //www.postgresql.org/docs/9.1/static/app-pg-dumpall.html pg_dumpallを使用しても、外部キーをバックアップするには-oオプションを使用する必要があります

いいえ、その参照には、「アプリケーションが何らかの方法で(たとえば、外部キー制約で)OID列を参照する場合にこのオプションを使用します。それ以外の場合、このオプションは使用しないでください。」(エンファシスが追加されました。)アプリケーションがOID列を参照する可能性は低いと思います。「外部キーをバックアップする」ためにこのオプションを使用する必要はありません。(エディターまたはファイルビューアーでダンプファイルを読み取ります。)


3
sandbox.sqlがインポートされている行にデータベース名がありませんか?psql -U postgres -h localhost -p 5433 sandbox < sandbox.sql
SebK

それはそれを見てpg_dumpall、9.5バージョンで正しく動作しませんNULL使用した場合の値COPY。私はこのような多くのエラーを取得:psql:/tmp/dumpall.sql:4133559: invalid command \N psql:/tmp/dumpall.sql:4133560: invalid command \.使用してPostgresの10に戻ってインポートする場合psql -f /tmp/dumpall.sql
piotrekkrを
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.