Postgresql 将旧数据库数据回填到现有Postgres数据库的最佳方法是什么?
一个新的docker镜像最近被用来替换现有的postgres数据库。在使用以下命令关闭旧实例之前,对数据库进行了转储:Postgresql 将旧数据库数据回填到现有Postgres数据库的最佳方法是什么?,postgresql,postgresql-9.2,Postgresql,Postgresql 9.2,一个新的docker镜像最近被用来替换现有的postgres数据库。在使用以下命令关闭旧实例之前,对数据库进行了转储: pg_dump-h localhost-p 5432-d*dbname*-U postgres>*dbname*.pgdump 我们希望将这些数据连接或附加到新数据库中,以便“回填”一些旧的历史数据。这两个数据库的数据库名称和架构相同。最简单、最安全的方法是什么?第二,是否需要在此过程中关闭postgres?如果已将重叠的主键或唯一列分配给新数据,则在不进行清理的情况下,将无法
pg_dump-h localhost-p 5432-d*dbname*-U postgres>*dbname*.pgdump
我们希望将这些数据连接或附加到新数据库中,以便“回填”一些旧的历史数据。这两个数据库的数据库名称和架构相同。最简单、最安全的方法是什么?第二,是否需要在此过程中关闭postgres?如果已将重叠的主键或唯一列分配给新数据,则在不进行清理的情况下,将无法以干净的方式合并它们。假设那没有发生 当前转储文件将为所有已存在的对象创建语句。如果将该文件重放到当前数据库中,那么所有这些对象都会出现一系列错误。如果您没有在一个事务中运行所有这些错误,那么您可以忽略这些错误。但是,您也可能以错误的顺序加载数据,并导致外键冲突。这些错误将与现有对象的所有其他错误混合在一起,因此很容易被忽略
所以我要做的是建立一个空的数据库服务器,并将当前转储重放到该服务器中。然后用
-a
或-section=data
重新进行pg_转储。然后,您应该能够将该转储加载到新数据库中。这有两个优点,它不会转储不需要的CREATE语句,也不会抛出需要忽略的错误,它应该以不会导致外键冲突的顺序转储表。这取决于转储的方式。pg_dump有很多选项,它们都有不同的结果。pg_dump-h localhost-p 5432-d-U postgres>。pgdump
是我使用的命令。