如何在没有-c标志的情况下将本地Postgres转储合并到AWS RDS



我在AWS RDS中有PostgreSQL数据库的版本A,在本地机器上有版本B。DB B是从DB a的转储中创建的,并且已经在本地进行了更新。我正在尝试将本地的数据合并到RDS。

A有B没有的数据,B有A没有的数据。因此,我不能在pg_dump中使用-c标志(如本问题所述(。

我使用pg_dump:导出数据库

pg_dump -f dump.sql mydb

我尝试使用psql:将我的数据库导入RDS

psql -h ABC.XYZ.eu-west-2.rds.amazonaws.com -U myself mydb < dump.sql

这会更新架构,即将我在本地拥有的列添加到RDS,但无法在这些列中插入任何值。对于DB A中存在的每个表,我都会得到以下错误:

ERROR:  duplicate key value violates unique constraint "table_pkey"

正如我从这个问题中了解到的,我的序列可能不同步,但这似乎很奇怪,因为我为DB A中的每个表都得到了它,而DB B是从DB A的转储中创建的。

如果我将-c标志与pg_dump一起使用,则合并会起作用,但数据库A中数据库B没有的所有数据都会被删除。

如何在不丢失数据的情况下将本地数据库合并到AWS上的远程数据库?

如果不需要修改任何现有行,可以使用pg_dump的选项--on-conflict-do-nothing,v12中的新选项。

这将不会添加任何新列。pg_dump不是架构迁移工具。

最新更新