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

PostgreSQL 周刊 - 2021年1月24日

发布于 2021-01-25 作者:PWN
PWN

PostgreSQL 周刊 - 2021年1月24日

本周人物:https://postgresql.life/post/marc_linster/

PostgreSQL 产品新闻

sqlite_fdw 1.3.1 发布。 https://github.com/pgspider/sqlite_fdw

InfluxDB fdw 0.3 发布 https://github.com/pgspider/influxdb_fdw

griddb_fdw 1.3 发布。 https://github.com/pgspider/griddb_fdw

pg_activity 2.0.0 发布,一个用于 PostgreSQL 服务器活动监控的类似 top 的应用程序。 https://github.com/dalibo/pg_activity/releases/tag/v2.0.0

一月份的 PostgreSQL 工作岗位

https://archives.postgresql.org/pgsql-jobs/2021-01/

PostgreSQL 相关新闻

Planet PostgreSQL:https://planet.postgresql.org/

本周 PostgreSQL 周报由 David Fetter 提供。

请在太平洋标准时间(PST8PDT)周日晚上3:00之前将新闻和公告发送至 david@fetter.org。

已应用补丁

Tomáš Vondra 提交了

Heikki Linnakangas 提交

Michaël Paquier 提交

  • 重构 CLUSTER、REINDEX 和 VACUUM 的选项处理。这延续了 b5913f6 中完成的工作。这些命令的所有选项都更改为使用十六进制值而不是枚举,以减少引入新选项时出现兼容性错误的风险。每个选项集都移到一个新结构中,该结构可以扩展更多非布尔选项(VACUUM 已经如此)。REINDEX 的代码经过重构,以便手动 REINDEX 命令通过 utility.c 中的单个例程,就像 VACUUM 一样,以便在命令需要经过多个事务时简化选项参数的分配处理。这可以作为这些命令未来补丁的基础设施,包括 reindex 过滤和表空间支持。根据与下面提到的人员以及 Alvaro Herrera 和 Peter Eisentraut 的讨论。作者:Michael Paquier, Justin Pryzby 审阅者:Alexey Kondratov, Justin Pryzby 讨论:https://postgr.es/m/X8riynBLwxAD9uKk@paquier.xyz https://git.postgresql.org/pg/commitdiff/a3dc926009be833ea505eebd77ce4b72fe708b18

  • 修复 ALTER DEFAULT PRIVILEGES 中重复的对象。在此命令中指定重复的对象会导致 pg_default_acl 中的唯一约束冲突或“tuple already updated by self”错误。与 GRANT/REVOKE 类似,在处理每个子命令后增加命令 ID,以允许此情况透明工作。通过调整 privileges.sql 中的一个现有查询来添加回归测试,以加强这种情况。报告者:Andrus 作者:Michael Paquier 审阅者:Álvaro Herrera 讨论:https://postgr.es/m/ae2a7dc1-9d71-8cba-3bb9-e4cb7eb1f44e@hot.ee 回溯通过:9.5 https://git.postgresql.org/pg/commitdiff/21378e1fefedcaed3d855ae7aa772555295d05d6

  • 为 DROP OWNED BY 与默认 ACL 添加回归测试。DROP OWNED BY 有一个特定的代码路径来移除 pg_default_acl 中存储的 ACL,在清理没有现有测试覆盖的共享依赖项时。这个问题是在深入研究由 21378e1 修复的错误时发现的。由于 ALTER DEFAULT PRIVILEGES 会影响在默认权限可见时创建的所有对象的 ACL,因此测试使用事务回滚来隔离测试,并避免对并行运行的其他会话产生任何影响。审阅者:Álvaro Herrera 讨论:https://postgr.es/m/YAbQ1OD+3ip4lRv8@paquier.xyz https://git.postgresql.org/pg/commitdiff/a36dc04d424a6bfa03ee2cf75c85a6b7f9697e70

  • 在 MSVC 脚本中将“cl /?”更改为“cl /help”以进行平台检测。“cl /?”在真实驱动器或虚拟驱动器上运行时会产生不同的输出(可以使用简单的 subst 命令设置),这会导致 MSVC 脚本在虚拟驱动器上构建时出错,因为无法检测到要使用的平台。“cl /help”,相反,在真实或虚拟驱动器上使用时会产生一致的输出。更改为“/help”允许编译在驱动器顶部是代码库一部分的情况下与虚拟驱动器一起工作,而不会影响真实驱动器上的构建。报告者:Robert Grange 作者:Juan José Santamaría Flecha 讨论:https://postgr.es/m/16825-c4f104bcebc67034@postgresql.org https://git.postgresql.org/pg/commitdiff/733d670073efd2c3a9df07c225006668009ab793

  • 将 SSL 信息回调移到更早的位置以捕获更多信息。在连接建立期间检索状态更改信息的 callback 仅在连接大部分建立后才安装,因此提供的信息不多,并且错过了与握手相关的任何详细信息。它还使用 SSL_state_string_long() 扩展了 callback,以打印更多关于 SSL 对象中状态更改的信息。同时,修复了一些错误地引用 callback 及其在 fe-secure.c 中先前位置的注释。作者:Daniel Gustafsson 讨论:https://postgr.es/m/232CF476-94E1-42F1-9408-719E2AEC5491@yesql.se https://git.postgresql.org/pg/commitdiff/af0e79c8f4f4c3c2306855045c0d02a6be6485f0

  • 在 cryptohash 基础设施中引入 SHA1 实现。通过此提交,SHA1 在使用 OpenSSL 构建后端时通过 OpenSSL 提供的 EVP 进行处理,并使用 KAME 作为备用实现,KAME 位于 pgcrypto 中,并已为与 init、update 和 final 例程集集成进行了格式化。结构和例程已重命名,以使其与 MD5 和 SHA2 的备用实现保持一致。uuid-ossp 长期以来一直使用 pgcrypto 的快捷方式来获取 SHA1 的副本(如果需要)。这取决于 ./configure 中的构建选项,因此它清理了一些代码并消除了 pgcrypto 和 uuid-ossp 之间的构建依赖。请注意,这将有助于重构 HMAC,因为 pgcrypto 提供使用 MD5、SHA1 或 SHA2 的选项,因此第二个选项是使其成为可能所缺少的。作者:Michael Paquier 审阅者:Heikki Linnakangas 讨论:https://postgr.es/m/X9HXKTgrvJvYO7Oh@paquier.xyz https://git.postgresql.org/pg/commitdiff/a8ed6bb8f4cf259b95c1bff5da09a8f4c79dca46

Fujii Masao 提交

Peter Eisentraut 提交

Magnus Hagander 已推送

Robert Haas 提交

Tom Lane 提交

Bruce Momjian 已推送

Amit Kapila 提交

Thomas Munro 推送

待处理补丁

Craig Ringer 发送了一个补丁,用于交叉引用信号处理逻辑上的注释。

Joel Jacobson 发送了一个补丁,用于实现 catalog_oidjoins.pl,该脚本从 catalogs.sgml 中解析 catalog 引用。

Bertrand Drouvot 发送了另一个修订版本的补丁,用于在备用服务器上启用最小化的逻辑解码。

Justin Pryzby 发送了另一个修订版本的补丁,用于 g_dump:将 CLUSTER ON 作为一个单独的 dump 对象,因为它需要在所有子索引被恢复并附加之后才能恢复。

John Naylor 发送了另一个修订版本的补丁,用于使截断时间戳到更广泛的间隔成为可能。

Robert Haas 发送了一个补丁,用于移除 CheckpointLock。

Craig Ringer 发送了一个补丁,用于添加 ProcessInterrupts_hook。

Atsushi Torikoshi 发送了一个补丁,用于修复 TOAST 条件错误的边界情况,该情况与列大小有关。

Kyotaro HORIGUCHI 和 Noah Misch 交换了补丁,用于测试快照过时和 wal_level=minimal,避免使用 RelationNeedsWAL 来识别关系持久性,并在 WAL 跳过期间保持页面 LSN 更新。

Heikki Linnakangas 发送了两个修订版本的补丁,用于将一些 ResourceOwnerEnlarge() 调用移到更安全和清晰的位置,使 resowners 更易于扩展,并使 hash_resource_elem 在输入为 64 位时工作得更好。

Michail Nikolaev 发送了一个补丁,用于在备用服务器上完全支持索引 LP_DEAD 提示位。

Vigneshwaran C 发送了另一个修订版本的补丁,用于为 PUBLICATION 添加了模式级支持。

Masahiko Sawada 发送了两个修订版本的补丁,用于引入用于选择索引 vacuum 策略的 IndexAM API,根据相同策略选择索引 vacuum 策略,并在索引未增长时跳过 B-tree bulkdelete。

Craig Ringer 发送了一个补丁,用于添加有关在扩展代码中可以(不)做什么的更多文档。

Atsushi Torikoshi 发送了两个修订版本的补丁,用于向 pg_lock_status 视图和支持函数添加 waitstart 字段。

Heikki Linnakangas 和 Jürgen Purtz 交换了补丁,为教程添加了一章关于架构的内容。

Justin Pryzby 和 Aleksey Kondratov 交换了补丁,使得 REINDEX、CLUSTER 和 VACUUM FULL 能够动态更改表空间。

Pavel Stěhule 发送了三个修订版本的补丁,用于实现模式变量。

Peter Smith 发送了三个修订版本的补丁,使得可以使用多个后台工作进程进行表同步。

Dilip Kumar 发送了三个修订版本的补丁,使得 pg_is_wal_replay_paused 可以返回恢复暂停的状态。

Amit Langote 发送了五个修订版本的补丁,使得 get_partition_for_tuple() 可以在更广泛的上下文中可用,并使用它来避免使用 SPI 接口进行一些参照完整性检查。

Takamichi Osumi 发送了另一个修订版本的补丁,用于为归档恢复添加更强的安全措施。

Bruce Momjian 发送了另一个修订版本的补丁,用于添加密钥管理。

Buzhen (步真) 发送了一个补丁,将有效的缓存清理策略从 FIFO 策略更改为 LRU。

Kyotaro HORIGUCHI 发送了另一个修订版本的补丁,使得可以指定 CRL(证书吊销列表)目录,使其与 X509_STORE_load_locations 的实现保持一致。

Mark G 发送了一个补丁,使得 heapam.c 中的 gaps 数组成为静态的。

Jie Zhang 发送了一个补丁,使得 `pg_dump -?/--help` 的输出更易于阅读。

Michaël Paquier 发送了一个补丁,用于在 ilist.h 和 bufpage.h 的内联函数中标记一些 PG_USED_FOR_ASSERTS_ONLY。

David Fetter 发送了另一个修订版本的补丁,用于将 popcount(count_set_bits)暴露给 SQL。

Greg Sabino Mullane 发送了另一个修订版本的补丁,用于帮助 psql 的 \df 在可能的函数之间进行选择,通过提供输入参数类型。

Justin Pryzby 提交了另一个版本的补丁,用于实现 CREATE TABLE (LIKE .. INCLUDING ACCESS METHOD)。

Li Japin 发送了一个补丁,使用布尔值数组而不是字符指针来表示 SPI 中的参数 NULL 性。

Julien Rouhaud 发送了另一个修订版本的补丁,用于向 pg_stat_activity 视图添加 queryId。

Stephen Frost 发送了两个修订版本的补丁,将 checkpoint_completion_target 的默认值更改为 0.9。

Dilip Kumar 发送了另一个修订版本的补丁,用于为表实现自定义压缩方法。

Stephen Frost 和 Craig Ringer 交换了补丁,为已弃用和重命名的函数和设置添加了一个文档部分。

Vigneshwaran C 发送了另一个修订版本的补丁,使得可以打印所调用 pg_print_callstack() 的实例中 postgres 进程的堆栈跟踪。此功能由 GUC 控制。

Dmitry Dolgov、Pavel Stěhule 和 Dian M Fay 交换了补丁,为 JSONB 使用通用的类型下标基础设施。

Daniel Gustafsson 和 Jacob Champion 交换了补丁,用于支持 NSS 作为 libpq TLS 后端。

Daniel Gustafsson 发送了另一个补丁修订版,用于在运行的集群中支持校验和的启用/禁用。

Tom Lane 发送了一个补丁,用于修复 OSX 的 pwritev 支持检测。

Hou Zhijie 发送了另一个修订版本的补丁,为 eval_const_expressions 添加了 nullif 情况。

Masahiro Ikeda 发送了一个补丁,用于重构全局统计消息的变量名,以使其清楚它们是消息。

Peter Smith 发送了另一个修订版本的补丁,用于实现两阶段事务的逻辑解码。

Justin Pryzby 发送了另一个修订版本的补丁,使得 INSERT SELECT 使用 BulkInsertState。

Alexander Korotkov 发送了另一个修订版本的补丁,用于修复短语搜索和多词标记之间的不兼容。

Alexander Korotkov 发送了一个补丁,使得 JSON ** 操作符之后的所有内容都使用严格模式,因为宽松模式会产生意外结果。

Nikita Glukhov 和 Erik Rijkers 交换了补丁,按照标准实现了 SQL/JSON 函数。

Anastasia Lubennikova 发送了两个修订版本的补丁,旨在修复一个导致 pg_upgrade 在非标准 ACL 下失败的错误,方法是添加一些额外的检查来覆盖这种情况。

David Rowley 发送了一个补丁,用于通过 heap_setscanlimits() 正确计算页面后向扫描。

Nikita Glukhov 发送了另一个修订版本的补丁,按照标准实现了 JSON_TABLE。

Kyotaro HORIGUCHI 发送了另一个修订版本的补丁,用于重构统计收集器,使其使用共享内存而不是文件进行临时存储。

Julien Rouhaud 发送了另一个修订版本的补丁,为 REINDEX 添加了一个新的 COLLATION 选项。

David Rowley 发送了另一个修订版本的补丁,使得可以扫描 TID 范围,而不是整个关系,就像顺序扫描一样。

Kyotaro HORIGUCHI 发送了另一个修订版本的补丁,添加了一个新的 pg_waitlsn() 函数。

Daniel Gustafsson 发送了一个补丁,用于重构特定库的 SSL 测试设置到一个单独的模块,为支持 OpenSSL 以外的 TLS 实现做准备。

Masahiko Sawada 发送了一个补丁,在 lazy_tid_reaped() 的 bsearch() 之前添加了一个编码的 itermpointers 的边界检查,并内联 lazy_tid_reaped()。

Pavel Stěhule 发送了三个修订版本的补丁,为 CALL 添加了一个计划缓存。

Amul Sul 发送了另一个修订版本的补丁,实现了 ALTER SYSTEM READ {ONLY,WRITE}。

Matthias van de Meent 发送了一个补丁,用于更新 postgres_fdw 以在 IMPORT SCHEMA LIMIT TO 中命名时导入分区。

Vigneshwaran C 发送了一个补丁,用于在 CREATE/ALTER SUBSCRIPTION 期间识别发布者丢失的出版物。

Álvaro Herrera 发送了另一个修订版本的补丁,为 libpq 添加了跟踪功能。

Peter Eisentraut 和 Tom Lane 交换了补丁,为系统目录添加了主键。

Denis Laxalde 发送了一个补丁,用于在 pg_upgrade 中在服务器启动时禁用后台工作进程。

Greg Nancarrow 发送了另一个修订版本的补丁,使得 INSERT (INTO ... SELECT ...) 的执行可以并行化。

Álvaro Herrera 发送了另一个修订版本的补丁,为 libpq 添加了批处理/流水线支持。

Andrey Borodin 发送了另一个修订版本的补丁,重新组织了 pglz 压缩代码以提高效率,速度提升了约 1.4 倍。

Yugo Nagata 发送了另一个补丁修订版,用于实现物化视图的增量维护。

Tomáš Vondra 发送了两个修订版本的补丁,用于实现表达式的扩展统计信息。

Heikki Linnakangas 发送了另一个修订版本的补丁,用于 pg_rewind,使其能够根据新大小获取小文件。

Tomáš Vondra 发送了另一个修订版本的补丁,使得可以使用非易失性内存(如果可用)作为 WAL 缓冲区。

Heikki Linnakangas 发送了另一个修订版本的补丁,用于重构 LogicalTapeSet/LogicalTape 接口,使所有 tape 函数(如 LogicalTapeRead 和 LogicalTapeWrite)都接受 LogicalTape 作为参数而不是 LogicalTapeSet+tape 号码,用简单的平衡 k 路合并替换旧的多相合并算法,并修复 tape 读取缓冲区的尺寸。

Tomáš Vondra 发送了另一个补丁修订版,用于实现 BRIN 多范围索引。

Masahiro Ikeda 发送了两个修订版本的补丁,用于向 pg_stat_wal 视图添加列以跟踪 WAL I/O 活动,并添加了一个新的 GUC,track_wal_io_timing,以启用收集这些数据,因为开销可能很大。

Jim Finnerty 发送了另一个修订版本的补丁,通过添加 64 位 GUC 的方法,使用 XID_FMT 格式化 xid,并使用 ClogPageNumber 而不是 int 来实现类型安全,为实现 64 位 xid 做准备。

Michaël Paquier 发送了另一个修订版本的补丁,用于将 HMAC 实现重构到 common/ 目录。

Amit Kapila 和 Bharath Rupireddy 交换了补丁,通过在 RelationSyncEntry 失效时初始化 pubactions 来修复 ALTER PUBLICATION...DROP TABLE 的行为。

Mark Rofail 发送了三个修订版本的补丁,使得可以检查数组的每个元素是否匹配(通常是在不同的表中)主键。

Thomas Munro 发送了另一个修订版本的补丁,用于在 pg_test_fsync 中使用 pg_pwrite()。

Tomáš Vondra 发送了一个补丁,用于测试 TOAST 可见性。

Andy Fan 发送了一个补丁,用于构建一些隐含的剪枝条件,以扩展计划时间分区剪枝和初始化分区剪枝的应用场景。