pg_dbms_job 1.1.0,一个用于创建、管理和使用 Oracle 风格的 DBMS_JOB 计划作业的扩展,已发布。
dbForge Data Compare for PostgreSQL v3.4 已发布
pgmoneta 0.5.0,一个用于 PostgreSQL 的备份和恢复系统,已发布
pgspider_ext,一个基于 PostgreSQL 外部数据包装器的集群引擎扩展,用于分布式数据,已发布。
psycopg2 3.0.0 beta 1,一个用于 PostgreSQL 的 Python 连接器,已发布。
postgresql-wheel,一个包含单个 pip 可安装文件中的整个编译版 PostgreSQL 服务器的 Python 包,已发布
https://archives.postgresql.org/pgsql-jobs/2021-09/
Planet PostgreSQL:https://planet.postgresql.org/
本周 PostgreSQL 周报由 David Fetter 提供。
请在太平洋标准时间(PST8PDT)周日晚上3:00之前将新闻和公告发送至 david@fetter.org。
Michaël Paquier 提交
在 psql 中为 ALTER TABLE ADD 添加了更多制表符补全支持。这包括检测各种约束类型的新模式,并添加了用于表主键和唯一约束的 USING INDEX。作者:Dagfinn Ilmari Mannsåker 讨论:https://postgr.es/m/87bl6ehhpl.fsf@wibble.ilmari.org https://git.postgresql.org/pg/commitdiff/d3fa87657860a50643118c682cdbf53f508a3fab
重构了 pg_basebackup 的 WAL 流式传输代码中对 IDENTIFY_SYSTEM 的一次使用。0c013e0 已对使用复制命令的所有代码路径进行了大量重构,但忘记了一个执行 WAL 流式传输的代码路径,该路径会检查连接的集群的有效性,使用了 IDENTIFY_SYSTEM。有一个通用的例程能够处理这个问题,因此在这个代码路径中对其进行了利用。这会影响 pg_receivewal 和 pg_basebackup。作者:Bharath Rupireddy 讨论:https://postgr.es/m/CALj2ACVKKYUMC8GE72Y7BP9g1batrrq3sEwUh+1_i2krWZC_2Q@mail.gmail.com https://git.postgresql.org/pg/commitdiff/99709c9b908eba99ecd787c4dc757f71edd98d87
在 psql 中为 ALTER TABLE ADD [COLUMN] 后的数据类型添加了制表符补全。这允许查找可用于创建新列的数据类型,从而完成 d3fa876。作者:Dagfinn Ilmari Mannsåker 讨论:https://postgr.es/m/87h7f7uk6s.fsf@wibble.ilmari.org https://git.postgresql.org/pg/commitdiff/f2bbadce6b5052337a11a33ea6bd8d8aebe2610a
添加了 PostgresNode::command_fails_like()。这对于测试命令失败很有用,它带有与节点关联的某些默认连接参数,并结合对预期错误模式的检查。该例程将由即将发布的补丁使用,但也可以插入到一些现有测试中。由同一作者从一个更大的补丁中提取。作者:Ronan Dunklau 讨论:https://postgr.es/m/5742739.ga3mSNWIix@aivenronan https://git.postgresql.org/pg/commitdiff/de1d4fef71cb00370aa5f794fe05355c1d063aea
重构了 elog.c 中将 SQLSTATE 转换为字符串的一次转换。unpack_sql_state() 已在 d46bc44 中引入,用于重构将 SQLSTATE 解包为字符串,但它忘记了在将错误报告发送给客户端时的一个代码路径,该路径可以利用它。此更改也在此代码路径中使用 unpack_sql_state(),从而稍微简化了代码。作者:Peter Smith 讨论:https://postgr.es/m/CAHut+PuYituuD1-VVZUNcmCQuc3ZzZMPoO57POgm8tnXOkwJAA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/c4f7a6b87ff350200f4b3afb9fe05e2899161070
文档:在 parallel.sgml 中用 "that" 替换了一些 "which" 的用法。这使得文档在语法上更准确。作者:Elena Indrupskaya 讨论:https://postgr.es/m/1c994b3d-951e-59bb-1ac2-7b9221c0e4cf@postgrespro.ru 向后移植到:9.6 https://git.postgresql.org/pg/commitdiff/163074ea84efec6ffa4813db43cc956ac5d12565
Amit Kapila 提交
重构 sharedfileset.c 以分离 fileset 实现。将 fileset 相关的实现移出 sharedfileset.c,以便不共享 fileset 的后端可以使用它。在此拆分后,fileset 基础设施由 sharedfileset.c 和 worker.c 用于跨事务生存的命名临时文件。作者:Dilip Kumar,基于 Andres Freund 的建议 审阅者:Hou Zhijie、Masahiko Sawada、Amit Kapila 讨论:https://postgr.es/m/E1mCC6U-0004Ik-Fs@gemulon.postgresql.org https://git.postgresql.org/pg/commitdiff/dcac5e7ac157964f71f15d81c7429130c69c3f9b
修复 StartupReplicationOrigin() 中不正确的错误代码。checksum 失败使用了 ERRCODE_CONFIGURATION_LIMIT_EXCEEDED,改为使用 ERRCODE_DATA_CORRUPTED。报告者:Tatsuhito Kasahara 作者:Tatsuhito Kasahara 向后移植到:9.6,其中引入了该代码 讨论:https://postgr.es/m/CAP0=ZVLHtYffs8SOWcFJWrBGoRzT9QQbk+_aP+E5AHLNXiOorA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/bad6cef32ca2dd60c8be18f95a7157ced189ec99
修复 001_rep_changes 中随机的测试失败。测试订阅工作进程在订阅更改后是否重新启动的检查失败。原因是测试假设 walsender 在达到“streaming”状态之前启动,而 walsender 在那之前因错误而退出。现在,walsender 在达到“streaming”状态之前因错误而退出,因为它试图在之前的 walsender 退出之前获取槽。顺便改进了 die 消息,以便将来更容易调查任何失败。报告者:Michael Paquier,根据 buildfarm 作者:Ajin Cherian 审阅者:Masahiko Sawada、Amit Kapila 向后移植到:10,其中引入了此测试 讨论:https://postgr.es/m/YRnhFxa9bo73wfpV@paquier.xyz https://git.postgresql.org/pg/commitdiff/8d0138ef51b51ba3e419cf49069eb72a15f74706
优化 apply worker 中的 fileset 使用。使用一个 fileset 来处理整个 worker 的生命周期,而不是为每个流式事务使用单独的 fileset。现在,每个流式事务的更改/子事务文件将在同一个 fileset 下创建,并在事务完成后删除这些文件。此补丁扩展了 BufFileOpenFileSet 和 BufFileDeleteFileSet API,允许用户指定是在文件丢失时报错。作者:Dilip Kumar,基于 Thomas Munro 的建议 审阅者:Hou Zhijie、Masahiko Sawada、Amit Kapila 讨论:https://postgr.es/m/E1mCC6U-0004Ik-Fs@gemulon.postgresql.org https://git.postgresql.org/pg/commitdiff/31c389d8de915b705ee06c7a6e9246e20f36b9dc
Fujii Masao 提交
pgbench:避免不必要的连接延迟测量。Commit 547f04e734 更改了 pgbench,使其仅在指定 -C/--connect 选项时才在其基准测试报告中使用连接延迟的测量结果。但以前,即使未指定该选项,这些延迟也会被不必要地测量。这浪费了周期。此提交改进了 pgbench,使其避免了这种不必要的测量。向后移植到 v14,其中首次出现 commit 547f04e734。作者:Yugo Nagata 审阅者:Fabien COELHO、Asif Rehman、Fujii Masao 讨论:https://postgr.es/m/20210614151155.a393bc7d8fed183e38c9f52a@sraoss.co.jp https://git.postgresql.org/pg/commitdiff/bfd4567b88496bf9669658e5ab381b296dd9ffe1
pgbench:修复断开连接延迟测量中的错误。如果指定了 -C/--connect 选项,pgbench 将为每个事务建立和关闭连接。在这种情况下,pgbench 需要测量所有这些连接和断开连接所花费的时间,以便将平均连接时间包含在基准测试结果中。但以前 pgbench 无法测量这些断开连接的延迟。为了修复此错误,此提交使 pgbench 在指定 -C/--connect 选项时,在事务结束时关闭连接时测量断开连接的延迟。向后移植到 v14。根据讨论,我们认为不向 v13 或更早版本向后移植,因为在稳定分支中更改此行为会给用户带来意外,而不是带来好处。作者:Yugo Nagata 审阅者:Fabien COELHO、Tatsuo Ishii、Asif Rehman、Fujii Masao 讨论:https://postgr.es/m/20210614151155.a393bc7d8fed183e38c9f52a@sraoss.co.jp https://git.postgresql.org/pg/commitdiff/4dc528bfa7dacee1cfbe2ec59b25039616268b69
改进 psql 的 CREATE PUBLICATION 制表符补全。作者:Peter Smith 审阅者:Vignesh C 讨论:https://postgr.es/m/CAHut+Ps-vkmnWAShWSRVCB3gx8aM=bFoDqWgBNTzofK0q1LpwA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/b0c066297bdac901a13a5a900a197697a026b357
增强 pg_stat_reset_single_table_counters 函数。此提交允许 pg_stat_reset_single_table_counters() 将集群中跨所有数据库的单个关系统计信息重置为零。更新 catalog 版本。作者:B Sadhu Prasad Patro 审阅者:Mahendra Singh Thalor、Himanshu Upadhyaya、Dilip Kumar、Fujii Masao 讨论:https://postgr.es/m/CAFF0-CGy7EHeF=AqqkGMF85cySPQBgDcvNk73G2O0vL94O5U5A@mail.gmail.com https://git.postgresql.org/pg/commitdiff/e04267844a9bbf97c2e85c919b84dfe498ab0302
Álvaro Herrera 提交
psql:修复扩展统计信息的名称引用。根据我们的消息样式指南,对于人类可读的输出,我们应将限定名称作为一个整体引用,而不是单独引用每个部分;但提交 bc085205c8a4 引入了对此的偏差,用于扩展统计信息,a4d75c86bf15 复制了它。我不同意此策略应用于 psql 显示的名称,但这是在两个晦涩的角落里偏离此做法的糟糕理由,因此让这些角落使用与别处相同的样式。向后移植到 14。其中第一个更旧,但不确定是否希望在旧分支中破坏 psql 的输出,因为这只是一个小问题。讨论:https://postgr.es/m/20210828181618.GS26465@telsasoft.com https://git.postgresql.org/pg/commitdiff/a397109114c8569e21ed3c858a16143de28a1897
在数据损坏错误消息中报告元组地址。大多数数据损坏报告都提到了问题的地点,但这次报告没有。添加它。向后移植到所有版本。在 12 及更早版本中,还分配了 ERRCODE_DATA_CORRUPTED 错误代码,这与 13 及更高版本中的 commit fd6ec93bf890 所做的相同。讨论:https://postgr.es/m/202108191637.oqyzrdtnheir@alvherre.pgsql https://git.postgresql.org/pg/commitdiff/961dd7565726a507d4551f7ea54ad888fc6ee93a
撤销“过早创建 archive status '.ready' 文件”。此操作撤销了 commit 515e3d84a0b5 和等效的向后移植分支中的提交。此问题的解决方案存在许多问题,我们将尝试另一种方法。根据 Andres Freund 的说明 讨论:https://postgr.es/m/20210831042949.52eqp5xwbxgrfank@alap3.anarazel.de https://git.postgresql.org/pg/commitdiff/96b665083eb72570e226cf2d25c960b3acc62040
Daniel Gustafsson 提交
禁止在 void 上下文中 map 和 grep。map 和 grep 不是作为修改器使用的,具有副作用的迭代应使用 for 或 foreach 循环完成。这修复了模式的一个出现,并将 map 和 grep 策略的 perlcritic 严重性提高到 5。作者:Dagfinn Ilmari Mannsåker ilmari@ilmari.org 审阅者:Michael Paquier michael@paquier.xyz 审阅者:Andrew Dunstan andrew@dunslane.net 审阅者:Julien Rouhaud rjuju123@gmail.com 讨论:https://postgr.es/m/87fsvzhhc4.fsf@wibble.ilmari.org https://git.postgresql.org/pg/commitdiff/bb466c6b0992a1a21c03239a7b0a87ebadd3bee1
删除多余的变量赋值。Commit a4205fa00 在调用 PQfinish 后立即将 conn 设置为 NULL,但原始的 conn = NULL; 仍然在几行之后。通过删除多余的赋值来修复。作者:Bharath Rupireddy bharath.rupireddyforpostgres@gmail.com 讨论:https://postgr.es/m/CALj2ACVRiNvMDHYQGiRrGs2Z9dOydfLh2MymEk9i8CSn23UtCg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/ba1b763102b89bca2711e921cf3083d8487b8c96
Tom Lane 提交
修复在内联新式 SQL 函数时遗漏的锁获取。当开始使用从 catalog 加载的查询解析树时,我们必须首先调用 AcquireRewriteLocks(),以获取与交互式输入查询相同的关系锁,并执行其他清理工作,例如处理稍后删除的列。新式 SQL 函数与存储的解析树一样受此规则约束;然而,在处理这些函数的地方,只有 init_sql_fcache 得到了提示。特别是,如果我们成功内联了一个包含任何关系引用的新式返回集 SQL 函数,我们将遇到断言失败或尝试在没有锁的情况下使用这些关系。我还向 fmgr_sql_validator 和 print_function_sqlbody 添加了 AcquireRewriteLocks 调用。零散的实验并未表明这些方面有任何失败,但我怀疑我只是不够努力。当然,我们不希望附近的路径在没有锁的情况下运行。基于“应该具有与旧代码相同的效果”的逻辑,也调用 pg_rewrite_query() 在 fmgr_sql_validator 中。这两种路径可能都不需要重写,但要证明这一点所需的工作量超出了我今天的目标。根据 Alexander Lakhin 的 bug #17172。讨论:https://postgr.es/m/17172-048a1cdff8422800@postgresql.org https://git.postgresql.org/pg/commitdiff/589be6f6c732a20e2bcaa02560de464ebbd48af2
缓存 pg_dump 中 format_type() 查询的结果。pg_dump 的 getFormattedTypeName 函数中长期存在一个“TODO:缓存结果可能有一些价值”的注释;但我们还没有检查过重复查找类型名称给我们带来了多大成本。事实证明,在转储当前回归数据库时,大约 10% 的查询是重复的 format_type() 查询。然而,Hubert Depesz Lubaczewski 报告了一个并不罕见的案例,其中这些查询占 pg_dump 发出的查询的一半以上。单独来看,这些查询并不昂贵,但当网络延迟成为因素时,它们累积成了一个问题。我们可以很容易地向 getFormattedTypeName 添加一些缓存来解决这个问题。由于这是一个简单的修复,并且可以带来可见的性能提升,因此将其向后移植到所有支持的分支。讨论:https://postgr.es/m/20210826084430.GA26282@depesz.com https://git.postgresql.org/pg/commitdiff/6c450a861f1a928f44c9ae80814ed9a91927c25a
在 pg_dump 中,避免对 RLS 策略进行逐表查询。在没有任何特别好的理由的情况下,getPolicies() 为每个表单独查询 pg_policy。我们可以改为一次性收集所有策略,并通过 findTableByOid() 查找将它们附加到正确的 TableInfo 对象。在回归数据库上,这大大减少了查询次数,即使在本地服务器上运行也能提供可见的节省。根据 Hubert Depesz Lubaczewski 的抱怨。由于这是一个简单的修复,并且可以带来可见的性能提升,因此将其向后移植到所有支持的分支。讨论:https://postgr.es/m/20210826084430.GA26282@depesz.com https://git.postgresql.org/pg/commitdiff/bd3611db5a6f3726094872f59feab426374d2c46
重构 postgresImportForeignSchema 以避免代码重复。与 pg_dump 近期的清理工作类似,避免重复我们正在构建的查询片段。我对这个问题感到厌烦,因为 aa769f80e 破坏了我关于更改 postgres_fdw 的 collation 处理的待处理补丁,因为我们各自都不完整地完成了这项重构。让我们完成这项工作,希望能有一个更稳定的基础。 https://git.postgresql.org/pg/commitdiff/2dc53fe2a77d8d5f22c656fdf6590198e358a996
文档:阐明触发器与事务的关系。Laurenz Albe,根据 Nathan Long 的抱怨。讨论:https://postgr.es/m/161953360822.695.15805897835151971142@wrigleys.postgresql.org https://git.postgresql.org/pg/commitdiff/469150a240dd79acbe7d86cb5df869d95f4d6d2d
修复 float4/float8 哈希函数以产生一致的 NaN 结果。IEEE 754 标准允许 NaN 有各种位模式,其中至少两种(“NaN”和“-NaN”)在大多数机器上的 SQL 中都相当容易产生。这有问题,因为我们的 btree 比较函数认为所有 NaN 都相等,但我们的 float 哈希函数不知道 NaN,并且会愉快地为它们产生不同的哈希码。这会导致对包含不同 NaN 值的列进行哈希处理的查询产生意外结果。在使用 float 列的哈希索引时,也可能导致意外的查找失败,即“WHERE x = 'NaN'”找不到应找到的所有行。为了解决这个问题,在 float 哈希函数中对 NaN 进行特殊处理,这与强制零和负零具有相同哈希值的现有特殊处理非常相似。我安排了最普通的 NaN(来自 C99 NAN 常量)仍然具有与以前相同的哈希码,以降低现有哈希索引的风险。我犹豫是否要将此向后移植到稳定分支,但最终决定这样做。对于内部进行哈希处理的查询,这是一个明显的改进。如果有人在哈希索引中有 -NaN,他们最好在应用此补丁后重新索引...但如果不这样做,其错误行为不会比他们以前的错误行为差多少。根据 Ma Liangzhu 的 bug #17172。讨论:https://postgr.es/m/17172-7505bea9e04e230f@postgresql.org https://git.postgresql.org/pg/commitdiff/ce773f230d9b5bb2e0dd23fec4e5462fd99487fe
在 count_usable_fds() 中,复制 stderr 而不是 stdin。我们收到投诉说,如果调用程序关闭 stdin,postmaster 就无法启动。这是因为 count_usable_fds 期望能够 dup(0),如果它不能,我们就得出没有空闲 FD 的结论并崩溃。但据我所知,服务器中没有其他地方会触及 stdin,并且可以合理地期望守护进程不会使用该文件。作为简单的改进,让我们复制 FD 2(stderr)而不是。与 stdin 不同,我们可以合理地期望 stderr 是打开的;即使我们配置为不触及它,像 libc 这样的常用库也可能尝试在那里写入错误消息。根据 Mario Emmenlauer 的抱怨。鉴于以前没有投诉,我不热衷于将其推送到稳定分支,但将其挤入 v14 似乎还可以。讨论:https://postgr.es/m/48bafc63-c30f-3962-2ded-f2e985d93e86@emmenlauer.de https://git.postgresql.org/pg/commitdiff/c95ede41b8d47b21d58702fbc519e720f41fdaf1
修复 commit ce773f230 中测试的可移植性问题。现代 POSIX 似乎要求 strtod() 接受 “-NaN”,但 SUSv2 中没有关于 NaN 的内容,而且我们一些最老的 buildfarm 成员也不喜欢它。让我们尝试将其写为 -'NaN';这似乎会产生相同的结果,至少在 Intel 硬件上是这样。根据 buildfarm。 https://git.postgresql.org/pg/commitdiff/fd549145d5d9fba3367cbf7e3d4fc7cb3562feb0
如果数据库编码不支持,则禁止创建 ICU collation。以前这是允许的,但 collation 由于 lookup_collation() 的工作方式而有效地消失了:你无法使用 collation,甚至无法删除它。最好立即报错,而不是让用户怀疑它为什么不起作用。(因为这个测试在 DefineCollation 而不是 CreateCollation 中,它不会阻止 pg_import_system_collations 创建 ICU collation,无论初始选择的编码如何。)根据 Andrew Bille 的 bug #17170。向后移植到 v10,其中添加了 ICU 支持。讨论:https://postgr.es/m/17170-95845cf3f0a9c36d@postgresql.org https://git.postgresql.org/pg/commitdiff/db2760a84191c329c0cdfaa1dae048c32b0c1752
移除 pg_ctl 中命令长度的任意 MAXPGPATH 限制。将固定长度的命令缓冲区替换为 psprintf() 调用。在编写此代码时,我们没有像 psprintf() 这样方便的工具,但现在有了,几乎没有理由让这个限制继续存在。删除它消除了某些边缘情况(例如,使用大量选项启动 postmaster 会失败)。pg_ctl 处理的大多数单个文件名仍然限制在 MAXPGPATH,但只要它只适用于一个文件名,我们就很少收到关于该限制的抱怨。向后移植到所有支持的分支。Phil Krylov 讨论:https://postgr.es/m/567e199c6b97ee19deee600311515b86@krylov.eu https://git.postgresql.org/pg/commitdiff/87ad491472d6f8620d83ec9db4f515ce303052ac
psql 帮助输出的微小改进。修复 "\?" 输出的字母顺序,并改进了一个描述。在需要的地方更新 PageOutput 计数,修复了之前补丁造成的破坏。Haiying Tang(PageOutput 修复由我完成)讨论:https://postgr.es/m/OS0PR01MB61136018064660F095CB57A8FB129@OS0PR01MB6113.jpnprd01.prod.outlook.com https://git.postgresql.org/pg/commitdiff/ac5ea660996ecbbfbe78b881a581132a95d93d26
float4/float8 哈希函数的进一步可移植性调整。试图让 hashfloat4() 尽可能像 hashfloat8(),我曾以为我可以在扩展到 float8 之前将 NaN 替换为 get_float4_nan()。然而,来自 protosciurus 和 topminnow 的结果表明,在某些平台上,这会产生与 get_float8_nan() 不同的位模式,打破了 ce773f230 的意图。重新安排,以便为所有 NaN 情况使用 get_float8_nan() 的结果。和以前一样,向后移植。 https://git.postgresql.org/pg/commitdiff/b30cc0fd6d5d96c63037824c286cec561e092b6f
Tomáš Vondra 提交了
修复扩展统计信息所有权检查中的查找错误。当扩展统计信息对象的权限检查失败时,代码调用 aclcheck_error_type 来报告失败,这显然是错误的,导致缓存查找失败。通过调用 aclcheck_error 来修复。这个问题自扩展统计信息引入以来就存在,因此向后移植到 PostgreSQL 10。它之所以未被发现,是因为没有触发错误的测试,所以添加一个。报告者:Mark Dilger 向后移植到:10,其中引入了扩展统计信息 讨论:https://postgr.es/m/1F238937-7CC2-4703-A1B1-6DC225B8978A%40enterprisedb.com https://git.postgresql.org/pg/commitdiff/5be8ce82e84f8f3604916c06668990c524f3856d
将 stats_ext 中的角色重命名为 regress_ 前缀。Commit 5be8ce82e8 向 stats_ext 回归套件添加了一个新角色,但角色名称未以 regress_ 开头,导致在使用 ENFORCE_REGRESSION_TEST_NAME_RESTRICTIONS 运行时失败。通过将角色重命名为以预期的 regress_ 前缀开头来修复。向后移植到:10,与新的回归测试相同 讨论:https://postgr.es/m/1F238937-7CC2-4703-A1B1-6DC225B8978A%40enterprisedb.com https://git.postgresql.org/pg/commitdiff/628bc9d13be8c55492aef122c25dbba3b036366d
在扩展统计信息中,不要在表达式周围打印额外的括号。打印扩展统计信息表达式的代码将括号加倍,产生类似 ((a+1)) 的结果,这是不必要的,并且与我们其他地方打印表达式的方式不一致。通过调整代码以仅生成一组括号来修复。由 Mark Dilger 报告,我修复。向后移植到 14,其中添加了对表达式上的扩展统计信息支持。报告者:Mark Dilger 讨论:https://postgr.es/m/20210122040101.GF27167%40telsasoft.com https://git.postgresql.org/pg/commitdiff/13380e1476490932c7b15530ead1f649a16e1125
标识扩展统计信息中的简单列引用。到目前为止,在定义扩展统计信息时,除了简单的列引用之外的所有内容都被视为复杂表达式。例如,“a”是一个列引用,但“(a)”是一个表达式。在大多数情况下,这并不重要,但确实会产生一些奇怪的后果。例如,CREATE STATISTICS s ON a FROM t; 将会失败,因为扩展统计信息至少需要两列。但是 CREATE STATISTICS s ON (a) FROM t; 会成功,因为这个要求不适用于表达式。此外,该统计信息对象是无用的——优化器将始终使用为属性“a”收集的常规统计信息。因此,做更多的工作来识别那些引用单个列的表达式,并将它们转换为简单的列引用。向后移植到 14,其中引入了对表达式上的扩展统计信息支持。报告者:Justin Pryzby 向后移植到:14 讨论:https://postgr.es/m/20210816013255.GS10479%40telsasoft.com https://git.postgresql.org/pg/commitdiff/537ca68dbb2463f7b1c44e9466b8fbdd7505b2e1
John Naylor 提交了
将 date_bin() 的 timestamptz 变体标记为 stable。以前,由于缺少标记,它被认为是不可变的。这是不正确的,因为时区可能会改变。更新 catversion 讨论:https://postgres.ac.cn/message-id/CAFBsxsG2UHk8mOWL0tca%3D_cg%2B_oA5mVRNLhDF0TBw980iOg5NQ%40mail.gmail.com 向后移植到 v14,当时该函数引入 https://git.postgresql.org/pg/commitdiff/543f36b43d835c819c24b2952ac4ecabbdf2b944
将 date_bin() 的 timestamptz 版本的易变性恢复为 immutable。543f36b43d 在认为 date_bin() 的易变性必须匹配 date_trunc() 时过于仓促,因为只有后者引用 session_timezone。更新 catversion 根据 Aleksander Alekseev 的反馈 向后移植到 v14,因为前一个提交是 https://git.postgresql.org/pg/commitdiff/0c6a6a0ab7675e151a6e46d3ec0846bfce9e030a
Peter Geoghegan 提交
将历史提交添加到 git-blame-ignore-revs 文件。添加一个历史性的 pgindent 提交,该提交在提交 8e638845 中完成的初始工作中被遗漏了。 https://git.postgresql.org/pg/commitdiff/aec5cc9efda00f7f418c9a068c92cab119602084
移除不必要的 old_rel_pages VACUUM 状态字段。自从 commit 3d351d91(该提交在第一次 VACUUM 或 ANALYZE 之前将 pg_class.reltuples 定义为 -1)以来,该字段一直没有被使用。同时重命名同名的局部变量("old_rel_pages")。它用于关系截断,以表示正在进行的 VACUUM 操作开始时的原始关系大小。将其重命名为 orig_rel_pages,因为它更清晰。(此名称与附近类似的用法匹配。) https://git.postgresql.org/pg/commitdiff/47029f775adf83796fecb5871ce52488996a7969
vacuumlazy.c:更正 prune 状态注释。commit 7ab96cf6b3 中的疏忽。 https://git.postgresql.org/pg/commitdiff/6320806ac3792a297f1c4eb149c3ddeda25d3930
移除过时的 nbtree 关系扩展注释。Commit 0d1fe9f7 改进了 vacuumlazy.c 在遇到空堆页时所采取的方法。它现在获取关系扩展锁。 https://git.postgresql.org/pg/commitdiff/0f6aa893cb58c2a5a92016914c94865635345a22
VACUUM VERBOSE:不报告“pages removed”。报告此信息毫无意义,因为 VACUUM VERBOSE 直接报告堆关系截断。这是 commit 7ab96cf6 中的疏忽,它使 VACUUM VERBOSE 输出比附近的 autovacuum 特定的日志输出更一致。同时调整描述此工作方式的注释。另外,将与截断相关的 VACUUM VERBOSE 输出调整为与 commit f4f4a649 为 VACUUM VERBOSE 输出建立的约定保持一致。作者:Peter Geoghegan pg@bowt.ie 向后移植:14-,其中 VACUUM VERBOSE 的输出发生了变化。 https://git.postgresql.org/pg/commitdiff/b175b9cde720a81852b70c0c7fbc18c72ff1acc6
Peter Eisentraut 提交
修复不正确的格式占位符。 https://git.postgresql.org/pg/commitdiff/590ecd982304dec8599d6ca339903982d39a9a1a
修复静态链接的 pkg-config 文件。自 ea53100d5 (PostgreSQL 12) 以来,已分发的 pkg-config 文件对于静态链接 libpq 而言已损坏,因为缺少 libpgcommon 和 libpgport。此补丁添加了这两个缺失的私有依赖项(以非硬编码方式)。报告者:Filip Gospodinov f@gospodinov.ch 讨论:https://postgres.ac.cn/message-id/flat/c7108bde-e051-11d5-a234-99beec01ce2a@gospodinov.ch https://git.postgresql.org/pg/commitdiff/4c2eab3a0dec2eae40892fb525830a5947a398c7
使 pkg-config 文件对交叉编译友好。当前 pc 文件使用硬编码的“includedir”和“libdir”路径。示例:Cflags: -I/usr/include Libs: -L/usr/lib -lpq 当在 buildroot 中交叉编译时,这很不理想,因为 includes 和 libs 位于 staging 目录中,这会在构建中引入主机路径:checking for pkg-config... /builder/shared-workdir/build/sdk/staging_dir/host/bin/pkg-config checking for PostgreSQL libraries via pkg_config... -L/usr/lib <---- 此提交通过执行以下两件事来解决此问题:1. 不硬编码“Cflags”和“Libs”中的路径,而是使用 “${includedir}” 和 “${libdir}”。注意:这些变量可以在 pkg-config 命令行中被覆盖(“--define-variable=libdir=/some/path”)。2. 添加“prefix”和“exec_prefix”变量。如果“includedir”和/或“libdir”使用这些变量,则相应地构造它们。这是因为 buildroots(例如 OpenWrt)倾向于重命名实际的 pkg-config 并从设置了“prefix”、“exec_prefix”和“bindir”的脚本间接调用它,如下所示:pkg-config.real --define-variable=prefix=${STAGING_PREFIX} --define-variable=exec_prefix=${STAGING_PREFIX} --define-variable=bindir=${STAGING_PREFIX}/bin $@ 示例 #1:用户使用“--libdir=/some/lib”和“--includedir=/some/include”调用 ./configure:prefix=/usr/local/pgsql exec_prefix=${prefix} libdir=/some/lib includedir=/some/include Name: libpq Description: PostgreSQL libpq library Url: https://postgres.ac.cn/ Version: 12.1 Requires: Requires.private: Cflags: -I${includedir} Libs: -L${libdir} -lpq Libs.private: -lcrypt -lm 示例 #2:用户不带参数调用 ./configure:prefix=/usr/local/pgsql exec_prefix=${prefix} libdir=${exec_prefix}/lib includedir=${prefix}/include Name: libpq Description: PostgreSQL libpq library Url: https://postgres.ac.cn/ Version: 12.1 Requires: Requires.private: Cflags: -I${includedir} Libs: -L${libdir} -lpq Libs.private: -lcrypt -lm 这样,在使用 buildroot 设置时,可以将路径强制放入 staging 目录:checking for pkg-config... /home/sk/tmp/openwrt/staging_dir/host/bin/pkg-config checking for PostgreSQL libraries via pkg_config... -L/home/sk/tmp/openwrt/staging_dir/target-mips_24kc_musl/usr/lib 作者:Sebastian Kemper sebastian_ml@gmx.net 合著者:Peter Eisentraut peter.eisentraut@enterprisedb.com 讨论:https://postgres.ac.cn/message-id/flat/20200305213827.GA25135%40darth.lan https://git.postgresql.org/pg/commitdiff/6588d8416e4ef84fd99fb271b63116f207c6c479
Tatsuo Ishii 推送