FOSDEM PGDay 2021 将于 2021 年 2 月 6-7 日在线举行。https://fosdem.org/2021/
行为准则委员会欢迎新成员 Michael Goldberg https://postgresql.ac.cn/about/policies/coc_committee/
本周人物:https://postgresql.life/post/keith_fiske/
PoWA 4.1,一款 PostgreSQL 性能工具,已发布。https://github.com/powa-team/powa-archivist/releases/tag/REL_4_1_0
Database .NET v31.5,一款多数据库管理工具,现已支持 PostgreSQL,已发布。https://fishcodelib.com/Database.htm
pgAdmin4 4.29,一款 PostgreSQL 的 Web 和原生 GUI 控制中心,已发布。https://www.pgadmin.org/docs/pgadmin4/dev/release_notes_4_29.html
http://archives.postgresql.org/pgsql-jobs/2020-12/
Planet PostgreSQL:http://planet.postgresql.org/
本周 PostgreSQL 周报由 David Fetter 提供。
请在太平洋标准时间(PST8PDT)周日晚上3:00之前将新闻和公告发送至 david@fetter.org。
Michaël Paquier 提交
在 ps 显示中添加一些 checkpoint/restartpoint 状态。这是为恢复结束和关机 checkpoint/restartpoint(不存在恢复结束 restartpoint)而不是所有类型的 checkpoint 所做的,以防无法依赖 pg_stat_activity 从 startup 或 checkpointer 进程获取状态。例如,在崩溃恢复结束时,了解 startup 进程中是否正在运行 checkpoint 非常有用,而以前 ps 显示可能只显示关于“正在恢复”的一些信息,这在 checkpoint 运行时可能会令人困惑。作者:Justin Pryzby 审阅者:Nathan Bossart, Kirk Jamison, Fujii Masao, Michael Paquier 讨论:https://postgr.es/m/20201203211723.GR24052@telsasoft.com https://git.postgresql.org/pg/commitdiff/df9274adf3096feafbbde2562311c8ab80405267
改进 cryptohash 函数周围的一些代码。这调整了与 cryptohash 函数近期更改相关的一些代码:- 在 md5.h 中添加一个变量来跟踪计算结果的大小,从 pgcrypto 移动而来。请注意,pg_md5_hash() 已经假设结果的大小是这个。- 在释放回退实现时,在已哈希的数据上调用 explicit_bzero()。特别是对于 MD5,可能会令人恼火地留下一些未归零的数据。
清理与 uuid-ossp 近期更改相关的一些代码。.gitignore 仍然包含 md5.c,并且有一个注释不正确。讨论:https://postgr.es/m/X9HXKTgrvJvYO7Oh@paquier.xyz https://git.postgresql.org/pg/commitdiff/9b584953e7bf91e342af87ef44606acd6206cd1c
文档:修正与 pg_shmem_allocations 相关的解释。偏移量仅对匿名分配显示为 NULL。作者:Benoit Lobréau 审阅者:Kyotaro Horiguchi 讨论:https://postgr.es/m/CAPE8EZ5Lnoyqoz7aZpvQM0E8sW+hw+k6G2NULe+m4arFRrA1aA@mail.gmail.com 后向移植至:13 https://git.postgresql.org/pg/commitdiff/bce641a2af7199f07ec2b0a84f8fec0f26b2adc0
Jeff Davis 推送
Tom Lane 提交
改进 hash_create() 的 API 以增加健壮性。发明了一个新的标志位 HASH_STRINGS 来指定 C 字符串哈希,这以前是默认行为;并添加断言,要求 HASH_STRINGS、HASH_BLOBS 和 HASH_FUNCTION 标志位中必须只有一个被设置。这是为了防止类似提交 a1b8aa1e4 中修复的疏忽(例如,错误地省略 HASH_BLOBS)再次发生。此外,当指定 HASH_STRINGS 时,要求 keysize 必须大于 8 字节。这是一个启发式方法,但它应该可以捕获对整数或指针键意外使用 HASH_STRINGS 的情况。(几乎所有现有用例都将 keysize 设置为 NAMEDATALEN 或更大,因此几乎没有理由认为此限制会产生问题。)调整 hash_create(),强制设置 HASH_ELEM 标志位,并移除其对 keysize 和 entrysize 的默认值。由于这些默认值未被记录且基本无用,因此没有调用者省略 HASH_ELEM。此外,从那些拥有 HASHCTL 参数结构体的调用者中移除 memset 将其清零。这从来不是真正必要的,虽然它不是一个糟糕的编码约定,但令人困惑的是,有些调用者这样做了,而有些没有。我们最好通过标准化为“不这样做”来节省一些周期。还改进了 hash_create() 的文档。顺便,通过将键存储为二进制 Oid 而不是字符串,改进了 reinit.c 对哈希表的使用;并且,由于这是一个临时哈希表,因此将其分配在 CurrentMemoryContext 中以保持整洁。讨论:https://postgr.es/m/590625.1607878171@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/b3817f5f774663d55931dd4fab9c5a94a15ae7ab
修正 varchar_2.out 以匹配 cs_CZ 区域设置的实际情况。似乎是 c06d6aa4c 中的复制粘贴错误。来自 buildfarm。 https://git.postgresql.org/pg/commitdiff/88e014c149cc396fb218b08eda17c47d5b33e94f
在 relmapper init 中避免源和目标相同的 memcpy()。严格按照 C 标准的解释,memcpy(x,x,n) 是未定义的,尽管很难想象有哪个实现会真正出错。然而,像 valgrind 这样的分析工具可能会对此抱怨;因此,我们将在 relmapper.c 中添加一个临时修复,避免这样做。另请参阅 5b630501e、d3f4e8a8a、ad7b48ea0 以及其他类似的修复。显然,那些人都没有尝试过 valgrinding initdb?这种情况存在了足够长的时间,以至于我惊讶于它之前没有被报告过。后向移植,以防有人想在会抱怨此问题的平台上使用后向分支;我们也已经后向移植了那些早期的修复。讨论:https://postgr.es/m/161790.1608310142@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/53d4f5fef04653fc495ae385a9c2f78c77e5c7d9
添加一些遗漏的 .gitignore 条目。任何忽略 /output_iso/ 的子目录也应该忽略 /tmp_check_iso/,它可能是在失败的 pg_isolation_regress_check 运行后留下的。我认为这些条目已经错误一段时间了,但在后向分支中修复它们似乎并不重要。 https://git.postgresql.org/pg/commitdiff/8afca702ecbf0730b6175afda0cecbbf0a1967e7
删除 src/test/Makefile 中不再需要的 ALWAYS_SUBDIRS 条目。提交 257836a75 添加了“locale”子目录到 SUBDIRS,但忽略了将其从 ALWAYS_SUBDIRS 中移除。这个疏忽没有功能上的影响,因为过滤器函数无论如何都会将其移除。尽管如此,对于读者来说,将子目录同时列在两个地方是令人困惑的,尤其是因为它使得相关的注释成为一个部分谎言。 https://git.postgresql.org/pg/commitdiff/08b01d4dd982b491a2f9641804b368185b8f4c53
在 pgstat_recv_replslot 中避免源和目标相同的 memcpy()。与提交 53d4f5fef 和之前的修复是同一类问题;也由似乎比 buildfarm 更挑剔的 valgrind 测试发现。这是提交 986816750 中的一个疏忽。由于这是 HEAD 中的新内容,因此无需后向移植。 https://git.postgresql.org/pg/commitdiff/ed6329cfa975a13c58c44676464585cda5d317b3
文档:改进 pgbench 脚本权重描述。指出如果您想编写包含“@”的脚本文件名时要使用的解决方法。稍微整理一下文字。作者:Fabien Coelho,我进行了额外的润色 讨论:https://postgr.es/m/1c4e81550d214741827a03292222db8d@G08CNEXMBPEKD06.g08.fujitsu.local https://git.postgresql.org/pg/commitdiff/1990ce186ee64f24dcff885a87cea04e3dfd8166
Peter Eisentraut 提交
SELECT '' AS two, i.* FROM INT2_TBL,其中第一列表示预期的结果行数。随着测试数据夹具的扩展,这种情况越来越过时,因此其中许多是不正确且误导性的。此外,这种风格并非真正必要,因为 psql 输出已经显示了结果行的数量。为了清理这一点,删除了所有这些额外的列。讨论:https://postgresql.ac.cn/message-id/flat/1a25312b-2686-380d-3c67-7a69094a999f%40enterprisedb.com https://git.postgresql.org/pg/commitdiff/c06d6aa4c35177655e0fd4acaca888a73c3f9845Tomáš Vondra 提交了
Álvaro Herrera 提交
Peter Geoghegan 提交
Bruce Momjian 已推送
Fujii Masao 提交
撤销“放弃用于通知 startup 进程的专用闩锁”。撤销 ac22929a26 以及后续修复 113d3591b8。因为它破坏了这样一种假设,即 startup 进程在等待 buffer pin 上的恢复冲突时,应该只由 buffer unpin 或 ResolveRecoveryConflictWithBufferPin() 中启用的超时来唤醒。例如,这导致 SIGHUP 信号处理程序或 walreceiver 进程不必要地频繁唤醒 startup 进程。此外,添加了关于为什么不应删除已撤销补丁试图删除的专用闩锁的注释。感谢 Kyotaro Horiguchi 的讨论。作者:Fujii Masao 讨论:https://postgr.es/m/d8c0c608-021b-3c73-fffd-3240829ee986@oss.nttdata.com https://git.postgresql.org/pg/commitdiff/00f690a239932e477f25120d19b08aacdc30deb7
pg_stat_statements:跟踪所有统计信息最后重置的时间。此提交向 pg_stat_statements_info 视图添加了“stats_reset”列。此列指示 pg_stat_statements 视图中所有统计信息最后重置的时间。根据讨论,此提交还更改了 pg_stat_statements_info 代码,以便“dealloc”列与“stats_reset”同时重置,即每当删除所有 pg_stat_statements 条目时,以保持一致性。以前,“dealloc”仅在调用 pg_stat_statements_reset(0, 0, 0) 时重置,而在调用带有非零参数的 pg_stat_statements_reset() 时丢弃所有条目时不会重置。这令人困惑。作者:Naoki Nakamichi, Yuki Seino 审阅者:Yuki Seino, Kyotaro Horiguchi, Li Japin, Fujii Masao 讨论:https://postgr.es/m/c102cf3180d0ee73c1c5a0f7f8558322@oss.nttdata.com https://git.postgresql.org/pg/commitdiff/2e0fedf0362cc964c4dae42258455b6391051e70
Amit Kapila 提交
Alexander Korotkov 提交了
多范围数据类型。多范围基本上是已排序的、不重叠的范围数组,上面定义了集合论运算。自 v14 起,每个范围类型都会自动获得一个对应的多范围数据类型。存在命名多范围类型的手动和自动机制。可以使用 CREATE TYPE 中的 multirange_type_name 属性指定多范围类型名称。否则,会自动生成多范围类型名称。如果范围类型名称包含“range”,则将其更改为“multirange”。否则,我们在末尾添加“_multirange”。多范围的实现具有节省空间的内部表示格式,该格式避免了额外的填充和 OID 的重复存储。总之,这种格式允许以 O(n) 的时间复杂度按索引获取特定范围。已为多范围实现了统计信息收集和选择性估计。为此,已存储的多范围近似为没有间隔的并集范围。该字段将来可能需要改进。Catversion 已增加。讨论:https://postgr.es/m/CALNJ-vSUpQ_Y%3DjXvTxt1VYFztaBSsWVXeF1y6gTYQ4bOiWDLgQ%40mail.gmail.com 讨论:https://postgr.es/m/a0b8026459d1e6167933be2104a6174e7d40d0ab.camel%40j-davis.com#fe7218c83b08068bfffb0c5293eceda0 作者:Paul Jungwirth,由我修订 审阅者:David Fetter, Corey Huinker, Jeff Davis, Pavel Stehule 审阅者:Alvaro Herrera, Tom Lane, Isaac Morland, David G. Johnston 审阅者:Zhihong Yu, Alexander Korotkov https://git.postgresql.org/pg/commitdiff/6df7a9698bb036610c1e8c6d375e1be38cb26d5f
pg_dump.c 中关于多范围的修复。此提交修复了两个错误的版本号检查和一个错误的空值检查。 https://git.postgresql.org/pg/commitdiff/8344d72cccae699e13884a5705b91dc1c4747c03
修正 6df7a9698b 引入的编译器警告。 https://git.postgresql.org/pg/commitdiff/11072e86939d2f5ca0a97c709b46f29ea8b57590
Michaël Paquier 发送了引入 SHA1 cryptohash 基础设施的补丁的另一个修订版。
Andrey Borodin 发送了补丁的另一个修订版,用于在 GetMultiXactIdMembers 中使用共享锁来处理偏移量和成员,使 MultiXact 本地缓存大小可配置,添加一个条件变量来等待下一个 MultXact 偏移量(在某个角落情况),并添加 GUCs 来调整 MultiXact SLRUs。
Kyotaro HORIGUCHI 发送了一个补丁,以确保仅在适当的情况下(即仅在非备用节点上)取消无效页面头错误消息。
Andrey V. Lepikhov 发送了补丁的另一个修订版,将多插入决策逻辑移至执行器,并将其与 FDW API 的三个新方法一起使用:BeginForeignCopy、ExecForeignCopy 和 EndForeignCopy,以加速应用于具有远程分区的表的 COPY FROM。
Fujii Masao 发送了补丁的另外两个修订版,添加了一个 log_recovery_conflict_waits GUC,该 GUC 顾名思义。
Tom Lane 发送了补丁的两个修订版,以修正 PL/pgsql 进行赋值的方式。
Bharath Rupireddy 和 Hou Zhijie 交换了补丁,使得可以在 CTAS 中使用并行 INSERT。
Nathan Bossart 和 Kyotaro HORIGUCHI 交换了旨在修复归档状态“.ready”文件可能过早创建的 bug 的补丁。
Kirk Jamison 发送了补丁的另一个修订版,使用 dlist 使删除关系缓冲区更有效。
Amit Kapila 发送了补丁的另外三个修订版,以实现两阶段事务的逻辑解码。
Yuzuko Hosoya 发送了补丁的另一个修订版,以使 autoanalyze 在分区表上工作得更好。
Atsushi Torikoshi 发送了一个补丁,向 pg_locks 视图添加了一个 wait_start 列。
Iwata Aya 发送了补丁的另一个修订版,向 libpq 添加了跟踪。
Laurenz Albe 发送了对补丁的两个修订,以将会话统计信息添加到 pg_stat_database。
Peter Eisentraut 发送了补丁的另一个修订版,将 EXTRACT 的返回类型更改为 numeric。
Fabrízio de Royes Mello 发送了补丁的另一个修订版,以在备用服务器上实现最小逻辑解码。
Justin Pryzby 发送了补丁的另外两个修订版,允许 CLUSTER、VACUUM FULL 和 REINDEX 动态更改表空间。
Jeff Davis 发送了一个补丁,以强制执行 ASCII 恢复点名称。
Bharath Rupireddy 发送了一个旨在修复 postgres_fdw 中的缓存连接泄漏 bug 的补丁(当关联的用户映射被删除时),通过将关闭所有无效连接的位置移至 pgfdw_xact_callback() 来实现。
Peter Smith 发送了补丁的另外两个修订版,使 tablesync 可以使用多个工作程序。
Bruce Momjian 和 Neil Chen 交换了实现密钥管理的补丁。
Tomáš Vondra 发送了补丁的另一个修订版,以在 generate_useful_gather_paths 中考虑未排序的路径,在 generate_useful_gather_paths 中检查并行安全性,在 disallow SRFs below Gather Merge 时考虑排序,在 find_em_expr_usable_for_sorting_rel 中避免搜索易变表达式,并改进 find_em_expr_usable_for_sorting_rel 注释,以阐明 find_em_expr_usable_for_sorting_rel 和 prepare_sort_from_pathkeys 之间的关系,即这两个地方需要共享哪些限制。
Laurenz Albe 发送了补丁的另一个修订版,以修复 psql 的 \e 系列函数中的一个严重违反 POLA 的情况,即如果用户在未进行任何更改的情况下退出编辑器,则会执行之前的查询。修复方法是清除查询缓冲区。
Heikki Linnakangas 发送了补丁的另一个修订版,通过使用单个数组和哈希而不是为每种对象类型使用一个来使 resowners 更易于扩展。
Justin Pryzby 发送了 pg_upgrade/test.sh 的另一个修订版,其中进行了一些更改,以允许从 v11 进行升级测试。
Heikki Linnakangas 发送了一个补丁,以以更大的块进行 COPY FROM 编码转换/验证。
Fujii Masao 发送了补丁的三个修订版,旨在修复后端和恢复之间的死锁检测失败的 bug,方法是添加对这种情况的检查。
Michaël Paquier 发送了补丁的两个修订版,以重构 HMAC 实现。
Konstantin Knizhnik 发送了补丁的两个修订版,以添加一种在登录时触发触发器的方式。
David Fetter 发送了一个补丁,实现了 psql 中的 \gsetenv,类似于 \gset,只是用于环境变量。
Önder Kalacı 发送了补丁的另一个修订版,以实现逻辑复制的行过滤。
Denis Smirnov 和 Konstantin Knizhnik 交换了实现 libpq 压缩的补丁。
Peter Eisentraut 发送了一个补丁,将 `make_*()` 函数的 seconds 参数更改为 numeric。
Fujii Masao 发送了一个补丁,旨在修复 STANDBY_LOCK_TIMEOUT 可能不会中断 ProcWaitForSignal() 的 bug,方法是确保 StandbyLockTimeoutHandler() 设置一个闩锁。
Bharath Rupireddy 发送了补丁的另一个修订版,以在 CTAS/CMV 中,如果关系已存在,则快速失败。
Gilles Darold 发送了补丁的另一个修订版,以修复 DDL 中函数命名空间可能在函数仍存在时消失的竞态条件。
Michaël Paquier 发送了一个补丁,以删除重复的 ASCII 检查,并使保留的检查更高效。
Justin Pryzby 发送了补丁的另外两个修订版,允许 psql 的 \dti+ 查看 `pg_toast.*`。
David CARLIER 发送了一个补丁,在 ARM 上实现了 SPIN_LOCK。
Michaël Paquier 和 Heikki Linnakangas 交换了旨在修复使用 OpenSSL 时 cryptohash 函数不正确分配处理的 bug 的补丁。
Tom Lane 和 Alexander Lakhin 交换了展示如何使用 Valgrind 进行 TAP 测试的补丁。
Craig Ringer 发送了一个补丁,通过修复一个错误的跟踪点来识别 tracepoint 中的 LWLocks,该错误跟踪点在 LWLockWaitForVar 中会触发 lwlock__acquire 事件,尽管该函数从未实际获取锁;为每个跟踪命中添加了 tranche id 和锁指针;为所有锁获取和释放添加了单个路径跟踪点;并添加了一些关于 LWLock tranche 的注释,以便为未来的读者澄清问题。
Konstantin Knizhnik 发送了一个补丁,重新实现了 BufferAlloc,在此过程中消除了双重锁定。
Pavel Stěhule 提交了另一个修订版的补丁,以实现模式变量。
Tom Lane 发送了一个补丁,以修复 jsonb_concat() 中的一个角落情况 bug。
Thomas Munro 发送了补丁的两个修订版,添加了 pg_preadv() 和 pg_pwritev(),它们提供了同步 scatter/gather I/O 例程,然后使用它们通过向量 I/O 来清零 WAL 段。
Tomáš Vondra 发送了另一个补丁修订版,用于实现 BRIN 多范围索引。