E.19. 发布9.1
发布日期: 2011-09-12
E.19.1. 概述
该发布显示了PostgreSQL超越传统关系数据库功能设置为新, 突破性功能对PostgreSQL是唯一的。 发布9.0中介绍的流复制功能通过添加同步复制选项,流备份以及 监测改进而被显著增强。主要功能包含:
允许同步复制
添加支持外表
添加每列collation支持
添加扩展 这简化附加包到PostgreSQL。
添加真的可串行化隔离级别
在
CREATE TABLE
中 使用UNLOGGED
选项支持未记录表允许
WITH
子句中 数据修改命令(INSERT
/UPDATE
/DELETE
)添加最近邻(算子排序)搜索到 GiST索引
添加
SECURITY LABEL
命令并且支持SELinux权限控制更新PL/Python服务器端语言
在下面部分将详细解释上面项。
E.19.2. 迁移到版本9.1
使用pg_dump或者pg_upgrade 备份/恢复, 对于那些希望从任何以前发布中迁移数据是必须的。
版本9.1包含了可能影响与以前版本的兼容性的一些变化。 观察下面的不兼容性:
E.19.2.1. 字符串
改变
standard_conforming_strings
的缺省值(Robert Haas)缺省情况下,反斜杠是字符串中普通字符, 而不是转义字符。这一变化删除与SQL标准长期存在的不兼容。
escape_string_warning
有多年关于这个用法的警告。E''
字符串是嵌入反斜杠转义到字符串中的正确做法, 并且这种变化不受影响。Warning
这个变化可以打断不希望的应用,并且按照旧的规则执行字符串逃逸。 该结果可能与介绍的SQL注入安全中断一样严峻。 确保测试应用遭受不可信任输入, 确保它们正确处理单引号和文本字符串中反斜线符号。
E.19.2.2. 转换
不允许函数样式和属性样式数据类型转换为复合类型(Tom Lane)
比如,不允许
_composite_value_
.text和text(``_composite_value_
)。 该语法的无意识使用经常导致错误报告; 尽管它不是错误,似乎追溯到拒绝这样的表达式更好。 当实际上打算整个复合值计算时,CAST
和::
语法仍然可以使用。加强基于数组的域转换检查(Tom Lane)
当域是基于数组类型时,它被允许"查看"域类型访问数组元素, 包含下标域值抓取或者分配一个元素。 分配这样一个域值元素,比如通过
UPDATE ... SET domaincol[5] = ...
, 将导致检查域类型的约束,然而检查之前被忽略。
E.19.2.3. 数组
改变
string_to_array()
为零长字符串返回空数组(Pavel Stehule)以前返回空值。
改变
string_to_array()
, 所以NULL
分隔符分离字符串到字符(Pavel Stehule)先前这返回空值。
E.19.2.4. 对象修改
修复触发器之前/之后的不当检查(Tom Lane)
触发器可以在三种情况下被触发:
BEFORE
,AFTER
或者INSTEAD OF
一些操作。 触发器函数发起者应该理智验证三种情况下它们的逻辑操作。需要超级用户或者
CREATEROLE
权限目的是设置评论角色(Tom Lane)
E.19.2.5. 服务器设置
改变
pg_last_xlog_receive_location()
因此它不会向后移动(Fujii Masao)先前,当重新启动流复制的时候,
pg_last_xlog_receive_location()
的值 可以向后移动。复制连接日志接受
log_connections
(Magnus Hagander)先前,复制连接总是被记录。
E.19.2.6. PL/pgSQL服务器端语言
改变不带参数的PL/pgSQL的
RAISE
命令 为通过附属异常块可捕获(Piyush Newe)以前代码块中
RAISE
总是限于附加异常块中,因此 在同一范围内是无法捕获的。调整PL/pgSQL的错误线编号代码与其他PL相一致(Pavel Stehule)
先前,PL/pgSQL在函数体开始部分可能忽略(不计算)空行。 由于这是不符合所有其他语言的,特殊情况下被删除。
使得PL/pgSQL抱怨IN和OUT参数名冲突(Tom Lane)
以前,检测不到冲突,该名字可能就默默地指向OUT参数。
PL/pgSQL变量类型修饰符对于SQL分析器是可见的(Tom Lane)
附属于PL/pgSQL变量的类型修饰符(比如varchar长度限制) 在分配之间被执行,但是出于其他目的被忽略。 这些变量操作更像声明了同一描述符的表列。 这不希望在多数情况下产生任何可见差异, 但是它可能产生通过PL/pgSQL函数发布的一些SQL命令的微妙变化。
E.19.2.7. Contrib
所有contrib模块伴随
CREATE EXTENSION
被安装而不是通过手动调用它们的SQL脚本(Dimitri Fontaine, Tom Lane)为了更新包含contrib模块9.0版本的现有数据库, 使用
CREATE EXTENSION ... FROM unpackaged
封装现有contrib模块的对象到一个扩展中。 当从先前9.0版本中更新时,使用旧的卸载脚本删除contrib模块的对象, 然后使用CREATE EXTENSION
。
E.19.2.8. 其他的不兼容
使得
pg_stat_reset()
重置所有数据库级别统计(Tomas Vondra)一些
pg_stat_database
计数器没有被重置。修复一些
information_schema.triggers
列名匹配新的SQL标准名(Dean Rasheed)把ECPG游标名看作不区分大小写(Zoltan Boszormenyi)
E.19.3. 变化
下面你将发现在PostgreSQL 9.1 和以前主要发布之间的变化的详细列表。
E.19.3.1. 服务器
E.19.3.1.1. 性能
支持 在
CREATE TABLE
中 使用UNLOGGED
选项的未记录表(Robert Haas)这个表提供了比常规表更好的更新性能,但是不安全:它们内容在 服务器崩溃的情况下被自动清除。 也不会被传送到备份子服务器。
允许
FULL OUTER JOIN
作为哈希连接被实现, 并且允许LEFT OUTER JOIN
或者RIGHT OUTER JOIN
的一侧被哈希(Tom Lane)以前
FULL OUTER JOIN
只能作为合并连接被实现, 并且LEFT OUTER JOIN
和RIGHT OUTER JOIN
可以哈希连接空侧。 这些变化提供了额外查询优化可能性。合并复制fsync请求(Robert Haas, Greg Smith)
这大大提高了大量写入重载下性能。
提高
commit_siblings
的性能(Greg Smith)这允许较少开销的
commit_siblings
的使用。减少大的ispell词典存储需求(Pavel Stehule, Tom Lane)
避免"盲写"后将数据文件打开(Alvaro Herrera)
这修复它们被删除后后端保持文件打开时间,防止内核回收磁盘空间。
E.19.3.1.2. 优化器
允许继承表扫描返回有意义的排序结果 (Greg Stark, Hans-Jurgen Schonig, Robert Haas, Tom Lane)
这允许使用
ORDER BY
,LIMIT
或者带有继承表的MIN
/MAX
的查询的更好优化。提高GIN索引扫描成本估计(Teodor Sigaev)
提高聚集和window函数成本估计(Tom Lane)
E.19.3.1.3. 认证
在
pg_hba.conf
中支持host名字和host后缀(比如.example.com
)先前只支持host IP 地址和CIDR值。
在
pg_hba.conf
的host列 支持关键字all
(Peter Eisentraut)以前为了这个人们使用
0.0.0.0/0
或者::/0
。在不支持Unix套接字连接的平台上拒绝
pg_hba.conf
中的local
行(Magnus Hagander)先前,默默忽略这样的行,这可能是令人惊讶的。 这使得该操作更像其他不支持的情况。
允许GSSAPI 通过SSPI用于 验证到服务器(Christian Ullrich)
特别是允许基于Unix GSSAPI客户端执行 伴随Windows服务器的SSPI认证。
在区域套接字上的
ident
认证被称为peer
(Magnus Hagander)该旧的术语仍然接受向后兼容性,但是 因为这两种方法在根本上是不同的, 为它们采用不同的名字似乎更好。
重写peer认证 以避免证书控制信息的使用(Tom Lane)
这个变化使得同等验证码更加简单而且可执行性更好。然而, 它需要平台提供
getpeereid
函数或者等效套接字操作。 按目前所知,之前同等认证执行唯一平台, 并且现在不是之前5.0 NetBSD。
E.19.3.1.4. 监控
添加重启点和检查点记录详情,通过
log_checkpoints
控制 (Fujii Masao, Greg Smith)新的详情包含WAL文件以及同步活动。
添加
log_file_mode
其控制通过日志收集器创建的日志文件权限(Martin Pihlak)减少syslog记录缺省最大行长度 到加上前缀900字节(Noah Misch)
这避免了syslog实现上具有1KB长度限制而不是常见的2KB的长日志行的 截断。
E.19.3.1.5. 统计视图
添加
client_hostname
列到pg_stat_activity
(Peter Eisentraut)先前只报道客户端地址。
添加
pg_stat_xact_*
统计函数和视图(Joel Jacobson)这些更像数据库端统计计算视图, 但是反映了当前事务重要性。
添加数据库级别最后重置时间以及后端写统计视图(Tomas Vondra)
在
pg_stat_*_tables
视图中添加列显示清理数和分析操作(Magnus Hagander)添加
buffers_backend_fsync
列到pg_stat_bgwriter
(Greg Smith)这个新列计算后端同步缓冲区的次数。
E.19.3.1.6. 服务器设置
提供
wal_buffers
的自动调整(Greg Smith)缺省情况下,
wal_buffers
的值基于shared_buffers
的值 被自动选择。为
deadlock_timeout
,log_min_duration_statement
和log_autovacuum_min_duration
增加最大值(Peter Eisentraut)这些参数的最大值先前只有35分钟。 现在允许更大值。
E.19.3.2. 备份与恢复
E.19.3.2.1. 流复制和连续归档
允许同步复制 (Simon Riggs, Fujii Masao)
这允许等待备用的主服务器在承认提交前写事务信息到磁盘。 每次备用起着同步备份的作用。正如通过
synchronous_standby_names
设置控制。 在每个事务基础上使用synchronous_commit
设置可以启用或者禁用同步复制。使用流复制网络连接添加发送文件系统备份协议支持到备用服务器 (Magnus Hagander, Heikki Linnakangas)
当设置一个备用服务器时,这避免了手动传送文件系统备份的需求。
添加
replication_timeout
设置(Fujii Masao, Heikki Linnakangas)对于超过
replication_timeout
间隔空闲的复制连接将自动被终止。 先前,失败连接通常不能被检测直到TCP超时消逝, 在很多情况下这是不方便的。添加命令行工具 pg_basebackup 创建一个新的备用服务器或者数据库备份(Magnus Hagander)
为角色添加复制许可(Magnus Hagander)
这是用于流复制的只读权限。它允许非超级用户 用于复制连接。 先前只有超级用户可以启动复制连接; 缺省情况下超级用户具有此权限。
E.19.3.2.2. 备份监控
增加系统视图
pg_stat_replication
, 这显示了WAL发送者进程活动 (Itagaki Takahiro, Simon Riggs)报告所有连接备用服务器的状态。
添加监控函数
pg_last_xact_replay_timestamp()
(Fujii Masao)这返回了主库产生最近提交或者应用在备库上的终止记录的时间。
E.19.3.2.3. 热备份
添加配置参数
hot_standby_feedback
启动备库以推迟主库旧行版本清理(Simon Riggs)这有助于避免备库上取消长时间运行查询。
添加
pg_stat_database_conflicts
系统视图以显示取消的查询和原因(Magnus Hagander)因为删除的表空间,锁超时,旧快照,保留区以及死锁,可以发生取消。
添加
conflicts
计算到pg_stat_database
(Magnus Hagander)发生在数据库中的冲突数。
为
max_standby_archive_delay
和max_standby_streaming_delay
增加最大值。每个参数的最大值以前只有35分钟。现在允许更大的值。
添加
ERRCODE_T_R_DATABASE_DROPPED
错误代码以报告恢复冲突,由于已删除数据库(Tatsuo Ishii)这对于连接池软件是有用的。
E.19.3.2.4. 恢复控制
添加函数以控制流复制重播(Simon Riggs)
新函数是
pg_xlog_replay_pause()
,pg_xlog_replay_resume()
, 并且状态函数是pg_is_xlog_replay_paused()
添加
recovery.conf
设置pause_at_recovery_target
在目标位置暂停恢复(Simon Riggs)这允许需要恢复服务器检查恢复点是否是所需的。
使用
pg_create_restore_point()
添加创建命名恢复点的能力(Jaime Casanova)这些命名恢复点被声明为使用新的
recovery.conf
设置recovery_target_name
的恢复目标。允许备份恢复自动切换到新的时间线(Heikki Linnakangas)
目前备用服务器为周期性新的时间线扫描归档目录。
添加
restart_after_crash
设置,在后台崩溃后禁用自动服务器重启(Robert Haas)这允许外部集群管理软件控制数据库服务器是否重新启动。
允许
recovery.conf
使用和postgresql.conf
相同的引用操作(Dimitri Fontaine)以前所有值必须被引用。
E.19.3.3. 查询
添加真的 可串行化隔离级别 (Kevin Grittner, Dan Ports)
先前,要求串行化隔离保证了单独MVCC快照可以用于整个事务, 这允许某些记录异常。 旧的快照隔离级别通过请求
REPEATABLE READ
隔离级别可用。允许
WITH
子句中 数据修改命令(INSERT
/UPDATE
/DELETE
) (Marko Tiikkaja, Hitoshi Harada)这些命令可以使用
RETURNING
传递数据到所包含查询。允许
WITH
子句被附属于INSERT
,UPDATE
,DELETE
语句(Marko Tiikkaja, Hitoshi Harada)当在
GROUP BY
子句中指定主键时, 允许查询目标列中的 非GROUP BY
列(Peter Eisentraut)SQL标准允许该操作,由于该主键,结果是明确的。
允许
UNION
/INTERSECT
/EXCEPT
子句中关键字DISTINCT
的使用(Tom Lane)DISTINCT
是缺省操作,因此该关键字的使用是多余的, 但是SQL标准允许它。修复普通规则查询以使用和
EXPLAIN ANALYZE
相同快照操作(Marko Tiikkaja)先前
EXPLAIN ANALYZE
使用涉及规则的查询略微不同的快照时间。EXPLAIN ANALYZE
操作被认为更合乎逻辑。
E.19.3.3.1. 字符串
添加每列 collation支持 (Peter Eisentraut, Tom Lane)
以前在数据库创建中选择排序规则(文本字符串排序)。 排序规则可以设置每列,域,索引,或者表达式, 通过SQL标准
COLLATE
子句。
E.19.3.4. 对象操作
添加extensions, 这简化了附加PostgreSQL的包装(Dimitri Fontaine, Tom Lane)
通过新的
CREATE
/ALTER
/DROP EXTENSION
命令 控制扩展。 这取代了分组对象的点对点方法被添加到PostgreSQL安装中。添加支持外表 (Shigeru Hanada, Robert Haas, Jan Urbanski, Heikki Linnakangas)
这允许存储在数据库外的数据像本地PostgreSQL存储数据一样使用。 然而,外表目前只读。
允许新值通过
ALTER TYPE
被 添加到现有枚举类型中(Andrew Dunstan)添加
ALTER TYPE ... ADD/DROP/ALTER/RENAME ATTRIBUTE
(Peter Eisentraut)这允许复合类型的修改。
E.19.3.4.1. ALTER
对象
在分类表上添加
RESTRICT
/CASCADE
到ALTER TYPE
操作(Peter Eisentraut)这控制
ADD
/DROP
/ALTER
/RENAME ATTRIBUTE
级联操作。支持
ALTER TABLE
_name_
{OF | NOT OF}_type_
(Noah Misch)这个语法允许单独表成为分类表,或者分类表成为单独的。
在
ALTER ... SET SCHEMA
命令中添加支持多个对象类型(Dimitri Fontaine)该命令现在支持转换,算子,算子类, 算子族,文本搜索配置,文本搜索词典,文本 搜索分析器,以及文本搜索模板。
E.19.3.4.2. CREATE/ALTER TABLE
添加
ALTER TABLE ... ADD UNIQUE/PRIMARY KEY USING INDEX
(Gurjeet Singh)这允许使用现有唯一索引包含 同时创建的唯一索引定义主键或者唯一约束。
允许
ALTER TABLE
添加没有验证的外键(Simon Riggs)新选项称为
NOT VALID
。 约束的状态可以随后被修改为VALIDATED
并且 执行验证检查。同时这些允许你添加对读写操作影响最小的外键。允许
ALTER TABLE... SET DATA TYPE
避免 在合适情况中的表重写(Noah Misch, Robert Haas)比如,转换
varchar
列使得text
不再需要表重写。 然而,增加varchar
列上长度限制仍然需要表重写。添加
CREATE TABLE IF NOT EXISTS
语法(Robert Haas)如果该表已经存在,那么允许没有导致错误的表创建。
当两个后端尝试添加继承孩子到同一时间的同一表时, 修复可能"元组同时更新"错误(Robert Haas)
ALTER TABLE
需要采取更强锁定父表,这样该会话不能试图同时更新它。
E.19.3.4.3. 对象权限
添加
SECURITY LABEL
命令(KaiGai Kohei)这允许安全标签分配给对象。
E.19.3.5. 实用操作
添加事务级别咨询锁(Marko Tiikkaja)
这与现有会话级别咨询锁类似, 但是在事务结束时自动释放这种锁。
使得
TRUNCATE ... RESTART IDENTITY
相互作用的重启序列(Steve Singer)如果在提交事务活动和提交完成之间发生后端崩溃, 那么该计数器可能已经不同步。
E.19.3.5.1. COPY
添加
ENCODING
选项到COPY TO/FROM
(Hitoshi Harada, Itagaki Takahiro)这允许分别从客户端编码指定
COPY
文件编码。添加双向
COPY
协议支持(Fujii Masao)当前通过流复制被使用。
E.19.3.5.2. EXPLAIN
- 使得
EXPLAIN VERBOSE
在FunctionScan
节点中 显示函数调用表达式(Tom Lane)
E.19.3.5.3. VACUUM
添加额外详情到
VACUUM FULL VERBOSE
和CLUSTER VERBOSE
的输出中(Itagaki Takahiro)新信息包含活的和死的元组数, 以及是否
CLUSTER
使用索引重新创建。如果它不能获得表锁, 那么阻止autovacuum等待(Robert Haas)
它将尝试随后清理该表。
E.19.3.5.4. CLUSTER
- 当它似乎比较廉价时,允许
CLUSTER
排序表而不是 扫描索引(Leonardo Francalanci)
E.19.3.5.5. 索引
添加最近邻(算子排序)搜索到 GiST索引 (Teodor Sigaev, Tom Lane)
这允许GiST索引迅速返回带有
LIMIT
的查询中的_N_
最近值。比如SELECT * FROM places ORDER BY location <-> point '(101,456)' LIMIT 10;
找到离给定目标点最近的十个位置。
允许GIN索引索引无效和空值(Tom Lane)
这允许全GIN索引扫描, 并且修复GIN扫描可能失败的情况。
允许GIN索引 更好识别重复搜索项(Tom Lane)
这降低了索引扫描成本, 尤其是在避免不必要全扫描索引的情况下。
修复GiST索引充分 碰撞安全(Heikki Linnakangas)
先前存在需要
REINDEX
的罕见情况(你可能被告知)。
E.19.3.6. 数据类型
允许
numeric
在一般情况下使用更紧凑,两字节标题。以前所有
numeric
值有四字节标题, 这种变化节省磁盘存储。添加通过
money
划分money
的支持(Andy Balholm)允许类型
void
上的二进制I/O(Radoslaw Smogura)提高几何学操作符的斜边计算(Paul Matthews)
这避免了不必要的溢出,也可能更精准。
支持哈希数组值(Tom Lane)
这提供了额外查询优化可能性。
不要将复合类型看作可分类的除非所有列类型是可分类的(Tom Lane)
这避免了可能的运行时"不能识别比较函数"错误, 如果可能实现没有排序的查询。 同时,
ANALYZE
不会尝试为该复合类型列使用不恰当的统计收集方法。
E.19.3.6.1. Casting
添加支持
money
和numeric
之间的转换(Andy Balholm)添加从
int4
和int8
到money
的转换(Joey Adams)如果它是一个分类表, 那么允许转换表的行类型到表的父类型(Peter Eisentraut)
这与允许转换行类型到父表行类型的现有功能类似。
E.19.3.6.2. XML
添加XML函数
XMLEXISTS
和xpath_exists()
函数(Mike Fowler)这些用于XPath匹配。
添加XML函数
xml_is_well_formed()
,xml_is_well_formed_document()
,xml_is_well_formed_content()
(Mike Fowler)这些检查输入是否是恰当形成的XML。 它们提供了以前在弃用的
contrib/xml2
模块中可用的功能。
E.19.3.7. 函数
添加函数
format(text, ...)
, 这类似于C的printf()
(Pavel Stehule, Robert Haas)它目前支持字符串,SQL文本以及SQL标识符格式。
添加字符串函数
concat()
,concat_ws()
,left()
,right()
, 以及reverse()
(Pavel Stehule)这改善了与其他数据库产品的兼容性。
添加函数
pg_read_binary_file()
以读取二进制文件(Dimitri Fontaine, Itagaki Takahiro)添加函数
pg_read_file()
的一个参数版本以读取整个文件(Dimitri Fontaine, Itagaki Takahiro)为空值处理控制添加
array_to_string()
和string_to_array()
的三个参数形式(Pavel Stehule)
E.19.3.7.1. 对象信息函数
添加
pg_describe_object()
函数(Alvaro Herrera)该函数用于获得人类可读字符串描述对象,基于
pg_class
OID, 对象OID以及子对象OID。它可以有助于解释pg_depend
的内容。更新内置操作符注释和潜在函数(Tom Lane)
打算通过相关算子使用的函数同样被注释。
添加函数
quote_all_identifiers
强迫EXPLAIN
中以及系统目录函数像pg_get_viewdef()
中所有标识符引用。尝试输出模式到工具和伴随不同引用规则更加容易的其他数据库。
添加列到
information_schema.sequences
系统表(Peter Eisentraut)先前,尽管视图存在,未实现关于序列参数的列。
在
has_table_privilege()
中以及相关函数中允许public
作为伪角色名字(Alvaro Herrera)这允许检查public权限。
E.19.3.7.2. 函数和触发器创建
支持视图上
INSTEAD OF
触发器(Dean Rasheed)该功能可以充分实现可更新视图。
E.19.3.8. 服务器端语言
E.19.3.8.1. PL/pgSQL服务器端语言
添加
FOREACH IN ARRAY
到PL/pgSQL(Pavel Stehule)这比遍历数组值元素的先前方法更有效并且可读性更高。
允许可以从同一地方捕获
RAISE ERROR
的同一位置 捕获不带参数的RAISE
(Piyush Newe)前面编码从包含活跃异常处理程序块中抛出错误。 新操作与其他DBMS产品更加一致。
E.19.3.8.2. PL/Perl服务器端语言
允许通用记录参数到PL/Perl函数(Andrew Dunstan)
可以声明PL/Perl函数接受类型
record
。 该操作与任何命名复合类型是一样的。转换PL/Perl数组参数到Perl数组(Alexey Klyukin,Alex Hunsaker)
字符串表示仍然可用。
转换PL/Perl复合类型参数到Perl哈希(Alexey Klyukin, Alex Hunsaker)
字符串表示仍然可用。
E.19.3.8.3. PL/Python服务器端语言
添加表函数支持PL/Python(Jan Urbanski)
PL/Python现在可以返回多个
OUT
参数和记录集。添加验证器给PL/Python (Jan Urbanski)
这允许PL/Python函数在函数创建时间是语法检查的。
允许PL/Python中SQL查询异常(Jan Urbanski)
这允许从PL/Python异常块中访问SQL生成异常错误代码。
添加明确子事务到PL/Python (Jan Urbanski)
为引用字符串添加PL/Python函数(Jan Urbanski)
这些函数是
plpy.quote_ident
,plpy.quote_literal
, 和plpy.quote_nullable
。添加跟踪信息到PL/Python错误(Jan Urbanski)
从带有
PLy_elog
的迭代器中报告PL/Python错误(Jan Urbanski)修复Python 3异常处理(Jan Urbanski)
异常类以前在Python 3下
plpy
中不可用。
E.19.3.9. 客户端应用
- 标记 createlang 和droplang 为废弃的现在它们只是调用扩展命令(Tom Lane)
E.19.3.9.1. psql
增加psql命令
\conninfo
以显示当前连接信息(David Christensen)添加psql命令
\sf
以显示函数的定义(Pavel Stehule)添加psql命令
\dL
罗列语言(Fernando Ike)添加
S
("system")选项到psql的\dn
(罗列模式)命令(Tom Lane)没有
S
的\dn
现在抑制系统模式。允许 psql的
\e
和\ef
命令 接受用于定位编辑器中游标的行号(Pavel Stehule)按照
PSQL_EDITOR_LINENUMBER_ARG
环境变量被传递给编辑器。psql设置来自缺省操作系统区域的客户端编码(Heikki Linnakangas)
如果没有设置
PGCLIENTENCODING
环境变量, 那么只会发生。尝试
\d
区分唯一索引和唯一约束(Josh Kupershmidt)当讨论9.0或者之后服务器时, 尝试
\dt+
报告pg_table_size
而不是pg_relation_size
(Bernd Helmle)这是表大小更加有效的度量, 但是注意这与同一显示中先前报告的是不一样的。
额外的tab实现支持 (Itagaki Takahiro, Pavel Stehule, Andrey Popp, Christoph Berg, David Fetter, Josh Kupershmidt)
E.19.3.9.2. pg_dump
添加pg_dump 和pg_dumpall 选项
--quote-all-identifiers
强制引用所有标识符(Robert Haas)添加
directory
格式给pg_dump (Joachim Wieland, Heikki Linnakangas)内部类似于
tar
pg_dump格式。
E.19.3.9.3. pg_ctl
修复pg_ctl, 所以它不再错误地报告服务器没有运行(Bruce Momjian)
如果服务器正在运行但是pg_ctl无法验证, 先前这可能发生。
提高pg_ctl启动的"wait" (
-w
)选项(Bruce Momjian, Tom Lane)等待模式现在更加鲁棒,它通过非缺省postmaster port号,非缺省 Unix域套接字位置,权限问题,或者旧的postmaster锁文件不会被混乱。
添加
promote
选项到pg_ctl用来切换 备用服务器到主库(Fujii Masao)
E.19.3.10. 开发工具
E.19.3.10.1. libpq
添加libpq连接选项
client_encoding
这就像PGCLIENTENCODING
环境变量(Heikki Linnakangas)值
auto
设置基于操作系统区域的客户端编码。添加
PQlibVersion()
函数,它返回libpq库版本(Magnus Hagander)libpq已有
PQserverVersion()
返回服务器版本。当通过伴随新的
requirepeer
连接选项的Unix域套接字连接时, 允许libpq使用客户端检查服务器进程用户名。(Peter Eisentraut)当通过Unix域套接字连接时,PostgreSQL允许服务器检查 客户端用户名。
添加
PQping()
和PQpingParams()
到libpq (Bruce Momjian, Tom Lane)这些函数允许不尝试打开新会话的服务器状态检测。
E.19.3.10.2. ECPG
允许ECPG接受
WHERE CURRENT OF
子句 中动态游标名称(Zoltan Boszormenyi)尝试ecpglib写带有15位精度而不是以前的14位的
double
值(Akira Kurosawa)
E.19.3.11. 编译选项
使用可以接受它的HP-UX C编译器的
+Olibmerrno
编译标记(Ibrar Ahmed)这避免了最新HP平台上math库调用的可能的不当操作。
E.19.3.11.1. Makefiles
改善并行make支持(Peter Eisentraut)
允许更快编译。同时,
make -k
更加一致运行。需要GNU make 3.80或者更新版本(Peter Eisentraut)
由于并行make改进这是必须的。
添加
make maintainer-check
目标(Peter Eisentraut)这个目标执行各种不适用于编译或者回归测试的源代码检查。 目前,duplicate_oids,SGML语法和tab检查,NLS语法检查。
支持
contrib
中的make check
(Peter Eisentraut)以前只有
make installcheck
运行,但是现在 支持临时安装中测试。 顶级make check-world
包含这种方式测试contrib
。
E.19.3.11.2. Windows
在Windows上,允许pg_ctl 注册服务为自动启动或者是按需启动(Quan Zongliang)
添加Windows上支持收集 崩溃转储 (Craig Ringer, Magnus Hagander)
通过非调试Windows二进制文件产生minidumps, 并且通过标准调试工具进行分析。
启动MinGW64编译器编译(Andrew Dunstan)
这允许编译64位Windows二进制文件即使在非Windows平台通过交叉编译。
E.19.3.12. 源代码
修订GUC变量分配钩的API(Tom Lane)
以往分配钩函数划分检查钩和分配钩, 前者可以失败但是后者不能。 这一变化将影响定义自定义GUC参数的附加模块。
添加源代码锁存器以支持等待事件(Heikki Linnakangas)
集中数据修改权限检查逻辑(KaiGai Kohei)
为了保持一致性添加缺失的
get_
object_oid()
函数(Robert Haas)为了compiling add-on modules 通过删除冲突关键字提高使用C++编译器的能力(Tom Lane)
添加支持DragonFly BSD (Rumko)
出于后端使用暴露
quote_literal_cstr()
(Robert Haas)在缺省编码中运行回归测试(Peter Eisentraut)
回归测试以前总是运行
SQL_ASCII
编码。添加src/tools/git_changelog替换 cvs2cl和pgcvslog (Robert Haas, Tom Lane)
添加git-external-diff脚本到
src/tools
(Bruce Momjian)这用于产生来自git的语境差异。
提高支持编译Clang (Peter Eisentraut)
E.19.3.12.1. 服务器钩
添加源代码钩检查权限(Robert Haas,Stephen Frost)
出于使用安全框架添加后对象创建函数钩(KaiGai Kohei)
添加客户端认证钩(KaiGai Kohei)
E.19.3.13. Contrib
修改
contrib
模块和程序语言通过新的 扩展 机制安装(Tom Lane, Dimitri Fontaine)添加
contrib/file_fdw
外数据包(Shigeru Hanada)外表使用这个外数据包可以以类似于
COPY
的方式读取平文件。添加最近邻搜索支持
contrib/pg_trgm
和contrib/btree_gist
(Teodor Sigaev)添加
contrib/btree_gist
支持不平等搜索(Jeff Davis)修复
contrib/fuzzystrmatch
的levenshtein()
函数以处理多字节字符(Alexander Korotkov)添加
ssl_cipher()
andssl_version()
函数到contrib/sslinfo
(Robert Haas)修复
contrib/intarray
和contrib/hstore
提供与索引空数组一致结果(Tom Lane)先前使用索引的空数组查询可能返回使用顺序扫描的不同结果。
允许
contrib/intarray
恰当工作在多维数组上(Tom Lane)在
contrib/intarray
上, 避免在没有空值实际存在的情况下抱怨空值存在的错误(Tom Lane)在
contrib/intarray
中, 修复关于空数组包含操作符操作(Tom Lane)空数组现在正确地认为被包含在任何其他数组中。
删除通过
xslt_process()
处理的_parameter_
=_value_
对数上contrib/xml2
的任意限制(Pavel Stehule)以前限制是10。
在
contrib/pageinspect
中, 修复heap_page_item以返回32位值的infomask(Alvaro Herrera)这避免返回负值,这是混乱的。 该潜在值是16位无符号整数。
E.19.3.13.1. 安全
添加
contrib/sepgsql
连接与SELinux的权限检查(KaiGai Kohei)这使用新的
SECURITY LABEL
功能。添加contrib模块
auth_delay
(KaiGai Kohei)在返回认证失败之前导致服务器暂停; 设计它使得蛮力密码攻击更加困难。
添加
dummy_seclabel
contrib模块(KaiGai Kohei)这用于允许回归测试。
E.19.3.13.2. 性能
添加支持
LIKE
andILIKE
索引搜索到contrib/pg_trgm
(Alexander Korotkov)添加
levenshtein_less_equal()
函数到contrib/fuzzystrmatch
, 这是对小距离的优化(Alexander Korotkov)提高
contrib/seg
上索引查找性能 (Alexander Korotkov)提高许多关系数据库 pg_upgrade 的性能(Bruce Momjian)
添加标记到
contrib/pgbench
以报告每个语句延迟(Florian Pflug)
E.19.3.13.3. Fsync测试
移动
src/tools/test_fsync
到contrib/pg_test_fsync
(Bruce Momjian, Tom Lane)添加
O_DIRECT
支持到contrib/pg_test_fsync
(Bruce Momjian)这匹配通过
wal_sync_method
的O_DIRECT
的使用。添加新的测试给
contrib/pg_test_fsync
(Bruce Momjian)
E.19.3.14. 文档
广泛的ECPG 文档改进(Satoshi Nagayasu)
广泛的校对和文档改进 (Thom Brown, Josh Kupershmidt, Susanne Ebrecht)
为
exit_on_error
添加文档(Robert Haas)这个参数导致会话有任何错误就退出。
为
pg_options_to_table()
添加文档(Josh Berkus)这个函数显示了可读形式中表存储选项。
文档可以访问使用
(compositeval).*
语法的所有复合类型字段(Peter Eisentraut)文档
translate()
删除没有相应的to
字符的from
中字符(Josh Kupershmidt)为
CREATE CONSTRAINT TRIGGER
和CREATE TRIGGER
合并文档(Alvaro Herrera)为Solaris 10添加内核调整记录 (Josh Berkus)
先前只有Solaris 9 内核调整被记录。
一致地处理
HISTORY
文件中的非ASCII字符(Peter Eisentraut)当
HISTORY
文件是英语, 我们必须处理参与者名字中非ASCII字母。 这些目前是音译的, 因此它们没有关于字符集假设相当易读。