E.273. 版本 7.3
发布日期: 2002-11-27
E.273.1. 概述
主要的变化有:
- 模式
模式允许用户在独立的命名空间中创建对象,所以两个人或应用可以有相同名字的表。 还有一个为共享表提供的公共模式。表/索引的创建可以通过在公共模式上删除权限来限制。
- 删除字段
PostgreSQL现在支持ALTER TABLE ... DROP COLUMN功能。
- 表函数
返回多个行和/或多个列的函数比以前更好用了。你可以在SELECT FROM子句中调用这样的一个"表函数", 把它的输出当做一个表。还有PL/pgSQL函数现在可以返回集合了。
- 预备查询
PostgreSQL现在支持预备查询,以提升性能。
- 依赖追踪
PostgreSQL现在记录对象依赖关系,允许了在许多方面的改进。 DROP语句现在接受CASCADE 或 RESTRICT 来控制是否删除依赖对象。
- 权限
函数和过程语言现在有权限了,并且函数可以定义为用它们的创建者的权限运行。
- 国际化
现在总是启用多字节和本地支持。
- 日志
各种日志选项都增强了。
- 接口
大量的接口已经移动到了http://gborg.postgresql.org, 在这里它们可以独立的开发和发布。
- 函数/标识符
缺省的,函数现在可以接受多达32个参数,标识符可以多达63个字节长度。 还有,OPAQUE现在已经废弃了:特定的"pseudo-datatypes" 在函数参数和结果类型中表示OPAQUE之前的含义。
E.273.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.273.3. 修改列表
E.273.3.1. 服务器操作
添加pg_locks视图以显示锁(Neil)
为密码协商内存分配修复安全性(Neil)
删除对版本 0 FE/BE 协议的支持(PostgreSQL 6.2和之前的版本)(Tom)
为超级用户保留最后几个后端槽位,参数superuser_reserved_connections控制这个(Nigel J. Andrews)
E.273.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.273.3.3. 权限
在函数和过程语言上添加权限(Peter)
添加OWNER到CREATE DATABASE,这样超级用户可以代表非特权用户创建数据库(Gavin Sherry, Tom)
添加新对象权限位EXECUTE 和 USAGE (Tom)
添加SET SESSION AUTHORIZATION DEFAULT 和 RESET SESSION AUTHORIZATION (Tom)
允许用函数所有者的权限执行函数(Peter)
E.273.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.273.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.273.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.273.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.273.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.273.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.273.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.273.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.273.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.273.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.273.3.14. 各种接口
修复ECPG bug,关于单引号中的八进制数字(Michael)
引动src/interfaces/libpgeasy到http://gborg.postgresql.org (Marc, Bruce)
改善Python接口(Elliot Lee, Andrew Johnson, Greg Copeland)
添加libpgtcl连接关闭事件(Gerhard Hintermayer)
移动src/interfaces/libpq++到http://gborg.postgresql.org (Marc, Bruce)
移动src/interfaces/odbc到http://gborg.postgresql.org (Marc)
移动src/interfaces/libpgeasy到http://gborg.postgresql.org (Marc, Bruce)
移动src/interfaces/perl5到http://gborg.postgresql.org (Marc, Bruce)
从主干上删除src/bin/pgaccess,现在在http://www.pgaccess.org (Bruce)
添加pg_on_connection_loss命令到libpgtcl (Gerhard Hintermayer, Tom)
E.273.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.273.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)