【问题标题】:How to change owner of PostgreSql database?如何更改 PostgreSql 数据库的所有者?
【发布时间】:2011-05-17 19:59:15
【问题描述】:

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

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

【问题讨论】:

    标签: 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),请参阅stackoverflow.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
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-28
    • 2011-01-02
    • 1970-01-01
    相关资源
    最近更新 更多