发行日期: 2019-10-03
PostgreSQL12中的主要改进包括:
一般性能改进,包括:
优化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 path语言。
存储生成的列。
Nondeterministic ICU collations,可以进行不分大小写和不分重音的分组和排序。
新的认证功能,包括:
使用 GSSAPI验证时,对TCP/IP连接进行加密。
使用DNS SRV记录发现LDAP服务器。
多因素验证,使用 clientcert=verify-full
选项,并结合 pg_hba.conf
中的额外验证方法。
以上项目将在下面的章节中详细解释。
对于希望从以前的版本迁移数据的用户,需要使用pg_dumpall或使用pg_upgrade或逻辑复制进行转储/恢复。 请参阅第 18.6 节了解关于迁移到新的主要版本的一般信息。
第12版包含一些可能影响与以前版本兼容性的变化。 请注意以下不兼容的地方:
删除oid列的特殊行为。 (Andres Freund, John Naylor)
以前,在创建表的过程中,可以使用WITH OIDS
来指定一个通常不可见的oid
列;这一功能已经被删除。 列仍然可以显式声明为oid
类型。 对具有使用WITH OIDS
创建的列的表的操作将需要调整。
以前系统目录中有隐藏的oid
列,现在有普通的oid
列。 因此,SELECT *
现在将输出这些列,而以前只有在显式选择时才会显示。
删除数据类型abstime
、reltime
和tinterval
。 (Andres Freund)
这些类型已经被SQL标准类型(如timestamp
)所淘汰。
删除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
大于零时(现在是默认值),只输出保留精确二进制值所需的最小数字。
此外,浮点指数的格式现在在各个平台上都是统一的:除非需要三位数,否则使用两位数。在以前的版本中,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 -
来将dump内容发送到标准输出。
(Euler Taveira)
以前,如果没有指定目的地,这种情况会默认发生,但这被认为是不友好的。
在psql的/pset format
命令中不允许使用非唯一的缩写。(Daniel Vérité)
例如,以前,/pset format a
选择了aligned
;现在它将失败,因为它同样可以意味着asciidoc
。
在新的btree索引中,最大索引条目长度减少了8个字节,以改善对重复条目的处理。 (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
类型的。 这消除了在比较和排序行为中的语义不匹配,这可以极大地提高在限制对象名列的information_schema
视图上的查询性能。例如
SELECT ... FROM information_schema.tables WHERE table_name < 'foo';
现在将默认使用 “C”-locale 比较语义,而不是像以前那样使用数据库的默认整理。在这些列上的排序也将遵循“C”排序规则。 可以通过添加COLLATE "default"
子句来强制执行之前的行为(和低效率)。
删除禁用动态共享内存的功能 (Kyotaro Horiguchi)
具体来说,dynamic_shared_memory_type不能再设置为none
。
更严格地解析libpq整数连接参数。 (Fabien Coelho)
在以前的版本中,如果在连接参数connect_timeout
、keepalives
、keepalives_count
、keepalives_idle
、keepalives_interval
和port
中使用错误的整数值,会导致libpq忽略这些值或以错误的错误信息失败。
以下是PostgreSQL12和上一个主要版本之间的详细说明。
提高对分区表的许多操作的性能。 (Amit Langote, David Rowley, Tom Lane, Álvaro Herrera)
允许对有数千个子分区的表,通过只影响少数分区的操作进行有效处理。
允许foreign keys引用分区表。 (Á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
留下不正确的依赖状态的bug,从而使后续的操作发生错误,例如当表被删除时,不删除前分区的子索引。
(Tom Lane)
提高有许多重复的btree索引的性能和空间利用率。 (Peter Geoghegan, Heikki Linnakangas)
以前,重复的索引条目在其重复的组中被无序存储。 这在索引插入时造成了开销,由于过度的页面分割而浪费了空间,并且降低了 VACUUM
回收整个页面的能力。重复的索引条目现在按堆存储顺序排序。
以前版本的索引pg_upgrade将不会有这些优势。
允许多列btree索引更小。 (Peter Geoghegan, Heikki Linnakangas)
内部页和最小/最大叶页指示器现在只存储索引键,直到更改键,而不是所有索引键。这也提高了索引访问的局部性。
以前版本的索引pg_upgrade将不会有这些优势。
通过减少锁定开销来提高btree索引插入的速度。 (Alexander Korotkov)
增加对SP-GIST索引的最近邻(KNN)搜索的支持。 (Nikita Glukhov, Alexander Korotkov, Vlad Sterzhanov)
减少GiST、GIN和SP-GiST索引创建的WAL写入开销。 (Anastasia Lubennikova, Andrey V. Lepikhov)
允许index-only扫描索引,以便在有很多列的索引上更有效率。 (Konstantin Knizhnik)
提高GiST索引的vacuum扫描性能。 (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
来强制多引用的 CTEs 内联。以前,CTEs 从不内联,总是在查询的其余部分之前被评估。
允许控制何时将通用计划用于预备语句 (Pavel Stehule)
这是由plan_cache_mode服务器参数控制的。
改进对只有一个子代的分区和UNION ALL
查询的优化。(David Rowley)
改进对没有检查约束的domains的处理。(Tom Lane)
纯粹作为类型别名的域不再造成优化困难。
当LEAST
和GREATEST
的参数为常数时,对其调用进行预评估。
(Vik Fearing)
提高优化器验证部分索引是否可以在查询中使用IS NOT NULL
条件的能力。 (Tom Lane, James Coleman)
现在,在更多的情况下,当调用查询涉及转换或大的
子句时,可以认识到可用性。
x
IN (array
)
使用为每一列定义的校对计算ANALYZE
统计数据 (Tom Lane)
以前,所有的统计数据都使用数据库的默认校对。 这有可能为具有非默认校对的列提供更好的优化行为。
改进对不平等比较的选择性估计
在ctid
列上。(Edmund Horner)
改进对tid
类型列的连接优化。
(Tom Lane)
这些变化主要提高了ctid
列的自连接效率。
修正部分btree比较运算符和支持函数的防泄密指定。(Tom Lane)
这允许一些以前在安全屏障视图或行级安全的情况下无法应用的优化。
如果服务器在编译时支持Just-in-Time (JIT)编译,则默认启用它。 (Andres Freund)
需要注意的是,这个支持不是默认编译的,而是必须在配置编译时明确选择。
提升关键词查询速度 (John Naylor, Joerg Sonnenberger, Tom Lane)
提高position()
及相关函数中多字节字符的搜索性能。(Heikki
Linnakangas)
允许toasted值被最小化解压。(Paul Ramsey)
这对于只需要检查toasted的字段的初始部分的例程很有用。
允许 ALTER TABLE ... SET NOT NULL
以避免不必要的表扫描。 (Sergei
Kornilov)
当表的列约束可以被识别为不允许有空值时,就可以进行优化。
允许ALTER TABLE ... ... SET DATA TYPE
在timestamp
和timestamptz
之间改变,以避免在会话时区为UTC时重写表。
(Noah Misch)
在UTC时区,这两种数据类型是二进制兼容的。
提高将字符串转换为int2
或int4
整数的速度。 (Andres Freund)
当处于SERIALIZABLE
隔离模式时,允许并行查询。(Thomas Munro)
以前,在该模式下,并行是被禁用的。
使用pread()
和pwrite()
进行随机I/O。(Oskari Saarenmaa, Thomas Munro)
这样就减少了I/O所需的系统调用次数。
提高FreeBSD上进程标题的设置速度。(Thomas Munro)
只允许记录一定比例的事务的语句。 (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
值为0来显示。
增加列出归档目录内容的功能。 (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)
让walreceiver将其应用名称设置为集群名称,如果设置为集群名称的话。(Peter Eisentraut)
将最后收到的备用消息的时间戳添加到pg_stat_replication
。
(Lim Myungkyu)
添加一个等待事件,用于WAL段的fsync。(Konstantin Knizhnik)
添加GSSAPI加密支持。 (Robbie Harwood, Stephen Frost)
该功能允许在使用GSSAPI认证时对TCP/IP连接进行加密,而无需设置单独的加密设施(如SSL)。 为了支持这一功能,在 pg_hba.conf
中添加 hostgssenc
和 hostnogssenc
记录类型,用于选择是否使用 GSSAPI 加密的连接,对应于现有的 hostssl
和 hostnossl
记录类型。此外,还有一个新的 gssencmode libpq 选项,以及一个 pg_stat_gssapi 系统视图。
允许使用 clientcert
pg_hba.conf
选项来检查数据库用户名是否与客户证书的通用名相匹配。
(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)
这使得autovacuum操作在默认情况下可以更快地进行。
允许vacuum_cost_delay来指定 亚毫秒级的延迟,通过接受小数值来实现。 (Tom Lane)
允许基于时间的服务器参数使用microseconds的单位(us
)。(Tom Lane)
允许对整数服务器参数进行小数输入(Tom Lane)
例如,现在允许使用SET work_mem = '30.1GB'
,即使work_mem
是一个整数参数。 在进行任何必要的单位转换后,该值将被四舍五入为整数。
允许为浮点服务器参数定义单位。 (Tom Lane)
添加wal_recycle和wal_init_zero服务器参数来控制WAL文件的回收。 (Jerry Jelinek)
避免文件回收对于像ZFS这样的复制-写文件系统是有益的。
添加服务器参数tcp_user_timeout来控制服务器的TCP超时。 (Ryohei Nagaura)
允许控制最小和最大的SSL协议版本(Peter Eisentraut)
添加服务器参数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
选项控制的。
增加对生成列的支持。 (Peter Eisentraut)
生成的列的内容是通过表达式(包括对同一表中其他列的引用)计算出来的,而不是由INSERT
或UPDATE
命令指定的。
在COPY FROM
中添加一个WHERE
子句来控制哪些行被接受。 (Surafel Temesgen)
这提供了一种简单的方法来过滤输入的数据。
允许更灵活地添加枚举值 (Andrew Dunstan, Tom Lane, Thomas Munro)
以前,ALTER TYPE...ADD VALUE
不能在事务中调用。除非它是创建枚举类型的同一事务的一部分。 现在它可以在以后的事务中被调用,只要新的枚举值在提交后才被引用。
添加结束事务和开始新事务的命令。 (Peter Eisentraut)
添加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
和autovacuum设置。 (仍然需要设置allow_system_table_mods。)
在选择外键的默认约束名称时,使用所有键列的名称。 (Peter Eisentraut)
以前,约束名称中只包含第一列名称,导致多列外键的模糊性。
更新有关Unicode的各种知识,使之符合Unicode 12.1.0。 (Peter Eisentraut)
例如,这修复了psql会对涉及组合字符的输出进行错误格式化的情况。
更新雪球词干字典,支持新语言。 (Arthur Zakirov)
允许创建collations,以报告字符串的平等性,对于非位相等的字符串,允许创建collations。 (Peter Eisentraut)
此功能支持“nondeterministic”整理,可以定义大小写和口音无关的平等比较。因此,例如,可以比以前更容易地对文本列进行不区分大小写的唯一性约束。 这仅支持 ICU 的整理。
在旧版ICU上增加对ICU校对属性的支持。 (Peter Eisentraut)
这允许在所有ICU版本中以一致的方式定制校对规则。
允许数据类型name与其他文本类型进行更无缝的比较。 (Tom Lane)
类型name
现在的行为很像一个域,在类型text
上有默认的校对“C”.这允许更有效地处理跨类型比较。
增加对SQL/JSON path语言的支持。 (Nikita Glukhov, Teodor Sigaev, Alexander Korotkov, Oleg Bartunov, Liudmila Mantrova)
这允许使用SQL标准语言对JSON
值执行复杂的查询。
增加对超曲面函数的支持。(Lætitia Avrot)
同时添加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()
被并行workers运行,因为它们不是并行安全的。(Michaël Paquier)
允许RECORD
和RECORD[]
在查询的列定义列表中作为table函数的列类型使用,该函数被声明为返回RECORD
。 (Elvis Pranskevichus)
允许在同一个PL/pgSQL函数中使用与这些命令名称相同的SQL命令和变量。 (Tom Lane)
例如,允许一个名为comment
的变量存在于调用COMMENT
SQL命令的函数中。以前这种组合会导致解析错误。
在PL/pgSQL中增加了新的可选的警告和错误检查。 (Pavel Stehule)
新的检查允许对INTO
列数和单行结果进行运行时验证。
添加连接参数tcp_user_timeout来控制libpq的TCP超时。(Ryohei Nagaura)
允许libpq(因此psql)在错误信息中只报告SQLSTATE
值。(Didier Gautheron)
添加libpq函数PQresultMemorySize()
来报告查询结果使用的内存。 (Lars Kanis, Tom Lane)
删除libpq的options
连接参数中的no-display/debug标志。 (Peter Eisentraut)
这样就可以通过postgres_fdw来设置这个参数。
允许ecpg创建数据类型bytea
的变量。 (Ryo Matsumura)
这允许ECPG客户端直接与bytea
数据交互,而不是使用编码形式。
为ECPG增加PREPARE AS
支持。 (Ryo Matsumura)
允许vacuumdb根据表的纵贯线为选择表vacuum。(Nathan Bossart)
选项为--min-xid-age
和--min-mxid-age
。
允许vacuumdb禁止等待锁或跳过所有可见页面。 (Nathan Bossart)
选项是--跳过锁定
和--禁用跳页
。
在命令行实用程序的输出中添加着色功能。 (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格式csv
或命令行--csv
选项控制的。
在psql的/help
中显示手动页面URL为一个SQL命令的输出。 (Peter Eisentraut)
在psql的/conninfo
中显示IP地址。
(Fabien Coelho)
改进CREATE TABLE
, CREATE TRIGGER
, CREATE EVENT TRIGGER
,ANALYZE
,EXPLAIN
的标签完成度。 VACUUM
、ALTER TABLE
、ALTER INDEX
、ALTER DATABASE
和ALTER INDEX ALTER COLUMN
。
(Dagfinn Ilmari Mannsåker, Tatsuro Yamada, Michaël Paquier,
Tom Lane, Justin Pryzby)
允许将查询产生的值分配给pgbench变量。 (Fabien Coelho, Álvaro Herrera)
这方面的命令是/gset
。
提高pgbench的--速率
选项的精度。(Tom Lane)
用更清晰的信息和返回代码改进pgbench的错误报告。 (Peter Eisentraut)
允许通过pg_ctl来控制日志文件的旋转。 (Kyotaro Horiguchi, Alexander Kuzmenkov, Alexander Korotkov)
以前,这只能通过SQL函数或进程信号来实现。
在pg_ctlstart
期间,适当地分离新的服务器进程。
(Paul Guo)
这可以防止调用pg_ctl的shell脚本后来被中断时服务器被关闭。
允许pg_upgrade使用文件系统的克隆功能,如果有的话。(Peter Eisentraut)
--clone
选项具有--link
的优点,同时防止在新的集群启动后改变旧集群。
允许在pg_upgrade中指定使用的socket目录。(Daniel Gustafsson)
这由--socketdir
控制,默认为当前目录。
允许pg_checksums禁用fsync操作。 (Michaël Paquier)
这是由--no-sync
选项控制的。
允许pg_rewind禁用fsync操作。 (Michaël Paquier)
修正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可以执行更充分的并行还原,特别是在原始dump没有并行完成的情况下。 并行pg_dump的调度也得到了一定的改进。
允许为pg_dump和pg_dumpall指定extra_float_digits设置。(Andrew Dunstan)
这主要用于制作不同源服务器版本之间完全可比的转储。 不建议正常使用,因为当还原转储时可能会导致精度损失。
添加--exclude-database
选项到
pg_dumpall。(Andrew Dunstan)
添加CREATE ACCESS METHOD命令来创建新的表类型。 (Andres Freund, Haribabu Kommi, Álvaro Herrera, Alexander Korotkov, Dmitry Dolgov)
这使得开发新的表访问方法成为可能,它可以针对不同的用例优化存储。 现有的heap
访问方法仍然是默认的。
增加planner支持函数接口,以改进优化器估计、内联和函数的索引。 (Tom Lane)
这允许扩展创建规划师支持函数,这些函数可以提供特定函数的选择性、成本和行数估计,这些估计可以取决于函数的参数。 支持函数还可以提供简化的表示和索引条件,大大扩展了优化的可能性。
简化人工分配的OID的重新编号,并为管理这些OID制定新的项目策略。 (John Naylor, Tom Lane)
为新的内置对象(如新函数)手动分配 OID 的补丁现在应该随机选择 8000—9999 范围内的 OID。 在开发周期结束时,已提交的补丁所使用的 OID 将被重新编号为较低的数字,目前在 4xxx
范围内,使用新的 renumber_oids.pl
脚本。 这种方法应该可以大大降低不同进程中补丁之间的 OID 冲突的几率。
虽然没有特定的政策将任何OID保留给外部使用,但建议需要手动分配私人OID的fork和其他项目使用7xxx
范围内的数字。 这将避免与最近合并的补丁发生冲突,而且核心项目达到这个范围应该还需要很长时间。
使用动态库而非静态库构建Cygwin二进制文件。(Marco Atzeri)
删除 configure 开关 --disable-strong-random
(Michaël Paquier)
现在需要一个强大的随机数源。
printf
系列函数,以及
作为strerror
和strerror_r
,现在在Postgres代码中跨平台的行为是统一的。 (Tom Lane)
值得注意的是,printf
在任何地方都能理解%m
;在Windows上,strerror
处理Winsock错误代码(过去在后端代码中是这样做的,但在前端代码中不是)。
strerror_r
总是遵循GNU的返回约定。
需要符合C99标准的编译器,以及MSVC2013或更高版本的Windows。(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查询的优化器成本核算。 (Etsuro Fujita)
在引用postgres_fdw表的视图上,正确地执行WITH CHECK OPTION
。
(Etsuro Fujita)
虽然 postgres_fdw表上的CHECK OPTION
会被忽略(因为引用是外来的),但这些表上的视图被认为是本地的,所以这个变化会对它们执行CHECK OPTION
。 以前,只有INSERT
s和UPDATE
s与RETURNING
子句返回CHECK OPTION
值时才会被验证。
允许pg_stat_statements_reset()
更加细化。(Haribabu Kommi, Amit Kapila)
该函数现在允许重置特定数据库、用户和查询的统计数据。
允许控制auto_explain日志级别。 (Tom Dunstan, Andrew Dunstan)
默认为LOG
。
更新unaccent规则,增加新的标点和符号。(Hugh Ranalli, Michaël Paquier)
允许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 |