9.3 9.4 9.5 9.6 10 11 12 13 14 15 Current(16) 17
问题报告 纠错本页面

E.9. 发布版本16 #

E.9.1. 概述
E.9.2. 迁移到版本16
E.9.3. 变更
E.9.4. 致谢

发布日期:. 2023-09-14

E.9.1. 概述 #

PostgreSQL 16 包含许多新功能和改进,包括:

  • 允许并行化FULL和内部右OUTER哈希连接

  • 允许从备用服务器进行逻辑复制

  • 允许逻辑复制订阅者并行应用大型事务

  • 允许通过新的pg_stat_io视图监控I/O统计信息

  • 添加SQL/JSON构造函数和标识函数

  • 提高真空冻结的性能

  • pg_hba.conf中添加对用户和数据库名称的正则表达式匹配支持, 以及在pg_ident.conf中对用户名的正则表达式匹配支持。

上述项目和其他PostgreSQL 16的新功能将在下面的章节中 进行更详细的解释。

E.9.2. 迁移到版本16 #

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

版本16包含许多可能影响与以前版本兼容性的更改。请注意以下不兼容之处:

  • 更改分配规则以适用于PL/pgSQL 绑定的游标变量(Tom Lane) §

    以前,这类变量的字符串值在游标赋值期间会设置为与变量名匹配; 现在将在OPEN 期间分配,并且不会与变量名匹配。要恢复以前的行为,请在 OPEN之前将所需的门户名称分配给游标变量。

  • 禁止NULLS NOT DISTINCT索引用于主键(Daniel Gustafsson) §

  • 更改REINDEX DATABASEreindexdb 以不处理系统目录上的索引(Simon Riggs) § §

    处理这样的索引仍然可以通过使用REINDEX SYSTEMreindexdb --system来完成。

  • 收紧继承和分区表上的GENERATED 表达式限制(Amit Langote,Tom Lane) §

    父/分区表和子/分区表的列必须具有相同的生成状态,尽管现在实际的生成 表达式可以不同。

  • 移除pg_walinspect 函数 pg_get_wal_records_info_till_end_of_wal()pg_get_wal_stats_till_end_of_wal() (Bharath Rupireddy) §

  • 将服务器变量force_parallel_mode重命名为debug_parallel_query (David Rowley) § §

  • 移除手动ON SELECT规则创建 视图的能力 (Tom Lane) §

  • 移除服务器变量 vacuum_defer_cleanup_age(Andres Freund) §

    自从添加了热备反馈复制槽以来,这已经不再 必要。

  • 移除服务器变量promote_trigger_file (Simon Riggs) §

    这曾被用来将备用服务器提升为主服务器,但现在可以更轻松地通过 pg_ctl promotepg_promote() 来完成。

  • 移除只读服务器变量lc_collatelc_ctype(Peter Eisentraut) §

    排序规则和区域设置可能因数据库而异,因此将它们作为只读服务器变量 是不方便的。

  • 角色继承现在控制在 GRANT 期间添加的成员角色的默认 继承状态 (Robert Haas) §

    角色的默认继承行为可以通过新的GRANT ... WITH INHERIT 子句来覆盖。这允许继承某些角色而不继承其他角色,因为成员的继承 状态是在GRANT时设置的。以前,成员角色的继承状态 仅由角色的继承状态控制,并且对角色继承状态的更改会影响所有先前 和未来的成员角色。

  • 限制CREATEROLE 的权限及其修改其他角色的能力(Robert Haas) § §

    以前,具有CREATEROLE权限的角色可以更改任何非超级用户角色的 许多方面。此类更改(包括添加成员)现在要求请求更改的角色具有 ADMIN OPTION权限。例如,他们现在只能更改 CREATEDBREPLICATIONBYPASSRLS 属性,前提是他们也拥有这些权限。

  • 删除postmaster二进制文件的符号链接 (Peter Eisentraut) §

E.9.3. 变更 #

以下是PostgreSQL 16与之前主要版本之间更改的详细说明。

E.9.3.1. 服务器 #

E.9.3.1.1. 优化器 #
  • 允许在更多情况下进行增量排序,包括 DISTINCT(David Rowley) § §

  • 为具有ORDER BYDISTINCT的聚合添加使用 预排序数据的能力(David Rowley) § § §

    新的服务器变量enable_presorted_aggregate 可用于禁用此功能。

  • 允许在UNION ALL之上使用记忆化 (Richard Guo) §

  • 允许使用非空输入作为内部关系执行反连接 (Richard Guo) §

  • 允许并行化FULL和内部右 OUTER哈希连接(Melanie Plageman, Thomas Munro) §

  • 提高GIN索引访问优化器成本的准确性 (Ronan Dunklau) §

E.9.3.1.2. 通用性能 #
  • 允许更高效地添加堆和索引页面(Andres Freund) § §

  • 在非冻结操作期间,在适当的地方执行页面 冻结 (Peter Geoghegan) § § §

    这使得全表冻结清理变得不那么必要。

  • 允许窗口函数在RANGE模式处于活动但不必要时,内部使用更快的 ROWS 模式 (David Rowley) §

  • 允许优化始终递增的窗口函数ntile()cume_dist()percent_rank()(David Rowley) §

  • 允许聚合函数string_agg()array_agg()进行并行化处理(David Rowley) §

  • 通过缓存RANGELIST分区查找来提高性能(Amit Langote, Hou Zhijie,David Rowley) §

  • 允许通过真空和分析控制共享缓冲区的使用 (Melanie Plageman) § § §

    VACUUM/ANALYZE 选项是BUFFER_USAGE_LIMIT,而vacuumdb 选项是--buffer-usage-limit。 默认值由服务器变量vacuum_buffer_usage_limit 设置,该变量也控制自动清理。

  • 支持wal_sync_method=fdatasyncWindows上 (Thomas Munro) §

  • 允许HOT 更新,如果仅更新BRIN索引的列 (Matthias van de Meent, Josef Simanek, Tomas Vondra) §

  • 提高更新进程标题的速度 (David Rowley) §

  • 允许xid/subxid搜索和 ASCII字符串检测使用向量操作 (Nathan Bossart, John Naylor) § § § §

    ASCII检测对于 COPY FROM特别有用。 向量操作也用于某些C数组的搜索。

  • 减少内存分配的开销(Andres Freund, David Rowley) §

E.9.3.1.3. 监控 #
  • 添加系统视图pg_stat_io 视图以跟踪I/O统计信息(Melanie Plageman) § § § § §

  • 记录表上最后一次顺序扫描和索引扫描的统计信息 (Dave Page) §

    此信息显示在pg_stat_*_tablespg_stat_*_indexes中。

  • 记录更新行移动到新页面的统计信息(Corey Huinker) §

    pg_stat_*_tables列是n_tup_newpage_upd

  • 将推测性锁信息添加到pg_locks 系统视图(Masahiko Sawada, Noriyoshi Shinoda) §

    事务ID显示在transactionid列中, 推测插入令牌显示在objid列中。

  • 将预处理语句结果类型的显示添加到 pg_prepared_statements 视图中(Dagfinn Ilmari Mannsåker) § §

  • 在创建订阅时创建订阅统计条目,以确保stats_reset 是准确的(Andres Freund) §

    之前只有在首次报告统计数据时才会创建条目。

  • 修正I/O的统计, 考虑到在pg_stat_database 中显示的临时关系写入 (Melanie Plageman) §

  • 添加函数pg_stat_get_backend_subxact() 用于报告会话的子事务缓存 (Dilip Kumar) §

  • pg_stat_get_backend_idset()pg_stat_get_backend_activity()和相关函数使用不变的后端ID (Nathan Bossart) §

    以前,索引值可能会在会话的生命周期内发生变化。

  • 使用特殊的后端类型报告独立后端(Melanie Plageman) §

  • 添加等待事件SpinDelay 用于报告自旋锁睡眠延迟(Andres Freund) §

  • 创建新的等待事件DSMAllocate 以指示正在等待动态共享内存分配(Thomas Munro) §

    以前,这种类型的等待被报告为 DSMFillZeroWrite,它也被 mmap()分配使用。

  • 将数据库名称添加到逻辑WAL发送器的 进程标题中 (Tatsuhiro Nakamori) §

    物理WAL发送器不会显示数据库名称。

  • 添加检查点和REDO LSN信息到log_checkpoints 消息中(Bharath Rupireddy, Kyotaro Horiguchi) §

  • 在客户端证书失败时提供更多详细信息 (Jacob Champion) §

E.9.3.1.4. 权限 #
  • 添加预定义角色pg_create_subscription 以获得创建订阅的权限(Robert Haas) §

  • 允许订阅不需要密码(Robert Haas) § § §

    通过选项password_required=false 完成此操作。

  • 简化 LOCK TABLE 的权限 (Jeff Davis) §

    以前,用户在不同锁级别上执行LOCK TABLE的能力仅限于他们有权 在表上执行的命令所需的锁级别。例如,拥有 UPDATE权限的用户可以执行除ACCESS SHARE 之外的所有锁级别,即使它是一个更低的锁级别。现在,如果用户已经拥有更高锁级别的 权限,他们也可以发出更低锁级别的锁请求。

  • 允许使用ALTER GROUP group_name ADD USER user_nameADMIN OPTION一起执行 (Robert Haas) §

    之前需要CREATEROLE权限。

  • 允许使用GRANT 来使用WITH ADMIN TRUE/FALSE 语法(Robert Haas) §

    之前仅支持WITH ADMIN OPTION语法。

  • 允许创建其他角色的角色自动继承新角色的权限或 SET ROLE 到新角色的能力(Robert Haas, Shi Yu) § §

    这由服务器变量createrole_self_grant 控制。

  • 防止用户更改非继承角色的默认权限(Robert Haas) §

    这现在仅适用于继承的角色。

  • 在授予角色成员资格时,要求授予者角色是具有适当权限的角色 (Robert Haas) §

    即使是非引导超级用户在授予角色成员资格时,这也是一个要求。

  • 允许非超级用户使用非当前用户的授权用户授予权限 (Robert Haas) §

    当前用户仍然必须具有由指定的授权用户授予的足够权限。

  • 添加GRANT以控制使用 SET ROLE的权限 (Robert Haas) §

    这是由一个新的GRANT ... SET选项控制的。

  • 为已授予权限的角色添加依赖关系跟踪 (Robert Haas) §

    例如,如果存在使用该选项的权限,移除ADMIN OPTION将会失败; 必须使用CASCADE来撤销依赖的权限。

  • 添加对GRANT记录的授予者依赖跟踪 (Robert Haas) §

    这保证了pg_auth_members.grantor 的值始终是有效的。

  • 允许多个角色成员记录(Robert Haas) § §

    之前,一个新的成员资格授予会移除之前匹配的成员资格授予, 即使授予的其他方面不匹配。

  • 防止为引导用户(Robert Haas)移除超级用户权限 §

    恢复此类用户可能会导致错误。

  • 允许makeaclitem() 接受多个权限名称(Robins Tharakan) §

    以前只接受单个权限名称,例如SELECT

E.9.3.1.5. 服务器配置 #
  • 添加对Kerberos凭据委派的支持 (Stephen Frost) § § § §

    通过服务器变量gss_accept_delegationlibpq连接参数gssdelegation启用。

  • 允许通过服务器变量scram_iterations 设置SCRAM迭代次数 (Daniel Gustafsson) §

  • 提高服务器变量管理的性能 (Tom Lane) § §

  • 收紧对可以重置的服务器变量的限制 (Masahiko Sawada) §

    以前,某些变量,例如transaction_isolation, 不会受到RESET ALL的影响,但它们可能在不适当的情况下被单独重置。

  • 将各种postgresql.conf 项目移入新类别(Shinya Kato) §

    这也会影响在pg_settings 视图中显示的类别。

  • 防止配置文件递归超过10级(Julien Rouhaud) §

  • 允许 自动清理 更频繁地遵守延迟设置的更改 (Melanie Plageman) § §

    与其仅在每个关系的开始处处理更改, 不如在每个块的开始处处理更改。

  • 移除对存档文件必须被持久重命名的限制 (Nathan Bossart) § §

    archive_command 命令现在更有可能在崩溃后被调用时处理已经归档的文件。

  • 防止archive_libraryarchive_command 同时被设置(Nathan Bossart) §

    之前archive_library会覆盖 archive_command

  • 允许邮局管理员通过中止信号终止子进程 (Tom Lane) §

    这允许为卡住的子进程收集核心转储。这由send_abort_for_crashsend_abort_for_kill 控制。主进程的-T开关现在等同于设置 send_abort_for_crash

  • 移除非功能性的postmaster -n 选项 (Tom Lane) §

  • 允许服务器为具有pg_use_reserved_connections 成员资格的角色保留后端插槽(Nathan Bossart) §

    保留的槽位数量由服务器变量reserved_connections设置。

  • 允许大页在较新版本的 Windows 10上工作 (Thomas Munro) §

    这增加了在较新版本的Windows 10上启用大页面所需的特殊处理。

  • 添加 debug_io_direct 设置以供开发者使用(Thomas Munro, Andres Freund, Bharath Rupireddy) § §

    虽然主要是为开发者设计的,wal_sync_method=open_sync/ open_datasync已被修改为不使用直接I/Owal_level=minimal;现在可以通过 debug_io_direct=wal启用。

  • 添加函数pg_split_walfile_name() 用于报告WAL文件名的段和时间线值 (Bharath Rupireddy) § §

E.9.3.1.6. pg_hba.conf #
  • 增加对在pg_hba.conf中对数据库和角色条目进行正则表达式匹配 的支持 (Bertrand Drouvot) §

    正则表达式模式以斜杠作为前缀。以斜杠开头的数据库和角色名称在 pg_hba.conf中引用时需要用双引号括起来。

  • 改进用户列的处理,使其与pg_ident.conf 匹配pg_hba.conf(Jelte Fennema) §

    具体来说,添加对all的支持,角色成员资格使用 +,以及以斜杠开头的正则表达式。任何匹配这些模式的 用户名都必须用双引号括起来。

  • 允许在pg_hba.confpg_ident.conf 中包含文件(Julien Rouhaud) §

    这些由includeinclude_if_existsinclude_dir控制。系统视图pg_hba_file_rulespg_ident_file_mappings 现在显示文件名。

  • 允许pg_hba.conf令牌具有无限长度(Tom Lane) §

  • 添加规则并将数字映射到系统视图pg_hba_file_rules (Julien Rouhaud) §

E.9.3.1.7. 本地化 #
  • 从区域设置中确定默认编码,当使用 ICU时 (Jeff Davis) §

    之前的默认值始终是UTF-8

  • 使用 CREATE DATABASECREATE COLLATIONLOCALE 选项,以及 initdbcreatedb --locale 选项,控制非 libc 的排序规则提供程序 (Jeff Davis)

    之前他们只控制了libc提供者。

  • 添加预定义的排序规则unicodeucs_basic(Peter Eisentraut) §

    这仅在启用了ICU支持时才有效。

  • 允许创建自定义ICU排序规则 (Peter Eisentraut) §

    这是通过使用CREATE COLLATION的新RULES 子句完成的,以及为CREATE DATABASEcreatedbinitdb 提供的新选项。

  • 允许Windows自动导入系统区域设置 (Juan José Santamaría Flecha) §

    以前,只有ICU语言环境可以在 Windows上导入。

E.9.3.2. 逻辑复制 #

  • 允许备用服务器上的逻辑解码 (Bertrand Drouvot、Andres Freund、Amit Khandekar) § § §

    快照WAL记录是逻辑槽创建所必需的,但无法在备用 节点上创建。为了避免延迟,新的函数pg_log_standby_snapshot() 允许创建此类记录。

  • 添加服务器变量以控制逻辑解码发布者如何传输更改以及订阅者如何应用它们 (Shi Yu) § § §

    该变量是debug_logical_replication_streaming

  • 允许逻辑复制初始表同步以二进制格式复制行 (Melih Mutlu) §

    这仅适用于标记为二进制的订阅。

  • 允许逻辑复制的并行应用(侯志杰,王伟,Amit Kapila) § § §

    CREATE SUBSCRIPTION STREAMING 选项现在支持parallel,以通过并行工作者应用大事务。 并行工作者的数量由新的服务器变量max_parallel_apply_workers_per_subscription 控制。新增了等待事件LogicalParallelApplyMainLogicalParallelApplyStateChangeLogicalApplySendData。系统视图pg_stat_subscription 新增了列leader_pid,用于跟踪并行活动。

  • 提高逻辑复制应用在没有主键情况下的性能 (逻辑复制架构) (Onder Kalaci, Amit Kapila) §

    具体来说,REPLICA IDENTITY FULL现在可以使用btree索引, 而不是顺序扫描表来找到匹配项。

  • 允许逻辑复制订阅者仅处理没有来源的更改 (Vignesh C, Amit Kapila) § §

    这可以用来避免复制循环。这由新的CREATE SUBSCRIPTION ... ORIGIN 选项控制。

  • 以表所有者的身份执行逻辑复制SELECTDML操作(Robert Haas) § §

    这提高了安全性,现在要求订阅所有者必须是超级用户,或者对复制集 中所有拥有表的角色具有SET ROLE 权限。之前以订阅所有者身份执行所有操作的行为可以通过订阅 run_as_owner 选项启用。

  • wal_retrieve_retry_interval 按每个订阅的基础进行操作(Nathan Bossart) §

    之前,重试时间是全局应用的。此更改还添加了等待事件>LogicalRepLauncherDSALogicalRepLauncherHash

E.9.3.3. 实用命令 #

  • 添加EXPLAIN 选项GENERIC_PLAN以显示参数化查询的通用计划 (Laurenz Albe) §

  • 允许一个COPY FROM 值映射到列的默认值(Israel Barth Rubio) §

  • 允许使用COPY 将数据批量插入到外部表中(Andrey Lepikhov, Etsuro Fujita) §

    这由postgres_fdw 选项batch_size 控制。

  • 允许通过CREATE TABLE 指定STORAGE类型 (Teodor Sigaev,Aleksander Alekseev) § §

    以前只有ALTER TABLE可以控制这一点。

  • 允许在外部表上使用 截断触发器 (Yugo Nagata) §

  • 允许VACUUMvacuumdb 仅处理TOAST表 (Nathan Bossart) §

    这是通过让VACUUM 关闭PROCESS_MAIN,或者通过vacuumdb 使用--no-process-main选项来实现的。

  • 添加VACUUM 选项以跳过或更新所有冻结统计信息(Tom Lane, Nathan Bossart) §

    选项是SKIP_DATABASE_STATSONLY_DATABASE_STATS

  • REINDEX DATABASEREINDEX SYSTEM 修改为不再需要参数(Simon Riggs) § §

    之前必须指定数据库名称。

  • 允许CREATE STATISTICS在未指定名称时生成统计信息名称 (Simon Riggs) §

E.9.3.4. 数据类型 #

  • 允许非十进制的整数字面量 (Peter Eisentraut) §

    例如,0x42F0o2730b100101

  • 允许NUMERIC 处理任意大小的十六进制、八进制和二进制整数 (Dean Rasheed) §

    以前,这些非十进制基数仅支持未加引号的八字节整数。

  • 允许在整数和数字常量中使用下划线 (Peter Eisentraut, Dean Rasheed) §

    这可以提高长数字串的可读性。

  • 接受日期时间输入中的拼写+infinity (Vik Fearing) §

  • 防止在日期时间字符串中同时指定epochinfinity以及其他字段(Joseph Koshakow) §

  • 移除以YMD 形式输入日期的未记录支持 (Joseph Koshakow) §

  • 添加函数pg_input_is_valid()pg_input_error_info()以检查类型转换错误(Tom Lane) § §

E.9.3.5. 常规查询 #

  • 允许在FROM子句中省略别名(Dean Rasheed) §

  • SQL/JSON路径中添加对增强型数字字面量的支持 (Peter Eisentraut) §

    例如,允许十六进制、八进制和二进制整数,以及数字之间的下划线。

E.9.3.6. 函数 #

  • 添加SQL/JSON构造函数(Nikita Glukhov, Teodor Sigaev,Oleg Bartunov,Alexander Korotkov,Amit Langote) §

    新的函数JSON_ARRAY()JSON_ARRAYAGG()JSON_OBJECT()JSON_OBJECTAGG()SQL标准的一部分。

  • 添加SQL/JSON对象检查(Nikita Glukhov、 Teodor Sigaev、Oleg Bartunov、Alexander Korotkov、Amit Langote、 Andrew Dunstan) §

    IS JSON检查包括对值、数组、对象、标量和唯一键的检查。

  • 允许JSON字符串解析使用向量操作 (John Naylor) §

  • 改进全文高亮功能的处理 ts_headline() 对于ORNOT表达式的支持 (Tom Lane) §

  • 添加函数以在指定的时区中添加、减去和生成 timestamptz值(Przemyslaw Sztoch,Gurjeet Singh) §

    这些函数是date_add()date_subtract(),以及generate_series()

  • date_trunc(unit, timestamptz, time_zone)更改为不可变函数 (Przemyslaw Sztoch) §

    这允许使用此函数创建表达式索引。

  • 添加服务器变量SYSTEM_USER (Bertrand Drouvot) §

    这会报告认证方法及其认证的用户。

  • 添加函数array_sample()array_shuffle()(Martin Kalcher) §

  • 添加聚合函数ANY_VALUE() ,该函数从集合中返回任意值(Vik Fearing) §

  • 添加函数random_normal() 来提供正态分布的随机数(Paul Ramsey) §

  • 添加错误函数erf() 及其补充函数erfc()(Dean Rasheed) §

  • 提高整数指数的数值power() 函数的准确性(Dean Rasheed) §

  • 添加XMLSERIALIZE() 选项INDENT以美化其输出 (Jim Jones) §

  • 更改pg_collation_actual_version() 以为默认排序规则返回一个合理的值(Jeff Davis) §

    之前它返回了NULL

  • 允许pg_read_file()pg_read_binary_file()忽略丢失的文件(Kyotaro Horiguchi) §

  • 添加字节规范(B)到pg_size_bytes() (Peter Eisentraut) §

  • 允许to_reg* 函数接受数字OID作为输入 (Tom Lane) §

E.9.3.7. PL/pgSQL #

E.9.3.8. libpq #

  • 添加libpq连接选项require_auth 以指定可接受的身份验证方法列表(Jacob Champion) §

    这也可以用来禁止某些身份验证方法。

  • 允许随机选择多个由libpq指定的主机 (Jelte Fennema) § §

    通过启用load_balance_hosts=random 可以实现负载均衡。

  • 添加libpq选项sslcertmode 来控制客户端证书的传输(Jacob Champion) §

    选项值是disableallowrequire

  • 允许libpq使用系统证书池进行证书验证 (Jacob Champion,Thomas Habets) §

    通过使用sslrootcert=system 启用,这也启用了sslmode=verify-full

E.9.3.9. 客户端应用 #

  • 允许ECPG 变量声明使用与未保留的SQL关键字匹配的typedef名称 (Tom Lane) §

    此更改确实阻止了与C typedef名称匹配的关键字在后续 EXEC SQL块中被处理为关键字。

E.9.3.9.1. psql #
  • 允许psql控制扩展格式中标题行的最大宽度 (Platon Pronko) §

    这由xheader_width控制。

  • 添加psql命令\drg 以显示角色成员详细信息(Pavel Luzanov) § §

    成员所属输出列已从\du\dg 中移除,因为这个新命令以更详细的方式显示了这些信息。

  • 允许psql的访问权限命令显示系统对象 (Nathan Bossart) § §

    选项是\dpS\zS

  • 添加FOREIGN标记到psql \d+ 用于外部表的子表和分区(Ian Lawrence Barwick) §

  • 防止\df+ 显示函数源代码(Isaac Morland) §

    函数体可以更容易地通过\sf查看。

  • 允许psql使用扩展查询协议提交查询 (Peter Eisentraut) §

    向此类查询传递参数是通过使用新的psql \bind 命令完成的。

  • 允许psql\watch 限制执行次数(Andrey Borodin) §

    现在可以在指定时为\watch选项命名。

  • 检测psql \watch 的无效值,并允许零指定无延迟(Andrey Borodin) §

  • 允许psql脚本获取外壳命令和查询的退出状态 (Corey Huinker,Tom Lane) § §

    新的psql控制变量是SHELL_ERRORSHELL_EXIT_CODE

  • 各种psql标签补全的改进 (Vignesh C, Aleksander Alekseev, Dagfinn Ilmari Mannsåker, Shi Yu, Michael Paquier, Ken Kato, Peter Smith) § § § § § § § § § § § §

E.9.3.9.2. pg_dump #
  • 添加pg_dump对转储子表和分区的控制 (Gilles Darold) §

    新的选项是--table-and-children--exclude-table-and-children--exclude-table-data-and-children

  • 添加LZ4Zstandard压缩到 pg_dump(Georgios Kokolatos,Justin Pryzby)

  • 允许pg_dumppg_basebackup 使用模式进行压缩 (Justin Pryzby) § § § §

  • 改进pg_dump以接受更一致的压缩语法 (Georgios Kokolatos) §

    --compress=gzip:5这样的选项。

E.9.3.10. 服务器应用 #

  • 添加initdb 选项以在initdb期间以及所有未来的服务器启动 过程中设置服务器变量(Tom Lane) §

    该选项是-c name=value

  • createuser 添加选项以控制更多用户选项(Shinya Kato) § §

    具体来说,新选项控制有效期日期、绕过行级安全性和角色成员资格。

  • 弃用createuser 选项--role(Nathan Bossart) § §

    此选项可能很容易与新的createuser角色成员选项混淆, 因此添加了具有相同功能的--member-of选项。 --role选项仍然可以使用。

  • 允许控制vacuumdb 模式处理(Gilles Darold) §

    这些由选项--schema--exclude-schema控制。

  • 使用新的VACUUM 选项来提高vacuumdb 的性能(Tom Lane, Nathan Bossart) §

  • 使用pg_upgrade 设置新集群的区域设置和编码(Jeff Davis) §

    这消除了新集群必须使用相同的区域设置和编码设置创建的要求。

  • 添加pg_upgrade 选项以指定默认传输模式(Peter Eisentraut) §

    该选项是--copy

  • 改进pg_basebackup 以接受数字压缩选项(Georgios Kokolatos, Michael Paquier) §

    现在支持类似--compress=server-5的选项。

  • 修复pg_basebackup 以处理存储在PGDATA目录中的表空间 (Robert Haas) §

  • 添加pg_waldump 选项--save-fullpage以转储完整页面图像 (David Christensen) §

  • 允许pg_waldump 选项-t/--timeline接受十六进制值 (Peter Eisentraut) §

  • pg_verifybackup 添加进度报告支持(Masahiko Sawada) §

  • 允许pg_rewind 正确跟踪时间线的变化(Heikki Linnakangas) § §

    之前,如果在时间线切换后但在检查点发出之前运行 pg_rewind,它可能会错误地判断不需要回滚。

  • pg_receivewalpg_recvlogical 在接收到SIGTERM信号时干净地退出 (Christoph Berg) §

    此信号通常由systemd使用。

E.9.3.11. 源代码 #

  • 默认构建ICU支持(Jeff Davis) §

    这将移除构建标志 --with-icu,并添加标志 --without-icu

  • 添加对SSE2(流式SIMD扩展2)向量操作的支持, 适用于x86-64架构(John Naylor) §

  • 添加对高级SIMD(单指令多数据) (NEON)指令在ARM架构上的支持 (Nathan Bossart) §

  • 使用WindowsMSVC构建的二进制文件会使用 随机基址 (地址空间布局随机化) (Michael Paquier) §

    这已经在MinGW构建中启用了。

  • 防止扩展库默认导出其符号 (Andres Freund,Tom Lane) § §

    需要从核心后端或其他扩展中调用的函数现在必须明确标记为 PGDLLEXPORT

  • 需要Windows 10或更高版本 (Michael Paquier, Juan José Santamaría Flecha) §

    之前支持Windows VistaWindows XP

  • 需要 Perl 版本 5.14 或更高版本 (John Naylor) §

  • 需要 Bison 版本 2.3 或更高版本 (John Naylor) §

  • 需要 Flex 版本 2.5.35 或更高版本 (John Naylor) §

  • 需要MIT Kerberos以支持 GSSAPI(Stephen Frost) §

  • 移除对Visual Studio 2013的支持 (Michael Paquier) §

  • 移除对HP-UX的支持 (Thomas Munro) §

  • 移除对HP/Intel Itanium的支持 (Thomas Munro) §

  • 移除对M68KM88KM32R、 和SuperHCPU 架构的支持(Thomas Munro) § §

  • 移除libpqSCM凭证认证的支持 (Michael Paquier) §

    后端对这种身份验证方法的支持已在 PostgresSQL 9.1 中移除。

  • 添加meson 构建系统(Andres Freund, Nazir Bilal Yavuz, Peter Eisentraut) §

    这最终将取代Autoconf和基于 WindowsMSVC构建系统。

  • 允许控制构建系统使用的openssl二进制文件的 位置(Peter Eisentraut) §

    将查找openssl程序作为 configuremeson选项

  • 添加构建选项以允许测试小表段大小 (Andres Freund) §

    构建选项是--with-segsize-blocks-Dsegsize_blocks

  • 添加pgindent选项 (Andrew Dunstan) § § § § § § §

    新的选项是--show-diff--silent-diff--commit--help,并允许多个--exclude 选项。同时要求显式指定typedef文件。选项--code-base--build也被移除了。

  • 添加pg_bsd_indent 源代码到主树 (Tom Lane) §

  • 改进make_ctagsmake_etags(Yugo Nagata) §

  • 调整pg_attribute 列以提高效率(Peter Eisentraut) §

E.9.3.12. 附加模块 #

  • 改进了在布尔列上使用基于扩展的索引的性能(Zongliang Quan,Tom Lane) §

  • fuzzystrmatch 添加对Daitch-Mokotoff Soundex的支持 (Dag Lem) §

  • 允许auto_explain 记录传递给参数化语句的值(Dagfinn Ilmari Mannsåker) §

    这会影响使用服务器端PREPARE/EXECUTE 和客户端解析/绑定的查询。日志记录由auto_explain.log_parameter_max_length 控制;默认情况下,查询参数将被记录且没有长度限制。

  • auto_explainlog_verbose模式遵循compute_query_id 的值(Atsushi Torikoshi) §

    以前,即使compute_query_id已启用,log_verbose 也不会显示查询标识符。

  • ltree标签的最大长度 从256更改为1000,并允许使用连字符(Garen Torikian) §

  • pg_stat_statements 标准化在实用程序命令中使用的常量(Michael Paquier) §

    以前常量会出现在占位符的位置,例如, $1

  • 添加pg_walinspect 函数pg_get_wal_block_info() 用于报告WAL块信息(Michael Paquier、 Melanie Plageman、Bharath Rupireddy) § § § §

  • 更改pg_walinspect 的功能,pg_get_wal_records_info()pg_get_wal_stats() 如何解释结束的LSN(Bharath Rupireddy) §

    以前表示不存在的WAL位置的LSN会导致错误, 而现在它们将被解释为WAL的结束位置。

  • 添加关于pg_walinspectpg_waldumpWAL记录的详细描述 (Melanie Plageman,Peter Geoghegan) § § § §

  • 添加pageinspect 函数bt_multi_page_stats() 用于报告多个页面的统计信息(Hamid Akhtar) §

    这类似于bt_page_stats(),只是它可以报告一系列页面。

  • 添加空范围输出列到pageinspect 函数brin_page_items() (Tomas Vondra) §

  • 重新设计归档模块以使其更加灵活(Nathan Bossart) §

    初始化更改将需要为旧版本的Postgres编写的模块进行更新。

  • 修正不准确的pg_stat_statements 行跟踪扩展查询协议语句 (Sami Imseih) §

  • 添加pg_buffercache 函数pg_buffercache_usage_counts()以报告使用总计 (Nathan Bossart) §

  • 添加pg_buffercache 函数pg_buffercache_summary()以报告汇总的缓冲区统计信息 (Melih Mutlu) §

  • 允许在扩展脚本中使用新语法 @extschema:referenced_extension_name@ 引用所需扩展的模式 (Regina Obe) §

  • 允许将所需的扩展标记为不可重定位,使用no_relocate (Regina Obe) §

    这允许@extschema:referenced_extension_name@ 在扩展的生命周期内被视为常量。

E.9.3.12.1. postgres_fdw #
  • 允许postgres_fdw在并行中执行中止操作 (Etsuro Fujita) §

    通过postgres_fdw选项parallel_abort 启用此功能。

  • 使外部postgres_fdw表上的 ANALYZE 更高效 (Tomas Vondra) §

    postgres_fdw选项analyze_sampling 控制采样方法。

  • 限制reg类型常量的运输到仅引用内置对象或标记为可运输的扩展 的postgres_fdw中 (Tom Lane) §

  • postgres_fdwdblink在连接建立 期间处理中断(Andres Freund) §

E.9.4. 致谢 #

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

Abhijit Menon-Sen
Adam Mackler
Adrian Klaver
Ahsan Hadi
Ajin Cherian
Ajit Awekar
Alan Hodgson
Aleksander Alekseev
Alex Denman
Alex Kozhemyakin
Alexander Korolev
Alexander Korotkov
Alexander Lakhin
Alexander Pyhalov
Alexey Borzov
Alexey Ermakov
Alexey Makhmutov
Álvaro Herrera
Amit Kapila
Amit Khandekar
Amit Langote
Amul Sul
Anastasia Lubennikova
Anban Company
Andreas Dijkman
Andreas Karlsson
Andreas Scherbaum
Andrei Zubkov
Andres Freund
Andrew Alsup
Andrew Bille
Andrew Dunstan
Andrew Gierth
Andrew Kesper
Andrey Borodin
Andrey Lepikhov
Andrey Sokolov
Ankit Kumar Pandey
Ante Kresic
Anton Melnikov
Anton Sidyakin
Anton Voloshin
Antonin Houska
Arne Roland
Artem Anisimov
Arthur Zakirov
Ashutosh Bapat
Ashutosh Sharma
Asim Praveen
Atsushi Torikoshi
Ayaki Tachikake
Balazs Szilfai
Benoit Lobréau
Bernd Helmle
Bertrand Drouvot
Bharath Rupireddy
Bilva Sanaba
Bob Krier
Boris Zentner
Brad Nicholson
Brar Piening
Bruce Momjian
Bruno da Silva
Carl Sopchak
Cary Huang
Changhong Fei
Chris Travers
Christoph Berg
Christophe Pettus
Corey Huinker
Craig Ringer
Curt Kolovson
Dag Lem
Dagfinn Ilmari Mannsåker
Daniel Gustafsson
Daniel Vérité
Daniel Watzinger
Daniel Westermann
Daniele Varrazzo
Daniil Anisimov
Danny Shemesh
Dave Page
David Christensen
David G. Johnston
David Geier
David Gilman
David Kimura
David Rowley
David Steele
David Turon
David Zhang
Davinder Singh
Dean Rasheed
Denis Laxalde
Dilip Kumar
Dimos Stamatakis
Dmitriy Kuzmin
Dmitry Astapov
Dmitry Dolgov
Dmitry Koval
Dong Wook Lee
Dongming Liu
Drew DeVault
Duncan Sands
Ed Maste
Egor Chindyaskin
Ekaterina Kiryanova
Elena Indrupskaya
Emmanuel Quincerot
Eric Mutta
Erik Rijkers
Erki Eessaar
Erwin Brandstetter
Etsuro Fujita
Eugeny Zhuzhnev
Euler Taveira
Evan Jones
Evgeny Morozov
Fabrízio de Royes Mello
Farias de Oliveira
Florin Irion
Franz-Josef Färber
Garen Torikian
Georgios Kokolatos
Gilles Darold
Greg Stark
Guillaume Lelarge
Gunnar Bluth
Gunnar Morling
Gurjeet Singh
Haiyang Wang
Haiying Tang
Hamid Akhtar
Hans Buschmann
Hao Wu
Hayato Kuroda
Heath Lord
Heikki Linnakangas
Himanshu Upadhyaya
Hisahiro Kauchi
Hongyu Song
Hubert Lubaczewski
Hung Nguyen
Ian Barwick
Ibrar Ahmed
Ilya Gladyshev
Ilya Nenashev
Isaac Morland
Israel Barth Rubio
Jacob Champion
Jacob Speidel
Jaime Casanova
Jakub Wartak
James Coleman
James Inform
James Vanns
Jan Wieck
Japin Li
Jeevan Ladhe
Jeff Davis
Jeff Janes
Jehan-Guillaume de Rorthais
Jelte Fennema
Jian He
Jim Jones
Jinbao Chen
Joe Conway
Joel Jacobson
John Naylor
Jonathan Katz
Josef Simanek
Joseph Koshakow
Juan José Santamaría Flecha
Julien Rouhaud
Julien Roze
Junwang Zhao
Justin Pryzby
Justin Zhang
Karina Litskevich
Karl O. Pinc
Keisuke Kuroda
Ken Kato
Kevin McKibbin
Kieran McCusker
Kirk Wolak
Konstantin Knizhnik
Koshi Shibagaki
Kotaro Kawamoto
Kui Liu
Kyotaro Horiguchi
Lakshmi Narayanan Sreethar
Laurence Parry
Laurenz Albe
Luca Ferrari
Lukas Fittl
Maciek Sakrejda
Magnus Hagander
Maja Zaloznik
Marcel Hofstetter
Marina Polyakova
Mark Dilger
Marko Tiikkaja
Markus Winand
Martijn van Oosterhout
Martin Jurca
Martin Kalcher
Mary Xu
Masahiko Sawada
Masahiro Ikeda
Masao Fujii
Mason Sharp
Matheus Alcantara
Mats Kindahl
Matthias van de Meent
Matthijs van der Vleuten
Maxim Orlov
Maxim Yablokov
Mehmet Emin Karakas
Melanie Plageman
Melih Mutlu
Micah Gates
Michael Banck
Michael Paquier
Michail Nikolaev
Michel Pelletier
Mike Oh
Mikhail Gribkov
Mingli Zhang
Miroslav Bendik
Mitsuru Hinata
Myo Wai Thant
Naeem Akhter
Naoki Okano
Nathan Bossart
Nazir Bilal Yavuz
Neha Sharma
Nick Babadzhanian
Nicola Contu
Nikhil Shetty
Nikita Glukhov
Nikolay Samokhvalov
Nikolay Shaplov
Nishant Sharma
Nitin Jadhav
Noah Misch
Noboru Saito
Noriyoshi Shinoda
Nuko Yokohama
Oleg Bartunov
Oleg Tselebrovskiy
Olly Betts
Onder Kalaci
Onur Tirtir
Pablo Federico
Palle Girgensohn
Paul Guo
Paul Jungwirth
Paul Ramsey
Pavel Borisov
Pavel Kulakov
Pavel Luzanov
Pavel Stehule
Peifeng Qiu
Peter Eisentraut
Peter Geoghegan
Peter Smith
Phil Florent
Philippe Godfrin
Platon Pronko
Przemyslaw Sztoch
Rachel Heaton
Ranier Vilela
Regina Obe
Reid Thompson
Reiner Peterke
Richard Guo
Riivo Kolka
Rishu Bagga
Robert Haas
Robert Sjöblom
Robert Treat
Roberto Mello
Robins Tharakan
Roman Zharkov
Ronan Dunklau
Rushabh Lathia
Ryo Matsumura
Samay Sharma
Sami Imseih
Sandeep Thakkar
Sandro Santilli
Sebastien Flaesch
Sébastien Lardière
Sehrope Sarkuni
Sergey Belyashov
Sergey Pankov
Sergey Shinderuk
Shi Yu
Shinya Kato
Sho Kato
Shruthi Gowda
Shveta Mallik
Simon Riggs
Sindy Senorita
Sirisha Chamarthi
Sravan Kumar
Stéphane Tachoires
Stephen Frost
Steve Chavez
Stone Tickle
Sven Klemm
Takamichi Osumi
Takeshi Ideriha
Tatsuhiro Nakamori
Tatsuo Ishii
Teja Mupparti
Tender Wang
Teodor Sigaev
Thiago Nunes
Thom Brown
Thomas Habets
Thomas Mc Kay
Thomas Munro
Tim Carey-Smith
Tim Field
Timo Stolz
Tom Lane
Tomas Vondra
Tor Erik Linnerud
Torsten Förtsch
Tristan Partin
Troy Frericks
Tushar Ahuja
Valerie Woolard
Vibhor Kumar
Victor Spirin
Victoria Shepard
Vignesh C
Vik Fearing
Vitaly Burovoy
Vitaly Davydov
Wang Wei
Wenjing Zeng
Whale Song
Will Mortensen
Wolfgang Walther
Xin Wen
Xing Guo
Xingwang Xu
XueJing Zhao
Yanliang Lei
Youmiu Mo
Yugo Nagata
Yura Sokolov
Yuta Katsuragi
Zhen Mingyang
Zheng Li
Zhihong Yu
Zhijie Hou
Zongliang Quan
Zuming Jiang