postgresql - 将 postgres 数据库从一台服务器复制到另一台服务器

标签 postgresql

我有一个 postgres 数据库,其中包含许多模式和每个模式中的许多表,并且这些表之间有一堆外键关系。我想要做的就是将所有内容从一台服务器复制到另一台服务器,实质上是创建第一台服务器的副本。在这一点上,我不在乎在执行此操作时是否必须让其中一个或两个服务器完全失效。

我想不出将第一个数据库中的所有内容直接复制到第二个数据库中的方法。我尝试了 pg_dump 和 pg_restore 但恢复违反了一堆外部约束,因此没有正确恢复。我读过,您可以执行仅数据恢复,这将消除所有数据,在加载数据时禁用约束,然后在加载数据后重新启用约束,但这假设源数据库和目标数据库具有相同的表结构,但它们不同。如果有办法只转储架构和数据,我想这会奏效,但我也没有找到这样做的方法。

最佳答案

如果你想在 server1 上获取数据库 mydb 并将其复制到 server2 上的 mydb,< em>完全替换 server2mydb 的所有内容,转储如下内容:

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/

相关文章:

postgresql - 如何使用Ansible将转储导入docker容器中的postgres

php - SQL:如果字段具有高度和经度值则选择

PostgreSQL,无法使用 ALTER COLUMN SET DEFAULT 设置默认值

performance - 在 PostgreSQL 中填充数据库

postgresql - st_clusterdbscan 不可用,但 postgis 正在安装在 postgresql 上

postgresql - 在 Postgres 数组中查找重复项,并另存为不同的字段

sql - postgres 综合性能

python - 你如何从 Django PostgreSQL ArrayField 中获取字符串?

python - 如何使用 postgresql 从 Django 中的两个表中检索数据

sql - 如果特定日期的表中没有数据,则返回 0 或 Null 值?