如何在PostgreSQL中将表从服务器复制到另一个?

How to copy table from server to another in PostgreSQL?

我在PostgreSQL 8.4上有两个服务器:

1
2
server1:5432
server2:5432

现在我想从server1复制表并将其放在server2的数据库中。
它有可能做到吗?

UPDATE

我尝试在@Valery Viktorovsky的回答中做:

1
2
3
4
pg_dump --server1:5432 --encoding=utf8 --no-owner --username=postgres --123456 np_point > D:
p_point.sql
psql --server2:5432 --username=postgres mrsk -f D:
p_point.sql

并得到错误:

1
2
ERROR:  syntax error at OR near"pg_dump"
LINE 1: pg_dump --server1:5432 --encoding=utf8 --no-owner --use...


最安全的方法是使用pg_dump。

1
2
pg_dump --host server1 --encoding=utf8 --no-owner --username=foo --password -t table_name db_name > server1_db.sql
psql --host server2 --username=foo db_name -f server1_db.sql


试试这个

使用psql中的COPY命令。连接到server1并导出到CSV然后连接到server2并从CSV导入


我在python中编写了一个可以提供帮助的小脚本。
注意 - 它只适用于小表。你首先需要pip安装pandas,sqlalchemy和psycopg2。
将文件创建为pycopy.py并使用"python pycopy.py tablename"(不带引号)运行它。您可以更改源和目??标以使用任何其他数据库类型 - 只需更改源和目??标字符串。

剧本:

1
2
3
4
5
6
7
8
9
10
11
import pandas AS pd
import sys
import sqlalchemy AS sa

strengine_source='postgresql://user:password@db_ip:5432/dbsourcename'
strengine_dest='postgresql://user:password@db_ip:5432/dbdestinationname'

IF len(sys.argv) > 1:
        tblname = sys.argv[1]
        df=pd.read_sql("select * from" + tblname,sa.create_engine(strengine_source))
        df.to_sql(tblname,sa.create_engine(strengine_dest), INDEX=FALSE)

您还可以使用Linux shell脚本将表数据从一个服务器迁移到另一个PostgreSQL服务器。

我刚刚将我的答案贴在下面类似的堆栈问题上请参考。
将PostgreSQL数据库复制到另一台服务器


这将仅将特定数据库中的特定表复制到目标数据库

1
 pg_dump -h localhost -U postgres -p 5432 -C -t TABLE_NAME source_db_name | ssh -C username@ip"psql -h localhost -U postgres -p 5432 destination_db_name"

确切的命令 -

1.通过pg_dump导出到文件中:

1
    pg_dump --host"source hostname" --port 5432 --username"username" --no-password --verbose --file"filename" --table"source schema.tablename""source db name"

这将在您运行上面命令的目录中创建一个名为"filename"的文件 - 它将具有源表的模式和数据。你也可以给出任何绝对路径。

2.通过psql导入:

1
    psql --host"target hostname" --port 5432 --username"username" --password --verbose --file"file name""target db name"

- >这会提示输入密码

在运行导入之前,删除目标表(如果存在)。

像魅力一样工作,并在2分钟内完成10M行