我正在尝试更改 PostgreSQL 数据库(版本 > 8.2)及其表的所有者。
我读到了这个解决方案:
但是,这是现在最好的方法吗?似乎有一个函数 REASSIGN OWNED 更好,但这个函数会更改由 old_role 拥有的每个数据库,对吧?我只想更改一个数据库。
就像这篇帖子中所述:
REASSIGN OWNED BY 用于指定的 1 个数据库
我不打算更改 postgres 所拥有的所有者,这是现在最好的方法吗?
提前致谢
我正在尝试更改 PostgreSQL 数据库(版本 > 8.2)及其表的所有者。
我读到了这个解决方案:
但是,这是现在最好的方法吗?似乎有一个函数 REASSIGN OWNED 更好,但这个函数会更改由 old_role 拥有的每个数据库,对吧?我只想更改一个数据库。
就像这篇帖子中所述:
REASSIGN OWNED BY 用于指定的 1 个数据库
我不打算更改 postgres 所拥有的所有者,这是现在最好的方法吗?
提前致谢
这似乎满足您的要求,尽管它还指出该命令会影响表空间(表空间不特定于当前数据库)。由于 REASSIGN OWNED 不会影响其他数据库中的对象,因此通常需要在每个数据库中执行此命令。
我能想到的两种方法是:
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
希望这可以帮助到你。