我正在尝试更改PostgreSQL数据库(版本> 8.2)及其表格的所有者。
我读了这个解决方案:
Modify OWNER on all tables simultaneously in PostgreSQL
但这是最好的方法吗(对于PostgreSQL的最新版本)?似乎有一个REASSIGN OWNED函数更好,但是这个函数改变了 old_role 拥有的每个数据库,不是吗?我只希望它用于一个数据库。
喜欢这篇文章:
REASSIGN OWNED BY for 1 specified database
我不会改变所有者postgres,这是现在最好的方式吗?
提前谢谢
答案 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
希望这有帮助。