我试图在Postgres中将整个表从一个数据库复制到另一个数据库。有什么建议吗?
答案 0 :(得分:246)
提取表并将其直接传送到目标数据库:
pg_dump -t table_to_copy source_db | psql target_db
答案 1 :(得分:81)
您还可以使用pgAdmin II中的备份功能。只需按照以下步骤操作:
运行良好,可以一次执行多个表。
答案 2 :(得分:65)
使用dblink会更方便!
truncate table tableA;
insert into tableA
select *
from dblink('dbname=postgres hostaddr=xxx.xxx.xxx.xxx dbname=mydb user=postgres',
'select a,b from tableA')
as t1(a text,b text);
答案 3 :(得分:24)
在与两台服务器连接的linux主机上使用psql
( PGPASSWORD=password1
psql -U user1 -h host1 database1 \
-c "copy (select field1,field2 from table1) to stdout with csv" ) \
|
( PGPASSWORD=password2
psql -U user2 -h host2 database2 \
-c "copy table2 (field1, field2) from stdin csv" )
答案 4 :(得分:18)
然后,你会做类似的事情:
INSERT INTO t2 select * from
dblink('host=1.2.3.4
user=*****
password=******
dbname=D1', 'select * t1') tt(
id int,
col_1 character varying,
col_2 character varying,
col_3 int,
col_4 varchar
);
答案 5 :(得分:13)
使用pg_dump转储表数据,然后使用psql恢复它。
答案 6 :(得分:10)
如果您同时拥有远程服务器,则可以按照以下步骤操作:
pg_dump -U Username -h DatabaseEndPoint -a -t TableToCopy SourceDatabase | psql -h DatabaseEndPoint -p portNumber -U Username -W TargetDatabase
如果您已有现有架构,它会将提到的源数据库表复制到目标数据库的同一个命名表中。
答案 7 :(得分:8)
您可以执行以下操作:
movq (%rax, %rcx, 3), %rbx
答案 8 :(得分:8)
这对我有用。 首先转储到文件:
pg_dump -h localhost -U myuser -C -t my_table -d first_db>/tmp/table_dump
然后加载转储文件:
psql -U myuser -d second_db</tmp/table_dump
答案 9 :(得分:5)
要在本地设置中将表从数据库A移动到数据库B,请使用以下命令:
pg_dump -h localhost -U owner-name -p 5432 -C -t table-name database1 | psql -U owner-name -h localhost -p 5432 database2
答案 10 :(得分:4)
我在这里尝试了一些解决方案,他们真的很有帮助。根据我的经验,最佳解决方案是使用 psql 命令行,但有时我不想使用psql命令行。所以这是 pgAdminIII
的另一种解决方案create table table1 as(
select t1.*
from dblink(
'dbname=dbSource user=user1 password=passwordUser1',
'select * from table1'
) as t1(
fieldName1 as bigserial,
fieldName2 as text,
fieldName3 as double precision
)
)
此方法的问题是必须写入要复制的表的字段名称及其类型。
答案 11 :(得分:4)
scrollEnabled
无效。
鉴于您在两个dbs中都有相同的表ddl 你可以从stdout和stdin中删除它,如下所示:
pg_dump
答案 12 :(得分:3)
与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
否则管道会同时询问这两个密码。
答案 13 :(得分:2)
您必须使用DbLink将一个表数据复制到另一个数据库的另一个表中。 您必须安装和配置DbLink扩展以执行跨数据库查询。
我已经就此主题创建了详细的帖子。 Please visit this link
答案 14 :(得分:2)
import pandas as pd
import numpy as np
df = pd.DataFrame({'var1': [23, 23, 43, 43, 53],
'var2': [1, 0, 0, 0,1],
'var3': [0, 0, 0, 1, 0],
'var4': [0, 0, 0, 1, 0],
'var5': [0, 1, 1, 0, 0]})
print(df)
df['Dup'] = np.where(df['var1'].duplicated(keep=False), 'dup', np.nan)
df['var2'] = np.where(df['Dup']=="dup", df.groupby(['var1'])['var2'].transform('max'), df['var2'])
df['var3'] = np.where((df['Dup']=="dup") & (df['var2']==1), 0 , df['var3'])
df['var4'] = np.where((df['Dup']=="dup") & (df['var2']==1), 0 , df['var4'])
df['var5'] = np.where((df['Dup']=="dup") & (df['var2']==1), 0 , df['var5'])
df['others_dup'] = np.where((df['Dup']=='dup') & (df['var2']==0), 1, np.nan)
df['var3']=np.where(df['others_dup']==1, df.groupby(['var1'])['var3'].transform('max'), df['var3'])
df['var4']=np.where(df['others_dup']==1, df.groupby(['var1'])['var4'].transform('max'), df['var4'])
df['var5']=np.where(df['others_dup']==1, df.groupby(['var1'])['var5'].transform('max'), df['var5'])
print(df)
答案 15 :(得分:1)
如果两个数据库(从&到)都受到密码保护,则在这种情况下,终端将不会要求两个数据库都提供密码,密码提示将仅出现一次。 因此,要解决此问题,请将密码和命令一起传递。
PGPASSWORD=<password> pg_dump -h <hostIpAddress> -U <hostDbUserName> -t <hostTable> > <hostDatabase> | PGPASSWORD=<pwd> psql -h <toHostIpAddress> -d <toDatabase> -U <toDbUser>
答案 16 :(得分:0)
如果从Windows运行pgAdmin(备份:pg_dump
,还原:pg_restore
),它将默认尝试将文件输出到c:\Windows\System32
,这就是为什么您将获得许可/访问权限的原因拒绝错误,不是因为用户postgres权限不足。 以管理员身份运行 pgAdmin 或仅选择输出的位置,而不是Windows的系统文件夹。
答案 17 :(得分:0)
作为替代,您还可以使用外部数据包装程序扩展名将远程表公开为本地表。然后,可以通过从远程数据库中的表中进行选择,将其插入表中。唯一的缺点是速度不是很快。
答案 18 :(得分:0)
我当时使用的是 DataGrip (通过Intellij Idea)。而且从一个表(从另一个数据库到另一个表)复制数据非常容易。
首先,请确保您同时连接了Data Grip中的两个DataSource。
选择源表,然后按F5或(右键单击->选择“将表复制到”。)
这将向您显示所有表的列表(您也可以在弹出窗口中使用表名进行搜索)。只需选择目标,然后按确定即可。
DataGrip将为您处理其他所有事情。
答案 19 :(得分:0)
对于 DBeaver tool 用户,您可以“导出数据”到另一个数据库中的表格。
我一直面临的唯一错误是因为wrong postgres driver。
SQL Error [34000]: ERROR: portal "c_2" does not exist
ERROR: Invalid protocol sequence 'P' while in PortalSuspended state.
这是关于如何导出数据的官方维基:https://github.com/dbeaver/dbeaver/wiki/Data-transfer