2018-11-08,PostgreSQL全球开发小组发布了所有支持的数据库系统的版本更新,包括11.1,10.6,9.6.11,9.5.15,9.4.20和9.3.25版本。此次的版本发布是解决一个安全问题以及用户近三个所上报的Bug。
所有使用受Bug影响版本的用户建议尽快升级。尤其是使用pg_stat_statements
模块的用户,请浏览"系统更新"段落来了解在安装后,应执行的步骤。
本次更新也是PostgreSQL 9.3版本的最后一次更新,该版本的版本维护周期已到,将不会再进行任何更新了。请仍使用PostgreSQL 9.3的用户尽快升级至社区维护支持的版本。请浏览以下的版本策略了解更多信息。
本次更新修正了一个安全漏洞:
CREATE TRIGGER ... REFERENCING
,会在pg_upgrade
和 pg_dump
功能中存在了SQL注入漏洞。通过创建一个有恶意的触发器,在一个超级权限用户运行pg_upgrade
或是执行导出和导入时使用pg_dump
时,攻击者可以以管理员权限运行一个SQL查询。这种攻击需要在一些非临时的schema中有 CREATE
的权限,或是对一个表有创建TRIGGER
的权限。 在PostgreSQL缺省配置下,所有用户都对public
的schema有CREATE
权限,这一点是会被利用的。
本次更新修正了近几个月所上报的Bug。部分Bug仅影响11版本,但大部分都对目前在支持的版本有影响。
这些修正包括:
ON COMMIT DELETE ROWS
选项出现的问题;LEFT JOIN
的并行化Hash Join时对NULL
值的处理方式;CALL
查询时有关命名或是缺省参数的问题;NULL
值输入)中含有ORDER BY的列时,会导致对数据扫描的操作;CASE
查询时,表达式转变数组类型的问题;pg_verify_checksums
不正确的对文件的结果反馈;wal_level
设置为一个不支持当前已有复制slot的参数时,禁止PostgreSQL的启动;NOTIFY
和SIGTERM
中断信号;contrib/ltree
和contrib/pg_trgm
模块;psql
在收到下一个指令前,不显示它当前从NOTIFY
收到的信息;本次更新也包含2018g版本的时区数据,包括智利、斐济、摩洛哥和俄罗斯时区的更新,加上对中国、夏威夷、日本、澳门和北朝鲜等历史数据的更新。
PostgreSQL 9.3版本现在已到达了终止维护时间(EOL)。社区将不会针对此版本再发布更新或是补丁了。仍然使用9.3版本的用户请尽快升级,请浏览我们的 版本策略 以了解更多信息。
所有PostgreSQL的更新版本是累进方式的。对一般小版本的更新,并不需要用户对数据进行导出和导入或是使用pg_upgrade进行更新,只需要停止PostgreSQL服务,更新一下服务器的二进制文件即可。
如果用户的系统中安装并使用了pg_stat_statements
模块,并且版本是PostgreSQL 10或是PostgreSQL 11,我们建议用户在升级后要执行以下指令:
ALTER EXTENSION pg_stat_statements UPDATE;
用户跳过了一个或是多个补丁版本可能也需要额外的后续操作,请浏览详细的发布说明来检查更早版本升级的细节。