PostgreSQL 9.6
已停止支持 · 记录构建 9.6.24 · 2021-11-11
此大版本已停止支持,相关记录用于查阅历史;没有更新的安全记录不代表仍可安全运行。
- 首次正式发布
- 2016-09-29
- 支持结束
- 2021-11-11
- 已收录发布版本
- 25
- 原始发布说明条目
- 1105
手册与来源
PostgreSQL 9.6 本站手册 · 已加载 975 页。
手册加载时间:2026-09-27T00:10:45.258078。
发布说明快照:2026-09-26。安全证据快照:2026-09-26。PDF 链接按本地文件是否存在提供,历史版本的语言与 HTML 手册可能不同。生命周期参见官方版本政策。
升级注意事项
跨大版本升级需要导出/恢复或 pg_upgrade 等迁移方式,应阅读沿途大版本的发布说明与目标版本手册。小版本更新也可能要求额外操作,请核对对应发布的迁移说明。官方升级政策。
9.6.0 的兼容性变化 · 从首发到 9.6.24 的变化
9.6.0 的原始迁移说明
发布历史
每次发布的原始变更均独立保留。CVE 数量表示发布说明中的提及,可能包含后续纠正,不等于本次新修复漏洞数。
| 版本 | 日期/快照截止时间 | 全部变化 | BUG 修复 | 迁移条目 | 提及 CVE |
|---|---|---|---|---|---|
| 9.6.24 | 2021-11-11 | 40 | 18 | 0 | 2 |
| 9.6.23 | 2021-08-12 | 47 | 16 | 0 | 2 |
| 9.6.22 | 2021-05-13 | 23 | 13 | 0 | 2 |
| 9.6.21 | 2021-02-11 | 36 | 18 | 0 | 0 |
| 9.6.20 | 2020-11-12 | 36 | 10 | 0 | 3 |
| 9.6.19 | 2020-08-13 | 27 | 13 | 0 | 2 |
| 9.6.18 | 2020-05-14 | 38 | 18 | 0 | 0 |
| 9.6.17 | 2020-02-13 | 33 | 17 | 0 | 1 |
| 9.6.16 | 2019-11-14 | 53 | 21 | 0 | 0 |
| 9.6.15 | 2019-08-08 | 26 | 10 | 0 | 2 |
| 9.6.14 | 2019-06-20 | 17 | 11 | 0 | 0 |
| 9.6.13 | 2019-05-09 | 33 | 18 | 0 | 2 |
| 9.6.12 | 2019-02-14 | 44 | 24 | 0 | 0 |
| 9.6.11 | 2018-11-08 | 57 | 27 | 0 | 0 |
| 9.6.10 | 2018-08-09 | 33 | 17 | 0 | 2 |
| 9.6.9 | 2018-05-10 | 43 | 24 | 0 | 1 |
| 9.6.8 | 2018-03-01 | 8 | 4 | 0 | 1 |
| 9.6.7 | 2018-02-08 | 37 | 20 | 0 | 1 |
| 9.6.6 | 2017-11-09 | 38 | 20 | 0 | 3 |
| 9.6.5 | 2017-08-31 | 10 | 3 | 0 | 0 |
| 9.6.4 | 2017-08-10 | 60 | 30 | 0 | 4 |
| 9.6.3 | 2017-05-11 | 48 | 30 | 0 | 4 |
| 9.6.2 | 2017-02-09 | 76 | 47 | 0 | 0 |
| 9.6.1 | 2016-10-27 | 28 | 17 | 0 | 0 |
| 9.6.0 | 2016-09-29 | 214 | 6 | 13 | 0 |
首次发布变化
9.6.0 的原始条目,包含功能和兼容性变化。类别用于浏览,不是上游原始分类。
匹配 214 / 214 条原始变更。
改进 pg_stat_activity 视图关于进程在等待什么的信息 · 兼容性变化 · 迁移说明
改进
pg_stat_activity视图关于进程在等待什么的信息(Amit Kapila、Ildus Kurbangaliev)历史上只有进程在等待重量级锁时才显示为等待中。现在等待轻量级锁和缓冲区 pin 也会显示在
pg_stat_activity中。此外,所等待的锁类型现在也可见。这些更改用wait_event_type和wait_event列替换了waiting列。原始发布条目 ·
9.6.0/migration/001移除 PL/pgSQL 中抑制 RAISE 命令发出消息的 CONTEXT 最内层的“特性” · 兼容性变化 · 迁移说明
移除 PL/pgSQL 中抑制
RAISE命令发出消息的CONTEXT最内层的“特性”(Pavel Stehule)这一古老的向后兼容 hack 被认为已失去用处。
原始发布条目 ·
9.6.0/migration/004修复默认文本搜索解析器允许 email 和 host 记号中的前导数字 · 兼容性变化 · 迁移说明
修复默认文本搜索解析器允许
email和host记号中的前导数字(Artur Zakirov)大多数情况下这只会导致文本解析的少量变化。但如果你有这种地址频繁出现的数据,可能值得重建相关的
tsvector列和索引,使这种形式的地址能被文本搜索正确找到。原始发布条目 ·
9.6.0/migration/005扩展 contrib/unaccent 的标准 unaccent.rules 文件以处理 Unicode 已知的所有变音符号,并正确展开连字 · 兼容性变化 · 迁移说明
扩展
contrib/unaccent的标准unaccent.rules文件以处理 Unicode 已知的所有变音符号,并正确展开连字(Thomas Munro、Léonard Benedetti)以前的版本漏掉了转换一些较不常见的带变音符号字母。此外连字现在被展开为单独的字母。使用此规则文件的安装可能希望重建依赖其结果的
tsvector列和索引。原始发布条目 ·
9.6.0/migration/006从 CREATE ROLE 及相关命令中移除早已弃用的 CREATEUSER/NOCREATEUSER 选项 · 兼容性变化 · 迁移说明
从
CREATE ROLE及相关命令中移除早已弃用的CREATEUSER/NOCREATEUSER选项(Tom Lane)由于古老的向后兼容原因,
CREATEUSER实际上意味着SUPERUSER。这一直是(合理地)期望它表示CREATEROLE的人们的持续困惑源。它已被弃用十年,因此通过移除来修复问题。原始发布条目 ·
9.6.0/migration/007把以 pg_ 开头的角色名视为保留 · 兼容性变化 · 迁移说明
把以
pg_开头的角色名视为保留(Stephen Frost)现在不允许用户创建这种角色名。这防止与 initdb 创建的内建角色冲突。
原始发布条目 ·
9.6.0/migration/008把 information_schema.routines 视图中的列名 result_cast_character_set_name 改为 result_cast_char_set_name · 兼容性变化 · 迁移说明
把
information_schema.routines视图中的列名result_cast_character_set_name改为result_cast_char_set_name(Clément Prévost)SQL:2011 标准指定了较长的名字,但这看起来是个错误,因为相邻列名和其他
information_schema视图都使用较短的风格。原始发布条目 ·
9.6.0/migration/009psql 的 -c 选项不再隐含 --no-psqlrc · 兼容性变化 · 迁移说明
psql 的
-c选项不再隐含--no-psqlrc(Pavel Stehule、Catalin Iacob)显式写
--no-psqlrc(或其缩写-X)来获得旧行为。这样修改后的脚本在旧版本 psql 中仍能工作。原始发布条目 ·
9.6.0/migration/010改进 pg_restore 的 -t 选项匹配所有类型的关系,而不只是普通表 · 兼容性变化 · 迁移说明
改进 pg_restore 的
-t选项匹配所有类型的关系,而不只是普通表(Craig Ringer)原始发布条目 ·
9.6.0/migration/011更改 pg_controldata 及相关地方用于 NextXID 的显示格式 · 兼容性变化 · 迁移说明
更改 pg_controldata 及相关地方用于
NextXID的显示格式(Joe Conway、Bruce Momjian)以
number:number格式显示纪元加事务 ID 值。以前的格式number/number与 LSN 使用的格式惊人地相似。原始发布条目 ·
9.6.0/migration/012更新扩展函数在适当之处标记为并行安全 · 兼容性变化 · 迁移说明
更新扩展函数在适当之处标记为并行安全(Andreas Karlsson)
许多标准扩展已被更新以允许其函数在并行查询工作者进程中执行。这些更改在从以前版本 pg_upgrade 过来的数据库中不会生效,除非对每个这种扩展(在集簇的每个数据库中)应用
ALTER EXTENSION UPDATE。原始发布条目 ·
9.6.0/migration/013并行查询(Robert Haas、Amit Kapila、David Rowley 等许多人) · 新功能
并行查询(Robert Haas、Amit Kapila、David Rowley 等许多人)
在 9.6 中,PostgreSQL 引入了对大查询并行执行的初步支持。只有驱动表通过顺序扫描访问的严格只读查询可以并行化。哈希连接和嵌套循环可以并行执行,聚合(对受支持的聚合)也是。还有很多工作要做,但这已经是一组有用的特性。
并行查询执行(还)没有默认启用。要允许它,把新配置参数max_parallel_workers_per_gather设为大于零的值。对并行性使用的额外控制可通过其他新配置参数force_parallel_mode、parallel_setup_cost、parallel_tuple_cost和min_parallel_relation_size获得。
原始发布条目 ·
9.6.0/changes/001允许 GIN 索引构建有效利用大于 1 GB 的maintenance_work_mem设置 · 新功能
允许 GIN 索引构建有效利用大于 1 GB 的maintenance_work_mem设置(Robert Abraham、Teodor Sigaev)
原始发布条目 ·
9.6.0/changes/003把从 GIN 索引未决列表删除的页立即加入空闲空间映射 · 新功能
把从 GIN 索引未决列表删除的页立即加入空闲空间映射(Jeff Janes、Teodor Sigaev)
这减少了表不常清理时的膨胀。
原始发布条目 ·
9.6.0/changes/004添加 gin_clean_pending_list() 函数以允许手动调用 GIN 索引的未决列表清理 · 新功能
添加
gin_clean_pending_list()函数以允许手动调用 GIN 索引的未决列表清理(Jeff Janes)以前这种清理只作为清理或分析父表的副产品发生。
原始发布条目 ·
9.6.0/changes/005通过在执行外部排序步骤时使用快速排序而非替换选择排序来改进排序性能 · 性能改进
通过在执行外部排序步骤时使用快速排序而非替换选择排序来改进排序性能(Peter Geoghegan)
新方法对典型缓存大小和数据量更好地利用了 CPU 缓存。必要时可以通过新配置参数replacement_sort_tuples调整行为。
原始发布条目 ·
9.6.0/changes/008通过使用“缩写”键加速 uuid、bytea 和 char(n) 字段的排序 · 性能改进
通过使用“缩写”键加速
uuid、bytea和char(n)字段的排序(Peter Geoghegan)对非默认操作符类
text_pattern_ops、varchar_pattern_ops和bpchar_pattern_ops也添加了缩写键支持。有序集聚合的处理现在也可以利用缩写键。原始发布条目 ·
9.6.0/changes/010通过在排序期间把 TID 当作 64 位整数加速 CREATE INDEX CONCURRENTLY · 性能改进
通过在排序期间把 TID 当作 64 位整数加速
CREATE INDEX CONCURRENTLY(Peter Geoghegan)原始发布条目 ·
9.6.0/changes/011通过把缓冲区内容锁移入缓冲区描述符来改进性能 · 性能改进
通过把缓冲区内容锁移入缓冲区描述符来改进性能(Andres Freund、Simon Riggs)
原始发布条目 ·
9.6.0/changes/013用原子操作替换共享缓冲区头自旋锁以改进可伸缩性 · 新功能
用原子操作替换共享缓冲区头自旋锁以改进可伸缩性(Alexander Korotkov、Andres Freund)
原始发布条目 ·
9.6.0/changes/014对共享哈希表空闲列表分区以减少多 CPU 插槽服务器上的争用 · 新功能
对共享哈希表空闲列表分区以减少多 CPU 插槽服务器上的争用(Aleksander Alekseev)
原始发布条目 ·
9.6.0/changes/016减少备库服务器重放 btree 索引清理操作期间的互锁 · 新功能
减少备库服务器重放 btree 索引清理操作期间的互锁(Simon Riggs)
此更改避免了重放这种操作期间有时发生的显著复制延迟。
原始发布条目 ·
9.6.0/changes/017改进 ANALYZE 对有许多空值的列的估计 · 新功能
改进
ANALYZE对有许多空值的列的估计(Tomas Vondra、Alex Shulgin)此前
ANALYZE倾向于低估有许多NULL的列中非NULL不同值的数量,计算最常见值也不准确。原始发布条目 ·
9.6.0/changes/018使用外键关系推断连接谓词的选择率 · 新功能
使用外键关系推断连接谓词的选择率(Tomas Vondra、David Rowley)
如果表
t有外键限制,比如(a,b) REFERENCES r (x,y),那么诸如t.a = r.x AND t.b = r.y的WHERE条件对每个t行最多只能选择一个r行。规划器以前把这些AND条件视为独立的,因此常常严重误估选择率。现在它把WHERE条件与适用的外键约束比较并产生更好的估计。原始发布条目 ·
9.6.0/changes/020避免重新清理只包含冻结元组的页 · 新功能
避免重新清理只包含冻结元组的页(Masahiko Sawada、Robert Haas、Andres Freund)
以前防回卷清理必须访问表的每一页,即使无事可做的页。现在只包含已冻结元组的页会在表的可见性映射中被标识,即使在防止事务回卷时也可以被清理跳过。这应能大大降低维护大部分数据不变的大表的代价。
必要时可以用新的
DISABLE_PAGE_SKIPPING选项强制清理处理全冻结页。通常永远不需要这样做,但它可能有助于从可见性映射损坏中恢复。原始发布条目 ·
9.6.0/changes/021避免 VACUUM 期间无用的堆截断尝试 · 新功能
避免
VACUUM期间无用的堆截断尝试(Jeff Janes、Tom Lane)此更改在某些不可能截断的情况下避免取得排他表锁。主要好处是避免备库服务器上不必要的查询取消。
原始发布条目 ·
9.6.0/changes/022允许旧的 MVCC 快照在可配置的超时后失效 · 性能改进
允许旧的 MVCC 快照在可配置的超时后失效(Kevin Grittner)
通常,被删除的元组在最后一个可能“看到”它们的事务消失之前不能被清理物理移除。因此保持打开很长时间的事务可能因为空间无法回收而导致相当大的表膨胀。此特性允许通过新配置参数old_snapshot_threshold对 MVCC 快照保证有效的时间设置基于时间的限制。之后死元组就成为移除候选。使用过期快照的事务如果试图读取可能包含过这种数据的页,就会得到错误。
原始发布条目 ·
9.6.0/changes/023忽略功能上依赖于其他列的 GROUP BY 列 · 性能改进
忽略功能上依赖于其他列的
GROUP BY列(David Rowley)如果
GROUP BY子句包含非延迟主键的所有列以及同一表的其他列,那些其他列是冗余的、可以从分组中丢弃。这在许多常见场景中节省计算。原始发布条目 ·
9.6.0/changes/024按排序顺序执行检查点写 · 性能改进
按排序顺序执行检查点写(Fabien Coelho、Andres Freund)
以前检查点以脏页碰巧出现在共享缓冲区中的顺序(通常近乎随机)写出它们。这性能很差,特别是在旋转介质上。此更改使检查点驱动的写按文件和块号顺序执行,并在表空间之间平衡。
原始发布条目 ·
9.6.0/changes/026在可行之处,在可配置次数的写之后触发内核回写,以防止内核磁盘缓冲区中脏数据的积累 · 性能改进
在可行之处,在可配置次数的写之后触发内核回写,以防止内核磁盘缓冲区中脏数据的积累(Fabien Coelho、Andres Freund)
PostgreSQL 把数据写入内核的磁盘缓存,之后在适当时候被刷到物理存储。许多操作系统对此管理不善,允许大量脏数据积累后才决定一次全部刷出,导致新 I/O 请求长时间延迟直到刷写完成。此更改尝试通过在可配置间隔后显式请求数据刷写来缓解此问题。
在 Linux 上为此使用
sync_file_range(),并且该特性在 Linux 上默认打开,因为该函数几乎没有缺点。如果其他平台有msync()或posix_fadvise(),这种刷写能力也可用,但这些接口有一些不良副作用,因此该特性在非 Linux 平台上默认禁用。新配置参数backend_flush_after、bgwriter_flush_after、checkpoint_flush_after和wal_writer_flush_after控制这一行为。
原始发布条目 ·
9.6.0/changes/027通过在多个聚合有相同参数和转换函数时共享计算来改进聚合函数性能 · 性能改进
通过在多个聚合有相同参数和转换函数时共享计算来改进聚合函数性能(David Rowley)
例如
SELECT AVG(x), VARIANCE(x) FROM tab可以对两个聚合使用单次逐行计算。原始发布条目 ·
9.6.0/changes/028通过检查当前事务的快照而非 pg_clog 来决定源事务是否应被视为已提交,加速最近创建元组的可见性测试 · 性能改进
通过检查当前事务的快照而非
pg_clog来决定源事务是否应被视为已提交,加速最近创建元组的可见性测试(Jeff Janes、Tom Lane)原始发布条目 ·
9.6.0/changes/029改进短命预备事务的性能 · 性能改进
改进短命预备事务的性能(Stas Kelvich、Simon Riggs、Pavan Deolasee)
两阶段提交信息现在只在
PREPARE TRANSACTION期间写入 WAL,如果紧接着提交,将在COMMIT PREPARED期间从 WAL 读回。只有当未决事务在下一次检查点之前没有被提交或中止时才创建单独的状态文件。原始发布条目 ·
9.6.0/changes/031加速 timestamp、time 和 date 数据类型的输出函数 · 性能改进
加速
timestamp、time和date数据类型的输出函数(David Rowley、Andres Freund)原始发布条目 ·
9.6.0/changes/034避免重放取得 AccessExclusive 锁的操作期间热备查询的一些不必要取消 · 性能改进
避免重放取得
AccessExclusive锁的操作期间热备查询的一些不必要取消(Jeff Janes)原始发布条目 ·
9.6.0/changes/035当关系的扩展锁有争用时一次扩展关系多个块 · 性能改进
当关系的扩展锁有争用时一次扩展关系多个块(Dilip Kumar)
这通过减少争用改进可伸缩性。
原始发布条目 ·
9.6.0/changes/036增加 clog 缓冲区数量以获得更好的可伸缩性 · 性能改进
增加 clog 缓冲区数量以获得更好的可伸缩性(Amit Kapila、Andres Freund)
原始发布条目 ·
9.6.0/changes/037通过始终保持简单变量的 ParamListInfo 条目有效,加速 PL/pgSQL 中的表达式求值 · 性能改进
通过始终保持简单变量的
ParamListInfo条目有效,加速 PL/pgSQL 中的表达式求值(Tom Lane)原始发布条目 ·
9.6.0/changes/038避免在最近的 Windows 版本上把 SO_SNDBUF 设置降低到默认值以下 · 性能改进
避免在最近的 Windows 版本上把
SO_SNDBUF设置降低到默认值以下(Chen Huajun)原始发布条目 ·
9.6.0/changes/039在 Windows 上默认禁用update_process_title · 性能改进
在 Windows 上默认禁用update_process_title(Takayuki Tsunakawa)
更新进程标题的开销在 Windows 上比大多数其他平台大得多,而且由于大多数 Windows 用户没有能显示进程标题的工具,这样做也没那么有用。
原始发布条目 ·
9.6.0/changes/040添加 pg_stat_progress_vacuum 系统视图以为 VACUUM 操作提供进度报告 · 新功能
添加
pg_stat_progress_vacuum系统视图以为VACUUM操作提供进度报告(Amit Langote、Robert Haas、Vinayak Pokale、Rahila Syed)原始发布条目 ·
9.6.0/changes/041添加 pg_control_system()、pg_control_checkpoint()、pg_control_recovery() 和 pg_control_init() 函数以把 pg_control 的字段暴露给 SQL · 新功能
添加
pg_control_system()、pg_control_checkpoint()、pg_control_recovery()和pg_control_init()函数以把pg_control的字段暴露给 SQL(Joe Conway、Michael Paquier)原始发布条目 ·
9.6.0/changes/042在 pg_replication_slots 系统视图中添加 confirmed_flush_lsn 列 · 新功能
在
pg_replication_slots系统视图中添加confirmed_flush_lsn列(Marko Tiikkaja)原始发布条目 ·
9.6.0/changes/044添加 pg_stat_wal_receiver 系统视图以提供热备服务器 WAL 接收器进程的状态信息 · 新功能
添加
pg_stat_wal_receiver系统视图以提供热备服务器 WAL 接收器进程的状态信息(Michael Paquier)原始发布条目 ·
9.6.0/changes/045添加 pg_blocking_pids() 函数以可靠地识别哪些会话阻塞哪些会话 · 新功能
添加
pg_blocking_pids()函数以可靠地识别哪些会话阻塞哪些会话(Tom Lane)此函数返回阻塞具有给定进程 ID 的会话的任何会话的进程 ID 数组。历史上用户通过对
pg_locks视图自连接获得这种信息。但以任何正确性这样做都异常繁琐,而且并行查询的加入使旧方法完全不实用,因为锁可能被子工作者进程而非会话的主进程持有或等待。原始发布条目 ·
9.6.0/changes/046添加函数 pg_current_xlog_flush_location() 以暴露当前事务日志刷写位置 · 新功能
添加函数
pg_current_xlog_flush_location()以暴露当前事务日志刷写位置(Tomas Vondra)原始发布条目 ·
9.6.0/changes/047添加函数 pg_notification_queue_usage() 以报告 NOTIFY 队列的占用程度 · 新功能
添加函数
pg_notification_queue_usage()以报告NOTIFY队列的占用程度(Brendan Jurd)原始发布条目 ·
9.6.0/changes/048限制内存上下文统计转储的冗长程度 · 新功能
限制内存上下文统计转储的冗长程度(Tom Lane)
内存不足失败期间输出到 postmaster 日志的内存使用转储现在在有大量内存上下文时汇总统计,而不是可能生成非常大的报告。现在还有“总计”汇总行。
原始发布条目 ·
9.6.0/changes/049在 postmaster 日志中为更多类型的密码认证失败提供细节 · 新功能
在 postmaster 日志中为更多类型的密码认证失败提供细节(Tom Lane)
所有通常可达的密码认证失败情况现在都应在日志中提供具体的
DETAIL字段。原始发布条目 ·
9.6.0/changes/052允许处于空闲于事务状态过久的会话被自动终止 · 新功能
允许处于空闲于事务状态过久的会话被自动终止(Vik Fearing)
这一行为由新配置参数idle_in_transaction_session_timeout控制。它有助于防止被遗忘的事务过久持有锁或妨碍清理。
原始发布条目 ·
9.6.0/changes/055把checkpoint_timeout允许的最大值提高到 24 小时 · 新功能
把checkpoint_timeout允许的最大值提高到 24 小时(Simon Riggs)
原始发布条目 ·
9.6.0/changes/056允许 effective_io_concurrency 按表空间设置,以支持不同表空间有不同 I/O 特性的情况 · 新功能
允许
effective_io_concurrency按表空间设置,以支持不同表空间有不同 I/O 特性的情况(Julien Rouhaud)原始发布条目 ·
9.6.0/changes/057添加log_line_prefix选项 %n 以 Unix 纪元形式(带毫秒)打印当前时间 · 新功能
添加log_line_prefix选项
%n以 Unix 纪元形式(带毫秒)打印当前时间(Tomas Vondra、Jeff Davis)原始发布条目 ·
9.6.0/changes/058添加syslog_sequence_numbers和syslog_split_messages配置参数,为记录到 syslog 时的消息格式提供更多控制 · 新功能
添加syslog_sequence_numbers和syslog_split_messages配置参数,为记录到 syslog 时的消息格式提供更多控制(Peter Eisentraut)
原始发布条目 ·
9.6.0/changes/059添加 configure 选项 --with-systemd 以在服务器启动和停止时启用调用 sd_notify() · 新功能
添加 configure 选项
--with-systemd以在服务器启动和停止时启用调用sd_notify()(Peter Eisentraut)这允许使用
notify类型的 systemd 服务单元,大大简化了 PostgreSQL 在 systemd 下的管理。原始发布条目 ·
9.6.0/changes/061允许服务器的 SSL 密钥文件在由 root 拥有时具有组读访问 · 新功能
允许服务器的 SSL 密钥文件在由
root拥有时具有组读访问(Christoph Berg)以前我们坚持密钥文件由运行 PostgreSQL 服务器的用户拥有,但在配置为集中管理证书的一些系统(如 Debian)上这不方便。因此允许密钥文件由
root拥有并具有组读访问的情况。由操作系统管理员确保该组不包含任何不受信任的用户。原始发布条目 ·
9.6.0/changes/062如果 postmaster 死亡,强制后端退出 · 新功能
如果 postmaster 死亡,强制后端退出(Rajeev Rastogi、Robert Haas)
在正常情况下 postmaster 总是比其子进程活得长。如果 postmaster 因某种原因死亡,强制后端会话报错退出。以前现有的后端会继续运行直到其客户端断开,但那既不安全又低效。它还阻止新的 postmaster 启动,直到最后一个旧后端退出。后端将在等待客户端 I/O 时检测 postmaster 死亡,所以退出不是瞬时的,但不会晚于当前查询结束。
原始发布条目 ·
9.6.0/changes/063在报告约束违反失败之前检查可序列化冲突 · 新功能
在报告约束违反失败之前检查可序列化冲突(Thomas Munro)
使用可序列化事务隔离时,希望任何因并发事务导致的错误都表现为序列化失败,从而提示应用重试可能成功。不幸的是,对并发插入导致的重复键失败这不能可靠发生。此更改确保如果应用在事务中早些时候显式检查过冲突键的存在(且未找到),这种错误将被报告为序列化错误。
原始发布条目 ·
9.6.0/changes/064确保失效消息即使由未分配 XID 的事务发出也被记录到 WAL 中 · 新功能
确保失效消息即使由未分配 XID 的事务发出也被记录到 WAL 中(Andres Freund)
这修复了一些备库服务器上的事务没有注意到更改(如新索引)的边界情况。
原始发布条目 ·
9.6.0/changes/065防止多个进程并发尝试清理 GIN 索引的未决列表 · 新功能
防止多个进程并发尝试清理 GIN 索引的未决列表(Teodor Sigaev、Jeff Janes)
这是有意允许的,但它导致的竞态条件可能使清理遗漏它需要删除的索引条目。
原始发布条目 ·
9.6.0/changes/066允许同步复制支持多个同时的同步备库服务器而不只是一个 · 新功能
允许同步复制支持多个同时的同步备库服务器而不只是一个(Masahiko Sawada、Beena Emerson、Michael Paquier、Fujii Masao、Kyotaro Horiguchi)
提交被认为完成之前必须确认的备库服务器数量现在可作为synchronous_standby_names参数的一部分进行配置。
原始发布条目 ·
9.6.0/changes/067为配置参数synchronous_commit添加新设置 remote_apply · 新功能
为配置参数synchronous_commit添加新设置
remote_apply(Thomas Munro)在这种模式下,主库等待事务在备库服务器上被应用而不只是写入磁盘。这意味着你可以指望备库上启动的事务看到主库先前确认的所有提交。
原始发布条目 ·
9.6.0/changes/068为复制协议添加一项特性,并为 pg_create_physical_replication_slot() 添加相应选项,允许在创建复制槽时立即保留 WAL · 新功能
为复制协议添加一项特性,并为
pg_create_physical_replication_slot()添加相应选项,允许在创建复制槽时立即保留 WAL(Gurjeet Singh、Michael Paquier)这允许创建复制槽来保证基础备份所需的所有 WAL 都可用。
原始发布条目 ·
9.6.0/changes/069为pg_basebackup添加 --slot 选项 · 新功能
为pg_basebackup添加
--slot选项(Peter Eisentraut)这让 pg_basebackup 能使用为 WAL 流式传输定义的复制槽。基础备份完成后,为常规流复制选择同一槽允许新的备库服务器无缝启动。
原始发布条目 ·
9.6.0/changes/070扩展 pg_start_backup() 和 pg_stop_backup() 以支持非独占备份 · 新功能
扩展
pg_start_backup()和pg_stop_backup()以支持非独占备份(Magnus Hagander)原始发布条目 ·
9.6.0/changes/071允许返回元组集合的函数返回简单的 NULL · 新功能
允许返回元组集合的函数返回简单的
NULL(Andrew Gierth、Tom Lane)在
SELECT FROM function(...)的上下文中,返回复合值集合的函数以前不允许作为集合的一部分返回普通的NULL值。现在这是允许的并被解释为一行NULL。这避免了例如展开复合值数组时的边界错误。原始发布条目 ·
9.6.0/changes/072完全支持带多行 VALUES 的 INSERT 的目标列列表中的数组下标和字段选择 · 新功能
完全支持带多行
VALUES的INSERT的目标列列表中的数组下标和字段选择(Tom Lane)以前这种情况下如果同一目标列被提及多于一次就会失败,例如
INSERT INTO tab (x[1], x[2]) VALUES (...)。原始发布条目 ·
9.6.0/changes/073在适当之处把 SELECT 输出表达式的求值推迟到 ORDER BY 排序之后 · 新功能
在适当之处把
SELECT输出表达式的求值推迟到ORDER BY排序之后(Konstantin Knizhnik)此更改确保输出列表中的易变或昂贵函数按
ORDER BY建议的顺序执行,并且当有LIMIT子句时不会被求值超过需要的次数。以前如果排序由索引扫描或合并前排序执行这些性质成立,但由顶层排序执行时不成立。原始发布条目 ·
9.6.0/changes/074把记录已处理元组数的计数器加宽到 64 位 · 新功能
把记录已处理元组数的计数器加宽到 64 位(Andreas Scherbaum)
此更改允许命令标记(如
SELECT)正确报告超过 40 亿的元组数。这也适用于 PL/pgSQL 的GET DIAGNOSTICS ... ROW_COUNT命令。原始发布条目 ·
9.6.0/changes/075避免通过 MULE_INTERNAL 编码进行编码转换 · 新功能
避免通过
MULE_INTERNAL编码进行编码转换(Tom Lane)以前西里尔和中欧单字节编码的许多转换是通过转换到相关的
MULE_INTERNAL编码方案再转到目标编码完成的。除了低效之外,这意味着当转换遇到不可翻译字符时,错误消息会令人困惑地抱怨无法转换到或从MULE_INTERNAL,而不是用户可见的编码。原始发布条目 ·
9.6.0/changes/076只有当外部表将在同一角色 ID 下被访问时才考虑远程执行外部表的连接 · 新功能
只有当外部表将在同一角色 ID 下被访问时才考虑远程执行外部表的连接(Shigeru Hanada、Ashutosh Bapat、Etsuro Fujita)
以前外部连接下推基础设施把安全问题完全留给各个外部数据包装器,但这使 FDW 太容易无意中创建微妙的安全漏洞。因此改为核心代码决定哪个角色 ID 将访问每个表,除非所有相关关系的角色相同,否则不尝试连接下推。
原始发布条目 ·
9.6.0/changes/077允许 COPY 复制 INSERT/UPDATE/DELETE ... RETURNING 查询的输出 · 新功能
允许
COPY复制INSERT/UPDATE/DELETE...RETURNING查询的输出(Marko Tiikkaja)以前必须编写中间 CTE 才能得到这个结果。
原始发布条目 ·
9.6.0/changes/078引入 ALTER object DEPENDS ON EXTENSION · 新功能
引入
ALTER(Abhijit Menon-Sen)objectDEPENDS ON EXTENSION此命令允许把数据库对象标记为依赖于某个扩展,使它在扩展被删除时自动删除(不需要
CASCADE)。但该对象不是扩展的一部分,因此 pg_dump 会单独转储它。原始发布条目 ·
9.6.0/changes/079使 ALTER object SET SCHEMA 在对象已位于请求的模式中时不做任何事,而不是像历史上对大多数对象类型那样抛出错误 · 新功能
使
ALTER在对象已位于请求的模式中时不做任何事,而不是像历史上对大多数对象类型那样抛出错误(Marti Raudsepp)objectSET SCHEMA原始发布条目 ·
9.6.0/changes/080为 ALTER OPERATOR 添加选项以允许更改与现有操作符关联的选择率函数 · 新功能
为
ALTER OPERATOR添加选项以允许更改与现有操作符关联的选择率函数(Yury Zhuravlev)原始发布条目 ·
9.6.0/changes/081为 ALTER TABLE ADD COLUMN 添加 IF NOT EXISTS 选项 · 新功能
为
ALTER TABLE ADD COLUMN添加IF NOT EXISTS选项(Fabrízio de Royes Mello)原始发布条目 ·
9.6.0/changes/082降低 ALTER TABLE 在设置 fillfactor 和自动清理相关关系选项时所需的锁强度 · 新功能
降低
ALTER TABLE在设置 fillfactor 和自动清理相关关系选项时所需的锁强度(Fabrízio de Royes Mello、Simon Riggs)原始发布条目 ·
9.6.0/changes/083引入 CREATE ACCESS METHOD 以允许扩展创建索引访问方法 · 新功能
引入
CREATE ACCESS METHOD以允许扩展创建索引访问方法(Alexander Korotkov、Petr Jelínek)原始发布条目 ·
9.6.0/changes/084为 CREATE EXTENSION 添加 CASCADE 选项以自动创建所请求扩展依赖的任何扩展 · 新功能
为
CREATE EXTENSION添加CASCADE选项以自动创建所请求扩展依赖的任何扩展(Petr Jelínek)原始发布条目 ·
9.6.0/changes/085使 CREATE TABLE ... LIKE 在任何源表有 OID 列时包含 OID 列 · 新功能
使
CREATE TABLE ... LIKE在任何源表有OID列时包含 OID 列(Bruce Momjian)原始发布条目 ·
9.6.0/changes/086如果 CHECK 约束在表创建命令中被声明为 NOT VALID,自动把它标记为有效 · 新功能
如果
CHECK约束在表创建命令中被声明为NOT VALID,自动把它标记为有效(Amit Langote、Amul Sul)这是安全的,因为表没有现有行。这与
FOREIGN KEY约束的长期行为一致。原始发布条目 ·
9.6.0/changes/087修复 DROP OPERATOR 清除指向被删除操作符的 pg_operator.oprcom 和 pg_operator.oprnegate 链接 · BUG 修复
修复
DROP OPERATOR清除指向被删除操作符的pg_operator.oprcom和pg_operator.oprnegate链接(Roma Sokolov)以前这种链接保持原样,在被删除操作符的
OID被复用于另一个操作符这种不太可能的事件中可能造成问题。原始发布条目 ·
9.6.0/changes/088不在 EXPLAIN 输出中两次显示同一子计划 · 新功能
不在
EXPLAIN输出中两次显示同一子计划(Tom Lane)某些情况下(通常涉及索引条件中的 SubPlan 节点),
EXPLAIN会两次打印同一子计划的数据。原始发布条目 ·
9.6.0/changes/089禁止在系统列上创建索引,OID 列除外 · 新功能
禁止在系统列上创建索引,
OID列除外(David Rowley)这种索引从未被视为受支持,而且很可能行为不当,因为系统可能在不更新索引的情况下更改元组的系统列字段。但以前没有防止创建它们的错误检查。
原始发布条目 ·
9.6.0/changes/090使用权限系统管理对敏感函数的访问 · 新功能
使用权限系统管理对敏感函数的访问(Stephen Frost)
以前许多安全敏感函数包含硬编码的检查,在被非超级用户调用时会抛出错误。这迫使一些相对平常的任务使用超级用户角色。硬编码的错误检查现已移除,改为让 initdb 撤销这些函数上的公共
EXECUTE权限。这允许安装选择把这种函数的使用权授予不需要全部超级用户权限的可信角色。原始发布条目 ·
9.6.0/changes/091允许在数组切片说明符中省略一个或两个边界,例如 array_col[3:] · 新功能
允许在数组切片说明符中省略一个或两个边界,例如
array_col[3:](Yury Zhuravlev)省略的边界被当作相应数组下标的上限或下限。这使许多常见用例的指定更简单。
原始发布条目 ·
9.6.0/changes/094更谨慎地处理超出范围的日期和时间戳 · 新功能
更谨慎地处理超出范围的日期和时间戳(Vitaly Burovoy)
此更改防止对非常接近实现限制的
timestamp with time zone值出现意外的超出范围错误。以前“同一”值可能被接受也可能不被接受,取决于timezone设置,这意味着转储和重新装载可能在一个先前被接受的值上失败。现在限制根据等价的 UTC 时间而非本地时间执行,因此与timezone无关。此外,PostgreSQL 现在更谨慎地检测计算新日期或时间戳值的操作(如
date+integer)中的溢出。原始发布条目 ·
9.6.0/changes/095对几何数据类型,确保 infinity 和 NaN 分量值在输入和输出期间被一致处理 · 新功能
对几何数据类型,确保
infinity和NaN分量值在输入和输出期间被一致处理(Tom Lane)这种值现在总是与它们在简单
float8列中打印的方式相同地打印,输入时以相同方式接受。以前行为与平台相关。原始发布条目 ·
9.6.0/changes/096在正则表达式中,如果表面上的三位八进制转义 \nnn 会超过 377(十进制 255),就假定它是两位八进制转义 · 新功能
在正则表达式中,如果表面上的三位八进制转义
\nnn会超过 377(十进制 255),就假定它是两位八进制转义(Tom Lane)这使行为与当前的 Tcl 版本匹配。
原始发布条目 ·
9.6.0/changes/099添加事务 ID 操作符 xid <> xid 和 xid <> int4,以与相应的相等操作符保持一致 · 新功能
添加事务 ID 操作符
xid<>xid和xid<>int4,以与相应的相等操作符保持一致(Michael Paquier)原始发布条目 ·
9.6.0/changes/100添加 jsonb_insert() 函数,用于向 jsonb 数组插入新元素,或向 jsonb 对象插入此前不存在的键 · 新功能
添加
jsonb_insert()函数,用于向jsonb数组插入新元素,或向jsonb对象插入此前不存在的键(Dmitry Dolgov)原始发布条目 ·
9.6.0/changes/101提高 ln()、log()、exp() 和 pow() 函数在 numeric 类型上的计算精度 · 新功能
提高
ln()、log()、exp()和pow()函数在numeric类型上的计算精度(Dean Rasheed)原始发布条目 ·
9.6.0/changes/102添加 scale(numeric) 函数以提取 numeric 值的显示标度 · 新功能
添加
scale(numeric)函数以提取numeric值的显示标度(Marko Tiikkaja)原始发布条目 ·
9.6.0/changes/103确保三角函数按照 POSIX 标准处理 infinity 和 NaN 输入 · 新功能
确保三角函数按照 POSIX 标准处理
infinity和NaN输入(Dean Rasheed)POSIX 标准说这些函数对
NaN输入应返回NaN,对包括infinity在内的超出范围输入应抛出错误。以前我们的行为随平台而异。原始发布条目 ·
9.6.0/changes/105使 to_timestamp(float8) 把浮点 infinity 转换为时间戳 infinity · 新功能
使
to_timestamp(float8)把浮点infinity转换为时间戳infinity(Vitaly Burovoy)以前它对无穷输入只会失败。
原始发布条目 ·
9.6.0/changes/106为 tsvector 数据添加新函数 · 新功能
为
tsvector数据添加新函数(Stas Kelvich)新函数是
ts_delete()、ts_filter()、unnest()、tsvector_to_array()、array_to_tsvector(),以及只为指定词素设置权重的setweight()变体。原始发布条目 ·
9.6.0/changes/107允许 ts_stat() 和 tsvector_update_trigger() 对与预期参数类型二进制兼容的类型(而不只是恰好该类型)的值进行操作;例如在期望 text 之处允许 citext · 新功能
允许
ts_stat()和tsvector_update_trigger()对与预期参数类型二进制兼容的类型(而不只是恰好该类型)的值进行操作;例如在期望text之处允许citext(Teodor Sigaev)原始发布条目 ·
9.6.0/changes/108添加可变参数函数 num_nulls() 和 num_nonnulls(),统计其参数中空或非空的数量 · 新功能
添加可变参数函数
num_nulls()和num_nonnulls(),统计其参数中空或非空的数量(Marko Tiikkaja)一个用法示例是
CHECK(num_nonnulls(a,b,c) = 1),断言 a,b,c 中恰好有一个不为NULL。这些函数还可用于统计数组中空或非空元素的数量。原始发布条目 ·
9.6.0/changes/109添加函数 parse_ident() 以把限定的、可能带引号的 SQL 标识符拆分成各部分 · 新功能
添加函数
parse_ident()以把限定的、可能带引号的 SQL 标识符拆分成各部分(Pavel Stehule)原始发布条目 ·
9.6.0/changes/110在 to_number() 中,把 V 格式代码解释为除以 10 的 V 后数字次数幂 · 新功能
在
to_number()中,把V格式代码解释为除以 10 的V后数字次数幂(Bruce Momjian)这使它以与
to_char()相逆的方式操作。原始发布条目 ·
9.6.0/changes/111添加 pg_size_bytes() 函数以把人类可读的大小字符串转换为数字 · 新功能
添加
pg_size_bytes()函数以把人类可读的大小字符串转换为数字(Pavel Stehule、Vitaly Burovoy、Dean Rasheed)此函数把
pg_size_pretty()产生的字符串转换为字节。一个用法示例是SELECT oid::regclass FROM pg_class WHERE pg_total_relation_size(oid) > pg_size_bytes('10 GB')。原始发布条目 ·
9.6.0/changes/113在 pg_size_pretty() 中,负数的格式化与正数相似 · 新功能
在
pg_size_pretty()中,负数的格式化与正数相似(Adrian Vondendriesch)以前负数从不缩写,只是以字节打印。
原始发布条目 ·
9.6.0/changes/114为 current_setting() 函数添加可选的 missing_ok 参数 · 新功能
为
current_setting()函数添加可选的missing_ok参数(David Christensen)这允许对无法识别的参数名避免错误,改为返回
NULL。原始发布条目 ·
9.6.0/changes/115更改各种目录检查函数对无效输入返回 NULL · 新功能
更改各种目录检查函数对无效输入返回
NULL(Michael Paquier)pg_get_viewdef()现在给定无效的视图OID时返回NULL,几个类似函数对坏输入同样返回NULL。以前这种情况通常导致 “cache lookup failed” 错误,这些错误本不应在面向用户的情况中出现。原始发布条目 ·
9.6.0/changes/116修复 pg_replication_origin_xact_reset() 使之不带任何参数 · BUG 修复
修复
pg_replication_origin_xact_reset()使之不带任何参数(Fujii Masao)文档说它没有参数,C 代码也不期望任何参数,但
pg_proc中的条目错误地指定了两个参数。原始发布条目 ·
9.6.0/changes/117扩展 PL/Python 的错误报告和消息报告函数,允许指定主错误消息之外的其他消息字段 · 新功能
扩展 PL/Python 的错误报告和消息报告函数,允许指定主错误消息之外的其他消息字段(Pavel Stehule)
原始发布条目 ·
9.6.0/changes/119允许 PL/Python 函数通过 SPI 递归调用自身,并修复在一个查询中调用多个返回集合的 PL/Python 函数时的行为 · BUG 修复
允许 PL/Python 函数通过 SPI 递归调用自身,并修复在一个查询中调用多个返回集合的 PL/Python 函数时的行为(Alexey Grishchenko、Tom Lane)
原始发布条目 ·
9.6.0/changes/120修复 PL/Python 中的会话生命周期内存泄漏 · BUG 修复
修复 PL/Python 中的会话生命周期内存泄漏(Heikki Linnakangas、Haribabu Kommi、Tom Lane)
原始发布条目 ·
9.6.0/changes/121使 PL/Tcl 现代化,使用 Tcl 的“对象” API 而非简单字符串 · 新功能
使 PL/Tcl 现代化,使用 Tcl 的“对象” API 而非简单字符串(Jim Nasby、Karl Lehenbauer)
这在某些情况下可以显著改进性能。注意 PL/Tcl 现在要求 Tcl 8.4 或更新版本。
原始发布条目 ·
9.6.0/changes/122在 PL/Tcl 中,使数据库报告的错误在 Tcl 的 errorCode 全局变量中返回附加信息 · 新功能
在 PL/Tcl 中,使数据库报告的错误在 Tcl 的
errorCode全局变量中返回附加信息(Jim Nasby、Tom Lane)此特性遵循 Tcl 返回错误辅助数据的惯例。
原始发布条目 ·
9.6.0/changes/123修复 PL/Tcl 在数据库编码和 UTF-8(Tcl 所期望的)之间执行编码转换 · BUG 修复
修复 PL/Tcl 在数据库编码和
UTF-8(Tcl 所期望的)之间执行编码转换(Tom Lane)以前字符串不经转换直接传递,当数据库编码不是
UTF-8时导致非ASCII字符的错误行为。原始发布条目 ·
9.6.0/changes/124在错误和通知消息中添加 severity 字段的未本地化版本 · 新功能
在错误和通知消息中添加 severity 字段的未本地化版本(Tom Lane)
此更改允许客户端代码确定错误或通知的严重性,而不必担心 severity 字符串的本地化变体。
原始发布条目 ·
9.6.0/changes/125在 libpq 中引入一项特性,可以始终或只对非错误消息抑制消息的 CONTEXT 字段 · 新功能
在 libpq 中引入一项特性,可以始终或只对非错误消息抑制消息的
CONTEXT字段(Pavel Stehule)PQerrorMessage()的默认行为现在只对错误打印CONTEXT。新函数PQsetErrorContextVisibility()可用于调整这一点。原始发布条目 ·
9.6.0/changes/126在 libpq 中添加以不同详细级别重新生成错误消息的支持 · 新功能
在 libpq 中添加以不同详细级别重新生成错误消息的支持(Alex Shulgin)
这通过新函数
PQresultVerboseErrorMessage()完成。这支持 psql 的新\errverbose特性,对其他客户端也可能有用。原始发布条目 ·
9.6.0/changes/127修复 ecpg 的词法分析器处理预处理指令行上注释中的换行 · BUG 修复
修复 ecpg 的词法分析器处理预处理指令行上注释中的换行(Michael Meskes)
原始发布条目 ·
9.6.0/changes/129为pg_dump和pg_restore添加 --strict-names 选项 · 新功能
为pg_dump和pg_restore添加
--strict-names选项(Pavel Stehule)此选项使程序在
-t或-n选项没有匹配时报怨,而不是静默地不做任何事。原始发布条目 ·
9.6.0/changes/130在 pg_dump 中,转储对系统对象的本地权限分配更改 · 新功能
在 pg_dump 中,转储对系统对象的本地权限分配更改(Stephen Frost)
虽然超级user总是可以更改内建或扩展创建对象的权限分配,但这种更改以前在转储和重新装载中丢失。现在 pg_dump 识别并转储这种更改。(但这只在从 9.6 或更晚服务器转储时有效。)
原始发布条目 ·
9.6.0/changes/131允许 pg_dump 转储扩展拥有的模式中的非扩展拥有对象 · 新功能
允许 pg_dump 转储扩展拥有的模式中的非扩展拥有对象(Martín Marqués)
以前这种对象被忽略,因为被错误地假定属于拥有其模式的扩展。
原始发布条目 ·
9.6.0/changes/132在 pg_dump 输出中,对只在每表内唯一命名的对象类型(例如触发器)的对象标记中包含表名 · 新功能
在 pg_dump 输出中,对只在每表内唯一命名的对象类型(例如触发器)的对象标记中包含表名(Peter Eisentraut)
原始发布条目 ·
9.6.0/changes/133支持多个 -c 和 -f 命令行选项 · 新功能
支持多个
-c和-f命令行选项(Pavel Stehule、Catalin Iacob)指定的操作按给出选项的顺序执行,然后 psql 终止。
原始发布条目 ·
9.6.0/changes/134添加以交叉表显示打印查询结果的 \crosstabview 命令 · 新功能
添加以交叉表显示打印查询结果的
\crosstabview命令(Daniel Vérité)在交叉表显示中,来自一个查询结果列的数据值被放在一个网格中,其列和行标题来自其他查询结果列。
原始发布条目 ·
9.6.0/changes/135添加以完整详细程度显示最后一个服务器错误的 \errverbose 命令 · 新功能
添加以完整详细程度显示最后一个服务器错误的
\errverbose命令(Alex Shulgin)这在得到意外错误之后很有用——不再需要调整
VERBOSITY变量并重现失败来查看默认不显示的错误字段。原始发布条目 ·
9.6.0/changes/136添加用于编辑和显示视图定义的 \ev 和 \sv 命令 · 新功能
添加用于编辑和显示视图定义的
\ev和\sv命令(Petr Korobeinikov)它们与现有的用于函数的
\ef和\sf命令平行。原始发布条目 ·
9.6.0/changes/137添加执行查询并把结果重新作为新查询提交的 \gexec 命令 · 新功能
添加执行查询并把结果重新作为新查询提交的
\gexec命令(Corey Huinker)原始发布条目 ·
9.6.0/changes/138允许 \pset C string 设置表标题,与 \C string 一致 · 新功能
允许
\pset C设置表标题,与string\C一致(Bruce Momjian)string原始发布条目 ·
9.6.0/changes/139在 \pset expanded auto 模式下,对只有一列的查询结果不使用扩展格式 · 新功能
在
\pset expanded auto模式下,对只有一列的查询结果不使用扩展格式(Andreas Karlsson、Robert Haas)原始发布条目 ·
9.6.0/changes/140改进 \watch 命令输出的头 · 新功能
改进
\watch命令输出的头(Michael Paquier、Tom Lane)包括
\pset title字符串(如果已设置),并把头部预制部分缩短为。此外时间戳格式现在遵循 psql 的区域环境。timestamp(everyNs)原始发布条目 ·
9.6.0/changes/141改进 Tab 补全逻辑以考虑整个输入查询,而不只是当前行 · 新功能
改进 Tab 补全逻辑以考虑整个输入查询,而不只是当前行(Tom Lane)
以前把命令拆成多行会击败任何需要看到前几行单词的 Tab 补全规则。
原始发布条目 ·
9.6.0/changes/142Tab 补全行为的大量小改进 · 新功能
Tab 补全行为的大量小改进(Peter Eisentraut、Vik Fearing、Kevin Grittner、Kyotaro Horiguchi、Jeff Janes、Andreas Karlsson、Fujii Masao、Thomas Munro、Masahiko Sawada、Pavel Stehule)
原始发布条目 ·
9.6.0/changes/143添加 PROMPT 选项 %p 以插入所连接后端的进程 ID · 新功能
添加
PROMPT选项%p以插入所连接后端的进程 ID(Julien Rouhaud)原始发布条目 ·
9.6.0/changes/144引入一项特性,可以始终或只对非错误消息抑制消息的 CONTEXT 字段 · 新功能
引入一项特性,可以始终或只对非错误消息抑制消息的
CONTEXT字段(Pavel Stehule)只对错误打印
CONTEXT现在是默认行为。可以通过设置特殊变量SHOW_CONTEXT更改。原始发布条目 ·
9.6.0/changes/145pgbench 脚本中的 SQL 命令现在以分号而非换行结束 · 新功能
pgbench 脚本中的 SQL 命令现在以分号而非换行结束(Kyotaro Horiguchi、Tom Lane)
此更改允许脚本中的 SQL 命令跨多行。现有的自定义脚本需要修改,在每个还没有分号的行尾添加分号。(这样做不会破坏脚本在旧版本 pgbench 中的使用。)
原始发布条目 ·
9.6.0/changes/147允许调用内建脚本的多个副本,而不只是自定义脚本 · 新功能
允许调用内建脚本的多个副本,而不只是自定义脚本(Fabien Coelho)
这通过新的
-b开关完成,它对自定义脚本的作用类似于-f。原始发布条目 ·
9.6.0/changes/150允许更改脚本的选择概率(权重) · 新功能
允许更改脚本的选择概率(权重)(Fabien Coelho)
当指定多个脚本时,每个 pgbench 事务随机选择一个执行。以前这总是以均匀概率完成,但现在可以为不同脚本指定不同的选择概率。
原始发布条目 ·
9.6.0/changes/151在多脚本运行中为每个脚本收集统计信息 · 新功能
在多脚本运行中为每个脚本收集统计信息(Fabien Coelho)
此特性为现有的全局和逐命令统计输出添加了一个中间细节级别。
原始发布条目 ·
9.6.0/changes/152添加 --progress-timestamp 选项以用 Unix 纪元时间戳报告进度,而不是自运行开始以来的时间 · 新功能
添加
--progress-timestamp选项以用 Unix 纪元时间戳报告进度,而不是自运行开始以来的时间(Fabien Coelho)原始发布条目 ·
9.6.0/changes/153允许客户端连接数(-c)不必是线程数(-j)的精确倍数 · 新功能
允许客户端连接数(
-c)不必是线程数(-j)的精确倍数(Fabien Coelho)原始发布条目 ·
9.6.0/changes/154使用 -T 选项时,在指定时间结束时及时停止 · 新功能
使用
-T选项时,在指定时间结束时及时停止(Fabien Coelho)以前指定低事务速率可能导致 pgbench 等待明显长于指定的时间。
原始发布条目 ·
9.6.0/changes/155改进 initdb 引导后阶段的错误报告 · 新功能
改进 initdb 引导后阶段的错误报告(Tom Lane)
以前这里的错误导致把整个输入文件报告为“失败的查询”;现在只报告当前查询。为获得期望的行为, initdb 输入文件中的查询必须用空行分隔。
原始发布条目 ·
9.6.0/changes/156通过为所有引导后步骤只使用一个独立后端会话来加速 initdb · 性能改进
通过为所有引导后步骤只使用一个独立后端会话来加速 initdb(Tom Lane)
原始发布条目 ·
9.6.0/changes/157移除过时的 heap_formtuple/ heap_modifytuple/ heap_deformtuple 函数 · 新功能
移除过时的
heap_formtuple/heap_modifytuple/heap_deformtuple函数(Peter Geoghegan)原始发布条目 ·
9.6.0/changes/159添加宏使 AllocSetContextCreate() 调用更简单、更安全 · 新功能
添加宏使
AllocSetContextCreate()调用更简单、更安全(Tom Lane)现在不推荐为内存上下文写出各个大小参数,改为使用新宏
ALLOCSET_DEFAULT_SIZES、ALLOCSET_SMALL_SIZES或ALLOCSET_START_SMALL_SIZES之一。但现有代码仍然工作。原始发布条目 ·
9.6.0/changes/160在头文件中无条件使用 static inline 函数 · 新功能
在头文件中无条件使用
static inline函数(Andres Freund)这对非常老的编译器可能导致警告和/或浪费代码空间,但记法上的改进看来值得。
原始发布条目 ·
9.6.0/changes/161改进 TAP 测试基础设施 · 新功能
改进 TAP 测试基础设施(Michael Paquier、Craig Ringer、Álvaro Herrera、Stephen Frost)
值得注意的是,现在可以使用此基础设施测试恢复场景。
原始发布条目 ·
9.6.0/changes/162改进 psql 的 Tab 补全代码基础设施 · 新功能
改进 psql 的 Tab 补全代码基础设施(Thomas Munro、Michael Paquier)
Tab 补全规则现在编写起来相当容易,也更紧凑。
原始发布条目 ·
9.6.0/changes/164把 pg_shseclabel 系统目录钉入缓存,使它在连接认证期间可被访问 · 新功能
把
pg_shseclabel系统目录钉入缓存,使它在连接认证期间可被访问(Adam Brightwell)核心代码不把此目录用于认证,但扩展可能希望查询它。
原始发布条目 ·
9.6.0/changes/165重构索引访问方法 API,在 C 层面隐藏其大部分 · 新功能
重构索引访问方法 API,在 C 层面隐藏其大部分(Alexander Korotkov、Andrew Gierth)
此更改把索引 AM API 现代化,使其看起来更像我们为外部数据包装器和 tablesample 处理器采用的设计。这简化了 C 代码并使在可安装扩展中定义索引访问方法实际可行。结果是
pg_am系统目录的大多数列消失了。添加了新的检查函数,允许 SQL 查询确定以前可以从pg_am发现的索引 AM 属性。。原始发布条目 ·
9.6.0/changes/166添加 pg_init_privs 系统目录以保存 initdb 创建和扩展创建对象的原始权限 · 新功能
添加
pg_init_privs系统目录以保存 initdb 创建和扩展创建对象的原始权限(Stephen Frost)此基础设施允许 pg_dump 转储安装可能对附加到系统对象的权限所做的更改。以前这种更改在转储和重新装载中丢失,但现在被保留。
原始发布条目 ·
9.6.0/changes/167更改扩展分配自定义 LWLock 的方式 · 新功能
更改扩展分配自定义
LWLock的方式(Amit Kapila、Robert Haas)RequestAddinLWLocks()函数被移除,替换为RequestNamedLWLockTranche()。这允许更好地标识自定义LWLock,也更不容易出错。原始发布条目 ·
9.6.0/changes/168引入可扩展节点类型 · 新功能
引入可扩展节点类型(KaiGai Kohei)
此更改允许 FDW 或自定义扫描提供者以比以前更方便的格式在计划树中存储数据。
原始发布条目 ·
9.6.0/changes/170使规划器通过生成和比较 Path 来处理扫描/连接之后的查询步骤,替换大量特设逻辑 · 新功能
使规划器通过生成和比较
Path来处理扫描/连接之后的查询步骤,替换大量特设逻辑(Tom Lane)此更改今天只提供边际的用户可见改进,但它使将来许多上层规划器改进成为可能,这些在旧代码结构下不切实际。
原始发布条目 ·
9.6.0/changes/171支持部分聚合 · 新功能
支持部分聚合(David Rowley、Simon Riggs)
此更改允许把聚合函数的计算拆分为单独的部分,例如使并行工作者进程能够协作计算聚合。将来它可能允许跨本地和远程数据的聚合部分在远程端发生。
原始发布条目 ·
9.6.0/changes/172添加通用命令进度报告设施 · 新功能
添加通用命令进度报告设施(Vinayak Pokale、Rahila Syed、Amit Langote、Robert Haas)
原始发布条目 ·
9.6.0/changes/173把 psql 的 flex 词法分析器分离出来供其他客户端程序使用 · 新功能
把 psql 的 flex 词法分析器分离出来供其他客户端程序使用(Tom Lane、Kyotaro Horiguchi)
这消除了需要能够很好地解析 SQL 命令以识别命令边界的程序中的代码重复。以完整的一般性做到这一点比人们希望的更痛苦,到目前为止在我们支持的客户端程序中只有 psql 真正做对了。
创建了新的源代码子目录
src/fe_utils/来保存这个和其他在客户端程序之间共享的代码。以前这种共享是通过在构建时符号链接或复制源文件完成的,这很丑陋且需要重复编译。原始发布条目 ·
9.6.0/changes/174引入 WaitEventSet API 以允许高效等待通常不会在两次等待之间更改的事件集 · 新功能
引入
WaitEventSetAPI 以允许高效等待通常不会在两次等待之间更改的事件集(Andres Freund、Amit Kapila)原始发布条目 ·
9.6.0/changes/175添加用于写 WAL 记录的通用接口 · 新功能
添加用于写 WAL 记录的通用接口(Alexander Korotkov、Petr Jelínek、Markus Nullmeier)
此更改允许扩展使用标准布局为页更改写 WAL 记录。需要在无法访问扩展的情况下重放 WAL 的问题通过通用重放代码解决。这允许扩展实现例如索引访问方法并让它们有 WAL 支持。
原始发布条目 ·
9.6.0/changes/176支持逻辑解码的通用 WAL 消息 · 新功能
支持逻辑解码的通用 WAL 消息(Petr Jelínek、Andres Freund)
此特性允许扩展把数据插入 WAL 流中,逻辑解码插件可以读取它,但它与物理数据恢复无关。
原始发布条目 ·
9.6.0/changes/177允许 SP-GiST 操作符类在沿索引下降时存储任意“遍历值” · 新功能
允许 SP-GiST 操作符类在沿索引下降时存储任意“遍历值”(Alexander Lebedev、Teodor Sigaev)
这有点像“重建值”,但它可以是任意数据块,不一定是与被索引列相同的数据类型。
原始发布条目 ·
9.6.0/changes/178为 ereport() 引入 LOG_SERVER_ONLY 消息级别 · 新功能
为
ereport()引入LOG_SERVER_ONLY消息级别(David Steele)此级别的行为像
LOG,只是消息永远不会发送到客户端。它用于审计和类似应用。原始发布条目 ·
9.6.0/changes/179提供构建所有生成头文件的 Makefile 目标 · 新功能
提供构建所有生成头文件的
Makefile目标(Michael Paquier、Tom Lane)现在可以调用
submake-generated-headers来确保生成的后端头文件是最新的。这在可能“独立”构建的子目录中有用。原始发布条目 ·
9.6.0/changes/180支持 OpenSSL 1.1.0 · 新功能
支持 OpenSSL 1.1.0(Andreas Karlsson、Heikki Linnakangas)
原始发布条目 ·
9.6.0/changes/181添加配置参数 auto_explain.sample_rate,允许 contrib/auto_explain 只捕获所有查询的可配置比例 · 新功能
添加配置参数
auto_explain.sample_rate,允许contrib/auto_explain只捕获所有查询的可配置比例(Craig Ringer、Julien Rouhaud)这允许减少重查询流量的开销,同时仍平均获得有用信息。
原始发布条目 ·
9.6.0/changes/182添加 contrib/bloom 模块,实现基于 Bloom 过滤的索引访问方法 · 新功能
添加
contrib/bloom模块,实现基于 Bloom 过滤的索引访问方法(Teodor Sigaev、Alexander Korotkov)这主要是非核心索引访问方法的概念验证,但对搜索许多列的查询本身也可能有用。
原始发布条目 ·
9.6.0/changes/183在 contrib/cube 中,为 cube 引入距离操作符,并支持 cube 列上 GiST 索引中的 kNN 式搜索 · 新功能
在
contrib/cube中,为 cube 引入距离操作符,并支持 cube 列上 GiST 索引中的 kNN 式搜索(Stas Kelvich)原始发布条目 ·
9.6.0/changes/184使 contrib/hstore 的 hstore_to_jsonb_loose() 和 hstore_to_json_loose() 函数对什么算数字达成一致 · 新功能
使
contrib/hstore的hstore_to_jsonb_loose()和hstore_to_json_loose()函数对什么算数字达成一致(Tom Lane)以前
hstore_to_jsonb_loose()会把数字样子的字符串转换为 JSON 数字而不是字符串,即使它们不完全匹配 JSON 的数字语法规范。这与hstore_to_json_loose()不一致,因此收紧测试以匹配 JSON 语法。原始发布条目 ·
9.6.0/changes/185为 contrib/intarray 操作符添加选择率估计函数,以改进使用这些操作符的查询的计划 · 新功能
为
contrib/intarray操作符添加选择率估计函数,以改进使用这些操作符的查询的计划(Yury Zhuravlev、Alexander Korotkov)原始发布条目 ·
9.6.0/changes/186使 contrib/pageinspect 的 heap_page_items() 函数显示每个元组中的原始数据,并添加新函数 tuple_data_split() 和 heap_page_item_attrs() 用于检查单个元组字段 · 新功能
使
contrib/pageinspect的heap_page_items()函数显示每个元组中的原始数据,并添加新函数tuple_data_split()和heap_page_item_attrs()用于检查单个元组字段(Nikolay Shaplov)原始发布条目 ·
9.6.0/changes/187为 contrib/pgcrypto 的 pgp_sym_encrypt() 函数添加可选的 S2K 迭代计数参数 · 新功能
为
contrib/pgcrypto的pgp_sym_encrypt()函数添加可选的S2K迭代计数参数(Jeff Janes)原始发布条目 ·
9.6.0/changes/188为 contrib/pg_trgm 添加对“单词相似度”的支持 · 新功能
为
contrib/pg_trgm添加对“单词相似度”的支持(Alexander Korotkov、Artur Zakirov)这些函数和操作符度量一个字符串与另一个字符串中最相似的单个单词之间的相似度。
原始发布条目 ·
9.6.0/changes/189为 contrib/pg_trgm 的相似度阈值添加配置参数 pg_trgm.similarity_threshold · 新功能
为
contrib/pg_trgm的相似度阈值添加配置参数pg_trgm.similarity_threshold(Artur Zakirov)此阈值一直可配置,但以前由特殊用途函数
set_limit()和show_limit()控制。它们现在被弃用。原始发布条目 ·
9.6.0/changes/190改进 contrib/pg_trgm 的 GIN 操作符类,加速同时出现常见和罕见键的索引搜索 · 性能改进
改进
contrib/pg_trgm的 GIN 操作符类,加速同时出现常见和罕见键的索引搜索(Jeff Janes)原始发布条目 ·
9.6.0/changes/191改进 contrib/pg_trgm GIN 索引中相似度搜索的性能 · 性能改进
改进
contrib/pg_trgmGIN 索引中相似度搜索的性能(Christophe Fornaroli)原始发布条目 ·
9.6.0/changes/192添加 contrib/pg_visibility 模块以允许检查表可见性映射 · 新功能
添加
contrib/pg_visibility模块以允许检查表可见性映射(Robert Haas)原始发布条目 ·
9.6.0/changes/193向 contrib/sslinfo 添加 ssl_extension_info() 函数,打印当前连接所用 X509 证书中存在的 SSL 扩展信息 · 新功能
向
contrib/sslinfo添加ssl_extension_info()函数,打印当前连接所用X509证书中存在的 SSL 扩展信息(Dmitry Voronin)原始发布条目 ·
9.6.0/changes/194如果扩展在外部服务器的选项中被列入白名单,允许扩展提供的操作符和函数被发送到远程执行 · 新功能
如果扩展在外部服务器的选项中被列入白名单,允许扩展提供的操作符和函数被发送到远程执行(Paul Ramsey)
当已知远程数据库中存在兼容版本的扩展时,用户可以启用此特性。它允许更高效地执行涉及扩展操作符的查询。
原始发布条目 ·
9.6.0/changes/195在可行之处完全在远程服务器上执行 UPDATE 或 DELETE · 新功能
在可行之处完全在远程服务器上执行
UPDATE或DELETE(Etsuro Fujita)以前远程更新涉及发送
SELECT FOR UPDATE命令然后逐个更新或删除选中的行。虽然如果操作需要任何本地处理那仍然必要,但如果查询的所有元素都可以安全地发送到远程服务器,现在可以远程完成。原始发布条目 ·
9.6.0/changes/198允许把获取大小设置为服务器或表选项 · 新功能
允许把获取大小设置为服务器或表选项(Corey Huinker)
以前
postgres_fdw总是从远程查询每次获取 100 行;现在该行为可配置。原始发布条目 ·
9.6.0/changes/199对全部映射到同一远程用户的本地用户 ID 使用单一外部服务器连接 · 新功能
对全部映射到同一远程用户的本地用户 ID 使用单一外部服务器连接(Ashutosh Bapat)
原始发布条目 ·
9.6.0/changes/200把查询取消请求传输到远程服务器 · 新功能
把查询取消请求传输到远程服务器(Michael Paquier、Etsuro Fujita)
以前本地查询取消请求不会导致已发送的远程查询提前终止。
原始发布条目 ·
9.6.0/changes/201
安全证据
共 34 条记录,来自官方安全矩阵及发布说明的提及。只有安全快照明确列出此分支时才显示修复版本;仅有提及不能确定漏洞适用性或新修复。
CVE-2021-3449 · CVE-2021-3449
CVE-2021-32028 · Memory disclosure in INSERT ... ON CONFLICT ... DO UPDATE · CVSS 6.5
Using an INSERT ... ON CONFLICT ... DO UPDATE command on a purpose-crafted table, an attacker can read arbitrary bytes of server memory. In the default configuration, any authenticated database user can create prerequisite objects and complete this attack at will. A user lacking the CREATE and TEMPORARY privileges on all databases and the CREATE privilege on all schemas cannot use this attack at will. The PostgreSQL project thanks Andres Freund for reporting this problem.
以上保留官方英文漏洞说明。
本分支修复于:9.6.22。组件:core server。
官方受影响分支记录:9.6。
AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N
发布说明中的提及:
CVE-2021-32027 · Buffer overrun from integer overflow in array subscripting calculations · CVSS 6.5
While modifying certain SQL array values, missing bounds checks let authenticated database users write arbitrary bytes to a wide area of server memory. The PostgreSQL project thanks Tom Lane for reporting this problem.
以上保留官方英文漏洞说明。
本分支修复于:9.6.22。组件:core server。
官方受影响分支记录:9.6。
AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:N
发布说明中的提及:
CVE-2021-23222 · libpq processes unencrypted bytes from man-in-the-middle · CVSS 3.7
A man-in-the-middle attacker can inject false responses to the client's first few queries, despite the use of SSL certificate verification and encryption. If more preconditions hold, the attacker can exfiltrate the client's password or other confidential data that might be transmitted early in a session. The attacker must have a way to trick the client's intended server into making the confidential data accessible to the attacker. A known implementation having that property is a PostgreSQL configuration vulnerable to CVE-2021-23214 . As with any exploitation of CVE-2021-23214 , the server must be using trust authentication with a clientcert requirement or using cert authentication. To disclose a password, the client must be in possession of a password, which is atypical when using an authentication configuration vulnerable to CVE-2021-23214 . The attacker must have some other way to access the server to retrieve the exfiltrated data (a valid, unprivileged login account would be sufficient). The PostgreSQL project thanks Jacob Champion for reporting this problem.
以上保留官方英文漏洞说明。
本分支修复于:9.6.24。组件:client。
官方受影响分支记录:9.6。
AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:N/A:N
发布说明中的提及:
CVE-2021-23214 · Server processes unencrypted bytes from man-in-the-middle · CVSS 8.1
When the server is configured to use trust authentication with a clientcert requirement or to use cert authentication, a man-in-the-middle attacker can inject arbitrary SQL queries when a connection is first established, despite the use of SSL certificate verification and encryption. This is similar to CVE-2011-0411 (different product). The PostgreSQL project thanks Jacob Champion for reporting this problem.
以上保留官方英文漏洞说明。
本分支修复于:9.6.24。组件:core server。
官方受影响分支记录:9.6。
AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H
发布说明中的提及:
CVE-2020-25696 · psql's \gset allows overwriting specially treated variables · CVSS 7.5
The \gset meta-command, which sets psql variables based on query results, does not distinguish variables that control psql behavior. If an interactive psql session uses \gset when querying a compromised server, the attacker can execute arbitrary code as the operating system account running psql . Using \gset with a prefix not found among specially treated variables, e.g. any lowercase string, precludes the attack in an unpatched psql . The PostgreSQL project thanks Nick Cleaton for reporting this problem.
以上保留官方英文漏洞说明。
本分支修复于:9.6.20。组件:client。
官方受影响分支记录:9.6。
AV:N/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:H
发布说明中的提及:
CVE-2020-25695 · Multiple features escape "security restricted operation" sandbox · CVSS 8.8
An attacker having permission to create non-temporary objects in at least one schema can execute arbitrary SQL functions under the identity of a superuser. While promptly updating PostgreSQL is the best remediation for most users, a user unable to do that can work around the vulnerability by disabling autovacuum and not manually running ANALYZE , CLUSTER , REINDEX , CREATE INDEX , VACUUM FULL , REFRESH MATERIALIZED VIEW , or a restore from output of the pg_dump command. Performance may degrade quickly under this workaround. VACUUM without the FULL option is safe, and all commands are fine when a trusted user owns the target object. The PostgreSQL project thanks Etienne Stalmans for reporting this problem.
以上保留官方英文漏洞说明。
本分支修复于:9.6.20。组件:core server。
官方受影响分支记录:9.6。
AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
发布说明中的提及:
CVE-2020-25694 · Reconnection can downgrade connection security settings · CVSS 8.1
Many PostgreSQL-provided client applications have options that create additional database connections. Some of those applications reuse only the basic connection parameters (e.g. host , user , port ), dropping others. If this drops a security-relevant parameter (e.g. channel_binding , sslmode , requirepeer , gssencmode ), the attacker has an opportunity to complete a MITM attack or observe cleartext transmission. Affected applications are clusterdb , pg_dump , pg_restore , psql , reindexdb , and vacuumdb . The vulnerability arises only if one invokes an affected client application with a connection string containing a security-relevant parameter. This also fixes how the \connect command of psql reuses connection parameters, i.e. all non-overridden parameters from a previous connection string now re-used. The PostgreSQL project thanks Peter Eisentraut for reporting this problem.
以上保留官方英文漏洞说明。
本分支修复于:9.6.20。组件:client。
官方受影响分支记录:9.6。
AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H
发布说明中的提及:
CVE-2020-1720 · ALTER ... DEPENDS ON EXTENSION is missing authorization checks. · CVSS 3.1
The ALTER ... DEPENDS ON EXTENSION sub-commands do not perform authorization checks, which can allow an unprivileged user to drop any function, procedure, materialized view, index, or trigger under certain conditions. This attack is possible if an administrator has installed an extension and an unprivileged user can CREATE , or an extension owner either executes DROP EXTENSION predictably or can be convinced to execute DROP EXTENSION . The PostgreSQL project thanks Tom Lane for reporting this problem.
以上保留官方英文漏洞说明。
本分支修复于:9.6.17。组件:core server。
官方受影响分支记录:9.6。
AV:N/AC:H/PR:L/UI:N/S:U/C:N/I:L/A:N
发布说明中的提及:
CVE-2020-14350 · Uncontrolled search path element in CREATE EXTENSION · CVSS 7.1
When a superuser runs certain CREATE EXTENSION statements, users may be able to execute arbitrary SQL functions under the identity of that superuser. The attacker must have permission to create objects in the new extension's schema or a schema of a prerequisite extension. Not all extensions are vulnerable. In addition to correcting the extensions provided with PostgreSQL, the PostgreSQL Global Development Group is issuing guidance for third-party extension authors to secure their own work. The PostgreSQL project thanks Andres Freund for reporting this problem.
以上保留官方英文漏洞说明。
本分支修复于:9.6.19。组件:core server。
官方受影响分支记录:9.6。
AV:N/AC:H/PR:L/UI:R/S:U/C:H/I:H/A:H
发布说明中的提及:
CVE-2020-10733 · Windows installer runs executables from uncontrolled directories · CVSS 6.7
The Windows installer for PostgreSQL invokes system-provided executables that do not have fully-qualified paths. Executables in the directory where the installer loads or the current working directory take precedence over the intended executables. An attacker having permission to add files into one of those directories can use this to execute arbitrary code with the installer's administrative rights. The PostgreSQL project thanks Hou JingYi (@hjy79425575) for reporting this problem.
以上保留官方英文漏洞说明。
本分支修复于:9.6.18。组件:packaging。
官方受影响分支记录:9.6。
AV:L/AC:H/PR:L/UI:R/S:U/C:H/I:H/A:H
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.6.16。组件:packaging。
官方受影响分支记录:9.6。
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.6.15。组件:packaging。
官方受影响分支记录:9.6。
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.6.15。组件:packaging。
官方受影响分支记录:9.6。
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.6.15。组件:core server。
官方受影响分支记录:9.6。
AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H
发布说明中的提及:
CVE-2019-10130 · Selectivity estimators bypass row security policies · CVSS 3.1
PostgreSQL maintains statistics for tables by sampling data available in columns; this data is consulted during the query planning process. Prior to this release, a user able to execute SQL queries with permissions to read a given column could craft a leaky operator that could read whatever data had been sampled from that column. If this happened to include values from rows that the user is forbidden to see by a row security policy, the user could effectively bypass the policy. This is fixed by only allowing a non-leakproof operator to use this data if there are no relevant row security policies for the table. The PostgreSQL project thanks Dean Rasheed for reporting this problem.
以上保留官方英文漏洞说明。
本分支修复于:9.6.13。组件:core server。
官方受影响分支记录:9.6。
AV:N/AC:H/PR:L/UI:N/S:U/C:L/I:N/A:N
发布说明中的提及:
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.6.13。组件:packaging。
官方受影响分支记录:9.6。
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.6.13。组件:packaging。
官方受影响分支记录:9.6。
AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H