Postgresql从postgres导入带有用户dferent的转储



我正在字符串将数据库从生产机器备份到备用机器。

我的生产机器是debian(未指定版本(发行版

我的备用机器是ubuntu 20.10发行版

在互联网上读了一些之后,以下是我能够完成的

  • pg_dump-h 123.123.123.123-p 5432 my_db>my_db.bak->检查
  • psql<createDatebase.sql->选中此项,创建一个简单的删除/创建数据库mydb所有者mydbbackup
  • psql<my_db.back->检查

到目前为止很好

  • 与我的sqlworkbench连接到db->检查
  • 使用导入的表->嗯,不检查

问题在于表和序列的所有权。导入时,postgres是它们的所有者,但我希望my_db_backup作为所有者。

作为一种变通方法,我尝试了

  • 将表xxx所有者更改为my_db_backup;->检查每张表
  • 更改序列(如果存在(xxx OWNER TO my_db_backup->它需要很长时间,却无法完成

最后阶段(更改所有权(的命令是psql<finalize.sql

finalize.sql是

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

我错过了什么?

我更喜欢直接与正确的所有者导入,而不是在之后更改所有者,但只要我可以更改my_db 中的所有对象,这仍然是可以接受的

tnx的帮助

我终于能够用不同的用户完成导入,如下所示

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用户身份运行脚本,例如,root用户pg_dump和psql将尝试以root用户的身份登录,但显然会失败。

另一个是-w选项,它是使pg_dump不要求密码所必需的。

相关内容

  • 没有找到相关文章

最新更新