我在服务器中有三个postgresql
个数据库:db1
,db2
,db3
。现在,我想将每个数据库中的表保存到新的数据库dbnew
,并将其与schemas
区分开来。这意味着此数据库中有三个模式dbnew.db1
,dbnew.db2
,dbnew.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
,它也无法使用。
答案 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;
现在对其他两个数据库脚本执行相同的操作。