查看原文
其他

PostgreSQL 2022 年度摘要

BB仔 Bytebase 2023-05-09


原文出自「A short summary of the Year 2022 in the PostgreSQL world」https://www.migops.com/blog/a-short-summary-of-the-year-2022-in-the-postgresql-world/,略有删减。
我们早些时候发布了 PostgreSQL 2021 年度摘要。我们代表 PostgreSQL 社区和 MigOps 的团队,祝所有的读者 2023 新年快乐。2022 年对 PostgreSQL 来说又是伟大的一年,新的功能、现有扩展的补丁、众多新的扩展和支持迁移到 PostgreSQL 的贡献。在这篇文章中,我们将看到 PostgreSQL 2022 年度摘要。
现在很常见的是,PostgreSQL 被 Oracle和 SQL Server 用户作为迁移目标。选择 PostgreSQL 的理由已经不再是它不需要许可证 (License),而是它成为了一个可以提供广泛的企业功能的数据库。如果没有每个 PostgreSQL 用户的努力,今天是不可能发生这一切的,他们是 PostgreSQL 采用率提高的原因。特别感谢参与补丁提交或审查、提交功能需求、写博客和文章、在 PostgreSQ L会议上发言、在 postgres 邮件列表中讨论的每个人,以及最主要的, PostgreSQL 背后的那些人。

2022 年里一些有趣的 PostgreSQL 更新摘要

  • DB-Engines 排名 - PostgreSQL 是 2022年的排在前三的 DBMS 之一。

  • PostgreSQL 15 发布

  • 2022 年发布的小版本 (Minor version)。

  • 在 2022年进入 EOL (End of Life/退役) 的 PostgreSQL 版本。

  • 在 2022年新出现的扩展。

  • 被发现并修补的安全漏洞。

  • Ora2Pg 加入了更多简化迁移到 PostgreSQL 的功能。

  • 2022 年的核心小组报告。


DB-Engines 排名 - PostgreSQL 在 2022 年排在前三

DB-Engines 数据库流行度排名 --2017 年、2018 年和 2020 年都将 PostgreSQL 列为年度最佳 DBMS。在2021年,PostgreSQL 排在亚军,而 Snowflake 排在第一。在 2022 年,Snowflake 继续排名第一,Google BigQuery 排名第二,PostgreSQL 排名第三。这大大显示了 PostgreSQL 在 2022 年比 MySQL、Oracle 和 SQL Server 等关系型数据库更受欢迎。


PostgreSQL 15 发布 - 一些功能

PostgreSQL 社区在 2022 年 10 月 13 日宣布了 PostgreSQL 15 的发布。这个版本包括了最令人期待的功能,包括在高分布式工作负载下的性能、管理能力、可观察性和安全性方面的改进。

PostgreSQL 15 的特点和改进

  • 从 PostgreSQL 15 开始支持 SQL MERGE 命令。

  • 使用 pg_baesbackup 进行压缩备份。现在它同时支持服务端和客户端 - gzip、LZ4 和 Zstandard 压缩。

  • 服务器日志输出结构现在可以使用 JSON ,通过把 GUC log_destination 设置为 jsonlog。

  • pg_stat_statements 现在可以为 temp 收集 I/O 时间统计信息。

  • 允许逻辑复制中的 PUBLICATION 通过行级和列级的限制过滤其内容。CREATE PUBLICATION 命令现在支持指定一个 SCHEMA 的所有表以及它将来要创建的表。

  • 在创建唯一约束或索引时,可以选择使用 NULLS NOT DISTINCT 子句来避免将 NULL 条目视为 DISTINCT 的行为。

  • Postgres 15 现在支持 NUMERIC 列的负刻度或大于精度的刻度。

  • 非超级用户现在可以被授予 GUC 参数的 SET 和 ALTER SYSTEM 权限。

  • 非超级用户可以通过 pg_checkpoint 角色发布 CHECKPOINT。

  • 在对单一列进行排序时的巨大性能改进。对单列进行排序时,将不再涉及存储整个元组。

  • Generation memory allocator 而不是 "aset "分配器现在允许利用较少的内存进行排序操作。

  • 支持 postgres_fdw 服务器上的并行提交,优化了分布式工作负载。

  • 一个新的模块 pg_walinspect 现在可以使用 SQ L函数来检查 WAL 段的内容。这类似于 pg_waldump,但可以通过 SQL 访问。

  • 改进了窗口函数的查询性能:row_number(), rank(), dense_rank() 和 count(),以及在引用多个 Foreign Tables 时,可以通过并行的方式进行扫描。

  • 在 PostgreSQL 15 中,引用分区表的查询计划时间得到进一步改善。

  • CLUSTER 命令现在支持在分区表上使用。

  • SELECT DISTINCT 现在可以被并行化,可以用更多的并行工作者来加速执行。

  • 增加了新的正则表达式函数 regexp_count(), regexp_instr(), regexp_like(), 和 regexp_substr(),以便与其他关系型数据库兼容。

  • random() 函数的算法得到了进一步改进。


2022 年发布的小版本 (Minor version)

PostgreSQL 大版本下的小版本通常在每个季度的第二个月的第二个星期二发布。PostgreSQL 15 在 2022年 已经有一个小版本发布。其他的 PostgreSQL 大版本,如 10、11、12、13 和 14,今年都有 4 个小版本发布。
以下是各主要版本在 2022 年发布的小版本。请确认你是否在使用大版本的最新小版本。
  • PostgreSQL 15 - 15.1

  • PostgreSQL 14 - 14.2, 14.3, 14.4, 14.5, 14.6

  • PostgreSQL 13 - 13.6, 13.7, 13.8, 13.9

  • PostgreSQL 12 - 12.10, 12.11, 12.12, 12.13

  • PostgreSQL 11 - 11.15, 11.16, 11.17, 11.18

  • PostgreSQL 10 - 10.20, 10.21, 10.22, 10.23 (此版本已过期)


在 2022 年进入 EOL (End of Life/退役) 的版本

PostgreSQL 10 在 2022 年 11 月 10 日发布了其最后的小版本 10.23。PostgreSQL 社区不打算再为这个大版本发布任何安全补丁或错误修复。这确实给使用 PostgreSQL 10,没有尽早计划进行升级的客户带来了紧迫性。你可以用MigOps 的文章作为例子,使用 pg_upgrade 与硬链接升级到支持的大版本。
请看 PostgreSQL 的版本政策,以了解一个大版本是否已经进入 EOL了。


2022 年新出现的扩展

PostgreSQL 扩展是从 Oracle/SQL Server 迁移到 PostgreSQL 的主要原因之一。世界各地的众多开发人员贡献了他们的补丁或想法,2022 年也有许多新扩展的诞生:
  • pg_ivm: pg_ivm 模块提供 PostgreSQL 中物化视图的增量维护(IVM)。与 REFRESH MATERIALIZED VIEW 所需的重新计算相比,它可以更有效地更新物化视图。

  • PGSpider: PGSpider Extension(pgspider_ext)是为分布式大数据构建高性能 SQL 集群引擎的一个扩展。pgspider_ext 使 PostgreSQL 能够使用 Foreign Data Wrapper(FDW) 访问一些数据源,并纵向检索分布式数据源。

  • PLHaskell: 这个项目是 PostgreSQL 的一个 "程序语言 "扩展,允许在 SQL 代码中执行 Haskell 的代码。

  • Rapidrows: RapidRows 是一个开源的、零依赖的、单二进制的 API 服务器,它可以被配置为运行 SQL 查询、执行预设的工作和将 PostgreSQL 通知转发到 websockets。

  • pg_enquo: 一个PostgreSQL扩展,提供加密查询操作(enquo)。

  • pg_show_rewritten_query: 显示在分析和重写步骤之后,将被执行的查询(PostgreSQL 15+)。

  • oracle_fnd : 使用自定义变量模拟 FND_GLOBAL 和 FND_PROFILE 包的 API 函数 (由 MigOps 发布)。

  • pg_wkhtmltopdf: PostgreSQL 使用 Webkit (QtWebKit) 实现转换 HTML 为 PDF。

  • pg_rowalesce:  该扩展的杀手级功能是 rowalesce() 函数。rowalesce() 就像 coalesce(),但针对的是行和其他复合类型。从其任意数量的参数行中,对于每个字段/列,rowalesce()从该字段/列有非空值的第一行中取值。

  • pg_mupdf: 在 PostgreSQL 里,使用 MuPDF 将 HTML 转换成 PDF。

  • pg_mockable: 用来创建其他 Schema 里函数的 Mock 版本。

  • pg_migrate: pg_migrate 是一个 PostgreSQL 扩展和 CLI,可以让你对表和索引进行 Schema 变更。与 ALTER TABLE 不同的是,它采用的是在线变更,在迁移过程中不需要对被处理的表持有长期的独占锁。它建立了一个目标表的副本,先在副本上进行变更,然后再将它们交换。

  • pg_injection: PostgreSQL 对 sql 注入的检测。

  • pg_icu_parser: 使用 ICU boundary analysis 的 PostgreSQL 文本搜索 Parser。

  • pg_diffix: 用于强动态匿名化 (strong dynamic anonymization)。它确保简单 SQL 查询的答案是匿名的。欲了解更多信息,请访问 Open Diffix 网站。

  • notify_now: 这个简单的扩展允许你使用内置的 PostgreSQL NOTIFY API 从一个查询返回多个响应。

  • lower_quantile: 一个计算 lower quantile 的扩展。


被发现并修补的安全漏洞

2022 年,在核心服务端、客户端库、contrib 模块、客户端 contrib 模块和二进制包装中,总共发现了 2 个安全漏洞。从 PostgreSQL 社区维护的安全文档中可以看出,这些漏洞已经通过小版本推送的补丁进行了修复。
简而言之,每个 PostgreSQL 大版本被检测和修复的安全漏洞数量如下。请确保验证你是否使用了 PostgreSQL 发布说明中的最新稳定版本。
PostgreSQL 10 在 2023 年将不再被支持。在测试时升级到最新的 PostgreSQL 大版本是非常重要的。
  • PostgreSQL 11 - 2

  • PostgreSQL 12 - 2

  • PostgreSQL 13 - 2

  • PostgreSQL 14 - 2


Ora2Pg 加入了更多简化迁移到 PostgreSQL 的功能

Ora2Pg 是把迁移到 PostgreSQL 的工作简单化的主要原因之一。Ora2Pg 是唯一支持 Oracle 向 PostgreSQL 迁移的开源工具,已经活跃了 22 年。在 2022 年,Ora2Pg 有 2 个大版本,包括支持通过 CDC 迁移许多复杂代码对象。具体请参考 v23.1 和 v23.2 的发布说明。


2022 年核心小组报告

核心小组通过一份详细的报告提供所开展活动的透明度。2022 年的报告还没有公布,不过,欢迎阅读从 2019 年 6 月到 2021 年 12 月所开展活动的报告:https://www.postgresql.org/developer/corereports/june2019_december2021/。


总结

PostgreSQL 的普及和采用逐年增加。在 MigOps,与 2021 年相比,从 Oracle 迁移到 PostgreSQL 的客户数量增长了 300%。我们也开始有客户对从 SQL Server 到 PostgreSQL、Informix 到 PostgreSQL 和 DB2 到 PostgreSQL 的迁移表现出兴趣。我们也注意到在 2022 年对迁移评估和数据库迁移支持的需求增加了。较大组织的领导团队正在考虑使用以下方法来节约成本:
  1. 迁移到PostgreSQL,不需要支付任何许可费,有更好的功能支持企业。

  2. 迁移到云端,减少基础设施维护成本。
在 MigOps 我们有一个团队来支持你迁移到 PostgreSQL 和云。今天就联系我们,看看我们如何能简化你的数据库迁移工作。


    Star History 开源精选|国货之光
    苍狼白鹿,星霜几度|万字长文回顾 2022 年数据库行业
    Bytebase 的 2022|埋头苦干,孕育希望
    混迹 Hacker News (HN) 一年的一点经验

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存