E.26. 版本 9.5 #
发布日期:. 2016-01-07
E.26.1. 概述
PostgreSQL 9.5 的主要增强包括:
上述各项在下面的章节中有更详细的说明。
E.26.2. 迁移到版本 9.5
希望从任何之前的版本迁移数据的用户,需要使用pg_dumpall进行转储/恢复,或使用pg_upgrade。
版本 9.5 包含许多可能影响与以前版本兼容性的变更。请注意以下不兼容之处:
调整操作符优先级以符合 SQL 标准(Tom Lane)
<=、>=和<>的优先级已降低到与<、>和=相同。IS测试(例如xIS NULL)的优先级已降低到恰好位于这六个比较操作符之下。此外,以NOT开头的多关键字操作符现在具有其基础操作符的优先级(例如NOT BETWEEN现在与BETWEEN优先级相同),而以前它们的优先级并不一致:对左操作数表现得像NOT,对右操作数表现得像其基础操作符。新的配置参数operator_precedence_warning可以启用,以就在这些优先级变更导致不同解析选择的查询发出警告。把pg_ctl的默认关闭模式从
smart改为fast(Bruce Momjian)这意味着默认行为将是强制取消现有的数据库会话,而不是简单地等待它们退出。
在 PL/pgSQL 赋值中使用赋值转换行为进行数据类型转换,而不是经由文本往返转换(Tom Lane)
此变更使布尔值到字符串的转换产生
true或false,而不是t或f。其他类型转换可能在比以前更多的情况下成功;例如,把数值3.9赋给整数变量现在会赋值 4,而不是失败。如果没有为特定的源类型和目标类型定义赋值级转换,PL/pgSQL 将回退到旧的 I/O 转换行为。允许服务器命令行选项中的字符用反斜杠转义(Andres Freund)
以前,选项字符串中的空格总是分隔选项,因此无法在选项值中包含空格。现在要在选项值中包含反斜杠,需要写成
\\。把 GSSAPI 的
include_realm参数默认值改为 1,因此默认情况下不会从 GSS 或 SSPI 主体名中移除领域(realm)(Stephen Frost)用min_wal_size和max_wal_size替换配置参数
checkpoint_segments(Heikki Linnakangas)如果你以前调整过
checkpoint_segments,以下公式可给出近似等效的设置:max_wal_size = (3 * checkpoint_segments) * 16MB
注意,
max_wal_size的默认设置比过去checkpoint_segments的默认值高得多,因此可能不再需要调整它。通过新的环境变量
PG_OOM_ADJUST_FILE和PG_OOM_ADJUST_VALUE控制 Linux 的 OOM killer,而不是编译时选项LINUX_OOM_SCORE_ADJ和LINUX_OOM_ADJ(Gurjeet Singh)停用服务器配置参数
ssl_renegotiation_limit,它在以前的版本中已被弃用(Andres Freund)虽然 SSL 重协商在理论上是个好主意,但它引发的 bug 之多,使它在实践中被认为弊大于利,而且相关标准的未来版本将移除它。因此我们已从 PostgreSQL 中移除了对它的支持。
ssl_renegotiation_limit参数仍然存在,但只能设置为零(禁用)。它也不再被写入文档。移除服务器配置参数
autocommit,它此前已被弃用且不起作用(Tom Lane)移除
pg_authid系统目录的rolcatupdate字段,因为它毫无用处(Adam Brightwell)当没有有效值时,
pg_stat_replication系统视图的sent字段现在为 NULL 而不是零(Magnus Hagander)允许
json和jsonb数组提取操作符接受负数下标,它们从 JSON 数组末尾开始计数(Peter Geoghegan、Andrew Dunstan)以前,这些操作符对负数下标返回
NULL。
E.26.3. 变更
下面你将找到 PostgreSQL 9.5 与上一个大版本之间的变更的详细说明。
E.26.3.1. 服务器
E.26.3.1.1. 索引
添加块范围索引(BRIN)(Álvaro Herrera)
BRIN 索引只为堆块范围存储摘要数据(如最小值和最大值)。因此它们非常紧凑且更新成本低;但如果数据是自然聚簇的,它们仍能显著加速搜索。
允许查询使用 GiST 索引对边界框索引的对象(多边形、圆)执行精确的距离过滤(Alexander Korotkov、Heikki Linnakangas)
以前,要利用此类索引,必须使用子查询选取大量按边界框距离排序的行,然后再用更精确的距离计算对结果进一步过滤。
允许 GiST 索引执行仅索引扫描(Anastasia Lubennikova、Heikki Linnakangas、Andreas Karlsson)
添加配置参数gin_pending_list_limit来控制 GIN 待处理列表的大小(Fujii Masao)
该值也可以按索引设置为索引存储参数。以前,待处理列表的大小由work_mem控制,这很不方便,因为
work_mem的合适值对此用途往往太大了。在创建哈希索引期间发出警告,因为它们不是崩溃安全的(Bruce Momjian)
E.26.3.1.2. 一般性能
通过“缩写”键提高
varchar、text和numeric字段的排序速度(Peter Geoghegan、Andrew Gierth、Robert Haas)扩展允许由内联的、非 SQL 可调用的比较函数执行排序的基础设施,使其覆盖
CREATE INDEX、REINDEX和CLUSTER(Peter Geoghegan)改进哈希连接的性能(Tomas Vondra、Robert Haas)
改进共享缓冲区替换的并发性(Robert Haas、Amit Kapila、Andres Freund)
减少索引扫描期间的页锁和引脚数量(Kevin Grittner)
其主要好处是让索引清理较少被阻塞。
使按后端的缓冲区引脚跟踪更省内存(Andres Freund)
改进锁的可伸缩性(Andres Freund)
这尤其解决了在多 CPU 插槽系统上运行时的可伸缩性问题。
允许优化器移除对左连接子查询的不必要引用(David Rowley)
在合适的情况下,允许把查询限制下推到带窗口函数的子查询中(David Rowley)
如果非防泄漏函数不接收任何视图输出列,则允许把它下推到安全屏障视图中(Dean Rasheed)
当
WHERE中出现匹配的函数调用时,让规划器使用从布尔返回函数表达式索引获得的统计信息(Tom Lane)即使列的数据类型缺少相等函数,也让
ANALYZE计算基本统计信息(空值比例和平均列宽)(Oleksandr Shulgin)加速 CRC(循环冗余校验)计算并切换到 CRC-32C(Abhijit Menon-Sen、Heikki Linnakangas)
改进位图索引扫描的性能(Teodor Sigaev、Tom Lane)
通过避免不必要的内存复制加速
CREATE INDEX(Robert Haas)增加缓冲区映射的分区数(Amit Kapila、Andres Freund、Robert Haas)
这提高了高并发负载下的性能。
E.26.3.1.3. 监控
通过新的
log_autovacuum_min_duration存储参数添加按表的自动清理日志控制(Michael Paquier)添加新的配置参数cluster_name(Thomas Munro)
这个字符串通常在
postgresql.conf中设置,让客户端能够识别集群。该名称还会出现在所有服务器进程的进程标题中,便于识别属于同一集群的进程。防止非超级用户在连接启动时更改log_disconnections(Fujii Masao)
E.26.3.1.4. SSL
检查 SSL 服务器证书中的“使用者可选名称(Subject Alternative Names)”(如果存在)(Alexey Klyukin)
当它们存在时,这将取代对证书“通用名称(Common Name)”的检查。
添加系统视图
pg_stat_ssl,用于报告 SSL 连接信息(Magnus Hagander)添加以与实现无关的方式返回 SSL 信息的 libpq 函数(Heikki Linnakangas)
虽然
PQgetssl()仍可用于调用 OpenSSL 函数,但它现在被视为已弃用,因为未来版本的 libpq 可能支持其他 SSL 实现。在可能的情况下,请使用新函数PQsslAttribute()、PQsslAttributeNames()和PQsslInUse(),以与 SSL 实现无关的方式获取 SSL 信息。使 libpq 遵循任何 OpenSSL 线程回调(Jan Urbanski)
以前它们会被覆盖。
E.26.3.1.5. 服务器配置
用min_wal_size和max_wal_size替换配置参数
checkpoint_segments(Heikki Linnakangas)此变更允许分配大量 WAL 文件,而在不再需要之后不必保留它们。因此
max_wal_size的默认值被设置为1GB,比过去checkpoint_segments的默认值大得多。另请注意,备库会执行重做点以尝试把 WAL 空间消耗限制在max_wal_size以内;以前它们完全不理会checkpoint_segments。通过新的环境变量
PG_OOM_ADJUST_FILE和PG_OOM_ADJUST_VALUE控制 Linux 的 OOM killer(Gurjeet Singh)以前的 OOM 控制基础设施涉及编译时选项
LINUX_OOM_SCORE_ADJ和LINUX_OOM_ADJ,它们不再受支持。新的行为在所有构建中都可用。当配置参数track_commit_timestamp启用时,允许记录事务提交时间戳(Álvaro Herrera、Petr Jelínek)
时间戳信息可以通过函数
pg_xact_commit_timestamp()和pg_last_committed_xact()访问。允许通过
ALTER ROLE SET设置local_preload_libraries(Peter Eisentraut、Kyotaro Horiguchi)允许自动清理工作进程在运行期间响应配置参数更改(Michael Paquier)
把配置参数debug_assertions设为只读(Andres Freund)
这意味着,如果在编译时启用了断言,就无法再关闭它们,从而允许更高效的代码优化。此变更还移除了 postgres 的
-A选项。允许在不生效的系统上设置effective_io_concurrency(Peter Eisentraut)
添加系统视图
pg_file_settings,用于显示服务器配置文件的内容(Sawada Masahiko)向系统视图
pg_settings添加pending_restart,用于指示已做出更改但在数据库重启之前不会生效(Peter Eisentraut)允许用
ALTER SYSTEM RESET重置ALTER SYSTEM的值(Vik Fearing)此命令会从
postgresql.auto.conf中移除指定的设置。
E.26.3.2. 复制与恢复
创建跟踪复制进度的机制,包括在逻辑复制期间识别单条变更来源的方法(Andres Freund)
这在实现复制解决方案时很有帮助。
重做多事务提交日志的截断逻辑,使其正确记录 WAL(Andres Freund)
这使事情变得明显更简单、更健壮。
添加
recovery.conf参数recovery_target_action来控制恢复之后的动作(Petr Jelínek)它取代了旧的参数
pause_at_recovery_target。为archive_mode添加新值
always,允许备库始终归档收到的 WAL 文件(Fujii Masao)添加配置参数wal_retrieve_retry_interval,控制在失败后重试读取 WAL 的间隔(Alexey Vasiliev、Michael Paquier)
这对温备库特别有用。
允许压缩存储在 WAL 中的全页映像(Rahila Syed、Michael Paquier)
此特性可减少 WAL 量,代价是 WAL 记录和 WAL 重放消耗更多 CPU 时间。它由新的配置参数wal_compression控制,目前默认关闭。
在备库提升期间为 WAL 文件加上
.partial后缀后归档(Heikki Linnakangas)添加配置参数log_replication_commands来记录复制命令(Fujii Masao)
默认情况下,复制命令(例如
IDENTIFY_SYSTEM)不会被记录,即使log_statement被设置为all。在
pg_replication_slots中报告持有复制槽的进程(Craig Ringer)新增的输出列为
active_pid。允许
recovery.conf的primary_conninfo设置使用连接 URI(例如postgres://)(Alexander Shulgin)
E.26.3.3. 查询
允许把会产生约束冲突的
INSERT转换为UPDATE或忽略(Peter Geoghegan、Heikki Linnakangas、Andres Freund)语法为
INSERT ... ON CONFLICT DO NOTHING/UPDATE。这是流行的UPSERT命令的 Postgres 实现。添加
GROUP BY分析特性GROUPING SETS、CUBE和ROLLUP(Andrew Gierth、Atri Sharma)允许在
UPDATE中用单个子 SELECT 的结果设置多个目标列(Tom Lane)这通过语法
UPDATE tab SET (col1, col2, ...) = (SELECT ...)完成。为
SELECT添加选项SKIP LOCKED,用于跳过已锁定的行(Thomas Munro)与
NOWAIT不同,它不会对已锁定的行抛出错误。为
SELECT添加选项TABLESAMPLE,用于返回表的子集(Petr Jelínek)此特性支持 SQL 标准的表采样方法。此外,还为用户自定义表采样方法提供了机制。
为拼错的列名建议可能的匹配(Peter Geoghegan、Robert Haas)
E.26.3.4. 工具命令
E.26.3.4.1. REINDEX
允许
REINDEX使用SCHEMA选项对整个模式重新索引(Sawada Masahiko)为
REINDEX添加VERBOSE选项(Sawada Masahiko)防止
REINDEX DATABASE和SCHEMA输出对象名称,除非使用VERBOSE(Simon Riggs)从
REINDEX中移除过时的FORCE选项(Fujii Masao)
E.26.3.5. 对象操作
添加行级安全性控制(Craig Ringer、KaiGai Kohei、Adam Brightwell、Dean Rasheed、Stephen Frost)
此特性允许逐行控制哪些用户可以添加、修改甚至看到表中的行。它由新命令
CREATE/ALTER/DROP POLICY以及ALTER TABLE ... ENABLE/DISABLE ROW SECURITY控制。允许在创建表之后用
ALTER TABLE ... SET LOGGED / UNLOGGED更改其 WAL 记录状态(Fabrízio de Royes Mello)为
CREATE TABLE AS、CREATE INDEX、CREATE SEQUENCE和CREATE MATERIALIZED VIEW添加IF NOT EXISTS子句(Fabrízio de Royes Mello)为
ALTER TABLE ... RENAME CONSTRAINT添加对IF EXISTS的支持(Bruce Momjian)允许一些 DDL 命令接受
CURRENT_USER或SESSION_USER(即当前用户或会话用户)来代替特定的用户名(Kyotaro Horiguchi、Álvaro Herrera)ALTER USER、ALTER GROUP、ALTER ROLE、GRANT以及
ALTER命令现在支持此特性。objectOWNER TO支持对域约束的注释(Álvaro Herrera)
降低一些创建/更改触发器和外键命令的锁定级别(Simon Riggs、Andreas Karlsson)
允许对目标表具有
INSERT权限的用户执行LOCK TABLE ... ROW EXCLUSIVE MODE(Stephen Frost)以前此命令要求
UPDATE、DELETE或TRUNCATE权限。按名称顺序应用表和域的
CHECK约束(Tom Lane)以前的顺序是不确定的。
允许
CREATE/ALTER DATABASE操纵datistemplate和datallowconn(Vik Fearing)这样无需手动修改
pg_database系统目录即可更改这些按数据库的设置。
E.26.3.5.1. 外部表
添加对IMPORT FOREIGN SCHEMA的支持(Ronan Dunklau、Michael Paquier、Tom Lane)
此命令允许自动创建与远程服务器上现有表结构匹配的本地外部表。
允许在外部表上放置
CHECK约束(Shigeru Hanada、Etsuro Fujita)此类约束被假定在远程服务器上执行,本地并不执行。但在查询优化(例如约束排除)中假定它们成立。
允许外部表参与继承(Shigeru Hanada、Etsuro Fujita)
为使其自然工作,现在允许外部表带有标记为 NOT VALID 的检查约束,并允许设置存储和
OID特性,尽管这些操作对外部表实际上是空操作。允许外部数据包装器和自定义扫描实现连接下推(KaiGai Kohei)
E.26.3.5.2. 事件触发器
只要安装了
ddl_command_end事件触发器,就会捕获 DDL 活动的细节供其检查(Álvaro Herrera)这些信息可以通过集合返回函数
pg_event_trigger_ddl_commands()获取;如果该函数提供的细节不够,也可以通过检查 C 数据结构获取。允许对由
ALTER TABLE引起的表重写设置事件触发器(Dimitri Fontaine)为数据库级的
COMMENT、SECURITY LABEL和GRANT/REVOKE添加事件触发器支持(Álvaro Herrera)向
pg_event_trigger_dropped_objects的输出添加列(Álvaro Herrera)这使删除操作的处理更简单。
E.26.3.6. 数据类型
允许
xml数据类型接受空或全空白的内容值(Peter Eisentraut)这是 SQL/XML 规范的要求。
允许
macaddr使用xxxx-xxxx-xxxx格式输入(Herwin Weststrate)禁止对
interval同时指定精度和字段说明的非 SQL 标准语法(Bruce Momjian)按照标准,此类类型说明应写成例如
INTERVAL MINUTE TO SECOND(2)。PostgreSQL 以前允许写成INTERVAL(2) MINUTE TO SECOND,但现在必须按标准方式书写。为
inet/cidr操作符添加选择率估计器,并改进文本检索函数的估计器(Emre Hasegeli、Tom Lane)添加数据类型
regrole和regnamespace,以简化角色或命名空间OID的输入与美化打印(Kyotaro Horiguchi)
E.26.3.6.1. JSON
添加
jsonb函数jsonb_set()和jsonb_pretty()(Dmitry Dolgov、Andrew Dunstan、Petr Jelínek)添加
jsonb生成函数to_jsonb()、jsonb_object()、jsonb_build_object()、jsonb_build_array()、jsonb_agg()和jsonb_object_agg()(Andrew Dunstan)json类型此前已有等效函数。允许从
jsonb文档中减去text、text数组和integer值(Dmitry Dolgov、Andrew Dunstan)添加
jsonb的||操作符(Dmitry Dolgov、Andrew Dunstan)添加
json_strip_nulls()和jsonb_strip_nulls()函数,用于从文档中移除 JSON 空值(Andrew Dunstan)
E.26.3.7. 函数
为
numeric值添加generate_series()(Plato Malugin)允许
array_agg()和ARRAY()接受数组作为输入(Ali Akbar、Tom Lane)添加函数
array_position()和array_positions(),用于返回数组值的下标(Pavel Stehule)添加
point到polygon的距离操作符 <->(Alexander Korotkov)允许在
SIMILAR TO和SUBSTRING中使用多字节字符作为转义符(Jeff Davis)以前只允许单字节字符作为转义符。
添加
width_bucket()的一个变体,支持任何可排序的数据类型和非均匀的桶宽(Petr Jelínek)为
pg_read_file()及相关函数添加可选的missing_ok参数(Michael Paquier、Heikki Linnakangas)允许在函数调用中用
=>指定命名参数(Pavel Stehule)以前只能使用
:=。这要求移除=>作为用户定义操作符的可能。自 PostgreSQL 9.0 起,创建用户定义的=>操作符就一直发出警告。为使用 PostgreSQL 提供的舍入函数的平台添加符合 POSIX 的舍入(Pedro Gimeno Fortea)
E.26.3.7.1. 系统信息函数和视图
添加函数
pg_get_object_address()(返回唯一标识对象的OID)和函数pg_identify_object_as_address()(基于OID返回对象信息)(Álvaro Herrera)放宽在
pg_stat_activity中查看查询、执行pg_cancel_backend()和执行pg_terminate_backend()的安全检查(Stephen Frost)以前,只有拥有目标会话的那个特定角色才能执行这些操作;现在,是该角色的成员即可。
添加
pg_stat_get_snapshot_timestamp(),用于输出统计快照的时间戳(Matt Kelly)它表示快照文件最后一次写入文件系统的时间。
添加
mxid_age(),用于计算多事务 ID 的年龄(Bruce Momjian)
E.26.3.8. 服务器端语言
E.26.3.9. 客户端应用程序
把pg_archivecleanup、pg_test_fsync、pg_test_timing和pg_xlogdump从
contrib移到src/bin(Peter Eisentraut)这应使这些程序在大多数安装中默认被安装。
添加pg_rewind,它允许在故障回切后重新同步主服务器(Heikki Linnakangas)
允许pg_receivexlog管理物理复制槽(Michael Paquier)
这通过新的
--create-slot和--drop-slot选项控制。允许pg_receivexlog使用新的
--synchronous选项同步刷写 WAL 到存储(Furuya Osamu、Fujii Masao)若不使用该选项,WAL 文件只在关闭时被 fsync。
允许vacuumdb使用新的
--jobs选项并行清理(Dilip Kumar)在vacuumdb中,当需要多个连接时不再重复提示输入同一密码(Haribabu Kommi、Michael Paquier)
为reindexdb添加
--verbose选项(Sawada Masahiko)使pg_basebackup在使用 tar 格式时使用表空间映射文件,以支持 MS Windows 上的符号链接和 100 字符以上的文件路径(Amit Kapila)
为pg_xlogdump添加
--stats选项,用于显示摘要统计(Abhijit Menon-Sen)
E.26.3.9.1. psql
允许 psql 生成 AsciiDoc 输出(Szymon Guz)
为 psql 的
ECHO变量添加errors模式,只显示失败的命令(Pavel Stehule)该行为也可以通过 psql 的
-b选项选择。在 psql 的 unicode 线型中提供对列、表头和边框线型的分别控制(Pavel Stehule)
支持单线或双线;默认为
single。在 psql 的
PROMPT变量中添加新选项%l,用于显示当前多行语句的行号(Sawada Masahiko)添加
\pset选项pager_min_lines,用于控制分页器的调用(Andrew Dunstan)改进 psql 在决定是否调用分页器时使用的行数统计(Andrew Dunstan)
如果
--output或--log-file开关指定的文件无法写入,psql 现在会失败(Tom Lane、Daniel Vérité)以前在这种情况下它实际上会忽略该开关。
为设置search_path变量添加 psql Tab 补全(Jeff Janes)
目前只有第一个模式可以被 Tab 补全。
改进 psql 对触发器和规则的 Tab 补全(Andreas Karlsson)
E.26.3.9.1.1. 反斜线命令
为 psql 的
\?帮助添加variables和options小节(Pavel Stehule)\? variables显示 psql 的特殊变量,\? options显示命令行选项。\? commands显示元命令,这是传统输出,仍为默认。这些帮助显示也可以通过命令行选项--help=获取。section在 psql 的
\db+中显示表空间大小(Fabrízio de Royes Mello)在 psql 的
\dT+中显示数据类型的拥有者(Magnus Hagander)允许 psql 的
\watch输出\timing信息(Fujii Masao)同时防止
--echo-hidden回显\watch查询,因为这通常是不需要的。使 psql 的
\sf和\ef命令遵循ECHO_HIDDEN(Andrew Dunstan)改进 psql 对
\set、\unset和:variable名称的 Tab 补全(Pavel Stehule)允许在 psql 的
\c命令中 Tab 补全角色名(Ian Barwick)
E.26.3.9.2. pg_dump
允许 pg_dump 使用
--snapshot共享另一个会话取得的快照(Simon Riggs、Michael Paquier)远程快照必须是由
pg_export_snapshot()或逻辑复制槽创建所导出的。这可用于在多个 pg_dump 进程之间共享一致的快照。支持 tar 归档格式中超过 8GB 的表(Tom Lane)
POSIX 的 tar 格式标准不允许 tar 归档的元素超过 8GB,但大多数现代 tar 实现支持一个允许超过该限制的扩展。必要时使用扩展格式,而不是失败。
使 pg_dump 始终打印服务器和 pg_dump 的版本(Jing Wang)
以前,版本信息只在
--verbose模式下打印。从 pg_dump、pg_dumpall 和 pg_restore 中移除早已被忽略的
-i/--ignore-version选项(Fujii Masao)
E.26.3.9.3. pg_ctl
支持多个 pg_ctl 的
-o选项,将其值串联(Bruce Momjian)允许在 MS Windows 上控制 pg_ctl 的事件源日志(MauMau)
这只控制 pg_ctl,不控制服务器;服务器在
postgresql.conf中有单独的设置。如果服务器的监听地址设置为通配值(IPv4 的
0.0.0.0或 IPv6 的::),则通过回环地址连接,而不是尝试按字面使用通配地址(Kondo Yuta)此修复主要影响 Windows,因为在其他平台上 pg_ctl 会优先使用 Unix 域套接字。
E.26.3.9.4. pg_upgrade
把 pg_upgrade 从
contrib移到src/bin(Peter Eisentraut)与此变更相关,先前由 pg_upgrade_support 模块提供的功能已被移入核心服务器。
支持多个 pg_upgrade 的
-o/-O选项,将其值串联(Bruce Momjian)改进 pg_upgrade 中的数据库排序规则比较(Heikki Linnakangas)
移除从 8.3 集群升级的支持(Bruce Momjian)
E.26.3.9.5. pgbench
把 pgbench 从
contrib移到src/bin(Peter Eisentraut)修复“excluding connections establishing”(排除连接建立)的 TPS 数值的计算(Tatsuo Ishii、Fabien Coelho)
每当 pgbench 线程数少于客户端连接数时,连接建立的开销就会被算错。虽然这显然是个 bug,但我们不会把它回移植到 9.5 之前的分支,因为这会使 TPS 数值无法与以前的结果比较。
允许统计超过指定时间的 pgbench 事务(Fabien Coelho)
这由新的
--latency-limit选项控制。允许 pgbench 使用
\setrandom生成高斯/指数分布(Kondo Mitsumasa、Fabien Coelho)允许 pgbench 的
\set命令处理包含多个操作符的算术表达式,并向其支持的操作符集合添加%(取模)(Robert Haas、Fabien Coelho)
E.26.3.10. 源代码
简化 WAL 记录格式(Heikki Linnakangas)
这使外部工具更容易跟踪哪些块被修改。
改进事务提交和中止 WAL 记录的表示(Andres Freund)
添加原子内存操作 API(Andres Freund)
允许自定义路径和扫描方法(KaiGai Kohei、Tom Lane)
这允许扩展对优化器和执行器进行更大的控制。
允许外部数据包装器执行过滤后锁定(Etsuro Fujita)
外部表现在可以参与
INSERT ... ON CONFLICT DO NOTHING查询(Peter Geoghegan、Heikki Linnakangas、Andres Freund)必须修改外部数据包装器才能处理这一点。外部表不支持
INSERT ... ON CONFLICT DO UPDATE。改进
hash_create()选择简单二进制键哈希函数的 API(Teodor Sigaev、Tom Lane)改进并行执行基础设施(Robert Haas、Amit Kapila、Noah Misch、Rushabh Lathia、Jeevan Chalke)
移除 Alpha(CPU)和 Tru64(操作系统)移植(Andres Freund)
移除 ARMv5 及更早 CPU 的基于字节交换的自旋锁实现(Robert Haas)
ARMv5 的弱内存排序使这种锁定实现不安全。在支持原子操作的较新 gcc 实现上,自旋锁支持仍然可能。
当过长的(100 字符以上)文件路径被写入 tar 文件时产生错误(Peter Eisentraut)
tar 不支持这种过长的路径。
把列
pg_seclabel.provider和pg_shseclabel.provider的索引操作符类改为text_pattern_ops(Tom Lane)这避免了当集群中不同数据库具有不同默认排序规则时这些索引可能出现的问题。
把自旋锁原语改为兼作编译器屏障(Robert Haas)
E.26.3.10.1. MS Windows
在 Windows 8、Windows Server 2012 及更高版本的 Windows 系统上允许更高精度的时间戳分辨率(Craig Ringer)
在 MS Windows 上把共享库安装到
bin(Peter Eisentraut、Michael Paquier)在 MSVC 构建中把
src/test/modules与contrib一起安装(Michael Paquier)允许 MSVC 构建遵循 configure 的
--with-extra-version选项(Michael Paquier)把
PGFILEDESC传入 MSVC contrib 构建(Michael Paquier)为所有 MSVC 构建的二进制文件添加图标,并为所有 MS Windows 二进制文件添加版本信息(Noah Misch)
MinGW 此前已有此类图标。
为内部的
getopt_long()实现添加可选参数支持(Michael Paquier、Andres Freund)这被 MSVC 构建使用。
E.26.3.11. 附加模块
为pg_stat_statements添加最小、最大、平均和标准差时间统计(Mitsumasa Kondo、Andrew Dunstan)
添加pgcrypto函数
pgp_armor_headers(),用于提取 PGP armor 头(Marko Tiikkaja、Heikki Linnakangas)允许unaccent中使用空的替换字符串(Mohammad Alhashash)
这在变音符号表示为独立字符的语言中很有用。
允许unaccent中使用多字符源字符串(Tom Lane)
这在变音符号表示为独立字符的语言中可能有用。它还允许更复杂的 unaccent 词典。
添加
contrib模块tsm_system_rows和tsm_system_time,以提供更多的表采样方法(Petr Jelínek)为pageinspect添加 GIN 索引检查函数(Heikki Linnakangas、Peter Geoghegan、Michael Paquier)
在pg_buffercache显示中添加有关缓冲区引脚的信息(Andres Freund)
允许pgstattuple使用
pgstattuple_approx()以更低的开销报告近似结果(Abhijit Menon-Sen)把 dummy_seclabel、test_shm_mq、test_parser 和 worker_spi 从
contrib移到src/test/modules(Álvaro Herrera)这些模块仅用于服务器测试,因此在打包 PostgreSQL 时无需构建或安装它们。