PostgreSQL 9.4
已停止支持 · 记录构建 9.4.26 · 2020-02-13
此大版本已停止支持,相关记录用于查阅历史;没有更新的安全记录不代表仍可安全运行。
- 首次正式发布
- 2014-12-18
- 支持结束
- 2020-02-13
- 已收录发布版本
- 27
- 原始发布说明条目
- 1007
手册与来源
PostgreSQL 9.4 本站手册 · 已加载 935 页。
手册加载时间:2026-09-27T00:10:45.258078。
发布说明快照:2026-09-26。安全证据快照:2026-09-26。PDF 链接按本地文件是否存在提供,历史版本的语言与 HTML 手册可能不同。生命周期参见官方版本政策。
升级注意事项
跨大版本升级需要导出/恢复或 pg_upgrade 等迁移方式,应阅读沿途大版本的发布说明与目标版本手册。小版本更新也可能要求额外操作,请核对对应发布的迁移说明。官方升级政策。
9.4.0 的兼容性变化 · 从首发到 9.4.26 的变化
9.4.0 的原始迁移说明
发布历史
每次发布的原始变更均独立保留。CVE 数量表示发布说明中的提及,可能包含后续纠正,不等于本次新修复漏洞数。
| 版本 | 日期/快照截止时间 | 全部变化 | BUG 修复 | 迁移条目 | 提及 CVE |
|---|---|---|---|---|---|
| 9.4.26 | 2020-02-13 | 28 | 15 | 0 | 0 |
| 9.4.25 | 2019-11-14 | 39 | 17 | 0 | 0 |
| 9.4.24 | 2019-08-08 | 18 | 7 | 0 | 2 |
| 9.4.23 | 2019-06-20 | 10 | 5 | 0 | 0 |
| 9.4.22 | 2019-05-09 | 25 | 15 | 0 | 0 |
| 9.4.21 | 2019-02-14 | 35 | 19 | 0 | 0 |
| 9.4.20 | 2018-11-08 | 42 | 20 | 0 | 0 |
| 9.4.19 | 2018-08-09 | 26 | 13 | 0 | 1 |
| 9.4.18 | 2018-05-10 | 32 | 16 | 0 | 0 |
| 9.4.17 | 2018-03-01 | 7 | 4 | 0 | 1 |
| 9.4.16 | 2018-02-08 | 28 | 16 | 0 | 1 |
| 9.4.15 | 2017-11-09 | 22 | 10 | 0 | 2 |
| 9.4.14 | 2017-08-31 | 8 | 2 | 0 | 0 |
| 9.4.13 | 2017-08-10 | 53 | 27 | 0 | 4 |
| 9.4.12 | 2017-05-11 | 34 | 19 | 0 | 4 |
| 9.4.11 | 2017-02-09 | 44 | 19 | 0 | 0 |
| 9.4.10 | 2016-10-27 | 34 | 18 | 0 | 0 |
| 9.4.9 | 2016-08-11 | 39 | 14 | 0 | 2 |
| 9.4.8 | 2016-05-12 | 21 | 12 | 0 | 0 |
| 9.4.7 | 2016-03-31 | 23 | 13 | 0 | 0 |
| 9.4.6 | 2016-02-11 | 59 | 26 | 0 | 4 |
| 9.4.5 | 2015-10-08 | 70 | 37 | 0 | 2 |
| 9.4.4 | 2015-06-12 | 4 | 3 | 0 | 0 |
| 9.4.3 | 2015-06-04 | 4 | 3 | 0 | 0 |
| 9.4.2 | 2015-05-22 | 59 | 24 | 0 | 3 |
| 9.4.1 | 2015-02-05 | 32 | 12 | 0 | 6 |
| 9.4.0 | 2014-12-18 | 211 | 6 | 22 | 0 |
首次发布变化
9.4.0 的原始条目,包含功能和兼容性变化。类别用于浏览,不是上游原始分类。
匹配 211 / 211 条原始变更。
json#>text[]路径提取操作符现在在数组为空时返回其左操作数输入而非 NULL · 兼容性变化 · 迁移说明
json#>text[]路径提取操作符现在在数组为空时返回其左操作数输入而非 NULL(Tom Lane)这与该操作表示对简单字段/元素提取操作符
->应用零次的概念一致。类似地,带空数组的json#>>text[]只是把其左操作数输入强制转换为文本。原始发布条目 ·
9.4.0/migration/003JSON字段/元素/路径提取操作符的极端情况现在返回 NULL 而不是抛出错误 · 兼容性变化 · 迁移说明
JSON字段/元素/路径提取操作符的极端情况现在返回 NULL 而不是抛出错误(Tom Lane)例如,对 JSON 数组应用字段提取现在得到 NULL 而不是错误。这更一致(因为诸如字段不存在等可比情况此前就已返回 NULL),而且使创建使用这些操作符的表达式索引变得安全,因为它们现在不会对任何有效的 JSON 输入抛出错误。
原始发布条目 ·
9.4.0/migration/004使to_timestamp()和to_date()格式串中连续的空白字符消费输入串中相应数量的字符(无论是否空白),然后在非FX模式下视情况消费相邻空白 · 兼容性变化 · 迁移说明
使
to_timestamp()和to_date()格式串中连续的空白字符消费输入串中相应数量的字符(无论是否空白),然后在非FX模式下视情况消费相邻空白(Jeevan Chalke)此前,非
FX格式串中的连续空白字符表现得像单个空白字符,并消费输入串中所有相邻空白。例如,此前三个空格的格式串在' 12'中只会消费第一个空格,但现在会消费全部三个字符。原始发布条目 ·
9.4.0/migration/005修复ts_rank_cd()使其忽略已去除位置信息的词位 · 兼容性变化 · 迁移说明
修复
ts_rank_cd()使其忽略已去除位置信息的词位(Alex Hill)此前,已去除位置信息的词位被当作具有默认位置处理,产生用处可疑的排名。
原始发布条目 ·
9.4.0/migration/006对于声明为接受VARIADIC "any"的函数,标记为VARIADIC的实际参数必须是可确定数组类型 · 兼容性变化 · 迁移说明
对于声明为接受
VARIADIC "any"的函数,标记为VARIADIC的实际参数必须是可确定数组类型(Pavel Stehule)此类参数不能再写成不带修饰的字符串字面量或
NULL;现在需要转换为适当的数组数据类型。注意这不影响未标记VARIADIC的参数。原始发布条目 ·
9.4.0/migration/007确保整行变量向关注组合参数内列名的函数暴露预期的列名 · 兼容性变化 · 迁移说明
确保整行变量向关注组合参数内列名的函数暴露预期的列名(Tom Lane)
现在,像
row_to_json(tab.*)这样的结构总是输出与调用处表tab可见的列别名匹配的列名。在以前的发行版中,输出的列名有时是表的实际列名,而不管查询中指派了什么别名。原始发布条目 ·
9.4.0/migration/008将EXPLAIN ANALYZE输出中的“total runtime”更名为“execution time” · 兼容性变化 · 迁移说明
将
EXPLAIN ANALYZE输出中的“total runtime”更名为“execution time”(Tom Lane)既然规划时间也一并报告,以前的名称容易引起混淆。
原始发布条目 ·
9.4.0/migration/010SHOW TIME ZONE现在以POSIX时区格式输出简单的数字 UTC 偏移 · 兼容性变化 · 迁移说明
SHOW TIME ZONE现在以POSIX时区格式输出简单的数字 UTC 偏移(Tom Lane)此前,此类时区设置显示为
interval值。作为简单字符串传递时,新的输出能被SET TIME ZONE正确解释,而旧输出需要特殊处理才能被正确重新解析。原始发布条目 ·
9.4.0/migration/011支持更新外部表的外部数据包装器必须考虑可能存在的AFTER ROW触发器 · 兼容性变化 · 迁移说明
支持更新外部表的外部数据包装器必须考虑可能存在的
AFTER ROW触发器(Noah Misch)当存在
AFTER ROW触发器时,更新操作必须返回表的所有列,因为触发器可能检查其中任意或全部列。此前外部表从不带触发器,因此 FDW 可能优化掉对RETURNING子句(若有)中未提及列的获取。原始发布条目 ·
9.4.0/migration/012在 Windows 上自动保留用户提供的命令串中的引号 · 兼容性变化 · 迁移说明
在 Windows 上自动保留用户提供的命令串中的引号(Heikki Linnakangas)
自行处理引号保留的用户命令可能需要调整。archive_command、restore_command以及
COPY TO/FROM PROGRAM中使用的命令很可能受此影响。原始发布条目 ·
9.4.0/migration/015移除目录列pg_class.reltoastidxid · 兼容性变化 · 迁移说明
移除目录列
pg_class.reltoastidxid(Michael Paquier)原始发布条目 ·
9.4.0/migration/016移除目录列pg_rewrite.ev_attr · 兼容性变化 · 迁移说明
移除目录列
pg_rewrite.ev_attr(Kevin Grittner)逐列规则自PostgreSQL 7.3 起就不再支持。
原始发布条目 ·
9.4.0/migration/017移除对Kerberos认证的原生支持(--with-krb5等) · 兼容性变化 · 迁移说明
移除对Kerberos认证的原生支持(
--with-krb5等)(Magnus Hagander)使用Kerberos认证的受支持方式是通过GSSAPI。原生代码自PostgreSQL 8.3 起已被弃用。
原始发布条目 ·
9.4.0/migration/018在PL/Python中,像处理底层数组类型一样处理域于数组的类型 · 兼容性变化 · 迁移说明
在PL/Python中,像处理底层数组类型一样处理域于数组的类型(Rodolfo Campero)
此前此类值被当作字符串处理。
原始发布条目 ·
9.4.0/migration/019使 libpq 的PQconnectdbParams()和PQpingParams()函数把零长度字符串按默认值处理 · 兼容性变化 · 迁移说明
使 libpq 的
PQconnectdbParams()和PQpingParams()函数把零长度字符串按默认值处理(Adrian Vondendriesch)此前,这些函数只在某些情况下把零长度字符串值视为选择默认值。
原始发布条目 ·
9.4.0/migration/020pg_upgrade现在使用-U或--username指定用户名 · 兼容性变化 · 迁移说明
pg_upgrade现在使用
-U或--username指定用户名(Bruce Momjian)此前该选项拼作
-u或--user,但这与其他工具不一致。原始发布条目 ·
9.4.0/migration/022允许动态分配共享内存段 · 新功能
允许动态分配共享内存段(Robert Haas、Amit Kapila)
此功能在
test_shm_mq模块中有演示。原始发布条目 ·
9.4.0/changes/002在崩溃恢复或立即关闭期间,向未及时关闭的子进程发送不可捕获的终止信号(SIGKILL) · 新功能
在崩溃恢复或立即关闭期间,向未及时关闭的子进程发送不可捕获的终止信号(SIGKILL)(MauMau, Álvaro Herrera)
这减少了postmaster关闭后遗留孤儿子进程的可能性,同时确保在某些子进程已经“卡住”时崩溃恢复仍能继续。
原始发布条目 ·
9.4.0/changes/003减小GIN索引的大小 · 新功能
减小GIN索引的大小(Alexander Korotkov、Heikki Linnakangas)
通过pg_upgrade升级的索引仍能正常工作,但仍是旧的、较大的GIN格式。使用REINDEX可以按新格式重建旧的 GIN 索引。
原始发布条目 ·
9.4.0/changes/006当表被CLUSTER或 VACUUM FULL 重写时,尝试冻结元组 · 性能改进
当表被CLUSTER或
VACUUM FULL重写时,尝试冻结元组(Robert Haas、Andres Freund)这可以避免将来再冻结这些元组的需要。
原始发布条目 ·
9.4.0/changes/015提高排序和 B-tree 索引构建期间内存中持有元组数量的硬限制 · 性能改进
提高排序和 B-tree 索引构建期间内存中持有元组数量的硬限制(Noah Misch)
原始发布条目 ·
9.4.0/changes/018使规划器更激进地从混合的 AND/OR 子句中提取限制子句 · 性能改进
使规划器更激进地从混合的
AND/OR子句中提取限制子句(Tom Lane)原始发布条目 ·
9.4.0/changes/020禁止把易变 WHERE 子句下推到 DISTINCT 子查询中 · 性能改进
禁止把易变
WHERE子句下推到DISTINCT子查询中(Tom Lane)下推
WHERE子句整体上可能产生更高效的计划,但代价是该子句的求值次数会多于查询文本所暗示的次数;因此若子句包含任何易变函数则不这样做。原始发布条目 ·
9.4.0/changes/021自动调整系统目录缓存的大小 · 性能改进
自动调整系统目录缓存的大小(Heikki Linnakangas)
这减少了只访问少量表的会话的内存消耗,并改进了访问大量表的会话的性能。
原始发布条目 ·
9.4.0/changes/022新增pg_stat_archiver系统视图以报告 WAL 归档器的活动 · 新功能
新增pg_stat_archiver系统视图以报告 WAL 归档器的活动(Gabriele Bartolini)
原始发布条目 ·
9.4.0/changes/023为pg_stat_all_tables及相关系统视图新增 n_mod_since_analyze 列 · 新功能
为pg_stat_all_tables及相关系统视图新增
n_mod_since_analyze列(Mark Kirkwood)这些列显示了系统对表上次ANALYZE以来已更改元组数量的估计。该估计驱动何时自动分析的决策。
原始发布条目 ·
9.4.0/changes/024为系统视图pg_stat_activity新增 backend_xid 和 backend_xmin 列,并为pg_stat_replication新增 backend_xmin 列 · 新功能
为系统视图pg_stat_activity新增
backend_xid和backend_xmin列,并为pg_stat_replication新增backend_xmin列(Christian Kruse)原始发布条目 ·
9.4.0/changes/025新增对 SSL ECDH 密钥交换的支持 · 新功能
新增对 SSL ECDH 密钥交换的支持(Marko Kreen)
这允许使用椭圆曲线密钥进行服务器认证。此类密钥比 RSA 密钥更快且安全性更好。新增配置参数ssl_ecdh_curve控制用于 ECDH 的曲线。
原始发布条目 ·
9.4.0/changes/026默认情况下,现在由服务器而非客户端控制 SSL 密码的偏好顺序 · 新功能
默认情况下,现在由服务器而非客户端控制 SSL 密码的偏好顺序(Marko Kreen)
此前,ssl_ciphers指定的顺序通常被忽略,转而采用客户端默认值,而大多数 PostgreSQL 客户端的默认值不可配置。如有需要,可以通过新的配置参数ssl_prefer_server_ciphers恢复以前的行为。
原始发布条目 ·
9.4.0/changes/028使log_connections显示 SSL 加密信息 · 新功能
使log_connections显示 SSL 加密信息(Andreas Kunert)
原始发布条目 ·
9.4.0/changes/029新增 SQL 命令ALTER SYSTEM,用于更改 postgresql.conf 配置文件条目 · 新功能
新增 SQL 命令ALTER SYSTEM,用于更改
postgresql.conf配置文件条目(Amit Kapila)此前此类设置只能通过手工编辑
postgresql.conf来更改。原始发布条目 ·
9.4.0/changes/031新增autovacuum_work_mem配置参数,以控制自动清理工作进程使用的内存量 · 新功能
新增autovacuum_work_mem配置参数,以控制自动清理工作进程使用的内存量(Peter Geoghegan)
原始发布条目 ·
9.4.0/changes/032新增huge_pages参数,允许在 Linux 上使用大内存页 · 新功能
新增huge_pages参数,允许在 Linux 上使用大内存页(Christian Kruse、Richard Poole、Abhijit Menon-Sen)
这可以改进大内存系统上的性能。
原始发布条目 ·
9.4.0/changes/033新增max_worker_processes参数,以限制后台工作进程的数量 · 新功能
新增max_worker_processes参数,以限制后台工作进程的数量(Robert Haas)
这有助于把备库服务器配置为拥有所需数量的工作进程(与主库相同)。
原始发布条目 ·
9.4.0/changes/034新增仅限超级用户的session_preload_libraries参数,用于在会话启动时加载库 · 新功能
新增仅限超级用户的session_preload_libraries参数,用于在会话启动时加载库(Peter Eisentraut)
与local_preload_libraries不同,此参数可以加载任何共享库,而不仅仅是
$libdir/plugins目录中的库。原始发布条目 ·
9.4.0/changes/035新增wal_log_hints参数,用于启用提示位(hint-bit)变更的 WAL 日志 · 新功能
新增wal_log_hints参数,用于启用提示位(hint-bit)变更的 WAL 日志(Sawada Masahiko)
提示位变更通常不记录日志,启用了校验和时除外。这对 pg_rewind 等外部工具很有用。
原始发布条目 ·
9.4.0/changes/036将work_mem和maintenance_work_mem的默认设置提高到原来的四倍 · 新功能
将work_mem和maintenance_work_mem的默认设置提高到原来的四倍(Bruce Momjian)
新的默认值分别为 4MB 和 64MB。
原始发布条目 ·
9.4.0/changes/037将effective_cache_size的默认设置提高到 4GB · 新功能
将effective_cache_size的默认设置提高到 4GB(Bruce Momjian、Tom Lane)
原始发布条目 ·
9.4.0/changes/038允许在log_line_prefix中指定 printf 风格的空格填充 · 新功能
允许在log_line_prefix中指定
printf风格的空格填充(David Rowley)原始发布条目 ·
9.4.0/changes/039在log_lock_waits日志消息中显示锁持有者和等待者的 PID,并改进关系相关信息 · 新功能
在log_lock_waits日志消息中显示锁持有者和等待者的 PID,并改进关系相关信息(Christian Kruse)
原始发布条目 ·
9.4.0/changes/041降低加载共享库时的服务器日志级别 · 新功能
降低加载共享库时的服务器日志级别(Peter Geoghegan)
以前的级别是
LOG,对于按会话加载的库来说过于冗长。原始发布条目 ·
9.4.0/changes/042在 Windows 上,使 SQL_ASCII 编码的数据库和服务器进程(例如postmaster)以服务器 Windows 用户区域设置的字符编码发出消息 · 新功能
在 Windows 上,使
SQL_ASCII编码的数据库和服务器进程(例如postmaster)以服务器 Windows 用户区域设置的字符编码发出消息(Alexander Law、Noah Misch)此前这些消息以 Windows ANSI 代码页输出。
原始发布条目 ·
9.4.0/changes/043新增恢复参数recovery_min_apply_delay以延迟复制 · 新功能
新增恢复参数recovery_min_apply_delay以延迟复制(Robert Haas, Fabrízio de Royes Mello、Simon Riggs)
延迟备库服务器上的重放对于从用户错误中恢复可能很有用。
原始发布条目 ·
9.4.0/changes/045新增recovery_target选项 immediate,在达到一致状态后立即停止 WAL 恢复 · 新功能
新增recovery_target选项
immediate,在达到一致状态后立即停止 WAL 恢复(MauMau、Heikki Linnakangas)原始发布条目 ·
9.4.0/changes/046改进恢复目标的处理 · 新功能
改进恢复目标的处理(Heikki Linnakangas)
pg_last_xact_replay_timestamp()报告的时间戳现在反映已提交的记录,而不是将要提交的事务。恢复到还原点现在会重放到还原点本身,而不是在还原点之前停止。原始发布条目 ·
9.4.0/changes/047pg_switch_xlog() 现在会清除旧 WAL 文件中所有未使用的尾部空间 · 新功能
pg_switch_xlog()现在会清除旧 WAL 文件中所有未使用的尾部空间(Heikki Linnakangas)这提高了 WAL 文件的压缩率。
原始发布条目 ·
9.4.0/changes/048更频繁地写入运行中事务的 WAL 记录 · 新功能
更频繁地写入运行中事务的 WAL 记录(Andres Freund)
这使备库服务器能够更快启动并更积极地清理资源。
原始发布条目 ·
9.4.0/changes/051新增表级参数REPLICA IDENTITY,用于控制逻辑复制 · 新功能
新增表级参数
REPLICA IDENTITY,用于控制逻辑复制(Andres Freund)原始发布条目 ·
9.4.0/changes/054新增关系选项user_catalog_table,用于标识参与逻辑变更集编码的用户创建表 · 新功能
新增关系选项
user_catalog_table,用于标识参与逻辑变更集编码的用户创建表(Andres Freund)原始发布条目 ·
9.4.0/changes/055新增pg_recvlogical应用程序,用于接收逻辑解码数据 · 新功能
新增pg_recvlogical应用程序,用于接收逻辑解码数据(Andres Freund)
原始发布条目 ·
9.4.0/changes/056新增test_decoding模块,用于在 SQL 层面演示逻辑解码 · 新功能
新增test_decoding模块,用于在 SQL 层面演示逻辑解码(Andres Freund)
原始发布条目 ·
9.4.0/changes/057新增 WITH ORDINALITY 语法,为 FROM 子句中集合返回函数返回的行编号 · 新功能
新增
WITH ORDINALITY语法,为FROM子句中集合返回函数返回的行编号(Andrew Gierth、David Fetter)这对
unnest()之类的函数特别有用。原始发布条目 ·
9.4.0/changes/058新增 ROWS FROM() 语法,允许在 FROM 子句中对集合返回函数进行水平串联 · 新功能
新增
ROWS FROM()语法,允许在FROM子句中对集合返回函数进行水平串联(Andrew Gierth)原始发布条目 ·
9.4.0/changes/059确保 SELECT ... FOR UPDATE NOWAIT 在涉及已被并发更新元组的极端情况下不会等待 · 新功能
确保
SELECT ... FOR UPDATE NOWAIT在涉及已被并发更新元组的极端情况下不会等待(Craig Ringer and Thomas Munro)原始发布条目 ·
9.4.0/changes/061新增 DISCARD SEQUENCES 命令,用于丢弃缓存的序列相关状态 · 新功能
新增
DISCARD SEQUENCES命令,用于丢弃缓存的序列相关状态(Fabrízio de Royes Mello、Robert Haas)DISCARD ALL现在也会丢弃此类信息。原始发布条目 ·
9.4.0/changes/062对在事务块之外使用且不可能生效的命令发出警告 · 新功能
对在事务块之外使用且不可能生效的命令发出警告(Bruce Momjian)
当
SET LOCAL、SET CONSTRAINTS、SET TRANSACTION和ABORT在事务块之外使用时会发出新的警告。原始发布条目 ·
9.4.0/changes/064使 EXPLAIN 显示 Agg 和 Group 节点中的分组列 · 新功能
使
EXPLAIN显示 Agg 和 Group 节点中的分组列(Tom Lane)原始发布条目 ·
9.4.0/changes/066使 EXPLAIN ANALYZE 显示位图堆扫描中的精确和有损块计数 · 新功能
使
EXPLAIN ANALYZE显示位图堆扫描中的精确和有损块计数(Etsuro Fujita)原始发布条目 ·
9.4.0/changes/067允许控制 INSERT 和 UPDATE 能否向自动可更新视图中添加不会出现在该视图中的行 · 新功能
允许控制
INSERT和UPDATE能否向自动可更新视图中添加不会出现在该视图中的行(Dean Rasheed)这通过新的CREATE VIEW子句
WITH CHECK OPTION控制。原始发布条目 ·
9.4.0/changes/070允许使用ALTER TABLE、ALTER INDEX或ALTER MATERIALIZED VIEW的 ALL IN TABLESPACE ... SET TABLESPACE 形式把成组对象从一个表空间移动到另一个表空间 · 新功能
允许使用ALTER TABLE、ALTER INDEX或ALTER MATERIALIZED VIEW的
ALL IN TABLESPACE ... SET TABLESPACE形式把成组对象从一个表空间移动到另一个表空间(Stephen Frost)原始发布条目 ·
9.4.0/changes/073允许通过ALTER TABLE ... ALTER CONSTRAINT 更改外键约束的可延迟性 · 新功能
允许通过ALTER TABLE ...
ALTER CONSTRAINT更改外键约束的可延迟性(Simon Riggs)原始发布条目 ·
9.4.0/changes/074降低某些ALTER TABLE命令的锁强度 · 新功能
降低某些ALTER TABLE命令的锁强度(Simon Riggs、Noah Misch、Robert Haas)
具体而言,
VALIDATE CONSTRAINT、CLUSTER ON、SET WITHOUT CLUSTER、ALTER COLUMN SET STATISTICS、ALTER COLUMNSET(attribute_option)、ALTER COLUMN RESET(attribute_option)不再需要ACCESS EXCLUSIVE锁。原始发布条目 ·
9.4.0/changes/075允许在CREATE TABLESPACE中设置表空间选项 · 新功能
允许在CREATE TABLESPACE中设置表空间选项(Vik Fearing)
以前这些选项只能通过ALTER TABLESPACE设置。
原始发布条目 ·
9.4.0/changes/076允许CREATE AGGREGATE定义聚集转换状态数据的估计大小 · 新功能
允许CREATE AGGREGATE定义聚集转换状态数据的估计大小(Hadi Moshayedi)
恰当使用此功能可使规划器更好地估计聚集将使用多少内存。
原始发布条目 ·
9.4.0/changes/077修复 DROP IF EXISTS,使其在更多情况下避免对不存在对象报错 · BUG 修复
修复
DROP IF EXISTS,使其在更多情况下避免对不存在对象报错(Pavel Stehule、Dean Rasheed)原始发布条目 ·
9.4.0/changes/078改进系统关系的标识方式 · 新功能
改进系统关系的标识方式(Andres Freund、Robert Haas)
此前,一旦关系被移入
pg_catalog模式,就不能再修改或删除。原始发布条目 ·
9.4.0/changes/079支持随时间改变 UTC 偏移的时区缩写 · 新功能
支持随时间改变 UTC 偏移的时区缩写(Tom Lane)
此前,PostgreSQL 假定时区缩写(如
EST)关联的 UTC 偏移在任何特定区域设置的用法中永不改变。然而这一假设在现实世界中并不成立,因此引入了让区域缩写表示有时会变化的 UTC 偏移的能力。更新了时区缩写定义文件,在自 1970 年以来缩写的 UTC 偏移发生过变化的时区区域设置中使用此功能(依据 IANA 时区数据库)。在此类时区中,PostgreSQL 现在会根据给定日期为缩写关联正确的 UTC 偏移。原始发布条目 ·
9.4.0/changes/083新增 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()。原始发布条目 ·
9.4.0/changes/087新增 json_typeof(),返回 json 值的数据类型 · 新功能
新增
json_typeof(),返回json值的数据类型(Andrew Tipton)原始发布条目 ·
9.4.0/changes/088新增 pg_sleep_for(interval) 和 pg_sleep_until(timestamp),以更灵活地指定延迟 · 新功能
新增
pg_sleep_for(interval)和pg_sleep_until(timestamp),以更灵活地指定延迟(Vik Fearing、Julien Rouhaud)现有的
pg_sleep()函数只支持以秒为单位指定延迟。原始发布条目 ·
9.4.0/changes/089新增面向数组的 cardinality() 函数 · 新功能
新增面向数组的
cardinality()函数(Marko Tiikkaja)它返回数组中元素的总数,对于没有元素的数组则返回零。
原始发布条目 ·
9.4.0/changes/090新增从各个单独的值(而非字符串)构造 time、date、timestamp、timestamptz 和 interval 的函数 · 新功能
新增从各个单独的值(而非字符串)构造
time、date、timestamp、timestamptz和interval的函数(Pavel Stehule)这些函数的名称以
make_为前缀,例如make_date()。原始发布条目 ·
9.4.0/changes/093新增在 pg_class、pg_proc、pg_type 和 pg_operator 中查找对象的函数,它们不会对不存在的对象产生错误 · 新功能
新增在
pg_class、pg_proc、pg_type和pg_operator中查找对象的函数,它们不会对不存在的对象产生错误(Yugo Nagata、Nozomi Anzai、Robert Haas)例如,
to_regclass()类似于regclass输入函数在pg_class中进行查找,但对不存在的对象返回 NULL 而不是失败。原始发布条目 ·
9.4.0/changes/098新增函数 pg_filenode_relation(),允许更高效地从文件节点查找关系名 · 新功能
新增函数
pg_filenode_relation(),允许更高效地从文件节点查找关系名(Andres Freund)原始发布条目 ·
9.4.0/changes/099为 information_schema.parameters 视图新增 parameter_default 列 · 新功能
为
information_schema.parameters视图新增parameter_default列(Peter Eisentraut)原始发布条目 ·
9.4.0/changes/100使 information_schema.schemata 显示所有可访问的模式 · 新功能
使
information_schema.schemata显示所有可访问的模式(Peter Eisentraut)此前它只显示当前用户拥有的模式。
原始发布条目 ·
9.4.0/changes/101支持有序集(WITHIN GROUP)聚集 · 新功能
支持有序集(
WITHIN GROUP)聚集(Atri Sharma、Andrew Gierth、Tom Lane)原始发布条目 ·
9.4.0/changes/103新增标准有序集聚集 percentile_cont()、percentile_disc()、mode()、rank()、dense_rank()、percent_rank() 和 cume_dist() · 新功能
新增标准有序集聚集
percentile_cont()、percentile_disc()、mode()、rank()、dense_rank()、percent_rank()和cume_dist()(Atri Sharma、Andrew Gierth)原始发布条目 ·
9.4.0/changes/104允许多态聚集具有非多态的状态数据类型 · 新功能
允许多态聚集具有非多态的状态数据类型(Tom Lane)
这使得可以在 SQL 中正确声明诸如内置聚集
array_agg()之类的聚集。原始发布条目 ·
9.4.0/changes/106新增使用 GET DIAGNOSTICS 获取当前 PL/pgSQL 调用栈的能力 · 新功能
新增使用
GET DIAGNOSTICS获取当前 PL/pgSQL 调用栈的能力(Pavel Stehule、Stephen Frost)原始发布条目 ·
9.4.0/changes/109新增选项 print_strict_params,用于显示传递给违反 STRICT 约束的查询的参数 · 新功能
新增选项
print_strict_params,用于显示传递给违反STRICT约束的查询的参数(Marko Tiikkaja)原始发布条目 ·
9.4.0/changes/110新增变量 plpgsql.extra_warnings 和 plpgsql.extra_errors,用于启用额外的 PL/pgSQL 警告和错误 · 新功能
新增变量
plpgsql.extra_warnings和plpgsql.extra_errors,用于启用额外的 PL/pgSQL 警告和错误(Marko Tiikkaja、Petr Jelinek)目前只有关于被遮蔽变量的警告/错误可用。
原始发布条目 ·
9.4.0/changes/111使 libpq 的 PQconndefaults() 函数忽略无效的服务文件 · 新功能
使 libpq 的
PQconndefaults()函数忽略无效的服务文件(Steve Singer、Bruce Momjian)此前它遇到不正确的服务文件时会返回 NULL。
原始发布条目 ·
9.4.0/changes/112为createuser新增选项 -g,用于指定角色成员关系 · 新功能
为createuser新增选项
-g,用于指定角色成员关系(Christopher Browne)原始发布条目 ·
9.4.0/changes/114使带选项 -n 的pg_resetxlog输出当前值和可能被更改的值 · 新功能
使带选项
-n的pg_resetxlog输出当前值和可能被更改的值(Rajeev Rastogi)原始发布条目 ·
9.4.0/changes/116允许用 Control-C 中止在连接启动时挂起的 psql · 新功能
允许用 Control-C 中止在连接启动时挂起的 psql(Peter Eisentraut)
原始发布条目 ·
9.4.0/changes/123使 \d+ 只在表中存在 oid 列时才输出 OID 行 · 新功能
使
\d+只在表中存在oid列时才输出OID行(Bruce Momjian)此前,
oid列的存在与否总是会被报告。原始发布条目 ·
9.4.0/changes/126使 \d 显示被禁用的系统触发器 · 新功能
使
\d显示被禁用的系统触发器(Bruce Momjian)此前,如果禁用所有触发器,只有用户触发器会显示为已禁用。
原始发布条目 ·
9.4.0/changes/127修复 \copy,不再要求 stdin 与分号之间有空格 · BUG 修复
修复
\copy,不再要求stdin与分号之间有空格(Etsuro Fujita)原始发布条目 ·
9.4.0/changes/128在 \copy 结束时输出行数,就像 COPY 已经做的那样 · 新功能
在
\copy结束时输出行数,就像COPY已经做的那样(Kumar Rajeev Rastogi)原始发布条目 ·
9.4.0/changes/129修复 \conninfo,使其对使用 hostaddr 的连接显示服务器的 IP 地址 · BUG 修复
修复
\conninfo,使其对使用hostaddr的连接显示服务器的 IP 地址(Fujii Masao)此前在这些情况下
\conninfo无法显示服务器的 IP 地址。原始发布条目 ·
9.4.0/changes/130使 \s 显示其写入的历史文件名时不转换为绝对路径 · 新功能
使
\s显示其写入的历史文件名时不转换为绝对路径(Tom Lane)以前的代码试图把相对文件名转换为绝对路径用于显示,但经常出错。
原始发布条目 ·
9.4.0/changes/134允许pg_restore的选项 -I、-P、-T 和 -n 被多次指定 · 新功能
允许pg_restore的选项
-I、-P、-T和-n被多次指定(Heikki Linnakangas)这允许在一次操作中还原多个对象。
原始发布条目 ·
9.4.0/changes/135可选地为还原期间删除旧对象时发出的 DROP 命令添加 IF EXISTS 子句 · 新功能
可选地为还原期间删除旧对象时发出的
DROP命令添加IF EXISTS子句(Pavel Stehule)此变更避免在删除旧对象时出现不必要的错误。pg_dump、pg_dumpall和pg_restore的新选项
--if-exists只有在同时指定了--clean时才可用。原始发布条目 ·
9.4.0/changes/136新增 pg_basebackup 选项 --xlogdir,用于指定 pg_xlog 目录的位置 · 新功能
新增 pg_basebackup 选项
--xlogdir,用于指定pg_xlog目录的位置(Haribabu Kommi)原始发布条目 ·
9.4.0/changes/137允许 pg_basebackup 在备份副本中重定位表空间 · 新功能
允许 pg_basebackup 在备份副本中重定位表空间(Steeve Lennmark)
这对于在与主库相同的机器上使用 pg_basebackup 特别有用。
原始发布条目 ·
9.4.0/changes/138允许对网络流基础备份进行限速 · 新功能
允许对网络流基础备份进行限速(Antonin Houska)
这可以通过 pg_basebackup 的
--max-rate参数控制。原始发布条目 ·
9.4.0/changes/139改进元组冻结方式以保留取证信息 · 新功能
改进元组冻结方式以保留取证信息(Robert Haas、Andres Freund)
此变更消除了尽快冻结元组的主要障碍。检查元组标志位的代码将需要修改。
原始发布条目 ·
9.4.0/changes/140不再要求为标记有 PG_FUNCTION_INFO_V1 宏的函数编写函数原型 · 新功能
不再要求为标记有
PG_FUNCTION_INFO_V1宏的函数编写函数原型(Peter Eisentraut)此变更消除了编写样板原型的需要。注意,
PG_FUNCTION_INFO_V1宏必须出现在相应函数定义之前,以避免编译器警告。原始发布条目 ·
9.4.0/changes/141移除 SnapshotNow 和 HeapTupleSatisfiesNow() · 新功能
移除
SnapshotNow和HeapTupleSatisfiesNow()(Robert Haas)所有现有用法都已切换到更合适的快照类型。目录扫描现在使用 MVCC 快照。
原始发布条目 ·
9.4.0/changes/142新增 psprintf() 以简化字符串组合期间的内存分配 · 新功能
新增
psprintf()以简化字符串组合期间的内存分配(Peter Eisentraut、Tom Lane)原始发布条目 ·
9.4.0/changes/144支持 printf() 尺寸修饰符 z 以打印 size_t 值 · 新功能
支持
printf()尺寸修饰符z以打印size_t值(Andres Freund)原始发布条目 ·
9.4.0/changes/145更改 appendStringInfoVA() 的 API 以更好地使用 vsnprintf() · 新功能
更改
appendStringInfoVA()的 API 以更好地使用vsnprintf()(David Rowley、Tom Lane)原始发布条目 ·
9.4.0/changes/146移除对不再支持的平台 SINIX、Sun3 和 NS32K 的自旋锁支持 · 新功能
移除对不再支持的平台 SINIX、Sun3 和 NS32K 的自旋锁支持(Robert Haas)
原始发布条目 ·
9.4.0/changes/150减少 --disable-spinlocks 构建所需的信号量数量 · 新功能
减少
--disable-spinlocks构建所需的信号量数量(Robert Haas)原始发布条目 ·
9.4.0/changes/152用 Perl 重写 duplicate_oids Unix shell 脚本 · 新功能
用 Perl 重写 duplicate_oids Unix shell 脚本(Andrew Dunstan)
原始发布条目 ·
9.4.0/changes/153为客户端程序新增测试任何协议(TAP)测试 · 新功能
为客户端程序新增测试任何协议(TAP)测试(Peter Eisentraut)
目前,只有当向 configure 给定了
--enable-tap-tests选项时,make check-world才会运行这些测试。在未来的某个发行版中,这可能会成为默认行为。原始发布条目 ·
9.4.0/changes/154新增 make 目标 check-tests 和 installcheck-tests,允许选择要运行的个别测试 · 新功能
新增 make 目标
check-tests和installcheck-tests,允许选择要运行的个别测试(Andrew Dunstan)原始发布条目 ·
9.4.0/changes/155移除 maintainer-check makefile 规则 · 新功能
移除
maintainer-checkmakefile 规则(Peter Eisentraut)默认构建规则现在包含所有以前可选的测试。
原始发布条目 ·
9.4.0/changes/156改进 PGXS 模块的 VPATH 构建支持 · 新功能
改进 PGXS 模块的
VPATH构建支持(Cédric Villemain、Andrew Dunstan、Peter Eisentraut)原始发布条目 ·
9.4.0/changes/157新增一个 configure 标志,用于向 PG_VERSION 字符串追加自定义文本 · 新功能
新增一个 configure 标志,用于向
PG_VERSION字符串追加自定义文本(Oskari Saarenmaa)这对于构建自定义二进制文件的打包者很有用。
原始发布条目 ·
9.4.0/changes/159修复 Coverity 扫描器报告的各种轻微安全和健全性问题 · BUG 修复
修复 Coverity 扫描器报告的各种轻微安全和健全性问题(Stephen Frost)
原始发布条目 ·
9.4.0/changes/161改进用 Valgrind 测试 PostgreSQL 时对无效内存使用的检测 · 新功能
改进用 Valgrind 测试 PostgreSQL 时对无效内存使用的检测(Noah Misch)
原始发布条目 ·
9.4.0/changes/162改进 Emacs 示例配置文件 emacs.samples · 新功能
改进 Emacs 示例配置文件
emacs.samples(Peter Eisentraut)还向源代码树顶层添加了
.dir-locals.el。原始发布条目 ·
9.4.0/changes/163允许 pgindent 接受命令行形式的 typedef 列表 · 新功能
允许 pgindent 接受命令行形式的 typedef 列表(Bruce Momjian)
原始发布条目 ·
9.4.0/changes/164使 pgindent 更智能地处理预处理器条件语句周围的空行 · 新功能
使 pgindent 更智能地处理预处理器条件语句周围的空行(Bruce Momjian)
原始发布条目 ·
9.4.0/changes/165避免在 Cygwin 和 Mingw 构建中大多数对 dlltool 的使用 · 新功能
避免在 Cygwin 和 Mingw 构建中大多数对
dlltool的使用(Marco Atzeri、Hiroshi Inoue)原始发布条目 ·
9.4.0/changes/166新增pg_prewarm扩展,用于在服务器启动时把关系数据预加载到共享缓冲区缓存中 · 新功能
新增pg_prewarm扩展,用于在服务器启动时把关系数据预加载到共享缓冲区缓存中(Robert Haas)
这使系统能更快达到完全运行性能。
原始发布条目 ·
9.4.0/changes/168为auto_explain新增包含触发器执行时间的选项 · 新功能
为auto_explain新增包含触发器执行时间的选项(Horiguchi Kyotaro)
原始发布条目 ·
9.4.0/changes/171修复pgstattuple,使其不把来自未提交事务的行报告为死行 · BUG 修复
修复pgstattuple,使其不把来自未提交事务的行报告为死行(Robert Haas)
原始发布条目 ·
9.4.0/changes/172使pgstattuple函数使用 regclass 类型的参数 · 新功能
使pgstattuple函数使用
regclass类型的参数(Satoshi Nagayasu)虽然
text类型的参数仍受支持,但它们可能在未来某个主版本中被移除。原始发布条目 ·
9.4.0/changes/173改进pgrowlocks输出的一致性,使其更一致地遵循快照规则 · 新功能
改进pgrowlocks输出的一致性,使其更一致地遵循快照规则(Robert Haas)
原始发布条目 ·
9.4.0/changes/174允许pg_xlogdump使用 --follow 报告实时日志流 · 新功能
允许pg_xlogdump使用
--follow报告实时日志流(Heikki Linnakangas)原始发布条目 ·
9.4.0/changes/176把pg_upgrade的用户名(-U)选项传递给生成的分析脚本 · 新功能
把pg_upgrade的用户名(
-U)选项传递给生成的分析脚本(Bruce Momjian)原始发布条目 ·
9.4.0/changes/180移除 pgbench 脚本的行长限制 · 新功能
移除 pgbench 脚本的行长限制(Sawada Masahiko)
以前的行限制为
BUFSIZ。原始发布条目 ·
9.4.0/changes/181新增 pgbench 选项 --rate,用于控制事务速率 · 新功能
新增 pgbench 选项
--rate,用于控制事务速率(Fabien Coelho)原始发布条目 ·
9.4.0/changes/183新增 pgbench 选项 --progress,用于打印周期性进度报告 · 新功能
新增 pgbench 选项
--progress,用于打印周期性进度报告(Fabien Coelho)原始发布条目 ·
9.4.0/changes/184使 pg_stat_statements 使用文件而非共享内存来存储查询文本 · 新功能
使 pg_stat_statements 使用文件而非共享内存来存储查询文本(Peter Geoghegan)
这消除了以前对查询文本长度的限制,并允许默认跟踪更多数量的唯一语句。
原始发布条目 ·
9.4.0/changes/185允许报告 pg_stat_statements 的内部查询哈希标识符 · 新功能
允许报告 pg_stat_statements 的内部查询哈希标识符(Daniel Farina、Sameer Thakur、Peter Geoghegan)
原始发布条目 ·
9.4.0/changes/186新增获取除查询文本之外的所有 pg_stat_statements 信息的能力 · 新功能
新增获取除查询文本之外的所有 pg_stat_statements 信息的能力(Peter Geoghegan)
这使监控工具可以只为刚创建的条目获取查询文本,从而改进重复查询统计信息时的性能。
原始发布条目 ·
9.4.0/changes/187使 pg_stat_statements 忽略 DEALLOCATE 命令 · 新功能
使 pg_stat_statements 忽略
DEALLOCATE命令(Fabien Coelho)它已经忽略
PREPARE以及一般的规划时间,因此这样更一致。原始发布条目 ·
9.4.0/changes/188服务器关闭时把统计信息文件保存到 $PGDATA/pg_stat 而不是 $PGDATA/global · 新功能
服务器关闭时把统计信息文件保存到
$PGDATA/pg_stat而不是$PGDATA/global(Fujii Masao)原始发布条目 ·
9.4.0/changes/189
安全证据
共 36 条记录,来自官方安全矩阵及发布说明的提及。只有安全快照明确列出此分支时才显示修复版本;仅有提及不能确定漏洞适用性或新修复。
CVE-2019-3466 · pg_ctlcluster script in postgresql-common does not drop privileges when creating socket/statistics temporary directories · CVSS 8.4
A PostgreSQL superuser could escalate to root using a deficiency in the pg_ctlcluster command. pg_ctlcluster is a utility provided by the "postgresql-common" package that is installed with PostgreSQL on Debian and Ubuntu platforms.
以上保留官方英文漏洞说明。
本分支修复于:9.4.25。组件:packaging。
官方受影响分支记录:9.4。
AV:N/AC:L/PR:H/UI:R/S:C/C:H/I:H/A:H
CVE-2019-10211 · Windows installer bundled OpenSSL executes code from unprotected directory · CVSS 7.8
When the database server or libpq client library initializes SSL, libeay32.dll attempts to read configuration from a hard-coded directory. Typically, the directory does not exist, but any local user could create it and inject configuration. This configuration can direct OpenSSL to load and execute arbitrary code as the user running a PostgreSQL server or client. Most PostgreSQL client tools and libraries use libpq , and one can encounter this vulnerability by using any of them. This vulnerability is much like CVE-2019-5443 , but it originated independently. One can work around the vulnerability by setting environment variable OPENSSL_CONF to "NUL:/openssl.cnf" or any other name that cannot exist as a file. The PostgreSQL project thanks Daniel Gustafsson of the curl security team for reporting this problem.
以上保留官方英文漏洞说明。
本分支修复于:9.4.24。组件:packaging。
官方受影响分支记录:9.4。
AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
CVE-2019-10210 · Windows installer writes superuser password to unprotected temporary file · CVSS 6.7
The EnterpriseDB Windows installer writes a password to a temporary file in its installation directory, creates initial databases, and deletes the file. During those seconds while the file exists, a local attacker can read the PostgreSQL superuser password from the file. The PostgreSQL project thanks Noah Misch for reporting this problem.
以上保留官方英文漏洞说明。
本分支修复于:9.4.24。组件:packaging。
官方受影响分支记录:9.4。
AV:L/AC:H/PR:L/UI:R/S:U/C:H/I:H/A:H
CVE-2019-10208 · TYPE in pg_temp executes arbitrary SQL during SECURITY DEFINER execution · CVSS 7.5
Given a suitable SECURITY DEFINER function, an attacker can execute arbitrary SQL under the identity of the function owner. An attack requires EXECUTE permission on the function, which must itself contain a function call having inexact argument type match. For example, length('foo'::varchar) and length('foo') are inexact, while length('foo'::text) is exact. As part of exploiting this vulnerability, the attacker uses CREATE DOMAIN to create a type in a pg_temp schema. The attack pattern and fix are similar to that for CVE-2007-2138 . Writing SECURITY DEFINER functions continues to require following the considerations noted in the documentation: https://www.postgresql.org/docs/current/sql-createfunction.html#SQL-CREATEFUNCTION-SECURITY The PostgreSQL project thanks Tom Lane for reporting this problem.
以上保留官方英文漏洞说明。
本分支修复于:9.4.24。组件:core server。
官方受影响分支记录:9.4。
AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H
发布说明中的提及:
CVE-2019-10128 · EnterpriseDB Windows installer does not clear permissive ACL entries · CVSS 7.0
Due to both the EnterpriseDB and BigSQL Windows installers not locking down the permissions of the PostgreSQL binary installation directory and the data directory, an unprivileged Windows user account and an unprivileged PostgreSQL account could cause the PostgreSQL service account to execute arbitrary code. This vulnerability is present in all supported versions of PostgreSQL for these installers, and possibly exists in older versions. Both sets of installers have fixed the permissions for these directories for both new and existing installations. If you have installed PostgreSQL on Windows using other methods, we advise that you check that your PostgreSQL binary directories are writable only to trusted users and that your data directories are only accessible to trusted users. The PostgreSQL project thanks Conner Jones for reporting this problem.
以上保留官方英文漏洞说明。
本分支修复于:9.4.22。组件:packaging。
官方受影响分支记录:9.4。
AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H
CVE-2019-10127 · BigSQL Windows installer does not clear permissive ACL entries. · CVSS 7.0
Due to both the EnterpriseDB and BigSQL Windows installers not locking down the permissions of the PostgreSQL binary installation directory and the data directory, an unprivileged Windows user account and an unprivileged PostgreSQL account could cause the PostgreSQL service account to execute arbitrary code. This vulnerability is present in all supported versions of PostgreSQL for these installers, and possibly exists in older versions. Both sets of installers have fixed the permissions for these directories for both new and existing installations. If you have installed PostgreSQL on Windows using other methods, we advise that you check that your PostgreSQL binary directories are writable only to trusted users and that your data directories are only accessible to trusted users. The PostgreSQL project thanks Conner Jones for reporting this problem.
以上保留官方英文漏洞说明。
本分支修复于:9.4.22。组件:packaging。
官方受影响分支记录:9.4。
AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H