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 迁移,需要进行下面的步骤:
把文件 src/makefile.global 里的变量 NAMEDATALEN 定义为16, OIDNAMELEN 定义为 20。
-
决定自己是否需要以主机为基础的认证(HBA)。
如果你需要这么做,你必须在顶级数据目录(通常是你的环境变量 $PGDATA 的值) 里创建一个名为 pg_hba 的文件。 我们在例子语法里用 src/libpq/pg_hba 代表。
-
如果你不需要这样以主机为基础的认证,你可以把 src/Makefile.global 里的下面这行注释掉
HBA = 1
要注意缺省时以主机为基础的认证(HBA)是打开的, 而且如果你不做上面所说的步骤A或B中的其中一步,其他主机上(out-of-the-box) 的1.01版本将不允许你与1.0的数据库联接。
编译和安装 1.01,但是不要执行 initdb 步骤。
在进行下一步之前,终止 1.0 的 postmaster 进程,然后备份你现有的 $PGDATA 目录。
把你的 PGDATA 环境变量设置为你的 1.0 的库(的位置), 但是把路径设置成 1.01 的可执行文件路径。
把文件 $PGDATA/PG_VERSION 从 5.0 修改成 5.1
运行新的 1.01 的 postmaster。
-
把 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