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

Ora2Pg 24.0 已发布

发布于 2023-07-12,作者 Gilles Darold
相关开源项目

加拿大蒙特利尔 - 2023年7月5日

Ora2Pg

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

此重大版本增加了对 SQL Server 数据库迁移到 PostgreSQL 的官方支持。它还修复了过去八个月以来报告的若干问题,并添加了一些新功能和改进。

  • 为 Ora2Pg 添加 SQL Server 迁移支持。大多数 SQL Server 对象以及数据导出都得到支持。TSQL 存储过程到 plpgsql 的翻译由于 TSQL 中缺乏语句分隔符而变得复杂,但一如既往,Ora2Pg 正在尽最大努力完成尽可能多的工作。还可以使用 SQL Server 数据库进行迁移评估。ora2pg.conf 中添加了一些专用的配置指令。
  • 启用 ALLOW/EXCLUDE 指令与 SHOW_* 报告一起使用,并在设置全局过滤器时抛出致命错误。
  • 添加将 DBMS_LOCK.SLEEP 替换为 pg_sleep。
  • 按函数/过程/包函数拆分成本估算明细。
  • 将 cmin、cmax、ctid 添加到保留关键字列表。
  • 为 PLSQL 代码中 ADD CONSTRAINT 的存在添加成本。这需要约束名称的稳定性。
  • 允许 COPYTABLE 导出类型使用 NULLIF 构造。
  • 添加新的 SEQUENCE_VALUES 导出类型,用于导出 DDL 以根据当前 Oracle 数据库的最后一个值设置序列的最后一个值,如下所示的语句:ALTER SEQUENCE departments_seq START WITH 290;
  • 将 Oracle 变量 : varname 替换为 PG :'varname'
  • 添加对 MySQL PARTITION BY KEY() 的支持,并将其转换为使用表的主键/唯一键定义或 KEY() 子句中指定的列的 HASH 分区表。
  • 使 EXPORT_INVALID 配置指令与 TRIGGER 导出一起使用。到目前为止,禁用的触发器未被导出,将 EXPORT_INVALID 设置为 1 将强制导出禁用的触发器。
  • 添加对 MySQL 生成的更新默认值的支持。例如:CREATE TABLE t1 ( dt DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ); Ora2Pg 将此语法转换为表上的触发器,以在更新事件时强制设置列的值。
  • 将 ST_GEOMETRY 数据类型翻译为 PostGis geometry 数据类型。
  • 将目标列表中的 ROWNUM 替换为 row_number() over () 子句。

新的配置指令

  • 添加 CLOB_AS_BLOB 配置指令,在导出数据时将 CLOB 作为 BLOB 处理。启用后,Ora2Pg 将对 CLOB 应用与 BLOB 相同的行为,并使用 BLOB_LIMIT 设置。当您拥有大型 CLOB 数据时,这可能很有用。默认启用。
  • 添加配置指令 ST_GEOMETRYTYPE_FUNCTION,以便能够设置用于从 ST_Geometry 列中提取几何类型的功能。默认值:ST_GeometryType,例如,对于 ArcSDE,它应设置为 sde.ST_GeometryType。
  • 添加四个新的配置指令,以便能够更改或添加用于从 ST_Geometry 对象和值中提取信息的函数前缀。
    • ST_SRID_FUNCTION:用于从 ST_Geometry 元信息中提取 srid 的 Oracle 函数。默认值:ST_SRID,例如,对于 ArcSDE,它应设置为 sde.st_srid。
    • ST_DIMENSION_FUNCTION:用于从 ST_Geometry 元信息中提取维度的 Oracle 函数。默认值:ST_DIMENSION,例如,对于 ArcSDE,它应设置为 sde.st_dimention。
    • ST_ASBINARY_FUNCTION:用于将 ST_Geometry 值转换为 WKB 格式的 Oracle 函数。默认值:ST_ASBINARY,例如,对于 ArcSDE,它应设置为 sde.st_asbinary。
    • ST_ASTEXT_FUNCTION:用于将 ST_Geometry 值转换为 WKT 格式的 Oracle 函数。默认值:ST_ASTEXT,例如,对于 ArcSDE,它应设置为 sde.st_astext。
  • 添加 INSERT_ON_CONFLICT 配置指令。启用后,它会指示 Ora2Pg 为此类数据导出生成的所有 INSERT 语句添加 ON CONFLICT DO NOTHING 子句。

向后兼容性

  • 更改 CASE_INSENSITIVE_SEARCH 的行为,允许使用排序规则而不是 citext 扩展。要禁用该功能,可以使用 none 值。如果迁移不是 MSSQL,则禁用此功能。
  • 删除 PREFIX_PARTITION 配置指令,它现在被 RENAME_PARTITION 指令取代。之前的行为是从表名、分区名和子分区名(如果有)构建分区名。问题是我们经常达到对象名称的最大长度,这会导致分区名称重复。现在,当 RENAME_PARTITION 启用时,分区表将按照以下规则重命名:<tablename>_part<pos>,其中“pos”是分区号。对于子分区,它是:<tablename>_part<pos>_subpart<pos> 如果这是默认分区/子分区:<tablename>_part_default <tablename>_part<pos>_subpart_default 此更改将破坏向后兼容性,如果仍设置 PREFIX_PARTITION,它将直接启用 RENAME_PARTITION
  • 当序列循环且 START 值大于 MAXVALUE 时,将 START 值设置为 MINVALUE

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

链接与致谢

我要感谢所有提交补丁的用户以及报告错误和功能请求的用户,他们在 changelog 文件中都得到了引用。

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

链接


关于 Ora2Pg :

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

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

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