如何更改 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 数据库的所有者?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PostgreSQL 中更改视图

如何在一次操作中更改多个 PostgreSQL 表的架构?

Heroku 和 Django 组合中的 Postgresql 更改与共享数据库

如何设置或更改PostgreSQL数据目录位置

postgresql 线同步pg_rewind使用报错及注意

PostgreSQL:将所有权限授予 PostgreSQL 数据库上的用户