PostgreSqlデータベースの所有者を変更するには?


205

PostgreSqlデータベースの所有者を変更する必要があります。

phppgadminでPostgreSqlデータベースの所有者を変更する方法

回答:


345
ALTER DATABASE name OWNER TO new_owner;

詳細については、これに関するPostgresqlマニュアルのエントリを参照してください。


3
:完全を期すためにここにいるのドキュメントこのマニュアルの一部ですpostgresql.org/docs/current/static/sql-alterdatabase.html
a_horse_with_no_name

17
@ mArtinko5MB:それは不可能です。ALTERはデータベースをドロップしません。
Frank Heikens 2013年

17
@ mArtinko5MB:また、ALTER TABLEはテーブルをドロップしません。あなたのSQLを見せてください、あなたのステートメントで何かがひどく壊れています。
Frank Heikens 2013年

18
データベース内のすべてのテーブルとシーケンスは、引き続き元の所有者に割り当てられることに注意してください。
Cerin、

2
ERROR: must be member of role ...= RDS
では機能し

49

Frank Heikensの回答では、データベースの所有権のみが更新されます。多くの場合、含まれるオブジェクト(テーブルを含む)の所有権も更新します。Postgres 8.2以降、このタスクを簡略化するためにREASSIGN OWNEDが利用可能です。

重要な編集!

REASSIGN OWNED元のロールがの場合は使用しないでpostgresください。DBインスタンス全体が損傷する可能性があります。このコマンドは、システムリソース(postgres0、postgres1など)を含むすべてのオブジェクトを新しい所有者で更新します


まず、管理データベースに接続し、DBの所有権を更新します。

psql
postgres=# REASSIGN OWNED BY old_name TO new_name;

これは、ALTER DATABASEFrankの回答で提供されるコマンドのグローバルな同等物ですが、特定のDBを更新する代わりに、「old_name」が所有するすべてのDBの所有権を変更します。

次のステップは、各データベースのテーブル所有権を更新することです:

psql old_name_db
old_name_db=# REASSIGN OWNED BY old_name TO new_name;

これは、「old_name」が所有する各DBで実行する必要があります。このコマンドは、DB内のすべてのテーブルの所有権を更新します。


7
いいね!...所有者がpostgres自分でない限り...難しい方法を学んだ。
Chris

1
問題は、単一のデータベースの所有者を変更するのではなく、すべての場所の所有者を新しいデータベースに置き換えることです。
Michael003 2018年

上記のREASSIGN OWNEDは、同じインスタンス内のすべてのデータベース(複数のデータベースがある場合)を新しいロールに変更します。
varun7447

の代替手段REASSIGN OWNED(通常は所有者がであるpostgres)については、stackoverflow.com/a/2686185/1839209のスニペットを参照してください。
Michael Herrmann
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.