本周人物: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 发布,这是一个类似 top 的 PostgreSQL 服务器活动监控应用程序。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 为您带来
请在太平洋标准时间下午 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 动物(小鸨、蝗虫...)的报告。讨论: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
在 gist_page_items 中检查 BuildIndexValueDescription 是否返回 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
doc:编辑“PostgreSQL 内部概述”一章。重新措辞一些句子,使其更简洁。将 postmaster 进程称为“postmaster”,而不是“postgres”。最初,这被称为“postmaster 进程”,但在我们合并“postmaster”和“postgres”命令,并且“postmaster”只是一个符号链接时,在提交 5266f221a2 中更改为“postgres 进程”。这是一个过度热衷的查找和替换的案例,因为该进程仍然称为“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 命令会像 VACUUM 一样通过 utility.c 中的单个例程,以便在命令需要通过多个事务时简化选项参数的分配处理。这可以用作将来与这些命令相关的补丁的基础架构,包括重新索引筛选和表空间支持。根据与下面提到的人员以及 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 中出现唯一约束冲突或“元组已由自身更新”错误。与 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
为带有默认 ACL 的 DROP OWNED BY 添加回归测试。当清除现有测试未涵盖的共享依赖项时,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 信息回调以捕获更多信息。在连接大多设置好后,才会安装用于检索连接设置期间状态更改信息的回调,因此没有提供太多信息,并错过了与握手相关的所有细节。这也扩展了带有 SSL_state_string_long() 的回调,以打印更多关于处理的 SSL 对象内的状态更改信息。同时,修复了一些错误引用回调及其在 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 实现。通过此提交,当使用 OpenSSL 构建后端时,SHA1 会通过 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
删除伪造的跟踪点。对 LWLockWaitForVar() 的调用触发了 TRACE_POSTGRESQL_LWLOCK_ACQUIRE 跟踪点,但 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 提交了
提升 PGSTAT_FILE_FORMAT_ID。这在 960869da08 中被遗漏了 报告人:Laurenz Albe 讨论:https://postgr.es/m/4f0aacc5fe1b4bfafa32b36ecd97469fae526a75.camel@cybertec.at https://git.postgresql.org/pg/commitdiff/b2f87b46690ab8cd3ee7c77226fcf3f5bb713e5b
从文档中删除对 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 的远程连接和远程聚合计划,这显然是不正确的,并且非叶自定义扫描也可能没有可识别的扫描关系。当该字段为空时,通过忽略此类节点来避免崩溃。此解决方案将导致诸如“游标“foo”不是表“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
移除对带有 WHERE CURRENT OF 的 MergeAppend 计划的错误支持。有人扩展了 search_plan_tree(),将 MergeAppend 完全像 Append 一样处理,这是 100% 错误的,因为与 Append 不同,我们不能假设只有一个输入节点在主动返回元组。因此,在 UNION ALL 或继承树上使用 MergeAppend 的游标可能会错误地匹配 WHERE CURRENT OF 查询,匹配到并非游标当前输出行的行,而是恰好与当前输出行具有相同 TID(在不同的表中)的行。删除错误代码;这意味着这种情况现在会返回类似“游标“foo”不是表“bar”的简单可更新扫描”的错误,而不是静默地发生错误。用户不应该对此感到惊讶,因为相同的游标查询可能已经因所选计划而失败。(如果排序是通过显式的 Sort 节点而不是 MergeAppend 完成的,则会以这种方式失败。)扩展明显不足的注释,使其更明确地说明此代码正在做什么,以期阻止未来的错误。这种情况已经存在一段时间了,因此要向所有支持的分支进行反向移植。讨论:https://postgr.es/m/482865.1611075182@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/a0efda88a679edaee9855628cb05b2ab00d80a15
在选定的测试用例中禁用 vacuum 页面跳过。默认情况下,VACUUM 会跳过它无法立即获得独占访问权的页面,这意味着即使是像检查点缓冲区写入这样无害且不可预测的活动也可能阻止页面被处理。通常这没什么大不了的,但是我们有少量测试用例会检查 VACUUM 处理的结果,因此如果跳过感兴趣的页面,这些测试用例将会失败。这似乎是一些罕见 buildfarm 失败的原因。为了解决这个问题,请在可能出现此问题的测试中,向 VACUUM 命令添加 DISABLE_PAGE_SKIPPING 选项。顺便说一下,删除 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 中触发“未能将所有 NestLoopParams 分配给计划节点”的健全性检查,但可能还会出现其他症状。要使用的正确值是我们实际打算在其中评估 PHV 的连接级别。我们可以从关联的 PlaceHolderInfo 的 ph_eval_at 字段中获得它。但是,有些地方会在创建 PlaceHolderInfos 之前调用 pull_varnos();在这种情况下,退回到保守的假设,即 PHV 将在其语法级别进行评估。(原则上,这可能会导致错过一些合法的优化,但我不知道在实践中存在任何问题。)对于在 deconstruct_jointree() 期间发生的调用,情况也有点棘手,但 AFAICS ph_eval_at 字段应该在我们需要它们时已达到最终值。使这项工作正常进行的主要问题是 pull_varnos() 无法访问 PlaceHolderInfos。如果有点乏味,我们可以在 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 连接失败消息的新措辞。“连接到服务器 so-and-so 失败:”似乎比之前的措辞“无法连接到 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 中,我从语法中省略了它,认为不值得支持。但是我们已经收到一个投诉,所以看来这个判断是错误的。它不需要大量的代码,所以重新添加它。(我仍然在 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 之后。使用“无法连接到数据库“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 仅在 ecpg 忽略的 PLpgSQL_Expr 中使用,因此它也需要忽略 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 中解析目录引用。
Bertrand Drouvot 提交了另一个补丁修订版,以在备用服务器上启用最小逻辑解码。
Justin Pryzby 提交了另一个 g_dump 补丁修订版:将 CLUSTER ON 作为单独的转储对象,因为它需要在任何子索引恢复并附加后恢复。
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() 调用以提高安全性和清晰度,使资源所有者更易于扩展,并使 hash_resource_elem 在有 64 位输入的情况下更好地工作。
Michail Nikolaev 提交了一个补丁,以在备用服务器上添加对 LP_DEAD 提示位的完整索引支持。
Vigneshwaran C 提交了另一个补丁修订版,以添加对 PUBLICATION 的架构级支持。
Masahiko Sawada 提交了另外两个补丁修订版,引入一个用于选择索引清理策略的 IndexAM API,基于此选择索引清理策略,如果索引不增长,则跳过 B 树批量删除。
Craig Ringer 提交了一个补丁,以添加更多关于在扩展代码中该(不)做什么的文档。
Atsushi Torikoshi 提交了另外两个补丁修订版,以将 waitstart 字段添加到 pg_lock_status 视图和支持函数中。
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 提交了另一个补丁修订版,将 queryId 添加到 pg_catalog.pg_stat_activity 视图中。
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 提交了另外两个补丁修订版,旨在修复一个由于非标准 ACL 导致 pg_upgrade 失败的错误,方法是添加一些额外的检查来覆盖这种情况。
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() 之前为编码的 itermpointer 添加边界检查,并内联 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 接口,使所有磁带函数(如 LogicalTapeRead 和 LogicalTapeWrite)都将 LogicalTape 作为参数,而不是 LogicalTapeSet+磁带编号,用简单的平衡 k 路归并替换旧的多相归并算法,并修复磁带读取缓冲区的大小。
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 提交了一个补丁,构建一些隐含的修剪限定符,以扩展规划时分区修剪和初始化分区修剪的用例。