Postgresql:将不同的数据库复制到一个具有不同模式的数据库中

时间:2017-07-19 06:20:27

标签: database postgresql

我在服务器中有三个postgresql个数据库:db1db2db3。现在,我想将每个数据库中的表保存到新的数据库dbnew,并将其与schemas区分开来。这意味着此数据库中有三个模式dbnew.db1dbnew.db2dbnew.db3。实现它的最简单方法是什么?

(p.s。:我已将数据库转储到本地文件。)

我从@a_horse_with_no_name测试答案,它似乎有效,但有一个新问题如下:

如果在db1中有postgis之类的扩展程序,则我会db1加载psql并将public重命名为db1并创建名为public的新架构。我无法为postgis架构创建扩展public,因为它显示extension postgis already exists。但是,如果我使用命令\dx,则表明该扩展程序位于架构db1中,而不是dbnew中。即使我使用create EXTENSION postgis with schema public,它也无法使用。

2 个答案:

答案 0 :(得分:1)

基于backup / plain并使用psql恢复

我假设,创建了dbnew中的模式,并将模式权限设置为使用psql进行所有恢复的用户。

以某种方式创建sql文件(在pgadmin3中备份plain),生成的文件可以使用psql加载到dbnew数据库中,但是它们应该通过sed或grep传输,以便所有表名都获得模式前缀。

以某种方式我的意思是,从原始备份或首先将备份还原到临时数据库,如果它们还没有sql,并将它们备份为纯文本。

答案 1 :(得分:1)

假设所有表都存储在源数据库中的public模式

导入第一个转储(通过运行psql ... -f dumpfile.sql),然后将公共架构重命名为新名称:

alter schema schema public rename to db1;

然后重新创建公共架构:

create schema public;

现在对其他两个数据库脚本执行相同的操作。