发布日期:. 2019-10-03
PostgreSQL 12 的主要增强包括:
整体性能改进,包括:
优化 B-树索引的空间利用率和读写性能
增强分区性能,包括提高包含数千个分区的表的查询性能,提高 INSERT 和 COPY 的插入性能,以及支持在不阻塞查询的情况下执行 ALTER TABLE ATTACH PARTITION
自动内联公共表表达式(CTEs),并允许覆盖此行为
可通过 CREATE STATISTICS 定义多列最常见值(MCV)统计信息,为测试多个分布不均匀列的查询提供更好的计划
管理功能增强,包括:
REINDEX CONCURRENTLY 可以重建索引,同时不阻塞对其表的写入
pg_checksums 可以在离线集群中启用或禁用页校验和(用于检测数据损坏)
为 CREATE INDEX、REINDEX、CLUSTER、VACUUM FULL 和 pg_checksums 提供进度报告统计信息
支持 SQL/JSON 路径语言
存储的生成列
非确定性 ICU 排序规则,支持不区分大小写和重音的分组与排序
新的认证特性,包括:
在使用 GSSAPI 认证时加密 TCP/IP 连接
使用 DNS SRV 记录发现 LDAP 服务器
多因素认证,在 pg_hba.conf 中将 clientcert=verify-full 选项与其他认证方法结合使用
以下各节将更详细地说明上述项目。
对于希望从任何先前版本迁移数据的用户,需要使用 pg_dumpall 进行导出/恢复,或使用 pg_upgrade 或逻辑复制。 有关迁移到新主版本的一般信息,请参见 Section 18.6。
版本 12 包含许多可能影响与先前版本兼容性的变更。 请注意以下不兼容性:
移除 oid 列的特殊行为(Andres Freund,John Naylor) §
以前,可以在建表时使用 WITH OIDS 指定一个通常不可见的 oid 列;此功能已被移除。仍可将列显式声明为 oid 类型。对于包含使用 WITH OIDS 创建的列的表,其相关操作需要作出调整。
以前带有隐藏 oid 列的系统目录,现在改为具有普通的 oid 列。因此,SELECT * 现在会输出这些列,而以前只有显式选择时才会显示它们。
移除数据类型 abstime、reltime 和 tinterval(Andres Freund) §
这些类型已被 timestamp 等 SQL 标准类型取代。
移除 timetravel 扩展(Andres Freund) §
将 recovery.conf 设置移入 postgresql.conf(Masao Fujii,Simon Riggs,Abhijit Menon-Sen,Sergei Kornilov) §
不再使用 recovery.conf,如果该文件存在,服务器将无法启动。现在通过 recovery.signal 和 standby.signal 文件切换到非主库模式。trigger_file 设置已重命名为 promote_trigger_file。standby_mode 设置已被移除。
不再允许指定多个相互冲突的 recovery_target* 设置(Peter Eisentraut) §
具体而言,recovery_target、recovery_target_lsn、recovery_target_name、recovery_target_time 和 recovery_target_xid 中只允许指定一个。以前可以指定这些参数中的多个不同参数,并采用最后一个。现在只能指定其中一个,但同一个参数可以重复指定,并采用最后一次指定的值。
使恢复默认推进到最新时间线(Peter Eisentraut) §
具体而言,recovery_target_timeline 现在默认为 latest,而以前默认为 current。
重构几何函数和操作符的代码(Emre Hasegeli) § § §
这可能产生比以前版本更精确但略有不同的结果。特别是,涉及 NaN、下溢、溢出和除以零的情况现在得到比以前更一致的处理。
采用新算法输出 real 和 double precision 值,以提高性能(Andrew Gierth) § §
以前,显示的浮点值默认舍入到 6 位(real)或 15 位(double precision),并根据 extra_float_digits 的值进行调整。现在,只要 extra_float_digits 大于零(这也是现在的默认值),就只输出保留精确二进制值所需的最少位数。当 extra_float_digits 设置为零或更小时,行为与以前相同。
此外,浮点指数的格式现在在各平台上一致:除非必须使用三位数字,否则使用两位。在以前的版本中,Windows 构建始终输出三位数字。
random() 和 setseed() 现在在各平台上行为一致(Tom Lane) § §
使用特定种子值调用 setseed() 后生成的 random() 值序列,现在可能与以前不同。不过,该序列也将是可重复的;以前由于服务器内部其他随机数用途的干扰,无法保证这一点。SQL random() 函数现在具有每个会话独立的私有状态,以防止这种干扰。
更改 SQL 风格的 substring(),使其具有符合标准的贪婪匹配行为(Tom Lane) §
当模式可以以多种方式匹配时,起始子模式现在会匹配尽可能少的文本,而非尽可能多的文本。例如,%#"aa*#"% 这样的模式现在会从输入中选择第一组 a,而非最后一组。
不再对 xpath() 或 XMLTABLE 结构的结果进行美化输出(Tom Lane) §
在某些情况下,这些函数会在节点集值中插入额外的空白(换行和/或空格)。这并不合适,因为根据具体用途,这些空白可能具有语义意义。
将命令行工具 pg_verify_checksums 重命名为 pg_checksums(Michaël Paquier) §
在 pg_restore 中,要求指定 -f - 才能将转储内容发送到标准输出(Euler Taveira) §
以前,如果未指定目标位置,默认会这样做,但这种行为被认为不够友好。
在 psql 的 \pset format 命令中禁止不唯一的缩写(Daniel Vérité) § §
例如,以前 \pset format a 会选择 aligned;现在它会失败,因为这也可能表示 asciidoc。
在新建的 B-树索引中,将索引条目的最大长度减少八字节,以改进对重复条目的处理(Peter Geoghegan) §
这意味着,对通过 pg_upgrade 从以前版本升级而来的索引执行 REINDEX 操作时,可能会失败。
如果没有提供参数列表且存在多个匹配对象,则使 DROP IF EXISTS FUNCTION/PROCEDURE/AGGREGATE/ROUTINE 报错(David Rowley) §
同时改进此类情况下的错误消息。
将 pg_statistic_ext 目录拆分为两个目录,并添加相应的 pg_stats_ext 视图(Dean Rasheed,Tomas Vondra) § §
此更改支持向无特权用户隐藏可能敏感的统计数据。
移除过时的 pg_constraint.consrc 列(Peter Eisentraut) §
此列早已弃用,因为它不会随其他目录变更(如列重命名)而更新。从 pg_constraint 获取检查约束表达式文本形式的推荐方法是 pg_get_expr(conbin, conrelid)。pg_get_constraintdef() 也是一种有用的替代方法。
移除过时的 pg_attrdef.adsrc 列(Peter Eisentraut) §
此列早已弃用,因为它不会随其他目录变更(如列重命名)而更新。从 pg_attrdef 获取默认值表达式文本形式的推荐方法是 pg_get_expr(adbin, adrelid)。
将 name 类型的表列标记为默认使用 “C” 排序规则(Tom Lane,Daniel Vérité) § §
数据类型 name 的比较操作符现在可以使用任何排序规则,而不再总是使用 “C” 排序规则。为保留查询以前的语义,现在将 name 类型的列显式标记为使用 “C” 排序规则。这一改动的副作用是,name 列上的正则表达式操作符现在默认使用 “C” 排序规则,而非数据库的排序规则,来确定依赖区域设置的正则表达式模式(例如 \w)的行为。如果希望 name 列上的正则表达式具有非 C 行为,请附加一个显式的 COLLATE 子句。(对于用户定义的 name 列,另一种方法是在建表时指定不同的排序规则;但这只是将向后不兼容性转移到了比较操作符上。)
将 information_schema 视图中的对象名列视为 name 类型,而非 varchar 类型(Tom Lane) § § §
按照 SQL 标准,information_schema 视图中的对象名列被声明为域类型 sql_identifier。在 PostgreSQL 中,底层目录列实际为 name 类型。此更改使 sql_identifier 成为基于 name 的域,而非原来的 varchar。这消除了比较和排序行为中的语义不一致,可显著提高对 information_schema 视图中的对象名列施加限制的查询性能。不过请注意,不等式限制,例如
SELECT ... FROM information_schema.tables WHERE table_name < 'foo';
现在默认使用 “C” 区域设置的比较语义,而非像以前那样使用数据库的默认排序规则。对这些列进行排序也将遵循 “C” 排序规则。通过添加 COLLATE "default" 子句,可以强制使用以前的行为(及其低效率)。
移除禁用动态共享内存的功能(Kyotaro Horiguchi) §
具体而言,dynamic_shared_memory_type 不再能够设置为 none。
更严格地解析 libpq 整数连接参数(Fabien Coelho) §
在以前的版本中,为连接参数 connect_timeout、keepalives、keepalives_count、keepalives_idle、keepalives_interval 和 port 使用不正确的整数值,会导致 libpq 忽略这些值,或失败并给出不正确的错误消息。
以下是 PostgreSQL 12 与上一个主版本之间变更的详细说明。
提高分区表上许多操作的性能(Amit Langote,David Rowley,Tom Lane,Álvaro Herrera) § § § § §
对于拥有数千个子分区的表,只影响少量分区的操作现在能够高效处理。
提高向分区表执行 COPY 的速度(David Rowley) §
允许分区边界使用任意表达式(Kyotaro Horiguchi,Tom Lane,Amit Langote) §
此类表达式在创建分区表时求值。以前,只允许将简单常量用作分区边界。
允许 CREATE TABLE 为分区表指定的表空间影响其子分区的表空间(David Rowley,Álvaro Herrera) §
如果已经按所需顺序扫描分区,则避免排序(David Rowley) §
降低执行 ALTER TABLE ATTACH PARTITION 的锁定要求(Robert Haas) §
添加分区自省函数(Michaël Paquier,Álvaro Herrera,Amit Langote) § § §
新函数 pg_partition_root() 返回分区树的最顶层父表,pg_partition_ancestors() 报告分区的所有祖先,pg_partition_tree() 显示分区信息。
在系统视图 pg_indexes 中包含分区索引(Suraj Kharage) §
添加 psql 命令 \dP,用于列出分区表和索引(Pavel Stehule) §
改进 psql 的 \d 和 \z 对分区表的显示(Pavel Stehule,Michaël Paquier,Álvaro Herrera) § § §
修复可能导致 ALTER TABLE DETACH PARTITION 留下不正确依赖状态的缺陷;这可能使后续操作行为异常,例如在删除表时未删除曾属于分区的子索引(Tom Lane) §
提高具有大量重复值的 B-树索引的性能和空间利用率(Peter Geoghegan,Heikki Linnakangas) § § §
以前,重复索引条目在其重复值组内无序存储。这会增加索引插入的开销,因过多的页面分裂浪费空间,并降低 VACUUM 回收整个页面的能力。现在,重复索引条目按堆存储顺序排序。
通过 pg_upgrade 从以前版本升级而来的索引无法获得这些好处。
允许多列 B-树索引占用更少空间(Peter Geoghegan,Heikki Linnakangas)
内部页面和叶子页面的最小/最大值指示项现在只存储到发生差异的键为止的索引键,而非全部索引键。这也提高了索引访问的局部性。
通过 pg_upgrade 从以前版本升级而来的索引无法获得这些好处。
通过减少锁定开销提高 B-树索引插入速度(Alexander Korotkov) §
添加对 SP-GiST 索引的最近邻(KNN)搜索的支持(Nikita Glukhov,Alexander Korotkov,Vlad Sterzhanov) §
减少创建 GiST、GIN 和 SP-GiST 索引时的 WAL 写入开销(Anastasia Lubennikova,Andrey V. Lepikhov) §
提高多列索引上仅索引扫描的效率(Konstantin Knizhnik) §
提高 GiST 索引清理扫描的性能(Andrey Borodin,Konstantin Kuznetsov,Heikki Linnakangas) §
在 GiST VACUUM 期间删除空的叶子页面(Andrey Borodin) §
降低索引重命名的锁定要求(Peter Eisentraut) §
允许 CREATE STATISTICS 创建多列最常见值统计信息(Tomas Vondra) § §
这改进了对多个列进行测试、需要估算多个 WHERE 子句综合效果的查询的优化。如果这些列彼此相关且分布不均匀,多列统计信息将使估算显著改善。
允许将公共表表达式(CTEs)内联到外层查询中(Andreas Karlsson,Andrew Gierth,David Fetter,Tom Lane) § §
具体而言,如果 CTE 没有副作用、不是递归的,且在查询中只被引用一次,就会被自动内联。可以指定 MATERIALIZED 来阻止内联,也可以指定 NOT MATERIALIZED,强制内联被多次引用的 CTE。以前,CTE 从不被内联,总是在查询其余部分之前求值。
允许控制何时为预备语句使用通用计划(Pavel Stehule) §
这由服务器参数 plan_cache_mode 控制。
改进只有一个子项的分区查询和 UNION ALL 查询的优化(David Rowley) §
仅用作类型别名的域不再给优化带来困难。
提高优化器验证带有 IS NOT NULL 条件的部分索引可用于查询的能力(Tom Lane,James Coleman) § §
当调用查询包含类型转换或大型 子句时,现在可以在更多情况下识别索引的可用性。x IN (array)
使用为每列定义的排序规则计算 ANALYZE 统计信息(Tom Lane) §
以前,所有统计信息都使用数据库的默认排序规则。对于使用非默认排序规则的列,这可能改善优化器行为。
改进对 tid 类型列进行连接时的优化(Tom Lane) § §
这些更改主要提高了对 ctid 列进行自连接的效率。
修复某些 B-树比较操作符和支持函数的防泄漏属性标记(Tom Lane) § §
这使一些以前在存在安全屏障视图或行级安全时无法应用的优化得以应用。
如果服务器构建时包含相应支持,则默认启用即时(JIT)编译(Andres Freund) §
请注意,默认构建不包含此支持,必须在配置构建时显式选择。
提高 position() 及相关函数中多字节字符的搜索性能(Heikki Linnakangas) §
允许对经过 TOAST 处理的值仅解压所需的最小部分(Paul Ramsey) §
这对只需检查经过 TOAST 处理的字段起始部分的例程很有用。
允许 ALTER TABLE ... SET NOT NULL 避免不必要的表扫描(Sergei Kornilov) §
当可以识别出表的列约束不允许空值时,就能进行此项优化。
会话时区为 UTC 时,允许使用 ALTER TABLE ... SET DATA TYPE 在 timestamp 和 timestamptz 之间转换,而无需重写表(Noah Misch) §
在 UTC 时区中,这两种数据类型是二进制兼容的。
提高将字符串转换为 int2 或 int4 整数的速度(Andres Freund) §
允许在 SERIALIZABLE 隔离模式下使用并行查询(Thomas Munro) §
以前,在此模式下会禁用并行执行。
使用 pread() 和 pwrite() 执行随机 I/O(Oskari Saarenmaa,Thomas Munro) § §
这减少了 I/O 所需的系统调用次数。
允许仅记录一定比例事务中的语句(Adrien Nayrat) §
这由参数 log_transaction_sample_rate 控制。
为 CREATE INDEX 和 REINDEX 操作添加进度报告(Álvaro Herrera,Peter Eisentraut) § §
进度通过 pg_stat_progress_create_index 系统视图报告。
为 CLUSTER 和 VACUUM FULL 添加进度报告(Tatsuro Yamada) §
进度通过 pg_stat_progress_cluster 系统视图报告。
为 pg_checksums 添加进度报告(Michael Banck,Bernd Helmle) §
可通过 --progress 选项启用此功能。
在 pg_stat_database 中添加校验和失败计数器(Magnus Hagander) §
在系统视图 pg_stat_database 中添加对全局对象的跟踪(Julien Rouhaud) §
全局对象对应的 pg_stat_database.datid 值显示为零。
添加列出归档目录内容的功能(Christoph Moench-Tegeder) §
相应函数为 pg_ls_archive_statusdir()。
添加列出临时目录内容的功能(Nathan Bossart) §
相应函数 pg_ls_tmpdir() 允许选择性地指定表空间。
在系统视图 pg_stat_ssl 中添加客户端证书信息(Peter Eisentraut) §
新增列为 client_serial 和 issuer_dn。为使含义更清楚,将 clientdn 列重命名为 client_dn。
限制无特权用户在 pg_stat_ssl 中可见的行(Peter Eisentraut) §
服务器启动时输出包含服务器版本号的日志消息(Christoph Berg) §
如果新连接立即被关闭,则避免记录 “incomplete startup packet”(Tom Lane) §
这避免了某些监控方式产生大量无用日志。
如果设置了 application_name,则在 log_connections 日志消息中包含它(Don Seiler) §
如果设置了集群名称,则让 WAL 接收进程 将其应用名称设置为该集群名称(Peter Eisentraut) §
在 pg_stat_replication 中添加最后收到的备库消息的时间戳(Lim Myungkyu) §
添加 GSSAPI 加密支持(Robbie Harwood,Stephen Frost) §
此特性允许在使用 GSSAPI 认证时加密 TCP/IP 连接,无需另外配置 SSL 等加密设施。为支持此功能,在 pg_hba.conf 中增加了 hostgssenc 和 hostnogssenc 记录类型,用于选择使用或不使用 GSSAPI 加密的连接,分别对应现有的 hostssl 和 hostnossl 记录类型。另外,还增加了 libpq 选项 gssencmode 和系统视图 pg_stat_gssapi。
允许 pg_hba.conf 的 clientcert 选项检查数据库用户名是否与客户端证书的通用名匹配(Julian Markwort,Marius Timmer) §
此项新检查通过 clientcert=verify-full 启用。
允许使用 DNS SRV 记录发现 LDAP 服务器(Thomas Munro) §
这使指定 ldapserver 不再是必需的。仅当 PostgreSQL 使用 OpenLDAP 编译时才支持此功能。
添加使用 pg_checksums 启用/禁用集群校验和的功能(Michael Banck,Michaël Paquier) §
执行这些操作时必须关闭集群。
将 autovacuum_vacuum_cost_delay 的默认值降低到 2ms(Tom Lane) §
这使自动清理操作默认能够更快地执行。
允许 vacuum_cost_delay 接受小数值,以指定亚毫秒级延迟(Tom Lane) §
允许整数服务器参数接受小数输入(Tom Lane) §
例如,虽然 work_mem 是整数参数,现在也允许执行 SET work_mem = '30.1GB'。完成所有必要的单位转换后,该值会被舍入为整数。
允许为浮点服务器参数定义单位(Tom Lane) §
添加服务器参数 wal_recycle 和 wal_init_zero,以控制 WAL 文件的循环利用(Jerry Jelinek) §
在 ZFS 等写时复制文件系统上,避免文件循环利用可能有益。
添加服务器参数 tcp_user_timeout,以控制服务器的 TCP 超时(Ryohei Nagaura) §
允许控制最低和最高 SSL 协议版本(Peter Eisentraut) §
相应服务器参数为 ssl_min_protocol_version 和 ssl_max_protocol_version。
添加服务器参数 ssl_library,以报告服务器使用的 SSL 库版本(Peter Eisentraut) §
添加服务器参数 shared_memory_type,以控制所使用的共享内存类型(Andres Freund) §
这允许在需要时选择 System V 共享内存。
允许通过重新加载配置更改部分恢复参数(Peter Eisentraut) §
这些参数是 archive_cleanup_command、promote_trigger_file、recovery_end_command 和 recovery_min_apply_delay。
允许按连接设置流复制超时(wal_sender_timeout)(Takayuki Tsunakawa) §
以前,只能在整个集群范围内设置此参数。
添加函数 pg_promote(),用于将备库提升为主库(Laurenz Albe,Michaël Paquier) § §
以前,只能使用 pg_ctl 或创建触发文件来执行此操作。
允许复制复制槽(Masahiko Sawada) §
相应函数为 pg_copy_physical_replication_slot() 和 pg_copy_logical_replication_slot()。
不再将 max_wal_senders 计入 max_connections(Alexander Kukushkin) §
为 recovery_target_timeline 添加显式值 current(Peter Eisentraut) §
如果两阶段事务状态文件损坏,则使恢复失败(Michaël Paquier) §
以前,会记录一条警告并继续恢复,可能导致该事务丢失。
为 REINDEX 添加 CONCURRENTLY 选项,以允许在不阻塞写入的情况下重建索引(Michaël Paquier,Andreas Karlsson,Peter Eisentraut) §
这也可以通过 reindexdb 应用的 --concurrently 选项控制。
生成列的内容由表达式计算得出(可以引用同一表中的其他列),而非由 INSERT 或 UPDATE 命令指定。
为 COPY FROM 添加 WHERE 子句,以控制接受哪些行(Surafel Temesgen) §
这提供了过滤传入数据的简单方法。
允许更灵活地添加枚举值(Andrew Dunstan,Tom Lane,Thomas Munro) §
以前,不能在事务块中调用 ALTER TYPE ... ADD VALUE,除非它与创建该枚举类型的操作处于同一事务。现在可以在后续事务中调用,只要在提交之后才引用新的枚举值即可。
添加结束当前事务并开始新事务的命令(Peter Eisentraut) §
这些命令为 COMMIT AND CHAIN 和 ROLLBACK AND CHAIN。
为 VACUUM 和 CREATE TABLE 添加选项,以阻止 VACUUM 截断尾部空页面(Takayuki Tsunakawa) § §
这些选项是 vacuum_truncate 和 toast.vacuum_truncate。使用这些选项可降低 VACUUM 的锁定要求,但会使其无法将磁盘空间归还给操作系统。
允许 VACUUM 跳过索引清理(Masahiko Sawada) § §
此更改添加了 VACUUM 命令选项 INDEX_CLEANUP,以及表存储选项 vacuum_index_cleanup。使用此选项会降低空间回收能力,并可能导致索引膨胀,但在主要目标是冻结旧元组时很有帮助。
添加跳过无法立即锁定的表上的 VACUUM 和 ANALYZE 操作的功能(Nathan Bossart) §
此选项名为 SKIP_LOCKED。
允许为 VACUUM 和 ANALYZE 的选项指定可选的布尔参数(Masahiko Sawada) §
防止 TRUNCATE、VACUUM 和 ANALYZE 对用户没有权限的表请求锁(Michaël Paquier) § §
这可防止未经授权的锁定干扰用户查询。
为 EXPLAIN 添加 SETTINGS 选项,以输出非默认的优化器设置(Tomas Vondra) §
使用 auto_explain 时,也可通过设置 auto_explain.log_settings 获取这些输出。
为 CREATE AGGREGATE 添加 OR REPLACE 选项(Andrew Gierth) §
允许使用 ALTER TABLE 修改系统目录的选项(Peter Eisentraut) §
现在支持修改目录的 reloptions 和自动清理设置。(仍然需要设置 allow_system_table_mods。)
为外键选择默认约束名时,使用所有键列的名称(Peter Eisentraut) §
以前,约束名中只包含第一个列名,导致多列外键存在歧义。
更新各项 Unicode 相关信息,使其与 Unicode 12.1.0 一致(Peter Eisentraut) § §
例如,这修复了 psql 对包含组合字符的输出进行错误排版的情况。
更新 Snowball 词干提取词典,支持新的语言(Arthur Zakirov) §
这为全文搜索添加了阿拉伯语、印度尼西亚语、爱尔兰语、立陶宛语、尼泊尔语和泰米尔语的词干提取支持。
允许创建将按位不同的字符串判定为相等的排序规则(Peter Eisentraut) §
此功能支持“非确定性”排序规则,可以定义不区分大小写和重音的相等比较。因此,例如在文本列上创建不区分大小写的唯一约束,会比以前更容易。只有 ICU 排序规则支持此功能。
添加对旧版 ICU 中 ICU 排序规则属性的支持(Peter Eisentraut) §
这使所有 ICU 版本都能以一致的方式自定义排序规则。
允许 name 数据类型与其他文本类型更顺畅地比较(Tom Lane) §
name 类型现在的行为很像基于 text 类型、默认排序规则为 “C” 的域。这使跨类型比较能够得到更高效的处理。
添加对 SQL/JSON 路径语言的支持(Nikita Glukhov,Teodor Sigaev,Alexander Korotkov,Oleg Bartunov,Liudmila Mantrova) § § §
这允许使用符合 SQL 标准的语言对 JSON 值执行复杂查询。
同时为符合标准,添加 log10() 作为 log() 的别名。
采用更精确的算法,提高 variance() 等统计聚合的精度(Dean Rasheed) §
允许 date_trunc() 接受额外参数来控制时区(Vik Fearing,Tom Lane) §
这比使用 AT TIME ZONE 子句更快、更简单。
调整 to_timestamp()/to_date() 函数,使其对模板不匹配更加宽容(Artur Zakirov,Alexander Korotkov,Liudmila Mantrova) §
这种新行为更接近 Oracle 的同名函数。
修复 XML 函数中的各类缺陷(Pavel Stehule,Markus Winand,Chapman Flack) §
具体而言,修复 XMLTABLE、xpath() 和 xmlexists() 中某些节点没有输出、抛出意外错误,或遗漏 XML 特殊字符必要转义的情况。
允许在 XMLEXISTS 和 XMLTABLE 中使用 BY VALUE 子句(Chapman Flack) §
这个 SQL 标准子句在 PostgreSQL 的实现中没有作用,但以前被不必要地拒绝。
防止并行工作进程运行 current_schema() 和 current_schemas(),因为它们并非并行安全(Michaël Paquier) §
对于声明返回 RECORD 的表函数,允许在查询的列定义列表中使用 RECORD 和 RECORD[] 作为列类型(Elvis Pranskevichus) §
添加连接参数 tcp_user_timeout,以控制 libpq 的 TCP 超时(Ryohei Nagaura) §
允许 libpq(以及 psql)在错误消息中仅报告 SQLSTATE 值(Didier Gautheron) §
添加 libpq 函数 PQresultMemorySize(),以报告查询结果使用的内存(Lars Kanis,Tom Lane) §
移除 libpq 的 options 连接参数上的不显示/调试标志(Peter Eisentraut) §
这允许 postgres_fdw 设置该参数。
允许 ecpg 创建 bytea 数据类型的变量(Ryo Matsumura) §
这允许 ECPG 客户端直接处理 bytea 数据,而无需使用编码形式。
为 ECPG 添加 PREPARE AS 支持(Ryo Matsumura) §
允许 vacuumdb 根据表的回卷视界选择需要清理的表(Nathan Bossart) §
相应选项为 --min-xid-age 和 --min-mxid-age。
允许 vacuumdb 禁用锁等待或禁用对全可见页面的跳过(Nathan Bossart) §
相应选项为 --skip-locked 和 --disable-page-skipping。
为命令行工具的输出添加着色(Peter Eisentraut) §
将环境变量 PG_COLOR 设置为 always 或 auto 即可启用此功能。可以设置环境变量 PG_COLORS,使用 ANSI 颜色转义码调整具体颜色。例如,默认行为等同于 PG_COLORS="error=01;31:warning=01;35:locus=01"。
在 psql 中添加 CSV 表格输出模式(Daniel Vérité) §
这通过 \pset format csv 或命令行选项 --csv 控制。
在 psql 针对 SQL 命令的 \help 输出中显示手册页面的 URL(Peter Eisentraut) §
改进 CREATE TABLE、CREATE TRIGGER、CREATE EVENT TRIGGER、ANALYZE、EXPLAIN、VACUUM、ALTER TABLE、ALTER INDEX、ALTER DATABASE 和 ALTER INDEX ALTER COLUMN 的 Tab 补全(Dagfinn Ilmari Mannsåker,Tatsuro Yamada,Michaël Paquier,Tom Lane,Justin Pryzby) § § § § § § § § §
允许通过 pg_ctl 控制日志文件轮转(Kyotaro Horiguchi,Alexander Kuzmenkov,Alexander Korotkov) §
以前,只能通过 SQL 函数或进程信号来完成此操作。
在 pg_ctl start 期间正确分离新服务器进程(Paul Guo) §
这可防止调用 pg_ctl 的 shell 脚本后来被中断时,服务器随之关闭。
如果文件系统具有克隆功能,则允许 pg_upgrade 使用它(Peter Eisentraut) §
--clone 选项具有 --link 的优点,同时可以防止新集群启动后旧集群被改动。
允许指定 pg_upgrade 使用的套接字目录(Daniel Gustafsson) §
这通过 --socketdir 控制,默认为当前目录。
允许 pg_checksums 禁用 fsync 操作(Michaël Paquier) §
这通过 --no-sync 选项控制。
修复 pg_test_fsync,使其在 Windows 上报告准确的 open_datasync 耗时(Laurenz Albe) § §
当 pg_dump 通过 INSERT 命令而非 COPY 输出数据时,允许每条 INSERT 包含多行数据(Surafel Temesgen,David Rowley) § §
控制此行为的选项为 --rows-per-insert。
允许 pg_dump 输出 INSERT ... ON CONFLICT DO NOTHING(Surafel Temesgen) §
这可避免恢复期间因冲突而失败。相应选项为 --on-conflict-do-nothing。
将并行 pg_dump 的操作顺序与后续并行 pg_restore 使用的顺序解耦(Tom Lane) §
这使 pg_restore 能够以更充分的并行度执行恢复,尤其是在原始转储未并行执行的情况下。并行 pg_dump 的调度也有所改进。
允许为 pg_dump 和 pg_dumpall 指定 extra_float_digits 设置(Andrew Dunstan) §
这主要用于生成能够在不同源服务器版本之间精确比较的转储。不建议在常规使用中这样做,因为恢复转储时可能丢失精度。
为 pg_dumpall 添加 --exclude-database 选项(Andrew Dunstan) §
添加 CREATE ACCESS METHOD 命令,用于创建新的表类型(Andres Freund,Haribabu Kommi,Álvaro Herrera,Alexander Korotkov,Dmitry Dolgov) § § § § § § § § §
这使开发新的表访问方法成为可能,从而为不同使用场景优化存储。现有的 heap 访问方法仍是默认选项。
添加规划器支持函数接口,以改进优化器对函数的估算、内联和索引使用(Tom Lane) § § §
这允许扩展创建规划器支持函数,提供针对特定函数的选择率、代价和行数估算,这些估算可以依赖函数参数。支持函数还可以提供简化的表示和索引条件,大幅扩展优化的可能性。
简化手动分配的 OID 的重新编号,并为此类 OID 的管理制定新的项目政策(John Naylor,Tom Lane) § §
为新的内置对象(如新函数)手动分配 OID 的补丁,现在应在 8000—9999 范围内随机选择 OID。在开发周期结束时,已提交补丁使用的 OID 将通过新的 renumber_oids.pl 脚本重新编号为较小的数字,目前大约位于 4xxx 范围内。这种做法应能大幅降低不同开发中补丁之间发生 OID 冲突的概率。
虽然没有专门为外部使用预留 OID 的政策,但建议分支项目及其他需要私有手动分配 OID 的项目,使用 7xxx 范围高端的编号。这将避免与最近合入的补丁冲突,而且核心项目应该要很久才会用到该范围。
使用动态库而非静态库构建 Cygwin 二进制文件(Marco Atzeri) §
移除 configure 开关 --disable-strong-random(Michaël Paquier) §
现在必须有强随机数源。
在 Postgres 代码中,printf 系列函数以及 strerror 和 strerror_r 现在在各平台上行为一致(Tom Lane) § § § §
特别是,printf 在所有平台上都能理解 %m;在 Windows 上,strerror 能够处理 Winsock 错误码(以前仅在后端代码中支持,前端代码不支持);strerror_r 则始终遵循 GNU 的返回约定。
要求符合 C99 的编译器,并在 Windows 上要求 MSVC 2013 或更高版本(Andres Freund) §
使用 pandoc 代替 lynx 生成纯文本文档输出文件(Peter Eisentraut) § §
这仅影响 make dist 期间生成的 INSTALL 文件,以及很少使用的纯文本输出文件 postgres.txt。Pandoc 的输出优于 lynx,并能避免某些区域设置/编码问题。需要 Pandoc 1.13 或更高版本。
支持在 PostgreSQL 文档中使用图像(Jürgen Purtz) §
允许在更多情况下将 ORDER BY 排序和 LIMIT 子句下推到 postgres_fdw 外部服务器(Etsuro Fujita) § §
正确遵循引用 postgres_fdw 表的视图上的 WITH CHECK OPTION(Etsuro Fujita) §
虽然 postgres_fdw 表上的 CHECK OPTION 会被忽略(因为引用的是外部表),但此类表上的视图被视为本地视图,因此此更改会对它们实施 CHECK OPTION。以前,只有带有 RETURNING 子句且返回了 CHECK OPTION 值的 INSERT 和 UPDATE 才会得到验证。
允许 pg_stat_statements_reset() 提供更细的控制粒度(Haribabu Kommi,Amit Kapila) §
此函数现在允许重置特定数据库、用户和查询的统计信息。
允许控制 auto_explain 的日志级别(Tom Dunstan,Andrew Dunstan) §
默认值为 LOG。
允许 unaccent 处理某些以组合字符编码的重音(Hugh Ranalli) §
允许 unaccent 移除希腊字符的重音(Tasos Maschalidis) §
为 amcheck 的 bt_index_parent_check() 函数添加参数,以从树根开始检查每个索引元组(Peter Geoghegan) §
以下人员(按字母顺序排列)作为补丁作者、提交者、审查者、测试者 或问题报告者为本版本做出了贡献。
| Abhijit Menon-Sen |
| Achilleas Mantzios |
| Adam Berlin |
| Adam Bielanski |
| Aditya Toshniwal |
| Adrien Nayrat |
| Alan Jackson |
| Albert Schabhuetl |
| Aleksander Alekseev |
| Alex Aktsipetrov |
| Alex Kliukin |
| Alex Macy |
| Alexander Korotkov |
| Alexander Kukushkin |
| Alexander Kuzmenkov |
| Alexander Lakhin |
| Alexandra Ryzhevich |
| Alexey Bashtanov |
| Alexey Ermakov |
| Alexey Kondratov |
| Alexey Kryuchkov |
| Alexey Stepanov |
| Allison Kaptur |
| Álvaro Herrera |
| Alyssa Ross |
| Amit Kapila |
| Amit Khandekar |
| Amit Langote |
| Amul Sul |
| Anastasia Lubennikova |
| André Hänsel |
| Andrea Gelmini |
| Andreas Joseph Krogh |
| Andreas Karlsson |
| Andreas Kunert |
| Andreas Scherbaum |
| Andreas Seltenreich |
| Andrei Yahorau |
| Andres Freund |
| Andrew Dunstan |
| Andrew Fletcher |
| Andrew Gierth |
| Andrew Krasichkov |
| Andrey Borodin |
| Andrey Klychkov |
| Andrey Lepikhov |
| Andy Abelisto |
| Anthony Greene |
| Anthony Skorski |
| Antonin Houska |
| Arne Roland |
| Arseny Sher |
| Arthur Zakirov |
| Ash Marath |
| Ashutosh Bapat |
| Ashutosh Sharma |
| Ashwin Agrawal |
| Aya Iwata |
| Bartosz Polnik |
| Basil Bourque |
| Bernd Helmle |
| Brad DeJong |
| Brigitte Blanc-Lafay |
| Bruce Klein |
| Bruce Momjian |
| Bruno Wolff |
| Chapman Flack |
| Chen Huajun |
| Chris Travers |
| Chris Wilson |
| Christian Hofstaedtler |
| Christoph Berg |
| Christoph Moench-Tegeder |
| Clemens Ladisch |
| Colm McHugh |
| Corey Huinker |
| Craig Ringer |
| Dagfinn Ilmari Mannsåker |
| Daisuke Higuchi |
| Daniel Fiori |
| Daniel Gustafsson |
| Daniel Vérité |
| Daniel Westermann |
| Daniel Wilches |
| Darafei Praliaskouski |
| Daryl Waycott |
| Dave Cramer |
| David Binderman |
| David Fetter |
| David G. Johnston |
| David Rowley |
| David Steele |
| Davy Machado |
| Dean Rasheed |
| Derek Hans |
| Derek Nelson |
| Devrim Gündüz |
| Dian Fay |
| Didier Gautheron |
| Dilip Kumar |
| Dmitry Dolgov |
| Dmitry Marakasov |
| Dmitry Molotkov |
| Dmitry Shalashov |
| Don Seiler |
| Donald Dong |
| Doug Rady |
| Edmund Horner |
| Eduards Bezverhijs |
| Elvis Pranskevichus |
| Emanuel Araújo |
| Emre Hasegeli |
| Eric Cyr |
| Erik Rijkers |
| Ertugrul Kahveci |
| Etsuro Fujita |
| Eugen Konkov |
| Euler Taveira |
| Fabien Coelho |
| Fabrízio de Royes Mello |
| Feike Steenbergen |
| Filip Rembialkowski |
| Gaby Schilders |
| Geert Lobbestael |
| George Tarasov |
| Georgios Kokolatos |
| Gianni Ciolli |
| Gilles Darold |
| Greg Stark |
| Grigory Smolkin |
| Guillaume Lelarge |
| Gunnlaugur Thor Briem |
| Gurjeet Singh |
| Hadi Moshayedi |
| Hailong Li |
| Hans Buschmann |
| Haribabu Kommi |
| Haruka Takatsuka |
| Hayato Kuroda |
| Heikki Linnakangas |
| Hironobu Suzuki |
| Hubert Lubaczewski |
| Hugh Ranalli |
| Ian Barwick |
| Ibrar Ahmed |
| Ildar Musin |
| Insung Moon |
| Ioseph Kim |
| Isaac Morland |
| Ivan Panchenko |
| Jack Kelly |
| Jacob Champion |
| Jaime Casanova |
| Jakob Egger |
| Jakub Glapa |
| Jakub Janecek |
| James Coleman |
| James Inform |
| James Robinson |
| James Sewell |
| James Tomson |
| Jan Chochol |
| Jaroslav Sivy |
| Jean-Christophe Arnu |
| Jean-Marc Voillequin |
| Jean-Pierre Pelletier |
| Jeevan Chalke |
| Jeevan Ladhe |
| Jeff Davis |
| Jeff Janes |
| Jeremy Evans |
| Jeremy Schneider |
| Jeremy Smith |
| Jerry Jelinek |
| Jesper Pedersen |
| Jianing Yang |
| Jie Zhang |
| Jim Nasby |
| Jimmy Yih |
| Joe Conway |
| Joe Wildish |
| Joerg Sonnenberger |
| John Klann |
| John Naylor |
| Jonah Harris |
| Jonathan S. Katz |
| Jorge Gustavo Rocha |
| José Arthur Benetasso Villanova |
| Joshua D. Drake |
| Juan José Santamaría Flecha |
| Julian Hsiao |
| Julian Markwort |
| Julian Schauder |
| Julien Rouhaud |
| Jürgen Purtz |
| Jürgen Strobel |
| Justin Pryzby |
| Kaiting Chen |
| Karen Huddleston |
| Karl Czajkowski |
| Karl O. Pinc |
| Keiichi Hirobe |
| Keith Fiske |
| Ken Tanzer |
| Kenji Uno |
| Kevin Grittner |
| Kevin Hale Boyes |
| Kieran McCusker |
| Kirk Jamison |
| Kohei KaiGai |
| Konstantin Knizhnik |
| Konstantin Kuznetsov |
| Kristjan Tammekivi |
| Kuntal Ghosh |
| Kyle Samson |
| Kyotaro Horiguchi |
| Lætitia Avrot |
| Lars Kanis |
| Laurenz Albe |
| Lim Myungkyu |
| Liu Huailing |
| Liudmila Mantrova |
| Lloyd Albin |
| Luca Ferrari |
| Luis M. Carril |
| Lukas Eder |
| Lukas Fittl |
| Madelaine Thibaut |
| Madeleine Thompson |
| Magnus Hagander |
| Mahendra Singh |
| Mai Peng |
| Maksim Milyutin |
| Maksym Boguk |
| Malthe Borch |
| Manuel Rigger |
| Marco Atzeri |
| Marco Slot |
| Marina Polyakova |
| Mario De Frutos Dieguez |
| Marius Timmer |
| Mark Chambers |
| Mark Dilger |
| Marko Tiikkaja |
| Markus Winand |
| Martín Marqués |
| Masahiko Sawada |
| Masao Fujii |
| Mateusz Guzik |
| Mathias Brossard |
| Matt Williams |
| Matthias Otterbach |
| Matvey Arye |
| Melanie Plageman |
| Mi Tar |
| Michael Banck |
| Michael Davidson |
| Michael Meskes |
| Michael Paquier |
| Michael Vitale |
| Michel Pelletier |
| Mikalai Keida |
| Mike Palmiotto |
| Mithun Cy |
| Morgan Owens |
| Murat Kabilov |
| Nathan Bossart |
| Nawaz Ahmed |
| Neeraj Kumar |
| Nick Barnes |
| Nico Williams |
| Nikita Glukhov |
| Nikolay Shaplov |
| Ning Yu |
| Nishant Fnu |
| Noah Misch |
| Norbert Benkocs |
| Noriyoshi Shinoda |
| Oleg Bartunov |
| Oleg Samoilov |
| Oleksii Kliukin |
| Ondrej Bouda |
| Oskari Saarenmaa |
| Pan Bian |
| Patrick Francelle |
| Patrick McHardy |
| Paul A. Jungwirth |
| Paul Bonaud |
| Paul Guo |
| Paul Martinez |
| Paul Ramsey |
| Paul Schaap |
| Paul van der Linden |
| Pavan Deolasee |
| Pavel Oskin |
| Pavel Raiskup |
| Pavel Stehule |
| Peifeng Qiu |
| Peter Billen |
| Peter Eisentraut |
| Peter Geoghegan |
| Peter Neave |
| Petr Fedorov |
| Petr Jelínek |
| Petr Slavov |
| Petru-Florin Mihancea |
| Phil Bayer |
| Phil Florent |
| Philip Dubé |
| Pierre Ducroquet |
| Piotr Gabriel Kosinski |
| Piotr Stefaniak |
| Piotr Wlodarczyk |
| Prabhat Sahu |
| Quentin Rameau |
| Rafael Castro |
| Rafia Sabih |
| Rahila Syed |
| Rajkumar Raghuwanshi |
| Rares Salcudean |
| Raúl Marín Rodríguez |
| Regina Obe |
| Renaud Navarro |
| Richard Guo |
| Rick Otten |
| Rikard Falkeborn |
| RK Korlapati |
| Robbie Harwood |
| Robert Haas |
| Robert Treat |
| Robert Vollmert |
| Roger Curley |
| Roman Zharkov |
| Ronan Dunklau |
| Rui Hai Jiang |
| Rushabh Lathia |
| Ryan Lambert |
| Ryo Matsumura |
| Ryohei Nagaura |
| Ryohei Takahashi |
| Samuel Williams |
| Sand Stone |
| Sanyo Capobiango |
| Satoru Koizumi |
| Sean Johnston |
| Serge Latyntsev |
| Sergei Kornilov |
| Sergey Pashkov |
| Sergio Conde Gómez |
| Shawn Debnath |
| Shay Rojansky |
| Sho Kato |
| Shohei Mochizuki |
| Shouyu Luo |
| Simon Riggs |
| Sivasubramanian Ramasubramanian |
| Slawomir Chodnicki |
| Stas Kelvish |
| Stefan Kadow |
| Stepan Yankevych |
| Stephen Amell |
| Stephen Frost |
| Steve Rogerson |
| Steve Singer |
| Steven Winfield |
| Surafel Temesgen |
| Suraj Kharage |
| Suresh Kumar R |
| Takayuki Tsunakawa |
| Takeshi Ideriha |
| Takuma Hoshiai |
| Tasos Maschalidis |
| Tatsuo Ishii |
| Tatsuro Yamada |
| Teodor Sigaev |
| Thom Brown |
| Thomas Munro |
| Thomas Poty |
| Tillmann Schulz |
| Tim Möhlmann |
| Timur Birsh |
| Tobias Bussmann |
| Tom Cassidy |
| Tom Dunstan |
| Tom Gottfried |
| Tom Lane |
| Tomas Vondra |
| Tushar Ahuja |
| Ulf Adams |
| Vaishnavi Prabakaran |
| Victor Petrovykh |
| Victor Wagner |
| Victor Yegorov |
| Vijaykumar Jain |
| Vik Fearing |
| Vlad Sterzhanov |
| Vladimir Baranoff |
| Vladimir Kriukov |
| Wu Fei |
| Yaroslav Schekin |
| Yi Huang |
| Yoshikazu Imai |
| Yugo Nagata |
| Yulian Khodorkovskiy |
| Yuming Wang |
| YunQiang Su |
| Yuri Kurenkov |
| Yusuke Egashira |
| Yuzuko Hosoya |
| Zhou Digoal |