【问题标题】:PostgreSQL: How to copy data from one database table to another databasePostgreSQL:如何将数据从一个数据库表复制到另一个数据库
【发布时间】:2017-01-22 02:02:26
【问题描述】:

我需要一个简单的例子,如何将数据从数据库 DB1T1 复制到数据库 DB2T2

T2 具有与 T1 相同的结构(相同的列名、属性。只是数据不同) DB2 与 DB1 在同一台服务器上运行,但端口不同。

【问题讨论】:

标签: database postgresql pgadmin


【解决方案1】:

如果两个数据库位于两个不同的服务器实例上,您可以从db1 以CSV 格式导出,然后在db2 中导入数据:

COPY (SELECT * FROM t1) TO '/home/export.csv';

然后加载回db2

COPY t2 FROM '/home/export.csv';

同样,两个不同数据库实例上的两个表必须具有相同的结构。

使用命令行工具:pg_dump 和 psql,你甚至可以这样做:

pg_dump -U postgres -t t1 db1 | psql -U postgres -d db2

您可以为pg_dumppsql 指定命令行参数来指定服务器的地址和/或端口。

另一种选择是使用外部工具,例如:openDBcopy,来执行表的迁移/复制。

【讨论】:

  • Postgres 不支持第一条语句,您不能像这样引用其他数据库中的表。 (除了 db2.t2 引用 schema db2 中的表,而不是“数据库”db2)
  • 第一个语句将跨数据库工作(仅跨schema,这是您的语句正在执行的操作)
  • 已删除,因为该问题的实际解决方案是以 CSV 格式导出并重新导入。
  • 为什么是COPY (SELECT * FROM t1) 而不是COPY t1?此外,请省略 db1db2 限定符。
  • 好吧。 csv 解决方案被接受。但仍然存在 1 个问题。复制到 db2 时,除了 ID 之外,我需要相同的值。我需要使用新 ID 插入新行。有什么建议吗?
【解决方案2】:

你可以试试这个——

 pg_dump -t table_name_to_copy source_db | psql target_db

【讨论】:

  • 点赞!如何只将数据库 1 的表 1 中的 4 列复制到数据库 2 的表 1 的 4 列?
猜你喜欢
  • 2017-06-03
  • 1970-01-01
  • 1970-01-01
  • 2016-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多