本周人物:https://postgresql.life/post/marc_linster/
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
https://archives.postgresql.org/pgsql-jobs/2021-01/
Planet PostgreSQL:https://planet.postgresql.org/
本周 PostgreSQL 周报由 David Fetter 提供。
请在太平洋标准时间(PST8PDT)周日晚上3:00之前将新闻和公告发送至 david@fetter.org。
Tomáš Vondra 提交了
在 COPY FREEZE 中设置 PD_ALL_VISIBLE 和可见性映射位。确保 COPY FREEZE 将页面标记为 PD_ALL_VISIBLE 并更新可见性映射。到目前为止,我们只将单个元组标记为已冻结,但页面级别的标志未更新,因此 COPY FREEZE 之后的第一次 VACUUM 需要重写整个表。这是一个相当古老的补丁,多人为此付出了努力。第一个版本由 Jeff Janes 编写,然后由 Pavan Deolasee 和 Anastasia Lubennikova 重构。作者:Anastasia Lubennikova, Pavan Deolasee, Jeff Janes 审阅者:Kuntal Ghosh, Jeff Janes, Tomas Vondra, Masahiko Sawada, Andres Freund, Ibrar Ahmed, Robert Haas, Tatsuro Ishii, Darafei Praliaskouski 讨论:https://postgr.es/m/CABOikdN-ptGv0mZntrK2Q8OtfUuAjqaYMGmkdU1dCKFtUxVLrg@mail.gmail.com 讨论:https://postgr.es/m/CAMkU%3D1w3osJJ2FneELhhNRLxfZitDgp9FPHee08NT2FQFmz_pQ%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/7db0cd2145f2bce84cac92402e205e4d2b045bf2
psql \dX:列出扩展统计信息对象。新命令列出扩展统计信息对象。支持所有过去的带有扩展统计信息的版本。这是提交 891a1d0bca 的一个简化版本,该提交因未考虑普通用户无法访问 pg_statistic_ext_data 而被回滚。需要访问该目录的字段已被删除。可以添加它们,但这将需要核心更改。作者:Tatsuro Yamada 审阅者:Julien Rouhaud, Alvaro Herrera, Tomas Vondra, Noriyoshi Shinoda 讨论:https://postgr.es/m/c027a541-5856-75a5-0868-341301e1624b%40nttcom.co.jp_1 https://git.postgresql.org/pg/commitdiff/ad600bba0422dde4b73fbd61049ff2a3847b068a
在 postgres_fdw 中实现对批量插入的支持。扩展了 FDW API,允许将插入批量写入外表。由于每次往返外国服务器的延迟很高,这通常比插入单独的行效率更高。在常规 FDW API 中也可以实现类似的功能,但很不方便,并且在报告实际插入的行数等方面存在问题。这通过两个新函数扩展了 FDW API:* GetForeignModifyBatchSize - 允许 FDW 选择最佳批次大小 * ExecForeignBatchInsert - 一次性插入一批行。目前,只有 INSERT 查询支持批量处理。将来可能会添加对 DELETE 和 UPDATE 的支持。这还实现了对 postgres_fdw 的批量处理。可以使用服务器和表级别的“batch_size”选项指定批次大小。初始补丁版本由我编写,但 Takayuki Tsunakawa 在许多方面进行了重写和改进。作者:Takayuki Tsunakawa 审阅者:Tomas Vondra, Amit Langote 讨论:https://postgr.es/m/20200628151002.7x5laxwpgvkyiu3q@development https://git.postgresql.org/pg/commitdiff/b663a4136331de6c7364226e3dbf7c88bfee7145
修复 ExecInitModifyTable 中 FDW 批量处理的初始化。ExecInitModifyTable 必须为所有结果关系初始化批量处理,而不仅仅是第一个。此外,当需要垃圾过滤器时,指针会指向 mtstate->resultRelInfo 数组之后。根据来自多个非 x86 动物(florican, locust, ...)的报告。讨论:https://postgr.es/m/20200628151002.7x5laxwpgvkyiu3q@development https://git.postgresql.org/pg/commitdiff/920f853dc948b98a5dc96580c4ee011a302e33e4
修复带 `CLOBBER_CACHE_ALWAYS` 的 COPY FREEZE。这添加了意外从提交 7db0cd2145 中省略的代码,该代码有两个后果。首先,在运行 COPY FREEZE 时,只有 heap_multi_insert 插入的行被预期冻结,而 heap_insert 留下的行未冻结。然而,这包括 TOAST 表中的行,因此大量数据可能未冻结。其次,在 relcache 无效后,页面可能部分为空。这解决了这两个问题。讨论:https://postgr.es/m/CABOikdN-ptGv0mZntrK2Q8OtfUuAjqaYMGmkdU1dCKFtUxVLrg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/39b66a91bdebb00af71a2c6218412ecfc89a0e13
Heikki Linnakangas 提交
pageinspect:修复 gist_page_items() 中的 relcache 泄漏。gist_page_items() 函数在第一次调用时打开索引关系,在最后一次调用时关闭它。但是,不能保证该函数会完整运行,从而导致 relcache 泄漏并在事务结束时出现警告。为了修复,重构该函数,使其一次调用返回所有行,作为 tuplestore。报告者:Tom Lane 讨论:https://postgresql.ac.cn/message-id/234863.1610916631%40sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/04eb75e783ba49ca2e0e75088d6590b64be8ed4d
检查 BuildIndexValueDescription 在 gist_page_items 中返回 NULL。根据 Coverity。BuildIndexValueDescription() 在此实例中实际上不能返回 NULL,因为它仅在用户没有所需权限时返回 NULL,并且此函数只能由超级用户使用。但谨慎总比后悔好。 https://git.postgresql.org/pg/commitdiff/5d1e5c8b758770186b005a1c3888b05e37af79c5
修复 GiST 插入检测并发页面拆分的错误。在提交 9eb5607e699 中,我将检查拆分或删除页面时的条件弄错了:我使用了 && 而不是 ||。注释正确地说了“并发拆分或删除”。结果,GiST 插入可能会错过并发拆分,并将数据插入到错误的页面。Duncan Sands 使用一个执行大量并发插入的测试脚本演示了这一点。回溯到 v12,当时引入了此功能。需要 REINDEX 来修复受此错误影响的索引。回溯通过:12 报告者:Duncan Sands 讨论:https://postgresql.ac.cn/message-id/a9690483-6c6c-3c82-c8ba-dc1a40848f11%40deepbluecap.com https://git.postgresql.org/pg/commitdiff/6b4d3046f422c2682365924b515c7588d5a3e651
文档:修订《PostgreSQL 内部结构概述》章节。重新措辞几句话,使其更简洁。将 postmaster 进程称为“postmaster”,而不是“postgres”。最初写的是“postmaster process”,但在提交 5266f221a2 中将其更改为“postgres process”,当时我们合并了“postmaster”和“postgres”命令,而“postmaster”仅成为一个符号链接。那是一个过度热情的搜索和替换,因为进程仍然称为“postmaster”。作者:Erik Rijkers 和 Jürgen Purtz 讨论:https://postgresql.ac.cn/message-id/aa31f359-1168-ded5-53d0-0ed228bfe097%40iki.fi https://git.postgresql.org/pg/commitdiff/29ad6595ef7f568ca11dd9219c0d23048bdda513
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 提交
postgres_fdw:添加列出外服务器缓存连接的函数。此提交添加了函数 postgres_fdw_get_connections(),以返回 postgres_fdw 从本地会话建立到外服务器的所有打开连接的外服务器名称。此函数还返回每个连接是否有效。此函数在检查所有打开的外服务器连接时非常有用。如果我们发现要删除的连接,可以从函数结果中显式关闭它们,而这将在即将到来的提交中添加的函数中实现。此提交将 postgres_fdw 的版本提升到 1.1,因为它添加了新函数。作者:Bharath Rupireddy,由 Fujii Masao 调整 审阅者:Zhijie Hou, Alexey Kondratov, Zhihong Yu, Fujii Masao 讨论:https://postgr.es/m/2d5cb0b3-a6e8-9bbb-953f-879f47128faa@oss.nttdata.com https://git.postgresql.org/pg/commitdiff/708d165ddb92c54077a372acf6417e258dcb5fef
文档:添加关于 postgres_fdw_get_connections() 返回的服务器名称的注释。以前,文档没有提及 postgres_fdw_get_connections() 在 server_name 列中返回 NULL 的情况。用户可能会对返回 NULL 的原因感到困惑。此提交添加了注释,即在 postgres_fdw_get_connections() 中,如果服务器被删除,无效连接的服务器名称将为 NULL。建议者:Zhijie Hou 作者:Bharath Rupireddy 审阅者:Zhijie Hou, Fujii Masao 讨论:https://postgr.es/m/e7ddd14e96444fce88e47a709c196537@G08CNEXMBPEKD05.g08.fujitsu.local https://git.postgresql.org/pg/commitdiff/ee79a548e746da9a99df0cac70a3ddc095f2829a
Peter Eisentraut 提交
因参数设置不足而暂停恢复。当物理复制主服务器上某些参数发生更改时,会使用 XLOG_PARAMETER_CHANGE WAL 记录将其传达给备服务器。然后,备服务器会检查其自身的设置是否至少与主服务器一样大。如果不是,备服务器将以致命错误关闭。此补丁将热备服务器的行为更改为在此点暂停恢复。这允许备服务器上的读取流量继续,同时数据库管理员确定下一步操作。恢复解除暂停后,服务器将关闭(如前所述)。其想法是在暂停恢复时修复参数,然后在维护窗口开始时重新启动。审阅者:Sergei Kornilov sk@zsrv.org 讨论:https://postgresql.ac.cn/message-id/flat/4ad69a4c-cc9b-0dfe-0352-8b1b0cd36c7b@2ndquadrant.com https://git.postgresql.org/pg/commitdiff/15251c0a60be76eedee74ac0e94b433f9acca5af
pageinspect:将块号参数更改为 bigint。块号是 32 位无符号整数。因此,它们可以容纳的最小 SQL 整数类型是 bigint。但是,在 pageinspect 模块中,大多数处理块号的输入和输出参数都被声明为 int。因此,块号大于有符号 32 位整数的行为是可疑的。将这些参数更改为 bigint 类型,并对块范围添加更明确的错误检查。(其他 contrib 模块似乎已经正确地完成了此操作。)由于我们正在更改现有函数的参数类型,为了在二进制文件更新早于扩展文件更新的情况下不发生错误,我们需要为入口点创建新的 C 符号,这与其他扩展的实现方式类似。报告者:Ashutosh Bapat ashutosh.bapat.oss@gmail.com 审阅者:Alvaro Herrera alvherre@alvh.no-ip.org 审阅者:Michael Paquier michael@paquier.xyz 讨论:https://postgresql.ac.cn/message-id/flat/d8f6bdd536df403b9b33816e9f7e0b9d@G08CNEXMBPEKD05.g08.fujitsu.local https://git.postgresql.org/pg/commitdiff/f18aa1b203930ed28cfe42e82d3418ae6277576d
移除无效的 tracepoint。对 LWLockWaitForVar() 的调用触发了 TRACE_POSTGRESQL_LWLOCK_ACQUIRE tracepoint,但 LWLockWaitForVar() 实际上从未获取 LWLock。(可能是 68a2e52bbaf 中的复制/粘贴错误。)将其移除。作者:Craig Ringer craig.ringer@enterprisedb.com 讨论:https://postgresql.ac.cn/message-id/flat/CAGRY4nxJo+-HCC2i5H93ttSZ4gZO-FSddCwvkb-qAfQ1zdXd1w@mail.gmail.com https://git.postgresql.org/pg/commitdiff/09418bed67a7d5d5a8c9c3070f4c9048455a5389
Magnus Hagander 已推送
增加 PG_SYSROOT 启发式方法以支持 macOS。事实证明,在某些月相(可能与目录条目顺序有关?)下,xcrun 会报告 SDK 路径为 /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk,这通常是一个指向版本号的同级目录的符号链接。我们的启发式方法跳过非版本号路径名,这被拒绝了,这是错误的。我们仍然希望最终得到一个版本号的 PG_SYSROOT 值,但我们可以通过取消引用符号链接来获得它。与之前的修复一样,回溯到所有支持的版本。讨论:https://postgr.es/m/522433.1611089678@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/9d23c15a034ba163ae1045b945954e8e1bcfc72a
从文档中删除对 ftp 服务器的引用。我们使用 ftp 已经很久了,但文档中还剩一个引用。作者:Daniel Gustafsson daniel@yesql.se 讨论:https://postgr.es/m/6880D602-7286-46EC-8A03-14E3248FEC7A@yesql.se https://git.postgresql.org/pg/commitdiff/0a9ae44288d122c12aa0862b032ae892942da452
移除 make_diff 工具集。这些工具大部分已被切换到 git 所取代,删除它们比更新不正确的文档更容易。讨论:https://postgr.es/m/CABUevEwmASMn4WRJ6RagBx43sj10ctfMHcMA_-7KA3pDYmwpJw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/8a337b0ed21c654521da137159b8b9327a5cb971
Robert Haas 提交
Tom Lane 提交
添加 ltrim() 和 rtrim() 的 bytea 等效项。我们已经有了 bytea btrim(),但出于某种原因没有另外两个。Joel Jacobson 讨论:https://postgr.es/m/d10cd5cd-a901-42f1-b832-763ac6f7ff3a@www.fastmail.com https://git.postgresql.org/pg/commitdiff/a6cf3df4ebdcbc7857910a67f259705645383e9f
缩小局部变量的范围。这是更好的风格,并且与其他 if 分支更对称。这可能应该包含在 9de77b545(创建了机会)中,但被忽略了。Japin Li 讨论:https://postgr.es/m/MEYP282MB16699FA4A7CD57EB250E871FB6A40@MEYP282MB1669.AUSP282.PROD.OUTLOOK.COM https://git.postgresql.org/pg/commitdiff/3fd80c728dc36fbd250ca3019c2f5fa2567f1a75
避免与 WHERE CURRENT OF 和自定义扫描计划发生崩溃。execCurrent.c 的 search_plan_tree() 假设 ForeignScanStates 和 CustomScanStates 必然有一个有效的 ss_currentRelation。对于 postgres_fdw 的远程连接和远程聚合计划,这显然不是真的,非叶子自定义扫描也可能没有可识别的扫描关系。通过在字段为 null 时忽略这些节点来避免崩溃。此解决方案将导致类似 'cursor "foo" is not a simply updatable scan of table "bar"' 的错误,而这些情况也许我们可以允许 WHERE CURRENT OF 工作。对于 postgres_fdw 的用法来说,这不成问题,因为连接或聚合无论如何都会使 WHERE CURRENT OF 无效。但一个透明的上层自定义扫描节点可能会对此感到恼火。当并且如果有人关心花费精力在这种场景上,我们可以发明一个自定义扫描提供者回调来确定什么安全。报告和补丁来自 David Geier,我评论。这种情况已经存在一段时间了,所以回溯到所有支持的分支。讨论:https://postgr.es/m/0253344d-9bdd-11c4-7f0d-d88c02cd7991@swarm64.com https://git.postgresql.org/pg/commitdiff/60661bbf2dca0c1e744c948c74bccab98933c45b
删除 MergeAppend 计划与 WHERE CURRENT OF 的错误支持。有人扩展了 search_plan_tree() 来将 MergeAppend 的处理方式与 Append 完全相同,这是 100% 错误的,因为与 Append 不同,我们不能假设只有一个输入节点在主动返回元组。因此,使用 MergeAppend 跨 UNION ALL 或继承树的光标可能会错误地匹配到 TID(在不同的表中)与当前输出行相同的行,但实际上不是光标当前输出行的 WHERE CURRENT OF 查询。删除错误的代码;这意味着这种情况现在将返回一个错误,如 'cursor "foo" is not a simply updatable scan of table "bar"',而不是默默地误操作。用户不应该感到惊讶,因为相同的光标查询可能已经以这种方式失败,这取决于所选择的计划。(如果排序是使用显式的 Sort 节点而不是 MergeAppend 完成的,则会那样失败。)扩展明显不足的注释,以更明确地说明此代码正在做什么,希望可以避免未来的错误。这种情况已经存在一段时间了,所以回溯到所有支持的分支。讨论:https://postgr.es/m/482865.1611075182@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/a0efda88a679edaee9855628cb05b2ab00d80a15
在选定的测试用例中禁用 vacuum 页面跳过。默认情况下,VACUUM 会跳过无法立即获得独占访问权的页面,这意味着即使是像 checkpoint buffer 写入这样无害且不可预测的活动也可能阻止页面被处理。通常这没什么大不了的,但我们有少数测试用例会检查 VACUUM 处理的结果,因此如果跳过目标页面,测试将失败。这似乎是某些罕见的 buildfarm 失败的原因。为了解决这个问题,将 DISABLE_PAGE_SKIPPING 选项添加到可能出现此问题的测试中的 VACUUM 命令。另外,移除 pageinspect/sql/page.sql 中重复的查询。根据需要回溯(其中一些情况早在 v10 就存在)。讨论:https://postgr.es/m/413923.1611006484@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/c2dc1a79767a0f947e1145f82eb65dfe4360d25f
进一步调整 macOS 的 PG_SYSROOT 启发式方法。事实证明,在某些月相(可能与目录条目顺序有关?)下,xcrun 会报告 SDK 路径为 /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk,这通常是一个指向版本号的同级目录的符号链接。我们的启发式方法跳过非版本号路径名,这被拒绝了,这是错误的。我们仍然希望最终得到一个版本号的 PG_SYSROOT 值,但我们可以通过取消引用符号链接来获得它。与之前的修复一样,回溯到所有支持的版本。讨论:https://postgr.es/m/522433.1611089678@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/9d23c15a034ba163ae1045b945954e8e1bcfc72a
修复 pull_varnos 对 PlaceHolderVar 的 relids 集的错误计算。以前,pull_varnos() 将 PlaceHolderVar 的 relids 视为等于其内容中的 relids,但这未能考虑到我们可能需要因外部连接而推迟 PHV 的评估。这可能导致计划结构错误。已知的情况最终会触发 createplan.c 中的“failed to assign all NestLoopParams to plan nodes”健全性检查,但可能存在其他症状。正确的值是我们要实际评估 PHV 的连接级别。我们可以从关联的 PlaceHolderInfo 的 ph_eval_at 字段中获取它。但是,有些地方在 PlaceHolderInfos 创建之前调用 pull_varnos();在这种情况下,回退到保守的假设,即 PHV 将在其语法级别进行评估。(原则上这可能会导致错过一些合法的优化,但我不知道任何实际存在问题的案例。)在 deconstruct_jointree() 期间的调用也有些棘手,但据我所知,在我们需要 ph_eval_at 字段之前,它们应该已经达到了最终值。使此工作的主要问题是 pull_varnos() 无法访问 PlaceHolderInfos。我们可以通过将规划器“root”指针传递给它来轻松但略显繁琐地修复 HEAD 中的问题。在回溯分支中,这将对扩展程序造成无法接受的 API/ABI 破坏,因此请保持现有的入口点不变,并使用附加参数添加新的入口点。(如果调用旧的入口点并遇到 PHV,它将回退到使用语法级别,同样可能错过一些合法的优化。)回溯到 v12。计算肯定在此之前也是错误的,但似乎由于 PlaceHolderVar 所来自的子查询所施加的连接顺序限制,我们无法到达错误的计划。在提交 4be058fe9 允许完全折叠平凡子查询,消除了它们的连接顺序限制后,错误才变得可达。根据 Stephan Springl 的报告。讨论:https://postgr.es/m/171041.1610849523@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/55dc86eca70b1dc18a79c141b3567efed910329d
改进 libpq 连接失败消息的新措辞。“connection to server so-and-so failed:” 比以前的“could not connect to so-and-so:” (由 52a10224e 引入)更清晰,因为后者暗示了网络级别的连接失败。我们现在将此字符串添加到所有类型的连接失败之前,例如身份验证失败;因此,我们需要一种不暗示低级错误的措辞。根据与 Robert Haas 的讨论。讨论:https://postgr.es/m/CA+TgmobssJ6rS22dspWnu-oDxXevGmhMD8VcRBjmj-b9UDqRjw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/27a48e5a16ff2227ddf44ee717d9bcd89d22a7aa
文档:删除 PQreset() 文档中误导性的声明。这段文字声称重新连接将“到同一个服务器”,但代码中没有这样的保证,并且坚持这样做也不会有改进。回溯到 v10,当时添加了多主机连接字符串。讨论:https://postgr.es/m/1095901.1611268376@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/ab66645628d38a7047996b294b213f3048f7ef9b
重新允许在 pl/pgsql 表达式中使用 DISTINCT。我在提交 c9d529848 中将 DISTINCT 从语法中省略了,认为它不值得支持。然而,我们已经有一个抱怨了,所以这个判断是错误的。它不需要大量的代码,所以重新添加它。(我仍然将 UNION/INTERSECT/EXCEPT 划为界限:那些需要大量的语法重构,并且单行结果限制使它们几乎无用。)重新思考文档:这种行为是所有 pl/pgsql 表达式的属性,不仅仅是赋值。讨论:https://postgr.es/m/20210122134106.e94c5cd7@mail.verfriemelt.org https://git.postgresql.org/pg/commitdiff/7cd9765f9bd3397b8d4d0f507021ef848b6d48d2
避免为连接失败而冗余地添加 PQerrorMessage 的前缀。libpq 的连接失败错误消息基本上可以自成一体,尤其是自提交 52a10224e/27a48e5a1 以来。将它们加上“could not connect to database "foo"”或类似的字样只是冗余的,如果特定的数据库名称与失败无关,甚至可能具有误导性。(当相关时,我们相信后端错误消息会包含数据库名称。)事实上,psql 很久以来都没有使用过这样的前缀。因此,让我们的所有其他程序和文档示例与 psql 的做法保持一致。讨论:https://postgr.es/m/1094524.1611266589@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/58cd8dca3de0b3c7d378a412eca1f7289b5e4978
文档:改进 macOS 构建说明。鉴于最近的讨论,我们应该指示人们安装 Apple 的命令行工具;安装 Xcode 是次要的。另外,修复用于查找默认 sysroot 的示例命令,因为我们现在知道最初推荐的命令会给出一个与您的操作系统版本不匹配的结果。还记录了如果您根本不想让 configure 选择 sysroot 时要使用的变通方法。讨论:https://postgr.es/m/20210119111625.20435-1-james.hilliard1@gmail.com https://git.postgresql.org/pg/commitdiff/50bebc1ae1804e0ddf86b667122d3f8b22fa19b7
抑制 ecpg 语法中的 bison 警告。opt_distinct_clause 仅在 PLpgSQL_Expr 中使用,而 ecpg 会忽略它,因此它也需要忽略 opt_distinct_clause。我在 7cd9765f9 中疏忽了;由 Bruce Momjian 报告。讨论:https://postgr.es/m/E1l33wr-0005sJ-9n@gemulon.postgresql.org https://git.postgresql.org/pg/commitdiff/3fc81ce459e1696f7e5e5b3b8229409413bf64b4
更新 ecpg 的 connect-test1 以适应连接失败消息的更改。我本应该在提交 52a10224e 和后续提交中更新此内容,但由于它不是默认运行的,而且 buildfarm 也没有运行它,所以我错过了。也许我们应该尝试改善这种情况。讨论:https://postgr.es/m/CAH2-Wz=j9SRW=s5BV4-3k+=tr4N3A03in+gTuVA09vNF+-iHjA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/68d1c339417ea2e8df42e11db57472fcdbfe6a55
文档:在文档中更新示例连接失败消息。现在 52a10224e 和后续提交已经基本稳定下来,请确保文档中的示例是最新的。 https://git.postgresql.org/pg/commitdiff/183bbd1b6d4376f1b04c02b7a20b55019f6d84f4
文档:清理 contrib/pageinspect 的 GIST 函数文档。我来修复 buildfarm 中看到的过宽 PDF 页面警告,但停留的时间足够长,可以编辑附近的文本。 https://git.postgresql.org/pg/commitdiff/7e57255f6189380d545e1df6a6b38827b213e3da
为 contrib/auto_explain 添加一个简单的测试。该模块以前没有任何测试覆盖。讨论:https://postgr.es/m/1445881.1611441692@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/0c1e8845f28bd07ad381c8b0d6701575d967b88e
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 发送了一个补丁,用于构建一些隐含的剪枝条件,以扩展计划时间分区剪枝和初始化分区剪枝的应用场景。