本周人物:https://postgresql.life/post/anastasia_lubennikova/
pspg 4.4.0,一个为 PostgreSQL 设计的分页器,已发布。https://github.com/okbob/pspg/releases/tag/4.4.0
pg_activity 2.1.2,一个类似 top 的 PostgreSQL 服务器活动监控应用程序,已发布。https://github.com/dalibo/pg_activity/releases/tag/v2.1.2
https://archives.postgresql.org/pgsql-jobs/2021-03/
PostgreSQL 星球:https://planet.postgresql.org/
PostgreSQL 每周新闻本周由 David Fetter 为您带来
请在太平洋标准时间下午 3:00 前将新闻和公告提交至 david@fetter.org。
Peter Geoghegan 推送
注意在 VACUUM 期间堆页面有已死项目。在延迟 VACUUM 的堆扫描期间,一致地设置一个跟踪当前堆页面是否具有已死项目的标志变量。我们错过了存在预先存在的(甚至是新的)LP_DEAD 堆行指针的常见情况。还要明确说明该变量可能会受到现有行指针的影响,例如来自较早的机会性修剪操作。这种区别很重要,因为这是我们不能只使用附近的 tups_vacuumed 变量的主要原因。无后向移植。理论上,未能设置页面级别的标志变量没有任何后果。目前,它仅用于防御性地检查标记为全部可见的页面是否具有已死项目,这无论如何都不应该发生(如果发生,则表必须已损坏)。作者:Masahiko Sawada sawada.mshk@gmail.com 诊断:Masahiko Sawada sawada.mshk@gmail.com 讨论:https://postgr.es/m/CAD21AoAtZb4+HJT_8RoOXvu4HM-Zd4HKS3YSMCH6+-W=bDyh-w@mail.gmail.com https://git.postgresql.org/pg/commitdiff/0ea71c93a06ddc38e0b72e48f1d512e5383a9c1b
amcheck:降低调试消息的详细程度。空的兄弟页面有时可能比我们在 elevel DEBUG1 上报告的任何其他事件更常见。将相关情况的 elevel 增加到 DEBUG2,以避免使用相对不重要的细节淹没用户。https://git.postgresql.org/pg/commitdiff/65445469d6de3670f3e027236613e093e119ec55
修复有关承诺元组的注释。在提交 d168b666823 中的疏忽,该提交添加了自底向上的索引删除。https://git.postgresql.org/pg/commitdiff/fbe4cb3bd49f9e524f53ef77c775c1bad4d0312a
藤井正雄推送
使归档程序进程成为辅助进程。此提交更改了 WAL 归档程序进程,使其被视为辅助进程并且可以使用共享内存。这是即将推出的基于共享内存的统计信息收集器补丁系列所需的基础结构补丁。这些补丁系列基本上需要任何可以向共享内存报告统计信息的进程(包括归档程序)。由于此补丁本身有助于简化代码以及用户监视归档程序的状态,因此提前单独提交。此提交简化了 WAL 归档的代码。例如,以前,当后端通知归档程序有一些 WAL 文件要归档时,它们需要通过 postmaster 向归档程序发送信号。另一方面,此提交删除了发送给 postmaster 的信号,并使后端能够使用共享锁直接通知归档程序。此外,作为此更改的一方面,有关归档程序进程的信息可以在 pg_stat_activity 视图中查看。作者:堀口京太郎 复核:Andres Freund、Álvaro Herrera、Julien Rouhaud、Tomas Vondra、Arthur Zakirov、藤井正雄 讨论:https://postgr.es/m/20180629.173418.190173462.horiguchi.kyotaro@lab.ntt.co.jp https://git.postgresql.org/pg/commitdiff/d75288fb27b8fe0a926aaab7d75816f091ecdc27
修复 postmaster.c 中的注释。提交 86c23a6eb2 将指定 postgres 将通过发送信号 SIGSTOP 来停止所有其他服务器进程的选项从 -s 更改为 -T。但是,以前有一些注释错误地解释了 SIGSTOP 行为是由 -s 选项设置的。此提交修复了它们。作者:堀口京太郎 复核:藤井正雄 讨论:https://postgr.es/m/20210316.165141.1400441966284654043.horikyota.ntt@gmail.com https://git.postgresql.org/pg/commitdiff/fd31214075cc740e43edc71ca1c385c8c53047b7
Thomas Munro 推送
从并行查询测试中删除 SERIALIZABLE 解决方法。SERIALIZABLE 不再抑制并行性,因此我们可以从回归测试中删除一些过时的解决方法和注释。此更改在版本 12 中,提交 bb16aba5 中引入,但实际上不值得向后移植。同时修复一个错别字。复核:Bharath Rupireddy bharath.rupireddyforpostgres@gmail.com 讨论:https://postgr.es/m/CA%2BhUKGJUaHeK%3DHLATxF1JOKDjKJVrBKA-zmbPAebOM0Se2FQRg%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/eeb60e45d82d5840b713a8741ae552238d57e8b9
在 REFRESH MATERIALIZED VIEW 中启用并行性。将 CURSOR_OPT_PARALLEL_OK 传递给 pg_plan_query(),以便在运行基础 SELECT 查询时考虑并行计划。这在提交 e9baa5e9 中没有完成,该提交对 CREATE MATERIALIZED VIEW 执行了此操作,因为它当时尚未被认为是安全的。由于 REFRESH 始终先插入到新创建的表中,然后再通过单独的操作将数据合并或交换到位,因此我们也可以在此处启用此类计划。作者:Bharath Rupireddy bharath.rupireddyforpostgres@gmail.com 复核:侯志杰 houzj.fnst@cn.fujitsu.com 复核:Luc Vlaming luc@swarm64.com 复核:Thomas Munro thomas.munro@gmail.com 讨论:https://postgr.es/m/CALj2ACXg-4hNKJC6nFnepRHYT4t5jJVstYvri%2BtKQHy7ydcr8A%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/9e7ccd9ef64d05e87ceb1985d459bef9031205c0
修复更高隔离级别中的 transaction.sql 测试。能够针对 default_transaction_level 设置为可序列化或可重复读的集群运行“installcheck”似乎是一个有用的完整性检查。目前在这些配置中只有一个地方失败,因此让我们修复它。暂时没有后向移植,因为它在某些稳定分支的其他许多地方都会失败。如果我们将此配置包含在自动化测试中,我们也必须返回并修复这些错误。复核:Tom Lane tgl@sss.pgh.pa.us 讨论:https://postgr.es/m/CA%2BhUKGJUaHeK%3DHLATxF1JOKDjKJVrBKA-zmbPAebOM0Se2FQRg%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/37929599499fe5760a9dbab48a10a898879a0d44
修复并行哈希连接批处理清理中的竞争。在非常不幸的时机和 parallel_leader_participation 关闭的情况下,PHJ 可能会在释放每个批处理状态时尝试访问它。有代码旨在通过检查清除的指针来防止这种情况,但它有错误。通过引入额外的屏障阶段来修复。新阶段 PHJ_BUILD_RUNNING 表示可以安全地访问每个批处理状态以查找要帮助的批处理,而 PHJ_BUILD_DONE 表示为时已晚。最后一个分离的进程将像以前一样释放每个批处理状态的数组,但现在它还将同时原子地推进阶段,以便后来的附加程序可以避免危险,而不会发生数据竞争。这反映了释放每个批处理哈希表的方式(请参阅阶段 PHJ_BATCH_PROBING 和 PHJ_BATCH_DONE)。在一次性的构建场失败中发现,其中 BarrierAttach() 失败了完整性检查断言,因为内存已被 dsa_free() 覆盖。后向移植到 11,代码在 11 中到达。报告者:Michael Paquier michael@paquier.xyz 讨论:https://postgr.es/m/20200929061142.GA29096%40paquier.xyz https://git.postgresql.org/pg/commitdiff/3b8981b6e1a2aea0f18384c803e21e9391de669a
更新并行哈希连接阶段的名称。提交 3048898e 从某些与屏障阶段对应的等待事件名称中删除了 -ING。更新阶段的名称以匹配。当我们在进行修饰性更改时,还将“DONE”重命名为“FREE”。这与“ALLOCATE”更好地配对,并描述了该阶段中实际发生的活动(就像我们对其他阶段所做的那样),而不是描述状态。在错误修复提交 3b8981b6 将阶段分为两个之后,区别更加明显。至于增长屏障,将其“ALLOCATE”阶段重命名为“REALLOCATE”,这可能更好地描述了当时发生的情况。同时改进了有关阶段的一些注释。讨论:https://postgr.es/m/CA%2BhUKG%2BMDpwF2Eo2LAvzd%3DpOh81wUTsrwU1uAwR-v6OGBB6%2B7g%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/378802e3713c6c0fce31d2390c134cd5d7c30157
还原“修复并行哈希连接批处理清理中的竞争。”。这将还原提交 378802e3713c6c0fce31d2390c134cd5d7c30157。这将还原提交 3b8981b6e1a2aea0f18384c803e21e9391de669a。讨论:https://postgr.es/m/CA%2BhUKGJmcqAE3MZeDCLLXa62cWM0AJbKmp2JrJYaJ86bz36LFA%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/7f7f25f15edb6eacec58179ef5285e874aa4435b
提供 recovery_init_sync_method=syncfs。自提交 2ce439f3 以来,我们打开了数据目录中的每个文件,并在崩溃恢复开始时调用了 fsync()。如果文件很多,这可能会非常缓慢,导致出现系统需要数分钟甚至数小时才能开始崩溃恢复的投诉。提供一种替代方法,仅适用于 Linux,我们在数据目录下每个可能不同的文件系统上调用 syncfs()。这是等效的,但避免了从可能缓慢的存储中错误地引入许多 inode。新模式有一些注意事项,文档中进行了说明,因此新设置的默认值为“fsync”,保留了旧行为。报告者:Michael Brown michael.brown@discourse.org 复核:藤井正雄 masao.fujii@oss.nttdata.com 复核:Paul Guo guopa@vmware.com 复核:Bruce Momjian bruce@momjian.us 复核:Justin Pryzby pryzby@telsasoft.com 复核:David Steele david@pgmasters.net 讨论:https://postgr.es/m/11bc2bb7-ecb5-3ad0-b39f-df632734cd81%40discourse.org 讨论:https://postgr.es/m/CAEET0ZHGnbXmi8yF3ywsDZvb3m9CbdsGZgfTXscQ6agcbzcZAw%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/61752afb26404dfc99a535c7a53f7f04dc110263
Tom Lane 推送
解决 MinGW-64 中 setjmp/longjmp 支持的问题。我们很难不认为 MinGW-64 上的 setjmp/longjmp 存在问题,因为我们看到在代码中进行完全不相关的更改后,故障时有时无。其他项目(例如 Ruby)已经放弃,并开始在该平台上使用 gcc 的 setjmp/longjmp 内置函数;此补丁只是遵循了这一做法。请注意,这对于包含 setjmp 或 longjmp 的函数来说是一个非常根本的 ABI 破坏,因此我们不能真的考虑回溯修补。根据 Regina Obe 和 Heath Lord 的报告,以及 buildfarm 成员 walleye 最近的故障,以及 fairywren 上较早的故障。Juan José Santamaría Flecha 讨论:https://postgr.es/m/000401d716a0$1ed0fc70$5c72f550$@pcorp.us 讨论:https://postgr.es/m/CA+BEBhvHhM-Bn628pf-LsjqRh3Ang7qCSBG0Ga+7KwhGqrNUPw@mail.gmail.com 讨论:https://postgr.es/m/f1caef93-9640-022e-9211-bbe8755a56b0@2ndQuadrant.com https://git.postgresql.org/pg/commitdiff/146cb3889c3ccb3fce198fe7464a1296a9e107c3
改进 BIND 消息中错误参数值的日志记录。自 commit ba79cb5dc 以来,在扩展查询模式下发生错误时,绑定参数的值会被记录下来。然而,我们只在收集并转换了所有参数值之后才这样做,因此未能提供任何有用的无效参数问题定位。添加一个在参数收集期间使用的单独回调,并使其打印参数编号,以及如果使用文本输入格式则打印输入字符串。Justin Pryzby 和 Tom Lane 讨论:https://postgr.es/m/20210104170939.GH9712@telsasoft.com 讨论:https://postgr.es/m/CANfkH5k-6nNt-4cSv1vPB80nq2BZCzhFVR5O4VznYbsX0wZmow@mail.gmail.com https://git.postgresql.org/pg/commitdiff/1ea396362be1615e926ea69d666c770081a0d3ef
避免 SSL 参数处理中的极端情况内存泄漏。从 ssl_ca_file 读取根证书列表后,立即将其安装为新 SSL 上下文的客户端 CA 列表。这使得 SSL 上下文拥有该列表的所有权,以便 SSL_CTX_free 将释放它。这避免了如果我们进一步在 be_tls_init() 中失败时发生的永久性内存泄漏,如果提供了伪造的 CRL 数据,可能会发生这种情况。只有在服务器启动后 CRL 参数中断(否则我们只会退出),然后服务器在不修复 CRL 数据的情况下多次 SIGHUP,这种泄漏才会发生。这可能相当不可能,但修复它似乎值得,即使只是因为代码更清晰了。当我们在这样做的时候,添加一些关于此逻辑的内存管理方面的注释。Jelte Fennema 和 Andres Freund 独立指出。回溯修补到 v10;在 commit de41869b6 之前没有关系,因为我们不会在 SIGHUP 期间重新执行此代码。讨论:https://postgr.es/m/16160-18367e56e9a28264@postgresql.org https://git.postgresql.org/pg/commitdiff/4b12ab18c9d0735d760bf7667b158707b06e5df8
文档:改进 PL/pgSQL 中变量替换的讨论。这有点不连贯,部分原因是一个考虑不周的决定,即将不返回结果行的 SQL 命令记录为好像它们与返回结果行的命令没有任何共同之处。重新排列,以便我们对变量替换进行一次讨论,该讨论明确适用于所有类型的 SQL 命令,然后单独处理处理命令输出的问题。明确说明 EXPLAIN、CREATE TABLE AS SELECT 和类似的包含可优化语句的命令,出于变量替换的目的,将像可优化语句一样运行。在同一区域进行一些小的文字润色。David Johnston 和 Tom Lane,由 Pavel Stehule 和 David Steele 审查。讨论:https://postgr.es/m/CAKFQuwYvMKucM5fnZvHSo-ah4S=_n9gmKeu6EAo=_fTrohunqQ@mail.gmail.com
https://git.postgresql.org/pg/commitdiff/c783e656d41816b0328cb4bff27f11b70200770e
为 pg_basebackup 的 tar 格式输出添加端到端测试。现有的测试脚本确实使用 -Ft 选项运行 pg_basebackup,但它没有真正尝试验证结果的健全性。我们不会知道输出是否与标准的“tar”程序不兼容,也不会知道服务器是否无法从恢复的输出启动。值得注意的是,这意味着 xlog.c 的 read_tablespace_map() 没有得到有意义的测试,因为该代码仅在 tar 格式的情况下使用。(我们确实有对从普通格式输出恢复的合理覆盖,尽管它在 src/test/recovery 中,而不是在这里。)因此,尝试解压输出并从中启动服务器,而不是只是希望它是好的。此测试假设本地“tar”具有“-C directory”开关。虽然 POSIX 没有保证这一点,但我的研究表明所有未消亡的 tar 实现都具有它。如果 buildfarm 的意见不同,我们可以稍微复杂化测试以避免要求它。这可能应该回溯修补,但我不确定它在 d66b23b03 之前是否可以在 Windows 上运行。https://git.postgresql.org/pg/commitdiff/081876d75ea15c3bd2ee5ba64a794fd8ea46d794
防止 read_tablespace_map() 中的缓冲区溢出。Trustwave 的 Robert Foggia 报告说,read_tablespace_map() 未能防止其堆栈输入缓冲区溢出。由于假定表空间映射文件是可信的,这似乎不是一个有趣的安全漏洞,但为了稳健性,我们仍然应该修复它。当在此处时,记录 pg_basebackup 的 --tablespace-mapping 选项不适用于 tar 格式输出,因为它确实不适用。要使其工作,我们必须修改服务器发送的 tarball 中的 tablespace_map 文件,这可能是可行的,但我不会自愿这样做。(更轻松的解决方案将需要更改 basebackup 协议,以便源服务器可以调整映射。这也不是很吸引人。)https://git.postgresql.org/pg/commitdiff/a50e4fd028a1ece2b1a04df2c9ae6581783e9eef
服务器处理“表空间映射”文件的代码审查。在查看 Robert Foggia 的报告时,我注意到同一区域中的其他一些问题
路径名中反斜杠引用换行符的方案是错误的;如果路径名中的最后一个普通字符是反斜杠,则它将出现错误。我不确定我们为什么要费心允许表空间路径中出现换行符,但如果我们打算这样做,我们应该在不引入其他问题的情况下进行。因此,反斜杠本身也必须用反斜杠转义。* 作者没有非常仔细地阅读 sscanf 手册页,因为这段代码会删除路径中的任何前导空格。(我怀疑在实践中会出现带有前导空格的表空间路径;但是,如果我们费心允许路径中出现换行符,那么前导空格似乎并非不可能。)无论如何,使用 sscanf 来查找第一个空格是多余的。* 虽然我不太确定转义 \r 和 \n 的理由是什么,但如果想法是允许文件中出现 Windows 换行符,那么这段代码会失败,因为它如果看到 \r 后跟 \n 则会引发错误。* 对于映射文件中不完整的最后一行,没有交叉检查,这可能是转义不正确的错误的明显症状。在生成端,除了转义问题外,我们还有:* 如果 needtblspcmapfile 为 true,则 do_pg_start_backup 将在 tablespaceinfo->path 值中传递回转义字符串,这是任何调用者都不希望或准备好处理的。我不确定是否存在由此产生的实际错误,但它看起来可能存在(考虑到假设实际上任何人的表空间路径中都有换行符的可疑假设)。* 它对 pg_tblspc 目录中出现随机内容的可能性并不是很偏执。我认为我们应该忽略任何没有类似 OID 名称的东西。转义规则更改似乎无法回溯修补:它需要在 tablespace_map 文件中将反斜杠加倍,这基本上是 basebackup 格式的更改。导致麻烦的可能性远大于现有错误导致麻烦的可能性。其余的似乎不太可能引起问题,因此不进行回溯修补。https://git.postgresql.org/pg/commitdiff/8620a7f6dbdf978e57cdb9f42802a0418656d863
文档:删除 RLS 示例中的重复步骤。似乎是 093129c9d 中的复制粘贴错误。根据来自 max1@inbox.ru 的报告。讨论:https://postgr.es/m/161591740692.24273.4202054598867879464@wrigleys.postgresql.org https://git.postgresql.org/pg/commitdiff/70945649d734d16be22c3d1d90dd8c3d3c1e9d89
修复 foreach_delete_current() 的误用。我们的编码约定要求将此宏的结果分配回原始 List 变量。在这种用法中,由于 List 不可能为空,因此没有实际的错误 --- 但一些编译器对此发出警告。be45be9c3 中的疏忽。讨论:https://postgr.es/m/35077b31-2d62-1e31-0e2e-ddb52d590b73@enterprisedb.com https://git.postgresql.org/pg/commitdiff/1d581ce7129d7a33cd4ad27f8f246abfa1fd2db9
删除 relcache 条目时不泄漏 rd_statlist。尽管这些列表通常为 NIL,即使不为空也不太可能很大,但不断的 relcache 更新流量最终可能会导致 CacheMemoryContext 出现明显的膨胀。通过 valgrind 测试发现。回溯修补到添加此字段的 v10。讨论:https://postgr.es/m/3816764.1616104288@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/28644fac10731e30e70b622986a6fbbeb5a5b2f9
不要在 libpqrcv_check_conninfo() 中泄漏 malloc 的错误字符串。我们泄漏了来自 PQconninfoParse 的错误报告(如果有的话)。似乎不太可能实际使用模式会经常重复失败以产生严重的膨胀,但让我们无论如何都回溯修补以保持所有分支中的代码相似。通过 valgrind 测试发现。回溯修补到添加此代码的 v10。讨论:https://postgr.es/m/3816764.1616104288@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/9bacdf9f536a3720976ae258238cb46c691ce9b2
删除 ispell 缓存条目时,不要泄漏编译后的正则表达式。文本搜索缓存机制假设我们可以通过重置关联的长期内存上下文来清除无效的字典缓存条目。但是,这对于使用正则表达式的 ispell 词缀不起作用,因为正则表达式库处理普通的旧 malloc。因此,每次删除此类缓存条目时,我们都会泄漏编译后的正则表达式。这可能会很快累积,因为即使是相当简单的正则表达式也可能占用数十 kB,而大的正则表达式可能会占用数 MB。添加内存上下文回调以确保在清除其所属的缓存条目时释放正则表达式。通过 valgrind 测试发现。这个问题很古老,因此回溯修补到所有支持的分支。讨论:https://postgr.es/m/3816764.1616104288@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/d303849b059c3c315e5a8d4239016f8328f3296c
不要在长期上下文中运行 RelationInitTableAccessMethod。此函数中的某些代码路径执行 syscache 查找,这可能会导致表访问,并可能导致泄漏垃圾到调用者的上下文中。如果所述上下文是 CacheMemoryContext,我们最终将出现明显的膨胀。但是修复此问题并不比移动一个内存上下文切换步骤更难。(其他调用者没有问题。)Andres Freund 和我通过 valgrind 测试独立发现了这一点。回溯修补到添加此代码的 v12。讨论:https://postgr.es/m/20210317023101.anvejcfotwka6gaa@alap3.anarazel.de 讨论:https://postgr.es/m/3816764.1616104288@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/415ffdc2205e209b6a73fb42a3fdd6e57e16c7b2
当 GUC 设置被拒绝时,不要泄漏 malloc 分配的字符串。因为 guc.c 倾向于将所有字符串值保存在 malloc 分配的而不是 palloc 分配的存储中,它必须比平时更小心以避免泄漏。字符串 GUC 钩子检查中的错误退出未能清除提议的值字符串,并且 ProcessGUCArray() 中的错误退出未能清除 ParseLongOption() 的 malloc 分配的结果。通过 valgrind 测试发现。这个问题由来已久,所以回溯到所有支持的分支。讨论:https://postgr.es/m/3816764.1616104288@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/377b7a83007d277d32ef19f7c7590c8668d504cb
盲目尝试修复 MSYS 的测试脚本的 tar 调用。Buildfarm 成员 fairywren 不喜欢我在 commit 081876d75 中添加的测试用例。我猜原因是我不应该在 tar 命令行中使用 perl2host 化的路径。https://git.postgresql.org/pg/commitdiff/27ab1981e7c9b8fcbcb143c5f6f706441a52bbc8
避免在 RestoreGUCState() 中泄漏内存,并改进注释。RestoreGUCState 将 InitializeOneGUCOption 应用于已存在的 GUC 条目,导致任何 malloc 分配的辅助数据被遗忘。我们确实希望将 GUC 重置为其编译时的默认值,而 InitializeOneGUCOption 似乎是实现此目的的最佳方法,因此在之前添加代码以释放任何现有的辅助数据。can_skip_gucvar、SerializeGUCState 和 RestoreGUCState 之间的交互比它们不透明的注释向粗心的读者暗示的要微妙得多。重写并扩充注释,以使其更清楚地说明正在发生的事情。删除 read_nondefault_variables 中一个长期过时的断言:自 f5d9698a8 安装了更好的控制方法以来,set_config_option 的行为不再依赖于 IsInitProcessingMode。虽然这是修复一个明显的内存泄漏,但该泄漏不太可能涉及任何大量数据,并且它只能在一个工作进程的生命周期中发生一次。因此,似乎没有必要冒任何回溯的风险。讨论:https://postgr.es/m/4105247.1616174862@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/f0c2a5bba6c566fad781802537eb17f2977702bc
修复拒绝错误的 DH 参数时的内存泄漏。在回溯 e0e569e1d 时,我注意到还有一些其他地方我们应该应用 DH_free();也就是说,当我们从文件中加载一些 DH 参数然后因为它们不够安全而拒绝它们时。虽然似乎不太可能有人在生产中遇到这些代码路径,更不用说重复执行了,但为了保持一致性,让我们修复它。回溯到引入此代码的 v10。讨论:https://postgr.es/m/16160-18367e56e9a28264@postgresql.org https://git.postgresql.org/pg/commitdiff/e835e89a0fd267871e7fbddc39ad00ee3d0cb55c
修复 pg_dump 对每个属性压缩选项的处理。commit bbe0a81db 中使用的方法对于转储的可移植性来说是灾难性的。相反,在单独的 ALTER TABLE 命令中处理非默认的压缩选项。这减少了大多数列以相同方式压缩的常见情况下的重复操作,并且可以使转储还原到不了解每个属性压缩选项的服务器(只要你愿意忽略 ALTER TABLE 命令中的语法错误)。在 bbe0a81db 之后还有很多工作要做,但我正在快速跟踪这一部分,因为我们需要看看它是否足以使 buildfarm 的跨版本升级测试满意。Justin Pryzby 和 Tom Lane 讨论:https://postgr.es/m/20210119190720.GL8560@telsasoft.com https://git.postgresql.org/pg/commitdiff/aa25d1089ac00bbc3f97d2efe8f54c3d4beed5d1
抑制各种新的编译器警告。不理解 elog(ERROR) 不返回的编译器在此处发出警告。在 libpq_pipeline.c 中的情况下,我们没有将 pg_fatal() 标记为 noreturn 并没有真正帮助解决问题。根据 buildfarm。https://git.postgresql.org/pg/commitdiff/9fb9691a88ae8df9bc30e0f0f72de7c96e73e125
Álvaro Herrera 推送
在 libpq 中实现管道模式。libpq 中的管道模式允许应用程序避免在旧的 libpq API 中在每个查询之后隐式的 FE/BE 协议中的 Sync 消息。然后,应用程序可以使用新的 libpq 函数 PQpipelineSync 随意插入 Sync。这可以大大减少查询延迟。合作作者:Craig Ringer craig.ringer@enterprisedb.com 合作作者:Matthieu Garrigues matthieu.garrigues@gmail.com 合作作者:Álvaro Herrera alvherre@alvh.no-ip.org 审阅人:Andres Freund andres@anarazel.de 审阅人:Aya Iwata iwata.aya@jp.fujitsu.com 审阅人:Daniel Vérité daniel@manitou-mail.org 审阅人:David G. Johnston david.g.johnston@gmail.com 审阅人:Justin Pryzby pryzby@telsasoft.com 审阅人:Kirk Jamison k.jamison@fujitsu.com 审阅人:Michael Paquier michael.paquier@gmail.com 审阅人:Nikhil Sontakke nikhils@2ndquadrant.com 审阅人:Vaishnavi Prabakaran VaishnaviP@fast.au.fujitsu.com 审阅人:Zhihong Yu zyu@yugabyte.com 讨论:https://postgr.es/m/CAMsr+YFUjJytRyV4J-16bEoiZyH=4nj+sQ7JP9ajwz=B4dMMZw@mail.gmail.com 讨论:https://postgr.es/m/CAJkzx4T5E-2cQe3dtv2R78dYFvz+in8PY7A8MArvLhs_pg75gg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/acb7e4eb6b1c614c68a62fb3a6a5bba1af0a2659
将 libpq 管道模式支持添加到 pgbench。新的元命令 \startpipeline 和 \endpipeline 允许用户在 libpq 管道模式下运行查询。作者:Daniel Vérité daniel@manitou-mail.org 审阅人:Álvaro Herrera alvherre@alvh.no-ip.org 讨论:https://postgr.es/m/b4e34135-2bd9-4b8a-94ca-27d760da26d7@manitou-mail.org https://git.postgresql.org/pg/commitdiff/9aa491abbf07ca8385a429385be8d68517384fdf
(盲目)修复 Perl 在换行符处拆分字符串。我忘记了 Windows 将换行符表示为 \r\n,因此在 /\s/ 处拆分字符串会创建额外的空字符串。让我们将其重写为 /\s+/,看看是否可以避免这些。(在其他脚本中,在 Windows 上使用该模式是有先例的。)之前:91bdf499b37b、8ed428dc977f、650b96707672。根据 buildfarm,通过 Tom Lane。讨论:https://postgr.es/m/3144460.1615860259@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/015061690c6526ff9f9f7af2940e1c1541654b68
修复 libpq 中新的内存泄漏。我在 commit 9aa491abbf07 中的疏忽。根据 coverity。https://git.postgresql.org/pg/commitdiff/2b526ed2e1cbaa54e5ad0c12d1294482f2757b17
Michaël Paquier 推送
为 COPY 的进度报告添加一些基本测试。这测试了 COPY 进度报告的一些基本功能,依赖于在使用文件或 stdin 进行 COPY FROM 时触发的 INSERT 触发器,检查大小、处理的元组数以及 WHERE 子句排除的元组数。作者:Josef Šimánek,Matthias van de Meent 审阅人:Michael Paquier,Justin Pryzby,Bharath Rupireddy,Tomas Vondra 讨论:https://postgr.es/m/CAEze2WiOcgdH4aQA8NtZq-4dgvnJzp8PohdeKchPkhMY-jWZXA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/15639d5e8f6f278219681fec8a5668a92fb7e874
修复 indexing.c 中的注释。578b229 删除了对 WITH OIDS 的支持,已将 CatalogTupleInsert() 更改为不返回 Oid,但一个注释仍然提到了这一点。作者:Vik Fearing 讨论:https://postgr.es/m/fef01975-ed10-3601-7b9e-80ecef72d00b@postgresfriends.org https://git.postgresql.org/pg/commitdiff/9fd2952cf4920d563e9cea51634c5b364d57f71a
改进 psql 中使用 \h 对 IMPORT FOREIGN SCHEMA 的制表符补全。只有 “IMPORT” 显示为补全的结果,而 IMPORT FOREIGN SCHEMA 是唯一在第一个位置使用此关键字的命令。这将补全更改为显示完整的命令名称,而不仅仅是 “IMPORT”。审阅人:Georgios Kokolatos,Julien Rouhaud 讨论:https://postgr.es/m/YFL6JneBiuMWYyoh@paquier.xyz https://git.postgresql.org/pg/commitdiff/5b2266e33fc74142d23685bdf54f64ad598fbdea
Stephen Frost 推送
为 ANALYZE 使用预取。当我们有 posix_fadvise() 可用时,我们可以通过使用它来通知内核我们将要请求的块,从而大大提高 ANALYZE 的性能。与位图索引扫描类似,预取的缓冲区数量基于 maintenance_io_concurrency 设置(对于特定的表空间,如果未设置,则通过 get_tablespace_maintenance_io_concurrency() 全局设置)。审阅人:Heikki Linnakangas,Tomas Vondra 讨论:https://postgresql.ac.cn/message-id/VI1PR0701MB69603A433348EDCF783C6ECBF6EF0%40VI1PR0701MB6960.eurprd07.prod.outlook.com https://git.postgresql.org/pg/commitdiff/c6fc50cb40285141fad401321ae21becbaea1c59
改进自动清理和自动分析的日志记录。当记录自动清理和自动分析活动时,如果启用了 track_io_timing,则包括 I/O 计时。此外,对于自动分析,添加读取速率和脏速率,类似于历史上为自动清理记录这些信息的方式。Stephen Frost 和 Jakub Wartak 审阅人:Heikki Linnakangas,Tomas Vondra 讨论:https://postgresql.ac.cn/message-id/VI1PR0701MB69603A433348EDCF783C6ECBF6EF0%40VI1PR0701MB6960.eurprd07.prod.outlook.com https://git.postgresql.org/pg/commitdiff/94d13d474dc61800e8a17cc1959c55815b050ecd
Robert Haas 推送
修复令人困惑的 amcheck 损坏消息。如果根本没有 TOAST 块,则不要抱怨最后一个 TOAST 块号与我们预期的不同。在这种情况下,说最终块号为 0 并不是很准确,并且该值从 TOAST 表中缺失的事实已单独报告。Mark Dilger 讨论:http://postgr.es/m/AA5506CE-7D2A-42E4-A51D-358635E3722D@enterprisedb.com https://git.postgresql.org/pg/commitdiff/4078ce65a0f7197180a9be2c6460ea4bf909bd98
允许配置 LZ4 TOAST 压缩。现在有一个针对每个列的 COMPRESSION 选项,可以设置为 pglz(默认值,也是迄今为止唯一的选项)或 lz4。或者,如果您愿意,可以将新的 default_toast_compression GUC 设置为 lz4,那么对于未指定值的新的表列,这将成为默认值。PostgreSQL 代码中没有 lz4 支持,因此要使用 lz4 压缩,必须使用 --with-lz4 构建 PostgreSQL。通常,TOAST 压缩是指对单个列值进行压缩,而不是对整个元组进行压缩,这些值可以在元组内内联压缩,也可以压缩后存储在 TOAST 表中,这些属性也适用于此功能。在此提交之前,TOAST 指针的 va_extsize 字段中有两个未使用的位,压缩数据项的 va_rawsize 字段中有两个未使用的位。这些位未使用,因为 varlena 的长度限制为 1GB;我们现在使用它们来指示使用的压缩类型。这意味着我们只有位空间可以容纳另外 2 种内置压缩类型,但如有必要,我们可以通过为我们最终想要添加的任何其他类型引入新的 vartag_external 值来解决这个问题。希望在这里提供广泛的算法选择不会太重要,因为我们添加的每一种算法不仅需要更多的编码,而且还会为每个打包者增加构建依赖项。尽管如此,至少做这么多似乎是值得的,因为 LZ4 比 PGLZ 获得了更好的压缩率,并且 CPU 使用率更低。LZ4 压缩的数据项有可能像 PGLZ 一样泄漏到存储在磁盘上的复合类型值中。LZ4 压缩的属性也可能通过 SQL 命令(如 CREATE TABLE AS 或 INSERT .. SELECT)复制到不同的表中。强制解压缩此类值会很昂贵,因此 PostgreSQL 从未这样做过。出于同样的原因,即使目标表偏好与源数据使用的压缩方法不同的压缩方法,我们也不会强制重新压缩已压缩的值。这些架构决策或许存在争议,但重新审视它们远远超出了作为本项目一部分可以实现的目标。然而,作为 VACUUM FULL 或 CLUSTER 的一部分进行重新压缩相对便宜,因此如果表的配置压缩方法与其中存储的某些列值使用的压缩方法不匹配,则此提交会调整这些命令以执行重新压缩。Dilip Kumar。这项工作的原始补丁由 Ildus Kurbangaliev 编写,而这些补丁又基于 Nikita Glukhov 更早期的工作,但此后的设计发生了很大变化,因为允许在运行的系统上添加和删除大量潜在的压缩方法被证明过于麻烦,考虑到上面提到的一些架构问题;现在首先添加哪个特定压缩方法的选择是不同的;并且很多代码都经过了大量重构。最近,Justin Przyby 在测试和审查方面提供了很多帮助,此版本还包含了他的一些代码贡献。来自 Tomas Vondra、Álvaro Herrera、Andres Freund、Oleg Bartunov、Alexander Korotkov 和我的其他设计输入和审查。讨论:http://postgr.es/m/20170907194236.4cefce96%40wp.localdomain 讨论:http://postgr.es/m/CAFiTN-uUpX3ck%3DK0mLEk-G_kUQY%3DSNOTeqdaNRR9FMdQrHKebw%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/bbe0a81db69bd10bd166907c3701492a29aca294
修复 ATExecAlterColumnType 中使用释放系统缓存 (ReleaseSysCache) 后出现的问题。由提交 bbe0a81db69bd10bd166907c3701492a29aca294 引入。每个构建场成员 prion。https://git.postgresql.org/pg/commitdiff/d00fbdc431192c3e429b3e91c43d364e5c7ba680
Amit Kapila 推送
文档:添加 pg_subscription 中子流 (substream) 的描述。提交 464824323e 在 pg_subscription 中添加了一个新的列 substream,但忘记更新文档。报告者:Peter Smith 作者:Amit Kapila 审核者:Peter Smith 讨论:https://postgr.es/m/CAHut+PuPGGASnh2Dy37VYODKULVQo-5oE=Shc6gwtRizDt==cA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/7efeb214ad832fa96ea950d0906b1d2b96316d15
修复删除订阅 (drop subscription) 处理表同步槽 (tablesync slot) 中的竞争条件。提交 ce0fdbfe97 使表同步槽永久化,并允许删除订阅来删除此类槽。但是,在表同步工作进程获得槽创建的确认之前,删除订阅可能会停止它,这可能会导致发布者上出现悬空的槽。在表同步工作进程中创建槽时,防止取消/终止中断。报告者:Thomas Munro,根据构建场。作者:Amit Kapila 审核者:Vignesh C,Takamichi Osumi 讨论:https://postgr.es/m/CA+hUKGJG9dWpw1cOQ2nzWU8PHjm=PTraB+KgE5648K9nTfwvxg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/6b67d72b604cb913e39324b81b61ab194d94cba0
添加新的 GUC 和 reloption 以启用并行模式的插入。提交 05c8482f7f 为 "INSERT INTO ... SELECT ..." 添加了并行 SELECT 的实现,即使最终这些检查确定无法使用并行,也可能在它执行的额外并行安全检查中产生不可忽略的开销。这通常只有在目标表有大量分区时才会成为问题。添加了一个新的 GUC 选项 "enable_parallel_insert",以允许并行模式下的插入。默认值为启用。除了 GUC 选项之外,用户可能还需要一种机制来允许在表级别以更精细的粒度进行并行模式的插入。新的表选项 "parallel_insert_enabled" 允许这样做。默认值为 true。作者:"Hou, Zhijie" 审核者:Greg Nancarrow,Amit Langote,Takayuki Tsunakawa,Amit Kapila 讨论:https://postgr.es/m/CAA4eK1K-cW7svLC2D7DHoGHxdAdg3P37BLgebqBOC2ZLc9a6QQ%40mail.gmail.com 讨论:https://postgr.es/m/CAJcOf-cXnB5cnMKqWEp2E2z7Mvcd04iLVmV=qpFJrR3AcrTS3g@mail.gmail.com https://git.postgresql.org/pg/commitdiff/c8f78b616167bf8e24bc5dc69112c37755ed3058
文档:更新并行插入 reloption 的描述。提交 c8f78b6161 添加了一个新的 reloption 以启用并行模式的插入,但忘记在文档中的一个位置更新有关同一内容的信息。顺便说一句,修复同一提交中的一个错别字。报告者:Justin Pryzby 作者:Justin Pryzby 审核者:"Hou, Zhijie",Amit Kapila 讨论:https://postgr.es/m/20210318025228.GE11765@telsasoft.com https://git.postgresql.org/pg/commitdiff/ed62d3737c1b823f796d974060b1d0295a3dd831
Peter Eisentraut 推送
小的错误消息改进。https://git.postgresql.org/pg/commitdiff/e1ae40f381d0582981b1e63856bd4b060cfe2d53
将 lwlock-release 探测器移回它所属的位置。文档明确指出,lwlock-release 在任何释放的等待者被唤醒之前触发。它一直以这种方式工作,直到 ab5194e6f617a9a9e7aadb3dd1cee948a42d0755,在那里它似乎被意外地放错了位置。将其移回它所属的位置。作者:Craig Ringer craig.ringer@enterprisedb.com 讨论:https://postgresql.ac.cn/message-id/CAGRY4nwxKUS_RvXFW-ugrZBYxPFFM5kjwKT5O+0+Stuga5b4+Q@mail.gmail.com https://git.postgresql.org/pg/commitdiff/96ae658e6238c5e69819fb1557c2c14a555506d8
Andres Freund 推送
Magnus Hagander 推送
Tomáš Vondra 推送
在后端崩溃后删除临时文件。在使用临时文件的后端崩溃后,这些文件过去会被留下,因为这可能对调试有用。但是,我们没有任何关于任何人实际这样做的报告,这意味着由于重复的后端故障,磁盘使用量可能会随着时间的推移而增长(甚至可能达到 ENOSPC)。因此,这种行为有点不幸,修复它需要手动清理(删除文件,这很容易出错)或重启实例(即服务中断)。这实现了临时文件的自动清理,由新的 GUC remove_temp_files_after_crash 控制。默认情况下会删除文件,但如果需要恢复旧的行为,可以禁用它。作者:Euler Taveira 审核者:Tomas Vondra,Michael Paquier,Anastasia Lubennikova,Thomas Munro 讨论:https://postgr.es/m/CAH503wDKdYzyq7U-QJqGn%3DGm6XmoK%2B6_6xTJ-Yn5WSvoHLY1Ww%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/cd91de0d17952b5763466cfa663e98318f26d357
实现 GROUP BY DISTINCT 功能。使用分组集时,某些分组集可能会重复。这在 CUBE 和 ROLLUP 子句中尤其常见。例如,GROUP BY CUBE (a,b), CUBE (b,c) 等价于 GROUP BY GROUPING SETS ( (a, b, c), (a, b, c), (a, b, c), (a, b), (a, b), (a, b), (a), (a), (a), (c, a), (c, a), (c, a), (c), (b, c), (b), () )。某些分组集被多次计算,这在大多数情况下是不必要的。此提交实现了 SQL 标准中定义的新的 GROUP BY DISTINCT 功能,该功能消除了重复的集合。作者:Vik Fearing 审核人:Erik Rijkers, Georgios Kokolatos, Tomas Vondra 讨论:https://postgr.es/m/bf3805a8-d7d1-ae61-fece-761b7ff41ecc@postgresfriends.org https://git.postgresql.org/pg/commitdiff/be45be9c33a85e72cdaeb9967e9f6d2d00199e09
修复 remove_temp_files_after_crash 的 TAP 测试。cd91de0d17 中包含的测试有两个简单的缺陷。首先,行数很少,在某些平台(例如 32 位)上,排序不需要磁盘排序,因此在这些机器上,它没有测试自动删除。然而,该测试失败了,因为在没有任何临时文件的情况下,甚至没有创建 base/pgsql_tmp 目录。通过将行数增加到 5000 来修复此问题,这在任何平台上都应该足够高。其次,该测试使用简单的 sleep 来等待临时文件的创建。这显然是有问题的,因为在速度较慢的机器上(或使用 valgrind、CLOBBER_CACHE_ALWAYS 等),可能需要一段时间才能创建临时文件。但是我们也希望测试运行得相当快。通过改为依赖 UNIQUE 约束来修复此问题,从而阻止创建临时文件的查询。作者:Euler Taveira 审核人:Tomas Vondra 讨论:https://postgr.es/m/CAH503wDKdYzyq7U-QJqGn%3DGm6XmoK%2B6_6xTJ-Yn5WSvoHLY1Ww%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/a16b2b960f0eec2fe367e86017b3c24ed688ba2b
修复 remove_temp_files_after_crash TAP 测试中的竞争条件。TAP 测试的编写方式是它没有等待正确的 SQL 命令,而是等待前一个命令的输出。这导致了竞争条件,允许命令以不同的顺序运行,没有按预期阻止等等。通过尽可能反转命令的顺序来修复此问题,以便观察输出保证数据已正确插入,并等待锁定出现在 pg_locks 中。讨论:https://postgr.es/m/CAH503wDKdYzyq7U-QJqGn%3DGm6XmoK%2B6_6xTJ-Yn5WSvoHLY1Ww%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/e589c4890b05044a04207c2797e7c8af6693ea5f
在 cmp_list_len_contents_asc 中使用 lfirst_int。在 be45be9c33 中添加的函数通过长度和内容比较整数列表 (IntList),但是存在两个错误。首先,它使用 intVal() 来提取值,但那是用于 Value 节点的,而不是从 IntList 中提取整数值。其次,它直接在 ListCell 上调用它,而没有执行 lfirst()。因此,只需改为执行 lfirst_int() 即可。有趣的是,这没有在构建农场上导致任何崩溃,但 valgrind 正确地抱怨了它。讨论:https://postgr.es/m/bf3805a8-d7d1-ae61-fece-761b7ff41ecc@postgresfriends.org https://git.postgresql.org/pg/commitdiff/b822ae13ea93c18326d58d47829bbc66d36fae5c
在 brin_form_tuple 中使用有效的压缩方法。在压缩 BRIN 摘要时,我们不能简单地使用索引属性的压缩方法。摘要可以使用不同的数据类型,例如,固定长度属性可能具有 varlena 摘要,从而导致压缩失败。对于内置的 BRIN 操作类,这种情况可以正常工作,因为摘要使用与属性相同的数据类型。当数据类型匹配时,我们可以继承为属性指定的压缩方法(它被复制到索引描述符中)。否则,我们没有太多选择,必须使用默认的方法。作者:Tomas Vondra 审核人:Justin Pryzby pryzby@telsasoft.com 讨论:https://postgr.es/m/e0367f27-392c-321a-7411-a58e1a7e4817%40enterprisedb.com https://git.postgresql.org/pg/commitdiff/882b2cdc08c4100e273f24742e2118be98708a07
Andrew Dunstan 推送了
Erica Zhang 发送了另一个补丁修订版,以在 contrib 下为 pg_stat_statements 兼容性验证添加一些测试。
Jürgen Purtz 发送了另一个补丁修订版,以更改 JOIN 教程,使其更加关注显式连接。
Noah Misch 发送了一个补丁,将类似的算法合并到 roles_is_member_of() 中。
David Rowley 发送了另一个补丁修订版,以缓存 PathTarget 和 RestrictInfo 的易失性,允许 estimate_num_groups() 返回有关估计的更多详细信息,允许 simplehash.h 的用户执行直接删除,添加 Result Cache 执行器节点,并删除 nodeResultCache.c 中的代码重复。
Vigneshwaran C 发送了一个补丁,如果事务锁定了系统表/用户目录表,则使预备事务失败。
Laurenz Albe 发送了另一个补丁修订版,以改进 \e、\ef 和 \ev,如果编辑器在未保存的情况下退出,则通过擦除查询缓冲区而不是执行上一个语句。
Nathan Bossart 发送了另一个补丁修订版,以避免过早创建存档状态“.ready”文件,并通过崩溃跟踪已通知的存档准备就绪位置。
Mike Insoo 发送了一个补丁,以检查在解码目录修改提交记录时,它是否属于在 restart_lsn 处处理的 RUNNING_XACT xid。如果是,则将其 xid 和子事务添加到逻辑解码快照中已提交的事务列表中。
Justin Pryzby 发送了另外三个补丁修订版,以使 FPI 可以使用不同的压缩方法。
Jim Mlodgenski 发送了另一个补丁修订版,以添加解析器钩子和使用它的测试。
Julien Rouhaud 发送了另一个补丁修订版,为 REINDEX 命令添加新的 OUTDATED 过滤功能,以及 reindexdb 实用程序的相应选项。使用时,REINDEX 将仅处理具有过时依赖关系的索引。目前,仅支持对排序规则的依赖,但我们将来可能会支持其他类型的依赖。
Georgios Kokolatos 和 Michaël Paquier 交换了补丁,以使 dbsize 更加一致。
Amit Kapila、Justin Pryzby 和 Greg Nancarrow 交换了补丁,以使 INSERT .... SELECT 可以并行执行。
Bruce Momjian 发送了另外两个补丁修订版,以实现密钥管理。
Bharath Rupireddy 发送了另外四个补丁修订版,以添加具有等待和超时功能的 pg_terminate_backend() 版本。
Masahiro Ikeda 发送了另一个补丁修订版,以使 WAL 接收器报告 WAL 统计信息。
Iwata Aya 发送了另外四个补丁修订版,以实现 libpq 调试日志。
Amul Sul 发送了另外两个补丁修订版,以添加 ALTER SYSTEM READ {ONLY | WRITE} 将使用的基础结构。
Jacob Champion 和 Michaël Paquier 交换了补丁,以记录来自所有身份验证后端的经过身份验证的身份。
Masahiro Ikeda 发送了四个补丁修订版,以使统计收集器在请求立即关闭时关闭而不写入统计文件。
Mark Rofail 和 Andreas Karlsson 交换了补丁,以实现外键数组。
Ajin Cherian、Peter Smith 和 Takamichi Osumi 交换了补丁,以实现两阶段事务的逻辑解码。
Álvaro Herrera 发送了另外三个补丁修订版,以实现 ALTER TABLE .. DETACH PARTITION CONCURRENTLY。
Amit Langote 发送了另一个补丁修订版,以允许在跨分区更新期间批量插入。
IIvan Panchenko 发送了另一个补丁修订版,以添加登录触发器。
Peter Eisentraut 发送了另一个补丁修订版,以使可以从过程获取动态结果集。在过程中声明带有 RETURN 的游标会使游标的数据作为 CALL 调用的结果返回。该过程需要使用 DYNAMIC RESULT SETS 属性声明。
Amit Kapila 发送了一个文档补丁,以在 pg_subscription 中添加子流的描述。
Amit Kapila 发送了一个补丁,以防止在创建 tablesync 插槽时发生取消/死亡中断。
Bharath Rupireddy 发送了另一个补丁修订版,以重构实现 REFRESH MATERIALIZED VIEW 的代码,以提高可理解性。
Ranier Vilela 发送了一个补丁,以涵盖 Windows 上重命名文件时的边缘情况。
Hou Zhijie 发送了另一个补丁修订版,以扩展安全检查以支持并行插入外键关系,并跳过 CommandCounterIncrement。
Fujii Masao 发送了另外两个补丁修订版,以改进 pgbench 的 \sleep 命令。
Andres Freund 和 Kyotaro HORIGUCHI 交换了补丁,以使统计收集器使用共享内存而不是文件作为统计收集器中的临时存储。
Masahiko Sawada 发送了另一个补丁修订版,以修复涉及多个 Postgres 外部服务器的事务。
Bharath Rupireddy 发送了另一个补丁修订版,以改进 PID XXXX 不是 PostgreSQL 服务器进程的消息。与其说消息“不是服务器进程”,不如说“不是后端进程”。这将清楚地表明给定的 PID 不是后端进程,但它可以是其他进程的 pid 或其他 postmaster 子进程的 pid 或无效的 pid。
Zeng Wenjing 发送了另一个补丁修订版,以实现全局临时表。
Tomáš Vondra 发送了另一个补丁修订版,以实现索引跳过扫描。
Atsushi Torikoshi 发送了另一个补丁修订版,以添加 memorycontext elog 打印。
John Naylor 发送了另外两个补丁修订版,以修复堆空间管理中的错误,该错误对 fillfactor 过分谨慎。以前,如果页面中有剩余的未使用的行指针,则 fill factor 较低的表将无法用于足够大的新元组以超过 fillfactor,即使页面根本不包含元组也是如此。这导致了不必要的关系扩展。通过允许一些等于行指针可能占用最大空间的 1/8 的空闲空间来修复。这有点随意,但应该允许许多以前失败的情况成功。根据 Floris van Nee 的报告。
Pavel Stěhule 发送了另一个补丁修订版,以向 PL/pgsql 添加例程标签。
Michaël Paquier 发送了另一个补丁修订版,以修复 PITR 和 2PC 之间的不一致之处。
Bertrand Drouvot 发送了另一个补丁修订版,以在备用服务器上实现最小逻辑解码。
Amit Langote 发送了一个补丁,以调整级联 RI 更新/删除期间的序列化失败的处理。
Peter Eisentraut 发送了 ibpq 补丁的另一个修订版本:为 SSL 连接设置服务器名称指示 (SNI)。默认情况下,libpq 将设置 TLS 扩展“服务器名称指示”(SNI)。这允许支持 SNI 的 SSL 代理路由连接。(这需要一个了解 PostgreSQL 协议的代理,而不仅仅是任何 SSL 代理。)将来,这也可以允许服务器为不同的主机规范使用不同的 SSL 证书。(这将需要新的服务器功能。这将是该功能的客户端部分。)由于 SNI 使主机名以明文形式出现在网络流量中,因此在某些情况下可能不希望这样做。因此,还添加了一个 libpq 连接选项“sslsni”来关闭它。
Amit Langote 发送了另一个补丁修订版本,用于在输入关系是分区关系时将其标记为完全分组分区关系,并允许在分区表上设置 parallel_workers。
Ibrar Ahmed 发送了另一个补丁修订版本,使 INSERT SELECT 可以使用 BulkInsertState 和 multi_insert。
John Naylor 发送了另一个补丁修订版本,向编码转换函数添加“noError”参数,并使用该参数以更大的块进行 COPY FROM 编码转换/验证。
Thomas Munro 发送了另一个补丁修订版本,用于为 WAL 使用预取。
Peter Geoghegan 发送了一个补丁,添加了一种在使用 git blame
时忽略 pgindent 运行和类似操作的方法。
Peter Eisentraut 发送了另一个补丁修订版本,用于添加 result_format_auto_binary_types 设置。
藤井正雄发送了另一个补丁修订版本,将 WalReceiverWaitStart 等待事件的类型从 Client 更改为 IPC。
Marina Polyakova 发送了一个补丁,通过允许并发加载 WAL 文件来减少从存档恢复数据库所需的时间。
Peter Eisentraut 发送了另一个补丁修订版本,用于实现 SQL 标准函数体。
Andrei Zubkov 发送了一个补丁,用于纠正 pg_stat_statements 中对释放事件的计数。
James Coleman 发送了另一个补丁修订版本,以改进备用连接被拒绝的错误消息。当前,当备用服务器完成启动但 hot_standby 配置为关闭时,客户端连接时的错误消息为“数据库系统正在启动”,这令人感到不必要地困惑(并且也不是很准确)。相反,发送一条有用的错误消息,以便用户立即知道他们的服务器配置为拒绝这些连接。
John Naylor 发送了另一个补丁修订版本,向编码转换函数添加“noError”参数,然后使用它来替换 pg_utf8_verifystr(),使用两种更快的实现:一种在 Intel 上使用 SSE-4.1 指令,另一种使用定制的回退函数,而不是依赖于 pg_utf8_verifychar() 和 pg_utf8_isvalid() 的函数。这一个大致基于 simdjson 库中包含的回退。
Peter Eisentraut 发送了另一个补丁修订版本,将 EXTRACT 的返回类型更改为 numeric。
James Coleman 发送了另一个补丁修订版本,用于在 OR'd ScalarArrayOps 中查找哈希 const 数组。
Amit Khandekar 发送了另一个补丁修订版本,通过使用 64 位块而不是 char 值来加速 tsvectors 的两个 gist 索引签名的异或运算,并避免对 pg_popcount32/64() 调用的函数指针解引用。
Etsuro Fujita 发送了另一个补丁修订版本,用于在 postgres_fdw 节点上实现异步追加。
Konstantin Knizhnik 发送了另一个补丁修订版本,为 auto_explain 添加两个统计 GUC:add_statistics_threshold 和 add_statistics_suggest_only。
Gilles Darold 发送了另一个补丁修订版本,用于在 XactCommand 级别添加钩子。
Tatsuo Ishii 发送了另一个补丁的三个修订版本,使 pgbench 中可以使用 COPY FREEZE。
Julien Rouhaud 发送了另一个补丁修订版本,用于将 queryId 添加到 pg_catalog.pg_stat_activity 视图。
Amit Langote 发送了另一个补丁修订版本,用于导出 get_partition_for_tuple(),使其对 execPartition.c 之外的其他事物可见,并在其他地方使用它以避免对某些 RI 检查使用 SPI。
Peter Smith 发送了一个补丁,修复了在 stream_cleanup_files 中,代码正在取消引用 HASH_REMOVE 返回的哈希条目的错误。
Thomas Munro 发送了另一个补丁修订版本,以支持 psql 的 \watch 命令的 PSQL_WATCH_PAGER,并尝试使用 sigwait() 使其工作。
Michaël Paquier 发送了一个补丁,用于清理 Kerberos 身份验证测试。
Thomas Munro 发送了另一个补丁修订版本,以提供 recovery_init_sync_method=wal。
Gilles Darold 和 Erik Rijkers 交换了补丁,以添加一些新的函数来计数和以其他方式描述正则表达式匹配。
David Fetter 发送了另一个补丁修订版本,用于实现 popcount(现在称为 bit_count)。
Justin Pryzby 发送了另一个补丁修订版本,添加了一种为 FPI 使用不同压缩方法的方法。
Matthias van de Meent 发送了一个补丁,以确保当 [+] 是 psql 元命令的选项时,\? 输出会提及它是,而不是其他情况。
Jan Wieck 和 Tom Lane 交换了补丁,以确保 pg_upgrade 保留 datdba。
Konstantin Knizhnik 发送了另一个补丁修订版本,用于实现内置的连接池。