pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
发布日期:. 2014-12-18
PostgreSQL 9.4 的主要增强包括:
新增 jsonb,一种存储 JSON 数据的功能更强、效率更高的数据类型
新增 SQL 命令 ALTER SYSTEM,用于更改 postgresql.conf 配置文件条目
降低某些 ALTER TABLE 命令的锁强度
允许刷新 物化视图而不阻塞并发读取
新增对 WAL 数据逻辑解码的支持,允许以可自定义的格式流出数据库变更
允许动态注册、启动和终止后台工作进程
上述各项在下面的章节中有更详细的说明。
希望从任何之前的版本迁移数据的用户,需要使用 pg_dumpall进行转储/恢复,或使用pg_upgrade。
版本 9.4 包含许多可能影响与以前版本兼容性的变更。请注意以下不兼容之处:
收紧对多维数组输入的检查(Bruce Momjian)
此前,以单元素子数组开头的输入数组字符串后面可以包含多元素子数组,例如'{{1}, {2,3}}'::int[]会被接受。
在将date、timestamp或timestamptz类型的值转换为JSON时,按符合 ISO 8601 的格式呈现这些值(Andrew Dunstan)
此前这些值按当前DateStyle设置呈现;但许多 JSON 处理器要求时间戳为 ISO 8601 格式。如有需要,可以在把日期时间值传给 JSON 转换函数之前显式转换为text来获得以前的行为。
json#>text[]路径提取操作符现在在数组为空时返回其左操作数输入而非 NULL(Tom Lane)
这与该操作表示对简单字段/元素提取操作符->应用零次的概念一致。类似地,带空数组的json#>>text[]只是把其左操作数输入强制转换为文本。
JSON字段/元素/路径提取操作符的极端情况现在返回 NULL 而不是抛出错误(Tom Lane)
例如,对 JSON 数组应用字段提取现在得到 NULL 而不是错误。这更一致(因为诸如字段不存在等可比情况此前就已返回 NULL),而且使创建使用这些操作符的表达式索引变得安全,因为它们现在不会对任何有效的 JSON 输入抛出错误。
使to_timestamp()和to_date()格式串中连续的空白字符消费输入串中相应数量的字符(无论是否空白),然后在非FX模式下视情况消费相邻空白(Jeevan Chalke)
此前,非FX格式串中的连续空白字符表现得像单个空白字符,并消费输入串中所有相邻空白。例如,此前三个空格的格式串在' 12'中只会消费第一个空格,但现在会消费全部三个字符。
修复ts_rank_cd()使其忽略已去除位置信息的词位(Alex Hill)
此前,已去除位置信息的词位被当作具有默认位置处理,产生用处可疑的排名。
对于声明为接受VARIADIC "any"的函数,标记为VARIADIC的实际参数必须是可确定数组类型(Pavel Stehule)
此类参数不能再写成不带修饰的字符串字面量或NULL;现在需要转换为适当的数组数据类型。注意这不影响未标记VARIADIC的参数。
确保整行变量向关注组合参数内列名的函数暴露预期的列名(Tom Lane)
现在,像row_to_json(tab.*)这样的结构总是输出与调用处表tab可见的列别名匹配的列名。在以前的发行版中,输出的列名有时是表的实际列名,而不管查询中指派了什么别名。
DISCARD现在还会丢弃与序列相关的状态(Fabrízio de Royes Mello、Robert Haas)
将EXPLAIN ANALYZE输出中的“total runtime”更名为“execution time”(Tom Lane)
既然规划时间也一并报告,以前的名称容易引起混淆。
SHOW TIME ZONE现在以POSIX时区格式输出简单的数字 UTC 偏移(Tom Lane)
此前,此类时区设置显示为interval值。作为简单字符串传递时,新的输出能被SET TIME ZONE正确解释,而旧输出需要特殊处理才能被正确重新解析。
支持更新外部表的外部数据包装器必须考虑可能存在的AFTER ROW触发器(Noah Misch)
当存在AFTER ROW触发器时,更新操作必须返回表的所有列,因为触发器可能检查其中任意或全部列。此前外部表从不带触发器,因此 FDW 可能优化掉对RETURNING子句(若有)中未提及列的获取。
阻止CHECK约束引用系统列,tableoid除外(Amit Kapila)
此前此类检查约束是被允许的,但它们常常在还原期间导致错误。
在指定了多个目标参数时,使用最后指定的恢复目标参数(Heikki Linnakangas)
此前,recovery_target_参数之间存在未写入文档的优先顺序。xxx
在 Windows 上自动保留用户提供的命令串中的引号(Heikki Linnakangas)
自行处理引号保留的用户命令可能需要调整。archive_command、restore_command以及COPY TO/FROM PROGRAM中使用的命令很可能受此影响。
移除目录列pg_class.reltoastidxid(Michael Paquier)
移除目录列pg_rewrite.ev_attr(Kevin Grittner)
逐列规则自PostgreSQL 7.3 起就不再支持。
移除对Kerberos认证的原生支持(--with-krb5等)(Magnus Hagander)
使用Kerberos认证的受支持方式是通过GSSAPI。原生代码自PostgreSQL 8.3 起已被弃用。
在PL/Python中,像处理底层数组类型一样处理域于数组的类型(Rodolfo Campero)
此前此类值被当作字符串处理。
使 libpq 的PQconnectdbParams()和PQpingParams()函数把零长度字符串按默认值处理(Adrian Vondendriesch)
此前,这些函数只在某些情况下把零长度字符串值视为选择默认值。
将intarray模块返回的空数组改为零维数组(Bruce Momjian)
此前,空数组作为零长度一维数组返回,其文本表示与零维数组({})看起来相同,但在数组操作中的行为不同。intarray在此领域的行为现在与内置数组操作符一致。
pg_upgrade现在使用-U或--username指定用户名(Bruce Momjian)
此前该选项拼作-u或--user,但这与其他工具不一致。
下面是PostgreSQL 9.4 与上一个主版本之间变更的详细说明。
允许动态注册、启动和终止后台工作进程(Robert Haas)
新的worker_spi模块展示了此功能的使用示例。
允许动态分配共享内存段(Robert Haas、Amit Kapila)
此功能在test_shm_mq模块中有演示。
在崩溃恢复或立即关闭期间,向未及时关闭的子进程发送不可捕获的终止信号(SIGKILL)(MauMau, Álvaro Herrera)
这减少了postmaster关闭后遗留孤儿子进程的可能性,同时确保在某些子进程已经“卡住”时崩溃恢复仍能继续。
改进数据库系统标识符的随机性(Tom Lane)
使VACUUM向统计信息收集器正确报告已死但尚不能移除的行(Hari Babu)
此前这些行被报告为活行。
减小GIN索引的大小(Alexander Korotkov、Heikki Linnakangas)
通过pg_upgrade升级的索引仍能正常工作,但仍是旧的、较大的GIN格式。使用REINDEX可以按新格式重建旧的 GIN 索引。
提高多键 GIN 查找的速度(Alexander Korotkov、Heikki Linnakangas)
为inet和cidr数据类型新增GiST索引支持(Emre Hasegeli)
此类索引可改进子网和超网查找以及排序比较。
修复 B-tree 页删除中罕见的竞态条件(Heikki Linnakangas)
使被中断的 B-tree 页分裂的处理更加健壮(Heikki Linnakangas)
允许多个后端并发插入WAL缓冲区(Heikki Linnakangas)
这改进了并行写入性能。
有条件地只把已更新行的修改部分写入 WAL(Amit Kapila)
改进用作窗口函数的聚集函数的性能(David Rowley、Florian Pflug、Tom Lane)
提高使用 numeric 状态值的聚集的速度(Hadi Moshayedi)
当表被 CLUSTER 或 VACUUM FULL 重写时,尝试冻结元组(Robert Haas、Andres Freund)
这可以避免将来再冻结这些元组的需要。
提高在同一会话中访问许多不同序列的速度(David Rowley)
提高排序和 B-tree 索引构建期间内存中持有元组数量的硬限制(Noah Misch)
减少 PL/pgSQL DO 块分配的内存(Tom Lane)
使规划器更激进地从混合的 AND/OR 子句中提取限制子句(Tom Lane)
禁止把易变 WHERE 子句下推到 DISTINCT 子查询中(Tom Lane)
下推 WHERE 子句整体上可能产生更高效的计划,但代价是该子句的求值次数会多于查询文本所暗示的次数;因此若子句包含任何易变函数则不这样做。
自动调整系统目录缓存的大小(Heikki Linnakangas)
这减少了只访问少量表的会话的内存消耗,并改进了访问大量表的会话的性能。
新增 pg_stat_archiver 系统视图以报告 WAL 归档器的活动(Gabriele Bartolini)
为 pg_stat_all_tables 及相关系统视图新增 n_mod_since_analyze 列(Mark Kirkwood)
这些列显示了系统对表上次 ANALYZE 以来已更改元组数量的估计。该估计驱动何时自动分析的决策。
为系统视图 pg_stat_activity 新增 backend_xid 和 backend_xmin 列,并为 pg_stat_replication 新增 backend_xmin 列(Christian Kruse)
新增对 SSL ECDH 密钥交换的支持(Marko Kreen)
这允许使用椭圆曲线密钥进行服务器认证。此类密钥比 RSA 密钥更快且安全性更好。新增配置参数 ssl_ecdh_curve 控制用于 ECDH 的曲线。
改进 ssl_ciphers 的默认设置(Marko Kreen)
默认情况下,现在由服务器而非客户端控制 SSL 密码的偏好顺序(Marko Kreen)
此前,ssl_ciphers 指定的顺序通常被忽略,转而采用客户端默认值,而大多数 PostgreSQL 客户端的默认值不可配置。如有需要,可以通过新的配置参数 ssl_prefer_server_ciphers 恢复以前的行为。
使 log_connections 显示 SSL 加密信息(Andreas Kunert)
改进 SSL 重新协商的处理(Álvaro Herrera)
新增 SQL 命令 ALTER SYSTEM,用于更改 postgresql.conf 配置文件条目(Amit Kapila)
此前此类设置只能通过手工编辑 postgresql.conf 来更改。
新增 autovacuum_work_mem 配置参数,以控制自动清理工作进程使用的内存量(Peter Geoghegan)
新增 huge_pages 参数,允许在 Linux 上使用大内存页(Christian Kruse、Richard Poole、Abhijit Menon-Sen)
这可以改进大内存系统上的性能。
新增 max_worker_processes 参数,以限制后台工作进程的数量(Robert Haas)
这有助于把备库服务器配置为拥有所需数量的工作进程(与主库相同)。
新增仅限超级用户的 session_preload_libraries 参数,用于在会话启动时加载库(Peter Eisentraut)
与 local_preload_libraries 不同,此参数可以加载任何共享库,而不仅仅是 $libdir/plugins 目录中的库。
新增 wal_log_hints 参数,用于启用提示位(hint-bit)变更的 WAL 日志(Sawada Masahiko)
提示位变更通常不记录日志,启用了校验和时除外。这对 pg_rewind 等外部工具很有用。
将 work_mem 和 maintenance_work_mem 的默认设置提高到原来的四倍(Bruce Momjian)
新的默认值分别为 4MB 和 64MB。
将 effective_cache_size 的默认设置提高到 4GB(Bruce Momjian、Tom Lane)
允许在 log_line_prefix 中指定 printf 风格的空格填充(David Rowley)
允许在指定配置变量值时使用太字节单位(TB)(Simon Riggs)
在 log_lock_waits 日志消息中显示锁持有者和等待者的 PID,并改进关系相关信息(Christian Kruse)
降低加载共享库时的服务器日志级别(Peter Geoghegan)
以前的级别是 LOG,对于按会话加载的库来说过于冗长。
在 Windows 上,使 SQL_ASCII 编码的数据库和服务器进程(例如 postmaster)以服务器 Windows 用户区域设置的字符编码发出消息(Alexander Law、Noah Misch)
此前这些消息以 Windows ANSI 代码页输出。
新增复制槽,以协调流复制备库与其流来源节点的活动(Andres Freund、Robert Haas)
复制槽允许在主库上保留 WAL 文件等资源,直到备库服务器不再需要它们。
新增恢复参数 recovery_min_apply_delay 以延迟复制(Robert Haas, Fabrízio de Royes Mello、Simon Riggs)
延迟备库服务器上的重放对于从用户错误中恢复可能很有用。
新增 recovery_target 选项 immediate,在达到一致状态后立即停止 WAL 恢复(MauMau、Heikki Linnakangas)
改进恢复目标的处理(Heikki Linnakangas)
pg_last_xact_replay_timestamp() 报告的时间戳现在反映已提交的记录,而不是将要提交的事务。恢复到还原点现在会重放到还原点本身,而不是在还原点之前停止。
pg_switch_xlog() 现在会清除旧 WAL 文件中所有未使用的尾部空间(Heikki Linnakangas)
这提高了 WAL 文件的压缩率。
报告外部恢复命令的失败返回码(Peter Eisentraut)
减少 WAL 重放期间的自旋锁争用(Heikki Linnakangas)
更频繁地写入运行中事务的 WAL 记录(Andres Freund)
这使备库服务器能够更快启动并更积极地清理资源。
逻辑解码允许以可配置的格式流出数据库变更。数据从 WAL 中读取并转换为期望的目标格式。为实现此功能,进行了以下变更:
新增对 WAL 数据逻辑解码的支持,允许以可自定义的格式流出数据库变更(Andres Freund)
新增 wal_level 设置 logical,用于在 WAL 中启用逻辑变更集编码(Andres Freund)
新增表级参数REPLICA IDENTITY,用于控制逻辑复制(Andres Freund)
新增关系选项user_catalog_table,用于标识参与逻辑变更集编码的用户创建表(Andres Freund)
新增 pg_recvlogical 应用程序,用于接收逻辑解码数据(Andres Freund)
新增 test_decoding 模块,用于在 SQL 层面演示逻辑解码(Andres Freund)
新增 WITH ORDINALITY 语法,为 FROM 子句中集合返回函数返回的行编号(Andrew Gierth、David Fetter)
这对 unnest() 之类的函数特别有用。
新增 ROWS FROM() 语法,允许在 FROM 子句中对集合返回函数进行水平串联(Andrew Gierth)
允许 SELECT 拥有空目标列表(Tom Lane)
增加此功能是为了使从零列表中选择的视图能够被正确转储和还原。
确保 SELECT ... FOR UPDATE NOWAIT 在涉及已被并发更新元组的极端情况下不会等待(Craig Ringer and Thomas Munro)
新增 DISCARD SEQUENCES 命令,用于丢弃缓存的序列相关状态(Fabrízio de Royes Mello、Robert Haas)
DISCARD ALL 现在也会丢弃此类信息。
为 COPY FROM 新增 FORCE NULL 选项,在 CSV 模式下使与指定空串匹配的带引号字符串转换为 NULL(Ian Barwick、Michael Paquier)
若不使用此选项,则只有不带引号的匹配字符串才会被导入为空值。
对在事务块之外使用且不可能生效的命令发出警告(Bruce Momjian)
当 SET LOCAL、SET CONSTRAINTS、SET TRANSACTION 和 ABORT 在事务块之外使用时会发出新的警告。
使 EXPLAIN ANALYZE 显示规划时间(Andreas Karlsson)
使 EXPLAIN 显示 Agg 和 Group 节点中的分组列(Tom Lane)
使 EXPLAIN ANALYZE 显示位图堆扫描中的精确和有损块计数(Etsuro Fujita)
允许刷新物化视图而不阻塞其他会话在此期间读取该视图(Kevin Grittner)
允许视图被自动更新,即使它们包含一些不可更新的列(Dean Rasheed)
此前,存在表达式、字面量和函数调用等不可更新输出列会阻止自动更新。现在支持 INSERT、UPDATE 和 DELETE,只要它们不试图为任何不可更新列赋新值。
允许控制 INSERT 和 UPDATE 能否向自动可更新视图中添加不会出现在该视图中的行(Dean Rasheed)
这通过新的 CREATE VIEW 子句 WITH CHECK OPTION 控制。
允许安全屏障视图被自动更新(Dean Rasheed)
支持在外部表上使用触发器(Ronan Dunklau)
允许使用 ALTER TABLE、ALTER INDEX 或 ALTER MATERIALIZED VIEW 的 ALL IN TABLESPACE ... SET TABLESPACE 形式把成组对象从一个表空间移动到另一个表空间(Stephen Frost)
允许通过 ALTER TABLE ... ALTER CONSTRAINT 更改外键约束的可延迟性(Simon Riggs)
降低某些 ALTER TABLE 命令的锁强度(Simon Riggs、Noah Misch、Robert Haas)
具体而言,VALIDATE CONSTRAINT、CLUSTER ON、SET WITHOUT CLUSTER、ALTER COLUMN SET STATISTICS、ALTER COLUMN SET (attribute_option)、ALTER COLUMN RESET (attribute_option) 不再需要 ACCESS EXCLUSIVE 锁。
允许在 CREATE TABLESPACE 中设置表空间选项(Vik Fearing)
以前这些选项只能通过 ALTER TABLESPACE 设置。
允许 CREATE AGGREGATE 定义聚集转换状态数据的估计大小(Hadi Moshayedi)
恰当使用此功能可使规划器更好地估计聚集将使用多少内存。
修复 DROP IF EXISTS,使其在更多情况下避免对不存在对象报错(Pavel Stehule、Dean Rasheed)
改进系统关系的标识方式(Andres Freund、Robert Haas)
此前,一旦关系被移入 pg_catalog 模式,就不能再修改或删除。
完整实现 line 数据类型(Peter Eisentraut)
线段数据类型(lseg)一直得到完整支持。以前的 line 数据类型(只能通过编译时选项启用)与新实现在二进制和转储格式上不兼容。
新增 pg_lsn 数据类型,用于表示 WAL 日志序列号(LSN)(Robert Haas、Michael Paquier)
支持随时间改变 UTC 偏移的时区缩写(Tom Lane)
此前,PostgreSQL 假定时区缩写(如 EST)关联的 UTC 偏移在任何特定区域设置的用法中永不改变。然而这一假设在现实世界中并不成立,因此引入了让区域缩写表示有时会变化的 UTC 偏移的能力。更新了时区缩写定义文件,在自 1970 年以来缩写的 UTC 偏移发生过变化的时区区域设置中使用此功能(依据 IANA 时区数据库)。在此类时区中,PostgreSQL 现在会根据给定日期为缩写关联正确的 UTC 偏移。
在适当情况下,允许非 ISO 的 timestamp 和 date 字符串使用五位及以上年份(Bruce Momjian)
新增对 interval 值上溢/下溢的检查(Bruce Momjian)
新增 jsonb,一种存储 JSON 数据的功能更强、效率更高的数据类型(Oleg Bartunov、Teodor Sigaev、Alexander Korotkov、Peter Geoghegan、Andrew Dunstan)
这种新类型允许更快地访问 JSON 文档中的值,以及对 JSON 列更快、更有用的索引。jsonb 文档中的标量值以适当的标量 SQL 类型存储,JSON 文档结构经过预解析,而不是像原来的 json 数据类型那样以文本形式存储。
新增 JSON 函数以允许构造任意复杂的 JSON 树(Andrew Dunstan、Laurence Rowe)
新函数包括 json_array_elements_text()、json_build_array()、json_object()、json_object_agg()、json_to_record() 和 json_to_recordset()。
新增 json_typeof(),返回 json 值的数据类型(Andrew Tipton)
新增 pg_sleep_for(interval) 和 pg_sleep_until(timestamp),以更灵活地指定延迟(Vik Fearing、Julien Rouhaud)
现有的 pg_sleep() 函数只支持以秒为单位指定延迟。
新增面向数组的 cardinality() 函数(Marko Tiikkaja)
它返回数组中元素的总数,对于没有元素的数组则返回零。
新增 SQL 函数,允许在任意偏移处进行大对象读写(Pavel Stehule)
允许 unnest() 接受多个参数,各参数分别展开后再水平串联(Andrew Gierth)
新增从各个单独的值(而非字符串)构造 time、date、timestamp、timestamptz 和 interval 的函数(Pavel Stehule)
这些函数的名称以 make_ 为前缀,例如 make_date()。
使 to_char() 的 TZ 格式说明符对简单的数字时区偏移返回有用的值(Tom Lane)
此前,如果 timezone 被设置为类似 -4 的常量,to_char(CURRENT_TIMESTAMP, 'TZ') 会返回空字符串。
为 to_char() 新增时区偏移格式说明符 OF(Bruce Momjian)
改进 random() 所用的随机种子(Honza Horak)
收紧 chr(int) 中对 Unicode 码点的有效性检查(Tom Lane)
此函数现在只接受按照 RFC 3629 是有效 UTF8 字符的值。
新增在 pg_class、pg_proc、pg_type 和 pg_operator 中查找对象的函数,它们不会对不存在的对象产生错误(Yugo Nagata、Nozomi Anzai、Robert Haas)
例如,to_regclass() 类似于 regclass 输入函数在 pg_class 中进行查找,但对不存在的对象返回 NULL 而不是失败。
新增函数 pg_filenode_relation(),允许更高效地从文件节点查找关系名(Andres Freund)
为 information_schema.parameters 视图新增 parameter_default 列(Peter Eisentraut)
使 information_schema.schemata 显示所有可访问的模式(Peter Eisentraut)
此前它只显示当前用户拥有的模式。
通过 FILTER 子句控制哪些行被传递给聚集函数(David Fetter)
支持有序集(WITHIN GROUP)聚集(Atri Sharma、Andrew Gierth、Tom Lane)
新增标准有序集聚集 percentile_cont()、percentile_disc()、mode()、rank()、dense_rank()、percent_rank() 和 cume_dist()(Atri Sharma、Andrew Gierth)
支持 VARIADIC 聚集函数(Tom Lane)
允许多态聚集具有非多态的状态数据类型(Tom Lane)
这使得可以在 SQL 中正确声明诸如内置聚集 array_agg() 之类的聚集。
新增使用 GET DIAGNOSTICS 获取当前 PL/pgSQL 调用栈的能力(Pavel Stehule、Stephen Frost)
新增选项 print_strict_params,用于显示传递给违反 STRICT 约束的查询的参数(Marko Tiikkaja)
新增变量 plpgsql.extra_warnings 和 plpgsql.extra_errors,用于启用额外的 PL/pgSQL 警告和错误(Marko Tiikkaja、Petr Jelinek)
目前只有关于被遮蔽变量的警告/错误可用。
使 libpq 的 PQconndefaults() 函数忽略无效的服务文件(Steve Singer、Bruce Momjian)
此前它遇到不正确的服务文件时会返回 NULL。
libpq 接受 TLSv1 之外的 TLS 协议版本(Marko Kreen)
为 createuser 新增选项 -g,用于指定角色成员关系(Christopher Browne)
为 vacuumdb 新增选项 --analyze-in-stages,按粒度递增的分阶段方式进行分析(Peter Eisentraut)
这允许快速创建最基本的统计信息。
使带选项 -n 的 pg_resetxlog 输出当前值和可能被更改的值(Rajeev Rastogi)
使 initdb 对不正确的区域设置抛出错误,而不是静默回退到默认选择(Tom Lane)
使 pg_ctl 在数据目录不可访问时返回退出码 4(Amit Kapila、Bruce Momjian)
这一行为更符合 Linux 标准库(LSB)核心规范。
在 Windows 上,确保非绝对路径的 -D 规范相对于 pg_ctl 的当前目录解释(Kumar Rajeev Rastogi)
此前它会相对于底层 Windows 服务启动时所在的目录解释。
允许在 ECPG 的 C 数组定义中使用 sizeof()(Michael Meskes)
使 ECPG 正确处理 C 文本和 SQL 文本中 C 风格注释的嵌套(Michael Meskes)
在禁用页脚时,抑制 psql expanded 模式下的 “No rows” 输出(Bruce Momjian)
允许用 Control-C 中止在连接启动时挂起的 psql(Peter Eisentraut)
使 psql 的 \db+ 显示表空间选项(Magnus Hagander)
使 \do+ 显示实现操作符的函数(Marko Tiikkaja)
使 \d+ 只在表中存在 oid 列时才输出 OID 行(Bruce Momjian)
此前,oid 列的存在与否总是会被报告。
使 \d 显示被禁用的系统触发器(Bruce Momjian)
此前,如果禁用所有触发器,只有用户触发器会显示为已禁用。
修复 \copy,不再要求 stdin 与分号之间有空格(Etsuro Fujita)
在 \copy 结束时输出行数,就像 COPY 已经做的那样(Kumar Rajeev Rastogi)
修复 \conninfo,使其对使用 hostaddr 的连接显示服务器的 IP 地址(Fujii Masao)
此前在这些情况下 \conninfo 无法显示服务器的 IP 地址。
在 \conninfo 中显示 SSL 协议版本(Marko Kreen)
为 \pset 新增 Tab 补全(Pavel Stehule)
允许不带参数的 \pset 显示所有设置(Gilles Darold)
使 \s 显示其写入的历史文件名时不转换为绝对路径(Tom Lane)
以前的代码试图把相对文件名转换为绝对路径用于显示,但经常出错。
允许 pg_restore 的选项 -I、-P、-T 和 -n 被多次指定(Heikki Linnakangas)
这允许在一次操作中还原多个对象。
可选地为还原期间删除旧对象时发出的 DROP 命令添加 IF EXISTS 子句(Pavel Stehule)
此变更避免在删除旧对象时出现不必要的错误。pg_dump、pg_dumpall 和 pg_restore 的新选项 --if-exists 只有在同时指定了 --clean 时才可用。
新增 pg_basebackup 选项 --xlogdir,用于指定 pg_xlog 目录的位置(Haribabu Kommi)
允许 pg_basebackup 在备份副本中重定位表空间(Steeve Lennmark)
这对于在与主库相同的机器上使用 pg_basebackup 特别有用。
允许对网络流基础备份进行限速(Antonin Houska)
这可以通过 pg_basebackup 的 --max-rate 参数控制。
改进元组冻结方式以保留取证信息(Robert Haas、Andres Freund)
此变更消除了尽快冻结元组的主要障碍。检查元组标志位的代码将需要修改。
不再要求为标记有 PG_FUNCTION_INFO_V1 宏的函数编写函数原型(Peter Eisentraut)
此变更消除了编写样板原型的需要。注意,PG_FUNCTION_INFO_V1 宏必须出现在相应函数定义之前,以避免编译器警告。
移除 SnapshotNow 和 HeapTupleSatisfiesNow()(Robert Haas)
所有现有用法都已切换到更合适的快照类型。目录扫描现在使用 MVCC 快照。
新增允许超过 1GB 内存分配的 API(Noah Misch)
新增 psprintf() 以简化字符串组合期间的内存分配(Peter Eisentraut、Tom Lane)
支持 printf() 尺寸修饰符 z 以打印 size_t 值(Andres Freund)
更改 appendStringInfoVA() 的 API 以更好地使用 vsnprintf()(David Rowley、Tom Lane)
允许创建新类型的外部 TOAST 数据(Andres Freund)
新增单读者、单写者的轻量级共享消息队列(Robert Haas)
提高 x86_64 CPU 上的自旋锁速度(Heikki Linnakangas)
移除对不再支持的平台 SINIX、Sun3 和 NS32K 的自旋锁支持(Robert Haas)
移除 IRIX 移植(Robert Haas)
减少 --disable-spinlocks 构建所需的信号量数量(Robert Haas)
用 Perl 重写 duplicate_oids Unix shell 脚本(Andrew Dunstan)
为客户端程序新增测试任何协议(TAP)测试(Peter Eisentraut)
目前,只有当向 configure 给定了 --enable-tap-tests 选项时,make check-world 才会运行这些测试。在未来的某个发行版中,这可能会成为默认行为。
新增 make 目标 check-tests 和 installcheck-tests,允许选择要运行的个别测试(Andrew Dunstan)
移除 maintainer-check makefile 规则(Peter Eisentraut)
默认构建规则现在包含所有以前可选的测试。
改进 PGXS 模块的 VPATH 构建支持(Cédric Villemain、Andrew Dunstan、Peter Eisentraut)
升级到 Autoconf 2.69(Peter Eisentraut)
新增一个 configure 标志,用于向 PG_VERSION 字符串追加自定义文本(Oskari Saarenmaa)
这对于构建自定义二进制文件的打包者很有用。
改进 DocBook XML 有效性(Peter Eisentraut)
修复 Coverity 扫描器报告的各种轻微安全和健全性问题(Stephen Frost)
改进用 Valgrind 测试 PostgreSQL 时对无效内存使用的检测(Noah Misch)
改进 Emacs 示例配置文件 emacs.samples(Peter Eisentraut)
还向源代码树顶层添加了 .dir-locals.el。
允许 pgindent 接受命令行形式的 typedef 列表(Bruce Momjian)
使 pgindent 更智能地处理预处理器条件语句周围的空行(Bruce Momjian)
避免在 Cygwin 和 Mingw 构建中大多数对 dlltool 的使用(Marco Atzeri、Hiroshi Inoue)
支持在 MSVC(Windows)构建中进行仅客户端安装(MauMau)
新增 pg_prewarm 扩展,用于在服务器启动时把关系数据预加载到共享缓冲区缓存中(Robert Haas)
这使系统能更快达到完全运行性能。
为 pgcrypto 新增 UUID 随机数生成器 gen_random_uuid()(Oskari Saarenmaa)
这允许创建版本 4 的 UUID,而无需安装 uuid-ossp。
允许 uuid-ossp 使用 BSD 或 e2fsprogs UUID 库工作,而不仅仅是 OSSP UUID 库(Matteo Beccati)
这改进了 uuid-ossp 模块的可移植性,因为它不再必须依赖日益过时的 OSSP 库。该模块的名称现在已名不副实,但我们不会更改它。
为 auto_explain 新增包含触发器执行时间的选项(Horiguchi Kyotaro)
修复 pgstattuple,使其不把来自未提交事务的行报告为死行(Robert Haas)
使 pgstattuple 函数使用 regclass 类型的参数(Satoshi Nagayasu)
虽然 text 类型的参数仍受支持,但它们可能在未来某个主版本中被移除。
改进 pgrowlocks 输出的一致性,使其更一致地遵循快照规则(Robert Haas)
改进 pg_trgm 在索引正则表达式搜索中对三元组的选取(Alexander Korotkov)
此变更不鼓励使用包含空白的三元组,它们通常选择性较低。
允许 pg_xlogdump 使用 --follow 报告实时日志流(Heikki Linnakangas)
更紧凑地存储 cube 数据(Stas Kelvich)
现有数据必须经过转储/还原才能使用新格式。旧格式仍可读取。
通过使用游标减少 vacuumlo 的客户端内存用量(Andrew Dunstan)
大幅减少 pg_upgrade 的内存消耗(Bruce Momjian)
把 pg_upgrade 的用户名(-U)选项传递给生成的分析脚本(Bruce Momjian)
移除 pgbench 脚本的行长限制(Sawada Masahiko)
以前的行限制为 BUFSIZ。
为 pgbench 新增长选项名(Fabien Coelho)
新增 pgbench 选项 --rate,用于控制事务速率(Fabien Coelho)
新增 pgbench 选项 --progress,用于打印周期性进度报告(Fabien Coelho)
使 pg_stat_statements 使用文件而非共享内存来存储查询文本(Peter Geoghegan)
这消除了以前对查询文本长度的限制,并允许默认跟踪更多数量的唯一语句。
允许报告 pg_stat_statements 的内部查询哈希标识符(Daniel Farina、Sameer Thakur、Peter Geoghegan)
新增获取除查询文本之外的 所有 pg_stat_statements 信息的能力(Peter Geoghegan)
这使监控工具可以只为刚创建的条目获取查询文本,从而改进重复查询统计信息时的性能。
使 pg_stat_statements 忽略 DEALLOCATE 命令(Fabien Coelho)
它已经忽略 PREPARE 以及一般的规划时间,因此这样更一致。
服务器关闭时把统计信息文件保存到 $PGDATA/pg_stat 而不是 $PGDATA/global(Fujii Masao)
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。