Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 将旧数据库数据回填到现有Postgres数据库的最佳方法是什么?_Postgresql_Postgresql 9.2 - Fatal编程技术网

Postgresql 将旧数据库数据回填到现有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?如果已将重叠的主键或唯一列分配给新数据,则在不进行清理的情况下,将无法

一个新的docker镜像最近被用来替换现有的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
是我使用的命令。