E.36. 版本 9.4

E.36.1. 概述
E.36.2. 迁移到版本 9.4
E.36.3. 修改列表

发布日期:. 2014-12-18

E.36.1. 概述

PostgreSQL 9.4中主要增强的功能包括:

  • 添加了jsonb, 一个存储JSON数据更能胜任和更有效的数据类型

  • 为修改了的postgresql.conf配置文件项添加新的SQL命令 ALTER SYSTEM

  • 为一些ALTER TABLE命令降低锁定力度

  • 允许物化视图 在不阻塞并发读取的情况下刷新

  • 添加对逻辑解码WAL数据的支持, 以便允许数据库以一个可定制的格式流出数据

  • 允许后端工作进程动态注册、启动和终止

上面的条目在下面的章节中有更详细的解释。

E.36.2. 迁移到版本 9.4

那些想要从以前的版本中迁移数据的用户,需要使用pg_dumpall 的转储/恢复,或者使用pg_upgrade

版本9.4包含一些可能影响与以前版本兼容性的修改。查看下面的不兼容:

  • 加强到多维数组输入的检查 (Bruce Momjian)

    以前,一个以单元素子数组开头的输入数组字符串稍后可能包含多元素子数组, 例如'{{1}, {2,3}}'::int[]是可以接受的。

  • 当转换类型datetimestamptimestamptz 的值到JSON时, 让该值的格式是一个与ISO 8601兼容的格式 (Andrew Dunstan)

    以前这样的值是根据当前DateStyle设置呈现的; 但是许多JSON处理器要求时间戳的格式是ISO 8601。如果需要, 可以在传递值到JSON转换函数之前,通过明确的转换日期时间值为 text获取以前的行为。

  • 如果数组是空的话,json #> text[]路径提取运算符现在返回它左侧的输入, 而不是NULL (Tom Lane)

    这与代表简单字段/元素提取运算符->的零应用的想法是一致的。 相似的,带有空数组的json #>> text[] 只是强制它的左侧输入变成text。

  • JSON 字段/元素/路径提取运算符中的极端情况现在返回NULL而不是提出一个错误 (Tom Lane)

    例如,将字段提取应用到JSON数组中现在会产生NULL而不是一个错误。 这样就更加一致了(因为一些可比较的情况,比如没有这样的字段早就是返回NULL的), 并且这样使得创建使用这些运算符的表达式索引更加安全, 因为他们现在对于任何有效的JSON输入将不会抛出错误。

  • 使to_timestamp()to_date()格式字符串中连续的空格消耗输入字符串中相应数量的字符 (空格或非空格),然后有条件的消耗临近的空格,如果不在FX模式下 (Jeevan Chalke)

    以前,非FX格式字符串中连续的空格字符表现的就像一个空格字符, 并且消耗掉输入字符串中所有临近的空格。例如,以前一个三个空间的格式字符串将只消耗 ' 12'中的第一个空格,但是现在它将消耗所有三个字符。

  • 修复ts_rank_cd() 以忽略剥离了的词位 (Alex Hill)

    以前,剥离了的词位被看做是它们有一个缺省的位置,产生一个可疑的有效性。

  • 对于声明为接受VARIADIC "any"的函数,一个标记为VARIADIC 的实参必须是一个可以测定的数组类型 (Pavel Stehule)

    这样的参数不能再被写作未加修饰的字符串文本或NULL; 现在将必须转换到一个适当的数组数据类型。请注意, 这并不影响没有标记为VARIADIC的参数。

  • 确保整行变量暴露预期的字段名给注意复合变量中字段名的函数 (Tom Lane)

    类似row_to_json(tab.*)的构造现在总是发出在该调用时, 匹配表tab可见的字段别名的字段名字。在以前的版本中, 发出的字段名字有时将是表的实际字段名字,不管在查询中给它赋予了什么别名。

  • DISCARD现在也丢弃了序列相关的状态 (Fabrízio de Royes Mello, Robert Haas)

  • 重命名EXPLAIN ANALYZEtotal runtime输出为 execution time (Tom Lane)

    现在也报告规划时间,以前的名字有些混淆。

  • SHOW TIME ZONE 现在以POSIX时区格式输出简单数字UTC偏移量 (Tom Lane)

    以前,这样的时区设置作为interval 值显示。新的输出在作为简单字符串传递时被SET TIME ZONE 适当的解读了,而老的输出则需要特殊的处理才能正确的重新解析。

  • 支持更新外部表的外部数据封装器必须考虑AFTER ROW 触发器存在的可能性 (Noah Misch)

    当存在AFTER ROW触发器时,表的所有字段必须通过更新动作返回, 因为触发器可能检查任何或所有字段。以前,外部表从未有过触发器, 所以FDW可能会优化RETURNING子句(如果有)中没有提到的字段。

  • 阻止CHECK 约束参考系统字段,除了tableoid (Amit Kapila)

    以前是允许这样的检查约束的,但是它们在恢复时经常引起错误。

  • 如果指定了多个目标参数,那么使用最后指定的 恢复目标参数 (Heikki Linnakangas)

    以前,在recovery_target_xxx 参数上有一个未记录的优先级顺序。

  • 在Windows上,自动保存用户提供的命令字符串中的引用 (Heikki Linnakangas)

    执行它们自己的引用保留的用户命令可能需要调整。这对于在 archive_commandrestore_commandCOPY TO/FROM PROGRAM 中使用的命令来说可能是一个问题。

  • 删除目录列pg_class.reltoastidxid (Michael Paquier)

  • 删除目录列pg_rewrite.ev_attr (Kevin Grittner)

    PostgreSQL 7.3以来不再支持每列的规则。

  • 删除本地对Kerberos认证的支持(--with-krb5等) (Magnus Hagander)

    支持使用Kerberos认证的方式是GSSAPI。 本地代码自PostgreSQL 8.3起就弃用了。

  • PL/Python中,像底层数组类型那样处理数组上的域名 (Rodolfo Campero)

    以前这样的值被看做是字符串。

  • 让libpq的PQconnectdbParams()PQpingParams() 函数处理零长度的字符串为缺省 (Adrian Vondendriesch)

    以前,这些函数只在某些情况下将零长度的字符串值看做是选取缺省。

  • 修改intarray模块返回的空数组为零维数组 (Bruce Momjian)

    以前,空数组是作为零长度一维数组返回的,它的文本表示看起来和零维数组 ({})相同,但是它们在数组操作中的表现不同。在这一块, intarray的行为现在匹配内建数组运算符。

  • pg_upgrade现在使用-U--username来声明用户名 (Bruce Momjian)

    以前,这个选项拼写为-u--user, 但是会与其他工具不一致。

E.36.3. 修改列表

下面你将看到一个PostgreSQL 9.4和以前的主版本之间详细的修改清单。

E.36.3.1. 服务器

  • 允许后端工作进程动态注册、启动和终止 (Robert Haas)

    新的worker_spi模块显示了使用这个特性的一个示例。

  • 允许动态分配共享内存段 (Robert Haas, Amit Kapila)

    这个特性在test_shm_mq模块中阐明。

  • 在崩溃恢复或立即关闭时,发送不可抓取的终止信号(SIGKILL) 到没有立即关闭的子进程 (MauMau, Álvaro Herrera)

    这减少了在postmaster关闭之后留有单独的子进程的可能性, 也确保了在某些子进程变成stuck时崩溃恢复可以继续进行。

  • 改善数据库系统标识符的随机性 (Tom Lane)

  • VACUUM正确的将死亡但是还未移除的行报告给状态收集器 (Hari Babu)

    以前这些被报告为存活的行。

E.36.3.1.1. 索引
  • 减少GIN索引尺寸 (Alexander Korotkov, Heikki Linnakangas)

    通过pg_upgrade升级的索引将会工作的很好, 但是仍然是老的、较大的GIN格式。使用 REINDEX以新的格式重新创建老的GIN索引。

  • 改善多键GIN查找的速度 (Alexander Korotkov, Heikki Linnakangas)

  • inetcidr数据类型添加 GiST索引支持 (Emre Hasegeli)

    这样的索引改善了子网和超网 查找和排序比较。

  • 修复B-tree页删除中罕见的竞态条件 (Heikki Linnakangas)

  • 让中断的B-tree页分裂的处理更加健壮 (Heikki Linnakangas)

E.36.3.1.2. 一般性能
  • 允许多重后端并发的插入到WAL 缓冲区中 (Heikki Linnakangas)

    这提升了并行写入的性能。

  • 有条件的只写入被更新行的修改部分到WAL中 (Amit Kapila)

  • 改善作为窗口函数 使用的聚合函数的性能 (David Rowley, Florian Pflug, Tom Lane)

  • 改善使用numeric 状态值的聚合的速度 (Hadi Moshayedi)

  • 当使用CLUSTERVACUUM FULL 重新写入表时,尝试冻结元组 (Robert Haas, Andres Freund)

    这可以避免将来冻结元组的需要。

  • 改善COPY处理缺省nextval() 字段的速度 (Simon Riggs)

  • 改善在同一会话中访问许多不同序列 的速度 (David Rowley)

  • 在排序和B-tree索引建立时,提高内存中持有的元组数量的硬限制 (Noah Misch)

  • 减少PL/pgSQL DO块的内存分配 (Tom Lane)

  • 让规划器更积极的提取混合AND/OR子句中的限制子句 (Tom Lane)

  • 不允许将不稳定的WHERE子句放入DISTINCT子查询中 (Tom Lane)

    放入一个WHERE子句总的来说会产生一个更有效的规划, 但是在评估的成本方面来说,该子句比查询的文本所隐含的要更多; 所以,如果该子句包含任何不稳定的函数,就不要这样做。

  • 自动调整目录缓存的大小 (Heikki Linnakangas)

    这减少了只访问几个表的会话的内存消耗,提高了访问许多表的会话的性能。

E.36.3.1.3. 监视
  • 添加pg_stat_archiver系统视图以报告 WAL归档活动 (Gabriele Bartolini)

  • 添加n_mod_since_analyze字段到 pg_stat_all_tables和相关的系统视图 (Mark Kirkwood)

    这些字段显示子表最后ANALYZE依赖修改了的元组数量的系统估计。 这个估计促使决定何时自动分析。

  • 添加backend_xidbackend_xmin 字段到系统视图pg_stat_activity, 和一个backend_xmin字段到 pg_stat_replication (Christian Kruse)

E.36.3.1.4. SSL
  • 添加对SSL ECDH秘钥交换的支持 (Marko Kreen)

    这允许为服务器认证使用Elliptic Curve秘钥。这样的秘钥更快, 并且比RSA秘钥更加安全。新的配置参数ssl_ecdh_curve 控制为ECDH使用哪条曲线。

  • 改善缺省的ssl_ciphers设置 (Marko Kreen)

  • 缺省的,现在是服务器而不是客户端控制SSL运算的优先顺序 (Marko Kreen)

    以前,为了支持客户端侧的缺省,ssl_ciphers 声明的顺序通常是忽略了的,这在大多数PostgreSQL 客户端上是不可配置的。如果需要,可以通过新的配置参数 ssl_prefer_server_ciphers恢复老的行为。

  • log_connections显示SSL 加密信息 (Andreas Kunert)

  • 改善SSL协商处理 (Álvaro Herrera)

E.36.3.1.5. 服务器设置
  • 为了改变postgresql.conf配置文件项,添加新的 SQL命令ALTER SYSTEM (Amit Kapila)

    以前这样的设置只能通过手动编辑postgresql.conf修改。

  • 添加autovacuum_work_mem配置参数, 控制自动清理进程使用的内存数量 (Peter Geoghegan)

  • 添加huge_pages参数,允许在Linux上使用大量的内存页 (Christian Kruse, Richard Poole, Abhijit Menon-Sen)

    这可以提升大内存系统的性能。

  • 添加max_worker_processes参数, 限制后端工作进程的数量 (Robert Haas)

    这在配置一个备用服务器拥有所需数量的工作进程时是有帮助的(主机也是一样的)。

  • 添加仅超级用户的session_preload_libraries参数, 在会话开始时加载库 (Peter Eisentraut)

    local_preload_libraries相比, 这个参数可以加载任意共享库,不只是在$libdir/plugins路径中的那些。

  • 添加wal_log_hints参数,启用提示一点变化的WAL记录 (Sawada Masahiko)

    提示一点变化通常是不记录的,除非启用了校验和。这对于外部工具 比如pg_rewind是有用的。

  • 四次增加work_memmaintenance_work_mem 的缺省设置 (Bruce Momjian)

    新的缺省分别是4MB和64MB。

  • 增加effective_cache_size 的缺省设置到4GB (Bruce Momjian, Tom Lane)

  • 允许printf风格的空白填补到 log_line_prefix指定的位置 (David Rowley)

  • 在声明了配置变量值时,允许使用太字节单位(TB) (Simon Riggs)

  • 显示锁持有者和等待者的PID,并改善 log_lock_waits日志消息中关系相关的信息 (Christian Kruse)

  • 在加载共享库时,降低服务器日志级别 (Peter Geoghegan)

    以前的级别是LOG,这对于每个会话都加载的库来说太详细了。

  • 在Windows上,让SQL_ASCII编码的数据库和服务器进程 (比如postmaster)在服务器的Windows用户本地的字符编码中发出消息 (Alexander Law, Noah Misch)

    以前,这些消息在Windows ANSI代码页输出。

E.36.3.2. 复制和恢复

  • 添加复制槽, 协调流备用上的活动和流出节点 (Andres Freund, Robert Haas)

    复制槽允许在主服务器上保存资源,像WAL文件, 直到备用服务器不再需要它们。

  • 添加恢复参数recovery_min_apply_delay推迟复制 (Robert Haas, Fabrízio de Royes Mello, Simon Riggs)

    在备用服务器上延迟重放可以帮助从用户错误中恢复。

  • 添加recovery_target选项immediate, 一旦达到一致状态,尽快停止WAL 恢复 (MauMau, Heikki Linnakangas)

  • 改善恢复目标处理 (Heikki Linnakangas)

    pg_last_xact_replay_timestamp() 报告的时间戳现在反映了早已提交的记录,而不是要提交的事务。 恢复到一个还原点现在重放了该还原点,而不只是在还原点之前停止。

  • pg_switch_xlog() 现在清理老的WAL文件中任何未使用的尾随空白 (Heikki Linnakangas)

    这提高了WAL文件的压缩率。

  • 报告来自外部恢复命令 的失败返回码 (Peter Eisentraut)

  • 减少WAL重放期间的自旋锁争用 (Heikki Linnakangas)

  • 更频繁的将事务运行写入到WAL记录中 (Andres Freund)

    这允许备用服务器启动更迅速,并且更强力的清理资源。

E.36.3.2.1. 逻辑解码

逻辑解码允许数据库以一个可配置的格式改变流。从WAL 中读取数据,然后转化成需要的目标格式。要实现这个特性,需要做以下改变:

  • 添加对WAL数据的逻辑解码的支持, 以允许数据库改变为以一个可自定义的格式流出 (Andres Freund)

  • 添加新的wal_level设置logical, 在WAL中启用逻辑更改集编码 (Andres Freund)

  • 添加表级参数REPLICA IDENTITY, 控制逻辑复制 (Andres Freund)

  • 添加关系选项user_catalog_table, 辨认包含在逻辑更改集编码中的用户创建的表 (Andres Freund)

  • 添加pg_recvlogical应用以接收逻辑解码数据 (Andres Freund)

  • 添加test_decoding模块,在SQL 级别说明逻辑解码 (Andres Freund)

E.36.3.3. 查询

  • 添加WITH ORDINALITY语言,给从FROM 子句中的设置返回函数返回的行编号 (Andrew Gierth, David Fetter)

    这对于像unnest()这样的函数尤其有用。

  • 添加ROWS FROM()语法,允许FROM子句中的设置返回函数水平串联 (Andrew Gierth)

  • 允许SELECT有一个空的目标列表 (Tom Lane)

    添加这个是为了从一个表中选取的零字段视图可以正确的转储和恢复。

  • 确保SELECT ... FOR UPDATE NOWAIT在极端情况下不会等待,包括早已并发更新元组的情况 (Craig Ringer and Thomas Munro)

E.36.3.4. 实用命令

  • 添加DISCARD SEQUENCES命令,抛弃缓存的序列相关的状态 (Fabrízio de Royes Mello, Robert Haas)

    DISCARD ALL现在也抛弃这样的信息。

  • 添加FORCE NULL选项到COPY FROM, 使匹配指定空字符串的引用字符串在CSV模式下转换为NULL (Ian Barwick, Michael Paquier)

    没有这个选项,只有未引用的匹配字符串将被作为空值引入。

  • 当命令在事务块外部使用时,发出警告,虽然它们没什么影响 (Bruce Momjian)

    新增的警告为SET LOCALSET CONSTRAINTSSET TRANSACTIONABORT命令在事务块外部使用时发出。

E.36.3.4.1. EXPLAIN
  • EXPLAIN ANALYZE显示规划时间 (Andreas Karlsson)

  • EXPLAIN在Agg和组节点显示组字段 (Tom Lane)

  • EXPLAIN ANALYZE显示包含在位图堆扫描中的准确和失真块计数 (Etsuro Fujita)

E.36.3.4.2. 视图
  • 允许物化视图 在不阻塞其他会话读取视图的同时刷新 (Kevin Grittner)

    这是通过REFRESH MATERIALIZED VIEW CONCURRENTLY实现的。

  • 允许视图自动更新, 即使它们包含一些非自动更新的字段 (Dean Rasheed)

    以前不可自动更新输出字段,比如表达式、常量和函数调用,的存在阻止了自动更新。 现在支持INSERTUPDATEDELETE了, 假设它们不尝试分配新的值给任何不可自动更新的字段。

  • 允许控制INSERTUPDATE 是否可以添加行到可自动更新的视图而不会出现在该视图中 (Dean Rasheed)

    这是用新的CREATE VIEW子句WITH CHECK OPTION 控制的。

  • 允许安全屏障视图自动可更新 (Dean Rasheed)

E.36.3.5. 对象操作

  • 支持外部表上的触发器 (Ronan Dunklau)

  • 允许移动对象的组从一个表空间到另一个表空间中, 使用ALL IN TABLESPACE ... SET TABLESPACEALTER TABLE, ALTER INDEXALTER MATERIALIZED VIEW格式 (Stephen Frost)

  • 允许通过ALTER TABLE ... ALTER CONSTRAINT修改外键约束为可延迟的 (Simon Riggs)

  • 为某些ALTER TABLE命令降低锁定力度 (Simon Riggs, Noah Misch, Robert Haas)

    特别的,VALIDATE CONSTRAINTCLUSTER ONSET WITHOUT CLUSTERALTER COLUMN SET STATISTICSALTER COLUMN SET (attribute_option)ALTER COLUMN RESET (attribute_option)不再需要ACCESS EXCLUSIVE锁。

  • 允许表空间选项在CREATE TABLESPACE中设置 (Vik Fearing)

    以前这些选项只能通过ALTER TABLESPACE设置。

  • 允许CREATE AGGREGATE定义聚合的过渡状态数据的估计大小 (Hadi Moshayedi)

    正确的使用这个特性允许规划器更好的估计聚合将使用多少内存。

  • 修复DROP IF EXISTS,避免大多数情况下对象不存在的错误 (Pavel Stehule, Dean Rasheed)

  • 改善系统关系的标识 (Andres Freund, Robert Haas)

    以前,关系一旦移动到pg_catalog模式中,就不能被修改或删除了。

E.36.3.6. 数据类型

  • 完全实现line数据类型 (Peter Eisentraut)

    线数据类型(lseg) 总是完全支持的。以前的line数据类型(只通过编译时选项启用) 不是二进制的或者与新的实现转储兼容。

  • 添加pg_lsn 数据类型代表WAL日志序列号 (LSN) (Robert Haas, Michael Paquier)

  • 允许单点polygon 被转换为circle (Bruce Momjian)

  • 支持时区缩写修改UTC的偏移时间 (Tom Lane)

    以前,PostgreSQL假设与时区缩写(比如EST) 有关的UTC偏移在任何特殊环境的使用中都不会改变。然而, 这个假设在现实环境中失败了,所以引入了时区缩写代表有时变化的UTC偏移的能力。 更新时区缩写定义文件,在自1970年(根据IANA时区数据库) 以来修改了UTC偏移的缩写时区环境中使用这个特性。在这样的时区中, PostgreSQL现在将根据给定的日期,关联正确的UTC偏移和缩写。

  • 在合适时,允许非ISO timestampdate字符串有5位数字以上的年 (Bruce Momjian)

  • 添加对interval 值的上溢/下溢检查 (Bruce Momjian)

E.36.3.6.1. JSON
  • 添加jsonb, 一个存储JSON数据更加胜任和有效的数据类型 (Oleg Bartunov, Teodor Sigaev, Alexander Korotkov, Peter Geoghegan, Andrew Dunstan)

    这个新的类型允许更快的访问JSON文档中的值,更快、更有用的索引JSON列。 jsonb文档中的标量值是以适当的标量SQL类型存储的, 并且JSON文档结构是预解析的,而不是和原始json 数据类型中的文本一样存储。

  • 添加新的JSON函数,允许构造任意复杂的JSON树 (Andrew Dunstan, Laurence Rowe)

    新增的函数包括json_array_elements_text()json_build_array()json_object()json_object_agg()json_to_record()、 和json_to_recordset()

  • 添加json_typeof(), 返回一个json值的数据类型 (Andrew Tipton)

E.36.3.7. 函数

  • 添加pg_sleep_for(interval)pg_sleep_until(timestamp),更灵活的指定延迟 (Vik Fearing, Julien Rouhaud)

    现有的pg_sleep()函数只支持以秒为单位指定延迟。

  • 为数组添加cardinality() 函数 (Marko Tiikkaja)

    这返回数组中的元素总数量,或者是0(没有元素的数组)。

  • 添加SQL函数,允许以任意的偏移量 大对象读/写 (Pavel Stehule)

  • 允许unnest() 接受多个参数,相互间未嵌套水平串联 (Andrew Gierth)

  • 添加函数,为单个的值而不是字符串构造timedatetimestamptimestamptzinterval (Pavel Stehule)

    函数的名字是以make_为前缀的, 比如make_date()

  • to_char()TZ格式说明符为简单的数值时区偏移量返回一个有用的值 (Tom Lane)

    以前,如果timezone设置为一个常量,比如-4to_char(CURRENT_TIMESTAMP, 'TZ')返回一个空字符串。

  • 添加时区偏移格式说明符OFto_char() (Bruce Momjian)

  • 改善random() 使用的随机种子 (Honza Horak)

  • 加强对chr(int) 中指出的Unicode代码的有效性检查 (Tom Lane)

    这个函数现在只接受根据RFC 3629来说有效的UTF8字符值。

E.36.3.7.1. 系统信息函数
  • 添加函数,在pg_classpg_procpg_typepg_operator中查找对象, 对于不存在的对象不会生成错误 (Yugo Nagata, Nozomi Anzai, Robert Haas)

    例如,to_regclass()pg_class中执行查找类似于regclass输入函数, 但是它在遇到不存在的对象时返回NULL而不是失败。

  • 添加函数pg_filenode_relation(), 允许从文件节点中更有效的查找关系名 (Andres Freund)

  • 添加parameter_default字段到information_schema.parameters 视图 (Peter Eisentraut)

  • information_schema.schemata 显示所有可访问的模式 (Peter Eisentraut)

    以前只显示当前用户拥有的模式。

E.36.3.7.2. 聚合
  • 通过FILTER 子句添加哪些行被传递到聚合函数的控制 (David Fetter)

  • 支持顺序集(WITHIN GROUP) 聚合 (Atri Sharma, Andrew Gierth, Tom Lane)

  • 添加标准顺序集聚合percentile_cont()percentile_disc()mode()rank()dense_rank()percent_rank()cume_dist() (Atri Sharma, Andrew Gierth)

  • 支持VARIADIC 聚合函数 (Tom Lane)

  • 允许多态的聚合拥有非多态的状态数据类型 (Tom Lane)

    这允许SQL中聚合的适当声明像内建聚合array_agg()

E.36.3.8. 服务器端的语言

  • 添加事件触发器支持到PL/PerlPL/Tcl (Dimitri Fontaine)

  • PL/Python中转换 numeric 值到decimal (Szymon Guz, Ronan Dunklau)

    以前这样的值被转换成Python float值,有丢失精度的风险。

E.36.3.8.1. PL/pgSQL服务器端的语言
  • 使用GET DIAGNOSTICS添加检索当前PL/pgSQL调用堆栈的能力 (Pavel Stehule, Stephen Frost)

  • 添加选项print_strict_params, 显示传递到违反STRICT约束的查询中的参数 (Marko Tiikkaja)

  • 添加变量plpgsql.extra_warningsplpgsql.extra_errors,启用额外的PL/pgSQL警告和错误 (Marko Tiikkaja, Petr Jelinek)

    当前只有关于跟踪变量的警告/错误可用。

E.36.3.9. libpq

  • 让libpq's PQconndefaults() 函数忽略无效的服务文件 (Steve Singer, Bruce Momjian)

    以前,如果遇到一个不正确的服务文件,它会返回NULL。

  • 接受超过libpq中TLSv1TLS协议版本 (Marko Kreen)

E.36.3.10. 客户端应用

  • 添加createuser选项-g 指定角色成员关系 (Christopher Browne)

  • 添加vacuumdb 选项--analyze-in-stages,在增加粒度阶段分析 (Peter Eisentraut)

    这允许快速建立最小的统计。

  • pg_resetxlog带有选项-n 输出当前和潜在修改了的值 (Rajeev Rastogi)

  • initdb为不正确的区域设置抛出错误, 而不是安静的回滚到缺省的选择 (Tom Lane)

  • pg_ctl为一个不可访问的数据目录返回退出代码4 (Amit Kapila, Bruce Momjian)

    这个行为更紧密的匹配Linux Standard Base(LSB)核心规范。

  • 在Windows上,确保非绝对的-D路径声明被解释为相对的 pg_ctl的当前路径 (Kumar Rajeev Rastogi)

    以前它将被解释为相对于底层Windows服务启动的目录。

  • 允许sizeof()ECPG C数组定义中 (Michael Meskes)

  • ECPG正确的处理C风格的注释嵌套, 以C或者SQL文本的形式 (Michael Meskes)

E.36.3.10.1. psql
  • 当禁用了页脚时,抑制在psql expanded 模式中输出No rows (Bruce Momjian)

  • 当它处在连接启动时,允许Control-C退出psql (Peter Eisentraut)

E.36.3.10.1.1. 反斜杠命令
  • psql\db+显示表空间选项 (Magnus Hagander)

  • \do+显示实现运算符的函数 (Marko Tiikkaja)

  • 如果表中存在oid字段,则让\d+ 只输出一个OID行 (Bruce Momjian)

    以前,不管oid字段是否存在,总是报告它的。

  • \d显示禁用的系统触发器 (Bruce Momjian)

    以前,如果你禁用了所有的触发器,那么只显示用户触发器为禁用的。

  • 修复\copy,不再需要stdin和分号之间有空格 (Etsuro Fujita)

  • \copy的末尾输出行计数,就像COPY那样 (Kumar Rajeev Rastogi)

  • 修复\conninfo,为使用hostaddr 的连接显示服务器的IP地址 (Fujii Masao)

    以前\conninfo在这样的情况下不会显示服务器的IP地址。

  • \conninfo中显示SSL协议版本 (Marko Kreen)

  • \pset添加tab补齐 (Pavel Stehule)

  • 允许\pset不带有任何参数的显示所有设置 (Gilles Darold)

  • \s显示以前它没有转换为绝对路径时写入的历史文件的名字 (Tom Lane)

    该代码以前尝试转换一个相对文件名到一个绝对路径显示,但是经常弄错了。

E.36.3.10.2. pg_dump
  • 允许pg_restore选项 -I-P-T-n 指定多次 (Heikki Linnakangas)

    这允许在一次操作中恢复多个对象。

  • 在恢复期间删除老的对象时,可以添加IF EXISTS子句到 DROP命令发出 (Pavel Stehule)

    这个修改在删除老的对象时阻止了不必要的错误。pg_dumppg_dumpallpg_restore的新的 --if-exists选项只在也指定了--clean时可用。

E.36.3.10.3. pg_basebackup
  • 添加pg_basebackup选项--xlogdir, 指定pg_xlog目录位置 (Haribabu Kommi)

  • 允许pg_basebackup在备份中重新安置表空间 (Steeve Lennmark)

    这对于在同一个机器上使用pg_basebackup作为主机尤其有用。

  • 允许网络流基础备份是节流的 (Antonin Houska)

    这可以使用pg_basebackup --max-rate 参数控制。

E.36.3.11. 源代码

  • 改善冻结元组的方式,保存辩证的信息 (Robert Haas, Andres Freund)

    这个修改尽快删除了冻结元组的主要反对意见。需要修改检查元组标识位的代码。

  • 不再需要标有 PG_FUNCTION_INFO_V1 宏的函数的函数原型 (Peter Eisentraut)

    这个修改消除了写引用原型的需要。请注意,PG_FUNCTION_INFO_V1 宏必须出现在对应函数定义的前面,以避免编译器警告。

  • 删除SnapshotNowHeapTupleSatisfiesNow() (Robert Haas)

    所有现有的使用都已经转换到了更合适的快照类型。 目录扫描现在使用MVCC快照。

  • 添加一个API,允许内存分配超过1G (Noah Misch)

  • 添加psprintf(),简化字符串组合时的内存分配 (Peter Eisentraut, Tom Lane)

  • 支持printf()尺寸修饰符z, 输出size_t值 (Andres Freund)

  • 改变appendStringInfoVA()API, 以更好的使用vsnprintf() (David Rowley, Tom Lane)

  • 允许创建外部toast数据的新类型 (Andres Freund)

  • 添加单读者、单作者、轻量级共享消息序列 (Robert Haas)

  • 改善x86_64 CPU上的自旋锁速度 (Heikki Linnakangas)

  • 删除不支持的平台SINIXSun3NS32K上的自旋锁支持 (Robert Haas)

  • 删除IRIX接口 (Robert Haas)

  • 减少--disable-spinlocks建立所需的信号量 (Robert Haas)

  • 重写Perl中的duplicate_oids Unix shell脚本 (Andrew Dunstan)

  • 添加Test Anything Protocol (TAP)检测客户端程序 (Peter Eisentraut)

    当前这些测试只在给出--enable-tap-tests选项到 configure时通过make check-world运行。 这在某些将来的版本中可能会成为缺省行为。

  • 添加编译目标check-testsinstallcheck-tests, 允许运行单个测试的选择 (Andrew Dunstan)

  • 删除maintainer-check makefile规则 (Peter Eisentraut)

    缺省的建立规则现在包括所有以前可选的测试。

  • 改善对PGXS模块VPATH建立的支持 (Cédric Villemain, Andrew Dunstan, Peter Eisentraut)

  • 升级到Autoconf 2.69 (Peter Eisentraut)

  • 添加一个configure标志,附加自定义文本到 PG_VERSION字符串 (Oskari Saarenmaa)

    这对于打包者建立自定义的二进制有帮助。

  • 改善DocBook XML有效性 (Peter Eisentraut)

  • 修复Coverity扫描器报告的各种较小的安全性和完整性问题 (Stephen Frost)

  • 在测试PostgreSQLValgrind时, 增加对无效内存使用的检测 (Noah Misch)

  • 改善样品Emacs配置文件 emacs.samples (Peter Eisentraut)

    还添加了.dir-locals.el到源码树的顶端。

  • 允许pgindent接受类型定义的命令列表 (Bruce Momjian)

  • pgindent对于预处理器条件语句周围的空行更智能 (Bruce Momjian)

  • 避免在CygwinMingw 建立中大多数使用dlltool (Marco Atzeri, Hiroshi Inoue)

  • MSVC (Windows)建立中支持仅客户端的安装 (MauMau)

E.36.3.12. 附加模块

  • 添加pg_prewarm扩展,在服务器启动时预加载关系数据到共享缓存 (Robert Haas)

    这允许更快的达到完整的操作性能。

  • 添加UUID随机数生成器gen_random_uuid()pgcrypto (Oskari Saarenmaa)

    这允许创建版本 4 UUID,而不用安装uuid-ossp

  • 允许uuid-osspBSDe2fsprogs UUID库一起工作, 不只是OSSP UUID库 (Matteo Beccati)

    这提高了uuid-ossp模块的可移植性, 因为它不再必须有日益过时的OSSP库。该模块名稍微有点用词不当, 但是我们不会修改它。

  • 添加选项到auto_explain,以包含触发器执行时间 (Horiguchi Kyotaro)

  • 修复pgstattuple,不将未提交事务中的行报告为死行 (Robert Haas)

  • pgstattuple函数使用regclass类型参数 (Satoshi Nagayasu)

    仍然支持text类型参数,它们可能会在将来的小版本中移除。

  • 提高pgrowlocks输出的一致性,以更一致的遵守快照规则 (Robert Haas)

  • 改善pg_trgm对于有索引的正则表达式搜索的三元模型的选择 (Alexander Korotkov)

    这个修改阻止使用包含空格的三元模型,它们通常有更少的选择性。

  • 允许pg_xlogdump--follow 报告一个生活日志流 (Heikki Linnakangas)

  • 更简洁的存储cube数据 (Stas Kelvich)

    现有的数据必须转储/恢复,以使用新的格式。老的格式仍然能够读取。

  • 减少使用游标时vacuumlo客户端内存的使用 (Andrew Dunstan)

  • 大幅度减少pg_upgrade中的内存消耗 (Bruce Momjian)

  • 传递pg_upgrade的用户名(-U)选项到产生的分析脚本 (Bruce Momjian)

E.36.3.12.1. pgbench
  • 删除对pgbench脚本的行长度限制 (Sawada Masahiko)

    以前的行限制是BUFSIZ

  • 添加长的选项名称到pgbench (Fabien Coelho)

  • 添加pgbench选项--rate,控制事务速度 (Fabien Coelho)

  • 添加pgbench选项--progress, 打印定期的进度报告 (Fabien Coelho)

E.36.3.12.2. pg_stat_statements
  • pg_stat_statements使用一个文件, 而不是共享内存,用于查询文本存储 (Peter Geoghegan)

    这删除了以前查询文本长度的限制,允许默认追踪更多的唯一语句。

  • 允许报告pg_stat_statements的内部查询哈希标识符 (Daniel Farina, Sameer Thakur, Peter Geoghegan)

  • 添加检索所有pg_stat_statements 信息除了查询文本的能力 (Peter Geoghegan)

    这允许监视工具只为刚创建的条目抓取查询文本,提高状态重复查询时的性能。

  • pg_stat_statements忽略DEALLOCATE 命令 (Fabien Coelho)

    它早已忽略了PREPARE,还有规划时间,所以这样看起来更加一致。

  • 在服务器关闭时保存状态文件到$PGDATA/pg_stat, 而不是$PGDATA/global (Fujii Masao)