web-dev-qa-db-ja.com

postgresql:クラスタの役割をダンプして復元するにはどうすればよいですか?

役割はクラスターのどこに保存されますか?どのようにダンプしますか?

私はデータベースのpg_dumpを実行してから、それを別のクラスターにロードしましたが、次のようなエラーがたくさん発生します。

psql:mydump.sql:3621: ERROR:  role "myrole" does not exist 

したがって、私のdbのダンプにはロールが含まれていないようです。 'postgres' dbをダンプしてみましたが、そこに役割も表示されません。

pg_dumpall --roles-onlyを使用する必要がありますか?

Postgresqlバージョン8.4.8および9.1.4 OS:Ubuntu 11.04 Natty

29
Rob Bednark

CREATE ROLEドキュメント から:

ロールはデータベースクラスターレベルで定義されるため、クラスター内のすべてのデータベースで有効です。

pg_dumpは単一のデータベースをダンプするため、そのユーティリティを使用してロールを抽出することはできません。提案したpg_dumpall --roles-onlyコマンドが機能しますが、出力をフィルタリングして、必要なロールのみが新しいクラスターで作成されるようにする必要がある場合があります。

ロールはpg_authidカタログに格納されます。これは、PostgreSQLインストールのdata/global/サブフォルダーに、他のクラスター全体のテーブルとともに物理的に格納されます。 pg_authidビューを使用してpg_rolesの内容をクエリできます。

[〜#〜]注[〜#〜]:ロールをダンプするにはスーパーユーザー権限が必要です。そうしないと、pg_authidSELECTでアクセスが拒否されます。スーパーユーザーがSELECTの権限を付与しても、同じエラーが発生します。ただし、この場合は、pg_authidを直接クエリしてロールを一覧表示し、COPYをファイルに照会して、必要なCREATE ROLEおよびALTER ROLEステートメントを作成するための魔法をかけることができます。 。

39
dezso