💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# E.183\. 版本 7.4 > **发布日期:** 2003-11-17 ## E.183.1\. 概述 这个版本中的主要变更: `IN` / `NOT IN`子查询现在更有效率 在以前的版本中,`IN` / `NOT IN` 子查询连接到上面的查询,顺序的扫描子查询需找一个匹配。 7.4代码使用普通连接使用的相同的先进的技术,因此更加快速。 `IN`现在通常比一个等价的`EXISTS`子查询相同速度或者更快; 这颠倒了应用于以前版本的传统观点。 通过使用哈希桶提高`GROUP BY`的处理 在以前的版本中,被分组的行必须先排序。7.4代码可以不用排序就执行`GROUP BY`, 通过累加结果到一个哈希表,每个分组都有一个入口。不过, 如果该哈希表被估计为太大而不适合`sort_mem`,那么将仍然使用排序技术。 新增多键的哈希连接能力 在以前的版本中,哈希连接只在单键上发生。这个版本允许多键的哈希连接。 使用明确的`JOIN`语法的查询现在更好的最优化了 以前的版本估算使用明确的`JOIN`语法的查询只以该语法暗示的顺序。 7.4允许全面优化这些查询,意味着优化考虑所有可能的连接顺序, 并且选择最有效的顺序。不过,外连接必须仍然遵循声明的顺序。 更快、更强大的正则表达式编码 整个正则表达式模块已经被Henry Spencer用一个新的版本替代,最初是为Tcl写的。 该代码大大的提高了性能,并且支持几种正则表达式。 为简单的SQL函数嵌入函数 简单的SQL函数现在可以通过在主查询中包含他们的SQL内联。 这通过消除每个调用的开销提升了性能。这意味着简单的SQL函数现在的行为就像宏。 全面支持IPv6连接和IPv6地址数据类型 以前的版本只允许IPv4连接,IP数据类型也只支持IPv4地址。 这个版本在这些区域添加了完全的IPv6支持。 主要改进SSL性能和可靠性 几个人非常了解SSL API已经彻底检查了我们的SSL代码以改善SSL键谈判和错误恢复。 使得自由空间映射有效的再利用空的索引页,其他自由空间管理的改善 在以前的版本中,因为删除的行只能被索引值类似于该行以前在该页上的索引的行再次利用, 所以B-tree索引页都保留空白。在7.4中,`VACUUM` 记录空的索引页,并且允许它们被任意未来的索引行重新利用。 SQL标准信息模式 该信息模式提供一个标准且稳定的方式访问关于在一个数据库中定义的模式对象的信息。 游标更接近的符合SQL标准 命令`FETCH`和`MOVE`已经被彻底检查,更加符合SQL标准。 游标可以在事务之外退出 这些游标也叫做可抓住的游标。 新增客户端到服务器的协议 新的协议添加了错误代码,更多的状态信息,更快的启动,更好的支持二进制数据传输, 参数值从SQL命令中分离,预备语句在协议级别中有效,更干净的从`COPY` 失败中恢复。服务器和客户端仍然支持老的协议。 libpq和ECPG 应用现在是完全线程安全的 以前的libpq版本就已经支持了线程, 这个版本通过修复一些在数据库连接启动期间使用的非线程安全的代码提高了线程安全。 `configure`选项`--enable-thread-safety` 必须用于启用这个特性。 新增全文本索引的版本 一个新的全文本索引套件在`contrib/tsearch2`中可用。 新增自动清理工具 `contrib/autovacuum`中新增的自动清理工具见识数据库状态表的 `INSERT`/`UPDATE`/`DELETE` 活动并在需要时自动清理表。 改进了数组处理并嵌入服务器内核 移除了许多数组限制,并且数组表现的更加全面支持数据类型。 ## E.183.2\. 迁移到版本 7.4 想要从以前的版本迁移数据的用户需要使用pg_dump转储/恢复。 观察下面的不兼容性: * 删除了服务器端的自动提交设置,并且在客户端应用和语言中重新实现。 服务器端的自动提交导致许多想要控制他们自己的自动提交行为的语言和应用出现问题, 所以从服务器删除自动提交并适当的添加到单独的客户端API中。 * 错误消息的表达在这个版本中已经大幅度的改变了。花费了巨大的努力使得消息更加一致和面向用户。 如果您的应用程序尝试通过分析错误消息检测不同的错误条件, 强烈建议您使用新的错误代码功能。 * 使用明确的`JOIN`语法的内连接可能表现的不一致, 因为它们现在更好的优化了。 * 一些服务器配置参数已经重命名的更加清晰了,主要是那些与记录相关的参数。 * `FETCH 0`或`MOVE 0`现在什么也不做。 在以前的版本中,`FETCH 0`将抓取所有剩余的行, `MOVE 0`将移动到游标的最后。 * `FETCH`和`MOVE`现在返回实际抓取/移动的行数, 或者如果在游标的开始或结尾返回零。以前的版本将返回传递给命令的行计数, 不是实际抓取或移动的行数。 * `COPY`现在可以处理使用回车键或回车键/换行符行尾序列的文件。 字面的回车键和换行不再被数据值接受;使用`\r`和`\n`替代。 * 当从类型`char(``_n_`)到`varchar(``_n_`) 或`text`转换时,现在会去除结尾的空白。这是大多数人们一直想要实现的。 * 数据类型`float(``_p_`)现在以二进制位数测量`_p_`, 不是十进制位数。新的行为遵从SQL标准。 * 模糊的日期值现在必须匹配`datestyle`设置指定的顺序。 在以前的版本中,一个`10/20/03`的日期声明理解为十月中的一个日期, 即使`datestyle`声明了天在前面。如果对于当前的`datestyle` 设置来说,日期声明是无效的时7.4将抛出一个错误。 * 函数`oidrand`、`oidsrand` 和`userfntest`已经移除了。这些函数不再有用了。 * 字符串字面值声明随时变化的日期/时间值,如`'now'`或 `'today'`在字段缺省表达式中将不再像预期的那样工作; 它们现在缺省是表创建的时间,而不是插入的时间。 应该使用像`now()`、`current_timestamp`或 `current_date`这样的函数。 在以前的版本中,有特殊的代码,所以像`'now'` 这样的代码被解释为`INSERT`时间,而不是表创建的时间, 但是这个变通并不涵盖所有的情况。版本7.4现在要求该缺省使用像 `now()`或`current_timestamp`这样的函数正确的定义。 这将适用于所有的情况。 * 美元符号(`$`)不再允许用于操作员名字。它反而可以成为标识符中的非首位字符。 这样做是为了提高和其他数据库系统的兼容性,和避免参数占位符 (`$``_n_`)和操作符写的很近时的语法问题。 ## E.183.3\. 修改列表 在下面你将发现版本7.4和前面的主要版本之间的详细的变化。 ### E.183.3.1\. 服务器操作变化 * 允许IPv6服务器连接(Nigel Kukard, Johan Jordaan, Bruce, Tom, Kurt Roeckx, Andrew Dunstan) * 修复SSL以干净利落的处理错误 (Nathan Mueller) 在以前的版本中,某些SSL API错误报告处理的不正确。这个版本修复了那些问题。 * SSL协议安全和性能改善 (Sean Chittenden) SSL键重新谈判非常频繁的发生,导致SSL性能低下。另外,改善了最初的键的处理。 * 当检测到死锁时打印锁信息 (Tom) 这允许更容易的调试死锁状况。 * 更新`/tmp`套接字修改时间,定期的避免他们的移除 (Tom) 这应该有助于防止`/tmp`目录清理管理脚本移除服务器套接字文件。 * 为Mac OS X启用PAM (Aaron Hillegass) * 使得B-tree索引完全的WAL安全 (Tom) 在以前的版本中,在某些稀有情况下,服务器崩溃会导致B-tree索引损坏。 这个版本删除了最后的几个稀有情况。 * 允许B-tree索引压缩和空页面重新利用 (Tom) * 在第一个根页面分裂期间修复不一致的索引查找 (Tom) 在以前的版本中,当一个页面索引分裂为两个页面时,另一个数据库会话会在短期内看不到索引项。 这个版本修复了这个稀有的失败情况。 * 改善自由空间映射分配逻辑 (Tom) * 在服务器重启时保留自由空间信息 (Tom) 在以前的版本中,当主进程停止时,自由空间映射是不保存的, 所以新启动的服务器没有自由空间信息。这个版本保存了自由空间映射, 并且当服务器重新启动时重新加载它。 * 添加开始时间到`pg_stat_activity` (Neil) * 新增代码检测损坏的磁盘页;删除`zero_damaged_pages` (Tom) * 新增客户端/服务器协议:更快、没有用户名长度限制、允许从`COPY`中干净的退出 (Tom) * 添加事务状态、表ID、字段ID到客户端/服务器协议 (Tom) * 添加二进制I/O到客户端/服务器协议 (Tom) * 删除自动提交服务器设置;移动到客户端应用 (Tom) * 新的错误消息用词、错误代码和三个层次的错误详情 (Tom, Joe, Peter) ### E.183.3.2\. 性能改进 * 为`GROUP BY`聚集添加散列 (Tom) * 使得嵌套循环连接关于多字段索引更加智能 (Tom) * 允许多键的哈希连接 (Tom) * 提高常量折叠 (Tom) * 添加内联简单的SQL函数的能力 (Tom) * 减少使用复杂函数的查询的内存使用 (Tom) 在以前的版本中,返回存储器配置的函数将直到查询完成之后才释放。 这个版本允许调用完成之后就释放存储器配置函数,减少函数使用的总内存。 * 提高GEQO优化器性能 (Tom) 这个版本修复了几个GEQO优化器管理潜在查询路径的低效率。 * 允许通过哈希表处理`IN`/`NOT IN` (Tom) * 提高`NOT IN (``_subquery_`)性能 (Tom) * 允许大多数`IN`子查询作为连接处理 (Tom) * 模式匹配操作可以使用索引,无视区域设置 (Peter) 非ASCII区域设置无法为`LIKE`比较使用标准的索引。 这个版本添加了为`LIKE`创建特殊索引的方法。 * 允许主进程使用`preload_libraries`预加载库 (Joe) 对于需要很长时间加载的共享库,这个选项是可用的, 这样库可以在主进程中预加载并被所有的数据库会话继承。 * 改善优化器成本计算,尤其是子查询 (Tom) * 避免子查询`ORDER BY`匹配上一级查询时的排序 (Tom) * 推断`WHERE a.x = b.y AND b.y = 42`的意思也为`a.x = 42` (Tom) * 允许在复杂连接上哈希/合并连接 (Tom) * 允许为更多数据类型哈希连接 (Tom) * 允许明确的内连接最优化,禁用`join_collapse_limit` (Tom) * 添加参数`from_collapse_limit`控制子查询到连接的转换 (Tom) * 使用更快更强大的Tcl正则表达式代码 (Henry Spencer, Tom) * 在优化器中使用位映射关系设置 (Tom) * 改善连接启动时间 (Tom) 新的客户端/服务器协议需要较少的网络数据包开始一个数据库会话。 * 提高触发器/约束性能 (Stephan) * 提高`col IN (const, const, const, ...)`的速度 (Tom) * 修复在稀有情况下损坏的哈希索引 (Tom) * 改善哈希索引并发性和速度 (Tom) 以前版本的哈希索引性能欠佳,尤其是高并发性的情况下。 这个版本修复了这个问题,并且开发组对于报告B-tree和哈希索引性能的比较是有兴趣的。 * 在32字节的边界上排列共享的缓冲区,改善拷贝速度 (Manfred Spraul) 当地址是32字节对齐的时,确定的CPU执行数据拷贝更快。 * 重新使用数据类型`numeric`,以获取更好的性能 (Tom) `numeric`过去是基于100存储。新的代码基于10000,大大的改善性能。 ### E.183.3.3\. 服务器配置变化 * 重命名服务器参数`server_min_messages`为`log_min_messages` (Bruce) 这样做了之后大部分控制服务器日志的参数以`log_`开始。 * 重命名`show_*_stats`为`log_*_stats` (Bruce) * 重命名`show_source_port`为`log_source_port` (Bruce) * 重命名`hostname_lookup`为`log_hostname` (Bruce) * 添加`checkpoint_warning`警告过多的检查点 (Bruce) 在以前的版本中,很难判断检查点是否发生的太过频繁。 这个特性当过多的检查点发生时向服务器日志添加一个警告。 * 为本地化新增只读服务器参数 (Tom) * 改变调试服务器日志消息使输出`DEBUG`而不是`LOG` (Bruce) * 阻止服务器日志变量被非超级用户关闭 (Bruce) 这是一个安全特性,所以非超级用户不能禁用管理员启用的日志。 * `log_min_messages`/`client_min_messages` 现在控制`debug_*`输出 (Bruce) 这集中了客户端调试信息,所以所有的调试输出都可以发送到客户端和服务器日志。 * 添加Mac OS X集合点服务器支持 (Chris Campbell) 这允许Mac OS X主机为可用的PostgreSQL服务器查询网络。 * 添加使用`log_min_duration_statement`只打印缓慢的语句的能力 (Christopher) 这是一个经常请求的调试特性,允许管理员在他们的服务器日志中只看到缓慢的查询。 * 允许`pg_hba.conf`在CIDR格式中接受子网掩码 (Andrew Dunstan) 这允许管理员在`pg_hba.conf`中合并主机IP地址和子网掩码字段为一个CIDR字段。 * 新增只读参数`is_superuser` (Tom) * 新增参数`log_error_verbosity`控制错误详情 (Tom) 与新的错误报告特性一起工作,提供额外的错误信息,如提示、文件名和行号。 * `postgres --describe-config`现在转储服务器配置变量 (Aizaz Ahmed, Peter) 这个选项对于需要知道配置变量名和它们的最小、最大、缺省和描述的管理工具来说是有用的。 * 在`pg_settings`中添加新的字段: `context`, `type`, `source`, `min_val`, `max_val` (Joe) * 如果可能,使`shared_buffers`缺省为1000,`max_connections`缺省为100 (Tom) 以前的版本的共享缓冲区缺省为64,所以PostgreSQL 甚至在非常老的系统上也能启动。 这个版本测试平台允许的共享内存的数量并且如果可以的话选择更加合理的缺省值。 当然,仍然鼓励用户评估他们的资源负载,并且相应的设定`shared_buffers`的尺寸。 * 新增`pg_hba.conf`记录类型`hostnossl` 以阻止SSL连接 (Jon Jensen) 在以前的版本中,如果客户端和服务器都支持SSL,那么是没有办法阻止SSL连接的。 这个选项允许阻止SSL连接。 * 删除参数`geqo_random_seed` (Tom) * 添加服务器参数`regex_flavor`,控制正则表达式处理 (Tom) * 使`pg_ctl`更好的处理非标准的端口 (Greg) ### E.183.3.4\. 查询的变化 * 新增SQL标准信息模式 (Peter) * 添加只读事务 (Peter) * 在外键违反信息中输出键名和值 (Dmitry Tkach) * 允许用户在`pg_stat_activity`中查看他们自己的查询 (Kevin Brown) 在以前的版本中,只有超级用户可以使用`pg_stat_activity`查看查询字符串。 现在普通用户也可以查看他们自己的查询字符串了。 * 修复子查询中的聚集以匹配SQL标准 (Tom) SQL标准认为在一个嵌套的子查询中出现的聚集函数,如果它的参数只包含外部查询的变量, 那么它属于外部的查询。以前的PostgreSQL 版本没有正确的处理这点。 * 添加选项阻止查询中引用的表的自动添加 (Nigel J. Andrews) 缺省的,查询中提到的表如果没有在`FROM`子句中则自动添加进去。 这是和历史的POSTGRES行为兼容的,但是违反SQL标准。 这个选项允许选择标准兼容的行为。 * 允许`UPDATE ... SET col = DEFAULT` (Rod) 这允许`UPDATE`设置一个字段为它声明的缺省值。 * 允许在`LIMIT`/`OFFSET`中使用表达式 (Tom) 在以前的版本中,`LIMIT`/`OFFSET`只能使用约束,不能使用表达式。 * 实现了`CREATE TABLE AS EXECUTE` (Neil, Peter) ### E.183.3.5\. 对象操作的改变 * 使`CREATE SEQUENCE`语法更加符合SQL:2003 (Neil) * 添加语句级别的触发器 (Neil) 虽然这允许触发器在语句结束时触发,但是它不允许触发器访问语句修改的所有行。 这个能力是为未来的版本计划的。 * 为域添加检查约束 (Rod) 通过允许域使用检查约束,大大的增加了域的有用性。 * 新增`ALTER DOMAIN` (Rod) 这允许操作现有的域。 * 修复几个零字段表错误 (Tom) PostgreSQL支持零字段表。这修复了各种使用这样的表时发生的错误。 * 让`ALTER TABLE ... ADD PRIMARY KEY`添加非空约束 (Rod) 在以前的版本中,`ALTER TABLE ... ADD PRIMARY KEY` 将添加一个唯一索引,但是不添加非空约束。这在这个版本中修复了。 * 添加了`ALTER TABLE ... WITHOUT OIDS` (Rod) 这允许控制无论新行还是更新的行都将有一个OID字段。这对于节省存储空间非常有用。 * 添加`ALTER SEQUENCE`修改最小、最大、增量、缓存、循环值 (Rod) * 添加了`ALTER TABLE ... CLUSTER ON` (Alvaro Herrera) 这个命令被`pg_dump`使用,为每个以前集群的表记录集群字段。 这个信息被数据库范围的集群使用以集群所有以前集群的表。 * 为域增加自动类型转换 (Rod, Tom) * 允许美元符号出现在标识符中,除了作为第一个字符 (Tom) * 不允许美元符号出现在操作符名中,所以`x=$1`工作 (Tom) * 允许使用`LIKE` `_subtable_`拷贝表模式, 这也是SQL:2003的特性`INCLUDING DEFAULTS` (Rod) * 添加`WITH GRANT OPTION`子句到`GRANT` (Peter) 这启用了`GRANT`,给予其他用户在对象上授予权限的能力。 ### E.183.3.6\. 实用命令的改变 * 为临时表添加`ON COMMIT`子句到`CREATE TABLE` (Gavin) 这添加了在事务提交时表被删除或删除所有行的能力。 * 允许游标使用`WITH HOLD`在事务之外 (Neil) 在以前的版本中,游标在创建它们的事务的结束删除。 现在游标可以使用`WITH HOLD`选项创建, 这允许它们在创建它们的事务提交之后仍然可以被访问。 * `FETCH 0`和`MOVE 0` 现在什么也不做 (Bruce) 在以前的版本中,`FETCH 0`抓取所有现有的行, `MOVE 0`移动到游标的最后。 * 使`FETCH`和`MOVE` 返回抓取/移动的行数,或者如果在游标的开始/结束则为零,按照SQL标准 (Bruce) 在以前的版本中,`FETCH`和`MOVE` 返回的行计数不能精确的反映处理的行数。 * 正确的处理带有游标的`SCROLL`,或者报告一个错误 (Neil) 允许到某种查询的随机访问(前向和后向滚动)不能不带有一些额外的工作完成。 如果`SCROLL`在游标创建时指定,这个额外的工作将被执行。 此外,如果游标带有`NO SCROLL`创建,那么不允许随机访问。 * 为`FETCH`和`MOVE`实现了SQL兼容的选项 `FIRST`、`LAST`、`ABSOLUTE` `_n_`、 `RELATIVE` `_n_` (Tom) * 允许在`DECLARE CURSOR`上`EXPLAIN` (Tom) * 缺省允许`CLUSTER`使用标记为先于集群的索引 (Alvaro Herrera) * 允许`CLUSTER`集群所有的表 (Alvaro Herrera) 这允许一个数据库中所有以前集群的表用一个命令就能重新集群。 * 阻止在局部索引上`CLUSTER` (Tom) * 在`COPY`文件中允许DOS和Mac行尾结束符 (Bruce) * 不允许文字的回车作为一个数据值,仍然允许反斜杠回车和`\r` (Bruce) * `COPY`改变 (二进制, `\.`) (Tom) * 干净的从`COPY`失败中恢复 (Tom) * 阻止`COPY`中可能的内存泄露 (Tom) * 使得`TRUNCATE`事务安全 (Rod) `TRUNCATE`现在可以在一个事务内部使用了。如果该事务退出, `TRUNCATE`所做的改变自动回滚。 * 允许像`FETCH`和`EXPLAIN`这样的实用命令预备/捆绑 (Tom) * 添加了`EXPLAIN EXECUTE` (Neil) * 通过减少WAL流量提高索引上的`VACUUM`性能 (Tom) * 功能性索引已经泛化为表达式上的索引 (Tom) 在以前的版本中,功能性索引只支持一个简单的应用于一个或更多字段名的功能。 这个版本允许任意类型的标量表达式。 * 让`SHOW TRANSACTION ISOLATION`匹配输入到 `SET TRANSACTION ISOLATION` (Tom) * 让`COMMENT ON DATABASE`在非局部的数据库上生成一个警告,而不是一个错误 (Rod) 数据库注释存储于数据库本地表中,所以在数据库上的注释必须存储于每个数据库中。 * 提高`LISTEN`/`NOTIFY`的可靠性 (Tom) * 允许`REINDEX`可靠的重建非共享的系统目录索引 (Tom) 这允许系统表不用单独会话的要求就能重建索引,而这在以前的版本中是必须的。 现在需要单独会话重建索引的仅有的表是全局系统表`pg_database`、 `pg_shadow`和`pg_group`。 ### E.183.3.7\. 数据类型和函数的变化 * 新增服务器参数`extra_float_digits`, 控制浮点数的精度显示 (Pedro Ferreira, Tom) 控制引起回归测试问题的输出精度。 * 允许`+1300`作为一个数字时区说明符,FJST (Tom) * 删除很少使用的功能`oidrand`、`oidsrand`和`userfntest` (Neil) * 添加`md5()`函数到主服务器,已经存在于`contrib/pgcrypto`中 (Joe) 经常请求MD5函数。对于更复杂的加密要求,使用`contrib/pgcrypto`。 * 增加`timestamp`的数据范围 (John Cochran) * 更改`EXTRACT(EPOCH FROM timestamp)`, 这样`timestamp without time zone`假设为本地时间,而不是GMT (Tom) * 在操作系统不阻止除以零的情况下阻止被零除 (Tom) * 改变`numeric`数据类型内部基于10000 (Tom) * 新增`hostmask()`函数 (Greg Wickham) * 修复`to_char()`和`to_timestamp()` (Karel) * 允许函数接受任意参数数据类型并返回任意数据类型,使用`anyelement` 和`anyarray` (Joe) 这允许函数的创建可以与任意数据类型一起工作。 * 数组现在可以指定为`ARRAY[1,2,3]`、`ARRAY[['a','b'],['c','d']]` 或`ARRAY[ARRAY[ARRAY[2]]]` (Joe) * 允许适当的比较数组,包括`ORDER BY`和`DISTINCT` 支持 (Joe) * 允许在数组字段上索引 (Joe) * 允许用`||`串联数组 (Joe) * 允许`WHERE`限制`_expr_` `_op_` ANY/SOME/ALL (`_array_expr_`) (Joe) 这允许数组表现的像值的列表,对于像 `SELECT * FROM tab WHERE col IN (array_val)`这样的目的。 * 新增数组函数`array_append`, `array_cat`, `array_lower`, `array_prepend`, `array_to_string`, `array_upper`, `string_to_array` (Joe) * 允许用户定义的聚集使用多态函数 (Joe) * 允许分配给空数组 (Joe) * 允许60在`time`、`timestamp`和`interval` 输入值的秒字段 (Tom) 闰秒需要60秒。 * 允许`cidr`数据类型被转换为`text` (Tom) * 不允许无效的时区名出现在SET TIMEZONE中 * 当`char`转换为`varchar`或`text`时,去掉尾随的空白 (Tom) * 使得`float(``_p_`)以二进制数字测量精度`_p_`, 而不是十进制数字 (Tom) * 添加IPv6支持到`inet`和`cidr`数据类型 (Michael Graff) * 添加`family()`函数报告地址是IPv4还是IPv6 (Michael Graff) * 让`SHOW datestyle`产生的输出类似于`SET datestyle` 使用的 (Tom) * 让`EXTRACT(TIMEZONE)`和`SET/SHOW TIME ZONE` 遵从SQL时区偏移量符号的惯例,如正数为UTC的东边 (Tom) * 修复`date_trunc('quarter', ...)` (Böjthe Zoltán) 以前的版本为这个函数调用返回不正确的值。 * 让`initcap()`与Oracle更加兼容 (Mike Nolan) `initcap()`现在大写任何出现在非字母数字字符后面的字母, 不只是在空白后面的字母。 * 日期值只允许`datestyle`字段顺序,不以ISO-8601格式 (Greg) * 添加新的`datestyle`值`MDY`、`DMY` 和`YMD`来设置输入字段顺序; 遵从`US`和`European`的向后兼容性 (Tom) * 像`'now'`和`'today'` 这样的字符串字面值不再作为一个字段的缺省。 使用`now()`、`current_timestamp` 这样的函数代替。(改变需要预备语句) (Tom) * 在`min()`/`max()`中将NaN看做大于任意其他值 (Tom) 对于大多数目的,NaN早已排序在普通数值的后面,但是 `min()`和`max()`没有获得这个权利。 * 阻止间隔抑制`:00`秒的显示 * 新增函数`pg_get_triggerdef(prettyprint)` 和`pg_conversion_is_visible()` (Christopher) * 允许指定时间为`040506`或`0405` (Tom) * 输入日期顺序现在必须为`YYYY-MM-DD`(年为4位数)或匹配`datestyle` * 让`pg_get_constraintdef`支持唯一、主键和检查约束 (Christopher) ### E.183.3.8\. 服务器端语言的变化 * 当`RETURN NEXT`用在零行字段变量上时阻止PL/pgSQL崩溃 (Tom) * 让PL/Python的`spi_execute`接口正确的处理空值 (Andrew Bosma) * 允许PL/pgSQL不用`%ROWTYPE`声明复合类型的变量 (Tom) * 修复PL/Python的`_quote()`函数,以处理大的整数 * 使PL/Python语言不可信,现在称为`plpythonu` (Kevin Jacobs, Tom) Python语言不再支持受限制的执行环境,所以删除了受信任的PL/Python版本。 如果这个情况改变了,将阅读非超级用户可以使用的PL/Python的一个版本。 * 允许多态的PL/Python函数 (Joe, Tom) * 允许多态的SQL函数 (Joe) * 用对多态性的全面支持改进PL/pgSQL中编译的函数缓存机制 (Joe) * 在PL/pgSQL中添加新的参数`$0`,表示该函数的实际返回类型 (Joe) * 允许PL/Tcl和PL/Python在多重表上使用相同的触发器 (Tom) * 修复PL/Tcl的`spi_prepare`以在参数类型列表中接受完全限定的类型名 (Jan) ### E.183.3.9\. psql的变化 * 添加`\pset pager always`以总是使用pager (Greg) 强制使用pager,即使行数少于屏幕高度也是一样。这个对于有几个屏幕的行有帮助。 * 改善tab补齐 (Rod, Ross Reedstrom, Ian Barwick) * 重新排序`\?`帮助分组 (Harald Armin Massa, Bruce) * 添加反斜杠命令列出模式、计算和转换 (Christopher) * `\encoding`现在根据服务器参数`client_encoding`变化 (Tom) 在以前的版本中,`\encoding`不知道使用 `SET client_encoding`所做的编码改变。 * 将编辑器缓冲区保存到readline历史 (Ross) 当使用`\e`编辑一个查询时,结果被保存到readline历史,以使用向上箭头键检索。 * 改善`\d`的显示 (Christopher) * 提高HTML模式,使其更加符合标准 (Greg) * 新增`\set AUTOCOMMIT off`能力 (Tom) 这取代了删除的服务器参数 `autocommit`。 * 新增`\set VERBOSITY`控制错误详情 (Tom) 这个控制新的错误报告细节。 * 新增提示转义序列`%x`,显示事务状态 (Tom) * psql的长选项现在在所有平台上可用 ### E.183.3.10\. pg_dump的变化 * 多重pg_dump修复,包括tar格式和大对象 * 允许pg_dump转储指定的模式 (Neil) * 让pg_dump保存字段存储特性 (Christopher) 这保存了`ALTER TABLE ... SET STORAGE`信息。 * 使pg_dump保存`CLUSTER`特性 (Christopher) * 让pg_dumpall使用`GRANT`/`REVOKE`转储数据库级别的权限 (Tom) * 允许pg_dumpall支持pg_dump的选项`-a`、`-s`、`-x` (Tom) * 阻止pg_dump小写在命令行中指定的标识符 (Tom) * pg_dump选项`--use-set-session-authorization` 和`--no-reconnect`现在什么也不做, 所有转储使用`SET SESSION AUTHORIZATION` pg_dump不再重新连接到切换的用户,但是反而总是使用`SET SESSION AUTHORIZATION`。 这将减少在恢复时的口令提示。 * pg_dump的长选项现在在所有平台上可用 PostgreSQL现在包括它自己的长选项处理例程。 ### E.183.3.11\. libpq的变化 * 添加函数`PQfreemem`在Windows上释放内存, 建议`NOTIFY` (Bruce) Windows要求在库中分配的内存通过在相同库中的一个函数释放,因此 `free()`并不释放libpq分配的内存。 `PQfreemem`是释放libpq内存的适当的方式, 尤其是在Windows上,也推荐在其他平台上使用。 * 文档服务能力,并且添加了样本文件 (Bruce) 这允许客户查看客户端机器上中心文件的连接信息。 * 让`PQsetdbLogin`有和`PQconnectdb` 相同的缺省 (Tom) * 当结果集太大时,允许libpq彻底的失败 (Tom) * 提高函数`PQunescapeBytea`的性能 (Ben Lamb) * 允许线程安全的libpq带有`configure`选项 `--enable-thread-safety` (Lee Kindness, Philip Yarra) * 允许函数`pqInternalNotice`接受一个格式字符串和参数, 而不只是一个预定义格式的信息 (Tom, Sean Chittenden) * 用`sslmode`值`disable`、`allow`、 `prefer`和`require` 控制SSL协商 (Jon Jensen) * 允许新的错误代码和文本级别 (Tom) * 允许访问基础表和查询结果的字段 (Tom) 这对于想要知道和指定结果集相关的基础表和字段的查询生成器应用是有用的。 * 允许访问当前事务状态 (Tom) * 添加传递二进制数据直接到服务器的能力 (Tom) * 添加函数`PQexecPrepared`和`PQsendQueryPrepared`, 执行以前预备语句的绑定/执行 (Tom) ### E.183.3.12\. JDBC的变化 * 允许在可更新的结果集上`setNull` * 允许在预备语句上`executeBatch` (Barry) * 支持SSL连接 (Barry) * 在结果集中处理模式名 (Paul Sorenson) * 添加refcursor支持 (Nic Ferrier) ### E.183.3.13\. 其他接口的变化 * 在libpgtcl关闭期间阻止可能的内存泄露或内核转储 (Tom) * 添加到ECPG的Informix兼容性 (Michael) 这允许ECPG处理用某些Informix扩展写的嵌入的C程序。 * 为Informix添加定长的类型`decimal`到ECPG (Michael) * 允许线程安全的嵌入式SQL程序带有`configure`选项 `--enable-thread-safety` (Lee Kindness, Bruce) 这允许同一时间多线程访问数据库。 * 移动Python客户端PyGreSQL到[http://www.pygresql.org](http://www.pygresql.org) (Marc) ### E.183.3.14\. 源代码的变化 * 阻止对单独平台几何回归结果文件的需要 (Tom) * 改进PPC的锁定原语 (Reinhard Max) * 新增函数`palloc0`分配和清理内存 (Bruce) * 为s390x CPU (64位)修复锁定代码 (Tom) * 允许OpenBSD使用局部鉴别凭证 (William Ahern) * 使查询规划树对于执行者是只读的 (Tom) * 添加Darwin启动脚本 (David Wheeler) * 允许libpq用Borland C++编译器编译 (Lester Godwin, Karl Waclawek) * 如果需要,使用我们自己的`getopt_long()`版本 (Peter) * 转换管理脚本为C (Peter) * 如果从CVS编译,Bison >= 1.85现在需要建立PostgreSQL语法 * 合并文档到一本书中 (Peter) * 添加Windows兼容性函数 (Bruce) * 允许客户端接口在MinGW下编译 (Bruce) * 为错误报告新增`ereport()`函数 (Tom) * 在Linux上支持Intel编译器 (Peter) * 改善Linux启动脚本 (Slawomir Sudnik, Darko Prenosil) * 添加对AMD Opteron和Itanium的支持 (Jeffrey W. Baker, Bruce) * 从`configure`中删除`--enable-recode`选项 不再需要这个了,我们有了`CREATE CONVERSION`。 * 如果没有找到自旋锁代码,那么生成一个编译错误 (Bruce) 没有自旋锁代码的平台现在将不能编译,而不是默默的使用信号灯。 这个失败可以使用一个新的`configure`选项禁用。 ### E.183.3.15\. 贡献包的变化 * 改变dbmirror许可为BSD * 改善earthdistance (Bruno Wolff III) * 提高pgcrypto的可移植性 (Marko Kreen) * 阻止xml中的崩溃 (John Gray, Michael Richards) * 更新oracle * 更新mysql * 更新cube (Bruno Wolff III) * 更新earthdistance以使用cube (Bruno Wolff III) * 更新btree_gist (Oleg) * 新增tsearch2全文本搜索模块 (Oleg, Teodor) * 添加基于散列的交叉表函数到tablefuncs (Joe) * 添加连续的字段以排序tablefuncs中的`connectby()`兄弟姐妹 (Nabil Sayegh,Joe) * 添加命名的持久连接到dblink (Shridhar Daithanka) * 新的pg_autovacuum允许自动`VACUUM` (Matthew T. O'Connor) * 让pgbench遵守环境变量`PGHOST`、`PGPORT`、`PGUSER` (Tatsuo) * 改进intarray (Teodor Sigaev) * 改进pgstattuple (Rod) * 修复fuzzystrmatch中`metaphone()`的错误 * 改进adddepend (Rod) * 更新spi/timetravel (Böjthe Zoltán) * 修复dbase `-s`选项并改进非ASCII的处理 (Thomas Behr, Márcio Smiderle) * 删除数组模块,因为现在默认情况下包括数组特性 (Joe)