本周人物: 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/
Planet PostgreSQL: http://planet.postgresql.org/
本周 PostgreSQL 周报由 David Fetter 提供。
请在太平洋标准时间(PST8PDT)周日晚上3:00之前将新闻和公告发送至 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,而 fileName 尚未设置(实际上应该始终为 NULL)。据我所知,自 Berkeley 以来一直如此。在 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:处理自引用外键。提交 502898192 在 expandTableLikeClause 生成的附加 ALTER TABLE 操作的执行顺序方面过于粗心。它只是将它们全部放在最后,这在大多数情况下似乎都可以。但在 LIKE 导入主键或唯一索引,并且外部 CREATE TABLE 包含需要依赖该索引的外键约束的情况下,它会失败。尽管这很奇怪,但它曾经有效,所以我们应该保持它有效。为了修复,将 parse_utilcmd.c 中的 LIKE 子句插入到转换后的命令列表中索引创建和外键创建命令之间,并更改 utility.c,以便 expandTableLikeClause 生成的命令立即执行,而不是在最后。人们可能会想象这种情况也不会起作用;但目前 expandTableLikeClause 只创建列默认表达式、CHECK 约束和索引,并且此排序对它们来说似乎是好的。根据 Sofoklis Papasofokli 的 bug #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) 的处理一致,因此这似乎是一个 bug 修复。讨论: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 权限。请注意,纯 CREATE TABLE AS 或 CREATE MATERIALIZED VIEW 查询自 874fe3ae 起已经偶然地在没有 INSERT 权限检查的情况下工作,而使用 EXECUTE 或 EXPLAIN ANALYZE 会因 ACL 检查而失败,因此这使得所有命令类型的行为彼此一致。这可以被认为是一个 bug 修复,但到目前为止没有人抱怨当前的行为,所以稳定分支没有改变。同时,更充分地记录每个命令的权限要求,并为所有可能的场景添加更多测试,并避免在 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 和 matview 表创建时的 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 提交了
Fujii Masao 提交
使备用服务器及时处理中断信号。此提交更改了备用服务器中的启动过程,使其在锁存器上等待 wal_retrieve_retry_interval 并重置它之后,然后在进入另一个锁存器等待之前处理中断信号。此更改使备用服务器能够及时处理中断信号。否则,先前,当关闭请求到达时,备用服务器可能需要额外等待五秒才能关闭,而此时启动过程正在锁存器上等待 wal_retrieve_retry_interval。作者:Fujii Masao,但实现思路来自 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 配置错误),不会报告任何日志消息。然后恢复 later 会因一个与问题不直接相关的错误消息而失败。此提交更改了恢复过程,以便在此错误情况下发出日志消息。这将使我们能够更容易地调查在这种情况下发生了什么。作者:Jeff Janes, Fujii Masao 审阅者: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@enterprisedb.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@2ndquadrant.com https://git.postgresql.org/pg/commitdiff/6dd8b00807871bfd0c3ce8e18fd1f6ba1a71fbf9
为行类型添加哈希支持。为 record 类型添加哈希函数以及 record 类型的哈希运算符族和运算符类。这使得 record 类型的所有哈希功能成为可能,例如 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@2ndquadrant.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
doc:改进 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。由于与 vacuum 无关的更多标志(当前存在或计划中)与 PGPROC 条目相关联,因此“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 的共享锁,以确保 MyProc->pgxactoff 在我们修改 ProcGlobal->statusFlags 中的镜像数组时保持不变。一些地方为此使用了排他锁,这是不必要的。将它们放宽为仅使用共享锁。procarray.c 中有几个地方对 PGPROC 更改做了一些脆弱的假设:ProcArrayEndTransaction 只使用共享锁,因此只能修改 MyProc。另一方面,ProcArrayEndTransactionInternal 也修改其他 proc,因此它必须持有排他锁。添加断言以确保这些假设继续成立。作者:Á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 已推送
doc:改进 exp. indexes 需要 analyze 的措辞。这是对 3370207986 的后续提交。报告者:Justin Pryzby 讨论:https://postgr.es/m/20201112211143.GL30691@telsasoft.com 回溯至:9.5 https://git.postgresql.org/pg/commitdiff/481f9dc3dc2fc779af3ab2d58216a1c2b970b20f
doc:澄清如何在安装树中找到 pg_type_d.h。补丁 152ed04799 的后续。报告者:Alvaro Herrera 讨论:https://postgr.es/m/20201112202900.GA28098@alvherre.pgsql 回溯至:9.5 https://git.postgresql.org/pg/commitdiff/8ad06bcbe136360296a804da7d7631a78fd15e70
doc:更新 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() 中提前获取页面标志变量。这使其更接近 _bt_split() 在重构提交 bc3087b626d 之后。这允许页面拆分和零售插入路径都使用相同的变量。 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 提交
docs:澄清信号函数没有反馈。Bug #16652 抱怨 pg_reload_conf() 返回 true,即使配置文件包含错误。这是 pg_reload_conf() 的工作方式,符合设计,但文档并不十分清楚。澄清“true”返回值仅表示信号已成功发送。还添加了指向可用于检查配置文件中错误情况的系统视图的链接。David G. Johnston,由我进行了一些改写。讨论:https://postgresql.ac.cn/message-id/CAKFQuwax6GxhUQEes0D045UtXG-fBraM39_6UMd5JyR5K1HWCQ@mail.gmail.com https://git.postgresql.org/pg/commitdiff/dfab7f2f94812c6c3a62cfde0ec7f9e447132e64
在 EXPLAIN 模式下跳过哈希表分配。作者:Alexey Bashtanov 讨论:https://postgresql.ac.cn/message-id/36823f65-050d-ae24-aa4d-a37726998240@imap.cc https://git.postgresql.org/pg/commitdiff/2cccb627f10d5dd4c21806fa251e4fb61eadd28c
使 pg_rewind 测试用例更加稳定。如果复制因任何原因异常缓慢,pg_rewind 可能会在测试行复制之前运行。添加显式等待。报告者:Andres Freund 讨论:https://postgresql.ac.cn/message-id/20201120003811.iknhqwatitw2vvxf@alap3.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 排序版本。类似于提交 352f6f2d(用于 Windows)和 d5ac14f9(用于 GNU/Linux)。讨论:https://postgr.es/m/CAEepm%3D0uEQCpfq_%2BLYFBdArCe4Ot98t1aR4eYiYTe%3DyavQygiQ%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/ca051d8b101d3205f1c5faf0d1da8a523ffc95a1
Magnus Hagander 已推送
Atsushi Torikoshi 发送了另一个补丁修订版,该修订版使 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 控制。
Takamichi Osumi 发送了另外两个补丁修订版,以使在数据加载期间可以禁止 WAL 日志记录。
Simon Riggs 发送了五个补丁修订版,以修复 DISABLE_PAGE_SKIPPING 的文档行为与当前行为不匹配的情况。
Ajin Cherian 和 Amit Kapila 交换了补丁,以实现两阶段事务的逻辑解码。
Tatsuro Yamada 发送了另外两个补丁修订版,为 psql 添加了扩展统计信息的命令 \dX。
Daniel Gustafsson 发送了另一个补丁修订版,以支持在运行中的集群中启用和禁用页面校验和。
Justin Pryzby 发送了一个补丁,允许在 bootstrap 中使用复合类型,并向 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,该 GUC 控制它是否尝试保持连接,其令人惊讶的名称是 keep_connections。
Takayuki Tsunakawa 和 Tomáš Vondra 交换了补丁,以实现 PostgreSQL FDW 的 INSERT 批处理。
Justin Pryzby 和 Pavel Stěhule 交换了补丁,为 pg_dump 添加了一个 --filter 选项,该选项从一个指定要使用的过滤器文件中读取,并使参数解析可用于命令行和描述的文件。
Bharath Rupireddy 发送了另一个补丁修订版,以在 autoprewarm 模块中使用标准的 SIGHUP 和 SIGTERM 处理程序。
Etsuro Fujita 发送了另一个补丁修订版,以在 postgres_fdw 节点上启用异步追加。
Tomáš Vondra 发送了一个补丁,通过添加对 get_useful_pathkeys_for_relation() 的 is_parallel_safe 检查,修复了增量排序改变查询行为的 bug。
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 是系列的一部分且位置超过指定阈值,则使 Consts 对混淆哈希的贡献为零。对具有 VALUES 的类似查询也执行相同操作。
Thomas Munro 发送了另一个补丁修订版,以实现 WAL 预取。
Andrew Dunstan 发送了另一个补丁修订版,以允许匹配客户端证书中的整个 DN。
Pavel Stěhule 发送了两个补丁修订版,为 PL/pgsql 添加了参数和局部变量引用的简写。
Atsushi Torikoshi 发送了两个补丁修订版,以记录缓存计划在用于创建它们的统计信息更新时无效的事实。
Atsushi Torikoshi 发送了两个补丁修订版,以更新 PREPARE 文档,指出 pg_prepared_statements 现在显示每个准备好的语句在当前会话中累积选择通用计划和自定义计划的次数。
Vigneshwaran C 发送了另一个补丁修订版,以并行化 COPY。
Thomas Munro 发送了另一个补丁修订版,以最小化锁信号。
Masahiro Ikeda 发送了另一个补丁修订版,向 pg_stat_wal 视图添加了 WAL 相关参数调优的统计信息。
Craig Ringer 发送了一个补丁,用于检测并报告 LWLockAcquire() 由于调用者已持有 LWLock 而导致简单的自死锁的情况。
Craig Ringer 发送了一个补丁,移除了 LWLockWaitForVar 中错误的 lwlock__acquire tracepoint,将目标 LWLock* 和 tranche ID 传递给 LWLock tracepoint,并添加到 LWLock 例程中的 tracepoint。
Heikki Linnakangas 发送了另一个补丁修订版,将 peragg 和 pertrans 重复查找移动到 prepagg.c。
Craig Ringer 发送了一个补丁,该补丁基于上面的资源所有者重构补丁,添加了一些 systemtap/dtrace tracepoint,并提供了一个演示 systemtap 脚本,该脚本显示了一些使用它们完成的基本统计信息收集。
Surafel Temesgen 发送了另一个补丁修订版,以实现系统版本化的时间表。
Justin Pryzby 发送了另外两个补丁修订版,以避免在 concurrent 索引重索引时可能发生的 brin 摘要错误。
Li Japin 发送了一个补丁,使用宏来计算 LWLock 偏移量。
Kyotaro HORIGUCHI 发送了另一个补丁修订版,以实现 CatCache 过期。
Peter Eisentraut 发送了另一个补丁修订版,以支持编写符合 SQL 标准的函数体,用于 SQL 语言的 CREATE FUNCTION 和 CREATE PROCEDURE 语句。
Greg Nancarrow 发送了另一个补丁修订版,以在安全的情况下启用“INSERT INTO ... SELECT ...”的并行 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 发送了另一个补丁修订版,为窗口函数实现了“空值处理”。
Álvaro Herrera 发送了一个补丁,用于修复 pageinspect 中的一个 bug,该 bug 会导致出现类似“ERROR: invalid memory alloc request size 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 发送了一个补丁,使“不能插入”消息更精确地指出原因是不能插入非默认值。