web-dev-qa-db-ja.com

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

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

私が読んだこととそれが間違っている可能性があることから、良いPostgreSQLブログを見つけることは困難でしたので、私にいくつかお勧めします。バックアップとSlonyを信頼できるように、このアプリの動作を理解する必要があります。レプリケーション。 customsを選択しているときにdirectorytar、およびOID形式でPgadminIIIから取得したバックアップを開発者に復元してもらったが、そのうちの2つは失敗したと述べたt load、tarは実行しましたが、データではなくディレクトリのみでした。私は今とても混乱しています。

  1. PGAdminIIIを使用していますが、pg_dumpおよびpg_dumpallオプションがあります。バックアップしたいすべてアップこのデータベースをどこかにテストして復元し、必要なすべてのデータとバックアップが正常であることを確認します。結局、自動復元スクリプトを書きたいのですが、一度に1日ずつです。

pg_dumpallには、すべてをバックアップするはずの-globalsオプションがあるようですが、pg_dumpallのヘルプには、-g, --globals-only dump only global objects, no databasesオプションではなく--globalsが表示されます。

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

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

私はPostgreSQLサーバーを持っていましたが、アプリがデフォルトでOIDsをバックアップしない理由を理解することはできません!それはあなたが望む時間の99.9%のようです。

UPDATE 1:

Postgres documentation は、私が探していたglobalsオプションがこのバージョンのデフォルトのオプションであるように見えますが、それでも-oオプションが必要です。誰かが、必要なすべてのものを使用して単一のデータベースを別の場所に復元するコマンドの例を確認または提供できる場合は、感謝します。

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

49
Ali Razeghi

Pg_dumpallを使用して、PostgreSQLクラスタ全体をダンプできます。これがallデータベースと単一クラスターのすべてのグローバルです。サーバーのコマンドラインから、次のようにします。 (鉱山は、デフォルトのポートではなく、ポート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オプションを使用する必要があります

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