PostgreSQL copy/transfer 数据从一个数据库到另一个

PostgreSQL copy/transfer data from one database to another

我需要将数据从一个 table 复制到另一个。这两个 table 的结构几乎相同,但在不同的数据库中。

我试过了

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')

还有另一种方法。如果 dblink 扩展不可用,可以直接在命令行中复制数据,使用管道连接标准输入和输出:

psql source_database -c 'COPY table TO stdout' | psql target_database -c 'COPY table FROM stdin'

但这只适用于 postgres 9.4 或更高版本

如果您在 psql 会话中使用 postgresql 9.0 或更高版本(可能是 8.0 或更高版本),您还可以使用:

CREATE DATABASE new_database TEMPLATE original_database;

new_database 将是 original_database 的克隆,包括 tables、table 架构、编码和数据。

From the docs:

The principal limitation is that no other sessions can be connected to the source database while it is being copied.

我建议您通过从新旧数据库 table 中进行明智的选择来验证克隆实际上是否正确。文档还说:

It is important to understand, however, that this is not (yet) intended as a general-purpose “COPY DATABASE” facility.