更改PostgreSQL数据库及其表的所有者的最佳方法是什么?

时间:2014-05-29 12:27:34

标签: postgresql

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

我读了这个解决方案:

Modify OWNER on all tables simultaneously in PostgreSQL

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

喜欢这篇文章:

REASSIGN OWNED BY for 1 specified database

我不会改变所有者postgres,这是现在最好的方式吗?

提前谢谢

2 个答案:

答案 0 :(得分:10)

根据manual

  

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

似乎符合您的要求,但它也说该命令会影响表空间(不是特定于当前数据库)。

您链接的第二个SO答案适用于拥有系统目录的postgres用户的特殊情况。你不能改变这些的所有权。

答案 1 :(得分:7)

我想到的两种方法是:

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

希望这有帮助。