Postgresql从不同数据库传输表数据

Postgresql从不同数据库传输表数据,postgresql,psql,pg-dump,Postgresql,Psql,Pg Dump,我有两个应用程序,使用相同的表。从web收集数据的应用程序之一。我想将数据发送到我的第二个(web应用程序)的应用程序数据库 使用下面的代码,我创建了包含数据的文件: pg_dump -U username -t public."table_name" -d database name --inserts > table_name.sql 问题是,我只想插入第二个数据库中不存在的数据 如果我尝试下面的代码,我会得到很多已经存在的错误: psql -U username second_da

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

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

pg_dump -U username -t public."table_name" -d database name --inserts > table_name.sql
问题是,我只想插入第二个数据库中不存在的数据

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

psql -U username second_database_name < table_name.sql 
另一个:

relation "table_name_attribute_442....c74_uniq" already exists

--清洁
--如果存在
。。。我应该怎么做?

我这样做的方式是进行pg_转储,创建适合与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}
瞧,数据现在在目标数据库中

如果'psql'命令具有等效的标志,我不知道它们是什么,也没有在搜索中找到它们。但是,很有希望,这为那些需要重新使用DB的人提供了一个“正常工作”的DB转储/恢复,而不是试图以预期的行为实现简单的转储/恢复

另外请注意,如果未指定

-h 127.0.0.1

。。。它将查找unix套接字,该套接字可能配置正确,也可能配置不正确。很可能,您的DB用例以这种方式寻址DB,因此您从未手动配置unix套接字以匹配命令默认尝试查找的内容,这与安装程序设置默认套接字的方式不同(当然,因为“正常工作”,因此您无法“使用它”。

我这样做的方式,是做一个pg_转储,创建一个适合与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}
瞧,数据现在在目标数据库中

如果'psql'命令具有等效的标志,我不知道它们是什么,也没有在搜索中找到它们。但是,很有希望,这为那些需要重新使用DB的人提供了一个“正常工作”的DB转储/恢复,而不是试图以预期的行为实现简单的转储/恢复

另外请注意,如果未指定

-h 127.0.0.1

。。。它将查找unix套接字,该套接字可能配置正确,也可能配置不正确。很有可能,您的DB用例以这种方式寻址DB,因此您从未手动配置unix套接字以匹配命令默认尝试查找的内容,这与安装程序设置默认套接字的方式不同(当然,因为“正常工作”,所以您无法“使用它”).

我相信你试图重新创建表格。如果您已经有了表,请编辑postgresql转储以删除“创建表”内容,并保留“插入到”内容。非常感谢,它起了作用,我理解了问题所在。我很高兴。先生,我还有一个问题。如果表名相同而应用程序名不同怎么办。在我创建的sql文件中,命令以“INSERT INTO appname1_table name VALUES”开头。。我尝试将这些数据插入appname2_表。有一个冲突我无法解决,我已经解决了这个问题。刚刚编辑了转储文件,将appname1_表更改为appname2_表。太简单了…我相信你试着重新制作桌子。如果您已经有了表,请编辑postgresql转储以删除“创建表”内容,并保留“插入到”内容。非常感谢,它起了作用,我理解了问题所在。我很高兴。先生,我还有一个问题。如果表名相同而应用程序名不同怎么办。在我创建的sql文件中,命令以“INSERT INTO appname1_table name VALUES”开头。。我尝试将这些数据插入appname2_表。有一个冲突我无法解决,我已经解决了这个问题。刚刚编辑了转储文件,将appname1_表更改为appname2_表。很容易。。。