我有一个 postgres 数据库,其中包含许多模式和每个模式中的许多表,并且这些表之间有一堆外键关系。我想要做的就是将所有内容从一台服务器复制到另一台服务器,实质上是创建第一台服务器的副本。在这一点上,我不在乎在执行此操作时是否必须让其中一个或两个服务器完全失效。
我想不出将第一个数据库中的所有内容直接复制到第二个数据库中的方法。我尝试了 pg_dump 和 pg_restore 但恢复违反了一堆外部约束,因此没有正确恢复。我读过,您可以执行仅数据恢复,这将消除所有数据,在加载数据时禁用约束,然后在加载数据后重新启用约束,但这假设源数据库和目标数据库具有相同的表结构,但它们不同。如果有办法只转储架构和数据,我想这会奏效,但我也没有找到这样做的方法。
最佳答案
如果你想在 server1
上获取数据库 mydb
并将其复制到 server2
上的 mydb
,< em>完全替换 server2
上 mydb
的所有内容,转储如下内容:
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
server2
上的数据库mydb
,完全永久地销毁mydb
中的所有数据server2
- 从一个完全空的模板
server2
上重新CREATE
数据库mydb
- 将
server1
上的mydb
副本恢复到server2
另一种选择是使用 pg_restore --clean
而无需删除和创建。这将删除所有表然后重新创建它们。我更愿意放弃整个数据库并获得一个干净的数据库。
关于postgresql - 将 postgres 数据库从一台服务器复制到另一台服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30043392/