我有一个postgres数据库,其中包含多个模式和每个模式中的多个表,并且这些表之间具有许多外键关系。我想做的就是将所有内容从一个服务器复制到另一个服务器,从而创建第一个服务器的副本。此时,我不介意在执行此操作时完全使任一或两个服务器停机。
我无法找到一种直接将第一个数据库中的所有内容复制到第二个数据库中的方法。我尝试使用pg_dump和pg_restore,但还原违反了很多外键约束,因此没有正确还原。我已经阅读过可以进行仅数据还原的方法,该方法将消除所有数据,禁用在加载数据时的约束,然后在数据加载完成时重新启用约束,但这假设源数据库和目标数据库具有相同的表结构,而它们并没有。如果有一种只转储模式和数据的方法,我认为这将起作用,但我也没有找到这样做的方法。
我无法找到一种直接将第一个数据库中的所有内容复制到第二个数据库中的方法。我尝试使用pg_dump和pg_restore,但还原违反了很多外键约束,因此没有正确还原。我已经阅读过可以进行仅数据还原的方法,该方法将消除所有数据,禁用在加载数据时的约束,然后在数据加载完成时重新启用约束,但这假设源数据库和目标数据库具有相同的表结构,而它们并没有。如果有一种只转储模式和数据的方法,我认为这将起作用,但我也没有找到这样做的方法。
pg_dump
进行,将二进制数据而非文本文件数据写入COPY
。我花了一些时间才明白你的意思)。此外,您并没有使用热备份,那是完全分开的。您需要pg_basebackup -X stream
,或者如果您想要更高级的方法,则需要 WAL 存档和pg_start_backup()
、rsync
、pg_stop_backup()
。 - Craig Ringerpg_xlog
。就是这样。例如,你肯定不能只复制一个数据库。 - Craig Ringer