选择 打开 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

不受支持的版本: 9.3 / 9.2 / 9.1 / 9.0
历史版本PostgreSQL 9.0 已于 2015 年 10 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本手册首页

E.95. 版本 8.2 #

发行日期

2006-12-05

E.95.1. 概述

此发行版新增了许多用户要求的功能和性能改进,包括:

  • 查询语言增强,包括 INSERT/UPDATE/DELETE RETURNING、多行 VALUES 列表以及 UPDATE/DELETE 中可选的目标表别名

  • 创建索引而不阻塞并发的 INSERT/UPDATE/DELETE 操作

  • 许多查询优化改进,包括对外连接重排序的支持

  • 改进的排序性能和更低的内存使用

  • 更高效的锁定和更好的并发性

  • 更高效的清理

  • 更易管理的热备服务器

  • 新的表和索引 FILLFACTOR 支持

  • 监控、日志和性能调优的新增内容

  • 对创建和删除对象的更多控制

  • 可以为已有表定义和移除表继承关系

  • COPY TO 可以复制任意 SELECT 语句的输出

  • 数组改进,包括数组中的空值

  • 聚合函数改进,包括多输入聚合和 SQL:2003 统计函数

  • 许多 contrib/ 改进

E.95.2. 迁移到版本 8.2

希望从任何以前的版本迁移数据的用户,需要使用 pg_dump 进行转储/恢复。

请注意以下不兼容之处:

  • escape_string_warning 默认设为 on(Bruce)

    如果在非转义(非 E'')字符串中使用反斜杠转义,这会发出警告。

  • 更改行构造器语法ROW(...)),使列表元素 foo.* 展开为其成员字段的列表,而不是像以前那样创建嵌套的行类型字段(Tom)

    新行为有用得多,因为它允许例如触发器用 IF row(new.*) IS DISTINCT FROM row(old.*) 检查数据更改。省略 .* 仍可获得旧行为。

  • 按行比较遵循 SQL 标准语义,并允许它们用于索引扫描(Tom)

    此前,行 = 和 <> 比较遵循标准,但 < <= > >= 不遵循。现在行比较可以用作匹配行值的多列索引的索引约束。

  • IS [NOT] NULL 测试遵循 SQL 标准语义(Tom)

    以前的行为在 IS NULL 的简单情形下符合标准,但 IS NOT NULL 在任一行字段非空时就返回真,而标准说只有在所有字段都非空时才应返回真。

  • SET CONSTRAINT 只影响一个约束(Kris Jurka)

    在以前的版本中,SET CONSTRAINT 修改所有名称匹配的约束。在此版本中,模式搜索路径用于只修改第一个匹配的约束。也支持模式指定。这更接近 SQL 标准。

  • 出于安全原因移除表的 RULE 权限(Tom)

    从此版本起,只有表的所有者能为表创建或修改规则。为了向后兼容,GRANT/REVOKE RULE 仍被接受,但它不做任何事情。

  • 数组比较改进(Tom)

    现在数组维度也被比较。

  • 更改数组连接以符合文档行为(Tom)

    这改变了以前连接会修改数组下界的行为。

  • 使 postmasterpostgres 的命令行选项一致(Peter)

    这允许 postmaster 不用 -o 就能向每个后端传递参数。注意某些选项现在只有长形式,因为存在冲突的单字母选项。

  • 废弃 postmaster 符号链接的使用(Peter)

    postmasterpostgres 命令现在行为完全相同,由命令行选项决定行为。postmaster 符号链接为兼容性保留,但已不再真正需要。

  • 更改 log_duration,即使查询未被输出也输出(Tom)

    在以前的版本中,log_duration 只在查询先前出现在日志中时才打印。

  • to_char(time)to_char(interval)HHHH12 当作 12 小时间隔

    大多数应用程序应使用 HH24,除非想要 12 小时显示。

  • 在从 INETCIDR 的转换中将未掩码的位清零(Tom)

    这确保转换后的值对 CIDR 确实有效。

  • 移除 australian_timezones 配置变量(Joachim Wieland)

    此变量已被配置时区缩写的更通用机制取代。

  • 改进嵌套循环索引扫描的代价估计(Tom)

    这可能消除设置不切实际的小 random_page_cost 值的需要。如果你一直使用很小的 random_page_cost,请重新检查你的测试用例。

  • 更改 pg_dump-n-t 选项的行为。(Greg Sabino Mullane)

    详情请参阅 pg_dump 手册页。

  • 更改 libpqPQdsplen() 以返回有用的值(Martijn van Oosterhout)

  • libpqPQgetssl() 声明为返回 void * 而不是 SSL *(Martijn van Oosterhout)

    这允许应用程序使用该函数而不包含 OpenSSL 头文件。

  • C 语言可装载模块现在必须包含 PG_MODULE_MAGIC 宏调用以进行版本兼容性检查(Martijn van Oosterhout)

  • 出于安全考虑,PL/PerlU 函数使用的模块不再对 PL/Perl 函数可用(Andrew)

    注意

    这也意味着数据不能再在 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

  • 移除已迁移到 PgFoundry 的 contrib 模块:adddependdbasedbmirrorfulltextindexmacuserlock

  • 移除被废弃的 contrib 模块:mSQL-interfacetips

  • 移除 QNXBEOS 移植(Bruce)

    这些移植不再有活跃的维护者。

E.95.3. 变更

下面你将找到 PostgreSQL 8.2 与上一个主版本之间变更的详细说明。

E.95.3.1. 性能改进

  • 允许规划器在某些情形下重排外连接(Tom)

    在以前的版本中,外连接总是按照查询中书写的顺序求值。此变更允许查询优化器在能确定连接顺序可以在不改变查询含义的情况下更改时,考虑重排外连接。这对涉及多个外连接或内外连接混合的查询可带来可观的性能差异。

  • 改进 IN(表达式列表)子句的效率(Tom)

  • 改进排序速度并降低内存使用(Simon、Tom)

  • 改进子事务性能(Alvaro、Itagaki Takahiro、Tom)

  • 索引创建新增 FILLFACTOR(ITAGAKI Takahiro)

    这在每个表或索引页中留出额外空闲空间,使数据库增长时性能得以改进。这对维护聚簇特别有价值。

  • 提高 shared_buffersmax_fsm_pages 的默认值(Andrew)

  • 通过把锁管理器表分成若干节来改进锁定性能(Tom)

    这使锁定更细粒度,减少争用。

  • 降低顺序扫描的锁定要求(Qingqing Zhou)

  • 降低创建和销毁数据库所需的锁定(Tom)

  • 改进优化器对 LIKEILIKE正则表达式操作的选择率估计(Tom)

  • 改进到继承表UNION ALL 视图连接的规划(Tom)

  • 允许把约束排除应用于继承的 UPDATEDELETE 查询(Tom)

    SELECT 已经遵循约束排除。

  • 改进常量 WHERE 子句的规划,例如只依赖于从外层查询级别继承的变量的条件(Tom)

  • 协议级未命名预备语句对每组 BIND 值重新规划(Tom)

    这改进了性能,因为可以在计划中使用确切的参数值。

  • 加快 B-Tree 索引的清理(Heikki Linnakangas、Tom)

  • 避免 VACUUM 期间对无索引表的额外扫描(Greg Stark)

  • 改进多列 GiST 索引(Oleg、Teodor)

  • 在 B-Tree 页分裂前移除死索引条目(Junji Teramoto)

E.95.3.2. 服务器变更

  • 允许强制切换到新事务日志文件(Simon、Tom)

    这对保持热备从属服务器与主服务器同步很有价值。事务日志文件切换现在也会在 pg_stop_backup() 期间自动发生。这确保恢复所需的全部事务日志文件可以立即归档。

  • 新增 WAL 信息函数(Simon)

    新增查询当前事务日志插入点以及从 pg_stop_backup() 和相关函数显示的十六进制 WAL 位置确定 WAL 文件名的函数。

  • 改进 WAL 重放期间崩溃后的恢复(Simon)

    服务器现在在 WAL 恢复期间做周期性检查点,因此如果发生崩溃,未来的 WAL 恢复会缩短。这还消除了热备服务器崩溃后重放自基础备份以来整个日志的需要。

  • 改进长期 WAL 重放的可靠性(Heikki、Simon、Tom)

    此前,由于 XID 回卷,试图前滚超过 20 亿个事务行不通。这意味着热备服务器必须定期从新的基础备份重载。

  • 新增 archive_timeout,按给定间隔强制事务日志文件切换(Simon)

    这为热备服务器强制了最大复制延迟。

  • 新增本机 LDAP 认证(Magnus Hagander)

    这对不支持 PAM 的平台(如 Windows)特别有用。

  • 新增 GRANT CONNECT ON DATABASE(Gevik Babakhani)

    这提供了对数据库访问的 SQL 级控制。它作为现有 pg_hba.conf 控制之上的附加过滤器工作。

  • 新增对 SSL 证书吊销列表CRL)文件的支持(Libor Hohoš)

    服务器和 libpq 现在都识别 CRL 文件。

  • GiST 索引现在可聚簇(Teodor)

  • 移除 autovacuum 例行的服务器日志条目(Bruce)

    pg_stat_activity 现在显示 autovacuum 活动。

  • 在单个表内而不是整个数据库内跟踪最大 XID 年龄(Alvaro)

    这通过避免不必要的 VACUUM 降低了防止事务 ID 回卷所涉及的开销。

  • 为统计收集器新增上次清理和分析的时间戳列(Larry Rosenman)

    这些值现在出现在 pg_stat_*_tables 系统视图中。

  • 改进统计监控的性能,特别是 stats_command_string(Tom、Bruce)

    既然其开销已最小化,此版本默认启用 stats_command_string。这意味着 pg_stat_activity 现在默认显示所有活动查询。

  • pg_stat_activity 新增 waiting 列(Tom)

    这使 pg_stat_activity 能显示 ps 显示中包含的所有信息。

  • 新增配置参数 update_process_title,控制 ps 显示是否随每条命令更新(Bruce)

    在更新 ps 显示代价高昂的平台上,关闭它并只依靠 pg_stat_activity 获取状态信息可能是值得的。

  • 允许在配置设置中指定单位(Peter)

    例如,现在可以把 shared_buffers 设为 32MB,而不用心算换算大小。

  • 新增对 postgresql.confinclude 指令的支持(Joachim Wieland)

  • 改进协议级 prepare/bind/execute 消息的日志记录(Bruce、Tom)

    这类日志现在显示语句名、绑定参数值以及被执行查询的文本。此外,当由 log_min_error_statement 启用时,查询文本也被正确包含在记录的错误消息中。

  • 防止把 max_stack_depth 设为不安全的值

    在能确定实际内核栈深度限制的平台(大多数平台)上,确保 max_stack_depth 的初始默认值是安全的,并拒绝把它设为不安全的大值的企图。

  • 在更多情形中启用查询中错误位置的高亮(Tom)

    服务器现在能为某些语义错误(如无法识别的列名)报告具体的错误位置,而不像以前那样只针对基本语法错误。

  • 修复 VACUUM 中的 未能重新找到父键错误(Tom)

  • 在服务器重启期间清除 pg_internal.init 缓存文件(Simon)

    这避免了缓存文件在 PITR 恢复后可能包含陈旧数据的风险。

  • 修复 VACUUM 截断跨越 GB 边界的大关系时的竞态条件(Tom)

  • 修复导致行级锁上不必要死锁错误的缺陷(Tom)

  • 修复影响多 GB 哈希索引的缺陷(Tom)

  • 每个后端进程现在都是自己的进程组长(Tom)

    这允许查询取消中止从后端或归档/恢复进程调用的子进程。

E.95.3.3. 查询变更

  • 新增 INSERT/UPDATE/DELETERETURNING(Jonah Harris、Tom)

    这允许这些命令返回值,例如为新行计算的序列键。在 UPDATE 的情形,返回行更新后版本的值。

  • 按照 SQL 标准,新增对多行 VALUES 子句的支持(Joe、Tom)

    这允许 INSERT 插入多行常量,或查询用常量生成结果集。例如 INSERT ... VALUES (...), (...), ....SELECT * FROM (VALUES (...), (...), ....) AS alias(f1, ...)

  • 允许 UPDATEDELETE 为目标表使用别名(Atsushi Ogawa)

    SQL 标准不允许这些命令中使用别名,但许多数据库系统为了书写方便仍允许。

  • 允许 UPDATE 用值列表设置多列(Susanne Ebrecht)

    这基本上是成对分配列和值的简写。语法为 UPDATE tab SET (column, ...) = (val, ...)

  • 让行比较按标准工作(Tom)

    <、<=、>、>= 形式现在按字典序比较行,即比较第一个元素,如果相等就比较第二个元素,依此类推。此前它们展开为对所有元素的 AND 条件,这既不标准也不太有用。

  • TRUNCATE 新增 CASCADE 选项(Joachim Wieland)

    这使 TRUNCATE 自动包含通过外键引用指定表的所有表。虽然方便,但这是危险工具——请谨慎使用!

  • 支持在同一条 SELECT 命令中使用 FOR UPDATEFOR SHARE(Tom)

  • 新增 IS NOT DISTINCT FROM(Pavel Stehule)

    此操作符类似于相等(=),但当左右操作数都是 NULL 时结果为真,只有一个是时为假,而不是在这些情形下产生 NULL

  • 改进 UNION/INTERSECT/EXCEPT 使用的长度输出(Tom)

    当所有对应列的定义长度相同时,结果使用该长度而不是通用长度。

  • ILIKE 在多字节编码下工作(Tom)

    在内部,ILIKE 现在先调用 lower() 再使用 LIKE。特定于区域设置的正则表达式模式在这些编码下仍不工作。

  • 使 standard_conforming_strings 可以被设为 on(Kevin Grittner)

    这允许禁用字符串中的反斜杠转义,使 PostgreSQL 更符合标准。为了向后兼容默认值为 off,但未来版本将默认为 on

  • 不平展目标列表中包含 volatile 函数的子查询(Jaime Casanova)

    这防止了因 volatile 函数(如 random()nextval())被多次求值导致的意外行为。在存在被不必要地标记为 volatile 的函数时,它可能导致性能退化。

  • 新增系统视图 pg_prepared_statementspg_cursors,显示预备语句和打开的游标(Joachim Wieland、Neil)

    这在连接池设置中非常有用。

  • 支持 EXPLAINEXECUTE 中的门户参数(Tom)

    这例如允许 JDBC? 参数在这些命令中工作。

  • 如果未指定 SQLPREPARE 的参数,则从查询内容推断其类型(Neil)

    协议级的 PREPARE 已经这样做。

  • 允许 LIMITOFFSET 超过二十亿(Dhanaraj M)

E.95.3.4. 对象操作变更

  • CREATE TABLE AS 新增 TABLESPACE 子句(Neil)

    这允许为新表指定表空间。

  • CREATE TABLE AS 新增 ON COMMIT 子句(Neil)

    这允许临时表在事务提交时被截断或删除。默认行为是表保留到会话结束。

  • CREATE TABLE LIKE 新增 INCLUDING CONSTRAINTS(Greg Stark)

    这允许把 CHECK 约束轻松复制到新表。

  • 允许创建占位符(shell)类型(Martijn van Oosterhout)

    shell 类型声明只创建类型名,不指定类型的任何细节。创建 shell 类型是有用的,因为它允许更干净地声明类型的输入/输出函数,这些函数必须在类型可以真正定义之前存在。语法为 CREATE TYPE typename

  • 聚合函数现在支持多个输入参数(Sergey Koposov、Tom)

  • 新增聚合创建语法(Tom)

    新语法为 CREATE AGGREGATE aggname (input_type) (parameter_list)。它更自然地支持新的多参数聚合功能。以前的语法仍受支持。

  • 新增 ALTER ROLE PASSWORD NULL,移除先前设置的角色口令(Peter)

  • 为许多对象类型新增 DROP 对象 IF EXISTS(Andrew)

    这允许对不存在的对象执行 DROP 操作而不产生错误。

  • 新增 DROP OWNED,删除角色拥有的所有对象(Alvaro)

  • 新增 REASSIGN OWNED,重新分配角色拥有的所有对象的所有权(Alvaro)

    它与上面的 DROP OWNED 一起便于删除角色。

  • 新增 GRANT ON SEQUENCE 语法(Bruce)

    这是为设置序列特定的权限而添加的。为向后兼容,对序列的 GRANT ON TABLE 仍受支持。

  • 为序列新增 USAGE 权限,只允许 currval()nextval(),不允许 setval()(Bruce)

    USAGE 权限允许对序列访问更细粒度的控制。授予 USAGE 允许用户递增序列,但防止他们用 setval() 把序列设为任意值。

  • 新增 ALTER TABLE [ NO ] INHERIT(Greg Stark)

    这允许动态调整继承,而不只是在表创建和销毁时。当用继承实现表分区时这非常有价值。

  • 允许注释全局对象被全局存储(Kris Jurka)

    此前,附加到数据库的注释存储在各个数据库中,使其无效,而且完全没有为角色或表空间的注释做准备。此变更新增了共享目录 pg_shdescription,并把数据库、角色和表空间的注释存储在其中。

E.95.3.5. 工具命令变更

  • 新增允许创建索引而不阻塞对表并发写入的选项(Greg Stark、Tom)

    新语法为 CREATE INDEX CONCURRENTLY。默认行为仍是在创建索引期间阻止表修改。

  • 提供咨询锁定功能(Abhijit Menon-Sen、Tom)

    这是为取代以前 /contrib/userlock 中的内容而设计的新锁定 API。userlock 代码现在位于 pgfoundry。

  • 允许 COPY 转储 SELECT 查询(Zoltan Boszormenyi、Karel Zak)

    这允许 COPY 转储任意 SQL 查询。语法为 COPY (SELECT ...) TO

  • COPY 命令返回包含复制行数的命令标签(Volkan YAZICI)

  • 允许 VACUUM 使行过期而不受其他并发 VACUUM 操作影响(Hannu Krossing、Alvaro、Tom)

  • initdb 检测操作系统区域设置并相应设置默认 DateStyle(Peter)

    这使安装的 postgresql.confDateStyle 值更可能符合期望。

  • 减少 initdb 显示的进度消息数量(Tom)

E.95.3.6. 日期/时间变更

  • 允许 timestamp 输入值中使用完整时区名(Joachim Wieland)

    例如 '2006-05-24 21:11 America/New_York'::timestamptz

  • 支持可配置的时区缩写(Joachim Wieland)

    可以通过配置参数 timezone_abbreviations 选择所需的时区缩写集合。

  • 新增 pg_timezone_abbrevspg_timezone_names 视图以显示受支持的时区(Magnus Hagander)

  • 新增 clock_timestamp()statement_timestamp()transaction_timestamp()(Bruce)

    clock_timestamp() 是当前墙上时钟时间,statement_timestamp() 是当前语句到达服务器的时刻,transaction_timestamp()now() 的别名。

  • 允许 to_char() 打印本地化的月名和日名(Euler Taveira de Oliveira)

  • 允许 to_char(time)to_char(interval) 输出 AM/PM 规格(Bruce)

    interval 和 time 被视为 24 小时周期,例如 25 hours 被认为是 AM

  • 新增函数 justify_interval(),调整 interval 单位(Mark Dilger)

  • 允许距 GMT 最多 14:59 的时区偏移

    基里巴斯使用 GMT+14,所以我们最好接受它。

  • interval 计算改进(Michael Glaesemann、Bruce)

E.95.3.7. 其他数据类型和函数变更

  • 允许数组包含 NULL 元素(Tom)

  • 允许给与现有条目不连续的数组元素赋值(Tom)

    中间的数组位置将用空值填充。这符合 SQL 标准。

  • 新增用于数组子集比较的内建操作符@><@&&)(Teodor、Tom)

    这些操作符可以用 GiSTGIN 索引为许多数据类型建立索引。

  • 新增对 INET/CIDR 值的便捷算术操作(Stephen R. van den Berg)

    新操作符为 &(与)、|(或)、~(非)、inet + int8inet - int8inet - inet

  • 新增 SQL:2003 的新聚合函数(Neil)

    新函数为 var_pop()var_samp()stddev_pop()stddev_samp()var_samp()stddev_samp() 只是现有聚合 variance()stddev() 的改名。后两个名字仍可为向后兼容使用。

  • 新增 SQL:2003 统计聚合(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()

  • 允许基于其他域(Tom)

  • 在所有地方正确强制执行域的 CHECK 约束(Neil、Tom)

    例如,声明为返回域类型的用户定义函数的结果现在会对照域的约束检查。这堵住了域实现中一个重要的漏洞。

  • 修复转储重命名的 SERIAL 列的问题(Tom)

    修复方法是在转储 SERIAL 列时显式指定其 DEFAULT 和序列元素,并在重载时用新的 ALTER SEQUENCE OWNED BY 命令重建 SERIAL 列。这也允许删除 SERIAL 列规格。

  • 新增服务器端休眠函数 pg_sleep()(Joachim Wieland)

  • tid(元组 id)数据类型新增所有比较操作符(Mark Kirkwood、Greg Stark、Tom)

E.95.3.8. PL/pgSQL 服务器端语言变更

  • 为触发器参数新增 TG_table_nameTG_table_schema(Andrew)

    TG_relname 现已废弃。其他 PL 的触发器参数也做了类似变更。

  • 允许 FOR 语句向标量以及记录和行类型返回值(Pavel Stehule)

  • FOR 循环新增 BY 子句,控制迭代增量(Jaime Casanova)

  • SELECT INTO 新增 STRICT(Matt Miller)

    为了与 Oracle PL/SQL 兼容,当 SELECT 返回的行多于或少于一行时,STRICT 模式抛出异常。

E.95.3.9. PL/Perl 服务器端语言变更

  • 为触发器参数新增 table_nametable_schema(Adam Sjøgren)

  • 新增预备查询(Dmitry Karasik)

  • $_TD 触发器数据改为全局变量(Andrew)

    此前它是词法作用域的,导致意外的共享冲突。

  • 出于安全原因,在独立解释器中运行 PL/Perl 和 PL/PerlU(Andrew)

    因此它们不能再共享数据或已装载的模块。此外,如果 Perl 编译时未带允许多解释器的必需标志,任何给定后端进程中只能使用这两种语言之一。

E.95.3.10. PL/Python 服务器端语言变更

  • 命名参数除了通过 args[] 数组传递外,还作为普通变量传递(Sven Suursoho)

  • 为触发器参数新增 table_nametable_schema(Andrew)

  • 允许返回组合类型和结果集(Sven Suursoho)

  • listiteratorgenerator 返回结果集(Sven Suursoho)

  • 允许函数返回 void(Neil)

  • 现在支持 Python 2.5(Tom)

E.95.3.11. psql Changes

  • 新增命令 \password,用客户端口令加密更改角色口令(Peter)

  • 允许 \c 连接到新的主机和端口号(David、Volkan YAZICI)

  • \l+ 新增表空间显示(Philip Yarra)

  • 改进 \df 反斜杠命令,使其包含函数的参数名和模式(OUTINOUT)(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.95.3.12. pg_dump Changes

  • 允许 pg_dump 复杂选择要包含或排除的对象(Greg Sabino Mullane)

    pg_dump 现在支持多个 -n(模式)和 -t(表)选项,并新增 -N-T 选项来排除对象。此外,这些开关的参数现在可以是通配表达式而不是单个对象名,例如 -t 'foo*',模式也可以是 -t-T 开关的一部分,例如 -t schema1.table1

  • 新增 pg_restore--no-data-for-failed-tables 选项,在表创建失败(即表已存在)时抑制数据装载(Martin Pitt)

  • 新增 pg_restore 选项,在单个事务中运行整个会话(Simon)

    使用选项 -1--single-transaction

E.95.3.13. libpq Changes

  • 新增用于加密口令的 PQencryptPassword()(Tom)

    这允许为 ALTER ROLE ... PASSWORD 等命令发送预加密的口令。

  • 新增函数 PQisthreadsafe()(Bruce)

    这允许应用程序查询库的线程安全状态。

  • 新增 PQdescribePrepared()PQdescribePortal() 及相关函数,返回有关先前预备的语句和打开的游标的信息(Volkan YAZICI)

  • 允许从 pg_service.conf 进行 LDAP 查找(Laurenz Albe)

  • 允许 ~/.pgpass 中的主机名匹配默认套接字目录(Bruce)

    空白主机名继续匹配任何 Unix 套接字连接,但此新增允许条目特定于机器上多个 postmaster 之一。

E.95.3.14. ecpg Changes

  • 允许 SHOW 把结果放入变量(Joachim Wieland)

  • 新增 COPY TO STDOUT(Joachim Wieland)

  • 新增回归测试(Joachim Wieland、Michael)

  • 大量源代码清理(Joachim Wieland、Michael)

E.95.3.15. Windows Port

  • 允许 MSVC 编译 PostgreSQL 服务器(Magnus、Hiroshi Saito)

  • 为工具命令和 pg_dump 新增 MSVC 支持(Hiroshi Saito)

  • 新增对 Windows 代码页 1253125412551257 的支持(Kris Jurka)

  • 启动时丢弃权限,使服务器可以从管理账户启动(Magnus)

  • 稳定性修复(Qingqing Zhou、Magnus)

  • 新增本机信号量实现(Qingqing Zhou)

    以前的代码模仿 SysV 信号量。

E.95.3.16. 源代码变更

  • 新增 GIN(通用倒排索引)索引访问方法(Teodor、Oleg)

  • 移除 R-tree 索引(Tom)

    Rtree 已用 GiST 重新实现。除其他差异外,这意味着 rtree 索引现在通过预写日志(WAL)支持崩溃恢复。

  • 减少不必要链接到后端的库(Martijn van Oosterhout、Tom)

  • 新增 configure 标志,允许优先使用 libedit 而不是 GNU readline(Bruce)

    使用 configure 的 --with-libedit-preferred

  • 允许安装到包含空格的目录(Peter)

  • 改进重新定位安装目录的能力(Tom)

  • 新增对用 Solaris 编译器的 Solaris x86_64 的支持(Pierre Girard、Theo Schlossnagle、Bruce)

  • 新增 DTrace 支持(Robert Lor)

  • 新增 PG_VERSION_NUM,供想要在 C 中用 > 和 < 比较测试后端版本的第三方应用程序使用(Bruce)

  • 新增独立于 BLCKSZXLOG_BLCKSZ(Mark Wong)

  • 新增 LWLOCK_STATS 定义以报告锁定活动(Tom)

  • 对未知的 configure 选项发出警告(Martijn van Oosterhout)

  • 新增对插件库的服务器支持,可用于调试和性能测量等附加任务(Korry Douglas)

    这由两个特性组成:一张允许分别装载的共享库通信的会合变量表,以及新的配置参数 local_preload_libraries,它允许把库装载到特定会话而无需客户端应用程序的显式配合。这允许外部附加组件实现诸如 PL/pgSQL 调试器之类的特性。

  • 把现有配置参数 preload_libraries 改名为 shared_preload_libraries(Tom)

    这是为了与 local_preload_libraries 相比更清晰。

  • 新增配置参数 server_version_num(Greg Sabino Mullane)

    它类似 server_version,但是整数,例如 80200。这使应用程序更容易做版本检查。

  • 新增配置参数 seq_page_cost(Tom)

  • 回归测试脚本重新实现为 C 程序(Magnus、Tom)

  • 允许可装载模块分配共享内存和轻量锁(Marc Munro)

  • 新增动态装载库的自动初始化和终结(Ralf Engelschall、Tom)

    如果库定义了这样的符号,就会调用新函数 _PG_init()_PG_fini()。因此我们不再需要在 shared_preload_libraries 中指定初始化函数;可以假定库使用了 _PG_init() 约定。

  • 为所有共享目标文件新增 PG_MODULE_MAGIC 头块(Martijn van Oosterhout)

    魔块防止可装载目标文件与服务器之间的版本不匹配。

  • 新增 AIX 的共享库支持(Laurenz Albe)

  • 新增 XML 文档节(Bruce)

E.95.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)

    新实现支持 EAN13UPCISBN(书籍)、ISMN(音乐)和 ISSN(期刊)。

  • 为 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() 函数。

  • cube 模块改进(Joshua Reich)

    新函数为 cube(float[])cube(float[], float[])cube_subset(cube, int4[])

  • 为 dblink 新增异步查询能力(Kai Londenberg、Joe Conway)

  • 新增用于数组子集比较的操作符(@><@&&)(Tom)

    各种 contrib 包已经为它们的数据类型提供了这些操作符,但命名不一致。我们现在为核心代码和所有具有此功能的 contrib 包添加了命名一致的数组子集比较操作符。(旧名称仍可用,但已废弃。)

  • 为所有有安装脚本的 contrib 包新增卸载脚本(David、Josh Drake)

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。