暂无图片
暂无图片
暂无图片
暂无图片
暂无图片
2021 年 MigOps 对 PostgreSQL 的贡献
Ellison
【网盘链接】
0次下载
157次浏览
2022-08-06
10墨值
3.5

详细介绍

我们MigOps的团队认为,对 PostgreSQL 生态系统的开源贡献增加是向 PostgreSQL 迁移增加的主要原因。世界各地的一些开发人员已经花费了大量的个人和专业时间来保持这个开源数据库软件的美丽。

一些组织甚至聘请了开发人员来贡献和享受功能丰富的 PostgreSQL 软件的自由。我们也尽了自己的一份力!我们的 MigOps 团队自豪地为PostgreSQL 开源生态系统贡献了超过 20,000 行代码,其中包括 PostgreSQL 社区软件的扩展、工具和新功能或补丁。通过本文,我们将讨论 2021 年 MigOps 对 PostgreSQL 生态系统的一些贡献。如果您希望迁移到 PostgreSQL,请立即联系 MigOps

PostgreSQL 生态系统包括 -

(1) PostgreSQL 社区软件
(2) 用于管理 PostgreSQL 备份、高可用性、监控等的开源工具。
(3) PostgreSQL 扩展
(4) Oracle(或其他数据库)与 PostgreSQL 兼容的扩展
(5) Ora2Pg 类似开源用于 Oracle 到 PostgreSQL 迁移的工具
(6) 为支持运行 PostgreSQL 的企业或用户而构建的更多工具

MigOps 在Gilles Darold(MigOps 的首席技术官)和 Avinash Valarapu(MigOps 的首席执行官)的领导下编写了几个扩展和补丁。我们将我们的贡献分为以下几部分,我们将通过参考来简要地查看它们。

  1. MigOps 于 2021 年宣布的扩展
  2. PostgreSQL 社区软件的补丁
  3. 添加到 Ora2Pg 的功能 - 一个开源 Oracle 到 PostgreSQL 迁移工具
  4. 推送到现有 PostgreSQL 扩展的补丁
  5. 补丁推送到其他开源社区,例如 Golang。
MigOps 于 2021 年宣布的扩展

我们的 MigOps 团队在迁移评估或实际迁移阶段确定了对新扩展的需求。一些客户向我们提出了可能涉及为 PostgreSQL 编写新扩展的独特要求。以下是团队在 2021 年开发和贡献的新扩展列表。

请注意:下面提到的所有扩展都是使用最自由的 PostgreSQL 许可证发布的。这允许任何人在任何给定时间点使用、分发或重新利用。

  • credcheck:此扩展提供一般凭据检查,将在用户创建期间、密码更改期间和重命名用户期间进行评估。用户现在将能够对用户名或密码强制执行规则,例如最小大小写字符、特殊字符、数字等。
  • pg_dbms_job:在为我们的一位客户执行从 Oracle 到 PostgreSQL 的数据库迁移时,我们注意到在他们的 Oracle 环境中大量使用 DBMS_JOB。这种依赖增加了额外的开发时间来实现可能的解决方法。因此,MigOps 决定使用最自由的 PostgreSQL 许可证(开源)开发一个扩展。迁移到 PostgreSQL 的用户现在可以在类似于 Oracle DBMS_JOB 包的作业队列中安排和管理作业。此扩展提供与 Oracle 的 DBMS_JOB 包的完全兼容性。
  • pg_dbms_errlog:与 pg_dbms_job 类似,构建扩展的需求: pg_dbms_errlog 是在将客户从 Oracle 迁移到 PostgreSQL 时出现的。大量使用 Oracle 的 DBMS_ERRLOG 包来记录 DML 错误。在构建与 Oracle 中的 DBMS_ERRLOG 包兼容的 pg_dbms_errlog 后,我们能够在实施可能的变通方法的同时消除大量的开发时间。

立即联系 MigOps 进行 PostgreSQL 迁移评估

PostgreSQL 社区软件的补丁

在执行迁移评估或迁移时,我们遇到了一些需要复杂解决方法的不兼容问题。其中一些不兼容性使我们能够将补丁作为新功能贡献给 PostgreSQL 社区软件,其中一些在下面提到 

  • regexp_* 函数:添加新函数 regexp_count()、regexp_instr()、regexp_like() 和 regexp_substr(),并使用一些新的可选参数扩展 regexp_replace()。状态:承诺。补丁和讨论:https ://commitfest.postgresql.org/34/3042/

  • 语句级别的回滚:允许 PostgreSQL 扩展在事务中 SQL 语句的开始和结束(包括中止)执行操作,以便能够在语句级别实现回滚。状态:尚未实施。补丁和讨论:https ://commitfest.postgresql.org/34/2860/
  • 隐藏列:在 PostgreSQL 中实现隐藏列功能的补丁。状态:尚未实施。 

补丁和讨论:https ://commitfest.postgresql.org/35/3361/

  • 新增诊断项:提议新增2个与解析动态sql语句相关的诊断项。状态:进行中。 

补丁和讨论:https ://commitfest.postgresql.org/35/3258/

补丁评论:
  • 更具可扩展性的 multixacts 缓冲区和锁定。补丁和讨论:https ://commitfest.postgresql.org/36/2627/
  • 会话变量和 LET 命令。补丁和讨论:https ://commitfest.postgresql.org/36/1608
添加到 Ora2Pg 的功能 - 一个开源 Oracle 到 PostgreSQL 迁移工具

Ora2Pg 是一个开源的 Oracle 和 MySQL 到 PostgreSQL 的迁移工具,由 Gilles Darold(MigOps 的 CTO)维护了 21 年。该工具已帮助许多公司从 Oracle 迁移到 PostgreSQL,以降低其基础架构成本。我们为 Ora2Pg 添加了一些非常有用的功能,这些功能在 2021 年长期悬而未决。其中一些将在下面提到。

  • 在将数据从 Oracle 迁移到 PostgreSQL 时添加数据验证功能。此功能能够将从指向源 Oracle 表的外部表检索到的数据与使用 Ora2Pg 或任何迁移工具迁移的本地 PostgreSQL 表进行比较。
  • 允许多进程进行数据比较以验证数据导入。 
  • 添加了一个新选项 --blob_to_lo,可用于自动将 BLOB 导出为大对象。超过几 GB 的大对象可以存储在pg_largeobjects中,只有它们的 OID 存储在基表中。
  • 添加了命令行选项 -W | --where 子句从 Oracle 中查询符合特定条件的数据。这在将仅匹配指定条件的数据从 Oracle 迁移到 PostgreSQL 时被大量使用。
  • 添加了使用 Oracle Foreign Data Wrapper oracle_fdw 导出数据。这是为减少整体迁移时间而实施的主要功能之一。请阅读此博客文章了解更多详细信息。
  • 当 Oracle 数据库中存在大量对象时,提高了导出性能。
  • 增加了对 XML 功能的检测。这将在使用 Ora2Pg 迁移评估报告分析 Oracle 到 PostgreSQL 数据库迁移的成本时大量使用。 
  • 添加了新的测试来检查序列及其最后的值以及两侧的身份列数。
  • 在启用 USE_ORAFCE 时改进了迁移评估,并在将架构从 Oracle 迁移到 PostgreSQL 时改进了 Orafce 扩展支持。 
  • 添加了用 encode() 替换 UTL_RAW.CAST_TO_RAW。
  • 添加了使用 xmlparse(DOCUMENT convert_from(..., 'utf-8')) 重写 XMLTYPE()。
  • 添加了对 mysql_fdw 外部数据包装器的支持,以将数据从 MySQL 导出到 PostgreSQL。
  • 添加了对自动将所有 NUMBER(* ,scale)转换为默认 NUMERIC 数据类型以外的适当数据类型的支持。使用 NUMERIC 数据类型会占用更多空间并导致 PostgreSQL 中的性能问题。 
  • 添加了一个新操作来仅报告 Oracle 和 PostgreSQL 表之间的行数差异。
  • 在 2021 年也为 Ora2Pg 做出了许多错误修复和改进。
推送到现有 PostgreSQL 扩展的补丁

MigOps 通过详细的评估来处理从 Oracle 和任何数据库到 PostgreSQL 的每次迁移。在评估过程中,我们确定了数据库和应用程序迁移所涉及的真实人日数。这些评估帮助我们确定必须推送到现有 PostgreSQL 扩展的补丁,以使迁移过程更加顺畅。其中一些补丁已推送到 Orafce、PGTT、Orafce_mail 和下面提到的更多扩展。以下是推送到 PostgreSQL 扩展的一些 PR 或补丁。

  • Orafce:为 PostgreSQL 提供 Oracle 兼容性的扩展。 
    • 添加了 Oracle 中定义的 regexp_* 函数以在 PostgreSQL 中提供相同的行为。 
    • 添加了 DBMS_UTILITY.GET_TIME 函数。它从过去的某个时间点返回当前时间(以 100 秒为单位)。 
    • 在处理 NULL 参数时实现了与 Oracle 兼容的 oracle.least() 和 oracle.greatest() 函数。

  • Orafce_mail:允许从 PostgreSQL 数据库发送电子邮件的扩展。这提供了与 Oracle 中的 utl_mail 和 DBMS_MAIL 包的兼容性。 
    • 修复了 libcurl < 7.69.0 的编译错误。

  • code2pg:一个工具,用于评估、提供估计的工作天数并将带有嵌入式 SQL 代码的应用程序代码从 Oracle 迁移到 PostgreSQL。
    • 添加了对用 Perl 编写的应用程序的支持。
    • 添加了从分析中排除指令。

  • pgtt:在 PostgreSQL 中提供 Oracle 全局临时表功能的扩展。 
    • 添加了对 PostgreSQL 14 的支持。 
    • 修复了当存在带有字符串常量的 CHECK 约束时创建 GTT。
    • 添加了补丁以防止代码在并行进程中执行。 
    • 如果表是临时表或 pg_catalog 的一部分,则通过不查找现有的全局临时表来提高性能。

  • pgbadger : 最广泛使用的 PostgreSQL 日志分析器工具。
    • 在 log_line_prefix 中添加了查询 id 的检测。查询 id 可用于 PostgreSQL 14。 
    • 添加了在使用 --explode 时应用多进程生成报告的功能。 
    • 在增量模式下添加了 `--iso-week-number`,日历的周数从星期一开始,并遵循 ISO 8601 周数。  
    • 添加了命令行选项 --keep-comments 以不从规范化查询中删除注释。 
    • 添加了补丁以跳过第三方软件在 PostgreSQL 日志文件中引入的 INFO 行。 
    • 添加了与 PostgresPro 日志文件的兼容性,包括语句持续时间后的行号和字节大小。  
    • 改进了 Windows 的可移植性。

  • pgFormatter:一个 PostgreSQL SQL 格式化程序和美化器,可以作为控制台程序或 CGI 工作。 
    • 替代格式类型(选项 -t)现在将 GROUP BY 子句中的枚举保留在一行上。 
    • 添加了一个新的命令行参数 -k 或 --keep-newline,以保留 plpgsql 代码中的空行。 
    • 添加了一个补丁,首先在本地目录中查找 .pg_format 配置文件,然后在主目录中查找。  
    • 添加了强制 UTF8 编码的补丁,以解决对象名称解析问题中的 unicode 字符。 
    • 在 CGI 界面中添加了一个将格式化文本复制到剪贴板的按钮。
补丁推送到其他开源社区,例如 Go。

MigOps 还为 Golang 等其他开源社区做出了贡献。以下是所贡献的补丁和功能的选定列表。 

  • 戈克龙
    • 修复了基于 golang 的 cron 库的竞争条件。读写锁之间的竞争条件导致引擎卡住。提出 PR 并修复了这个库。https://github.com/go-co-op/gocron/pull/177
  • gjson
    • 添加到基于 golang 的 JSON 库的功能。当前库具有 JSON 路径,JSON 查询功能。但是对于模式匹配,它们取决于通配符而不是使用正则表达式。因此,提出了一个新的拉取请求,其中 JSON 路径将基于正则表达式发生。https://github.com/tidwall/gjson/pull/257
结论

我们首先要感谢我们所有的客户,他们是许多想法的驱动因素,这些想法导致了对 PostgreSQL 生态系统的贡献。我们的一些客户与我们联系进行数据库迁移评估也是识别一些无法直接在 PostgreSQL 中工作的复杂代码的原因。这促使我们构建新的扩展或补丁,不仅可以帮助我们的客户,还可以帮助世界各地的用户迁移到 PostgreSQL。MigOps 将很高兴为您提供数据库迁移评估支持,这些评估将由人工而非自动化工具执行。如果您希望完成评估并成为为 PostgreSQL 开源生态系统做出贡献的原因,请立即联系我们或填写以下表格。

【版权声明】本资源为墨天轮用户上传,如果您发现资源涉嫌侵权,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

贡献排行榜
发布数108 · 被下载次数18612
发布数285 · 被下载次数6305
发布数1 · 被下载次数3952
发布数27 · 被下载次数1919
P
发布数1 · 被下载次数1630
发布数2 · 被下载次数988
发布数99 · 被下载次数906
发布数9 · 被下载次数877
C
发布数45 · 被下载次数694
发布数18 · 被下载次数613
近期活动
墨天轮数据库沙龙(行业洞察系列)-轨交核心领域应用实践
05/08 19:30 1人报名
搜索服务统一治理(跨引擎多个集群监控管理、流量管控、服务编排)【Workshop 第一期 -北京站】
05/15 13:30 0人报名
数据库服务团队技术分享第十四期-日常运维中的技术决策(安全生产系列)
05/15 20:00 0人报名