本周人物:https://postgresql.life/post/markus_wanner/
PGroonga 2.2.7,一个适用于所有语言的全文搜索平台,已发布。https://pgroonga.github.io/
PostGIS 3.0.3,PostgreSQL 行业标准的地理信息系统软件包,已发布。https://postgis.net.cn/2020/11/20/postgis-3.0.3/
pgtt 2.2,一个用于实现全局临时表的扩展,已发布。https://github.com/darold/pgtt/releases/tag/v2.2
pgAdmin4 4.28,一个用于 PostgreSQL 的 Web 和原生 GUI 控制中心,已发布。https://www.pgadmin.org/docs/pgadmin4/dev/release_notes_4_28.html
pgbouncer 1.15.0,一个用于 PostgreSQL 的连接池工具,已发布。https://www.pgbouncer.org/2020/11/pgbouncer-1-15-0
pitrery 3.2,一组用于管理 PostgreSQL 的 PITR 备份的 Bash 脚本,已发布。http://dalibo.github.io/pitrery/
pg_statement_rollback v1.1,一个在语句级别添加具有回滚功能的服务器端事务的扩展,已发布。https://github.com/lzlabs/pg_statement_rollback/releases/tag/v1.1
http://archives.postgresql.org/pgsql-jobs/2020-11/
PostgreSQL 星球:http://planet.postgresql.org/
本周的 PostgreSQL 每周新闻由 David Fetter 为您带来
请在太平洋标准时间下午 3:00 前(PST8PDT)将新闻和公告提交至 david@fetter.org。
Tom Lane 推送
修复了关于 amcanmulticol 与 amcaninclude 的模糊思考。这些标志应该是独立的:特别是索引 AM 应该能够表示它支持包含列,而不必一定支持多个键列。包含列的补丁弄错了这一点,可能部分原因是它没有费心更新文档。在此期间,澄清了一些关于 amcanreturn 的文本,这些文本对于当 amcanreturn 报告只有部分索引列可以返回时应该发生什么有点含糊。在审查 SP-GiST 包含列的补丁时发现,该补丁完全不正确(且不安全地)更改了 SP-GiST,以声明 amcanmulticol = true 作为此错误的解决方法。向引入包含列的 v11 进行回溯。https://git.postgresql.org/pg/commitdiff/29d29d652f0be47dc42fa9d667dee5b8e1baa18a
在一个 ICU 函数调用中使用“true”而不是“TRUE”。这显然在提交 6337865f3 中被遗漏了,该提交通常将所有地方的 s/TRUE/true/ 都替换了。直到现在都没有引起注意,因为 ICU 68 之前的版本都提供了“TRUE”和“FALSE”的定义,无论如何。在 ICU 68 中,它无法编译。根据 Condor 的报告。回溯到 6337865f3 所在的 v11。(我没有测试过这个调用起源的 v10,但我认为它没有问题,因为我们当时在 c.h 中定义了 TRUE。)讨论:https://postgr.es/m/7a6f3336165bfe3ca66abcda7966f9d0@stz-bg.com https://git.postgresql.org/pg/commitdiff/ad84ecc98d7e2ad81567094b8a6910b5078927a7
不要在 satisfies_hash_partition() 的错误情况下返回 NULL。由于此函数用作 CHECK 约束条件,返回 NULL 等同于返回 TRUE,这将导致让不满足哈希条件的行进入。诚然,这种情况在实践中应该是无法达到的,但这并不会使其成为一个不好的主意。看起来也像是随意决定哪些错误情况应该抛出错误而不是返回 NULL。对于 NULL 输入值的检查,我只是将其切换为返回 false。有人认为错误会更好;但这种情况在生成的哈希约束中真的不应该发生,因此可能不值得为此编写更多代码。对于父关系打开失败的情况,似乎我们不妨让 relation_open 抛出一个错误,而不是出现一个无法诊断的约束失败。回溯到此代码所在的 v11。讨论:https://postgr.es/m/24067.1605134819@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/4025e6c46620048804467d2ad29d31aa9ba50387
在完全构建 VFD 条目之前,不要 Insert() 它。否则,如果启用了 FDDEBUG,调试输出会失败,因为它会尝试读取尚未设置的 fileName(实际上应该始终为 NULL)。据我所知,自从伯克利以来,这个就一直是错误的。在 96bf88d52 之前,它会在 snprintf() 对 %s 传递 NULL 指针时比较宽松的平台上意外地不会崩溃;但本来应该包含在调试输出中的文件名永远不会显示出来。由 Greg Nancarrow 报告和修复。尽管这仅在定制构建中明显出现问题,但它仍然值得回溯到所有支持的分支,因为 FDDEBUG 代码目前几乎没用。讨论:https://postgr.es/m/CAJcOf-cUDgm9qYtC_B6XrC6MktMPNRby2p61EtSGZKnfotMArw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/2bd49b493a52f0a21bc3fc51c355963f99ac1a4e
进一步修复 CREATE TABLE LIKE:处理自引用 FK。提交 502898192 在执行 expandTableLikeClause 生成的额外 ALTER TABLE 操作的顺序时过于粗心。它只是把它们都放在了最后,这对于大多数目的来说似乎没问题。但是,在 LIKE 导入主键或唯一索引,并且外部 CREATE TABLE 包括一个需要依赖该索引的 FOREIGN KEY 约束的情况下,它会失败。尽管这种情况很奇怪,但它过去可以工作,因此我们应该保持它正常工作。为了修复这个问题,让 parse_utilcmd.c 在转换后的命令列表中,在索引创建和 FK 创建命令之间插入 LIKE 子句,并更改 utility.c,以便立即执行 expandTableLikeClause 生成的命令,而不是在最后执行。可以想象会出现这种情况也无法工作的场景;但目前 expandTableLikeClause 只会生成列默认表达式、CHECK 约束和索引,并且这种排序对于这些情况似乎没问题。根据 Sofoklis Papasofokli 的错误 #16730。与之前的补丁一样,回溯到所有支持的分支。讨论:https://postgr.es/m/16730-b902f7e6e0276b30@postgresql.org https://git.postgresql.org/pg/commitdiff/97390fe8a6e96a153e59b0180f4303acaeb75b84
删除未记录的 IS [NOT] OF 语法。此功能是在很久以前,在 7c1e67bd5 和 eb121ba2c 中添加的,但从未以任何面向用户的方式进行记录。(在 6126d3e70 中添加的文档几乎立即在 8272fc3f7 中被注释掉。)这是因为,尽管此语法是由 SQL:99 定义的,但我们的实现仅与该标准的语义略有相关。该标准似乎旨在进行运行时而不是解析时测试,并且它肯定希望该测试能够理解子类型关系。在过去的几年里,没有人站出来修复这个问题,但是人们不断遇到代码并询问为什么它没有被记录。让我们把它删除吧:如果有人想按照规范使其工作,他们可以很容易地从我们的 git 历史中恢复此代码中仍然有价值的任何部分。如果有人实际上在没有文档的情况下使用此代码,他们可以改为使用 pg_typeof(),例如“pg_typeof(something) = 'mytype'::regtype”。这给出的语义与我们的 IS OF 代码所做的基本相同。(我们上次讨论时没有这个函数,否则我们当时就会删掉 IS OF。)讨论:https://postgr.es/m/CAKFQuwZ2pTc-DSkOiTfjauqLYkNREeNZvWmeg12Q-_69D+sYZA@mail.gmail.com 讨论:https://postgr.es/m/BAY20-F23E9F2B4DAB3E4E88D3623F99B0@phx.gbl 讨论:https://postgr.es/m/3E7CF81D.1000203@joeconway.com https://git.postgresql.org/pg/commitdiff/926fa801ac9eb54c5275472271ec63a059904698
在 macOS 上,在链接步骤以及编译步骤中使用 -isysroot。我们之前仅将 -isysroot 开关放入 CPPFLAGS 中,认为它仅需要查找正确的包含文件副本。但是,似乎我们在链接程序时也需要使用它,以查找正确的库存根 “.tbd” 文件。我们到目前为止还没有这样做,但显然这主要是运气。也可能是只有当 Xcode 版本与主机 macOS 版本明显不同步时才会观察到失败;目前提示采取行动的情况是在 macOS Catalina 上使用最新的 Xcode (12.2) 时构建失败,即使在 Big Sur 上它很好。因此,也将 -isysroot 添加到 LDFLAGS 中。(似乎更常见的做法是将其放入 CFLAGS 中,这样它将在编译和链接步骤中都包含在内。但是,我们不能在平台模板文件中更改 CFLAGS,而不混淆 configure 选择默认 CFLAGS 的逻辑。)这应该回溯,但首先让我们看看构建场是否喜欢 HEAD 上的它。由 James Hilliard 报告和修补(我做了一些外观上的修改)讨论:https://postgr.es/m/20201120003314.20560-1-james.hilliard1@gmail.com https://git.postgresql.org/pg/commitdiff/49407dc32a2931550e4ff1dea314b6a25afdfc35
稍微扩展几何回归测试用例。向“point_tbl”添加另一个边缘情况值,并为 line(point, point) 函数添加一个测试。这里暴露的一些行为是错误的,但是单独提交此代码的想法是为了纪念我们正在获得的内容,并允许更容易地检查由即将到来的补丁引起的行为更改。Kyotaro Horiguchi(由我添加的 line() 测试)讨论:https://postgr.es/m/CAGf+fX70rWFOk5cd00uMfa__0yP+vtQg5ck7c2Onb-Yczp0URA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/a45272b25d6fc8f96793623545fc1f836ac39d94
修复 FPeq() 及其相关函数,使其能正确处理无穷大。“FPeq(infinity, infinity)” 返回 false,原因是两个输入相减时得到 NaN。通过添加单独的精确相等性检查来修复此问题。FPle() 和 FPge() 在处理两个同号无穷大时也得到了错误的结果。在这些情况下,我们可以重新排列比较,以避免潜在的无穷大相减。虽然同类的函数 FPne() 等意外地给出了正确答案,即使内部结果为 NaN,但最好对它们进行类似的调整,以避免依赖这种情况。FPeq() 必须转换为内联函数,以避免对其参数进行双重评估,为了保持一致性,我对其他函数也做了同样的处理。顺便说一下,使 line_eq() 和 point_eq_point() 中对 NaN 情况的处理更简单、更易于理解,或许也更快。这导致只有一个可见的回归测试更改:slope() 现在对于 (inf,1e300) 的两个输入给出 DBL_MAX,这与它对 (1e300,inf) 的处理方式一致,因此这似乎是一个错误修复。讨论:https://postgr.es/m/CAGf+fX70rWFOk5cd00uMfa__0yP+vtQg5ck7c2Onb-Yczp0URA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/8597a48d01b6cc0b09ff626253ac93c67e5516d5
在 geo_ops.c 中,将无限斜率表示为 Infinity,而不是 DBL_MAX。既然我们现在假设使用 IEEE 浮点数,似乎没有理由不这样做。这样做的好处是,当由于存在 Inf 坐标而将斜率计算为无穷大时,我们从 line_construct() 获得的行为比以前更合理,从而在一些依赖操作(如查找最近点)中也是如此。同时修复 line_construct() 以特殊处理斜率为零的情况。之前的编码在大多数情况下得到了正确的答案,但当点具有 Inf 坐标时,它可能会将 C 计算为 NaN。讨论:https://postgr.es/m/CAGf+fX70rWFOk5cd00uMfa__0yP+vtQg5ck7c2Onb-Yczp0URA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/9fe649ea295f00baf6d0f0c1f9b0cb1298f64fb9
Michaël Paquier 推送了
放宽 CTAS 和 matviews WITH NO DATA 的 INSERT 权限要求。当指定 WITH NO DATA 时,不会向创建的关系中插入任何数据,因此跳过检查插入权限。使用 WITH DATA 或 WITH NO DATA 时,始终需要用户在关系的目标模式上具有 CREATE 权限。请注意,自 874fe3ae 以来,普通的 CREATE TABLE AS 或 CREATE MATERIALIZED VIEW 查询在没有 INSERT 权限检查的情况下意外开始工作,而使用 EXECUTE 或 EXPLAIN ANALYZE 将会因 ACL 检查而失败,因此这使得所有命令风格的行为彼此一致。这可以算作一个错误修复,但目前为止还没有人抱怨当前的行为,因此稳定分支不会更改。在此基础上,正确记录每个命令的权限要求,对所有可能的场景进行更多测试,并避免在使用 WITH NO DATA 时进行无用的批量插入分配。作者:Bharath Rupireddy 审阅人:Anastasia Lubennikova、Michael Paquier 讨论:https://postgr.es/m/CALj2ACWc3N8j0_9nMPz9wcAUnVcdKHzFdDZJ3hVFNEbqtcyG9w@mail.gmail.com https://git.postgresql.org/pg/commitdiff/846005e4f3829c3eafe1f8441b80ff90657d0a29
在 psql 中为 CREATE [OR REPLACE] TRIGGER 添加制表符补全。92bf7e2 已添加对此语法的支持。作者:Noriyoshi Shinoda 讨论:https://postgr.es/m/TU4PR8401MB115244623CF4724DCA0D507FEEE30@TU4PR8401MB1152.NAMPRD84.PROD.OUTLOOK.COM https://git.postgresql.org/pg/commitdiff/bf0aa7c4b83bcf3116c5a3c191bbc677ab3beb59
改进 pg_dump 中数组解析的失败检测。与 3636efa 类似,pg_dump 在解析目录中的数组值时进行的检查过于宽松。在内存压力下,有可能(尽管可能性很小)完成一些缺少数据的转储,例如: - 索引的统计信息 - 函数的运行时配置 - 扩展的配置 - 订阅的发布列表 由于这在实践中不会成为问题,因此没有进行反向移植。例如,如果 OOM 导致数组解析失败,则 pg_dump 的后续代码路径很可能会因内存压力而抱怨分配失败。作者:Michael Paquier 审阅人:Daniel Gustafsson 讨论:https://postgr.es/m/20201111061319.GE2276@paquier.xyz https://git.postgresql.org/pg/commitdiff/13b58f8934e6252868231c3493d49b8c2b363e5d
删除 CTAS 和物化视图在表创建时的 INSERT 权限检查。根据与 Peter Eisentraunt 的讨论,SQL 标准规定,作为 CREATE TABLE AS 的一部分进行的任何元组插入都不需要任何额外的 ACL 检查,因此在使用 WITH DATA 时保留对 INSERT 权限的检查毫无意义。物化视图不是标准的一部分,但类似地,此检查可能会令人困惑,因为它指的是在与将数据插入此表的命令相同的命令中创建的表的访问检查。此提交删除了对 WITH DATA(默认值)的 INSERT 权限检查,846005e 部分删除了此检查,但仅针对 WITH NO DATA。作者:Bharath Rupireddy 讨论:https://postgr.es/m/d049c272-9a47-d783-46b0-46665b011598@enterprisedb.com https://git.postgresql.org/pg/commitdiff/878f3a19c6c8ff197e4a33f51d921a4abafcc494
Alexander Korotkov 推送了
藤井正雄推送了
使备用服务器及时处理中断信号。此提交更改了备用服务器中的启动过程,以便它在闩锁上等待 wal_retrieve_retry_interval 并重置后处理中断信号,然后再进入另一个闩锁等待。此更改会导致备用服务器及时处理中断信号。否则,之前的情况是,当在启动过程等待闩锁上的 wal_retrieve_retry_interval 时收到关闭请求时,备用服务器需要额外等待 5 秒才能关闭。作者:藤井正雄,但实现想法来自 Soumyadeep Chakraborty 审阅人:Soumyadeep Chakraborty 讨论:https://postgr.es/m/9d7e6ab0-8a53-ddb9-63cd-289bcb25fe0e@oss.nttdata.com https://git.postgresql.org/pg/commitdiff/2945a488a3426838223a637cd326ec71fff61954
当 restore_command 成功但归档文件未能恢复时,发出日志。以前,当 restore_command 声称成功但未能恢复具有正确名称的文件时(例如,由于 restore_command 的配置错误),没有报告任何日志消息。然后,恢复稍后失败,并出现与该问题没有直接关系的错误消息。此提交更改了恢复,以便在这种错误情况下发出日志消息。这将使我们能够更容易地调查在这种情况下发生了什么。作者:Jeff Janes、藤井正雄 审阅人:Pavel Borisov、Kyotaro Horiguchi 讨论:https://postgr.es/m/CAMkU=1xkFs3Omp4JR4wMYWdam_KLuj6LXnTYfU8u3T0h=PLLMQ@mail.gmail.com https://git.postgresql.org/pg/commitdiff/a4ef0329c27156dca81714854599e7d82becb17f
Peter Eisentraut 推送了
删除处理已删除的已弃用包含运算符的代码。这会删除用于处理 2f70fdb0644c32c4154236c2b5c241bec92eac5e 删除的运算符的代码。讨论:https://postgresql.ac.cn/message-id/flat/20201027032511.GF9241@telsasoft.com https://git.postgresql.org/pg/commitdiff/591d282e8d3e0448ec1339c6b066e10953f040a2
标准化空语法规则中的注释。将小写 / empty / 更改为 / EMPTY /,以与大多数情况保持一致。讨论:https://postgresql.ac.cn/message-id/flat/e9eed669-e32d-6919-fed4-acc0daea857b%40enterprisedb.com https://git.postgresql.org/pg/commitdiff/5664b7be5b2c2e756372e7dde7c187a11a5ab701
从 BRIN 代码中删除未使用的和已弃用的策略编号。这些是死代码。讨论:https://postgresql.ac.cn/message-id/flat/20201027032511.GF9241@telsasoft.com https://git.postgresql.org/pg/commitdiff/d93ccdea1d447ab7e8c48797153ce58b051f1a37
为哈希和基于哈希的计划添加更多测试。 - 测试不可哈希元素类型的数组的哈希。 - 测试具有哈希和基于排序的计划的 UNION [DISTINCT]。(以前,只有 INTERSECT 和 EXCEPT 在那里进行了测试。) - 使用不可哈希列类型测试 UNION [DISTINCT]。即使启用 enable_hashagg,这目前也会恢复为基于排序的计划。 - 使用数组作为列类型测试 UNION/INTERSECT/EXCEPT 的哈希和基于排序的计划。还要测试具有不可哈希元素类型的数组。 - 使用行类型作为列类型类似地测试 UNION/INTERSECT/EXCEPT。目前,这仅使用基于排序的计划,因为行类型没有哈希支持。 - 添加一个测试用例,该用例表明使用 UNION [DISTINCT] 的递归查询需要可哈希的列类型。 - 添加一个当前失败的测试,该测试在使用行类型作为列类型的情况下,在循环检测用例中使用 UNION DISTINCT。讨论:https://postgresql.ac.cn/message-id/flat/38eccd35-4e2d-6767-1b3c-dada1eac3124%402ndquadrant.com https://git.postgresql.org/pg/commitdiff/6dd8b00807871bfd0c3ce8e18fd1f6ba1a71fbf9
行类型的哈希支持。为记录类型添加哈希函数,以及记录类型的哈希运算符族和运算符类。这为记录类型启用了所有哈希功能,例如用于 UNION/INTERSECT/EXCEPT DISTINCT 的基于哈希的计划,使用 UNION DISTINCT 的递归查询,哈希连接和哈希分区。审阅人:Tom Lane tgl@sss.pgh.pa.us 讨论:https://postgresql.ac.cn/message-id/flat/38eccd35-4e2d-6767-1b3c-dada1eac3124%402ndquadrant.com https://git.postgresql.org/pg/commitdiff/01e658fa74cb7e3292448f6663b549135958003b
重命名测试中的对象以避免冲突。在 01e658fa74cb7e3292448f6663b549135958003b 中,hash_func 测试创建了一个类型 t1,但显然并行运行的测试也可能会使用该名称,具体取决于时机。重命名该类型以避免此问题。https://git.postgresql.org/pg/commitdiff/afaccbba787d5f1470c44ddd61c9ddaaad19e27e
将宏替换为函数。使用宏在这里是不恰当的,也没有道理。讨论: https://postgresql.ac.cn/message-id/flat/4ad69a4c-cc9b-0dfe-0352-8b1b0cd36c7b@2ndquadrant.com https://git.postgresql.org/pg/commitdiff/b5acf10cfc63ed1e0bc4eef466c0f4670a725ef3
文档:改进 tableoid 的描述。提到它对于确定分区表以及继承层次结构中的表的表名很有用。作者:Ian Lawrence Barwick barwick@gmail.com 审阅者:Ashutosh Bapat ashutosh.bapat.oss@gmail.com 讨论: https://postgresql.ac.cn/message-id/flat/CAB8KJ=gFmBXP=P9htziOj+WM5PDAK4qc7iGQta+8kUh306kQnw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/a47834db0fb70256e676862f1d96374a9e114d82
Álvaro Herrera 推送了
修复拼写错误。在 90fdc259866e 中引入;向后移植到 12。作者:Erik Rijkers er@xs4all.nl 讨论: https://postgr.es/m/e92b3fba98a0c0f7afc0a2a37e765954@xs4all.nl https://git.postgresql.org/pg/commitdiff/bcbd7713324798d5a74ca640c6cf6c439bda22e4
将 PGPROC->vacuumFlags 重命名为 statusFlags。随着更多与 PGPROC 条目关联的标志(与 vacuum 无关,当前存在或计划存在),名称“statusFlags”更好地描述了其用途。(对镜像 PROC_HDR->vacuumFlags 做了同样的处理。)此提交中没有功能上的更改。Hari Babu Kommi 在 [1] 中首先提出,然后 Michael Paquier 在 [2] 中提出。[1] https://postgr.es/m/CAJrrPGcsDC-oy1AhqH0JkXYa0Z2AgbuXzHPpByLoBGMxfOZMEQ@mail.gmail.com [2] https://postgr.es/m/20200820060929.GB3730@paquier.xyz 作者:Dmitry Dolgov 9erthalion6@gmail.com 审阅者:Álvaro Herrera alvherre@alvh.no-ip.org 讨论: https://postgr.es/m/20201116182446.qcg3o6szo2zookyr@localhost https://git.postgresql.org/pg/commitdiff/cd9c1b3e197a9b53b840dcc87eb41b04d601a5f9
indexcmds.c:重新排列函数原型。... 也许是出于一种过度整洁的癖好。 https://git.postgresql.org/pg/commitdiff/7684b6fbed3a0770a0d8fdcbb5cf8b61394de691
放宽设置 PGPROC->statusFlags 的锁级别。我们实际上不需要锁来设置 PGPROC->statusFlags 本身;我们需要的是对 XidGenLock 或 ProcArrayLock 的共享锁,以确保在我们在 ProcGlobal->statusFlags 中修改镜像数组时,MyProc->pgxactoff 保持不变。一些地方为此使用了排他锁,这有点过分。放宽这些锁,仅使用共享锁。procarray.c 中有几个地方对 PGPROC 的更改有一些脆弱的假设:ProcArrayEndTransaction 仅使用共享锁,因此允许仅更改 MyProc。另一方面,ProcArrayEndTransactionInternal 也会更改其他进程,因此它必须持有排他锁。添加断言以确保这些假设继续成立。作者:Álvaro Herrera alvherre@alvh.no-ip.org 审阅者:Michael Paquier michael@paquier.xyz 讨论: https://postgr.es/m/20201117155501.GA13805@alvherre.pgsql https://git.postgresql.org/pg/commitdiff/27838981be9de35d54ffcdc6cc06b5d5ea9e0cee
Bruce Momjian 推送了
文档:改进有关分析表达式索引的必要性的措辞。这是对 3370207986 的后续提交。报告者:Justin Pryzby 讨论: https://postgr.es/m/20201112211143.GL30691@telsasoft.com 向后移植:9.5 https://git.postgresql.org/pg/commitdiff/481f9dc3dc2fc779af3ab2d58216a1c2b970b20f
文档:阐明如何在安装树中查找 pg_type_d.h。是对补丁 152ed04799 的后续操作。报告者:Alvaro Herrera 讨论: https://postgr.es/m/20201112202900.GA28098@alvherre.pgsql 向后移植:9.5 https://git.postgresql.org/pg/commitdiff/8ad06bcbe136360296a804da7d7631a78fd15e70
文档:更新 bgwriter 的描述。这明确了 bgwriter 的确切作用,这应该有助于调整。报告者:Chris Wilson 讨论: https://postgr.es/m/160399562040.7809.7335281028960123489@wrigleys.postgresql.org 向后移植:9.5 https://git.postgresql.org/pg/commitdiff/62b50ad698f8a789f92177ad72639f99d94d7d78
Amit Kapila 推送了
Peter Geoghegan 推送了
nbtree:重命名 nbtinsert.c 变量以保持一致性。停止在不适用的上下文中将特殊区域/不透明指针变量命名为“lpageop”。这是从一个逻辑分散在 _bt_insertonpg()、_bt_findinsertloc() 和 _bt_split() 的时代遗留下来的。“lpageop”表示“左页”,这在没有右页的上下文中没有意义。此外,在 _bt_insertonpg() 中预先获取页面标志变量。这使得它更接近于重构提交 bc3087b626d 之后的 _bt_split()。这允许页面分割和零售插入路径都使用相同的变量。 https://git.postgresql.org/pg/commitdiff/a034f8b60c6e9afd75f42dc420a76cb9d3875fcb
弃用 nbtree 的 BTP_HAS_GARBAGE 标志。简化我们必须在 nbtinsert.c 中避免页面分割的各种策略的处理。当看起来叶子页面即将溢出时,我们现在在一个中心位置执行删除 LP_DEAD 项和去重。这大大简化了 _bt_findinsertloc()。这有一个独立有用的结果:nbtree 不再依赖 BTP_HAS_GARBAGE 页面级标志/提示来处理任何重要的事情。我们仍然像以前一样设置和取消设置该标志,但在考虑是否应检查已设置的 LP_DEAD 位时,不再将其视为门控条件。这发生在页面看起来可能必须分割的情况下,因此顺便检查 LP_DEAD 位实际上是免费的。这避免了仅因为页面级提示未设置而错过 LP_DEAD 位,这可能相当常见(例如,当 VACUUM 取消设置页面级标志而不实际删除最近设置了 LP_DEAD 位的索引元组时,在 VACUUM 操作开始之后但在其到达所讨论的叶子页面之前)。请注意,与 PostgreSQL 13 相比,这并不是一个大的行为更改。在考虑执行去重传递之前,我们已经在检查是否设置了 LP_DEAD 位,而不管是否设置了 BTP_HAS_GARBAGE 页面级标志。此提交只是更进一步,对所有索引执行相同的检查,即使是不会执行去重的索引也是如此。我们不会完全删除 BTP_HAS_GARBAGE 标志。我们仍然依赖它作为来自 B 树版本 4/PostgreSQL 12 之前的 pg_upgrade 索引的门控条件。这很有意义,因为在插入带有版本 4 之前索引的元组时,我们有时必须在充满重复项的页面中做出选择。在那里避免访问页面的行指针数组可能仍然是值得的,因为目前尚不清楚我们是否会插入到所讨论的页面上,更不用说因此分割它了。作者:Peter Geoghegan pg@bowt.ie 审阅者:Victor Yegorov vyegorov@gmail.com 讨论: https://postgr.es/m/CAH2-Wz%3DYpc1PDdk8OVJDChGJBjT06%3DA0Mbv9HyTLCsOknGcUFg%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/cf2acaf4dcb5e20204dcec4d698cb4478af533e7
Heikki Linnakangas 推送了
文档:阐明信号函数没有反馈。Bug #16652 抱怨 pg_reload_conf() 返回 true,即使配置文件包含错误。这是 pg_reload_conf() 的工作方式,根据设计,但文档对此不是很清楚。阐明“true”返回值仅表示信号已成功发送。此外,添加可用于检查配置文件错误的系统视图的链接。David G. Johnston,经过我的一些措辞修改。讨论: https://postgresql.ac.cn/message-id/CAKFQuwax6GxhUQEes0D045UtXG-fBraM39_6UMd5JyR5K1HWCQ%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/dfab7f2f94812c6c3a62cfde0ec7f9e447132e64
在仅 EXPLAIN 模式下跳过分配哈希表。作者:Alexey Bashtanov 讨论: https://postgresql.ac.cn/message-id/36823f65-050d-ae24-aa4d-a37726998240%40imap.cc https://git.postgresql.org/pg/commitdiff/2cccb627f10d5dd4c21806fa251e4fb61eadd28c
使 pg_rewind 测试用例更稳定。如果由于某种原因复制速度异常慢,则 pg_rewind 可能会在测试行复制之前运行。为此添加显式等待。报告者:Andres Freund 讨论: https://postgresql.ac.cn/message-id/20201120003811.iknhqwatitw2vvxf%40alap3.anarazel.de https://git.postgresql.org/pg/commitdiff/c71f9a094b32770dcd34b9ba4909435e34583747
Thomas Munro 推送了
添加 BarrierArriveAndDetachExceptLast()。提供一种方法,使一个进程单独继续(先前)并行计算的其余阶段。稍后的补丁将使用它来扩展并行哈希连接。作者:Melanie Plageman melanieplageman@gmail.com 审阅者:Thomas Munro thomas.munro@gmail.com 讨论: https://postgr.es/m/CA%2BhUKG%2BA6ftXPz4oe92%2Bx8Er%2BxpGZqto70-Q_ERwRaSyA%3DafNg%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/7888b0999488511e4266f2134053fa3a6505a155
为 FreeBSD 添加排序规则版本。在 FreeBSD 13 上,使用 querylocale() 读取 libc 排序规则的当前版本。类似于 Windows 的提交 352f6f2d 和 GNU/Linux 的 d5ac14f9。讨论: https://postgr.es/m/CAEepm%3D0uEQCpfq_%2BLYFBdArCe4Ot98t1aR4eYiYTe%3DyavQygiQ%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/ca051d8b101d3205f1c5faf0d1da8a523ffc95a1
Magnus Hagander 推送了
鳥越 淳发送了另一个补丁修订版,以启用 pg_get_backend_memory_contexts() 来收集任意后端进程的内存上下文。以前,pg_get_backend_memory_contexts() 只能获取本地内存上下文。此补丁使可以获取由参数指定的 PID 的任意后端进程的内存上下文。
Tomáš Vondra 发送了两个补丁修订版,以支持表达式的扩展统计信息。
Seino Yuki 和 Fujii Masao 交换了补丁,以向 pg_stat_statements 扩展添加新的 pg_stat_statements_info 视图。
Jacob Champion 和 Daniel Gustafsson 交换了补丁,以支持 NSS 作为 libpq 的 TLS 后端。
Alexandra Pervushina 发送了另外两个补丁修订版,以使异步副本可以等待重放 lsn。
Álvaro Herrera 和 Dmitry Dolgov 交换了补丁,以从 CREATE INDEX CONCURRENTLY 中删除伪等待。
Thomas Munro 发送了两个补丁修订版,以跟踪共享内存中的关系大小,并为 smgrnblocks() 提供无锁快速路径。
Masahiro Ikeda 发送了另一个补丁修订版,以添加 track_wal_io_timing GUC 和一个匹配的 pg_stat_wal 视图以支持它。
Li Japin 发送了另外四个补丁修订版,以使可以使用新的 GUC idle_session_timeout 终止空闲会话,并在传递中减少调用 setitimer() 的次数。
Masahiko Sawada 和 Bertrand Drouvot 交换了补丁,以在备用恢复冲突期间添加信息,并由新的 GUC log_recovery_conflict_waits 控制。
大隅孝道提交了两个补丁的修订版本,使得在数据加载期间可以禁用 WAL 日志记录。
Simon Riggs 提交了五个补丁的修订版本,以修复 `DISABLE_PAGE_SKIPPING` 的文档行为与当前行为不匹配的情况。
Ajin Cherian 和 Amit Kapila 交换了补丁,以实现两阶段事务的逻辑解码。
山田達郎提交了两个补丁的修订版本,以添加用于扩展统计信息的 psql 命令 `\dX`。
Daniel Gustafsson 提交了另一个补丁的修订版本,以支持在运行中的集群中启用和禁用页面校验和。
Justin Pryzby 提交了一个补丁,允许在引导程序中使用复合类型,并向 `pg_statistic_ext_data` 添加一个列 `stxdexpr`。
Peter Geoghegan 提交了另一个补丁的修订版本,以删除唯一索引中的旧版本,从而避免页面分裂。
Heikki Linnakangas 提交了另一个补丁的修订版本,将 `copy.c` 分割为四个文件:`copy.c`,现在包含 `COPY FROM` 和 `COPY TO` 共用的函数;`copyto.c`,包含 `COPY TO` 的代码;`copyfrom.c`,包含初始化 `COPY FROM` 和将元组路由到正确表的代码;以及 `copyfromparse.c`,包含从客户端/文件/程序读取数据,并将输入的文本/CSV/二进制格式解析为元组的代码。
David G. Johnston 提交了另一个补丁的修订版本,以澄清信号函数没有反馈的事实。
Simon Riggs 提交了一个补丁,添加了一个 `wal_sessioninfo` GUC,当启用时,它会将有关用户会话的信息添加到每个提交或中止记录中。
David G. Johnston 提交了一个补丁,以澄清 libpq 中批处理/管道支持的文档。
Dean Rasheed 提交了另一个补丁的修订版本,以改进 OR 子句的估计。
Heikki Linnakangas 提交了一个补丁,使 `ResourceOwner` 实现更高效,并向外部代码公开更方便的接口。
Aleksey Kondratov 提交了一个补丁,向 PostgreSQL FDW 添加一个自定义 GUC,以控制它是否尝试保持连接,其名称令人惊讶地为 `keep_connections`。
高行俊介 (Takayuki Tsunakawa) 和 Tomáš Vondra 交换了补丁,以实现 PostgreSQL FDW 的 INSERT 批处理。
Justin Pryzby 和 Pavel Stěhule 交换了补丁,向 pg_dump 添加了一个 `--filter` 选项,该选项从一个指定要使用的过滤器的文件中提取信息,并使参数解析既可以用于命令行,也可以用于如此描述的文件。
Bharath Rupireddy 提交了另一个补丁的修订版本,在 autoprewarm 模块中使用标准的 SIGHUP 和 SIGTERM 处理程序。
藤田悦朗提交了另一个补丁的修订版本,以在 postgres_fdw 节点上启用异步追加。
Tomáš Vondra 提交了一个补丁,修复了一个错误,该错误表现为增量排序通过向 `get_useful_pathkeys_for_relation()` 添加 `is_parallel_safe` 检查来更改查询行为。
David Pirotte 提交了另一个补丁的修订版本,以在流式传输时向消息添加 xid,并向 pgoutput 输出插件添加一个 "messages" 选项。当 "messages" 为 true 时,逻辑解码消息(即通过 `pg_logical_emit_message` 生成的消息)将被发送到槽消费者。
Junfeng (Jerome) Yang 提交了另一个补丁的修订版本,通过更改 `vac_update_datfrozenxid()` 从磁盘堆表而不是系统缓存中获取当前数据库的 `pg_database` 元组的源,来修复使用 `pg_database` toast 属性的 vacuum freeze。
Dmitry Dolgov 提交了一个补丁,以防止在 `ArrayExpr` 中混淆每个元素。这样做的动机是,`pg_stat_statements` 会为诸如 `SELECT something FROM table WHERE col IN (1, 2, 3, ...)` 之类的查询生成多个条目,具体取决于参数的数量,因为 `ArrayExpr` 的每个元素都被混淆了。如果 Consts 是系列的一部分并且位于指定的阈值之外的位置,则不对混淆哈希做出贡献。对于带有 VALUES 的类似查询也执行相同的操作。
Thomas Munro 提交了另一个补丁的修订版本,以实现 WAL 预取。
Andrew Dunstan 提交了另一个补丁的修订版本,允许匹配来自客户端证书的整个 DN。
Pavel Stěhule 提交了两个补丁的修订版本,为 PL/pgsql 添加参数和局部变量引用的简写。
鳥越敦史提交了两个补丁的修订版本,以记录用于创建缓存计划的统计信息在更新时,缓存计划会失效的事实。
鳥越敦史提交了两个补丁的修订版本,以更新 PREPARE 文档,以说明 `pg_prepared_statements` 现在显示在当前会话中,每个预准备语句累计选择通用计划和自定义计划的次数。
Vigneshwaran C 提交了另一个补丁的修订版本,以并行化 COPY。
Thomas Munro 提交了另一个补丁的修订版本,以最大限度地减少闩锁信号。
Masahiro Ikeda 提交了另一个补丁的修订版本,以向 `pg_stat_wal` 视图添加有关 wal 相关参数调整的统计信息。
Craig Ringer 提交了一个补丁,以检测并报告何时由于调用者已持有 LWLock 而导致 `LWLockAcquire()` 产生简单的自死锁。
Craig Ringer 提交了一个补丁,以从 `LWLockWaitForVar` 中删除虚假的 `lwlock__acquire` 跟踪点,将目标 `LWLock*` 和 tranche ID 传递给 LWLock 跟踪点,并添加到 LWLock 例程中的跟踪点。
Heikki Linnakangas 提交了另一个补丁的修订版本,将 `peragg` 和 `pertrans` 重复查找移至 `prepagg.c`。
Craig Ringer 在上述资源所有者重构补丁之上提交了一个补丁,该补丁添加了一些 systemtap/dtrace 跟踪点,并提供了一个演示 systemtap 脚本,该脚本显示了使用它们完成的一些基本统计信息收集。
Surafel Temesgen 提交了另一个补丁的修订版本,以实现系统版本化的时态表。
Justin Pryzby 提交了两个补丁的修订版本,以避免 brin 汇总中的错误,如果索引同时重新索引,则可能会发生这些错误。
李佳品提交了一个补丁,使用宏来计算 LWLock 偏移量。
堀口京太郎提交了另一个补丁的修订版本,以实现 CatCache 过期。
Peter Eisentraut 提交了另一个补丁的修订版本,以支持使用符合 SQL 标准的函数体,为语言 SQL 编写 CREATE FUNCTION 和 CREATE PROCEDURE 语句。
Greg Nancarrow 提交了另一个补丁的修订版本,以在安全的情况下,为“INSERT INTO ... SELECT ...”启用并行 SELECT,以及为“INSERT INTO ... SELECT ...”启用并行 INSERT 和/或 SELECT。
Amit Langote 提交了一个补丁,也在分区表中创建外键触发器,以便允许后续的提交在某些情况下使用父表触发器而不是分区的触发器来触发外键相关事件,并在跨分区更新期间正确强制执行外键。
Laurenz Albe 提交了另一个补丁的修订版本,以将会话统计信息添加到 `pg_stat_database`。
Justin Pryzby 提交了另一个 pg_restore 的补丁的修订版本,以便它单独解析并运行 SQL 命令,并允许即使父表不存在或缺少/不兼容的列,也可以独立恢复子分区。
Peter Eisentraut 提交了另一个补丁的修订版本,以暂停恢复以应对不充分的参数设置。
Peter Eisentraut 提交了另一个补丁的修订版本,以添加对抽象 Unix 域套接字的支持,并通过仅在 `errno == EADDRINUSE` 时才显示提示来使 `bind()` 失败的错误提示更准确。
Matthias van de Meent 提交了一个补丁,以修复 CLUSTER 扫描的块数的进度报告。
Stephen Frost 提交了一个补丁,以将有些不准确的“默认角色”术语替换为更精确的“预定义角色”。
Erik Rijkers 在添加架构教程章节的补丁之上提交了一个补丁,以修复一些拼写错误并进行其他文字润色。
Bharath Rupireddy 提交了另一个补丁的修订版本,以避免在 CTAS 和 MatView 中检查 INSERT 权限,以便符合标准。
Gilles Darold 提交了两个补丁的修订版本,添加一个钩子,供插件在 `AbortCurrentTransaction` 结束时获得控制权,并添加一个扩展来启用基于同一级别的语句级回滚。
Krasiyan Andreev 提交了另一个补丁的修订版本,以实现窗口函数的 `<null treatment>`。
Álvaro Herrera 提交了一个补丁,修复了 `pageinspect` 中的一个错误,当页面严重损坏时,该错误表现为类似 “错误:无效的内存分配请求大小 18446744073709551451” 的消息。修复方法是不尝试打印数据,而是直接终止。
Justin Pryzby 提交了另一个补丁的修订版本,以淘汰 `pg_standby`。
Michaël Paquier 提交了两个补丁的修订版本,以删除 `currtid()` 和 `currtid2()`,在此过程中清理了一些表 AM。
James Coleman 提交了一个补丁,以强制在 `generate_useful_gather_paths` 中路径键的并行安全性,并确保 `generate_useful_gather_paths` 不会跳过未排序的子路径。
Vigneshwaran C 提交了一个 PoC 补丁,该补丁可以使通过连接到服务器来获取 PostgreSQL 进程的调用堆栈成为可能。
Tom Lane 提交了一个补丁,使“无法插入”消息更精确地说明原因是非默认值永远无法插入的事实。