奥地利 pgDay 将于 2021 年 9 月 17 日在维也纳的美泉宫(药剂师庭)举行。https://pgday.at/en/
pgSCV 0.7.0 发布,这是一个兼容 Prometheus 的 PostgreSQL 监控代理和指标导出器。https://github.com/weaponry/pgscv
pg_validate_extugprade 1.0.0beta 发布,这是一个用于测试扩展升级过程各种组合的工具。https://github.com/rjuju/pg_validate_extupgrade
pspg 5.1.0 发布,这是一个为 PostgreSQL 设计的分页器。https://github.com/okbob/pspg/releases/tag/5.1.0
Database Lab 2.4 发布,这是一个用于快速克隆大型 PostgreSQL 数据库以构建非生产环境的工具:https://gitlab.com/postgres-ai/database-lab/-/releases
https://archives.postgresql.org/pgsql-jobs/2021-07/
Planet PostgreSQL:https://planet.postgresql.org/
本周 PostgreSQL 周报由 David Fetter 提供。
请在太平洋标准时间(PST8PDT)周日晚上3:00之前将新闻和公告发送至 david@fetter.org。
Thomas Munro 推送
支持 macOS 上的直接 I/O。Mac 不支持 O_DIRECT,但可以通过单独的 fcntl() 调用禁用缓存。扩展 fd.c 中的文件打开函数,以便在调用者传入 PG_O_DIRECT 时进行处理。目前,这只影响 WAL 数据,即使如此,也仅当您设置:max_wal_senders=0 wal_level=minimal。这本身预期不会非常有用,但稍后提出的补丁将更广泛地使用直接 I/O,并且对于在 Mac 上进行测试的开发人员来说,它将很有用,以便他们可以看到效果。Reviewed-by: Andres Freund andres@anarazel.de Discussion: https://postgr.es/m/CA%2BhUKG%2BADiyyHe0cun2wfT%2BSVnFVqNYPxoO6J9zcZkVO7%2BNGig%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/2dbe8905711ba09a2214b6e835f8f0c2c4981cb3
调整提交 2dbe8905 以适应旧版 macOS。断言中使用的一些打开标志在 macOS 10.4 中不存在。来自构建农场动物 prairiedog。顺便也添加了 O_EXCL(还有一些更标准的标志,但它们不相关且可能缺失)。https://git.postgresql.org/pg/commitdiff/04cad8f7bcd63fac567e49fd72e6df42b3b251a9
不在函数式宏参数中使用 #if。没有报告具体问题,但过去已知这会在某些编译器上引起问题,因此我们应避免这样做。Reported-by: Tom Lane tgl@sss.pgh.pa.us Discussion: https://postgr.es/m/234364.1626704007%40sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/0c08856856f54056ce8db116e9d254fda114c383
jit:不要内联访问线程本地变量的函数。LLVM 内联的代码如果在尝试访问线程本地变量时可能会崩溃或因“重定位类型尚未实现!”而失败。不要内联此类代码。向 11 版本(LLVM 引入的版本)回溯。Bug #16696。Author: Dmitry Marakasov amdmi3@amdmi3.ru Reviewed-by: Andres Freund andres@anarazel.de Discussion: https://postgr.es/m/16696-29d944a33801fbfe@postgresql.org https://git.postgresql.org/pg/commitdiff/0207d5fbebed7eb698a7e5f3adf30fafe95bc4b9
Amit Kapila 提交
更新 AlterSubscription 的注释。添加关于为什么需要禁用订阅以允许 slot_name 为 none 的解释。Author: Japin Li and Amit Kapila Discussion: https://postgr.es/m/MEYP282MB1669CBD98E721C77CA696499B61A9@MEYP282MB1669.AUSP282.PROD.OUTLOOK.COM https://git.postgresql.org/pg/commitdiff/dcecdfafbd2dbdfaa0f82e7710abfa65242a1d1e
不允许将 replication slot_name 设置为 ''。我们不允许通过 SQL API pg_create_logical_replication_slot() 创建空的 replication slot_name(''),但允许通过 Alter Subscription 命令设置。这会导致应用工作进程反复尝试通过 slot_name '' 流式传输数据,而用户不允许使用该名称创建槽。Author: Japin Li Reviewed-By: Ranier Vilela, Amit Kapila Backpatch-through: 10,引入于此 Discussion: https://postgr.es/m/MEYP282MB1669CBD98E721C77CA696499B61A9@MEYP282MB1669.AUSP282.PROD.OUTLOOK.COM https://git.postgresql.org/pg/commitdiff/29abde637bbb4b8fcdc96e049813890afa5ab671
修复 proto.c 中潜在的缓冲区溢出。防止使用 strcpy 复制到 gid 缓冲区时出现潜在的缓冲区溢出。这由提交 a8fd13cab0 引入。Reported-by: Tom Lane,据 coverity 称 Author: Peter Smith Reviewed-by: Amit Kapila Discussion: https://postgresql.ac.cn/message-id/161029.1626639923%40sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/01c3adcdd85f1507ef49bdf5430c59925d08de6f
Michaël Paquier 提交
doc:提及 DROP STATISTICS 的 CASCADE/RESTRICT。此语法没有效果,因为对统计信息没有依赖关系,但解析器支持它。这与其他 DROP 命令更一致。Author: Vignesh C Discussion: https://postgr.es/m/CALDaNm1LA=yNmzcSfy+0oe6CEAgsxXRf_-UutE3ZncFi8QkFNQ@mail.gmail.com Backpatch-through: 10 https://git.postgresql.org/pg/commitdiff/d1216635610a9855a8ec139e55cd852f67d5ee81
修复 pg_receivewal --compress 的 WAL 段打开的一些问题。当使用 --compress 并且在存储这些文件的存储库中存在同名的部分未压缩段时,处理新 WAL 段打开的逻辑会变得模糊。在这种情况下,使用 --compress 会导致代码首先检查未压缩段的存在性和大小,然后打开一个新的压缩的部分段。代码在大多数平台上意外地正常工作(正如构建农场所证明的),除了 bowerbird,其中 gzflush() 在此代码路径中可能失败。无论如何,在创建新的部分未压缩段时使用填充前的代码路径是错误的,所以让我们修复它。请注意,当用户混合使用(或不使用)压缩的 pg_receivewal 连续运行时,此问题也会存在,如 ffc9dda 引入的测试所发现的。同时,这次重构了代码,使得 walmethods.c 中需要了解 ".gz" 后缀的代码路径从四个减少到一个,从而更容易引入新的压缩方法。这解决了第二个问题,即为意外失败生成的日志消息不会显示涉及的压缩段名称,这令人困惑,而是打印非压缩等效段的名称。Reported-by: Georgios Kokolatos Discussion: https://postgr.es/m/YPDLz2x3o1aX2wRh@paquier.xyz Backpatch-through: 10 https://git.postgresql.org/pg/commitdiff/7fbe0c8c4d4fe429ee1d6383706ea5ccb0f639d3
重新启用 pg_receivewal 在 Windows 上的 ZLIB TAP 测试。这是对 6cea447 的恢复,该提交暂时在 Windows 上禁用这些测试,因为 bowerbird 出现了故障,gzflush() 在新打开的压缩部分段上执行时会失败。感谢 7fbe0c8,现在应该解决了这个问题,所以让我们看看构建农场在 Windows 上对这些测试的反馈。Discussion: https://postgr.es/m/YPDLz2x3o1aX2wRh@paquier.xyz https://git.postgresql.org/pg/commitdiff/91d395f47aa92849b2556b1a4d6bc1ff34121a30
禁用 pg_receivewal 在 Windows 上的 ZLIB TAP 测试。这恢复了提交 91d395f,以避免在 Windows 上运行这些测试。这些测试在所有构建农场成员之间基本稳定,除了 fairywren(pg_receivewal 崩溃)和 bowerdird(SIGBREAK 阻止构建农场运行完成)。这些错误有些奇怪,因为其他具有非常相似特征的主机能够轻松运行这些测试。目前,在 Windows 上禁用这些测试以使构建农场恢复正常。根据与 Andrew Dunstan 的讨论。Discussion: https://postgr.es/m/9040d5ed-6462-66a4-07ac-2923785ae563@dunslane.net https://git.postgresql.org/pg/commitdiff/6a2c532c2230159b909382cfa58494ef9d6df703
统一命令行整数选项的解析逻辑。命令行二进制文件的大多数整数选项现在使用一个单一的例程来完成工作,修复了由于使用 atoi() 等导致的不精确值检测问题,atoi() 在以数字字符开头但后面带有垃圾字符的字符串上会失败。根据我的计算,此提交将需要翻译的字符串数量减少了 26 个,并将代码切换为对无效值和超出范围值使用两种错误类型。这方面还有更多工作要做,例如浮点数甚至 int64 选项,但 int32 是最吸引人的情况,因为可以依赖 strtol() 可靠地完成这项工作。请注意,目前有一些例外,例如 pg_ctl 或 pg_upgrade 使用自己的日志记录逻辑。几个负面的 TAP 测试需要针对新生成的错误进行一些调整。pg_dump 和 pg_restore 在选项解析过程中跟踪并行作业的最大数量。代码进行了一些重构,以便在专门处理并行的代码中跟踪该数量。Author: Kyotaro Horiguchi, Michael Paquier Reviewed-by: David Rowley, Álvaro Herrera Discussion: https://postgr.es/m/CALj2ACXqdG9WhqVoJ9zYf-iZt7sgK7Szv5USs=he6NnWQ2ofTA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/6f164e6d17616a157ea5d9e34dbb1b211c080c41
为 pg_basebackup 和 pg_{dump,restore} 添加缺失的头文件声明。这修复了由 6f164e6 引起的两个编译失败。有趣的是,缺失 <limits.h> 在 Linux 甚至 Windows 上都不会导致失败。在 MacOS 上,它会失败。根据各种构建农场成员。https://git.postgresql.org/pg/commitdiff/bc0cc68f8a1648029424e9300b2e4457acd474a6
Peter Eisentraut 提交
在适当的地方使用 l*_node() 函数系列。而不是 castNode(…, lfoo(…)) Author: Dagfinn Ilmari Mannsåker ilmari@ilmari.org Discussion: https://postgresql.ac.cn/message-id/flat/87eecahraj.fsf@wibble.ilmari.org https://git.postgresql.org/pg/commitdiff/2b00db4fb0c7f02f000276bfadaab65a14059168
使 UCS_to_most.pl 按排序顺序处理编码。这使得进度输出更容易理解。Reviewed-by: Kyotaro Horiguchi horikyota.ntt@gmail.com Reviewed-by: Heikki Linnakangas hlinnaka@iki.fi Discussion: https://postgresql.ac.cn/message-id/flat/22016aa9-ca59-15c7-01df-f292cb558c4d@enterprisedb.com https://git.postgresql.org/pg/commitdiff/4d56115f721f3f2c6d3b6f017f40b5103ca71448
删除生成的 C 输出中的一些空格。它不符合正常的编码风格。Reviewed-by: Kyotaro Horiguchi horikyota.ntt@gmail.com Reviewed-by: Heikki Linnakangas hlinnaka@iki.fi Discussion: https://postgresql.ac.cn/message-id/flat/22016aa9-ca59-15c7-01df-f292cb558c4d@enterprisedb.com https://git.postgresql.org/pg/commitdiff/344dedfd1c24f2e2c591f1eadf8414a1f4df910a
改进关于 relkind 不匹配的错误消息。继 2ed532ee8c474e9767e76e1f3251cc3a0224358c 之后,逻辑复制区域中的一些错误消息目前只处理表,但如果我们预计会处理更多 relkinds(例如序列),那么这些消息也属于先前补丁所受影响的类别,因此也进行调整。Reviewed-by: Michael Paquier michael@paquier.xyz Discussion: https://postgresql.ac.cn/message-id/c9ba5c6a-4bd5-e12c-1b3c-edbcaedbf392@enterprisedb.com https://git.postgresql.org/pg/commitdiff/81d5995b4b78017ef9e5c6f151361d1fb949924c
重命名 ExprState 的 NodeTag。从 tag 重命名为 type,以与其他所有节点结构保持一致。Discussion: https://postgresql.ac.cn/message-id/flat/c1097590-a6a4-486a-64b1-e1f9cc0533ce@enterprisedb.com https://git.postgresql.org/pg/commitdiff/d9a38c52cef3cf80c4259277f11d42a86ecb1952
重命名 _outValue() 的参数。从 value 重命名为 node,以与其他类似函数保持一致。Discussion: https://postgresql.ac.cn/message-id/flat/c1097590-a6a4-486a-64b1-e1f9cc0533ce@enterprisedb.com https://git.postgresql.org/pg/commitdiff/3d25b4ea6e2c93c60566c1185d4ee79a6285089a
为保持一致性重命名一些节点支持函数。一些节点函数名称与其节点类型名称不完全匹配。修复这些以保持一致性。Discussion: https://postgresql.ac.cn/message-id/flat/c1097590-a6a4-486a-64b1-e1f9cc0533ce@enterprisedb.com https://git.postgresql.org/pg/commitdiff/31360381f0a5ff5193c3631e6076442352906f59
在节点中使用的枚举中添加缺失的枚举标签。Discussion: https://postgresql.ac.cn/message-id/flat/c1097590-a6a4-486a-64b1-e1f9cc0533ce@enterprisedb.com https://git.postgresql.org/pg/commitdiff/983bdc4fac492a99bb8ab5a471ca7437139e5cf6
修复注释中的拼写错误。Author: Kyotaro Horiguchi horikyota.ntt@gmail.com Discussion: https://postgresql.ac.cn/message-id/flat/20210716.170209.175434392011070182.horikyota.ntt%40gmail.com https://git.postgresql.org/pg/commitdiff/86a1aae764b03c7fe06e290e409c8d1a72ff187d
Álvaro Herrera 提交
使新的复制槽测试代码的竞态条件更少。进一步修复 ead9e51e8236 中的测试代码,这次是通过等待检查点完成后再继续;这确保了在我们创建下一个槽之前 WAL 段已经被删除。Author: Kyotaro Horiguchi horikyota.ntt@gmail.com Discussion: https://postgr.es/m/20210719.111318.2042379313472032754.horikyota.ntt@gmail.com https://git.postgresql.org/pg/commitdiff/0d2cb6b2bbc3327dd002f3ecd4d5bde5851b0cdc
稍微改进安装说明。Reported-by: Daniel Westermann Discussion: https://postgr.es/m/GV0P278MB04835AAEACF894617574EB6BD25A9@GV0P278MB0483.CHEP278.PROD.OUTLOOK.COM https://git.postgresql.org/pg/commitdiff/aaec237b1a2f368ed2a8794c4f48b3656750eabc
再次重写安装说明。二次思考部门:在提交 aaec237b1a2f 中添加的新措辞面向的是错误的对象。删除关于 git 的部分,只讨论如何获取 tarball。查找 git 存储库的人可以在附录中查找。这需要扩展,但此提交未完成此操作。顺便修复了上一次提交引入的一些错别字。Discussion: https://postgr.es/m/713760.1626891263@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/73c5d2bfee2907b7f158485a531f00ba61b054f7
使 ALTER TRIGGER RENAME 对分区表保持一致。重命名分区表上的触发器存在两个问题:首先,它没有递归到重命名分区上的触发器;其次,它未能禁止重命名克隆触发器。在分区中使用不同名称的触发器是无意义的,而且 pg_dump 无论如何也不会保留分区的名称。不回溯 - 在稳定版本中使 ALTER TRIGGER 引发错误可能会给现有脚本带来问题。Co-authored-by: Arne Roland A.Roland@index.de Co-authored-by: Álvaro Herrera alvherre@alvh.no-ip.org Reviewed-by: Zhihong Yu zyu@yugabyte.com Discussion: https://postgr.es/m/d0fd7040c2fb4de1a111b9d9ccc456b8@index.de https://git.postgresql.org/pg/commitdiff/80ba4bb383538a2ee846fece6a7b8da9518b6866
使新测试不受排序规则的影响。在捷克语环境中运行的动物失败了。我可以尝试查找没有此问题的表名,但使用 C 排序规则似乎更简单。根据构建农场 https://git.postgresql.org/pg/commitdiff/6beb38cfc9ddd4cd3d2eb5402981ebdd69a618b4
Peter Geoghegan 提交
vacuumdb:修正关于 --force-index-cleanup 的注释。提交 3499df0d 添加了一个注释,错误地暗示 --force-index-cleanup 没有出现在与类似选项 --no-index-cleanup 相同的次要版本中。事实上,这两个选项都是 PostgreSQL 14 的新功能。Backpatch:14-,其中引入了这两个选项。https://git.postgresql.org/pg/commitdiff/28766c054f8cc6a7bbcf99497954e7a259d3edb2
Doc:说明 vacuum_multixact_failsafe_age 是基于 multixact 的。提交 1e55e7d1 中的疏忽,该提交为 VACUUM 添加了一个防回绕保护机制。Backpatch:14-,VACUUM 防回绕机制在此引入。https://git.postgresql.org/pg/commitdiff/dd498998a374b3d2a7f5211504f1f1aa15348cf1
Tom Lane 提交
修复 plpgsql 中一些角落的未初始化变量问题。如果在我们首次尝试检查已成功编译的表达式是否为“简单”时引发了错误,后续对 exec_stmt_execsql 的调用将假定 stmt->mod_stmt 已计算完成,而实际上并未计算。这可能导致调试版本中的断言失败;在生产版本中,效果通常是即使未指定 INTO STRICT,也会假定已指定。当然,这只有在后续尝试执行表达式成功时才相关,因此此问题只能通过在一个会话中修复某个引用的、可内联的 SQL 函数中的失败,然后重试调用 plpgsql 函数来达到。(可能还有更多晦涩的方式可以在不更改 plpgsql 函数的情况下更改表达式的行为,但那种方式似乎是人们在实践中可能遇到的唯一一种。)最可靠的修复方法是安排 exec_prepare_plan 在我们完成附属的简单表达式检查之前不要设置 expr->plan。但这似乎很难做到而不产生引用计数泄漏问题。因此,我们选择在注释中记录此风险,并修复 exec_stmt_execsql 以单独测试 stmt->mod_stmt 是否已计算。 (这会增加每次执行的测试和分支,但希望在上下文中可以忽略不计。)在 v11 及更高版本中,也修复了 exec_stmt_call,它具有相同问题的变种。根据 Alexander Lakhin 的 bug #17113。回溯到所有支持的分支。Discussion: https://postgr.es/m/17113-077605ce00e0e7ec@postgresql.org https://git.postgresql.org/pg/commitdiff/d9809bf8694c17e05537c5dd96cde3e67c02d52a
Doc:改进关于幂运算符的文档。既然我们不必将其塞入旧的运算符表格式的约束中,我们可以再添加一个示例来阐明左结合性的问题。根据 mdione at grulic.org.ar 的建议。https://postgr.es/m/162661954599.693.13700316547731859171@wrigleys.postgresql.org https://git.postgresql.org/pg/commitdiff/7fa1e1ef741964eeb50f33d7c72622658bb7e5f4
修复一些头文件“独立”编译失败的问题。最近添加的对 ParseState 的引用未被 #include 引用覆盖,为这些头文件的用户创建了不必要的顺序依赖。提交 2bfb50b3d 中的疏忽。根据 headerscheck/cpluspluscheck。https://git.postgresql.org/pg/commitdiff/678f5448c2d86976a98b402ef14482a8ba3b159b
删除 configure 时期的线程安全检查 (thread_test.c)。这个测试在二十年前编写时很有用,但对于过去十多年来构建的任何平台来说,它似乎都毫无意义。(同时比较 8a2121185 的注释。)此外,我们现在收到报告说测试程序本身在 ThreadSanitizer 下会失败。与其投入精力修复它,不如直接删除它,并假设少数仍然关心的人已经知道他们需要使用 --disable-thread-safety。回溯到 v14,以与 8a2121185 保持一致。Discussion: https://postgr.es/m/CADhDkKzPSiNvA3Hyq+wSR_icuPmazG0cFe=YnC3U-CFcYLc8Xw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/76fa3db33654e543b5c796e28c6fc5b505a19c2a
使 printf("%s", NULL) 打印 "(null)" 而不是崩溃。我们之前采取了强硬态度,认为调用者绝不应该打印空字符串指针,这样做值得断言失败或崩溃。然而,我们早就清除了所有容易发现的此类错误。剩下的代码可能在难以触及的角落情况下会以这种方式失败。例如,在 ereport(ERROR, (errcode(ERRCODE_UNDEFINED_OBJECT), errmsg("constraint \"%s\" for table \"%s\" does not exist", conname, get_rel_name(relid)))); 这样简单的代码中,人们必须怀疑 get_rel_name 在此上下文中不能返回 NULL 是否完全保证。如果出现这种情况,现有策略会将可能是一个很小的错误变成服务器崩溃条件。这不利于健壮性。因此,让我们效仿 glibc 的做法,打印 "(null)" 而不是失败。当然,如果这种行为在普通使用中可以达到,我们仍然认为它是一个错误;但崩溃似乎比不崩溃更不可取。此修复在 v12 及更高版本中全面有效,因为我们始终使用 src/port/snprintf.c。在此之前,在大多数平台上,我们受制于本地 libc,但似乎 Solaris 10 是唯一支持的仍然会崩溃的平台。大多数其他平台,如 *BSD、macOS 和 Solaris 11,在某个时候都采用了 glibc 的行为。(AIX 和 HPUX 只打印 "" 而不是 "(null)",但这足够接近了。)我没有检查 Windows 的原生 printf 会做什么,但这无关紧要,因为我们很早就在这个平台上使用了 snprintf.c。在 v12 及更高版本中,还对相关代码进行了 const 处理,这样我们就不会丢弃常量字符串的 const。这只是整洁的习惯,因为几乎没有编译器会对此发出警告。Discussion: https://postgr.es/m/17098-b960f3616c861f83@postgresql.org https://git.postgresql.org/pg/commitdiff/3779ac62d709467fe6331c8f0285d42e7487a01c
修复冲突的会话级与事务级锁的检查。我们有一个实现限制,PREPARE TRANSACTION 不能处理同时持有同一可锁对象上的会话生命周期锁和事务生命周期锁的情况。(这是因为否则我们需要在准备后清理期间获取一个新的 PROCLOCK 条目,这是一个可能失败的操作。这种情况只会由于咨询锁的奇特用法而出现,因此删除此限制可能不值得付出大量努力。)AtPrepare_Locks 试图强制执行此规则,但其逻辑相差甚远,因为它只检测会话锁和事务锁具有相同锁模式的情况。不同模式的锁在同一对象上会导致相当无用的消息“PANIC:我们似乎在某处丢失了一个位”。为了修复,构建一个每个锁标签只有一个条目的临时哈希表,而不是每个锁标签 + 模式一个条目,并使用它来检测冲突。根据 Alexander Pyhalov 的 bug #17122。此 bug 很古老,因此回溯到所有支持的分支。Discussion: https://postgr.es/m/17122-04f3c32098a62233@postgresql.org https://git.postgresql.org/pg/commitdiff/6310809c4aa146b3996a35524955c6c6943d241a
摆脱 Windows 上哈希表大小的人工限制。引入 hash_mem_multiplier GUC 的目的是让用户重现哈希聚合的旧行为,即它可以根据需要使用超过 work_mem 的内存。然而,在 Win64 上,实现未能完成工作,因为 work_mem 被限制在 2GB,以保护各种计算内存大小使用“long int”的地方。原样,相同的限制也应用于 hash_mem。这导致需要超过 2GB 进行哈希聚合的查询出现严重的性能回归,因为它们现在溢出到磁盘,并且无法阻止这种情况。摆脱 work_mem 限制似乎是个好主意,但这是一项艰巨的任务,而且不可能回溯。然而,只有少数几个地方关心 hash_mem 值,而且发现可以在不进行过多代码变动或 ABI 破坏的情况下移除该限制。因此,现在就先这样做以修复回归,并将更大的任务留待以后。此补丁确实引入了更多基础设施,这些基础设施应该有助于这项更大的任务,即 pg_bitutils.h 支持处理 size_t 值。根据 Laurent Hasson 的抱怨。回溯到 v13,行为更改在此版本中引入。Discussion: https://postgr.es/m/997817.1627074924@sss.pgh.pa.us Discussion: https://postgr.es/m/MN2PR15MB25601E80A9B6D1BA6F592B1985E39@MN2PR15MB2560.namprd15.prod.outlook.com https://git.postgresql.org/pg/commitdiff/28d936031a86d94806c6604480ff3f3f169b371c
Fujii Masao 提交
使 XLOG_FPI_FOR_HINT 记录遵守 full_page_writes 设置。提交 2c03216d83 更改了 XLOG_FPI_FOR_HINT 记录,使其即使在 full_page_writes 被禁用时也始终包含全页映像。然而,在这种设置下,它们不需要这样做,因为位更新不需要免受写入撕裂的影响。因此,此提交使 XLOG_FPI_FOR_HINT 记录遵守 full_page_writes 设置。也就是说,如果 full_page_writes 被禁用,XLOG_FPI_FOR_HINT 记录可能不包含全页映像,并且 WAL 回放它们无效。Reported-by: Zhang Wenjie Author: Kyotaro Horiguchi Reviewed-by: Fujii Masao Discussion: https://postgr.es/m/tencent_60F11973A111EED97A8596FFECC4A91ED405@qq.com https://git.postgresql.org/pg/commitdiff/7fcf2faf9c7dd473208fd6d5565f88d7f733782b
Doc:记录只有超级用户才能使用 pg_import_system_collations()。回溯到 v10,pg_import_system_collations() 在此版本中引入。Author: Atsushi Torikoshi Reviewed-by: Fujii Masao Discussion: https://postgr.es/m/b7f484692a3e283710032e68b7f40617@oss.nttdata.com https://git.postgresql.org/pg/commitdiff/90b6c339b2b37ee320ff6125ef8c8ad0073aa31b
John Naylor 提交了
在 euc_tw_and_big5.c 中添加对 noError 参数的缺失检查。提交 ea1b99a66 中的疏忽。Yukun Wang。回溯到 v14,该参数在此版本中引入。Discussion: https://postgresql.ac.cn/message-id/flat/OS0PR01MB6003FCEFF0201EF21685FD33B4E39%40OS0PR01MB6003.jpnprd01.prod.outlook.com https://git.postgresql.org/pg/commitdiff/004874b72e8e60966f88de2d95667fe66c0466ca
在 postgres.conf.sample 中记录 "B" 和 "us" 作为可接受的单位。在 postgresql.conf 中,自 b06d8e58b 起,内存和文件大小 GUCs 可以用 "B"(字节)指定。同样,自 caf626b2c 起,时间 GUCs 可以用 "us"(微秒)指定。更新 postgres.conf.sample 以反映这一事实。Pavel Luzanov。回溯到 v12,这是最早允许这两种单位的版本。稍后的提交将记录 v11 的 "B" 情况。Discussion: https://postgresql.ac.cn/message-id/flat/f10d16fc-8fa0-1b3c-7371-cb3a35a13b7a%40postgrespro.ru https://git.postgresql.org/pg/commitdiff/bb95feabb8572f5069ad37763707862af5a81942
修复 date_bin 中的除零错误。Bauyrzhan Sakhariyev,通过 Github。回溯到 v14。https://git.postgresql.org/pg/commitdiff/a0db4294aeffe428cdcb381fc66ba725ec588e95
David Rowley 提交
Andres Freund 提交
Dilip Kumar 发送了另一个修订的补丁,用于添加 TOAST 压缩方法选项。
Kyotaro HORIGUCHI 发送了另外两个修订的补丁,用于防止恢复期间的 xlog 页头错误。
Greg Nancarrow 发送了另一个修订的补丁,用于添加一个新的“client_connection”事件和客户端连接触发器支持。
Jacob Champion 发送了另一个修订的补丁,用于支持 NSS 作为 libpq TLS 后端。
Thomas Munro 发送了一个补丁,用于支持 Solaris 上的直接 I/O。
Andres Freund 发送了两个修订的 WIP 补丁,用于通过分离热路径和冷路径来优化分配,并通过避免在分配新块时迭代所有块的需要来改进 slab 性能。
Daniel Gustafsson 发送了一个补丁,用于禁用 pgcrypto 中的 OpenSSL EVP 摘要填充,并为不加载旧版 OpenSSL 3 添加了替代输出。
Ranier Vilela 发送了两个修订的补丁,用于避免一些 strlen 调用。
Masahiko Sawada 发送了另外两个修订的补丁,用于在应用逻辑复制更改时发生的错误中添加 errcontext,添加 pg_stat_logical_replication_error 统计视图,并向 ALTER SUBSCRIPTION 添加 skip_xid 选项。
Peter Smith 发送了另外两个修订的补丁,用于为流式事务添加 prepare API 支持。
Dipesh Pandit 发送了另外两个修订的补丁,用于通过维护当前归档文件的日志段号并将其加 1 来获取下一个 WAL 文件,而不是默认扫描目录,从而减轻 WAL 归档程序的目录扫描。
Andres Freund 和 Yura Sokolov 交换了补丁,以改进惰性 vacuum 的死元组存储:Andres 通过添加基数树实现,Yura 通过添加专用 vacuum tid map。
Denis Hirn 发送了另一个修订的补丁,用于允许 CTE 中存在多个线性递归自引用。
Peter Eisentraut 发送了一个补丁,用于使 Unicode makefile 具有并行安全性。
Ronan Dunklau 发送了另一个修订的补丁,用于标记并删除为 SortGroupClause 添加的 resjunk,并使 sort 和 result 节点执行简化的投影版本。
Filip Gospodinov 发送了另一个修订的补丁,通过硬编码 Libs.private 中的 -lpgcommon 和 -lpgport 来修复静态链接的 pkg-config 文件。
Tomáš Vondra 发送了另一个修订的补丁,用于实现序列的逻辑解码/复制。
Tomáš Vondra 发送了另一个修订的补丁,用于在扩展统计信息中处理 Expr op Expr 子句。
Tomáš Vondra 发送了另外两个修订的补丁,以提高 GROUP BY 的效率。
David Rowley 发送了另一个修订的补丁,用于使 nodeSort.c 对单列排序执行 Datum 排序。
Peifeng Qiu 发送了两个修订的补丁,用于向 libpq 添加 kerberos 委托支持。
John Naylor 发送了另一个修订的补丁,用于重写 pg_verify_str 以提高速度。
Hou Zhijie 和 Greg Nancarrow 交换了补丁,以允许用户声明表的并行数据修改安全性,启用并行 select 用于 insert,并添加一个 pg_get_table_parallel_dml_safety(regclass) 函数,该函数返回 (objid, classid, parallel_safety) 记录。
Ranier Vilela 和 Aleksander Alekseev 交换了补丁,以取消遮蔽几个变量。
Simon Riggs 发送了另外两个修订的补丁,使得哈希索引可以支持 UNIQUE 约束,并允许多列哈希索引。
Bruce Momjian 发送了另外四个修订的补丁,用于修复分数区间算术中的一个错误。
Yugo Nagata 发送了一个补丁,用于纠正 libpq 文档中的一个错误,其中说明了命令在刷新输出缓冲区之前会存储在本地。
Yugo Nagata 发送了另一个修订的补丁,旨在修复一个 bug,该 bug 表现为在 pgbench 的流水线中使用 prepared BEGIN 语句可能导致错误。
Richard Guo 发送了另一个修订的补丁,用于修复分区 JOIN 中的一些不当之处。
David Rowley 发送了另一个修订的补丁,用于为 ORDER BY 聚合添加规划器支持。
Ronan Dunklau 和 Ranier Vilela 交换了补丁,以修复 postgres_fdw PathKey 的处理,方法是注意用于排序的运算符族。
Thomas Munro 发送了两个修订的补丁,用于使 SIMD 代码更具平台中立性,为 UTF-8 验证添加 ARM/NEON 支持,并为 UTF-8 验证添加 POWER AltiVec 支持。
Dean Rasheed 发送了另一个修订的补丁,以允许对 NUMERIC 使用负指数进行幂运算。
Peter Eisentraut 发送了一个补丁,用于在 psql 中测试查询取消。
Pavel Stěhule 和 Aleksander Alekseev 交换了补丁,以增强 PL/pgsql 调试 API,增加返回变量内容文本值的功能。
Vigneshwaran C 发送了另外两个修订的补丁,用于为 PUBLICATION 添加模式级别的粒度。
Jacob Champion 发送了一个补丁,用于添加宽 Unicode 码点指示符,这些码点自 Unicode 5.0 以来已添加。
Thomas Munro 和 Soumyadeep Chakraborty 交换了补丁,以优化 ProcSendSignal(),方法是将跟踪目标后端的机制从 pid 更改为使用 pgprocno,后者不需要扫描 ProcArray。这样做的同时还消除了启动期间需要检查的一些特殊情况。
Andres Freund 发送了一个补丁到 pgbench,以限制流水线仅在需要时进行 PQconsumeInput()。
Nitin Jadhav 发送了另外两个修订的补丁,以显示启动过程中执行的操作的进度。
Ajin Cherian 发送了四个修订的补丁,用于从逻辑复制中删除空事务。
Thomas Munro 发送了一个补丁,用于教会 pgindent 关于特殊文件本地类型名称。
Erik Rijkers 发送了另一个修订的补丁,用于实现 SQL/JSON 规范中的 JSON_TABLE 部分。
Alexander Pyhalov 发送了另一个修订的补丁,以允许将 CASE 表达式推送到外部服务器。
Zeng Wenjing 发送了另一个版本的补丁,用于实现全局临时表。
Justin Pryzby 发送了另一个修订的补丁,用于实现 ALTER TABLE ... ACCESS METHOD,并允许指定分区表的表访问方法。
Hou Zhijie 发送了一个补丁,用于添加一个快速选择(quickselect)工具,该工具可用于快速计算中位数等。
Artur Zakirov 发送了一个补丁,旨在修复一个 bug,该 bug 表现为逻辑复制触发的存储过程无法使用通知事件,通过将 SignalBackends() 调用移到 AtCommit_Notify() 内部。
Peter Eisentraut 发送了一个补丁到 pg_amcheck,用于修复命令行上的块号解析,以便在 sizeof(long)==4 的系统上正确处理。
Haiying Tang 发送了一个补丁,用于支持包含等号的单引号输入的制表符自动补全。
Fabien COELHO 发送了另一个修订的补丁,用于向 psql 添加 SHOW_ALL_RESULTS 选项。
Dean Rasheed 和 Tom Lane 交换了补丁,允许 NUMERIC 具有负比例。
Michael Banck 发送了另一个修订的补丁,用于添加新的 PGC_ADMINSET GUC 上下文和新的 pg_change_role_settings 预定义角色。这些创建了一个介于超级用户和用户之间功能的管理员。
Greg Nancarrow 发送了另一个修订的补丁,用于修复并行工作进程失败的断言和核心转储。
Andrey Borodin 发送了一个补丁,用于避免 relcache 和 syscache 回调中的重复。
Vigneshwaran C 发送了另一个修订的补丁,用于在逻辑复制消息描述中包含所使用的实际数据类型。
Robert Haas 发送了一个补丁,用于将一些恢复结束代码从 StartupXLOG() 中重构出来,推迟与允许 WAL 相关的某些恢复结束操作,并创建一个 XLogAcceptWrites() 函数,其中包含 StartupXLOG() 中的代码。
Andrey Borodin 发送了一个补丁,用于改进 ReadPageInternal() 的错误报告,确保不再出现无用的错误“未找到记录”。
Tom Lane 发送了一个补丁,用于删除哈希表大小的“long int”相关限制。
Haiying Tang 发送了另一个修订的补丁,用于对回归示例进行一些小的修复。
Bharath Rupireddy 发送了另一个修订的补丁,用于对 {pre, post}_auth_delay 使用 WaitLatch。
Bharath Rupireddy 发送了另一个修订的补丁,用于禁止 CREATE SEQUENCE 的 RESTART 选项。
Julien Rouhaud 发送了一个补丁,用于使 pg_stat_statements 测试不受预处理语句无效的影响。