Postgresql-データベースをバックアップし、別の所有者に復元しますか?


83

次のコマンドを使用して、別のサーバー上のデータベースでバックアップを実行しましたが、必要な役割とは異なります。

pg_dump -Fc db_name -f db_name.dump

次に、データベースを復元する必要がある別のサーバーにバックアップをコピーしましたが、そのデータベースに使用されたそのような所有者はありません。データベースに所有者owner1がいるとしましょう。しかし、別のサーバーには私だけがいてowner2、そのデータベースを復元して所有者を変更する必要があります。

復元時に別のサーバーで行ったこと:

createdb -p 5433 -T template0 db_name 
pg_restore -p 5433 --role=owner2 -d db_name db_name.dump

しかし、復元を実行すると、次のエラーが発生します。

pg_restore: [archiver (db)] could not execute query: ERROR:  role "owner1" does not exist

所有者を変更するように指定するにはどうすればよいですか?それとも不可能ですか?


1
ほかに--no-owner受け入れ答えで提案されているように、あなたはまた、必要があるかもしれません--no-privileges。参照してくださいこの回答
mivk

回答:


130

--no-ownerこのオプションを使用する必要があります。これpg_restoreにより、オブジェクトの所有権を元の所有者に設定しようとするのをやめます。代わりに、オブジェクトはによって指定されたユーザーによって所有されます--role

createdb -p 5433 -T template0 db_name 
pg_restore -p 5433 --no-owner --role=owner2 -d db_name db_name.dump

pg_restore doc


14
pg_dump --no-ownerまた、それを行う必要があります
ニックバーンズ

10
私の好みは、復元するまでこれらの種類の決定を延期することです。ダンプ段階で行うと、エクスポートしないと気が変わってしまいます。あなたは本当になどその欠落している役割を作成しているべきであると判断する場合にはオプションが開いたままになっていることを復元する手段でそれをやって
ゲイリー

1
したがって、所有者を変更したい場合は、所有者なしでバックアップする必要がありますか?原因復元時に所有者を変更できると思いました。しかし、たとえ設定--role別の所有者に、それはまだ元の所有者を使用しようとしていた(しかし、私は使用しませんでした--no-owner
Andrius

2
@Andrius:バックアップを変更する必要はありません。Garyの答えで問題が解決するはずです
Nick Barnes

5
このトピックに関するすべての投稿を見ると、少なくとも復元中は、このアプローチでは新しい役割の所有者がスーパーユーザーである必要があるという事実をスキップしているようです。その後、すべてが機能します
chrismarx 2018年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.