企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# E.101\. 版本 8.2 > **发布日期:** 2006-12-05 ## E.101.1\. 概述 这个版本添加了许多用户要求的功能和性能改善,包括: * 查询语言增强包括`INSERT/UPDATE/DELETE RETURNING`, 多行`VALUES`列表和`UPDATE`/`DELETE` 中可选的目标表别名。 * 不带有并发锁的索引创建`INSERT`/`UPDATE`/`DELETE`操作 * 许多查询最优化改善,包括对重新排序外连接的支持 * 提高降低内存使用的排序性能 * 带有更好的并发性的更多有效的锁定 * 更有效的清理 * 简化热备服务器的管理 * 为表和索引新增`FILLFACTOR`支持 * 监视、记录和性能调优的添加 * 对创建和删除对象的更多控制 * 表继承管理可以为已经存在的表定义或从已经存在的表中删除 * `COPY TO`可以拷贝任意`SELECT`语句的输出 * 数组的改进,包括空数组 * 聚集函数的改进,包括多重输入聚集和SQL:2003统计函数 * 许多`contrib/`的改进 ## E.101.2\. 迁移到版本 8.2 想要从任何以前的版本中迁移数据的用户需要使用pg_dump转储/恢复。 观察下列的不兼容性: * 缺省设置[`escape_string_warning`](#calibre_link-1523) 为`on` (Bruce) 如果反斜杠逃逸在[非逃逸(非`E''`)字符串](#calibre_link-969) 中使用,这会发出一个警告。 * 修改[行构造函数语法](#calibre_link-1524) (`ROW(...)`), 这样列表元素`foo.*`将被扩展到一个他们的成员字段的列表, 而不是和以前一样创建一个嵌套的行类型字段 (Tom) 新的行为实际上更有用,因为它允许,例如,触发器用 `IF row(new.*) IS DISTINCT FROM row(old.*)`检查数据的改变。 通过省略`.*`,仍然可以使用老的行为。 * 让[行比较](#calibre_link-1525)遵循SQL 标准语义,并允许它们在索引扫描中使用 (Tom) 以前,row = 和 <>比较遵循标准,但是< <= > >=不遵循标准。 行比较现在可以用作多字段索引的索引约束匹配行值。 * 让[row `IS [NOT] NULL`](#calibre_link-1516) 测试遵循SQL标准语义 (Tom) 前者的行为在`IS NULL`的简单情况下符合标准,但是如果任意行字段是非空的, `IS NOT NULL`将返回真,而标准认为只有所有字段都是非空的时才应该返回真。 * 让[`SET CONSTRAINT`](#calibre_link-85) 只影响一个约束 (Kris Jurka) 在以前的版本中,`SET CONSTRAINT`用一个匹配的名字修改所有的约束。 在这个版本中,模式搜索路径只用于修改第一个匹配的约束。 也支持模式声明。这更加符合SQL标准。 * 因为安全原因,为表删除`RULE`权限 (Tom) 这个版本,只有表的所有者可以为该表创建或修改规则。为了向后兼容, 仍然接受`GRANT`/`REVOKE RULE`,但是它什么也不做。 * 数组比较的改进 (Tom) 现在也比较数组的维度。 * 修改[数组连接](#calibre_link-1526),以匹配记录的行为 (Tom) 这改变了串联会修改数组下界的以前的行为。 * 让postmaster和[postgres](#calibre_link-1033) 的命令行选项相同 (Peter) 这允许主进程不使用`-o`就能传递参数到每个后端。请注意, 某些选项现在只能用作长格式的选项,因为与单字母的选项有冲突。 * 反对使用postmaster符号连接 (Peter) postmaster和postgres命令现在动作相同, 行为由命令行选项决定。为了兼容性,保留了postmaster符号连接, 但是实际上不需要了。 * 修改[`log_duration`](#calibre_link-1527), 使其在查询没有输出的情况下也输出 (Tom) 在以前的版本中,`log_duration`只在查询出现在日志的前面时才输出。 * 让[`to_char(time)`](#calibre_link-800) 和[`to_char(interval)`](#calibre_link-800) 对待`HH`和`HH12`为12小时间隔 大多数应用应该使用`HH24`,除非它们想要12小时显示。 * 在从[`INET`](#calibre_link-1528)到 [`CIDR`](#calibre_link-1528) 的转换中有零个未标记的位 (Tom) 这确保了转换的值对于`CIDR`实际有效。 * 删除`australian_timezones`配置变量 (Joachim Wieland) 为了配置时区缩写,这个变量被一个更通用的设备取代。 * 为嵌套的循环索引扫描改善开销估计 (Tom) 这可以消除设置不切实际的小的[`random_page_cost`](#calibre_link-1177) 值的需要。如果你已经使用了一个非常小的`random_page_cost`,请重新检查你的测试用例。 * 改变`pg_dump` `-n`和`-t`选项的行为。 (Greg Sabino Mullane) 请查看`pg_dump`手册页获取细节。 * 修改[libpq](#calibre_link-496) `PQdsplen()` 以返回一个有用的值 (Martijn van Oosterhout) * 声明[libpq](#calibre_link-496) `PQgetssl()` 返回`void *`,而不是`SSL *` (Martijn van Oosterhout) 这允许应用不包括OpenSSL头使用函数。 * 为了版本兼容性检查,C语言可加载模块现在必须包括一个 [`PG_MODULE_MAGIC`](#calibre_link-921) 宏调用 (Martijn van Oosterhout) * 为了安全起见,PL/PerlU函数使用的模块不再可用于PL/Perl函数 (Andrew) > **Note:** 这也意味着数据在PL/Perl函数和PL/PerlU函数之间不再能够共享。 某些Perl安装没有用正确的允许多个解释器存在于一个进程中的标识编译。 在这种情况下,PL/Perl和PL/PerlU不能同时用于一个后端中。 解决办法是获得一个支持多个解释器的Perl安装。 * 在`contrib/xml2/`中,重命名`xml_valid()` 为`xml_is_well_formed()` (Tom) 为了向后兼容,将保留`xml_valid()`,但是它的行为将在未来的版本中改变为模式检查。 * 删除`contrib/ora2pg/`,现在在[http://www.samse.fr/GPL/ora2pg](http://www.samse.fr/GPL/ora2pg)中 * 删除已经迁移到PgFoundry的贡献模块:`adddepend`, `dbase`, `dbmirror`, `fulltextindex`, `mac`, `userlock` * 删除废弃的贡献模块:`mSQL-interface`, `tips` * 删除QNX和BEOS端口 (Bruce) 这些端口不再有活跃的维护者。 ## E.101.3\. 修改列表 下面你将看到PostgreSQL 8.2和以前的主版本之间详细的变化。 ### E.101.3.1\. 性能提升 * 允许规划器在某些情况下重新排序[外连接](#calibre_link-1050) (Tom) 在以前的版本中,外连接总是以在查询中写入的顺序计算。这个修改允许查询优化器考虑重新排序外连接, 在它确定改变连接顺序而不改变查询的意思的情况下。这对于包含多个外连接或混合内部和外部连接的查询来说, 会产生一个可观的性能差异。 * 提高[`IN` (表达式列表)](#calibre_link-1529) 子句的效率 (Tom) * 提高排序速度和减少内存使用 (Simon, Tom) * 提高子事务性能 (Alvaro, Itagaki Takahiro, Tom) * 添加`FILLFACTOR`到[表](#calibre_link-7)和 [索引](#calibre_link-83)创建(ITAGAKI Takahiro) 这在每个表或索引页中留有额外的自由空间,允许随着数据的增长提高性能。 这对于维护集群来说特别有价值。 * 为[`shared_buffers`](#calibre_link-1370) 和`max_fsm_pages`增加默认值 (Andrew) * 通过打断锁管理器表为部分,提高锁的性能 (Tom) 这允许锁定粒度更细,减少争用。 * 减少序列扫描的锁定需求 (Qingqing Zhou) * 减少数据库创建和销毁的锁定需求 (Tom) * 为[`LIKE`](#calibre_link-1530), [`ILIKE`](#calibre_link-1530)和 [正则表达式](#calibre_link-1066)操作改善优化器的选择性估计。 * 改善连接的规划,以[继承的表](#calibre_link-1041)和 [`UNION ALL`](#calibre_link-486)视图 (Tom) * 允许[约束排除](#calibre_link-1531)应用于 [继承的](#calibre_link-1041)`UPDATE`和 `DELETE`查询 (Tom) `SELECT`早已遵循约束排除。 * 改善常量`WHERE`子句的规划,比如一个只依赖于从一个外部查询级别继承的变量的条件 (Tom) * 协议级别未命名的预备语句是为每个`BIND`值组重新规划的 (Tom) 因为准确的参数值可以在计划中使用,所以提高了性能。 * 加速清理B-Tree索引 (Heikki Linnakangas, Tom) * 避免在[`VACUUM`](#calibre_link-748) 期间额外的扫描没有索引的表 (Greg Stark) * 提高多字段[GiST](#calibre_link-1003)索引 (Oleg, Teodor) * 在B-Tree页分裂之前删除死的索引条目 (Junji Teramoto) ### E.101.3.2\. 服务器的变化 * 允许强制切换到一个新的事务日志文件 (Simon, Tom) 这对于保持热备份从服务器与主服务器同步是有价值的。事务日志文件切换现在在 [`pg_stop_backup()`](#calibre_link-1334) 期间也自动发生。这确保了恢复所需要的所有事务日志文件可以立即归档。 * 添加WAL信息函数 (Simon) 为从[`pg_stop_backup()`](#calibre_link-1334) 和相关函数显示的十六进制WAL位置中询问当前事务日志插入点和决定 WAL文件名添加函数。 * 改善WAL重放期间从一个崩溃中恢复 (Simon) 服务器现在在WAL恢复期间定期的检查点,所以如果有一个崩溃, 未来的WAL恢复被缩短。这样如果崩溃了, 就消除了对热备份服务器重放自基础备份以来的整个日志的需要。 * 改善长期的WAL重放的可靠性 (Heikki, Simon, Tom) 以前,由于XID包围,向前推进超过20亿事务的尝试将不会工作。 这意味着热备服务器必须定期从干净的基础备份中重载。 * 添加[`archive_timeout`](#calibre_link-468), 强制事务日志文件在给定的时间间隔切换 (Simon) 这为热备份服务器执行最大的复制延迟。 * 添加本地[LDAP](#calibre_link-1052)认证 (Magnus Hagander) 这对于不支持PAM的平台,比如Windows,尤其有用。 * 添加[`GRANT CONNECT ON DATABASE`](#calibre_link-1532) (Gevik Babakhani) 这给出了数据库访问的SQL级别控制。它作为一个额外的过滤器工作,紧接着现有的 [`pg_hba.conf`](#calibre_link-656)控制。 * 添加对[SSL证书撤销列表](#calibre_link-657) (CRL) 文件的支持 (Libor Hohoš) 服务器和libpq现在都能识别CRL文件。 * [GiST](#calibre_link-1003)索引现在是可集群的 (Teodor) * 删除例程自动清理服务器日志条目 (Bruce) [`pg_stat_activity`](#calibre_link-1440) 现在显示自动清理活动。 * 在单独的表而不是整个数据库中跟踪最大的XID寿命 (Alvaro) 这通过避免不必要的VACUUM,减少了阻止事务ID环绕中包括的开销。 * 添加最后的清理和分析时间戳字段到状态收集器 (Larry Rosenman) 这些值现在出现在 [`pg_stat_*_tables`](#calibre_link-1440)系统视图中。 * 提高统计监测的性能,尤其是`stats_command_string` (Tom, Bruce) 这个版本缺省启用`stats_command_string`,现在它的开销是最小的。 这意味着[`pg_stat_activity`](#calibre_link-1440) 现在缺省将显示所有活动的查询。 * 添加一个`waiting`字段到 [`pg_stat_activity`](#calibre_link-1440) (Tom) 这允许`pg_stat_activity`显示所有包括在ps显示中的信息。 * 添加配置参数[`update_process_title`](#calibre_link-1533), 控制ps的显示是否为每个命令都更新了 (Bruce) 在更新ps显示昂贵的平台上,有必要把这个关掉,完全依赖于 `pg_stat_activity`显示状态信息。 * 允许在配置设置中指定单位 (Peter) 例如,你现在可以设置[`shared_buffers`](#calibre_link-1370) 为`32MB`,而不是在心里转换大小。 * 在`postgresql.conf`中添加对[包含指令](#calibre_link-1149) 的支持 (Joachim Wieland) * 改善协议级别预备/绑定/执行消息的记录 (Bruce, Tom) 这样的日志现在显示语句名字、绑定参数值和被执行查询的文本。另外, 当通过`log_min_error_statement`启用时,查询文本正确的包含在记录的错误消息中。 * 阻止[`max_stack_depth`](#calibre_link-1534) 被设置为不安全的值 在我们可以决定实际内核堆栈深度限制的平台上(大多数是),确保`max_stack_depth` 的初始缺省值是安全的,并拒绝尝试设置它为不安全的大值。 * 在更多情况下的查询中启用突出显示错误位置 (Tom) 服务器现在能够为一些语义错误报告一个具体的错误位置(比如未识别的字段名), 而不是和以前一样只报告基本的语法错误。 * 修复`VACUUM`中"未能重新找到父键"错误 (Tom) * 在服务器重新启动期间清理`pg_internal.init`缓存文件 (Simon) 这避免了PITR恢复之后缓存文件可能包含陈旧数据的风险。 * 修复通过`VACUUM`截断十亿字节范围的大关系时的竞态条件 (Tom) * 修复行级别锁上导致不需要的死锁错误的bug (Tom) * 修复影响几十亿字节哈希索引的错误 (Tom) * 每个后端进程现在是它自己的进程组领导 (Tom) 这允许查询取消退出从一个后端或归档/恢复进程中调用的子进程。 ### E.101.3.3\. 查询的变化 * 添加[`INSERT`](#calibre_link-1382)/[`UPDATE`](#calibre_link-749)/[`DELETE`](#calibre_link-490) `RETURNING` (Jonah Harris, Tom) 这允许这些命令返回值,比如为一个新行计算序列键。在`UPDATE`的情况下, 返回来自行的更新版本的值。 * 添加对多行[`VALUES`](#calibre_link-616)子句的支持, 按照SQL标准 (Joe, Tom) 这允许`INSERT`插入多行常量,或查询使用常量生成结果集。例如, `INSERT ... VALUES (...), (...), ....`, and `SELECT * FROM (VALUES (...), (...), ....) AS alias(f1, ...)`。 * 允许[`UPDATE`](#calibre_link-749) 和[`DELETE`](#calibre_link-490) 为目标表使用一个别名 (Atsushi Ogawa) SQL标准不允许在它们的命令中使用别名,但是许多数据库系统为了标记方便,无论如何都允许一个。 * 允许[`UPDATE`](#calibre_link-749) 在一个值的列表中设置多个字段值 (Susanne Ebrecht) 这基本上是一个按对分配字段和值的速记。语法是`UPDATE tab SET (``_column_`, ...) = (`_val_`, ...)。 * 使行比较按照标准工作 (Tom) 格式<, <=, >, >=现在按字母顺序比较行,也就是,比较第一个元素, 如果相等则比较第二个元素,以此类推。以前它们在所有的元素上扩展成一个AND条件, 这既不是标准也不是非常有用。 * 添加[`CASCADE`](#calibre_link-89)选项到`TRUNCATE` (Joachim Wieland) 这导致`TRUNCATE`自动包括通过外键引用指定的表的所有表。 虽然方便,但是这是一个危险的工具—小心的使用它! * 在同一个[`SELECT`](#calibre_link-1382)命令中支持 `FOR UPDATE`和`FOR SHARE` (Tom) * 添加[`IS NOT DISTINCT FROM`](#calibre_link-1529) (Pavel Stehule) 这个操作符类似于等于(`=`),但是当左侧和右侧的操作数都是`NULL`时, 评估为真,当只有一侧为`NULL`时评估为假,而不是在这些情况下生成`NULL`。 * 改善[`UNION`](#calibre_link-486)/`INTERSECT`/`EXCEPT` 使用的长度输出 (Tom) 当所有对应的字段有相同的定义长度时,该长度用于结果,而不是一个通用的长度。 * 允许[`ILIKE`](#calibre_link-1530)为多字节编码工作 (Tom) 内部的,`ILIKE`现在调用`lower()`然后使用`LIKE`。 地区设定的正则表达式模式在这些编码中仍然不工作。 * 使[`standard_conforming_strings`](#calibre_link-1031) 能变成`on` (Kevin Grittner) 这允许禁用字符串中的反斜杠逃逸,让PostgreSQL更加标准兼容。 为了向后兼容,缺省是`off`,但是未来的版本将改成缺省为`on`。 * 不要在子查询目标列表中平面化包含`volatile`函数的子查询 (Jaime Casanova) 这阻止了由于`volatile`函数(比如`random()`或`nextval()`) 的多次评估引起的意外行为。它可能导致在不需要标记为`volatile` 的函数面前性能退化。 * 添加系统视图[`pg_prepared_statements`](#calibre_link-968) 和[`pg_cursors`](#calibre_link-73), 显示预备语句和打开的游标 (Joachim Wieland, Neil) 这在池连接设置中非常有用。 * 在[`EXPLAIN`](#calibre_link-575)和 [`EXECUTE`](#calibre_link-107) 中支持入口参数 (Tom) 这允许,例如,JDBC `?`参数在这些命令中工作。 * 如果SQL级别的[`PREPARE`](#calibre_link-625) 参数没有指定,那么从查询的内容中推断它们的类型 (Neil) 协议层`PREPARE`早已这样做了。 * 允许`LIMIT`和`OFFSET`超过二十亿 (Dhanaraj M) ### E.101.3.4\. 对象操作的变化 * 添加`TABLESPACE`子句到 [`CREATE TABLE AS`](#calibre_link-76) (Neil) 这允许为新表指定表空间。 * 添加`ON COMMIT`子句到 [`CREATE TABLE AS`](#calibre_link-76) (Neil) 这允许临时表在事务提交时被截断或删除。该表缺省的行为是保持到会话结束。 * 添加`INCLUDING CONSTRAINTS`到 [`CREATE TABLE LIKE`](#calibre_link-7) (Greg Stark) 这允许容易的拷贝`CHECK`约束到一个新表。 * 允许创建占位符(壳)[类型](#calibre_link-100) (Martijn van Oosterhout) 一个壳类型声明创建一个类型名,没有声明该类型的任何细节。 这使得壳类型是有用的,因为它允许更干净的声明类型的输入/输出函数, 它们在该类型被定义为"真的"之前必须存在。语法是 `CREATE TYPE` `_typename_`。 * [聚集函数](#calibre_link-537) 现在支持多个输入参数 (Sergey Koposov, Tom) * 添加新的聚集创建[语法](#calibre_link-537) (Tom) 新的语法是`CREATE AGGREGATE` `_aggname_` (`_input_type_`) (`_parameter_list_`)。 更自然的支持新的多参数聚集功能。仍然支持以前的语法。 * 添加[`ALTER ROLE PASSWORD NULL`](#calibre_link-17), 删除以前设置的角色密码 (Peter) * 为许多对象类型添加`DROP`对象`IF EXISTS` (Andrew) 这允许`DROP`操作一个不存在的对象时不会生成错误。 * 添加[`DROP OWNED`](#calibre_link-615), 删除一个角色拥有的所有对象 (Alvaro) * 添加[`REASSIGN OWNED`](#calibre_link-618), 重新分配一个角色拥有的所有对象 (Alvaro) 这个和上面的`DROP OWNED`,帮助删除角色。 * 添加[`GRANT ON SEQUENCE`](#calibre_link-19)语法 (Bruce) 这是为了设置特定于序列的权限添加的。为了后向兼容, 仍然支持序列的`GRANT ON TABLE`。 * 为序列添加[`USAGE`](#calibre_link-19)权限, 只允许`currval()`和`nextval()`,不允许`setval()` (Bruce) `USAGE`权限允许更精细的控制序列访问。`USAGE` 允许用户增加一个序列,但是阻止他们使用`setval()` 设置该序列为任意值。 * 添加[`ALTER TABLE [ NO ] INHERIT`](#calibre_link-88) (Greg Stark) 这允许继承动态调整,而不是只在表创建和销毁时。 这在使用继承实现表分区时是非常有价值的。 * 允许在全局对象上的[注释](#calibre_link-690)全局存储 (Kris Jurka) 以前,附加到数据库的注释存储在单独的数据库中,使得它们无效, 并且没有规定注释规则或表空间。这个修改添加了一个新的共享目录 [`pg_shdescription`](#calibre_link-691) 并在数据库、角色和表空间上存储注释。 ### E.101.3.5\. 工具命令的变化 * 添加选项以允许索引创建时不阻塞并发的写入到表 (Greg Stark, Tom) 新的语法是[`CREATE INDEX CONCURRENTLY`](#calibre_link-83)。 缺省的行为在索引被创建时仍然阻塞表的修改。 * 提供[咨询锁](#calibre_link-1181)功能 (Abhijit Menon-Sen, Tom) 这是一个新的锁API,设计来替换曾经在/contrib/userlock中的那个。 userlock代码现在在pgfoundry上。 * 允许[`COPY`](#calibre_link-777)转储 `SELECT`查询 (Zoltan Boszormenyi, Karel Zak) 这允许`COPY`转储任意的SQL查询。 语法是`COPY (SELECT ...) TO`。 * 让[`COPY`](#calibre_link-777)命令返回一个命令标签, 该标签包括拷贝的行数 (Volkan YAZICI) * 允许[`VACUUM`](#calibre_link-748)终止行, 而不受其他并发`VACUUM`操作的影响 (Hannu Krossing, Alvaro, Tom) * 让[initdb](#calibre_link-542) 检测操作系统环境并相应的设置缺省`DateStyle` (Peter) 这使得安装的`postgresql.conf` `DateStyle` 值更有可能正是所需要的。 * 减少initdb显示的进展消息的数量 (Tom) ### E.101.3.6\. 日期/时间的变化 * 在[`timestamp`](#calibre_link-783) 的输入值中允许完整的时区名 (Joachim Wieland) 例如,`'2006-05-24 21:11 America/New_York'::timestamptz`。 * 支持可配置的时区缩写 (Joachim Wieland) 所需的一组时区缩写可以通过配置参数 [`timezone_abbreviations`](#calibre_link-1301) 选择。 * 添加[`pg_timezone_abbrevs`](#calibre_link-802) 和[`pg_timezone_names`](#calibre_link-801) 视图,显示支持的时区 (Magnus Hagander) * 添加[`clock_timestamp()`](#calibre_link-1535)、 [`statement_timestamp()`](#calibre_link-1535) 和[`transaction_timestamp()`](#calibre_link-1535) (Bruce) `clock_timestamp()`是当前挂钟的时间,`statement_timestamp()` 是当前语句到达服务器的时间,`transaction_timestamp()` 是`now()`的一个别名。 * 允许[`to_char()`](#calibre_link-800) 打印本地化的月和日的名字 (Euler Taveira de Oliveira) * 允许[`to_char(time)`](#calibre_link-800) 和[`to_char(interval)`](#calibre_link-800) 输出AM/PM规格 (Bruce) 间隔和时间是看做24小时周期的,例如`25 hours`被认为是AM。 * 添加新的函数[`justify_interval()`](#calibre_link-1535), 调整间隔单位 (Mark Dilger) * 允许时区偏移距离GMT达到14:59 Kiribati使用GMT+14,所以我们最好接受它。 * 间隔计算的改进 (Michael Glaesemann, Bruce) ### E.101.3.7\. 其他数据类型和函数的变化 * 允许数组包含`NULL`元素 (Tom) * 允许分配数组元素与现有的项不连续 (Tom) 介于中间的数组位置将用null填充。这是符合SQL标准的。 * 为数组子集比较新增内建的[操作符](#calibre_link-1526) (`@>`、`<@`、`&&`) (Teodor, Tom) 这些操作符可以被使用GiST或GIN 索引的许多数据类型索引。 * 在`INET`/`CIDR`值上添加方便的算术 [操作](#calibre_link-1536) (Stephen R. van den Berg) 新增的操作符是`&` (and)、`|` (or)、`~` (not)、 `inet` `+` `int8`、`inet` `-` `int8` 和`inet` `-` `inet`。 * 从SQL:2003添加新的[聚集函数](#calibre_link-1537) (Neil) 新增的函数是`var_pop()`、`var_samp()`、 `stddev_pop()`和`stddev_samp()`。`var_samp()` 和`stddev_samp()`只是重命名现有的聚集`variance()` 和`stddev()`。后者的名字为了后向兼容仍然可用。 * 添加SQL:2003统计[聚集](#calibre_link-1537) (Sergey Koposov) 新增函数:`regr_intercept()`、`regr_slope()`、 `regr_r2()`、`corr()`、`covar_samp()`、 `covar_pop()`、`regr_avgx()`、`regr_avgy()`、 `regr_sxy()`、`regr_sxx()`、`regr_syy()`、 `regr_count()`。 * 允许[domains](#calibre_link-567)基于其他的域 (Tom) * 适当的加强域的[`CHECK`](#calibre_link-1538)约束 (Neil, Tom) 例如,声明返回域类型的用户定义函数的结果现在检查该域的约束。 这关闭了域实现中的一个重大漏洞。 * 修复转储重命名的[`SERIAL`](#calibre_link-1175) 字段的问题 (Tom) 该修复是通过明确的指定序列的`DEFAULT`和序列元素转储一个 `SERIAL`,并且在重新加载时使用一个新的 [`ALTER SEQUENCE OWNED BY`](#calibre_link-621) 命令重新构造该`SERIAL`的字段。这也允许删除一个`SERIAL`字段声明。 * 添加一个服务器端休眠函数 [`pg_sleep()`](#calibre_link-1539)(Joachim Wieland) * 为[`tid`](#calibre_link-1152) (tuple id) 数据类型添加所有比较操作符 (Mark Kirkwood, Greg Stark, Tom) ### E.101.3.8\. PL/pgSQL服务器端语言的变化 * 添加`TG_table_name`和`TG_table_schema` 到触发器参数 (Andrew) `TG_relname`现在已经废弃了。也为其他PL在触发器参数中做了类型的变化。 * 允许`FOR`语句返回标量值、记录和行类型 (Pavel Stehule) * 添加一个`BY`子句到`FOR`循环,控制迭代增量 (Jaime Casanova) * 添加`STRICT`到 [`SELECT INTO`](#calibre_link-1540) (Matt Miller) 为了Oracle PL/SQL兼容性,如果多于或少于一行被`SELECT`返回, 则`STRICT`模式抛出一个异常。 ### E.101.3.9\. PL/Perl服务器端语言的变化 * 添加`table_name`和`table_schema`到触发器参数 (Adam Sjøgren) * 添加预备查询 (Dmitry Karasik) * 让`$_TD`触发一个全局变量的数据 (Andrew) 在以前,这是一个词汇,引起意外的分享违规行为。 * 为了安全起见,在单独的解释器中运行PL/Perl和PL/PerlU (Andrew) 在序列中,它们再也不能分享数据和加载模块。另外, 如果Perl没有用必要的标识编译以允许多个解释器,那么在任何给出的后端进程中, 只可以使用这些语言中的一种。 ### E.101.3.10\. PL/Python服务器端语言的变化 * 命名的参数是作为普通变量传送的,和在`args[]`数组中一样 (Sven Suursoho) * 添加`table_name`和`table_schema`到触发器参数 (Andrew) * 允许返回复合类型和结果集 (Sven Suursoho) * 作为`list`、`iterator`或`generator` 返回结果集 (Sven Suursoho) * 允许函数返回`void` (Neil) * 现在支持Python 2.5了 (Tom) ### E.101.3.11\. [psql](#calibre_link-23) 的变化 * 添加新的命令`\password`,用客户端侧的口令加密修改角色口令 (Peter) * 允许`\c`连接到一个新的主机和端口号 (David, Volkan YAZICI) * 添加表空间显示到`\l+` (Philip Yarra) * 改善`\df`斜线命令,包含函数的参数名和模式 (`OUT`或`INOUT`) (David Fetter) * 支持二进制`COPY` (Andreas Pflug) * 添加选项在一个事务中运行整个会话 (Simon) 使用选项`-1`或`--single-transaction`。 * 支持使用一个游标按批次的自动检索`SELECT`结果 (Chris Mair) 这是使用`\set FETCH_COUNT` `_n_`启用的。 这个特性允许在psql中检索大的结果集, 而不用尝试在内存中缓存整个结果集。 * 让多行值对齐在适当的字段内 (Martijn van Oosterhout) 包含换行符的字段值现在以更可读的方式显示。 * 多行语句保存为一个条目,而不是一次一行 (Sergey E. Koposov) 这使得向上箭头调回查询更加简单。(在Windows上是不可用的, 因为该平台使用操作系统中的本地命令行编辑。) * 让行计数器是64位的,这样它可以处理行数超过二十亿的文件 (David Fetter) * 为`INSERT`/`UPDATE`/`DELETE RETURNING` 报告返回的数据库和命令状态标签 (Tom) ### E.101.3.12\. [pg_dump](#calibre_link-437) 的变化 * 允许对象的综合选择被pg_dump包括或排除 (Greg Sabino Mullane) pg_dump现在支持多个`-n`(模式)和`-t` (表)选项,并且添加了`-N`和`-T`选项排除对象。 另外,这些开关的参数现在可以是通配符表达式,而不是单个对象名, 例如`-t 'foo*'`,并且一个模式可以是`-t`或`-T` 开关的一部分,比如`-t schema1.table1`。 * 添加[pg_restore](#calibre_link-440) `--no-data-for-failed-tables`选项,如果表创建失败则阻止加载数据 (也就是,该表早已存在) (Martin Pitt) * 添加[pg_restore](#calibre_link-440)选项, 在单个事务中运行整个会话 (Simon) 使用选项`-1`或`--single-transaction`。 ### E.101.3.13\. [libpq](#calibre_link-496) 的变化 * 添加[`PQencryptPassword()`](#calibre_link-1541), 用来加密口令 (Tom) 这允许口令对于像[`ALTER ROLE ... PASSWORD`](#calibre_link-17) 这样的命令是预先加密发送的。 * 添加函数[`PQisthreadsafe()`](#calibre_link-1542) (Bruce) 这允许应用查询该库的线程安装状态。 * 添加[`PQdescribePrepared()`](#calibre_link-1543)、 [`PQdescribePortal()`](#calibre_link-1543) 和相关的函数返回关于以前预备好的语句和打开的游标的信息 (Volkan YAZICI) * 允许[LDAP](#calibre_link-1311)从 [`pg_service.conf`](#calibre_link-506) 中查找 (Laurenz Albe) * 允许[`~/.pgpass`](#calibre_link-457) 中的主机名匹配缺省的套接字目录 (Bruce) 一个空的主机名继续匹配任何Unix套接字连接, 但是这个添加允许记录特定于机器上的几个主进程之一。 ### E.101.3.14\. [ecpg](#calibre_link-620) 的变化 * 允许[`SHOW`](#calibre_link-509)将它的结果放入一个变量中 (Joachim Wieland) * 添加[`COPY TO STDOUT`](#calibre_link-777) (Joachim Wieland) * 添加回归测试 (Joachim Wieland, Michael) * 主要源代码清理 (Joachim Wieland, Michael) ### E.101.3.15\. Windows 端口 * 允许MSVC编译PostgreSQL服务器 (Magnus, Hiroshi Saito) * 为实用命令和[pg_dump](#calibre_link-437) 添加MSVC支持 (Hiroshi Saito) * 为Windows代码页`1253`、`1254`、`1255`和 `1257`添加支持 (Kris Jurka) * 在启动时删除权限,这样服务器可以从一个管理员账号启动 (Magnus) * 稳定性修复 (Qingqing Zhou, Magnus) * 添加本地信号灯实现 (Qingqing Zhou) 以前的代码模仿SysV信号灯。 ### E.101.3.16\. 源代码的变化 * 添加[GIN](#calibre_link-1006) (Generalized Inverted iNdex) 索引访问方法 (Teodor, Oleg) * 删除R-tree索引 (Tom) Rtree已经使用[GiST](#calibre_link-1003)重新实现了。 在其他差异中,这意味着rtree索引现在支持通过预写式日志(WAL)崩溃恢复。 * 减少库不必要的连接到后端 (Martijn van Oosterhout, Tom) * 添加一个配置标志,允许libedit优先于GNU readline (Bruce) 使用配置[`--with-libedit-preferred`](#calibre_link-1088)。 * 允许安装到包含空格的目录 (Peter) * 提高重新定位安装目录的能力 (Tom) * 为使用Solaris编译器的Solaris x86_64 添加支持 (Pierre Girard, Theo Schlossnagle, Bruce) * 添加DTrace支持 (Robert Lor) * 添加`PG_VERSION_NUM`,供想要使用>和< 比较测试后端C语言版本第三方应用程序使用 (Bruce) * 添加`XLOG_BLCKSZ`,独立于`BLCKSZ` (Mark Wong) * 添加`LWLOCK_STATS`定义,报告锁定活动 (Tom) * 为未知的configure选项发出警告 (Martijn van Oosterhout) * 为"plugin"库添加服务器支持,可以用于附加任务,比如调试和性能测量 (Korry Douglas) 这由两个功能组成:一个允许单独加载的共享库沟通的"会合变量"的表, 和一个允许库被加载到特定会话而不明确与客户端应用合作的新的配置参数 [`local_preload_libraries`](#calibre_link-1544)。 这允许外部插件实现像PL/pgSQL调试器这样的特性。 * 重命名现有的配置参数`preload_libraries`为 [`shared_preload_libraries`](#calibre_link-576) (Tom) 这样做是为了清楚的和`local_preload_libraries`比较。 * 添加新的配置参数[`server_version_num`](#calibre_link-1545) (Greg Sabino Mullane) 这类似于`server_version`,但是这是一个整数,例如`80200`。 这允许应用更容易的做版本检查。 * 添加配置参数[`seq_page_cost`](#calibre_link-1201) (Tom) * 重新实现[回归测试](#calibre_link-116)脚本为C程序 (Magnus, Tom) * 允许可加载的模块分配共享内存和轻量级锁 (Marc Munro) * 添加动态加载库的自动初始化和终结 (Ralf Engelschall, Tom) 如果库定义了这样的符号,则新增的[函数](#calibre_link-921) `_PG_init()`和`_PG_fini()`被调用。 因此我们不再需要在`shared_preload_libraries` 中指定一个初始化函数;我们可以假设库使用了`_PG_init()`约定。 * 添加[`PG_MODULE_MAGIC`](#calibre_link-921) 标题块到所有共享的对象文件 (Martijn van Oosterhout) 该魔法模块阻止可加载对象文件和服务器间的版本错误匹配。 * 为AIX添加共享的库支持 (Laurenz Albe) * 新增[XML](#calibre_link-1460)文档章节 (Bruce) ### E.101.3.17\. 贡献包的变化 * 主要tsearch2的改进 (Oleg, Teodor) * 多字节编码支持,包括UTF8 * 查询重写的支持 * 改进排序功能 * 同义词字典支持 * Ispell字典现在识别MySpell格式,OpenOffice使用它。 * GIN支持 * 添加包含Pgadmin管理功能的adminpack模块 (Dave) 这些函数提供了没有在缺省的PostgreSQL 服务器中出现的额外的文件系统访问例程。 * 添加sslinfo模块 (Victor Wagner) 报告当前连接的SSL证书的信息。 * 添加pgrowlocks模块 (Tatsuo) 这为特定的表显示了行锁信息。 * 添加hstore模块 (Oleg, Teodor) * 添加isn模块,替换isbn_issn (Jeremy Kronuz) 这个新的实现支持EAN13、UPC、 ISBN (books)、ISMN (music)和ISSN (serials)。 * 添加索引信息函数到pgstattuple (ITAGAKI Takahiro, Satoshi Nagayasu) * 添加pg_freespacemap模块,显示自由空间映射信息 (Mark Kirkwood) * pgcrypto现在拥有所有计划的功能 (Marko Kreen) * 在pgcrypto中包含iMath库,让公共秘钥加密函数总是可用。 * 添加在OpenBSD代码中丢失的SHA224算法。 * 在老的OpenSSL上为SHA224/256/384/512哈希激活内建代码,让这些算法总是可用。 * 新增函数gen_random_bytes(),返回密码强壮的随机性。对于生成加密秘钥是有用的。 * 删除digest_exists()、hmac_exists()和cipher_exists()函数。 * 改进多维数据集模块 (Joshua Reich) 新增的函数是`cube(float[])`、`cube(float[], float[])`和 `cube_subset(cube, int4[])`。 * 添加异步查询能力到dblink (Kai Londenberg, Joe Conway) * 为数组子集比较新增操作符(`@>`、 `<@`、`&&`) (Tom) 各种贡献包已经为它们的数据类型有了这些操作符,但是命名并不一致。 我们现在添加了一致命名的数组子集比较操作符到内核代码和所有拥有这样功能的贡献包。 (老的名字保留有效,但是已经废弃了。) * 为所有拥有安装脚本的贡献包添加卸载脚本 (David, Josh Drake)