Redrock Postgres 搜索 英文
版本: 15

E.8. 发布版本 15

E.8.1. 概述
E.8.2. 升级到版本15
E.8.3. 变更
E.8.4. 致谢

发布日期:. 2022年10月13日

E.8.1. 概述

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

  • 支持SQL命令 MERGE

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

  • 提供更多的压缩选项,包括支持Zstandard(zstd)压缩。这包括在 pg_basebackup 过程中在服务器端执行压缩的支持。

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

  • 性能改进,特别是对于内存和磁盘排序。

上述项目和PostgreSQL 15的其他新功能在下面的部分中有更详细的解释。

E.8.2. 升级到版本15

使用pg_dumpall进行转储/恢复,或者使用 pg_upgrade或逻辑复制来迁移数据,以便从任何之前的版本迁移数据。参见第 19.6 节了解有关迁移到新主要版本的一般信息。

版本15包含了一些可能影响与之前版本兼容性的更改。请注意以下不兼容性:

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

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

    对于现有数据库,特别是那些有多个用户的数据库,考虑撤销对publicCREATE权限的授予, 以采用这个新的默认设置。对于没有必要防范内部威胁的新数据库,授予CREATE权限 将产生之前版本的行为。

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

    这样每个数据库的所有者都可以在其数据库中拥有public模式的所有权权限。 以前它是由引导超级用户拥有的,因此非超级用户数据库所有者无法对其进行任何操作。

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

  • 移除长期弃用的独占备份模式(David Steele,Nathan Bossart)

    如果数据库服务器在这种模式下突然停止,服务器可能无法启动。非独占备份模式被认为在所有情况下都更优秀。 函数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.x不再受支持。虽然最初的意图是plpythonu最终可以指向plpython3u, 但现在更改它似乎更可能引起问题而不是解决问题,因此它已被移除。

  • 如果array_to_tsvector()函数被传递一个空字符串数组元素,则会生成一个错误(Jean-Christophe Arnu)

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

  • chr() 被提供负参数时,会生成一个错误(Peter Eisentraut)

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

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

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

  • 防止数字字面量后面有非数字字符(Peter Eisentraut)

    以前,查询文本像123abc会被解释为123后面跟着一个单独的标记abc

  • 调整JSON 数字文字处理,以匹配 SQL/JSON标准(Peter Eisentraut)

    这个接受数字格式,比如.11.,并且不允许在数字字面量后面加上无关的内容,比如1.type()

  • interval输入提供了大于月份的单位的小数值时,四舍五入到最接近的月份(Bruce Momjian)

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

  • 提高对带有尾随句点的interval解析的一致性(Tom Lane)

    在一些平台上,带有尾随句点的数字会被拒绝。

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

    这将导致依赖interval值文本输出的索引创建失败。

  • 间隔调整函数中检测整数溢出(Joe Koshakow)。

    受影响的函数包括justify_interval()justify_hours()justify_days()

  • 更改非ASCII字符的"char"类型的I/O格式(Tom Lane)

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

  • 移除登录角色对自身角色成员身份拥有的默认ADMIN OPTION特权(Robert Haas)

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

  • 允许逻辑复制以订阅所有者的身份运行(Mark Dilger)

    由于不检查行级安全策略,只有超级用户、具有bypassrls的角色和表所有者才能将数据复制到具有行级安全策略的表中。

  • 防止UPDATEDELETE操作在订阅所有者没有对表具有SELECT权限的情况下进行 逻辑复制 操作(Jeff Davis)

    UPDATEDELETE命令通常也需要读取表格,因此需要订阅所有者具有表格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()的结果与先前版本发出的结果不同,即使是相同的种子值。

  • libpqPQsendQuery() 函数在流水线模式中不再受支持(Álvaro Herrera)

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

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

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

  • 移除pg_dump--no-synchronized-snapshots选项(Tom Lane)

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

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

  • 避免在由postgres_fdw发送的查询中不必要地进行常量转换(Dian Fay)

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

  • 移除xml2xml_is_well_formed()函数(Tom Lane)

    这个函数自Postgres 9.1以来已经在核心后端中实现。

  • 允许自定义扫描提供程序 指示它们是否支持投影(Sven Klemm)

    默认情况下,现在假定自定义扫描提供程序不支持投影;那些支持的将需要在此版本中进行更新。

E.8.3. 变更

下面将详细介绍PostgreSQL 15与上一个主要版本之间的变化。

E.8.3.1. 服务器

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

    这个功能旨在检测排序版本的更改,以避免索引损坏。函数 pg_database_collation_actual_version() 报告底层操作系统的排序版本,而 ALTER DATABASE ... REFRESH 设置记录的 数据库排序版本以匹配操作系统的排序版本。

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

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

  • 将系统视图pg_ident_file_mappings 添加到报告pg_ident.conf信息中(Julien Rouhaud)

E.8.3.1.1. 分区
  • 改进查询引用分区表的计划时间(David Rowley)

    这种变化在只有许多分区中的少数分区相关时会有所帮助。

  • 允许有序扫描分区,以避免在更多情况下进行排序(David Rowley)

    以前,具有DEFAULT分区或包含多个值的LIST分区的表 无法用于有序分区扫描。现在,如果在规划过程中修剪了这些分区,它们可以被使用。

  • 改进在移动行到分区表之间的更新时的外键行为(Amit Langote)

    以前,这种更新在源分区上运行删除操作,并在目标分区上运行插入操作。 PostgreSQL现在将在分区根上运行更新操作,提供更清晰的语义。

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

  • 修复在分区表上ALTER TRIGGER RENAME的问题,以便正确地重命名所有分区上的触发器(Arne Roland,Álvaro Herrera)

    禁止重命名克隆的触发器。

E.8.3.1.2. 索引
  • 允许在系统和TOAST 表上使用btree索引,以有效地存储重复项(Peter Geoghegan)

    以前,对于这些类型的索引,去重功能是被禁用的。

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

  • 允许唯一约束和索引将NULL值视为相同(Peter Eisentraut)

    以前NULL条目总是被视为不同的值,但现在可以通过创建使用UNIQUE NULLS NOT DISTINCT的约束和索引来更改这一点。

  • 允许^@ starts-with运算符和starts_with()函数在使用C排序规则时使用btree索引(Tom Lane)

    以前,这些只能使用SP-GiST索引。

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

    常规统计已经分别跟踪父级和父级加所有子级的统计数据。

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

E.8.3.1.4. 通用性能
  • 允许对具有许多常量的NOT IN 子句进行哈希查找(David Rowley, James Coleman)

    以前,代码总是按顺序扫描数值列表。

  • 允许SELECT DISTINCT进行并行化(David Rowley)

  • 加快对UTF-8文本的编码验证,每次处理16个字节 (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上使用WAL进行直接I/O写入的支持(Thomas Munro)

    这仅在max_wal_senders = 0wal_level = minimal时有效。

  • 允许vacuum在设置最老的冻结和多事务ID时更加积极 (Peter Geoghegan)

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

  • 提高使用row_number()rank()dense_rank()count()窗口函数的性能 (David Rowley)

  • 提高高核数ARM64系统上自旋锁的性能(Geoffrey Blake)

E.8.3.1.5. 监控
  • 启用默认记录检查点和慢自动清理操作(Bharath Rupireddy)

    这将把log_checkpoints的默认值更改为on, 将log_autovacuum_min_duration的默认值更改为10分钟。 这将导致即使是空闲的服务器也会生成一些日志输出, 这可能会在没有日志文件轮换的资源受限服务器上造成问题。 在这种情况下应该更改这些默认值。

  • 在服务器启动缓慢时在服务器日志中生成进度消息(Nitin Jadhav,Robert Haas)

    这些消息报告了延迟的原因。通知的时间间隔由新的服务器变量 log_startup_progress_interval 控制。

  • 累积统计系统数据存储在共享内存中(Kyotaro Horiguchi,Andres Freund,Melanie Plageman)

    以前,这些数据是通过UDP数据包发送到统计收集器进程的, 只能通过文件系统传输后才能被会话读取。现在不再有单独的统计收集器进程了。

  • VACUUM VERBOSE和自动清理日志消息添加额外信息(Peter Geoghegan)

  • 为临时文件块I/O添加EXPLAIN (BUFFERS) 输出(Masahiko Sawada)

  • 允许在日志输出中以JSON格式 (Sehrope Sarkuni,Michael Paquier)

    新设置为log_destination = jsonlog

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

  • 为本地shell命令添加等待事件(藤井正男)

    新的等待事件在调用archive_commandarchive_cleanup_commandrestore_commandrecovery_end_command时使用。

E.8.3.1.6. 权限
  • 允许可选地控制以视图的调用者的权限发起由视图执行的表访问(Christoph Heiss)

    以前,视图访问始终被视为由视图的所有者执行。这仍然是默认设置。

  • 允许pg_write_server_files 预定义角色的成员执行服务器端基本备份(Dagfinn Ilmari Mannsåker)

    以前只有超级用户才能执行这样的备份。

  • 允许通过SETALTER SYSTEM来 使用GRANT来授予 更改单个服务器变量的权限 (Mark Dilger)

    新函数has_parameter_privilege()报告了这个权限。

  • 添加预定义角色pg_checkpoint ,允许成员运行CHECKPOINT (Jeff Davis)

    以前只有超级用户才能运行检查点。

  • 允许pg_read_all_stats预定义角色的成员访问视图 pg_backend_memory_contextspg_shmem_allocations (Bharath Rupireddy)

    以前,这些视图只能由超级用户访问。

  • 允许GRANT命令授予权限给 pg_log_backend_memory_contexts() (Jeff Davis)

    以前,只有超级用户才能运行此函数。

E.8.3.1.7. 服务器配置
  • 添加服务器变量shared_memory_size 以报告分配的共享内存大小(Nathan Bossart)

  • 添加服务器变量shared_memory_size_in_huge_pages 以报告所需的大内存页数(Nathan Bossart)

    这仅在Linux上受支持。

  • 在单用户模式下,尊从服务器变量shared_preload_libraries (Jeff Davis)

    这个改变支持使用shared_preload_libraries来加载自定义访问方法和WAL资源管理器, 这对于数据库访问即使在单用户模式下也是必不可少的。

  • 在Solaris上,将默认设置为dynamic_shared_memory_typesysv(Thomas Munro)

    之前的默认选择,posix,可能导致在这个平台上出现假失败。

  • 允许postgres -C正确报告运行时计算的值 (Nathan Bossart)

    以前运行时计算的值data_checksumswal_segment_size, 和data_directory_mode 会报告在运行中的服务器上不准确的值。然而,在运行中的服务器上这不起作用。

E.8.3.2. 流式复制和恢复

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

  • 在崩溃恢复期间运行检查点和后台写入进程 (Thomas Munro)

    这有助于加快长时间的崩溃恢复。

  • 允许WAL处理预取所需的文件内容(Thomas Munro)

    这由服务器变量 recovery_prefetch 控制。

  • 允许通过可加载模块进行归档(Nathan Bossart)

    以前,归档只能通过调用shell命令来完成。 新的服务器变量archive_library 可以设置为指定一个用于归档的库。

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

E.8.3.2.1. 逻辑复制
  • 允许在模式中发布所有表格(Vignesh C,Hou Zhijie,Amit Kapila)

    例如,现在支持这种语法:CREATE PUBLICATION pub1 FOR TABLES IN SCHEMA s1,s2ALTER PUBLICATION支持类似的语法。 后续添加到列出的模式中的表也将被复制。

  • 允许使用WHERE子句(Hou Zhijie,Euler Taveira, Peter Smith,Ajin Cherian,Tomas Vondra,Amit Kapila)过滤发布内容

    不满足WHERE子句的行不会被发布。

  • 允许将发布内容限制在特定的列中(Tomas Vondra,Álvaro Herrera,Rahila Syed)

  • 允许跳过订阅者上的事务,使用ALTER SUBSCRIPTION ... SKIP(Masahiko Sawada)

  • 为逻辑复制添加对预准备(两阶段)事务的支持(Peter Smith,Ajin Cherian,Amit Kapila,Nikhil Sontakke,Stas Kelvich)

    新的CREATE_REPLICATION_SLOT 选项被称为TWO_PHASEpg_recvlogical现在在插槽创建过程中支持一个新的 --two-phase选项。

  • 防止空事务的逻辑复制(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 启用的,可以避免在流应用过程中可能出现的无限错误循环。

  • 调整订阅服务器变量以匹配发布者,以便日期时间和float8值被一致解释(Japin Li)

    一些发布者可能依赖于不一致的行为。

  • 将系统视图pg_stat_subscription_stats 添加到报告中,以报告订阅者活动(Masahiko Sawada)

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

  • pg_publication_tables 系统视图中,抑制重复条目(侯志杰)

    在某些情况下,一个分区可能会出现多次。

E.8.3.3. 实用命令

  • 添加SQL MERGE 命令,用于调整一个表以匹配另一个表(Simon Riggs, Pavan Deolasee, Álvaro Herrera, Amit Langote)

    这类似于INSERT ... ON CONFLICT,但更适合批量操作。

  • COPY文本格式中添加对HEADER选项的支持(Rémi Lapeyre)

    新选项导致列名被输出,并在需要时进行验证。

  • 添加了新的WAL记录方法用于数据库创建(Dilip Kumar)

    这是复制模板数据库的新默认方法,因为它避免了在数据库创建过程中需要检查点的需要。 然而,如果模板数据库很大,这种方法可能会很慢,所以旧方法仍然可用。

  • 允许创建数据库来设置数据库OID (Shruthi Gowda, Antonin Houska)

  • 防止在Windows上并发使用时偶尔失败的情况下,DROP DATABASEDROP TABLESPACEALTER DATABASE SET TABLESPACE(Thomas Munro)

  • 允许外键ON DELETE SET操作仅影响指定的列(Paul Martinez)

    以前,外键中的所有列总是受影响。

  • 允许ALTER TABLE修改表的访问方法(Justin Pryzby, Jeff Davis)

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

  • 允许创建不记录日志的序列 (Peter Eisentraut)

  • 跟踪返回复合类型结果中各列的依赖关系(Tom Lane)

    以前,如果视图或规则包含对复合返回函数结果中特定列的引用, 那么这不会被视为依赖项;视图或规则只被视为依赖整个复合类型。 这意味着允许删除单个列,会在后续使用视图或规则时造成问题。 现在还会注意到列级依赖关系,因此除非更改或删除视图,否则将拒绝删除此类列。

E.8.3.4. 数据类型

  • 允许一个 数值 值的范围可以是负数,或者大于其精度(Dean Rasheed, Tom Lane)

    这允许对小数点左侧的值进行四舍五入,例如,'1234'::numeric(4, -2) 返回 1200。

  • 改进将值转换为间隔时的溢出检测(Joe Koshakow)

  • 更改非ASCII字符的"char"类型的I/O格式(Tom Lane)

  • 更新现代Unicode字符(如表情符号)的显示宽度信息(Jacob Champion)

    也更新到Unicode 5.0至14.0.0。现在有一种自动化的方法来保持Postgres与Unicode发布版的同步。

E.8.3.5. Functions

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

  • 添加MIN()MAX()聚合函数,用于xid8数据类型(Ken Kato)

  • 为了与其他关系系统兼容,添加正则表达式函数(Gilles Darold,Tom Lane)

    新函数包括regexp_count()regexp_instr()regexp_like()regexp_substr()。一些新的可选参数也被添加到 regexp_replace()中。

  • 添加计算polygons之间距离的功能(Tom Lane)。

  • 添加to_char() 格式代码oftzhtzm(Nitin Jadhav)

    这些的大写等价物已经被支持。

  • 当将AT TIME ZONE应用于time with time zone值时, 使用事务开始时间而不是壁钟时间来确定是否应用DST(Aleksander Alekseev,Tom Lane)

    这样可以使转换被视为稳定而不是易变的,并且每次调用都可以节省一个内核调用。

  • 忽略ts_delete()setweight()函数中带有数组参数的NULL数组元素 (Jean-Christophe Arnu)

    这些函数有效地忽略空字符串数组元素(因为这些元素永远无法匹配有效的词元)。 让它们也忽略NULL元素,而不是失败,似乎是一致的。

  • pg_size_pretty()pg_size_bytes()添加对PB单位的支持(David Christensen)

  • pg_event_trigger_ddl_commands()更改为使用实际模式名称输出对其他会话临时模式的引用(Tom Lane)

    以前,此函数将所有临时模式报告为pg_temp,但将其用于除当前会话的临时模式之外是误导性的。

E.8.3.6. PL/pgSQL

  • 修复了对PL/pgSQL变量CONSTANT标记的执行(Tom Lane)

    以前,即使标记为CONSTANT,变量也可以用作CALL的输出参数或refcursor OPEN变量。

E.8.3.7. libpq

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

  • 允许PQsslAttribute()在不需要libpq连接的情况下报告SSL库类型(Jacob Champion)

  • 将客户端发送的查询取消更改为使用与正常客户端连接相同的TCP设置 (Jelte Fennema)

    这允许配置的TCP超时应用于查询取消连接。

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

E.8.3.8. 客户端应用程序

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

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

  • 添加\dconfig命令以报告服务器变量(Mark Dilger,Tom Lane)

    这类似于服务器端的SHOW命令,但它可以处理模式以便方便地显示多个变量。

  • 添加\getenv命令,将环境变量的值分配给psql变量(Tom Lane)

  • \lo_list\dl命令添加+选项, 以显示大对象权限(Pavel Luzanov)

  • \watch命令添加一个分页选项(Pavel Stehule, Thomas Munro)

    仅在Unix上支持,并由PSQL_WATCH_PAGER环境变量控制。

  • psql在发送到服务器的查询中包含查询内部的双破折号注释 (Tom Lane, Greg Nancarrow)

    以前,这样的注释在发送之前会被删除。在任何查询文本之前的双破折号注释不会被发送, 也不会被记录为单独的psql历史条目。

  • 调整psql,使得Readline的 meta-#命令将插入双破折号注释标记(Tom Lane)

    以前会插入一个井号标记,除非用户费心配置了非默认的注释标记。

  • 使psql在一次向服务器传递多个查询时输出所有结果(Fabien Coelho)

    以前,只显示最后一个查询结果。可以通过将SHOW_ALL_RESULTS psql变量设置为off来恢复旧行为。

  • 在检测到错误后,在--single-transaction模式下,将最终的COMMIT命令更改为只有在设置了ON_ERROR_STOP时才更改为ROLLBACK(Michael Paquier)

    以前,在-c命令或-f脚本文件中检测到错误会导致在结尾处无论ON_ERROR_STOP的值如何都会发出ROLLBACK

  • 改进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相比不需要任何特定版本调整的命令仍将有效。

E.8.3.8.2. pg_dump
  • 使pg_dump命令转储public模式所有权更改和安全标签(Noah Misch)

  • 提高转储具有许多对象的数据库性能 (Tom Lane)

    这也将提高pg_upgrade的性能。

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

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

  • 限制对运行pg_dumppg_dumpall 的支持,仅限于运行PostgreSQL 9.2或更高版本(Tom Lane)

E.8.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)

  • 将LZ4压缩方法添加到pg_receivewal (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)

E.8.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)

  • 添加一个--no-sync选项到pg_upgrade(Michael Paquier)

    这仅建议用于测试目的。

  • 限制pg_upgrade的支持范围,仅适用于运行PostgreSQL 9.2或更高版本的旧服务器(Tom Lane)

E.8.3.9.2. pg_waldump
  • 允许pg_waldump输出通过关系文件节点、块号、分支号和完整页图像进行过滤 (David Christensen,Thomas Munro)

  • 在中断退出之前,使pg_waldump报告统计信息(Bharath Rupireddy)

    例如,在运行pg_waldump --stats --follow的终端中发出控制-C命令将在退出之前报告当前统计信息。这在Windows上不起作用。

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

  • 允许pg_waldump来转储关于多个资源管理器的信息 (Heikki Linnakangas)

    通过多次指定--rmgr选项来启用此功能。

E.8.3.10. 文档

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

  • 文档化 ^@ starts-with 操作符(Tom Lane)

E.8.3.11. 源代码

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

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

  • 在可加载库的魔术块中添加一个ABI标识符字段,允许非社区PostgreSQL发行版 识别与其他构建不兼容的库(Peter Eisentraut)

    ABI字段不匹配将在加载时生成错误。

  • "char"(Tom Lane)创建一个新的pg_type.typcategory的值

    一些其他仅供内部使用的类型也被分配到了这个类别中。

  • 添加新的协议消息TARGET 以指定一个新的COPY方法用于基本备份(Robert Haas)

    pg_basebackup 现在使用这种方法。

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

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

  • 添加支持扩展以设置自定义备份目标(Robert Haas)

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

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

  • 在Windows上,使用PGDLLIMPORT标记导出所有服务器的全局变量(Robert Haas)

    以前,在Windows上只有特定的变量对扩展程序可访问。

  • 要求使用GNU make版本3.81或更高版本来构建PostgreSQL(Tom Lane)

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

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

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

E.8.3.12. 附加模块

  • 允许amcheck检查序列(Mark Dilger)

  • 改进amcheckTOAST表的健全性检查(Mark Dilger)

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

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

  • 允许在布尔列上创建btree_gist 索引(Emre Hasegeli)

    这些可以用于排除约束。

  • 修复pageinspectpage_header()以处理32千字节的页面大小 (全宗亮)

    以前,在某些情况下可能会返回不正确的负值。

  • 为临时文件块I/O添加计数器到pg_stat_statements (Masahiko Sawada)

  • 在pg_stat_statements中添加JIT计数器(Magnus Hagander)

  • 添加新模块pg_walinspect (Bharath Rupireddy)

    这提供了类似于SQL级别的输出,类似于pg_waldump

  • sepgsql日志消息中指示宽松/强制执行状态(Dave Page)

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

  • 添加服务器变量postgres_fdw.application_name以控制postgres_fdw连接的应用程序名称(Hayato Kuroda)

    以前,远程会话的application_name 只能在远程服务器上设置,或通过postgres_fdw连接规范设置。 postgres_fdw.application_name支持一些转义序列进行自定义, 使得在远程服务器上更容易区分这样的连接。

  • 允许在postgres_fdw服务器上进行并行提交(Etsuro Fujita)

    这是通过CREATE SERVER选项启用的 parallel_commit

E.8.4. 致谢

以下个人(按字母顺序)作为补丁作者、提交者、审阅者、测试者或问题报告者为这个版本的贡献者。

Abhijit Menon-Sen
Adam Brusselback
Adam Mackler
Adrian Ho
Ahsan Hadi
Ajin Cherian
Alastair McKinley
Aleksander Alekseev
Ales Zeleny
Alex Kingsborough
Alex Kozhemyakin
Alexander Korotkov
Alexander Kukushkin
Alexander Lakhin
Alexander Nawratil
Alexander Pyhalov
Alexey Borzov
Alexey Ermakov
Aliaksandr Kalenik
Álvaro Herrera
Amit Kapila
Amit Khandekar
Amit Langote
Amul Sul
Anastasia Lubennikova
Anders Kaseorg
Andreas Dijkman
Andreas Grob
Andreas Seltenreich
Andrei Zubkov
Andres Freund
Andrew Alsup
Andrew Bille
Andrew Dunstan
Andrew Gierth
Andrew Kesper
Andrey Borodin
Andrey Lepikhov
Andrey Sokolov
Andy Fan
Anton Melnikov
Anton Voloshin
Antonin Houska
Arjan van de Ven
Arne Roland
Arthur Zakirov
Ashutosh Bapat
Ashutosh Sharma
Ashwin Agrawal
Asif Rehman
Asim Praveen
Atsushi Torikoshi
Aya Iwata
Bauyrzhan Sakhariyev
Benoit Lobréau
Bernd Dorn
Bertrand Drouvot
Bharath Rupireddy
Björn Harrtell
Boris Kolpackov
Boris Korzun
Brad Nicholson
Brar Piening
Bruce Momjian
Bruno da Silva
Bryn Llewellyn
Carl Sopchak
Cary Huang
Chapman Flack
Chen Jiaoqian
Chris Bandy
Chris Lowder
Christian Quest
Christoph Berg
Christoph Heiss
Christophe Pettus
Christopher Painter-Wakefield
Claudio Freire
Clemens Zeidler
Corey Huinker
Dag Lem
Dagfinn Ilmari Mannsåker
Dan Kubb
Daniel Cherniy
Daniel Gustafsson
Daniel Polski
Daniel Vérité
Daniel Westermann
Daniele Varrazzo
Daniil Anisimov
Danny Shemesh
Darafei Praliaskouski
Daria Lepikhova
Dave Cramer
Dave Page
David Christensen
David Fetter
David G. Johnston
David Rowley
David Steele
David Zhang
Dean Rasheed
Dian Fay
Dilip Kumar
Dipesh Pandit
Dmitry Dolgov
Dmitry Koval
Dmitry Marakasov
Dominique Devienne
Dong Wook
Drew DeVault
Eduard Català
Egor Chindyaskin
Egor Rogov
Ekaterina Kiryanova
Elena Indrupskaya
Elvis Pranskevichus
Emmanuel Quincerot
Emre Hasegeli
Eric Mutta
Erica Zhang
Erik Rijkers
Erki Eessaar
Etsuro Fujita
Euler Taveira
Fabien Coelho
Fabrice Chapuis
Fabrice Fontaine
Fabrízio de Royes Mello
Feike Steenbergen
Filip Gospodinov
Florin Irion
Floris Van Nee
Frédéric Yhuel
Gabriela Serventi
Gaurab Dey
Geoff Winkless
Geoffrey Blake
Georgios Kokolatos
Gilles Darold
Greg Nancarrow
Greg Rychlewski
Greg Sabino Mullane
Greg Stark
Gregory Smith
Guillaume Lelarge
Gunnar Bluth
Gurjeet Singh
Haiyang Wang
Haiying Tang
Hannu Krosing
Hans Buschmann
Hayato Kuroda
Heath Lord
Heikki Linnakangas
Herwig Goemans
Himanshu Upadhyaya
Holly Roberts
Hou Zhijie
Hubert Lubaczewski
Ian Barwick
Ian Campbell
Ibrar Ahmed
Ildus Kurbangaliev
Ilya Anfimov
Itamar Gafni
Jacob Champion
Jaime Casanova
Jakub Wartak
James Coleman
James Hilliard
James Inform
Jan Piotrowski
Japin Li
Jason Harvey
Jason Kim
Jean-Christophe Arnu
Jeevan Ladhe
Jeff Davis
Jeff Janes
Jehan-Guillaume de Rorthais
Jelte Fennema
Jeremy Evans
Jeremy Schneider
Jian Guo
Jian He
Jimmy Yih
Jiri Fejfar
Jitka Plesníková
Joe Conway
Joe Wildish
Joel Jacobson
Joey Bodoia
John Naylor
Jonathan Katz
Josef Simanek
Joseph Koshakow
Josh Soref
Joshua Brindle
Juan José Santamaría Flecha
Julien Rouhaud
Julien Roze
Junwang Zhao
Jürgen Purtz
Justin Pryzby
Ken Kato
Kevin Burke
Kevin Grittner
Kevin Humphreys
Kevin McKibbin
Kevin Sweet
Kevin Zheng
Klaudie Willis
Konstantin Knizhnik
Konstantina Skovola
Kosei Masumura
Kotaro Kawamoto
Koyu Tanigawa
Kuntal Ghosh
Kyotaro Horiguchi
Lars Kanis
Lauren Fliksteen
Laurent Hasson
Laurenz Albe
Leslie Lemaire
Liam Bowen
Lingjie Qiang
Liu Huailing
Louis Jachiet
Lukas Fittl
Ma Liangzhu
Maciek Sakrejda
Magnus Hagander
Mahendra Singh Thalor
Maksim Milyutin
Marc Bachmann
Marcin Krupowicz
Marcus Gartner
Marek Szuba
Marina Polyakova
Mario Emmenlauer
Mark Dilger
Mark Murawski
Mark Wong
Markus Wanner
Markus Winand
Martijn van Oosterhout
Martin Jurca
Martin Kalcher
Martín Marqués
Masahiko Sawada
Masahiro Ikeda
Masao Fujii
Masaya Kawamoto
Masayuki Hirose
Matthias van de Meent
Matthijs van der Vleuten
Maxim Orlov
Maxim Yablokov
Melanie Plageman
Michael Banck
Michael Harris
Michael J. Sullivan
Michael Meskes
Michael Mühlbeyer
Michael Paquier
Michael Powers
Mike Fiedler
Mike Oh
Mikhail Kulagin
Miles Delahunty
Naoki Okano
Nathan Bossart
Nathan Long
Nazir Bilal Yavuz
Neha Sharma
Neil Chen
Nicola Contu
Nicolas Lutic
Nikhil Benesch
Nikhil Shetty
Nikhil Sontakke
Nikita Glukhov
Nikolai Berkoff
Nikolay Samokhvalov
Nikolay Shaplov
Nitin Jadhav
Noah Misch
Noboru Saito
Noriyoshi Shinoda
Olaf Bohlen
Olly Betts
Onder Kalaci
Oskar Stenberg
Otto Kekalainen
Paul Guo
Paul Jungwirth
Paul Martinez
Pavan Deolasee
Pavel Borisov
Pavel Luzanov
Pavel Stehule
Peter Eisentraut
Peter Geoghegan
Peter Slavov
Peter Smith
Petr Jelínek
Phil Florent
Phil Krylov
Pierre-Aurélien Georges
Prabhat Sahu
Quan Zongliang
Rachel Heaton
Rahila Syed
Rajakavitha Kodhandapani
Rajkumar Raghuwanshi
Ranier Vilela
Rei Kamigishi
Reid Thompson
Rémi Lapeyre
Renan Soares Lopes
Richard Guo
Richard Wesley
RKN Sai Krishna
Robert Haas
Robert Treat
Roberto Mello
Robins Tharakan
Roger Mason
Roman Zharkov
Ronan Dunklau
Rui Zhao
Ryan Kelly
Ryo Matsumura
Ryohei Takahashi
Sadhuprasad Patro
Sait Talha Nisanci
Sami Imseih
Sandeep Thakkar
Sebastian Kemper
Sehrope Sarkuni
Sergei Kornilov
Sergei Shoulbakov
Sergey Shinderuk
Shay Rojansky
Shenhao Wang
Shi Yu
Shinya Kato
Shruthi Gowda
Simon Perepelitsa
Simon Riggs
Sirisha Chamarthi
Soumyadeep Chakraborty
Stan Hu
Stas Kelvich
Stefen Hillman
Stephen Frost
Steve Chavez
Sumanta Mukherjee
Suraj Khamkar
Suraj Kharage
Sven Klemm
Takamichi Osumi
Takayuki Tsunakawa
Takeshi Ideriha
Tatsuhiro Nakamori
Tatsuhito Kasahara
Tatsuo Ishii
Tatsuro Yamada
Teja Mupparti
Teodor Sigaev
Thibaud Walkowiak
Thom Brown
Thomas McKay
Thomas Munro
Tim McNamara
Timo Stolz
Timur Khanjanov
Tom Lane
Tomas Barton
Tomas Vondra
Tony Reix
Troy Frericks
Tushar Ahuja
Victor Wagner
Victor Yegorov
Vignesh C
Vik Fearing
Vincas Dargis
Vitaly Burovoy
Vitaly Voronov
Vladimir Sitnikov
Wang Ke
Wei Sun
Wei Wang
Whale Song
Will Mortensen
Wolfgang Walther
Yanliang Lei
Yaoguang Chen
Yogendra Suralkar
YoungHwan Joo
Yugo Nagata
Yukun Wang
Yura Sokolov
Yusuke Egashira
Yuzuko Hosoya
Zhang Mingli
Zhang Wenjie
Zhihong Yu
Zhiyong Wu