postgresql:クラスターのロールをダンプおよび復元するにはどうすればよいですか?


27

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

dbのpg_dumpを実行し、それを別のクラスターにロードしましたが、これらのエラーがたくさん発生します。

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

だから明らかに私のデータベースのダンプにはロールが含まれていません。「postgres」データベースをダンプしようとしましたが、役割も表示されません。

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

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

回答:


37

CREATE ROLEドキュメントから:

ロールはデータベースクラスタレベルで定義されるため、クラスタ内のすべてのデータベースで有効であることに注意してください。

pg_dump単一のデータベースをダンプするため、そのユーティリティでロールを抽出することはできません。pg_dumpall --roles-onlyあなたはそれだけで必要な役割が新しいクラスタに作成されますので、その出力をフィルタリングする必要があるかもしれませんが-あなたが提案したコマンドは、作業を行います。

ロールはpg_authidカタログに保存されます。カタログはdata/global/、他のクラスター全体のテーブルと共に、PostgreSQLインストールのサブフォルダーに物理的に保存されます。ビューをpg_authid介してコンテンツを照会できますpg_roles

:ロールをダンプするにはスーパーユーザー権限が必要です。そうしないと、許可が拒否さSELECTれますpg_authid-スーパーユーザーがSELECT権限を付与した場合でも、同じエラーが発生します。ただし、この場合、ファイルにpg_authid直接クエリをCOPY実行してロールをリストし、魔法をかけて必要なCREATE ROLEand ALTER ROLEステートメントを作成できます。


すべての役割を復元する方法を追加できます(つまり、フィルタリングは不要です)。
イーサンファーマン

1
すべてのロールを復元するには、出力をコピーpg_dumpall --roles-onlyして目的のpsqlシェルに貼り付けます。または特定CREATE ROLEおよびALTER ROLEライン
フェルナンドFabreti
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.