nix*_*nix 244 postgresql copy database-table
我试图在Postgres中将整个表从一个数据库复制到另一个数据库.有什么建议?
tho*_*max 272
提取表并将其直接传送到目标数据库:
pg_dump -t table_to_copy source_db | psql target_db
Run Code Online (Sandbox Code Playgroud)
a2r*_*n44 94
您还可以使用pgAdmin II中的备份功能.只需按以下步骤操作:
效果很好,一次可以做多个表.
tin*_*hen 70
使用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);
Run Code Online (Sandbox Code Playgroud)
Ale*_*dov 28
在与两台服务器连接的linux主机上使用psql
( export PGPASSWORD=password1
psql -U user1 -h host1 database1 \
-c "copy (select field1,field2 from table1) to stdout with csv" ) \
|
( export PGPASSWORD=password2
psql -U user2 -h host2 database2 \
-c "copy table2 (field1, field2) from stdin csv" )
Run Code Online (Sandbox Code Playgroud)
小智 23
首先安装dblink
你会做类似的事情:
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
);
Run Code Online (Sandbox Code Playgroud)
Pab*_*ruz 13
使用pg_dump转储表数据,然后使用psql将其还原.
Piy*_*are 11
如果您同时拥有远程服务器,则可以按照以下步骤操作
pg_dump -U Username -h DatabaseEndPoint -a -t TableToCopy SourceDatabase | psql -h DatabaseEndPoint -p portNumber -U Username -W TargetDatabase
Run Code Online (Sandbox Code Playgroud)
如果您已有现有模式,它会将提到的源数据库表复制到目标数据库的同一个命名表中.
pg_dump -h <host ip address> -U <host db user name> -t <host table> > <host database> | psql -h localhost -d <local database> -U <local db user>
Run Code Online (Sandbox Code Playgroud)
这对我有用.首先转储到文件:
pg_dump -h localhost -U myuser -C -t my_table -d first_db>/tmp/table_dump
Run Code Online (Sandbox Code Playgroud)
然后加载转储的文件:
psql -U myuser -d second_db</tmp/table_dump
Run Code Online (Sandbox Code Playgroud)
我正在使用DataGrip(由 Intellij Idea 提供)。将数据从一个表(在不同的数据库中复制到另一个表)非常容易。
首先,确保您已连接到 Data Grip 中的两个数据源。
选择源表并按 F5 或(右键单击 -> 选择将表复制到。)
这将显示所有表的列表(您也可以在弹出窗口中使用表名称进行搜索)。只需选择您的目标并按“确定”即可。
DataGrip 将为您处理其他一切。
小智 6
要在本地设置中将表从数据库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
小智 5
我在这里尝试了一些解决方案,它们真的很有帮助。根据我的经验,最好的解决方案是使用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
)
)
Run Code Online (Sandbox Code Playgroud)
这种方法的问题在于,必须写入要复制的表的字段名称及其类型。
与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
Run Code Online (Sandbox Code Playgroud)
否则管道会同时询问两个密码。
pg_dump并不总是有效。
鉴于您在两个数据库中有相同的表 ddl,您可以从 stdout 和 stdin 破解它,如下所示:
# grab the list of cols straight from bash
psql -d "$src_db" -t -c \
"SELECT column_name
FROM information_schema.columns
WHERE 1=1
AND table_name='"$table_to_copy"'"
# ^^^ filter autogenerated cols if needed
psql -d "$src_db" -c \
"copy ( SELECT col_1 , col2 FROM table_to_copy) TO STDOUT" |\
psql -d "$tgt_db" -c "\copy table_to_copy (col_1 , col2) FROM STDIN"
Run Code Online (Sandbox Code Playgroud)