我需要将数据从一个表复制到另一个表。这两个表的结构几乎相同,但存储在不同的数据库中。
我尝试过
INSERT INTO db1.public.table2(
id,
name,
adress,
lat,
lng
)
SELECT
id,
name,
adress,
lat
lng
FROM db2.public.table2;
当我尝试这样做时,我遇到了错误“跨数据库未实现”。
我需要将数据从一个表复制到另一个表。这两个表的结构几乎相同,但存储在不同的数据库中。
我尝试过
INSERT INTO db1.public.table2(
id,
name,
adress,
lat,
lng
)
SELECT
id,
name,
adress,
lat
lng
FROM db2.public.table2;
当我尝试这样做时,我遇到了错误“跨数据库未实现”。
这是一个非常简单的任务。只需使用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')
SELECT a, b, c FROM t
中有 where
子句,如何转义单引号? - ShivaCREATE EXTENSION dblink;
- schoetbi还有另一种做法。如果没有可用的dblink扩展,可以使用命令行直接复制数据,使用管道连接标准输入和输出:
psql source_database -c 'COPY table TO stdout' | psql target_database -c 'COPY table FROM stdin'
但是这只能在Postgres 9.4或更高版本中使用。
psql "host=<host> user=<user> database=<database> password=<password>" -c 'COPY(SELECT * FROM source_schema.source_table) TO stdout' | psql local_db_name -c 'COPY local_table FROM stdin'
- ML_Engine如果您使用的是 PostgreSQL 9.0 或更高版本(可能也适用于 8.0 或更高版本),在 psql 会话中,您还可以使用以下命令:
CREATE DATABASE new_database TEMPLATE original_database;