我需要将数据从一个表复制到另一个表。这两个表的结构几乎相同,但是在不同的数据库中。
我试过
INSERT INTO db1.public.table2(
id,
name,
adress,
lat,
lng
)
SELECT
id,
name,
adress,
lat
lng
FROM db2.public.table2;
wenn我试试这个,我得到错误交叉数据库......没有实现
答案 0 :(得分:14)
这是一项非常简单的任务。只需使用dblink就可以了:
INSERT INTO t(a, b, c)
SELECT a, b, c FROM dblink('host=xxx user=xxx password=xxx dbname=xxx', 'SELECT a, b, c FROM t') AS x(a integer, b integer, c integer)
如果您需要定期从外部数据库获取数据,那么定义服务器和用户映射是明智的。然后,您可以使用较短的语句:
dblink('yourdbname', 'your query')
答案 1 :(得分:8)
还有另一种方法可以做到这一点。如果dblink扩展不可用,则可以使用管道连接标准输入和输出直接在命令行中复制数据:
psql source_database -c 'COPY table TO stdout' | psql target_database -c 'COPY table FROM stdin'
但这只会在postgres 9.4或更高版本中起作用
答案 2 :(得分:2)
如果你在psql会话中使用postgresql 9.0或更高版本(可能是8.0或更高版本),你也可以使用:
CREATE DATABASE new_database TEMPLATE original_database;
new_database将是original_database的克隆,包括表格,表格架构,编码和数据。
主要限制是在复制源数据库时,没有其他会话可以连接到源数据库。
我建议您使用新旧数据库表中的明智选择来验证克隆实际上是否正确。文档还说:
然而,重要的是要理解,这不是(尚)用作通用的“COPY DATABASE”设施。