2025年9月25日: PostgreSQL 18 发布!

Ora2Pg 23.2 发布

发布于 2022-10-17,作者 MigOps
相关开源项目

马达加斯加,塔那那利佛 - 2022 年 10 月 8 日

Ora2Pg 23.2 发布

Ora2Pg 版本 23.2 正式发布,这是一款免费且可靠的工具,用于将 Oracle 数据库迁移到 PostgreSQL,现已公开发布供下载。

本次发布修复了过去八个月中报告的若干问题,并增加了一些新功能和改进。

  • 添加了对 MySQL KEY 和 LINEAR KEY 分区的导出,翻译为 HASH 分区。
  • 允许导出名称中包含美元符号的对象。
  • 添加了对 MySQL >= 8.0 的 CHECK 约束的导出。
  • 添加了从 MySQL 导出函数/表达式索引。
  • 添加了对 MySQL 虚拟列的导出。
  • 如果 numeric 类型的 scale 高于 precision,则移除其 scale 和 precision。PostgreSQL 不支持 scale 显式高于 precision 的 decimal/numeric 属性。
  • 添加了命令行选项 --drop_if_exists,用于在创建对象前添加删除已存在对象的语句。这对应于 DROP_IF_EXISTS 配置指令。
  • 添加了选项 -C | --cdc_file,以便能够更改用于存储/读取每个表 SCN 的默认文件名。默认是当前目录下的 TABLES_SCN.log。这是由 --cdc_ready 选项写入的文件。
  • 通过 -P 命令行选项,添加了多进程以统计 PostgreSQL 表中的行数(TEST_COUNT)。
  • 添加了对带有 out 参数的 PostgreSQL 14 存储过程的支持。
  • 将默认 PostgreSQL 数据库目标版本设置为 14。

新的配置指令

  • 添加了配置指令 MVIEW_AS_TABLE 和命令行选项 --mview_as_table,用于设置要导出为表的物化视图。默认情况下不导出。值必须是空格或逗号分隔的物化视图名称列表或正则表达式。如果对象名称是物化视图且导出类型是 TABLE,则该视图将作为 create table 语句导出。如果导出类型是 COPY 或 INSERT,则将导出相应的数据。
  • 添加了配置变量 FDW_IMPORT_SCHEMA,用于重命名用于数据迁移的外键表将要创建的 schema。如果您使用多个 ora2pg 实例通过外键数据包装器进行数据迁移,您可能需要为每个实例更改 schema 的名称。默认:ora2pg_fdw_import
  • 添加了 TRANSFORM_VALUE 配置指令,用于在从 Oracle 检索数据时应用一个表达式。例如:TRANSFORM_VALUE CLOB_TABLE[CHARDATA:translate("CHARDATA", chr(0), ' ')] 用空格替换字符串中的所有 Oracle char(0)。
  • 添加了 EXCLUDE_COLUMNS 配置指令。与用于重新定义表结构的 MODIFY_STRUCT 不同,此指令允许按表指定必须从导出中排除的列的列表。例如:EXCLUDE_COLUMNS T1(nocol1,nocol2) T2(nocol1,nocol2)
  • 添加了新的配置指令 EXPORT_GTT,用于使用 pgtt 扩展支持的语法导出 Oracle 全局临时表。更多信息请参阅 https://github.com/darold/pgtt。默认不导出全局临时表,因为 PostgreSQL 原生不支持它们。
  • 添加了新的配置选项 NO_EXCLUDED_TABLE。默认情况下,Ora2Pg 会从导出中排除一些不应包含在导出中的 Oracle“垃圾”表。这种行为会产生大量 REGEXP_LIKE 表达式,在查找表时会减慢导出速度。要禁用此行为,请启用此指令,您将必须自行排除或清理不需要的表。用于排除表的正则表达式定义在 lib/Ora2Pg.pm 中的 @EXCLUDED_TABLES 数组中。请注意,此行为独立于 EXCLUDE 配置指令。

向后兼容性

  • 强制重写所有以零年份 0000 开头的无效日期,当它是默认值时重写为 1970-01-01,当是数据时重写为 NULL。旧的行为是仅替换 0000-00-00 日期。
  • 直到现在,由于 Ora2Pg 无法检测 TRUNC(date) 的参数是日期还是数字,因此有许多未转换的 TRUNC(date) 调用。问题在于 Oracle 也有 TRUNC(number),Ora2Pg 试图在有疑问时避免应用转换。在我遇到的绝大多数迁移中,TRUNC(number) 的情况非常少,所以现在所有 TRUNC() 的调用都将转换为 date_trunc()。可能会有误报的重写,但这应该比目前的情况工作量少得多。

有关更改的完整列表,请参阅 https://github.com/darold/ora2pg/blob/master/changelog

感谢所有贡献者,他们在 changelog 文件中都有提及。

链接与致谢

我想感谢所有提交补丁的用户以及报告 bug 和功能请求的用户,他们都在 ChangeLog 文件中被提及。

Ora2Pg 是一个开放项目。任何为构建更好的工具做出的贡献都受到欢迎。您只需通过 GitHub 工具或直接发送您的想法、功能请求或补丁至 ora2pg@darold.net。

链接


关于 Ora2Pg :

Ora2Pg 是一个简单可靠的工具,用于从 Oracle 迁移到 PostgreSQL。它自 2001 年开始开发,可以将大多数 Oracle 对象和数据导出为兼容 PostgreSQL 的代码。

Ora2Pg 可以在任何平台上运行,并根据 GPL v3 许可证提供。

文档、下载和支持请访问 http://www.ora2pg.com/