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

时间:2013-03-11 09:36:35

标签: postgresql

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

server1:5432
server2:5432

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

更新

我试着在@Valery Viktorovsky的答案中做到:

pg_dump --server1:5432 --encoding=utf8 --no-owner --username=postgres --123456 np_point > D:\np_point.sql
psql --server2:5432 --username=postgres mrsk -f D:\np_point.sql

并收到错误:

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

6 个答案:

答案 0 :(得分:10)

最安全的方法是使用pg_dump。

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

答案 1 :(得分:4)

试试这个

使用psql的COPY命令。连接到server1和export to CSV,然后连接到server2和import from CSV

答案 2 :(得分: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"

答案 3 :(得分:1)

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

我刚刚在下面的类似堆栈问题上发布了我的答案,请参考这个。 Copying PostgreSQL database to another server

答案 4 :(得分:0)

我用python编写了一个小脚本,可以提供帮助。 注意-仅适用于小桌子。您首先需要pip安装pandas,sqlalchemy和psycopg2。 将文件创建为pycopy.py并使用“ python pycopy.py tablename”运行(不带引号)。您可以更改源和目​​标以与任何其他数据库类型一起工作-只需更改源和目​​标字符串即可。

脚本:

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)

答案 5 :(得分:0)

确切命令-

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

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

这将在您在命令上方运行的目录中创建一个名为“文件名”的文件-该文件将具有源表的架构和数据。您也可以给出任何绝对路径。

2。通过psql导入:

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

->这将提示您输入密码

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

像魅力一样工作,并在2分钟内完成了1000万行