parquet_s3_fdw 0.1 发布,这是一个用于 S3 上 parquet 文件的外部数据包装器。https://github.com/pgspider/parquet_s3_fdw/releases/tag/v0.1
https://archives.postgresql.org/pgsql-jobs/2021-03/
Planet PostgreSQL:https://planet.postgresql.org/
本周的 PostgreSQL 每周新闻由 David Fetter 为您带来
请在太平洋标准时间下午 3:00 之前(PST8PDT)将新闻和公告提交至 david@fetter.org。
Thomas Munro 推送了
删除 Linux < 2.6.27 的 latch.c 解决方法。提交 82ebbeb0 添加了一个针对没有 epoll_create1() 和 EPOLL_CLOEXEC 的系统的解决方法。Linux < 2.6.27 和 glibc < 2.9 早已过时。现在似乎是删除额外代码的好时机,否则我们将不得不为在同一内核版本中出现的使用 XXX_CLOEXEC 标志的新补丁添加类似的早已失效的解决方法代码。由 Tom Lane 审核 tgl@sss.pgh.pa.us 讨论:https://postgr.es/m/CA%2BhUKGKL_%3DaO%3Dr30N%3Ds9VoDgTqHpRSzePRbA9dkYO7snc7HsxA%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/d1b90995e8d41df7e59efe48e98f26cd66baba9b
优化锁存器以发送更少的信号。不要向未休眠的进程发送信号。作者:Andres Freund andres@anarazel.de 讨论:https://postgr.es/m/CA+hUKGJjxPDpzBE0a3hyUywBvaZuC89yx3jK9RFZgfv_KHU7gg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/c8f3bc2401e7df7b79bae39dd3511c91f825b6a4
使用 SIGURG 而不是 SIGUSR1 作为锁存器。传统上,SIGUSR1 被重载用于临时信号、procsignal.c 信号和 latch.c 唤醒。将最后一种用法转移到新的专用信号。SIGURG 通常用于报告带外套接字数据,但 PostgreSQL 不使用此功能。信号处理程序现在由 InitializeLatchSupport() 安装在所有 postmaster 子进程中。希望断开连接的用户应调用 ShutdownLatchSupport()。未来的补丁将使用这种信号分离来避免在某些操作系统上需要信号处理程序。讨论:https://postgr.es/m/CA+hUKGJjxPDpzBE0a3hyUywBvaZuC89yx3jK9RFZgfv_KHU7gg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/83709a0d5a46559db016c50ded1a95fd3b0d3be6
将 signalfd(2) 用于 epoll 锁存器。通过从 signalfd 读取而不是使用信号处理程序和自管道,减少系统调用和其他开销。影响 Linux 系统以及可能实现 Linux epoll 和 signalfd 接口的其他系统,包括 illumos。由 Andres Freund 审核 andres@anarazel.de 讨论:https://postgr.es/m/CA+hUKGJjxPDpzBE0a3hyUywBvaZuC89yx3jK9RFZgfv_KHU7gg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/6a2a70a02018d6362f9841cc2f499cc45405e86b
将 EVFILT_SIGNAL 用于 kqueue 锁存器。通过使用 kqueue 显式等待 SIGURG 而不是使用信号处理程序和自管道,减少系统调用和其他开销。影响 *BSD
和 macOS 系统。这使得只有轮询实现具有信号处理程序和传统的自管道技巧。讨论:https://postgr.es/m/CA+hUKGJjxPDpzBE0a3hyUywBvaZuC89yx3jK9RFZgfv_KHU7gg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/6148656a0be1c6245fbcfcbbeb87541f1b173162
为 FeBeWaitSet 位置引入符号名称。以前,我们使用 0 和 1 来引用树中遥远部分的套接字和锁存器,没有任何解释。还在几个未这样做的位置使用 PGINVALID_SOCKET 而不是 -1。由 Kyotaro Horiguchi 审核 horikyota.ntt@gmail.com 讨论:https://postgr.es/m/CA%2BhUKGJAC4Oqao%3DqforhNey20J8CiG2R%3DoBPqvfR0vOJrFysGw%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/a042ba2ba7bb44f191f6f9398da27f04a958a0db
将 FeBeWaitSet 用于 walsender.c。这避免了每次需要等待时设置和拆卸新的 WaitEventSet 的需要。我们必须在 postmaster 退出时添加显式退出(FeBeWaitSet 未设置为自动执行此操作),因此将执行此操作的代码移动到新函数中以避免重复。由 Kyotaro Horiguchi 审核 horikyota.ntt@gmail.com(早期版本)讨论:https://postgr.es/m/CA%2BhUKGJAC4Oqao%3DqforhNey20J8CiG2R%3DoBPqvfR0vOJrFysGw%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/6230912f23904aa6cb2a1f948ca9b08235b4f54a
将条件变量用于 ProcSignalBarriers。每当后端的 pss_barrierGeneration 提前时,使用条件变量进行精确唤醒,而不是使用轮询/休眠循环。讨论:https://postgr.es/m/CA+hUKGLdemy2gBm80kz20GTe6hNVwoErE8KwcJk6-U56oStjtg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/814f1d8bc395bb9b4c0ae090ceea60adfbeb8e49
允许在中断代码中使用条件变量。调整条件变量休眠循环,使其在内部 CHECK_FOR_INTERRUPTS() 调用到达的代码与另一个条件变量交互时正常工作。目前没有这种情况,但拟议的补丁会这样做。讨论:https://postgr.es/m/CA+hUKGLdemy2gBm80kz20GTe6hNVwoErE8KwcJk6-U56oStjtg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/f5a5773a9dc4185414fe538525e20d8512c2ba35
删除 WaitForProcSignalBarrier() 的过时注释。提交 814f1d8b 删除了所描述的行为。由 Amit Kapila 报告 amit.kapila16@gmail.com https://git.postgresql.org/pg/commitdiff/bd69ddfcdbf650f11af4317f3f6686c012cf66d0
添加 sort_template.h 以创建排序函数。将我们的 qsort 实现移动到可用于定义专用函数以提高性能并减少重复的标头中。由 Daniel Gustafsson 审核 daniel@yesql.se 讨论:https://postgr.es/m/CA%2BhUKGJ2-eaDqAum5bxhpMNhvuJmRDZxB_Tow0n-gse%2BHG0Yig%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/0a1f1d3cac6baaa3744b89336673caba702f7628
将 sort_template.h 用于 qsort() 和 qsort_arg()。通过使用新模板减少重复。由 Daniel Gustafsson 审核 daniel@yesql.se 讨论:https://postgr.es/m/CA%2BhUKGJ2-eaDqAum5bxhpMNhvuJmRDZxB_Tow0n-gse%2BHG0Yig%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/f374f4d66425060158d3c743dc6fb16cc0a2756a
将 sort_template.h 用于 qsort_tuple() 和 qsort_ssup()。使用 sort_template.h 替换以前用于生成专用排序函数的 Perl 代码。由 Daniel Gustafsson 审核 daniel@yesql.se 讨论:https://postgr.es/m/CA%2BhUKGJ2-eaDqAum5bxhpMNhvuJmRDZxB_Tow0n-gse%2BHG0Yig%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/8eda3eba3063d619214b59f7bc7ecfc09c21b93a
Amit Kapila 推送了
更新已准备的事务解码的文档和注释。提交 a271a1b50e 在 ReorderBuffer 中的 prepare 时引入了解码。对于使用此功能构建分布式 2PC 的核外逻辑复制解决方案,这可能会导致死锁,因为此类事务会独占锁定 [用户] 目录表。他们需要通知用户在此类事务中不要锁定目录表(通过显式 LOCK 命令)。由 Andres Freund 报告 讨论:https://postgr.es/m/20210222222847.tpnb6eg3yiykzpky@alap3.anarazel.de https://git.postgresql.org/pg/commitdiff/b4e3dc7fd420cdc2287f30a638c4affd071f01b2
更新提交 ce0fdbfe97 的逻辑复制文档。忘记更新逻辑复制配置设置页面。在提交 ce0fdbfe97 之后,表同步工作器也开始使用复制源来跟踪进度,并且应该在文档中反映这一点。作者:Amit Kapila 讨论:https://postgr.es/m/CAA4eK1KkbppndxxRKbaT2sXrLkdPwy44F4pjEZ0EDrVjD9MPjQ@mail.gmail.com https://git.postgresql.org/pg/commitdiff/cf54e04b9e29a13c5e7c2386c5e2ff785e830414
避免在重启后重复解码已准备的事务。在提交 a271a1b50e 中,我们允许在 prepare 时进行解码,如果在解码后重新启动,则会再次解码 prepare。这样做是因为我们无法区分我们没有解码 prepare 的情况,因为在一致快照之前,或者我们之前解码了 prepare 但重新启动了。为了区分这两种情况,我们在槽级别引入了一个 initial_consistent_point,这是一个 LSN,我们在此 LSN 上在创建槽时找到了一个一致点。这也是我们导出初始副本快照的点。因此,在此点之前的 prepare 事务会与提交准备一起发送。此提交会由于 SnapBuild 中的更改而提升 SNAPBUILD_VERSION。它将破坏现有的槽,这在主要版本中是可以接受的。作者:Ajin Cherian,基于 Andres Freund 的想法。由 Amit Kapila 和 Vignesh C 审核 讨论:https://postgr.es/m/d0f60d60-133d-bf8d-bd70-47784d8fabf3@enterprisedb.com https://git.postgresql.org/pg/commitdiff/8bdb1332eb51837c15a10a972c179b84f654279e
添加通过 pg_create_logical_replication_slot 启用两阶段提交的选项。提交 0aa8a01d04 扩展了输出插件 API,以允许解码已准备的事务,并允许用户通过 pg_logical_slot_get_changes() 启用/禁用两阶段选项。这可能会导致问题,即第一次通过未启用两阶段选项的 pg_logical_slot_get_changes() 获取更改时,即使 prepare 在一致快照之后,也不会获得 prepare。现在,下次在获取更改期间,如果启用两阶段选项,则可以跳过 prepare,因为那时开始解码点已移动。因此,用户只会获得提交准备。允许在创建槽时启用/禁用此选项,默认值将为 false。这将破坏现有的槽,这在主要版本中是可以接受的。作者:Ajin Cherian 由 Amit Kapila 和 Vignesh C 审核 讨论:https://postgr.es/m/d0f60d60-133d-bf8d-bd70-47784d8fabf3@enterprisedb.com https://git.postgresql.org/pg/commitdiff/19890a064ebf53dedcefed0d8339ed3d449b06e6
澄清订阅者端 max_replication_slots 的用法。文档中不清楚 max_replication_slots 也用于跟踪订阅者端的复制源。作者:Paul Martinez 由 Amit Kapila 审核 向后移植:10(引入逻辑复制的地方)讨论:https://postgr.es/m/CACqFVBZgwCN_pHnW6dMNCrOS7tiHCw6Retf_=U2Vvj3aUSeATw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/8af3c233e423e106a5121000ecd92abf57c11704
Andres Freund 推送了
Tom Lane 提交
改进多行 JSON 数据中语法错误的报告。指向检测到错误的特定行;之前的代码往往会包含前面几行。避免重新扫描整个输入以重新计算是哪一行。稍微简化逻辑。添加测试用例。Simon Riggs 和 Hamid Akhtar,由 Daniel Gustafsson 和我审核。讨论:https://postgr.es/m/CANbhV-EPBnXm3MF_TTWBwwqgn1a1Ghmep9VHfqmNBQ8BT0f+_g@mail.gmail.com
https://git.postgresql.org/pg/commitdiff/ffd3944ab9d481906137bc7d20f5325a2bd68acc
修复正则表达式反向引用的语义。POSIX 这样定义反向引用的行为:反向引用表达式 '\n' 应当匹配与被括号 "(" 和 ")" 包围的子表达式在 '\n' 之前所匹配的相同(可能为空)的字符串。据我所知,反向引用应该只考虑被引用的子表达式匹配的数据字符。但是,由于我们的引擎复制从引用的子表达式构建的 NFA,它也有效地强制执行其中的任何约束。例如,'(^.)\1' 应该匹配 'xx',或者任何其他以两个相同的字符开头的字符串;但在我们的代码中它不会,实际上也不能匹配任何内容,因为 '^' 锚点约束包含在反向引用的复制 NFA 中。如果 POSIX 打算那样做,你可能会认为他们会提到它。例如,Perl 的行为不是这样,所以很难得出这不是一个错误的结论。通过在从引用复制后立即修改反向引用的 NFA 来修复,将所有约束弧替换为 EMPTY 弧,以便将约束视为自动满足。这仍然允许我们强制执行仅依赖于数据字符的匹配规则;例如,在 '(^\d+).*\1'
中,匹配步骤的 NFA 仍然会知道反向引用只能匹配数字字符串。也许令人惊讶的是,此更改不会影响任何相当大的真实世界正则表达式语料库的结果。尽管如此,我不会考虑反向移植它,因为它是一个明显的兼容性中断。由我提交补丁,由 Joel Jacobson 审核。讨论:https://postgr.es/m/661609.1614560029@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/4aea704a5bfd4b5894a268499369ccab89940c9c
提高正则表达式反向引用的性能。在某些情况下,当我们基于 NFA 预检查反向引用子表达式是否可以在字符串中的特定位置匹配时,我们已经知道引用的子表达式匹配哪个子字符串。如果是这样,我们不妨忘记 NFA 并只比较子字符串;这更快,并且给出的是精确的而不是近似的答案。一般来说,当我们在 concat 节点的第二个子表达式中进行预检查时,如果捕获在第一个子表达式中,则此优化可以有所帮助;然后,子字符串在第一个子表达式的 cdissect() 期间被保存,并且在 cdissect() 递归到第二个子表达式时可用于 NFA 检查。如果树看起来像 concat / \ 捕获 concat / \ 昂贵的东西 反向引用,这将很有帮助,因为我们可以避免递归地剖析“昂贵的东西”,然后才发现反向引用不满足较低的 concat 节点正在测试的特定中间点。如果 concat 树是左倾的,这没有帮助,因为捕获节点不会很快被设置(并且很难在不改变引擎匹配行为的情况下修复它)。幸运的是,右倾 concat 树是常见的情况。由我提交补丁,由 Joel Jacobson 审核。讨论:https://postgr.es/m/661609.1614560029@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/0c3405cf11a12da1a4278c6833f4d979fe06c866
在更多情况下抑制不必要的正则表达式 subre 节点。这扩展了在提交 cebc1d34e 中所做的更改,教导 parseqatom() 在某些边缘情况下生成更少或更便宜的 subre 节点。这里感兴趣的情况是一个量化的原子,它之所以“混乱”仅仅是因为它的贪婪性与它之前的贪婪性相反(而捕获和反向引用本质上是混乱的)。在这种情况下,我们不需要迭代节点,因为我们不关心量词的子匹配在哪里;我们可能也不需要第二个连接节点。根据我的测试,这似乎只有很少的实际用途,但我希望在完成这一系列的正则表达式性能修复之前将其加入。讨论:https://postgr.es/m/1340281.1613018383@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/4604f83fdfe030a2f1984159ede5270c1d825310
将 default_transaction_read_only 标记为 GUC_REPORT。这允许客户端在连接时找出设置,而无需花费查询往返来执行此操作;这在尝试识别读/写服务器时很有帮助。(还必须查看 in_hot_standby,但这已经是 GUC_REPORT,参见 bf8a662c9。)修改 libpq 以利用这一点很快就会到来,但我认为单独推送服务器更改会更干净。Haribabu Kommi,Greg Nancarrow,Vignesh C;由 Laurenz Albe,Takayuki Tsunakawa,Peter Smith 在不同时间审核。讨论:https://postgr.es/m/CAF3+xM+8-ztOkaV9gHiJ3wfgENTq97QcjXQt+rbFQ6F7oNzt9A@mail.gmail.com https://git.postgresql.org/pg/commitdiff/d16f8c8e416d288bd4734ed5f14076b62ec8d153
扩展 libpq 的 target_session_attrs 参数的功能。除了现有的“any”和“read-write”选项外,我们现在支持“read-only”、“primary”、“standby”和“prefer-standby”。“read-write”保留了其先前“事务默认情况下是读写的”的含义,“read-only”则相反。其他三种模式专门测试热备状态,这并不完全相同。(在主服务器上设置 default_transaction_read_only 会使此逻辑将其设置为只读,但不是备用服务器。)此外,如果与 v14 或更高版本的服务器通信,则无需额外的网络往返即可检测会话状态;服务器传递的 GUC_REPORT 变量就足够了。在与旧服务器通信时,会根据需要发出 SHOW 或 SELECT 查询来检测会话的只读性或服务器热备状态。Haribabu Kommi,Greg Nancarrow,Vignesh C,Tom Lane;由 Laurenz Albe,Takayuki Tsunakawa,Peter Smith 在不同时间审核。讨论:https://postgr.es/m/CAF3+xM+8-ztOkaV9gHiJ3wfgENTq97QcjXQt+rbFQ6F7oNzt9A@mail.gmail.com https://git.postgresql.org/pg/commitdiff/ee28cacf619f4d9c23af5a80e1171a5adae97381
消除提交 ee28cacf6 中的 perlcritic 警告。根据 buildfarm;此修复来自 Michael Paquier(vignesh C 提出了几乎相同的修复)。讨论:https://postgr.es/m/YD8IZ9OKfUf9X1eF@paquier.xyz https://git.postgresql.org/pg/commitdiff/d422a2a94b1e7a7bb25da9d5511fffff750c3f21
使 test_target_session_attrs 在连接失败时更加健壮。通过“-c”而不是 stdin 将所需的命令馈送到 psql,否则 Perl 可能会抱怨它无法将 stdin 推送到已经失败的 psql 进程,这在间歇性的 buildfarm 失败中可见。同时进行一些小的外观改进。在提交 ee28cacf6 之前,我们这里没有期望连接失败的测试,因此似乎不需要进行反向移植。讨论:https://postgr.es/m/CALDaNm2mo8YED=M2ZJKGf1U3F3mw6SaQuLXWCK8rZP6sECYcrA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/3769e11a31831fc2f3bd4c4a24b4f45c352fb8fb
添加 trim_array() 函数。自 2008 年以来,这已在 SQL 规范中。它是数组切片功能的相当薄的包装器,但规范说我们应该有它,所以它在这里。Vik Fearing,由 Dian Fay 审核。讨论:https://postgr.es/m/fc92ce17-9655-8ff1-c62a-4dc4c8ccd815@postgresfriends.org https://git.postgresql.org/pg/commitdiff/0a687c8f103d217ff1ca8c34a644b380d89bb0ad
删除 contrib 类型的已弃用包含运算符。自 PG 8.2 以来,@ 和 ~ 已被弃用,作为包含运算符 @> 和 <@ 的别名。现在似乎已经过去足够长的时间来实际删除它们,所以这样做。这完成了提交 2f70fdb06 中开始的项目。请注意,在核心类型中,与首选运算符名称的关系与这些 contrib 模块中的关系相反。造成混乱的原因很大程度上是弃用。Justin Pryzby。讨论:https://postgr.es/m/20201027032511.GF9241@telsasoft.com https://git.postgresql.org/pg/commitdiff/112d411fbeb56afd18c117e20b524a86afc9aba5
文档:删除 BRIN 策略编号表中的过时条目。参见提交 591d282e8。由 Justin Pryzby 注意到。讨论:https://postgr.es/m/20201027032511.GF9241@telsasoft.com https://git.postgresql.org/pg/commitdiff/0ce4cd04da558178b0186057b721c50a00b7a945
为 cube 数据类型添加二进制 I/O 功能。我们可以调整尚未发布的 cube--1.4--1.5.sql 升级,而不是创建一个全新的版本。KaiGai Kohei。讨论:https://postgr.es/m/CAOP8fzZO4y60QPTK=RGDXeVeVHV9tLHKOsh7voUOoUouVCPV8A@mail.gmail.com https://git.postgresql.org/pg/commitdiff/1265a9c8f871cfa5aea4d607b1ab72b45b96dbb7
Michaël Paquier 提交
文档:提及信号上的 archive_command 失败处理。该行为类似于 restore_command,后者已经在恢复部分进行了文档记录,但存档部分没有。作者:Benoit Lobréau 审核者:Julien Rouhaud。讨论:https://postgr.es/m/CAPE8EZ7akCzc1hWohA4AcbmKtHh9rcWAB5MStOeZD2+9jC+hLQ@mail.gmail.com https://git.postgresql.org/pg/commitdiff/8c1b6a186d420de863d1334c8917dcd047a7845a
文档:改进数据校验和的描述。这部分地还原了被错误合并的 bcf2667,并改进了之前存在的文档的措辞。根据与 Justin Pryzby 的讨论。讨论:https://postgr.es/m/20210301004647.GF20769@telsasoft.com https://git.postgresql.org/pg/commitdiff/bd1b8d0ef2eb5f2a8765fbb3b74e0262c9983942
简化 tablecmds.c 中切换 pg_class.relrowsecurity 的代码。使用 ALTER TABLE 命令启用或禁用行级安全性时,相同的代码模式重复了两次。这使得代码稍微简洁一些。作者:Justin Pryzby。审核者:Zhihong Yu。讨论:https://postgr.es/m/20210228211854.GC20769@telsasoft.com https://git.postgresql.org/pg/commitdiff/fabde52fab976ff782d77c80b8e2614f94f9dce1
修复 reindexdb 的 TAP 测试中重复的测试用例。对 REINDEX (VERBOSE) 的相同测试进行了两次,而很明显第二个测试应该使用 --concurrently。在 5dc92b8 中引入的问题,看起来像是复制粘贴错误。审核者:Mark Dilger。讨论:https://postgr.es/m/A7AE97EA-F4B0-4CAB-8FFF-3FECD31F9D63@enterprisedb.com 反向移植到:12 https://git.postgresql.org/pg/commitdiff/c5530d8474a482d32c0d9bb099707d9a8e117f96
向 reindexdb 添加 --tablespace 选项。此选项为 reindexdb 提供 REINDEX (TABLESPACE),将调用者给出的表空间值应用于生成的所有 REINDEX 查询。在此基础上,此提交为在 toast 索引和表上运行时,添加了一些使用和不使用 CONCURRENTLY 的 REINDEX TABLESPACE 测试。不允许此类操作,并且 toast 关系名称不够稳定,无法成为主回归测试套件的一部分(即使使用带有 TRY/CATCH 逻辑的 PL 函数也是如此,因为无法测试 CONCURRENTLY)。作者:Michael Paquier。审核者:Mark Dilger,Daniel Gustafsson。讨论:https://postgr.es/m/YDiaDMnzLICqeukl@paquier.xyz https://git.postgresql.org/pg/commitdiff/57e6db706e81fd2609fa385677e6ae72471822fe
在 MSVC 脚本中添加对 PROVE_TESTS 和 PROVE_FLAGS 的支持。这些可以在 buildenv.pl 中设置,或者在 Windows 终端中使用 "set" 命令设置。MSVC 脚本 vcregress.pl 解析环境变量中的可用值来构建最终的 prove 命令,并且 PROVE_TESTS 的解析能够像其他平台一样处理名称模式。如果不指定这些环境变量值,vcregress.pl 将回退到之前的默认值,prove 命令不会有额外的标志,并且所有测试都在 t/ 目录下运行。作者:Michael Paquier 审核人:Juan José Santamaría Flecha, Julien Rouhaud 讨论:https://postgr.es/m/YD9GigwHoL6lFY2y@paquier.xyz https://git.postgresql.org/pg/commitdiff/5bca69a76b3046a85c60c48271c1831fd5affa51
文档:添加指向进度报告文档的反向链接。以前,唯一提到进度报告的地方是在专门针对其目录的监控部分。通过从支持进度报告的命令页面添加链接到其相关的目录视图,这使得进度报告更容易被发现。作者:Matthias van de Meent 审核人:Justin Pryzby, Bharath Rupireddy, Josef Šimánek, Tomas Vondra 讨论:https://postgr.es/m/CAEze2WiOcgdH4aQA8NtZq-4dgvnJzp8PohdeKchPkhMY-jWZXA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/8a8f4d8ede288c2a29105f4708e22ce7f3526149
pgbench:简化一些端口、主机、用户和数据库名称的赋值。在设置了 PGPORT 和 PGUSER 的环境中使用 pgbench 会导致生成一个包含错误数据库名称的调试日志,这是由于 412893b 中的疏忽造成的。如果不使用选项开关指定用户、端口和/或数据库,并且没有相应的环境变量,则会生成一个包含空字符串的日志条目,这相当无用。此提交通过简化获取连接信息的逻辑来修复这一系列问题,删除了模拟 libpq 已执行的操作的一组 getenv() 调用。有问题的调试日志现在直接使用来自 libpq 连接的信息,并且在完成与后端的连接后生成,而不是之前(如果发生故障,libpq 会抱怨更多关于连接尝试的信息,因此日志在之前并不是真的有用)。作者:Kota Miyake 审核人:Fujii Masao, Michael Paquier 讨论:https://postgr.es/m/026b3ae6fc339a18394d053c32a4463d@oss.nttdata.com https://git.postgresql.org/pg/commitdiff/f1516ad7b3a9645a316846fa7b2229163bc55907
Álvaro Herrera 推送
Peter Geoghegan 推送
修复 nbtree 页面删除错误消息。调整一些假设页面删除目标页面必须是半死页面的“不可能发生”的错误消息。在内部目标页面的情况下,此假设是错误的。只需将这些页面称为目标页面即可。内部页面永远不会被标记为半死页面。每个正在删除的子树只有一个半死页面。半死页面也是目标子树的叶级页面。自 efada2b8 提交以来一直是这种情况,该提交完全修改了 nbtree 页面删除。https://git.postgresql.org/pg/commitdiff/3d8d5787a358156edaa7782f0c88e231af974a01
nbtree 页面删除:添加 leaftopparent 断言。添加文档断言。这使得更容易了解我们如何在目标子树的半死/叶级页面中维护顶部父链接。https://git.postgresql.org/pg/commitdiff/5b2f2af3d9d57626b9052a05337e32ad1399093d
Peter Eisentraut 推送
对 GUC 描述进行了一些编辑。https://git.postgresql.org/pg/commitdiff/e527a99055154bb7fe6ed67f0417a67cf11fa056
pg_upgrade:检查目标集群二进制文件的版本。这通过每个二进制文件的版本检查扩展了 pg_upgrade 中的二进制文件验证,以确保目标集群安装仅包含来自目标版本的二进制文件。为了减少重复,validate_exec 从 port.h 导出,并且删除了 pg_upgrade 中的本地副本。作者:Daniel Gustafsson daniel@yesql.se 讨论:https://postgresql.ac.cn/message-id/flat/9328.1552952117@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/f06b1c598254f8adb2b7f51d6a7685618a7fb121
pg_upgrade:修复版本检查中的疏忽。f06b1c598254f8adb2b7f51d6a7685618a7fb121 中的错误:我们应该只检查目标安装中二进制文件的版本。当然,源安装可以是不同的版本。审核人:Daniel Gustafsson daniel@yesql.se 讨论:https://postgresql.ac.cn/message-id/flat/E1lHNKN-0005IC-V6%40gemulon.postgresql.org https://git.postgresql.org/pg/commitdiff/040af779382e8e4797242c49b93a5a8f9b79c370
添加 bit_xor 聚合函数。这可以用作无序集合的校验和。bit_and 和 bit_or 已经存在。作者:Alexey Bashtanov bashtanov@imap.cc 审核人:Ibrar Ahmed ibrar.ahmad@gmail.com 讨论:https://postgresql.ac.cn/message-id/flat/9d4582ae-ecfc-3a13-2238-6ab5a37c1f41@imap.cc https://git.postgresql.org/pg/commitdiff/f9a0392e1cf36179c984f655a6589734b8dd7468
Heikki Linnakangas 推送
删除服务器和 libpq 对旧 FE/BE 协议版本 2 的支持。协议版本 3 在 PostgreSQL 7.4 中引入。不应该有太多客户端或服务器不支持版本 3。但是,出于礼貌,我保留了足够多的旧协议支持,以便我们仍然可以发送 v2 格式的“不支持的协议版本”错误,以便旧客户端可以正确显示该消息。同样,libpq 在建立连接时仍然理解 v2 ErrorResponse 消息。现在执行此操作的动力是我正在开发一个 COPY FROM 的补丁,以始终预取一些数据。我们不能使用旧协议安全地执行此操作,因为它需要一次解析一个字节的输入以检测复制结束标记。审核人:Tom Lane, Alvaro Herrera, John Naylor 讨论:https://postgresql.ac.cn/message-id/9ec25819-0a8a-d51a-17dc-4150bb3cca3b%40iki.fi https://git.postgresql.org/pg/commitdiff/3174d69fb96a66173224e60ec7053b988d5ed4d9
避免在 FE 协议版本 2 中收到的错误中出现多余的换行符。与注释所说相反,自服务器版本 7.2 以来,postmaster 实际上在其所有消息中都以换行符结尾。如果错误消息已经有换行符,请保持整洁,不要添加额外的换行符。讨论:https://postgresql.ac.cn/message-id/CAFBsxsEdgMXc%2BtGfEy9Y41i%3D5pMMjKeH8t8vSAypR3ZnAoQnHg%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/85d94c575302644e7ddb4392c3bda572f981ec34
Fujii Masao 推送
Andrew Dunstan 推送
Magnus Hagander 推送
改进有关可更新视图的文档。在深入细节之前介绍选项,并添加指向 CREATE TRIGGER 文档的链接。作者:David Johnston 审核人:Anastasia Lubennikova 讨论:https://postgr.es/m/CAKFQuwYLLRhheo0_Y4Jp=vJ_YDsz1KoRuTpX1A_bUxmHTmLe-A@mail.gmail.com https://git.postgresql.org/pg/commitdiff/e045565dae4b2368ba812d60ef0fb7f927fe2646
澄清 CREATEROLE 角色被视为管理员。作者:Michael Banck 审核人:Robert Treat 讨论:https://postgr.es/m/2160a5071a7bb5339055b04a8cad81a822be9d8d.camel@credativ.de https://git.postgresql.org/pg/commitdiff/30b26dfac7db2fc76dafaa8a6c459871bfcd100e
Pavel Stěhule 发送了另一个修订版补丁,以实现架构变量。
Maxim Orlov 发送了一个补丁,以修复 libpq 连接字符串中 TLS 和多个主机之间的不协调。
Thomas Munro 发送了另外两个修订版补丁,以添加用于 walreceiver 状态的条件变量,另一个用于恢复暂停/恢复,并在恢复中减少轮询 postmaster 的频率。
Ajin Cherian 和 Amit Kapila 交换了补丁,以添加一个选项,通过 pg_create_logical_replication_slot 启用两阶段提交。
Michael Banck 发送了一个补丁,以向 pg_dump/pg_dumpall 添加一个 --create-only 选项。
Michaël Paquier 发送了另一个修订版补丁,以阐明归档程序中信号处理的文档。
Etsuro Fujita 发送了另一个修订版补丁,以在 postgres_fdw 节点上实现异步追加。
Peter Eisentraut 发送了另一个修订版补丁,以处理构建中的 macOS SIP。
Laurenz Albe 和 Amit Langote 交换了补丁,以允许在分区表上设置 parallel_workers。
Joel Jacobson 发送了三个修订版补丁,以实现 regexp_positions(),它返回每个匹配项的起始和结束位置。
Thomas Munro 发送了另外两个修订版补丁,以提供一个新的可选 GUC,该 GUC 可用于检查客户端连接在运行非常长的查询时是否定期断开。
Paul Förster 发送了另一个修订版补丁,以在 psql --help 的输出中提及 URI 和服务。
Peter Smith 和 Ajin Cherian 交换了补丁,以实现两阶段事务的逻辑解码。
Greg Nancarrow 和 Amit Kapila 交换了补丁,以启用 “INSERT INTO ... SELECT ...” 的并行 SELECT,添加一个新的布尔 GUC enable_parallel_dml,以及类似的表选项 parallel_dml_enabled。
Dian M Fay 发送了两个修订版补丁,以在二进制 OpExpr 的另一侧也是文本时,禁止 postgres_fdw 中文本常量的显式转换。
Dilip Kumar 发送了三个修订版补丁,以添加表的压缩方法选项。
Julien Rouhaud 发送了另一个修订版补丁,以将查询混淆从 pg_stat_statements 移动到核心,在 pg_stat_activity 和 log_line_prefix 中公开 queryid,并在 EXPLAIN ... VERBOSE 中公开查询标识符。
Bruce Momjian 发送了一个补丁,以修复一些 GiST 代码注释。
Vik Fearing 发送了另一个修订版补丁,以实现 GROUP BY DISTINCT,它省略了重复的 GROUPING SET。
Mark Dilger 发送了另一个修订版补丁,以添加一个 contrib 扩展 pg_amcheck。
Pavel Borisov 发送了另一个修订版补丁,以使 amcheck 检查 btree 索引的 UNIQUE 约束。
Jacob Champion 提交了补丁的另一个修订版本,该补丁为表访问方法(AM)添加一个 API,以接受列投影列表。
Joel Jacobson 提交了补丁的两个修订版本,以支持带有边界信息的空范围。
Tomáš Vondra 提交了补丁的另外三个修订版本,以实现 BRIN 多范围索引。
Peter Eisentraut 提交了补丁的另一个修订版本,以实现 SQL 标准函数体。
Thomas Munro 提交了补丁的另外两个修订版本,以实现并行全哈希连接。
Magnus Hagander 提交了补丁的五个修订版本,以添加 PROXY 协议支持。
Vigneshwaran C 提交了一个补丁,通过在 Perl 代码中将声明与赋值分开来修复 Buildfarm 中 crake 的失败问题。
Michaël Paquier 提交了补丁的另一个修订版本,以在检查是否需要进行 SSL 之前启用 libcrypto 回调。
Daniel Gustafsson 提交了补丁的另一个修订版本,以支持 NSS 作为 libpq TLS 后端。
Gilles Darold 提交了一个补丁,以实现 regexp_count、regexp_instr、regexp_substr 和 regexp_replace。
David Rowley 提交了补丁的另一个修订版本,以减少在 Windows 上构建 contrib 模块的特殊情况数量。
Amit Langote 提交了补丁的另一个修订版本,以使 UPDATE 和 DELETE 在继承树上更好地扩展。
John Naylor 提交了一个补丁,以审查当前 popcount 实现的一些替代方案。
Mark Rofail 提交了补丁的另一个修订版本,以实现外键数组。
Pavel Stěhule 提交了补丁的另外三个修订版本,以使 psql 能够为 \watch 使用分页器。
Tom Lane 提交了补丁的另一个修订版本,以删除协议版本 2 中对 COPY FROM STDIN 的支持。
Mark Dilger 提交了补丁的两个修订版本,以添加 pg_amcheck contrib 应用程序。
Soumyadeep Chakraborty 和 Kyotaro HORIGUCHI 交换了补丁,以防止检查点程序写入旧的时间线。
Amit Kapila 提交了补丁的另一个修订版本,以跟踪回滚的复制源进度。
Masahiro Ikeda 和 Fujii Masao 交换了补丁,以将 WAL 写入/fsync 统计信息添加到 pg_stat_wal。
Justin Pryzby 和 Takayuki Tsunakawa 交换了补丁,以加快在外部分区表上的 COPY FROM 操作。
Álvaro Herrera 和 Justin Pryzby 交换了补丁,为 libpq 添加批处理/管道支持。
Daniel Gustafsson 提交了补丁的另外三个修订版本,以禁止 SSL 压缩。
Andrey V. Lepikhov 和 Tom Lane 交换了补丁,以删除 64K 的范围表限制。
Robins Tharakan 提交了一个补丁,以修复 pg_upgrade 对大量大对象的处理。
Jacob Champion 提交了一个补丁,以重构 sslfiles Makefile 目标。
Kyotaro HORIGUCHI 提交了补丁的另一个修订版本,将回调调用从 ReadPageInternal 移动到 XLogReadRecord,将页面读取器移出 XLogReadRecord,删除全局变量 readOff、readLen 和 readSegNo,并允许 xlogreader 使用不同的 xlog 块大小。
Andy Fan 提交了一个补丁,以调整分区修剪案例的成本模型。
Kyotaro HORIGUCHI 提交了补丁的另一个修订版本,以使恢复结束错误不那么可怕。
Heikki Linnakangas 提交了补丁的另一个修订版本,以强制在 COPY FROM 解析中进行前瞻。
Daniel Gustafsson 提交了补丁的另一个修订版本,以从 libpq 中删除已弃用的参数 authtype 和 pqtty。
Amul Sul 提交了补丁的另一个修订版本,以使用全局屏障实现 wal 禁止状态,并在 WAL 写入的 START_CRIT_SECTION 之前报错或断言。
Thomas Munro 提交了一个补丁,使 relfile 墓碑文件以 WAL 级别为条件。
Amit Langote 提交了补丁的另一个修订版本,以对分区修剪步骤生成代码进行一些外观上的改进。
Thomas Munro 提交了补丁的另一个修订版本,以使用条件变量替换缓冲区 I/O 锁。
Thomas Munro 提交了补丁的另外两个修订版本,以添加缺少的 pthread_barrier_t,重构 pgbench 中线程移植性的实现方式,改进 pgbench 的时间测量代码,并同步其客户端线程。
Julien Rouhaud 提交了补丁的另一个修订版本,以修复各种共享内存估算问题。
Laurenz Albe 提交了补丁的另外两个修订版本,如果编辑器在没有保存的情况下退出,通过保留当前查询缓冲区而不是执行先前的查询来改进 \e、\ef 和 \ev 命令。
Masahiko Sawada 提交了补丁的两个修订版本,以确保在 TRUNCATE 时重置 pg_stat_xxx_tables.n_mod_since_analyze。
Tomáš Vondra 提交了补丁的另外两个修订版本,使其可以收集表达式的扩展统计信息。
Hayato Kuroda 提交了补丁的另一个修订版本,以重构 ECPGconnect 并允许在其中进行 IPv6 连接。
Kyotaro HORIGUCHI 提交了补丁的另一个修订版本,以在截断成功后延迟检查点完成。
Kota Miyake 提交了一个补丁,以删除 pgbench 的 \sleep 元命令中的一些缺陷。
Hou Zhijie 提交了一个补丁,以避免在插入 FK 关系时 RI 触发器中的 CCI。
Ibrar Ahmed 提交了补丁的另一个修订版本,以修复先前为了更高效地实现 GROUP BY 而破坏的测试。
Kirk Jamison 提交了补丁的另一个修订版本,以在 libpq 中实现跟踪。
Kyotaro HORIGUCHI 提交了补丁的另一个修订版本,以将统计信息收集器从使用文件进行临时存储更改为使用共享内存。
Andres Freund 提交了补丁的另一个修订版本,以确保在 Windows 上,仅当 stderr 无效时,PostgreSQL 才被视为作为服务运行。
Thomas Munro 提交了补丁的另一个修订版本,以注入故障计时,并修复并行哈希连接批处理清理中的竞争条件。
Andrew Dunstan 提交了一个补丁,以允许匹配来自客户端证书的整个 DN。
KaiGai Kohei 和 Tom Lane 交换了补丁,以将二进制输入/输出处理程序添加到 contrib/cube。
Bharath Rupireddy 提交了补丁的另外两个修订版本,以将刷新物化视图的代码重构为一组函数,并实现 EXPLAIN/EXPLAIN ANALYZE REFRESH MATERIALIZED VIEW。
Justin Pryzby 提交了一个启动程序补丁,使其可以将 Typ
转换为 List*
,并使用它来允许在启动程序中使用复合类型。
Kyotaro HORIGUCHI 提交了一个补丁,通过添加 CHECKPOINT 来修复 011_crash_recovery.pl 中的间歇性故障。
Joel Jacobson 提交了一个补丁,以创建 pg_permissions 视图。
Joel Jacobson 提交了一个补丁,以创建 pg_ownerships 视图。
Justin Pryzby 提交了补丁的另一个修订版本,使其可以在分区索引上运行 CLUSTER。
Bharath Rupireddy 提交了补丁的另一个修订版本,以添加另一种 pg_terminate_backend 风格,允许用户指定等待和超时。
Bharath Rupireddy 提交了补丁的另一个修订版本,通过分离出不允许发送信号的情况,改进“PID XXXX 不是 PostgreSQL 服务器进程”消息。
Li Japin 提交了补丁的另一个修订版本,以实现 ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION。
Joe Conway 提交了一个补丁,以修复 has_column_privilege() 中的一个错误,该错误导致 attnums 和不存在的列错误。
Justin Pryzby 提交了补丁的另一个修订版本,以实现 ALTER TABLE SET ACCESS METHOD,允许指定分区表的表访问方法由分区继承,并实现 lsyscache get_rel_relam(),因为表的 AM 现在正在使用。