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

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

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

E.76. 版本 9.1 #

发行日期:. 2011-09-12

E.76.1. 概述

本版本表明 PostgreSQL 正凭借 PostgreSQL 独有的全新突破性功能,超越传统关系数据库的功能集。9.0 引入的流复制特性通过新增同步复制选项、流式备份和监控改进得到显著增强。主要增强包括:

上述各项在下面的章节中有更详细的说明。

E.76.2. 迁移到版本 9.1

对于希望从任何早期版本迁移数据的用户,需要使用 pg_dump 进行转储/恢复,或者使用 pg_upgrade

版本 9.1 包含许多可能影响与以前版本兼容性的变更。请注意以下不兼容之处:

E.76.2.1. 字符串

  • standard_conforming_strings 的默认值改为 on(Robert Haas)

    默认情况下,反斜杠现在是字符串字面量中的普通字符,而不是转义字符。此变更消除了一个与 SQL 标准长期存在的不兼容。escape_string_warning 多年来一直对这种用法发出警告。E'' 字符串是在字符串中嵌入反斜杠转义的正确方式,不受此变更影响。

    警告

    此变更可能破坏未预料到它并按旧规则自行做字符串转义的应用。后果可能严重到引入 SQL 注入安全漏洞。务必测试暴露于不可信输入的应用,确保它们正确处理文本字符串中的单引号和反斜杠。

E.76.2.2. 类型转换

  • 禁止对组合类型使用函数式和属性式数据类型转换(Tom Lane)

    例如,禁止 composite_value.texttext(composite_value)。无意中使用这种语法常常导致缺陷报告;虽然这不是缺陷,但回到拒绝这类表达式似乎更好。当确实想要转换整个组合值时,CAST:: 语法仍然可用。

  • 收紧对基于数组的域的转换检查(Tom Lane)

    当域基于数组类型时,允许透过域类型访问数组元素,包括对域值做下标操作来获取或赋值元素。对这种域值的元素赋值(例如通过 UPDATE ... SET domaincol[5] = ...)现在会重新检查域类型的约束,而此前会跳过检查。

E.76.2.3. 数组

  • 更改 string_to_array(),使其对零长度字符串返回空数组(Pavel Stehule)

    此前这返回空值。

  • 更改 string_to_array(),使 NULL 分隔符把字符串拆分为字符(Pavel Stehule)

    此前这返回空值。

E.76.2.4. 对象修改

  • 修复对 BEFORE/AFTER 触发器的不当检查(Tom Lane)

    触发器现在可以在三种情况下触发:某动作的 BEFOREAFTERINSTEAD OF。触发器函数作者应验证其逻辑在三种情况下都表现正常。

  • 要求超级用户或 CREATEROLE 权限才能为角色设置注释(Tom Lane)

E.76.2.5. 服务器设置

  • 更改 pg_last_xlog_receive_location(),使其永不倒退(Fujii Masao)

    此前,当流复制重启时,pg_last_xlog_receive_location() 的值可能倒退。

  • 让复制连接的日志记录遵循 log_connections(Magnus Hagander)

    此前复制连接总是被记录。

E.76.2.6. PL/pgSQL Server-Side Language

  • 更改 PL/pgSQL 的无参数 RAISE 命令,使其可被所附加的异常块捕获(Piyush Newe)

    此前代码块中的 RAISE 总是作用于所附加的异常块,因此在同一作用域内无法捕获。

  • 调整 PL/pgSQL 的错误行号代码,使其与其他过程语言一致(Pavel Stehule)

    此前 PL/pgSQL 会忽略(不计数)函数体开头的空行。由于这与其他所有语言不一致,该特殊情况已被移除。

  • 让 PL/pgSQL 对 IN 和 OUT 参数名冲突报错(Tom Lane)

    此前不会检测冲突,该名称会静默地只指向 OUT 参数。

  • PL/pgSQL 变量的类型修饰符现在对 SQL 解析器可见(Tom Lane)

    附加到 PL/pgSQL 变量的类型修饰符(如 varchar 长度限制)此前只在赋值期间强制执行,其他用途一律忽略。这类变量现在的行为将更像是用相同修饰符声明的表列。预计在大多数情况下这不会造成可见差异,但可能给 PL/pgSQL 函数发出的某些 SQL 命令带来细微变化。

E.76.2.7. 附加模块

  • 所有 contrib 模块现在都通过 CREATE EXTENSION 安装,而不是手工调用其 SQL 脚本(Dimitri Fontaine、Tom Lane)

    要更新包含某 contrib 模块 9.0 版本的现有数据库,使用 CREATE EXTENSION ... FROM unpackaged 把现有 contrib 模块的对象包装成扩展。从 9.0 之前的版本更新时,先用旧的卸载脚本删除该 contrib 模块的对象,然后使用 CREATE EXTENSION

E.76.2.8. 其他不兼容之处

  • pg_stat_reset() 重置所有数据库级统计信息(Tomas Vondra)

    一些 pg_stat_database 计数器此前没有被重置。

  • 修正一些 information_schema.triggers 列名,使其与新的 SQL 标准名称一致(Dean Rasheed)

  • ECPG 游标名视为大小写不敏感(Zoltan Boszormenyi)

E.76.3. 变更

下面是 PostgreSQL 9.1 与上一个主版本之间变更的详细说明。

E.76.3.1. 服务器

E.76.3.1.1. 性能
  • 支持在 CREATE TABLE 中使用 UNLOGGED 选项的不记录日志的表(Robert Haas)

    这类表比常规表提供更好的更新性能,但不是崩溃安全的:服务器崩溃时其内容会被自动清除。其内容也不会传播到复制从库。

  • 允许把 FULL OUTER JOIN 实现为哈希连接,并允许对 LEFT OUTER JOINRIGHT OUTER JOIN 的任一侧做哈希(Tom Lane)

    此前 FULL OUTER JOIN 只能实现为合并连接,而 LEFT OUTER JOINRIGHT OUTER JOIN 只能对连接的可空侧做哈希。这些变更提供了额外的查询优化可能性。

  • 合并重复的 fsync 请求(Robert Haas、Greg Smith)

    这大幅改进了重写负载下的性能。

  • 改进 commit_siblings 的性能(Greg Smith)

    这使 commit_siblings 的使用开销更低。

  • 降低大型 ispell 词典的内存需求(Pavel Stehule、Tom Lane)

  • 避免盲写之后数据文件保持打开(Alvaro Herrera)

    这修复了后端可能在文件被删除后很久仍持有其打开状态、阻止内核回收磁盘空间的场景。

E.76.3.1.2. 优化器
  • 允许继承表扫描返回有意义的排序结果(Greg Stark、Hans-Jurgen Schonig、Robert Haas、Tom Lane)

    这允许对继承表上使用 ORDER BYLIMITMIN/MAX 的查询做更好的优化。

  • 改进 GIN 索引扫描的代价估计(Teodor Sigaev)

  • 改进聚合和窗口函数的代价估计(Tom Lane)

E.76.3.1.3. 认证
  • pg_hba.conf 中支持主机名和主机后缀(例如 .example.com)(Peter Eisentraut)

    此前只支持主机 IP 地址和 CIDR 值。

  • pg_hba.conf 的 host 列中支持关键字 all(Peter Eisentraut)

    此前人们为此使用 0.0.0.0/0::/0

  • 在不支持 Unix 套接字连接的平台上拒绝 pg_hba.conf 中的 local 行(Magnus Hagander)

    此前这类行会被静默忽略,这可能令人意外。这使该行为更像其他不受支持的情况。

  • 允许使用 GSSAPI 通过 SSPI 向服务器认证(Christian Ullrich)

    具体而言,这允许基于 Unix 的 GSSAPI 客户端与 Windows 服务器进行 SSPI 认证。

  • 本地套接字上的 ident 认证现在称为 peer(Magnus Hagander)

    为了向后兼容仍接受旧名称,但由于这两种方法根本不同,为它们采用不同的名称似乎更好。

  • 重写 peer 认证,避免使用凭据控制消息(Tom Lane)

    此变更使 peer 认证代码更简单、性能更好。但它要求平台提供 getpeereid 函数或等效的套接字操作。据我们所知,唯一此前 peer 认证可用而现在不可用的平台是 5.0 之前的 NetBSD。

E.76.3.1.4. 监控
  • 为重启点和检查点的日志记录添加细节,它由 log_checkpoints 控制(Fujii Masao、Greg Smith)

    新增细节包括 WAL 文件和同步活动。

  • 新增 log_file_mode,控制日志收集器创建的日志文件的权限(Martin Pihlak)

  • syslog 日志的默认最大行长降低到 900 字节加前缀(Noah Misch)

    这避免了在有 1KB(而非更常见的 2KB)长度限制的 syslog 实现上长日志行被截断。

E.76.3.1.5. 统计视图
  • pg_stat_activity 新增 client_hostname 列(Peter Eisentraut)

    此前只报告客户端地址。

  • 新增 pg_stat_xact_* 统计函数和视图(Joel Jacobson)

    它们类似于数据库范围的统计计数器视图,但只反映当前事务的计数。

  • 在数据库级和后台写入进程统计视图中新增上次重置时间(Tomas Vondra)

  • pg_stat_*_tables 视图中新增显示清理和分析操作次数的列(Magnus Hagander)

  • pg_stat_bgwriter 新增 buffers_backend_fsync 列(Greg Smith)

    这个新列统计后端对缓冲区执行 fsync 的次数。

E.76.3.1.6. 服务器设置

E.76.3.2. 复制和恢复

E.76.3.2.1. 流复制和连续归档
  • 允许同步复制(Simon Riggs、Fujii Masao)

    这允许主服务器等待备库把事务信息写入磁盘后再确认提交。每次只有一个备库可以充当同步备库的角色,由 synchronous_standby_names 设置控制。可以使用 synchronous_commit 设置按事务启用或禁用同步复制。

  • 新增协议支持,使用流复制网络连接向备库服务器发送文件系统备份(Magnus Hagander、Heikki Linnakangas)

    这避免了搭建备库服务器时手工传输文件系统备份的要求。

  • 新增 replication_timeout 设置(Fujii Masao、Heikki Linnakangas)

    空闲时间超过 replication_timeout 间隔的复制连接将被自动终止。此前,失败的连接通常要等到 TCP 超时才会被检测到,这在许多情况下长得不方便。

  • 新增命令行工具 pg_basebackup,用于创建新的备库服务器或数据库备份(Magnus Hagander)

  • 为角色新增复制权限(Magnus Hagander)

    这是一个用于流复制的只读权限。它允许非超级用户角色用于复制连接。此前只有超级用户可以发起复制连接;超级用户默认仍拥有此权限。

E.76.3.2.2. 复制监控
  • 新增系统视图 pg_stat_replication,显示 WAL 发送端进程的活动(Itagaki Takahiro、Simon Riggs)

    它报告所有已连接备库服务器的状态。

  • 新增监控函数 pg_last_xact_replay_timestamp()(Fujii Masao)

    它返回主库生成备库上已应用的最新的提交或中止记录的时间。

E.76.3.2.3. 热备
  • 新增配置参数 hot_standby_feedback,使备库可以推迟主库上旧行版本的清理(Simon Riggs)

    这有助于避免取消备库上的长时间运行查询。

  • 新增系统视图 pg_stat_database_conflicts,显示已被取消的查询及其原因(Magnus Hagander)

    取消可能因表空间被删除、锁超时、旧快照、被固定的缓冲区和死锁而发生。

  • pg_stat_database 新增 conflicts 计数(Magnus Hagander)

    这是该数据库中发生的冲突数量。

  • 提高 max_standby_archive_delaymax_standby_streaming_delay 的最大值

    这些参数此前的最大值都只有约 35 分钟。现在允许大得多的值。

  • 新增错误码 ERRCODE_T_R_DATABASE_DROPPED,用于报告因数据库被删除导致的恢复冲突(Tatsuo Ishii)

    这对连接池软件很有用。

E.76.3.2.4. 恢复控制
  • 新增控制流复制重放的函数(Simon Riggs)

    新函数为 pg_xlog_replay_pause()pg_xlog_replay_resume() 和状态函数 pg_is_xlog_replay_paused()

  • 新增 recovery.conf 设置 pause_at_recovery_target,用于在目标处暂停恢复(Simon Riggs)

    这允许查询恢复服务器以检查恢复点是否是期望的那个。

  • 新增使用 pg_create_restore_point() 创建命名还原点的能力(Jaime Casanova)

    这些命名还原点可以通过新的 recovery.conf 设置 recovery_target_name 指定为恢复目标。

  • 允许备库恢复自动切换到新时间线(Heikki Linnakangas)

    现在备库服务器会定期扫描归档目录以发现新时间线。

  • 新增 restart_after_crash 设置,用于在后端崩溃后禁用自动服务器重启(Robert Haas)

    这允许外部集簇管理软件控制数据库服务器是否重启。

  • 允许 recovery.conf 使用与 postgresql.conf 相同的引号行为(Dimitri Fontaine)

    此前所有值都必须加引号。

E.76.3.3. 查询

  • 新增真正的可序列化隔离级别(Kevin Grittner、Dan Ports)

    此前,请求可序列化隔离只保证整个事务使用单个 MVCC 快照,这允许某些已记载的异常。旧的快照隔离行为仍可通过请求 REPEATABLE READ 隔离级别获得。

  • 允许在 WITH 子句中使用数据修改命令(INSERT/UPDATE/DELETE)(Marko Tiikkaja、Hitoshi Harada)

    这些命令可以使用 RETURNING 把数据传递给包含它们的查询。

  • 允许把 WITH 子句附加到 INSERTUPDATEDELETE 语句(Marko Tiikkaja、Hitoshi Harada)

  • 当在 GROUP BY 子句中指定了主键时,允许查询目标列表中出现非 GROUP BY 列(Peter Eisentraut)

    SQL 标准允许这种行为,而且由于有主键,结果是无歧义的。

  • 允许在 UNION/INTERSECT/EXCEPT 子句中使用关键字 DISTINCT(Tom Lane)

    DISTINCT 是默认行为,因此使用该关键字是冗余的,但 SQL 标准允许。

  • 修复带规则的普通查询,使其使用与 EXPLAIN ANALYZE 相同的快照行为(Marko Tiikkaja)

    此前 EXPLAIN ANALYZE 对涉及规则的查询使用的快照时机略有不同。EXPLAIN ANALYZE 的行为被认为更合逻辑。

E.76.3.3.1. 字符串
  • 新增逐列排序规则支持(Peter Eisentraut、Tom Lane)

    此前排序规则(文本字符串的排序顺序)只能在创建数据库时选择。现在可以通过 SQL 标准的 COLLATE 子句逐列、逐域、逐索引或逐表达式设置排序规则。

E.76.3.4. 对象操作

  • 新增扩展,简化 PostgreSQL 附加功能的打包(Dimitri Fontaine、Tom Lane)

    扩展由新的 CREATE/ALTER/DROP EXTENSION 命令控制。这取代了对添加到 PostgreSQL 安装的对象进行分组的临时方法。

  • 新增对外部表的支持(Shigeru Hanada、Robert Haas、Jan Urbanski、Heikki Linnakangas)

    这允许像使用 PostgreSQL 原生存储的数据一样使用存储在数据库之外的数据。但外部表目前是只读的。

  • 允许通过 ALTER TYPE 向现有枚举类型添加新值(Andrew Dunstan)

  • 新增 ALTER TYPE ... ADD/DROP/ALTER/RENAME ATTRIBUTE(Peter Eisentraut)

    这允许修改组合类型。

E.76.3.4.1. ALTER Object
  • 为类型化表上的 ALTER TYPE 操作新增 RESTRICT/CASCADE(Peter Eisentraut)

    这控制 ADD/DROP/ALTER/RENAME ATTRIBUTE 的级联行为。

  • 支持 ALTER TABLE name {OF | NOT OF} type(Noah Misch)

    该语法允许把独立表变成类型化表,或把类型化表变成独立表。

  • ALTER ... SET SCHEMA 命令中的更多对象类型新增支持(Dimitri Fontaine)

    该命令现在支持转换、操作符、操作符类、操作符族、文本搜索配置、文本搜索词典、文本搜索解析器和文本搜索模板。

E.76.3.4.2. CREATE/ALTER TABLE
  • 新增 ALTER TABLE ... ADD UNIQUE/PRIMARY KEY USING INDEX(Gurjeet Singh)

    这允许使用现有唯一索引(包括并发创建的唯一索引)来定义主键或唯一约束。

  • 允许 ALTER TABLE 添加未经验证的外键(Simon Riggs)

    新选项名为 NOT VALID。约束的状态之后可以改为 VALIDATED 并执行验证检查。这两者相结合,使你能够以对读写操作影响最小的方式添加外键。

  • 允许 ALTER TABLE ... SET DATA TYPE 在适当情况下避免重写表(Noah Misch、Robert Haas)

    例如,把 varchar 列转换为 text 不再需要重写表。但增大 varchar 列的长度约束仍需要重写表。

  • 新增 CREATE TABLE IF NOT EXISTS 语法(Robert Haas)

    这允许在表已存在时创建表而不报错。

  • 修复当两个后端同时尝试向同一个表添加继承子表时可能出现的 tuple concurrently updated 错误(Robert Haas)

    ALTER TABLE 现在对父表持有更强的锁,使会话无法同时尝试更新它。

E.76.3.4.3. 对象权限
  • 新增 SECURITY LABEL 命令(KaiGai Kohei)

    这允许为对象分配安全标签。

E.76.3.5. 工具操作

  • 新增事务级咨询锁(Marko Tiikkaja)

    它们类似于现有的会话级咨询锁,但这类锁会在事务结束时自动释放。

  • TRUNCATE ... RESTART IDENTITY 以事务方式重启序列(Steve Singer)

    此前,如果后端在提交时截断活动与提交完成之间崩溃,计数器可能失去同步。

E.76.3.5.1. COPY
  • COPY TO/FROM 新增 ENCODING 选项(Hitoshi Harada、Itagaki Takahiro)

    这允许单独指定 COPY 文件的编码,而不是跟随客户端编码。

  • 新增双向 COPY 协议支持(Fujii Masao)

    这目前只被流复制使用。

E.76.3.5.2. EXPLAIN
  • EXPLAIN VERBOSE 显示 FunctionScan 节点中的函数调用表达式(Tom Lane)

E.76.3.5.3. VACUUM
  • VACUUM FULL VERBOSECLUSTER VERBOSE 的输出添加更多细节(Itagaki Takahiro)

    新信息包括存活和死亡元组计数,以及 CLUSTER 是否使用索引重建。

  • 防止 自动清理在无法获得表锁时等待(Robert Haas)

    它会在稍后再次尝试清理该表。

E.76.3.5.4. CLUSTER
  • 当看起来更廉价时,允许 CLUSTER 对表排序而不是扫描索引(Leonardo Francalanci)

E.76.3.5.5. 索引
  • GiST 索引新增最近邻(按操作符排序)搜索(Teodor Sigaev、Tom Lane)

    这允许 GiST 索引在带 LIMIT 的查询中快速返回最接近的 N 个值。例如

     SELECT * FROM places ORDER BY location <-> point '(101,456)' LIMIT 10;  
    

    找出最接近给定目标点的十个地点。

  • 允许 GIN 索引索引空值和空字符串(Tom Lane)

    这允许完整的 GIN 索引扫描,并修复了 GIN 扫描会失败的各种极端情况。

  • GIN 索引更好地识别重复的搜索条目(Tom Lane)

    这降低了索引扫描的代价,尤其是在能避免不必要的全索引扫描的情况下。

  • 修复 GiST 索引,使其完全崩溃安全(Heikki Linnakangas)

    此前有少数情况需要执行 REINDEX(你会被告知)。

E.76.3.6. 数据类型

  • 允许 numeric 在常见情况下使用更紧凑的两字节头(Robert Haas)

    此前所有 numeric 值都使用四字节头;此变更节省了磁盘存储。

  • 新增 money 除以 money 的支持(Andy Balholm)

  • 允许 void 类型的二进制 I/O(Radoslaw Smogura)

  • 改进几何操作符的斜边计算(Paul Matthews)

    这避免了不必要的溢出,而且可能更精确。

  • 支持对数组值做哈希(Tom Lane)

    这提供了额外的查询优化可能性。

  • 除非组合类型的所有列类型都可排序,否则不把该组合类型视为可排序(Tom Lane)

    如果查询可以在不排序的情况下实现,这避免了运行时可能出现的 could not identify a comparison function 失败。此外,ANALYZE 也不会尝试对这类组合类型的列使用不适当的统计收集方法。

E.76.3.6.1. 类型转换
  • 新增 moneynumeric 之间转换的支持(Andy Balholm)

  • 新增从 int4int8money 转换的支持(Joey Adams)

  • 如果表是类型化表,允许把表的行类型转换为该表的超类型(Peter Eisentraut)

    这类似于允许把行类型转换为超表的行类型的现有机制。

E.76.3.6.2. XML

E.76.3.7. 函数

  • 新增 SQL 函数 format(text, ...),其行为类似于 C 的 printf()(Pavel Stehule、Robert Haas)

    它目前支持字符串、SQL 字面量和 SQL 标识符的格式。

  • 新增字符串函数 concat()concat_ws()left()right()reverse()(Pavel Stehule)

    这些改进了与其他数据库产品的兼容性。

  • 新增用于读取二进制文件的函数 pg_read_binary_file()(Dimitri Fontaine、Itagaki Takahiro)

  • 新增函数 pg_read_file() 的单参数版本,用于读取整个文件(Dimitri Fontaine、Itagaki Takahiro)

  • 新增 array_to_string()string_to_array() 的三参数形式,用于控制空值处理(Pavel Stehule)

E.76.3.7.1. 对象信息函数
  • 新增函数 pg_describe_object()(Alvaro Herrera)

    该函数用于根据 pg_class OID、对象 OID 和子对象 ID 获取描述对象的人类可读字符串。它可用于帮助解释 pg_depend 的内容。

  • 更新内建操作符及其底层函数的注释(Tom Lane)

    旨在通过关联操作符使用的函数现在被这样注释。

  • 新增变量 quote_all_identifiers,强制为 EXPLAIN 以及 pg_get_viewdef() 等系统目录函数中的所有标识符加引号(Robert Haas)

    这使得把模式导出到具有不同引号规则的工具和其他数据库更加容易。

  • information_schema.sequences 系统视图新增列(Peter Eisentraut)

    此前虽然视图存在,但关于序列参数的列未实现。

  • 允许在 has_table_privilege() 及相关函数中使用 public 作为伪角色名(Alvaro Herrera)

    这允许检查公共权限。

E.76.3.7.2. 函数和触发器创建
  • 支持视图上的 INSTEAD OF 触发器(Dean Rasheed)

    此特性可用于实现完全可更新的视图。

E.76.3.8. 服务器端语言

E.76.3.8.1. PL/pgSQL Server-Side Language
  • 为 PL/pgSQL 新增 FOREACH IN ARRAY(Pavel Stehule)

    这比此前遍历数组值元素的方法更高效也更易读。

  • 允许在同一位置能够捕获 RAISE ERROR 的地方捕获无参数的 RAISE(Piyush Newe)

    先前的编码会从包含活动异常处理程序的块抛出错误。新行为与其他 DBMS 产品更一致。

E.76.3.8.2. PL/Perl Server-Side Language
  • 允许 PL/Perl 函数接受通用 record 参数(Andrew Dunstan)

    PL/Perl 函数现在可以声明为接受 record 类型。其行为与任何命名的组合类型相同。

  • 把 PL/Perl 的数组参数转换为 Perl 数组(Alexey Klyukin、Alex Hunsaker)

    字符串表示仍然可用。

  • 把 PL/Perl 的组合类型参数转换为 Perl 哈希(Alexey Klyukin、Alex Hunsaker)

    字符串表示仍然可用。

E.76.3.8.3. PL/Python Server-Side Language
  • 为 PL/Python 新增表函数支持(Jan Urbanski)

    PL/Python 现在可以返回多个 OUT 参数和记录集。

  • 为 PL/Python 新增验证器(Jan Urbanski)

    这允许在创建函数时对 PL/Python 函数做语法检查。

  • 允许 PL/Python 中 SQL 查询的异常(Jan Urbanski)

    这允许从 PL/Python 异常块访问 SQL 生成的异常错误码。

  • 为 PL/Python 新增显式子事务(Jan Urbanski)

  • 为 PL/Python 新增字符串加引号函数(Jan Urbanski)

    这些函数是 plpy.quote_identplpy.quote_literalplpy.quote_nullable

  • 为 PL/Python 错误添加回溯信息(Jan Urbanski)

  • PLy_elog 报告迭代器的 PL/Python 错误(Jan Urbanski)

  • 修复 Python 3 的异常处理(Jan Urbanski)

    此前在 Python 3 下 plpy 中没有异常类。

E.76.3.9. 客户端应用程序

  • 由于 createlangdroplang 现在只是调用扩展命令,将其标记为已弃用(Tom Lane)

E.76.3.9.1. psql
  • 新增 psql 命令 \conninfo,用于显示当前连接信息(David Christensen)

  • 新增 psql 命令 \sf,用于显示函数定义(Pavel Stehule)

  • 新增 psql 命令 \dL,用于列出语言(Fernando Ike)

  • psql\dn(列出模式)命令新增 Ssystem)选项(Tom Lane)

    不带 S\dn 现在会隐藏系统模式。

  • 允许 psql\e\ef 命令接受行号以定位编辑器中的光标(Pavel Stehule)

    该行号根据 PSQL_EDITOR_LINENUMBER_ARG 环境变量传递给编辑器。

  • psql 默认根据操作系统区域设置客户端编码(Heikki Linnakangas)

    这只在未设置 PGCLIENTENCODING 环境变量时发生。

  • \d 区分唯一索引和唯一约束(Josh Kupershmidt)

  • \dt+ 在连接 9.0 或更高版本服务器时报告 pg_table_size 而不是 pg_relation_size(Bernd Helmle)

    这是更有用的表大小度量,但注意它与此前同一显示中报告的值并不相同。

  • 更多 Tab 补全支持(Itagaki Takahiro、Pavel Stehule、Andrey Popp、Christoph Berg、David Fetter、Josh Kupershmidt)

E.76.3.9.2. pg_dump
  • pg_dumppg_dumpall 新增选项 --quote-all-identifiers,强制为所有标识符加引号(Robert Haas)

  • pg_dump 新增 directory 格式(Joachim Wieland、Heikki Linnakangas)

    它在内部类似于 pg_dumptar 格式。

E.76.3.9.3. pg_ctl
  • 修复 pg_ctl,使其不再错误地报告服务器未运行(Bruce Momjian)

    此前当服务器在运行但 pg_ctl 无法认证时可能发生这种情况。

  • 改进 pg_ctl start 的等待-w)选项(Bruce Momjian、Tom Lane)

    等待模式现在明显更健壮。它不会因非默认的 postmaster 端口号、非默认的 Unix 域套接字位置、权限问题或过期的 postmaster 锁文件而困惑。

  • pg_ctl 新增 promote 选项,用于把备库切换为主库(Fujii Masao)

E.76.3.10. Development Tools

E.76.3.10.1. libpq
  • 新增 libpq 连接选项 client_encoding,其行为类似于 PGCLIENTENCODING 环境变量(Heikki Linnakangas)

    auto 根据操作系统区域设置客户端编码。

  • 新增函数 PQlibVersion(),返回 libpq 库版本(Magnus Hagander)

    libpq 此前已有返回服务器版本的 PQserverVersion()

  • 允许使用 libpq 的客户端在通过 Unix 域套接字连接时检查服务器进程的用户名,使用新的 requirepeer 连接选项(Peter Eisentraut)

    PostgreSQL 此前已允许服务器在通过 Unix 域套接字连接时检查客户端用户名。

  • 为 libpq 新增 PQping()PQpingParams()(Bruce Momjian、Tom Lane)

    这些函数允许在不尝试打开新会话的情况下检测服务器状态。

E.76.3.10.2. ECPG
  • 允许 ECPG 即使在 WHERE CURRENT OF 子句中也接受动态游标名(Zoltan Boszormenyi)

  • ecpglib 以 15 位精度写 double 值,而不是此前的 14 位(Akira Kurosawa)

E.76.3.11. 构建选项

  • 对接受它的 HP-UX C 编译器使用 +Olibmerrno 编译标志(Ibrar Ahmed)

    这避免了较新 HP 平台上数学库调用可能的不当行为。

E.76.3.11.1. Makefile
  • 改进的并行 make 支持(Peter Eisentraut)

    这使编译更快。此外,make -k 现在工作得更一致。

  • 要求 GNU make 3.80 或更新版本(Peter Eisentraut)

    由于并行 make 的改进,这是必要的。

  • 新增 make maintainer-check 目标(Peter Eisentraut)

    该目标执行各种既不适合构建也不适合回归测试的源代码检查。目前包括:duplicate_oids、SGML 语法和制表符检查、NLS 语法检查。

  • contrib 中支持 make check(Peter Eisentraut)

    此前只有 make installcheck 可用,但现在支持在临时安装中测试。顶层的 make check-world 目标现在包括以这种方式测试 contrib

E.76.3.11.2. Windows
  • 在 Windows 上,允许 pg_ctl 把服务注册为自动启动或按需启动(Quan Zongliang)

  • 新增在 Windows 上收集崩溃转储的支持(Craig Ringer、Magnus Hagander)

    现在可以由非调试的 Windows 二进制生成 minidumps,并用标准调试工具分析。

  • 支持使用 MinGW64 编译器构建(Andrew Dunstan)

    这允许通过交叉编译即使在非 Windows 平台上也能构建 64 位 Windows 二进制。

E.76.3.12. 源代码

  • 修订 GUC 变量赋值钩子的 API(Tom Lane)

    此前赋值钩子的职能现在拆分到检查钩子和赋值钩子之间,前者可以失败而后者不应失败。此变更会影响定义自定义 GUC 参数的附加模块。

  • 在源代码中新增闩锁以支持等待事件(Heikki Linnakangas)

  • 集中化数据修改权限检查逻辑(KaiGai Kohei)

  • 为一致性补齐缺失的 get_object_oid() 函数(Robert Haas)

  • 通过移除冲突的关键字,改进使用 C++ 编译器编译附加模块的能力(Tom Lane)

  • 新增对 DragonFly BSD 的支持(Rumko)

  • 为后端使用公开 quote_literal_cstr()(Robert Haas)

  • 以默认编码运行回归测试(Peter Eisentraut)

    回归测试此前总是以 SQL_ASCII 编码运行。

  • 新增 src/tools/git_changelog 以取代 cvs2clpgcvslog(Robert Haas、Tom Lane)

  • src/tools 添加 git-external-diff 脚本(Bruce Momjian)

    它用于从 git 生成上下文差异。

  • 改进对使用 Clang 构建的支持(Peter Eisentraut)

E.76.3.12.1. 服务器钩子
  • 新增用于检查权限的源代码钩子(Robert Haas、Stephen Frost)

  • 新增供安全框架使用的对象创建后函数钩子(KaiGai Kohei)

  • 新增客户端认证钩子(KaiGai Kohei)

E.76.3.13. 附加模块

  • 修改 contrib 模块和过程语言,使其通过新的扩展机制安装(Tom Lane、Dimitri Fontaine)

  • 新增 contrib/file_fdw 外部数据包装器(Shigeru Hanada)

    使用这个外部数据包装器的外部表可以以非常类似于 COPY 的方式读取平面文件。

  • contrib/pg_trgmcontrib/btree_gist 新增最近邻搜索支持(Teodor Sigaev)

  • contrib/btree_gist 新增不相等搜索支持(Jeff Davis)

  • 修复 contrib/fuzzystrmatchlevenshtein() 函数,使其处理多字节字符(Alexander Korotkov)

  • contrib/sslinfo 新增 ssl_cipher()ssl_version() 函数(Robert Haas)

  • 修复 contrib/intarraycontrib/hstore,使其对索引的空数组给出一致结果(Tom Lane)

    此前使用索引的空数组查询可能返回与使用顺序扫描不同的结果。

  • contrib/intarray 在多维数组上正确工作(Tom Lane)

  • contrib/intarray 中,避免在实际不存在空值的场合报错抱怨存在空值(Tom Lane)

  • contrib/intarray 中,修复包含操作符对空数组的行为(Tom Lane)

    空数组现在被正确地视为包含于任何其他数组。

  • 移除 contrib/xml2xslt_process() 可处理的 parameter=value 对数量的任意限制(Pavel Stehule)

    此前的限制是 10。

  • contrib/pageinspect 中,修复 heap_page_item 以 32 位值返回 infomask(Alvaro Herrera)

    这避免了返回负值(那令人困惑)。底层值是 16 位无符号整数。

E.76.3.13.1. 安全
  • 新增 contrib/sepgsql,使权限检查与 SELinux 接口(KaiGai Kohei)

    它使用新的 SECURITY LABEL 机制。

  • 新增 contrib 模块 auth_delay(KaiGai Kohei)

    它使服务器在返回认证失败前暂停;其设计目的是加大暴力破解口令攻击的难度。

  • 新增 dummy_seclabel contrib 模块(KaiGai Kohei)

    它用于权限回归测试。

E.76.3.13.2. 性能
  • contrib/pg_trgm 新增 LIKEILIKE 索引搜索支持(Alexander Korotkov)

  • contrib/fuzzystrmatch 新增针对小距离优化的函数 levenshtein_less_equal()(Alexander Korotkov)

  • 改进 contrib/seg 列上索引查找的性能(Alexander Korotkov)

  • 改进 pg_upgrade 在多关系数据库下的性能(Bruce Momjian)

  • contrib/pgbench 新增报告逐语句延迟的标志(Florian Pflug)

E.76.3.13.3. fsync 测试

E.76.3.14. 文档

  • 广泛的 ECPG 文档改进(Satoshi Nagayasu)

  • 广泛的校对和文档改进(Thom Brown、Josh Kupershmidt、Susanne Ebrecht)

  • exit_on_error 添加文档(Robert Haas)

    该参数使会话在任何错误时退出。

  • pg_options_to_table() 添加文档(Josh Berkus)

    该函数以可读的形式显示表存储选项。

  • 记录可以使用 (compositeval).* 语法访问所有组合类型字段(Peter Eisentraut)

  • 记录 translate() 会删除 from 中没有对应 to 字符的字符(Josh Kupershmidt)

  • 合并 CREATE CONSTRAINT TRIGGERCREATE TRIGGER 的文档(Alvaro Herrera)

  • 集中化权限升级文档(Bruce Momjian)

  • 为 Solaris 10 添加内核调优文档(Josh Berkus)

    此前只记录了 Solaris 9 的内核调优。

  • HISTORY 文件中一致地处理非 ASCII 字符(Peter Eisentraut)

    虽然 HISTORY 文件是英文的,但我们必须处理贡献者姓名中的非 ASCII 字母。这些现在被音译,以便在不假设字符集的情况下也相当易读。

提交更正

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