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 |
希望这可以帮助。