我有一个postgres数据库,其中包含许多模式和每个模式中的许多表,并且这些表之间有一堆外键关系。我想要做的就是将所有内容从一台服务器复制到另一台服务器,实质上是创建第一台服务器的副本。在这一点上,我不在乎我是否必须在执行此操作时将其中一台或两台服务器完全停止使用。
我无法找到将第一个数据库中的所有内容直接复制到第二个数据库的方法。我尝试了pg_dump和pg_restore但是恢复违反了一堆外来约束,因此没有正确恢复。我已经读过你可以进行数据恢复,它将消除所有数据,在数据加载时禁用约束,然后在加载数据时重新启用约束,但这假定源和目标数据库具有相同的表结构,但它们没有。如果有一种方法只转储模式和数据,我会想象这会有效,但我还没有办法做到这一点。
答案 0 :(得分:7)
如果您想要mydb
上的数据库server
并将其复制到mydb
上的server2
,将完全替换mydb
的所有内容在server2
上,转储如:
pg_dump -Fc -f mydb.dump -h server1 mydb
然后恢复:
dropdb -h server2 mydb
createdb -h server2 -T template0 mydb
pg_restore -d mydb -h server2 mydb.dump
这将:
DROP
上mydb
数据库server2
,完全永久地销毁mydb
上server2
CREATE
上的mydb
数据库server2
mydb
上server
的副本还原为server2
另一种选择是使用pg_restore --clean
而不使用drop并创建。这将删除所有表格,然后重新创建它们。我宁愿放弃整个数据库,而是选择一个干净的数据库。
答案 1 :(得分:1)
方案:将Db1从PC1复制到PC2
在PC1中:
运行PgAdmin
右击Db1>备份。
提供文件名并保存。
将保存的文件从PC复制到另一台PC。
在PC2中:
右键单击数据库>创建>分配文件名“ Db1”(与PC1中的名称相同)
右键单击Db1>还原>选择复制的文件(如果未显示文件,则单击显示所有文件)
完成!
答案 2 :(得分:0)
你可以做一个" custom"格式化备份,然后在新位置的空白数据库上进行还原。这在过去对我有用。但是,如果你进行纯文本备份,那么你将会得到你已经得到的错误。