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

for*_*vas 6 postgresql

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

我读了这个解决方案:

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

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

喜欢这篇文章:

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

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

先感谢您

har*_*mic 10

根据手册:

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

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

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


d1l*_*ger 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
Run Code Online (Sandbox Code Playgroud)

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

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

pg_dump -Fp -f dbbackup.dmp <dbname>
vi dbbackup.dmp
:%s/oldowner/newowner/g
save and exit
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.