Pgpool-II 4.2.5,PostgreSQL 的连接池和语句复制系统,已发布
Database Lab 2.5,用于快速克隆大型 PostgreSQL 数据库以构建非生产环境的工具,已发布。
pgexporter 0.1.0,一个用于 PostgreSQL 的 Prometheus 指标导出器,已发布
https://archives.postgresql.org/pgsql-jobs/2021-09/
Planet PostgreSQL:https://planet.postgresql.org/
本周 PostgreSQL 每周新闻由 David Fetter 为您带来
请在太平洋标准时间/太平洋夏令时周日下午 3:00 前将新闻和公告提交至 david@fetter.org。
Michaël Paquier 推送
重构 syslogger 管道协议,使用位掩码来表示其选项。之前的协议需要一组匹配的字符来检查发送的消息是否是最后一条,这取决于所需的目标: - “t” 和 “f” 跟踪发送到 stderr 的日志的最后一条消息。 - “T” 和 “F” 跟踪发送到 csvlog 的日志的最后一条消息。当引入新的目标时,可以使用更多字符对其进行扩展,但是使用位掩码会更加优雅。此提交更改了协议,以便在发送到 syslogger 的日志块消息的标头中使用位掩码,其中目前可用的选项如下: - log_destination 为 stderr。 - log_destination 为 csvlog。 - 如果消息是消息的最后一个块。Sehrope 在一个引入 JSON 作为 log_destination 选项的补丁集中发现了这个问题,但是他的补丁使协议标头的大小变大了。此提交保持与原始大小相同,并按需调整了协议。还要感谢 Andrew Dunstan 和 Greg Stark 的讨论。作者:Michael Paquier,Sehrope Sarkuni 讨论:https://postgr.es/m/CAH7T-aqswBM6JWe4pDehi1uOiufqe06DJWaU5=X7dDLyqUExHg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/2d77d835403a20b51e17e59f0343ddc17f431eec
为带有日志收集器的 csvlog 添加回归测试。这些测试已添加到 pg_ctl 的现有日志轮换测试中,该测试已经测试了 stderr。为 csvlog 添加了相同的覆盖率: - 检查 pg_current_logfile()。 - 使用预期文件名的日志轮换。 - 生成的日志内容。此测试已重构,以最大程度地减少为新的日志格式添加测试所需的工作量,从而简化一些即将进行的工作。作者:Michael Paquier,Sehrope Sarkuni 讨论:https://postgr.es/m/CAH7T-aqswBM6JWe4pDehi1uOiufqe06DJWaU5=X7dDLyqUExHg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/72b76f76161c78dd1be42592c4e5b980beef5f26
修复 ECPG 连接逻辑中线程在 OOM 时出现的错误处理。在分配结构以存储连接参数关键字和值时发生内存不足错误可能会弄乱已保存的连接集,因为在失败时,pthread 互斥锁仍然会持有,新连接对象已列出但已被 free()。与其仅仅解锁互斥锁(这将使静态连接列表处于不一致状态),不如在开始测试操作之前移动连接参数的结构分配。这样可以确保在此代码路径中,连接列表和连接互斥锁始终保持一致。此错误不太可能发生,但可能会以令人惊讶的方式严重破坏 ECPG 客户端,因此将其全部回溯。报告者:ryancaicse 讨论:https://postgr.es/m/17186-b4cfd8f0eb4d1dee@postgresql.org 回溯到:9.6 https://git.postgresql.org/pg/commitdiff/fa703b317e9d261ffd34bbf5651ea29aff3ff0f0
删除用于复制槽的权限检查中的代码重复。两个名为 check_permissions() 的函数使用相同的检查来验证用户是否具有处理复制槽所需的权限。此提交删除了重复的代码,并将执行检查的函数移动到 slot.c 以进行集中管理。作者:Bharath Rupireddy 审核者:Nathan Bossart, Euler Taveira 讨论:https://postgr.es/m/CALj2ACUPpVw1u7sQocFVWrSs0n10pt_G_4NPZKSxXK6cW1dErw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/026ed8efd6b1d774924937baf3209b676df4531f
更新资源所有者 README,以了解支持的资源类型。所有支持的类型都直接列在 README 中,但是它已经非常过时了。此提交并非在 README 中列出所有支持的类型,而是添加了一个参考,以查看 resowner.c 中的 ResourceOwnerData 来获取此信息。为了清楚起见,稍微修改了段落的顺序。作者:Amit Langote 讨论:https://postgr.es/m/CA+HiwqHtfT9z=4H5+F7DOy0OyNHAaVwuRcakt9b2t2uADOaiag@mail.gmail.com https://git.postgresql.org/pg/commitdiff/cae6fc2bc27cdb072693076249ce688f048ca7b7
支持使用运行时计算的 GUC 的“postgres -C”。到目前为止,postgres 的 -C 选项是在初始化运行时计算的一小部分 GUC 之前处理的,这会导致结果不正确,因为 GUC 机制会回退到此类参数的默认值。例如,数据校验和可能会报告群集为“关闭”,因为控制文件尚未加载。或者 wal_segment_size 会显示 16MB 的段大小,即使 initdb --wal-segsize 使用了其他值。更糟糕的是,该命令无法正确报告最近引入的 shared_memory,这需要加载 shared_preload_libraries,因为这些库可能会请求一块共享内存。对运行时 GUC 的支持有一些限制,因为现在允许在正在运行的服务器上进行操作。其中一个值得注意的原因是,可加载库的 _PG_init
() 函数是在初始化所有运行时计算的 GUC 之前调用的,并且不能保证在正在运行的服务器上执行此操作是安全的。对于 shared_memory_size 而言,我们希望在不分配内存的情况下了解将使用多少内存,因此此限制是合适的。另一个有帮助的情况是大页面,引入了不同的 GUC 来评估服务器启动前所需的大页面数量,而无需分配大量的内存。此功能由新的 GUC 标志控制,并且在此更改时,有四个参数被归类为运行时计算: - data_checksums - shared_memory_size - data_directory_mode - wal_segment_size 添加了一些 TAP 测试以提供一些覆盖,并在 pg_checksums 的测试中使用 data_checksums。根据与 Andres Freund、Justin Pryzby、Magnus Hagander 等人的讨论。作者:Nathan Bossart 讨论:https://postgr.es/m/F2772387-CE0F-46BF-B5F1-CC55516EB885@amazon.com https://git.postgresql.org/pg/commitdiff/0c39c292077ef3ba987ced0dc6ea1c8f4f1e1f4b
禁用 Msys 上 postgres -C 的测试。在 Msys 上生成的输出不正确,因为 IPC::Run 以不同的方式使用本机 Perl(将 \r\n 本机转换为 \n)和 Msys perl(\r\n 按原样保留)处理输出,导致此测试失败。目前,只需禁用测试即可使构建场恢复到绿色状态。我认为正确的长期解决方案是调整 PostgresNode.pm 中的所有例程 command_checks_*
,以像 psql 在使用 Msys 时一样处理此输出,在比较之前自动丢弃 \r。根据来自 jacana 和 fairywren 的报告。感谢 Tom Lane 的 ping。讨论:https://postgr.es/m/1252480.1631829409@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/5adb06732d7fac8171609392ea83f18bc8f285f4
阐明 pg_receivewal 在关闭 WAL 段时的一些错误。在 pg_receivewal 的 WAL 流期间关闭的 WAL 段会根据上下文生成不正确的错误消息,因为在引用 WAL 段时使用的文件名忽略了部分文件或使用的压缩方法。在这种情况下,生成的错误消息(关闭、查找或重命名失败)与物理文件名不匹配。pg_basebackup 使用相同的代码路径,但是它不使用部分后缀,因此不受影响。7fbe0c8 在 walmethods.c 中引入了回调,以获取给定上下文的确切物理文件名,此提交利用它来改进这些错误消息。如果需要,将来可以将其扩展到 pg_basebackup/ 的更多代码路径。从同一作者的更大补丁中提取。作者:Georgios Kokolatos 讨论:https://postgr.es/m/ZCm1J5vfyQ2E6dYvXz8si39HQ2gwxSZ3IpYaVgYa3lUwY88SLapx9EEnOf5uEwrddhx2twG7zYKjVeuP5MwZXCNPybtsGouDsAD1o2L_I5E=@pm.me https://git.postgresql.org/pg/commitdiff/cddcf7842c31b4d07ca75439f6b4ddacaadbbd0d
改进 pg_receivewal 中的一些检查逻辑。改进了以下内容
Amit Kapila 推送
文档:更改创建订阅中的可选参数分组。订阅参数被重新排列为两组:a) 控制创建订阅期间发生的事情的参数 b) 控制复制行为的参数 这使得创建订阅的文档更容易理解。作者:Peter Smith 审核者:Amit Kapila 讨论:https://postgr.es/m/CAHut+PtPJDSOxtuMGpO2yDrRPKxcYGL4n7HqJP9HernZE=Cj+g@mail.gmail.com https://git.postgresql.org/pg/commitdiff/fee1040fe330bd17054fc7e4296e9cde203ede0f
修复 toast 更改的重排序缓冲区内存记帐。在逻辑解码中处理 toast 更改时,我们会重新排列元组更改以指向内存中的 toast 元组,而不是磁盘上的 toast 元组。并且,为了确保内存记帐正确,我们减去了旧更改的大小,然后在重新计算新元组后,在其末尾重新添加了其大小。现在,如果在添加新大小之前出现任何错误,我们将释放更改,这将更新记帐信息(从计数器中减去大小)。并且我们在那里下溢,这会导致在启用断言的构建中出现断言失败,否则会导致重排序缓冲区中的内存记帐错误。作者:Bertrand Drouvot 审核者:Amit Kapila 回溯到:13,其中引入了内存记帐 讨论:https://postgr.es/m/92b0ee65-b8bd-e42d-c082-4f3f4bf12d34@amazon.com https://git.postgresql.org/pg/commitdiff/df3640e5293dccbf964508babfc067282ea7a2fc
Tom Lane 推送
修复 plpgsql 中最外层块的 EXIT 语句。通常,以这种方式使用 EXIT 会导致“控制在没有 RETURN 的情况下到达函数末尾”。然而,如果该函数是不需要显式 RETURN 的函数(例如 DO 块),则不应该发生这种情况。但实际发生了,因为 add_dummy_return() 忽略了这种情况。根据 Herwig Goemans 的报告。向所有支持的分支进行反向移植。讨论:https://postgr.es/m/868ae948-e3ca-c7ec-95a6-83cfc08ef750@gmail.com https://git.postgresql.org/pg/commitdiff/1bf2518dd67be58b207979a66db7bb7c94b93a62
文档:改进 CREATE/ALTER SUBSCRIPTION 的文档。改进了一些选项的描述。修复了马虎的语法和标记。Peter Smith 和 Tom Lane 讨论:https://postgr.es/m/CAHut+PtPJDSOxtuMGpO2yDrRPKxcYGL4n7HqJP9HernZE=Cj+g@mail.gmail.com https://git.postgresql.org/pg/commitdiff/1882d6cca161dcf9fa05ecab5abeb1a027a5cfd2
在 PQconnectdb() 成功完成后清除 conn->errorMessage。提交 ffa2e4670 和 52a10224e 导致 libpq 的连接建立函数通常在成功连接后,连接的 errorMessage 缓冲区中留下一个非空字符串。虽然这是我故意的,但更冷静的思考表明这不是一个好主意:该字符串会有点令人困惑。此外,这破坏了至少一个通过检查 errorMessage 而不是按照文档使用 PQstatus() 来检查连接是否成功的应用程序。让我们在成功退出时清除缓冲区,恢复 v14 之前的行为。讨论:https://postgr.es/m/4170264.1620321747@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/138531f1bbc333745bd8422371c07e7e108d5528
修复具有多个 AlternativeSubPlan 副本的规划器错误。我们有可能将 AlternativeSubPlan 表达式节点复制到多个位置,例如多个分区子节点的扫描限定词。然后,我们有可能在每个位置选择不同的替代方案作为最优方案。提交 41efb8340 未能考虑这种情况,因此它删除“未使用的”子计划的尝试可能会删除在其他地方仍然使用的子计划。通过延迟删除逻辑直到我们检查完给定查询级别中的所有 AlternativeSubPlan 来修复。(这确实假设 AlternativeSubPlan 不会被复制到其他查询级别,但在可预见的未来,这没有问题;参见 qual_is_pushdown_safe。)根据 Rajkumar Raghuwanshi 的报告。反向移植到出现故障逻辑的 v14。讨论:https://postgr.es/m/CAKcux6==O3NNZC3bZ2prRYv3cjm3_Zw1GfzmOjEVqYN4jub2+Q@mail.gmail.com https://git.postgresql.org/pg/commitdiff/e8638d78a2cb94efba11a5dfbf3e7cd746d0af3e
在 CommitTransaction 期间发送 NOTIFY 信号。以前,我们在 ProcessCompletedNotifies 中发送传出的 NOTIFY 消息的信号,该函数还负责将这些消息的相关部分发送到我们连接的客户端。因此,它必须在进入空闲状态之前的主循环处理期间运行。这种安排有两个很大的缺点:* 现在过程允许命令内部的 COMMIT,在 COMMIT 时立即向其他会话发送 NOTIFY 会很有用(尽管出于线路协议稳定性的原因,我们仍然不应该在命令结束之前将它们转发给我们的客户端)。* 诸如复制工作程序之类的后台进程根本不会发送 NOTIFY,因为它们永远不会执行客户端通信循环。我们已经收到允许在复制工作程序中运行的触发器发送 NOTIFY 的请求,所以这是一个问题。为了解决这些问题,将传出 NOTIFY 信号的传输移动到 AtCommit_Notify 中,它将在 CommitTransaction 期间发生。还将 asyncQueueAdvanceTail 的可能调用移动到那里,以确保如果后台工作程序发送大量 NOTIFY 但没有人监听,我们不会膨胀异步 SLRU。我们还可以删除 asyncQueueReadAllNotifications 的调用,从而允许 ProcessCompletedNotifies 完全消失。这是因为提交 790026972 在 PostgresMain 调用 ProcessCompletedNotifies 的旁边添加了对 ProcessNotifyInterrupt 的调用,并且它自己调用了 asyncQueueReadAllNotifications,这意味着每当传入的通知信号与传出的通知信号同时发生时,我们都会无用地执行两个这样的调用(在两个单独的事务中)。我们只需要设置 notifyInterruptPending 以确保 ProcessNotifyInterrupt 运行,我们就完成了。现有文档建议,如果自定义后台工作程序想要发送 NOTIFY 消息,应该调用 ProcessCompletedNotifies。为了避免向后分支中的 ABI 中断,将其减少为一个空例程,而不是完全删除。删除将在 v15 中进行。尽管上述问题已经存在一段时间了,但我不认为将其反向移植到 v13 之外是安全的。在 12 和 13 之间的相邻代码中发生了很多改动。至少我们还必须反向移植 51004c717,并且还需要进行大量的其他调整,因此收益风险比看起来没有吸引力。根据 Michael Powers 的错误 #15293(以及其他人的类似抱怨)。Artur Zakirov 和 Tom Lane 讨论:https://postgr.es/m/153243441449.1404.2274116228506175596@wrigleys.postgresql.org https://git.postgresql.org/pg/commitdiff/2e4eae87d02fef51c42c2028b65d85b9e051f9eb
改进 pg_import_system_collations() 的日志消息。pg_import_system_collations() 对于它没有为其创建 pg_collation 条目的区域设置(“locale -a”输出的名称)的报告有点不一致。我认为我们应该为我们拒绝的每个区域设置打印一些合适的消息,除非它与预先存在的 pg_collation 条目匹配。(不过,这都是在 DEBUG1 日志级别,所以不会在 initdb 期间产生噪音。)为以前未记录的两种情况添加消息,即无法识别的编码和仅客户端编码。重新措辞现有消息,使其具有一致的风格。Anton Voloshin 和 Tom Lane 讨论:https://postgr.es/m/429d64ee-188d-3ce1-106a-53a8b45c4fce@postgrespro.ru https://git.postgresql.org/pg/commitdiff/69e31d05b0a33f55aa5d9540917540f5fccb93a7
禁止在后台工作程序中使用 LISTEN。可以在某些后台进程中执行用户定义的 SQL;例如,逻辑复制工作程序可以触发触发器。这打开了有人尝试在此类上下文中执行 LISTEN 的可能性。但是由于只有常规后端才会调用 ProcessNotifyInterrupt,因此实际上不会收到任何消息,因此注册的监听器只会阻止消息队列被清理。最终,NOTIFY 将停止工作,这很糟糕。也许有一天有人会发明基础设施来使在后台工作程序中侦听实际上有用。在此期间,禁止它。反向移植到 v13,我们在其中引入了 MyBackendType 变量。如果没有它,实现检查会困难得多,而且看起来不值得费力。讨论:https://postgr.es/m/153243441449.1404.2274116228506175596@wrigleys.postgresql.org https://git.postgresql.org/pg/commitdiff/1316be28664f1834ac091113217537101331bdf3
移除对 rangetable 大小的任意 64K 左右的限制。到目前为止,查询的 rangetable 的大小受到常量 INNER_VAR 等的限制,这些常量不能等于任何实际的 rangetable 索引。65000 无疑对于任何人来说都足够了,而且它仍然比我们可以实际处理的连接数大几个数量级。但是,我们需要为查询处理的每个子分区(或可能处理的)设置 rangetable 条目。具有几千个分区的查询正变得越来越现实,因此,即使它还没有到来,该限制成为问题的日子也指日可待。因此,让我们提高限制。此补丁没有仅仅增加 INNER_VAR 等的值,而是采用使它们成为小的负值的方法,以便 rangetable 理论上可以变得和 INT_MAX 一样长。该补丁的大部分内容都与将 Var.varno 和一些相关变量从“Index”(无符号 int)更改为普通的“int”有关。这基本上是表面上的,除了帮助调试器很好地打印它们的值之外,几乎没有实际效果。因此,我只费心更改了实际可以看到 INNER_VAR 等的地方,即解析器和大多数规划器看不到的地方。我们必须小心地在对 varno 执行小于/大于比较的地方,但是除了 IS_SPECIAL_VARNO 宏本身之外,这样的地方很少。此补丁的一个显着副作用是,虽然以前可以将 INNER_VAR 等添加到 Bitmapset 中,但现在会引发错误。我看不出将这些伪 varno 包括在真实 varno 的位图集中不会是一个错误的任何可能性,所以我认为这都是好事。尽管这涉及 outfuncs/readfuncs,但我认为不需要 catversion 的提升,因为存储的规则永远不会包含具有这些伪 varno 的 Var。Andrey Lepikhov 和 Tom Lane,在 Peter Eisentraut 的建议之后。讨论:https://postgr.es/m/43c7f2f5-1e27-27aa-8c65-c91859d15190@postgrespro.ru https://git.postgresql.org/pg/commitdiff/e3ec3c00d85bd2844ffddee83df2bd67c4f8297f
修复 EXPLAIN 以处理 SEARCH BREADTH FIRST 查询。SEARCH BREADTH FIRST 的重写器转换会在类型为 RECORD 的 Var 上生成 FieldSelect,其中 Var 引用递归联合的工作表输出。EXPLAIN VERBOSE 未能处理这种情况,因为它只期望此类 Var 出现在 CteScans 而不是 WorkTableScans 中。修复此问题,并添加一些测试用例,在 SEARCH 和 CYCLE 查询上练习 EXPLAIN。原则上,这种疏忽是一个旧的错误,但似乎在没有 SEARCH BREADTH FIRST 的情况下是无法到达的,因为当尝试手动创建此类引用时,解析器会失败。所以今天我只会修补 HEAD/v14。总有一天我们可能会发现这个补丁的代码部分需要进一步向后移植。根据 Atsushi Torikoshi 的报告。讨论:https://postgr.es/m/5bafa66ad529e11860339565c9e7c166@oss.nttdata.com https://git.postgresql.org/pg/commitdiff/3f50b82639637c9908afa2087de7588450aa866b
修复 pull_varnos 以处理转换后的 PlaceHolderVars。提交 55dc86eca 更改了 pull_varnos 以使用(如果可能)PlaceHolderVar 的关联 ph_eval_at。但我错过了一个细微的点:我们可能正在查看子附加关系的限定词或 tlist 中的 PHV,在这种情况下,我们需要计算一个 ph_eval_at 值,该值已以与 PHV 本身相同的方式进行了转换(参见 adjust_appendrel_attrs)。幸运的是,PlaceHolderInfo 中提供了足够的信息,可以在没有其他外部数据的情况下进行此类转换,因此我们不需要对规划器 API 进行另一轮丑化。这有点复杂,但由于这是一个难以命中的角落案例,所以我不太担心在这里添加循环。根据 Jaime Casanova 的报告。与之前的提交一样,反向移植到 v12。讨论:https://postgr.es/m/20210915230959.GB17635@ahch-to https://git.postgresql.org/pg/commitdiff/a21049fd3f64518c8a7227cf07c56f2543241db2
文档:修复拼写错误。“PGcon”应为“PGconn”。D. Frey 指出。讨论:https://postgr.es/m/163191739352.4680.16994248583642672629@wrigleys.postgresql.org https://git.postgresql.org/pg/commitdiff/d5eeb51bc053d75f647136026de522d6ee3bf725
Andres Freund 推送了
jit:在 LLVM 触发错误的情况下,不要尝试关闭 LLVM 状态。如果 LLVM 中分配失败,则回调 LLVM 是不安全的,因为 LLVM 通常对于异常/堆栈展开是不安全的。因此,LLVM 代码中的错误会被提升为 FATAL。但是 llvm_shutdown() 即使在这种情况下也会回调 LLVM,而 llvm_release_context() 会小心避免这样做。我们通常不能跳过关闭 LLVM,因为这会破坏性能分析。但是,如果 LLVM 内部出现错误,则可以这样做。由 Jelte Fennema Jelte.Fennema@microsoft.com 报告 作者:Andres Freund andres@anarazel.de 作者:Justin Pryzby pryzby@telsasoft.com 讨论:https://postgr.es/m/AM5PR83MB0178C52CCA0A8DEA0207DC14F7FF9@AM5PR83MB0178.EURPRD83.prod.outlook.com 向后移植:11-,其中引入了 jit https://git.postgresql.org/pg/commitdiff/edb4d95ddf8984ad5b24d964d45884977d2fde4b
进程启动:在单用户模式下更早地初始化 PgStartTime。即将到来的补丁将单用户模式处理从 PostgresMain() 中分离出来。启动时间只需要在单用户模式下确定。目前初始化发生在较晚的时候,这使得分离有点困难。由于 postmaster 更早地确定时间,因此将单用户模式的时间移动到大致相似的时间点是有意义的。审查人:Kyotaro Horiguchi horikyota.ntt@gmail.com 作者:Andres Freund andres@anarazel.de 讨论:https://postgr.es/m/20210802164124.ufo5buo4apl6yuvs@alap3.anarazel.de https://git.postgresql.org/pg/commitdiff/2c7615f77b8d84130d304365aa2235eea7b5949c
修复会话统计导致的性能下降。由 960869da08 引入的会话统计存在几个缺点: - 额外的 GetCurrentTimestamp() 调用,也降低了收集数据的准确性。可以通过传递 pgstat_report_stat() 中已经有的当前时间戳来避免这种情况。 - 每 500 毫秒发送一个额外的统计 UDP 数据包。通过将新统计信息添加到 PgStat_MsgTabstat 来解决此问题。这在概念上是丑陋的,因为会话统计不是表统计。但是结构体已经包含与表无关的数据,因此没有造成太大的损害。连接和断开连接在单独的消息中报告,这减少了每个会话的额外消息数量到两条消息,并稍微增加了 PgStat_MsgTabstat 的大小(但仍然适合相同数量的表统计信息)。 - 会话时间计算可能会在 long 为 32 位的系统上溢出。报告人:Andres Freund andres@anarazel.de 作者:Andres Freund andres@anarazel.de 作者:Laurenz Albe laurenz.albe@cybertec.at 讨论:https://postgr.es/m/20210801205501.nyxzxoelqoo4x2qc%40alap3.anarazel.de 向后移植:14-,此功能是在此版本中引入的。https://git.postgresql.org/pg/commitdiff/37a9aa659111c454386b7055dcd3809e45bc17de
进程启动:无论 EXEC_BACKEND 如何,都同时执行 InitProcess()。即将到来的补丁将单用户模式拆分为其自己的函数。这使它更容易。拆分出来以便于审查/测试。审查人:Kyotaro Horiguchi horikyota.ntt@gmail.com 作者:Andres Freund andres@anarazel.de 讨论:https://postgr.es/m/20210802164124.ufo5buo4apl6yuvs@alap3.anarazel.de https://git.postgresql.org/pg/commitdiff/3d7c752a2f092b9f6581497009eacd10cab90548
进程启动:将单用户代码从 PostgresMain() 中分离出来。由于正常后端的代码与单用户模式的特定代码混杂在一起,因此理解 PostgresMain() 比必要的更困难。将大部分单用户模式代码拆分为其自己的函数 PostgresSingleUserMain(),该函数执行单用户模式的所有必要设置,然后在之后将其移交给 PostgresMain()。InitPostgres() 中仍然有一些单用户模式代码,并且可能值得将其中至少一部分移出去。但这将在稍后处理。审查人:Kyotaro Horiguchi horikyota.ntt@gmail.com 作者:Andres Freund andres@anarazel.de 讨论:https://postgr.es/m/20210802164124.ufo5buo4apl6yuvs@alap3.anarazel.de https://git.postgresql.org/pg/commitdiff/7c83a3bf51489e5b48c567c2ac54fed030d23c52
Peter Eisentraut 推送
删除 T_Expr。这是一个不应该定义节点标签的抽象节点。审查人:Jacob Champion pchampion@vmware.com 讨论:https://postgresql.ac.cn/message-id/c091e5cd-45f8-69ee-6a9b-de86912cc7e7@enterprisedb.com https://git.postgresql.org/pg/commitdiff/85399291977324d5c9f634a9a9d6d8591bfe7520
添加 COPY_ARRAY_FIELD 和 COMPARE_ARRAY_FIELD。这些处理内联数组的节点字段(与 COPY_POINTER_FIELD 和 COMPARE_POINTER_FIELD 处理的动态分配数组相反)。这些情况直到现在都是手工编码的。审查人:Jacob Champion pchampion@vmware.com 讨论:https://postgresql.ac.cn/message-id/c091e5cd-45f8-69ee-6a9b-de86912cc7e7@enterprisedb.com https://git.postgresql.org/pg/commitdiff/308da179e7c2c41c146e23a1418f6419aee340af
添加 WRITE_INDEX_ARRAY。我们有一些 WRITE_{类型名称}_ARRAY
宏,但是使用 Index 类型的情况是手工编码的。将其也包装到一个宏中。这也稍微改变了行为:之前,如果长度为零,则会跳过字段名称。现在,即使在这种情况下,它也会打印字段名称。这与其他数组字段的处理方式更加一致。审查人:Jacob Champion pchampion@vmware.com 讨论:https://postgresql.ac.cn/message-id/c091e5cd-45f8-69ee-6a9b-de86912cc7e7@enterprisedb.com https://git.postgresql.org/pg/commitdiff/bdeb2c4ec2700bfa561061ccd19181326ee01c3f
将 Unicode 数据更新到 Unicode 14.0.0。https://git.postgresql.org/pg/commitdiff/f7e56f1f540fbef204a03094b97ddfe908c44070
修复不正确的格式占位符。还删除关于为什么需要将 64 位整数打印在单独缓冲区中的过时注释。原因曾经是可移植性,但现在剩下的原因是我们需要字符串长度来进行进度显示。通过查看下面的代码,这是显而易见的,因此似乎没有必要添加新的注释。https://git.postgresql.org/pg/commitdiff/e03b807e12bbb72d53ed53502dfb2c1e063e467c
修复 hash_array。提交 a3d2b1bbe904b0ca8d9fdde20f25295ff3e21f79 忽略了初始化合成类型缓存条目的 type_id 字段,因此它会在每次调用时创建一个新的条目。此外,最好为此使用每个函数的内存上下文;否则会泄漏内存。讨论:https://postgresql.ac.cn/message-id/flat/17158-8a2ba823982537a4%40postgresql.org https://git.postgresql.org/pg/commitdiff/851ff9335742d22a3cb1a5ab789208e4ee01dcef
使节点输出前缀与节点结构名称匹配。在大多数情况下,节点输出中的前缀字符串是节点结构名称的大写形式,例如,MergeAppend -> MERGEAPPEND。有一些例外情况,要么没有明显的原因,要么可能是为了较小的美观原因而偏离了这一点。为了简化此过程,并可能允许自动生成而无需处理例外情况,请使它们全部匹配。讨论:https://postgresql.ac.cn/message-id/c091e5cd-45f8-69ee-6a9b-de86912cc7e7@enterprisedb.com https://git.postgresql.org/pg/commitdiff/e58136069687b9cf29c27281e227ac397d72141d
添加 Cardinality typedef。与 Cost 和 Selectivity 类似,这只是一个 double,可以在路径和计划节点中使用,以给出有关字段含义的一些提示。讨论:https://postgresql.ac.cn/message-id/c091e5cd-45f8-69ee-6a9b-de86912cc7e7@enterprisedb.com https://git.postgresql.org/pg/commitdiff/6fe0eb963d3894ae9b0b6e151083887b664d45a3
消息样式改进。https://git.postgresql.org/pg/commitdiff/4ac0f450b698442c3273ddfe8eed0e1a7e56645f
Daniel Gustafsson 推送
Fujii Masao 推送
在 procarray.c 中使用 int 而不是 size_t。在 procarray.c 中声明的所有 size_t 变量实际上都是 int 变量。让我们为这些变量使用 int 而不是 size_t。这将减少 Wsign-compare 编译器警告。向后移植到 v14,其中提交 941697c3c1 在 procarray.c 中添加了 size_t 变量,以使未来的向后移植变得容易,尽管此补丁仅被归类为重构。报告人:Ranier Vilela 作者:Ranier Vilela、Aleksander Alekseev https://postgr.es/m/CAEudQAqyoTZC670xWi6w-Oe2_Bk1bfu2JzXz6xRfiOUzm7xbyQ@mail.gmail.com https://git.postgresql.org/pg/commitdiff/64a62ebeeb84af2a51b963a1737f804a0fed4246
修复 procarray.c 中的变量阴影。ProcArrayGroupClearXid 函数有一个名为“proc”的参数,但其局部变量也使用了相同的名称。此提交修复了此变量阴影,以提高代码可读性。向后移植到所有支持的版本,以使未来的向后移植变得容易,尽管此补丁仅被归类为重构。报告人:Ranier Vilela 作者:Ranier Vilela、Aleksander Alekseev https://postgr.es/m/CAEudQAqyoTZC670xWi6w-Oe2_Bk1bfu2JzXz6xRfiOUzm7xbyQ@mail.gmail.com https://git.postgresql.org/pg/commitdiff/dc899146dbf0e1d23fb24155a5155826ddce34c9
Peter Geoghegan 推送