【问题标题】:transfer data from mysql DB to postgresql DB将数据从 mysql DB 传输到 postgresql DB
【发布时间】:2015-04-02 05:30:57
【问题描述】:
我有一个mysql DB,它有 30-40 个表。现在我想将它的数据传输到结构与 mysql DB 不同的 postgresql DB。所以我只想传输一些列值进入potsgresql。
我想在windows server上做。
怎么做?有什么工具可以做吗?
【问题讨论】:
标签:
mysql
postgresql
transfer
【解决方案1】:
对于选择性迁移,当您想要将数据从 MySQL 复制到 Postgres 时,最简单的方法是利用所谓的数据包装器。
https://wiki.postgresql.org/wiki/Foreign_data_wrappers
您需要在 Postgres 数据库中创建 mysql_fwd 扩展,定义 mysql 服务器和用户映射。然后您可以创建“外部表”,可以将其视为外部数据库的窗口。您可以将它们用于阅读和写作。
CREATE EXTENSION mysql_fdw;
CREATE SERVER mysql_cms
FOREIGN DATA WRAPPER mysql_fdw
OPTIONS (host '192.168.125.206', port '3306');
ALTER SERVER mysql_cms OWNER TO cmsuser;
CREATE USER MAPPING FOR cmsuser SERVER mysql_cms OPTIONS (username 'cmsuser', password '123456');
CREATE SCHEMA mysql_cms AUTHORIZATION cmsuser;
这是一个创建外部表的示例 SQL 命令
CREATE FOREIGN TABLE mysql_cms.video(
id INT,
artist text,
title text)
SERVER mysql_cms
OPTIONS (dbname 'cms', TABLE_NAME 'video');
【解决方案2】:
对于像这样的选择性迁移,我强烈建议使用 ETL 工具,例如:
- Pentaho 水壶
- Talend 工作室
- CloverETL
加上架构的手动转换。
您可以尝试使用 Tim 建议的 EasyFrom 之类的 DB 迁移工具,但到目前为止,我从未对我使用过的任何工具印象深刻。
另一种选择是简单地使用SELECT ... INTO OUTFILE 从 MySQL 进行 CSV 转储,然后使用 PostgreSQL 的 COPY 命令加载 CSV。