如何更改PostgreSql数据库的所有者?


205

我需要更改PostgreSql数据库的所有者。

如何在phppgadmin中更改PostgreSql数据库的所有者?

Answers:


345
ALTER DATABASE name OWNER TO new_owner;

有关更多详细信息,请参见Postgresql手册上的条目


3
为了完整
起见

17
@ mArtinko5MB:这是不可能的,ALTER不会删除数据库。
Frank Heikens 2013年

17
@ mArtinko5MB:也不可能,ALTER TABLE不会删除该表。向我们展示您的SQL,您的语句中某些内容严重损坏。
Frank Heikens 2013年

18
注意,数据库内的所有表和序列仍将分配给原始所有者。
塞林

2
ERROR: must be member of role ...= 不能与RDS
一起

49

Frank Heikens的答案只会更新数据库所有权。通常,您还希望更新所包含对象(包括表)的所有权。从Postgres 8.2开始,可以使用REASSIGN OWNED简化此任务。

重要编辑!

REASSIGN OWNED原始角色为时不要使用postgres,这可能会损坏您的整个数据库实例。该命令将使用新的所有者更新所有对象,包括系统资源(postgres0,postgres1等)。


首先,连接到管理数据库并更新数据库所有权:

psql
postgres=# REASSIGN OWNED BY old_name TO new_name;

这相当于 ALTER DATABASE弗兰克答案中提供命令,但它不会更新特定的数据库,而是更改了“ old_name”拥有的所有数据库的所有权。

下一步是更新每个数据库的表所有权:

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

必须在“ old_name”拥有的每个数据库上执行此操作。该命令将更新数据库中所有表的所有权。


7
真好!……除非所有人是postgres,否则……。。。
克里斯(Chris)

1
问题在于它不会更改单个数据库的所有者,但是会用新数据库替换所有地方的所有者。
Michael003 '18

上面的REASSIGN OWNED将把同一实例中的所有数据库(如果有多个数据库)更改为新角色。
varun7447

要替代REASSIGN OWNED(通常是因为您的所有者是postgres),请参见stackoverflow.com/a/2686185/1839209中的代码片段。
Michael Herrmann
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.