我试图在Postgres中从一个数据库复制整个表到另一个数据库。有什么建议吗?


当前回答

与user5542464和Piyush S. Wanare的回答相同,但分为两步:

pg_dump -U Username -h DatabaseEndPoint -a -t TableToCopy SourceDatabase > dump
cat dump | psql -h DatabaseEndPoint -p portNumber -U Username -W TargetDatabase

否则,管道将同时询问两个密码。

其他回答

必须使用DbLink将一个表数据复制到不同数据库中的另一个表中。 您必须安装和配置DbLink扩展才能执行跨数据库查询。

我已经在这个话题上创建了详细的帖子。 请访问此链接

对于DBeaver工具用户,您可以“导出数据”到另一个数据库中的表中。

我一直面临的唯一错误是由于错误的postgres司机。

SQL Error [34000]: ERROR: portal "c_2" does not exist
    ERROR: Invalid protocol sequence 'P' while in PortalSuspended state.

这是一个关于如何导出数据的官方wiki: https://github.com/dbeaver/dbeaver/wiki/Data-transfer

没有任何管道,在Windows上,你可以使用:

转储-编辑这是在一行

"C:\Program Files\PostgreSQL\14\bin\pg_dump.exe"
--host="host-postgres01"
--port="1234"
--username="user01"
-t "schema01.table01"
--format=c
-f "C:\Users\user\Downloads\table01_format_c.sql"
"DB-01"

恢复-编辑这是在一行

"C:\Program Files\PostgreSQL\14\bin\pg_restore.exe"
--host="host-postgres02"
--port="5678"
--username="user02"
-1
--dbname="DB-02"
"C:\Users\user\Downloads\table01_format_c.sql"

系统将提示您输入用户密码。

这个解决方案将把新表放在具有相同名称的模式中(schema01)。

检查这个python脚本

python db_copy_table.py "host=192.168.1.1 port=5432 user=admin password=admin dbname=mydb" "host=localhost port=5432 user=admin password=admin dbname=mydb" alarmrules -w "WHERE id=19" -v
Source number of rows = 2
INSERT INTO alarmrules (id,login,notifybyemail,notifybysms) VALUES (19,'mister1',true,false);
INSERT INTO alarmrules (id,login,notifybyemail,notifybysms) VALUES (19,'mister2',true,false);

提取表并将其直接输送到目标数据库:

pg_dump -t table_to_copy source_db | psql target_db

注意:如果其他数据库已经设置了表,你应该使用-a标志只导入数据,否则你可能会看到奇怪的错误,如“Out of memory”:

pg_dump -a -t table_to_copy source_db | psql target_db