役割はクラスターのどこに保存されますか?どのようにダンプしますか?
私はデータベースの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
ロールはデータベースクラスターレベルで定義されるため、クラスター内のすべてのデータベースで有効です。
pg_dump
は単一のデータベースをダンプするため、そのユーティリティを使用してロールを抽出することはできません。提案したpg_dumpall --roles-only
コマンドが機能しますが、出力をフィルタリングして、必要なロールのみが新しいクラスターで作成されるようにする必要がある場合があります。
ロールはpg_authid
カタログに格納されます。これは、PostgreSQLインストールのdata/global/
サブフォルダーに、他のクラスター全体のテーブルとともに物理的に格納されます。 pg_authid
ビューを使用してpg_roles
の内容をクエリできます。
[〜#〜]注[〜#〜]:ロールをダンプするにはスーパーユーザー権限が必要です。そうしないと、pg_authid
のSELECT
でアクセスが拒否されます。スーパーユーザーがSELECT
の権限を付与しても、同じエラーが発生します。ただし、この場合は、pg_authid
を直接クエリしてロールを一覧表示し、COPY
をファイルに照会して、必要なCREATE ROLE
およびALTER ROLE
ステートメントを作成するための魔法をかけることができます。 。