FOSDEM PGDay 2022 将于2022年2月5-6日在线举行。 https://fosdem.org/2022/
《PostgreSQL 迁移指南》,汇集了大量宝贵经验,提供法语和英语版本,已出版
pgDay Paris 2022 将于2022年3月24日在法国巴黎举行。征稿截止日期为2021年12月31日午夜(巴黎时间)。
Citus Con,一个全球虚拟开发者活动,将于2022年4月12-13日举行。 征稿现已开放。
Pgpool-II 4.3.0,一个用于 PostgreSQL 的连接池和语句复制系统, 已发布。
Access-to-PostgreSQL v2.3 已发布。
check_pgbackrest 2.2,一个兼容 Nagios 的 pgBackRest 监控工具,已发布。 https://github.com/dalibo/check_pgbackrest/releases
DB Comparer 5.0 for PostgreSQL 已发布。
Database .NET v33.6,一个多数据库管理工具,现已支持 PostgreSQL,已发布。
pgAdmin4 6.3,一个用于 PostgreSQL 的 Web 和原生 GUI 控制中心, 已发布。
pgFormatter 5.2,一个 SQL 代码格式化/美化工具,已发布。 https://github.com/darold/pgFormatter/blob/master/ChangeLog
MySQL-to-PostgreSQL v5.5 已发布。
https://archives.postgresql.org/pgsql-jobs/2021-12/
Nordic PGDay 2022 将于2022年3月22日在芬兰赫尔辛基的 Hilton Helsinki Strand Hotel 举行。征稿截止日期为2021年12月31日 详情
Planet PostgreSQL:https://planet.postgresql.org/
本周 PostgreSQL 每周新闻由 David Fetter 为您呈现
请于太平洋时间周日下午3:00前将新闻和公告提交至 david@fetter.org。
Michaël Paquier 推送了:
改进 psql 对视图、FDW、序列和转换的 tab 补全。完成了以下改进:- 添加了 ALTER SEQUENCE AS 的类型补全。- 忽略转换的 ALTER,因为不支持该命令。- 添加了 ALTER FOREIGN DATA WRAPPER 的更多补全。- 添加了 ALTER VIEW 中与列相关的选项。这是 0cd6d3b 中工作的延续。Author: Ken Kato Discussion: https://postgr.es/m/9497ae9ca1b31eb9b1e97aded1c2ab07@oss.nttdata.com https://git.postgresql.org/pg/commitdiff/f44ceb46ec2d8da48f6e145bf462d5620c25e079
集中控制文件更新时的时间戳计算。此提交将控制文件的时间戳计算移至 src/common/ 中负责更新后端控制文件的例程中,该例程由多个前端工具(pg_rewind、pg_checksums 和 pg_resetwal)及后端本身共享。此更改的直接效果是在 pg_rewind 和 pg_checksums 写入控制文件时更新控制文件的时间戳,这有助于跟踪这些操作的控制文件更新(后端在启动时也会在日志中跟踪此信息)。这部分可以说是一个 bug,因为 ControlFileData->time 应该在每次写入新版本的控制文件时更新,但这是一个行为变更,因此不做回溯移植。Author: Amul Sul Reviewed-by: Nathan Bossart, Michael Paquier, Bharath Rupireddy Discussion: https://postgr.es/m/CAAJ_b97nd_ghRpyFV9Djf9RLXkoTbOUqnocq11WGq9TisX09Fw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/6fb7c5d67cdd55454fe6317f939a191f85e96473
修复 win32stat.c 中标准流 fstat() 的兼容性问题。GetFinalPathNameByHandleA() 无法在 _WIN32_WINNT < 0x0600 的编译环境中使用,这意味着至少某些构建农场成员在 MinGW 下使用的 Windows XP(Postgres 仍需支持)。这被构建农场报告为编译警告,但实际上比报告的更严重,因为代码将无法工作。改为使用 GetFileInformationByHandle(),它能够对标准流失败并对重定向的流成功,这正是我们在模拟 fstat() 的代码中所需要的。由于 win32stat.c 的现有逻辑,我们也知道它能在所有仍受支持的环境中工作。问题由 10260c7 引入,因此回溯移植到 14。Reported-by: Justin Pryzby, via buildfarm member jacana Author: Michael Paquier Reviewed-by: Juan José Santamaría Flecha Discussion: https://postgr.es/m/20211129050122.GK17618@telsasoft.com Backpatch-through: 14 https://git.postgresql.org/pg/commitdiff/58651d8dd6a56af306a361e2c386db798164c0f1
修复拼写错误。Author: Lingjie Qiang Discussion: https://postgr.es/m/OSAPR01MB71654E773F62AC88DC1FC8CC80669@OSAPR01MB7165.jpnprd01.prod.outlook.com https://git.postgresql.org/pg/commitdiff/98105e53e0ab472b7721a3e8d7b9f1750a635120
修复一些 GUC 的标志并改进部分描述。此提交修复了 GUC 的一些问题:- enable_incremental_sort 未标记为 GUC_EXPLAIN,导致在使用非默认值时不会出现在 EXPLAIN (SETTINGS) 的输出中,与其他规划器级别的 GUC 不同。- trace_recovery_messages 缺少 GUC_NOT_IN_SAMPLE,与其他开发者选项不同。- ssl_renegotiation_limit 应标记为 COMPAT_OPTIONS_PREVIOUS。同时修复了一个与 autovacuum_freeze_max_age 相关的不正确注释,并改进了一些其他近期引入的 GUC 的描述。摘自同一作者的更大补丁集。Author: Justin Pryzby Description: https://postgr.es/m/20211129030833.GJ17618@telsasoft.com https://git.postgresql.org/pg/commitdiff/be5455124b0f073ba3924ae2ba302a27b1686230
改进 psql 对各种 DROP 命令的 tab 补全。完成了以下改进:- 处理 DROP OWNED、物化视图和策略的 RESTRICT/CASCADE。- 处理 DROP TRANSFORM。这是 0cd6d3b 和 f44ceb4 中工作的延续。Author: Ken Kato Reviewed-by: Asif Rehman Discussion: https://postgr.es/m/0fafb73f3a0c6bcec817a25ca9d5a853@oss.nttdata.com https://git.postgresql.org/pg/commitdiff/9270778f467dad0d78d3b9e435a89a6039322b2f
修复 slotfuncs.c 中的注释语法。Author: Bharath Rupireddy Discussion: https://postgr.es/m/CALj2ACUkrNR2xTak+QaqxoTjPKGn8zXWripv7SR27t+Q5qF1Wg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/7799d4e3bdd14c90989d829a9b24e73d4ff4d4ad
将 pg_upgrade 测试中使用的所有 SQL 查询移至单独文件。现有的 pg_upgrade/test.sh 和构建农场代码在进行跨版本升级测试时一直持有相同的 SQL 查询集,用于在升级前调整回归测试创建的对象(主要是不兼容或不存在的对象需要从源中删除,可能需要重新创建)。这将所有这些 SQL 查询移到一个新的独立文件中,其中包含一组 \if 子句来根据待升级集群的旧版本处理版本检查。长期计划是让构建农场代码重用这个新的 SQL 文件,这样提交者就能通过刷新核心代码来修复 pg_upgrade 测试中的任何兼容性问题,而不必修改构建农场客户端。请注意,这目前只能处理主回归测试套件,对 contrib 模块还没有做任何处理(这些有更多问题,如数据库名称)。回溯移植到 10,调整版本检查,因为此脚本只需向后兼容,以便尽可能多地清理构建农场客户端中的代码。Author: Justin Pryzby, Michael Paquier Discussion: https://postgr.es/m/20201206180248.GI24052@telsasoft.com Backpatch-through: 10 https://git.postgresql.org/pg/commitdiff/0df9641d39057f431655b92b8a490b89c508a0b3
pg_waldump: 在被 SIGINT 中断时输出统计摘要。以前,pg_waldump 在被 SIGINT(或简单的 Ctrl+C)中断时不会显示其统计摘要。通过此提交,它获得了 SIGINT 的信号处理程序,捕获信号以尽早退出,以便在退出前显示统计摘要。这使报告更具交互性,类似于 strace -c。这一新行为使 --stats 和 --follow 选项的组合更加实用,用户在这种情况下每次调用 pg_waldump 都会获得报告。统计计算的 LSN 范围信息作为标题添加到显示的报告中。此实现来自 Álvaro Herrera 和我本人的建议,起因是此补丁的作者抱怨 --stats 和 --follow 组合使用时原本不太有用。如文档所述,Windows 上不支持此功能,但可以通过捕获与 Ctrl+C 关联的终端事件来实现支持(这可能需要更集中的实现,因为其他工具也可以从公共 API 中受益)。Author: Bharath Rupireddy Discussion: https://postgr.es/m/CALj2ACUUx3PcK2z9h0_m7vehreZAUbcmOky9WSEpe8TofhV=PQ@mail.gmail.com https://git.postgresql.org/pg/commitdiff/f2c52eeba919a1b191f60445001371bd7c53aaa9
改进各种 GUC 的描述。此提交修复了一些 GUC 描述中的不一致之处,同时使其措辞在所依赖的单位方面更加通用。对于大多数情况,这移除了 "N seconds" 或 "N bytes" 等术语的使用,这些术语可能不容易适用于这些字符串翻译的所有语言(根据我自己的经验,这在法语和英语中有效,在日语中则不太适用)。根据以下列出的作者之间的讨论。Author: Justin Pryzby, Michael Paquier Discussion: https://postgr.es/m/20211129030833.GJ17618@telsasoft.com https://git.postgresql.org/pg/commitdiff/03774f9bb304d49fae3379806115aaa5d1fafea2
修复 REINDEX CONCURRENTLY 导致的 toast 索引损坏。在 toast 索引或 toast 关系上运行 REINDEX CONCURRENTLY 可能会损坏重建的目标索引,因为并行运行的后端在操作 toast 值时会在其本地操作完成后直接释放 toast 关系上的锁,而不是在操作 toast 值的事务提交后才释放锁。这里的修复很简单:我们现在在保存或删除 toast 值时在 toast 关系上持有 ROW EXCLUSIVE 锁直到处理它们的事务提交,这样并行执行的并发重建索引就能够等待任何活动并看到插入(或删除)的新行。添加了一个隔离测试来检查这里修复的情况,设计上有些巧妙,因为它依赖 allow_system_table_mods 将 toast 表及其索引重命名为固定名称。这样就可以直接重建索引,而不依赖底层关系的 OID。请注意,这也不能使用 DO 块,因为 REINDEX CONCURRENTLY 不能在事务块中运行。测试回溯移植到 13,在那里由于 c4a7a39,可以在测试套件中使用 allow_system_table_mods。Reported-by: Alexey Ermakov Analyzed-by: Andres Freund, Noah Misch Author: Michael Paquier Reviewed-by: Nathan Bossart Discussion: https://postgr.es/m/17268-d2fb426e0895abd4@postgresql.org Backpatch-through: 12 https://git.postgresql.org/pg/commitdiff/f99870dd867331f576a84e37438da86a866559c4
改进 CREATE/ALTER SUBSCRIPTION 的选项解析。简化代码,使调用者不再需要对 SubOpts 进行清零,SubOpts 持有已提供选项的位图以及默认/解析后的选项值。这也简化了在检查不兼容性时与命令支持的选项相关的一些检查。同时,"slot_name = NONE" 不支持的组合产生的错误被重新排序。这可能会生成与先前主要版本不同的错误,但在使用 "enabled" 和 "create\slot" 选项的不正确值时,用户必须逐一处理所有这些错误才能得到正确的命令,因此最终结果命令将保持不变。Author: Peter Smith Reviewed-by: Nathan Bossart Discussion: https://postgr.es/m/CAHut+PtXHfLgLHDDJ8ZN5f5Be_37mJoxpEsRg8LNmm4XCr06Rw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/00029deaf65aad47044d9290fe80f2f68601f7ac
修复一些 {a,an} 的拼写错误。其中一个更改影响了文档,因此进行回溯移植。Author: Peter Smith Discussion: https://postgr.es/m/CAHut+Pu6+c+r3mY24VT7u+H+E_s6vMr5OdRiZ8NT3EOa-E5Lmw@mail.gmail.com Backpatch-through: 14 https://git.postgresql.org/pg/commitdiff/5d08137076fd39694188ec4625013756aab889e1
改进一些事务命令 WAL 记录的描述。此提交改进了事务 RMGR 的一些 WAL 记录描述:- 跟踪事务提交的 remote_apply。此 GUC 是用户可设置的,因此此信息对调试很有用。- 为 PREPARE TRANSACTION 添加复制来源信息,包括来源 ID、LSN 和时间戳 - 同上,用于 ROLLBACK PREPARED。这影响了 pg_waldump 或使用这些描述例程的任何内容的格式,因此不做回溯移植。Author: Masahiko Sawada, Michael Paquier Discussion: https://postgr.es/m/CAD21AoD2dJfgsdxk4_KciAZMZQoUiCvmV9sDpp8ZuKLtKCNXaA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/c8b733c4c4b0c5b7aa93553aa5b7f2c1d0bf00bf
移除 PREPARE TRANSACTION 中复制来源的断言。使用复制来源时,pg_replication_origin_xact_setup() 是设置 LSN 和时间戳以标记来源的可选选择,这些信息会被额外添加到事务提交或中止(包括 2PC 事务)的 WAL 中。PREPARE TRANSACTION 代码路径中的一个断言假定此数据应始终被设置,因此在使用复制来源但未设置来源 LSN 时会触发。添加了一些测试以更好地覆盖此类场景。提交 1eb6d65 中的疏忽。根据与 Amit Kapila 和 Masahiko Sawada 的讨论。Discussion: https://postgr.es/m/YbbBfNSvMm5nIINV@paquier.xyz Backpatch-through: 11 https://git.postgresql.org/pg/commitdiff/ece8c76192fee0b78509688325631ceabca44ff5
调整 MSVC TAP 测试的一些环境设置行为。edc2332 在 vcregress.pl 中引入了对环境变量 LZ4、TAR 和 GZIP_PROGRAM 的控制,以允许任何 TAP 测试能够使用这些命令。这使设置与 src/Makefile.global.in 更加一致,因为 Make 和 MSVC 构建使用相同的默认值。每个参数都可以在 buildenv.pl 中更改,但由于默认值在加载 buildenv.pl 之后分配,因此无法取消设置其中任何一个,使用空值对 "||=" 也不起作用。由于某些环境的 PATH 中可能没有兼容的命令(来自 MinGW 的 tar 就是一个问题),这可能会在没有绕过路径的情况下破坏测试。此提交更改了行为,使 LZ4、TAR 和 GZIP_PROGRAM 的默认值在加载 buildenv.pl 之前分配,而不是之后。这样,我们保持了与具有相同默认值的 GNU 构建相同的兼容性,并且可以取消设置其中任何值。同时,在 MSVC TAP 测试专用部分添加了关于这三个变量的一些文档。根据与 Andrew Dunstan 的讨论。Discussion: https://postgr.es/m/YbGYe483803il3X7@paquier.xyz Backpatch-through: 10 https://git.postgresql.org/pg/commitdiff/7acd01015c4a5edb253ea9468ccb71ef99cabd1a
为 pg_upgrade 添加 -N/--no-sync 选项。这是与 src/bin/ 中其他工具(pg_checksums、pg_dump、pg_rewind 和 pg_basebackup)提供的一致的选项,可用于在测试时减轻 I/O 负担。不应在生产环境中使用。所有 pg_upgrade 的回归测试已更新以使用此新选项。在 I/O 受限的环境中,通过避免刷新升级后新集群的数据目录,最多可节省几秒钟。Author: Michael Paquier Reviewed-by: Peter Eisentraut Discussion: https://postgr.es/m/YbrhzuBmBxS/DkfX@paquier.xyz https://git.postgresql.org/pg/commitdiff/3d5ffccb6df323f528cf870c26d0d0517ffe3eaa
修复 pg_receivewal TAP 测试中的拼写错误。在 d62bcc8 中引入,在该区域编码时注意到。 https://git.postgresql.org/pg/commitdiff/22592e10b41a95f841642fa16127521989177bbc
Tom Lane 推送了:
用更好的 PRNG API 和算法替换 random()、pg_erand48() 等。将 xoroshiro128** 标准化为我们的基本 PRNG 算法,消除了大量平台依赖性以及根本过时的 PRNG 代码。此外,此 API 替换将简化未来必要时再次替换算法。xoroshiro128** 比 drand48 系列慢几个百分点,但它可以生成完整的64位随机值而不仅仅是48位,而且应该更值得信赖。它可能比平台的 random() 快得多,取决于你考虑的平台;而且与 random() 不同,我们可以轻松拥有非全局状态向量。它不是密码学强度的,但它替代的函数也不是。Fabien Coelho, reviewed by Dean Rasheed, Aleksander Alekseev, and myself Discussion: https://postgr.es/m/alpine.DEB.2.22.394.2105241211230.165418@pseudo https://git.postgresql.org/pg/commitdiff/3804539e48e794781c6145c7f988f5d507418fa8
pg_global_prng_state 的可移植性修复。PGDLLIMPORT 仅适用于后端中声明的变量,不适用于来自前端代码中包含的库的变量。(这不是一个特别好的修复,但目前使用与其他地方相同的方法。)Discussion: https://postgr.es/m/E1mrWUD-000235-Hq@gemulon.postgresql.org https://git.postgresql.org/pg/commitdiff/11b500072e42c214462b973b0b05f1c68992226b
简化从 libpgcommon 和 libpgport 导出的变量声明。撤回提交 c2d1eea9e 和 11b500072 以及其他地方的类似修改,改为设置 PGDLLIMPORT 宏使其可以无条件使用。这可行是因为在前端代码中,从这些库导出的变量在定义文件或使用文件中都不需要标记;前端代码也不需要访问从核心后端导出的变量。同时,编写了关于 PGDLLIMPORT 和 PGDLLEXPORT 宏的实际文档。补丁由我编写,基于 Robert Haas 的建议。Discussion: https://postgr.es/m/1160385.1638165449@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/e04a8059a74c125a8af94acdcb7b15b92188470a
Doc: 改进物化视图中关于 ORDER BY 的文档。移除示例物化视图中令人困惑的 ORDER BY 使用。它对示例没有任何帮助,但可能鼓励人们遵循不良做法。澄清 REFRESH MATERIALIZED VIEW 关于视图排序是否保留的说明(不会保留)。Maciek Sakrejda Discussion: https://postgr.es/m/CAOtHd0D-OvrUU0C=4hX28p4BaSE1XL78BAQ0VcDaLLt8tdUzsg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/4f33af23e7e3ac30b3cb9480981c3accf401ef01
处理检查随机数源时的交叉编译。提交 16f96c74d 忽略了交叉编译的可能性,导致交叉编译在 configure 阶段失败,除非你选择了 --with-openssl。由于我们现在或多或少假设 /dev/urandom 在任何地方都可用,假设交叉编译目标也有它似乎是合理的,而不是失败。根据 Vincas Dargis 的反馈。回溯移植到引入此功能的 v14。Discussion: https://postgr.es/m/0dc14a31-acaf-8cae-0df4-a87339b22bd9@gmail.com https://git.postgresql.org/pg/commitdiff/b637101644aa84dccc7da4f30bad40452939b57a
psql: 将查询内的 "--" 注释包含在发送给服务器的内容中。psql 的词法分析器历来从收集并发送给服务器的内容中删除双横线(单行)注释。这与它对斜杠-星号注释的处理不一致,而且人们之前也抱怨过希望这些注释能被捕获在服务器日志中。然而,完全撤消这个决定似乎是太大的行为变更。特别是,查询开始之前行上的注释通常不被视为该查询的一部分。我们能做的改进是捕获明显在查询内部的注释,即在第一个非空白、非注释标记之后但在查询的结束分号或反斜杠命令之前。这是一个几乎微不足道的代码更改,只影响少数回归测试结果。(尝试对斜杠-星号注释应用相同规则很有诱惑力。但很难看出如何在不导致跨行注释产生奇怪历史行为的情况下做到这一点,特别是如果用户在星号-斜杠所在行开始新查询。鉴于没有投诉,让我们不管那种情况。)Discussion: https://postgr.es/m/CAJcOf-cAdMVr7azeYR7nWKsNp7qhORzc84rV6d7m7knG5Hrtsw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/83884682f4df96184549b91869a1cf79dafb4f94
psql: 将查询之间的 "--" 注释作为单独的历史记录条目。如果我们尚未为新查询收集任何非空白、非注释标记,在读取另一行之前将当前输入行刷新到历史记录。这使 psql 的历史记录行为与"仅包含注释的行通常不被视为下一个查询的一部分"这一观点保持一致。psql 的提示行为也与此观点一致,因为在你输入既非空白也非 "--" 注释的内容之前,它不会更改提示符。Greg Nancarrow,我稍微做了简化 Discussion: https://postgr.es/m/CAJcOf-cAdMVr7azeYR7nWKsNp7qhORzc84rV6d7m7knG5Hrtsw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/c2f654930e9f8119b9ed12caab6192d0aafe5ebd
psql: 默认将注释开始设置初始化为有用的值。Readline 的 meta-# 命令应该在当前行的开头插入一个注释标记。然而,默认标记是 "#",对 SQL 来说完全没用。改为设置 "-- "。(此设置仍然可以在 ~/.inputrc 文件中覆盖,因此此更改不会影响已经采取措施使该命令有用的人。)Discussion: https://postgr.es/m/CAJcOf-cAdMVr7azeYR7nWKsNp7qhORzc84rV6d7m7knG5Hrtsw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/3d858af07ee67efda3778bdd655852afabf4a125
避免在大规模 REASSIGN OWNED BY 操作期间泄漏内存。各种 ALTER OWNER 例程倾向于在 CurrentMemoryContext 中泄漏内存。当它们每个命令只调用一次时,这不是问题;但在这种可能涉及许多对象的用法中,它可能造成严重的内存泄漏。通过在短生命周期的上下文中运行每次调用来修复。(DROP OWNED BY 可能有类似的问题,只是你可能在注意到之前就耗尽了锁表空间。REASSIGN 值得修复,因为对于大多数非表对象类型,它不会获取任何锁。)回溯移植到所有支持的分支。不幸的是,在旧分支中,这只能有限地帮助,因为在提交 3aafc030a 之前,sinval 消息队列在这种用法中膨胀很大,消耗的内存或多或少与实际泄漏的内存相当。不过,这显然是一个有简单修复的泄漏,所以我们不妨修复它。Justin Pryzby, per report from Guillaume Lelarge Discussion: https://postgr.es/m/CAECtzeW2DAoioEGBRjR=CzHP6TdL=yosGku8qZxfX9hhtrBB0Q@mail.gmail.com https://git.postgresql.org/pg/commitdiff/babe545caeba4c62feb3030940d93432721eea57
为 rl_variable_bind() 添加 configure 探测。一些极其古老的 readline 库缺少此函数,导致提交 3d858af07 失败。根据构建农场(via Michael Paquier)。Discussion: https://postgr.es/m/E1msTLm-0007Cm-Ri@gemulon.postgresql.org https://git.postgresql.org/pg/commitdiff/a7da41981021575e2359683d994eec6c9d246321
在 Windows 上,在后端关闭期间显式关闭客户端套接字。事实证明,这对于防止 Winsock 丢弃尚未发送的数据(如解释进程终止原因的错误消息)是必要的。内核执行的隐式关闭与显式关闭行为不同确实很奇怪,但很难与实验结果争辩。由 Alexander Lakhin 和 Lars Kanis 独立提交(注释由我编写)。回溯移植到所有支持的分支。Discussion: https://postgr.es/m/90b34057-4176-7bb0-0dbb-9822a5f6425b@greiz-reinsdorf.de Discussion: https://postgr.es/m/16678-253e48d34dc0c376@postgresql.org https://git.postgresql.org/pg/commitdiff/6051857fc953a62db318329c4ceec5f9668fd42a
重构 pg_dump 对要转储的对象组件的跟踪。将 DumpableObject.dump 位掩码字段拆分为单独的位掩码,分别跟踪请求转储的组件(在现有的 "dump" 字段中)和特定对象存在的组件(在新的 "components" 字段中)。这消除了一些涉及设置位然后再清除位的笨拙且容易出错的逻辑。更重要的是,它恢复了最初设计的行为,即 pg_dump 的二级数据收集查询不应对我们不感兴趣转储的对象执行。当转储标志变成位掩码后,该优化就被破坏了,因为无关的位在许多情况下倾向于保持设置状态。由于 "components" 字段从最小的位集开始并根据需要添加,将其与 "dump" 进行 AND 运算可提供我们实际需要转储内容的可靠指示器,而不必复杂化管理请求位的逻辑。例如,当扩展中有许多函数时,这在所需查询数量上有显著差异。Discussion: https://postgr.es/m/2273648.1634764485@sss.pgh.pa.us Discussion: https://postgr.es/m/7d7eb6128f40401d81b3b7a898b6b4de@W2012-02.nidsa.loc https://git.postgresql.org/pg/commitdiff/5209c0ba0bfd16f23e38f707e487c0626e70564c
重新考虑 pg_dump 对对象 ACL 的处理。丢弃大部分现有逻辑,因为由于执行昂贵的子查询来收集我们可能根本不感兴趣转储的 ACL 数据,它非常低效。将初始按对象类型查询中的 ACL 处理减少为仅收集目录 ACL 字段,恢复到原来的样子。在单次扫描该目录中单独获取 pg_init_privs 数据,并在客户端执行合并计算。移除用于 9.6 之前源服务器的单独代码路径;没有好的理由将它们与恰好具有空 pg_init_privs 的新版本服务器区别对待。Discussion: https://postgr.es/m/2273648.1634764485@sss.pgh.pa.us Discussion: https://postgr.es/m/7d7eb6128f40401d81b3b7a898b6b4de@W2012-02.nidsa.loc https://git.postgresql.org/pg/commitdiff/0c9d84427f441602425b0e18be5cfe751d1d8ebe
推迟 pg_dump 中不安全的服务器端函数调用。避免在我们对相关表持有锁之前调用 pg_get_partkeydef()、pg_get_expr(relpartbound) 和 regtypeout。如果有任何并发 DROP TABLE 命令正在运行——包括删除其他会话的临时表——现有代码存在严重的失败风险。可以说这是一个应该回溯移植的 bug 修复,但它有一定侵入性,而且我们对此类失败的投诉并不多。现在先只放入 HEAD。Discussion: https://postgr.es/m/2273648.1634764485@sss.pgh.pa.us Discussion: https://postgr.es/m/7d7eb6128f40401d81b3b7a898b6b4de@W2012-02.nidsa.loc https://git.postgresql.org/pg/commitdiff/e3fcbbd623b9ccc16cdbda374654d91a4727d173
避免 pg_dump 性能关键路径中的逐对象查询。不再针对每个要转储的表发出二级数据收集查询,而是只发出一个查询,通过 WHERE 子句将其限制为仅应用于我们打算转储的表。索引、约束和触发器也是如此。这大大减少了转储包含许多表的数据库所需的查询数量。列出许多目标 OID 的 WHERE 子句看起来可能效率不高,但至少在最近的服务器版本上,这提供了非常显著的加速。(原则上,其他对象类型(如函数)也可以这样做;但这需要对 pg_dump 进行重大重构,因此它们将在后续补丁中以不同方式处理。)新的 WHERE 子句依赖于 unnest() 函数,该函数仅在 8.4 及以上版本中存在。我们可以为更旧的服务器以不同方式实现它们,但目前正在进行的讨论可能会导致取消对 9.2 之前服务器的 pg_dump 支持,所以那似乎是浪费工作。目前,只是将服务器版本检查提高到要求 >= 8.4,而不停下来移除因此变成死代码的代码。我们很快会清理这种情况。补丁由我编写,基于 Andres Freund 的想法。Discussion: https://postgr.es/m/7d7eb6128f40401d81b3b7a898b6b4de@W2012-02.nidsa.loc https://git.postgresql.org/pg/commitdiff/9895961529ef8ff3fc12b39229f9a93e08bca7b7
在 pg_dump 中对重复的逐对象查询使用 PREPARE/EXECUTE。对于函数等对象,pg_dump 对每个要转储的对象发出相同的二级数据收集查询。这不容易重构以避免重复查询,但我们可以 PREPARE 这些查询以减少规划成本。此补丁将此想法应用于函数、聚合、运算符和数据类型。虽然可以进一步扩展,但其余类型的对象不太可能在典型数据库中出现足够多次以值得担忧。此外,如果没有至少几十个对象来应用预备查询,执行 PREPARE 可能是净损失。Discussion: https://postgr.es/m/7d7eb6128f40401d81b3b7a898b6b4de@W2012-02.nidsa.loc https://git.postgresql.org/pg/commitdiff/be85727a3df743a1f7e93b41dd7ac2b667e8ae04
在调度并行转储时考虑 TOAST 数据。在并行模式下,pg_dump 试图将表数据转储作业按最大的表优先排序。然而,它只查询 pg_class.relpages 值来确定表大小。这忽略了 TOAST 数据,因此在一些大型表主要是 TOAST 数据而其他表很少的情况下,我们可能会做出糟糕的调度决策。修复方法是也加入 TOAST 表的 relpages 值。此补丁还修复了一个潜在的整数溢出问题,该问题可能在 off_t 仅为32位宽的机器上导致调度不良。这样的平台在实际使用中可能已经绝迹,但我们名义上仍然支持它们,所以予以修复。根据 Hans Buschmann 的反馈。Discussion: https://postgr.es/m/7d7eb6128f40401d81b3b7a898b6b4de@W2012-02.nidsa.loc https://git.postgresql.org/pg/commitdiff/65aaed22a849c0763f38f81338a1cad04ffc0e2c
在 Windows 上,关闭客户端套接字时也调用 shutdown()。进一步实验表明,提交 6051857fc 在使用(某些版本的?)OpenSSL 时不够充分。原因不明,但调用 shutdown(socket, SD_SEND) 改善了情况。根据 Andrew Dunstan 和 Alexander Lakhin 的测试。与之前一样回溯移植。Discussion: https://postgr.es/m/af5e0bf3-6a61-bb97-6cba-061ddf22ff6b@dunslane.net https://git.postgresql.org/pg/commitdiff/ed52c3707bcf8858defb0d9de4b55f5c7f18fed7
Doc: 改进 xfunc-c-type-table。列出 numeric 和 timestamptz 类型,它们似乎从未被包含在此处。恢复 bigint,它在 v12 中无疑是被意外删除的。修复一些错误或至少是过时的用法(现在没有人再将 float 参数声明为 "float8*",即使底层可能是这样)。重新按字母顺序排列。移除这似乎是完整的内置类型列表的声明。根据 Oskar Stenberg 的提问。Discussion: https://postgr.es/m/HE1PR03MB2971DE2527ECE1E99D6C19A8F96E9@HE1PR03MB2971.eurprd03.prod.outlook.com https://git.postgresql.org/pg/commitdiff/6f0e6ab04de5f52e4e0872d3ace2bb6a35e8b0b1
为"内部使用"类型创建新的类型类别。历史上我们将类型 "char" 放入 S(字符串)typcategory,尽管称其为字符串有些牵强,因为它只能存储一个字节。(在我们的实际使用中,它更像是枚举。)鉴于 parse_func.c 和 parse_coerce.c 对 TYPCATEGORY_STRING 的特殊启发式规则,这个选择现在似乎是错误的:让 "char" 具有那些优先转换行为不是个好主意。更糟糕的是,最近的补丁为 pg_node_tree 等特殊用途类型分配了 typcategory S,这意味着它们也获得了基于可以容纳任意文本假设而设计的优先转换处理。为修复此问题,为内部使用类型发明一个新类别 TYPCATEGORY_INTERNAL,并将其分配给所有这些类型。由于缺乏更好的想法,我使用了代码 'Z'('I' 已被占用)。此更改破坏了 psql/describe.c 中的一个查询,现在需要在与未修饰的文字连接之前将目录 "char" 列显式转换为 text。此外,contrib/citext 中的一个测试用例现在需要显式转换来将 citext 转换为 "char"。由于此更改的目的是不让 "char" 成为一个出人意料的可用转换目标,这些破坏似乎是可以接受的。根据 Ian Campbell 的报告。Discussion: https://postgr.es/m/2216388.1638480141@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/07eee5a0dc642d26f44d65c4e6263304208e8583
实现 poly_distance()。geo_ops.c 包含六个只是抛出 ERRCODE_FEATURE_NOT_SUPPORTED 的存根函数。这种状态已经持续了二十多年,显然对填充这些存根没有太多兴趣。然而,我不太愿意删除 poly_distance(),因为每种其他几何类型都支持到同类型另一对象的距离函数。我们可以通过借鉴 poly_overlap() 和 path_distance() 轻松添加此功能。此测试用例可能会显示一些数值不稳定性,但如果是这样,构建农场应该会暴露它。顺便改进了文档,试图解释为什么多边形首先与闭合路径不同。Discussion: https://postgr.es/m/3426566.1638832718@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/c5c192d7bdfa78f19e735610488b1cc5ad6e41cc
Doc: 从文档中移除未实现的几何运算符。在提交 791090bd7 中,我努力为 pg_operator 中列出的所有几何运算符填充文档。然而,现在看来至少一些遗漏可能是有意的,因为这些运算符条目指向未实现的存根函数。再次从文档中移除它们。(在 HEAD 中,poly_distance 保留,因为 c5c192d7b 刚刚为它添加了实现。)根据 Anton Voloshin 的反馈。Discussion: https://postgr.es/m/3426566.1638832718@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/922b23c13be075595c2abc67736b214cb90f84d9
移除未实现/未文档化的几何函数和运算符。二十多年来没有人填充这些存根,所以是时候放弃它们可能随时被实现的想法了。相关的 pg_operator 和 pg_proc 条目只是令人困惑的空间浪费。根据 Anton Voloshin 的反馈。Discussion: https://postgr.es/m/3426566.1638832718@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/189699dd3680d85c74c3886b33d9a9f83301defd
修复 logtape.c 中 right_offset() 的数据类型混淆。这只有在 (a) long 比 int 宽,且 (b) 空闲块堆超过 UINT_MAX 条目时才会有影响,这似乎非常不可能。不过,这是一个理论上的 bug,因此回溯移植到引入该拼写错误的 v13(在提交 c02fdc922 中)。顺便让 swap_nodes() 使用一致的数据类型。Ma Liangzhu Discussion: https://postgr.es/m/17336-fc4e522d26a750fd@postgresql.org https://git.postgresql.org/pg/commitdiff/2de3c1015cb2556af501c630b1768a20f111fe95
改进 binaryheap.c 和 logtape.c 中的上移/下移代码。借鉴 tuplesort.c 中长期使用的逻辑:不再物理交换两个堆条目中的数据,而是将正在上移或下移的值保存在局部变量中,只根据需要移动其他值。这使代码更短也更快。目前的调用者是否真的足够时间关键以至于能注意到还不清楚,但我们不妨在各处以相同方式编写堆维护代码。Ma Liangzhu and Tom Lane Discussion: https://postgr.es/m/17336-fc4e522d26a750fd@postgresql.org https://git.postgresql.org/pg/commitdiff/a2ff18e89ff8f29677084bffd1e3de9ca6cd7224
移除 pg_dump/pg_dumpall 对从 9.2 之前服务器转储的支持。根据讨论,我们将旧服务器的支持限制在那些仍然可以在现代平台上轻松构建的分支,截至目前是 9.2 及以上。移除了超过一千行专用于从更旧服务器版本转储的代码。(与此类更改的先例一样,我们没有移除 pg_restore 读取较旧归档文件的能力...尽管现在如何测试这一点值得怀疑。)这清理了提交 989596152 留下的一些死代码。Discussion: https://postgr.es/m/2923349.1634942313@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/30e7c175b81d53c0f60f6ad12d1913a6d7d77008
移除 pg_upgrade 对从 9.2 之前服务器升级的支持。根据讨论,我们将旧服务器的支持限制在那些仍然可以在现代平台上轻松构建的分支,截至目前是 9.2 及以上。Discussion: https://postgr.es/m/2923349.1634942313@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/e469f0aaf3c586c8390bd65923f97d4b1683cd9f
移除 pg_dump 的 --no-synchronized-snapshots 开关。使用此开关有合理理由的服务器版本现已全部停止支持。保留它只会让粗心的 DBA 搬起石头砸自己的脚。Discussion: https://postgr.es/m/556122.1639520324@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/2a712066d0587f65fcecd44e884dc6a09958dbdd
在 lookup_rowtype_tupdesc 等之后始终使用 ReleaseTupleDesc。lookup_rowtype_tupdesc 的 API 规范之前说你可以使用 ReleaseTupleDesc 或 DecrTupleDescRefCount。然而,后者要求调用者确定返回的 tupdesc 是引用计数的。我现在不记得在编写此规范时这是否始终为真,但自从我们为并行工作进程引入共享记录类型缓存以来,这肯定不总是为真。这意味着使用 DecrTupleDescRefCount 的调用者依赖于它们可能不应该依赖的 typcache 行为细节。因此,更改 API 规范为必须调用 ReleaseTupleDesc,并修复未这样做的六个调用者。据我所知,这只是面向未来的改进,这里没有活跃的 bug。所以不做回溯移植。根据 Chapman Flack 的意见。Discussion: https://postgr.es/m/61B901A4.1050808@anastigmatix.net https://git.postgresql.org/pg/commitdiff/bbc227e951ecc59a29205be4952a623e7d1dd534
清理 pg_dump 和 pg_upgrade 中更多的刚死代码。如 Justin Pryzby 指出的,我在 30e7c175b 和 e469f0aaf 中遗漏了一些东西。Discussion: https://postgr.es/m/2923349.1634942313@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/c49d926833fa6a987e3f9a66027f4a01d7a008be
移除 psql 对 9.2 之前服务器版本的支持。根据讨论,我们将旧服务器的支持限制在那些仍然可以在现代平台上轻松构建的分支,截至目前是 9.2 及以上。除了移除基于服务器 >= 9.2 假设的死代码外,我调整了不支持版本的启动警告,以对过旧的服务器和过新的服务器都发出投诉。"某些 psql 功能可能无法工作"的警告恰好适用于两种情况。Discussion: https://postgr.es/m/2923349.1634942313@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/cf0cab868aa4758b7eec5f9412f2ec74acda7f45
确保转换为 typmod -1 时生成 RelabelType。修复提交 5c056b0c2 更改的代码,使我们在转换为未指定的 typmod 时始终生成 RelabelType,而不是其他东西。否则规划器优化可能不会发生。我们似乎遗漏了这一点,因为先前的实验是在 numeric 类型上进行的:解析器不理想地生成了对 numeric() 长度强制函数的调用,但随后 numeric_support() 将其优化为 RelabelType,因此一切看起来都正常。对于具有未优化长度强制函数的类型(如 bpchar),它的行为不正确。根据 John Naylor 的报告。回溯移植到所有支持的分支,如先前的补丁最终所做的那样。不幸的是,这不再包括 9.6...我们真的不应该把这种类型的更改放入即将 EOL 的分支。Discussion: https://postgr.es/m/CAFBsxsEfbFHEkouc+FSj+3K1sHipLPbEC67L0SAe-9-da8QtYg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/9c356f4b2dd8f8ff49757287e387ab1d023e4449
在单独的测试脚本中修复 public schema 的权限。在提交 b073c3ccd 之后,需要向 PUBLIC 授予 public schema 的 create 权限才能使许多核心回归测试脚本通过。该提交通过在首先运行的表空间测试中添加 GRANT 来快速解决。然而,对于单机复制测试来说,这是有问题的。在这种设置上运行回归测试最省事的方法是跳过表空间测试,而这不再可行。为修复,让我们发明一个单独的 "test_setup" 脚本先运行,并将 GRANT 放在那里。撤回 b073c3ccd 对 tablespace.source 文件的更改。将来,尝试通过让 test_setup 创建广泛使用的对象来减少各测试脚本之间的耦合可能会很好,目标是大多数脚本只需在运行 test_setup 后即可运行。这需要一些努力,所以此提交只解决了我当前的痛点。Discussion: https://postgr.es/m/1363170.1639763559@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/944dc45d1b633c4d612cdff9f15153ed609eaa35
移除 pg_dump 中更多的死代码。Coverity 报告 dumpFunc() 和 buildACLCommands() 的部分现在不可达,确实如此。移除它们。顺便使 dumpFunc 对 protrftypes 的处理不那么无谓地不同于其他字段。 https://git.postgresql.org/pg/commitdiff/b1c169caf0678a82cf26b5656e01399f6153456b
Peter Geoghegan 推送了:
vacuumlazy.c: 将 dead_tuples 重命名为 dead_items。提交 8523492d 简化了一个项目被 VACUUM 视为"死亡"的含义:收集在内存中的 TID(为索引清理准备)必须始终来自堆页面中的 LP_DEAD 存根行指针,这些指针是在裁剪后发现的。这正式确立了索引清理(和堆清理)是可选过程的概念。与裁剪不同,它们可以无限期推迟,而不会有违反基本不变量的风险。例如,留下 LP_DEAD 项目显然不会增加事务 ID 回卷的风险。没有事务 ID 就不可能有事务 ID 回卷。重命名任何引用 DEAD 元组(有存储的元组)的内容强化了这一切。vacuumlazy.c 之外的代码继续模糊 dead/deleted 元组和 LP_DEAD 项目之间的区别。这是必要的,因为自动清理调度仍然主要由"死亡项目/元组"统计信息驱动。将来我们可能会发现用更复杂的东西替换此模型是有用的,作为教自动清理执行更频繁的清理以针对恰好更容易因版本变更而膨胀的单个索引的一步。顺便简化了一些处理 VACUUM 的 dead_items 数组的函数签名。Author: Peter Geoghegan pg@bowt.ie Reviewed-By: Masahiko Sawada sawada.mshk@gmail.com Discussion: https://postgr.es/m/CAH2-WzktGBg4si6DEdmq3q6SoXSDqNi6MtmB8CmmTmvhsxDTLA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/4f8d9d1217956798e761491d236af576b27f5e12
vacuumlazy.c: 修复剩余的 "dead tuple" 引用。提交 4f8d9d12 中的疏忽。Reported-By: Masahiko Sawada sawada.mshk@gmail.com Discussion: https://postgr.es/m/CAD21AoDm38Em0bvRqeQKr4HPvOj65Y8cUgCP4idMk39iaLrxyw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/4bdfe6855901a4104dbdac2be53d465b626e244d
标准化清理锁术语。术语"超级排他锁"是"缓冲区清理锁"的同义词,最早出现在 nbtree 中多年前。通过一致使用清理锁术语来标准化。这完成了提交 276db875 开始的工作。没有好的理由有两个术语。但有一个好的理由只有一个:避免关于 VACUUM 在索引 AM 中在 ambulkdelete 调用期间获取完整清理锁(而不仅仅是普通排他锁)的原因的混淆。这与保护物理索引数据结构本身无关。它是实现一个锁定协议所需的,该协议确保指向堆/表结构的 TID 不会在安全之前被 VACUUM 标记为可回收(这在某种程度上类似于 VACUUM 在其第一次堆遍历期间使用清理锁的方式)。请注意,索引 AM 不一定必须实现此锁定协议——一些索引 AM 使用 MVCC 快照作为防止不安全 TID 回收的唯一互锁。顺便更新了 nbtree README。清晰地将上述索引清理锁定协议的讨论与提交 2ed5b87f 添加的"丢弃叶页面 pin"优化的讨论分开。我们现在通过描述单个索引扫描如何安全地选择退出应用标准锁定协议(从而可以避免阻塞 VACUUM 的进度)来构建后者的讨论。同时记录了为什么该优化在 nbtree 仅索引扫描期间不安全应用。Author: Peter Geoghegan pg@bowt.ie Discussion: https://postgr.es/m/CAH2-WzngHgQa92tz6NQihf4nxJwRzCV36yMJO_i8dS+2mgEVKw@mail.gmail.com Discussion: https://postgr.es/m/CAH2-WzkHPgsBBvGWjz=8PjNhDefy7XRkDKiT5NxMs-n5ZCf2dA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/bcf60585e6e0e95f0b9e5d64c7a6edca99ec6e86
Amit Kapila 推送了:
添加显示订阅工作进程统计信息的视图。此提交添加了一个新的系统视图 pg_stat_subscription_workers,显示在应用逻辑复制更改以及执行初始表同步期间发生的任何错误的信息。当删除对应的订阅时,订阅统计条目也会被删除。它还添加了一个 SQL 函数 pg_stat_reset_subscription_worker() 来重置单个订阅错误。此视图的内容可以被即将到来的补丁使用,该补丁跳过与订阅者上现有数据冲突的特定事务。此视图将来可以扩展以跟踪其他与事务相关的统计信息,如订阅工作进程的已提交/已中止事务数。Author: Masahiko Sawada Reviewed-by: Greg Nancarrow, Hou Zhijie, Tang Haiying, Vignesh C, Dilip Kumar, Takamichi Osumi, Amit Kapila Discussion: https://postgr.es/m/CAD21AoDeScrsHhLyEPYqN3sydg6PxAPVBboK=30xJfUVihNZDA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/8d74fc96db5fd547e077bf9bf4c3b67f821d71cd
Doc: 添加逻辑复制期间"挂载分区"的限制说明。将一个表挂载到通过设置 publish_via_partition_root 为 true 的发布发布的分区树的根时,不会导致该表的现有内容被复制。这是因为订阅者不会考虑复制新挂载的分区,因为根表已经处于 'ready' 状态。此行为在 PG13(83fd4532a7)中引入,其中我们允许通过祖先发布分区更改。我们可以考虑在将来修复此限制。Author: Amit Langote Reviewed-by: Hou Zhijie, Amit Kapila Backpatch-through: 13 Discussion: https://postgr.es/m/OS0PR01MB5716E97F00732B52DC2BBC2594989@OS0PR01MB5716.jpnprd01.prod.outlook.com https://git.postgresql.org/pg/commitdiff/eb7828f54a44843a64a23d0891d7eb6018c0749e
修复由提交 8d74fc96db 导致的回归测试失败。测试没有考虑到与应用更改无关的错误(例如"具有 OID %d 的复制来源已处于活动状态...")可能在表同步工作进程开始复制更改之前发生。为使测试更健壮,我们改为检查预期的错误和错误来源(将是 tablesync 或 apply worker)。顺便移除了 Create Subscription 命令中无害的 "streaming = off" 选项,因为那无论如何是默认值。根据构建农场成员 sidewinder。Author: Masahiko Sawada Reviewed-by: Hou Zhijie, Vignesh C, Amit Kapila Discussion: https://postgr.es/m/CAD21AoDeScrsHhLyEPYqN3sydg6PxAPVBboK=30xJfUVihNZDA@mail.gmail.com Discussion: https://postgr.es/m/E1mrtvV-0002Gz-73@gemulon.postgresql.org https://git.postgresql.org/pg/commitdiff/41e66fee051619ab84828814554f73556a958850
去除 pg_publication_tables 视图的重复结果。在同时包含子表和父表且以 publish_via_partition_root 为 false 发布的发布中,我们显示了子表的重复值,这不是用户所期望的。我们决定不回溯移植此修复,因为没有用户对此投诉,而且它似乎不是一个关键问题。Author: Hou Zhijie Reviewed-by: Bharath Rupireddy, Amit Langote, Amit Kapila Discussion: https://postgr.es/m/OS0PR01MB5716E97F00732B52DC2BBC2594989@OS0PR01MB5716.jpnprd01.prod.outlook.com https://git.postgresql.org/pg/commitdiff/a61bff2bf479cfebda18a1655323eec1b19370de
修复 ALL TABLES IN SCHEMA 发布的所有权更改。确保 ALL TABLES IN SCHEMA 发布的新所有者必须是超级用户。这在 CREATE PUBLICATION 期间已经确保。Author: Vignesh C Reviewed-by: Nathan Bossart, Greg Nancarrow, Michael Paquier, Haiying Tang Discussion: https://postgr.es/m/CALDaNm0E5U-RqxFuFrkZrQeG7ae5trGa=xs=iRtPPHULtT4zOw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/1a2aaeb0db1bccd97140d479c4247127f6cb9378
修复 ROLLBACK PREPARED 操作解码期间的来源时间戳。这是因为我们向 ReorderBufferFinishPrepared() 传递了不正确的参数。Author: Masahiko Sawada Reviewed-by: Vignesh C Backpatch-through: 14 Discussion: https://postgr.es/m/CAD21AoBqhUqgDZUhUVnnwKRubPDNJ6m6fJDPgok3E5cWJLL+pA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/e464cb7af317e216fef9bfe19a7c4df542817012
修复子表数据的重复发布。在同时包含子表和父表且以 publish_via_partition_root 为 true 发布的发布中,我们发布了子表的数据两次。这是因为订阅者将使用父表和子表来启动同步,因为它在初始表列表中将两者作为单独的表获取。确保 pg_publication_tables 在此类情况下仅返回父表。Author: Hou Zhijie Reviewed-by: Greg Nancarrow, Amit Langote, Vignesh C, Amit Kapila Backpatch-through: 13 Discussion: https://postgr.es/m/OS0PR01MB57167F45D481F78CDC5986F794B99@OS0PR01MB5716.jpnprd01.prod.outlook.com https://git.postgresql.org/pg/commitdiff/5e97905a2c764d4ca36f5c6cccd0ebbf157b9df4
改进并行清理实现。以前,在并行清理中,我们仅为并行索引清理安全的索引分配 IndexBulkDeleteResult 的共享内存区域,并在共享内存区域中使用 null 位图来访问它们。这个逻辑过于复杂,仅节省了每个索引几个位的微小收益。在此提交中,我们为 LVParallelIndStats 的数组分配了专用共享内存区域,包括并行安全标志、索引清理状态和 IndexBulkDeleteResult。每个索引都有一个数组元素,即使是那些并行索引清理不安全或不值得的索引。此提交通过移除所有与位图相关的代码使代码更清晰。同时,在并行索引清理后添加了每个索引清理状态的检查,以确保所有索引都已被处理。最后,为一致性将并行清理函数重命名为 parallel_vacuum_*。Author: Masahiko Sawada, based on suggestions by Andres Freund Reviewed-by: Hou Zhijie, Amit Kapila Discussion: https://www.postgresql.org/message-id/20211030212101.ae3qcouatwmy7tbr%40alap3.anarazel.de https://git.postgresql.org/pg/commitdiff/22bd3cbe0c284758d7174321f5596763095cdd55
Daniel Gustafsson 推送了:
扩展 configure_test_server_for_ssl 以添加扩展。为了能够使用 SSL 连接测试扩展,允许 configure_test_server_for_ssl 创建作为数组传入的任何扩展。每个扩展在所有测试数据库中创建。Reviewed-by: Tom Lane tgl@sss.pgh.pa.us Reviewed-by: Andrew Dunstan andrew@dunslane.net Reviewed-by: Dagfinn Ilmari Mannsåker ilmari@ilmari.org Discussion: https://postgr.es/m/E23F9811-0C77-45DA-912F-D809AB140741@yesql.se https://git.postgresql.org/pg/commitdiff/879fc1a579cc2e2e1dbb79686668b4de2071ab83
为 contrib/sslinfo 添加 TAP 测试。这将 sslinfo 扩展的基本覆盖添加到 SSL 测试工具中。通过与 pg_stat_ssl 比较来验证输出,以在底层证书稍有更改时提供一定程度的测试稳定性。添加了新的证书以提供要测试的扩展。Reviewed-by: Tom Lane tgl@sss.pgh.pa.us Reviewed-by: Andrew Dunstan andrew@dunslane.net Reviewed-by: Dagfinn Ilmari Mannsåker ilmari@ilmari.org Discussion: https://postgr.es/m/E23F9811-0C77-45DA-912F-D809AB140741@yesql.se https://git.postgresql.org/pg/commitdiff/ae81776a23f78babc9707e22f95dea15aa2dbcd2
在 SSL 测试期间使用测试特定的临时路径存放密钥。SSL 和 SCRAM TAP 测试套件都使用提供的测试密钥的临时副本以确保正确的权限。但这些是使用临时文件名而非真正的临时文件夹复制到源码树内的。通过使用 PostgreSQL::Test::Utils 提供的 tmp_check 来修复。由 Tom Lane 在审查附近 sslinfo TAP 测试补丁时发现。Reviewed-by: Tom Lane tgl@sss.pgh.pa.us Discussion: https://postgr.es/m/599244.1638041239@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/c113d8ad50d62bfcc16bbd5ceec91122e0046ede
从通用变量中移除 PF_USED_FOR_ASSERTS_ONLY。postgres_fdw.c 中 process_pending_requests 中的 fsstate 在 8998e3cafa2 中作为仅用于断言的变量添加,1ec7fca8592 在断言之外使用了该变量。lsyscache.c 中 get_index_column_opclass 中的 rd_index 在 2a6368343ff 中引入,然后在随后的修复提交 7e041603904 中立即使用。这从上述变量中移除了 PG_USED_FOR_ASSERTS_ONLY 变量装饰。Reviewed-by: Greg Nancarrow gregn4422@gmail.com Discussion: https://postgr.es/m/F959106C-0F21-43A5-B2AE-D007D51ACBEE@yesql.se https://git.postgresql.org/pg/commitdiff/ac0db34e0e5c7ee6f8b5c33c264de3e671fbd4f7
在 MSVC 中禁用未使用变量警告 C4101。C4101 未使用变量警告无法用 PG_USED_FOR_ASSERTS_ONLY 单独抑制,因此对仅在断言中读写/写入的定义变量会导致误报警告。在找到像 gcc 和 clang 那样的每变量抑制满意解决方案之前,禁用该警告。Discussion: https://postgr.es/m/CAJcOf-c+KniGAp31pn8TC=9a-WHXpkX-3+8-2BkaCsZchhu=8w@mail.gmail.com https://git.postgresql.org/pg/commitdiff/e7122548a3f754060db1767582148b3559fe8d43
扩展私钥 stat 检查的错误处理。如果私钥的 stat 操作失败,代码假设是由于 ENOENT,但实际可能不是。通过在非 ENOENT 错误时打印不同的错误消息来扩展检查,以便更容易调试。根据 Tom Lane 的建议,由于构建农场中 fairywren 机器的问题。Discussion: https://postgr.es/m/1632478.1638305700@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/538724fc36e05339ea3734f1b886a67398fce71a
从注释中移除 TimeLineID 更新的提及。提交 4a92a1c3d 从 RecoveryInProgress 中移除了 TimeLineID 更新,相应更新注释。Author: Amul Sul sulamul@gmail.com Discussion: https://postgr.es/m/CAAJ_b96wyzs8N45jc-kYd-bTE02hRWQieLZRpsUtNbhap7_PuQ@mail.gmail.com https://git.postgresql.org/pg/commitdiff/018b800245c5d4db30d204fa42fada05a64eb287
修复证书路径以使用 perl2host。提交 c113d8ad50 将证书复制移到测试期间的临时路径中,而不是使用源代码树。这在 msys 上破坏了测试,因为绝对路径没有针对 msys 平台进行调整。确保在复制和传递连接字符串之前使用 perl2host 转换路径。同时使所有测试套件中的证书复制错误处理保持一致。Discussion: https://postgr.es/m/YacT3tm97xziSUFw@paquier.xyz https://git.postgresql.org/pg/commitdiff/c3b34a0ff4a00d00d6ea364c85201e155ca7ef6b
修复 Windows 上连接字符串中的路径分隔符。提交 c113d8ad5 中生成的临时路径不能在 Windows 上直接传入连接字符串,因为路径分隔反斜杠会被视为转义字符。通过将反斜杠转换为斜杠来修复,与其他测试中类似的路径用例相同。Reported-by: Andres Freund andres@anarazel.de Discussion: https://postgr.es/m/20211202195130.e7pprpsx4ell22sp@alap3.anarazel.de https://git.postgresql.org/pg/commitdiff/49422ad0cc88c91a38522b2a7b222c2f2c939f82
Doc: 修复 CRL 参数的误导性措辞。ssl_crl_file 和 ssl_crl_dir 都用于客户端证书吊销,而非服务器证书。然而这些参数的描述很容易被误读为相反的意思,如导致此修复的 bug 报告所证明的。类似地,扩展 sslcrl 和 sslcrldir 以明确提及服务器证书。同时在之前仅讨论 sslcrl 的地方提及 sslcrldir。回溯移植到 v10,CRL 目录修复回溯移植到引入它们的 14。Author: Kyotaro Horiguchi horikyota.ntt@gmail.com Reviewed-by: Peter Eisentraut peter.eisentraut@enterprisedb.com Discussion: https://postgr.es/m/20211202.135441.590555657708629486.horikyota.ntt@gmail.com Discussion: https://postgr.es/m/CABWY_HCBUCjY1EJHrEGePGEaSZ5b29apgTohCyygtsqe_ySYng@mail.gmail.com Backpatch-through: 10 https://git.postgresql.org/pg/commitdiff/fadac33bb8de1cb9005aed07cdd059ba1fa9c6f8
Álvaro Herrera 推送了:
Tomáš Vondra 推送了:
在检查 HOT 更新时忽略 BRIN 索引。在确定是否可以通过 HOT 跳过索引更新时,我们可以忽略仅由 BRIN 索引索引的属性。BRIN 中没有指向单个元组的索引指针,而且页面范围摘要无论如何都会更新,因为它依赖于可见性信息。这也移除了 rd_indexattr 列表,并用 rd_attrsvalid 标志替换它。该列表没有在任何地方使用,一个简单的标志就足够了。补丁由 Josef Simanek 编写,我做了各种修复和改进。Author: Josef Simanek Reviewed-by: Tomas Vondra, Alvaro Herrera Discussion: https://postgr.es/m/CAFp7QwpMRGcDAQumN7onN9HjrJ3u4X3ZRXdGFT0K5G2JWvnbWg%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/5753d4ee320b3f6fb2ff734667a1ce1d9d8615a1
将 bool 添加到 btree_gist 文档。提交 57e3c516 向 btree_gist 添加了 bool 操作类,但需要更新文档中的数据类型列表以反映此更改。Reported-by: Pavel Luzanov Discussion: https://postgr.es/m/CAE2gYzyDKJBZngssR84VGZEN=Ux=V9FV23QfPgo+7-yYnKKg4g@mail.gmail.com https://git.postgresql.org/pg/commitdiff/4c6145b514fa62535f8a5029283de3a54d9cfd53
将 BRIN HOT 行为测试移至 stats.sql。5753d4ee32 添加的测试依赖于统计收集器,因此当 UDP 数据包丢失时可能偶尔失败。某些机器可能容易受此影响,可能取决于负载等。将测试移至已知存在此问题的 stats.sql,人们知道可以忽略它。Reported-by: Justin Pryzby Discussion: https://postgr.es/m/CAFp7QwpMRGcDAQumN7onN9HjrJ3u4X3ZRXdGFT0K5G2JWvnbWg%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/fe60b67250a31cd1ac2a4882f12e199e30abd316
Peter Eisentraut 推送了:
doc: 关于何时使用引用操作的一些补充信息。 https://git.postgresql.org/pg/commitdiff/5786fe154b53caef8b226ed863312d3608b32a51
对扩展保留前缀的不存在设置进行 SET 时发出警告。扩展已经可以通过 EmitWarningsOnPlaceholders() 实质上保留一个 GUC 前缀。但这只会针对扩展加载时(或扩展选择调用此函数时)存在的设置进行检查。当 SET 命令稍后使用具有自定义前缀的不存在设置时,不会给出任何诊断。通过此更改,EmitWarningsOnPlaceholders() 将其保留的前缀保存在列表中,SET 在找到"占位符"设置时检查它是否属于保留前缀,如果是则发出警告。添加了一个回归测试,使用 "plpgsql" 注册前缀来检查补丁。Author: Florin Irion florin.irion@enterprisedb.com Discussion: https://www.postgresql.org/message-id/flat/CA+HEvJDhWuuTpGTJT9Tgbdzm4QS4EzPAwDBScWK18H2Q=FVJFw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/75d22069e00d638d08c04e3aba71688f3fb002ed
改进扫描器文件中的一些注释。Reviewed-by: John Naylor john.naylor@enterprisedb.com Discussion: https://www.postgresql.org/message-id/flat/b239564c-cad0-b23e-c57e-166d883cb97d@enterprisedb.com https://git.postgresql.org/pg/commitdiff/fb7f70112fd80f13a8f124f51c4992fe290d3836
移除未使用的 include。这些已经很长时间不再需要了。Reviewed-by: John Naylor john.naylor@enterprisedb.com Discussion: https://www.postgresql.org/message-id/flat/b239564c-cad0-b23e-c57e-166d883cb97d@enterprisedb.com https://git.postgresql.org/pg/commitdiff/89d1c15d64602b0c27ed87c717f586ddf6cf310d
pg_dump: 添加缺失的 relkind 案例。在 guessConstraintInheritance() 中忘记了检查 RELKIND_MATVIEW。这不是一个实际问题,因为 flagInhTables() 会检查哪些 relkind 可以有父项,那些条目在此之后将有 numParents==0。但经讨论后认为此处应与 flagInhTables() 和 flagInhAttrs() 保持一致。Reviewed-by: Michael Paquier michael@paquier.xyz Discussion: https://www.postgresql.org/message-id/flat/a574c8f1-9c84-93ad-a9e5-65233d6fc00f@enterprisedb.com https://git.postgresql.org/pg/commitdiff/a22d6a2cb62c4fc6d7c4b077d8014fd4ffaec426
一些 RELKIND 宏重构。添加更多宏来分组一些 RELKIND_* 宏:- RELKIND_HAS_PARTITIONS() - RELKIND_HAS_TABLESPACE() - RELKIND_HAS_TABLE_AM() Reviewed-by: Michael Paquier michael@paquier.xyz Reviewed-by: Alvaro Herrera alvherre@alvh.no-ip.org Discussion: https://www.postgresql.org/message-id/flat/a574c8f1-9c84-93ad-a9e5-65233d6fc00f%40enterprisedb.com https://git.postgresql.org/pg/commitdiff/37b2764593c073ca61c2baebd7d85666e553928b
修复 PG_GETARG_UINT32() 的不当使用。chr() 函数使用了 PG_GETARG_UINT32(),尽管参数声明为(有符号)integer。因此,你可以向此函数传递负参数,它在内部将其解释为正数。最终是无害的,但似乎是错误的,所以修复了这个问题并稍微重新排列了内部错误检查以适应。另一个案例在文档中,示例代码使用 PG_GETARG_UINT32() 和声明为有符号 integer 的参数。Reviewed-by: Nathan Bossart bossartn@amazon.com Discussion: https://www.postgresql.org/message-id/flat/7e43869b-d412-8f81-30a3-809783edc9a3%40enterprisedb.com https://git.postgresql.org/pg/commitdiff/e9e63b7022ddd0aaaae7cd439daa234cf9e6a21c
更新 snowball。更新到 snowball 标签 v2.2.0。仅有小的更改。 https://git.postgresql.org/pg/commitdiff/bba962f0c052bfab79df79ac5629eac5eab5b842
pgcrypto: 从测试中移除显式的十六进制编码/解码。这是在 bytea 的十六进制格式可用之前的产物。现在我们可以移除额外的显式编码/解码调用,依赖默认输出格式。Discussion: https://www.postgresql.org/message-id/flat/17dcb4f7-7ac1-e2b6-d5f7-2dfba06cd9ee%40enterprisedb.com https://git.postgresql.org/pg/commitdiff/814e1d9ff7a853b16a544a244bfa92e8388be248
pgrowlocks: 修复不正确的格式占位符。事务 ID 应该以无符号格式打印,类似于 xidout()。 https://git.postgresql.org/pg/commitdiff/254c63e9eda0b006fb61b9dc23970a6381efd061
允许为外键 ON DELETE SET 操作指定列列表。通过允许指定列列表来扩展外键 ON DELETE SET NULL 和 SET DEFAULT 操作,例如 CREATE TABLE posts ( ... FOREIGN KEY (tenant_id, author_id) REFERENCES users ON DELETE SET NULL (author_id) ); 如果指定了列列表,则只有那些列被设置为 null/default,而不是外键约束中的所有列。这对于多租户或分片模式很有用,其中租户或分片 ID 包含在所有表的主键中但不应被设置为 null。Author: Paul Martinez paulmtz@google.com Discussion: https://www.postgresql.org/message-id/flat/CACqFVBZQyMYJV=njbSMxf+rbDHpx=W=B7AEaMKn8dWn9OZJY7w@mail.gmail.com https://git.postgresql.org/pg/commitdiff/d6f96ed94e73052f99a2e545ed17a8b2fdc1fb8a
pg_checksums: 修复数据类型。段号应该是 int,而不是 BlockNumber(另见 buffile.c)。可能无害,但为一致性更好。 https://git.postgresql.org/pg/commitdiff/bf9a55c10729988a3c7ffbe14108e29d90283939
简化通用的64位整数解析 API。pg_strtouint64() 是 strtoull/strtoul/_strtoui64 的包装器,但似乎不再需要这个间接层。msvc/Solution.pm 声称有 HAVE_STRTOULL,所以"仅 MSVC"的部分似乎不必要。此外,我们在 c.h 中有代码来替代 strtoull()(如果未找到),这似乎覆盖了所有当前支持的平台,因此在 pg_strtouint64() 中有进一步的后备似乎不必要。因此,我们可以移除 pg_strtouint64(),并在所有调用点直接使用 strtoull()。然而,保持一个单独的符号来精确解析64位整数似乎很有用,匹配类型定义 int64/uint64。为此,在 c.h 中添加新的宏 strtoi64() 和 strtou64(),作为 strtol()/strtoul() 或 strtoll()/strtoull() 的薄包装器。这使得这些函数在任何地方都可用,而不仅仅是在服务器代码中,并且使函数命名与 numutils.c 中具有不同 API 的 pg_strtointNN() 函数明显不同。Discussion: https://www.postgresql.org/message-id/flat/a3df47c9-b1b4-29f2-7e91-427baf8b75a3%40enterprisedb.com https://git.postgresql.org/pg/commitdiff/3c6f8c011f85df7b35c32f4ccaac5c86c9064a4a
Robert Haas 推送了:
记录 tar 归档现已正确终止。提交 5a1007a5088cd6ddf892f7422ea8dbaef362372f 更改了服务器行为,但我没有注意到现有行为已被记录,因此没有更新文档。此提交做了这些。我选择提及行为已更改,而不是仅仅移除对标准偏差的引用。这似乎对工具作者可能有帮助。Discussion: http://postgr.es/m/CA+TgmoaYZbz0=Yk797aOJwkGJC-LK3iXn+wzzMx7KdwNpZhS5g@mail.gmail.com https://git.postgresql.org/pg/commitdiff/81fca310b38e7808dff9c01a26564e8f2db10893
默认将 log_checkpoints 设为 on,log_autovacuum_min_duration 设为 10m。这里的想法是,当已知性能问题发生在某个时间点时,如果日志中有一些可用信息来帮助弄清楚那段时间附近可能发生了什么,那是件好事。此更改引起了高于平均水平的异议,因为这意味着使用默认设置的服务器即使没有任何问题也会产生一些日志输出。然而,据我统计,邮件列表讨论中支持此更改的人大约是反对者的两倍。认为额外日志输出在实践中不成问题的原因是:(1) 此设置可以生成消息的速率在正确配置的系统上限制为每几分钟一条,(2) 生产系统倾向于由于失败的连接尝试、应用程序活动产生的 ERROR 消息等,在日志中有更多垃圾。Bharath Rupireddy, reviewed by Fujii Masao and by me。许多其他人在帖子中评论,但据我所见,那是对更改的利弊讨论,而非对补丁的审查。Discussion: https://postgr.es/m/CALj2ACX-rW_OeDcp4gqrFUAkf1f50Fnh138dmkd0JkvCNQRKGA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/64da07c41a8c0a680460cdafc79093736332b6cf
移除 InitXLOGAccess()。RecoveryInProgress() 调用 InitXLOGAccess() 不太好,因为状态查询函数通常不应该有执行初始化的副作用。我们可以通过从其他地方调用 InitXLOGAccess() 来修复,但不如直接移除它。InitXLogAccess() 做的一件事是初始化 wal_segment_size,但它不需要这样做。在 postmaster 中,PostmasterMain() 调用 LocalProcessControlFile(),所有子进程将继承该值——除了 EXEC_BACKEND 构建,但那时每个后端运行 SubPostmasterMain(),它也调用 LocalProcessControlFile()。InitXLOGAccess() 做的另一件事是更新 RedoRecPtr 和 doPageWrites,但这不是关键的,因为使用它们的所有代码在发现它们已更改时都会重试。唯一的区别是大多数代码现在将看到一个肯定无效的初始值,而不是一个可能已经严重过时的值,但这在每个后端生命周期中只会发生一次,所以不应该是大问题。补丁由我编写,reviewed by Nathan Bossart, Michael Paquier, Andres Freund, Heikki Linnakangas, and Álvaro Herrera. Discussion: http://postgr.es/m/CA+TgmoY7b65qRjzHN_tWUk8B4sJqk1vj1d31uepVzmgPnZKeLg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/fa0e03c15a9f67671f0a6e0ec66d5e2ac7119c8a
Fujii Masao 推送了:
postgres_fdw: 修复意外报告空消息的问题。postgres_fdw 中的 pgfdw_report_error() 从 PGresult 或 PGconn 获取消息以报告从远程服务器收到的错误。以前,如果它无法从它们中的任何一个获取消息,就会意外报告空消息。这个问题的原因是 pgfdw_report_error() 没有正确处理无法获取消息且其局部变量 message_primary 被设置为 '\0' 的情况。此提交改进了 pgfdw_report_error(),使其在没有获取消息且 message_primary 被设置为 '\0' 时报告 "could not obtain ..." 消息。这与 message_primary 为 NULL 时的行为相同。dblink 中的 dblink_res_error() 有相同的问题,因此此提交也以相同方式改进了它。回溯移植到所有支持的分支。Author: Fujii Masao Reviewed-by: Bharath Rupireddy Discussion: https://postgr.es/m/477c16c8-7ea4-20fc-38d5-ed3a77ed616c@oss.nttdata.com https://git.postgresql.org/pg/commitdiff/557c39bba925d553c6bb12b5e80d1964d355583b
postgres_fdw: 在获取查询结果超时时报告警告。当中止远程事务或向远程服务器发送取消请求时,postgres_fdw 调用 pgfdw_get_cleanup_result() 等待事务中止查询或取消请求的结果到达。如果超时或连接故障,它将无法获取结果。以前,即使在 pgfdw_get_cleanup_result() 中超时或连接故障发生,postgres_fdw 也不报告任何警告消息。当此类事件发生时,这可能使故障排除更加困难。此提交使 pgfdw_get_cleanup_result() 在失败时告诉其调用者发生了什么问题(超时或连接错误),并使其调用者根据该信息报告适当的警告消息。Author: Fujii Masao Reviewed-by: Bharath Rupireddy Discussion: https://postgr.es/m/15aa988c-722e-ad3e-c936-4420c5b2bfea@oss.nttdata.com https://git.postgresql.org/pg/commitdiff/815d61fcd485e8c60dba22988bf5a90fc12df32d
doc: 添加关于 postgres_fdw.application_name 的说明。postgres_fdw.application_name 可以是任何长度的任何字符串,甚至可以包含非 ASCII 字符。然而,当它被传递并用作外部服务器中的 application_name 时,会被截断为少于 NAMEDATALEN 个字符,并且其中除可打印 ASCII 之外的任何字符将被替换为问号。此提交将这些说明添加到文档中。Author: Hayato Kuroda Reviewed-by: Kyotaro Horiguchi, Fujii Masao Discussion: https://postgr.es/m/TYCPR01MB5870D1E8B949DAF6D3B84E02F5F29@TYCPR01MB5870.jpnprd01.prod.outlook.com https://git.postgresql.org/pg/commitdiff/58e2e6eb67fec14c793c74207407e172d7e0291d
Andrew Dunstan 推送了:
消除 ssl 测试中的 perl 警告。Perl 的 hex() 函数如果其参数包含尾随空白(或实际上除十六进制数字之外的任何内容)就会报警,因此移除了有问题的文本。 https://git.postgresql.org/pg/commitdiff/d4596a20d046e800644d6027613c6a2cb5a6c35e
为 MSVC 构建启用 TAP 测试中使用的设置。来自配置或 Makefile 基础设施的某些设置被 TAP 测试使用,但未在 vcregress.pl 中设置。这修复了这些遗漏。这应该增加测试覆盖率,特别是在构建农场上。Reviewed by Noah Misch Discussion: https://postgr.es/m/17093da5-e40d-8335-d53a-2bd803fc38b0@dunslane.net Backpatch to all live branches. https://git.postgresql.org/pg/commitdiff/edc2332550b2343bc9378540e11c8aa71f513a63
在尝试使用 tar 之前检查是否有可工作的 tar。由提交 edc2332550 和构建农场暴露的问题。回溯移植到开始使用此功能的 14 版本。 https://git.postgresql.org/pg/commitdiff/f920f7e799c587228227ec94356c760e3f3d5f2b
撤回"在尝试使用 tar 之前检查是否有可工作的 tar"。此提交撤回了 f920f7e799c587228227ec94356c760e3f3d5f2b。该补丁实际上修复了一个我们没有的问题,反而造成了另一个。回溯移植到 14 版本,与原始提交一致 Discussion: https://postgr.es/m/3655283.1638977975@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/745b99c6444f00befae77dc69c7a63529d751daf
Thomas Munro 推送了:
在 Windows 上检查 STATUS_DELETE_PENDING。1. 更新我们的 open() 包装器以检查 NT 的 STATUS_DELETE_PENDING 并将其转换为 Unix 风格的错误。这通过 RtlGetLastNtStatus() 完成,它从 ntdll 动态加载。一个新文件 win32ntdll.c 集中查找 NT 函数,以备将来决定添加更多。2. 移除试图对 stat() 做类似事情但不起作用的代码,并直接重用 open() 包装器代码。作为副作用,stat() 也获得了对"共享冲突"错误的弹性。3. 由于 stat() 在进程启动的很早期使用,移除了在到达 pgwin32_open_handle() 之前必须已创建 Win32 信号事件的要求。相反,教 pg_usleep() 在信号事件不可用时回退到不可中断的睡眠。这可以回溯移植,但目前仅在 master 中。这个问题显然长期存在,只产生了少量投诉。提议的补丁更频繁地触发它,导致了此调查和修复。Reviewed-by: Andres Freund andres@anarazel.de Reviewed-by: Alexander Lakhin exclusion@gmail.com Reviewed-by: Juan José Santamaría Flecha juanjo.santamaria@gmail.com Discussion: https://postgr.es/m/CA%2BhUKGJz_pZTF9mckn6XgSv69%2BjGwdgLkxZ6b3NWGLBCVjqUZA%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/e2f0f8ed251d02c1eda79e1ca3cb3db2681e7a86
更改 ProcSendSignal() 以使用 pgprocno。不再通过 pid 引用目标后端,而是使用 pgprocno。这意味着我们不必扫描 ProcArray,并且可以去掉一些处理启动进程的特殊情况代码。Discussion: https://postgr.es/m/CA%2BhUKGLYRyDaneEwz5Uya_OgFLMx5BgJfkQSD%3Dq9HmwsfRRb-w%40mail.gmail.com Reviewed-by: Soumyadeep Chakraborty soumyadeep2007@gmail.com Reviewed-by: Ashwin Agrawal ashwinstar@gmail.com Reviewed-by: Andres Freund andres@anarazel.de https://git.postgresql.org/pg/commitdiff/a13db0e16404ae532fe037071c7fe2576a1f8890
Alexander Korotkov 推送了:
Andres Freund 推送了:
使 PG_TEST_USE_UNIX_SOCKETS 在 Windows 上的 tap 测试中工作。在将套接字目录放入 postgresql.conf 或 libpq 连接字符串时,我们需要将 Windows 风格的 \ 路径分隔符替换为 /,否则它们会被解释为转义字符。Author: Andres Freund andres@anarazel.de Reviewed-By: Peter Eisentraut peter.eisentraut@enterprisedb.com Discussion: https://postgr.es/m/4da250a5-4222-1522-f14d-8a72bcf7e38e@enterprisedb.com https://git.postgresql.org/pg/commitdiff/45f52709d86ceaaf282a440f6311c51fc526340b
isolationtester: 将会话名称追加到 application_name。在编写/调试隔离测试时,有时能看到哪个会话持有什么锁等是很有用的。为了在 spec 文件和交互式使用中都更方便,将会话名称追加到 application_name。自 b1907d688 以来,application_name 已包含测试名称,这里将会话名称追加到其后。insert-conflict-specconflict 之前手动做了类似的事情,现在可以移除了。与我们近来对其他测试基础设施改进所做的一样,回溯移植此更改,以便更容易回溯移植测试。Author: Andres Freund andres@anarazel.de Reviewed-By: Michael Paquier michael@paquier.xyz Reviewed-By: Andrew Dunstan andrew@dunslane.net Discussion: https://postgr.es/m/20211211012052.2blmzcmxnxqawd2z@alap3.anarazel.de Backpatch: 10-, to make backpatching of tests easier. https://git.postgresql.org/pg/commitdiff/3f323956128ff8589ce4d3a14e8b950837831803