如何更改 PostgreSql 数据库的所有者?
Posted
技术标签:
【中文标题】如何更改 PostgreSql 数据库的所有者?【英文标题】:How to change owner of PostgreSql database? 【发布时间】:2011-05-17 19:59:15 【问题描述】:我需要更改 PostgreSql 数据库的所有者。
如何在 phppgadmin 中更改 PostgreSql 数据库的所有者?
【问题讨论】:
【参考方案1】:Frank Heikens 的回答只会更新数据库所有权。通常,您还想更新包含对象(包括表)的所有权。从 Postgres 8.2 开始,REASSIGN OWNED 可用于简化此任务。
重要编辑!
当原始角色为postgres
时,切勿使用REASSIGN OWNED
,这可能会损坏您的整个数据库实例。该命令将使用新所有者更新所有对象,包括系统资源(postgres0、postgres1 等)
首先,连接到管理数据库并更新数据库所有权:
psql
postgres=# REASSIGN OWNED BY old_name TO new_name;
这是在 Frank 的回答中提供的 ALTER DATABASE
命令的全局等效项,但它不会更新特定数据库,而是更改“旧名称”拥有的所有数据库的所有权。
下一步是更新每个数据库的表所有权:
psql old_name_db
old_name_db=# REASSIGN OWNED BY old_name TO new_name;
这必须在 'old_name' 拥有的每个 DB 上执行。该命令将更新数据库中所有表的所有权。
【讨论】:
不错! ...除非所有者是postgres
,否则他自己... 学到了很多东西。
问题是它不会更改单个数据库的所有者,而是用新的所有者替换所有地方的所有者。
上述 REASSIGN OWNED 会将同一实例中的所有数据库(如果有多个数据库)更改为新角色。
对于REASSIGN OWNED
的替代品(通常因为您的所有者是postgres
),请参阅***.com/a/2686185/1839209 中的sn-ps。【参考方案2】:
ALTER DATABASE name OWNER TO new_owner;
更多详情请见the Postgresql manual's entry on this。
【讨论】:
为了完整起见,这里是手册中记录这一点的部分:postgresql.org/docs/current/static/sql-alterdatabase.html @mArtinko5MB:这不可能,ALTER 不会删除数据库。 @mArtinko5MB:同样不可能,ALTER TABLE 不会删除表。向我们展示您的 SQL,您的语句中的某些内容严重损坏。 注意,数据库中的所有表和序列仍将分配给原始所有者。ERROR: must be member of role ...
= DOES NOT WORK WITH RDS以上是关于如何更改 PostgreSql 数据库的所有者?的主要内容,如果未能解决你的问题,请参考以下文章
Heroku 和 Django 组合中的 Postgresql 更改与共享数据库