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

Best way to change the owner of a PostgreSQL database and their tables?

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

我读了这个解决方案:

在PostgreSQL中同时修改所有表上的OWNER

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

喜欢这篇文章:

为1个指定的数据库重新设置所有者

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

先感谢您


根据手册:

Because REASSIGN OWNED does not affect objects within other databases, it is usually necessary to execute this command in each database

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

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


我想到的两种方法是:

1)首先更改数据库名称,然后右键快速脚本将当前表的所有者更改为旧表。

1
2
3
4
5
ALTER DATABASE <dbname> OWNER TO <newowner>;
\o altertable.sql
SELECT 'ALTER TABLE ' || TABLE_NAME || ' OWNER TO <newowner>; ' FROM information_schema WHERE table_schema =  AND table_catalog = '<dbname>';
\o
\i altertable.sql

以上将生成您的命令,然后将它们弹出到文件中并执行它。

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

1
2
3
4
pg_dump -Fp -f dbbackup.dmp <dbname>
vi dbbackup.dmp
:%s/oldowner/newowner/g
save AND exit

希望这可以帮助。