发布日期: 2017-10-05
PostgreSQL 10 中的主要增强包括:
使用发布/订阅的逻辑复制
声明表分区
提高查询的并行性
重要的一般性能改进
更强的密码认证,基于SCRAM-SHA-256
改善的监测和控制
以上各项在下面的部分有更详细的解释。
想要从之前的任意版本中迁移数据的用户,需要使用pg_dumpall 转储/恢复,或者使用pg_upgrade。
版本10包含一些修改,可能会影响到与之前版本的兼容性。注意以下不兼容性:
从任何以前的PostgreSQL主版本中pg_upgrade 之后,必须重建哈希索引 (Mithun Cy, Robert Haas, Amit Kapila)
主要的哈希索引改进需要这个要求。pg_upgrade 将创建一个脚本来协助它。
重命名预写式日志目录pg_xlog
为pg_wal
,并重命名事务状态目录
pg_clog
为pg_xact
(Michael Paquier)
用户偶尔会认为这些目录只包含非必要的日志文件, 并且手动删除了预写日志文件或事务状态文件,导致无法恢复的数据丢失。 这些名称的变化是为了阻止将来的这种错误。
重命名引用“xlog”的SQL函数、工具和选项为引用 “wal” (Robert Haas)
例如,pg_switch_xlog()
成为
pg_switch_wal()
,pg_receivexlog
成为pg_receivewal,--xlogdir
成为--waldir
。这是为了与pg_xlog
目录名称改变相一致;通常“xlog”术语不再用于任何面向用户的地方。
重命名WAL相关的函数和视图使用lsn
而不是location
(David Rowley)
之前有两个术语混杂在一起。
修改查询的SELECT
列表中出现的设置返回函数的实现方式
(Andres Freund)
现在,在评估SELECT
列表中的标量表达式之前评估了设置返回函数,
就好像它们已经放置在LATERAL FROM
子句中一样。
这允许在存在多个设置返回函数的情况下更安全的语义。如果它们返回不同数量的行,
则通过添加空值来扩展较短的结果以匹配最长的结果。以前,结果是循环的,
直到它们全部同时终止,产生等于函数周期的最小公倍数的许多行。另外,
在CASE
和COALESCE
结构中现在不允许设置返回函数。有关更多信息,请查看
第 37.4.8 节。
在UPDATE ... SET
(
中使用标准行构造器语法
(Tom Lane)
column_list
) = row_constructor
现在可以用关键字ROW
开始row_constructor
;
以前不得不省略。如果只有一个列名出现在column_list
中,
那么row_constructor
现在必须使用ROW
关键字,否则它不是有效的行构造函数,只是一个加括号的表达式。此外,
在row_constructor
中发生的
现在扩展为多个列,
就像table_name
.*row_constructor
的其他用法一样。
当ALTER TABLE ... ADD PRIMARY KEY
标记列
NOT NULL
时,该更改现在也传播到继承子表 (Michael Paquier)
防止语句级别的触发器在每个语句中触发多次 (Tom Lane)
情况包括可写CTE更新之前由包含语句或另一个可写CTE更新过的同一个表时,
会多次触发BEFORE STATEMENT
或
AFTER STATEMENT
触发器。另外,如果受到外键强制操作
(例如ON DELETE CASCADE
)影响的表上的语句级触发器,
则每个外部SQL语句可以触发多次。这与SQL标准是相反的,所以改变它。
移动序列的元数据字段到一个新的pg_sequence
系统目录 (Peter Eisentraut)
序列关系现在只存储nextval()
可以修改的字段,有
last_value
、log_cnt
和is_called
。其他序列属性,
比如开始值和增量,保存在pg_sequence
目录的相应行中。ALTER SEQUENCE
更新现在完全是事务性的,
意味着序列被锁定直到提交。nextval()
和
setval()
函数保持非事务性。
这种变化引起的主要不兼容性是,从一个序列关系中选择现在只返回上述三个字段。
要获得序列的其他属性,应用程序必须查看pg_sequence
。
新的系统视图pg_sequences
也可以用于此目的;它提供了与现有代码更兼容的列名称。
还重新设计了序列的psql的\d
命令的输出。
默认情况下,恢复备份所需的WAL需要使用 pg_basebackup流式传输 (Magnus Hagander)
这修改了pg_basebackup的
-X
/--wal-method
默认为stream
。
添加了选项值none
重现老的行为。
删除了pg_basebackup选项-x
(使用-X fetch
替代)。
修改逻辑复制使用pg_hba.conf
的方式 (Peter Eisentraut)
在以前的版本中,逻辑复制连接需要数据库字段中的replication
关键字。到了这个版本,逻辑复制匹配将使用数据库名称或关键字比如
all
来匹配普通项。物理复制继续使用replication
关键字。因为内置逻辑复制在这个版本中是新的,
因此该更改仅影响使用第三方逻辑复制插件的用户。
让所有pg_ctl操作默认等待完成 (Peter Eisentraut)
以前一些pg_ctl动作并不等待完成,并且需要使用
-w
来完成。
将服务器参数log_directory的默认值从
pg_log
修改为log
(Andreas Karlsson)
添加配置参数ssl_dh_params_file 为自定义OpenSSL DH参数声明文件名 (Heikki Linnakangas)
这取代了硬编码的,没有记录的文件名dh1024.pem
。
请注意,默认不再检查dh1024.pem
;如果要使用自定义DH参数,
则必须设置此选项。
将用于OpenSSL临时DH密码的默认DH参数大小增加到2048位 (Heikki Linnakangas)
内编译DH参数的大小从1024增加到2048位,使得DH密钥交换更加抵抗暴力攻击。 但是,一些旧的SSL实现,特别是Java运行时环境版本6的某些修订, 将不会接受超过1024位的DH参数,因此将无法通过SSL进行连接。 如果需要支持这样的旧客户端,则可以使用自定义的1024位DH参数, 而不是内编译的默认值。请参阅ssl_dh_params_file。
删除在服务器上存储未加密密码的功能 (Heikki Linnakangas)
password_encryption服务器参数不再支持
off
或plain
。
CREATE/ALTER USER ... PASSWORD
中不再支持
UNENCRYPTED
选项。类似的,
--unencrypted
选项已经从createuser
中删除。从旧版本迁移的未加密密码将在本版本中进行加密存储。
password_encryption
的默认设置仍然是
md5
。
添加min_parallel_table_scan_size 和min_parallel_index_scan_size 服务器参数控制并行查询 (Amit Kapila, Robert Haas)
这些替换了min_parallel_relation_size
,它太泛化了。
不要在shared_preload_libraries 和相关的服务器参数中小写未引用的文本 (QL Zhuo)
这些设置实际上是文件名的列表, 但它们以前被视为具有不同解析规则的SQL标识符列表。
删除sql_inheritance
服务器参数 (Robert Haas)
修改该设置的默认值导致引用父表的查询不包括子表。然而,SQL 标准是要求包括子表的,并且这是PostgreSQL 7.1 之后的默认值。
允许将多维数组传递到PL/Python函数,并作为嵌套的Python列表返回 (Alexey Grishchenko, Dave Cramer, Heikki Linnakangas)
这个特性需要在PL/Python中处理复合类型数组时向后不兼容。以前,
您可以通过编写例如[[col1,col2],[col1,col2]]
来返回一个复合类型数组。但现在它被解释为一个二维数组。现在,
数组中的复合类型必须写成Python元组,而不是列表,以解决歧义问题;
也就是写入[(col1, col2), (col1, col2)]
。
删除PL/Tcl的“module”自动加载工具 (Tom Lane)
这个功能已经被新的服务器参数pltcl.start_proc 和pltclu.start_proc所替代,这些参数比较容易使用, 而且更加类似于在其他PL中可用的功能。
从8.0之前的服务器中转储删除pg_dump/pg_dumpall 支持 (Tom Lane)
需要从8.0之前的服务器中转储的用户将需要使用 PostgreSQL 9.6或更早版本的转储程序。 结果输出仍然应该成功加载到较新的服务器。
删除对浮点时间戳和间隔的支持 (Tom Lane)
这将删除配置的--disable-integer-datetimes
选项。
浮点时间戳几乎没有优势,并且自从PostgreSQL 8.3
之后并不是默认的。
删除客户端/服务器协议版本1.0的服务器支持 (Tom Lane)
该协议自PostgreSQL 6.3以来没有客户端支持。
删除contrib/tsearch2
模块 (Robert Haas)
该模块提供了与8.3之前的PostgreSQL 版本中提供的全文搜索版本的兼容性。
删除createlang和droplang 命令行应用 (Peter Eisentraut)
这从PostgreSQL 9.1开始就废弃了。
取而代之的,直接使用CREATE EXTENSION
和DROP
EXTENSION
。
删除对版本0函数调用约定的支持 (Andres Freund)
提供C编码功能的扩展现在必须符合版本1的调用约定。 版本0自2001年以来已经弃用。
下面你会找到PostgreSQL 10 和前一个主要版本之间变化的详细说明。
支持并行B-tree索引扫描 (Rahila Syed, Amit Kapila, Robert Haas, Rafia Sabih)
该修改允许B-tree索引页被单独的并行工作者搜索。
支持并行位图堆扫描 (Dilip Kumar)
这允许单个索引扫描分派并行工作人员来处理堆的不同区域。
允许合并连接并行执行 (Dilip Kumar)
允许不相关的子查询并行运行 (Amit Kapila)
提高并行工作人员返回预先排序的数据的能力 (Rushabh Lathia)
增加过程语言函数中的并行查询使用 (Robert Haas, Rafia Sabih)
添加max_parallel_workers 服务器参数以限制可用于查询并行的工作进程的数量 (Julien Rouhaud)
此参数可以设置为低于max_worker_processes, 以保留工作进程以用于并行查询以外的目的。
添加预写日志支持散列索引 (Amit Kapila)
这使得哈希索引崩溃安全和可复制。之前有关其使用的警告消息将被删除。
提高哈希索引性能 (Amit Kapila, Mithun Cy, Ashutosh Sharma)
为INET
和CIDR
数据类型添加
SP-GiST索引支持 (Emre Hasegeli)
添加选项以允许BRIN索引摘要更积极地发生 (Álvaro Herrera)
当创建一个新的页面范围时,一个新的CREATE
INDEX
选项可以自动汇总前一个BRIN页面范围。
添加函数删除并重新添加BRIN索引范围的 BRIN摘要 (Álvaro Herrera)
新的SQL函数brin_summarize_range()
为指定的范围更新BRIN索引摘要,
brin_desummarize_range()
删除摘要。
这有助于更新由于UPDATE
和DELETE
变小的范围摘要。
提高确定BRIN索引扫描是否有益的准确性 (David Rowley, Emre Hasegeli)
允许通过更有效地重用索引空间来更快的插入和更新GiST (Andrey Borodin)
在GIN索引的清理过程中减少页面锁定 (Andrey Borodin)
减少更改表参数所需的锁定 (Simon Riggs, Fabrízio Mello)
例如,更改一个表的effective_io_concurrency设置现在可以使用一个更轻量级的锁完成。
允许调整谓词锁升级阈值 (Dagfinn Ilmari Mannsåker)
锁升级现在可以通过两个新的服务器参数控制,max_pred_locks_per_relation和 max_pred_locks_per_page。
添加多列优化程序统计信息以计算相关比率和不同值的数量 (Tomas Vondra, David Rowley, Álvaro Herrera)
新增命令是CREATE STATISTICS
、
ALTER STATISTICS
和
DROP STATISTICS
。
此功能有助于估算查询内存使用情况,以及组合各个列的统计信息。
改善被行级安全限制影响的查询性能 (Tom Lane)
优化器现在对可以放置RLS过滤器条件的位置有更多的了解, 从而允许生成更好的计划,同时仍然安全地执行RLS条件。
加速使用numeric
类型算术,包括一些SUM()
、
AVG()
和STDDEV()
,
计算运行时总和的聚合函数(Heikki Linnakangas)
通过使用基数树来提高字符编码转换的性能 (Kyotaro Horiguchi, Heikki Linnakangas)
减少查询执行期间的表达式评估开销,以及计划节点调用开销 (Andres Freund)
这对处理多行的查询特别有用。
允许散列聚合与分组集合一起使用 (Andrew Gierth)
使用唯一性保证来优化某些连接类型 (David Rowley)
提高macaddr
数据类型的排序性能 (Brandur Leach)
减少引用数千个关系的会话中的统计信息跟踪开销 (Aleksander Alekseev)
允许显式控制EXPLAIN
的规划和执行时间的显示 (Ashutosh Bapat)
默认情况下,计划和执行时间由EXPLAIN ANALYZE
显示,
在其他情况下不显示。新的EXPLAIN
选项
SUMMARY
允许对此进行显式控制。
添加默认监视角色 (Dave Page)
新的角色pg_monitor
、pg_read_all_settings
、
pg_read_all_stats
和pg_stat_scan_tables
允许简化权限配置。
在REFRESH MATERIALIZED
VIEW
期间正确的更新统计信息收集器 (Jim Mlodgenski)
更改log_line_prefix的默认值,使其包含当前时间戳 (以毫秒为单位)以及每行postmaster日志输出中的进程ID (Christoph Berg)
之前的默认是一个空的前缀。
添加函数以返回日志和WAL目录内容 (Dave Page)
新的函数是pg_ls_logdir()
和pg_ls_waldir()
,
可以由带有适当权限的非超级用户执行。
添加函数pg_current_logfile()
读取日志收集器的当前stderr和csvlog输出文件名称
(Gilles Darold)
在postmaster启动期间,报告服务器日志中每个监听槽的地址和端口号 (Tom Lane)
另外,当日志记录未能绑定侦听槽时,请包含我们尝试绑定的特定地址。
减少关于加载子进程的启动和停止的日志冗余 (Tom Lane)
这些现在是DEBUG1
级别的消息。
减少由log_min_messages 控制的较低编号调试级别的消息冗余 (Robert Haas)
这也改变了client_min_messages调试级别的详细程度。
pg_stat_activity
添加低级别等待状态的pg_stat_activity
报告 (Michael Paquier, Robert Haas, Rushabh Lathia)
此更改可以报告许多低级别的等待条件,包括锁定等待,文件读取/写入/fsyncs, 客户端读取/写入以及同步复制。
在pg_stat_activity
中显示辅助进程、
后台工作者和walsender进程 (Kuntal Ghosh,
Michael Paquier)
这简化了监控。一个新的backend_type
字段标识进程类型。
允许pg_stat_activity
显示并行工作进程执行的SQL查询 (Rafia Sabih)
重命名
pg_stat_activity
.wait_event_type
的值LWLockTranche
和
LWLockNamed
为LWLock
(Robert Haas)
这使得输出更加一致。
添加SCRAM-SHA-256 支持用于密码协商和存储 (Michael Paquier, Heikki Linnakangas)
这提供了比现有的md5
协商和存储方法更好的安全性。
将password_encryption服务器参数
从boolean
更改为enum
(Michael Paquier)
这是支持更多密码散列选项所必需的。
添加视图pg_hba_file_rules
显示pg_hba.conf
的内容 (Haribabu
Kommi)
这显示文件内容,而不是当前活动的设置。
支持多个RADIUS服务器 (Magnus Hagander)
所有RADIUS相关的参数现在都是复数形式并且支持逗号分隔的服务器列表。
允许在配置重启期间更新SSL配置 (Andreas Karlsson, Tom Lane)
这允许通过使用pg_ctl reload
,
SELECT pg_reload_conf()
或者发送SIGHUP
信号来重新配置SSL,而无需重新启动服务器。但是,
如果服务器的SSL键需要密码,重新加载
SSL配置将不起作用,因为无法重新提示密码。
在这种情况下,将为postmaster使用原始配置。
使bgwriter_lru_maxpages的最大值有效无限 (Jim Nasby)
创建或取消链接文件后,在其父目录上执行fsync (Michael Paquier)
这减少了电源故障后数据丢失的风险。
防止在其他空闲系统上进行不必要的检查点和WAL归档 (Michael Paquier)
添加wal_consistency_checking服务器参数, 将详细信息添加到WAL, 可以在备用服务器上进行健全性检查 (Kuntal Ghosh, Robert Haas)
任何健全性检查失败都会在备机中产生致命错误。
将最大可配置的WAL段大小增加到1千兆字节 (Beena Emerson)
一个更大的WAL段大小可以减少 archive_command调用和要管理的 WAL文件。
将逻辑复制 表的功能添加到备用服务器 (Petr Jelinek)
逻辑复制比物理复制更灵活,包括在PostgreSQL 的不同主版本之间复制和选择性复制。
允许等待来自备用服务器的提交确认,而不管它们出现在synchronous_standby_names中的顺序 (Masahiko Sawada)
以前,服务器始终等待synchronous_standby_names
中首先出现的活动备用数据库。新的synchronous_standby_names
关键字ANY
允许等待任意数量的备用服务器,
而不管它们的顺序如何。这被称为定额提交。
减少执行流式备份和复制所需的配置更改 (Magnus Hagander, Dang Minh Huong)
具体而言,修改了wal_level, max_wal_senders,max_replication_slots 和hot_standby的默认值,以使它们适合这些现成的使用。
在pg_hba.conf
中默认启用本地连接的复制功能
(Michael Paquier)
以前pg_hba.conf
的复制连接行默认是注释掉的。
这对于pg_basebackup特别有用。
添加字段到pg_stat_replication
以报告复制延迟时间 (Thomas Munro)
新字段是write_lag
、
flush_lag
和replay_lag
。
允许通过recovery.conf
中的日志序列号(LSN)指定恢复停止点。
(Michael Paquier)
以前,停止点只能通过时间戳或XID来选择。
允许用户禁用pg_stop_backup()
等待所有WAL被归档 (David Steele)
pg_stop_backup()
的第二个可选参数控制这个行为。
允许创建临时复制槽 (Petr Jelinek)
会话退出或错误时会自动删除临时插槽。
通过更好地跟踪Access Exclusive锁,提高热备份重播的性能 (Simon Riggs, David Rowley)
加快两阶段提交恢复的性能 (Stas Kelvich, Nikhil Sontakke, Michael Paquier)
添加XMLTABLE
函数将XML
格式的数据转换成行集
(Pavel Stehule, Álvaro Herrera)
修正大字符代码的正则表达式的字符类处理,尤其是U+7FF
上的Unicode字符 (Tom Lane)
以前,这些字符永远不会被识别为属于依赖于语言环境的字符类,
如[[:alpha:]]
。
添加表分区语法, 自动创建分区约束并处理元组插入和更新的路径 (Amit Langote)
该语法支持范围和列表分区。
添加AFTER
触发器
转换表记录变化的行 (Kevin Grittner, Thomas
Munro)
可以从服务器端语言编写的触发器访问转换表。
允许限制性的行级安全策略 (Stephen Frost)
以前所有的安全策略都是宽容的,这意味着任何匹配的策略都允许访问。 限制性策略必须与授予的访问权限相匹配。这些策略类型可以组合。
创建外键约束时,仅在被引用的表上检查REFERENCES
权限
(Tom Lane)
以前,还需要引用表上的REFERENCES
权限。
这似乎来源于对SQL标准的错误解读。由于创建一个外键(或任何其他类型)
约束要求受约束表上的所有者权限,所以另外需要REFERENCES
权限似乎是毫无意义的。
允许模式上的默认权限 (Matheus Oliveira)
这通过ALTER DEFAULT PRIVILEGES
命令做到。
添加CREATE SEQUENCE
AS
命令创建匹配整型数据类型的序列
(Peter Eisentraut)
这简化了与基本列范围匹配的序列的创建。
允许在视图上COPY
带有view
FROM source
INSTEAD
INSERT
触发器 (Haribabu Kommi)
由COPY
读取的数据行送入触发器。
在DDL命令中允许指定不带参数的函数名称(如果它是唯一的) (Peter Eisentraut)
例如,如果一个函数的名称是唯一的,允许不带参数的DROP
FUNCTION
该函数名称。这个行为是
SQL标准要求的。
允许单个DROP
命令删除多个函数、操作符和聚合 (Peter Eisentraut)
在CREATE SERVER
、
CREATE USER MAPPING
和CREATE COLLATION
中支持IF NOT EXISTS
(Anastasia Lubennikova, Peter Eisentraut)
让VACUUM VERBOSE
报告跳过的冻结页面数量和最老的xmin (Masahiko
Sawada, Simon Riggs)
这些信息也包含在log_autovacuum_min_duration输出中。
提高VACUUM
删除尾部空的堆页的速度
(Claudio Freire, Álvaro Herrera)
为JSON
和JSONB
添加全文搜索支持
(Dmitry Dolgov)
函数ts_headline()
和
to_tsvector()
现在可以使用这些数据类型。
添加对EUI-64 MAC地址的支持,
作为新的数据类型macaddr8
(Haribabu Kommi)
这完善了对EUI-48 MAC地址
(类型macaddr
)的现有支持。
添加标识列,用于为插入的列分配数值 (Peter Eisentraut)
这些与SERIAL
列类似,但是是符合SQL标准的。
允许重命名ENUM
值 (Dagfinn Ilmari Mannsåker)
在to_json()
和to_jsonb()
中正确对待数组伪类型
(anyarray
)为数组 (Andrew Dunstan)
以前声明为anyarray
的字段(特别是pg_stats
视图中的那些)被转换成JSON
字符串而不是数组。
用int8
值为
money
值添加乘法和除法运算 (Peter Eisentraut)
以前这样的情况会导致将int8
值转换成float8
,
然后使用money
和float8
运算符。
新的行为避免了可能的精度损失。但是注意int8
除以
money
会像其他整型除法一样截断商,而以前的行为是四舍五入。
检查money
类型的输入函数中的溢出
(Peter Eisentraut)
添加简化的regexp_match()
函数 (Emre Hasegeli)
这类似于regexp_matches()
,但是它只返回来自第一个匹配的结果,
所以它不需要返回一个集合,使得在简单的情况下更容易使用。
添加jsonb
的删除操作符的一个版本,
该操作符需要删除一组要删除的键 (Magnus Hagander)
让json_populate_record()
和相关的函数递归的处理JSON数组和对象
(Nikita Glukhov)
通过此更改,目标SQL类型中的数组类型字段将从JSON数组中正确地转换,
并且复合类型字段将从JSON对象正确转换。以前,这种情况会失败,
因为JSON值的文本表示会被送到array_in()
或
record_in()
,并且它的语法不符合那些输入函数期望。
添加函数txid_current_if_assigned()
返回当前事务ID或如果没有分配事务ID返回NULL
(Craig Ringer)
这与txid_current()
是不同的,它总是返回一个事务ID,如果需要的话分配一个事务ID。
与该功能不同,此功能可以在备用服务器上运行。
添加函数txid_status()
检查一个事务是否已经提交 (Craig Ringer)
这对于在突然断开连接之后检查您之前的事务是否已经提交并且您刚才没有收到确认很有用。
允许make_date()
将负的年份解释为BC年 (Álvaro
Herrera)
让to_timestamp()
和to_date()
拒绝超出范围的输入域 (Artur Zakirov)
例如,以前接受to_date('2009-06-40','YYYY-MM-DD')
并返回2009-07-10
。现在将产生一个错误。
允许将PL/Python的cursor()
和execute()
函数作为其计划对象参数的方法调用
(Peter Eisentraut)
这允许更加面向对象的编程风格。
允许PL/pgSQL的GET DIAGNOSTICS
语句将值检索到数组元素中 (Tom Lane)
以前,语法限制会阻止目标变量成为数组元素。
允许PL/Tcl函数返回复合类型和集合 (Karl Lehenbauer)
将一个子事务命令添加到PL/Tcl (Victor Wagner)
这允许PL/Tcl查询失败而不中止整个功能。
添加服务器参数pltcl.start_proc 和pltclu.start_proc,以允许在PL/Tcl 启动时可以调用初始化函数 (Tom Lane)
允许在libpq连接字符串和URI中指定 多个主机名或地址 (Robert Haas, Heikki Linnakangas)
libpq将连接到列表中的第一个响应服务器。
允许libpq连接字符串和URI请求一个读/写主机, 即主服务器而不是备用服务器 (Victor Wagner, Mithun Cy)
这在指定了多个主机名时有帮助。它是通过libpq连接参数
target_session_attrs
控制的。
允许将口令文件名称 指定为libpq连接参数 (Julian Markwort)
以前这只能通过环境变量来指定。
添加函数PQencryptPasswordConn()
,
以允许在客户端创建更多类型的加密口令 (Michael Paquier, Heikki Linnakangas)
以前只有MD5
加密的口令可以使用PQencryptPassword()
创建。这个新的函数也可以创建SCRAM-SHA-256
加密的口令。
将ecpg预处理器版本从4.12更改为10 (Tom Lane)
因此,ecpg版本将匹配 PostgreSQL发布版本号。
将条件分支支持添加到psql (Corey Huinker)
这个特性添加psql
元命令\if
、\elif
、\else
和\endif
。这主要对脚本有帮助。
添加psql \gx
元命令以扩展模式
(\x
)执行(\g
)一条查询
(Christoph Berg)
以反向执行的字符串扩展psql变量引用 (Tom Lane)
这在新的psql条件分支命令中特别有用。
阻止将psql的特殊变量设置成无效值 (Daniel Vérité, Tom Lane)
以前,将psql
的其中一个特殊变量设置为无效值会导致默认行为。如果建议的新值无效,
则特殊变量上的\set
现在会失败。作为一个特殊的例外,
对于一个布尔值特殊变量,\set
具有一个空的或省略的新值,
仍然具有将变量设置为on
的效果。
但现在它实际上获得了该值而不是空字符串。\unset
现在将变量显式地设置为其默认值,这也是它在启动时获取的值。总之,
一个控制变量现在总是有一个可显示的值,它反映了psql
实际上在做什么。
添加变量显示服务器版本和psql版本 (Fabien Coelho)
改进psql的\d
(显示关系)和
\dD
(显示域)命令以在单独的列中显示排序规则、
可空和默认属性 (Peter Eisentraut)
以前,它们显示在一个“Modifiers”列中。
使各种\d
命令更加一致地处理没有匹配对象的情况 (Daniel Gustafsson)
他们现在都打印有关stderr而不是stdout的消息,并且消息措辞更加一致。
改进psql的tab完成 (Jeff Janes, Ian Barwick, Andreas Karlsson, Sehrope Sarkuni, Thomas Munro, Kevin Grittner, Dagfinn Ilmari Mannsåker)
添加pgbench选项--log-prefix
控制日志文件前缀 (Masahiko Sawada)
允许pgbench的元命令跨越多行 (Fabien Coelho)
一个元命令现在可以通过写回反斜杠继续到下一行。
取消相对于其他命令行选项的-M
选项的位置限制 (Tom Lane)
添加pg_receivewal
选项-Z
/--compress
指定压缩
(Michael Paquier)
添加pg_recvlogical选项
--endpos
指定结束位置 (Craig Ringer)
这完善了现有的--startpos
选项。
重命名initdb
选项--noclean
和--nosync
的拼写为
--no-clean
和--no-sync
(Vik Fearing,
Peter Eisentraut)
仍然支持旧的拼写方式。
允许pg_restore排除模式 (Michael Banck)
添加了一个新的-N
/--exclude-schema
选项。
添加--no-blobs
选项到
pg_dump (Guillaume Lelarge)
这抑制了大对象的转储。
添加pg_dumpall选项
--no-role-passwords
忽略角色口令
(Robins Tharakan, Simon Riggs)
这允许非超级用户使用pg_dumpall; 没有这个选项,会由于不能读取口令而失败。
从备用服务器转储时支持使用同步快照 (Petr Jelinek)
对由pg_dump和pg_dumpall
生成的输出文件发出fsync()
(Michael Paquier)
这提供了更高的安全性,以便在程序退出之前将输出安全地存储在磁盘上。
这可以通过新的--no-sync
选项禁用。
允许pg_basebackup以tar模式流式传输预写式日志 (Magnus Hagander)
WAL将存储在基本备份的单独tar文件中。
让pg_basebackup使用临时复制槽 (Magnus Hagander)
当pg_basebackup使用具有默认选项的WAL流时, 将默认使用临时复制插槽。
在pg_basebackup和 pg_receivewal中的所有必需位置处更加小心fsync (Michael Paquier)
添加pg_basebackup选项--no-sync
禁用fsync (Michael Paquier)
改进pg_basebackup对要跳过的目录的处理 (David Steele)
为pg_ctl 的提升操作添加等待选项 (Peter Eisentraut)
为pg_ctl wait (--wait
)
和 no-wait 添加长选项 (--no-wait
) (Vik Fearing)
为pg_ctl服务器选项
(--options
)添加长选项 (Peter Eisentraut)
让pg_ctl start -[minus ]wait
通过观察
postmaster.pid
来检测服务器就绪,
而不是通过尝试连接来检测服务器就绪
(Tom Lane)
postmaster已更改为在postmaster.pid
中报告其准备好的连接状态,现在pg_ctl
检查该文件以检测启动是否完成。这比旧方法更高效更可靠,
并且它消除了有关启动期间拒绝的连接尝试的postmaster日志条目。
在等待postmaster启动/停止时减少pg_ctl的响应时间 (Tom Lane)
现在,pg_ctl在等待postmaster状态更改时每秒探测十次, 而不是每秒一次。
如果等待的操作未在超时时间内完成,请确保pg_ctl 以非零状态退出 (Peter Eisentraut)
在这种情况下,start
和promote
操作现在返回退出状态1,不是0。stop
操作一直这样做。
更改为两部分发行版本编号 (Peter Eisentraut, Tom Lane)
版本号现在有两个部分(例如,10.1
),而不是三个
(例如,9.6.3
)。主要版本现在只会增加第一个数字,
次要版本只会增加第二个数字。发布分支将被单个数字引用(例如,
10
,而不是9.6
)。
此更改旨在减少用户对PostgreSQL
的主要或次要版本的混淆。
改善pgindent的行为 (Piotr Stefaniak, Tom Lane)
根据FreeBSD项目最近的改进,我们已经转向了新版本的 pg_bsd_indent。 这修复了许多导致奇怪的C代码格式化决定的小错误。最值得注意的是, 括号内的行(如多行函数调用中)现在可以统一缩进以匹配开始参数, 即使这会导致代码延伸超出右边距。
允许ICU 库可选地用于整理支持 (Peter Eisentraut)
ICU库具有版本控制功能,可以检测版本之间的归类更改。
它通过配置选项--with-icu
启用。
默认仍然使用操作系统的本机整理库。
在Windows
上自动将所有PG_FUNCTION_INFO_V1
函数标记为DLLEXPORT
(Laurenz Albe)
如果第三方代码使用extern
函数声明,
则它们还应该向这些声明中添加DLLEXPORT
标记。
删除SPI函数SPI_push()
、
SPI_pop()
、SPI_push_conditional()
、
SPI_pop_conditional()
和SPI_restore_connection()
,因为它们是不必要的 (Tom Lane)
它们的功能现在是自动实现的。 这些名称现在没有操作宏,因此不需要立即更新外部模块,但最终应该删除这些调用。
这种改变的副作用是现在SPI_palloc()
和相关函数需要一个活动的SPI连接;如果没有,它们不会退化为简单的
palloc()
。之前的行为并不是非常有用,
并且存在意外内存泄漏的风险。
允许动态分配共享内存 (Thomas Munro, Robert Haas)
添加slab-like内存分配器以获得有效的固定大小分配 (Tomas Vondra)
在Linux和FreeBSD上使用POSIX 信号量而不是 SysV 信号量 (Tom Lane)
这避免了SysV信号量使用的平台特定限制。
改进对64位原子的支持 (Andres Freund)
在ARM64上启用64位原子操作 (Roman Shaposhnik)
如果可用,切换到使用clock_gettime()
以进行持续时间测量 (Tom Lane)
如果clock_gettime()
不可用,
那么仍然使用gettimeofday()
。
添加更多可靠的随机数生成器,用于密码安全的使用 (Magnus Hagander, Michael Paquier, Heikki Linnakangas)
如果没有找到强大的随机数生成器,除非使用--disable-strong-random
选项,
否则configure将失败。但是,
使用此选项时,需要强大的随机数生成器的
pgcrypto函数将被禁用。
允许WaitLatchOrSocket()
等待Windows上的套接字连接 (Andres Freund)
tupconvert.c
函数不再为了在其中嵌入不同的复合类型OID而转换元组 (Ashutosh Bapat, Tom Lane)
大多数调用者不关心复合型OID;但是如果结果元组要用作复合数据, 则应采取措施确保在其中插入正确的OID。
删除SCO和Unixware端口 (Tom Lane)
大修文档构建过程 (Alexander Lakhin)
使用XSLT构建PostgreSQL 文档 (Peter Eisentraut)
以前使用Jade、DSSSL和 JadeTex。
默认使用XSLT格式构建HTML文档 (Peter Eisentraut)
允许file_fdw 从程序输出和文件中读取 (Corey Huinker, Adam Gomaa)
在postgres_fdw中, 可能时将聚合函数推送到远程服务器 (Jeevan Chalke, Ashutosh Bapat)
这减少了必须从远程服务器传递的数据量,并从请求服务器中卸载聚合计算。
在postgres_fdw中,在更多情况下将连接推送到远程服务器 (David Rowley, Ashutosh Bapat, Etsuro Fujita)
正确的支持postgres_fdw表中的OID
字段 (Etsuro Fujita)
以前OID
字段总是返回零。
允许btree_gist 和btree_gin索引枚举类型 (Andrew Dunstan)
这允许枚举在排除约束中使用。
为UUID
数据类型添加对btree_gist
的索引支持 (Paul Jungwirth)
添加amcheck, 它可以检查B-tree索引的有效性 (Peter Geoghegan)
在pg_stat_statements中,
将忽略的常量显示为$N
而不是?
(Lukas Fittl)
改进cube对零维立方体的处理 (Tom Lane)
这也改进了对infinite
和
NaN
值的处理。
允许pg_buffercache用更少的锁运行 (Ivan Kartyshov)
这使得它在生产系统上运行时不会造成破坏性。
添加pgstattuple
函数pgstathashindex()
查看哈希索引统计信息 (Ashutosh Sharma)
使用GRANT
权限控制pgstattuple函数使用 (Stephen Frost)
这允许DBA允许非超级用户运行这些函数。
减少pgstattuple检查哈希索引时的锁定 (Amit Kapila)
添加pageinspect
函数page_checksum()
显示页面的校验和
(Tomas Vondra)
添加pageinspect
函数bt_page_items()
从页面图像打印页面项目 (Tomas Vondra)
将哈希索引支持添加到pageinspect (Jesper Pedersen, Ashutosh Sharma)
以下人员(按字母顺序排列)以补丁制作者、提交者、审阅者、 测试人员或问题记者的身份对本版本做出了贡献。
Adam Brightwell |
Adam Brusselback |
Adam Gomaa |
Adam Sah |
Adrian Klaver |
Aidan Van Dyk |
Aleksander Alekseev |
Alexander Korotkov |
Alexander Lakhin |
Alexander Sosna |
Alexey Bashtanov |
Alexey Grishchenko |
Alexey Isayko |
Álvaro Hernández Tortosa |
Álvaro Herrera |
Amit Kapila |
Amit Khandekar |
Amit Langote |
Amul Sul |
Anastasia Lubennikova |
Andreas Joseph Krogh |
Andreas Karlsson |
Andreas Scherbaum |
Andreas Seltenreich |
Andres Freund |
Andrew Dunstan |
Andrew Gierth |
Andrew Wheelwright |
Andrey Borodin |
Andrey Lizenko |
Andy Abelisto |
Antonin Houska |
Ants Aasma |
Arjen Nienhuis |
Arseny Sher |
Artur Zakirov |
Ashutosh Bapat |
Ashutosh Sharma |
Ashwin Agrawal |
Atsushi Torikoshi |
Ayumi Ishii |
Basil Bourque |
Beena Emerson |
Ben de Graaff |
Benedikt Grundmann |
Bernd Helmle |
Brad DeJong |
Brandur Leach |
Breen Hagan |
Bruce Momjian |
Bruno Wolff III |
Catalin Iacob |
Chapman Flack |
Chen Huajun |
Choi Doo-Won |
Chris Bandy |
Chris Richards |
Chris Ruprecht |
Christian Ullrich |
Christoph Berg |
Chuanting Wang |
Claudio Freire |
Clinton Adams |
Const Zhang |
Constantin Pan |
Corey Huinker |
Craig Ringer |
Cynthia Shang |
Dagfinn Ilmari Mannsåker |
Daisuke Higuchi |
Damian Quiroga |
Dan Wood |
Dang Minh Huong |
Daniel Gustafsson |
Daniel Vérité |
Daniel Westermann |
Daniele Varrazzo |
Danylo Hlynskyi |
Darko Prelec |
Dave Cramer |
Dave Page |
David Christensen |
David Fetter |
David Johnston |
David Rader |
David Rowley |
David Steele |
Dean Rasheed |
Denis Smirnov |
Denish Patel |
Dennis Björklund |
Devrim Gündüz |
Dilip Kumar |
Dilyan Palauzov |
Dima Pavlov |
Dimitry Ivanov |
Dmitriy Sarafannikov |
Dmitry Dolgov |
Dmitry Fedin |
Don Morrison |
Egor Rogov |
Eiji Seki |
Emil Iggland |
Emre Hasegeli |
Enrique Meneses |
Erik Nordström |
Erik Rijkers |
Erwin Brandstetter |
Etsuro Fujita |
Eugen Konkov |
Eugene Kazakov |
Euler Taveira |
Fabien Coelho |
Fabrízio de Royes Mello |
Fakhroutdinov Evgenievich |
Feike Steenbergen |
Felix Gerzaguet |
Filip Jirsák |
Fujii Masao |
Gabriele Bartolini |
Gabrielle Roth |
Gao Zengqi |
Gerdan Santos |
Gianni Ciolli |
Gilles Darold |
Giuseppe Broccolo |
Graham Dutton |
Greg Atkins |
Greg Burek |
Grigory Smolkin |
Guillaume Lelarge |
Hans Buschmann |
Haribabu Kommi |
Heikki Linnakangas |
Henry Boehlert |
Huan Ruan |
Ian Barwick |
Igor Korot |
Ildus Kurbangaliev |
Ivan Kartyshov |
Jaime Casanova |
Jakob Egger |
James Parks |
Jarred Ward |
Jason Li |
Jason O'Donnell |
Jason Petersen |
Jeevan Chalke |
Jeevan Ladhe |
Jeff Dafoe |
Jeff Davis |
Jeff Janes |
Jelte Fennema |
Jeremy Finzel |
Jeremy Schneider |
Jeroen van der Ham |
Jesper Pedersen |
Jim Mlodgenski |
Jim Nasby |
Jinyu Zhang |
Joe Conway |
Joel Jacobson |
John Harvey |
Jon Nelson |
Jordan Gigov |
Josh Berkus |
Josh Soref |
Julian Markwort |
Julien Rouhaud |
Junseok Yang |
Justin Muise |
Justin Pryzby |
Kacper Zuk |
KaiGai Kohei |
Karen Huddleston |
Karl Lehenbauer |
Karl O. Pinc |
Keith Fiske |
Kevin Grittner |
Kim Rose Carlsen |
Konstantin Evteev |
Konstantin Knizhnik |
Kuntal Ghosh |
Kurt Kartaltepe |
Kyle Conroy |
Kyotaro Horiguchi |
Laurenz Albe |
Leonardo Cecchi |
Ludovic Vaugeois-Pepin |
Lukas Fittl |
Magnus Hagander |
Maksim Milyutin |
Maksym Sobolyev |
Marc Rassbach |
Marc-Olaf Jaschke |
Marcos Castedo |
Marek Cvoren |
Mark Dilger |
Mark Kirkwood |
Mark Pether |
Marko Tiikkaja |
Markus Winand |
Marllius Ribeiro |
Marti Raudsepp |
Martín Marqués |
Masahiko Sawada |
Matheus Oliveira |
Mathieu Fenniak |
Merlin Moncure |
Michael Banck |
Michael Day |
Michael Meskes |
Michael Overmeyer |
Michael Paquier |
Mike Palmiotto |
Milos Urbanek |
Mithun Cy |
Moshe Jacobson |
Murtuza Zabuawala |
Naoki Okano |
Nathan Bossart |
Nathan Wagner |
Neha Khatri |
Neha Sharma |
Neil Anderson |
Nicolas Baccelli |
Nicolas Guini |
Nicolas Thauvin |
Nikhil Sontakke |
Nikita Glukhov |
Nikolaus Thiel |
Nikolay Nikitin |
Nikolay Shaplov |
Noah Misch |
Noriyoshi Shinoda |
Olaf Gawenda |
Oleg Bartunov |
Oskari Saarenmaa |
Otar Shavadze |
Paresh More |
Paul Jungwirth |
Paul Ramsey |
Pavan Deolasee |
Pavel Golub |
Pavel Hanák |
Pavel Raiskup |
Pavel Stehule |
Peng Sun |
Peter Eisentraut |
Peter Geoghegan |
Petr Jelínek |
Philippe Beaudoin |
Pierre-Emmanuel André |
Piotr Stefaniak |
Prabhat Sahu |
QL Zhuo |
Radek Slupik |
Rafa de la Torre |
Rafia Sabih |
Ragnar Ouchterlony |
Rahila Syed |
Rajkumar Raghuwanshi |
Regina Obe |
Richard Pistole |
Robert Haas |
Robins Tharakan |
Rod Taylor |
Roman Shaposhnik |
Rushabh Lathia |
Ryan Murphy |
Sandeep Thakkar |
Scott Milliken |
Sean Farrell |
Sebastian Luque |
Sehrope Sarkuni |
Sergey Burladyan |
Sergey Koposov |
Shay Rojansky |
Shinichi Matsuda |
Sho Kato |
Simon Riggs |
Simone Gotti |
Spencer Thomason |
Stas Kelvich |
Stepan Pesternikov |
Stephen Frost |
Steve Randall |
Steve Singer |
Steven Fackler |
Steven Winfield |
Suraj Kharage |
Sveinn Sveinsson |
Sven R. Kunze |
Taiki Kondo |
Takayuki Tsunakawa |
Takeshi Ideriha |
Tatsuo Ishii |
Tatsuro Yamada |
Teodor Sigaev |
Thom Brown |
Thomas Kellerer |
Thomas Munro |
Tim Goodaire |
Tobias Bussmann |
Tom Dunstan |
Tom Lane |
Tom van Tilburg |
Tomas Vondra |
Tomonari Katsumata |
Tushar Ahuja |
Vaishnavi Prabakaran |
Venkata Balaji Nagothi |
Vicky Vergara |
Victor Wagner |
Vik Fearing |
Vinayak Pokale |
Viren Negi |
Vitaly Burovoy |
Vladimir Kunshchikov |
Vladimir Rusinov |
Yi Wen Wong |
Yugo Nagata |
Zhen Ming Yang |
Zhou Digoal |