我在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...
答案 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万行