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/
2022 Nordic PGDay 将于2022年3月22日在芬兰赫尔辛基的希尔顿赫尔辛基斯特兰德酒店举行。论文征集(CfP)将于2021年12月31日截止,请 在此 提交。
Planet PostgreSQL:https://planet.postgresql.org/
本周 PostgreSQL 周报由 David Fetter 提供。
请在太平洋标准时间(PST8PDT)周日晚上3:00之前将新闻和公告发送至 david@fetter.org。
Michaël Paquier 提交
改进 psql 对视图、FDW、序列和转换的制表符补全。已完成以下改进:- 为 ALTER SEQUENCE AS 添加类型补全。- 忽略转换的 ALTER,因为该命令不受支持。- 为 ALTER FOREIGN DATA WRAPPER 添加更多补全。- 为 ALTER VIEW 添加与列相关的选项。这是 0cd6d3b 中工作的延续。作者:Ken Kato 讨论: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 中写入控制文件时,控制文件的时戳会更新,这有助于跟踪这些操作的控制文件更新,后端在启动时也会在日志中跟踪这一点。这部分可以说是一个错误,因为每次写入新版本的控制文件时都应该更新 ControlFileData->time,但这是一个行为更改,因此不进行向后移植。作者:Amul Sul 评审者:Nathan Bossart、Michael Paquier、Bharath Rupireddy 讨论:https://postgr.es/m/CAAJ_b97nd_ghRpyFV9Djf9RLXkoTbOUqnocq11WGq9TisX09Fw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/6fb7c5d67cdd55454fe6317f939a191f85e96473
修复 win32stat.c 中标准流 fstat() 的兼容性问题。在 _WIN32_WINNT < 0x0600 的编译环境中,无法使用 GetFinalPathNameByHandleA(),这意味着 Postgres 仍需支持的 MinGW 下的某些 buildfarm 成员使用的 Windows XP。这被 buildfarm 报告为编译警告,但实际上比报告更糟糕,因为代码根本无法工作。取而代之的是,此更改切换到 GetFileInformationByHandle(),该函数可以对标准流失败并对重定向的流成功,这正是我们在模拟 fstat() 的代码中所寻找的。由于 win32stat.c 的现有逻辑,我们也知道它可以在所有仍受支持的环境中工作。由 10260c7 引入的问题,因此向后移植到 14。报告者:Justin Pryzby,通过 buildfarm 成员 jacana 作者:Michael Paquier 评审者:Juan José Santamaría Flecha 讨论:https://postgr.es/m/20211129050122.GK17618@telsasoft.com 向后移植到:14 https://git.postgresql.org/pg/commitdiff/58651d8dd6a56af306a361e2c386db798164c0f1
修复拼写错误。作者:Lingjie Qiang 讨论: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 的描述。来自同一作者的大型补丁集提取。作者:Justin Pryzby 描述:https://postgr.es/m/20211129030833.GJ17618@telsasoft.com https://git.postgresql.org/pg/commitdiff/be5455124b0f073ba3924ae2ba302a27b1686230
改进 psql 对各种 DROP 命令的制表符补全。已完成以下改进:- 对 DROP OWNED、matviews 和 policies 的 RESTRICT/CASCADE 进行处理。- 对 DROP TRANSFORM 进行处理。这是 0cd6d3b 和 f44ceb4 工作任务的延续。作者:Ken Kato 评审者:Asif Rehman 讨论:https://postgr.es/m/0fafb73f3a0c6bcec817a25ca9d5a853@oss.nttdata.com https://git.postgresql.org/pg/commitdiff/9270778f467dad0d78d3b9e435a89a6039322b2f
修复 slotfuncs.c 中的注释语法错误。作者:Bharath Rupireddy 讨论:https://postgr.es/m/CALj2ACUkrNR2xTak+QaqxoTjPKGn8zXWripv7SR27t+Q5qF1Wg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/7799d4e3bdd14c90989d829a9b24e73d4ff4d4ad
将 pg_upgrade 测试中使用的所有 SQL 查询移至单独的文件。现有的 pg_upgrade/test.sh 和 buildfarm 代码在进行跨版本升级测试时会包含相同的一组 SQL 查询,以调整升级前回归测试创建的对象(主要是,不兼容或不存在的对象需要从源中删除,可能需要重新创建)。这会将所有这些 SQL 查询移到一个新的、单独的文件中,并包含一组 \if 子句,用于根据待升级集群的旧版本处理版本检查。长期计划是让 buildfarm 代码重用这个新的 SQL 文件,以便提交者能够通过刷新核心代码来修复 pg_upgrade 测试中的任何兼容性问题,而无需干预 buildfarm 客户端。请注意,这只能处理主要的回归测试套件,目前尚未对 contrib 模块进行任何处理(这些模块存在更多问题,例如数据库名称)。已进行向下到 10 的向后移植,并调整了版本检查,因为此脚本只需要向后兼容,以便能够清理 buildfarm 客户端中的最大代码量。作者:Justin Pryzby、Michael Paquier 讨论:https://postgr.es/m/20201206180248.GI24052@telsasoft.com 向后移植到: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 中受益)。作者:Bharath Rupireddy 讨论:https://postgr.es/m/CALj2ACUUx3PcK2z9h0_m7vehreZAUbcmOky9WSEpe8TofhV=PQ@mail.gmail.com https://git.postgresql.org/pg/commitdiff/f2c52eeba919a1b191f60445001371bd7c53aaa9
改进各种 GUC 的描述。此提交修复了某些 GUC 描述中的一些不一致之处,同时使其措辞在所依赖的单位方面更加通用。对于大多数 GUC,这消除了使用“N 秒”或“N 字节”之类的术语,这些术语可能不适用于所有翻译这些字符串的语言(根据我自己的经验,这在法语和英语中有效,在日本语中效果较差)。根据下面列出的作者之间的讨论。作者:Justin Pryzby、Michael Paquier 讨论:https://postgr.es/m/20211129030833.GJ17618@telsasoft.com https://git.postgresql.org/pg/commitdiff/03774f9bb304d49fae3379806115aaa5d1fafea2
修复 CONCURRENTLY REINDEX 时的 toast 索引损坏。对 toast 索引或 toast 关系运行的 REINDEX CONCURRENTLY 可能会损坏重建的目标索引,因为并行运行的修改 toast 值的后端会在完成局部操作后立即释放对 toast 关系的锁,而不是在修改 toast 值的事务提交后释放。这里的修复很简单:现在,在保存或删除 toast 值时,我们会一直持有对 toast 关系的 ROW EXCLUSIVE 锁,直到处理 toast 值的事务提交为止,这样并发进行的 reindex 操作就可以等待任何活动并看到新插入(或删除)的行。添加了一个隔离测试来检查修复此问题的场景,该测试设计得有些巧妙,因为它依赖于 allow_system_table_mods 来重命名 toast 表及其索引为固定的名称。这样,就可以直接对它们进行 reindex,而无需依赖底层关系的 OID。请注意,这也无法使用 DO 块,因为 REINDEX CONCURRENTLY 不能在事务块中运行。由于 c4a7a39,可以允许在测试套件中使用 allow_system_table_mods,因此该测试已向后移植到 13。报告者:Alexey Ermakov 分析者:Andres Freund、Noah Misch 作者:Michael Paquier 评审者:Nathan Bossart 讨论:https://postgr.es/m/17268-d2fb426e0895abd4@postgresql.org 向后移植到:12 https://git.postgresql.org/pg/commitdiff/f99870dd867331f576a84e37438da86a866559c4
改进 CREATE/ALTER SUBSCRIPTION 选项的解析。这简化了代码,因此 parse_subscription_options() 的调用者不再需要将其归零,而是持有提供的选项以及默认/已解析选项值的位图。这还简化了在检查不兼容性时与命令支持的选项相关的一些检查。同时,重新排序了为不支持的“slot_name = NONE”组合生成的错误。这可能会生成与先前主要版本不同的错误,但用户需要遍历所有这些错误才能在这种情况下获得正确的命令,如果使用了错误的选项值“enabled”和“create\slot”,则最终结果命令将保持不变。作者:Peter Smith 评审者:Nathan Bossart 讨论:https://postgr.es/m/CAHut+PtXHfLgLHDDJ8ZN5f5Be_37mJoxpEsRg8LNmm4XCr06Rw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/00029deaf65aad47044d9290fe80f2f68601f7ac
修复 {a,an} 的一些拼写错误。其中一项更改影响了文档,因此需要向后移植。作者:Peter Smith 讨论:https://postgr.es/m/CAHut+Pu6+c+r3mY24VT7u+H+E_s6vMr5OdRiZ8NT3EOa-E5Lmw@mail.gmail.com 向后移植到:14 https://git.postgresql.org/pg/commitdiff/5d08137076fd39694188ec4625013756aab889e1
改进有关事务命令的一些 WAL 记录的描述。此提交改进了事务 RMGR 的一些 WAL 记录的描述:- 跟踪事务提交的 remote_apply。此 GUC 是用户可设置的,因此此信息对于调试可能很有用。- 为 PREPARE TRANSACTION 添加复制源信息,包括源 ID、LSN 和时间戳- 同上,用于 ROLLBACK PREPARED。这会影响 pg_waldump 或任何使用这些描述例程的格式,因此不进行向后移植。作者:Masahiko Sawada、Michael Paquier 讨论:https://postgr.es/m/CAD21AoD2dJfgsdxk4_KciAZMZQoUiCvmV9sDpp8ZuKLtKCNXaA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/c8b733c4c4b0c5b7aa93553aa5b7f2c1d0bf00bf
删除 PREPARE TRANSACTION 中复制源的断言。使用复制源时,pg_replication_origin_xact_setup() 是一个可选的选择,可以将 LSN 和时间戳设置为标记源,该源将额外添加到 WAL 中用于事务提交或中止(包括 2PC 事务)。PREPARE TRANSACTION 代码路径中的一个断言假设此数据总是设置的,因此在使用不设置源 LSN 的复制源时会触发。添加了一些测试来更全面地覆盖这种情况。提交 1eb6d65 中的疏忽。根据与 Amit Kapila 和 Masahiko Sawada 的讨论。讨论:https://postgr.es/m/YbbBfNSvMm5nIINV@paquier.xyz 向后移植到: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 中更改,但在加载 buldenv.pl 后会分配一个默认值,因此无法取消设置任何这些参数,使用空值也不适用于“||=”。由于某些环境可能没有 PATH 中兼容的命令(例如来自 MinGW 的 tar 是一个问题),这可能会导致测试失败,而没有退出路径可以绕过任何失败的测试。此提交的更改使得 LZ4、TAR 和 GZIP_PROGRAM 的默认值在加载 buildenv.pl 之前分配,而不是之后。这样,我们就能与 GNU 构建保持相同的兼容性,并使用相同的默认值,并且可以取消设置这些值中的任何一个。同时,在专门介绍 MSVC 的 TAP 测试的部分中,添加了关于这三个变量的一些文档。根据与 Andrew Dunstan 的讨论。讨论:https://postgr.es/m/YbGYe483803il3X7@paquier.xyz 向后移植到: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 受限的环境中,这最多可以节省几秒钟,通过避免刷新新升级集群的数据文件夹。作者:Michael Paquier 评审者:Peter Eisentraut 讨论: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 提交
将 random()、pg_erand48() 等替换为更好的 PRNG API 和算法。标准化 xoroshiro128** 作为我们的基本 PRNG 算法,消除了许多平台依赖项以及基本过时的 PRNG 代码。此外,此 API 替换将使将来在必要时替换算法更加容易。xoroshiro128** 比 drand48 系列慢几个百分点,但它可以生成全宽度 64 位随机值,而不仅仅是 48 位,并且应该更值得信赖。它可能比平台的 random() 快,具体取决于您考虑的平台;并且与 random() 不同,我们可以轻松拥有非全局状态向量。它不是加密安全的,但它所替换的函数也不是。Fabien Coelho,由 Dean Rasheed、Aleksander Alekseev 和我评审 讨论:https://postgr.es/m/alpine.DEB.2.22.394.2105241211230.165418@pseudo https://git.postgresql.org/pg/commitdiff/3804539e48e794781c6145c7f988f5d507418fa8
pg_global_prng_state 的可移植性 hack。PGDLLIMPORT 仅适用于在后端声明的变量,而不适用于来自包含在前端代码中的库的变量。(这不是一个特别好的修复,但目前为止,使用了其他地方使用的方法。)讨论:https://postgr.es/m/E1mrWUD-000235-Hq@gemulon.postgresql.org https://git.postgresql.org/pg/commitdiff/11b500072e42c214462b973b0b05f1c68992226b
简化从 libpgcommon 和 libpgport 导出的变量声明。这会撤销 c2d1eea9e 和 11b500072 的提交,以及其他地方类似的 hack,转而将 PGDLLIMPORT 宏设置为可以无条件使用。这是可行的,因为在前端代码中,我们不需要在定义文件或消耗文件中对这些库导出的变量进行任何标记;前端代码也无需访问核心后端导出的变量。同时,编写一些关于这些宏的实际文档。作者:我,基于 Robert Haas 的建议 讨论:https://postgr.es/m/1160385.1638165449@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/e04a8059a74c125a8af94acdcb7b15b92188470a
文档:改进关于 matviews 中 ORDER BY 的文档。删除示例物化视图中令人困惑的 ORDER BY 用法。它对示例没有帮助,但可能会鼓励人们养成不良的习惯。澄清 REFRESH MATERIALIZED VIEW 关于视图顺序是否保留的说明(它不保留)。Maciek Sakrejda 讨论:https://postgr.es/m/CAOtHd0D-OvrUU0C=4hX28p4BaSE1XL78BAQ0VcDaLLt8tdUzsg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/4f33af23e7e3ac30b3cb9480981c3accf401ef01
在检查随机数源时应对交叉编译。提交 16f96c74d 忽略了交叉编译的可能性,导致交叉编译在配置阶段失败,除非选择了 --with-openssl。既然我们现在基本假设 /dev/urandom 在任何地方都可用,那么假设交叉编译目标也拥有它似乎是合理的,而不是失败。根据 Vincas Dargis 的投诉。向 v14 向后移植(该版本引入了此功能)。讨论:https://postgr.es/m/0dc14a31-acaf-8cae-0df4-a87339b22bd9@gmail.com https://git.postgresql.org/pg/commitdiff/b637101644aa84dccc7da4f30bad40452939b57a
psql:将查询内的 "--" 注释包含在发送给服务器的内容中。psql 的词法分析器历来会从收集并发送给服务器的内容中删除破折号破折号(单行)注释。这与它处理斜杠星号注释的方式不一致,并且以前有人抱怨希望将此类注释捕获在服务器日志中。然而,完全撤销此决定是过于大的行为更改。特别是,查询开始前的行注释通常不被认为是该查询的一部分。我们可以改进这种情况的方法是捕获明显*在*查询内的注释,即在第一个非空格、非注释标记之后但在查询结束分号或反斜杠命令之前。这是一个几乎微不足道的代码更改,并且只影响少数回归测试结果。(尝试将相同的规则应用于斜杠星号注释是诱人的。但很难看到如何在不引起奇怪的历史行为的情况下处理跨越多行的注释,尤其是在用户随后在星号斜杠的同一行上开始新查询时。鉴于缺乏抱怨,我们暂时搁置这种情况。)讨论:https://postgr.es/m/CAJcOf-cAdMVr7azeYR7nWKsNp7qhORzc84rV6d7m7knG5Hrtsw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/83884682f4df96184549b91869a1cf79dafb4f94
psql:将查询之间的 "--" 注释视为单独的历史条目。如果我们尚未为新查询收集任何非空格、非注释标记,请将当前输入行刷新到历史记录中,然后再读取另一行。这使得 psql 的历史行为与这样一种观察结果保持一致:仅包含注释的行通常不被视为下一个查询的一部分。psql 的提示行为也与其一致,因为它不会更改提示,直到您输入了不是空格或 "--" 注释的内容。Greg Nancarrow,由我简化 讨论:https://postgr.es/m/CAJcOf-cAdMVr7azeYR7nWKsNp7qhORzc84rV6d7m7knG5Hrtsw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/c2f654930e9f8119b9ed12caab6192d0aafe5ebd
psql:默认情况下初始化注释开始设置以获得有用的值。Readline 的 meta-# 命令应该在当前行开头插入一个注释标记。然而,默认标记是 "#",对于 SQL 完全无用。将其设置为 "-- "。(此设置仍可在您的 ~/.inputrc 文件中覆盖,因此此更改不会影响已采取措施使该命令有用的用户。)讨论: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,根据 Guillaume Lelarge 的报告 讨论:https://postgr.es/m/CAECtzeW2DAoioEGBRjR=CzHP6TdL=yosGku8qZxfX9hhtrBB0Q@mail.gmail.com https://git.postgresql.org/pg/commitdiff/babe545caeba4c62feb3030940d93432721eea57
为 rl_variable_bind() 添加配置探测。一些非常旧的 readline 库缺少此函数,导致提交 3d858af07 失败。根据 buildfarm(通过 Michael Paquier)。讨论:https://postgr.es/m/E1msTLm-0007Cm-Ri@gemulon.postgresql.org https://git.postgresql.org/pg/commitdiff/a7da41981021575e2359683d994eec6c9d246321
在后端关机时显式关闭客户端套接字(Windows)。事实证明,这对于防止 Winsock 丢弃任何尚未发送的数据(例如解释进程终止原因的错误消息)是必要的。内核的隐式关闭与显式关闭的行为方式不同,这很奇怪,但很难反驳实验结果。由 Alexander Lakhin 和 Lars Kanis 独立提交(我添加了注释)。向所有支持的分支向后移植。讨论:https://postgr.es/m/90b34057-4176-7bb0-0dbb-9822a5f6425b@greiz-reinsdorf.de 讨论:https://postgr.es/m/16678-253e48d34dc0c376@postgresql.org https://git.postgresql.org/pg/commitdiff/6051857fc953a62db318329c4ceec5f9668fd42a
重构 pg_dump 的对象组件转储跟踪。将 DumpableObject.dump 位掩码字段拆分为两个单独的位掩码,分别跟踪请求转储哪些组件(在现有的 "dump" 字段中)以及特定对象存在的哪些组件(在新 "components" 字段中)。这消除了许多冗余且易于损坏的逻辑,这些逻辑涉及设置位然后清除它们。更重要的是,它恢复了 pg_dump 的次要数据收集查询不应为我们不感兴趣的对象执行的原始意图。当 dump 标志变成位掩码时,此优化被破坏了,因为在许多情况下,不相关的位往往会保持设置状态。由于 "components" 字段从最小的位集开始,并根据需要添加,将其与 "dump" 进行 AND 操作可以可靠地指示我们需要转储的内容,而无需复杂化管理请求位的逻辑。这显著减少了转储包含许多函数的扩展时所需的查询数量。讨论:https://postgr.es/m/2273648.1634764485@sss.pgh.pa.us 讨论: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 的较新服务器区别对待。讨论:https://postgr.es/m/2273648.1634764485@sss.pgh.pa.us 讨论: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 命令(包括其他会话的临时表的 drop),则现有代码存在严重失败风险。可以说这应该是一个向后移植的错误修复,但它具有中等侵入性,而且我们并未收到多少关于此类失败的投诉。目前先将其放入 HEAD。讨论:https://postgr.es/m/2273648.1634764485@sss.pgh.pa.us 讨论: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 的想法 讨论:https://postgr.es/m/7d7eb6128f40401d81b3b7a898b6b4de@W2012-02.nidsa.loc https://git.postgresql.org/pg/commitdiff/9895961529ef8ff3fc12b39229f9a93e08bca7b7
在 pg_dump 中对重复的每个对象查询使用 PREPARE/EXECUTE。对于函数等对象,pg_dump 会对每个要转储的对象执行相同的次要数据收集查询。这不容易重构以避免重复查询,但我们可以 PREPARE 这些查询以降低规划成本。此补丁将此想法应用于函数、聚合、运算符和数据类型。虽然可以进一步扩展,但剩余的对象类型不太可能在典型数据库中足够频繁地出现而值得担心。此外,如果至少有几十个对象需要应用预编译查询,则 PREPARE 可能是净亏损。讨论: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 的投诉。讨论: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 的测试。向后移植,与以前相同。讨论:https://postgr.es/m/af5e0bf3-6a61-bb97-6cba-061ddf22ff6b@dunslane.net https://git.postgresql.org/pg/commitdiff/ed52c3707bcf8858defb0d9de4b55f5c7f18fed7
文档:改进 xfunc-c-type-table。列出 numeric 和 timestamptz 类型,它们似乎从未包含在这里。恢复 bigint,它在 v12 中被意外删除。修复了一些错误,或至少是过时的用法(没有人再声明 float 参数为 "float8*",即使它们可能在底层是)。重新排序。删除声称这是内置类型完整列表的说法。根据 Oskar Stenberg 的提问。讨论:https://postgr.es/m/HE1PR03MB2971DE2527ECE1E99D6C19A8F96E9@HE1PR03MB2971.eurprd03.prod.outlook.com https://git.postgresql.org/pg/commitdiff/6f0e6ab04de5f52e4e0872d3ace2bb6a35e8b0b1
为“内部使用”类型创建一个新的类型类别。历史上,我们将类型 "char" 放入 S(字符串)类型类别,尽管称其为字符串有点牵强,因为它只能存储一个字节。(在我们实际使用中,它更像枚举。)鉴于 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 的报告。讨论: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() 来轻松添加此功能。有可能(现有的)此功能的测试用例会显示一些数值不稳定,但希望 buildfarm 能在出现问题时将其暴露出来。顺便,改进文档以尝试解释为什么多边形与闭合路径在根本上是不同的。讨论:https://postgr.es/m/3426566.1638832718@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/c5c192d7bdfa78f19e735610488b1cc5ad6e41cc
文档:取消文档化未实现的几何运算符。在提交 791090bd7 中,我努力填充了 pg_operator 中列出的所有几何运算符的文档。然而,现在看来,其中一些遗漏可能是有意为之的,因为其中一些运算符条目指向未实现的存根函数。我已将它们从文档中删除。(在 HEAD 中,poly_distance 仍然存在,因为 c5c192d7b 刚刚为其添加了实现。)根据 Anton Voloshin 的投诉。讨论:https://postgr.es/m/3426566.1638832718@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/922b23c13be075595c2abc67736b214cb90f84d9
删除未实现/未文档化的几何函数和运算符。二十多年来,没有人填充这些存根,所以是时候放弃它们可能随时实现的想法了。相关的 pg_operator 和 pg_proc 条目只是令人困惑的空间浪费。根据 Anton Voloshin 的投诉。讨论: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 个条目时才会相关,这似乎不太可能。尽管如此,这是一个理论上的错误,所以将其向后移植到引入拼写错误的 v13(在提交 c02fdc922 中)。顺便,也使 swap_nodes() 使用一致的数据类型。Ma Liangzhu 讨论:https://postgr.es/m/17336-fc4e522d26a750fd@postgresql.org https://git.postgresql.org/pg/commitdiff/2de3c1015cb2556af501c630b1768a20f111fe95
改进 binaryheap.c 和 logtape.c 中的 sift up/down 代码。借用 tuplesort.c 中长期使用的逻辑:而不是物理交换两个堆条目中的数据,而是将正在上移或下移的值保存在局部变量中,只需移动其他值即可。这使得代码更短,速度也更快。不清楚当前是否有调用者真的非常时间关键而能注意到,但我们最好在所有地方以相同的方式编写堆维护代码。Ma Liangzhu 和 Tom Lane 讨论: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 留下的死代码。讨论:https://postgr.es/m/2923349.1634942313@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/30e7c175b81d53c0f60f6ad12d1913a6d7d77008
删除 pg_upgrade 对从 9.2 之前服务器升级的支持。根据讨论,我们将旧服务器的支持限制在仍可在现代平台上轻松构建的分支上,目前是 9.2 及以上版本。讨论:https://postgr.es/m/2923349.1634942313@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/e469f0aaf3c586c8390bd65923f97d4b1683cd9f
删除 pg_dump 的 --no-synchronized-snapshots 开关。曾经有合理理由使用此开关的服务器版本现已全部停止支持。保留它除了让粗心的 DBA 误伤自己外,几乎没有其他作用。讨论: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,并修复了未能这样做的半打个调用者。据我所知,这只是为了未来的兼容性,这里没有实时错误。因此,不向后移植。根据 Chapman Flack 的抱怨。讨论:https://postgr.es/m/61B901A4.1050808@anastigmatix.net https://git.postgresql.org/pg/commitdiff/bbc227e951ecc59a29205be4952a623e7d1dd534
清理 pg_dump 和 pg_upgrade 中更多最近的死代码。我在 30e7c175b 和 e469f0aaf 中遗漏了一些东西,如 Justin Pryzby 所指出的。讨论: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 功能可能不起作用”恰恰适用于这两种情况。讨论: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……我们真的不应该将此类更改放入一个即将结束生命周期的分支。讨论: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 后就可以运行。这需要一些工作,所以此提交仅解决了我的即时痛点。讨论: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 简化了“dead”的含义,以便 VACUUM:内存中收集的 TIDs(为索引 vacuuming 做准备)必须始终来自堆页上的 LP_DEAD 存根行指针,这些指针是在修剪后找到的。这正式化了索引 vacuuming(和堆 vacuuming)是可选过程的想法。与修剪不同,它们可以无限期延迟,而不会有违反基本不变量的风险。例如,留下 LP_DEAD 项显然不会增加事务 ID 回绕的风险。没有事务 ID 就无法实现事务 ID 回绕。重命名任何引用 DEAD 元组(带有存储的元组)的内容都加强了这一点。vacuumlazy.c 之外的代码继续模糊了死元组/已删除元组和 LP_DEAD 项之间的区别。这是必需的,因为自动 vacuum 调度仍然主要由“死项目/元组”统计信息驱动。将来,我们可能会发现用更复杂的模型替换此模型很有用,作为教会自动 vacuum 执行更频繁的 vacuuming 的一步,而不是针对碰巧因版本更新而容易膨胀的单个索引。顺便,简化了处理 VACUUM 的 dead_items 数组的一些函数签名。作者:Peter Geoghegan pg@bowt.ie 评审者:Masahiko Sawada sawada.mshk@gmail.com 讨论:https://postgr.es/m/CAH2-WzktGBg4si6DEdmq3q6SoXSDqNi6MtmB8CmmTmvhsxDTLA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/4f8d9d1217956798e761491d236af576b27f5e12
vacuumlazy.c:修复剩余的“dead tuple”引用。提交 4f8d9d12 中的疏忽。报告者:Masahiko Sawada sawada.mshk@gmail.com 讨论:https://postgr.es/m/CAD21AoDm38Em0bvRqeQKr4HPvOj65Y8cUgCP4idMk39iaLrxyw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/4bdfe6855901a4104dbdac2be53d465b626e244d
标准化 cleanup lock 术语。术语“super-exclusive lock”是“buffer cleanup lock”的同义词,该术语多年前首次出现在 nbtree 中。通过一致地使用“cleanup lock”一词来标准化。这完成了提交 276db875 中开始的工作。没有理由有两个术语。但只有一个术语是有充分理由的:避免混淆 VACUUM 在索引 AM 中调用 ambulkdelete 时为何会获取完整的 cleanup lock(而不仅仅是普通的 exclusive lock)。这与保护物理索引数据结构本身无关。它对于实现一种锁定协议是必需的,该协议确保指向堆/表结构的 TID 在 VACUUM 之前不会被标记为可回收(这与 VACUUM 在其第一个堆传递期间如何使用 cleanup lock 有些相似)。请注意,索引 AM 不一定需要实现此锁定协议——一些索引 AM 使用 MVCC 快照作为其唯一的内部锁定,以防止不安全的 TID 回收。顺便,更新 nbtree README。将上述索引 vacuuming 锁定协议的讨论与提交 2ed5b87f 添加的“drop leaf page pin”优化分开。我们现在通过描述单个索引扫描如何安全地选择退出应用标准锁定协议(因此可以避免阻塞 VACUUM 的进度)来组织对后者的讨论。还记录了为什么该优化不适用于 nbtree 索引扫描。作者:Peter Geoghegan pg@bowt.ie 讨论:https://postgr.es/m/CAH2-WzngHgQa92tz6NQihf4nxJwRzCV36yMJO_i8dS+2mgEVKw@mail.gmail.com 讨论: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() 来重置单个订阅错误。此视图的内容可供即将到来的补丁使用,该补丁将跳过与订户上的现有数据冲突的特定事务。此视图将来可以扩展以跟踪其他事务相关统计信息,例如订阅工作人员已提交/中止的事务数。作者:Masahiko Sawada 评审者:Greg Nancarrow、Hou Zhijie、Tang Haiying、Vignesh C、Dilip Kumar、Takamichi Osumi、Amit Kapila 讨论:https://postgr.es/m/CAD21AoDeScrsHhLyEPYqN3sydg6PxAPVBboK=30xJfUVihNZDA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/8d74fc96db5fd547e077bf9bf4c3b67f821d71cd
文档:在逻辑复制期间添加“附加分区”限制。将一个表附加到使用 publish_via_partition_root 设置为 true 的出版物发布的分区树中,不会导致该表已有的内容被复制。发生这种情况是因为订阅服务器不认为复制新附加的分区,因为根表已处于“就绪”状态。此行为在 PG13 (83fd4532a7) 中引入,当时我们允许通过祖先发布分区更改。我们可以在未来考虑修复此限制。作者:Amit Langote 评审者:Hou Zhijie、Amit Kapila 向后移植到:13 讨论:https://postgr.es/m/OS0PR01MB5716E97F00732B52DC2BBC2594989@OS0PR01MB5716.jpnprd01.prod.outlook.com https://git.postgresql.org/pg/commitdiff/eb7828f54a44843a64a23d0891d7eb6018c0749e
修复由提交 8d74fc96db 引起的回归测试失败。测试未考虑到除应用更改之外的其他错误,例如“复制源 OID %d 已激活...”可能会在表同步工作程序开始复制更改之前发生。为了使测试更稳健,我们现在需要检查预期的错误和错误源,它将是 tablesync 或 apply 工作程序。顺便删除 Create Subscription 命令中无害的“streaming = off”选项,因为该选项默认为关闭。根据 buildfarm 成员 sidewinder。作者:Masahiko Sawada 评审者:Hou Zhijie、Vignesh C、Amit Kapila 讨论:https://postgr.es/m/CAD21AoDeScrsHhLyEPYqN3sydg6PxAPVBboK=30xJfUVihNZDA@mail.gmail.com 讨论: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,我们将显示重复的子表值,这并非用户所期望的。我们决定不向后移植此更改,因为没有用户对此提出投诉,而且这似乎也不是一个关键问题。作者:Hou Zhijie 评审者:Bharath Rupireddy、Amit Langote、Amit Kapila 讨论: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 时已得到保证。作者:Vignesh C 评审者:Nathan Bossart、Greg Nancarrow、Michael Paquier、Haiying Tang 讨论:https://postgr.es/m/CALDaNm0E5U-RqxFuFrkZrQeG7ae5trGa=xs=iRtPPHULtT4zOw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/1a2aaeb0db1bccd97140d479c4247127f6cb9378
修复 ROLLBACK PREPARED 操作解码期间的源时间戳。这是因为我们将不正确的参数传递给了 ReorderBufferFinishPrepared()。作者:Masahiko Sawada 评审者:Vignesh C 向后移植到:14 讨论:https://postgr.es/m/CAD21AoBqhUqgDZUhUVnnwKRubPDNJ6m6fJDPgok3E5cWJLL+pA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/e464cb7af317e216fef9bfe19a7c4df542817012
双重发布子表数据。对于同时包含子表和父表的出版物,如果发布时 publish_via_partition_root 设置为 true,我们将双重发布子表的数据。发生这种情况是因为订阅服务器将同时使用父表和子表进行同步,因为它在初始表列表中同时获取它们。确保 pg_publication_tables 在这种情况下仅返回父表。作者:Hou Zhijie 评审者:Greg Nancarrow、Amit Langote、Vignesh C、Amit Kapila 向后移植到:13 讨论:https://postgr.es/m/OS0PR01MB57167F45D481F78CDC5986F794B99@OS0PR01MB5716.jpnprd01.prod.outlook.com https://git.postgresql.org/pg/commitdiff/5e97905a2c764d4ca36f5c6cccd0ebbf157b9df4
改进并行 vacuum 实现。以前,在并行 vacuum 中,我们仅为并行索引 vacuuming 安全的索引分配 IndexBulkDeleteResult 的 shmem 区域,并在 shmem 区域中设置 null-bitmap 以访问它们。这种逻辑太复杂,只节省了每个索引几个比特的收益。在此提交中,我们为 LVParallelIndStats 数组分配了一个专用 shmem 区域,该数组包括并行安全性标志、索引 vacuum 状态和 IndexBulkdeleteResult。每个索引都有一个数组元素,即使是那些并行索引 vacuuming 不安全或不值得的索引。此提交通过删除所有位图相关代码来使代码更清晰。此外,在并行索引 vacuum 之后添加对每个索引 vacuum 状态的检查,以确保所有索引都已处理。最后,为保持一致性,将并行 vacuum 函数重命名为 parallel_vacuum_*。作者:Masahiko Sawada,基于 Andres Freund 的建议 评审者:Hou Zhijie、Amit Kapila 讨论:https://postgresql.ac.cn/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 创建作为数组传递的任何扩展。每个扩展都在所有测试数据库中创建。评审者:Tom Lane tgl@sss.pgh.pa.us 评审者:Andrew Dunstan andrew@dunslane.net 评审者:Dagfinn Ilmari Mannsåker ilmari@ilmari.org 讨论:https://postgr.es/m/E23F9811-0C77-45DA-912F-D809AB140741@yesql.se https://git.postgresql.org/pg/commitdiff/879fc1a579cc2e2e1dbb79686668b4de2071ab83
为 contrib/sslinfo 添加 TAP 测试。这为 SSL 测试套件添加了 sslinfo 扩展的基本覆盖。通过与 pg_stat_ssl 进行比较来验证输出,以在底层证书略有更改时提供一定程度的测试稳定性。添加了一个新证书来提供一个要测试的扩展。评审者:Tom Lane tgl@sss.pgh.pa.us 评审者:Andrew Dunstan andrew@dunslane.net 评审者:Dagfinn Ilmari Mannsåker ilmari@ilmari.org 讨论:https://postgr.es/m/E23F9811-0C77-45DA-912F-D809AB140741@yesql.se https://git.postgresql.org/pg/commitdiff/ae81776a23f78babc9707e22f95dea15aa2dbcd2
SSL 测试期间为密钥使用特定于测试的临时路径。SSL 和 SCRAM TAP 测试套件都使用 supplied test keys 的临时副本,以确保正确的权限。然而,这些文件被复制到树内,使用临时文件名而不是真正的临时文件夹。通过使用 PostgreSQL::Test::Utils 提供的 tmp_check 来修复。Tom Lane 在审查附近 sslinfo TAP 测试补丁时发现。评审者:Tom Lane tgl@sss.pgh.pa.us 讨论:https://postgr.es/m/599244.1638041239@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/c113d8ad50d62bfcc16bbd5ceec91122e0046ede
删除 general use 中变量的 PF_USED_FOR_ASSERTS_ONLY。fsstate(在 postgres_fdw.c 的 process_pending_requests 中)在 8998e3cafa2 中被添加为仅用于断言的变量,1ec7fca8592 声明在断言之外使用该变量。rd_index(在 lsyscache.c 的 get_index_column_opclass 中)在 2a6368343ff 中引入,然后立即在修复提交 7e041603904 中使用。这删除了上述变量的 PG_USED_FOR_ASSERTS_ONLY 变量修饰符。评审者:Greg Nancarrow gregn4422@gmail.com 讨论: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 的逐变量抑制的满意解决方案之前,禁用此警告。讨论:https://postgr.es/m/CAJcOf-c+KniGAp31pn8TC=9a-WHXpkX-3+8-2BkaCsZchhu=8w@mail.gmail.com https://git.postgresql.org/pg/commitdiff/e7122548a3f754060db1767582148b3559fe8d43
扩展私钥统计检查的错误处理。如果私钥的统计操作失败,代码会假设是由于 ENOENT,但这可能不一定。通过打印不同的错误消息来扩展检查(针对非 ENOENT 错误),以方便调试。根据 Tom Lane 的建议,由于 buildfarm 中的 fairywren 动物出现问题。讨论:https://postgr.es/m/1632478.1638305700@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/538724fc36e05339ea3734f1b886a67398fce71a
从注释中删除关于 TimeLineID 更新的提及。提交 4a92a1c3d 删除了 RecoveryInProgress 中的 TimeLineID 更新,相应地更新了注释。作者:Amul Sul sulamul@gmail.com 讨论:https://postgr.es/m/CAAJ_b96wyzs8N45jc-kYd-bTE02hRWQieLZRpsUtNbhap7_PuQ@mail.gmail.com https://git.postgresql.org/pg/commitdiff/018b800245c5d4db30d204fa42fada05a64eb287
修复证书路径以使用 perl2host。提交 c113d8ad50 将证书的复制移至测试期间的临时路径,而不是使用源树。这破坏了 msys 上的测试,因为绝对路径没有为 msys 平台进行调整。确保在复制和传递连接字符串之前使用 perl2host 转换路径。同时,使所有测试套件的证书复制错误处理保持一致。讨论:https://postgr.es/m/YacT3tm97xziSUFw@paquier.xyz https://git.postgresql.org/pg/commitdiff/c3b34a0ff4a00d00d6ea364c85201e155ca7ef6b
修复 Windows 上的连接字符串路径分隔符。提交 c113d8ad5 生成的临时路径不能直接作为连接字符串传递给 Windows,因为路径分隔符反斜杠会被解释为转义字符。通过将反斜杠转换为斜杠来修复,就像在其他测试中的类似路径使用场景中一样。报告者:Andres Freund andres@anarazel.de 讨论:https://postgr.es/m/20211202195130.e7pprpsx4ell22sp@alap3.anarazel.de https://git.postgresql.org/pg/commitdiff/49422ad0cc88c91a38522b2a7b222c2f2c939f82
文档:修复 CRL 参数的误导性措辞。ssl_crl_file 和 ssl_crl_dir 都用于客户端证书吊销,而不是服务器证书。尽管参数描述可能会被误解为相反的意思,正如导致此修复的 bug 报告所证明的那样。同样,展开 sslcrl 和 sslcrldir 以明确提及服务器证书。同时提到 sslcrldir,而以前只讨论了 sslcrl。向后移植到 v10,CRL 目录修复向下移植到 14(它们在此版本中引入)。作者:Kyotaro Horiguchi horikyota.ntt@gmail.com 评审者:Peter Eisentraut peter.eisentraut@enterprisedb.com 讨论:https://postgr.es/m/20211202.135441.590555657708629486.horikyota.ntt@gmail.com 讨论:https://postgr.es/m/CABWY_HCBUCjY1EJHrEGePGEaSZ5b29apgTohCyygtsqe_ySYng@mail.gmail.com 向后移植到:10 https://git.postgresql.org/pg/commitdiff/fadac33bb8de1cb9005aed07cdd059ba1fa9c6f8
Álvaro Herrera 提交
Tomáš Vondra 提交了
在检查 HOT 更新时忽略 BRIN 索引。在确定是否可以通过使用 BRIN 索引来跳过索引更新时,我们可以忽略仅由 BRIN 索引索引的属性。BRIN 中没有指向单个元组的索引指针,并且页面范围摘要仍然会更新,因为它依赖于可见性信息。这还删除了 rd_indexattr 列表,并用 rd_attrsvalid 标志替换它。该列表在任何地方都没有使用,一个简单的标志就足够了。由 Josef Simanek 提交补丁,我进行了各种修复和改进。作者:Josef Simanek 评审者:Tomas Vondra、Alvaro Herrera 讨论:https://postgr.es/m/CAFp7QwpMRGcDAQumN7onN9HjrJ3u4X3ZRXdGFT0K5G2JWvnbWg%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/5753d4ee320b3f6fb2ff734667a1ce1d9d8615a1
在 btree_gist 文档中添加 bool。提交 57e3c516 为 btree_gist 添加了 bool 操作符类,但更新文档中的数据类型列表以反映此更改。报告者:Pavel Luzanov 讨论: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,该文件已知存在此问题,并且人们知道忽略它。报告者:Justin Pryzby 讨论:https://postgr.es/m/CAFp7QwpMRGcDAQumN7onN9HjrJ3u4X3ZRXdGFT0K5G2JWvnbWg%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/fe60b67250a31cd1ac2a4882f12e199e30abd316
Peter Eisentraut 提交
文档:关于何时使用引用操作的一些附加信息。https://git.postgresql.org/pg/commitdiff/5786fe154b53caef8b226ed863312d3608b32a51
对 SET 不存在的具有扩展保留前缀的设置发出警告。扩展已可以通过 EmitWarningsOnPlaceholders() 实际保留 GUC 前缀。但这只针对扩展加载时(或扩展选择调用此函数时)存在的设置进行了检查。当 SET 命令稍后使用具有自定义前缀的非现有设置时,不会给出任何诊断。通过此更改,EmitWarningsOnPlaceholders() 会将其保留的前缀保存在一个列表中,SET 在找到“占位符”设置时会检查它是否属于保留前缀,并在这种情况下发出警告。添加了一个回归测试,使用“plpgsql”注册前缀来检查此补丁。作者:Florin Irion florin.irion@enterprisedb.com 讨论:https://postgresql.ac.cn/message-id/flat/CA+HEvJDhWuuTpGTJT9Tgbdzm4QS4EzPAwDBScWK18H2Q=FVJFw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/75d22069e00d638d08c04e3aba71688f3fb002ed
改进扫描器文件中的一些注释。评审者:John Naylor john.naylor@enterprisedb.com 讨论:https://postgresql.ac.cn/message-id/flat/b239564c-cad0-b23e-c57e-166d883cb97d@enterprisedb.com https://git.postgresql.org/pg/commitdiff/fb7f70112fd80f13a8f124f51c4992fe290d3836
删除未使用的包含。这些已不再需要很长时间。评审者:John Naylor john.naylor@enterprisedb.com 讨论:https://postgresql.ac.cn/message-id/flat/b239564c-cad0-b23e-c57e-166d883cb97d@enterprisedb.com https://git.postgresql.org/pg/commitdiff/89d1c15d64602b0c27ed87c717f586ddf6cf310d
pg_dump:添加缺失的 relkind 情况。在 guessConstraintInheritance() 中忘记了检查 RELKIND_MATVIEW()。这不是一个实时问题,因为它在 flagInhTables() 中进行了检查,而 relkinds 可以有父项,并且这些条目在之后 numParents==0。但在讨论后,人们认为这个地方应该与 flagInhTables() 和 flagInhAttrs() 保持一致。评审者:Michael Paquier michael@paquier.xyz 讨论:https://postgresql.ac.cn/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() 审阅者:Michael Paquier michael@paquier.xyz 审阅者:Alvaro Herrera alvherre@alvh.no-ip.org 讨论:https://postgresql.ac.cn/message-id/flat/a574c8f1-9c84-93ad-a9e5-65233d6fc00f%40enterprisedb.com https://git.postgresql.org/pg/commitdiff/37b2764593c073ca61c2baebd7d85666e553928b
修复 PG_GETARG_UINT32() 的不当使用。chr() 函数使用了 PG_GETARG_UINT32(),尽管该参数被声明为(有符号)整数。因此,您可以将负数参数传递给此函数,它会在内部将其解释为正数。最终结果是无害的,但似乎是错误的,因此修复此问题并稍微重新排列内部错误检查以适应这一点。另一个案例出现在文档中,其中示例代码使用了 PG_GETARG_UINT32(),并将参数声明为有符号整数。审阅者:Nathan Bossart bossartn@amazon.com 讨论:https://postgresql.ac.cn/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) 中不再提供十六进制格式之前。现在我们可以删除额外的显式编码/解码调用,并依赖默认输出格式。讨论:https://postgresql.ac.cn/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 或分片 ID 包含在所有表的примарном ключе中,但不应设置为 null。作者:Paul Martinez paulmtz@google.com 讨论:https://postgresql.ac.cn/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()/stroull() 的薄包装器。这使得这些函数在服务器代码之外的任何地方都可以使用,并且函数名称与 numutils.c 中的 pg_strtointNN() 函数明显不同,后者具有不同的 API。讨论:https://postgresql.ac.cn/message-id/flat/a3df47c9-b1b4-29f2-7e91-427baf8b75a3%40enterprisedb.com https://git.postgresql.org/pg/commitdiff/3c6f8c011f85df7b35c32f4ccaac5c86c9064a4a
Robert Haas 提交
记录 tar 存档现在已正确终止。提交 5a1007a5088cd6ddf892f7422ea8dbaef362372f 改变了服务器行为,但我没有注意到现有行为已被记录,因此没有更新文档。此提交完成了此操作。我选择提到行为已更改,而不是仅仅删除对偏离标准的引用。我认为这可能对工具作者有所帮助。讨论: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,由 Fujii Masao 和我审阅。许多其他人评论了该主题,但据我所见,那是对更改的优点进行的讨论,而不是对补丁的审阅。讨论: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 并执行 pageWrites,但这并不关键,因为所有使用它们的代码如果发现它们已更改,将只是重试。唯一的区别是,大多数代码现在将看到一个绝对无效的初始值,而不是一个可能刚刚过时的值,但这每个后端生命周期只会发生一次,所以不应该是一个大问题。由我提交补丁,由 Nathan Bossart、Michael Paquier、Andres Freund、Heikki Linnakangas 和 Álvaro Herrera 审阅。讨论: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 获取一条消息,以报告从远程服务器收到的错误。以前,如果它既不能从 PGresult 也不能从 PGconn 获取消息,它就会意外地报告空消息。此问题的原因是 pgfdw_report_error() 未正确处理无法获取任何消息的情况,并且其本地变量 message_primary 被设置为 '\0'。此提交改进了 pgfdw_report_error(),以便在它未获取到任何消息且 message_primary 设置为 '\0' 时报告“无法获取...”的消息。这与 message_primary 为 NULL 时的行为相同。dblink 中的 dblink_res_error() 存在相同的问题,因此此提交也以相同的方式改进了它。向所有支持的分支回填。作者:Fujii Masao 审阅者:Bharath Rupireddy 讨论: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() 在失败时告诉其调用者发生了什么问题(超时或连接错误),并使其调用者根据该信息报告适当的警告消息。作者:Fujii Masao 审阅者:Bharath Rupireddy 讨论: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 字符都将被问号替换。此提交将这些注释添加到文档中。作者:Hayato Kuroda 审阅者:Kyotaro Horiguchi、Fujii Masao 讨论: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 设置。这可以纠正这些遗漏。这应该会增加测试覆盖率,尤其是在 buildfarm 上。审阅者:Noah Misch 讨论:https://postgr.es/m/17093da5-e40d-8335-d53a-2bd803fc38b0@dunslane.net 回填到所有活动分支。https://git.postgresql.org/pg/commitdiff/edc2332550b2343bc9378540e11c8aa71f513a63
在尝试使用 tar 之前检查 tar 是否可用。提交 edc2332550 和 buildfarm 暴露的问题。回填到此用法开始的 14 版本。https://git.postgresql.org/pg/commitdiff/f920f7e799c587228227ec94356c760e3f3d5f2b
Revert "在尝试使用 tar 之前检查 tar 是否可用"。此更改撤销了提交 f920f7e799c587228227ec94356c760e3f3d5f2b。该补丁实际上修复了一个我们没有的问题,反而引起了另一个问题。回填到 14 版本,就像原始版本一样。讨论: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 中。问题似乎困扰我们很长时间,只引起了少数抱怨。提议的补丁更频繁地触发它,这导致了这次调查和修复。审阅者:Andres Freund andres@anarazel.de 审阅者:Alexander Lakhin exclusion@gmail.com 审阅者:Juan José Santamaría Flecha juanjo.santamaria@gmail.com 讨论:https://postgr.es/m/CA%2BhUKGJz_pZTF9mckn6XgSv69%2BjGwdgLkxZ6b3NWGLBCVjqUZA%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/e2f0f8ed251d02c1eda79e1ca3cb3db2681e7a86
将 ProcSendSignal() 更改为接受 pgprocno。代替按 pid 引用目标后端,使用 pgprocno。这意味着我们不必扫描 ProcArray,并且可以删除一些处理 startup 进程的特殊情况代码。讨论:https://postgr.es/m/CA%2BhUKGLYRyDaneEwz5Uya_OgFLMx5BgJfkQSD%3Dq9HmwsfRRb-w%40mail.gmail.com 审阅者:Soumyadeep Chakraborty soumyadeep2007@gmail.com 审阅者:Ashwin Agrawal ashwinstar@gmail.com 审阅者:Andres Freund andres@anarazel.de https://git.postgresql.org/pg/commitdiff/a13db0e16404ae532fe037071c7fe2576a1f8890
Alexander Korotkov 提交了
Andres Freund 提交
使 PG_TEST_USE_UNIX_SOCKETS 在 Windows 上对 tap 测试生效。我们需要将类 Windows 的 \ 路径分隔符替换为 /,在将其放入 postgresql.conf 或 libpq 连接字符串时,否则它们将被解释为转义字符。作者:Andres Freund andres@anarazel.de 审阅者:Peter Eisentraut peter.eisentraut@enterprisedb.com 讨论: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 手动执行了类似操作,现在可以删除。正如我们最近在其他测试基础设施改进中所做的那样,回填此更改,以方便回填测试。作者:Andres Freund andres@anarazel.de 审阅者:Michael Paquier michael@paquier.xyz 审阅者:Andrew Dunstan andrew@dunslane.net 讨论:https://postgr.es/m/20211211012052.2blmzcmxnxqawd2z@alap3.anarazel.de 回填:10-,以便于回填测试。https://git.postgresql.org/pg/commitdiff/3f323956128ff8589ce4d3a14e8b950837831803