14 May 2013
E.1.1。概述

E.1.1

主要新增功能和优化包括:

TODO:待添加

以上项目在下面的小节中更详细地解释。

E.1.2迁移到9.3版本

要从之前的版本迁移数据到这个版本,需要使用pg_dumpall来dump/resotre数据,或者使用pg_upgrade进行升级。

9.3版本包含了一些可能与以前版本不兼容的改变,请注意以下的不兼容问题:

E.1.2.1服务器设置

重命名replication_timeoutwal_sender_timeout(Amit Kapila)

此设置控制WAL sender超时行为

commit_delay参数需要超级用户权限才能设置,因为它现在可能会使其他会话变慢(Simon Riggs)

允许内存排序时使用其全部可用内存(Jeff Janes)

用户已设置work_mem需要根据以前的行为重新评估参数据的设置

E.1.2.2其他

过时的元组再次更新或删除抛出一个错误Kevin Grittner

ON UPDATE SET NULL / SET DEFAULT外键操作变更影响到所有引用的列,而不仅仅是那些在UPDATE引用的列(Tom Lane)

以前只有UPDATE引用的列设置为NULL默认值

内部存储默认的外键匹配(non-FULL,non-PARTIAL)为“simple”(Tom Lane)

在这之前存储为“<unspecified>”这改变了系统列pg_constraint.confmatchtype中的值存储。

存储WAL为一个连续的数据流,而不是跳过最后4GB中的最后16MB分部(Heikki Linnakangas)

此前,WAL文件名称FF结尾的没有被使用。如果你有WAL备份或恢复脚本,考虑了跳过这个文件那么这些脚本需要调整。

E.1.3变化

下面PostgreSQL 9.3相对之前主要版本变更的详细信息

E.1.3.1服务器

E.1.3.1.1

防止非键字段的更新锁住外键(Álvaro Herrera, Noah Misch, Andres Freund, Alexander Shulgin, Marti Raudsepp)

这提高了并发并且降低了死锁的可能性。非键列的更新使用新的SELECT FOR NO KEY UPDATE锁类型,并外键检查使用SELECT FOR KEY SHARE锁模式。

添加配置变量lock_timeout限制锁等待时间(Zoltán Böszörményi)

添加本地锁缓存(Jeff Janes)

加速了持有很多锁的事务在完成时释放锁的速度,特别pg_dump和恢复等操作有用

E.1.3.1.2索引

增加了SP-GISTrange数据类型的支持(Alexander Korotkov)

允许unlogged的GiST索引(Jeevan Chalke)

提高哈希索引的并发性(Robert Haas)

E.1.3.1.3优化器

收集和使用range类型的直方图(Alexander Korotkov)

通过丢弃不必要的低startup costs查询计划,降低优化器的开销(Tom Lane)

改善优化器对索引代价的估计(Tom Lane)

E.1.3.1.4通用性能优化

增加COPY FREEZE选项,避免之后标记记录为已提交的开销(Simon Riggs, Jeff Davis)

提高了NUMERIC的计算性能(Kyotaro Horiguchi)

改善commit_delay设置时,会话组的等待时间(Peter Geoghegan)

改善了commit_delay参数的实用性和行为。

改善了在事务中创建,重建或删除很多表时的性能(Jeff Janes, Tomas Vondra)

提升 CREATE TEMPORARY TABLE ... ON COMMIT DELETE ROWS语句的执行性能,现在只有在临时表备访问过时才进行delete(Heikki Linnakangas)

Vacuum删除过时的记录后进行可见性的重新检查(Pavan Deolasee)

这增加了一个页面被标记为所有可见的机会。

pg_stat_tmp中的统计文件拆分成每个数据库一个文件全局文件(Tomas Vondra)

这减少了统计跟踪的I / O开销。

E.1.3.1.5监控

增加可选的数据页校验能力,可以报告数据的corruption(Simon Riggs, Jeff Davis, Greg Smith, Ants Aasma)

校验选项可以运行initdb的时候被设置

允许同一个角色调用pg_terminate_backend()结束自己另外一个会话(Dan Farina)

在此之前,只有超级用户可以终止会话。

允许统计收集器系统时钟向后推移正常工作(Tom Lane)

此前统计数据收集的时间会停止,直到再次达到之前统计的最后时间。

E.1.3.1.6认证

提高LDAP报错信息和文档(Peter Eisentraut)

URL格式中支持LDAP认证(Peter Eisentraut)

更改ssl_ciphers参数DEFAULT开始,而不是ALL并且移除不安全的密码Magnus Hagander

假设DEFAULT是更合适的密码集。

pg_ident.conf只做一次解析和加载,而不是每个连接都解析和加载(Amit Kapila)

pg_hba.conf的处理一致

E.1.3.1.7服务器设置

极大地降低了系统V shared_memory的需求(Robert Haas)

相反,使用Unix系统上的mmap()用于共享内存。对于大多数用户来说,这将省去对共享内存内核参数调整。

允许postmaster监听多个Unix域套接字(Honza Horák)

unix_socket_directory这个参数被unix_socket_directories取代,它接受一个目录列表。

允许处理一个目录中的多个配置文件(Magnus Hagander, Greg Smith, Selena Deckelmann)

在服务器配置文件中,通过include_dir指定一个目录。

initdb初始化时可以指定的最大shared_buffers参数调整至128MB(Robert Haas)

这是initdb尝试在postgresql.conf中设置的最大值,之前这个最大值为32MB。

postmaster退出时,删除external_pid_file文件(Peter Eisentraut)

E.1.3.2复制和恢复

允许一个流复制备机跟随主机做timeline转换遵(Heikki Linnakangas)

这允许流复制备机继续从一个被promot的备机上获得流信息。 slave需要访问WAL归档目录才能实现timeline转换

添加SQL函数pg_is_in_backup()和pg_backup_start_time()(Gilles Darold)

通过这函数可以获得基础备份的状态信息

提高synchronous_commit disable时流复制日志传送的性能(Andres Freund)

允许将流复制备机更快的提升为主机(Simon Riggs, Kyotaro Horiguchi)

最后一个检查点的redo位置增加到pg_controldata的输出(Fujii Masao)

这个信息对确定恢复需要的WAL文件有用。

允许pg_receivexlog运行在不通的计算机架构上(Heikki Linnakangas)

WAL文件仍然可以在相同架构的机器上被重放,但现在它们可以传送和存储到任意架构的机器上,因为现在流复制协议是架构独立的

使pg_basebackup --write-recovery-conf生成一个最小配置的撇recovery.conf(Zoltán Böszörményi, Magnus Hagander)

这简化了备机的设置

允许pg_receivexlog和pg_basebackup使用--xlog-method来处理流复制时timeline的转换(Heikki Linnakangas)

添加wal_receiver_timeout参数控制WAL接收超时时间(Amit Kapila)

这将允许更快的连接失败检测

E.1.3.2.1预写日志(WAL

更改WAL记录格式使记录头可以跨页(Heikki Linnakangas)

新的格式更紧凑,写入更高效。

E.1.3.3查询

实现SQL标准中的用在FROM子句中子查询和函数调用的LATERAL选项(Tom Lane)

这个特性允许FROM中的子查询和函数引用FROM中其他表中的列。LATERAL关键字用在函数是是可选的

支持COPY和psql中的\copy读取外部程序重的输出,或将COPY和psql \copy的输出重定向到外部程序(Etsuro Fujita)

E.1.3.4对象操作

支持event_triggers(Dimitri Fontaine, Robert Haas, Álvaro Herrera)

这允许DDL命令执行时调用指定的C函数。

允许在一个mult-row VALUES字句的规则中引用OLD/NEW(Tom Lane)

增加CREATE SCHEMA ... IF NOT EXISTS子句(Fabrízio de Royes Mello)

使REASSIGN OWNED改变共享对象所有权(Álvaro Herrera)

E.1.3.4.1. CREATE TABLE

禁止输出有关隐式索引和序列创建的信息(Robert Haas)

这些信息现在出现在DEBUG1级别所以默认不会显示。

允许DROP TABLE IF NOT EXISTS在所指定的模式名称不在时也返回成功(Bruce Momjian)

此前,如果模式不存在,它抛出一个错误

E.1.3.4.2约束

向客户端返回constraint violation detail作为单独的字段(Pavel Stehule)

这使得客户端检索表,列的数据类型,或约束名称错误的详细信息。之前,这类信息必须从错误字符串中提取。需要客户端库支持才能访问这些字段。

E.1.3.4.3. ALTER

ALTER TYPE ...VALUE支持IF NOT EXISTS选项(Andrew Dunstan)

这对测试性的增加枚举类型值非常有用。

ALTER ROLE ALL SET为所有用户增加设置(Peter Eisentraut)

这允许设置应用于所有数据库中的所有用户。 ALTER DATABASE SET已经允许另外设置一个单一的数据库中的所有用户。 postgresql.conf也有类似的效果。

支持ALTERRULE...RENAME(Ali Dar)

E.1.3.4.4视图

支持物化视图(Kevin Grittner)

不同于每次都要访问基础表的普通的视图,物化视图在创建或者刷新时,会创建物理表。访问物化视图,从它的物理表中读取。目前还没有任何增量刷新物化视图或自动访问基础表的机制

进行简单的视图自动更新(Dean Rasheed)

引用部分或全部列的简单视图将是可更新的。更复杂的视图,可使用INSTEAD OF触发器或INSTEAD规则更新

改善视图/规则打印时对引用的表重命名的情况下,或列重命名,添加或删除的处理(Tom Lane)

表名和列重命名可能会给视图/规则带来问题,如果我们仅仅是规则或视图的原始文本替换为新的名称,其结果是有歧义的。该补丁修复了rule-dumping的代码,为了保留原始的语义,插入表和列的别名

添加CREATE递归视图语法(Peter Eisentraut)

在内部,这被翻译成CREATE VIEW ...WITH RECURSIVE....

E.1.3.5数据类型

增加large objects的最大长度从2GB到4TB(Nozomi Anzai, Yugo Nagata)

变化主要包括新的libpq和服务器端的64大对象存取功能。

允许ISO的“T” timestamptz格式使用文本时区名称如“America/Chicago”(Bruce Momjian)

E.1.3.5.1JSON

添加JSON字符串中提取数据的运算符和函数(Andrew Dunstan)

允许JSON字符串被转换成记录(Andrew Dunstan)

添加转换值,记录和hstoreJSON的函数(Andrew Dunstan)

E.1.3.6函数

增加array_remove()和array_replace()函数(Marco Nenciarini, Gabriele Bartolini)

使CONCAT()format()正确处理不固定参数(Pavel Stehule)

改善format()对字段宽度和左/右对齐的处理(Pavel Stehule)

使TO_CHAR(),TO_DATE()和TO_TIMESTAMP()正确处理数据世纪的名称(CC)(Bruce Momjian)

TO_DATE()TO_TIMESTAMP()在ISO和Gregorian week/day表示发混用时返回正确的结果(Bruce Momjian)

使pg_get_viewdef()默认情况下,在每个SELECT目标和FROM后开始新的一行(Marko Tiikkaja)

这减少了在印刷的线的长度,例如在pg_dump的输出。

修复map_sql_value_to_xml_value(),使它打印该函数domain值的输出时按照基础类型的输出方式打印(Pavel Stehule)

某些内置的类型,如布尔,有自己的输出规则;现在,这些规则也适用于对这些类型的domain

如果果SEARCH_PATH的变化强制已经缓存的函数重新生成查询计划(Tom Lane)

之前,已经在当前会话中运行的函数会忽略SEARCH_PATH变化。

E.1.3.7服务器端语言

允许SPI函数访问COPY命令处理的行数(Pavel Stehule)

E.1.3.7.1.  PL/pgSQL的服务器端语言

允许PL/pgSQL的返回一个复合类型的表达式(Asif Rehman)

以前,一个函数返回一个复合类型时只能返回该类型的一个变量。

允许PL/pgSQL的访问COPY处理的行数(Pavel Stehule)

该命令是 GET DIAGNOSTICS x = ROW_COUNT.

放宽关键字PL/pgSQL中的使用(Tom Lane)

E.1.3.7.2. PL/Python的服务器端语言

添加PL/Python的结果对象的字符串处理(Peter Eisentraut)

使plpy.debug(RV)输出更可读

使PL/PythonOID值转换一个适当的Python数值类型(Peter Eisentraut)

使显式报出的SPI错误(如PL/Python的RAISE)与内部SPI错误一样(Oskari Saarenmaa and Jan Urbanski)

E.1.3.8客户端应用程序

添加命令行工具pg_isready,用来检查该服务器是否可以接受连接(Phil Sorber)

使clusterdbpg_restorereindexdbvacuumdb支持多--table参数(Josh Kupershmidt)

这是类似pg_dump的--table表选项。

pg_dumpallpg_basebackuppg_receivexlog增加--dbname参数,使他们可以使用连接字符串(Amit Kapila)

libpq增加函数PQconninfo(),返回连接信息(Zoltán Böszörményi, Magnus Hagander)

E.1.3.8.1. PSQL

调整函数成本使psql的tab自动补全和模式匹配功能更高效(Tom Lane)

改善psql的自动补全功能,使它覆盖更多(Jeff Janes, Peter Eisentraut)

允许psql--single-transaction模式下可以从标准输入读取命令(Fabien Coelho, Robert Haas)

此前该选项只工作从文件中读取命令

删除psql连接到旧服务器的警告(Peter Eisentraut)

连接到一个新的服务器的告警任然被保留下来。

E.1.3.8.1.1反斜杠命令

增加psql \watch命令重复执行命令(Will Leinweber)

添加psql \gset命令存储psql查询结果(Pavel Stehule)

Psql \conninfo命令增加SSL信息(Alastair Turner)

psql \df+增加“安全”标签输出(Jon Erdman)

允许psql的\l接受数据库名模式作为参数(Peter Eisentraut)

如果不存在活跃连接,则禁止\connect使用默认值(Bruce Momjian)

这种情况出现在服务器崩溃后

Psql中使用\g file执行SQL如果执行失败,则重置状态(Tom Lane)

之前,后续SQL命令的输出会意外地继续输出到相同的文件。

E.1.3.8.1.2输出

psql添加latex-longtable输出格式(Bruce Momjian)

此格式允许表跨越多个页面。

psql的latex格式添加border=3输出模式(Bruce Momjian)

psql的元组只和扩展模式,不再输出“(No rows)”(Peter Eisentraut)

在psql的非对其、扩展模式下输出0行时不再打印一个空(Peter Eisentraut)

E.1.3.8.2.  pg_dump

增加pg_dump --jobs选项,支持并行dump表(Joachim Wieland)

使pg_dump输出更有序的输出函数(Joel Jacobson)

修正pg_dump和pg_basebackup输出的tar文件符合POSIX标准(Brian Weaver, Tom Lane)

pg_dump添加--dbname选项,使它与其他客户端命令一致(Heikki Linnakangas)

数据库名仍然可以放在最后,不需要flag

E.1.3.8.3initdb

使initdbfsync新创建的数据目录(Jeff Davis)

个功能可以使用--nosync禁止。

增加initdb --sync-only选项同步数据目录到持久化存储上(Bruce Momjian)

用在pg_upgrade

数据目录放置文件系统的挂载点initdb发出警告(Bruce Momjian)

E.1.3.9源代码

增加一个嵌入式的list接口(Andres Freund)

增加基础组件以更好的支持background worker processes插件(Álvaro Herrera)

创建一个集中式的超时API(Zoltán Böszörményi)

创建libpgcommon并且移动pg_malloc()等函数到里面(Álvaro Herrera, Andres Freund)

这允许libpgport仅用于移植代码。

标准化客户端内存分配函数的命名(Tom Lane)

添加编译指示,表明ereport)和elog()不返回(Peter Eisentraut, Andres Freund, Tom Lane, Heikki Linnakangas

允许通过PG_REGRESS_DIFF_OPTS传递回归测试输出使用的比较参数(Peter Eisentraut)

添加CREATE INDEX CONCURRENTLY测试用例(Abhijit Menon-Sen)

删除int2/int4的typedef,因为int16/int32更好地代表它们(Peter Eisentraut)

修复Mac OS X上的install-strip(Peter Eisentraut)

删除配置标志 --disable-shared,因为不再使用(Bruce Momjian)

Perl重写pgindent(Andrew Dunstan)

添加emacs的宏匹配PostgreSQL perltidy的格式(Peter Eisentraut)

当文法变化时,运行工具检查关键字列表(Tom Lane)

集中flex和bisonmake规则(Peter Eisentraut)

这将对PGXS作者有用

在客户端代码中支持Assert()(Andrew Dunstan)

更改许多内部后端函数返回OID,而不是void(Dimitri Fontaine)

这对event triggers非常有用

增加事务的pre-commit/pre-prepare/pre-subcommit事件的回调接口(Tom Lane)

可加载模块使用事务回调坑能需要修改来处理这些新的事件类型。

添加函数pg_identify_object()dump出对象机器可读的格式(Álvaro Herrera)

添加post-ALTER-object服务器hooks(KaiGai Kohei)

实现一个通用的二进制堆,并用它实现Merge-Append操作(Abhijit Menon-Sen)

改善检测官方时区缩写变化的能力(Tom Lane)

使pkg-config增加对libpq和ECPG库的支持(Peter Eisentraut)

删除src /tool/backend现在这部分内容PostgreSQL wiki(Bruce Momjian)

WAL读操作拆分出来作为一个独立的设施(Heikki Linnakangas, Andres Freund)

使用一个64位的整数来表示WAL的位置(XLogRecPtr),而不是两个32位整数(Heikki Linnakangas)

通常,需要读取WAL格式的工具需要进行调整。

允许PL / Python支持特定平台include目录(Peter Eisentraut)

允许OS X上的PL/Python使用自定义版本的Python构建(Peter Eisentraut)

E.1.3.10附加模块

允许foreign data wrappers支持写(insert/updates/deletes)外表(KaiGai Kohei)

添加一个PostgresForeign data wrapper的contrib模块(Shigeru Hanada)

这个foreign data wrapper支持操作

添加pg_xlogdump的contrib程序(Andres Freund)

pg_trgm索引支持正则表达式搜索(Alexander Korotkov)

改善pg_trgm多字节字符的处理(Tom Lane)

加一个pgstattuple函数来报告GIN待插入列索引表的大小(Fujii Masao)

设置oid2name,pgbenchvacuumlofallback_application_name(Amit Kapila

改善pg_test_timing的输出(Bruce Momjian)

改善pg_test_fsync输出(Peter Geoghegan)

改善dblink的的参数检查(Tom Lane)

E.1.3.10.1.  pg_upgrade

允许pg_upgrade指定--jobs并行工作(Bruce Momjian),

这使得可以并行进行数据库模式的dump/restore,以及并行每个表空间的数据文件复制/链接。

pg_upgrade在当前目录创建Unix套接字(Bruce Momjian, Tom Lane)

这样就防止了可能有人在升级过程中意外地连接数据库

使pg_upgrade --check正确的检测到非默认的Unix套接字目录的路径(Bruce Momjian, Tom Lane)

提升了pg_upgrade在升级有很多表的数据库时的性能(Bruce Momjian)

pg_upgrade升级过程中执行的命令记录下来(Álvaro Herrera)

改善pg_upgrade在复制/链接过程中的状态显示(Bruce Momjian)

E.1.3.10.2.  pgbench

pgbench增加--foreign-keys选项(Jeff Janes)

pgbench创建的表增加了外键约束,用来测试外键性能

允许pgbench汇总性能统计数据,并--aggregate-interval秒输出一次(Tomas Vondra)

pgbench添加--sampling-rate选项,用来控制将多少事务记录在日志中的百分比(Tomas Vondra)

并改善pgbench初始化模式的状态信息输出(Robert Haas, Peter Eisentraut)

增加pgbench -q模式,此模式下pgbench每五秒钟输出一行信息(Tomas Vondra)

在初始化时输出pgbench已用,剩下的时间估计(Tomas Vondra)

允许pgbench使用更大的比例因子(Greg Smith)

E.1.3.11文档

支持创建EPUB格式文档(Peter Eisentraut)

更新FreeBSD内核配置文档(Brad Davis)

改善函数文档(Bruce Momjian, Tom Lane)

增加Mac OS X上文档工具连设置指引(Peter Eisentraut)

改善commit_delay文档(Peter Geoghegan)

中文翻译:Jov(amutu@amutu.com)

链接:http://amutu.com/blog/postgresql-9-3-release-note-zh-cn.html