試してみてpg_dump
、別のマシンでSQLをインポートしてデータベースにデータを入力しようとしました。
CREATE TABLE
ERROR: role "prod" does not exist
CREATE TABLE
ERROR: role "prod" does not exist
CREATE TABLE
ERROR: role "prod" does not exist
CREATE TABLE
ERROR: role "prod" does not exist
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
WARNING: no privileges could be revoked for "public"
REVOKE
ERROR: role "postgres" does not exist
ERROR: role "postgres" does not exist
WARNING: no privileges were granted for "public"
GRANT
つまり、私のuser
情報roles
はgrant
pg_dump
一方、私たちはpg_dumpall
、私が読んだ会話、これではどこにもたどり着けないのでしょうか?
質問
- データベースのバックアップにはどちらを使用すればよいですか?pg_dump
またはpg_dumpall
?
- 要件は、バックアップを取得でき、どのマシンにもインポートでき、問題なく動作することです。
ベストアンサー1
通常のプロセスは次のとおりです。
pg_dumpall --globals-only
ユーザー/ロールなどを取得するpg_dump -Fc
各データベースに対して、 で使用するのに適した圧縮ダンプを取得しますpg_restore
。
はい、これはちょっと残念です。出力をダンプにpg_dump
埋め込む方法を教えたいのですが、残念ながら現時点ではその方法がわからないため、自分で行う必要があります。pg_dumpall
-Fc
PostgreSQL 11 までは、このアプローチには厄介な警告もありました。 、pg_dump
、モードpg_dumpall
のどちらも、 のユーザーアクセスを に--globals-only
ダンプしませんでした。そのため、カタログからそれらを抽出するか、 をフィルターする必要がありました。これは PostgreSQL 11 で修正されました。GRANT
DATABASE
pg_dumpall
リリースノート。
pg_dump がデータベースの内容だけでなくプロパティもダンプするようにします (Haribabu Kommi)
GRANT
以前は、データベース レベルの/REVOKE
権限や変数設定などのデータベース自体の属性はALTER DATABASE SET
、 によってのみダンプされていましたpg_dumpall
。現在pg_dump --create
、とpg_restore --create
は、データベース内のオブジェクトに加えて、これらのデータベース プロパティを復元します。pg_dumpall -g
現在、 はロールおよびテーブルスペース関連の属性のみをダンプします。pg_dumpall
の完全な出力 (-g なし) は変更されていません。
また、物理バックアップ、pg_basebackup
PgBarman、WAL アーカイブ、PITR などについても知っておく必要があります。これらは、分単位または個々のトランザクションに至るまで、はるかに「きめ細かい」リカバリを提供します。欠点は、より多くのスペースを占有し、同じプラットフォーム上の同じ PostgreSQL バージョンにのみ復元可能であり、すべてのデータベースのすべてのテーブルをバックアップし、何も除外できないことです。