10

我在 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...
4

6 回答 6

20

最安全的方法是使用 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
于 2013-03-11T09:41:55.187 回答
5

确切的命令 -

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

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

这将在您运行上述命令的目录中创建一个名为“filename”的文件 - 该文件将包含源表的模式和数据。您也可以提供任何绝对路径。

2.通过psql导入:

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

->这将提示输入密码

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

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

于 2019-02-20T05:51:10.330 回答
4

尝试这个

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

于 2013-03-11T09:50:58.747 回答
2

我在 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)
于 2018-10-23T14:54:18.067 回答
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"
于 2015-07-28T12:19:49.070 回答
1

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

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

于 2017-03-02T20:23:22.647 回答