E.44. Postgres95版本 0.03

发布日期: 1995-07-21

E.44.1. 修改列表

不兼容的变化:
 * BETA-0.3 IS INCOMPATIBLE WITH DATABASES CREATED WITH PREVIOUS VERSIONS
   (due to system catalog changes and indexing structure changes).
 * double-quote (") is deprecated as a quoting character for string literals;
   you need to convert them to single quotes ('). 
 * name of aggregates (eg. int4sum) are renamed in accordance with the
   SQL standard (eg. sum).
 * CHANGE ACL syntax is replaced by GRANT/REVOKE syntax.
 * float literals (eg. 3.14) are now of type float4 (instead of float8 in
   previous releases); you might have to do typecasting if you depend on it
   being of type float8.  If you neglect to do the typecasting and you assign
   a float literal to a field of type float8, you may get incorrect values
   stored!
 * LIBPQ has been totally revamped so that frontend applications
   can connect to multiple backends
 * the usesysid field in pg_user has been changed from int2 to int4 to
   allow wider range of Unix user ids.
 * the netbsd/freebsd/bsd o/s ports have been consolidated into a
   single BSD44_derived port.  (thanks to Alistair Crooks)

SQL 标准兼容(下列详细的改变令 postgres95 与 SQL-92 标准更加兼容)∶
 * 下面的 SQL 类型现在是内置的了:smallint, int(eger), float, real,
   char(N), varchar(N), date 和 time。

   下面的是现有 postgres 类型的别名:
		smallint -> int2
		integer, int -> int4
		float, real  -> float4
   char(N) 和 varchar(N) 是用截断的 text 类型实现的。另外,
   char(N) 会填充空白。 
 * 单引号(')包围字串文本;支持使用''(以及 \')作为在字串中插入单引号的方法
 * 使用了 SQL 标准的聚集名字(MAX,MIN,AVG,SUM,COUNT)
   (还有,聚集现在可以重载了,也就是说,你可以定义你自己的接受用户定义类型的 MAX 函数。)
 * CHANGE ACL removed. GRANT/REVOKE syntax added.  
   - Privileges can be given to a group using the "GROUP" keyword.
	For example:
		GRANT SELECT ON foobar TO GROUP my_group;
	The keyword 'PUBLIC' is also supported to mean all users.	

	Privileges can only be granted or revoked to one user or group
	at a time.  

	"WITH GRANT OPTION" is not supported.  Only class owners can change
	access control
   - The default access control is to to grant users readonly access.
     You must explicitly grant insert/update access to users.  To change
     this, modify the line in 
		src/backend/utils/acl.h 
     that defines ACL_WORLD_DEFAULT 

修补:
 * 不能在聚集函数里使用空表的毛病已经fix掉了。现在,
   在空表上运行的聚集将返回聚集的初始状态。因此,在空表上 COUNT 将正确地返回 0。
   一个空表地 MAX/MIN 将返回一条为 NULL 的元组。
 * 允许在 SQL 界面里使用 \;
 * LISTEN/NOTIFY 异步通知机制现在可以用了
 * 规则动作体里面的 NOTIFY 现在可以用了
 * 散列索引可以用了,并且通常来说,访问方法应该运行得更好了。
   大索引的创建应该更快。(感谢 Paul Aoki)

其它修改和增强:
 * 增加了一个 EXPLAIN 语句,用于解析查询执行规划(比如,"EXPLAIN SELECT * FROM EMP"
   打印该查询的执行规划。
 * WARN 和 NOTICE 消息上不再有时间戳。么打开错误消息的时间戳,把
   src/backend/utils/elog.h    里面的下面这行注释掉:
	/* define ELOG_TIMESTAMPS */ 
 * 在出现权限违反的时候,会给出
	"Either no such class or insufficient privilege"
   消息。如果没有找到某个表,也会返回这个信息。这样就避免了非特权用户
   猜测特权表的存在。
 * 做了一些额外的用户不可见的系统表修改。

libpgtcl 修改:
 * 向 "pg_result" tcl 命令中增加了 -oid 选项。
   pg_result -oid 返回最后插入的元组的 oid。如果最后的命令不是 INSERT,
   那么 pg_result -oid 返回 ""。
 * 大对象接口可以以 pg_lo* tcl 命令的形式获得:
   pg_lo_open,pg_lo_close,pg_lo_creat,等。

可移植性增强和新的移植:
 * flex/lex 的问题已经清理干净了。现在你应该能够在任何平台上使用 flex 代替 lex。
   我们不再基于你使用的平台假设你使用的是什么词法分析器(lexer)。
   
 * 现在支持 Linux-ELF 移植了。测试了多种配置: 
   下列配置是一定可以运行的:
	kernel 1.2.10, gcc 2.6.3, libc 4.7.2, flex 2.5.2, bison 1.24
   所有东西都是 ELF 格式,

新应用:
 * ipcclean 加入发布之中
   通常不需要运行 ipcclean,但是如果你的后端崩苦,留下挂着的共享内存段,
   那么 ipcclean 可以为你清理这些东西。

新文档:
 * 修改了用户手册,增加了 libpq 的文档。