选择 打开 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

不受支持的版本: 9.4
历史版本PostgreSQL 9.4 已于 2020 年 2 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本手册首页

E.27. 版本 9.4 #

发布日期:. 2014-12-18

E.27.1. 概览

PostgreSQL 9.4 的主要增强包括:

  • 新增 jsonb,一种存储 JSON 数据的功能更强、效率更高的数据类型

  • 新增 SQL 命令 ALTER SYSTEM,用于更改 postgresql.conf 配置文件条目

  • 降低某些 ALTER TABLE 命令的锁强度

  • 允许刷新 物化视图而不阻塞并发读取

  • 新增对 WAL 数据逻辑解码的支持,允许以可自定义的格式流出数据库变更

  • 允许动态注册、启动和终止后台工作进程

上述各项在下面的章节中有更详细的说明。

E.27.2. 迁移到版本 9.4

希望从任何之前的版本迁移数据的用户,需要使用 pg_dumpall进行转储/恢复,或使用pg_upgrade

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

  • 收紧对多维数组输入的检查(Bruce Momjian)

    此前,以单元素子数组开头的输入数组字符串后面可以包含多元素子数组,例如'{{1}, {2,3}}'::int[]会被接受。

  • 在将datetimestamptimestamptz类型的值转换为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_commandrestore_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,但这与其他工具不一致。

E.27.3. 变更

下面是PostgreSQL 9.4 与上一个主版本之间变更的详细说明。

E.27.3.1. 服务器

  • 允许动态注册、启动和终止后台工作进程(Robert Haas)

    新的worker_spi模块展示了此功能的使用示例。

  • 允许动态分配共享内存段(Robert Haas、Amit Kapila)

    此功能在test_shm_mq模块中有演示。

  • 在崩溃恢复或立即关闭期间,向未及时关闭的子进程发送不可捕获的终止信号(SIGKILL)(MauMau, Álvaro Herrera)

    这减少了postmaster关闭后遗留孤儿子进程的可能性,同时确保在某些子进程已经卡住时崩溃恢复仍能继续。

  • 改进数据库系统标识符的随机性(Tom Lane)

  • 使VACUUM向统计信息收集器正确报告已死但尚不能移除的行(Hari Babu)

    此前这些行被报告为活行。

E.27.3.1.1. 索引
  • 减小GIN索引的大小(Alexander Korotkov、Heikki Linnakangas)

    通过pg_upgrade升级的索引仍能正常工作,但仍是旧的、较大的GIN格式。使用REINDEX可以按新格式重建旧的 GIN 索引。

  • 提高多键 GIN 查找的速度(Alexander Korotkov、Heikki Linnakangas)

  • inetcidr数据类型新增GiST索引支持(Emre Hasegeli)

    此类索引可改进子网和超网查找以及排序比较。

  • 修复 B-tree 页删除中罕见的竞态条件(Heikki Linnakangas)

  • 使被中断的 B-tree 页分裂的处理更加健壮(Heikki Linnakangas)

E.27.3.1.2. 总体性能
  • 允许多个后端并发插入WAL缓冲区(Heikki Linnakangas)

    这改进了并行写入性能。

  • 有条件地只把已更新行的修改部分写入 WAL(Amit Kapila)

  • 改进用作窗口函数的聚集函数的性能(David Rowley、Florian Pflug、Tom Lane)

  • 提高使用 numeric 状态值的聚集的速度(Hadi Moshayedi)

  • 当表被 CLUSTERVACUUM FULL 重写时,尝试冻结元组(Robert Haas、Andres Freund)

    这可以避免将来再冻结这些元组的需要。

  • 提高 COPY 在带有默认 nextval() 列时的速度(Simon Riggs)

  • 提高在同一会话中访问许多不同序列的速度(David Rowley)

  • 提高排序和 B-tree 索引构建期间内存中持有元组数量的硬限制(Noah Misch)

  • 减少 PL/pgSQL DO 块分配的内存(Tom Lane)

  • 使规划器更激进地从混合的 AND/OR 子句中提取限制子句(Tom Lane)

  • 禁止把易变 WHERE 子句下推到 DISTINCT 子查询中(Tom Lane)

    下推 WHERE 子句整体上可能产生更高效的计划,但代价是该子句的求值次数会多于查询文本所暗示的次数;因此若子句包含任何易变函数则不这样做。

  • 自动调整系统目录缓存的大小(Heikki Linnakangas)

    这减少了只访问少量表的会话的内存消耗,并改进了访问大量表的会话的性能。

E.27.3.1.3. 监控
  • 新增 pg_stat_archiver 系统视图以报告 WAL 归档器的活动(Gabriele Bartolini)

  • pg_stat_all_tables 及相关系统视图新增 n_mod_since_analyze 列(Mark Kirkwood)

    这些列显示了系统对表上次 ANALYZE 以来已更改元组数量的估计。该估计驱动何时自动分析的决策。

  • 为系统视图 pg_stat_activity 新增 backend_xidbackend_xmin 列,并为 pg_stat_replication 新增 backend_xmin 列(Christian Kruse)

E.27.3.1.4. SSL
  • 新增对 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)

E.27.3.1.5. 服务器设置
  • 新增 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_memmaintenance_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 代码页输出。

E.27.3.2. 复制与恢复

  • 新增复制槽,以协调流复制备库与其流来源节点的活动(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)

    这使备库服务器能够更快启动并更积极地清理资源。

E.27.3.2.1. 逻辑解码

逻辑解码允许以可配置的格式流出数据库变更。数据从 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)

E.27.3.3. 查询

  • 新增 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)

E.27.3.4. 工具命令

  • 新增 DISCARD SEQUENCES 命令,用于丢弃缓存的序列相关状态(Fabrízio de Royes Mello、Robert Haas)

    DISCARD ALL 现在也会丢弃此类信息。

  • COPY FROM 新增 FORCE NULL 选项,在 CSV 模式下使与指定空串匹配的带引号字符串转换为 NULL(Ian Barwick、Michael Paquier)

    若不使用此选项,则只有不带引号的匹配字符串才会被导入为空值。

  • 对在事务块之外使用且不可能生效的命令发出警告(Bruce Momjian)

    SET LOCALSET CONSTRAINTSSET TRANSACTIONABORT 在事务块之外使用时会发出新的警告。

E.27.3.4.1. EXPLAIN
  • 使 EXPLAIN ANALYZE 显示规划时间(Andreas Karlsson)

  • 使 EXPLAIN 显示 Agg 和 Group 节点中的分组列(Tom Lane)

  • 使 EXPLAIN ANALYZE 显示位图堆扫描中的精确和有损块计数(Etsuro Fujita)

E.27.3.4.2. 视图
  • 允许刷新物化视图而不阻塞其他会话在此期间读取该视图(Kevin Grittner)

    这通过 REFRESH MATERIALIZED VIEW CONCURRENTLY 完成。

  • 允许视图被自动更新,即使它们包含一些不可更新的列(Dean Rasheed)

    此前,存在表达式、字面量和函数调用等不可更新输出列会阻止自动更新。现在支持 INSERTUPDATEDELETE,只要它们不试图为任何不可更新列赋新值。

  • 允许控制 INSERTUPDATE 能否向自动可更新视图中添加不会出现在该视图中的行(Dean Rasheed)

    这通过新的 CREATE VIEW 子句 WITH CHECK OPTION 控制。

  • 允许安全屏障视图被自动更新(Dean Rasheed)

E.27.3.5. 对象操作

  • 支持在外部表上使用触发器(Ronan Dunklau)

  • 允许使用 ALTER TABLEALTER INDEXALTER MATERIALIZED VIEWALL IN TABLESPACE ... SET TABLESPACE 形式把成组对象从一个表空间移动到另一个表空间(Stephen Frost)

  • 允许通过 ALTER TABLE ... ALTER CONSTRAINT 更改外键约束的可延迟性(Simon Riggs)

  • 降低某些 ALTER TABLE 命令的锁强度(Simon Riggs、Noah Misch、Robert Haas)

    具体而言,VALIDATE CONSTRAINTCLUSTER ONSET WITHOUT CLUSTERALTER COLUMN SET STATISTICSALTER 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 模式,就不能再修改或删除。

E.27.3.6. 数据类型

  • 完整实现 line 数据类型(Peter Eisentraut)

    线数据类型(lseg)一直得到完整支持。以前的 line 数据类型(只能通过编译时选项启用)与新实现在二进制和转储格式上不兼容。

  • 新增 pg_lsn 数据类型,用于表示 WAL 日志序列号(LSN)(Robert Haas、Michael Paquier)

  • 允许把单点polygon转换为circle(Bruce Momjian)

  • 支持随时间改变 UTC 偏移的时区缩写(Tom Lane)

    此前,PostgreSQL 假定时区缩写(如 EST)关联的 UTC 偏移在任何特定区域设置的用法中永不改变。然而这一假设在现实世界中并不成立,因此引入了让区域缩写表示有时会变化的 UTC 偏移的能力。更新了时区缩写定义文件,在自 1970 年以来缩写的 UTC 偏移发生过变化的时区区域设置中使用此功能(依据 IANA 时区数据库)。在此类时区中,PostgreSQL 现在会根据给定日期为缩写关联正确的 UTC 偏移。

  • 在适当情况下,允许非 ISOtimestampdate 字符串使用五位及以上年份(Bruce Momjian)

  • 新增对 interval 值上溢/下溢的检查(Bruce Momjian)

E.27.3.6.1. JSON
  • 新增 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)

E.27.3.7. 函数

  • 新增 pg_sleep_for(interval)pg_sleep_until(timestamp),以更灵活地指定延迟(Vik Fearing、Julien Rouhaud)

    现有的 pg_sleep() 函数只支持以秒为单位指定延迟。

  • 新增面向数组的 cardinality() 函数(Marko Tiikkaja)

    它返回数组中元素的总数,对于没有元素的数组则返回零。

  • 新增 SQL 函数,允许在任意偏移处进行大对象读写(Pavel Stehule)

  • 允许 unnest() 接受多个参数,各参数分别展开后再水平串联(Andrew Gierth)

  • 新增从各个单独的值(而非字符串)构造 timedatetimestamptimestamptzinterval 的函数(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 字符的值。

E.27.3.7.1. 系统信息函数
  • 新增在 pg_classpg_procpg_typepg_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)

    此前它只显示当前用户拥有的模式。

E.27.3.7.2. 聚合
  • 通过 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() 之类的聚集。

E.27.3.8. 服务器端语言

  • PL/PerlPL/Tcl 新增事件触发器支持(Dimitri Fontaine)

  • PL/Python 中把 numeric 值转换为 decimal(Szymon Guz、Ronan Dunklau)

    此前此类值被转换为 Python 的 float 值,有损失精度的风险。

E.27.3.8.1. PL/pgSQL Server-Side Language
  • 新增使用 GET DIAGNOSTICS 获取当前 PL/pgSQL 调用栈的能力(Pavel Stehule、Stephen Frost)

  • 新增选项 print_strict_params,用于显示传递给违反 STRICT 约束的查询的参数(Marko Tiikkaja)

  • 新增变量 plpgsql.extra_warningsplpgsql.extra_errors,用于启用额外的 PL/pgSQL 警告和错误(Marko Tiikkaja、Petr Jelinek)

    目前只有关于被遮蔽变量的警告/错误可用。

E.27.3.9. libpq

  • 使 libpq 的 PQconndefaults() 函数忽略无效的服务文件(Steve Singer、Bruce Momjian)

    此前它遇到不正确的服务文件时会返回 NULL。

  • libpq 接受 TLSv1 之外的 TLS 协议版本(Marko Kreen)

E.27.3.10. 客户端应用程序

  • createuser 新增选项 -g,用于指定角色成员关系(Christopher Browne)

  • vacuumdb 新增选项 --analyze-in-stages,按粒度递增的分阶段方式进行分析(Peter Eisentraut)

    这允许快速创建最基本的统计信息。

  • 使带选项 -npg_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)

E.27.3.10.1. psql
  • 在禁用页脚时,抑制 psql expanded 模式下的 No rows 输出(Bruce Momjian)

  • 允许用 Control-C 中止在连接启动时挂起的 psql(Peter Eisentraut)

E.27.3.10.1.1. 反斜线命令
  • 使 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)

    以前的代码试图把相对文件名转换为绝对路径用于显示,但经常出错。

E.27.3.10.2. pg_dump
  • 允许 pg_restore 的选项 -I-P-T-n 被多次指定(Heikki Linnakangas)

    这允许在一次操作中还原多个对象。

  • 可选地为还原期间删除旧对象时发出的 DROP 命令添加 IF EXISTS 子句(Pavel Stehule)

    此变更避免在删除旧对象时出现不必要的错误。pg_dumppg_dumpallpg_restore 的新选项 --if-exists 只有在同时指定了 --clean 时才可用。

E.27.3.10.3. pg_basebackup
  • 新增 pg_basebackup 选项 --xlogdir,用于指定 pg_xlog 目录的位置(Haribabu Kommi)

  • 允许 pg_basebackup 在备份副本中重定位表空间(Steeve Lennmark)

    这对于在与主库相同的机器上使用 pg_basebackup 特别有用。

  • 允许对网络流基础备份进行限速(Antonin Houska)

    这可以通过 pg_basebackup--max-rate 参数控制。

E.27.3.11. 源代码

  • 改进元组冻结方式以保留取证信息(Robert Haas、Andres Freund)

    此变更消除了尽快冻结元组的主要障碍。检查元组标志位的代码将需要修改。

  • 不再要求为标记有 PG_FUNCTION_INFO_V1 宏的函数编写函数原型(Peter Eisentraut)

    此变更消除了编写样板原型的需要。注意,PG_FUNCTION_INFO_V1 宏必须出现在相应函数定义之前,以避免编译器警告。

  • 移除 SnapshotNowHeapTupleSatisfiesNow()(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)

  • 移除对不再支持的平台 SINIXSun3NS32K 的自旋锁支持(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-testsinstallcheck-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)

  • 避免在 CygwinMingw 构建中大多数对 dlltool 的使用(Marco Atzeri、Hiroshi Inoue)

  • 支持在 MSVC(Windows)构建中进行仅客户端安装(MauMau)

E.27.3.12. 附加模块

  • 新增 pg_prewarm 扩展,用于在服务器启动时把关系数据预加载到共享缓冲区缓存中(Robert Haas)

    这使系统能更快达到完全运行性能。

  • pgcrypto 新增 UUID 随机数生成器 gen_random_uuid()(Oskari Saarenmaa)

    这允许创建版本 4 的 UUID,而无需安装 uuid-ossp

  • 允许 uuid-ossp 使用 BSDe2fsprogs 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)

E.27.3.12.1. pgbench
  • 移除 pgbench 脚本的行长限制(Sawada Masahiko)

    以前的行限制为 BUFSIZ

  • pgbench 新增长选项名(Fabien Coelho)

  • 新增 pgbench 选项 --rate,用于控制事务速率(Fabien Coelho)

  • 新增 pgbench 选项 --progress,用于打印周期性进度报告(Fabien Coelho)

E.27.3.12.2. pg_stat_statements
  • 使 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 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。