企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# E.240\. 版本 1.01 > **发布日期:** 1996-02-23 ## E.240.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.240.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 ```