我必须将多个表从一个远程数据库移动到 PostgreSQL 中的另一个数据库。
据我了解,唯一的方法是通过pg_dump
.
pg_dump -h <source_db_host> -U <source_db_user> -d <source_db_name> -f database_dump.sql
psql -h <target_db_host> -U <target_db_user> -d <target_db_name> -f database_dump.sql
但是,它失败了,因为目标数据库中的架构与源数据库中的架构不同,因此我收到一条错误消息,表明源数据库中不存在特定架构。
有没有办法更改目标架构?
有没有其他更简单的方法来传输数据集?
pg_dump
没有抑制模式名称的选项。(这可能会导致各种复杂情况。)旧版本通过设置搜索路径进行操作,但现在,表名是模式限定的。如果可能,您可以在转储之前适当地重命名源数据库中的模式。(后来重命名回来。)
或者首先在目标数据库中创建缺少的架构:
然后使用您拥有的命令。恢复所有表后,您可以简单地将表移动到不同的架构:
这是一个廉价的操作(除非两个模式使用不同的模式
TABLESPACE
- 默认情况下它们不会。)手册:old_schema
完成后删除暂存架构。或者您可以使用您选择的编辑器来破解转储以更改架构。我会
vim
使用\s
(替代)命令来做到这一点。照顾好辅助对象并保持引用完整。这是一个示例sed
:还有许多其他解决方法。有关的: