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
PostgreSQL 的 DB Comparer 5.0 已发布。
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/
北欧 PGDay 2022 将于 2022 年 3 月 22 日在芬兰赫尔辛基的希尔顿赫尔辛基海滩酒店举行。征稿截止日期为 2021 年 12 月 31 日,点击此处
Planet PostgreSQL:https://planet.postgresql.org/
本周 PostgreSQL 每周新闻由 David Fetter 带给您
请在太平洋标准时间下午 3:00 前(PST8PDT)将新闻和公告发送至 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() 的兼容性错误。GetFinalPathNameByHandleA() 不能在 _WIN32_WINNT < 0x0600 的编译环境中使用,这意味着 Postgres 仍然需要支持 MinGW 下的一些构建场成员使用的至少 Windows XP。构建场将此报告为编译警告,但实际上比报告更糟糕,因为代码将无法工作。相反,这将切换到 GetFileInformationByHandle(),它能够对标准流失败,对重定向的流成功,这正是我们在代码中模拟 fstat() 时所寻找的。我们还知道它能够在所有仍然支持的环境中工作,这要归功于 win32stat.c 的现有逻辑。问题由 10260c7 引入,因此回溯到 14。报告人:Justin Pryzby,通过构建场成员 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,导致在使用与默认值不同的值时,它不会像其他规划器级别的 GUC 一样列在 EXPLAIN (SETTINGS) 的输出中。- 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 和策略的 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 和构建场代码在执行跨版本升级测试时,都保存着同一组 SQL 查询,以调整升级前由回归测试创建的对象(主要是,需要从源中删除不兼容或不存在的对象,可能需要重新创建)。这会将所有这些 SQL 查询移动到一个新的单独文件中,并使用一组 \if 子句来处理版本检查,具体取决于要升级的旧集群的版本。长期计划是使构建场代码重新使用这个新的 SQL 文件,以便提交者能够通过刷新核心代码来修复 pg_upgrade 测试中的任何兼容性问题,而无需在构建场客户端中进行修改。请注意,这只能处理主要的回归测试套件,并且尚未对 contrib 模块执行任何操作(这些模块有更多问题,例如其数据库名称)。回溯到 10,并调整版本检查,因为此脚本只需要向后兼容,以便尽可能多地清理构建场客户端中的代码。作者: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
修复使用 REINDEX CONCURRENTLY 时 TOAST 索引的损坏问题。在 TOAST 索引或 TOAST 关系上运行 REINDEX CONCURRENTLY 可能会损坏重建的目标索引,因为并行运行的、操作 TOAST 值的后端会在其本地操作完成后直接释放 TOAST 关系上的锁,而不是在操作 TOAST 值的事务提交后才释放锁。 此处所做的修复很简单:我们现在在保存或删除 TOAST 值时,会在 TOAST 关系上持有 ROW EXCLUSIVE 锁,直到处理它们的事务提交,这样并行发生的并发 reindex 就能等待任何活动并看到任何新插入(或删除)的行。 添加了一个隔离测试来检查此处修复的情况,该测试的设计有点特别,因为它依赖于 allow_system_table_mods 来将 TOAST 表及其索引重命名为固定名称。这样,就可以直接重新索引它们,而无需依赖底层关系的 OID。请注意,这也不能使用 DO 块,因为 REINDEX CONCURRENTLY 不能在事务块中运行。该测试已向下移植到 13,在那里,由于 c4a7a39,可以在测试套件中使用 allow_system_table_mods。报告者: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() 的调用者不再需要将 SubOpts 清零,它持有所提供选项的位图以及默认/已解析的选项值。这还简化了一些与命令支持的选项相关的检查,以检查不兼容性。在此过程中,重新排列了为“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 和时间戳来标记源,这将额外添加到事务提交或中止(包括 2PC 事务)的 WAL 中。 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 是一个问题),这可能会在没有退出路径来绕过任何失败的测试的情况下破坏测试。此提交更改了默认值,以便在加载 buildenv.pl 之前分配 LZ4、TAR 和 GZIP_PROGRAM 的默认值,而不是之后分配。这样,我们保持了与具有相同默认值的 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 中引入,在 hacking 该区域时注意到。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,由 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 宏,以便可以无条件地使用它。这可以工作,因为在前端代码中,对于从这些库导出的变量,我们不需要在定义或使用文件中进行任何标记;并且前端代码也不需要访问从核心后端导出的变量。在此过程中,编写一些关于 PGDLLIMPORT 和 PGDLLEXPORT 宏的实际文档。我的补丁,基于 Robert Haas 的建议。 讨论:https://postgr.es/m/1160385.1638165449@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/e04a8059a74c125a8af94acdcb7b15b92188470a
文档:改进关于物化视图中 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 值得修复,因为对于大多数非表对象类型,它不会占用任何锁。)向所有受支持的分支进行反向移植。不幸的是,在反向分支中,这仅在有限程度上有所帮助,因为 sinval 消息队列在此用法中在提交 3aafc030a 之前膨胀得相当严重,消耗的内存或多或少与实际泄漏的内存相当。尽管如此,这显然是一个可以通过简单修复来解决的泄漏,所以我们不妨修复它。Justin Pryzby,根据 Guillaume Lelarge 的报告 讨论:https://postgr.es/m/CAECtzeW2DAoioEGBRjR=CzHP6TdL=yosGku8qZxfX9hhtrBB0Q@mail.gmail.com https://git.postgresql.org/pg/commitdiff/babe545caeba4c62feb3030940d93432721eea57
添加 configure 探针以检测 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 的辅助数据收集查询。当转储标志变成位掩码时,该优化被破坏了,因为不相关的位在许多情况下往往会保持设置状态。由于“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 命令(包括删除其他会话的临时表),则现有的编码存在严重的失败风险。可以认为这是一个应该反向移植的错误修复,但它具有一定的侵入性,并且我们没有收到太多关于此类故障的投诉。现在让我们把它放在 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 数据的情况下,我们可能会做出较差的调度决策。为了解决这个问题,也添加了 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()。进一步的实验表明,在使用(某些版本的?)OpenSSL 时,提交 6051857fc 不够充分。原因很模糊,但调用 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,也被分配了 S 类型类别,这意味着它们也获得了本应针对可以保存任意文本的类型而设计的优先类型转换处理。为了解决这个问题,我们为内部使用的类型发明了一个新的类别 TYPCATEGORY_INTERNAL,并将所有这些类型分配到该类别。我使用代码 'Z' 是因为没有更好的想法了('I' 已经被占用)。此更改破坏了 psql/describe.c 中的一个查询,该查询现在需要在将目录 “char” 列与未修饰的文字连接之前,显式地将其转换为文本。此外,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 的存根函数。由于这种情况已经持续了 20 多年,显然人们对填充这些存根函数兴趣不大。但是,我对于删除 poly_distance() 感到不舒服,因为其他所有的几何类型都支持一个计算与相同类型另一个对象的距离的函数。我们可以通过借鉴 poly_overlap() 和 path_distance() 轻松地添加此功能。这种情况可能会导致(现有的)测试用例显示一些数值不稳定,但如果出现这种情况,希望构建农场可以将其暴露出来。顺便说一句,改进文档以尝试解释为什么多边形首先与封闭路径不同。讨论: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
删除未实现/未文档化的几何函数和运算符。没有人填充这些存根函数超过 20 年,所以现在是时候放弃它们可能在任何一天被实现的设想了。相关的 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 条目时,这才会产生影响,这种情况似乎不太可能发生。不过,这是一个理论上的 bug,因此将其向后移植到 v13,其中出现此拼写错误(在提交 c02fdc922 中)。顺便说一句,还使 swap_nodes() 使用一致的数据类型。马良柱。讨论:https://postgr.es/m/17336-fc4e522d26a750fd@postgresql.org https://git.postgresql.org/pg/commitdiff/2de3c1015cb2556af501c630b1768a20f111fe95
改进 binaryheap.c 和 logtape.c 中的上浮/下沉代码。借鉴 tuplesort.c 中长期使用的逻辑:不要物理地交换两个堆条目中的数据,而是将正在上浮或下沉的值保存在局部变量中,并仅在必要时移动其他值。这使得代码更短,也更快。目前尚不清楚是否有任何当前的调用者足够时间敏感到会注意到这一点,但我们不妨在所有地方都以相同的方式编写堆维护代码。马良柱和 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 的调用者依赖于他们可能不应该依赖的类型缓存行为细节。因此,更改 API 规范以说明必须调用 ReleaseTupleDesc,并修复了六个没有这样做的调用者。AFAICT 这只是为了未来做好准备,这里没有实际的 bug。所以不进行向后移植。根据 Chapman Flack 的抱怨。讨论:https://postgr.es/m/61B901A4.1050808@anastigmatix.net https://git.postgresql.org/pg/commitdiff/bbc227e951ecc59a29205be4952a623e7d1dd534
清理 pg_dump 和 pg_upgrade 中更多新近的死代码。正如 Justin Pryzby 所指出的那样,我在 30e7c175b 和 e469f0aaf 中遗漏了一些东西。讨论: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 ...我们真的不应该将这种类型的更改放入几乎 EOL 的分支中。讨论:https://postgr.es/m/CAFBsxsEfbFHEkouc+FSj+3K1sHipLPbEC67L0SAe-9-da8QtYg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/9c356f4b2dd8f8ff49757287e387ab1d023e4449
在单独的测试脚本中修复公共模式的权限。在提交 b073c3ccd 之后,为了使许多核心回归测试脚本通过,必须向 PUBLIC 授予在公共模式上的创建权限。该提交通过在首先运行的表空间测试中添加 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 简化了 VACUUM 中将一个项视为“死亡”的含义:内存中收集的 TID(为索引清理做准备)必须始终来自堆页面中的 LP_DEAD 存根行指针,这是在修剪后发现的。这正式确定了索引清理(和堆清理)是可选过程的概念。与修剪不同,它们可以无限期地延迟,而不会有任何违反基本不变量的风险。例如,留下 LP_DEAD 项显然不会增加事务 ID 回绕的风险。没有事务 ID 就不会发生事务 ID 回绕。重命名任何引用 DEAD 元组(具有存储的元组)的内容会加强所有这些。vacuumlazy.c 之外的代码继续混淆死亡/已删除元组和 LP_DEAD 项之间的区别。这是必要的,因为自动清理的调度仍然主要由“死亡项/元组”统计数据驱动。未来,我们可能会发现用更复杂的东西替换此模型很有用,这是朝着教导自动清理执行更频繁的清理迈出的一步,目标是那些恰好更容易因版本变动而变得臃肿的单个索引。顺便说一句,简化一些处理 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: 修复剩余的“死亡元组”引用。提交 4f8d9d12 中的疏忽。报告人:Masahiko Sawada sawada.mshk@gmail.com 讨论: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 添加的“删除叶页引脚”优化的讨论干净地分开。我们现在通过描述单个索引扫描如何安全地选择不应用标准锁定协议(从而避免阻止 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() 来重置单个订阅错误。此视图的内容可以由即将到来的补丁使用,该补丁会跳过与订阅者现有数据冲突的特定事务。未来可以扩展此视图,以跟踪其他与 xact 相关的统计信息,例如订阅工作进程的已提交/已中止的 xact 数量。作者: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
文档:在逻辑复制期间添加“附加分区”限制。将表 ATTACH 到使用 publish_via_partition_root 设置为 true 的发布发布的 partition tree 中,不会导致该表的现有内容被复制。发生这种情况是因为订阅者不考虑复制新附加的分区,因为根表已处于“就绪”状态。此行为在 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 工作进程。顺便说一句,从创建订阅命令中删除无害的选项“streaming = off”,因为这无论如何都是默认值。每个构建场成员 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
修复更改 SCHEMA 中所有表发布的所有权的问题。确保 SCHEMA 中所有表的发布的新所有者必须是超级用户。在创建发布期间已经确保了这一点。作者: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
改进并行清理实现。以前,在并行清理中,我们仅为并行索引清理安全的索引分配 IndexBulkDeleteResult 的 shmem 区域,并且在 shmem 区域中具有 null 位图以访问它们。这种逻辑太复杂了,每个索引仅节省几位的收益很小。在此提交中,我们为 LVParallelIndStats 数组分配了一个专用的 shmem 区域,其中包含并行安全标志、索引清理状态和 IndexBulkdeleteResult。每个索引都有一个数组元素,即使是那些并行索引清理不安全或不值得的索引。此提交通过删除所有与位图相关的代码使代码清晰。此外,在并行索引清理后添加检查每个索引清理状态,以确保已处理所有索引。最后,将并行清理函数重命名为 parallel_vacuum_* 以保持一致性。作者:Masahiko Sawada,基于 Andres Freund 的建议 审阅人:Hou Zhijie、Amit Kapila 讨论:https://postgres.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 测试套件都使用提供的测试密钥的临时副本,以确保正确的权限。然而,这些密钥是被复制到树内的临时文件名中,而不是真正的临时文件夹。通过使用 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
从通用用途的变量中删除 PF_USED_FOR_ASSERTS_ONLY。process_pending_requests (在 postgres_fdw.c 中) 中的 fsstate 在 8998e3cafa2 中被添加为仅用于断言的变量,而 1ec7fca8592 表示在断言之外使用该变量。get_index_column_opclass (在 lsyscache.c 中) 中的 rd_index 在 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
扩展私钥状态检查错误处理。如果对私钥的 stat 操作失败,代码会假设这是由于 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 都用于客户端证书吊销,而不是服务器证书。然而,参数的描述很容易被误读为相反的意思,这从导致此修复的错误报告中可以看出。类似地,扩展 sslcrl 和 sslcrldir 以明确提及服务器证书。同时,在之前只讨论 sslcrl 的地方提及 sslcrldir。向下回溯到 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 索引。当确定是否可以通过使用 HOT 跳过索引更新时,我们可以忽略仅由 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
将 bool 添加到 btree_gist 文档中。提交 57e3c516 将 bool opclass 添加到 btree_gist,但更新文档中的数据类型列表以反映此更改。由 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
在使用扩展保留的前缀设置不存在的设置时发出警告。扩展可以使用 EmitWarningsOnPlaceholders() 实际保留 GUC 前缀。但这仅针对在加载扩展时存在的设置进行检查(或者扩展选择调用此函数时)。当 SET 命令稍后使用带有自定义前缀的不存在的设置时,不会给出诊断。通过此更改,EmitWarningsOnPlaceholders() 将其保留的前缀保存在列表中,并且 SET 在找到“占位符”设置时检查它是否属于保留的前缀,并在这种情况下发出警告。添加一个回归测试,该测试使用“plpgsql”注册的前缀检查补丁。作者:Florin Irion florin.irion@enterprisedb.com 讨论:https://postgres.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://postgres.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://postgres.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() 中检查了哪些 relkind 可以有父级,并且这些条目在此之后将具有 numParents == 0。但在讨论之后,感觉此位置应与 flagInhTables() 和 flagInhAttrs() 保持一致。由 Michael Paquier michael@paquier.xyz 审查。讨论:https://postgres.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://postgres.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://postgres.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://postgres.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 包含在所有表的主键中,但不应设置为 null。作者:Paul Martinez paulmtz@google.com 讨论:https://postgres.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://postgres.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)生产系统往往会由于连接尝试失败、应用程序活动生成的错误消息等而在日志中有更多垃圾。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 和 doPageWrites,但这并不重要,因为所有使用它们的代码如果发现它们已更改,将只会重试。唯一的区别是,现在大多数代码将看到一个绝对无效的初始值,而不是一个可能只是过时的值,但这只会发生在每个后端生命周期中一次,因此应该没什么大不了的。由我提交的补丁,由 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 获取消息,以报告从远程服务器收到的错误。以前,如果它无法从它们中的任何一个获取消息,它会意外地报告空消息。此问题的原因是 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 没有设置它们。这弥补了这些遗漏。这应该会增加测试覆盖率,尤其是在构建场上。由 Noah Misch 审查 讨论:https://postgr.es/m/17093da5-e40d-8335-d53a-2bd803fc38b0@dunslane.net 反向移植到所有实时分支。https://git.postgresql.org/pg/commitdiff/edc2332550b2343bc9378540e11c8aa71f513a63
在尝试使用 tar 之前检查我们是否有一个可用的 tar。提交 edc2332550 和构建场暴露的问题。反向移植到此用法开始的 14 版本。https://git.postgresql.org/pg/commitdiff/f920f7e799c587228227ec94356c760e3f3d5f2b
恢复“在尝试使用 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,并且可以删除一些用于处理启动进程的特殊情况代码。讨论: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 测试时工作。我们需要在将套接字目录放入 postgresql.conf 或 libpq 连接字符串时,将 Windows 样式的 \ 路径分隔符替换为 /,否则它们会被解释为转义符。作者: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。在编写/调试隔离测试时,有时查看哪个会话持有哪个锁等信息很有用。为了使它更容易,无论是作为规范文件的一部分还是交互式地使用,将会议名称附加到 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