↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

已结束支持的版本: 7.0 / 6.4
历史版本。 PostgreSQL 6.4 已结束支持。 请参阅 当前版本手册.

35.12. 版本 1.01

35.12.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. 决定是否要使用基于主机的认证。

    1. 如果要用,你必须在顶级数据目录(通常是 $PGDATA 的值)中创建名为 "pg_hba" 的文件。src/libpq/pg_hba 给出了示例语法。

    2. 如果不想使用基于主机的认证,可以注释掉 src/Makefile.global 中的这一行:

      	HBA = 1

      注意,基于主机的认证默认开启,如果你不执行上面的 A 或 B 步骤,开箱即用的 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.01 服务器运行你自己的 1.0 数据库,并应用随附保存在文件 1.0_to_1.01.sql 中的查询。这可以通过 psql 轻松完成。如果你的 1.0 数据库名为 "testdb":

    	% 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);

35.12.2. 详细变更列表

不兼容之处:
* 只要用户按照 MIGRATION_from_1.0_to_1.01 文件中概述的步骤操作,1.01 与 1.0 数据库向后兼容。
  如果未采取这些步骤,1.01 与 1.0 数据库不兼容。

增强:
* 为 libpq 添加 PQdisplayTuples() 并更改 monitor 和 psql 使用它
* 新增 NeXT 移植(需要 SysVIPC 实现)
* 新增 CAST .. AS 语法
* 添加了 ASC 和 DESC 关键字
* 为 CREATE FUNCTION 添加 'internal' 作为可能的语言
内部函数是已静态链接
到 postgres 后端中的 C 函数。
* 为系统标识符(表名、
属性名等)添加了新类型 "name"。它取代了旧的 char16 类型。
name 的长度由 src/Makefile.global 中的 NAMEDATALEN #define 设置
* 一本描述查询语言的易读参考手册。
* 添加了基于主机的访问控制。配置文件($PGDATA/pg_hba)
用于保存配置数据。如果不想要基于主机的访问控制,
请注释掉 src/Makefile.global 中的 HBA=1。
* 更改正则表达式处理为统一使用 Henry Spencer 的正则代码,
与平台无关。正则代码包含在发行版中
* 添加了用于不区分大小写正则表达式的函数和操作符。
操作符为 ~* 和 !~*。
* pg_dump 使用 COPY 而非 SELECT 循环以获得更好性能

缺陷修复:
* 修复了一个优化器缺陷,当在 WHERE 子句的比较中使用
函数调用时会导致核心转储
* 将所有 getuid 的使用改为 geteuid,以使用有效 uid
* psql 使用 -c 时出错现在返回非零状态
* 应用了公开补丁 1-14

报告文档问题

阅读 上游文档. 反馈更正前请先核对 当前版本手册.