Linux 的 Database-SQL-RDBMS HOWTO 文件 (PostgreSQL 物件关联资料库系统) 作者∶Al Dev (Alavoor Vasudevan) [1]alavoor@yahoo.com 译者∶曾达康 [2]a9504480@graduate.hku.hk 二零零一年一月二日,41.0 版 _________________________________________________________________ 本文件是一份介绍如何在 Unix 系统快捷地建立一个 SQL 资料库引擎 (Database Engine) 及前端工具的「实用指南」。它也讨论国际标准的 ANSI/ISO SQL 语言及探讨在互联网中「开放式开发」环境 ("open development" environment) 开发 SQL 资料库引擎的优点。它是关於如何在 Unix 系统中建立 PostgreSQL 这个既可用作应用程式资料库伺服器 (Application Database Server),又可用作万维网资料库伺服器 (Web Database Server) 的新一代物件关联式资料库。PostgreSQL 尝试实践今後的国 际 ISO / ANSI SQL 标准。本文件也提供关於资料库的介面程式,如前端图像介 面、应用程式高速开发 (Rapid Application Development) 工具、ODBC、JDBC 驱动程式、C、C++、Java、Perl 程式语言介面和网上资料库工具。这里提供的资 料适用於所有 Unix / Windows NT 平台及其他资料库,对资料库、SQL 语言及 PostgreSQL 的新手非常有用。这文件也有一个 SQL 的导引,解释 SQL 的语法, 对初学者非常有用。有经验的用家会觉得这是一份有用的参考资料。对学生来说 ,这处提供的资料会让他们得到 PostgresSQL 关联式资料库的源程式码,从而学 习如何编写一个物件关联式 SQL 资料库。 _________________________________________________________________ 1. 引言 * 1.1 量子 (Quantum) 电脑□□量子物理学很有用 2. 物理定律适用於电脑软件! 3. PostgreSQL 是什麽? * 3.1 白皮书 4. 哪个较好?PostgreSQL 还是 MySQL? * 4.1 PostgreSQL 打败 Oracle、IBM DB2、MS SQL server 和其他!! * 4.2 MySQL 和其他重覆的 RDBMSes 5. 何处取得 ? 6. PostgreSQL 快速安装指引 * 6.1 安装和测试 * 6.2 PostgreSQL RPMs * 6.3 Maximum RPM * 6.4 例子 RPM * 6.5 测试 PyGreSQL□Python 介面 * 6.6 测试 Perl□Perl 介面 * 6.7 测试 libpq, libpq++ 介面 * 6.8 测试 Java 介面 * 6.9 测试 ecpg 介面 * 6.10 测试 SQL 的例子□自订资料型态和函数 * 6.11 测试 Tcl/TK 介面 * 6.12 测试 ODBC 介面 * 6.13 测试 MPSQL Motif-worksheet 介面 * 6.14 确认 * 6.15 紧急除错 7. 快速开始指引 * 7.1 资料库建立、丢弃、改名 * 7.2 建立和丢弃用户 * 7.3 建立和丢弃群组 * 7.4 建立、编辑和丢弃表格 * 7.5 建立、编辑和丢弃表格中的纪录 * 7.6 改变目前的资料库 * 7.7 备份与还原资料库 * 7.8 资料库保安 * 7.9 线上求助 * 7.10 建立激发 (Triggers) 和内储程序 (Stored Procedures) * 7.11 PostgreSQL 文件 8. PostgreSQL 支援超过 200 Gig 的超级资料库 * 8.1 中央处理器种类□32 位元或 64 位元 * 8.2 多处理器 * 8.3 复制 (Replication) 伺服器 9. 凭什麽相信 PostgreSQL?Regression 测试套件为用户建立信心 10. 资料库保安 * 10.1 用户认证 * 10.2 依据主机控制存取 * 10.3 认证方法 * 10.4 存取控制 * 10.5 经 SSH 的保安 TCP/IP 连接 * 10.6 Kerberos 认证 11. PostgreSQL 的前端 GUI 工具(图像使用者界面) 12. PostgreSQL 的介面驱动程式 * 12.1 PostgreSQL 的 ODBC 驱动程式 * 12.2 PostgreSQL 的 UDBC 驱动程式 * 12.3 PostgreSQL 的 JDBC 驱动程式 * 12.4 PostgreSQL 的 Java 13. PostgreSQL 的 Perl 资料库介面 (Database Interface, DBI) * 13.1 PostgreSQL 的 PERL 介面 * 13.2 Perl 资料库介面 DBI * 13.3 测试 Perl 介面 14. PostgreSQL 管理工具 * 14.1 PGACCESS - 管理 PostgreSQL 的 GUI 工具 * 14.2 PostgreSQL 图型介面查询工具 GtkSQL * 14.3 视窗中的 PostgreSQL 互动式查询工具(WISQL 或 MPSQL) * 14.4 名为 PSQL 的 PostgreSQL 互动式查询工具(ISQL) * 14.5 MPMGR□PostgreSQL 的资料库管理工具 * 14.6 PgAdmin、PhpPgAdmin 工具 * 14.7 PgBash - SQL shell 工具 * 14.8 PostgreSQL 的 Webmin 工具 15. PostgreSQL 用的中央处理器 16. 只使用一个显示器 (monitor) 来设定多台 PostgreSQL 电脑 17. PostgreSQL 的万维网应用程式伺服器 * 17.1 PERL 万维网应用程式伺服器 * 17.2 PHP 万维网应用程式伺服器 * 17.3 Lutris Corp "Enhydra Enterprise" (Java) * 17.4 Zope(Python) * 17.5 OpenACS(Tcl 语言) * 17.6 C++, CORBA 万维网应用程式伺服器 * 17.7 万维网应用程式伺服器目录 18. PostgreSQL 的应用程式和工具 * 18.1 PostgreSQL 的 4GL 万维网资料库程式□AppGEN 开发系统 * 18.2 PostgreSQL 的互联网介面□DBENGINE * 18.3 PostgreSQL 的 Apache 伺服器模组□NeoSoft NeoWebScript * 18.4 HTML 的伺服器端延伸 HEITML 和一个 PostgreSQL 的 4GL 语言 * 18.5 PostgreSQL 的 America On-line AOL 万维网伺服器 * 18.6 PostgreSQL 的疑难 / 计划追踪系统程式工具 * 18.7 把 dbase 的 dbf 档转换至 PostgreSQL * 18.8 把微软 MDB 资料库转换至 PostgreSQL * 18.9 Zeos 客户 * 18.10 Java 的 Report Writer 19. 资料库设计工具□实体关系图 (Entity Relation Tool) 工具 20. PostgreSQL 的互联网资料库设计/完成工具□EARP * 20.1 EARP 是什麽? * 20.2 施行 * 20.3 它如何工作? * 20.4 何处取得 EARP? 21. PHP Hypertext PreProcessor□PostgreSQL 的伺服器端 html 嵌入命令稿语言 * 21.1 主要特色 * 21.2 PHP□简史 * 21.3 那麽,我能用 PHP 做什麽? * 21.4 一个简单的例子 * 21.5 CGI 改向 (Redirection) * 21.6 在指令行执行 PHP * 21.7 PHPGem 套件 22. PostgreSQL 的 Python 介面 * 22.1 如何取得 PyGres? * 22.2 资料和支援 * 22.3 测试 Python 介面 23. PostgreSQL 和万维网的闸路 (gateway) □ WDB-P95 * 23.1 有关 wdb-p95 * 23.2 PostgreSQL 伺服器、pgperl 和 httpd 是否需在同一电脑? 24. "C", "C++", ESQL/C 语言介面和 PostgreSQL 的逐位运算元 (Bitwise Operators) * 24.1 "C" 介面 * 24.2 "C++" 介面 * 24.3 ESQL/C * 24.4 PostgreSQL 的逐位元运算元 25. PostgreSQL 的日文假名码 (Kanji Code) 26. 移植 PostgreSQL 到视窗 95 / 视窗 NT * 26.1 NT 版的作者 * 26.2 安装 Cygwin 套件 * 26.3 设定 Bash 视窗 * 26.4 安装 Andy Piper 工具 * 26.5 安装 Ludovic Lange 的 Cygwin32 IPC 套件 * 26.6 安装 PostgreSQL 27. 通信论坛 * 27.1 PostgreSQL 的电邮户口 * 27.2 英文通信论坛 * 27.3 通信论坛存库 * 27.4 西班牙文通信论坛 28. 文件和参考书 * 28.1 用户指引和说明书 * 28.2 线上文件 * 28.3 有用的参考书 * 28.4 ANSI/ISO SQL 规格文件□SQL 1992, SQL 1998 * 28.5 ANSI/ISO SQL 1992 的语法 * 28.6 ANSI/ISO SQL 1998 的语法 * 28.7 初学者 SQL 导引 * 28.8 SQL92 的时态延伸 (Temporal Extension) * 28.9 第零部分□取得 ISO/ANSI SQL 文件 * 28.10 第一部分□ISO/ANSI SQL 当前情况 * 28.11 第二部分□ISO/ANSI SQL 基金 (ISO/ANSI SQL Foundation) * 28.12 第三部分□ISO/ANSI SQL 呼叫级介面 (Call Level Interface) * 28.13 第四部分□ ISO/ANSI SQL 持久储存模组 (Persistent Stored Modules) * 28.14 第五部分□ ISO/ANSI SQL/结合 (Bindings) * 28.15 第六部分□ISO/ANSI SQL XA 介面专门化 (SQL/XA) * 28.16 第七部分□时态 ISO/ANSI SQL * 28.17 第八部分□ISO/ANSI SQL 多媒体 (SQL/MM) 29. PostgreSQL 的技术支援 * 29.1 商业支援 30. 经济和商业方面 31. 其他资料库的名单 32. 万维网搜寻提示 33. 结论 34. FAQ□有关 PostgreSQL 的问题 35. 本文件的其他格式 36. 版权和授权 Appendix 37. 附录甲□ANSI/ISO SQL 1992 语法 38. 附录乙□初学者 SQL 导引 * 38.1 PostgreSQL 导引 * 38.2 互联网 URL 指标 * 38.3 线上 SQL 指导 39. 附录丙□Linux 快速安装指引 40. 附录丁□安装 Midgard * 40.1 测试 Midgard PHP 伺服器 * 40.2 保安 OpenSSL _________________________________________________________________ 1. 引言 本文件的主要目标是提供一个关於快捷地设定 PostgreSQL 的 URL 的详尽名单, 和提倡开放原始码系统,如 PostgreSQL、Linux 的好处。 世界上的每一部电脑都需要一个资料库来存取资料。你使用电脑主要理由是用来 储存、 读取和处理资料,而且它们要很快完成工作,从而节省你的时间。同时, 系统必须简单、 完整、快速、可靠、经济和易用。资料库是最重要的系统, 因 为它储存了世界上每一间公司的关键资料。世上的每一项工业都需要一个资料库 系统。 没有的话,电讯、汽车、银行、航空公司等工业都不能有效运作。 最流 行的资料库系统都跟从国际标准组织 (International Standard Organisation, ISO) 的规格和 ANSI SQL(美国)标准。业界常用的最新规格是 ISO/ANSI SQL 1992。下一个标准是 SQL 1998/99,又名 SQL-3,这仍在开发中。流行的资料库 ,如 Oracle,Sybase 和 Informix 都是根据这些标准,或尝试实施这些标准。 没有如 ANSI/ISO SQL 的标准,用户要一次建立一套适用於所有资料库系统的应 用软件会非常困难。 客户希望一次过使用 ISO SQL,ODBC,JDBC 发展一个应用 软件而在世上所有的资料库系统应用。 世上自由而支援 ISO SQL、ANSI SQL/98、SQL/92 和 ANSI SQL/89 的关联式资料 库 (RDBMS) 中,最流行的是 PostgreSQL。PostgreSQL 是新一代的物件关联式资 料库, 以全面符合 ISO/ANSI 等 SQL 标准为目标。免费的 RDBMS 中 ,PostgreSQL 是唯一同时支援物件资料库和 SQL 的。本文件会告诉你如何安装 这资料库、 如何建立网上资料库、应用软件资料库、前端图像介面和介面程式。 我强烈建议你所写的资料库软件必须百分百符合 ISO/ANSI SQL、ODBC、JDBC 等 标准,这样,使得你的程式能移植到不同的资料库,如 PostgreSQL、Oracle、 Sybase、Informix 等。 你可从 PostgreSQL 得到最高质素及非常丰富的功能,因为它依从「开放原始码 开发模式」 (Open Source Code development model)。开放原始码模式会给你完 整的源程式码, 开发过程在互联网上由有极大量的人手进行。 目前的趋势显示 未来大部分的软件开发工作会在世界通行的所谓「资讯高速公路」 (Information Super-Highway) 上进行。未来数年,互联网会爆炸性地成长, 这 样会促成业界更多使用 PostgreSQL。 藉把统计学、数学和科学的原理应用於软件质素,我们只会在一个如 PostgreSQL 般,把原程式码开放给经资讯高速公路连系在一起的大量头脑的系统 下, 才能得到最高质素的软件。正所谓集思广益。 开放原始码的模式也可防止 重覆工作,非常经济, 节省发布时间及合符有关优化国家和地球资源的现代经济 定律。只要有人写好了一个软件, 你便不需要再来一次。你不会把宝贵的时间浪 费於早已做好的工作。 一寸光阴一寸金,你要好好利用,因为人一天只有八小时 工作!在我们踏入廿一世纪时, 我们取得所需软件的方法将会改变。每人的第一 选择都将会是如 PostgreSQL、Linux 等开放原始码系统。 购买可执行的软件不代表你拥有软件。原程式码是珍贵的资产,二元档并无价值 。 购买软件可能会成为历史。你只需要买好的硬件, 花钱在硬件上而从互联网 上取得软件是值得的。重点是工作量大的电脑硬件。 硬件才是真正跑动的马匹, 软件只是鞭策它。电脑硬件的复杂程度使得全球只有 6 个国家表现出设计及生产 电脑晶片和硬件的能力。这是一种先进的科技,过程非常复杂, 资金密集,设厂 及生产 0.18(甚至小於 0.18)微米科技的机器投资庞大。 在一小片晶片上便有 数以百万计的半导体和电路挤在一起。Applied Material、AMD、英特尔、Cyrix 、日立、IBM 及其他工司花费大量人-年 (man-years) 在高科技,如晶片设计、 微电子 (Micro-electronics) 及纳电子 (Nano-electronics) 的研究上。微米代 表百万分之一米 (10^-6),纳米代表十亿分之一米 (10^-9)。现今微电子技术中 ,0.35 微米的使用铝作导体,0.25 微米的使用铜。 在不久的将来,用铜的 0.10 微米技术,甚致纳电子技术将会应用於电脑晶片。 因为铜导电能力较强, 铝导体将会被淘汰。在刻蚀晶片 (photolithography) 的过程中, 极高频的紫外 线、X-射线或电子束会被用於刻蚀 (etch) 特徵大小 (feature size) 小於 0.15 微米的电路。今後二十年,矽片将会被分子电脑 (molecular computers) 和生物晶片 (bio chips) 取代。它们的速度将会比矽片快数十亿倍!分子是一组 原子。 而微小的原子组成你在世上所见的所有物件。 分子电脑会用物质的分子 来当超快的电子开关制。开制 (ON) 代表 1、关闭 (OFF) 代表 0。世上所有电脑 程式都是根据二元数(数字 1 和 0)运作。 下表列出晶片技术的进步及未来发展趋势。 未来晶片能力的进展 ****************** +--------------------------+---------+---------+---------+---------+--------+-- -------+---------+ | 项目/年份 | 1997 | 1999 | 2001 | 2003 | 2012 | 2 020 | 2030 | +--------------------------+---------+---------+---------+---------+--------+-- -------+---------+ | 特徵大小(微米) | 0.25 | 0.18 | 0.15 | 0.13 | 0.05 |< 0.00001| 原子 | +--------------------------+---------+---------+---------+---------+--------+-- -------+---------+ | 晶片大小(亳米) | 200 | 300 | 300 | 300 | 450 |生 物/分子| 量子 | +--------------------------+---------+---------+---------+---------+--------+-- -------+---------+ | 最低运行电压 | 1.8-2.5 | 1.5-1.8 | 1.2-1.5 | 1.2-1.5 | 0.5-0.6| < 0.001 | 极小 | +--------------------------+---------+---------+---------+---------+--------+-- -------+---------+ | 最大功率消耗 | 70 | 90 | 110 | 130 | 175 | 6 00 | 极小 | +--------------------------+---------+---------+---------+---------+--------+-- -------+---------+ | 运行频率 (MHz) | 750 | 1,250 | 1,500 | 2,100 | 10,000 | > 50,000| ----- + +--------------------------+---------+---------+---------+---------+--------+-- -------+---------+ | DRAM 容量 | 256 MB | 1 GB | 2 GB | 4 GB | 256 GB | > 1000GB| ----- | +--------------------------+---------+---------+---------+---------+--------+-- -------+---------+ 如你所见,硬件才重要和需要高科技,软件则需要人手,但所用的科技就比较简 单。 另一方面,世上每国家都会发展软件。事实上, 世上任何一个拥有一部低价电脑 的人都可编写软件。 像 Oracle,Informix,Sybase,IBM DB2 (Unix) 等资料库,都是用 "C" 语言写 成, 二元档则是用编译器产生,这样便可售给用户了。Oracle、Sybase 、Informix 资料库是百分百的 C 程式!! 十四年来,人们已在 PostgreSQL 上做了很多工作,从头创造另一个符合 ANSI/ISO SQL 的资料库系统并不合符常理。在 PostgreSQL 的源程式上加上欠缺 的功能或将之加强, 之後立刻使用,有很大好处。 据估计,对「互联网产品」的需求将会以指数级数 (exponentially) 增长,因为 它可维系一群高质素、低价而庞大数量的使用者及开发人员。 不使用「互联网产 品」的国家会错过这场「全球互联网革命」而被其他国家大大抛离。 这是因为互 联网本身就是世上最大的「软件公司」,也是大型的软件「发电机」! 1.1 量子 (Quantum) 电脑□□量子物理学很有用 如你在前表「未来晶片能力的进展」所见,在大约 2030 年,PostgreSQL 一类资 料库系统会在量子电脑运行。量子电脑根据原子粒子的特性,如旋转 (spin) 方 向来产生状态。例如,在向上旋转 (spin is up) 时,一夥粒子可被看作“一” ,向下旋转时可被看作“零”。原子和其核心可出现重叠 (superposition) 的状 态,使得一、零和其间的数值可同时表达。籍著干扰原子的旋转, 量子位 (qubit) 可放在一起,令它们可当一个整体来运作, 使得非线性计算 (nonlinear computational) 能力遥遥领先现代超级电脑!! 在原子层面,量子 物理学有助理解原子粒子的表现。 2. 物理定律适用於电脑软件! 这章会说明科学在不同事物,如软件、宇宙、原子、能量甚至你自己的创造过程 中扮演如何重要的角色。也会说明为何科学知识在使用科学的产品前非常重要。 黄金定律是□「你不可用一件来历不明的产品!!」这定律适用於所有东西□ 资 料库系统、电脑系统、作业系统、宇宙甚至你的身体!即是说, 你要得到系统完 整的源程式码和资料。了解人体和人体内的原子的运作非常重要,因为 PostgreSQL、微软视窗 95 等都是人造的。 创造是很重要的一步。使用科学物件的人必须知道它如何产生。这甚至适用於电 脑系统和 PostgreSQL。大多数人都没有科学知识,因此不知道如微软视窗 NT/95、Oracle、 人体和宇宙等系统如何产生。很多人不知道什麽创造宇宙和微 软视窗 NT/95 和它们内部是什麽。复杂的系统以简单的组成部分建成□□有千千 万万个宇宙产生了, 每个宇宙都是千千万万个超星团 (super-cluster) 组成, 每个超星团都是千千万万个星系 (galaxy) 组成,每个星系都是千千万万夥□星 (star) 组成,有些□星系统中有行星 (planet),而行星是数以十亿计的原子组 成。(世界历史中, 只在古印度有一个人创造了一个宇宙,但在现代社会再没有 发生。 世上不少国家都正尝试创造宇宙。)创造宇宙是一件极为先进的科技, 比炸中广岛和长崎,造成恐怖的破坏的原子弹先进得多。 现代核武既细小又强劲 ,只需一个这些核弹投入太平洋即可使地球消失! 武器的变化无穷!!在古印度 的战场中就用过核武和其他更强力非凡的武器! 当艾伯特.爱因斯坦 (Albert Eienstein)(一个二十世纪 00 年代的科学家)说核武可使大城市人间蒸发时, 没有人相信他。 今时今日也没有人相信人力可创造宇宙。 微软视窗九五之类软件是以 C 和组合语言写成,只用到 1 和 0。我们所住的这 类宇宙是由其他空间中两粒不相似而适合的原子组合撞击而成。(有趣的事在粒 子撞击之前刚好发生了) 人体是由两粒不相似而合适的细胞组合撞击而成!! (有趣的事在细胞撞击之前刚好发生了)人类遗传了宇宙的特性。 你所在的宇宙 以前并不存在□□宇宙中的原子并不存在,甚至时间都不存在! 宇宙在大爆炸时 出生,开始扩张并持续成长。直至现在宇宙仍在扩张!! 有人在一个名为 ‘Brahma’的宇宙创造了你所在的宇宙。 知识是这个宇宙之母!! ‘Brahma’ 在你生活的婴儿宇宙诞生之前已经爱上了‘知识之母’!! 那过程和你出生的经 过差不多!没有来自知识之母的的‘基因’,要写一个小型的 'C' 程式也没可能 !(译按∶完全不明白这一段想说什麽,更不知怎样译才符合原意, 大家如果知 道,请来函通知。) 有朝一日我们的宇宙会关上(一声巨响之後),其中的所有原子会完全毁灭和消 失! 人类实在是有可能创造宇宙的。可以创造的宇宙总数是无限大, 可以创造的作业 系统的总数也是无限大!!有数以百万计的宇宙, 可分为三大类。无限数量的宇 宙和无限变化的多维原子 (multi-dimensional atoms) 崩塌成为数个基本维宇宙 (primary-dimensional-universe)。 非常先进的数学也支持这理论。 科学和统计学定律支持开放原始码,如 PostgreSQL 和 Linux。互联网的速度与 日俱增,也越来越可靠,开放原始码的动量 (momentum) 会迅速增加。另外,如 果统计学及科学定律正确的话, 人们更注意科学和当无知的人开始学习科学,封 闭式程式迟早会在世上消失。 发展 PostgreSQL 这类计划需要能量和时间等资源,因此,PostgreSQL 是能量和 时间的产品。能量和时间只能在科学上解释,所以物理学和 PostgreSQL、Linux 之类软件专案是有直接关联的。科学(物理)定律适用於任何时间空间,任何行 为, 甚至软件开发。 物理学即使在你说话(声波)、步行(地面和脚之间的摩擦力)、 看书和编写软 件时都发生作用。世上所有科学都植根於数学,包括 PostgreSQL。PostgreSQL 使用了数学的一个小分枝‘现代代数’(Modern Algebra)。现代代数处理‘集合 论’(Set Theory)、‘关系代数’(Relational Algebra)、群组 (Groups)、环 (Rings)、收集 (Collections)、集 (Sets)、联合 (Unions)、交错 (Intersections)、排斥 (Exclusions)、域 (Domains)、列 (Lists) 等等。 PostgreSQL 这类产品之所以存在,便是因为能量和时间。 而质量和能量是同一 事物!质能相同的事实在一百年前仍未为人所知! 即使在今时今日世人也不知道 互联网是最大的软件「发电机」 和世上最大的「软件公司」。 脑细胞在工作(编写程式)时会消耗能量,把来自食物的化学能转化为电能及热 能。 即使在你阅读这段文字时,你的脑细胞便会消耗燃料及使用小量能量。也就 是说, 人脑是一台热力学上的机器 (thermodynamic heat engine)。正因为这样 , 热力学的定律也适用於人脑,也就间接地影响到 PostgreSQL 一类软件。 世上可有无限种颜色、电脑语言、晶片设计和理论,但不可能有一种完美的颜色 、 电脑语言、设计和系统!你所能得到的只是近乎完美的颜色(波长)、系统、 资料库或理论!大自然就像一个万花筒□有无限维数的空间, 其他空间粒子的变 限变化,但它们全部结合为小数的空间,反之亦然。 把世上数百万网民的能量结合起来,使得建立一个近乎完美的系统 (包括资料库 软件)变得有可能。孤掌难鸣,但籍著网络把大量人手集合起来, 他们的总能量 会非常庞大,而且可集中於建立一个近乎完美的系统。 能量的单位是焦耳 (Joules),千焦耳或公斤,时间以秒或小时量度。功率 (power) 是能量除以时间,单位是瓦或千瓦。 _________________________________________________________________ 每人的能量 = y 焦耳 或以质量来说 每人的能量 = y 公克 质量和能量之间的转换因数是 E = m * c * c,'c' 是光速而 'm' 是质量。 时间 = 8 小时(这是一个常数,因为一人一天只有 8 小时) 功率 = 能量 / 时间 = (y / (8 * 60 * 60)) 瓦 世界的总功率 = n * (y / (8 * 60 * 60)) 瓦 n = 参与计划的总人数。 _________________________________________________________________ 从以上方程式,很明显增加 'n' 会大幅改善产品质素。n 越大功率也越大(用千 瓦表示)。 你可以想像全互联网有多少能量(以千焦耳计算) 和功率(以千瓦 计算)专注於 Linux 和 PostgreSQL 一类系统! 很明颢,互联网可连系很多人,也就是说互联网有大量能量和时间, 可用比软件 公司更短的时间产生更高质素的软件。即使是微软、IBM 等大公司也不可违抗物 理定律,而必会向物理定律投降。 结论是∶因为科学的定律,‘开於原始码’系统,像 PostgreSQL、Linux 会战胜 ‘封闭原始码’系统,和必会比它们优异。这是有科学根据的。 人类不应浪费时 间创造太多重覆的软件产品。 3. PostgreSQL 是什麽? PostgreSQL 是一个自由的资料库,给予你完整的程式码,是一个以 ANSI SQL 1998, 92, 89 规格为目标的物件关联式资料库系统,可在不同的硬件平台和操作 系统中运行。 PostgreSQL 的最终目的是百分百符合 ANSI/ISO SQL 及成为世界 第一的开放通用资料库。 今天,PostgreSQL 是世上最先进的系统。令人诧异的是,很多商业的资料库在质 素、 特性和能力各方面都追不上它!!PostgreSQL 是地球上很多国家的合作成 果,是一个和国际太空站 (International Space Station) 相似的专案。在未来 的数十年,PostgreSQL 仍会是最佳的资料库系统,因为它是一个开放原始码系统 。 PostgreSQL 背後的基本想法是□只要一个模组的程式写好了, 你就不应浪费时 间重新写一次,哪管只花千分之一秒!! Informix Universal server(1997 年推出)的基础是 PostgreSQL 的较旧版本 ,因为 Informix 收购了 Illustra Inc. 及整合到 Informix。Illustra 资料库 是根据 Postgres(PostgreSQL 的前身)写成的。 PostgreSQL 是 POSTGRES 资料库管理系统的改良版,一个新一代 DBMS 的研究原 型 (prototype)。在保留 POSTGRES 强大的资料模型及丰富的资料型态的同时, 它以一个扩充了的 SQL 子集来取代 PostQuel 查询语言。 PostgreSQL 是由一群参加 PostgreSQL 开发通信论坛的互联网开发人员进行的。 目前的协调者为 Marc G. Fournier。 * [3]scrappy@postgreSQL.org 这队伍会负责今後所有 PostgreSQL 发展工作。当然,资料库的用户自己也是 PostgreSQL 的开发人员!这开发过程是分散在互联网上大量资料库用家的。 PostgreSQL 1.01 的作者是 Andrew Yu 和 Jolly Chen。PostgreSQL 的前身 Postgres 的程式码,是很多大学毕业生、本科生及程式设计员在 University of California,Berkeley 的 Michael Stonebraker 教授的指导下的产品。 已有数以百万套 PostgreSQL 被安装作资料库伺服器, 网上资料库伺服器和应用 程式资料库伺服器。它是一个很先进的物件关联式资料库 (ORDBMS)。 PostgreSQL 可在 Soloris、SunOS、HPUX、AIX、Linux、Irix、Digital Unix 、BSDi、 NetBSD、FreeBSD、SCO Unix、NEXTSTEP、Unixware 及所有其他的 Unix 执行。移植到视窗 95/NT 的工作已以 Cygnus cygwin32 套件完成。 本文所述的 PostgreSQL 和有关物件受 University of California, Berkeley 的版权保护。 3.1 白皮书 PostgreSQL 资料简介∶ * 题目∶ PostgreSQL SQL RDBMS 资料库(物件关联资料库管理系统) * 目前版本∶7.0.1 * 年龄∶ PostgreSQL 十五岁。自 1985 年开始开发 * 作者∶ 十五年来互联网上数以百万计的大学和公司 PostgreSQL 的白皮书在 [4]http://www.greatbridge.com 找到。 4. 哪个较好?PostgreSQL 还是 MySQL? 4.1 PostgreSQL 打败 Oracle、IBM DB2、MS SQL server 和其他!! PostgreSQL 在表现、速度、扩展性 (scalability) 和 可信性 (reliability) 各方面的标准测试中打败 Oracle 8(和 8i)、IBM DB2、MS SQL server 、Sybase、 Interbase 和 MySQL! 到 [5]http://www.aldev.8m.com 或 [6]http://aldev.webjump.com 阅读基准测 试结果。 (译按∶有关该测试结果,有不少人提出质疑,请参阅 [7]http://www.devshed.com/BrainDump/MySQL_Benchmarks/) 4.2 MySQL 和其他重覆的 RDBMSes MySQL 是另一个开放原始码的 SQL 伺服器,但它不支援交易 (Transaction)。它 适用於非常小的资料库,而不支援先进的 SQL 功能。PostgreSQL 则是一个企业 级的资料库,支援交易和几乎所有 SQL 结构。PostgreSQL 比商业的资料库,如 Oracle、Sybase 和 Informix 等先进得多。PostgreSQL 支援非常先进的锁定机 制 (locking mechanism) 和很多在商业资料库中找不到的先进功能!! 在不久将来,MySQL 的开发将会停止,因为 MySQL 也以 ANSI SQL 为目标,是一 个重覆的产品。我们要最先进和成熟的开放原始码 SQL 伺服器,而抛掉所有其他 的,因为我们没有很多时间(来对付多个 RDBMS)!事实上,你连只对付一个如 PostgreSQL 般强劲的 SQL 伺服器的时间也没有。所有 MySQL 用者都会转移到 PostgreSQL。而且,MySQL 是一个‘类商业’(quasi-commercial) 的产品,和 PostgreSQL 不同,後者开放原始码,无需授权费。既生瑜,何生亮。有了 PostgreSQL,就不需再有另一个 SQL 资料库系统了。 如 MySQL 一类的重覆产品使得用家无所适从,分散资源。 一个“近乎完美”的 系统应该是独一无二的系统, 世上每一个人都应为它工作!!重覆的产品弊多於 利,因此,绝不值得分散资源。 这已在商业的资料库发生,如 Oracle、Sybase 、Informix 和微软 SQL server。这样会使得用者分裂,而且产品互不兼容。我 却想把 SQL 伺服器的原始码给你控制!!! 你不需要上百个资料库系统,你只需要一个最好的资料库伺服器,它就是 ‘PostgreSQL’。 警告∶根据一份如 ANSI SQL 的规格,人们可造出无限个资料库系统!! MySQL 没有而 PostgreSQL 支援的功能如下□ * 交易 (Transactions) * 内储程序 (Stored Procedures) * 激发 (Triggers)(update,insert 和 delete) * 物件导向资料库 (Object oriented databases) * 先进的封锁系统 (Locking systems),在多用户、多交易环境下的并行管理 (concurrency management)。 * 子查询 (Sub-queries) * 伺服器端游标 (Server-side cursors) * 查询快取 (Query caching) * 资料库封锁 (Locking of databases) * 较好的连结支援(JOIN、UNION、MINUS、INTERSECT、outer join) * 很多其他功能□□多不胜数。 MySQL 可在 [8]http://www.tcx.se 找到。 (译按∶MySQL 已改以 GPL 发行。) 5. 何处取得 ? 你可从以下地方购买 Redhat Linux 光碟、Debian Linux 光碟或 Slackware Linux 光碟,从中找到 PostgreSQL 套件(原始码和二元码)∶ * Linux System Labs 网址∶ [9]http://www.lsl.com/ (7 美元) * CheapBytes Inc 网址∶ [10]http://www.cheapbytes.com/ (7 美元) * Debian 主网址∶ [11]http://www.debian.org/vendors.html PostgreSQL 组织也售卖‘PostgreSQL CDROM’,内含完整的原始码,许多 Unix 操作系统的可执行档及完整的文件。 * 从主网页取得 PostgreSQL 光碟∶ [12]http://www.postgresql.org 30(美 元) PostgreSQL 只含二元档的发行版本 (distribution)∶ * PostgreSQL RPMs 的维护人是 Lamer Owen,在 [13]lamar.owen@wgcr.org 找到。 * PostgreSQL 源 RPM 和二元 RPM [14]http://www.ramifordistat.net/postgres。 * PostgreSQL 源 RPM 和二元 RPM [15]http://www.postgresql.org 。点选 “Latest News”和 Redhat RPMs。 * PostgreSQL 源 RPM 和二元 RPM [16]http://www.redhat.com/pub/contrib/i386/ 。ftp 站台在 [17]ftp://ftp.redhat.com/pub/contrib/i386/ * Solaris, HPUX, AIX, IRIX, Linux 的二元档站台∶ [18]ftp://ftp.postgresql.org/pub/bindist 万维网网站∶ * 主网站∶ [19]http://www.postgresql.org/ * 次网站∶ [20]http://logical.thought.net/postgres95/ * [21]http://www.itm.tu-clausthal.de/mirrors/postgres95/ * [22]http://s2k-ftp.cs.berkeley.edu:8000/postgres95/ * [23]http://xenium.pdi.net/PostgreSQL/ * [24]http://s2k-ftp.cs.berkeley.edu:8000/postgres95/ 以下为 ftp 站∶ * 主 FTP: [25]ftp://ftp.postgresql.org/pub * 次 FTP: [26]ftp://ftp.chicks.net/pub/postgresql * [27]ftp://ftp.emsi.priv.at/pub/postgres/ * [28]ftp://ftp.itm.tu-clausthal.de/pub/mirrors/postgres95 * [29]ftp://rocker.sch.bme.hu/pub/mirrors/postgreSQL * [30]ftp://ftp.jaist.ac.jp/pub/dbms/postgres95 * [31]ftp://ftp.luga.or.at/pub/postgres95 * [32]ftp://postgres95.vnet.net:/pub/postgres95 * [33]ftp://ftpza.co.za/mirrors/postgres * [34]ftp://sunsite.auc.dk/pub/databases/postgresql * [35]ftp://ftp.task.gda.pl/pub/software/postgresql * [36]ftp://xenium.pdi.net/pub/PostgreSQL PostgreSQL 的源程式码也可从 sunsite unc 的映射站得到(全球有大约一千个 )。它是在 Redhat Linux 发行版本 (distribution) 的 /pub/contrib/i386/postgresql.rpm 档中。 * 要知道有什麽映射站,请到 [37]ftp://sunsite.unc.edu 6. PostgreSQL 快速安装指引 这节会帮你在小於五分钟内快速安装和启动这资料库。 6.1 安装和测试 安装、测试、确认和执行 PostgreSQL 的步骤 以 root 身份签入 _________________________________________________________________ # cd /mnt/cdrom/RedHat/RPMS # man rpm # ls postgre*.rpm # rpm -qpl postgre*.rpm | less (观看档案名单) # rpm -qpi postgre*.rpm (观看套件资料) # cat /etc/passwd | grep postgres _________________________________________________________________ 注意∶如果你看到一个‘postgres’使用者,你可能要备份和清除 postgres 的 家目录 postgres 和删除这名用者,或把他改名为‘postgres2’之类。安装时 需要乾乾净净。 _________________________________________________________________ : # rpm -i postgre*.rpm (必须安装所有套件,即客户端、开发、资料和主套件来使 pgaccess 正常工作) # man chkconfig # chkconfig --add postgresql (用来在开机时开始 pg。) # /etc/rc.d/init.d/postgresql start (启动 postgresql) # man xhost # xhost + (让 pgaccess 使用显示装置) # su - postgres bash$ man createdb bash$ createdb mydatabase bash$ man psql bash$ psql mydatabase ……在 psql 中可按上 / 下箭咀来编辑历史记录或 \s bash$ export DISPLAY=<主机名>:0.0 bash$ man pgaccess bash$ pgaccess mydatabase _________________________________________________________________ 现在你可以在 pgaccess 或 psql 高速下达各种 SQL 指令了!! _________________________________________________________________ bash$ cd /usr/doc/postgresql* _________________________________________________________________ 在此阅读所有 FAQ,使用者、程式设计员、管理手册和指引。 6.2 PostgreSQL RPMs 此外,请看 [38]http://www.ramifordistat.net/postgres 的 "Installation Steps"。 PostgreSQL RPM 由 Lamar Owen 维护,位於 [39]lamar.owen@wgcr.org 在 [40]http://www.postgresql.org 可找到更多 PostgreSQL 的资料。 6.3 Maximum RPM 熟习 RedHat RPM 套件管理员以管理 PostgreSQL 安装。在 [41]http://www.RPM.org 下载‘Maximum RPM’一书,找寻档名 maximum-rpm.ps.gz。 在 Linux 使用 gv 指令阅读它□ _________________________________________________________________ # gv maximum-rpm.ps.gz _________________________________________________________________ 有一个 rpm2deb 可把 RPM 套件转换为 Debian Linux 套件 6.4 例子 RPM 测试 PostgreSQL 的各种介面需要例子。从以下地方安装 PostgreSQL 例子目录 □ * Linux 光碟 - postgresql-*examples.rpm * postgresql-*examples.rpm [42]http://www.aldev.8m.com 或 [43]http://aldev.webjump.com * PostgreSQL 原程式码 postgresql*.src.rpm,在 examples、testing 或 tutorial 目录寻找。 6.5 测试 PyGreSQL□Python 介面 安装 examples 套件,请参阅 [44]例子 RPM,之後□ _________________________________________________________________ bash$ cd /usr/lib/pgsql/python bash$ createdb thilo bash$ psql thilo thilo=> create table test (aa char(30), bb char(30) ); thilo=> \q bash$ /usr/bin/python >>> import _pg >>> db = _pg.connect('thilo', 'localhost') >>> db.query("INSERT INTO test VALUES ('ping', 'pong')") >>> db.query("SELECT * FROM test") eins|zwei ----+---- ping|pong (1 row) >>>CTRL+D bash$ ……好像行了□现在正式安装它 bash$ su - root # cp /usr/lib/pgsql/python/_pg.so /usr/lib/python1.5/lib-dynload _________________________________________________________________ 6.6 测试 Perl□Perl 介面 安装 examples 套件,请参阅 [45]例子 RPM,之後□ _________________________________________________________________ root# chown -R postgres.postgres /var/lib/pgsql/examples bash$ cd /var/lib/pgsql/examples/perl5 bash$ perl ./example.pl _________________________________________________________________ 注意∶如果以上指令失败了请做如此做∶全域变数 @INC 要在包括 site_perl 目 录中的 Pg.pm 模组,所以要如下使用 -I 选项。 _________________________________________________________________ bash$ perl -I/usr/lib/perl5/site_perl/5.004/i386-linux-thread ./example.pl _________________________________________________________________ ……你的 perl 已在存取 PostgreSQL 资料库!! 要使用 perl 介面,请参阅 example.pl 档。 6.7 测试 libpq, libpq++ 介面 安装 examples 套件,请参阅 [46]例子 RPM,之後□ _________________________________________________________________ root# chown -R postgres.postgres /var/lib/pgsql/examples bash$ cd /var/lib/pgsql/examples/libpq bash$ gcc testlibpq.c -I/usr/include/pgsql -lpq bash$ export PATH=$PATH:. bash$ a.out bash$ cd /var/lib/pgsql/examples/libpq++ bash$ g++ testlibpq0.cc -I/usr/include/pgsql -I/usr/include/pgsql/libpq++ -lpq++ -lpq -lcrypt bash$ ./a.out (注意∶不须理会错误讯息□如下) > create table foo (aa int, bb char(4)); No tuples returned... status = 1 Error returned: fe_setauthsvc: invalid name: , ignoring... > insert into foo values ('4535', 'vasu'); No tuples returned... status = 1 Error returned: fe_setauthsvc: invalid name: , ignoring... > select * from foo; aa |bb | -----|-----| 4535 |vasu | Query returned 1 row. > >CTRL+D bash$ _________________________________________________________________ ……你直接用 C/C++ 介面来存取 PostgreSQL 资料库!! 6.8 测试 Java 介面 安装 examples 套件,请参阅 [47]例子 RPM 和安装以下东西。 * 从 [48]ftp://ftp.redhat.com/pub/contrib/i386 或 [49]http://www.blackdown.org 取得 JDK jdk-*glibc*.rpm * 从 [50]ftp://ftp.redhat.com/pub/contrib/i386 取得 postgresql-jdbc-*.rpm _________________________________________________________________ root# chown -R postgres.postgres /var/lib/pgsql/examples bash$ cd /var/lib/pgsql/examples/jdbc bash$ echo $CLASSPATH --> 应显示 CLASSPATH=/usr/lib/pgsql/jdbc7.0-1.2.jar:.:/home/java/jdk1.2.2/lib: /usr/lib/pgsql:/usr/lib/pgsql/classes.zip:/usr/lib/pgsql/pg.jar 而 jdbc*.jar 的版本号码要正确。 *.jar 档要放在 /usr/lib/pgsql 和 /usr/libjdk*/lib 目录中。 bash$ export CLASSPATH=/usr/lib/pgsql/jdbc7.0-1.2.jar:.:/home/java/jdk1.2.2/lib :/usr/lib/pgsql:/usr/lib/pgsql/classes.zip:/usr/lib/pgsql/pg.jar 编辑所有 psql.java 档,把‘package’的行变为评论。 bash$ javac psql.java bash$ java psql jdbc:postgresql:template1 postgres < password >[1] select * fro m pg_tables; tablename tableowner hasindexes hasrules pg_type postgres true false false pg_attribute postgres true false false [2] CTRL+C bash$ _________________________________________________________________ ……你直接用 Java 介面来存取 PostgreSQL 资料库! 6.9 测试 ecpg 介面 安装 examples 套件,请参阅 [51]例子 RPM,之後□ _________________________________________________________________ root# chown -R postgres.postgres /var/lib/pgsql/examples bash$ cd /var/lib/pgsql/examples/ecpg bash$ ecpg test1.pgc -I/usr/include/pgsql bash$ cc test1.c -I/usr/include/pgsql -lecpg -lpq -lcrypt bash$ createdb mm bash$ ./a.out _________________________________________________________________ ……你直接用嵌入式 SQL 来存取 PostgreSQL 资料库! 6.10 测试 SQL 的例子□自订资料型态和函数 安装 examples 套件,请参阅 [52]例子 RPM,之後□ _________________________________________________________________ root# chown -R postgres.postgres /var/lib/pgsql/examples bash$ cd /var/lib/pgsql/examples/sql 未写好… _________________________________________________________________ 6.11 测试 Tcl/TK 介面 Tck/Tk 的例子是 pgaccess 程式。 使用一个文字编辑器阅读 /usr/bin/pgaccess 档案□ _________________________________________________________________ bash$ view /usr/bin/pgaccess bash$ export DISPLAY=<你电脑的主机名>:0.0 bash$ createdb mydb bash$ pgaccess mydb _________________________________________________________________ 6.12 测试 ODBC 介面 1. 在 [53]http://www.insightdist.com/psqlodbc/ 取得 win32 pgsql odbc 驱动程式 2. 另外请参阅 /usr/lib/libpsqlodbc.a 6.13 测试 MPSQL Motif-worksheet 介面 在 [54]http://www.mutinybaysoftware.com 取得 RPM。 6.14 确认 要确认 PostgreSQL 的高品质,执行 Regression 测试套件∶ 以 root 身份签入 _________________________________________________________________ # rpm -i postgresql*test.rpm 阅读 README 档或安装源程式,它已有 regress 目录 # rpm -i postgresql*.src.rpm # cd /usr/src/redhat/SPECS # more postgresql*.spec (以察看需要安装哪些 RPM 套件) # rpm -bp postgresql*.spec (…这样会准备该套件) Regression 测试需要 Makefiles 和类似 *fmgr*.h 的标头档,可用以下指令 产生□ # rpm --short-circuit -bc postgresql*.spec (走捷径!) 看到‘make -C common SUBSYS.o’後按 CTRL-C 终止工作。这时候 configure 已经成功,所有 Makefiles 和标头档也已产生。你不再需要让它继续下去。 # cd /usr/src/redhat/BUILD # chown -R postgres postgresql* # su - postgres bash$ cd /usr/src/redhat/BUILD/postgresql-6.5.3/src/test/regress bash$ more README bash$ make clean; make all runtest bash$ more regress.out _________________________________________________________________ 6.15 紧急除错 有时除错嵌补会在主要的推出 PostgreSQL 的主要版本之後出现。你可依据自己 需要,自行进行修补。请跟从以下步骤∶ 到 postgresql 程式码的目录 # rpm -i postgresql*.src.rpm # cd /usr/src/postgresql6.5.3 # man patch # patch -p0 < patchfile # make clean # make 嵌补档是在 * PostgreSQL 嵌补∶ [55]ftp://ftp.postgresql.org/pub/patches 7. 快速开始指引 请参考 [56]快速安装指引一章。 7.1 资料库建立、丢弃、改名 你可使用使用者友善的 GUI,名为‘pgaccess’来建立和丢弃资料库,也可用指 令列‘psql’工具。 _________________________________________________________________ 如你以 root 身份登入,变身为用者‘postgres’∶ # xhost + (让 pgaccess 使用显示装置) # su - postgres bash$ man createdb bash$ createdb mydatabase bash$ man psql bash$ psql mydatabase …在 psql 按上 / 下箭咀来编辑历史纪录或用 \s bash$ export DISPLAY=<主机名>:0.0 bash$ man pgaccess bash$ pgaccess mydatabase _________________________________________________________________ 你现在可以在 psql 或 pgaccess 高速下达 SQL 指令。 要丢弃资料库的话∶ _________________________________________________________________ bash$ man dropdb bash$ man destroydb (在较旧版本的 pgsql 中使用) bash$ dropdb <资料库名称> _________________________________________________________________ 也可以在一个 SQL 连接期间用以下指令消灭一个资料库∶ _________________________________________________________________ > drop database <资料库名称> _________________________________________________________________ 要更改资料库名称,请参阅 [57]备份和还原一节 7.2 建立和丢弃用户 要建立新用户,以 unix 用户‘postres’签入,你可用简单易用的 GUI 工具 ‘pgaccess’来增减用户。 _________________________________________________________________ bash$ man pgaccess bash$ pgaccess <资料库名称> _________________________________________________________________ 击选“Users”tab,再击选 Object|New 或 Object|Delete 你也可用指令行命令稿 (script)。名为‘createuser’的命令稿启动 psql。 _________________________________________________________________ bash$ man createuser bash$ createuser <用户名称> bash$ createuser -h host -p port -i userid <用户名称> _________________________________________________________________ 要丢弃一个 postgres 用户,使用命令稿‘destroyuser’。 _________________________________________________________________ bash$ man dropuser bash$ man destroyuser (在较旧版本的 pgsql 中使用) bash$ destroyuser _________________________________________________________________ 7.3 建立和丢弃群组 目前没有简单的介面可用来设定用户群组。你要自行在 pg_group 表格中插入或 更新纪录。如∶ _________________________________________________________________ bash$ su - postgres bash$ psql <资料库名称> …在 psql 按上 / 下箭咀来编辑历史纪录或用 \s psql=> insert into pg_group (groname, grosysid, grolist) psql=> values ('posthackers', '1234', '{5443, 8261}' ); INSERT 58224 psql=> grant insert on foo to group posthackers; CHANGE psql=> _________________________________________________________________ pg_group 中的栏位为∶ groname 群组名称。这名称必须全为字母或数字,不可 有底线或标点符号。 grosysid 群组代码。这是一个 int4,每个群组都要独一无二。 grolist 属於此群组的 pg_user 代码名单。是一个 int4[]。 要删除群组∶ _________________________________________________________________ bash$ su - postgres bash$ psql <资料库名称> …在 psql 按上 / 下箭咀来编辑历史纪录或用 \s psql=> delete from pg_group where groname = 'posthackers'; _________________________________________________________________ 7.4 建立、编辑和丢弃表格 你可使用使用者友善的 GUI,名为‘pgaccess’,或指令列‘psql’工具来建立 、编辑和丢弃资料库表格。 _________________________________________________________________ bash$ man pgaccess bash$ pgaccess <资料库名称> _________________________________________________________________ 击选 Table | New | Design 按钮。 _________________________________________________________________ bash$ man psql bash$ psql <资料库名称> …在 psql 按上 / 下箭咀来编辑历史纪录或用 \s _________________________________________________________________ 在 psql 提示下,键入标准的 SQL 指令,如‘create table’、‘alter table ’或‘drop table’来处理表格。 7.5 建立、编辑和丢弃表格中的纪录 你可使用使用者友善的 GUI,名为‘pgaccess’,或指令列‘psql’工具来建立 、 编辑和丢弃资料库表格中的纪录。 _________________________________________________________________ bash$ man pgaccess bash$ pgaccess <资料库名称> _________________________________________________________________ 击选 Table | < 选一个表格 > | Open 按钮。 _________________________________________________________________ bash$ man psql bash$ psql <资料库名称> …在 psql 按上 / 下箭咀来编辑历史纪录或用 \s _________________________________________________________________ 在 psql 提示下,键入标准的 SQL 指令,如‘insert into table_name’、 ‘update table_name’或‘delete from table_name’来处理表格。 7.6 改变目前的资料库 你可使用使用者友善的 GUI,名为‘pgaccess’,或指令列‘psql’工具来改变 目前的资料库。 _________________________________________________________________ bash$ man pgaccess bash$ pgaccess <资料库名称> _________________________________________________________________ 击选 Database | Open 按钮。 _________________________________________________________________ bash$ man psql bash$ psql <资料库名称> …在 psql 按上 / 下箭咀来编辑历史纪录或用 \s psql=> connect <资料库名称> _________________________________________________________________ 7.7 备份与还原资料库 PostgreSQL 提供了两个工具来备份你的系统∶pg_dump 备份一个资料库 ,pg_dumpall 一次过备份所有资料库。 _________________________________________________________________ bash$ su - postgres bash$ man pd_dump bash$ pd_dump <资料库名称> > database_name.pgdump _________________________________________________________________ 还原则∶ _________________________________________________________________ bash$ cat database_name.pgdump | psql <资料库名称> _________________________________________________________________ 这技考可用於搬移资料库或为资料库改名。 警告∶每个资料库都要定时备份。因为 PostgreSQL 自行管理它在档案系统中的 档案,所以不要倚赖系统备份来作资料库备份。 没有人能保证那些档案在还原後 会处於一个可用而一致的状态。 备份大型资料库∶因为 PostreSQL 容许表格大过系统的最大档案容量,把一个表 格输出为一个档案会有问题, 因为所产生的档案可能会超出系统的限制。因为 pg_dump 会写到 stdout,你可使用标准的 unix 工具来解决这可能的问题∶ 使用压缩了的输出∶ _________________________________________________________________ bash$ pg_dump <资料库名称> | gzip > filename.dump.gz _________________________________________________________________ 用以下方法重新载入∶ _________________________________________________________________ bash$ createdb <资料库名称> bash$ gunzip -c filename.dump.gz | psql <资料库名称> _________________________________________________________________ 或 _________________________________________________________________ bash$ cat filename.dump.gz | gunzip | psql <资料库名称> _________________________________________________________________ 使用 split∶ _________________________________________________________________ bash$ pg_dump <资料库名称> | split -b 1m - filename.dump. _________________________________________________________________ 注意∶以上指令中,在 filename.dump 後有一点 (.)!!你可用以下方法重新载 入∶ _________________________________________________________________ bash$ man createdb bash$ createdb <资料库名称> bash$ cat filename.dump.* | pgsql <资料库名称> _________________________________________________________________ 当然,档案名称(filename)和 pg_dump 输出的内容无需和资料库名称配合。此 外,还原了的资料库可有任何新名。 因此这方法适用於为资料库改名。 要把所有 PostgreSQL 输出,使用 pg_dumpall _________________________________________________________________ bash$ man pg_dumpall bash$ pg_dumpall -o > db.out 要重新载入∶ bash$ psql -e template1 < db.out _________________________________________________________________ 7.8 资料库保安 请参阅 [58]PostgreSQL 保安一节。 7.9 线上求助 你必须知道 PostgreSQL 的线上求助设施,因为它会为你节省很多时间,让你快 速取得资料。 请参阅不同指令,如 createdb、createuser 等等的线上 man pages。 _________________________________________________________________ bash$ man createdb _________________________________________________________________ 也请参阅 psql 的线上求助讯息,在 psql 提示键入 \h _________________________________________________________________ bash$ psql mydatabase psql> \h 提示∶在 psql 按上 / 下箭咀来编辑历史纪录或用 \s _________________________________________________________________ 7.10 建立激发 (Triggers) 和内储程序 (Stored Procedures) 要建立激发或内储程序,先在你使用的资料库执行‘createlang’命令稿来安装 ‘plpgsql’。如果你想预设使用它,把它安装在‘template1’, 因为以後建立 的资料库都是 template1 的仿装品。参阅‘createlang’网页或位於 /usr/doc/postgresql-7.0.2/user/index.html 的 User Guide。 _________________________________________________________________ bash$ man createlang bash$ createdb mydb bash$ export PGLIB=/usr/lib/pgsql bash$ createlang plpgsql mydb bash$ createlang plpgsql template1 _________________________________________________________________ 也请参考 [59]例子 RPM 中激发和内储程序的例子。Examples RPM 中的其中一个 例子∶ _________________________________________________________________ create function tg_pfield_au() returns opaque as ' begin if new.name != old.name then update PSlot set pfname = new.name where pfname = old.name; end if; return new; end; ' language 'plpgsql'; create trigger tg_pfield_au after update on PField for each row execute procedure tg_pfield_au(); _________________________________________________________________ 另一个激发程式码例子∶ _________________________________________________________________ create trigger check_fkeys_pkey_exist before insert or update on fkeys for each row execute procedure check_primary_key ('fkey1', 'fkey2', 'pkeys', 'pkey1', 'pkey2'); _________________________________________________________________ 你必须安装 TEST 套件□ postgresql-test-7.0.2-2.rpm 和阅读在 /usr/lib/pgsql/test/regress/sql 中的 SQL 命令稿例子。 要显示资料库中激发的名单□ _________________________________________________________________ bash$ psql mydb psql=> \? psql=> \dS psql=> \d pg_trigger psql=> select tgname from pg_trigger order by tgname; _________________________________________________________________ 要显示资料库中函数和内储程序的名单□ _________________________________________________________________ bash$ psql mydb psql=> \? psql=> \dS psql=> \d pg_proc psql=> select proname, prosrc from pg_proc order by proname; psql=> \df _________________________________________________________________ 7.11 PostgreSQL 文件 有关其他问题,请参阅 PostgreSQL 的说明书,它们的资料十分全面 。PostgreSQL 文件已在套件中。请阅读‘User's Guide’、‘Programmer's Guide’、‘Administrator's Guide’和其他说明书。 8. PostgreSQL 支援超过 200 Gig 的超级资料库 早已有很多大公司将 PostgreSQL 用於大型的资料库。在此提供以下技考∶ 8.1 中央处理器种类□32 位元或 64 位元 32 位元处理器的电脑在资料库超过 5 GigaByte 时表现会迅速下降。你可用 32 位元处理器执行 30 gig 的资料库,但表现会下降。32 位元机器受到最多 2 GB 记忆体、2 GB 档案系统及操作系统其他方面的限制。使用 SGI、IBM、或 HP 为 Linux 特制的档案系统或 ext3-fs 来在 32 位元机器上支援大过 2 GB 的档案大 小。 对极大型的资料库来说,我强烈建议你使用 64 位元处理器,如 Digital Alpha 、Sun Ultra-sparc 64 位元处理器、SGI 64 位元处理器、Intel Mercel IA-64 处理器、HPUX 64 位元电脑、IBM 64 位元电脑。使用 64 位元的处理器来编译 PostgreSQL,它就可以处理大型的资料库及查询。查询大型表格和资料库的速度 会比 32 位元的电脑快数倍。64 位元电脑的优点是你有很大的记忆位址 (memory addressing space) 和操作系统可处理很大的档案系统、为大型资料库 提供较佳表现、 支援更多记忆体、能力更强…… (译按∶2.4 的 Linux 核心已突破 2 GB 档案大小的限制,并支援最多 64 GB 记忆体。) 8.2 多处理器 要使用大型的资料料,你最好使用内有 4、16 或 32 夥处理器的 SMP 电脑。另 一方面,你也可使用 4 至 5 部单处理器电脑,而把你的资料库分割 (partition) 为 4 至 5 个分开的资料库,每个在一部电脑运行。每个处理器都 以高速 (100MBits)的乙以太网络卡连接。例如,你的资料库中有二百个表格, 你可把它们分为四个资料库,每个有五十个表格。这样,你把工作平均分配给 4 部分开的电脑。这是一个比四处理器电脑便宜的方案。 你可使用‘跨资料库的查 询’、在区域网络使用 NFS、为唯读表格‘CREATE VIEW’来完成这工作。每个处 理器都可「见到」所有资料库,即全部 200 个表格。在未来,PostgreSQL 会支 援‘跨资料库的查询’(已经在 TODO 名单),在将推出的 7.1 版出现。例如, 使用代号 a、b 作表格名称作的跨资料库查询会类似□□ _________________________________________________________________ select a.col1, a.col2, b.col4, b.col7 from database1.my_tablea a, database2.my_tableb b where a.col1 = b.col3 and a.col4 = b.col9; update my_tablea set col1 = b.col2 from database1.my_tablea a, database2.my_tableb b where a.col4 = b.col9; _________________________________________________________________ 8.3 复制 (Replication) 伺服器 为大型企业/商业公司而设的复制伺服器由 PostgreSQL Inc 作商业贩卖。你可使 用复制伺服器来提供重覆的资料及高度可得性 (availability)。复制伺服器是一 件复杂、先进的产品,因此需要金钱。 9. 凭什麽相信 PostgreSQL?Regression 测试套件为用户建立信心 有赖「物理学定律」,我们可以科学地检证 PostgreSQL 是否真的依从 ISO/ANSI SQL 规格工作。为方便测试 PostgreSQL,Regression 测试套件 (src/test/regress)已包含在发行版本 (distribution) 中, 它容许你的电脑 检证标准的 SQL 操作及 PostgreSQL 的延伸能力。 测试套件中已包含了数百个 SQL 测试程式。 你应用电脑的高速来验证 PostgreSQL,而不是用人脑。 电脑可以人脑千万倍甚 至数以亿倍的速度来进行 Regression 测试。现代电脑可在很短时间内执行数十 亿个 SQL 测试。在不久将来,电脑会比人脑快数以兆倍。因此, 使用电脑来测 试电脑的表现是合理的。 如有需要,你也可自行增加测试。如果你认为它会对其你互联网用家有帮助, 你 也可把它上载到 PostgreSQL 的主网站。Regression 测试套件帮助用户建立对 PostgreSQL 的信心及信任,它也帮助生产系统迅速设立 PostgreSQL。 Regression 测试套件可被视为开发人员与最终用户间相互同意的一份“非常有力 ”的技术文件。PostgreSQL 在开发过程及推出软件之前广泛使用 Regression 测 试套件来保证质素。 PostgreSQL 的能力可籍 Regression 测试套件直接反映出来。如果一种功能、 语法或特性在 Regression 测试中存在,它就被支援,所有其他没有列出的 PostgreSQL 就可能不支援!!你可以自行验证及加入 Regression 测试套件中。 10. 资料库保安 资料库保安问题需在多个不同层面探讨∶ * 资料库档案保护。资料库的所有档案都不淮 postgres 超级用户以外的用户 读取。 * 据预设值,从用户连接到资料库伺服器只能透过本机的 UNIX 插座 (socket),不是 TCP/IP 插座。伺服器需以 -i 选项启动才能容许非本机客 户连接。 * 客户连接可以 IP 地址和 / 或用者名称加以限制,只需修改 $PG_DATA 中的 pg_hba.conf 档。 * 可籍外部套件认证客户连接。 * 每位 Postgres 用户都有一个使用者名称和选择性地拥有一个密码。 预设值 是用户没有权限写入不是自己建立的资料库。 * 用户可被编配到群组中,能否存取一个表格可以群组特权来限制。 10.1 用户认证 认证是後端伺服器和 postmaster 确保要求存取资料的用户是否确为其人的过程 。所有启动 Postgres 的用者都与认证是後端伺服器和 postmaster pg_user 类 别比较,以确定他们有权做想做的工作。 而用者真实身分的辨别工作以多个不同 方法完成∶ * 在使用者 shell 中∶ 在使用者 shell 直接启动的後端伺服器记下用者的( 有效)使用者代号 (effective user-id),之後作一次 setuid 来化身为 postgres。 有效使用者识别号会被用作存取控制的基础。再没有其他认证工 作。 * 来自网络∶ 如果 Postgres 系统以分散式运行,任何人都可存取 postmaster 行程 (process) 的互联网 TCP 埠。资料库管理员需设定 $PGDATA 目录中的 pg_hda.conf 档,来指定不同主机连接不同资料库时所用 的认证系统。 请参阅 pg_hba.conf(5) (man 5 pg_hba.conf) 以了解不同 认证系统。当然,根据主机来进行认证在 Unix 也不是毫无破碇。有决心的 入侵者也可以伪装自己所用的主机。这些保安问题不在 Postgres 的控制□ 围。 10.2 依据主机控制存取 依据主机控制存取即 PostgreSQL 用於决定什麽客户可存取资料库和他们如何确 认身份的过程。每个资料库都有一个名为 pg_hba.conf 的档案,在它的 $PGDATA 目录中,它控制谁能存取资料库。每个存取资料库的用户都要在 pg_hba.conf 中有相应的纪录。否则所有来自该客户的连接都会以"User authemtication failed" 错误讯息被拒。 请参阅 pg_hba.conf(5) 的 man page(man 5 pg_hba.conf)。 pg_hba.conf 档的基本格式是一组纪录,一行一个。空行或以 hash 字母(#)开 始的行则不理会。一个纪录由一些用空格和 / 或 Tab 分开的栏位组成。 从客户来的连接可经 Unix 插座或互联网插座(即 TCP/IP)。来自 Unix 插座的 连接用以下格式的记录控制∶ _________________________________________________________________ local database authentication method _________________________________________________________________ 而 database 指定本纪录用於哪个资料库。all 代表它适用於所有资料库。 authentication method 指定用户在使用 Unix 插座时用来认证的方法。不同的 方法容後详述。 来自互联网插座的连接用以下格式的记录控制∶ _________________________________________________________________ host database TCP/IP-address TCP/IP-mask authentication method _________________________________________________________________ TCP/IP 地址会 逻辑上 and'ed 到指定的 TCP/IP 罩和客户的 TCP/IP 地址。如 两者相等,这纪录会用於这个连接。如果一个连接符合超过一个纪录, 档案中的 第一个纪录会被使用。不论 TCP/IP 地址还是 TCP/IP 罩都是以分点的十进数格 式 (dotted decimal notation) 表达。如果一个连接和所有纪录都不符 ,reject 认证方法将会被使用。(参阅 [60]认证方法) 10.3 认证方法 Unix 和 TCP/IP 插座都支援以下认证方法∶ * trust 无条件地容许连接。 * reject 无条件地拒绝连接。 * crypt 问客户端用者的密码。它会经加密(使用 crypt(3))和与 pg_shadow 表格的密码比较。如果密码相符,便容许连接。 * password 问客户端用者的密码。它会原装传送和与 pg_shadow 表格的密码 比较。如果密码相符,便容许连接。一个选择性的密码档可在 password 关 键字後出现。这样密码的配对会用这档案,而不是 pg_shadow 档案。请参阅 pg_passwd。 以下认证方法只受 TCP/IP 插座支援∶ * krb4 用 Kerberos V4 来认证用户。 * krb5 用 Kerberos V4 来认证用户。 * ident 用客户端的 ident 伺服器来认证用户(RFC 1413)。在 ident 关键 字後还可选择性地指明一个映射,让 ident 用户名称对应到 Postgres 用户 名称。对应的关系储存在 $PGDATA/pg_ident.conf 档中。 这里有一些例子∶ _________________________________________________________________ # 信任所有来自 Unix 插座的连接。 local trust # 信任所有这部电脑经 TCP/IP 来的连接。 host all 127.0.0.1 255.255.255.255 trust # 我们讨厌这部电脑。 host all 192.168.0.10 255.255.255.0 reject # 这部电脑不懂加密,所以我们要纯文字的密码。 host all 192.168.0.3 255.255.255.0 password # 这群电脑的其他成员都要提供加密了的密码。 host all 192.168.0.0 255.255.255.0 crypt _________________________________________________________________ 10.4 存取控制 Postgres 提供了限制其他用家存取自己资料的机制。 * 资料库超级用家 (Database superusers) 资料库超级用家(即 pg_user.usesuper 设定为对的用家)自动通过以下两项之外的所有存取控制 ∶pg_user.usecatupd 没有设定为对的话不准手动更新系统目录,摧毁系统 目录(或修改它的纲目 (schema))则永不准许。 * 存取特权 (Access Privilege) 存取特权是用来限制读、写和设定类别 (class) 规则的权力,用 SQL grant/revoke(1) 来决定。 * 移除类别和修改纲目 毁灭或修改现存类别的结构,如修改、丢弃表格,和丢 弃索引,只能由类别的主人执行。 如上所述,这类动作不许用於系统目录。 10.5 经 SSH 的保安 TCP/IP 连接 你可用 ssh 来加密客户和 Postgres 伺服器间的网络连接。做得正确的话,这样 可形成一个保安的网络连接。 ssh 的文件提供了大部份开始时需要的资料。请参阅 [61]http://www.heimhardt.de/htdocs/ssh.html 以加深了解。逐步解释只需两 步。 经 ssh 形成一条保安通道∶ 逐步解释只需两步。 * 产生一条到後端电脑的通道,如下∶ _____________________________________________________________ ssh -L 3333:wit.mcs.anl.gov:5432 postgres@wit.mcs.anl.gov _____________________________________________________________ * -L 参数後的第一个数字,33333,是你这方通道的埠号。第二个数字, 5432,是另一方的终点□後端的埠号。两个埠数之间的名称或地址属於伺服 器。 ssh 最後一个参数中用家自行选择是否加上的用户名称也是。 没有用 户名称的话,ssh 会尝试使用登入客户端电脑的用户名称。 你可用任何伺服 器电脑接受的用户名称,不一定要用和 PostgreSQL 有关的。 * 你现在已开始了一个 ssh 时段,你把可你所用的电脑的 Postgres 客户连接 到你前一步所定的埠号。如你使用 psql,你要另一个介面,因为之前所用的 一个已被 ssh 占据。 _____________________________________________________________ psql -h localhost -p 3333 -d mpw _____________________________________________________________ * 注意你要用 -h 参数使得你的客户用 TCP 插座而不是 Unix 插座。如果你用 5432 作通道的终点你可略去埠的参数。 10.6 Kerberos 认证 Kerberos 是一个业界标准的保安认证系统,适用於经过公用网络的分散式系统。 如何取得 Kerberos 认证系统并不随同 Postgres 散布。不同版本的 Kerberos 多以可供选择的软件的形式自作业系统厂商得到。此外,原程式码的发行版本 (distribution) 可自 MIT Project Athena 得到。 _________________________________________________________________ 注意∶即使你使厂商提供了 Kerberos,你仍可能想用 MIT 版,因为一些厂商的版本被故意弄坏以致不能和 MIT 版本合作。 _________________________________________________________________ 有关 Kerberos 的查询可提交你的厂商或 MIT Project Athena。注意 FAQLs(常 问问题名单,Frequently-Asked Questions Lists) 会被定时寄至 Kerberos 通 信论坛(寄信去订阅),和 USENET 新闻组。 安装∶ 安装 Kerberos 在 Kerberos Installation Notes 中已详细说明。要确 定伺服器键码档 (key file)(srvtab 或 keytab)可被 postgres 用户读到。籍 设定 src/Makefile.global 档的 KRBVERS 变数,Postgres 或其客户程式可编译 为使用 MIT Kerberos 通讯协定的第四或五版。你也可改变 Postgres 期望找到 相关函式库、标头档和自己的伺服器键码档的位置。编译完後, Postgres 要登 记为一个 Kerberos 服务。请参阅 Kerberos Operations Notes 和相关 manual pages 以取得有关登记服务的详情。 操作∶ 安装之後,Postgres 在各方面应如一般 Kerberos 服务运作。要知道认 证的使用方法,请参阅 PostgreSQL User's Guide 有关 postmaster 和 psql 的 章节。 在 Kerberos 第五版挂钓 (hooks),对用户和服务命名作了以下假设(也请参阅 以下表格)。 * 用户的主要名称 (principal names,anames) 第一个部份中假设含有 Unix / Postgres 用户名称。 * Postgres 服务假设有两个部份,服务名称和主机名称。後者如同第四版的格 式 (即除去所有域名的部分)。 _________________________________________________________________ 表格∶Kerberos 参数例子 ------------------------------------------------------ 参数 例子 ------------------------------------------------------ user frew@S2K.ORG user aoki/HOST=miyu.S2K.Berkeley.EDU@S2K.ORG host postgres_dbms/ucbvax@S2K.ORG ------------------------------------------------------ _________________________________________________________________ 11. PostgreSQL 的前端 GUI 工具(图像使用者界面) 网页浏览器在未来将会成为最流行的前端 GUI。建议你把所有「祖传」的视窗 95/NT 程式改写为在网上执行的程式。 你要使用网上应用程式伺服器如 [62]Enhydra (使用 Java)或 [63]Zope (使 用 Python)或 [64]OpenACS 。 最佳网上命令稿 (script) 编写(或编译)语言是 [65]PHP+Zend 编译器。PHP 功能十分强劲,因为它把 Perl、Java、C++ 和 Javascript 的功能结合到一种语 言中,而且可於所有作业系统□Unixes 和视窗 NT/95 执行。 排名以喜欢的程度为先後,最佳工具为 * Enhydra 在 [66]Enhydra 加上 Borland Java JBuilder Linux 版 [67]http://www.inprise.com * Zope 在 [68]Zope * OpenACS 在 [69]OpenACS * PHP 命令稿和 Zend 编译器 [70]PHP+Zend 编译器 * X-Designer 支援 C++, Java 和 MFC [71]http://www.ist.co.uk/xd * Windows95 和 Unix 版的 QT 在 [72]http://www.troll.no 和 [73]ftp://ftp.troll.no * Code Crusader 在 Linux cdrom 中,根据 MetroWorks Code Warrior 写成 的免费软件 [74]http://www.kaze.stetson.edu/cdevel/code_crusader/about.html * MetroWorks 的 Code Warrior [75]http://www.metrowerks.com * GNU Prof C++ IDE,来自 [76](Redhat) Cygnus [77]http://www.cygnus.com * Borland C++ Builder Linux 版 [78]http://www.inprise.com * Borland Java JBuilder Linux 版 [79]http://www.inprise.com 以最佳为先的语言选择□ 1. Java,但它的程式执行得很慢,而且要授权费。C++ 比 Java 快五倍!! 2. Python(强大的物件导向命令稿语言)。 3. PHP 万维网伺服器命令稿加上 HTML、DHTML、Javascript 客户端命令稿及 Java-Applet。 4. Perl 命令稿语言使用 Perl-Qt 或 Perl-Tk [80]Perl 资料库介面 5. Omnipresent 和 Omnipotent 语言 C++ (GNU g++)∶ + Fast CGI(以 C++ 写成)加上 Javascript/Java-Applet 作为网页前 端介面 + GNU C++ 加 QtEZ 或 QT + GNU C++ 加 Lesstif 或 Motif。 还有其他工具□PostgreSQL 发行版本 (distribution) 中有一个名为‘pgTcl’ 的 Tcl/Tk 介面程式库。Tcl/Tk 有一个名为 SpecTcl 的综合开发环境。 * Lesstif Motif 工具 [81]ftp://ftp.redhat.com/pub/contrib/i386/lesstif*.rpm * Vibe Java/C++ 在 [82]http://www.LinuxMall.com/products/00487.html * JccWarrior [83]ftp://ftp.redhat.com/pub/contrib/i386/jcc*.rpm * Tcl/Tk [84]http://www.scriptics.com * 名为 INCR 的 Tcl 物件导向延伸 [85]http://www.tcltk.com * Visual TCL 网站 [86]http://www.neuron.com * Visual TCL Redhat rpm 在 [87]ftp://ftp.redhat.com/pub/contrib/i386/visualtcl*.rpm * [88]http://sunscript.sun.com/ * [89]http://sunscript.sun.com/TclTkCore/ * [90]ftp://ftp.sunlabs.com/pub/tcl/tcl8.0a2.tar.Z * Java FreeBuilder [91]ftp://ftp.redhat.com/pub/contrib/i386/free*.rpm * SpecTCL [92]ftp://ftp.redhat.com/pub/contrib/i386/spec*.rpm * PostgreSQL 的 Java RAD 工具 Kanchenjunga [93]http://www.man.ac.uk/~whaley/kj/kanch.html * Applixware 工具 [94]http://www.redhat.com (译按∶Redhat 早已停售 Applix 产品。) * XWPE X Window Programming Environment [95]http://www.identicalsoftware.com/xwpe/ 或 [96]ftp://ftp.rpi.edu/~payned/xwpe [97]ftp://ftp.redhat.com/pub/contrib/i386/xwpe*.rpm * XWB X Window Work Bench [98]ftp://ftp.redhat.com/pub/contrib/i386/xwb*.rpm * NEdit [99]ftp://ftp.redhat.com/pub/contrib/i386/nedit*.rpm 你也可在视窗 95 中使用 Borland C++ Builder、Delphi、Borland JBuilder、 PowerBuilder 经 ODBC/JDBC 驱动程式连接到 unix 电脑的 PostgreSQL。 12. PostgreSQL 的介面驱动程式 12.1 PostgreSQL 的 ODBC 驱动程式 ODBC 代表由微软制定的‘Open DataBase Connectivity’。 它是从不同厂商的 不同资料库存取资料的流行介面。使用 ODBC 驱动程式写成的软件保证可用於不 同资料库,如 PostgreSQL、Oracle、Sybase 和 Informix 等。 * [100]PostODBC 已经包括在发行版本中。请参阅主网页 [101]http://www.postgresql.org。 它已包括在 PostgreSQL 光碟中。 * 在 [102]http://www.iodbc.org 的开放原始码 ODBC 专案。 * [103]http://www.openlinksw.com Open Link Software Corporation 售卖 PostgreSQL 和其他资料库的 ODBC 驱动程式。她也送出免费的 ODBC (名额 有限)。 * Insight 的 PostgreSQL ODBC [104]http://www.insightdist.com/psqlodbc 这是 PostODBC 的官方网站。 * FreeODBC 套件 [105]http://www.ids.net/~bjepson/freeODBC/。这是一个 免费的 ODBC。 * PostgreSQL 的 ODBC 32 Explorer [106]http://members.nbci.com/anhr 12.2 PostgreSQL 的 UDBC 驱动程式 UDBC 是一种独立於驱动程式管理员 (driver managers) 和 DLL 支援的静态 ODBC 版本,用来直接把资料库连接能力嵌入到应用软件中。 * [107]http://www.openlinksw.com Open Link Software Corporation 出售 PostgreSQL 和其他资料库的 UDBC 驱动程式。Open Link 也送出免费的 UDBC (名额有限)。 12.3 PostgreSQL 的 JDBC 驱动程式 JDBC 代表‘Java DataBase Connectivity’。Java 是一种升阳 (Sun Microsystems) 所开发的独立於平台的程式语言。Java 程式设计师被鼓励使用 JDBC 来撰写资料库程式,以增强程式在不同资料库,如 PostgreSQL、Oracle 、Informix 等之间的移植能力。如果你写 Java 程式,你可在以下网站取得 PostgreSQL 的 JDBC 驱动程式。 JDBC 驱动程式已包括在 PostgreSQL 发行版本的 postgresql-jdbc*.rpm 套件中 。 * [108]http://www.demon.co.uk/finder/postgres/index.html 升阳 Java 的 PostgreSQL 连接 * [109]ftp://ftp.ai.mit.edu/people/rst/rst-jdbc.tar.gz * [110]http://www.openlinksw.com Open Link Software Corporation 出售 PostgreSQL 和其他资料库的 JDBC 驱动程式。Open Link 也送出免费的 JDBC (名额有限)。 * JDBC 英国网站 [111]http://www.retep.org.uk/postgres * JDBC FAQ 网站 [112]http://eagle.eku.edu/tools/jdbc/faq.html JDBC 的网页、导引和 FAQ 在∶ * JDBC HOME [113]http://splash.javasoft.com/jdbc * JDBC 导引 [114]http://www.javasoft.com/products/jdk/1.1/docs/guide/jdbc * JDBC FAQ [115]http://javanese.yoyoweb.com/JDBC/FAQ.txt 请参考 [116]测试 Java 介面 一节。 12.4 PostgreSQL 的 Java Java 程式设计师会觉得这些对他们很有用。 * [117]ftp://ftp.redhat.com/pub/contrib/i386 看 postgresql-jdbc-*.rpm * [118]http://www.blackdown.org 请参考 [119]测试 Java 介面 一节。 13. PostgreSQL 的 Perl 资料库介面 (Database Interface, DBI) 13.1 PostgreSQL 的 PERL 介面 PERL 是‘Practical Exptraction and Report Language’的简写。 世上所有软 硬件平台都可使用 Perl。你所在视窗 95/NT、苹果麦金塔 iMac、所有 Unix (Solaris、HPUX、AIX、Linux、Irix、SCO 等等)、大型电脑 MVS、桌面的 OS/2、OS/400、Amdahl UTS 和其他很多电脑。Perl 甚至可在很多不流行和不为 人知的操作系统和硬件执行!!所以,在看到 Perl 在一个罕见的操作系统上执 行时,不必大惊小怪。你可以想像到 Perl 的使用者和开发人员的数量。和“C” 语言相似,Perl 已有很长寿命,而在未来数千年仍大行其道!Perl 的执行速度 比 Java 快十倍,有时甚至比“C”快。Java 是一个非常复杂的系统,既有虚拟 机器,又有直译器,使得它非常缓慢、不稳定和不可靠。 Perl 则简洁、快速, 更是物件导向。 PostgreSQL 的 Perl 介面已包括在 PostgreSQL 的安装套件中。请参看 src/pgsql_perl5 目录。 * Pgsql_perl5 电邮联络地址∶ [120]E.Mergl@bawue.de * Perl 网页 [121]http://www.perl.com/perl/index.html * Perl 导引,请在 [122]http://reference.perl.com/ 参看导引目录 * Perl FAQ 在 [123]http://www.yahoo.com/Computers_and_Internet/Programming_Langu ages/Perl/ * 从 [124]http://www.perl.com/CPAN/modules/by-module/CPAN 取得所有 Perl 模组之母,打下‘/usr/bin/cpan’、‘man CPAN’和数以千计的模组 [125]http://www.perl.com/CPAN-local/modules/by-module。 * Perl GUI 使用者介面 Perl-Qt rpm∶ [126]ftp://ftp.redhat.com/pub/contrib/i386 也请看 PerlQt-1.06-1.i386.rpm * Perl GUI 使用者介面 Perl-Qt∶ [127]http://www.accessone.com/~jql/perlqt.html * Perl GUI 使用者介面 Perl-XForms∶ [128]ftp://ftp.redhat.com/pub/contrib/i386,寻找 Xforms4Perl-0.8.4-1.i386.rpm * Perl GUI 使用者介面 Perl-Tk∶ [129]ftp://ftp.redhat.com/pub/contrib/i386 * Perl GUI kits∶ [130]http://reference.perl.com/query.cgi?ui * Perl 资料库介面∶ [131]http://reference.perl.com/query.cgi?database * Perl 到 "C" 的翻译工具∶ [132]http://www.perl.com/CPAN-local/modules/by-module/B/ 寻找 Compiler-a3.tar.gz * 把 Perl 编译为可执行档。Perl2Exe 是一个可把 perl 命令稿转为可执行档 的的指令列工具。 [133]http://www.indigostar.com/perl2exe.htm * Bourne shell 到 Perl 的翻译工具∶ [134]http://www.perl.com/CPAN/authors/id/MERLYN/sh2perl-0.02.tar.g z * awk 转为 perl 的 a2p 和 sed 转为 perl 的 s2p 已包括在 PERL 散布中。 * 也请看 comp.lang.perl.* 等有关 PERL 的新闻组 13.2 Perl 资料库介面 DBI 何谓 DBI? Perl 资料库介面(DBI)是 Perl 语言的一个资料库存取应用程式介面(API) 。Perl DBI API 规格定义了一组函数、变数和惯例,以提供一个一致而独立於实 际所用资料库的介面。 资料库驱动程式(Perl DBI)的发起人为一定数量的商业 资料库引擎制定标准, 所以你只需花很少工夫便可从 Oracle 转到 PostgreSQL 。 PostgreSQL 的 DBD 驱动程式 在你安装 DBD PostgreSQL (驱动程式)前,你要先安装 DBI,从以下地方取得 DBI 驱动程式∶ * 先从 [135]http://www.perl.com/CPAN/modules/by-module/CPAN 取得所有 Perl 模组之母,打‘/usr/bin/cpan’、‘man CPAN’和数以千计的模组 [136]http://www.perl.com/CPAN-local/modules/by-module。 * DBI 模组 [137]http://www.perl.com/CPAN-local/modules/by-module/DBI * DBI 模组 [138]http://www.symbolstone.org/technology/perl/DBI * DBI FAQ [139]http://www.symbolstone.org/technology/perl/DBI/doc/faq.html * Perl DBI 的参考文件 [140]http://www.symbolstone.org/technology/perl/DBI * DBI 通信论坛 [141]http://www.fugue.com/dbi * Perl 资料库参考文件 [142]http://www.perl.com/reference/query.cgi?section=database * 下载 DBI rpm (注意∶可能是旧版) [143]http://rpmfind.net/linux/rpm2html/search.php?query=DBI 在此取得 DBD-Pg * 先从 [144]http://www.perl.com/CPAN/modules/by-module/CPAN 取得所有 Perl 模组之母,打‘/usr/bin/cpan’、‘man CPAN’和数以千计的模组 [145]http://www.perl.com/CPAN-local/modules/by-module。 * DBD 模组 [146]http://www.perl.com/CPAN-local/modules/by-module/DBD ,找 DBD-pg 档或 [147]DBD。 * Comprehensive Perl Archive Network CPAN [148]http://www.perl.com/CPAN 在这处选‘Database’(在 Search 盒子 上方), 击选‘Go’按钮。 * 预先编译了的视窗 NT/2000 套件可在 [149]http://www.edmund-mergl.de/export/DBD-Pg.zip 得到 * 下载 DBD rpm (注意∶可能是旧版) [150]http://rpmfind.net/linux/rpm2html/search.php?query=DBD * Perl 模组(数以千计) [151]http://www.perl.com/CPAN-local/modules/by-module。 DBI 的技术支援 * 请将意见或错误报告连同 perl -v 和 perl -V 的输出、PostgreSQL 的版本 、DBD-pg 的版本、DBI 的版本寄至 [152]E.Mergl@bawue.de DBI 文件 这里有一些 DBI 的资料来源。 POD 文件∶ POD 是嵌入到 perl 程式中用以“即场”解释程式码的一段文件, 用以给程式设计师和模组的用家提供有用的资料。DBI 和驱动程式的 POD 正越来 越流行,要阅读有关文件,请使用以下指令。 _________________________________________________________________ DBI 规格的 PO 可用以下指令阅读 $ perldoc DBI 使用结合到 DBD::Oracle 的 Oraperl 模拟层的人可用以下指令阅读如何用 Oraperl 介面编写程式∶ $ perldoc Oraperl DBD::mSQL 模组的用家可籍以下指令阅读一些该驱动程式的独家函数 (private functions) 和特异功能的资料∶ $ perldoc DBD::mSQL POD 文件中也包含常见问题。要阅读的话请输入∶ $ perldoc DBI::FAQ POD 的一般资料□如何撰写 POD,及整体的 POD 哲学,可籍以下指令阅读∶ $ perldoc perlpod _________________________________________________________________ 安装了 Tk 模组的用家可能会对一个名为 tkpod,使用 Tk 的 POD 阅读器有兴趣 。它会把 POD 编排到一个方便及可阅读的形式。 也请看看 * 来自 DBI 的通信论坛的资料 [153]http://www.symbolstone.org/technology/perl/DBI/tidbits * DBI Perl Journal 网页 [154]http://www.tpj.com * “DBperl”这文章在一九九六年十一月的“Dr. Dobbs Journal”发表。 * “The Perl5 Database Interface”,一本由 Alligator Descartes 写成, 由 O'Reilly and Associates 出版的书。 用家可能参加的通信论坛为∶ * 通信论坛 [155]http://www.fugue.com/dbi * dbi-announce 电邮至 [156]dbi-announce-request@fugue.com 以 'subscribe' 为正文内容 * dbi-dev 开发人员专用 Email: [157]dbi-dev-request@fugue.com 以 'subscribe' 为正文内容 * dbi-users 一般讨论 Email: [158]dbi-users-request@fugue.com 以 'subscribe' 为正文内容 * 美国通信存库 [159]http://outside.organic.com/mail-archives/dbi-users/ * 欧洲通信存库 [160]http://www.rosat.mpe-garching.mpg.de/mailing-lists/PerlDB-Int erest 视窗 95/NT 有没有 DBI 支援? DBI 和 DBD::Oracle 的 Win32 版本已成为 DBI 的标准部分。因此,比 DBI 0.81 高的版本应该会正常运作。透过 ODBC,你可以存取微软 Access 和 SQL-Server 资料库。在 DBI-0.79(及以後)有一个 Win32::ODBC DBI 模拟层。 它名为 DBI::W32ODBC。你需要使用 Win32::odbc 模组。 * Win32 DBI [161]http://www.symbolstone.org/technology/perl/DBI * Win32 ODBC [162]http://www.roth.net * 微软 SQL server 的 Perl 介面 [163]http://www.algonet.se/~sommar/mssql 商业支援及训练 PERL CLINIC : Perl Clinic 以合约形式为 Perl、DBI、DBD::Oracle 和 Oraperl 提供商业支援。这些支援是由 DBI 作者 Tim Bunce 工作的公司提供的 。欲知详情,请看∶ * 支援 [164]http://www.perlclinic.com * 支援 [165]http://www.perldirect.com * 培训 [166]http://www.westlake.com/training 13.3 测试 Perl 介面 请参阅 [167]测试 Perl□PostgreSQL 介面一节 14. PostgreSQL 管理工具 14.1 PGACCESS - 管理 PostgreSQL 的 GUI 工具 PgAccess 是 PostgreSQL 的 Tcl/Tk 介面。它已经包括在 PostgreSQL 的发行套 件中。你可能想从这网页找出它有没有新版本∶ * [168]http://www.flex.ro/pgaccess * 如有任何意见、改良的建议,电邮∶ [169]teo@flex.ro pgaccess 的用法 _________________________________________________________________ # man xhost # xhost + # su - postgres bash$ man pgaccess bash$ export DISPLAY=<主机名>:0.0 bash$ pgaccess mydatabase _________________________________________________________________ PgAccess 的特色 PgAccess 视窗□Main window, Table builder, Table(query) view, Visual query builder. Tables * 开启表格 (tables) 查阅,最多二百个纪录(可在 perferences 菜单更改) * 籍拖曳垂直格线 (grid line) 重整大小(在列表空间 (table space) 进行 比在列表目录 (table header) 好) * 单格中自动换行□每个表格的配置独立储存 * 汇入/汇出其他档案格式(SDF、CSV) * 过滤功能(输入如 price>3.14 的过滤器) * 排序功能(自行输入需排序的栏位) * 即场编辑 * 改良了的表格产生助理 (table generator assistant) * 改良了的栏位编辑 Queries * 定义、编辑和储存“用家定义查询”(user defined queries) * 把查询储存作为景观 (views) * 查询的执行 * 观看 select 形式的查询结果 * 删除和更改查询名称 * 具拖曳和放下功能的 Visual query builder。如果你有安装 Netscape Navigator 的 Tcl/Tk 插件,你可在此看到它工作∶ (译按∶不知在哪?! ) 序列 (sequence) * 定义、删除和检查序列 函数 (Function) * 使用 SQL 语言定义、检查和删除函数 将来还会有以下改进 * 表格设计(增加栏位、更名等等) * 函数定义 * 报告产生器 * 基本的命令稿编写功能 有关 LIBGTCL 的资料 你会用到 PostgreSQL 到 Tcl 的介面程式库 libpgtcl,所谓的 Tcl/Tk 可‘载 入’模组。libpgtcl 和原始码位於 PostgreSQL 的 /src/interfaces/libpgtcl 目录。特定来说,你需要一个可在 Tcl/Tk‘载入’的 libpgtcl 程式库。技术上 来说,它和普通的 PostgreSQL 可载入目的档并不相同,因为 libpgtcl 是一堆 目的档 (object files) 的集合。这档案在 Linux 名为 libpgtcl.so。你可在以 上网址下载一个为 Linux i386 系统预先编译了的版本。只需把这档案拷贝到系 统程式库目录(/usr/lib) 即可。如有疑难,其中一个解决方法是删除原始码中 有关载入 libpgtcl.so 的一句和使用 pgwish(或 wishpg)来载入 pgaccess.tcl,而非 wish,因为这 wish 已链结 libpgtcl 函式库。 如果你在编译 pgaccess 目录时遇到 crypt not found 的问题,请使用 -lcrypt。 14.2 PostgreSQL 图型介面查询工具 GtkSQL GtkSQL 是一个图型介面查询工具(像 PostgreSQL 的 psql)。它以 GNU GPL 发 行。使用 Gtk+ 1.2.3 和 PostgreSQL 6.3 开发而成。 GtkSQL 的主网站为 [170]http://gtksql.sourceforge.net。 它的主要特色包括∶ 1. 多个 SQL 暂存区 2. SQL 关键字、表格名称和栏位自动完成 3. 简易显示表格定义 4. PostgreSQL 和 MySQL 支援(而且容易加上其他资料库) GtkSQL 目前的版本为 v. 0.3。你可在 [171]https://sourceforge.net/project/?form_grp=533 下载原始码。 14.3 视窗中的 PostgreSQL 互动式查询工具(WISQL 或 MPSQL) MPSQL 提供给使用者一个图像 SQL 介面控制 PostgreSQL。MPSQL 与 Oracle 的 SQL Worksheet 或微软 SQL Server 的查询工具 WISQL 类似。它有一个漂亮的 GUI 和指令记录。你也可以剪下及贴上。它还有其他有助提高生产力的功能。 * [172]http://www.troubador.com/~keidav/index.html * 电邮∶ [173]keidav@whidbey.com * [174]http://www.ucolick.org/~de/ 在 tcl_syb/wisql.html 档中 * [175]http://www.troubador.com/~keidav/index.html * 电邮∶ [176]de@ucolick.org 14.4 名为 PSQL 的 PostgreSQL 互动式查询工具(ISQL) ISQL 是供文字指令行终端机使用的。这已包括在发行版本中,名为 psql。和 Sybase ISQL、Oracle SQLplus 十分相似。在 Unix 指令提示输入‘psql’会出 现 psql> 提示。 bash# su - postgres bash$ man psql bash$ psql mydatabase 打 \h 以阅读指令的求助讯息 非常使用者友善和易用。 可在外框命令稿 (shell script) 中使用。 14.5 MPMGR□PostgreSQL 的资料库管理工具 MPMGR 为 PostgreSQL 是供一个图像管理介面。你可在以下地方找到它∶ * [177]http://www.mutinybaysoftware.com/ * Email: [178]keidav@mutinybaysoftware.com * [179]http://www.troubador.com/~keidav/index.html * 电邮∶ [180]keidav@whidbey.com * [181]http://www.ucolick.org/~de in file tcl_syb/wisql.html * PostgreSQL 的 WISQL [182]http://www.ucolick.org/~de/Tcl/pictures * 电邮∶ [183]de@ucolick.org 14.6 PgAdmin、PhpPgAdmin 工具 * 视窗 95/NT 的 PgAdmin 工具 视窗 95/NT 的 PostgreSQL 资料库设计工具 [184]http://www.pgadmin.freeserve.co.uk * 网上运作的管理工具□PostgreSQL 用的 PhpPgAdmin 在 [185]http://www.phpwizard.net/projects/phpPgAdmin 14.7 PgBash - SQL shell 工具 PgBash 的功能类似 psql。而且,PgBash 使用 bash 的代号 (alias)、函数、历 史编辑创造出一个灵活的互动操作环境,提供有用的功能。 PgBash 的主网页在 [186]http://www.psn.co.jp/PostgreSQL/pgbash/index-e.html PgBash 是一个包括 PostgreSQL“直接 SQL”或“嵌入式 SQL” ("direct SQL" or the "embedded SQL") 介面的 shell,籍改良 bash(目前最新版为 2.03 )shell 而来。PgBash 可用作登入 shell、sub-shell(从 shell 启动的 shell) 和 shell 程式。 在此,直接 SQL 有把结果直接输出到标准输出的能力。而嵌入式 SQL 有把提取 出来的结果设定到 shell 变数的能力。它们则再经 shell 命令稿 (script) 语 言处理。 SQL 语句(以分数作结束字完)被当作一个 shell 指令处理,我们可以执行 SQL 语句并用於管道 (pipeline)、改向和背景工作选项。此外,使用 exec_sql 指令,我们可用不同的选项来执行 SQL 语句。实际执行 SQL 的例子如下。 _________________________________________________________________ prompt> /usr/local/bin/pgbash ……启动 pgbash pgbash> connect to db2@xxx.com user sakaida; ……连接到资料库 pgbash> select * from test limit 100; | more ……使用管道 pgbash> select * from test; > /tmp/sel.dat & ……使用改向和背景工作 pgbash> addr='Osaka' pgbash> insert into test values( > 111,'name', ……可以换行 > '$addr' ……使用 shell 变数 > ); pgbash> connect to db3@yyy.com user postgres; pgbash> set connection db2; ……把目前的资料库改为 db2 pgbash> select * from test; ……自 db2 的 test 表格选择 pgbash> exec_sql -d db3 "select * from test3"……连接到 db3 pgbash> ls pgbash> begin; pgbash> declare cur cursor for select * from test; pgbash> fetch in cur into :AA,:BB; ……设定 shell 变数 pgbash> echo "AA=$AA, BB=$BB" pgbash> end; pgbash> fc fetch ……编辑历史纪录和执行 pgbash> !echo ……再次 echo pgbash> disconnect all ……关闭所有连接 pgbash> exit ……结束 pgbash _________________________________________________________________ 14.8 PostgreSQL 的 Webmin 工具 webmin 工具(透过可以是保安的网页来管理 Unix 电脑)的最新版本(0.82 版 )有一个 PostgreSQL 模组。你可使用这模组来新增用户、群组、资料库、表格 ,也可查阅表格。 你可在 [187]http://www.webmin.com/webmin 找到 webmin。 15. PostgreSQL 用的中央处理器 参阅文件 [188]http://metalab.unc.edu/LDP/HOWTO/CPU-Design-HOWTO.html 以 得到可用於 PostgreSQL 的中央处理器名单,本文也会提供有关中央处理器的详 情。 以下中央处理器 (CPUs)(32 位元和 64 位元)可执行 PostgreSQL。它们都运行 Linux。 * 处理器主网站是∶Google 搜寻引擎 CPU 站 “Computers>Hardware>Components>Microprocessors” [189]http://directory.google.com/Top/Computers/Hardware/Components /Microprocessors 以下为 GNU/GPL 开放原始码处理器名单∶ * 开放原始码处理器网站□Google 搜寻 "Computers>Hardware>Open Source" [190]http://directory.google.com/Top/Computers/Hardware/Open_Sourc e * OpenRISC 1000 Free 32-bit 处理器 IP 核心,与专断的 ARM 和 MIPS 竞争 ,位於 [191]http://www.opencores.org/cores/or1k * OpenRISC 2000 位於 [192]http://www.opencores.org * 欧洲太空总署的 ESA-32bit 和 ESA-64bit 处理器“LEON”Sparc [193]http://www.estec.esa.nl/wsmwww/leon * GNU/GPL Freedom 64-bit F-CPU [194]http://www.f-cpu.org 或 [195]http://f-cpu.tux.org 映射站台位於 [196]http://www.f-cpu.de * STM 32 位元,双向超纯量 (2-way superscalar) RISC 处理器 [197]http://www.asahi-net.or.jp/~uf8e-itu * 以 Verilog 或 VRML 写成的免费微处理器和 DSP IP 核心 [198]http://www.cmosexod.com * 可使开发加快的免费硬件核心 [199]http://www.scrap.de/html/opencore.htm * Opencores org□开放原始码、自由 IP core [200]http://www.opencores.org * Linux 开放硬件和免费 EDA 系统 [201]http://opencollector.org * ARM 处理器 [202]http://www.arm.com/Documentation * Cogent 处理器 [203]http://www.cogcomp.com 以下为商业处理器名单∶ * 俄罗斯的 E2k 64-bit CPU(很快的处理器!!!) 网站∶ [204]http://www.elbrus.ru/roadmap/e2k.html Elbrus 已和美国升阳微系 统结为合作伙伴。 * 韩国三星 (Samsung) 64 位元处理器,来自 DEC Alpha。 [205]http://www.samsungsemi.com Alpha-64bit 处理器在 [206]http://www.alpha-processor.com 三星和美国的 Compaq 正合作开发 Alpha 处理器。 * 英特尔 (Intel) IA 64 [207]http://developer.intel.com/design/ia-64 * 全美达 (Transmeta) crusoe 处理器,和不久将来的全美达 64 位元处理器 。 [208]http://www.transmeta.com * Sun Ultra-sparc 64 位元处理器 [209]http://www.sun.com 或 [210]http://www.sunmicrosystems.com * MIPS RISC 处理器 [211]http://www.mips.com * SGI Graphics MIPS Architecture 中央处理器 [212]http://www.sgi.com/processors * IDT MIPS Architecture 中央处理器 [213]http://www.idt.com * IBM Power PC(摩托罗拉) [214]http://www.motorola.com/SPS/PowerPC/index.html * 摩托罗拉嵌入式处理器。□据 PowerPC、M-CORE、ColdFire、M68k 或 M68HC 核心 [215]http://www.mot-sps.com * M68k 或 M68K 核心 [216]http://www.mot-sps.com * 日立 SuperH 64-bit RISC 处理器 SH7750 [217]http://www.hitachi.com 如果一次买一万个,每个只售四十美元。 * Fujitsu 64-bit 处理器 [218]http://www.fujitsu.com * HAL (California) Super-Sparc 64-bit 处理器 [219]http://www.hal.com 也和 Sun 的 sparc 结构相容。 * Pyramid Technologies 的 Seimens Pyramid 中央处理器 * Intel X86 系列 32-bit 中央处理器,奔腾、赛扬等等。 * AMDs X86 系列 32-bit 中央处理器,K-6、Athlon 等等。 * National's Cyrix X86 处理器 32-bit CPUs Cyrix 等等。 * 其他国家(台湾、韩国,日本)的其他中央处理器??请告诉我…… 其他重要的处理器网站为□ * 廿四小时全球处理器新闻 [220]http://www.newsnow.co.uk/cgi/NewsNow/NewsLink.htm?Theme=Proce ssors * 电脑结构网□位於 [221]http://www.cs.wisc.edu/~arch/www * ARM 处理器 [222]http://www.arm.com/Documentation * 伟大的处理器 [223]http://www.cs.uregina.ca/~bayko/cpu.html * Microdesign 资源 [224]http://www.mdronline.com 16. 只使用一个显示器 (monitor) 来设定多台 PostgreSQL 电脑 如果你不想花钱於硬件的选择器,你可使用 VNC (Vitual Network Computing) 技术,来自电讯业巨人 AT & T。 VNC 是 GPL 的,是一个自由软件。籍著 VNC, 你可在一个没有显示器的电脑执行 PostgreSQL 程式,而在远端电脑的显示器显 示出来!!不过,那些电脑必须以 Ethernet 网络介面卡连接。VNC 可在 [225]http://www.uk.research.att.com/vnc 找到。(译按∶VNC 是使用 TCP/IP,理论上只要有 IP 地址便可在远端电脑连接,不一定要 Ethernet。不过 速度可能很慢。) 你可叠起多台电脑主机及只用一个显示器,而用一个 KWM(键盘、影像、显示器 ) (Keyborad, Video, Monitor) (译按∶M 是否当为滑鼠?)选择器来选择所 用电脑。 这不但节省地方,减少混乱,也节省显示器、键盘和滑鼠(每份总值 100 至 500 美元)。 籍著选择器,你可叠高多台 PostgreSQL 伺服器(开发、测试、生产)、互联网 伺服器、 ftp 伺服器、内联网伺服器、电邮伺服器、新闻伺服器在一个大柜。这 选择器也可控制视窗 95/NT 和 OS/2 电脑。 请查看下列网址∶ * DataComm Warehouse Inc,电话 1-800-328-2261。他们提供所有品种的电脑 硬件 [226]http://www.warehouse.com 4 埠手动 KVM 选择器 (PS/2) 大约 $89.99。 Part No. DDS1354 * Network Technologies Inc [227]http://www.networktechinc.com/servswt.html (120 美元/PC 8 埠) 的清单中包括 'Server Switches' 和 'Video only switches' * Scene Double Inc, 英国 [228]http://www.scene.demon.co.uk/qswitch.htm * Cybex corporation [229]http://www.cybex.com * Raritan Inc [230]http://www.raritan.com * RealStar Solutions Inc [231]http://www.real-star.com/kvm.htm * Belkin Inc [232]http://www.belkin.com * Better Box Communications Ltd. [233]http://www.betterbox.com/info.html * 到附近的硬件商铺查询“Server Switch”或称“KVM Auto Switches”。 在 yahoo 搜寻器中找出更多有“Server Switches”或“KVM Switches”的公司 。 每个 PostgreSQL 资料库伺服器最好用一部专用的 unix 电脑,以增强表现。任 何其他程式/行程都不要在这电脑上执行。 阅读你所住地方的报章的商业版找出 有哪些商铺售卖 Intel 电脑和 13 □单色萤幕(十分廉宜的萤幕)。你只需要硬 件,而不需微软视窗 / DOS。资料库伺服器不需要彩色显示器,因为你可在一个 彩色的个人电脑上遥控管理。 你可在网上商店买到单纯的电脑硬件。你可在网上拍卖中找到好的价钱。 * 网上商店与拍卖场 [234]http://www.egghead.com * 网上商店 [235]http://www.buy.com * 拍卖场 [236]http://www.ubid.com 在以下地方取得 RedHat(或其他发行版本)Linux 的光碟∶ * Linux System Labs 网址∶ [237]http://www.lsl.com/ 7 美元 * Cheap Bytes Inc 网址∶ [238]http://www.cheapbytes.com/ 7 美元 确保你购买的硬件被 RedHat Linux 支援。购买前在 RedHat 的 ftp 站找出获推 荐的硬件,如 SCSI 配接器和显示卡。用大约六百美元便可得到一台强劲的 Intel 电脑,用 RedHat Linux 来执行 PostgreSQL。从视窗 95、OS/2、Unix Motif、浏览器(如 Redbaron、Opera、Netscape 及其他廿多个)经 odbc/jdbc/perl/tcl 来连接 PostgreSQL。(浏览器正迅速成为标准的 GUI 客户 (client)。) 使用 KWM 选择器,你可只用一个显示器和一个键盘来控制多台主机。 17. PostgreSQL 的万维网应用程式伺服器 有些应用程式伺服器可和 PostgreSQL 合作,开放原始码还是商业版本都有。 著 名的开放原始码万维网应用程式伺服器有以 Perl 为基础的 SmartWorker、WIRM 、 Velocigen、Enhydra(Java)和 Zope(Python),商业的则有 IBM Websphere、BEA Weblogic。 建议你使用保安的万维网伺服器如 Apache + mod_ssl + OpenSSL。在 [239]http://www.c2.net/products/sh3 参阅 Redhat StrongHold 保安伺服器的 资料。 万维网应用程式伺服器可以所支援的程式语言分类。 你必须使用一个以你最喜欢 的语言为基础的万维网应用程式伺服器。 万维网应用程式伺服器的分类如下∶ * 以 PERL 语言为基础 * 以 PHP 语言为基础(和 PERL 相似,也有点似 Java) * 以 Python 语言为基础(物件导向命令稿语言) * 以 Java 语言为基础(Sun Microsystems Java) * 以 Tcl 语言为基础(Tcl/TK□称为“Tickle”命令稿语言 * 以 C++ 语言为基础(C++ 和 CORBA) 17.1 PERL 万维网应用程式伺服器 和“C”语言相似,Perl 语言已有很长寿命,而且 Perl 在未来一段很长时间还 会被广泛应用!在某些操作上,Perl 比 Java 快三倍(但 Java 在某些操作上也 比 Perl 快)。 Java 是一个非常复杂的系统,既有虚拟机器,又有直译器,使 得它非常缓慢、不稳定和不可靠。 Perl 则简洁、快速,更是物件导向。 此外,Perl 程式可轻易地编译,以进一步改良表现。使用 Perl2Exe 这个指令列 工具来把 perl 命令稿转为可执行档 [240]http://www.indigostar.com/perl2exe.htm。 PERL 可使用以下万维网应用程式伺服器 * Mason [241]http://www.masonhq.com 是一个功能强劲,以 Perl 为基础的 网页开发和传送引擎。使用 Mason,你可在你的 HTML 中嵌入 Perl 码,又 可自共享、可重用的元件建立网页。 * BingoX [242]http://opensource.cnation.com/projects/BingoX 是一个开 放原始码、物件导向的万维网应用架构,用 mod_perl 编写,以大幅减少建 立大型动态、资料库驱动的网站和应用程式所需时间。 SmartWorkder 是 Perl 类别的集合,容许你的万维网应用程式成为真正的应 用程式, 而不是 HTML 样本中随意嵌入程式码。 SmartWorker [243]http://www.smartworker.org * Apache-Perl 整合计划 mod_perl 使得完全以 Perl 写成 Apache 模组有可 能。而且,嵌入到伺服器的持久直译器 (persistent interpreter) 避免了 启动外部直译器的麻烦和 Perl 的启动时间。 参阅 [244]http://perl.apache.org 和 [245]http://modperl.sourcegarden.org 的 mod_perl_garden 计划。 * Apache::ASP [246]http://www.apache-asp.org 把 Active Server Pages 移植到 Apache 万维网伺服器,使用 Perl 作为主机的命令稿语言 。Apache::ASP 容许开发人员创造包括环节管理 (session management) 功 能和嵌入 Perl 码的动态网上应用程式。另外, 它还有很多强劲的延伸功能 ,包括 XML tablibs、XSLT 显现 (XSLT rendering)、还有不在原本 ASP API 的新事件。 * WIRM(Web Interface Repository Manager)是一个以 Perl 为基础的应用 程式伺服器,提供一个高阶的编程环境以开发网上资讯系统 (web information systems)。WIRM 包括一个物件关联式资料库和一套用作视觉化 (visualizing)、整合和分析异质 (heterogeneous) 多媒体资料的 Perl 介 面。WIRM 提供工具替多媒体资料库产生对内容敏感的景观 (context-sensitive views), 使开发人员可以快速开发在内容和表达方式 适应不同类型用家物态网页。 参阅 [247]http://www.wirm.org * EmbPerl [248]http://perl.apache.org/embperl 让你可在 HTML 文件中嵌 入 Perl 程式码。使用 Perl 表示你可使用一种精心泡制的语言,在 WWW 早 已广泛利用。你也可用数以百计早写好的的 Perl 模组□包括 DBI□来存取 越来越多资料库系统。 * ePerl [249]http://www.engelschall.com/sw/eperl 直译一个加上了 Perl 5 程式的 ASCII 档,只处理 Perl 5 程式码而不理会纯 ASCII 数据。它可 用不同方法运作∶作为一个独立的 Unix 滤器或把 Perl 5 模组整合到一般 的档案产生工作,亦可作为一种强劲的万维网伺服器命令稿语言, 来产生动 态 HTML 页。 * XPP [250]http://opensource.cnation.com/projects/XPP 代表‘XPP Parses Perl’或‘XPML Page Parser’,是一个快速兼有效的 HTML 分析器 ,可分析名为 XPML 页的动态 HTML 页中嵌入了的 perl和类似 HTML 的标签 。 * Gamla□一个以 Perl 为基础的 RAD 和应用程式伺服器。gamla 计划的目的 是创造一个应用程式快速开发(RAD)工具和一个以 Perl 为基础的万维网应 用程式伺服器。所有 Gamla 计划产生的原程式码都会在公众领域 (public domain) 释放。 Gamla 在 [251]http://gamla.iglu.org.il * AxKit [252]http://www.axkit.org 是一个 Apache(和 mod_perl)和 XML 应用程式伺服器。它能即时把 XML 转换为任何格式,如 HTML、WAP 或纯文 字。 转换过程可使用 W3C 标准技考,或自行设计的程式码。AxKit 也使用 内置的 Perl 直译器来提供有趣而强劲的技考作 XML 转换之用。 AxKit 强 调的是把内容和表达方法分开。AxKit 的管线 (pipelining) 技巧容许内容 分不同阶段转换为可表现的格式,容许部分平台以不同方式看到数据。 AxKit 容许网页设计员集中精力於网站设计,内容开发者纯粹为内容工作, 而网站管理员也能在其强项尽其所能。 Perl 的商业万维网伺服器 * Zelerate AllCommerce [253]http://www.zelerate.org/html/eng/home.shtml 是一个商业、内容、 客户和关系管理系统。这个高表现、可延展的互联网应用程式以 Perl 写成 ,及用了一个後端资料库。 * VelociGen 服务 XML、资料库或即时送到的动态内容,速度和静态 HTML 一 样□达到 CGI 的六十倍,而你不需修改你的应用程式。VelociGen 也藉伺服 器端 XML 标签、意外保护 (crash protection) 和多部电脑间负载平衡,使 开发更简单。 VelociGen 可完美地加入到任何平台上的任何万维网伺服器, 增强伺服器的表现和加快以动态内容主导的网站的反应。VelociGen 可同时 处理大量要求,比 Java Servlets 快十倍或比 Cold Fusion 快四倍。 Velocigen [254]http://www.binevolve.com/velocigen 17.2 PHP 万维网应用程式伺服器 PHP 可用以下万维网应用程式伺服器 * Midgard PHP 万维网应用程式伺服器以 PHP 命令稿语言为基础,而 PHP 执 行极为快速□比 Java 快。Midgrad 的主网站为 [255]http://www.midgard-project.org。PHP 可用 Zend 编译暨优化器编译 [256]http://www.zend.com。PHP 执行得很快,而速度比 Java 快五至十倍 。 参阅 [257]Midgard 安装 和 PHP HOWTO [258]http://www.linuxdoc.org/HOWTO/PHP-HOWTO.html * Ariadne [259]http://www.muze.nl/software/ariadne 是一个万维网应用系 统。 它包含一个完整的架构,用 PHP 轻松地开发和管理万维网应用程式。 这系统使用一个模组化的方式,所有交易都使用抽象的介面。 这做法为更改 系统工作或加上新功能带来极大的自由,而且不需重新编写其他部分。 17.3 Lutris Corp "Enhydra Enterprise" (Java) Enhydra 支援 PostgreSQL 资料库。 Enhydra 是一个极为流行的 Java/XML/J2EE 万维网应用程式伺服器,由 Lutris Corporation 开发。它是全球最好的 Java/XML 万维网应用程式伺服器。它支援 EJB、Servlets、JSP、JNDI、JDBC、JTA、CORBA、XMLC/Rocks、DODS 和国际化。 它已为很多欧美的 Fortune 500 公司探用。French Telecom 一类公司正直接赞 助 Enhydra。它以百分百纯正 Java 写成,可於 [260]http://www.enhydra.org 取得。Enhydra 是一个开放原始码专案, 但它以商业形式由 Lutris Corp 售卖 和支援。请参阅 [261]http://www.lutris.com。 在 [262]PostgreSQL with Enhydra 阅读如何设定 PostgreSQL 和 Enhydra 的指 导,也请参阅 [263]Setup database with Enhydra 以了解如何为 Enhydra 设定 资料库。 你可用 Borland 的 JBuilder 和 Enhydra 合作。JBuilder 在 [264]http://www.inprise.com 找到。 也请於 [265]http://www.linuxdoc.org/HOWTO/Enterprise-Java-for-Linux-HOWTO.htm l 参阅 Enterprise Java HOWTO。 17.4 Zope(Python) Python 渐渐成为极流行的「纯」物件导向命令稿语言。Zope 是一个万维网应用 程式伺服器,提供了 PostgreSQL 介面。Zope 可在 [266]http://www.zope.org 得到 Python 可在 [267]http://www.python.org 找到。 17.5 OpenACS(Tcl 语言) OpenACS (Open ArsDigita Community System) [268]http://openacs.org 是一 个用来建立可扩展、社群主导 (community-oriented) 网页应用程式的先进工具 箱。它依靠 AOLserver,一个网页 / 应用程式伺服器,和 PostgreSQL,一个真 正符合 ACID 的 RDBMS。它们是两个和开放原始码授权下的免费而高质的产品。 ACS 由 ArsDigita 编写, [269]http://www.arsdigita.com,它们的 ACS (ArsDigita Community System) 尝试尽量独立於资料库,虽然它原本以 Oracle 为基础(因此 Open ACS 要花时间进行移植)。 也请参阅 [270]http://www.appserver-zone.com。 17.6 C++, CORBA 万维网应用程式伺服器 * PortalSphere 万维网应用程式伺服器以 C++ 写成,在 Unix(和 Linux)为 最高速度和稳定度运行。PortalSphere 严格地遵从 CORBA 标准,既支援标 准的 HTTP 通讯协定和 IIOP 点对点协定,以提供超高速的主从连接。 和所 有著名的资料库直接结合,这些特色使 PortalSphere 快如闪电, 而且独家 拥有在互联网上支援实时事件的能力。 PortalSphere 可比 HTTP/CGI 快一 百倍。直接连接到大部分著名的资料库,可延展至支援超过一万个用户连接 。 到 [271]http://www.portalsphere.com/overview.html 了解 PortalSphere。 * FlashPoint C++、C、PERL 万维网应用程式伺服器计划的目前是在一个多流 (multi-thread) 的环境支援高速网上应用程式服务、支援多样的开发语言, 包括 C 和 C++、和支援在很多其它环境下难以执行的软件工程方式。它可和 Apache 一起工件,视乎你的需要,甚至可取代它。参阅 [272]http://www.bouldersoftware.com/products/flashpoint 和下载 [273]FlashPoint Redhat RPM 套件。 * "C Server Pages" [274]http://cserverpages.20m.com 是一个有效率和可 延展的应用程式伺服器,以 C++写成,使它拥有处理以 C++ 写成的伺服器页 和嵌入了动态元素的样版的能力。你可用你喜欢的方式,或两种都用。 你可 用 C++ 建立自己的商业物件。你的网页可以是市场上任何 ORB 的 CORBA 客 户。 17.7 万维网应用程式伺服器目录 参阅 [275]万维网应用程式伺服器 目录,内有一份“黄页”。 18. PostgreSQL 的应用程式和工具 18.1 PostgreSQL 的 4GL 万维网资料库程式□AppGEN 开发系统 AppGEN 可在此下载 * [276]http://www.man.ac.uk/~whaley/ag/appgen.html * [277]ftp://ftp.mcc.ac.uk/pub/linux/ALPHA/AppGEN. AppGEN 是一种高阶第四代程式语言和应用程式产生器 (application generator),用以产生以万维网为基础的程式。这些程式一般在互联网或公司内 联网使用。 AppGen 程式以合乎 Common Gateway Interface (CGI) 标准的 C 命 令稿 (C scripts) 写成,大部分互联网伺服器都可支援。 要使用 AppGen,你需要∶ PostgreSQL,关联式资料库系统 支援 CGI 的互联网伺服器,如 NCSA 的 HTTPD 一个 ANSI C 编译器,如 GCC AppGEN 包括以下 Unix (Linux) 可执行程式∶ * defgen,它会根据逻辑资料结构产生一个基础的样板程式。 这些程式可加入 、更新、删除和寻找资料库中的纪录,又可自动保持参考整合性 (referential integrity)。 * appgen,AppGEN 的编译程式。它会把 AppGEN 的源程式码编译为可由 CGI 执行的 C 原始码及可即时在网上使用 HTML 格式文件。 * dbf2sql,把 dBase III 相容的 .dbf 档转换为可执行的 SQL 命令稿的工具 程式。这使得大部分储存在 DOS/视窗资料库套件的资料可移植到一个 SQL 伺服器,如 PostgreSQL。 * 此外,AppGEN 收集了一些会在执行期间使用的 HTML 文件、GIF 档和 Java 小程式。当然,如所有好的软件般,它也包括完整的源程式码。 作者 Andrew Whaley 可以以下途径接触∶ * [278]andrew@arthur.smuht.nwest.nhs.uk 18.2 PostgreSQL 的互联网介面□DBENGINE dbengine 是 Ingo Ciechowski 所写的一个随插即用的 PostgreSQL 互联网介面 。它在 * [279]http://www.cis-computer.com/software/dbengine/ 有关 DBENGINE∶ dbengine 是互联网与 Postgres95 之间的介面,只需花数分钟 , 它便可存取任何现存的资料库。 PHP 让你在文件中编写类似 Perl 的语言,但不是真的 Perl,AppGEN 和 WDB-P95 需要你为每一个资料库建立设定档 (configuration files)□□听起来 , 你似乎都要先学一类新的假语言 (meta language) 才能启用。 和其他工具不同,你不需要学任何特别的程式或命令稿语言来使用 dbengine。也 不会有每个资料库都有设定档的情况,所以你不需要熟习这些新结构。 不过,如 果你想用到 dbengine 的完整功能,学习 Perl 会是一个好主意。 整个系统可籍处理一个附加的资料库设定好, 它会包含有关如何理解你的资料库 存取的资料。你甚至可以指定虚假栏 (virtual fields),用以在资料显示在萤幕 之前作出即时计算。 18.3 PostgreSQL 的 Apache 伺服器模组□NeoSoft NeoWebScript Apache 是一个有名的互联网伺服器。一个 PostgreSQL 到 Apache 的介面模组位 於□ * [280]http://www.neosoft.com/neowebscript/ NeoWebScript 是一程容许你把不同复杂程度的程式嵌入到 HTML 档程式语言。 当有人要求一个包含 NeoWebScript 的 HTML 网页时,支授 NeoWebScript 的伺 服器便执行嵌入了的命令稿 (script),产生一个含有自订内容的网页。 NeoWebScript 是直接在网页的 HTML 码编写功能强大、 伺服器为基础的互动程 式的一个方法,高速、安全、易学。籍著 NeoWebScript,即使对新手来说,计数 器 (counter)、电邮表格 (email forms)、墙纸、签名簿 (guest books)、访客 纪录都变得简单。请看看 NeoWebScript 对自己、PERL 和 JavaScript 作出的比 较。 如果你想在你的互联网伺服器安装 NeoWebScript, 你的网络管理员在开始前需 先阅读他们的 Sysop FAQ。《Theory of Operations》会解释 NeoWebScript 如 何运作,《Installation》会逐步说明。《Management》 关於设定和执行伺服器 的事宜,《Test》让你确定 NeoWebScript 运作正常,《Troubleshooting》和伺 服器的问题有关。 在自己的 ISP、内联网或外联网使用 NeoWebScript 费用全免, 你会在登记下载 时得到完全的执照。不过, 如果你想把它嵌入到自己的产品或在商业的伺服器( 如 SSL)使用,它总值 99 美元。 NeoWebScript 是一个容许你在网页中嵌入 Tcl/Tk 语言作为命令稿工具的 Apache 模组。它由 Karl Lehenbauer,NeoSoft 的 Chief Technical Officer 发明,并由 Neosoft 的程式设计师和技术撰稿员编写文件、改良及加强功能。 Apache 是世上最流行的互联网伺服器,经调查的网站中有六十八巴仙使用。 Tcl/Tk 是由 Dr. John Ousterhout 开发的一种强劲、自由、跨平台的命令稿语 言。 他说过“Tck/Tk”容许软件开发人员比使用以 C 或 C++ 为基础的工具快十 倍完成工作。 它也是一种伟大的胶水语言 (glue language),使得现存的程式共 同工作、 更图像化和可用於互联网。” NeoSoft 创办人及 Chief Technical Officer,Karl Lehenbauer 在开始时便已 参与 Tcl/Tk 开发。他也和 Mark Diehkans 一起创作了 Extended Tcl,又名为 TclX 或 NeoSoft Tcl,延伸这种语言的功能。很多 Tcl 的核心指令都来自 Extended Tcl,而由 Dr. Ousterhout 加入到核心语言中。 NeoSoft Inc., 1770 St. James Place, Suite 500, Houston, TX 77056 USA 18.4 HTML 的伺服器端延伸 HEITML 和一个 PostgreSQL 的 4GL 语言 heitml 是另一个 postgres 与万维网间的介面。欲知详情,请接触 Helmut Emmelmann H.E.I. Informationssyteme GmbH Wimpfenerstrasse 23 Tel. 49-621-795141 68259 Mannheim Germany Fax. 49-621-795161 * Mr.Helmut Emmelmann 的电邮地址 [281]emmel@h-e-i.de * Heitml 主网页 [282]http://www.heitml.com * Heitml 次网页 [283]http://www.h-e-i.deom Heitml 同时是 HTML 的伺服器端延伸和一种 4GL 语言。网页编写人员可以 HTML 的风格用类似 HTML 标签编写程式。 Heitml(音 "Hi"-TML)是 HTML 的延伸及一个全面的第四代语言, 它容许以互 联网为基础的程式直接利用 SQL 资料库中的资料,而不需使用复杂的 CGI 命令 稿。 Heitml 在伺服器端延伸 HTML,动态地把“.hei”档转换为 HTML 格式, 使它与 任何浏览器兼容。它包括大家熟悉、易用的 HTML 语法, 及提供大量预先开发了 的标签和程式库来应附以往由 CGI 进行的工作。像 XML 般,heitml 容许使用者 自定标签。籍著 heitml,使用者自定的标签可翻译为 HTML 及传送给浏览器。 Heitml 同时以 HTML 设计者和专业的程式设计师为目标。HTML 设计师可使用 heitml 标签来建立动态的网页,存取 SQL 资料库,或建立完整的万维网应用程 式。计数器、 登记资料库 (registration databases)、搜寻器表格、电邮表格 、阶层式选单 (hierachical menus) 都可轻松地籍著在大量元件函式库 (Component Libraries) 预建的类似 HTML 的标签产生。 对程式设计师来说,heitml 在 HTML 中嵌入了完整的第四代程式语言, (如 , , 和 标签), 和对含整数、实数、布林值、字串和元组 (tuple) 的表达式强劲运算能力。 元 组的参考语法 (reference semantics) 就像物件导向语言,及储存在堆叠中 。Heitml 变数,包括所有在堆叠中的复杂资料结构,在 Session Mode 中可在不 同网页间维持。 你也可以自订标签或环境标签 (environment tags),甚至重新 定义 HTML 标签。 heitml 使得以下事情有可能 □□以具结构及模组化 (structured and modular) 方式开发网页,大幅减低维 护困扰。 □□开发有智慧及互动的网页,内容可动态地适应用者所需。 □□无需设计程式便可显示 SQL 资料库的内容,你只需要使用预先 定义的 “dba”系列标签。 □□使用 Session Variables 开发复杂的资料库及目录购物程式。 Heitml 可经 CGI 介面在 Linux 的任何互联网伺服器中执行,而在 Apache 中可 使用 apache API 使得执行速度特别快(避免了 CGI 的工作)。目前,它支援 mSQL(第一及二版)、PostgreSQL(第六版)、mySQL、及 the yard databases 。heitml 可在 Linux、BSDi、Solaris 和 SunOS 执行,以及在视窗 NT 加上 CGI 和 ISAPI、ODBC、视窗 95 中使用。 heitml(Linux 版)对研究、非商业性和个人用途是免费的。商业网站需附出授 权费。 设有试用期限而功能完整的试用版可免费下载。(不过要注意,每个你开 发的“.hei” 网页都会印出一个讯息指出它是非商用版本。登记之後你会收到一 个键码, 使你可关掉这讯息而无需重新安装。) heitml(音“Hi”-TML)籍著可自行定义的标签和完整的程式设计能力大幅延伸 及增强 HTML 的功能。这使动态的内容和资料库程式可在 HTML 世界中出现,而 不需要 CGI 或外部手稿或程式语言。也就是说,一个 HTML 作者可在网页中嵌入 应用程式。 这只需要使用新的标签,而不需 CGI 或程式设计。另一方面, 进阶 使用者或程式设计师可创造及设计强劲的标签库。这做法使得 heitml 对 HTML 新手和专业程式设计师共时适用。heitml 在万维网伺服器上执行及动态地产生 HTML,所以 heitml 和互联网标准兼容,也和任何浏览器兼容。 它一方面为用者 提供完整的资料库存取功能,另一方面使用者无需理会任何不必要的 CGI 复杂性 。heitml 是根据有关编译器构造和交易 (transaction) 系统的最新研究成果而 开发的。 heitml 页的开发过程和 HTML 页一样,都是使用文字编辑器或 HTML 编辑器,也 如常地放在万维网伺服器上。不过,新的网页可包括动态的 heitml 标签和使用 标签库。你可使用这些标签存取资料库、产生动态内容、寄出电邮, 甚至可以开 发强劲的应用程式,如登记资料库 (registration database) 和购物系统。 HTML 新手和专业程式设计师一样会为能够高速而简易地设计精采的应用程式, 如我们的互动签名簿,而不需使用复杂而难学的 CGI 命令稿而惊讶。这工作只需 使用 dba 标签库中的工具便可做到。 heitml 包括不同种类的标签库,用以产生签名簿、资料库维护程式、 可延伸的 查询表格、强劲的电邮表格或网页的阶层式选单 (hierarchic menu)。这些工具 已可使用,你只需在网页上加上对应的标签。 作为一个有经验的程式设计师,你可全面使用 heitml 的持久动态元组架构 (persistent dynamic tuple architecture)∶heitml 不单是有动态型态 (dynamic typing)、全功能的表达式计算、递回函数和丰富的参数传递特色的命 稿语言, 也籍动态元组架构自动保持任何大小的 session 资料。 18.5 PostgreSQL 的 America On-line AOL 万维网伺服器 AOLserver 2.3 版是一个免费的商业万维网伺服器,它可连接到 PostgreSQL。欲 知详情,请看 * AOL 万维网伺服器主网页 [284]http://www.aolserver.com * Philip Greenspun 的 AOLserver 介绍 [285]http://photo.net/wtr/aolserver/introduction-1.html AOLserver 是一个快速,全多流处理 (multithreaded),支援 Tcl 的万维网伺服 器。但不止於此,它还是一个全面支援资料库的万维网开发平台。 使用 AOLserver,你可有公用 (pooled) 的 PostgreSQL(和其他 RDBMS)连接, 由不同执行绪 (threads) 分享。AOLserver 有 Tcl 和 C API,让你可开发强劲 的动态网页。所有这些东西都在 1995 年开始。它以 APL (AOLserver Public License) 或 GPL 授权,因此是全自由的软件。 对网页来说,Tcl API 最有用。AOLserver 有一组强劲的 Tcl 呼叫,例如 ns_sendmail(用来发出电邮)、ns_httpget(用来取回一个 URL) 、ns_schedule(类以 cron 的功能,用以排定程式在特定时间执行)等等。你也 可用 Tcl API 来轻易扩展 AOLserver 的功能。每一个 AOLserver 的虚拟伺服器 都可拥有私家的 Tcl 命令稿“函式库”,由 AOLserver 解释,并可让该虚拟伺 服器中任何网页使用得到。 你可用三种方法为 AOLserver 开发网页∶ * 纯 HMTL * .tcl 页□□即可用 ns_write 呼叫来传回 HTML 的 tcl 程式。 * .adp 页□□AOL Dynamic Pages。你以纯 HTML 开发网页,但你可用 <% %> 或 <%= %> 来嵌入 Tcl 码,和 PHP 或 ASP 相似。 虽然 AOLserver 是一个伟大的的互联网伺服器,拥有优良的架构, 它的光芒在 於它连接资料库的能力。AOLserver 拥有自己的资料库抽象层 (abstraction layer),让你完全不需修改程式而连接到不同 RDBMS。这些 RDBMS 的连接是公用 (pooled)、持续 (persistent) 的,由不用的执行绪分享。 这容许很快的连结和 有效运用资源。 AOLserver 拥有所有主要的 RDBMS 的驱动程式∶PostgreSQL、Oracle、Sybase、 Informix、Illustra、Solid、Interbase 和 MySQL。 18.6 PostgreSQL 的疑难 / 计划追踪系统程式工具 它在 * [286]http://www.homeport.org/~shevett/pts/ 18.7 把 dbase 的 dbf 档转换至 PostgreSQL dbf2msql 程式和 mSQL 及 PostgreSQL 合作愉快。你可在以下方找到 * [287]ftp://ftp.nerosworld.com/pub/SQL/dbf2sql/ * [288]ftp://ftp.postgresql.org/pub/incoming/dbf2pg-3.0.tar.gz 这程式由 Faculty of Electrical Engineering TU Delft, NL Computer Architecture and Digital Technique section 的 Maarten Boekhold 写成。 * [289]M.Boekhold@et.tudelft.nl 你也可使用 python 的方法 (method) 在读入 dbf 档及载入到 postgres 资料库 。 * See [290]http://www.python.org 18.8 把微软 MDB 资料库转换至 PostgreSQL 计划中的 MDB Tools 是一组函式库和公具程式,用於把微软 Access 资料库 (mdb 档)汇出至多用户的资料库,如 Oracle、Sybase、DB2、Informix 、MySQL、PostgreSQL 之类。 * 从 [291]http://mdbtools.sourceforge.net 取得 MDB Tools * 通信论坛 [292]http://lists.sourceforge.net/mailman/listinfo/mdbtools-dev 18.9 Zeos 客户 “Zeos”是一个用来开发和管理资料库应用程式的软件产品,用於开放原始码 SQL 伺服器□MySQL、PostgreSQL 和 InterBase [293]http://www.zeos.dn.ua/eng/index.html 18.10 Java 的 Report Writer Generic Report Writer 是一个目录驱动的报告编写器。它不是拖□放 (drag-and-drop) 介面。可用於 PostgreSQL、MySQL 和 Access。它也很可能可 用於其他你有 Type 4 JDBC version 1 驱动程式的资料库。它在 [294]http://www.geocities.com/SiliconValley/Ridge/4280/GenericReportWr iter/grwhome.html。 19. 资料库设计工具□实体关系图 (Entity Relation Tool) 工具 "DeZign for databases" ( [295]http://www.heraut.demon.nl/dezign/index.html) 是一个使用实体关系图 的的资料库开发工具。它以视像形式支援实体和关系的排列, 并自动为大部分流 行产生资料库方案 (schema)。 “DeZign for databases”在设计时使用自动外键转移 (automatic foregin key migration ?),成功从单一的规□支援逻辑和实质数据等级 (data level)。 多款显示设定包括实体/主键/连外键的属性/不连外键的属性。“DeZign for databases” 也支援定义域 (domain)(用户自定资料型态)。 DeZign 产生的报告可将复杂的设计以简化了的形式提交予不同等级的管理层。 你只需按一下滑鼠便可产生报告、资料字典 (datadictionaries) 和资料库。 它 支援以下资料库∶Oracle、Interbase、IBM DB2、Sybase、微软 Access (95/97/2000)、微软 SQL Server、Paradox、dBase、Informix、SQL-Anywhere 、MySQL 和 PostgreSQL。 Heraut“DeZign for databases”在( [296]http://www.heraut.demon.nl)。 20. PostgreSQL 的互联网资料库设计/完成工具□EARP * [297]http://www.oswego.edu/Earp * [298]ftp://ftp.oswego.edu 的‘pub/unix/earp’目录。 20.1 EARP 是什麽? 是 David Dougherty 的“Easily Adjustable Response Program”。EARP 是一 个利用 PostgreSQL 资料库系系的网上资料库设计/实施工具。功能包括∶ * 一个视觉化的设计系统。 * 一个 sendmail 介面。(可收发电邮) * 一个增强了的保安机制。 * 一个 cgi 驱动程式。 20.2 施行 EARP 主要施行一个在 http 监控程式 (daemon) 下执行的 CGI 二元档来存取资 料库伺服器。所有设计工具都建立在驱动程式中,除在网上, 再没有地方需要作 出设计。那些工具本身需要一个支援图像的浏览器, 所设计出来的物件独立於编 写方法,而是根据个人好恶。 20.3 它如何工作? EARP 的其中一个主要特色是它使用物件导向的方法来产生用以连接资料库的 html 页。大部分页面都包含多个物件。每个物件都以某些工具产生及取得一个名 字, 这些物件会被页面工具 (page tool) 以一个可呼叫的顺序 (callable sequence) 连结在一起。物件可在其他页面中重用。有关 HTML、查询、读取使用 者输入、 可延伸的查询和输入物件格式化 (Extendable Formatting of Query and Input objects)、把现有物件连结成其他物件的基本工具皆有提供。 更先进 工具包括电邮工具和多流查询工具。 EARP 的另一个特色是先进的保安。有多种方法限制存取 EARP 系统的不同部分。 为达到先进的保安,EARP 检查每一个连接, 以确定每个连接人员的身分 (ids) 及群组 (groups)。不同部分的存取独立定义, 最终的组合决定结果能否存取 EARP 的一个特定部分。此外, 实施这些保安特色只需一个支援基本(或更佳) 使用者认证 (user authentication) 的 http 伺服器。 20.4 何处取得 EARP? EARP 可籍匿名 (anonymous) ftp 取得∶ * [299]ftp://ftp.oswego.edu 的 'pub/unix/earp' 目录。 21. PHP Hypertext PreProcessor□PostgreSQL 的伺服器端 html 嵌入命令稿语言 万维网介面工具位於∶ * [300]http://www.php.net * [301]http://www.vex.net/php PHP 也有一个名为 Zend 的编译器,可大幅改善表现。首先你在开发、测试和除 错时使用 PHP 命令稿语言。当准备好正式使用时使用 Zend 编译器产生可迅速执 行的执行档。 前身为 Professional Home Pages(PHP)而现在称为 PHP Hypertext Pre-Processor * 很多国定都有映射站台,名为 www.COUNTRYCODE.php.net * [302]http://www.fe.de.php.net * [303]http://www.sk.php.net * [304]http://php.iquest.net/ * 问题可电邮到∶ [305]rasmus@lerdorf.on.ca PHP 是一个伺服器端 html 嵌入命令稿语言。它让你在你的 .HTML 档中加入简单 的命令稿,像 JavaScript 般。不过,和 JavaScript 不同,PHP 独立於浏览器 。JavaScript 是一种客户端的 html 嵌入命令稿语言,而 PHP 是伺服器端语言 。PHP 的概念和 Netscape 的 LiveWire Pro 产品相似。如果你喜欢快速更新又 包括源程式码的自由软件,你大概会喜欢 PHP 3。 * 支援 PostgreSQL 的程式码由 Adam Sussman 写成 [306]asussman@vidya.com 21.1 主要特色 * 标准的 CGI,FastCGI 和 Apache 模组支援□ 作为一个标准的 CGI 程式 ,PHP 可在执行任何 Unix 互联网伺服器的任何 Unix 电脑上安装。加上对 新 FastCGI 标准的支援,PHP 可从中得到速度上的改善。作为一个 Apache 模组, PHP 变成 CGI 程式外一个强劲及快如闪电的选择。 * 存取记录 (Access Logging)□ 籍著 PHP 的存取纪录功能,用者可自行维护 命中数字 (hit counting) 及作出纪录。它完全不利用系统中央的纪录档, 而且即时监察存取过程。Log Viewer Script 提供了个别用者拥有的页面的 存取摘要。此外, 本套件可被设定为在每页产生一个显示存取资料的注脚。 本页的结尾就有一个例子。 * 存取控制 (Access Control)□ 一个以万维网为基础的内建设定画面处理取 控制设定。 用者可以为某人拥有的所有或个别网页建立规则,限制谁人能及 他能怎样阅读有关网页。 根据用者的网域、浏览器、电邮地址甚至来源文件 (referring document),网页可以密码保护、完全看不到、禁止纪录 (logging disabled) 和做其他事。 * PostgreSQL 支援□ Postgres 是一个先进的自由 RDBMS。利用 PHP,用者可 直接在 .HTML 档中嵌入 PostgreSQL 的「SQL 查询」。 * RFC-1867 档案上传支援□ 档案上传是 Netscape 2.0 的新功能。它让用者 把档案上传到万维网伺服器。 使得这事行可的原因,是实际的 Mime 解码由 PHP 提供,它可提供额外的框架, 在收到上传的档案後做些有用的事。 * HTTP 为基础的认证控制□ PHP 可用来在 Apache 万维网伺服器中建立自定 的以 HTTP 为基础的认证机制。 * 变数、列阵、相联列阵 (Associative Arrays)□ PHP 支援变数形态、列阵 、甚至如 Perl 般的相联列阵。它们可籍 GET 或 POST 方法在网页间传递。 * 条件式、While 回圈□ PHP 支援一种类似 C 的全功能命令稿语言。你可使 用 if/then/elseif/else/endif 条件式、while 回圈和 switch/case 叙述 来指引你的 html 页的显示的逻辑流向。 * 延伸正规表达式□ 正规表达式常被用於样式匹配、样式替换 (pattern substitutions) 和一般的字串处理。PHP 支援所有常用的正规表达式运作。 * 原始 HTTP 标头控制□ 要进行高阶网站设计,使网页视情形传送自定 HTTP 标头的能力是必须的。 一个惯常用法是传送一个 Location: URL 标头来把 客户端传送到其他 URL。它也可用於关掉快取或处理网页页首上的“last update”标头。 * 即时 GIF 图像产生□ PHP 支援 Thomas Boutell 的 GD 图像函式库,使它 可即时产生 GIF 图像。 * ISP“安全模式”支援□ PHP 支援一个独有的“安全模式”(Safe Mode),使 得在同一伺服器上有多个用户使用 PHP 命令稿也没安全问题。 * 新版本的 PHP 加入了很多新功能,请参阅主网页 [307]http://www.php.net * 它是自由的! 最後一个必要的特性。这套件是完全自由的。它以 GNU/GPL 授权,让你可为任何目的使用这软件,包括商业用途。欲知详情,请参看 GNU General Public License 文件。 21.2 PHP□简史 初出现时,PHP 是一个以 Perl 写成小巧简单的 cgi 包装器 (wrapper)。这套件 最先名为 Personal Home Page Tools,後来变为 Personal Home Page Construction Kit。 另有一工具是写来简化在网页中嵌入 SQL 查询的工作。它基本上是另一个 CGI 包装器,能分析 (parsed) SQL 查询及简化建立根据这些查询的表格和列表的工 作。 这工具名为 FI (Form Interpreter)。 PHP/FI 2.0 版完全重写这两套件,将之合而为一。它进化至可把简单电脑语言嵌 入 HTML 档中。它籍著把所简单的命令稿直接嵌入 HTML 档中,消除大量小型 Perl cgi 程式的需要。这样会加快你的网页,因为 fork 多次 Perl 的困扰已经 消除。 它也简化了管理大型网站的工作,因为你可把网页的所有部分放在一个 html 档中。加上多种资料库的支援,可使用资料库的网页的开发变得简单。 很 多人觉得嵌入查询比分别建立 HTML 和 CGI 档简单得多。 PHP/FI 已改名为 PHP。 21.3 那麽,我能用 PHP 做什麽? 如果你使用 PHP,你首先会注意到它在页尾加上这网页曾被浏览过多少次的资料 (如果你在在编译时选取了 access logging)。这只是 PHP 所做的一小部分。 它的另一个重要角色是作为一个表格直译 cgi 程式 (form interpreter cgi), 这也就是首名中 FI 的意思。例如,如果你在一个网页中建立了一个表格, 你需 要一个程式来处理表格上的资料。即使你只想把资料传送到另一网页,你也需要 cgi 程式的帮助。PHP 使得取得和处理表格的资料极为容易。 21.4 一个简单的例子 假设你有一张表格∶
你的 display.html 便可包括类似的东西∶ < ?echo "Hi $ name, you are $ age years old!

" > 就是这样简单!PHP 自动为每个表格输入栏位产生一个变数。之後你便可在 ACTION URL 档中使用这些变数。 在你找出如何使用变数之後的步骤就是在网页中试用一些逻辑流程标签。例如, 如果你想根据用者输入显示不同讯息,你可使用 if/else 逻辑。在上面的例子, 我们可改变 display.html,使得不同东西会根据用户输入显示出来∶ 50); echo "Hi $name, you are ancient!

"; elseif($age>30); echo "Hi $name, you are very old!

"; else; echo "Hi $name."; endif; > PHP 提供一种非常强劲的命令稿语言,能做到的事比以上简单的例子多很多。欲 知详情, 请参阅有关 PHP Script Language 的章节。 你也可使用 PHP 来设定有什麽人能看到你的网页。这可使用一个内建的设定画面 做到。 例如,籍著它你可指定只有某些网域的人可看到你的网页, 或建立一些 规则来用密码保护某些网页。欲知详情,请参阅有关 Access Control 的章节。 PHP 也有能力接收任何依照 RFC-1867 规定的浏览器上传的档案。 这特色使用者 能上传文字或二元档。籍著 PHP 的存取控制和逻辑功能, 你可全面控制淮许谁 上传及上传後做什麽。欲知详情,请参阅有关 File Upload 的章节。 PHP 支援 PostgreSQL 资料库套件。它支援在 .HTML 档中嵌入 SQL 查询。 PHP 也支援 mysql 资料库套件。它支援在 .HTML 档中嵌入 SQL 查询。 21.5 CGI 改向 (Redirection) Apache 1.0.x 摘要 使用 Apache 伺服器的 cgi 改向模组是执行 PHP 的一个好方法。 请注意你无须 担心改向模组,如果你使用 PHP 的 Apache 模组版本 (Apache module version)。有两个这类改向模组。一个是 Dave Andersen 开发的∶ * [308]angio@aros.net 它可在以下地方找到 * [309]ftp://ftp.aros.net/pub/util/apache/mod_cgi_redirect.c 另一个已包括在 Apache 中,名为 mod_actions.c。这些模组极为相似, 只是在 用法上有少许差别。两个都测试过,能和 PHP 顺利合作。 查看 Apache 的文件关於如何加入一个模组。一般来说,你把模组名称加到一个 名为 Configuration 的档案中。如果你使用 mod_actions 模组,你要加的一句 是∶ Module action_module mod_actions.o 如果你使用 mod_cgi_redirect 模组,加上以下一句∶ Module cgi_redirect_module mod_cgi_redirect.o 重新编译你的 httpd 及安装它。要设定 cgi 改向你需要在你的 mime.types 档 中建立新的 mime 类型,或在你的 srm.conf 档中使用 AddType 指令来加上 mime 类型。所加上的 mime 类型应类似∶ application/x-httpd-php phtml 如果你使用 mod_actions.c 模组,你需在 srm.conf 档中加上以下一行∶ Action application/x-httpd-php /cgi-bin/php.cgi 如果你使用 mod_cgi_redirect.c 模组,你需在 srm.conf 档中加上以下一行∶ CgiRedirect application/x-httpd-php /cgi-bin/php.cgi 不要同时使用 mod_actions.c 和 mod_cgi_redirect.c。 安装及正确设定了这些 cgi 改向模组後,你只需把延伸档名定为 .phtml, 便可 以指定这档案由 PHP 分析。此外,如果你在 srm.conf 档的 DirectoryIndex 设 定行加上 index.phtml,最上层的网页便会自动由 php 分析,如果你的 index 档名为 index.phtml。 Netscape HTTPD 你可籍 Netscape Server CGI Redirection 模组来指定自动把对某些延伸档名的 档案的要求改向给 PHP。这模组可在 PHP 网页的 File Archieves 中找到。套件 中的 README 明确地解释了如何设定它来用於 PHP。 NCSA HTTPD 目前,NCSA 并不支援模组,所以,要使用 cgi 改向的话,你要修改伺服器的原 始码。 一个对 NCSA 1.5 做这工作的嵌补在在 PHP 档案存库中找到。 21.6 在指令行执行 PHP 如果你建立了 CGI 版本的 PHP,你只需在指令行输入 php.cgi filename, 而filename 是你想分析的档案。你可建立独立的 PHP 命令稿,只需把命令稿 (script) 的第一行写为类似∶ #!/usr/local/bin/php.cgi -q “-q”阻止印出 HTTP 标头。喜欢的话,你可不用这选择。 21.7 PHPGem 套件 PHPGem 是一个 PHP 命令稿,用以加速编写使用表格的 PHP 命令稿。它可用於不 同的 SQL 伺服器,如 PostgreSQL、MySQL、mSQL、ODBC 和 Adabas。 你输入表 格栏位的描述和参数(栏位名称、栏位的 on/off searching (?) 等等), PHPGem 输出另一个使用那些表格的 PHP 命令稿(检视/加/修改/删除/重覆内容 和搜索)。 PHPGem 可使用多层巢状表格 (multi-level nested tables, ??) 。PHPGem 容许你指定每个表格每个栏位每人□存取控制。PHPGem 也支援影像。 PHPGem 在 [310]http://sptl.org/phpgem 找到。 22. PostgreSQL 的 Python 介面 Python 是一个直译的物件导向命令稿语言。它使用简易(轻巧的语法、 简单直 接的句子),有很多用於建立 GUI 的延伸、万维网介面等等。 一个有智慧的浏 览器(类似 HotJava)正在开发中(一九九五年十一月), 这会给予程式设计员 很多机会。Python 的版权持有人为荷兰阿姆斯特丹的 Stichting S Mathematisch Centrum,可自由散布。它包括物件、类别 (classes)、模组、和 例外 (exceptions) 的动态载入。使用 C 语言来将其介面加入新系统函式库是直 接的工作,使 Python 在自行设定时容易使用。Python 是一个拥有 X 介面的高 等命令稿语言。在 Linux 光碟中的 Python 套件包括大部分标准 Python 模组, 以及用作 Tk 介面的 Tix widget 模组。 PyGreSQL 是一个用作 PostgreSQL 资料库的介面。它嵌入了 PostgreSQL 查询函 式库,使得在 Python 手稿中使用强劲的 PostgreSQL 特性十分简单。PyGreSQL 由 D'Arcy J.M. Cain 和 Pascal Andre 写成。 * PyGreSQL 的新网站 [311]http://www.druid.net/pygresql/ * D'Arcy 所维护的 [312]http://www.druid.net/~darcy/ * 旧网站在 [313]ftp://ftp.via.ecp.fr/pub/python/contrib/Database/PyGres95.REA DME * D'Arcy J.M. Cain [314]darcy@druid.net * Pascal Andre [315]andre@chimay.via.ecp.fr * Pascal Andre [316]andre@via.ecp.fr 22.1 如何取得 PyGres? 不同套件的主网站在∶ * Python [317]ftp://ftp.python.org:/pub/www.python.org/1.5/python1.5b2.tar. gz * PyGreSQL [318]ftp://ftp.druid.net/pub/distrib/PyGreSQL-2.1.tgz * 旧网站 [319]ftp://ftp.via.ecp.fr/pub/python/contrib/Database/PyGres95-1.0 b.tar.gz 无论如何,你应尝试寻找最接近你的映射站台。请参阅资料来源来找这些站台 。PygreSQL 也会在 Python 和 PostgreSQL 站台的 contrib 目录找到。 22.2 资料和支援 如果你需要这些套件的资料,请查看以下网页∶ * Python∶ [320]http://www.python.org/ * PostgreSQL∶ [321]http://epoch.cs.berkeley.edu:8000/postgres95/index.html * PyGreSQL [322]ftp://ftp.druid.net/pub/distrib/PyGreSQL-2.1.tgz * PyGreSQL 旧网站∶ [323]http://www.via.ecp.fr/via/products/pygres.html 支援∶ * PyGreSQL 的通信论坛。要参加的话,你可电邮至∶ [324]majordomo@vex.net 在正文中写“subscribe pygresql name@domain” ,把“name@domain” 改为你自己的电邮地址。 * Python 的新闻组∶ newsgroup comp.lang.python * PyGreSQL : 如有臭□报告、意见、注释,请找 Andre [325]andre@via.ecp.fr 22.3 测试 Python 介面 请参考 [326]测试 Python□PostgreSQL 介面 一节。 23. PostgreSQL 和万维网的闸路 (gateway) □ WDB-P95 23.1 有关 wdb-p95 WDB-P95 - 一个由 J. Douglas Dunlop 开发的 PostgreSQL 资料库万维网介面 它在∶ * J Rowe 的新 WDB 在 [327]http://www.lava.net/beowulf/programming/wdb * 新版本的 WWW-WDB 在 [328]http://www.eol.ists.ca/~dunlop/wdb-p95/ * 有问题或想加入通信论坛 [329]dunlop@eol.ists.ca 这是一个修改了的 wdb-1.3a2,提供一个 PostgreSQL 到万维网的闸路。 这版本 也需要能处理 HTML 表格的浏览器。原本的 wdb 无此要求,但要还原也不难。 你可尝试 CASI Tape 和 Image Query。你可看看其 Form Definition File (FDF),它也用於产生 CASI Tape 和 Image Query,它包含了两个列表的联结 (join)。 这版本包含所有需要用於安装和执行以 WDB-P95 为 PostgreSQL 介面的档案。要 把这系统移植到其他资料库应颇为简单□如果它支援标准的 SQL 和拥有 Perl 介 面。 23.2 PostgreSQL 伺服器、pgperl 和 httpd 是否需在同一电脑? 否□PostgreSQL 不需在同一电脑。因 WDB-P95 由 httpd 监控程式 (daemon) 呼 叫,它们要在同一部电脑。又因为 WDB-P95 使用 Pg.pm,pgperl 也要在同一电 脑。 Pgperl 是以 libpq 函式库写成,所以它可存取网络上任何 PostgreSQL 伺 服器,就如其他 PostgreSQL 客户。如下所述∶ (万维网客户 (Netscape)) => (HTTP 伺服器 (NCSA's http) + WDB-P95 + pgperl + libpq)=> (PostgreSQL 伺服器) 括号 () 代表电脑。 每部电脑可是不同类型∶NT、SUN、HP……但你需要在你打算执行 WDB-P95 的电 脑的 libpq 介面函式库,因为你要用它来编译 pgperl。(这系统设计成会使用 HTML 表格,所以最好有一新近的万维网客户端。) 24. "C", "C++", ESQL/C 语言介面和 PostgreSQL 的逐位运算元 (Bitwise Operators) 24.1 "C" 介面 它已包含在发行版本中,名为‘libpq’。和 Oracle OCI、Sybase DB-lib 、Informix CLI 函式库相似。 24.2 "C++" 介面 它已包含在发行版本中,名为‘libpq++’。 请参考 [330]测试 libpq, libpq++ 介面 一节。 24.3 ESQL/C PostgreSQL ESQL/C 'Embedded C Pre-compiler' 类似 Oracle Pro*C 、Informix ESQL/C。PostgreSQL ESQL/C 是一种 SQL 应用程式介面 (API),使 C 程式设计师能自行设计可拥有管理资料库的能力的应用程式。PostgreSQL ESQL/C 容许你使用你所熟悉的第三代电脑语言而又能利用到结构化查询语言 (SQL) 的优点。 ESQL/C 包含以下软件∶ * ESQL/C 函式库提供具资料库伺服器存取能力的 C 函式。 * ESQL/C 标头档提供对 ESQL/C 程式有用的资料结构、常数和巨集的定义。 * ESQL/C 预处理器,一个把包含 SQL 句子的 C 档转换为可执行档的源程式预 处理器。 (译按∶应为把含嵌入式 SQL 的 C 档案转换为标准的 C 档案, 并可由 gcc 编译为可执行档。另外,PostgreSQL 的 SQL 嵌入式 SQL 预处 理器应名为 ecpg。) 它在 * PostgreSQL 的 ESQL/C 已包含在发行版本中。 * 主网站 [331]ftp://ftp.lysator.liu.se/pub/linus * 电邮∶ [332]linus@epact.se 请参考 [333]测试 ecpg 介面 一节。 要使用 Vim 彩色编辑器编写‘ecpg’档(*.pgc),你要这样做∶ _________________________________________________________________ bash$ su - postgres bash$ mkdir $HOME/vim 建立一个名为‘$HOME/vim/myfilestypes.vim’的档案,内有以下数行 " myfiletypefile au! BufRead,BufNewFile *.pgc set filetype=esqlc _________________________________________________________________ 你应该有一个 $HOME/.gvimrc 档。否则请自己制造一个,请参考在 [334]http://metalab.unc.edu/LDP/HOWTO/Vim-HOWTO.html 的 Vim HOWTO 文件 。 在 $HOME/.gvimrc 加上以下一行 _________________________________________________________________ let myfiletypefile = "~/vim/myfiletypes.vim" _________________________________________________________________ 现在如果你用 _________________________________________________________________ bash$ gvim sample.pgc _________________________________________________________________ 编辑档案,你可得到依语法突出内文 (syntax highlight) 的颜色。 24.4 PostgreSQL 的逐位元运算元 逐位元运算元由 Nicolas Moldavsky 写成 * [335]nico@overnet.com.ar 实践逐位元运算(AND、OR、XOR、位元补数 (bitwise complement))的 pgsql “C”函式。可经匿名 FTP 得到∶ * [336]ftp://ftp.overnet.com.ar/pub/utils/linux/bitpgsql.tgz 包括了 Linux 的 Makefile。 25. PostgreSQL 的日文假名码 (Kanji Code) 它在以下网址∶ * [337]ftp://ftp.sra.co.jp/pub/cmd/postgres/ 26. 移植 PostgreSQL 到视窗 95 / 视窗 NT 视窗 NT 版的 PostgreSQL 二元档可在以下地方找到∶ * 视窗 NT PostgreSQL 二元档 [338]http://www.askesis.nl * [339]http://www.postgresql.org 下载可执行档,将它解压,并从第十三步开始跟从 [340]安装 PostgreSQL。 如果你想重新编译原程式码,请跟从以下指示。移植到视窗 NT 要使用 Cygnus cygwin32 套件,它包括视窗 NT/95 的 gcc、gmake。 * Cygwin 32 套件在 [341]http://www.cygnus.com/misc/gnu-win32 找到 到此网页取得 cdk.exe 档(gnu-win32 的自我解压档) (译按∶此工具已改名 为 cygwin,网址为 [342]http://sourceware.cygnus.com。) 26.1 NT 版的作者 PostgreSQL NT 版的作者为□ * Daniel Horak [343]horak@mmp.plzen-city.cz * Joost Kraaijeveld [344]JKraaijeveld@askesis.nl * Kevin Lo [345]kevlo@FreeBSD.org * NT 版的网页在 [346]http://www.freebsd.org/~kevlo/postgres/portNT.html 26.2 安装 Cygwin 套件 1. 下载 [347]ftp://go.cygnus.com/pub/sourceware.cygnus.com/cygwin/latest/f ull.exe 2. 执行 full.exe,安装到 c:\Unix\Root 目录。 3. 执行 Cygwin,键入‘mount --help’以阅读文件。你可用 -f 选项强制挂上 。之後执行“umount / " 和“mount c:\Unix\Root /” 26.3 设定 Bash 视窗 安装 Cygwin 套件後,请进行以下工作以设定工作环境∶ 1. 安装 Vi 编辑器‘Vim’。请参阅 [348]http://metalab.unc.edu/LDP/HOWTO/Vim-HOWTO.html 2. cygwin bash 的预定视窗是一个廿四行,底色为黑色的视窗。要设定 bash 视 窗的底色和大小,按开始->控制台->MS DOS 主控台,把底色设定为黑色, 大小 改为七十行。 (或)右击视窗标题列,改变内容。 3. 编辑 c:\cygnus\cywinb20 中的 cygnus.bat 和作以下设定□ _________________________________________________________________ set HOME=c:\cygnus\cygwinb20 bash --login _________________________________________________________________ 及编辑 /.bash_profile 加上这几行 _________________________________________________________________ set -o vi PATH=$PATH:/usr/local/bin:/usr/bin export PATH _________________________________________________________________ 4. 要启用指令列历史编辑,键入□ bash$ set -o vi 使用 l、k、j、h,你可用 vi 指令编辑指令列历史。你可重覆和修改之前的指令 ,以节省打字时间。 5. 你可用以下指令挂上磁碟机 / 目录□ _________________________________________________________________ bash$ umount / bash$ mount "c:\cygnus" / bash$ mount "c:\cygnus\cygwin-b20\postgres" /usr/local/pgsql _________________________________________________________________ 6. 用以下指令阅读线上求助讯息□ _________________________________________________________________ bash$ mount --help bash$ ls --help _________________________________________________________________ 26.4 安装 Andy Piper 工具 1. 到 [349]ftp://ftp.xemacs.org/pub/xemacs/aux/ 下载 cygwin-b20-local.tar.bz2 到 c:/Unix/Root 目录。 2. cd c:/Unix/Root; bunzip2 cygwin-b20-local.tar.bz2 3. tar -xvf cygwin-b20-local.tar 4. cd /local/bin; sh check_cygwin_setup.sh 5. 完成第四步後,你会看到以下讯息∶ _____________________________________________________________ You don't have /bin would you like to mount cygwin as /bin?" [ y/n ] 选‘n’,其他问题则选‘y’。 _____________________________________________________________ 6. mount c:/Unix/Root/cygwin-b20/H-i586-cygwin32/i586-cygwin32/bin /bin 7. cd c:/Unix/Root/cygwin-b20/H-i586-cygwin32/i586-cygwin32; mkdir libexec share man etc sbin info 8. cp -R /local/{ bin,libexec,share,man,etc,sbin,info,include } 26.5 安装 Ludovic Lange 的 Cygwin32 IPC 套件 1. 到 [350]http://www.multione.capgemini.fr/tools/pack_ipc 下载 cygwin32_ipc-1.03.tgz 到 c:/Unix/Root 目录。 2. tar -zxvf cygwin32_ipc-1.03.tgz 3. cd cygwin32_ipc-1.03/src and run 'make' 4. mkdir -p c:/usr/local/{bin,include,lib,include/sys} _____________________________________________________________ cp /cygwin32_ipc-1.03/bin/* c:/usr/local/bin cp /cygwin32_ipc-1.03/include/sys/* c:/usr/local/include/sys cp /cygwin32_ipc-1.03/lib/* c:/usr/local/lib cp c:/usr/local/bin/* /bin cp c:/Unix/Root/cygwin-b20/H-i586-cygwin32/bin/* /bin _____________________________________________________________ 5. mount c:/usr/local/bin /usr/local/bin _____________________________________________________________ mount c:/usr/local/include /usr/local/include mount c:/usr/local/lib /usr/local/lib cp /local/lib/* /usr/local/lib _____________________________________________________________ 26.6 安装 PostgreSQL 1. 下载最新的 PostgreSQL 源程式码 2. Postgres 把所有档案当作二元档,所以会遇到 lf/cf 问题,我们要做第二 至五步∶ _____________________________________________________________ mkdir -p c:/Postgres/{Source,Binary} mkdir c:/Postgres/Binary/pgsql mkdir -p /usr/src/pgsql mkdir -p /usr/local/pgsql _____________________________________________________________ 3. 把 Postgres 源程式码拷贝到 c:/Postgres/Source 目录,之後 tar -zxvf postgresql-6.5.3.tar.gz 4. mv postgresql-6.5.3 pgsql 5. 现在挂上各个目录□ _____________________________________________________________ mount -b c:/Postgres/Binary/pgsql /usr/local/pgsql mount c:/Postgres/Source/pgsql /usr/src/pgsql mount c:/Unix/Root/cygwin-b20/share /sw/cygwin-b20/share _____________________________________________________________ 6. mkdir -p /usr/local/pgsql/{bin,include,lib,data} 7. cd /usr/src/pgsql/src/win32 8. 拷贝标头档□ _____________________________________________________________ cp un.h c:/Unix/Root/cygwin-b20/H-i586-cygwin32/i586-cygwin32/include/sys cp endian.h c:/Unix/Root/cygwin-b20/H-i586-cygwin32/i586-cygwin32/include cp tcp.h c:/Unix/Root/cygwin-b20/H-i586-cygwin32/i586-cygwin32/include/netinet _____________________________________________________________ 9. ln -s /usr/local/lib /usr/src/pgsql/src/backend/libpostgres.a 10. cd /usr/src/pgsql/src, 之後执行 './configure' 11. make > make.txt 2>&1 12. make install > make.install.txt 2>&1 13. cp /usr/local/pgsql/lib/pq.dll /usr/local/pgsql/bin 14. 在 make install 之後你要把 bin 和 lib 目录中的文字档转换,以清除 cr/lf 和 eof 之类东西。 15. 在 / 目录使用任何编辑器产生 .bashrc 如下∶ _____________________________________________________________ PATH=$PATH:/usr/local/pgsql/bin:/usr/local/bin PGDATA=/usr/local/pgsql/data PGLIB=/usr/local/pgsql/lib LD_LIBRARY_PATH=/usr/local/pgsql/lib:/usr/local/lib export LD_LIBRARY_PATH PATH PGDATA PGLIB _____________________________________________________________ 16. source /.bashrc, 之後执行 'initdb --username=xxxx' 要注意资料库系统 的拥有人不可以是 root/administrator。 17. 编辑 /usr/local/pgsql/data/pg_hba.conf 档,如∶ _____________________________________________________________ host all 163.17.11.109 255.255.255.0 trust _____________________________________________________________ 18. ipc-daemon.exe& 19. postmaster -i& 20. 执行 ' psql -h host_name template1' 27. 通信论坛 27.1 PostgreSQL 的电邮户口 以下地方取得免费电邮 * 在 Yahoo [351]http://www.yahoo.com 击选 e-mail * In Lycos [352]http://www.lycos.com 击选 new e-mail accounts * In hotmail [353]http://www.hotmail.com 击选 new e-mail accounts 订阅 PostgreSQL 通信论坛,而 Yahoo 有一个附加特色,可为 PostgreSQL 电邮 建立独立的目录,免致扰乱你其他的电邮。择选目录 Email- > Options- > Filters 及拣选 seperate folder for email。 你可用这个电邮户口在世界任何 地方收发电邮,只要你能上网。 如果你有其他电邮,你可用“Mail Filters”来自动把 PostgreSQL 邮件放到独 立的目录,以免混乱。 27.2 英文通信论坛 请参阅主网页的 Mailing Lists 项目∶ * [354]http://www.postgresql.org/ * 把问题电邮至∶ [355]pgsql-questions@postgresql.org * 开发人员 [356]pgsql-hackers@postgresql.org * 有关移植的问题 [357]pgsql-ports@postgresql.org * 文件问题 [358]pgsql-docs@postgresql.org 你会在一日之内从电邮收到答案或回覆。 你也可订阅通讯论坛。要订阅或停止订阅,电邮至 * [359]pgsql-questions-request@postgresql.org * [360]pgsql-hackers-request@postgresql.org * [361]pgsql-ports-request@postgresql.org * [362]pgsql-docs-request@postgresql.org 讯息的正文只可有一行 subscribe (或) unsubscribe 27.3 通信论坛存库 通信论坛也以 html 格式存库在以下地方∶ * 经 MHonarc 再经 WWW 的每日目录 [363]http://www.postgresql.org/mhonarc/pgsql-questions * [364]ftp://ftp.postgresql.org 目录 /pub/majordomo PostgreSQL 主网页中也有一个专为 pgsql 问题而设的搜寻引擎。 27.4 西班牙文通信论坛 目前有一个「非官方」的西班牙文 PostgreSQL 通信论坛。要订阅的话,用者需 电邮至∶ * [365]majordomo@tlali.iztacala.unam.mx 讯息的正文只可有一行 inscripcion pgsql-ayuda 28. 文件和参考书 28.1 用户指引和说明书 PostgreSQL 发行版本中已包括以下各项的 postscript、HTML 格式 和 unix man-pages。它们在 /usr/doc/postgresql* 目录中。如果你能上网, 你可在以 下地方找到下列文件∶ [366]http://www.postgresql.org/docs * "Installation Guide" * "User Guide" for PostgreSQL * "Implementation Guide" 详细说明 PostgreSQL 资料库的内部运作 * 线上说明书 * HTML 格式的线上说明书 * Postscript 格式的线上说明书,用以列印 28.2 线上文件 * 内建资料型态和运算元的名单和解说 A 是否 PSQL 指令的一部分 * 支援的 SQL 关键字名单 在源程式 /tools 目录中有一个命令稿 (script) * 支援的句语名单 使用 psql \h 指令 * PostgreSQL 的基本的关联式资料库概念(实施方法)和数个线上例子(查询 ) 看 src/test 中的 regression 测试,请参阅 。你会找到 regress/sql 和 suite/*.sql 目录。 * PostgreSQL 指导 SQL 指导稿件在 src/tutorial 目录中 也请参阅本文件附录乙 [367]附录乙 的“初学者 SQL 指导”。 28.3 有用的参考书 * "Understanding the New SQL: A Complete Guide" - Jim Melton 和 Alan R.Simon 著 Morgan Kaufman Publisher 是其中一本最好的 SQL 书。这本书以 SQL92 为准。 * "A Guide to THE SQL STANDARD" - C.J.Date 著 Addison-Wesley Publishing company 也是一本好书。有关 SQL 的名作。 * SQL - The Standard Handbook, 一九九二年十一月 Stephen Cannan 和 Gerard Otten McGraw-Hill Book Company Europe , Berkshire, SL6 2QL, England * SQL Instant Reference, 1993 Martin Gruber, Technical Editor: Joe Celko SYBEX Inc. 2021 Challenger Drive Alameda, CA 94501 * C.J.Date, "An introduction to Database Systems" (第六版), Addison-Wesley, 1995, ISBN 0-201-82458-2 这本是资料库管理系统的圣经。这本书详细说明正规化 (normalization)、SQL、恢复 (recovery)、并行性 (concurrency)、保安、整合性 (integrity)、 对原本的关联模式的延伸、现今的话题如主从系统和物件导向模式。 也包括大量参考资料以供深入研究。向大部分用户推荐。 * Stefan Stanczyk, "Theory and Practice of Relational Databases", UCL Press Ltd, 1990, ISBN 1-857-28232-9 这本书详细说明关联式资料库、关系代数 (relational algebra)、关系演算 (calculus) 和正规化的理论。但它不包含现实世界的问题和较复杂的例子。向大部分用户推荐。 * "The Practical SQL Handbook" 第三版, Addison Wesley Developers Press ISBN 0-201-44787-8 向大部分用户推荐。 * Michael Stonebraker, "Readings in Database Systems", Morgan Kaufmann, 1988, ISBN 0-934613-65-6 这是过去数年有关资料库的论文集。它不是给一般用者看,而是进阶的学生(研究生) 或资料库开发人员。 * C.J.Date, "Relational Database - Selected Readings", Addison-Wesley, 1986, ISBN 0-201-14196-5 这是过去数年有关资料库的论文集。它不是给一般用者看,而是进阶的学生(研究生) 或资料库开发人员。 * Nick Ryan 和 Dan Smith, "Database Systems Engineering", International Thomson Computer Press, 1995, ISBN 1-85032-115-9 这本书深入说明存取方法和储存技考。 * Bipin C. Desai, "An introduction to Database Systems", West Publishing Co., 1990, ISBN 0-314-66771-7 它不是给一般用者看,而是进阶的学生(研究生)或资料库开发人员。 * Joe Celko "INSTANT SQL Programming" Wrox Press Ltd. Unit 16, 20 James Road, Tyseley Birmingham, B11 2BA, England 1995 * Michael Gorman "Database Management Systems: Understanding and Applying Database" Technology QED and John Wiley 1991 * Michael Gorman "Enterprise Database for a Client/Server Environment" QED and John Wiley 说明建立经由 repository metamodels 的主从资料库应用程式的要求和 ANSI 标准 SQL 1993 的应用。 还有数以百计有关 SQL 的书!到书店看看吧。 28.4 ANSI/ISO SQL 规格文件□SQL 1992, SQL 1998 ANSI/ISO SQL 规格文件可在下列网站找到∶ * [368]http://www.naiua.org/std-orgs.html * [369]http://www.ansi.org/docs 掣动档案 cat_c.html 及寻找“Database SQL”。 * SQL92 标准 [370]http://www.jcc.com 掣动档案 sql_stnd.html。 * ANSI/ISO SQL 规格 [371]http://www.contrib.andrew.cmu.edu/~shadow/sql.html 你会在此找 到 SQL 的参考资料。 28.5 ANSI/ISO SQL 1992 的语法 请参阅本文件的附录甲 [372]附录甲 28.6 ANSI/ISO SQL 1998 的语法 SQL 1998 (SQL 3) 规格仍在开发中。参看本文件的“电子途径取得 SQL3 草案” [373]SQL 1998 28.7 初学者 SQL 导引 参看本文附录乙 [374]Appendix B 28.8 SQL92 的时态延伸 (Temporal Extension) * SQL92 的时态延伸的文件 [375]ftp://FTP.cs.arizona.edu/tsql/tsql2/ * Temporal SQL-3 规格 [376]ftp://FTP.cs.arizona.edu/tsql/tsql2/sql3/ 这目录中包括一个 SQL-92 语言规格的时态延伸。这种新语言被名为 TSQL2。 这里的语言规格是这语言的最终版本。 可直接联络 TSQL2 设计委员会的主席∶Richard T.Snodgrass, Department of Computer Science, University of Arizona, Tucson, AZ 85721, * [377]rts@cs.arizona.edu TSQL2 Language Design Committee 的电邮地址和入会详情可在语言规格最後的 一章找到。 这目录中的内容如下。 spec.dvi,.ps TSQL2 语言规格,一九九四年九月出版 bookspec.ps TSQL2 语言规格,内容如在 TSQL2 的书般,一九九五年十月 出版 (请参阅下文) sql3 提交给 ANSI 和 ISO SQL3 筹委会的修订建议 和语言规格一起,这里还收集了一些有关设计上的决定的评论、提供例子、 和研 究如何实践这语言。这些评论原本是给 TSQL2 Language Design Committee 的建 议。它们现在有另一个用处∶提供有关 TSQL2 构造的例子、 推动设计时作出的 大量决定、比较 TSQL2 和过去十五年有人提议过的大量语言。 必须强调,请些 评论目前不是 TSQL2 语言规格的一部分,而是对它的补充和发展。 这语言规格 已是 TSQL2 的最终决定。 这些评论,加上语言规格、数个索引和其他支援材料,已经集结成书∶ Snodgrass, R.T., editor, The TSQL2 Temporal Query Language, Kluwer Academic Publishers, 1995, 674+xxiv 页。 书中有一个节录了的评价,完整的评价在此目录中的 eval.ps 提供。 tl2tsql2.pl 档是一个把获接受的时态逻辑 (temporal logic) 翻译为 TSQL2 的 prolog 程式。这程式由 Michael Boehlen 写成。 * [378]boehlen@iesd.auc.dk 各位可接触他以取得一份解释这翻译过程的论文。这是这程式的旧版本。新版本 在 * [379]http://www.cs.auc.dk/general/DBS/tdb/TimeCenter/Software (the TimeDB and Tiger systems). 28.9 第零部分□取得 ISO/ANSI SQL 文件 这文章说明如何(合法地)取得一份 SQL-92 标准和怎样取得一份“现时的 ”SQL3 草案。 这标准版权所有, ANSI 标准的持有人为 ANSI,ISO 标准的持有人为 ISO。 现时有两(2)个 SQL 标准,分别由 ANSI 和 ISO 出版。这两份标准每个字都一 模一样, 除了一些小节,如文件标题、页首、短句“International Standard” 和“American Standard”之类。 购买 SQL-92 标准 The ISO standard, ISO/IEC 9075:1992, Information Technology - Database Languages - SQL,目前(一九九三年三月)在 ANSI 有存货及可得到∶ American National Standards Institute 1430 Broadway New York, NY 10018 (USA) Phone (sales): +1.212.642.4900 价钱 US$230.00。ANSI 版,ANSI X3.135-1992, American National Standard for Information Systems - Database Language SQL,目前并无存货, 但应该 可在一九九三年三月下旬至五月上旬间得到。估计它的价钱是 US$225.00。 如果你从 ANSI 购买任何一份文件,你需要给 7% 的手续费(即大约 US$9.10) 。海外邮寄肯定会更贵。ANSI 要求所有单据都伴随一份公司订单的复印本, 或 者你可以美元寄一张美国的银行的支票,他们会在结了账後寄给你。 (例外情况 ∶如果你的组织是 ANSI 的公司会员 (corporate member),ANSI 会把文件寄给 你而向公司收钱。) 在美国国外,ISO 标准也可从作为 ISO (International Organization for Standardization) 或 IEC (International Electrotechnical Commission) 会 员的本土国营机构(国家的标准组织)购买。国营机构及其地址的名单可从 ANSI 或其他国营机构取得。它们也可从 ISO 得到∶ International Organization for Standardization Central Secretariat 1, rue de Varembi CH-1211 Genhve 20 Switzerland 如果你想以更方便快捷的方法订购这标准,你需要附出代价。你可从以下组织以 US$308.00 订购 ISO/IEC 9075:1992, Information Technology - Database Languages - SQL∶ Global Engineering Documents 2805 McGaw Ave Irvine, CA 92714 (USA) USA Phone (works from anywhere): +1.714.261.1455 Phone (only in the USA): (800)854-7179 我不知道这是否包括货运费,但我估计(起码)国际货运会额外收费。 他们会颇 为快捷地把文件寄给你,甚至会接受“主要的信用卡”。Global 还没有 ANSI 版 ,或他们没有价钱或估计时间(但我预计它会在 ANSI 出版後数周之内出现,价 钱接近 US$300.00)。 购买一份 SQL3 草案 (Working Draft) 你可从 ANSI X3 Secretariat, CBEMA (Computer and Business Equipment Manufacturers Association) 购买一份 SQL3 草案的复印本。他们意图确保能提 供“最近”版本的 SQL3 草案,并以 US$60.00 至 US$65.00 出售。你可以以下 途径接触 CBEMA。 CBEMA, X3 Secretariat Attn: Lynn Barra 1250 Eye St. Suite 200 Washington, DC 20005 (USA) Lynn Barra 也可以电话号码 +1.202.626.5738 接触以要求一份,不过邮寄似乎 较有礼貌。 电子径取得 SQL3 草案 最新版本(以写本文时为准)的 SQL3(ANSI 和 ISO)草案(和所有附件) 可在 以下站台以“anonymous ftp”或“ftpmail”得到∶ gatekeeper.dec.com 在 /pub/standards/sql/ 这目录中有多个档案,包括 PostScript 档和纯文字档(格式不很美观, 但可在 萤幕上无须特别软件阅读)。 一般来说,你可找到类似名称的档案∶ sql-bindings-mar94.ps sql-bindings-mar94.txt sql-cli-mar94.ps sql-cli-mar94.txt sql-foundation-mar94.ps sql-foundation-mar94.txt sql-framework-mar94.ps sql-framework-mar94.txt sql-psm-mar94.ps sql-psm-mar94.txt 完成新版本的文件後,“mar94”会改变来说明新的出版日期(例如“aug94”是 估计在 “mar94”之後的版本)。 另外,为照顾不能从 FTP 取得档案名单的读者,我们在目录中放置了一个名为 ls 的档案。这档案(神奇!)包括了目录内的档案名单。 从 Ftp 直接获得档案 这是使用 FTP 的例子。它特别说明如何连接到 gatekeeper.dec.com, 到达放置 这些档案的目录,及把档案传送到你的电脑。要注意的的电脑要有上网功能。 签 入名称是‘ftp’,密码则是你的电邮地址(即所谓‘anonymous ftp’)。指令 ‘type binary’是用来确保收到的档案中没有位元被截去。‘get’一次取得一 个档案。 在命令稿 (script) 中的注解会在角括号内 < 即是如此 >。 % ftp gatekeeper.dec.com Connected to gatekeeper.dec.com. 220- *** /etc/motd.ftp *** Gatekeeper.DEC.COM is an unsupported service of DEC Corporate Research. <…等一会…> 220 gatekeeper.dec.com FTP server (Version 5.83 Sat ... 1992) ready. Name (gatekeeper.dec.com:<你的登入名称>): ftp 331 Guest login ok, send ident as password. Password: <键入你的电邮地址> 230 Guest login ok, access restrictions apply. Remote system type is UNIX. <什麽也没所谓> Using binary mode to transfer files. ftp> cd pub/standards/sql 250 CWD command successful. ftp> dir 200 PORT command successful. 150 Opening ASCII mode data connection for /bin/ls. total 9529 -r--r--r-- 1 root system 357782 Feb 25 10:18 x3h2-93-081.ps -r--r--r-- 1 root system 158782 Feb 25 10:19 x3h2-93-081.txt -r--r--r-- 1 root system 195202 Feb 25 10:20 x3h2-93-082.ps -r--r--r-- 1 root system 90900 Feb 25 10:20 x3h2-93-082.txt -r--r--r-- 1 root system 5856284 Feb 25 09:55 x3h2-93-091.ps -r--r--r-- 1 root system 3043687 Feb 25 09:57 x3h2-93-091.txt 226 Transfer complete. ftp> type binary 200 Type set to I. ftp> get x3h2-93-082.txt 200 PORT command successful. 150 Opening BINARY mode data connection for x3h2-93-082.txt (90900 bytes). 226 Transfer complete. 90900 bytes received in 0.53 seconds (166.11 Kbytes/s) ftp> quit % <这档案已成为你的电脑中的 x3h2-93-082.txt> 没有 ftp 支援的情况下取得档案 Digital Equipment Corporation 和数间其他公司相似,提供 ftp email 服务。 它可能需要数天才有回应,但它为不能直接上网的人提供了等同 ftp 的服务。伺 服器的地址为∶ ftpmail@decwrl.dec.com 以下命令稿会取得最新版本的 SQL3 文件的 PostScript 版∶ reply joe.programmer@imaginary-corp.com connect gatekeeper.dec.com anonymous binary compress uuencode chdir /pub/standards/sql get x3h2-93-091.ps quit 第一句指令告诉伺服器要把档案传给你,你需要把 “joe.programmer@imaginary-corp.com”换为你的电邮地址。这例子中的档案 x3h2-93-091.ps 会以 uuencode 了的 compress 档格式,分成三十四封电邮回覆 。 如果你的环境没有提供重组档案的工具,你需要用下列命令稿以纯文字模式取 得档案∶ reply joe.programmer@imaginary-corp.com connect gatekeeper.dec.com anonymous chdir /pub/standards/sql get x3h2-93-091.ps quit 但请注意,这 .ps 档大概会被分为超过七十份来回覆! 要取得任何不是 x3h2-93-091.ps 的档案,只需把“x3h2-93-091.ps” 换为你想 要的档案的名称。要取得所有档案的名单,把“x3h2-93-091.ps”换为 “dir” 。 28.10 第一部分□ISO/ANSI SQL 当前情况 这章是有关 SQL 标准和其当前情况的资料来源。 当前情况∶ 目前正在进行开发工作,以改进 SQL 为为计算上完整的语言 (computationally complete language),以可用於持久、复杂的物件。这包括∶一般化和专门化等 级 (generalization and specialization hierarchies)、多级继承 (multiple inheritance)、自订资料形态、激发 (triggers) 和判断 (assertions)、知识库 系统支援 (support for knowledge based systems)、回递查询式 (recursive query expression) 和附加资料管理工具。它也包括抽象资料型态 (ADTs)、物件 识别字 (object identifiers)、方法 (methods)、继承 (inheritance)、多型 (polymorphism)、包装 (encapsulation)、 和所有其他与物件资料管理有关的功 能的规格。 一九九六年秋季,SQL3 数个部分进行了一次 ISO CD 不记名投票。这数部分是 SQL/Framework、SQL/Foundation 和 SQL/Bindings。一如所料, 投票结果是在 收到约九百个评论下遭否决。一月下旬举行了一次 ISO DBL 编辑会议 (editing meeting),处理了大量在评论中提及或另外提交的问题解决方法。 由於该次会议 未能处理所有评论,会议将会延长。 编辑会议定於一九九七年七月在伦敦完成。 据估计,在七月的编辑会议之後,会再提出对有关那些部分的 SQL 进行最後的 CD 投票。最後 CD 过程会花大约六个月,之後会有 DBL 编辑会议、DIS 投票和 快捷的 IS 投票。 ISO 的程序在 SQL/92 之後改变了,所以 SQL 委员会仍在摸索这过程的详情。 如果事事顺利,SQL3 的这些部分会在 1998 年後期成为官方 ISO/IEC 标准,不 过时间非常紧迫。 在一九九三年,ANSI 和 ISO 开发委员会决定把之後的 SQL 发展分为多部分的标 准。这些部分包括∶ * Part 1: Framework A non-technical description of how the document is structured. * Part 2: Foundation The core specification, including all of the new ADT features. * Part 3: SQL/CLI The Call Level Interface. * Part 4: SQL/PSM The stored procedures specification, including computational completeness. * Part 5: SQL/Bindings The Dynamic SQL and Embedded SQL bindings taken from SQL-92. * Part 6: SQL/XA An SQL specialization of the popular XA Interface developed by X/Open * Part 7:SQL/TemporalAdds time related capabilities to the SQL standards. 在美国,SQL3 的整体同时当作 ANSI 本土 (Domestic, "D") 专案和 ISO 专案处 理。目前估计完成时间是一九九九年。 SQL/CLI 和 SQL/PSM 现正以最高速度处理,以作为 SQL-92 的修订。在美国, 它们只被当作国际 (International, "I") 专案处理。 SQL/CLI 在一九九五年完 成了。SQL/PSM 应该会在 1996 年未段完成。 除了 SQL3 外,还有一些附加的计划∶ * SQL/MM An ongoing effort to define standard multi-media packages using the SQL3 ADT capabilities. * Remote Data Access (RDA) 标准委员会和过程 (Standards Committee and Process) 事实上,世上有多个 SQL 标准委员会。ISO 有一部分是一个国际 SQL 标准小组 。多个国家都有以 SQL 为重点的委员会。这些国家(通常)派出代表参与 ISO/IEC JTC1/SC 21/WG3 DBL 会议。主动参与 ISO SQL 标准制定的国家是∶ * 澳洲 * 巴西 * 加拿大 * 法国 * 德国 * 日本 * 韩国 * 荷兰 * 英国 * 美国 NIST 确认 (NIST Validation) 在美国,SQL 实践的确认工作由 National Institute of Standards and Training (NIST) 进行。NIST 目前有一套入门级 (entry level) SQL-92 的测试 套件。NIST 确认要求的详情被定义为一项 Federal Information Processing Standard (FIPS)。目前对 SQL 的要求定义於 FIPS 127-2。本文件的 Postscript 和文字模式可从 NIST 取得。目前通过 SQL 确认的产品名单也可在 NIST 取得。 标准 SQL 刊物和文件 (Standard SQL Publications and Articles) SQL 标准有两个版本。两个都可从 ANSI 取得∶ * ISO/IEC 9075:1992, "Information Technology --- Database Languages --- SQL" * ANSI X3.135-1992, "Database Language SQL" 除封面和对其他标准的参考外,SQL 标准的两个版本完全一样。 两个版本都可从 以下地方取得∶ American National Standards Institute 1430 Broadway New York, NY 10018 USA Phone (sales): +1.212.642.4900 除 SQL-92 标准外,现在还有一份技术正误表 (Technical Corrigendum) (除错 )∶ * Technical Corrigendum 1:1994 to ISO/IEC 9075:1992 TC 1 应该可从 ANSI 取得。TC 1 只有 ISO 版本□□它适用於 ISO 和 ANSI 版 本的 SQL-92。 除标准外,也有关於 1992 SQL 标准的书。这些书提供一个比实际标准易理解的 描述。 有关的标准 SQL 社群也对多个其他标准有兴趣。这节包括一些有关这些努力的指针。 当更多 资料在网上出现後,这个名单也会更长。 * SQL Environments (FIPS 193) * Next Generation Repository Systems (X3H4) - 一份呼吁参与 "Developing Standards for the Next Generation Repository Systems" 的新闻稿。 28.11 第二部分□ISO/ANSI SQL 基金 (ISO/ANSI SQL Foundation) SQL3 努力的一个重要部分在 SQL 基金文件中∶ * 基本的 SQL/PSM 能力(来自 SQL/PSM-92) * 新的资料型态 * 激发 (Triggers) * 子表格 (Subtables) * 抽像资料型态 (Abstract Data Types, ADT) * 物件导向能力 对物件导向能力有数个先决要求∶ * 定义复杂运作的能力 * 把复杂的运作储存在资料库中 * 呼叫外部程序,有些不能用 SQL 做到的运作,或需要和外面沟通 这些能力已定义为 SQL/PSM 的一部分 现在有大量工作於炼制 SQL-3 物件模型,使它和 ODMG 提出的物件模型看齐。这 努力在 X3H2 和 ISO DBL 文章中描述过∶容纳 SQL3 和 ODMG。在 SQL3/OQL Merger 最近的更新版也可得到。 SQL3 时间表 有关 SQL3 的工作正在进行,但最终标准还有待数年後才出现。 * 国际性投票把 SQL3 基础从草案提升为委员草案 (Committee Draft, CD) 在 一九九六日秋季进行。 * 估计投票会带来大量评论 * 将会需要第二次 CD 投票 * Draft International Standard 投票多半会在 1998 年中进行 * 国际标准可在一九九九年中完成 ANSI 版的标准的编排也差不多。 28.12 第三部分□ISO/ANSI SQL 呼叫级介面 (Call Level Interface) SQL/CLI 是一种对 SQL 资料库的呼叫级介面。它设计为支援包裹 (shrink-wrapped) 的应用程式。CLI 原本由 SQL Access Group (SAG) 的一个小 组委员会创造。 SAG/CLI 规格在 1992 年以微软 Open DataBase Connectivity (ODBC) 规格公布。一九九三年, SAG 把 CLI 提交到 ANSI 和 ISO SQL 委员会 中。(SQL Access Group 现已结合到 X/Open consortium 中。) SQL/CLI 提供了以下事项的国际标准∶ * 独立於实践方法的 CLI 来存取 SQL 资料库 * 主从工具 (Client-server tools) 可轻易籍动态链结函式库存取资料库 * 支援及鼓励丰富的主从工具 SQL/CLI 时间表 对标准的开发过程,SQL/CLI 正以惊人的速度处理中。 * SQL/CLI 是对 1992 SQL 标准(SQL-92)的补遗 * 一九九五年完成,成为 ISO 标准 * ISO/IEC 9075-3:1995 Information technology -- Database languages -- SQL -- Part 3: Call-Level Interface (SQL/CLI) * 目前 SQL/CLI 正努力加上 SQL3 功能 28.13 第四部分□ ISO/ANSI SQL 持久储存模组 (Persistent Stored Modules) SQL/PSM 籍以下功能扩充 SQL∶ * 程序语言 (Procedural language) 延伸 * 复句 (Multi-statement) 和储存程序 * 外部函数与程序呼叫 (External function and procedure calls) 除作为有价值的应用程式开发工具,SQL/PSM 为 SQL3 提供了物件导向能力的基 础支援。 复句和内存程序 复句和内存程序为主从环境提供多种好处∶ * 表现□由於内存程序可执行多句 SQL 语句,与客户经网络的沟通可减少。 * 保安□用者可以有权利经内存程序更新一个或多个表格,但没权直接更新。 * 分享程式码□不需每个存取资料库客户工具都重写和重试内存程序的程式码 。 * 控制□为应用程式的执行提供单一的定义和控制。 程序语言延伸 程序语言籍流向控制和其他编程技巧为 SQL 加上传统程式语言的功能。 流向控制语句 * If-then-else * 回圈结构 (Looping constructs) * 例外处理 (Exception handling) * Case 语句 * Begin-End 区块 程序语言延伸还包括其他编程技巧∶ * 变数宣告 * Set 语句,用於赋值 (assignment) * 取得行程 (process) 和状态的资料 此外,所有传统 SQL 语言都可包含在多句的程序中。 外部函数与程序呼叫 一个经常在大量资料库产品的 wish lists 中出现,而有部分实践到的特色, 是 呼叫用者所写,在资料库软件外的程序。 * 容许某个电脑或应用程式加上自己的资料库函数 * 可在整个资料库应用程式使用 这功能的好处是它让资料库(因此包括资料库应用程式)使用丰富的程序和函数 , 丰富得不能由一个标准组织定出。 SQL/PSM 时间表 SQL/PSM 发展迅速∶ * SQL/PSM 是 SQL-92 的补遗 * 有关把 SQL/PSM 从国际标准的草案变为国际标准的国际投票在一九九六年一 月完成。 * 一九九六年五月的编辑会议未能解决所有评论 * PSM 编辑会议安排於一九九六年九月三十日至十月四日期间重开 * 安排紧迫,但 PSM 有可能在一九九六年间出版 * 官方任命为∶ ISO/IEC DIS 9075-4:199? Information technology -- Database languages -- SQL -- Part 4: SQL Persistent Stored Modules (SQL/PSM) * 现正为 SQL3 加上 SQL/PSM 支援工作。 28.14 第五部分□ ISO/ANSI SQL/结合 (Bindings) 为方便参考,程式语言的结合被抽出成独立的文件。目前的版本即是 SQL-92 的 动态和嵌入结合 (dynamic and embedded bindings) 的节录。 程式语言结合仍有不同的问题有待解决。 对传统程式语言来说,资料型态和 SQL-92 的可以互相对应。不过, SQL 物件和 程式语言变数之间的对应必须定义。 对物件导向语言来说,目前的 SQL 资料型态、SQL 物件模型和物件导向程式语言 之间的对应关系必须定义。 物件模型需在公开这些之前稳定下来。 语言结合完成时会成为 SQL3 的一部分。 28.15 第六部分□ISO/ANSI SQL XA 介面专门化 (SQL/XA) 这规格会为总交易管理员 (global Transaction Manager) 和 SQL 资源管理员 (SQL Resource Manager) 之间应用程式介面 (API) 提供标准。它会根据 ISO/IEC 10026 的内容,“分散交易处理 (Distributed Transaction Processing)” 标准化函数呼叫,SQL 资源管理员会用以支援分二阶段的确定 (two-phase commit)。基础的文件是自经 X/Open 批准而来自一份 X/Open 出版 物,它清楚的指明 xa_close, xa_commit, xa_complete, xa_end, xa_forget, xa_open, xa_prepare, xa_recover, xa_rollback 和 xa_start 等多个函数,以 SQL 资料型态的输入和输出参数的语法。 ISO 目前正尝试尽快追上 (fast-tract) X/Open XA 规格。 这个过程原封不动采 用一个目前的业界规格。以 ISO SC21,JTC 1 等级的 XA 尽快追上投票在一九九 五年四月二十七日开始,一九九五年十月二十七日结束。如果 XA 规格经 75% 票 数和 2/3 的 JTC 1 p-members 批准,它会成为一个国际标准。 如果经尽快追上 投票批准,SQL/XA 可在 1996 年成为标准。 28.16 第七部分□时态 ISO/ANSI SQL 时态 SQL 处理和时间有关的资料。其概念是在查询资料时利用它在一个特定时间 的情况。 时态 SQL 是一份由 Rick Snodgrass 在一九九四年十二月所写,描述 这概念的文件。 X3 宣布确认一个新计划,ISO/IEC 9075 Part 7: SQL/Temporal 是一份关於 SQL/Temporal 的新闻稿 ---------------------------------------------------------------------------- Temporal SQL ************ Rick Snodgrass(TSQL2 委员会主席) 31-Dec-1994 有人质疑过 SQL 3 对附加时间支援的问题(如在 DBL R10-75 提议,要求 SQL 有新的部分来处理时间性的资料库)。其论点是抽象资料形态 (ADT's) 足以支援 时态。 在这资讯性的项目,我使用具体例子来论证拥有抽象资料形态的栏位不能 处理时态查询。 特别来说,很多时间性的查询不是很难用 SQL 模拟,就是需在 过程语言中使用嵌入式 SQL。其他选择在 TSQL2,一个对 SQL-92 的时态延伸中 提出了。 导言 有效时间 (Valid-time) 的支援超出一个时态 ADT 的能力。使用後者, 一个栏 位被指定为时态领域,如 DATE 或 INTERVAL(稍後会有例子)。籍著有效时间, 表格的每行随著时间改变,因为现实改变了。联系到一个有效时间表格的某行的 时间戳记 (timestamp),会被查询语言理解为该行中各栏数值的组合有效的时间 。 这个无须言明的时间戳记使得查询可以简单易明地表达出来。 个案研究□储存现时资料 The University of Arizona 的 Office of Appointed Personnel 在资料库中有 些资料,包括雇员名字、目前薪金和目前职位。 这些可用一个简单的表格表达出 来。 Employee(Name, Salary, Title) 使用这个表格寻找一个雇员的薪金十分简单。 SELECT Salary FROM Employee WHERE Name = 'Bob' 现在 OAP 想再记录出生日期。为些,在表格中加了一栏,产生以下纲目 (schema)∶ Employee(Name, Salary, Title, DateofBirth DATE) 找寻一名雇员的出生日期个寻找薪金类似。 SELECT DateofBirth FROM Employee WHERE Name = 'Bob' 个案研究□储存历史资料 OAP 想把受雇历史电脑化。为此,他们加上两栏, 一栏指出表示此行的资料何时 开始有效,另一指出资料何时失效。 Employee (Name, Salary, Title, DateofBirth, Start DATE, Stop DATE) 以资料模型 (data model) 说,这些新栏位和 DateofBirth 毫无分别。不过, 它们的存在产生多种结果。 个案研究□投映 (Projection) 要找出雇员目前的薪金会较为困难。 SELECT Salary FROM Employee WHERE Name = 'Bob' AND Start <= CURRENT_DATE AND CURRENT_DATE <= Stop 这句查询比之前的复杂。元凶很明显是新增的两栏。OAP 想发出薪金历史给各员 工。 特别地,有需要找出每一名雇员在收受一个薪酬的最长时间。不幸地,用 SQL 不能做到。一名雇员在薪酬调整期间职衔可有多次变更。 Name Salary Title DateofBirth Start Stop ---- ------ ----- ----------- ----- ---- Bob 60000 Assistant Provost 1945-04-09 1993-01-01 1993-05-30 Bob 70000 Assistant Provost 1945-04-09 1993-06-01 1993-09-30 Bob 70000 Provost 1945-04-09 1993-10-01 1994-01-31 Bob 70000 Professor 1945-04-09 1994-02-01 1994-12-31 图 1 要注意有三行 Bob 的薪金停留在 $70,000。所以,结果应该是 Bob 有两行。 Name Salary Start Stop ---- ------ ----- ---- Bob 60000 1993-01-01 1993-05-30 Bob 70000 1993-06-01 1994-12-31 另一方法是把薪金和职级资料印给用者,而由用者找出他的薪酬何时变更。 这方 法既不吸引,亦不实际。另一方法是尽量使用 SQL。 CREATE TABLE Temp(Salary, Start, Stop) AS SELECT Salary, Start, Stop FROM Employee; repeat UPDATE Temp T1 SET (T1.Stop) = (SELECT MAX(T2.Stop) FROM Temp AS T2 WHERE T1.Salary = T2.Salary AND T1.Start < T2.Start AND T1.Stop >= T2.Start AND T1.Stop < T2.Stop) WHERE EXISTS (SELECT * FROM Temp AS T2 WHERE T1.Salary = T2.Salary AND T1.Start < T2.Start AND T1.Stop >= T2.Start AND T1.Stop < T2.Stop) until no rows updated; DELETE FROM Temp T1 WHERE EXISTS (SELECT * FROM Temp AS T2 WHERE T1.Salary = T2.Salary AND ((T1.Start > T2.Start AND T1.Stop <= T2.Stop) OR (T1.Start >= T2.Start AND T1.Stop < T2.Stop)) 回圈中找出重叠或相邻而需要合并的时段。在最坏的情况,回圈会执行 log N 次 ,N 指一连串重叠或相邻的同薪金纪录的数量。读者可自行模拟查询在以上例子 的执行, 以验证它的正确性。 第三种方法是使用 SQL 为表格开启一个游标 (cursor)。为每个薪金管理一个各 段落的链表 (linked list)。这链表开始时需为空白。 DECLARE emp_cursor CURSOR FOR SELECT Salary, Title, Start, Stop FROM Employee; OPEN emp_cursor; loop: FETCH emp_cursor INTO :salary, :start, :stop; if no-data returned then goto finished; find position in linked list to insert this information; goto loop; finished: CLOSE emp_cursor; 重覆至链表结束,印出日期和薪金。 如果游标是 ORDER BY Start,链表并非必要。 无论如何,一句简单的查询是不易用 SQL-92 的功能表达出这目的。使用 TSQL2 的话这查询会很简单。 SELECT Salary FROM Employee 案例研究□连结 (JOIN) 一个更激进的方法是把纲目重整,把薪金、职级、出生日期资料分开, 从而避开 抽取薪酬历史时遇到的问题。(为方便计,我们以後的讨论中不再考虑出生日期 。) Employee1 (Name, Salary, Start DATE, Stop DATE) Employee2 (Name, Title, Start DATE, Stop DATE) Employee1 表格如下∶ Name Salary Start Stop ---- ------ ----- ---- Bob 60000 1993-01-01 1993-05-30 Bob 70000 1993-06-01 1993-12-31 这是 Employee2 表格。 Name Title Start Stop ---- ------ ----- ---- Bob Assistant Provost 1993-01-01 1993-09-30 Bob Provost 1993-10-01 1994-01-31 Bob Professor 1994-02-01 1994-12-31 改变之後,取得雇员薪金资料变得简单。 SELECT Salary, Start, Stop FROM Employee1 WHERE Name = 'Bob' 但如果 OAP 想一个表格中包括薪金、职位的时段(即 OAP 想一个像图 1 形式的 表格)?一个方法是印出两个表格,而让用者找出有关组合。另一方法是完全使 用 SQL。不幸地,这查询要分析 Employee1 每行和 Employee2 的重叠情况,有 四种可能出现。 SELECT Employee1.Name, Salary, Dept, Employee1.Start, Employee1.Stop FROM Employee1, Employee2 WHERE Employee1.Name = Employee2.Name AND Employee2.Start <= Employee1.Start AND Employee1.Stop < Employee2.Stop UNION SELECT Employee1.Name, Salary, Dept, Employee1.Start, Employee2.Stop FROM Employee1, Employee2 WHERE Employee1.Name = Employee2.Name AND Employee1.Start >= Employee2.Start AND Employee2.Stop < Employee1.Stop AND Employee1.Start < Employee2.Stop UNION SELECT Employee1.Name, Salary, Dept, Employee2.Start, Employee1.Stop FROM Employee1, Employee2 WHERE Employee1.Name = Employee2.Name AND Employee2.Start > Employee1.Start AND Employee1.Stop < Employee2.Stop AND Employee2.Start < Employee1.Stop UNION SELECT Employee1.Name, Salary, Dept, Employee2.Start, Employee2.Stop FROM Employee1, Employee2 WHERE Employee1.Name = Employee2.Name AND Employee2.Start > Employee1.Start AND Employee2.Stop < Employee1.Stop 正确找出所有情形是一件具挑战性的工作。使用 TSQL2,进行一个具时态的连结 就如人们所期望。 SELECT Employee1.Name, Salary, Dept FROM Employee1, Employee2 WHERE Employee1.Name = Employee2.Name 个案研究□聚集 (AGGREGATES) 现在 OAP 被问及最高薪酬是什麽?加上时间前,这很简单。 SELECT MAX(Salary) FROM Employee 现在加上了薪金历史,我们要找出不同时间最高薪金的历史。问题当然是 SQL 并 不提供具时态的聚集。简单的方法是印出有关资料,用人手找出最大值。 另一个 方法是取巧,把一个当时的 (snapshot) 聚集查询转化为不使用聚集的查询, 再 转化为时态聚集。那个不使用聚集的查询用於找出不大於它本身数值的薪金。 SELECT Salary FROM Employee AS E1 WHERE NOT EXISTS (SELECT * FROM Employee AS E2 WHERE E2.Salary > E1.Salary) 把这个查询变为时态查询并不显浅。以下是一种方法。 CREATE TABLE Temp (Salary, Start, Stop) AS SELECT Salary, Start, Stop FROM Employee; INSERT INTO Temp SELECT T.Salary, T.Start, E.Start FROM Temp AS T, Employee AS E WHERE E.Start >= T.Start AND E.Start < T.Stop AND E.Salary > T.Salary; INSERT INTO Temp SELECT T.Salary, T.Stop, E.Stop FROM Temp AS T, Employee AS E WHERE E.Stop > T.Start AND E.Stop <= T.Stop AND E.Salary > T.Salary; DELETE FROM Temp T WHERE EXISTS (SELECT * FROM Employee AS E WHERE ((T.Start => E.Start AND T.Start < E.Stop) OR (E.Start >= T.Start AND E.Start < T.Stop)) AND E.Salary > T.Salary; 这方法建立辅助表格。我们在这个表格中加上两个时段中重叠部分的上、下部分 。 之後我们把所有子查询中找出的纪录删除,因此影响到 NOT EXISTS。最後我 们从辅助表格中找出最长的时段,像之前我们找出薪金资讯般。 如大家所料,这 样的 SQL 句子执行时效率非常低,因为那些复杂的巢状不等查询。 第三个方法是尽量少用 SQL,而在主机上所用的语言中用游标找出最长的历史。 使用 TSQL2 再次简单直接。 SELECT MAX(Salary) FROM Employee 摘要 大部分资料库应用程式都需要处理随时间改变的资料。有效时间在 SQL 并不支援 。很多时态查询不是很难以 SQL 模拟,就是需要把 SQL 嵌入到程序语言中,因 为 SQL 在资料模型和查询语言结构中缺乏对有效时间的支援。 另一方面,我们示□出加上有效时间支援需要对 DBMS 施行作出一些改变, 但能 戏剧性地简化一些查询,并使其他查询变得有可能。将来也可於储存结构、 索引 方法的最佳化 (optimization)。而最佳化的策略可导致表现大幅提升。 随著 SQL3 的一个新部分支援随时间改变的资料,我们可以开□处理这类应用, 改良 SQL3 处理时态资料的能力。 ---------------------------------------------------------------------------- Accredited Standards Committee* X3, Information Technology NEWS RELEASE 文件编号∶ PR/96-0002 回覆∶ Barbara Bennett at bbennett@itic.nw.dc.us X3 宣布认可一个这专案, ISO/IEC 9075 Part 7: SQL/Temporal Washington D.C., 1996 年一月 ---------------------------------------------------------------------------- -- Accredited Standards Committee X3, Information Technology 宣布认可一 个有关 SQL/Temporal 支援的新专案,ISO/IEC 9075 Part 7,并把有关工作交予 Technical Committee X3H2, Database。这个建议中的标准订明将出现的 SQL3 标准的一个新部分,如第七部分 Temporal SQL 为 SQL 的一个延伸,在 SQL 资 料库环境支援存取和处理具时态的资料。下次 X3H2 会议定於一九九六年三月十 一至十四日在堪萨斯 (Kansas) 举行。 如有查询,可邮寄往∶ Chairman of X3H2, Dr. Donald R. Deutsch, Sybase, Inc., Suite 800, 6550 Rock Spring Drive, Bethesda, MD 20817. Email: deutsch@sybase.com. 现正寻求可能的专利和其他恰当的事项(版权、商标)。这把有关资料寄交∶ X3 Secretariat at 1250 Eye Street NW, Suite 200, Washington DC 20005. Email: x3sec@itic.nw.dc.us FAX: (202)638-4922. 28.17 第八部分□ISO/ANSI SQL 多媒体 (SQL/MM) 一个为建立用於多媒体应用程式的 SQL 物件函式库的新 ISO/IEC 国际标准化计 划在一九九三年初期获批准进行。这个新标准化行动名为 SQL Multimedia (SQL/MM),它会用草拟中的 SQL3 规格中的抽象资料型态(ADT)规格和目标指定 SQL ADT 定义套件。 SQL/MM 目标为标准化科学和工程、全文和文件处理、管理多媒体物件,如影像、 声音、 动画、音乐和录像的物件函数库。它多数会提出一种用於其他 JTC1 标准 组织(如有关文件的 SC18、影像的 SC24、照片和动作图像的 SC29)定义的物件 的 SQL 语言结合 (binding)。 SQL/MM 的专案计划指出它会成为一份多部分标准,包含不定数量的部分。 第一 部分会是其他部分如何建成的框架。其他每个部分会专注於一个特定的 SQL 应用 程式套件。以下为一九九四年八月存在的 SQL/MM 部分∶ * Part 1: Framework A non-technical description of how the document is structured. * Part 2: Full Text Methods and ADTs for text data processing. About 45 pages. * Part 3: Spatial Methods and ADTs for spatial data management. About 200 pages with active contributions from Spatial Data experts from 3 national bodies. * Part 4: General Purpose Methods and ADTs for complex numbers, Facilities include trig and exponential functions, vectors, sets, etc. Currently about 90 pages. 有多个有关空间和地理资料的标准化的工作在进行中∶ * ANSI X3L1 - Geographic Information Systems. Unisys 的 Mark Ashworth of Unisys 是 X3L1 和 ANSI X3H2 间的联络人。 他也是 SQL/MM 草稿第一、三和四部分的编辑。 * ISO TC 211 - Geographic information/Geomatics 29. PostgreSQL 的技术支援 如果你有任何技术上的问题式遇到困难,你可电邮至∶ * [380]pgsql-questions@postgresql.org * 新闻组 [381]comp.databases.postgresql.general * 新闻组 [382]comp.databases.postgresql.hackers * 新闻组 [383]comp.databases.postgresql.doc * 新闻组 [384]comp.databases.postgresql.bugs * 新闻组 [385]linux.postgres * 其他通信论坛 [386]http://www.postgresql.org 及预期在一日内收到回覆。因为互联网产品的用户□围很广,用户又互相帮助, 互联网可轻易为数以百万计用户提供技术支援。电邮支援比电话支援方便得多, 因为你可剪下和贴上错误讯息、程式输出等等,又可轻易传送到通信论坛 / 新闻 组。 29.1 商业支援 PostgreSQL 组织也会向公司出售技术支援,所得收益会用於维护世界各地的多个 映射站台 (万维网和 ftp)。也会用来印制文件、指引和书籍以帮助顾客。他们 的网址为 [387]http://www.postresql.org。 另一间名为‘Great Bridge Corporation’正进行 PostgreSQL 的开发、销售和 支援。他们的网页为 [388]http://www.greatbridge.com。它是一间由 ‘Landmark Communications corp’和其他投资公司设立的公共公司,专门向世 界大企业大公司和售卖和支援 PostgreSQL。 你也可在 Redhat、Anderson、WGS(Work Group Solutions)等专业顾问行得到 帮助。 你可找他们帮助,因为他们有很好的 C、C++ 专家( PostgreSQL 以 C 写成)。 * Redhat 公司□资料库顾问部 [389]http://www.redhat.com * Work Group Solutions [390]http://www.wgs.com * Anderson Consulting [391]http://www.ac.com 30. 经济和商业方面 商业资料库缴交很多税项如联邦、州、销售、雇用、社会保障、医疗保险税、 员 工健康保障、其他各程员工福利、市场推广和广告费。 所有这些费用都不直接用 於资料库的开发,不用於改善资料库的品质和技术。 当你购买一个商业资料库, 一部分的金额浪费於税款、研究开发成本等地方。 而且,商业资料库需支付租金和购买 Unix 机器,方装和维护。 所有这些成本都 转嫁给用户。 和商业资料库相比,PostgreSQL 拥有无需直接税项的优点,因为它是互联网制造 。 一大群人为 PostgreSQL 的开发作出页献。例如,以一个假设的例子, 如果 在美国有一百万间公司,而每间都捐十美元(对 PostgreSQL 来说物超所值), 每间便得到一千万元!!这就是互联网上软件开发的魔术。 目前,PostgreSQL 源程式有大约 250,000 行 C、C++ 程式。如果每行 C 程式码 值二美元,今天整个 PostgreSQL 便值五十万美元! 很多公司已开发大量 C、C++ 程式以作自用。因此,引入 PostgreSQL 源程式码 和与互联网上其他公司合作会对公司带来大量利益,节省时间和人力。 31. 其他资料库的名单 以下列出其他 Unix、Linux 的 SQL 资料库。 * 点选及到达 Applications->databases. [392]http://www.caldera.com/tech-ref/linuxapps/linapps.html * 点选及到达 Applications->databases. [393]http://www.xnet.com/~blatura/linapps.shtml * 资料库资源 [394]http://linas.org/linux/db.html 这是由 Linas Vepstas 写成的。 [395]linas@fc.net * 自由资料库名单 [396]http://cuiwww.unige.ch:80/~scg/FreeDB/FreeDB.list.html * Browne 的 RDBMS 名单 [397]http://www.hex.net/~cbbrowne/rdbms.html 由 Christopher B. Browne 写成。 [398]cbbrowne@hex.net * SAL 关联式 RDBMS 名单 [399]http://SAL.KachinaTech.COM/H/1/ * SAL 的物件导向 DBMS 名单 [400]http://SAL.KachinaTech.COM/H/2/ * SAL's 的工具和其他资料库名单 [401]http://SAL.KachinaTech.COM/H/3/ * ACM SIGMOD 公众可取得的资料库软件索引 [402]http://bunny.cs.uiuc.edu/sigmod/databaseSoftware/ 32. 万维网搜寻提示 互联网非常广阔,拥有大量软件和下方有一个资讯海洋。 它在全世界以每年百分 之三百的速度增长。据估计,全球有大约一千万个网站! 要搜寻资料,你需要雅虎、网景、Lycos 等搜寻引擎。去到雅虎,点选 search。 使用过滤选项 (filtering options) 来收窄你的搜寻要求。预设的搜寻动件是 “Intelligent search”,这比较一般化及列出所有可能性。点选“Options”选 择 “EXACT phrase”搜寻、“AND”搜寻、“OR”搜寻等等。 这样你可更快找到 你想要的讯息。此外,在 search 目录下,有 radio buttons 用以选择搜寻新闻 组、互联网站或雅虎网站。 33. 结论 在研究过所有自由和可取得源程式码的资料库後,发现到只有 PostgreSQL 是世 上最成熟、最多人使用和全面的自由 SQL RDMS(物件关联式)。 PostgreSQL 非常吸引,因为有很多工作已完成。它有 ODBC 和 JDBC 驱动程式, 籍著这些,可以编写独立於资料库的应用程式。用 ODBC 或 JDBC 驱动程式写的 PostgreSQL 应用程式很容易移植到其他资料库,如 Oracle、Sybase 和 Informix,反之亦然。 你可能会问「为什麽用 PostgreSQL?」答案是因为由零开始, 开发一个资料库 消耗大量时间,选择一个满足以下条件的资料库系统合乎常识∶ 一个 * 可取得原程式码□必须是开放程式码系统 * 没有附加授权字句 (license string)、没有拥有权字句(译按 ∶PostgreSQL 是 GPL,并非无授权协议。如果没有授权字句,使用它便违法 了!) * 可在互联网散布 * 已开发多年 * 满足 ISO/ANSI SQL 92(和 SQL 89)等标准 * 可满足未来的需要,如 SQL 3(SQL 98) * 拥有先进功能 的资料库系统,而只有 PostgreSQL 满足所有这些条件,在这情况下是一套适当 的软件。 你可能会说‘PostgreSQL’是一个怪名。但我的看法是□为何改名?这 世界会永远使用 “PostgreSQL”!! 34. FAQ□有关 PostgreSQL 的问题 请参阅一般性、Linux 和 Irix 的最新版 FAQ∶ * [403]http://www.postgresql.org/docs/faq-english.shtml 35. 本文件的其他格式 本文件以十一种不同的格式出版□□DVI、Postscript、LaTeX、LyX、GNU-info 、HTML、RTF (Rich Text Format)、纯文字、Unix man pages 和 SGML。 * 你可在 [404]ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO/other-formats/ 取得 以 HTML、DVI、Postscript 或 SGML 格式写成的单一 tar.gz 档。 (译按 ∶sunsite.unc.edu 早已改名为 metalab.unc.edu。) * 纯文字档在∶ [405]ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO * 其他语言的翻译,如法文、德文、西班牙文、中文、日文位於 [406]ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO 我对翻译到任何其他 语言的帮助无任欢迎。 本文件以一个名为“SGML-Tools”的工具写成,它可在以下地方找到∶ [407]http://www.sgmltools.org 编译程式後你会得到类似以下的指令∶ * sgml2html databasehowto.sgml (产生 HTML 档) * sgml2rtf databasehowto.sgml (产生 RTF 档) * sgml2latex databasehowto.sgml (产生 LaTeX 档) LaTeX 文件可转换为 PHP 档,只需使用 sgml2latex(和 dvips)产生 Postscript 输出,及用 Acrobat distill( [408]http://www.adobe.com)处理 该输出∶ _________________________________________________________________ bash$ man sgml2latex bash$ sgml2latex filename.sgml bash$ man dvips bash$ dvips -o filename.ps filename.dvi bash$ distill filename.ps bash$ man ghostscript bash$ man ps2pdf bash$ ps2pdf input.ps output.pdf bash$ acroread output.pdf & _________________________________________________________________ 你也可用 Ghostscript 指令 ps2pdf。ps2pdf 提供了 Adobe 和 Acrobat Distiller 产品的几乎所有功能∶它把 PostScript 档转为 Portable Document Format (PDF) 档。ps2pdf 使用了一个细小的命令稿(批次档),它启动 Ghostscript,挑选一个名为 pdfwrite 的特殊“输出设备”。要使用 ps2pdf ,pdfwrite 设备需在编译 Ghostscript 时在 makefile 中指定;详情请参阅 Ghostscript 编译的文件。 本文件位於∶ * [409]http://sunsite.unc.edu/LDP/HOWTO/PostgreSQL-HOWTO.html 你也可在以下映射站台找到本文件∶ * [410]http://www.caldera.com/LDP/HOWTO/PostgreSQL-HOWTO.html * [411]http://www.WGS.com/LDP/HOWTO/PostgreSQL-HOWTO.html * [412]http://www.cc.gatech.edu/linux/LDP/HOWTO/PostgreSQL-HOWTO.htm l * [413]http://www.redhat.com/linux-info/ldp/HOWTO/PostgreSQL-HOWTO.h tml * 其他在你附近(以网络位址来说)的站台可在 [414]http://sunsite.unc.edu/LDP/hmirrors.html 找到,选择一个网站和 到 /LDP/HOWTO/PostgreSQL-HOWTO.html 目录。 (译按∶本文件的中文〔大五码〕版可在 [415]http://www.linux.org.tw/CLDP/HOWTO/ 找到。而要产生中文文件,你需要 bg5sgmltools,可在 [416]http://www.linux.org.tw/CLDP/ 找到。) 要观看 dvi 格式的文件,使用 xdvi 程式。在 Redhat Linux 中,你可透过 ControlPanel | Applications | Publishing | TeX 按钮找到 tetex-xdvi*.rpm 套件,当中即为 xdvi 程式。 要阅读 dvi 文件,执行指令∶ xdvi -geometry 80x90 howto.dvi man xdvi 和使用滑鼠调整视窗大小。浏览时使用箭头键、Page Up、Page Down 键,你也可 用 'f', 'd', 'u', 'c', 'l', 'r', 'p', 'n' 字母来移上、移下、置中、到前 後页等等。 要关掉 expert menu,按 'x'。 你可用程式 'gv' (ghostview) 或 'ghostscript' 来阅读 postscript 档。在 RedHat Linux 中,ghostscript 程式是在 ghostscript*.rpm 套件,gv 则在 gv*.rpm。你可透过 ControlPanel | Applications | Graphics 按钮找到它们 。gv 程式比 ghostscript 易用得多。ghostscript 和 gv 也可在其他平台,如 OS/2、视窗 95 及 NT 得到,你也可在这些平台阅读本文件。 * 在 [417]http://www.cs.wisc.edu/~ghost 取得 ghostscript 的视窗 95 、OS/2 和其他作业系统的版本。 要阅读 postscript 文件,执行指令□ gv howto.ps ghostscript howto.ps 注意∶本文件很长,如果你想印出这 postscript 档,大约需要 113 页。 (译 按∶gv 是 ghostscript 的一个前端界面,所以即使你只打算用 gv,你也要安装 後者。此外,在 OS/2 和视窗中并没有 gv,只有 GSView,一个和 gv 功能差不 多的程式。详情请参关 [418]http://www.cs.wisc.edu/~ghost。) 你可使用 Netscape Navigator,Microsoft Internet Explorer,Redhat Baron Web Browser 或任何其他的万维网浏览器来阅读 HTML 格式的文件。 你可用 LyX,LaTeX 的一个 X-Window 前端介面来阅读 LaTeX 和 LyX 档。 36. 版权和授权 Copyright Al Dev (Alavoor Vasudevan) 1997-2000. Copyright policy is GNU/GPL as per LDP (Linux Documentation project). LDP is a GNU/GPL project. Additional restrictions are - you must retain the author's name, email address and this copyright notice on all the copies. If you make any changes or additions to this document then you should intimate all the authors of this document. NO LIABILITY FOR CONSEQUENTIAL DAMAGES. In no event shall the author/authors of this document be liable for any damages whatsoever (including without limitation, special, incidental, consequential, or direct/indirect damages for personal injury, loss of business profits, business interruption, loss of business information, or any other pecuniary loss) arising out of the use of this document. Author/authors offers no warranties or guarantees on fitness, usability, merchantability of this document. Brands, companies and product names mentioned in this document are trademarks or registered trademarks of their respective holders. Please refer to individual copyright notices of brands, companies and products mentioned in this document. It is your responsibility to read and understand the copyright notices of the organisations/companies/products/authors mentioned in this document before using their respective information. Appendix 37. 附录甲□ANSI/ISO SQL 1992 语法 这档案中包括这语言的 BNF 以深度为先的树状模扫 (depth-first tree traversal),大约在 27-AUG-1992 11:03:41.64 完成。这个特定版本所用的 BNF 是只用 ANSI 和 SQL2 的。 ::= | ::= | | ::= | ::= A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z ::= a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s | t | u | v | w | x | y | z ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 ::= | | | | | | | | | | | | | | | | | | | | ::= !! (使用中的字集所用的空白字元) ::= " ::= % ::= & ::= ' ::= ( ::= ) ::= * ::= + ::= , ::= - ::= . ::= / ::= : ::= ; ::= < ::= = ::= > ::= ? ::= _ ::= | ::= | ::= [ ::= ] ::= | ::= | | | | | ::= ::= [ ( | )... ] ::= (!! 参看文法规则) ::= | ::= | ::= ABSOLUTE | ACTION | ADD | ALL | ALLOCATE | ALTER | AND | ANY | ARE | AS | ASC | ASSERTION | AT | AUTHORIZATION | AVG | BEGIN | BETWEEN | BIT | BIT_LENGTH | BOTH | BY | CASCADE | CASCADED | CASE | CAST | CATALOG | CHAR | CHARACTER | CHAR_LENGTH | CHARACTER_LENGTH | CHECK | CLOSE | COALESCE | COLLATE | COLLATION | COLUMN | COMMIT | CONNECT | CONNECTION | CONSTRAINT | CONSTRAINTS | CONTINUE | CONVERT | CORRESPONDING | COUNT | CREATE | CROSS | CURRENT | CURRENT_DATE | CURRENT_TIME | CURRENT_TIMESTAMP | CURRENT_USER | CURSOR | DATE | DAY | DEALLOCATE | DEC | DECIMAL | DECLARE | DEFAULT | DEFERRABLE | DEFERRED | DELETE | DESC | DESCRIBE | DESCRIPTOR | DIAGNOSTICS | DISCONNECT | DISTINCT | DOMAIN | DOUBLE | DROP | ELSE | END | END-EXEC | ESCAPE | EXCEPT | EXCEPTION | EXEC | EXECUTE | EXISTS | EXTERNAL | EXTRACT | FALSE | FETCH | FIRST | FLOAT | FOR | FOREIGN | FOUND | FROM | FULL | GET | GLOBAL | GO | GOTO | GRANT | GROUP | HAVING | HOUR | IDENTITY | IMMEDIATE | IN | INDICATOR | INITIALLY | INNER | INPUT | INSENSITIVE | INSERT | INT | INTEGER | INTERSECT | INTERVAL | INTO | IS | ISOLATION | JOIN | KEY | LANGUAGE | LAST | LEADING | LEFT | LEVEL | LIKE | LOCAL | LOWER | MATCH | MAX | MIN | MINUTE | MODULE | MONTH | NAMES | NATIONAL | NATURAL | NCHAR | NEXT | NO | NOT | NULL | NULLIF | NUMERIC | OCTET_LENGTH | OF | ON | ONLY | OPEN | OPTION | OR | ORDER | OUTER | OUTPUT | OVERLAPS | PAD | PARTIAL | POSITION | PRECISION | PREPARE | PRESERVE | PRIMARY | PRIOR | PRIVILEGES | PROCEDURE | PUBLIC | READ | REAL | REFERENCES | RELATIVE | RESTRICT | REVOKE | RIGHT | ROLLBACK | ROWS | SCHEMA | SCROLL | SECOND | SECTION | SELECT | SESSION | SESSION_USER | SET | SIZE | SMALLINT | SOME | SPACE | SQL | SQLCODE | SQLERROR | SQLSTATE | SUBSTRING | SUM | SYSTEM_USER | TABLE | TEMPORARY | THEN | TIME | TIMESTAMP | TIMEZONE_HOUR | TIMEZONE_MINUTE | TO | TRAILING | TRANSACTION | TRANSLATE | TRANSLATION | TRIM | TRUE | UNION | UNIQUE | UNKNOWN | UPDATE | UPPER | USAGE | USER | USING | VALUE | VALUES | VARCHAR | VARYING | VIEW | WHEN | WHENEVER | WHERE | WITH | WORK | WRITE | YEAR | ZONE ::= ADA | C | CATALOG_NAME | CHARACTER_SET_CATALOG | CHARACTER_SET_NAME | CHARACTER_SET_SCHEMA | CLASS_ORIGIN | COBOL | COLLATION_CATALOG | COLLATION_NAME | COLLATION_SCHEMA | COLUMN_NAME | COMMAND_FUNCTION | COMMITTED | CONDITION_NUMBER | CONNECTION_NAME | CONSTRAINT_CATALOG | CONSTRAINT_NAME | CONSTRAINT_SCHEMA | CURSOR_NAME | DATA | DATETIME_INTERVAL_CODE | DATETIME_INTERVAL_PRECISION | DYNAMIC_FUNCTION | FORTRAN | LENGTH | MESSAGE_LENGTH | MESSAGE_OCTET_LENGTH | MESSAGE_TEXT | MORE | MUMPS | NAME | NULLABLE | NUMBER | PASCAL | PLI | REPEATABLE | RETURNED_LENGTH | RETURNED_OCTET_LENGTH | RETURNED_SQLSTATE | ROW_COUNT | SCALE | SCHEMA_NAME | SERIALIZABLE | SERVER_NAME | SUBCLASS_ORIGIN | TABLE_NAME | TYPE | UNCOMMITTED | UNNAMED ::= | ::= [ [ ] ] | ::= ... ::= E ::= ::= ::= [ ] ::= | ::= N [ ... ] [ ( ... [ ... ] )... ] ::= | ::= !! (!! 参看文法规则) ::= ::= ( | | )... ::= [ ... ] ::= [...] ::= | ::= !! (实践方法定义的行末指示) ::= B [ ... ] [ ( ... [ ... ] )... ] ::= 0 | 1 ::= X [ ... ] [ ( ... [ ... ] )... ] ::= | A | B | C | D | E | F | a | b | c | d | e | f ::= | |