E.205. 版本 7.3

发布日期: 2002-11-27

E.205.1. 概述

主要的变化有:

模式

模式允许用户在独立的命名空间中创建对象,所以两个人或应用可以有相同名字的表。 还有一个为共享表提供的公共模式。表/索引的创建可以通过在公共模式上删除权限来限制。

删除字段

PostgreSQL现在支持ALTER TABLE ... DROP COLUMN功能。

表函数

返回多个行和/或多个列的函数比以前更好用了。你可以在SELECT FROM子句中调用这样的一个"表函数", 把它的输出当做一个表。还有PL/pgSQL函数现在可以返回集合了。

预备查询

PostgreSQL现在支持预备查询,以提升性能。

依赖追踪

PostgreSQL现在记录对象依赖关系,允许了在许多方面的改进。 DROP语句现在接受CASCADERESTRICT 来控制是否删除依赖对象。

权限

函数和过程语言现在有权限了,并且函数可以定义为用它们的创建者的权限运行。

国际化

现在总是启用多字节和本地支持。

日志

各种日志选项都增强了。

接口

大量的接口已经移动到了http://gborg.postgresql.org, 在这里它们可以独立的开发和发布。

函数/标识符

缺省的,函数现在可以接受多达32个参数,标识符可以多达63个字节长度。 还有,OPAQUE现在已经废弃了:特定的"pseudo-datatypes" 在函数参数和结果类型中表示OPAQUE之前的含义。

E.205.2. 迁移到版本 7.3

那些想要从任何先前的版本中迁移数据的需要使用pg_dump的转储/恢复。 如果你的应用检索系统表,那么需要做额外的改变,由于7.3中模式的引入;要获取更多信息, 请参阅http://developer.postgresql.org/~momjian/upgrade_tips_7.3

观察下列的不一致性:

  • 不再支持6.3之前的客户端。

  • pg_hba.conf现在有一个用户名和额外特征的字段。 现存的文件需要调整。

  • 几个postgresql.conf日志参数已经重命名了。

  • LIMIT #,#已经禁用了,请使用LIMIT # OFFSET #

  • 带有字段列表的INSERT语句必须为每个声明的字段声明值。例如, INSERT INTO tab (col1, col2) VALUES ('val1')现在是非法的。 如果INSERT没有字段列表,那么仍然允许提供少于期望的字段。

  • serial字段不再自动UNIQUE;因此,不会自动创建一个索引。

  • 现在在退出的事务内部的SET命令会回滚。

  • COPY不再认为丢失的后续字段为空。需要指定所有的字段。 (不过,可以通过在COPY命令中声明一个字段列表达到相似的效果。)

  • 数据类型timestamp现在相当于timestamp without time zone, 而不是timestamp with time zone

  • 7.3之前的数据库加载到7.3将没有serial字段、唯一约束和外键的新对象依赖性。 参阅目录contrib/adddepend/获取一个详细的描述和一个添加这样的依赖性的脚本。

  • 不再允许空字符串('')作为整数字段的输入。原先,它被隐式的解释为0。

E.205.3. 修改列表

E.205.3.1. 服务器操作

  • 添加pg_locks视图以显示锁(Neil)

  • 为密码协商内存分配修复安全性(Neil)

  • 删除对版本 0 FE/BE 协议的支持(PostgreSQL 6.2和之前的版本)(Tom)

  • 为超级用户保留最后几个后端槽位,参数superuser_reserved_connections控制这个(Nigel J. Andrews)

E.205.3.2. 性能

  • 通过一次调用localtime()改善开始菜单(Tom)

  • 为快速启动在平面文件中缓存系统目录信息(Tom)

  • 改善索引信息的缓存(Tom)

  • 优化器改善(Tom, Fernando Nasser)

  • 目录缓存现在存储查找失败(Tom)

  • 改善哈希函数(Neil)

  • 提高查询标记和网络处理的性能(Peter)

  • 为大对象存储提高速度(Mario Weilguni)

  • 在第一次查询时标记过期的索引项,节省稍后的heap抓取(Tom)

  • 避免过多的NULL位图填充(Manfred Koizar)

  • 为Solaris提升性能添加BSD监听的qsort() (Bruce)

  • 通过4个字节减少每行开销(Manfred Koizar)

  • 修复GEQO优化器bug(Neil Conway)

  • 使WITHOUT OID实际上保存每行4个字节(Manfred Koizar)

  • 添加default_statistics_target变量以声明ANALYZE buckets (Neil)

  • 使用本地缓冲区缓存临时表,这样没有WAL开销(Tom)

  • 在大表上提升免费空间映射性能(Stephen Marshall, Tom)

  • 提升了WAL写的并发性(Tom)

E.205.3.3. 权限

  • 在函数和过程语言上添加权限(Peter)

  • 添加OWNER到CREATE DATABASE,这样超级用户可以代表非特权用户创建数据库(Gavin Sherry, Tom)

  • 添加新对象权限位EXECUTE 和 USAGE (Tom)

  • 添加SET SESSION AUTHORIZATION DEFAULT 和 RESET SESSION AUTHORIZATION (Tom)

  • 允许用函数所有者的权限执行函数(Peter)

E.205.3.4. 服务器配置

  • 现在服务器日志信息标记为LOG,不是DEBUG (Bruce)

  • 添加用户字段到pg_hba.conf (Bruce)

  • log_connections在日志文件中输出两行信息(Tom)

  • 从postgresql.conf中移除debug_level,现在是server_min_messages (Bruce)

  • 为每用户/数据库初始化新建ALTER DATABASE/USER ... SET命令(Peter)

  • 新参数server_min_messages 和 client_min_messages控制哪条信息发送给服务器日志和客户端应用(Bruce)

  • 允许pg_hba.conf声明逗号隔开的用户/数据库列表,前置+的分组名和前置@的文件名(Bruce)

  • 移除二次密码文件功能和pg_password工具(Bruce)

  • 为数据库本地用户名添加变量db_user_namespace (Bruce)

  • 改善SSL (Bear Giles)

  • 使默认的存储密码加密(Bruce)

  • 允许pg_statistics通过调用pg_stat_reset()重置 (Christopher)

  • 添加log_duration 参数 (Bruce)

  • 将debug_print_query重命名为log_statement (Bruce)

  • 将show_query_stats 重命名为 show_statement_stats (Bruce)

  • 添加了参数log_min_error_statement到错误时输出到日志的命令(Gavin)

E.205.3.5. 查询

  • 使游标不敏感,意味着不改变它们的内容(Tom)

  • 禁用 LIMIT #,# 语法;现在只支持 LIMIT # OFFSET # (Bruce)

  • 增加标识符长度为63(Neil, Bruce)

  • UNION修复了合并不同长度的 >= 3 字段(Tom)

  • 添加DEFAULT关键字到 INSERT, e.g., INSERT ... (..., DEFAULT, ...) (Rod)

  • 通过使用ALTER COLUMN ... SET DEFAULT允许视图有缺省值(Neil)

  • 未能INSERT没有提供所有字段值的字段列表,如:INSERT INTO tab (col1, col2) VALUES ('val1'); (Rod)

  • 修复join别名(Tom)

  • 修复了FULL OUTER JOINs (Tom)

  • 改善无效标识符和位置的报告(Tom, Gavin)

  • 修复 OPEN cursor(args) (Tom)

  • 允许'ctid'在视图和currtid(viewname)中使用 (Hiroshi)

  • 修复CREATE TABLE AS with UNION (Tom)

  • SQL99语法改善(Thomas)

  • 添加statement_timeout变量到取消查询(Bruce)

  • 允许预备查询PREPARE/EXECUTE (Neil)

  • 允许FOR UPDATE出现在LIMIT/OFFSET后面(Bruce)

  • 添加变量自动提交(Tom, David Van Wie)

E.205.3.6. 对象操作

  • 在 CREATE DATABASE 中使等号可选(Gavin Sherry)

  • 使ALTER TABLE OWNER也改变索引的所有者(Neil)

  • 新的ALTER TABLE tabname ALTER COLUMN colname SET STORAGE controls TOAST storage,压缩(John Gray)

  • 添加模式支持, CREATE/DROP SCHEMA (Tom)

  • 为临时表创建模式(Tom)

  • 为模式搜索添加变量search_path (Tom)

  • 添加了ALTER TABLE SET/DROP NOT NULL (Christopher)

  • 新建CREATE FUNCTION波动水平(Tom)

  • 使规则名只在每个表中唯一(Tom)

  • 添加'ON tablename'子句到DROP RULE 和 COMMENT ON RULE (Tom)

  • 添加ALTER TRIGGER RENAME (Joe)

  • 新加current_schema() 和 current_schemas()查询功能(Tom)

  • 允许函数返回多行(表函数)(Joe)

  • 为了一致性,使WITH在CREATE DATABASE中可选(Bruce)

  • 添加对象依赖追踪(Rod, Tom)

  • 添加RESTRICT/CASCADE到DROP命令 (Rod)

  • 为非检查约束添加ALTER TABLE DROP (Rod)

  • 自动破坏带有SERIAL的表的DROP时顺序(Rod)

  • 如果字段被外键使用那么阻止删除该字段(Rod)

  • 当删除了对象时,自动删除约束/函数(Rod)

  • 添加了CREATE/DROP OPERATOR CLASS (Bill Studenmund, Tom)

  • 添加了ALTER TABLE DROP COLUMN (Christopher, Tom, Hiroshi)

  • 阻止继承的字段被删除或重命名(Alvaro Herrera)

  • 修复外键约束在中间的数据状态时没有错误(Stephan)

  • 传播列或表重命名为外键约束

  • 添加CREATE OR REPLACE VIEW (Gavin, Neil, Tom)

  • 添加CREATE OR REPLACE RULE (Gavin, Neil, Tom)

  • 使规则按照字母顺序执行,返回更可预见的值(Tom)

  • 触发器现在按照字母顺序触发(Tom)

  • 添加/contrib/adddepend以处理7.3之前的对象依赖(Rod)

  • 当插入/更新值时允许更好的转换(Tom)

E.205.3.7. 实用命令

  • COPY TO输出内嵌回车符,新行为\r 和 \n (Tom)

  • 允许COPY FROM中的DELIMITER是8位的(Tatsuo)

  • 为了性能,使pg_dump 使用 ALTER TABLE ADD PRIMARY KEY (Neil)

  • 在多重语句规则中禁用括号 (Bruce)

  • 禁止在一个函数内部调用VACUUM (Bruce)

  • 允许dropdb和其他脚本使用带有空格的标识符(Bruce)

  • 限制数据库注释更改为当前数据库

  • 允许在操作符上注释,不依赖于潜在的函数(Rod)

  • 在退出的事务中回滚SET命令(Tom)

  • EXPLAIN现在作为查询输出(Tom)

  • 显示条件查询和EXPLAIN中排序键(Tom)

  • 为单个事务添加'SET LOCAL var = value'以设置配置变量(Tom)

  • 允许ANALYZE运行在一个事务中(Bruce)

  • 用新的WITH子句改善COPY语法,保持向后兼容性(Bruce)

  • 修复pg_dump在非ASCII转储中一致的输出标签(Bruce)

  • 使外键约束在转储文件中更清晰(Rod)

  • 添加COMMENT ON CONSTRAINT (Rod)

  • 允许COPY TO/FROM声明字段名(Brent Verner)

  • 将UNIQUE 和 PRIMARY KEY约束作为ALTER TABLE转储(Rod)

  • SHOW输出一个查询结果(Joe)

  • 生成错误在短的COPY行上而不是在填充的NULL上(Neil)

  • 修复CLUSTER保留所有的表属性(Alvaro Herrera)

  • 新建pg_settings表以查看/修改GUC设置(Joe)

  • 添加智能引用,可移植性提升至pg_dump输出(Peter)

  • 作为SERIAL转储出序列字段(Tom)

  • 启用大文件支持,pg_dump >2G (Peter, Philip Warner, Bruce)

  • 禁止在包含在参考约束中的表上TRUNCATE (Rod)

  • 使TRUNCATE也自动截断关系的toast表 (Tom)

  • 添加clusterdb实用将自动集群基于先前CLUSTER操作的全部数据库(Alvaro Herrera)

  • 彻底检查pg_dumpall (Peter)

  • 允许对TOAST表进行REINDEX (Tom)

  • 应用START TRANSACTION, 每个 SQL99 (Neil)

  • 当页分裂影响容量删除时修复罕见的索引损坏(Tom)

  • 为继承修复ALTER TABLE ... ADD COLUMN(Alvaro Herrera)

E.205.3.8. 数据类型和函数

  • 修复factorial(0)返回1 (Bruce)

  • 改善Date/time/timezone (Thomas)

  • 修复数组切片提取(Tom)

  • 修复extract/date_part为时间戳报告适当的微秒(Tatsuo)

  • 允许text_substr() 和 bytea_substr()更有效的读取TOAST值(John Gray)

  • 添加域支持(Rod)

  • 使WITHOUT TIME ZONE为TIMESTAMP和TIME数据类型的缺省(Thomas)

  • 在配置中使用--enable-integer-datetimes允许64位整数交替日期/时间类型存储模式(Thomas)

  • 使timezone(timestamptz)返回时间戳而不是一个字符串(Thomas)

  • 时间的日期/时间类型中允许小数秒在1BC之前(Thomas)

  • 限制时间戳数据类型精度为6个小数位(Thomas)

  • 更改时区转换函数timetz()为timezone() (Thomas)

  • 添加配置变量数据类型和时区(Tom)

  • 添加OVERLAY(),允许替换字符串的子串(Thomas)

  • 添加SIMILAR TO (Thomas, Tom)

  • 添加正规表达式SUBSTRING(string FROM pat FOR escape) (Thomas)

  • 添加LOCALTIME 和 LOCALTIMESTAMP 函数 (Thomas)

  • 使用CREATE TYPE typename AS (column)添加命名的复合类型(Joe)

  • 允许在表别名子句中定义复合类型(Joe)

  • 添加新的API以简化C语言表函数的创建(Joe)

  • 从对SQL99函数的调用中删除ODBC兼容的空括号,因为这些括号不匹配标准(Thomas)

  • 允许macaddr数据类型接受12个带有分隔符的十六进制数字(Mike Wyer)

  • 添加CREATE/DROP CAST (Peter)

  • 添加IS DISTINCT FROM 操作 (Thomas)

  • 添加SQL99 TREAT()函数,CAST()的同义词(Thomas)

  • 添加pg_backend_pid()输出后端pid (Bruce)

  • 添加IS OF / IS NOT OF类型谓词 (Thomas)

  • 允许位字符串常量不是完全指定的长度(Thomas)

  • 允许在8字节整数和位字符串之间转换(Thomas)

  • 实现十六进制文字转换为位字符串文字(Thomas)

  • 允许表函数显示在FROM子句中(Joe)

  • 增加函数参数的最大数量为32 (Bruce)

  • 不再为SERIAL字段自动创建索引(Tom)

  • 添加current_database() (Rod)

  • 修复cash_words()不溢出缓存(Tom)

  • 添加函数replace(), split_part(), to_hex() (Joe)

  • 为bytea修复LIKE为右参数(Joe)

  • 阻止SELECT cash_out(2)导致的崩溃(Tom)

  • 修复to_char(1,'FM999.99')返回一个时期(Karel)

  • 修复返回OPAQUE的触发器/类型/语言函数返回合适的类型(Tom)

E.205.3.9. 国际化

  • 添加额外的编码: Korean (JOHAB), Thai (WIN874), Vietnamese (TCVN), Arabic (WIN1256), Simplified Chinese (GBK), Korean (UHC) (Eiji Tokuya)

  • 缺省启用本地支持(Peter)

  • 添加语言环境变量(Peter)

  • 在PQescapeBytea/PQunescapeBytea中为多字节逃逸byes >= 0x7f (Tatsuo)

  • 添加语言环境意识到规则表达式字符类

  • 缺省启用多字节支持(Tatsuo)

  • 添加GB18030多字节支持(Bill Huang)

  • 添加CREATE/DROP CONVERSION,允许可加载的编码(Tatsuo, Kaori)

  • 添加pg_conversion表(Tatsuo)

  • 添加SQL99 CONVERT()函数(Tatsuo)

  • pg_dumpall, pg_controldata, 和 pg_resetxlog现在国家语言意识(Peter)

  • 新的和更新的翻译

E.205.3.10. 服务器端语言

  • 允许递归的SQL函数(Peter)

  • 更改PL/Tcl构造以使用配置的编译器和Makefile.shlib (Peter)

  • 彻底检查PL/pgSQL FOUND变量,使其更加Oracle兼容(Neil, Tom)

  • 允许PL/pgSQL处理引用的标识符(Tom)

  • 允许设置返回PL/pgSQL函数 (Neil)

  • 使PL/pgSQL意识到模式(Joe)

  • 删除一些内存溢出(Nigel J. Andrews, Tom)

E.205.3.11. psql

  • 为了与7.2.0兼容,不要小写psql \connect数据库名(Tom)

  • 添加psql \timing到用户查询时间(Greg Sabino Mullane)

  • 使psql \d显示索引信息(Greg Sabino Mullane)

  • 新建psql \dD显示域(Jonathan Eisler)

  • 允许psql在视图上显示规则(Paul ?)

  • 修复psql变量替换(Tom)

  • 允许psql \d显示临时表结构(Tom)

  • 允许psql \d显示外键(Rod)

  • 修复\?以纪念\pset pager (Bruce)

  • 使psql在启动时报告它的版本号(Tom)

  • 允许\copy指定字段名(Tom)

E.205.3.12. libpq

  • 添加~/.pgpass存储主机/用户密码组合(Alvaro Herrera)

  • 添加PQunescapeBytea()函数到libpq (Patrick Welche)

  • 修复在非阻塞连接上发送大查询(Bernhard Herzog)

  • 修复libpq在Win9X上使用定时器(David Ford)

  • 允许libpq通知用不同长度的标识符处理服务器(Tom)

  • 添加libpq PQescapeString() 和 PQescapeBytea()到Windows (Bruce)

  • 用非阻塞连接修复SSL (Jack Bates)

  • 添加libpq连接超时参数(Denis A Ustimenko)

E.205.3.13. JDBC

  • 允许JDBC用JDK 1.4编译(Dave)

  • 添加JDBC 3支持(Barry)

  • 允许JDBC通过添加?loglevel=X到连接的URL来设置日志级别(Barry)

  • 添加Driver.info()信息,输出版本号(Barry)

  • 添加可更新的结果集(Raghu Nidagal, Dave)

  • 添加对可调用语句的支持(Paul Bethe)

  • 添加查询取消能力

  • 添加立即刷新(Dave)

  • 修复MD5加密处理多字节服务器(Jun Kawai)

  • 添加对预备语句的支持(Barry)

E.205.3.14. 各种接口

E.205.3.15. 源码

  • 修复并行进行(Peter)

  • AIX修复了连接Tcl (Andreas Zeugswetter)

  • 允许PL/Perl在Cygwin下建立(Jason Tishler)

  • 改善MIPS编译(Peter, Oliver Elphick)

  • 需要Autoconf版本2.53 (Peter)

  • 需要在配置中缺省有readline 和 zlib (Peter)

  • 为了性能,允许Solaris使用Intimate Shared Memory (ISM) (Scott Brunza, P.J. Josh Rovero)

  • 在编译时总是启用系统日志,删除--enable-syslog选项(Tatsuo)

  • 在编译时总是启用多字节,删除--enable-multibyte选项(Tatsuo)

  • 在编译时总是启用区域设置,删除--enable-locale选项(Peter)

  • 修复Win9x DLL创建(Magnus Naeslund)

  • 通过WAL代码在Windows、BeOS上修复link() (Jason Tishler)

  • 添加sys/types.h 到 c.h,并从主文件中删除(Peter, Bruce)

  • 修复AIX挂在SMP机器上(Tomoyuki Niijima)

  • AIX SMP 挂修复(Tomoyuki Niijima)

  • 修复1970以前的日期在新的glibc库上处理(Tom)

  • 修复PowerPC SMP锁定(Tom)

  • 阻止使用gcc -ffast-math (Peter, Tom)

  • Bison >= 1.50现在需要开发者建立

  • Kerberos 5 支持现在创建时带有Heimdal (Peter)

  • 在列出SQL特性的用户手册中添加附录(Thomas)

  • 改善可加载的模块连接到使用RTLD_NOW (Tom)

  • 新的错误级别WARNING, INFO, LOG, DEBUG[1-5] (Bruce)

  • 新建src/port目录保存替换的libc函数(Peter, Bruce)

  • 为模式新建pg_namespace系统目录(Tom)

  • 为模式添加pg_class.relnamespace(Tom)

  • 为模式添加pg_type.typnamespace (Tom)

  • 为模式添加pg_proc.pronamespace (Tom)

  • 调整聚合有pg_proc条目(Tom)

  • 系统关系现在有了它们自己的命名空间,不再需要pg_* test (Fernando Nasser)

  • 重命名TOAST索引为_index而不是_idx (Neil)

  • 为操作符、操作符类添加命名空间(Tom)

  • 添加额外的检查到服务器控制文件(Thomas)

  • 新增Polish FAQ (Marcin Mazurek)

  • 添加Posix信号灯支持(Tom)

  • 文档需要重建索引(Bruce)

  • 重命名一些内部的标识符以简化Windows编译(Jan, Katherine Ward)

  • 添加计算磁盘空间的文件(Bruce)

  • 从GUC中删除KSQO(Bruce)

  • 修复rtree中的内存溢出(Kenneth Been)

  • 为一致性修复一些错误消息(Bruce)

  • 删除未使用的系统表字段(Peter)

  • 在适当的地方使系统字段为NOT NULL (Tom)

  • 为了支持snprintf()清除snprintf的使用(Neil, Jukka Holappa)

  • 删除OPAQUE创建特定的子类型(Tom)

  • 在数组内部处理清理(Joe, Tom)

  • 不允许pg_atoi('') (Bruce)

  • 删除参数wal_files因为WAL文件现在回收利用了(Bruce)

  • 添加版本号到heap页(Tom)

E.205.3.16. 贡献包

  • /contrib/array中允许inet数组(Neil)

  • GiST 修复 (Teodor Sigaev, Neil)

  • 升级/contrib/mysql

  • 添加/contrib/dbsize,它显示了没有vacuum的表大小(Peter)

  • 添加/contrib/intagg,整数聚合器例程(mlw)

  • 改善/contrib/oid2name (Neil, Bruce)

  • 改善/contrib/tsearch (Oleg, Teodor Sigaev)

  • 清理/contrib/rserver (Alexey V. Borzov)

  • 更新/contrib/oracle转换实用程序(Gilles Darold)

  • 更新/contrib/dblink (Joe)

  • 改善/contrib/vacuumlo支持的选项(Mario Weilguni)

  • 改善/contrib/intarray (Oleg, Teodor Sigaev, Andrey Oktyabrski)

  • 添加/contrib/reindexdb实用程序(Shaun Thomas)

  • 添加索引到/contrib/isbn_issn (Dan Weston)

  • 添加/contrib/dbmirror (Steven Singer)

  • 改善/contrib/pgbench (Neil)

  • 添加/contrib/tablefunc表函数示例(Joe)

  • 为树形结构添加/contrib/ltree数据类型(Teodor Sigaev, Oleg Bartunov)

  • 移动/contrib/pg_controldata, pg_resetxlog到主树里(Bruce)

  • 修复/contrib/cube (Bruno Wolff)

  • 改善/contrib/fulltextindex (Christopher)