发布日期:. 2022年10月13日
PostgreSQL 15 包含许多新功能和增强功能,包括:
支持SQL命令
MERGE
。
通过指定列列表和行过滤条件,在逻辑复制发布中选择性地发布表内容。
提供更多的压缩选项,包括支持Zstandard(zstd)压缩。这包括在 pg_basebackup 过程中在服务器端执行压缩的支持。
支持使用JSON格式的服务器日志输出的结构化支持。
性能改进,特别是对于内存和磁盘排序。
上述项目和PostgreSQL 15的其他新功能在下面的部分中有更详细的解释。
使用pg_dumpall进行转储/恢复,或者使用 pg_upgrade或逻辑复制来迁移数据,以便从任何之前的版本迁移数据。参见第 19.6 节了解有关迁移到新主要版本的一般信息。
版本15包含了一些可能影响与之前版本兼容性的更改。请注意以下不兼容性:
移除在public
模式上的PUBLIC
创建权限
(Noah Misch)
新的默认设置是自从CVE-2018-1058安全发布以来,第 5.9.6 节推荐的安全模式之一。
此更改适用于新的数据库集群以及现有集群中新创建的数据库。
升级集群或恢复数据库转储将保留public
的现有权限。
对于现有数据库,特别是那些有多个用户的数据库,考虑撤销对public
式CREATE
权限的授予,
以采用这个新的默认设置。对于没有必要防范内部威胁的新数据库,授予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)
这个接受数字格式,比如.1
和1.
,并且不允许在数字字面量后面加上无关的内容,比如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
的角色和表所有者才能将数据复制到具有行级安全策略的表中。
防止UPDATE
和DELETE
操作在订阅所有者没有对表具有SELECT
权限的情况下进行
逻辑复制
操作(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
选项(Tom Lane)
所有仍然支持的服务器版本都支持同步快照,因此不再需要此选项。
在检测到psql的
--single-transaction
模式中的错误后,只有在设置了ON_ERROR_STOP
时,
将最终的COMMIT
命令更改为ROLLBACK
(Michael Paquier)
避免在由postgres_fdw发送的查询中不必要地进行常量转换(Dian Fay)
当本地和远程数据库之间的列类型有意不同时,这些转换可能会导致错误。
移除xml2的xml_is_well_formed()
函数(Tom Lane)
这个函数自Postgres 9.1以来已经在核心后端中实现。
允许自定义扫描提供程序 指示它们是否支持投影(Sven Klemm)
默认情况下,现在假定自定义扫描提供程序不支持投影;那些支持的将需要在此版本中进行更新。
下面将详细介绍PostgreSQL 15与上一个主要版本之间的变化。
记录并检查每个数据库的排序版本(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)
改进查询引用分区表的计划时间(David Rowley)
这种变化在只有许多分区中的少数分区相关时会有所帮助。
允许有序扫描分区,以避免在更多情况下进行排序(David Rowley)
以前,具有DEFAULT
分区或包含多个值的LIST
分区的表
无法用于有序分区扫描。现在,如果在规划过程中修剪了这些分区,它们可以被使用。
改进在移动行到分区表之间的更新时的外键行为(Amit Langote)
以前,这种更新在源分区上运行删除操作,并在目标分区上运行插入操作。 PostgreSQL现在将在分区根上运行更新操作,提供更清晰的语义。
允许在分区表上使用CLUSTER
(Justin Pryzby)
修复在分区表上ALTER TRIGGER RENAME
的问题,以便正确地重命名所有分区上的触发器(Arne Roland,Álvaro Herrera)
禁止重命名克隆的触发器。
允许在系统和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索引。
允许扩展统计信息记录父级及其所有子级的统计信息(Tomas Vondra, Justin Pryzby)
常规统计已经分别跟踪父级和父级加所有子级的统计数据。
添加服务器变量recursive_worktable_factor
,允许用户指定递归查询的工作表的预期大小(Simon Riggs)
允许对具有许多常量的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 = 0
且wal_level = minimal
时有效。
允许vacuum在设置最老的冻结和多事务ID时更加积极 (Peter Geoghegan)
允许引用多个外部表的查询在更多情况下执行并行外部表扫描(Andrey Lepikhov, Etsuro Fujita)
提高使用row_number()
、rank()
、
dense_rank()
和count()
的
窗口函数的性能
(David Rowley)
提高高核数ARM64系统上自旋锁的性能(Geoffrey Blake)
启用默认记录检查点和慢自动清理操作(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_command
、
archive_cleanup_command
、
restore_command
和
recovery_end_command
时使用。
允许可选地控制以视图的调用者的权限发起由视图执行的表访问(Christoph Heiss)
以前,视图访问始终被视为由视图的所有者执行。这仍然是默认设置。
允许pg_write_server_files
预定义角色的成员执行服务器端基本备份(Dagfinn Ilmari Mannsåker)
以前只有超级用户才能执行这样的备份。
允许通过SET
和ALTER SYSTEM
来
使用GRANT
来授予
更改单个服务器变量的权限
(Mark Dilger)
新函数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)
以前,只有超级用户才能运行此函数。
添加服务器变量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_type
为sysv
(Thomas Munro)
之前的默认选择,posix
,可能导致在这个平台上出现假失败。
允许postgres
-C
正确报告运行时计算的值
(Nathan Bossart)
以前运行时计算的值data_checksums
,
wal_segment_size
,
和data_directory_mode
会报告在运行中的服务器上不准确的值。然而,在运行中的服务器上这不起作用。
为服务器端的基本备份添加LZ4和Zstandard压缩支持(Jeevan Ladhe,Robert Haas)
在崩溃恢复期间运行检查点和后台写入进程 (Thomas Munro)
这有助于加快长时间的崩溃恢复。
允许WAL处理预取所需的文件内容(Thomas Munro)
这由服务器变量 recovery_prefetch
控制。
允许通过可加载模块进行归档(Nathan Bossart)
以前,归档只能通过调用shell命令来完成。
新的服务器变量archive_library
可以设置为指定一个用于归档的库。
不再需要在START_REPLICATION
之前运行
IDENTIFY_SYSTEM
(Jeff Davis)
允许在模式中发布所有表格(Vignesh C,Hou Zhijie,Amit Kapila)
例如,现在支持这种语法:CREATE PUBLICATION pub1 FOR TABLES IN SCHEMA s1,s2
。
ALTER 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_PHASE
。
pg_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
系统视图中,抑制重复条目(侯志杰)
在某些情况下,一个分区可能会出现多次。
添加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
DATABASE
,DROP
TABLESPACE
和ALTER DATABASE SET
TABLESPACE
(Thomas Munro)
允许外键ON
DELETE SET
操作仅影响指定的列(Paul Martinez)
以前,外键中的所有列总是受影响。
允许ALTER
TABLE
修改表的访问方法
(Justin Pryzby, Jeff Davis)
当ALTER TABLE
导致表重写时,正确调用对象访问钩子(Michael Paquier)
允许创建不记录日志的序列 (Peter Eisentraut)
跟踪返回复合类型结果中各列的依赖关系(Tom Lane)
以前,如果视图或规则包含对复合返回函数结果中特定列的引用, 那么这不会被视为依赖项;视图或规则只被视为依赖整个复合类型。 这意味着允许删除单个列,会在后续使用视图或规则时造成问题。 现在还会注意到列级依赖关系,因此除非更改或删除视图,否则将拒绝删除此类列。
将多范围输入添加到range_agg()
(Paul Jungwirth)
为了与其他关系系统兼容,添加正则表达式函数(Gilles Darold,Tom Lane)
新函数包括regexp_count()
,
regexp_instr()
,
regexp_like()
和
regexp_substr()
。一些新的可选参数也被添加到
regexp_replace()
中。
添加计算polygons
之间距离的功能(Tom Lane)。
添加to_char()
格式代码of
,tzh
和
tzm
(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
,但将其用于除当前会话的临时模式之外是误导性的。
修复了对PL/pgSQL变量CONSTANT
标记的执行(Tom Lane)
以前,即使标记为CONSTANT
,变量也可以用作CALL
的输出参数或refcursor OPEN
变量。
允许根据服务器证书的主体替代名称(Jacob Champion)匹配IP地址
允许PQsslAttribute()
在不需要libpq连接的情况下报告SSL库类型(Jacob Champion)
将客户端发送的查询取消更改为使用与正常客户端连接相同的TCP设置 (Jelte Fennema)
这允许配置的TCP超时应用于查询取消连接。
防止libpq事件回调失败导致错误结果(Tom Lane)
允许pgbench在序列化和死锁失败后重试(Yugo Nagata, Marina Polyakova)
提高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相比不需要任何特定版本调整的命令仍将有效。
使pg_dump命令转储public
模式所有权更改和安全标签(Noah Misch)
提高转储具有许多对象的数据库性能 (Tom Lane)
这也将提高pg_upgrade的性能。
提高具有大型TOAST表的表的并行pg_dump性能(Tom Lane)
添加dump/restore选项--no-table-access-method
,
强制恢复只使用默认的表访问方法(Justin Pryzby)
限制对运行pg_dump和pg_dumpall 的支持,仅限于运行PostgreSQL 9.2或更高版本(Tom Lane)
添加新的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)
将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)
允许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
选项来启用此功能。
为pg_encoding_to_char()
和pg_char_to_encoding()
(Ian Lawrence Barwick)添加文档
文档化 ^@
starts-with 操作符(Tom Lane)
添加对使用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 现在使用这种方法。
添加新的协议消息COMPRESSION
和COMPRESSION_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)
允许amcheck检查序列(Mark Dilger)
改进amcheck对TOAST表的健全性检查(Mark Dilger)
将新模块basebackup_to_shell 添加为自定义备份目标的示例(Robert Haas)
将新模块basic_archive 添加为通过库执行归档的示例(Nathan Bossart)
允许在布尔列上创建btree_gist 索引(Emre Hasegeli)
这些可以用于排除约束。
修复pageinspect的
page_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)
允许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
。
以下个人(按字母顺序)作为补丁作者、提交者、审阅者、测试者或问题报告者为这个版本的贡献者。
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 |