暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

​PostgreSQL 15.0 Release Notes暨新特性(中文)

数据库杂记 2023-02-19
67

PostgreSQL 15.0 Release Notes

自:PostgreSQL: Documentation: 15: E.1. Release 15

(Sean 整理.  2022.10.17)

一、简介

PostgreSQL 15包含了许多新特性和增强功能,包括:

  • 支持SQL MERGE命令。

  • 通过指定列列表和行筛选条件,在逻辑复制发布中选择性发布表内容。

  • 更多的压缩选项,包括支持Zstandard (zstd)压缩。这包括支持在pg_basebackup期间在服务器端执行压缩。

  • 支持使用JSON格式的结构化服务器日志输出。

  • 性能改进,特别是在内存和磁盘排序方面。

以上项目和PostgreSQL 15的其他新特性将在下面的章节中更详细地解释。

二、移植到PG15

如果希望从以前的任何版本迁移数据,则需要使用pg_dumpall或pg_upgrade或逻辑复制进行转储/恢复。有关迁移到新的主要版本的一般信息,请参阅第19.6节。

版本15包含了许多可能会影响与以前版本兼容性的更改。需要看看以下不兼容性:

  • 移除公共模式上的PUBLIC创建权限(Noah Misch)

    新的默认值是自CVE-2018-1058的安全版本发布以来第5.9.6节推荐的安全模式使用模式之一。此更改适用于新的数据库集群和现有集群中新创建的数据库。升级集群或恢复数据库转储将保留public的现有权限。

    对于现有的数据库,特别是那些有多个用户的数据库,可以考虑取消公共模式上的CREATE权限,以采用这个新的默认值。对于不需要防御内部威胁的新数据库,授予CREATE权限将生成以前版本的行为。

  • 将公共模式的所有者更改为新的pg_database_owner角色(Noah Misch)

    这允许每个数据库的所有者对其数据库中的公共模式拥有所有权特权。以前它是由引导超级用户拥有的,因此非超级用户数据库所有者不能使用它做任何事情。

    此更改适用于新的数据库集群和现有集群中新创建的数据库。升级集群或恢复数据库转储将保留公共的现有所有权规范。

  • 删除长期不使用的独占备份模式(大卫·斯蒂尔,内森·博萨特)

    如果数据库服务器在此模式下突然停止,则服务器可能无法启动。非独占备份模式在所有用途上都被认为是优越的。函数pg_start_backup()/pg_stop_backup()被重命名为pg_backup_start()/pg_backup_stop(),函数pg_backup_start_time()和pg_is_in_backup()被移除。

  • 将hash_mem_multiplier默认值增加到2.0 (Peter Geoghegan)

    这允许查询哈希操作比其他操作使用更多的work_mem内存。

  • 删除服务器端语言plpython2u和通用Python语言plpythonu (Andres Freund)

    Python 2不再支持。虽然plpythonu的初衷是它最终可以引用plpython3u,但现在更改它似乎更有可能引起问题,而不是解决问题,因此它被删除了。

  • 如果array_to_tsvector()传递了一个空字符串数组元素,则产生错误

    这是被禁止的,因为词素永远不应该是空的。以前Postgres版本的用户应该验证没有存储空词素,因为它们可能导致转储/还原失败和不一致的结果。

  • 当为chr()提供一个否定的参数时产生错误(Peter Eisentraut)

  • 防止CREATE OR REPLACE VIEW改变输出列的排序规则(Tom Lane)

  • 禁止零长度的Unicode标识符,例如U&"" (Peter Eisentraut)

    非unicode零长度标识符已经被禁止。

  • 防止数字文字有非数字的尾随字符(Peter Eisentraut)

    以前,像123abc这样的查询文本会被解释为123后面跟着一个单独的令牌abc。

  • 调整JSON数字文字处理以匹配SQL/JSON标准(彼得·Eisentraut)

    它接受像.1和1这样的数字格式。,并且禁止在数字文字后面尾随垃圾,比如1.type()。

  • 当间隔输入为大于月份的单位提供一个小数值时,四舍五入到最近的月份(Bruce Momjian)

    例如,将1.99年转换为2年,而不是之前的1年11个月。

  • 提高间隔解析与结尾句号的一致性(Tom Lane)

    在一些平台上,带有结尾句号(trailing periods)的数字被拒绝。

  • 将interval输出函数标记为稳定的,而不是不可变的,因为它依赖于IntervalStyle (Tom Lane)

    例如,这将导致依赖于区间值的文本输出的索引创建失败。

  • 在区间证明函数中检测整数溢出(乔·科沙科夫)

    受影响的函数是:justification y_interval()、justification y_hours()和justification y_days()。

  • 为非ascii字符更改char类型的I/O格式(汤姆·莱恩)

    设置高位的字节现在输出为一个反斜杠和三个八进制数字,以避免编码问题。

  • 删除登录角色在自己的角色成员上的默认ADMIN OPTION特权(罗伯特哈斯)

    以前,登录角色可以添加/删除自己角色的成员,即使没有ADMIN OPTION特权。

  • 允许逻辑复制作为订阅的所有者运行(Mark Dilger)

    因为不检查行级安全策略,所以只有超级用户、带有bypassrls的角色和表所有者才能复制到具有行级安全策略的表中。

  • 防止订阅所有者对表没有SELECT权限的表进行UPDATE和DELETE逻辑复制操作(Jeff Davis)

    UPDATE和DELETE命令通常也涉及读取表,因此要求订阅所有者具有表SELECT权限。

  • 当EXPLAIN引用会话的临时对象模式时,将其引用为pg_temp (Amul Sul)

    以前报告的是实际的模式名称,这导致了会话之间的不一致。

  • 修复pg_statio_all_tables对具有多个索引的TOAST表的值求和(Andrei Zubkov)

    以前这种情况下,每个索引显示一行。

  • 不允许设置与已安装扩展名匹配的自定义选项,但不是扩展的声明变量之一(Florin Irion, Tom Lane)

    此更改导致在扩展加载期间删除任何这样的预先存在的变量,然后阻止在会话中稍后创建新变量。其目的是防止混淆变量是否与扩展关联。

  • 删除过时的服务器变量stats_temp_directory (Andres Freund, Kyotaro Horiguchi)

  • 改进用于计算随机Random()的算法(Fabien Coelho)

    这将导致random()的结果与以前版本发出的结果不同,即使对于相同的种子值也是如此。

  • 在管道模式下不再支持libpq的PQsendQuery()函数(Álvaro Herrera)

    使用该组合的应用程序需要修改为使用PQsendQueryParams()。

  • 在非windows平台上,咨询HOME环境变量以查找用户的主目录(Anders Kaseorg)

    如果HOME为空或未设置,则退回到检查<pwd.h>数据库的前一种方法。此更改影响libpq(例如,在查找~/.pgpass时)以及各种客户机应用程序。

  • 删除pg_dump的——no-synchronized-snapshots选项

    所有仍受支持的服务器版本都支持同步快照,因此不再需要这个选项。

  • 在psql的——single-transaction模式中检测到错误后,仅当设置了ON_ERROR_STOP时,将最后的COMMIT命令更改为ROLLBACK (Michael Paquier)

  • 避免在postgres_fdw发送的查询中不必要地转换常量

    当本地和远程数据库之间的列类型有意不同时,这种强制转换可能会导致错误。

  • 删除xml2的xml_is_well_formed()函数(Tom Lane)

    这个功能从Postgres 9.1开始就在核心后端实现了。

  • 允许自定义扫描提供者表明它们是否支持投影(Sven Klemm)

    默认情况是现在自定义扫描提供程序假定不支持投影;这些需要在这个版本中进行更新。

三、变化的地方

下面你将看到PostgreSQL 15和之前主要版本之间的详细变化。

3.1 服务器端

  • 记录并检查每个数据库的collation(排序相关)版本(Peter Eisentraut)

    此特性旨在检测整理版本的更改,以避免索引损坏。函数pg_database_collation_actual_version()报告底层操作系统排序版本,而ALTER DATABASE…REFRESH将记录的数据库排序规则版本设置为与操作系统排序规则版本匹配。

  • 允许将ICU排序规则设置为集群和数据库的默认设置(Peter Eisentraut)

    以前,只能在集群和数据库级别选择基于lib的排序规则。ICU排序只能通过显式COLLATE子句使用。

  • 添加系统视图pg_ident_file_mappings来报告pg_id .conf信息(Julien Rouhaud)

3.1.1分区

  • 改进引用分区表的查询的规划时间(David Rowley)

    当许多分区中只有少数几个是相关的时,此更改会有所帮助。

  • 允许对分区进行有序扫描,以避免在更多的情况下进行排序(大卫罗利)

    以前,带有DEFAULT分区或包含多个值的LIST分区的分区表不能用于有序分区扫描。现在,如果在规划期间修剪了这些分区,就可以使用它们。

  • 改进在分区之间移动行的分区表上的更新外键行为(Amit Langote) . 以前,这样的更新在源分区上运行删除操作,在目标分区上运行插入操作。PostgreSQL现在将在分区根上运行更新操作,提供更清晰的语义。

  • 允许在分区表上使用CLUSTER (Justin Pryzby)

  • 修复了分区表上的ALTER TRIGGER RENAME,以正确地重命名所有分区上的触发器(Arne Roland, Álvaro Herrera)。同时禁止重命名克隆的触发器。

3.1.2 索引

  • 允许系统和TOAST表上的btree索引有效地存储副本(Peter Geoghegan),以前对这些类型的索引禁用了重复数据删除。

  • 改进使用排序构建的GiST索引的查找性能(Aliaksandr Kalenik, Sergei Shoulbakov, Andrey Borodin)

  • 允许唯一约束和索引将NULL值视为不明确的(Peter Eisentraut)。以前NULL条目总是被视为不同的值,但现在可以通过使用UNIQUE NULLS NOT distinct创建约束和索引来改变这一点。

  • 允许^@ start_with操作符和starts_with()函数在使用C排序规则时使用btree索引(Tom Lane)。以前只能使用SP-GiST索引。

3.1.3 优化器

  • 允许扩展统计记录父级及其所有子级的统计信息(Tomas Vondra, Justin Pryzby)

  • 常规统计已经分别追踪了父母和父母加上所有孩子的统计数据。

  • 添加服务器变量recursive_worktable_factor,以允许用户指定递归查询工作表的期望大小(Simon Riggs)

3.1.4 常规性能

  • 允许对具有许多常量的NOT IN子句进行哈希查找(David Rowley, James Coleman),以前,代码总是按顺序扫描值列表。

  • 允许SELECT DISTINCT并行化(大卫罗利)

  • 通过一次处理16个字节来加速UTF-8文本的编码验证(John Naylor, Heikki Linnakangas),这将改进COPY FROM等文本密集型操作。

  • 提高超过work_mem的排序的性能(Heikki Linnakangas),当排序数据不再适合work_mem时,切换到使用比以前更多输出流的批排序算法。

  • 提高性能并减少内存类型的内存消耗(Ronan Dunklau, David Rowley, Thomas Munro, John Naylor)

  • 允许WAL整页写入使用LZ4和Zstandard压缩(Andrey Borodin, Justin Pryzby),这是由wal_compression服务器设置控制的。

  • 增加对在macOS上使用直接I/O编写WAL的支持(Thomas Munro),这只在max_wal_senders = 0和wal_level = minimal时有效。

  • 允许vacuum更积极地设置最古老的冻结和多事务id(彼得盖根)

  • 允许一个引用多个外表的查询在更多情况下执行并行外表扫描(Andrey Lepikhov, Etsuro Fujita)

  • 改进使用row_number(), rank(), dense_rank()和count()的窗口函数的性能(David Rowley)

  • 提高高核数ARM64系统上自旋锁的性能(杰弗里布莱克)

3.1.5 监控

  • 启用默认的检查点日志记录和缓慢的自动抽真空操作(Bharath Rupireddy),这会将log_检查点的默认值更改为on,将log_autovacuum_min_duration的默认值更改为10分钟。这甚至会导致空闲的服务器生成一些日志输出,这可能会在没有日志文件旋转的资源受限的服务器上造成问题。在这种情况下,应该更改这些默认值。

  • 在服务器缓慢启动期间在服务器日志中生成进度消息(Nitin Jadhav, Robert Haas),消息报告了延迟的原因。通知的时间间隔由新的服务器变量log_startup_progress_interval控制。

  • 在共享内存中存储累积的统计系统数据(Kyotaro Horiguchi, Andres Freund, Melanie Plageman),以前,这些数据通过UDP包发送到统计收集器进程,并且只能在通过文件系统传输后由会话读取。不再有单独的统计收集器进程。

  • 为VACUUM VERBOSE和自动VACUUM日志消息添加额外的信息(彼得盖根),为临时文件块I/O添加EXPLAIN (BUFFERS)输出

  • 允许JSON格式的日志输出(Sehrope Sarkuni, Michael Paquier),新的设置是log_destination = jsonlog。

  • 允许pg_stat_reset_single_table_counters()重置跨所有数据库共享关系的计数器(Sadhuprasad Patro)

  • 为本地shell命令添加等待事件(Fujii Masao),新的等待事件在调用archive_command、archive_cleanup_command、restore_command和recovery_end_command时使用。

3.1.6 权限

  • 允许视图执行的表访问可选地由视图调用者的特权控制(Christoph Heiss),以前,视图访问总是被视为由视图的所有者完成。这仍然是默认设置。

  • 允许pg_write_server_files预定义角色的成员执行服务器端基本备份(Dagfinn Ilmari Mannsåker),以前只有超级用户才能执行这种备份。

  • 允许GRANT通过SET和ALTER SYSTEM授予更改单个服务器变量的权限(马克迪尔格),新函数has_parameter_privilege()报告了这个特权。

  • 添加预定义的角色pg_checkpoint,允许成员运行CHECKPOINT (Jeff Davis),以前检查点只能由超级用户运行。

  • 允许pg_read_all_stats预定义角色的成员访问视图pg_backend_memory_contexts和pg_shmem_allocations (Bharath Rupireddy)以前,只有超级用户才能访问这些视图。

  • 允许GRANT对pg_log_backend_memory_contexts()授予权限(Jeff Davis),以前这个功能只能由超级用户运行。

3.1.7 服务器配置

  • 添加服务器变量shared_memory_size来报告已分配共享内存的大小(Nathan Bossart)

  • 添加服务器变量shared_memory_size_in_huge_pages来报告所需的巨大内存页的数量(Nathan Bossart)。这只在Linux上支持。

  • 允许服务器变量shared_preload_libraries在单用户模式下(杰夫戴维斯)。此更改支持使用shared_preload_libraries来加载自定义访问方法和WAL资源管理器,这对于即使在单用户模式下的数据库访问也是必不可少的。

  • 在Solaris上,使dynamic_shared_memory_type的默认设置为sysv (Thomas Munro)。前面的默认选择posix可能会在这个平台上导致虚假的故障。

  • 允许postgres -C正确报告运行时计算值(Nathan Bossart)。以前的运行时计算值data_checksum、wal_segment_size和data_directory_mode将报告运行服务器上不准确的值。但是,这在运行中的服务器上不起作用。

3.2 流复制和恢复

  • 增加对服务器端基础备份的LZ4和Zstandard压缩的支持(Jeevan Ladhe, Robert Haas)

  • 在崩溃恢复期间运行检查指针和bgwriter进程(Thomas Munro)。这有助于加速长时间的崩溃恢复。

  • 允许WAL处理预取所需的文件内容(托马斯芒罗)。这是由服务器变量recovery_prefetch控制的。

  • 允许通过可加载模块进行归档(Nathan Bossart)。以前,归档只能通过调用shell命令来完成。可以设置新的服务器变量archive_library来指定要调用存档的库。

  • 不再需要在START_REPLICATION之前运行IDENTIFY_SYSTEM (Jeff Davis)

3.2.1逻辑复制

  • 允许发布一个模式中的所有表(Vignesh C, Hou Zhijie, Amit Kapila)。例如,现在支持以下语法:CREATE PUBLICATION pub1 For TABLES IN SCHEMA s1,s2。alterpublication支持类似的语法。稍后添加到列出的模式中的表也将被复制。

  • 允许使用WHERE子句过滤出版内容(Hou Zhijie, Euler Taveira, Peter Smith, Ajin Cherian, Tomas Vondra, Amit Kapila)。不满足WHERE子句的行不发布。

  • 允许将发布内容限制在特定的专栏(Tomas Vondra, Álvaro Herrera, Rahila Syed)。允许使用ALTER SUBSCRIPTION跳过订阅服务器上的事务…跳过(泽田师傅雅彦)

  • 为逻辑复制添加对准备(两阶段)事务的支持(Peter Smith, Ajin Cherian, Amit Kapila, Nikhil Sontakke, Stas Kelvich)。新的CREATE_REPLICATION_SLOT选项称为TWO_PHASE。Pg_recvlogical现在在插槽创建过程中支持一个新的——两阶段选项。

  • 防止空事务的逻辑复制(Ajin Cherian, Hou Zhijie, Euler Taveira)。以前,如果订阅的表没有修改,发布者将向订阅者发送空事务。

  • 添加SQL函数来监视逻辑复制槽位的目录内容(Bharath Rupireddy)。新函数是pg_ls_logicalsnapdir()、pg_ls_logicalmapdir()和pg_ls_replslotdir()。它们可以由预定义的pg_monitor角色的成员运行。

  • 允许订阅者在发生错误时停止逻辑复制更改的应用程序(Osumi Takamichi, Mark Dilger)。这是通过订阅者选项disable_on_error启用的,并避免了流应用过程中可能出现的无限错误循环。

  • 调整订阅者服务器变量以匹配发布者,使datetime和float8值的解释一致(Japin Li)。有些发行商可能会依赖不一致的行为。

  • 添加系统视图pg_stat_subscription_stats来报告订阅者活动(Masahiko Sawada)

  • 新函数pg_stat_reset_subscription_stats()允许重置这些统计计数器。

  • 在pg_publication_tables系统视图中抑制重复项(侯志杰)。在某些情况下,一个分区可能出现多次。

3.3 实用工具命令

  • 添加SQL MERGE命令来调整一个表以匹配另一个表(Simon Riggs, Pavan Deolasee, Álvaro Herrera, Amit Langote)。这类似于INSERT…ON冲突,但更面向批处理。

  • 在COPY文本格式中增加HEADER选项的支持(Rémi Lapeyre)。new选项导致输出列名,并可选地在输入时进行验证。

  • 为数据库创建添加新的wal - logging方法(Dilip Kumar)。这是复制模板数据库的新的默认方法,因为它避免了在创建数据库期间需要检查点。但是,如果模板数据库很大,它可能会很慢,所以旧的方法仍然可用。

  • 允许CREATE DATABASE设置数据库OID (Shruthi Gowda, Antonin Houska)。防止DROP DATABASE, DROP TABLESPACE和ALTER DATABASE SET TABLESPACE在Windows上并发使用时偶尔失败(Thomas Munro)

  • 允许外键ON DELETE SET动作只影响特定的列(保罗马丁内斯)。以前,外键中的所有列总是受到影响。

  • 允许ALTER TABLE修改表的ACCESS METHOD (Justin Pryzby, Jeff Davis)

  • 当ALTER TABLE导致表重写时正确调用对象访问钩子(Michael Paquier)

  • 允许创建无wal日志的序列(彼得·艾森特劳特)

  • 跟踪返回复合类型的函数结果中各个列的依赖关系(Tom Lane)。以前,如果视图或规则在复合返回函数的结果中包含对特定列的引用,则不会将其标记为依赖项;视图或规则被认为只依赖于作为一个整体的复合类型。这意味着允许删除单个列,这会在以后使用视图或规则时造成问题。现在还注意到列级依赖关系,因此删除这样的列将被拒绝,除非视图被更改或删除。

3.4 数据类型

  • 允许数值的比例为负数,或大于其精度(迪安·拉希德,汤姆·莱恩)。这允许对小数点左侧的值进行舍入,例如,'1234'::numeric(4, -2)返回1200。

  • 改进了在转换值到interval时的溢出检测(乔·科沙科夫)

  • 为非ascii字符更改char类型的I/O格式(汤姆·莱恩)

  • 更新现代Unicode字符(如表情包)的显示宽度信息(Jacob Champion)。也从Unicode 5.0更新到14.0.0。现在有一种自动的方法来保持Postgres随Unicode版本的更新。

3.5 函数

  • 为range_agg()添加多范围输入(Paul Jungwirth)

  • 为xid8数据类型添加MIN()和MAX()聚合(Ken Kato)

  • 添加正则表达式函数以兼容其他关系系统(Gilles Darold, Tom Lane)。新函数是regexp_count()、regexp_instr()、regexp_like()和regexp_substr()。regexp_replace()中还添加了一些新的可选参数。

  • 增加了计算多边形之间距离的能力(Tom Lane)

  • 添加to_char()格式代码,tzh和tzm (Nitin Jadhav)。它们的大写等等物已经得到了支持。

  • 当对具有时区值的时间应用AT TIME ZONE时,使用事务开始时间而不是挂钟时间来确定是否应用DST (Aleksander Alekseev, Tom Lane)。这使得转换被认为是稳定的而不是易变的,并且每次调用都节省了一个内核调用。

  • 忽略带有数组参数的ts_delete()和setweight()函数中的NULL数组元素(Jean-Christophe Arnu)。这些函数有效地忽略空字符串数组元素(因为它们永远不能匹配有效的lexeme)。让它们忽略NULL元素似乎是一致的,而不是失败。

  • 为pg_size_pretty()和pg_size_bytes()添加对Peta字节(PetaBytes)单位的支持

  • 更改pg_event_trigger_ddl_commands()以使用实际的模式名输出对其他会话的临时模式的引用(Tom Lane)。以前,这个函数将所有临时模式都报告为pg_temp,但是将它用于除当前会话的临时模式之外的其他模式会产生误导。

3.6 PL/pgSQL

  • 修复PL/pgSQL变量常量标记的强制执行(Tom Lane)。以前,变量可以被用作CALL输出参数或refcursor OPEN变量,尽管它被标记为常量。

3.7 Libpq

  • 允许根据服务器证书的主题替代名称进行IP地址匹配(Jacob Champion)

  • 允许PQsslAttribute()报告SSL库类型而不需要libpq连接(Jacob Champion)

  • 更改客户端发送的查询取消,以使用与正常客户端连接相同的TCP设置(Jelte Fennema)。这允许配置的TCP超时应用于查询取消连接。

  • 防止libpq事件回调失败导致错误结果(Tom Lane)

3.8 客户端应用程序

  • 允许pgbench在序列化和死锁失败后重试(Yugo Nagata, Marina Polyakova)

3.8.1 psql

  • 提高psql的\copy命令的性能,通过发送更大的数据块(Heikki Linnakangas)

  • 添加\dconfig命令报告服务器变量(Mark Dilger, Tom Lane)。这类似于服务器端的SHOW命令,但它可以处理模式以方便地显示多个变量。添加\getenv命令将一个环境变量的值赋给一个psql变量

  • 在\lo_list和\dl命令中添加+选项以显示大对象特权(Pavel Luzanov)

  • 为\watch命令添加一个寻呼机选项(帕维尔·斯特胡勒,托马斯·芒罗)。这只在Unix上支持,并且由PSQL_WATCH_PAGER环境变量控制。

  • 使psql在发送到服务器的查询中包含内查询双连字符注释(汤姆·莱恩,格雷格·南卡罗)。以前这样的注释会在发送之前从查询中删除。在任何查询文本之前的双连字符注释不会被发送,也不会被记录为单独的psql历史条目。

  • 调整psql,使Readline的meta-#命令将插入双连字符注释标记(汤姆·莱恩)。以前会插入一个磅标记,除非用户费心配置了一个非默认注释标记。

  • 当多个查询同时传递给服务器时,使psql输出所有结果(Fabien Coelho)。以前只显示最后一个查询结果。通过将SHOW_ALL_RESULTS psql变量设置为off,可以恢复旧的行为。

  • 在——single-transaction模式中检测到错误后,仅当设置了ON_ERROR_STOP时,将最后的COMMIT命令更改为ROLLBACK (Michael Paquier)。以前,在-c命令或-f脚本文件中检测到错误将导致在结束时发出ROLLBACK,而不管ON_ERROR_STOP的值是多少。

  • 改进psql的tab补全(Shinya Kato, Dagfinn Ilmari Mannsåker, Peter Smith, Koyu Tanigawa, Ken Kato, David Fetter, Haiying Tang, Peter Eisentraut, Álvaro Herrera, Tom Lane, Masahiko Sawada)

  • 限制psql的反斜杠命令对运行PostgreSQL 9.2或更高版本的服务器的支持(Tom Lane)。删除仅在旧服务器上运行时使用的代码。与9.2相比,不需要任何特定版本调整的命令仍然可以工作。

3.8.2 pg_dump

  • 让pg_dump转储公共模式所有权更改和安全标签(Noah Misch)

  • 改进具有多对象的转储数据库的性能(汤姆·莱恩)。这也将提高pg_upgrade的性能。

  • 提高具有大型TOAST表的并行pg_dump的性能(Tom Lane)

  • 添加转储/恢复选项——no-table-access-method来强制恢复只使用默认的表访问方法(Justin Pryzby)

  • 限制pg_dump和pg_dumpall对运行PostgreSQL 9.2或更高版本的服务器的支持(Tom Lane)

3.9 服务器端程序

  • 添加新的pg_basebackup选项——target来控制基本备份位置(Robert Haas)。新的选项是server在本地写入备份,blackhole丢弃备份(用于测试)。

  • 允许pg_basebackup执行服务器端gzip, LZ4和Zstandard压缩和客户端LZ4和Zstandard压缩基本备份文件(Dipesh Pandit, Jeevan Ladhe)。客户端gzip压缩已经得到支持。

  • 允许pg_basebackup在服务器端压缩并在存储前在客户端解压(Dipesh Pandit)。这是通过在服务器端指定压缩和纯输出格式来实现的。

  • 允许pg_basebackup的——compress选项控制压缩位置(服务器或客户端)、压缩方法和压缩选项(Michael Paquier, Robert Haas)。

  • 在pg_receivewal中添加LZ4压缩方法 (Georgios Kokolatos),这是通过——compress=lz4来启用的,并且需要使用——with-lz4来构建二进制文件。

  • 为pg_receivewal的——compress选项添加额外的功能(Georgios Kokolatos)

  • 改进pg_receivewal在适当的WAL位置重新启动的能力(Ronan Dunklau)。以前,pg_receivewal将基于存储在本地归档目录中的WAL文件启动,或者在发送服务器的当前WAL刷新位置启动。通过此更改,如果发送服务器运行Postgres 15或更高版本,本地存档目录为空,并且指定了复制槽,则将使用复制槽的重新启动点。

  • 添加pg_rewind选项——config-file来简化当服务器配置文件存储在数据目录之外时的使用(Gunnar Bluth)

3.9.1 pg_upgrade

  • 将pg_upgrade的日志和临时文件存储在名为pg_upgrade_output的新集群的子目录中。d (Justin Pryzby)。以前,这样的文件被保存在当前目录中,需要手动清理。现在,它们会在pg_upgrade成功完成后自动删除。

  • 如果输出不是终端,禁用pg_upgrade操作期间的默认状态报告(Andres Freund)。可以使用——verbose为非tty使用启用状态报告输出。

  • 使pg_upgrade报告所有连接设置无效的数据库(Jeevan Ladhe)。以前只报告了第一个连接设置无效的数据库。

  • 使pg_upgrade保留表空间和数据库oid,以及关系relfilenode的编号(Shruthi Gowda, Antonin Houska)。在pg_upgrade中添加——no-sync选项。这只建议用于测试。

  • 限制pg_upgrade对运行PostgreSQL 9.2或更高版本的旧服务器的支持(Tom Lane)

3.9.2 pg_waldump

  • 允许pg_waldump输出按关系文件节点、块号、分叉号和整页图片进行过滤(David Christensen, Thomas Munro)

  • 在中断退出前使pg_waldump报告统计信息(Bharath Rupireddy)。例如,在运行pg_waldump——stats——follow的终端中发出control-C命令将在退出前报告当前的统计信息。这在Windows上不起作用。

  • 改进pg_waldump报告的一些事务WAL记录的描述(Masahiko Sawada, Michael Paquier)。

  • 允许pg_waldump转储关于多个资源管理器的信息(Heikki Linnakangas)。这是通过多次指定——rmgr选项来启用的。

3.10 文档

  • 添加pg_encoding_to_char()和pg_char_to_encoding()的文档(Ian Lawrence Barwick)

  • 记录^@以开头的操作符(汤姆·莱恩)

3.11 源代码

  • 使用cirrus-ci增加对持续集成测试的支持(Andres Freund, Thomas Munro, Melanie Plageman)

  • 添加配置选项——with-zstd以启用Zstandard构建(Jeevan Ladhe, Robert Haas, Michael Paquier)

  • 在可加载库的神奇块中添加一个ABI标识符字段,允许非社区PostgreSQL发行版识别与其他构建不兼容的库(Peter Eisentraut)。ABI字段不匹配将在加载时生成错误。

  • 创建一个新的pg_type。“char”的typcategory值(汤姆莱恩)。其他一些仅供内部使用的类型也被分配到这个类别中。

  • 添加新的协议消息TARGET以指定用于基本备份的新的COPY方法(罗伯特哈斯)。Pg_basebackup现在使用这个方法。

  • 添加新的协议消息COMPRESSION和COMPRESSION_DETAIL以指定压缩方法和选项(Robert Haas)

  • 删除服务器对旧的BASE_BACKUP命令语法和基本备份协议的支持(Robert Haas)

  • 增加对扩展的支持以设置自定义备份目标(罗伯特哈斯)

  • 允许扩展定义自定义WAL资源管理器(Jeff Davis)

  • 添加函数pg_settings_get_flags()来获取服务器变量的标志(Justin Pryzby)

  • 在Windows上,使用PGDLLIMPORT标记导出所有服务器的全局变量(Robert Haas)。以前,Windows上的扩展只能访问特定的变量。需要GNU版本3.81或更高版本来构建PostgreSQL

  • 要求OpenSSL构建pgcrypto扩展(Peter Eisentraut)

  • 要求Perl版本5.8.3或更高版本(Dagfinn Ilmari Mannsåker)

  • 要求Python 3.2或更高版本(Andres Freund)

3.12 附加模块

  • 允许amcheck检查序列(马克迪尔格)

  • 改进TOAST表的amcheck健全性检查(马克迪尔格)

  • 添加新模块basebackup_to_shell作为自定义备份目标的示例(Robert Haas)

  • 添加新模块basic_archive作为通过库执行归档的示例(Nathan Bossart)

  • 允许在布尔列上建立btree_gist索引。这些可以用于排除约束。

  • 修复pageinspect的page_header()来处理32千字节的页面大小。以前,在某些情况下可能返回不适当的负值。

  • 为pg_stat_statements添加临时文件块I/O计数器。在pg_stat_statements中添加JIT计数器

  • 添加新模块pg_walinspect。这将提供类似于pg_waldump的sql级输出。

  • 在sepgsql日志消息中指示允许/强制状态(Dave Page)

3.12.1 postgres_fdw

  • 允许postgres_fdw下推CASE表达式(Alexander Pyhalov)

  • 添加服务器变量postgres_fdw。application_name控制postgres_fdw连接的应用程序名称。以前,远程会话的application_name只能在远程服务器上设置,或者通过postgres_fdw连接规范设置。postgres_fdw。Application_name支持一些用于定制的转义序列,从而更容易在远程服务器上区分这些连接。

  • 允许在postgres_fdw服务器上并行提交。这是通过CREATE SERVER选项parallel_commit来实现的。

四、致谢

这里节略。

文章转载自数据库杂记,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论