多平台向Postgresql 迁移

本文介绍了一种使用EnterpriseDB的PostgresPlus Advanced Server中的mogirationtoolkit工具将SqlServer数据库迁移到PostgreSQL的方法。该工具提供了较为智能的迁移流程,并支持多种数据库之间的迁移。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近有个工作要把 一个SqlServer 迁移到 Postgresql 平台上,上网搜了搜,EnterpriseDB在这块做了很多工作,

EnterpriseDB 的 Postgres Plus Advanced Server管理工具中有一个 mogiration toolkit工具。

这里安装的是9.2版本。安装后在 bin 目录下有个edb-migrationtoolkit.jar,这是这个工具的主要程序,通过java 启用jar包进行迁移。其中涉及到三块:

1.bin目录下 edb-migrationtoolkit.jar 迁移主程序

2.bin目录下runMTK.bat 迁移命令脚本,linux下是runMTK.sh,内容如下,这里有些改动

@echo off
@REM ----------------------------------------------------------------------------
@REM --
@REM -- Copyright (c) 2004-2012 - EnterpriseDB Corporation.  All Rights Reserved.
@REM --
@REM ----------------------------------------------------------------------------

"D:\dev\Java\jre7\bin\java.exe" -Dprop=..\etc\toolkit.properties -jar edb-migrationtoolkit.jar -sourcedbtype sqlserver -targetdbtype postgresql -targetSchema public dbo %*
说明 : 
-sourcedbtype sqlserver -targetdbtype postgresql -targetSchema public dbo

上面的配置指定了 源数据库类型,和目标数据库类型。 -targetSchema 指定数据库架构,public表示 postgresql 数据库架构,dbo表示 sql server的数据库架构

更多的配置和迁移参数 使用命令 runMTK -help。

3.etc目录下toolkit.properties文件,迁移时源数据库和目标数据库的连接配置,java的连接配置

安装的时候默认的是迁移 oracle到postgresql 这里需要改下。同时由于edb-migrationtoolkit.jar程序中采用的是jtds的 sql server驱动,所以更改如下

SRC_DB_URL=jdbc:jtds:sqlserver://localhost:1433;databasename=test
SRC_DB_USER=sa
SRC_DB_PASSWORD=123456


TARGET_DB_URL=jdbc:postgresql://localhost:5432/test
TARGET_DB_USER=postgres
TARGET_DB_PASSWORD=123456


需要两个额外的 东西,SqlServer 的 jdbc驱动 和postgresql 的jdbc驱动。

http://www.sql-workbench.net/manual/jdbc-setup.html 这个页面查看所有数据库的java 驱动,比较全面。

:在安装Postgres Plus Advanced Server 的mogiration toolkit模块的时候会自动安装jre 在根目录下,但这个版本比较低,还是java 5的。所以如果使用这个jre 的java启动 迁移的时候下载的对应数据jdbc驱动必须支持java5当然。可以采用自己安装的高版本jre,同时下载驱动放在jre/lib/ext 目录下。

这个工具还是比较好用的,比较智能化,无需其他的操作。当然在迁移的时候会遇到一些小问题,比如各个数据库中专有的东西。例如 sql server 会把和 关键字 冲突的列名 加上 [] 。迁移的时候就出错了

同时这个工具可以迁移多个平台。如下:


转载于:https://my.oschina.net/congqian/blog/106518

<think>嗯...用户明确要求了解PostgreSQL数据库迁移的具体方法和工具。根据用户最后的提问历史,这应该是ta首次询问数据库迁移相关内容,且特别强调需要指南或工具推荐。翻看系统提供的引用材料,发现信息相当完整:引用[1]是MySQL迁移指南,虽然不完全匹配但具有参考价值;引用[2]到[5]则精准覆盖了不同迁移场景的工具和流程。值得注意的是用户提到的"node-pg-migrate"和"pgcopydb"都是专业级工具,说明可能面临复杂业务场景。用户身份推测:可能是需要负责数据库迁移的运维工程师或后端开发者,提问方式显示ta对术语很熟悉。深层需求应该不止基础操作,可能包含迁移难点解决方案——比如如何减少停机时间、处理版本差异等。准备采用阶梯式回答结构:先概述迁移类型分类(逻辑迁移/物理迁移/滚动迁移),再分场景推荐工具。针对不同数据规模会给出具体参数建议,比如对100GB以上数据库必须使用pgcopydb这种物理迁移工具。还要补充关键细节:迁移后必须进行数据校验,这在新管理员容易忽略但引用[3]的导出表结构操作已隐含这点。特别注意事项:用户提供的引用[5]涉及大版本升级,这个异常重要——很多团队会卡在版本兼容问题。需要强调pg_upgrade命令的坑点:必须确保扩展版本匹配,否则迁移后可能出现静默错误。准备在回答最后特意提醒这点,并附解决方案链接。</think> 以下为PostgreSQL数据库迁移的完整指南,结合不同场景推荐专业工具和方法: ### 一、迁移方法分类 1. **逻辑迁移** - **适用场景**:跨大版本升级、跨平台迁移、结构变更 - **核心工具**: ```bash # 导出全库数据 pg_dumpall -U postgres -f full_backup.sql # 仅导出单库 pg_dump -U user dbname > dbname.sql ``` - **导入方法**: ```bash psql -U postgres -d newdb -f dbname.sql ``` **优点**:兼容性好,可筛选对象 **缺点**:大型数据库恢复时间长[^3] 2. **物理迁移** - **适用场景**:同版本迁移(如服务器硬件升级) - **操作流程**: ```bash # 停止数据库服务 systemctl stop postgresql # 复制数据目录 rsync -av /var/lib/postgresql/ /new_server/pgdata/ # 修改postgresql.conf中的data_directory ``` **注意**:需确保文件系统权限一致[^3] 3. **滚动迁移(最小停机时间)** ```mermaid graph LR A[主库运行] --> B[创建副本库] B --> C[应用层流量切换] C --> D[停主库追增量] ``` ### 二、专业迁移工具推荐 1. **pgcopydb** - **特点**:并行复制、支持增量同步 ```bash pgcopydb clone --source "host=old dbname=prod" \ --target "host=new dbname=prod" ``` **优势**:TB级数据迁移效率提升50%+,支持断点续传[^4] 2. **pgloader** (支持从MySQL迁移) ```lisp LOAD DATABASE FROM mysql://user@old_host/dbname INTO postgresql://user@new_host/dbname; ``` **亮点**:自动转换数据类型,实时错误日志[^1] 3. **node-pg-migrate** - **适用场景**:CI/CD环境下的版本化管理 ```javascript // 创建迁移脚本 exports.up = (pgm) => { pgm.createTable('users', { id: 'id' }); }; ``` **优势**:迁移脚本版本控制,集成测试框架[^2] ### 三、关键操作步骤 1. **版本升级迁移**(使用pg_upgrade) ```bash pg_upgrade -b /old/bin -B /new/bin \ -d /old/data -D /new/data \ --link # 硬链接加速 ``` **注意**:先执行`pg_checksums`验证数据完整性[^5] 2. **迁移后验证** ```sql -- 数据校验 SELECT md5(t::text) FROM (TABLE old_table ORDER BY id) t EXCEPT SELECT md5(t::text) FROM (TABLE new_table ORDER BY id) t; ``` ### 四、迁移最佳实践 1. **业务低峰期操作**:避开交易高峰时段 2. **预迁移测试**:使用生产数据的1/10在测试环境验证 3. **监控指标**: - 迁移期间主库负载(CPU/IOPS) - 网络传输速率(建议≥1Gbps) - WAL日志堆积量 > **灾难恢复方案**:始终保留源数据库快照直至新库稳定运行72小时[^4] ### 常见问题解决方案 1. **编码冲突**:迁移前执行 `SET client_encoding = 'UTF8';` 2. **外键约束报错**:在导入脚本前添加 `SET session_replication_role = replica;` 3. **权限丢失**:使用`pg_dumpall --roles-only`备份角色[^3] **推荐迁移路径选择**: ``` 小规模/结构变更 → pg_dump MySQL迁移 → pgloader TB级/零停机 → pgcopydb 版本升级 → pg_upgrade 开发环境 → node-pg-migrate ``` **特别提示**:超过1TB的数据库建议采用物理迁移+逻辑校验的组合方案,可减少75%的停机时间[^4][^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值