E.6. 版本 9.5
发布日期: 2016-01-07
E.6.1. 概述
PostgreSQL 9.5中的主要改进包括:
允许INSERT 将生成约束冲突转换为UPDATE或者忽略
添加GROUP BY分析特征GROUPING SETS、 CUBE和 ROLLUP
添加行级安全控制
创建用于跟踪复制进程的机制, 包括在逻辑复制期间识别各个变化的起源的方法
添加块范围索引 (BRIN)
大幅提高了排序的性能
多CPU机器的主要性能改进
上述项目在下面的部分中更详细地解释。
E.6.2. 迁移到版本 9.5
那些希望从任意以前的版本中迁移数据的用户需要使用 pg_dumpall或使用pg_upgrade 转储/恢复。
版本9.5包含一些可能影响与以前版本兼容性的修改。 注意下列的不兼容:
-
调整操作符优先级 以匹配SQL标准 (Tom Lane)
<=、>=和<> 的优先级已经减少到与<、> 和=匹配。IS测试的优先级(例如, x IS 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主体名称中删除 (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重新协商在理论上是一个好主意, 但它已经导致足够的错误在实践中被认为是一个净负面, 并且它是由于从相关标准的未来版本中删除。因此, 我们已从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.6.3. 变化
下面您将看到PostgreSQL 9.5和以前的主要版本之间的更改的详细信息。
E.6.3.1. 服务器
E.6.3.1.1. 索引
-
新增Block Range Indexes (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 的适当值通常太大,无法实现此目的。
在创建hash索引期间发出警告, 因为它们不是崩溃安全的 (Bruce Momjian)
E.6.3.1.2. 一般性能
通过"abbreviated"关键字提升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.6.3.1.3. 监控
通过新的log_min_autovacuum_duration 存储参数添加每表自动记录日志控制 (Michael Paquier)
-
添加新的配置参数cluster_name (Thomas Munro)
通常在postgresql.conf 中设置的此字符串,允许客户端标识集群。该名称也显示在所有服务器进程的进程标题中, 从而可以更轻松地识别属于同一集群的进程。
阻止非超级用户在连接启动时修改log_disconnections (Fujii Masao)
E.6.3.1.4. SSL
-
检查SSL服务器证书中的"Subject Alternative Names",如果有 (Alexey Klyukin)
当它们存在时,它将替换对证书的"公用名称"的检查。
添加系统视图pg_stat_ssl报告 SSL连接信息 (Magnus Hagander)
-
添加libpq函数以独立于实现的方式返回SSL信息 (Heikki Linnakangas)
虽然
PQgetssl()
仍可用于调用OpenSSL函数,但现在被视为已弃用, 因为libpq的未来版本可能支持其他SSL实现。 如有可能,请使用新函数PQsslAttribute()
、PQsslAttributeNames()
和PQsslInUse()
以SSL实现无关的方式获得SSL信息。 -
使libpq遵循任何OpenSSL 线程回调 (Jan Urbanski)
以前,他们是被重写的。
E.6.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)
允许autovacuum workers 在运行期间响应配置参数修改 (Michael Paquier)
-
使配置参数debug_assertions只读 (Andres Freund)
这意味着,如果在编译时启用断言,则不能再关闭断言,从而实现更高效的代码优化。 此更改也会删除postgres -A选项。
允许在没有任何影响的系统上设置 effective_io_concurrency (Peter Eisentraut)
允许系统视图pg_file_settings 显示服务器配置文件的内容 (Sawada Masahiko)
添加pending_restart到系统视图pg_settings, 表示已进行更改,但在数据库重新启动后才会生效 (Peter Eisentraut)
-
允许ALTER SYSTEM 值使用ALTER SYSTEM RESET重新设置 (Vik Fearing)
这个命令从postgresql.auto.conf中删除了指定设置。
E.6.3.2. 复制和恢复
-
创建追踪复制进程的机制, 包括用于在逻辑复制期间识别个体变化的起源的方法 (Andres Freund)
这在实施复制解决方案时很有用。
-
重做截断multixact提交日志以正确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控制, 该参数目前默认情况下是关闭的。
在备用服务器提升期间用后缀.partial归档 WAL文件 (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.6.3.3. 查询
-
允许会产生约束冲突的INSERTs 被转换为UPDATEs或者忽略 (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 中设置多个来自单个子选择结果的目标列 (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.6.3.4. 实用命令
-
在EXPLAIN 输出中添加更多关于排序顺序的详细信息 (Marius Timmer, Lukas Kreft, Arne Scheffer)
详细信息包括COLLATE、DESC、 USING和NULLS FIRST/LAST。
让VACUUM 记录由于引脚跳过的页面数 (Jim Nasby)
让TRUNCATE正确的更新 pg_stat* 元组计数器 (Alexander Shulgin)
E.6.3.4.1. REINDEX
允许REINDEX使用SCHEMA 选项重新索引一个完整模式 (Sawada Masahiko)
添加VERBOSE选项到REINDEX (Sawada Masahiko)
阻止REINDEX DATABASE和SCHEMA 输出对象名,除非使用了VERBOSE (Simon Riggs)
从REINDEX中删除废弃的FORCE选项 (Fujii Masao)
E.6.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)
添加IF NOT EXISTS子句到CREATE TABLE AS、 CREATE INDEX、 CREATE SEQUENCE 和CREATE MATERIALIZED VIEW (Fabrízio de Royes Mello)
添加对IF EXISTS的支持到ALTER TABLE ... RENAME CONSTRAINT (Bruce Momjian)
-
允许一些DDL命令接受CURRENT_USER或SESSION_USER, 意为当前用户或会话用户,替换指定的用户名 (Kyotaro Horiguchi, Álvaro Herrera)
这个特性现在在 ALTER USER、ALTER GROUP、 ALTER ROLE、xref linkend="SQL-GRANT"> 和ALTER object OWNER 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.6.3.5.1. 外部表
-
添加对IMPORT FOREIGN SCHEMA的支持 (Ronan Dunklau, Michael Paquier, Tom Lane)
此命令允许自动创建与远程服务器上现有表的结构匹配的本地外部表。
-
允许将CHECK约束放在外部表上 (Shigeru Hanada, Etsuro Fujita)
假定这样的约束在远程服务器上实施,并且不在本地实施。 然而,假定它们用于查询优化的目的, 比如约束排除。
-
允许外表参与继承 (Shigeru Hanada, Etsuro Fujita)
为了自然地工作,外部表现在允许具有被标记为无效的检查约束, 并且设置存储和OID特性,即使这些操作实际上是对外表的无操作。
允许外部数据包装器和自定义扫描实施连接下推 (KaiGai Kohei)
E.6.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.6.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.6.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的等效函数早已存在。
减少json和jsonb的转换需求 (Tom Lane)
允许text、text数组和integer 值从jsonb文档中减去 (Dmitry Dolgov, Andrew Dunstan)
添加jsonb ||操作符 (Dmitry Dolgov, Andrew Dunstan)
添加
json_strip_nulls()
和jsonb_strip_nulls()
函数从文档中删除JSON空值 (Andrew Dunstan)
E.6.3.7. 函数
为numeric值添加
generate_series()
(Plato Malugin)允许
array_agg()
和ARRAY()
将数组作为输入 (Ali Akbar, Tom Lane)添加函数
array_position()
和array_positions()
返回数组值的下标 (Pavel Stehule)添加point-to-polygon距离操作符 <-> (Alexander Korotkov)
-
允许多字节字符在SIMILAR TO 和SUBSTRING 中作为转义 (Jeff Davis)
以前,只允许使用单字节字符作为转义。
添加
width_bucket()
变体,支持任何可排序的数据类型和非均匀的桶宽度 (Petr Jelínek)添加可选的missing_ok参数到
pg_read_file()
和相关的函数 (Michael Paquier, Heikki Linnakangas)-
允许=> 在函数调用中指定命名的参数 (Pavel Stehule)
以前只能使用:=。这需要消除=> 为用户定义的运算符的可能性。自PostgreSQL 9.0起, 用户定义的=>运算符已发出警告。
对使用PostgreSQL提供的舍入函数的平台, 添加POSIX兼容的舍入 (Pedro Gimeno Fortea)
E.6.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()
计算多xid的age (Bruce Momjian)
E.6.3.7.2. 聚合
为inet/cidr数据类型添加
min()
/max()
聚合 (Haribabu Kommi)支持时,使用128位整数作为一些聚合函数的累加器 (Andreas Karlsson)
E.6.3.8. 服务器端语言
-
改进PL/Python 中对复合类型的支持 (Ed Behn, Ronan Dunklau)
这允许PL/Python函数返回复合类型的数组。
减少PL/Python 浮点数值转换的丢失 (Marko Kreen)
-
允许在SQL数据类型和过程语言的数据类型之间指定转换例程 (Peter Eisentraut)
这个修改添加了新的命令CREATE/DROP TRANSFORM。 这也增加了hstore、ltree类型和PL/Perl、PL/Python 之间的可选转换。
E.6.3.8.1. PL/pgSQL 服务器端语言
改进PL/pgSQL数组性能 (Tom Lane)
在PL/pgSQL中添加一个 ASSERT 声明 (Pavel Stehule)
允许更多PL/pgSQL 关键字用作标识符 (Tom Lane)
E.6.3.9. 客户端应用
-
从contrib中移动pg_archivecleanup、 pg_test_fsync、 pg_test_timing 和pg_xlogdump 到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文件仅在关闭时同步。
允许vacuumdb 使用新的--jobs选项并行清理 (Dilip Kumar)
在vacuumdb中, 当需要多个连接时,不要重复提示输入相同的密码 (Haribabu Kommi, Michael Paquier)
添加--verbose选项到reindexdb (Sawada Masahiko)
在使用tar格式时,让 pg_basebackup 使用一个表空间映射文件,以在MS Windows 上支持长度100+字符的符号连接和文件路径 (Amit Kapila)
添加pg_xlogdump选项 --stats,显示总结状态信息 (Abhijit Menon-Sen)
E.6.3.9.1. psql
允许psql产生AsciiDoc输出 (Szymon Guz)
-
添加一个errors模式,仅向psql 的ECHO变量显示失败的命令 (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.6.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.6.3.9.2. pg_dump
-
允许pg_dump使用--snapshot 共享由另一个会话拍摄的快照 (Simon Riggs, Michael Paquier)
远程快照必须已通过
pg_export_snapshot()
或逻辑复制插槽创建导出。这可以用于跨多个pg_dump进程共享一致的快照。 -
支持tar归档格式的表大小超过8GB (Tom Lane)
用于tar格式的POSIX标准不允许tar存档的元素超过8GB, 但是tar的大多数现代实现都支持允许它的扩展。 必要时使用扩展格式,而不是失败。
-
让pg_dump总是打印服务器和 pg_dump版本 (Jing Wang)
以前,版本信息仅在--verbose模式下打印。
从pg_dump、pg_dumpall 和pg_restore删除长期忽视的-i/--ignore-version 选项 (Fujii Masao)
E.6.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.6.3.9.4. pg_upgrade
-
从contrib中移动pg_upgrade到 src/bin (Peter Eisentraut)
与此修改相关,pg_upgrade_support 模块以前提供的功能已经移动到了核心服务器中。
支持多个pg_upgrade -o/-O选项, 串联他们的值 (Bruce Momjian)
改善pg_upgrade中数据库排序规则的比较 (Heikki Linnakangas)
删除从8.3群集升级的支持 (Bruce Momjian)
E.6.3.9.5. pgbench
从contrib中移动pgbench到src/bin (Peter Eisentraut)
-
修复TPS数量"排除连接建立"的计算 (Tatsuo Ishii, Fabien Coelho)
每当pgbench线程的数量小于客户端连接的数量时,连接建立的开销就被错误计算。 虽然这显然是一个错误,但我们不会将它修补到9.5之前的分支, 因为它使TPS数字与以前的结果不可比。
-
允许计数接管指定时间量的pgbench事务 (Fabien Coelho)
这是通过新的--latency-limit选项控制的。
允许pgbench使用\setranDOM生成高斯/指数发布 (Kondo Mitsumasa, Fabien Coelho)
允许pgbench的\set 命令处理包含多个运算符的算术表达式,并且添加% (modulo) 到它支持的运算符集 (Robert Haas, Fabien Coelho)
E.6.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 (OS) 接口 (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.6.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贡献构建中 (Michael Paquier)
-
添加图标到所有MSVC构造的二进制文件,添加版本信息到所有 MS Windows二进制文件 (Noah Misch)
MinGW已经有这样的图标。
-
向内部
getopt_long()
实现添加可选的参数支持 (Michael Paquier, Andres Freund)这是MSVC构建所使用的。
E.6.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)
这在将附加符号表示为单独字符的语言中很有用。它还允许更复杂的无关字典。
添加contrib模块tsm_system_rows和 tsm_system_time, 以允许额外的表采样方法 (Petr Jelínek)
添加GIN 索引观察函数到pageinspect (Heikki Linnakangas, Peter Geoghegan, Michael Paquier)
将有关缓冲区引脚的信息添加到pg_buffercache显示 (Andres Freund)
允许pgstattuple 使用
pgstattuple_approx()
以较少的开销报告近似答案 (Abhijit Menon-Sen)-
从contrib中移动dummy_seclabel、 test_shm_mq、test_parser和 worker_spi到src/test/modules (Álvaro Herrera)
这些模块仅用于服务器测试,因此在包装PostgreSQL时, 不需要构建或安装这些模块。