【问题标题】:Best way to change the owner of a PostgreSQL database and their tables?更改 PostgreSQL 数据库及其表的所有者的最佳方法是什么?
【发布时间】:2014-05-29 12:27:34
【问题描述】:

我正在尝试更改 PostgreSQL 数据库(版本 > 8.2)及其表的所有者。

我阅读了这个解决方案:

Modify OWNER on all tables simultaneously in PostgreSQL

但这是最好的方法吗(对于最新版本的 PostgreSQL)?似乎有一个更好的函数 REASSIGN OWNED,但是这个函数会更改 old_role 拥有的每个数据库,不是吗?我只想要一个数据库。

喜欢这篇文章:

REASSIGN OWNED BY for 1 specified database

我不打算更改所有者postgres,这是当今最好的方式?

提前谢谢你

【问题讨论】:

    标签: postgresql


    【解决方案1】:

    根据manual

    因为 REASSIGN OWNED 不会影响其他数据库中的对象,所以通常需要在每个数据库中执行此命令

    这似乎符合您的要求,尽管它还说该命令会影响表空间(并非特定于当前数据库)。

    您链接的第二个 SO 答案适用于 postgres 用户的特殊情况,该用户拥有系统目录。您无法更改这些内容的所有权。

    【讨论】:

    • psql -h 127.0.0.1 -U postgres -W -d mydatabase -c "REASSIGN OWNED BY role_A TO role_B;"它对我不起作用。它将所有数据库所有者从 role_A 更改为 role_B
    【解决方案2】:

    我想到的两种方法是:

    1) 首先更改数据库名称,然后也许可以修改一个快速脚本,将当前表的所有者更改为旧表。

    ALTER DATABASE <dbname> OWNER TO <newowner>;
    \o altertable.sql
    SELECT 'ALTER TABLE ' || table_name || ' OWNER TO <newowner>; ' FROM information_schema WHERE table_schema = <oldowner> and table_catalog = '<dbname>';
    \o
    \i altertable.sql
    

    上面会生成你的命令,然后将它们弹出到一个文件中并执行它。

    2) 另一种选择是使用 pg_dump 以纯文本模式转储数据库,然后使用搜索和替换更改适当的字符串:

    pg_dump -Fp -f dbbackup.dmp <dbname>
    vi dbbackup.dmp
    :%s/oldowner/newowner/g
    save and exit
    

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-08
      • 1970-01-01
      • 2015-10-09
      • 1970-01-01
      • 2011-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多