PostgreSQL 9.4

主要特性

  • 添加了 ALTER SYSTEM 命令 (commit 65d6e4cb)
  • 支持 逻辑解码 (commit b89e1510)
  • 添加了 复制槽 (initial commit 858ec118)
  • 后台工作进程 (background workers) 可以动态注册、启动和终止 (commit 7f7485a0)
  • 添加了 jsonb 数据类型 (initial commit d9134d0a)

后端更改

可加载模块

  • 标记为 PG_FUNCTION_INFO_V1 的函数不再需要函数原型 (commit e7128e8d)

内存管理

  • 添加了 Linux huge TLB 页支持 (initial commit 1a3458b6)

性能

  • 以下 ALTER TABLE 命令不再需要 ACCESS EXCLUSIVE 锁 (commit e5550d5f)
    • ALTER COLUMN [RE]SET attribute_option
    • ALTER COLUMN SET STATISTICS
    • CLUSTER ON
    • SET WITHOUT CLUSTER
    • VALIDATE CONSTRAINT

存储参数

  • 添加了 user_catalog_table (commit 66abc260)

系统目录

  • 允许修改 pg_catalog schema 中的用户定义表 (commit 8e18d04d)

触发器

  • 事件触发器
    • 添加了对 PL/Tcl 事件触发器函数 (event trigger functions) 的支持 (commit a5036ca9)
    • 添加了对 PL/Perl 事件触发器函数 (event trigger functions) 的支持 (commit e5dc4cc2)

视图

  • 物化视图 (materialized views) 可以并发刷新 (commit cc1965a9)
  • 添加了 check_option 选项 (commit 4cbe3ac3)
  • 包含不可更新列的视图可以自动更新 (commit cab5dc5d)
  • 安全屏障视图 (security barrier views) 可以更新 (commit 842faa71)

源配置

  • 添加了 --enable-tap-tests 选项 (commit 16381b2a)
  • 添加了 --with-extra-version 选项 (commit 46328916)
  • 移除了 --with-krb5 选项 (commit 98de86e4)

支持的平台变更

  • 移除了 IRIX 支持 (commit ea91a6be)

SQL 更改

通用

  • 添加了 WITH ORDINALITY 语法 (commit c62736cc)
  • 聚合函数调用的 FILTER 子句 (commit b560ec1b)
  • 支持有序集 (WITHIN GROUP) 聚合 (commit 8d65da1f)
  • 支持 VARIADIC 聚合函数 (commit 0d3f4406)
  • 多态聚合 (polymorphic aggregates) 可以拥有非多态状态数据类型 (commit f0fedfe8)

已修改

  • ALTER AGGREGATE
    • 支持 VARIADIC 聚合函数(提交 0d3f4406
    • 支持有序集(WITHIN GROUP)聚合函数(提交 8d65da1f
  • ALTER FOREIGN TABLE
    • 添加了启用/禁用触发器的支持 (commit 7cbe57c3)
  • ALTER INDEX
    • 添加了 ALTER INDEX ... ALL IN TABLESPACE ... 语法 (initial commit fbe19ee3)
  • ALTER MATERIALIZED VIEW
    • 添加了 ALTER MATERIALIZED VIEW ALL IN TABLESPACE ... SET TABLESPACE ... 语法 (commit d9b2bc45)
  • ALTER TABLE
    • 添加了 ALTER TABLE ... ALL IN TABLESPACE ... 语法 (initial commit fbe19ee3)
    • 添加了 ALTER TABLE ... REPLICA IDENTITY ... 语法 (initial commit 07cacba9)
  • COPY
    • 添加了 FORCE NULL 选项 (commit 3b5e03dc)
    • 加速了向带有 DEFAULT nextval() 的表进行 COPY 操作 (commit 4d1e2aeb)
  • CREATE AGGREGATE
    • 添加了用于移动聚合优化的选项 (commit a9d9acbf)
    • 添加了启用多态聚合拥有非多态状态数据类型的选项 (commit f0fedfe8)
    • 支持 VARIADIC 聚合函数(提交 0d3f4406
    • 支持有序集(WITHIN GROUP)聚合函数(提交 8d65da1f
    • 添加了 SSPACE 选项,用于提供聚合状态值的大致平均大小 (commit 6cb86143)
  • CREATE TABLESPACE
    • 添加了 CREATE TABLESPACE ... WITH ( options ) 语法 (commit 5254958e)
  • CREATE VIEW
    • 添加了 WITH [ CASCADED | LOCAL ] CHECK OPTION 语法 (commit 4cbe3ac3)
  • 放弃
    • 添加了 DISCARD SEQUENCES 语法 (commit d90ced8b)
  • DROP AGGREGATE
    • 支持 VARIADIC 聚合 (commit 0d3f4406)
  • EXPLAIN
    • EXPLAIN ANALYZE 现在显示规划时间 (commit 9347baa5)
    • EXPLAIN ANALYZE 现在显示位图堆扫描中的精确块计数和丢失块计数 (commit 2bb1f14b)
    • total runtime 标签重命名为 execution time (commit 5f86cbd7)
    • 现在显示 AggGroup 节点中的分组列 (commit f2609905)
  • REFRESH MATERIALIZED VIEW
    • 添加了 REFRESH MATERIALIZED VIEW CONCURRENTLY (commit cc1965a9)
  • SET
    • SET LOCAL ... 在事务块外部执行时,将发出 WARNING(而不是 ERROR)(commit a6542a4b)
  • SET CONSTRAINTS
    • 当在事务块外执行时,会发出 WARNING(而不是 ERROR)(提交 a6542a4b
  • SET TRANSACTION
    • 当在事务块外执行时,会发出 WARNING(而不是 ERROR)(提交 a6542a4b

WAL 变更

数据类型

已添加

系统目录更改

已修改

视图

已添加

已修改

系统函数更改

已添加

已修改

配置更改

已添加

已修改

索引更改

GIN

  • 通过压缩 GIN 词条列表,减小了索引大小 (commit 36a35c55)
  • 多键查找速度得到改进 (commits e2c070cb, 25b1dafa and 626a1206)
  • 在一个项稀少而另一个项频繁的情况下,搜索速度得到改进 (commit dbc649fd)

认证更改

SSL

Kerberos

  • 移除了原生的 Kerberos 支持 (commit 98de86e4)

复制更改

复制配置变更

已添加

libpq 更改

  • 添加了函数 PQhostaddr() (commit 9f80f483)
  • 函数 PQconndefaults() 现在会忽略无效的服务文件(commit 9e0a97f1
  • 支持 TLS 协议版本超越 TLSv1(commit 820f08ca)

ECPG 更改

  • sizeof() 运算符可以用作数组的维度(commit 08d1b22b)
  • 在 C 和 SQL 中正确处理嵌套的 C 风格注释(commit 05b476c2)

过程语言更改

PL/pgSQL

  • 可以使用 GET DIAGNOSTICS 来检索当前的 PL/pgSQL 调用堆栈(commit 83128325)
  • 用于显示违反 STRICT 约束的查询所传入参数的 print_strict_params 选项(commit 689746c0)
  • 用于启用其他 PL/pgSQL 警告和错误的配置参数 plpgsql.extra_warningsplpgsql.extra_errors(commit 7d8f1de1)

PL/Perl

  • 添加了对事件触发器函数 (event trigger functions) 的支持(commit e5dc4cc2)

PL/Python

  • PostgreSQL numeric 值现在转换为 Python decimal(commit 7919398b)

PL/Tcl

  • 添加了对事件触发器函数 (event trigger functions) 的支持(commit a5036ca9)

外部数据包装器更改

  • 外表 (foreign tables) 添加了 trigger 支持(commit 7cbe57c3)

信息模式

  • 向视图 information_schema.parameters 添加了 parameter_default 列(commit 85ed91ee)
  • 视图 information_schema.schemata 现在显示所有可访问的 schema,而不仅仅是当前用户拥有的 schema(commit b34f8f40)

服务器实用程序

已修改

  • initdb
    • 现在会为不正确的 locale 设置抛出错误,而不是默默回退到默认设置(commit 31a26323)
  • pg_ctl
    • 如果指定的数据目录不可访问,现在会返回退出码 4(commit 11d205e2)
  • pg_xlogdump
    • 添加了 --follow 选项,可以报告实时日志流

核心实用程序

已添加

已修改

psql

  • SSL 压缩状态现在显示在登录横幅中 (commit d3c98069)
  • \pset 不带参数现在显示所有设置 (commit c64e68fd)

Contrib模块

已添加

已修改

  • auto_explain
    • 添加了 auto_explain.log_trigger 选项,用于记录触发器执行时间(commit e2a0fc53)
  • cube
    • 数据存储更紧凑(commit 08612f45)
  • file_fdw
    • 添加了 force_null 选项 (commit 3b5e03dc)
  • hstore
    • 添加了以下函数 (commit d9134d0a)
      • hstore_to_jsonb()
      • hstore_to_jsonb_loose()
  • pgbench
    • 添加了 --rate 选项 (initial commit fc9f4e9f)
    • 添加了 --progress 选项 (initial commit 4a87f308)
    • 移除了自定义脚本文件中的硬编码行长度限制(commit 61a07bae)
    • 添加了长选项(commit 79cddb18)
  • pgcrypto
    • 添加了函数 gen_random_uuid() (commit e6170126)
  • pg_stat_statements
    • 查询文本存储在文件中 (commit f0d6f202)
    • 记录可以返回,而无需查询文本(commit f0d6f202)
    • 公开了内部查询哈希标识符 (commit 91484409)
    • DEALLOCATE 不再被跟踪(commit 3cd934f6)
    • 统计信息文件保存在 pg_stat 目录而不是 global 目录(commit 654e8e44)
  • pgstattuple
    • 函数已转换为使用 regclass 类型作为参数(commit 1dc11866)
    • 未提交事务中的行不再计为死行(commit 80c79ab2)
  • pg_trgm
    • 改进了正则表达式索引搜索的启发式算法(commit 80a5cf64)
  • pg_upgrade
    • 选项 -u/--user 重命名为 -U/--username,以与其他工具保持一致(commit 457d6cf0)
    • 内存消耗大幅降低(commit 2a2e40aa)
  • pg_xlogdump
    • 添加了 --follow 选项,可以报告实时日志流(commit ce9bb92f)
  • postgres_fdw
    • 通过改进对与排序相关的决定的处理,将 VARCHAR 列的下推扩展到更广的范围(commit 76f965ff)
  • uuid-ossp
    • 添加了对 BSD 和 e2fsprogs UUID 库的支持(commit b8cc8f94)
  • vacuumlo
    • 使用游标来限制客户端内存使用(commit 67ccbb08)

测试

预发布测试版本

标志着 PostgreSQL 9.4 开发开始的初始提交是 58ae1f45 (2013-06-14)。