北欧 PGDay 2022 将于 2022 年 3 月 22 日在芬兰赫尔辛基的希尔顿赫尔辛基海滩酒店举行。CfP 开放至 2021 年 12 月 31 日,在此处
PGroonga 2.3.4,一个适用于所有语言的全文搜索平台,已发布。
Pgpool-II 4.2.6、4.1.9、4.0.16、3.7.21 和 3.6.28,一个用于 PostgreSQL 的连接池和语句复制系统,已发布。。。
Ora2Pg 23.0,一个用于将 Oracle 数据库迁移到 PostgreSQL 的工具,已发布。https://github.com/darold/ora2pg/blob/master/changelog
BigAnimal,Azure 上的托管 PostgreSQL 数据库,已发布。
pgAdmin4 6.2,一个用于 PostgreSQL 的 Web 和原生 GUI 控制中心,已发布。
https://archives.postgresql.org/pgsql-jobs/2021-11/
Planet PostgreSQL:https://planet.postgresql.org/
本周的 PostgreSQL 每周新闻由 David Fetter 为您带来
请在太平洋标准时间(PST8PDT)周日下午 3:00 前将新闻和公告发送至 david@fetter.org。
Robert Haas 推送了
修复 bbsink_throttle_manifest_contents 中的拼写错误。由 Dmitry Dolgov 报告和诊断。讨论:http://postgr.es/m/20211115162641.dmo6l32fklh64gnw@localhost https://git.postgresql.org/pg/commitdiff/1b098da2009362e0e8d9a1d0a6aac2f2bd3e2f0b
将 InitXLogInsert() 调用从 InitXLOGAccess() 移动到 BaseInit()。目前,有一个未记录的编码规则,即在尝试写入 WAL 之前,必须调用 RecoveryInProgress(),或执行其他导致调用 InitXLogInsert() 的操作。否则,WAL 构建缓冲区将不会被初始化,从而导致失败。由于依赖像 RecoveryInProgress() 这样的状态查询函数来初始化关键数据结构不是一个好主意,因此在后端首次启动时,更早地执行初始化。由我提交的补丁。由 Nathan Bossart 和 Michael Paquier 审查。讨论:http://postgr.es/m/CA+TgmoY7b65qRjzHN_tWUk8B4sJqk1vj1d31uepVzmgPnZKeLg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/e51c46991f0ee99cca222305619dee5543a1290a
Amit Kapila 推送了
当更改 REPLICA IDENTITY 索引时,使 relcache 失效。当将 REPLICA IDENTITY INDEX 更改为另一个时,目标表的 relcache 没有失效。这会导致在订阅者端应用期间跳过更新/删除操作,因为搜索相应行所需的列不会被记录。作者:Tang Haiying,Hou Zhijie 审查人:Euler Taveira,Amit Kapila 回溯版本:10 讨论:https://postgr.es/m/OS0PR01MB61133CA11630DAE45BC6AD95FB939@OS0PR01MB6113.jpnprd01.prod.outlook.com https://git.postgresql.org/pg/commitdiff/354a1f8d220fbbb07b0ded32c5ade72646afb801
修复阻止最旧的 xmin 前进的并行操作。在确定 xid 水平时,我们跳过正在运行 Vacuum 的后端。为了计算 Vacuum 的 Xmin,我们还忽略了 Create Index Concurrently 或 Reindex Concurrently。但是,当它们并行执行时,我们没有设置与这些操作对应的标志,这阻止了 Xid 水平的前进。与跳过 Create Index Concurrently 或 Reindex Concurrently 操作相关的优化在 PG-14 中实现,但该修复程序对于并行 Vacuum 也是相同的,因此回溯到 PG-13。作者:Masahiko Sawada 审查人:Amit Kapila 回溯版本:13 讨论:https://postgr.es/m/CAD21AoCLQqgM1sXh9BrDFq0uzd3RBFKi=Vfo6cjjKODm0Onr5w@mail.gmail.com https://git.postgresql.org/pg/commitdiff/0f0cfb494004befb0f6e89d3129347869420c509
Álvaro Herrera 推送了
Michaël Paquier 推送了
删除 xlog.c 中的全局变量“LastRec”。此变量现在仅由 StartupXLOG() 使用,因此我们将其本地化以简化代码。作者:Amul Sul 审查人:Tom Lane,Michael Paquier 讨论:https://postgr.es/m/CAAJ_b96Qd023itERBRN9Z7P2saNDT3CYvGuMO8RXwndVNN6z7g@mail.gmail.com https://git.postgresql.org/pg/commitdiff/f975fc3a3542005ed0dd689bdb5bd9ed4e1f4d52
向回归测试中添加一个表,用于 pg_upgrade 中的二进制兼容性检查。此提交向主回归测试套件添加了一个包含所有核心数据类型的表(某些例外情况适用)。此表不会被删除,以便 pg_upgrade 能够检查表中跟踪的类型的二进制兼容性。如果在核心中添加新类型,则这部分测试需要刷新,但如果发生这种情况,测试会设计为失败。由于这对于升级很有用,并且这些升级依赖于从升级的旧版本回归测试套件中创建的对象,因此会回溯到 12,这是最后一个进行二进制不兼容更改的点 (7c15cef)。希望这足以发现 Postgres 新版本的开发过程中是否出现问题,以便在这种情况下可以在 pg_upgrade 本身中采取措施(如 0ccfc28 用于 sql_identifier)。尚未涵盖的领域与外部模块相关,这些模块可能会创建自己的类型。pg_upgrade 的测试基础结构尚未与存储在核心中的外部模块集成(src/test/modules/ 或 contrib/,所有这些模块的测试都使用相同的数据库名称,因此会出现重叠)。将来可以对此进行改进。作者:Justin Pryzby 审查人:Jacob Champion,Peter Eisentraut,Tom Lane,Michael Paquier 讨论:https://postgr.es/m/20201206180248.GI24052@telsasoft.com 回溯版本:12 https://git.postgresql.org/pg/commitdiff/835bcba8b8d72a00cecc5431b67e70bbea93f947
修复用于升级二进制兼容性检查的表中 ACL 项的引用。根据 buildfarm 成员 prion 的说法,它在角色名称下运行回归测试,该角色名称使用连字符。问题由 835bcba 引入。讨论:https://postgr.es/m/YZW4MvzCZ+hQ34vw@paquier.xyz 回溯版本:12 https://git.postgresql.org/pg/commitdiff/ac1c7458b17633d1e53a01393d12774c10cb6a91
改进 psql 对转换、域和序列的制表符补全。完成了以下改进:- 为 CREATE DOMAIN 添加了一些制表符补全。- 为 CREATE TRANSFORM 添加了一些制表符补全。- 为 CREATE SEQUENCE AS 添加了类型补全。作者:Ken Kato 审查人:Kyotaro Horiguchi,Michael Paquier 讨论:https://postgr.es/m/8d370135aef066659eef8e8fbfa6315b@oss.nttdata.com https://git.postgresql.org/pg/commitdiff/0cd6d3b3c5aeac81903aa7de92e406f8567898a2
Peter Eisentraut 推送了
Daniel Gustafsson 推送了
文档:向 CREATE PUBLICATION 添加参见参考。CREATE PUBLICATION 的参考页面上的“另请参阅”部分与 CREATE SUBSCRIPTION 及其 ALTER 版本上的交叉引用不匹配。通过向 CREATE 和 ALTER SUBSCRIPTION 页面添加 xref 修复。回溯到引入 CREATE PUBLICATION 的 v10。作者:Peter Smith smithpb2250@gmail.com 审查人:Masahiko Sawada sawada.mshk@gmail.com 讨论:https://postgr.es/m/CAHut+PvGWd3-Ktn96c-z6uq-8TGVVP=TPOkEovkEfntoo2mRhw@mail.gmail.com 回溯版本:10 https://git.postgresql.org/pg/commitdiff/3374a87b62cc553fa65f57ade019dcf3104ae639
改进发布错误消息。提交 81d5995b4b 为发布的不正确 relkinds 引入了更精细的错误消息,而未记录和临时表使用相同的消息报告。这为这些类型的 relpersistence 提供了单独的错误消息。作者:Bharath Rupireddy bharath.rupireddyforpostgres@gmail.com 审查人:Peter Eisentraut peter.eisentraut@enterprisedb.com 审查人:Jeevan Ladhe jeevan.ladhe@enterprisedb.com 审查人:Euler Taveira euler@eulerto.com 讨论:https://postgr.es/m/CALj2ACW9S=AswyQHjtO6WMcsergMkCBTtzXGrM8DX26DzfeTLQ@mail.gmail.com https://git.postgresql.org/pg/commitdiff/aa12781b0d039d93e1a851ece4bc75c3746cbd43
Tom Lane 推送了
修复在 INSERT/SELECT 中显示 SQL 标准函数的参数。如果 SQL 标准函数体包含 INSERT ... SELECT 语句,则 SELECT 中引用的任何函数参数始终以 $N 样式打印,而不是使用参数名称(如果有)。虽然并非完全错误,但这不是本意,并且与在任何其他类型的语句中打印此类参数的方式不一致。原因是来自 get_insert_query_def 的递归到 get_query_def 时,忽略了传递 context->namespaces 列表,而是传递了常量 NIL。这是一个非常古老的疏忽,但据我所知,在提交 e717a9a18 添加了带有函数参数的最外层命名空间之前,它没有任何可见的后果。我们不允许 INSERT ... SELECT 作为子查询,除非在顶级 WITH 子句中,它不能包含任何可能需要访问上层命名空间的外部引用。因此,虽然这可以说是错误,但在 v14 之前我看不出有任何更改的意义。顺便提一下,强化了 e717a9a18 添加到 get_parameter 的代码,使其不会在 PARAM_EXTERN Param 出现在意外位置时崩溃。根据 Erki Eessaar 的报告。代码修复由我完成,回归测试用例由 Masahiko Sawada 完成。讨论:https://postgr.es/m/AM9PR01MB8268347BED344848555167FAFE949@AM9PR01MB8268.eurprd01.prod.exchangelabs.com https://git.postgresql.org/pg/commitdiff/a8d8445a7b2f80f6d0bfe97b19f90bd2cbef8759
在 pg_dump 和 pg_basebackup 中更健壮地处理 close() 失败。Coverity 抱怨说,像我们在 pg_basebackup 中的一个地方所做的那样,在 gzclose 失败后应用 get_gz_error 是不安全的。我认为这是正确的:这个调用很可能正在触及被释放的内存。将其更改为检查 errno,就像我们对其他 gzclose 调用所做的那样。此外,请注意在任何我们关心错误状态的 gzclose() 调用之前立即将 errno 初始化为零。(有些调用我们不关心,因为我们已经在之前的某个步骤失败了。)这确保了如果 gzclose() 以一种不设置 errno 的方式失败,我们不会得到一个具有误导性的无关错误代码。我们可以在这方面做得更多,但我觉得如果我们在使用 zlib 时没有出错,所有这些情况基本上都不可能发生,因此不需要额外的符号化复杂性。此外,修复了几个完全没有检查关闭时错误的地点,这些地点大多与 close 或 gzclose 本身有一些距离;以及一个确实检查了但没有报告 errno 的地点。回溯到 v12。这些错误比这更早,但是由于 v12 中发生的前端日志记录 API 更改,以及前端代码在此之前不能依赖 %m 的事实,该补丁需要进行实质性的修改才能在较旧的分支中工作。考虑到缺乏相关的现场投诉,这似乎不值得付出麻烦。由我提交补丁;感谢 Michael Paquier 的审阅。讨论: https://postgr.es/m/1343113.1636489231@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/3cac2c8caaefc642332e6994ce80032cc7d4cfdf
清理 pg_basebackup 的 walmethods.c 中的错误处理。这里的错误处理很混乱,这是由于一个根本性的糟糕设计(依赖 errno 来保持其值的时间比安全假设的时间长得多)以及许多纯粹的草率造成的,无论是注意到错误还是报告正确的 errno。此外,最近添加的 LZ4 压缩完全破坏了事情,因为 liblz4 不使用 errno 来报告错误。为了改进情况,将错误状态保留在 DirectoryMethodData 或 TarMethodData 结构中,并添加一个字符串字段,以便我们可以处理不设置 errno 的情况。(tar 方法已经有一个这样的版本,但可以更有效地完成,因为所有这些情况都使用一个常量错误字符串。)使 dir 和 tar 方法以基本相同的方式处理错误,这在以前是没有的。这需要在很多地方将 errno 复制到状态结构中,这有点乏味,但它的优点是我们可以在很多地方摆脱临时代码来保存和恢复 errno ... 更不用说它修复了其他应该保存/恢复 errno 但忽略了的地方。顺便说一句,修复了一些毫无意义的静态缓冲区,使其成为普通的局部变量。关于如何处理 fsync() 的错误仍然存在一个问题,但这似乎是其自身补丁的材料。虽然 LZ4 问题是新的,但所有其他都是旧错误的修复,因此回溯到引入 walmethods.c 的 v10。由我提交补丁;感谢 Michael Paquier 的审阅。讨论: https://postgr.es/m/1343113.1636489231@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/248c3a937dd018a72095f407cff727c9f08db0c1
为 starts_with() 添加计划器支持函数。这填补了计划器对 starts_with() 和等效的 ^@ 运算符的支持中的一些空白:* 诸如“textcol ^@ constant”之类的条件现在可以使用常规 btree 索引,而不仅仅是 SP-GiST 索引,只要索引的排序规则是 C。(这就像“textcol LIKE 'foo%'”一样工作。)* “starts_with(textcol, constant)”可以像 “textcol ^@ constant”一样进行优化。* 固定前缀 LIKE 和正则表达式模式现在在另一方面更像 starts_with():如果你将其中一个应用于 SPGiST 索引的列,你将得到一个使用 ^@ 而不是两个具有 >= 和 < 的索引条件的索引条件。根据 Shay Rojansky 的投诉。由我提交补丁;感谢 Nathan Bossart 的审阅。讨论: https://postgr.es/m/232599.1633800229@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/a148f8bc04b9980f019ea0d4b89311cf0bdc22b7
提供一个可以被 ^C 中断的 simple_prompt() 的变体。到目前为止,你无法通过键入 control-C(或 SIGINT 的其他本地拼写)退出 psql 的 \password 命令。这是非常不友好的,所以要改进它。为此,我们必须修改 pg_get_line.c 提供的函数;但是我们不想搞乱 psql 的 SIGINT 处理程序设置,因此提供一个 API,允许该处理程序导致取消发生。这依赖于我们不会通过从 fgets() 长跳转来造成任何重大危害的假设。虽然这显然有点不稳定,但我们在主输入循环中一直有同样的假设,并且很少有报告的问题。psql 有一些其他 simple_prompt() 调用,可以通过相同的方式进行有益的改进;现在,只处理 \password。Nathan Bossart,由我进行微小的调整。讨论: https://postgr.es/m/747443.1635536754@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/5f1148224bd78bcf3bf7d916b8fe85dd820c52c6
在编译位码时使用适当的 -Wno-warning 开关。我们使用“clang”来编译 LLVM 内联的位码文件。这可能与构建的主 C 编译器不同,因此它需要自己的一组编译器标志。为了简化配置,我们不费心在该标志集中添加任何 -W 开关;几乎没有需要,因为主构建会向我们显示任何警告。但是,如果我们不想看到不需要的警告,我们仍然必须添加我们通常与 clang 一起使用的任何 -Wno-warning 开关。这在提交 9ff47ea41 之前没有注意到,该提交试图添加 -Wno-compound-token-split-by-macro;使用不匹配的 CC 和 CLANG 的构建农场动物仍然显示这些警告。我不确定为什么我们从未看到缺少 -Wno-unused-command-line-argument 的任何影响(也许这只会被 -Wall 激活?)。clang 目前不支持 -Wno-format-truncation 或 -Wno-stringop-truncation,尽管为了未来的兼容性和一致性,我包括了对这些的测试。回溯到我们开始构建位码文件的 v11。讨论: https://postgr.es/m/2921539.1637254619@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/276517a96484f9e39a7a1095ab39fa76ef1ee8cc
允许 psql 的其他 simple_prompt() 用法被 ^C 中断。这填补了 5f1148224 未完成的工作。现在可以取消 \prompt,并且在 \connect 期间发出的密码提示也可以取消。(我们不需要为启动期间发出的密码提示做任何事情,因为我们此时还没有捕获 SIGINT。)Nathan Bossart 讨论: https://postgr.es/m/747443.1635536754@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/46d665bc26ce57b5afecbc218c8fc3c6848211d8
修复二进制兼容情况的 SP-GiST 扫描初始化逻辑。提交 ac9099fc1 重新排列了 spgGetCache() 中确定索引的 attType(标称输入数据类型)和 leafType(存储在叶索引元组中的实际类型)的逻辑。事实证明,这破坏了以下情况:(a) 实际输入数据类型与标称类型不同,(b) opclass 的 config 函数将 leafType 保留为默认值,并且 (c) opclass 没有“compress”函数。(b) 导致我们将实际输入数据类型分配为 leafType,然后由于它不是 attType,我们抱怨需要一个“compress”函数。对于非多态 opclass,条件 (a) 出现在二进制兼容的情况下,例如对 varchar 列使用 SP-GiST text_ops,或对标称输入类型上的域使用任何 opclass。为了修复,当索引的声明列类型与 attType 不同但二进制兼容时,请将 attType 用于 leafType。仅在默认的 leafType 情况下执行此操作,以避免覆盖 opclass 所做的任何显式选择。根据 Ilya Anfimov 的错误 #17294。回溯到 v14。讨论: https://postgr.es/m/17294-8f6c7962ce877edc@postgresql.org https://git.postgresql.org/pg/commitdiff/f4e7ae2b8a67ad6801726553a024a3306716ef80
文档:更新一些与最低 Test::More 版本相关的内容。提交 405f32fc4 中的疏忽。此外,添加了一个提示(通过艰难的方式发现)关于如何使 Test::More 0.98 通过其在最近的 Linux 平台上的回归测试。 https://git.postgresql.org/pg/commitdiff/92e70796e91e2f9086fad0156e0e91513e54a66b
pg_receivewal, pg_recvlogical:允许取消初始密码提示。以前,在提示输入密码时,无法通过 control-C 终止这些程序。我们可以通过将 SIGINT 处理程序的设置从它们的初始 GetConnection() 调用之前移动到之后来轻松解决它们的初始密码提示。此修复程序不允许退出以后的重新提示,但这些提示应该极其罕见,因为用户的密码或服务器的身份验证设置必须在此期间发生更改。我们考虑应用类似于提交 46d665bc2 的修复,但这似乎比它值得的要复杂得多。此外,这种方式是可回溯的,而那不是。该错误行为存在于所有受支持的版本中,因此回溯到所有版本。Tom Lane 和 Nathan Bossart 讨论: https://postgr.es/m/747443.1635536754@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/282b6d00abf5cebece6f94c796a4ed807a0176db
Andres Freund 推送了
Andrew Dunstan 推送了