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,一个 Python 包,其中包含一个可在单个 pip 安装文件中编译的整个 PostgreSQL 服务器,已发布
https://archives.postgresql.org/pgsql-jobs/2021-09/
Planet PostgreSQL: https://planet.postgresql.org/
本周的 PostgreSQL 每周新闻由 David Fetter 为您带来
请在太平洋标准时间下午 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 到字符串的一种转换。d46bc44 中引入了 unpack_sql_state(),以重构将 SQLSTATE 解包为字符串,但它忘记了一个在向客户端发送错误报告时可能使用它的代码路径。此更改代码以也在此处使用 unpack_sql_state(),从而稍微简化了代码。作者:Peter Smith 讨论:https://postgr.es/m/CAHut+PuYituuD1-VVZUNcmCQuc3ZzZMPoO57POgm8tnXOkwJAA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/c4f7a6b87ff350200f4b3afb9fe05e2899161070
doc:在 parallel.sgml 中将一些 "which" 替换为 "that"。这使得文档在语法上更加准确。作者: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 的后端使用它。拆分后,namedfileset 基础结构由 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() 中的错误代码不正确的问题。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 在达到“流式传输”状态之前启动,并且 walsender 由于错误而在此之前退出。现在,walsender 在达到“流式传输”状态之前出现错误,因为它尝试在之前的 walsender 退出之前获取槽位。顺便说一下,改进了 die 消息,以便将来更容易调查失败情况。报告者:Michael Paquier,根据构建场 作者:Ajin Cherian 审阅者:Masahiko Sawada、Amit Kapila 向后移植到:10,在该版本中引入此测试 讨论:https://postgr.es/m/YRnhFxa9bo73wfpV@paquier.xyz https://git.postgresql.org/pg/commitdiff/8d0138ef51b51ba3e419cf49069eb72a15f74706
优化 apply 工作器中的 fileset 用法。对整个工作器生命周期使用一个 fileset,而不是为每个流式传输事务使用单独的 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:避免不必要的连接延迟测量。提交 547f04e734 更改了 pgbench,使其仅当指定 -C/--connect 选项时才在其基准报告中使用连接延迟的测量结果。但以前,即使未指定该选项,也会不必要地测量这些延迟。这是一种周期浪费。此提交改进了 pgbench,使其避免了这种不必要的测量。向后移植到首次出现提交 547f04e734 的 v14。作者: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
改进 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() 将群集中所有数据库之间共享的单个关系的统计信息重置为零。增加目录版本。作者: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 及更早版本中,也应如 commit fd6ec93bf890 为 13 及更高版本所做的那样,分配 ERRCODE_DATA_CORRUPTED 错误代码。讨论:https://postgr.es/m/202108191637.oqyzrdtnheir@alvherre.pgsql https://git.postgresql.org/pg/commitdiff/961dd7565726a507d4551f7ea54ad888fc6ee93a
回滚“避免过早创建 archive status '.ready' 文件”。这会回滚 commit 515e3d84a0b5 以及后向分支中的等效 commit。此问题的解决方案存在许多问题,因此我们将尝试使用不同的方法。根据 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 循环完成。这修复了该模式的一个实例,并将 perlcritic 策略的 map 和 grep 策略的严重性提高到 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 函数时遗漏的锁获取。当开始使用从目录加载的查询解析树时,我们必须首先应用 AcquireRewriteLocks(),以获得解析器在交互式输入查询时会获得的相同关系锁,并执行一些其他清理,例如处理稍后删除的列。新式 SQL 函数也像其他存储的解析树一样受此规则约束;但是,在处理此类函数的地方,只有 init_sql_fcache 记住了这一点。特别是,如果我们成功内联了一个包含任何关系引用的新式集合返回 SQL 函数,那么我们要么会得到断言失败,要么会尝试在没有锁的情况下使用这些关系。我还添加了对 fmgr_sql_validator 和 print_function_sqlbody 的 AcquireRewriteLocks 调用。Desultory 实验没有展示任何这些方面的失败,但我怀疑我只是尝试得不够努力。当然,我们不希望附近的代码路径在没有锁的情况下运行。按照旧代码应该具有相同效果的逻辑,也在 fmgr_sql_validator 中调用 pg_rewrite_query()。那里可能没有任何代码路径需要担心重写,但证明这一点的分析超出了我今天的目标。根据 Alexander Lakhin 的错误 #17161。讨论:https://postgr.es/m/17161-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 的排序规则处理,原因是我们每个人都未完全完成相同的重构。让我们完成这项工作,以期拥有更稳定的基础。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 的错误 #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,并且期望守护程序不使用该文件是合理的。作为一个简单的改进,让我们改为 dup 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 排序规则。以前允许这样做,但排序规则实际上消失了,因为 lookup_collation() 的工作方式:您既不能使用该排序规则,甚至不能删除它。与其让用户想知道为什么它不起作用,不如提前给出错误似乎更好。(因为此测试位于 DefineCollation 而不是 CreateCollation 中,因此它不会阻止 pg_import_system_collations 创建 ICU 排序规则,而不管最初选择的编码如何。)根据 Andrew Bille 的错误 #17170。向后移植到添加 ICU 支持的 v10。讨论: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(),我认为我可以先用 get_float4_nan() 替换 NaN,然后再扩展到 float8。然而,来自 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_ 前缀。提交 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 变体标记为稳定。以前,由于缺少标记,它是不可变的。这是不正确的,因为时区可能会改变。增加 catversion。讨论:https://postgresql.ac.cn/message-id/CAFBsxsG2UHk8mOWL0tca%3D_cg%2B_oA5mVRNLhDF0TBw980iOg5NQ%40mail.gmail.com 回溯到 v14,此功能在该版本中引入 https://git.postgresql.org/pg/commitdiff/543f36b43d835c819c24b2952ac4ecabbdf2b944
将 date_bin() 的 timestamptz 版本的易失性设置回不可变。543f36b43d 过于草率地认为 date_bin() 的易失性必须与 date_trunc() 匹配,因为只有后者引用 session_timezone。增加 catversion。根据 Aleksander Alekseev 的反馈。回溯到 v14,因为之前的提交是这样的 https://git.postgresql.org/pg/commitdiff/0c6a6a0ab7675e151a6e46d3ec0846bfce9e030a
Peter Geoghegan 推送
将历史提交添加到 git-blame-ignore-revs 文件。添加 commit 8e638845 的初始工作中遗漏的历史 pgindent 提交。https://git.postgresql.org/pg/commitdiff/aec5cc9efda00f7f418c9a068c92cab119602084
删除不需要的旧的 old_rel_pages VACUUM 状态字段。自从 commit 3d351d91 重新定义 pg_class.reltuples 为 -1 之后,该字段就没有被使用过,该提交发生在第一次 VACUUM 或 ANALYZE 之前。同时重命名相同名称的局部变量 (“old_rel_pages”)。关系截断使用它来表示正在进行的 VACUUM 操作开始时的原始关系大小。将其重命名为 orig_rel_pages,因为这样更清晰。(此名称与附近类似的代码匹配。)https://git.postgresql.org/pg/commitdiff/47029f775adf83796fecb5871ce52488996a7969
vacuumlazy.c:更正剪枝状态注释。commit 7ab96cf6b3 中的疏忽。https://git.postgresql.org/pg/commitdiff/6320806ac3792a297f1c4eb149c3ddeda25d3930
删除过时的 nbtree 关系扩展注释。Commit 0d1fe9f7 改进了 vacuumlazy.c 在遇到空堆页时采取的方法。它现在获取关系扩展锁。https://git.postgresql.org/pg/commitdiff/0f6aa893cb58c2a5a92016914c94865635345a22
VACUUM VERBOSE:不报告“已删除的页面”。报告此信息没有任何意义,因为 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://postgresql.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 中进行交叉编译时,这不是很幸运,其中 include 和 libs 位于暂存目录中,因为这会将主机路径引入构建中: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. 使用“${includedir}”和“${libdir}”而不是在“Cflags”和“Libs”中硬编码路径。注意:这些变量可以在 pkg-config 命令行中被覆盖(“--define-variable=libdir=/some/path”)。2. 添加变量“prefix”和“exec_prefix”。如果“includedir”和/或“libdir”正在使用它们,则相应地构建它们。这样做是因为 buildroot(例如 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://postgresql.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://postgresql.ac.cn/ Version: 12.1 Requires: Requires.private: Cflags: -I${includedir} Libs: -L${libdir} -lpq Libs.private: -lcrypt -lm 这样,在使用 buildroot 设置时,可以将路径强制放入暂存目录中: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://postgresql.ac.cn/message-id/flat/20200305213827.GA25135%40darth.lan https://git.postgresql.org/pg/commitdiff/6588d8416e4ef84fd99fb271b63116f207c6c479
Tatsuo Ishii 推送