Postgresql 使用不同于 postgres 的用户导入转储
Posted
技术标签:
【中文标题】Postgresql 使用不同于 postgres 的用户导入转储【英文标题】:Postgresql Import dump with user dfferent from postgres 【发布时间】:2021-04-17 06:10:11 【问题描述】:我正在尝试将我的数据库从生产机器备份到备用机器。
我的生产机器是debian(未指定版本)发行版
我的备用机是 ubuntu 20.10 发行版
在互联网上进行了一些阅读之后,这是我能够完成的事情
pg_dump -h 123.123.123.123 -p 5432 my_db > my_db.bak -> 检查 psql到目前为止一切顺利
用我的 sqlworkbench 连接到 db -> 检查 使用导入的表 -> 嗯,不检查问题在于表和序列的所有权。导入时,postgres 是它们的所有者,但我希望 my_db_backup 作为所有者 insted。
作为一种解决方法,我已经尝试过
将表 xxx 所有者更改为 my_db_backup; - > 检查每个表 如果存在 xxx OWNER TO my_db_backup,则更改序列; -> 需要很长时间,无法完成;最后阶段(更改所有权)的命令是
psql finalize.sql 是 我错过了什么? 我宁愿直接使用正确的所有者导入,而不是之后更改所有者,但只要我可以更改 my_db 中的所有对象,这仍然可以接受 tnx 寻求帮助\connect my_db;
ALTER TABLE xxx OWNER TO my_db_backup;
ALTER SEQUENCE IF EXISTS seq_xxx OWNER TO my_db_backup; -- this takes forever
【问题讨论】:
我不明白您为什么要更改备用所有对象的所有权。为什么不让它归同一所有者所有? 【参考方案1】:我终于能够使用不同的用户完成导入,如下所示
psql -U my_db_backup < my_db.bak
为了避免询问密码,我不得不像这样在 pg_hba.conf 中输入一个条目
local my_db my_db_backup trust
为了避免在 pg_dump 期间请求密码,我不得不在我的生产机器中添加这个条目
host my_db postgres 456.456.456.456/32 trust
其中 456.456.456.456 id 是备用机器的 ip。
我还必须更改一点 pg_dump 以避免不同用户导入时出错
pg_dump -h 123.123.123.123 -p 5432 --no-owner --no-acl my_db > my_db.bak
所以完整的脚本看起来像
pg_dump -h 123.123.123.123 -p 5432 --no-owner --no-acl my_db > my_db.bak
psql < createDatabase.sql
psql -U my_db_backup < my_db.bak
编辑:要让任何用户都可以使用该脚本,需要做一些事情
pg_dump -h 123.123.123.123 -p 5432 -U postgres --no-owner --no-acl -w my_db > my_db.bak
psql -U postgres < createDatabase.sql
psql -U my_db_backup < my_db.bak
添加 -U postgres 只是因为 pg_dump 尝试使用当前用户登录,所以如果您以 root 身份运行脚本,例如,pg_dump 和 psql 将尝试以 root 身份登录,显然会失败。
另一件事是使 pg_dump 不要求输入密码所需的 -w 选项。
【讨论】:
以上是关于Postgresql 使用不同于 postgres 的用户导入转储的主要内容,如果未能解决你的问题,请参考以下文章