Postgresql从不同数据库转表数据

标签 postgresql psql pg-dump

我有两个应用程序,具有相同的表。从网络收集数据的应用程序之一。我想将数据发送到我的第二个(网络应用程序)的应用程序数据库。

使用下面的代码,我创建了包含数据的文件:

pg_dump -U username -t public."table_name" -d database name --inserts > table_name.sql

问题是我只想插入第二个数据库中不存在的数据。

如果我尝试下面的代码,我会得到很多已经存在的错误:

psql -U username second_database_name < table_name.sql 

错误之一:

multiple primary keys for table "table_name" are not allowed

另一个:

relation "table_name_attribute_442....c74_uniq" already exists

--clean , --if-exists ... 我该怎么办?

最佳答案

我这样做的方法是创建一个 pg_dump,它创建一个适合与 pg_restore 一起使用的压缩存档,它具有允许导入数据而不会抛出错误所需的标志。

例如:

pg_dump -Fc -h 127.0.0.1 {db_name_here} > {dump_file_name_here}

“-Fc”为您提供 pg_restore 想要的文件类型;它将拒绝没有那些神奇字母的转储。

现在您可以使用以下方法恢复文件:

pg_restore -O -h 127.0.0.1 --clean --disable-triggers -d {target_db_name} {dump_file_name_here}

瞧 - 数据现在在 target_db 中。

如果 'psql' 命令有等效的标志,我不知道它们是什么,并且在 SO 搜索中没有找到它们。但是,希望这为那些需要重新使用数据库的人提供了一个“正常工作”的数据库转储/恢复,而不是摆弄尝试让一个简单的转储/恢复发生预期的行为。

另请注意,如果您不指定 ...

-h 127.0.0.1

... 它将去寻找一个 unix 套接字,它可能配置正确也可能不正确。很有可能,您的数据库用例以这种方式寻址数据库,因此您永远不会手动配置 unix-socket 以匹配命令默认尝试查找的任何内容,这与安装程序设置默认套接字的方式不同(当然,因为事情“只是工作”,所以你“只是使用它”是不可能的)。

关于Postgresql从不同数据库转表数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33994881/

相关文章:

javascript - Order By (alias) then Order by second sequelize

python - Postgres 咨询锁不起作用

postgresql - pg_restore : can't import data if table has a constraint with a function calling another function

sql - 按跨年的日期范围(同一月和同一天)过滤

python - 如何提高列表中多次追加的性能?

sql - 以函数为值执行\设置命令

postgresql - PG_DUMP 与主从复制的性能比较?

postgresql - 使用索引转储 Postgres 9.3 数据

hibernate - 多数据源配置

sql - 当用引号转义名称时,如何选择特定表的列?