db_migrator
使用FDW从其他DBMS迁移到PostgreSQL
仓库
cybertec-postgresql/db_migrator
https://github.com/cybertec-postgresql/db_migrator
源码
db_migrator-RELEASE_1_0_0.tar.gz
db_migrator-RELEASE_1_0_0.tar.gz
概览
| 扩展包名 | 版本 | 分类 | 许可证 | 语言 |
|---|---|---|---|---|
db_migrator | 1.0.0 | ETL | BSD 3-Clause | SQL |
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 9540 | db_migrator | 否 | 否 | 否 | 是 | 否 | 是 | - |
| 相关扩展 | mysql_fdw oracle_fdw tds_fdw orafce pg_bulkload jdbc_fdw db2_fdw pgtt |
|---|
版本
| 类型 | 仓库 | 版本 | PG 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | PIGSTY | 1.0.0 | 1817161514 | db_migrator | - |
| RPM | PIGSTY | 1.0.0 | 1817161514 | db_migrator_$v | - |
| DEB | PIGSTY | 1.0.0 | 1817161514 | postgresql-$v-db-migrator | - |
构建
您可以使用 pig build 命令构建 db_migrator 扩展的 RPM / DEB 包:
pig build pkg db_migrator # 构建 RPM / DEB 包
安装
您可以直接安装 db_migrator 扩展包的预置二进制包,首先确保 PGDG 和 PIGSTY 仓库已经添加并启用:
pig repo add pgsql -u # 添加仓库并更新缓存
使用 pig 或者是 apt/yum/dnf 安装扩展:
pig install db_migrator; # 当前活跃 PG 版本安装
pig ext install -y db_migrator -v 18 # PG 18
pig ext install -y db_migrator -v 17 # PG 17
pig ext install -y db_migrator -v 16 # PG 16
pig ext install -y db_migrator -v 15 # PG 15
pig ext install -y db_migrator -v 14 # PG 14
dnf install -y db_migrator_18 # PG 18
dnf install -y db_migrator_17 # PG 17
dnf install -y db_migrator_16 # PG 16
dnf install -y db_migrator_15 # PG 15
dnf install -y db_migrator_14 # PG 14
apt install -y postgresql-18-db-migrator # PG 18
apt install -y postgresql-17-db-migrator # PG 17
apt install -y postgresql-16-db-migrator # PG 16
apt install -y postgresql-15-db-migrator # PG 15
apt install -y postgresql-14-db-migrator # PG 14
创建扩展:
CREATE EXTENSION db_migrator;
用法
使用外部数据包装器和特定源插件将数据库从其他数据源迁移到 PostgreSQL 的框架。
启用
CREATE EXTENSION db_migrator;
可用插件
- ora_migrator - Oracle 迁移
- mysql_migrator - MySQL/MariaDB 迁移
- mssql_migrator - Microsoft SQL Server 迁移
完整迁移示例(Oracle)
-- 设置(以超级用户身份)
CREATE EXTENSION oracle_fdw;
CREATE SERVER oracle FOREIGN DATA WRAPPER oracle_fdw
OPTIONS (dbserver '//dbserver.mydomain.com/ORADB');
GRANT USAGE ON FOREIGN SERVER oracle TO migrator;
CREATE USER MAPPING FOR migrator SERVER oracle
OPTIONS (user 'orauser', password 'orapwd');
-- 迁移(以 migrator 用户身份)
CREATE EXTENSION ora_migrator;
SELECT db_migrate(
plugin => 'ora_migrator',
server => 'oracle',
only_schemas => '{TESTSCHEMA1,TESTSCHEMA2}'
);
分步迁移
需要更多控制时,按阶段执行迁移:
-- 1. 创建暂存模式并快照元数据
SELECT db_migrate_prepare(
plugin => 'ora_migrator',
server => 'oracle',
only_schemas => '{SCHEMA1}'
);
-- 2. 审查和修改暂存数据
-- 编辑 pgsql_stage 表以自定义类型映射、重命名对象等。
UPDATE pgsql_stage.tables SET migrate = TRUE WHERE ...;
-- 3. 创建模式并迁移数据
SELECT db_migrate_mkforeign(plugin => 'ora_migrator', server => 'oracle');
SELECT db_migrate_tables(plugin => 'ora_migrator');
-- 4. 创建约束和索引
SELECT db_migrate_constraints(plugin => 'ora_migrator');
SELECT db_migrate_indexes(plugin => 'ora_migrator');
-- 5. 清理
SELECT db_migrate_finish();
关键特性
- 迁移表、序列、索引、约束、视图、函数
- 从源到 PostgreSQL 类型的数据类型映射(可自定义)
- 遇到错误时继续执行,报告哪些对象失败
- 使用 FDW 暂存模式在迁移前检查元数据
- 通过插件函数进行模式和对象名称转换