发布了 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 提供。
请在太平洋标准时间(PST8PDT)周日晚上3:00之前将新闻和公告发送至 david@fetter.org。
Thomas Munro 推送
移除 Linux < 2.6.27 的 latch.c 临时修复。Commit 82ebbeb0 添加了一个临时修复,用于没有 epoll_create1() 和 EPOLL_CLOEXEC 的系统。Linux < 2.6.27 和 glibc < 2.9 已经很久不被支持了。现在似乎是时候删除额外的代码了,因为否则我们将不得不为使用同一内核版本发布的 XXX_CLOEXEC 标志的新补丁添加类似的已过时临时修复代码。Reviewed-by: Tom Lane tgl@sss.pgh.pa.us Discussion: https://postgr.es/m/CA%2BhUKGKL_%3DaO%3Dr30N%3Ds9VoDgTqHpRSzePRbA9dkYO7snc7HsxA%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/d1b90995e8d41df7e59efe48e98f26cd66baba9b
优化 latch,发送更少的信号。不要向未休眠的进程发送信号。Author: Andres Freund andres@anarazel.de Discussion: https://postgr.es/m/CA+hUKGJjxPDpzBE0a3hyUywBvaZuC89yx3jK9RFZgfv_KHU7gg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/c8f3bc2401e7df7b79bae39dd3511c91f825b6a4
在 latch 中使用 SIGURG 而非 SIGUSR1。传统上,SIGUSR1 被超载用于临时信号、procsignal.c 信号和 latch.c 唤醒。将最后一个用法移到一个新的专用信号。SIGURG 通常用于报告带外套接字数据,但 PostgreSQL 不使用该功能。InitializeLatchSupport() 现在在所有 postmaster 子进程中安装信号处理程序。希望断开连接的用户应调用 ShutdownLatchSupport()。未来的补丁将利用这种信号分离来避免在某些操作系统上需要信号处理程序。Discussion: https://postgr.es/m/CA+hUKGJjxPDpzBE0a3hyUywBvaZuC89yx3jK9RFZgfv_KHU7gg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/83709a0d5a46559db016c50ded1a95fd3b0d3be6
在 epoll latch 中使用 signalfd(2)。通过从 signalfd 读取而不是使用信号处理程序和自管道来减少系统调用和其他开销。影响 Linux 系统,以及可能包括实现 Linux epoll 和 signalfd 接口的 illumos。Reviewed-by: Andres Freund andres@anarazel.de Discussion: https://postgr.es/m/CA+hUKGJjxPDpzBE0a3hyUywBvaZuC89yx3jK9RFZgfv_KHU7gg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/6a2a70a02018d6362f9841cc2f499cc45405e86b
在 kqueue latch 中使用 EVFILT_SIGNAL。通过显式等待 SIGURG 而非使用信号处理程序和自管道来等待 kqueue,从而减少系统调用和其他开销。影响 *BSD 和 macOS 系统。这只剩下使用信号处理程序和传统的自管道技巧的 poll 实现。Discussion: https://postgr.es/m/CA+hUKGJjxPDpzBE0a3hyUywBvaZuC89yx3jK9RFZgfv_KHU7gg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/6148656a0be1c6245fbcfcbbeb87541f1b173162
为 FeBeWaitSet 位置引入符号名称。之前我们在代码的很多地方使用 0 和 1 来指代套接字和 latch,而没有进行任何解释。在几个尚未这样做的位置,我们也使用 PGINVALID_SOCKET 而非 -1。Reviewed-by: Kyotaro Horiguchi horikyota.ntt@gmail.com Discussion: https://postgr.es/m/CA%2BhUKGJAC4Oqao%3DqforhNey20J8CiG2R%3DoBPqvfR0vOJrFysGw%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/a042ba2ba7bb44f191f6f9398da27f04a958a0db
在 walsender.c 中使用 FeBeWaitSet。这避免了每次需要等待时设置和拆除新的 WaitEventSet。我们必须在 postmaster 退出时添加显式退出(FeBeWaitSet 未设置为自动执行此操作),因此将代码移到一个新函数中以避免重复。Reviewed-by: Kyotaro Horiguchi horikyota.ntt@gmail.com (earlier version) Discussion: https://postgr.es/m/CA%2BhUKGJAC4Oqao%3DqforhNey20J8CiG2R%3DoBPqvfR0vOJrFysGw%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/6230912f23904aa6cb2a1f948ca9b08235b4f54a
在 ProcSignalBarriers 中使用条件变量。使用条件变量进行精确唤醒,而不是轮询/睡眠循环,每当一个后端的 pss_barrierGeneration 递增时。Discussion: https://postgr.es/m/CA+hUKGLdemy2gBm80kz20GTe6hNVwoErE8KwcJk6-U56oStjtg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/814f1d8bc395bb9b4c0ae090ceea60adfbeb8e49
允许在中断代码中使用条件变量。调整条件变量的睡眠循环,以便在中断代码中正确工作,即使其内部的 CHECK_FOR_INTERRUPTS() 调用与另一个条件变量交互。目前没有这样的情况,但有一个提议的补丁会这样做。Discussion: https://postgr.es/m/CA+hUKGLdemy2gBm80kz20GTe6hNVwoErE8KwcJk6-U56oStjtg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/f5a5773a9dc4185414fe538525e20d8512c2ba35
移除 WaitForProcSignalBarrier() 的过时注释。Commit 814f1d8b 移除了所述行为。Reported-by: Amit Kapila amit.kapila16@gmail.com https://git.postgresql.org/pg/commitdiff/bd69ddfcdbf650f11af4317f3f6686c012cf66d0
添加 sort_template.h 以生成排序函数。我们将 qsort 实现移到一个头文件中,该头文件可用于定义专用函数,以提高性能并减少重复。Reviewed-by: Daniel Gustafsson daniel@yesql.se Discussion: https://postgr.es/m/CA%2BhUKGJ2-eaDqAum5bxhpMNhvuJmRDZxB_Tow0n-gse%2BHG0Yig%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/0a1f1d3cac6baaa3744b89336673caba702f7628
在 qsort() 和 qsort_arg() 中使用 sort_template.h。通过使用新的模板减少重复。Reviewed-by: Daniel Gustafsson daniel@yesql.se Discussion: https://postgr.es/m/CA%2BhUKGJ2-eaDqAum5bxhpMNhvuJmRDZxB_Tow0n-gse%2BHG0Yig%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/f374f4d66425060158d3c743dc6fb16cc0a2756a
在 qsort_tuple() 和 qsort_ssup() 中使用 sort_template.h。用 sort_template.h 替换了之前用于生成专用排序函数的 Perl 代码。Reviewed-by: Daniel Gustafsson daniel@yesql.se Discussion: https://postgr.es/m/CA%2BhUKGJ2-eaDqAum5bxhpMNhvuJmRDZxB_Tow0n-gse%2BHG0Yig%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/8eda3eba3063d619214b59f7bc7ecfc09c21b93a
Amit Kapila 提交
更新准备好的事务的解码文档。Commit a271a1b50e 在 ReorderBuffer 中引入了准备时解码。这可能导致使用此功能构建分布式 2PC 的外核逻辑复制解决方案死锁,因为此类事务会排他性地锁定 [user] 目录表。它们需要告知用户此类事务中不要持有目录表的锁(通过显式 LOCK 命令)。Reported-by: Andres Freund Discussion: https://postgr.es/m/20210222222847.tpnb6eg3yiykzpky@alap3.anarazel.de https://git.postgresql.org/pg/commitdiff/b4e3dc7fd420cdc2287f30a638c4affd071f01b2
更新 commit ce0fdbfe97 的逻辑复制文档。忘记更新逻辑复制配置设置页面。Commit ce0fdbfe97 之后,表同步工作进程也开始使用复制 origin 来跟踪进度,这应该反映在文档中。Author: Amit Kapila Discussion: https://postgr.es/m/CAA4eK1KkbppndxxRKbaT2sXrLkdPwy44F4pjEZ0EDrVjD9MPjQ@mail.gmail.com https://git.postgresql.org/pg/commitdiff/cf54e04b9e29a13c5e7c2386c5e2ff785e830414
避免在重启后重复解码准备好的事务。在 commit a271a1b50e 中,我们允许在准备时解码,并且如果在解码后重启,则会再次解码该准备。之所以这样做,是因为我们无法区分未解码准备(因为它早于一致快照)和已解码但重启的情况。为了区分这两种情况,我们在 slot 级别引入了一个 initial_consistent_point,它是在 slot 创建时找到一致点的 LSN。这也是导出初始复制快照的点。因此,在此点之前的准备事务将与 commit prepared 一起发送。此提交由于 SnapBuild 的更改而提高了 SNAPBUILD_VERSION。这将破坏现有的 slot,这在主版本中是可以接受的。Author: Ajin Cherian, based on idea by Andres Freund Reviewed-by: Amit Kapila and Vignesh C Discussion: https://postgr.es/m/d0f60d60-133d-bf8d-bd70-47784d8fabf3@enterprisedb.com https://git.postgresql.org/pg/commitdiff/8bdb1332eb51837c15a10a972c179b84f654279e
添加通过 pg_create_logical_replication_slot 启用两阶段提交的选项。Commit 0aa8a01d04 扩展了输出插件 API,以允许解码准备好的事务,并允许用户通过 pg_logical_slot_get_changes() 启用/禁用两阶段选项。这可能导致一个问题,即当使用 pg_logical_slot_get_changes() 获取更改而未启用两阶段选项时,即使准备发生在一致快照之后,它也不会获取准备好的事务。下次获取更改时,如果启用了两阶段选项,则可以跳过准备,因为此时已将解码开始点移走。因此,用户将只会获得 commit prepared。允许在创建 slot 时启用/禁用此选项,默认为 false。这将破坏现有的 slot,这在主版本中是可以接受的。Author: Ajin Cherian Reviewed-by: Amit Kapila and Vignesh C Discussion: https://postgr.es/m/d0f60d60-133d-bf8d-bd70-47784d8fabf3@enterprisedb.com https://git.postgresql.org/pg/commitdiff/19890a064ebf53dedcefed0d8339ed3d449b06e6
阐明了在订阅端 max_replication_slots 的使用。文档中并未明确说明 max_replication_slots 也用于跟踪订阅端的复制 origin。Author: Paul Martinez Reviewed-by: Amit Kapila Backpatch-through: 10 (where logical replication was introduced) Discussion: 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 和我审阅 Discussion: https://postgr.es/m/CANbhV-EPBnXm3MF_TTWBwwqgn1a1Ghmep9VHfqmNBQ8BT0f+_g@mail.gmail.com https://git.postgresql.org/pg/commitdiff/ffd3944ab9d481906137bc7d20f5325a2bd68acc
修正正则表达式反向引用的语义。POSIX 定义了反向引用的行为如下:“反向引用表达式 '\n' 应匹配与前面位于 '(' 和 ')' 之间的子表达式匹配的相同(可能是空的)字符串。”据我所知,反向引用应该只考虑引用的子表达式匹配的数据字符。但是,由于我们的引擎复制了从子表达式构建的 NFA,它实际上也强制执行了其中的任何约束。例如,'(^.)\1' 应该匹配 'xx',或任何以两个相同字符开头但相同的字符串;但在我们的代码中,它不匹配,实际上也无法匹配任何内容,因为 '^' 锚定约束包含在反向引用的复制 NFA 中。如果 POSIX 是这个意思,你认为他们会提到它。Perl 的行为就不是这样,所以很难断定这不是一个 bug。通过在复制引用子表达式的 NFA 后立即修改它来修复,将所有约束弧替换为 EMPTY 弧,以便约束被视为自动满足。这仍然允许我们强制执行仅依赖于数据字符的匹配规则;例如,在 '(^\d+).*\1' 中,匹配 NFA 步骤仍然知道反向引用只能匹配数字字符串。令人惊讶的是,这个改变并没有影响大量真实世界正则表达式的结果。尽管如此,我不会考虑向后移植它,因为它是一个明显的兼容性中断。Patch 由我编写,Joel Jacobson 审阅 Discussion: https://postgr.es/m/661609.1614560029@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/4aea704a5bfd4b5894a268499369ccab89940c9c
提高正则表达式反向引用的性能。在某些情况下,当我们进行基于 NFA 的预检查以确定反向引用子表达式在字符串的特定位置是否可以匹配时,我们已经知道引用的子表达式匹配的子字符串。如果是这样,我们不如忘记 NFA 而直接比较子字符串;这更快,而且它提供的是精确答案而不是近似答案。一般来说,这个优化可以在我们预检查 concat 节点的第二个子表达式时提供帮助,此时捕获在第一个子表达式中;然后子字符串在第一个子表达式的 cdissect() 过程中被保存,并在 cdissect() 递归到第二个子表达式时用于 NFA 检查。如果树看起来像 concat / \ capture concat / \ expensive stuff backref,它会有很大帮助,因为我们可以避免在发现反向引用无法满足下层 concat 节点正在测试的特定中点之前,递归地剖析“expensive stuff”。如果 concat 树是左深度的,这不会有帮助,因为捕获节点不会足够早地设置(并且很难在不改变引擎的匹配行为的情况下修复它)。幸运的是,右深度的 concat 树是常见情况。Patch 由我编写,Joel Jacobson 审阅 Discussion: https://postgr.es/m/661609.1614560029@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/0c3405cf11a12da1a4278c6833f4d979fe06c866
在另外几种情况下抑制不必要的 regex subre 节点。这扩展了 commit cebc1d34e 中所做的更改,使 parseqatom() 在某些边缘情况下生成更少或更便宜的 subre 节点。这里感兴趣的情况是量化原子,它“混乱”仅仅是因为其贪婪度与前面不同(而捕获和反向引用是内在的混乱)。在这种情况下,我们不需要迭代节点,因为我们不关心量词的子匹配在哪里;我们也可能不需要第二个连接节点。根据我的测试,这似乎在实际使用中只有边际效用,但我想在完成这一系列 regex 性能修复之前将其加入。Discussion: 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,cf bf8a662c9。)修改 libpq 以利用此功能将很快到来,但我认为单独推送服务器更改更清晰。Haribabu Kommi, Greg Nancarrow, Vignesh C;由 Laurenz Albe, Takayuki Tsunakawa, Peter Smith 在不同时间审阅。Discussion: 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”则反之。其他三种模式专门测试 hot-standby 状态,这并不完全相同。(在主服务器上设置 default_transaction_read_only 会使其对该逻辑变为只读,但对备用服务器则不会。)此外,如果连接到 v14 或更高版本的服务器,则无需额外的网络往返即可检测会话状态;服务器提供的 GUC_REPORT 变量就足够了。连接到旧服务器时,将发出 SHOW 或 SELECT 查询,以根据需要检测会话只读性或服务器 hot-standby 状态。Haribabu Kommi, Greg Nancarrow, Vignesh C, Tom Lane;由 Laurenz Albe, Takayuki Tsunakawa, Peter Smith 在不同时间审阅。Discussion: https://postgr.es/m/CAF3+xM+8-ztOkaV9gHiJ3wfgENTq97QcjXQt+rbFQ6F7oNzt9A@mail.gmail.com https://git.postgresql.org/pg/commitdiff/ee28cacf619f4d9c23af5a80e1171a5adae97381
在 commit ee28cacf6 中抑制不必要的 perlcritic 警告。根据 buildfarm;此修复来自 Michael Paquier(vignesh C 提出了几乎相同的建议)。Discussion: 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 失败中所见。同时进行一些小的美学改进。在 commit ee28cacf6 之前,我们在这里没有预料到连接失败的测试,因此似乎没有必要向后移植。Discussion: https://postgr.es/m/CALDaNm2mo8YED=M2ZJKGf1U3F3mw6SaQuLXWCK8rZP6sECYcrA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/3769e11a31831fc2f3bd4c4a24b4f45c352fb8fb
添加 trim_array() 函数。自 2008 年以来,该函数已在 SQL 规范中。它是一个非常轻量的数组切片功能封装,但规范要求我们拥有它,所以就有了它。Vik Fearing,由 Dian Fay 审阅 Discussion: https://postgr.es/m/fc92ce17-9655-8ff1-c62a-4dc4c8ccd815@postgresfriends.org https://git.postgresql.org/pg/commitdiff/0a687c8f103d217ff1ca8c34a644b380d89bb0ad
移除 contrib 类型已弃用的包含运算符。自 PG 8.2 起,@ 和 ~ 已被弃用为包含运算符 @> 和 <@ 的别名。似乎已经过去了足够长的时间可以实际移除它们,因此将其移除。这完成了由 commit 2f70fdb06 开始的项目。请注意,在核心类型中,与首选运算符名称的关系与在这些 contrib 模块中的关系相反。这种混淆是弃用的主要原因之一。Justin Pryzby Discussion: https://postgr.es/m/20201027032511.GF9241@telsasoft.com https://git.postgresql.org/pg/commitdiff/112d411fbeb56afd18c117e20b524a86afc9aba5
文档:移除 BRIN 策略编号表中的过时条目。参见 commit 591d282e8。Justin Pryzby 注意到 Discussion: 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 Discussion: https://postgr.es/m/CAOP8fzZO4y60QPTK=RGDXeVeVHV9tLHKOsh7voUOoUouVCPV8A@mail.gmail.com https://git.postgresql.org/pg/commitdiff/1265a9c8f871cfa5aea4d607b1ab72b45b96dbb7
Michaël Paquier 提交
文档:提及信号处理中的 archive_command 故障处理。行为类似于 restore_command,后者已在文档中为恢复部分进行了记录,但未为归档部分记录。Author: Benoit Lobréau Reviewed-by: Julien Rouhaud Discussion: https://postgr.es/m/CAPE8EZ7akCzc1hWohA4AcbmKtHh9rcWAB5MStOeZD2+9jC+hLQ@mail.gmail.com https://git.postgresql.org/pg/commitdiff/8c1b6a186d420de863d1334c8917dcd047a7845a
文档:改进数据校验和的描述。这部分撤销了 bcf2667 的合并,并改进了之前文档的措辞。根据与 Justin Pryzby 的讨论。Discussion: https://postgr.es/m/20210301004647.GF20769@telsasoft.com https://git.postgresql.org/pg/commitdiff/bd1b8d0ef2eb5f2a8765fbb3b74e0262c9983942
简化 tablecmds.c 中切换 pg_class.relrowsecurity 的代码。在启用或禁用 ROW LEVEL SECURITY 的 ALTER TABLE 命令中,相同的代码模式被重复了两次。这使得代码更加简洁。Author: Justin Pryzby Reviewed-by: Zhihong Yu Discussion: https://postgr.es/m/20210228211854.GC20769@telsasoft.com https://git.postgresql.org/pg/commitdiff/fabde52fab976ff782d77c80b8e2614f94f9dce1
修复 reindexdb 的 TAP 测试中重复的测试用例。REINDEX (VERBOSE) 的相同测试被执行了两次,而很明显第二次测试应该使用 --concurrently。此问题在 5dc92b8 中引入,似乎是复制粘贴错误。Reviewed-by: Mark Dilger Discussion: https://postgr.es/m/A7AE97EA-F4B0-4CAB-8FFF-3FECD31F9D63@enterprisedb.com Backpatch-through: 12 https://git.postgresql.org/pg/commitdiff/c5530d8474a482d32c0d9bb099707d9a8e117f96
为 reindexdb 添加 --tablespace 选项。此选项为 reindexdb 提供 REINDEX (TABLESPACE) 功能,将调用者提供的 tablespace 值应用于所有生成的 REINDEX 查询。顺便说一句,此提交为 REINDEX TABLESPACE 添加了一些测试,无论是否使用 CONCURRENTLY,在对 toast 索引和表运行时。此类操作不允许,并且 toast 关系名称不够稳定,无法成为主回归测试套件的一部分(即使使用带有 TRY/CATCH 逻辑的 PL 函数,因为 CONCURRENTLY 无法进行测试)。Author: Michael Paquier Reviewed-by: Mark Dilger, Daniel Gustafsson Discussion: 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/ 中运行。Author: Michael Paquier Reviewed-by: Juan José Santamaría Flecha, Julien Rouhaud Discussion: https://postgr.es/m/YD9GigwHoL6lFY2y@paquier.xyz https://git.postgresql.org/pg/commitdiff/5bca69a76b3046a85c60c48271c1831fd5affa51
文档:为进度报告文档添加反向链接。以前,唯一提到进度报告的地方是关于其目录的监控部分。通过从支持进度报告的命令页面添加指向其相关目录视图的链接,使进度报告更易于发现。Author: Matthias van de Meent Reviewed-by: Justin Pryzby, Bharath Rupireddy, Josef Šimánek, Tomas Vondra Discussion: 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 失败,它会提供更多关于连接尝试的信息,所以在此之前日志并没有真正有用)。Author: Kota Miyake Reviewed-by: Fujii Masao, Michael Paquier Discussion: https://postgr.es/m/026b3ae6fc339a18394d053c32a4463d@oss.nttdata.com https://git.postgresql.org/pg/commitdiff/f1516ad7b3a9645a316846fa7b2229163bc55907
Álvaro Herrera 提交
Peter Geoghegan 提交
修复 nbtree 页删除错误消息。调整一些“不可能发生”的错误消息,这些消息假设页删除目标页必须是半死页。在内部目标页的情况下,这个假设是错误的。只需将这些页称为目标页即可。内部页从不被标记为半死页。对于每个正在删除的子树,恰好有一个半死页。半死页也是目标子树的叶级别页。自 commit 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 中的本地副本。Author: Daniel Gustafsson daniel@yesql.se Discussion: https://postgresql.ac.cn/message-id/flat/9328.1552952117@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/f06b1c598254f8adb2b7f51d6a7685618a7fb121
pg_upgrade:修复版本检查中的疏忽。f06b1c598254f8adb2b7f51d6a7685618a7fb121 中的错误:我们只应该检查目标安装中二进制文件的版本。源安装当然可以是不同版本。Reviewed-by: Daniel Gustafsson daniel@yesql.se Discussion: 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 已经存在。Author: Alexey Bashtanov bashtanov@imap.cc Reviewed-by: Ibrar Ahmed ibrar.ahmad@gmail.com Discussion: https://postgresql.ac.cn/message-id/flat/9d4582ae-ecfc-3a13-2238-6ab5a37c1f41@imap.cc https://git.postgresql.org/pg/commitdiff/f9a0392e1cf36179c984f655a6589734b8dd7468
Heikki Linnakangas 提交
移除 FE/BE 协议版本 2 的服务器和 libpq 支持。协议版本 3 在 PostgreSQL 7.4 中引入。可能没有多少客户端或服务器仍然不支持版本 3。但作为一种礼貌,我保留了旧协议支持的最低限度,以便仍然可以发送“不支持的协议版本”错误(以 v2 格式),以便旧客户端可以正确显示消息。同样,libpq 在建立连接时仍然理解 v2 ErrorResponse 消息。现在进行此操作的驱动力是我正在处理一个 COPY FROM 的补丁,以始终预取一些数据。旧协议无法安全地执行此操作,因为它需要逐字节解析输入以检测复制结束标记。Reviewed-by: Tom Lane, Alvaro Herrera, John Naylor Discussion: https://postgresql.ac.cn/message-id/9ec25819-0a8a-d51a-17dc-4150bb3cca3b%40iki.fi https://git.postgresql.org/pg/commitdiff/3174d69fb96a66173224e60ec7053b988d5ed4d9
避免 FE 协议版本 2 中收到的错误中的额外换行符。与注释所说相反,postmaster 自服务器版本 7.2 起确实会在所有消息末尾添加换行符。请保持整洁,如果错误消息已包含换行符,请不要添加额外的换行符。Discussion: 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 文档的链接。Author: David Johnston Reviewed-By: Anastasia Lubennikova Discussion: https://postgr.es/m/CAKFQuwYLLRhheo0_Y4Jp=vJ_YDsz1KoRuTpX1A_bUxmHTmLe-A@mail.gmail.com https://git.postgresql.org/pg/commitdiff/e045565dae4b2368ba812d60ef0fb7f927fe2646
澄清 CREATEROLE 角色被视为管理员。Author: Michael Banck Reviewed-By: Robert Treat Discussion: 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 发送了另一个补丁修订版,以澄清 archiver 中信号处理的文档。
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 的输出中提及 URIs 和 services。
Peter Smith 和 Ajin Cherian 交换了补丁,以实现两阶段事务的逻辑解码。
Greg Nancarrow 和 Amit Kapila 交换了补丁,以启用 "INSERT INTO ... SELECT ..." 的并行 SELECT,添加了一个新的布尔 GUC enable_parallel_dml,以及一个类似的表选项 parallel_dml_enabled。
Dian M Fay 发送了两个补丁修订版,以在 postgres_fdw 中抑制文本常量的显式转换,当二元 OpExpr 的另一侧也是文本时。
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 SETs。
Mark Dilger 发送了另一个补丁修订版,以添加一个 contrib 扩展 pg_amcheck。
Pavel Borisov 发送了另一个补丁修订版,以使 amcheck 检查 btree 索引的 UNIQUE 约束。
Jacob Champion 发送了另一个补丁修订版,以向表 AM 添加一个 API,该 API 接受一个列投影列表。
Joel Jacobson 发送了两个补丁修订版,以支持带有边界信息的空范围。
Tomáš Vondra 发送了三个后续的补丁修订版,以实现 BRIN 多范围索引。
Peter Eisentraut 发送了另一个补丁修订版,以实现 SQL 标准的函数体。
Thomas Munro 发送了两个后续的补丁修订版,以实现并行全哈希连接。
Magnus Hagander 发送了五个补丁修订版,以添加 PROXY 协议支持。
Vigneshwaran C 发送了一个补丁,以通过分离 Perl 代码中的声明和赋值来修复 crake 中的 Buildfarm 故障。
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 发送了另一个补丁修订版,以跟踪回滚的复制 origin 进度。
Masahiro Ikeda 和 Fujii Masao 交换了补丁,向 pg_stat_wal 添加了 WAL 写入/fsync 统计信息。
Justin Pryzby 和 Takayuki Tsunakawa 交换了补丁,以加速具有外部分区的表的 COPY FROM 操作。
Álvaro Herrera 和 Justin Pryzby 交换了补丁,为 libpq 添加了批量/流水线支持。
Daniel Gustafsson 发送了三个后续的补丁修订版,以禁止 SSL 压缩。
Andrey V. Lepikhov 和 Tom Lane 交换了补丁,以移除 64K 的 rangetable 限制。
Robins Tharakan 发送了一个补丁,以修复 pg_upgrade 在处理大量大对象时的错误。
Jacob Champion 发送了一个补丁,以重构 sslfiles 的 Makefile 目标。
Kyotaro HORIGUCHI 发送了另一个补丁修订版,以将回调调用从 ReadPageInternal 移动到 XLogReadRecord,将页读取器移出 XLogReadRecord,移除全局变量 readOff、readLen 和 readSegNo,并允许 xlogreader 使用不同的 xlog 块大小。
Andy Fan 发送了一个补丁,以调整分区裁剪情况的成本模型。
Kyotaro HORIGUCHI 发送了另一个补丁修订版,以使 End-Of-Recovery 错误不那么吓人。
Heikki Linnakangas 发送了另一个补丁修订版,以强制在 COPY FROM 解析中进行前瞻。
Daniel Gustafsson 发送了另一个补丁修订版,以移除 libpq 中已弃用的参数 authtype 和 pqtty。
Amul Sul 发送了另一个补丁修订版,以使用全局屏障实现 wal 禁止状态,并在 WAL 写入的 START_CRIT_SECTION 之前进行错误处理或断言。
Thomas Munro 发送了一个补丁,使 relfile tombstone 文件依赖于 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 发送了另一个补丁修订版,以在 truncate 成功后延迟 checkpoint 完成。
Kota Miyake 发送了一个补丁,以移除 pgbench 的 \sleep 元命令中的一些瑕疵。
Hou Zhijie 发送了一个补丁,以避免在 INSERT 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 is not a PostgreSQL server process" 消息,方法是分离不允许发送信号的情况。
Li Japin 提交了另一版补丁,用于实现 ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION。
Joe Conway 发送了一个补丁,以修复 has_column_privilege()" 中的一个 bug,该 bug 错误地处理了 attnums 和不存在的列。
Justin Pryzby 发送了另一个补丁修订版,以实现 ALTER TABLE SET ACCESS METHOD,允许指定分区表的表访问方法由分区继承,并实现 lsyscache get_rel_relam(),因为现在表 AM 已经生效。