E.308. 版本 1.01

发布日期: 1996-02-23

E.308.1. 从版本 1.0 迁移到版本 1.01

下面信息是给那些希望将数据库从Postgres95 1.0 向 Postgres95 1.01 迁移的用户的一些有用信息。

如果你是刚刚安装完成 Postgres95 1.01 并且没有需要迁移的旧数据库, 那么你不需要阅读下面部分。

如果要把 Postgres95 版本 1.0 的数据库向 Postgres95 版本 1.01 迁移,需要进行下面的步骤:

  1. 把文件 src/Makefile.global 里的变量 NAMEDATALEN 定义为16, OIDNAMELEN 定义为 20。

  2. 决定自己是否需要以主机为基础的认证(HBA)。

    1. 如果你需要这么做,你必须在顶级数据目录(通常是你的环境变量 $PGDATA 的值) 里创建一个名为 pg_hba 的文件。 我们在例子语法里用 src/libpq/pg_hba 代表。

    2. 如果你不需要这样以主机为基础的认证,你可以把 src/Makefile.global 里的下面这行注释掉

      HBA = 1

      要注意缺省时以主机为基础的认证(HBA)是打开的, 而且如果你不做上面所说的步骤A或B中的其中一步,其他主机上(out-of-the-box) 的1.01版本将不允许你与1.0的数据库联接。

  3. 编译和安装 1.01,但是不要执行 initdb 步骤。

  4. 在进行下一步之前,终止 1.0 的 postmaster 进程,然后备份你现有的 $PGDATA 目录。

  5. 把你的 PGDATA 环境变量设置为你的 1.0 的库(的位置), 但是把路径设置成 1.01 的可执行文件路径。

  6. 把文件 $PGDATA/PG_VERSION 从 5.0 修改成 5.1

  7. 运行新的 1.01 的 postmaster。

  8. 把 1.01 的新的内建的函数和操作符追加到 1.0 的数据库中去。 这一步是通过在你的 1.0 的库上运行 1.01 的服务器,并且运行附加的查询并保存到文件 1.0_to_1.01.sql 中。 如果你的 1.0 数据库名为testdb,那么我们可以通过psql 很容易完整升级工作:

    % psql testdb -f 1.0_to_1.01.sql

    然后执行下面命令(可以从下面剪切和拷贝):

    -- add builtin functions that are new to 1.01
    
    create function int4eqoid (int4, oid) returns bool as 'foo'
    language 'internal';
    create function oideqint4 (oid, int4) returns bool as 'foo'
    language 'internal';
    create function char2icregexeq (char2, text) returns bool as 'foo'
    language 'internal';
    create function char2icregexne (char2, text) returns bool as 'foo'
    language 'internal';
    create function char4icregexeq (char4, text) returns bool as 'foo'
    language 'internal';
    create function char4icregexne (char4, text) returns bool as 'foo'
    language 'internal';
    create function char8icregexeq (char8, text) returns bool as 'foo'
    language 'internal';
    create function char8icregexne (char8, text) returns bool as 'foo'
    language 'internal';
    create function char16icregexeq (char16, text) returns bool as 'foo'
    language 'internal';
    create function char16icregexne (char16, text) returns bool as 'foo'
    language 'internal';
    create function texticregexeq (text, text) returns bool as 'foo'
    language 'internal';
    create function texticregexne (text, text) returns bool as 'foo'
    language 'internal';
    
    -- add builtin functions that are new to 1.01
    
    create operator = (leftarg = int4, rightarg = oid, procedure = int4eqoid);
    create operator = (leftarg = oid, rightarg = int4, procedure = oideqint4);
    create operator ~* (leftarg = char2, rightarg = text, procedure = char2icregexeq);
    create operator !~* (leftarg = char2, rightarg = text, procedure = char2icregexne);
    create operator ~* (leftarg = char4, rightarg = text, procedure = char4icregexeq);
    create operator !~* (leftarg = char4, rightarg = text, procedure = char4icregexne);
    create operator ~* (leftarg = char8, rightarg = text, procedure = char8icregexeq);
    create operator !~* (leftarg = char8, rightarg = text, procedure = char8icregexne);
    create operator ~* (leftarg = char16, rightarg = text, procedure = char16icregexeq);
    create operator !~* (leftarg = char16, rightarg = text, procedure = char16icregexne);
    create operator ~* (leftarg = text, rightarg = text, procedure = texticregexeq);
    create operator !~* (leftarg = text, rightarg = text, procedure = texticregexne);

E.308.2. 修改列表

不兼容性:
 * 1.01 向后兼容 1.0 数据库,提供了用户指导步骤,在 MIGRATION_from_1.0_to_1.01 文件中概述。
   如果没有采取这些步骤,1.01 是不与 1.0 数据库兼容的。

增强:
 * 添加了 PQdisplayTuples() 到 libpq 并且为了使用它更改了监控器和 psql
 * 添加了 NeXT 端口 (需要 SysVIPC 实现)
 * 添加了 CAST .. AS ... 语法
 * 添加了 ASC 和 DESC 关键字
 * 添加了 'internal' 作为 CREATE FUNCTION 内部函数的可能语言,CREATE FUNCTION 内部函数是 C 函数,
   已经静态的连接到了 Postgres 后端。
 * 为系统标识符添加了一个新的类型 "name" (表名,属性名等)。这个替换老的 char16 类型。
   通过在 src/Makefile.global 中的 NAMEDATALEN #define 设置。
 * 一个可读的参考手册描述查询语言。
 * 添加了基于主机的访问控制。一个配置文件($PGDATA/pg_hba)用来保存配置数据。
   如果基于主机的访问控制不再需要了,注释掉 src/Makefile.global 中的 HBA=1。
 * 更改正则表达式处理为统一的使用 Henry Spencer 的正则表达式代码,不管是什么平台。
   正则表达式代码包含在发布中。
 * 为大小写不敏感的正则表达式添加了函数和操作符。操作符是 ~* 和 !~*。
 * pg_dump 为了更好的性能使用 COPY 而不是 SELECT 循环

Bug 修复:
 * 修复了一个优化器 bug ,当函数调用在 WHERE 子句中用于比较时会引起内核转储
 * 更改所有 getuid 的使用为 geteuid ,这样就使用了有效的 uid 
 * psql 在使用 -C 发生错误时返回非零的状态
 * 应用了公共补丁 1-14