Linux 的 Database-SQL-RDBMS HOW-TO 文件 (PostgreSQL 物件关联资料库系统) 作者∶Al Dev (Alavoor Vasudevan) [1]alavoor@yahoo.com 译者∶曾达康 [2]a9504480@graduate.hku.hk 一九九九年一月八日,11.0版 _________________________________________________________________ 本文件是一份介绍如何在 Unix 系统快捷地建立一个 SQL 资料库引擎 (Database Engine) 及前端工具的「实用指南」。它也讨论国际标准的 ANSI/ISO SQL 语言及探讨在互联网中「开放式开发」环境 ("open development" environment) 开发 SQL 资料库引擎的优点。它是关於如何在 Unix 系统中建立 PostgreSQL 这个既可用作应用程式资料库伺服器 (Application Database Server),又在用作万维网资料库伺服器 (Web Database Server) 的新一代物件关联式资料库。PostgreSQL 实践部份 1998, 92, 89 的国际标准 ISO / ANSI SQL。本文件也提供关於资料库的介面程式,如 前端图像介面、应用程式高速开发 (Rapid Application Development) 工具 、ODBC、JDBC 驱动程式、C、C++、Java、Perl 程式语言介面和网上资料库工具 。这里提供的资料适用於所有 Unix 平台及其他资料库,对资料库、SQL 语言及 PostgreSQL 的新手非常有用。这里提供的资料适用於所有 Unix 平台及所有其他 SQL 资料库。这对资料库、SQL 语言和 PostgreSQL 的初学者会非常有用。这文 件也有一个 SQL 的导论,解释 SQL 的语法,对初学者非常有用。有经验的用家 会觉得这是一份有用的参考资料。对学生来说,这处提供的资料会让他们得到 PostgresSQL 关联式资料库的源程式码,从而学习如何编写一个物件关联式 SQL 资料库。 _________________________________________________________________ 1. 引言 2. 本文件的其他格式 3. 物理定律也适用於电脑软件! 4. PostgreSQL 是什麽? 5. 何处取得 ? 6. PostgreSQL 支援超过 200 Gig 的超级资料库 7. 凭什麽相信 PostgreSQL?Regression 测试套件 (Regression test package) 为用户建 立信心 8. PostgreSQL 的前端 GUI 工具(图像使用者界面) 9. PostgreSQL 的综合开发环境工具 (GUI IDE) 10. PostgreSQL 的介面驱动程式 * 10.1 PostgreSQL 的 ODBC 驱动程式 * 10.2 PostgreSQL 的 UDBC 驱动程式 * 10.3 PostgreSQL 的 JDBC 驱动程式 * 10.4 PostgreSQL 的 Java 11. PostgreSQL 的 Perl 资料库介面 (Database Interface, DBI) * 11.1 PostgreSQL 的 PERL 5 介面 * 11.2 Perl 资料库介面 DBI 12. PostgreSQL 管理工具 * 12.1 PGACCESS - PostgreSQL 管理的 GUI 工具 * 12.2 PostgreSQL 的视窗互动式查询工具(WISQL 或 MPSQL) * 12.3 名为 PSQL 的 PostgreSQL 互动式查询工具(ISQL) * 12.4 MPMGR□PostgreSQL 的资料库管理工具 13. 只使用一个显示器 (monitor) 来建立多台 PostgreSQL 电脑 14. PostgreSQL 的应用程式和工具 * 14.1 PostgreSQL 的 4GL 万维网资料库程式□AppGEN 开发系统 * 14.2 PostgreSQL 的互联网介面□DBENGINE * 14.3 PostgreSQL 的 Apache 伺服器模组□NeoSoft NeoWebScript * 14.4 HTML 的 HEITML 伺服器端延伸和一个 PostgreSQL 的 4GL 语言 * 14.5 PostgreSQL 的 America On-line AOL 万维网伺服者 * 14.6 PostgreSQL 的疑难 / 计划追踪系统程式工具(Problem/Project Tracking System Application Tool for PostgreSQL ) * 14.7 把 dbase 的 dbf 档转换给 PostgreSQL 15. PostgreSQL 的互联网资料库设计/完成工具□EARP * 15.1 EARP 是什麽? * 15.2 施行 * 15.3 你需要什麽来执行 EARP * 15.4 它如何工作? * 15.5 何处取得 EARP? 16. PHP Hypertext PreProcessor□PostgreSQL 的伺服器端 html 嵌入命令稿语言 * 16.1 主要特色 * 16.2 名誉 * 16.3 PHP 3□简史 * 16.4 那麽,我能用 PHP/FI 做什麽? * 16.5 一个简单的例子∶ * 16.6 CGI 改向 (CGI Redirection) * 16.7 在指令行执行 PHP/FI 17. PostgreSQL 的 Python 介面 * 17.1 如何取得 PyGres? * 17.2 资料和支援 18. PostgreSQL 和万维网的闸路 (gateway) □WDB-P95 * 18.1 有关 wdb-p95 * 18.2 PostgreSQL 伺服器、pgperl 和 httpd 是否需在同一电脑? 19. "C", "C++", ESQL/C 语言介面和 PostgreSQL 的逐位运算元 (Bitwise Operators) * 19.1 "C" 介面 * 19.2 "C++" 介面 * 19.3 ESQL/C * 19.4 PostgreSQL 的逐位元运算元 20. PostgreSQL 的日文假名码 (Kanji Code) 21. 移植 PostgreSQL 到视窗 95 / 视窗 NT 22. 通信论坛 * 22.1 取得免费电邮户口 * 22.2 英文通信论坛 * 22.3 通信论坛存库 * 22.4 西班牙文通信论坛 23. 文件和参考书 * 23.1 用户指引和说明书 * 23.2 线上文件 * 23.3 有用的参考书 * 23.4 ANSI/ISO SQL 规格文件□SQL 1992, SQL 1998 * 23.5 ANSI/ISO SQL 1992 的语法 * 23.6 ANSI/ISO SQL 1998 的语法 * 23.7 初学者 SQL 导引 * 23.8 SQL92 的时态延伸 (Temporal Extension) * 23.9 第零部分□取得 ISO/ANSI SQL 文件 * 23.10 第一部分□ISO/ANSI SQL 当前情况 * 23.11 第二部分□ISO/ANSI SQL 基金 (ISO/ANSI SQL Foundation) * 23.12 第三部分□ISO/ANSI SQL 呼叫级介面 (Call Level Interface) * 23.13 第四部分□ ISO/ANSI SQL 持久储存模组 (Persistent Stored Modules) * 23.14 第五部分□ ISO/ANSI SQL/结合 (Bindings) * 23.15 第六部分□ISO/ANSI SQL XA 介面规格 (SQL/XA) * 23.16 第七部分□时态 ISO/ANSI SQL * 23.17 第八部分□ISO/ANSI SQL MULTIMEDIA (SQL/MM) 24. PostgreSQL 的技术支援 25. 经济和商业方面 26. 其他资料库的名单 27. 万维网搜寻提示 28. 结论 29. FAQ□有关 PostgreSQL 的问题 30. 版权通知 Appendix 31. 附录甲□ANSI/ISO SQL 1992 语法 32. 附录乙□初学者 SQL 导引 * 32.1 PostgreSQL 导引 * 32.2 互联网 URL 指标 33. 附录丙□Linux 快速安装指引 _________________________________________________________________ 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 是新一代的物件关联式资 料库,而未来的 ANSI SQL 标准如 SQL 1998 (SQL-3) 及其後代会更著重物件资 料库及物件资料形态。PostgreSQL 是唯一同时支援物件资料库及 SQL 的自由 (free) RDBMS。本文件会告诉你如何安装这资料库、如何建立网上资料库、应用 软件资料库、前端图像介面和介面程式。我强烈建议你所写的资料库软件必须百 分百符合 ISO/ANSI SQL、ODBC、JDBC 等标准,这样,你的程式才移植到不同的 资料库,如 PostgreSQL、Oracle、Sybase、Informix 等。 你可在 PostgreSQL 得到最高质素及非常丰富的功能,因为它依从「开放源始码 开发模式」 (Open Source Code development model)。开放式源程式码模式会给 你完整的源程式码,开发过程在互联网上由有大量的人手参与进行。目前的趋势 显示未来大部分的软件开发工作会在世界通行的所谓「资讯高速公路」上进行。 未来数年,互联网会爆炸性地成长,这样会使更多资料库社群使用 PostgreSQL。 藉把统计学、数学和科学的原理应用於软件质素,我们只会在一个如 PostgreSQL 般,把源程式码开放给经资讯高速公路连系在一起的大量头脑的系统 下,才能得到最高质素的软件。正所谓集思广益。开放源程式码的模式也可防止 重覆工作,非常经济,节省散布时间及合符有关最佳化国内和全球资源的经济定 律。只要有人写好了一个软件,你便不需要再来一次。你不会浪费时间於早已做 好的东西。一寸光阴一寸金,你要好好利用,因为人一天只有八小时工作!在我 们踏入廿一世纪时,我们取得所需软件的方法将会改变。用家的第一选择将会是 如 PostgreSQL、Linux 等开放系统。 购买可执行的软件不代表你拥有软件。源程式码是珍贵的资产,二元档并无价值 。购买软件作可能会成为历史。你只需要买好的硬件,花钱在硬件上而从互联网 上取得软件是值得的。重点是工作量大的电脑硬件。硬件才是真正跑动的马匹, 软件只是鞭策它。电脑硬件的复杂程度使得全球 180 个国家中只 6 个显露出设 计及生产电脑晶片和硬件的能力。这是一种先进的科技,过程非常复杂,资金密 集,设厂及生产 0.18 微米科技的机器投资庞大。在一小片晶片上便有数以百万 计的半导体和电路挤在一起。Applied Material、AMD、英代尔、Cyrix,日立 ,IBM 及其他工司花费大量人-年 (man-years) 在高科技,如晶片设计、微电子 及微亳电子的研究上。微米代表百万分之一米 (10^-6),微亳米代表十亿分之一 米 (10^-9)。现今微电子技术中,0.35 微米的使用铝作导体,0.25 微米的使用 铜。不久将来之後,用铜的 0.10 微米技术,甚致微亳电子技术将会应用於电脑 晶片。因为铜导电能力较强,铝导体将会被淘汰。在刻蚀晶片 (photolithography) 的过程中,极高频的紫外线、X-射线或电子束会被用於刻蚀 (etch) 特徵大小 (feature size) 小於 0.15 微米的电路。 今後二十年,矽片 将会被分子电脑 (molecular) 和生物晶片 (bio chips) 取代。它们的速度将会 比矽片快数十亿倍!分子是一组原子。而原子组成所有你在世上所见的物件。 分 子电脑会用物质的分子来当超快的电子开关制。开制 (ON)之後它指示 1、关闭 (OFF) 後指示 0。世上所有电脑程式都是根据二元数(数字 1 和 0)运作。 下 表列出晶片技术的进步及未来发展趋势。 未来晶片的能力的进展 ******************** +--------------------------+---------+---------+---------+---------+--------+-- -------+ | 项目/年份 | 1997 | 1999 | 2001 | 2003 | 2012 | 2 020 | +--------------------------+---------+---------+---------+---------+--------+-- -------+ | 特徵大小(微米) | 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| +--------------------------+---------+---------+---------+---------+--------+-- -------+ 如你所见,硬件才重要和需要高科技,软件所用的科技就比较简单。因此,生产 硬件对国家经济非常重要!不论现在或末来,像康柏、Dell、升阳、惠普、万国 商业机器等电脑出产商都会是美国经济主要贡献者! 另一方面,世上每国家都会发展软件。事实上,世上任何一个拥有一部低价电脑 的人都可写出一个 Oracle 资料库伺服器,但他大概要花十年时间(Oracle 资料 库伺服器是大约十人-年的工作)。一人-年是指一个人一年全职的工作量。如果 十个人工作一年,这工作量便是十人-年。 像 Oracle,Informix,Sybase,IBM DB2 (Unix) 等资料库,都是用 "C" 语言写 成,二元档则是用编译器产生,这样便可售给用户了。Oracle、Sybase 、Informix 资料库是百分百的 C 程式!! 十二年来,人们已在 PostgreSQL 上做了不少事,从头创造另一个符合 ANSI/ISO SQL 的资料库系统并不合符常理。在 PostgreSQL 的源程式上加上欠缺 的功能或将之加强,之後立刻使用,有很大好处。 PosrtgreSQL 不独是个免费的资料库,它也是一个高质素的「互联网产品」。据 估计,对「互联网制造」的产品的需求将会以指数级数增长,因为它可维系一组 高质素、低价而庞大的使用者及开发人员。不使用「互联网制造」的产品的国家 会错过这场「互联网革命」而被其他国家大大抛离。这是因为互联网本身就是世 上最大的软件公司! 2. 本文件的其他格式 本文件以十种不同的格式出版,即∶DVI、Postscript、LaTeX、LyX、GNU-info 、HTML、RTF(Rich Text Format)、纯文字、Unix man pages 及 SGML。 * 你可从 [3]ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO/other-formats/ 得到本 HOWTO 文件 HTML、DVI、Postscript 或 sgml 格式的单一 tar 档案。 (译 按∶ sunsite.unc.edu 已改名为 metalab.unc.edu。) * 纯文字版本则在∶ [4]ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO * 其他语言的翻译,如法文、德文、西班牙文、中文、日文则在 [5]ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO 我对翻译到任何其他语 言的帮助无任欢迎。 本文件使用一个名为「SGML Tool」的工具编写,它可在 [6]http://www.xs4all.nl/~cg/sgmltools/ 得到。 编译好源程式码後,你会得 到以下的指令∶ * sgml2html databasehowto.sgml (产生 HTML 档) * sgml2rtf databasehowto.sgml (产生 RTF 档) * sgml2latex databasehowto.sgml (产生 LaTeX 档) 本文件位於∶ * [7]http://sunsite.unc.edu/LDP/HOWTO/PostgreSQL-HOWTO.html 你也可在以下的映射台上找到本文件∶ * [8]http://www.caldera.com/LDP/HOWTO/PostgreSQL-HOWTO.html * [9]http://www.WGS.com/LDP/HOWTO/PostgreSQL-HOWTO.html * [10]http://www.cc.gatech.edu/linux/LDP/HOWTO/PostgreSQL-HOWTO.html * [11]http://www.redhat.com/linux-info/ldp/HOWTO/PostgreSQL-HOWTO.ht ml * 其他和你相近(以网络地址来说)的映射台可在 [12]http://sunsite.unc.edu/LDP/hmirrors.html 找到。请选择一个及前往 /LDP/HOWTO/PostgreSQL-HOWTO.html 目录。 (译按∶本文件的中文〔大五码〕版目前只有 LaTeX、LyX、HTML、纯文字和 SGML 格式。可在 [13]http://www.linux.org.tw/CLDP/HOWTO/ 找到。而要产生 中文文件,你需要 bg5sgmltools,可在 [14]http://www.linux.org.tw/CLDP/ 找到。) 要看本文件的 dvi 格式,请使用 xdvi 程式。在 Redhat Linux 中,你可透过 ControlPanel | Applications | Publishing | TeX 按钮找到 tetex-xdvi*.rpm 套件,当中即为 xdvi 程式。 要阅读 dvi 文件,使用指令 xdvi -geometry 80x90 howto.dvi 及使用滑鼠调整视窗大小。请参阅 xdvi 的 man page。 浏览时使用箭头键、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 得到,你也可在这些平台阅读本文件。 要阅读 postscript 文件,使用指令 gv howto.ps 要使用 ghostscript,使用指令 ghostscript howto.ps 注意∶本文件很长,如果你想印出这 postscript 档,大约需要 113 页。 (译 按∶gv 是 ghostscript 的一个前端界面,所以即使你只打算用 gv,你也要安装 後者。此外,在 OS/2 和视窗中并没有 gv,只有 GSView,一个和 gv 功能差不 多的程式。详情请参关 [15]http://www.cs.wisc.edu/~ghost。) 你可使用 Netscape Navigator,Microsoft Internet Explorer,Redhat Baron Web Browser 或任何其他的万维网浏览器来阅读 HTML 格式的文件。 你可用 LyX,LaTeX 的一个 X-Window 前端介面来阅读 LaTeX 和 LyX 档。 3. 物理定律也适用於电脑软件! 这章会说明科学在不同事物,如软件、宇宙、原子、能量甚至你自己的创造过程 中扮演如何重要的角色。也会说明为何科学知识在使用科学的产品前非常重要。 物件包括所有东西□如 PostgreSQL、时间、质量、能量、行星、大阳、月亮、□ 星、银河、星团、人类等等都是科学生成的。这章也会说明科学和统计学定律如 何支持开放原始码,如 PostgreSQL 和 Linux。互联网的速度每日都在增长,也 越来越可靠,开放式程式码的动量 (momentum) 会迅速增加。另外,如果统计学 及科学定律正确的话,封闭式程式迟早会在世上消失。 以下数段会说明∶「科学是如何广泛、它对人的重要性及它如何冲击 PostgreSQL、Linux 之类的软件计划。」 发展 PostgreSQL 这类计划需要能量和时间等资源,因此,PostgreSQL 是能量和 时间的产品。能量和时间只能在科学上解释,所以物理学和 PostgreSQL、Linux 之类软件专案是有直接关联的。 科学(物理)定律应用於任何地方、任何时间、任何工作,甚至开发软件专案时 。物理学即使在你说话(声波)、步行(地面和脚之间的摩擦力)、看书和编写 软件时都发生作用。科学的不同分支,如物理学、化学等最终都基础都是数学( 被称为科学之母 (Queen of all Sciences))。世上所有事物都植根於数学,包 括 PostgreSQL。PostgreSQL 使用了数学的一个小分枝‘现代代数’(Modern Algebra)。现代代数处理‘集合论’(Set Theory)、‘关系代数’(Relational Algebra)、群组 (Groups)、环 (Rings)、收集 (Collections)、集 (Sets)、联 合 (Unions)、交错 (Intersections)、排斥 (Exclusions)、领域 (Domains)、 排列 (Lists) 等等。 PostgreSQL 这类产品之所以存在,便是因为能量和时间。那是创造世界、脑子和 其他东西的能量。而质量和能量是同一事物!质能相同的事实在一百年前仍未为 人所知!(译按∶此话适用至 2005 年∶) 人脑中的细胞在工作(编写程式)时会消耗能量,把来自食物的化学能转化为电 能及热能。即使在你阅读这段文字时,你脑中的细胞便会消耗燃料及使用小量能 量。所以立即停止阅读!!神经元(脑细胞)的能量活动可在实验室中量度。例 如测谎机及其他能量度脑内能量活动的医疗器材。也就是说,人脑是一台热力学 上的机器 (thermodynamic heat engine)。正因为这样,热力学的定律也适用於 人脑,也就间接地影响到 PostgreSQL 一类软件。 科学来说,建立一个百分百完美及没有错误的系统或理论(包括资料库系统)是 不可能的。这就像镜花水月,我们永不可能到达完美的系统或理论这目标。详细 的数学方程式和讨论证明了“完美的系统”(“不完美的系统”也是)并不可能 出现。这是一个进阶的课题,超出了本文的讨论□围。而这样的讨论牵涉到无限 的维数 (dimemsions)(及基本维数 (primay dimensions)),这是在大自然中存 在的。不幸地,人类只能看到和感到四维,但数学可轻易看到其他维数。其他维 数比原子“无限地细小”(infinitely smaller),而原子本身已小得肉眼看不到 !数学是非常有力的东西,因为它能分析和解释我们宇宙的生死。 在其他宇宙看 来,我们的宇宙几乎没有大小,反之亦然。即是说,对其他宇宙的人来说,我们 的宇宙并不可见(不存在)!反之亦然!! 理论上,你可以离开身处的宇宙,不用花任何时间超越极远的距离(数亿光年) ,之後在不同的时空回归宇宙!我们的宇宙和其他宇宙的距离事实是零! 虽然空间有无限维数,它们都可从小量的基本维产生。也就是说,无限个维数可 合并为基本维。基本维可吸收其他维数而不被破坏。数学家使用基本维来理解宇 宙的生死。你所身处的宇宙开始於数以十亿年前(约二百亿年前),由其他宇宙 的粒子的活动产生的的一场大爆炸。在大爆炸之前只有一点,没有长度、没有阔 度、没有空度、没有时间(即没有我们的宇宙!!),其他宇宙和基本维则存在 。时间不存在,原子、□星、行星、银河也不存在!你体内的原子不存在!时间 诞生前,以经发生很多事了。 大爆炸和因此诞生的我们的宇宙是由基本空间的原子造成的。有人、(有东西? )冲击了其他空间的几个原子来产生我们的宇宙,新的时间、长、阔、高各度空 间诞生了!我们看到一些线索。人类仍未完全了解这过程。人们正尝试在实验室 中模拟大爆炸来产生其他宇宙(欧洲仍在建造大型的加速器 (accelerator),在 达拉斯 (Dallas) 的另一座则因美国国会削减财政预算而停建。)其他空间中有 原子,就像我们的一样。理论上,我们可创造和产生无限个宇宙!这些过程是可 逆转的,即我们的宇宙可完全消失及变为其他空间的数个原子!一个类似的情形 便是你如何因两个细胞的冲击,造成一个细胞而成为你。那个小小的细胞分裂及 倍增,产生六万亿个细胞和变成一个六尺高的人(你!)。人类和宇宙有一些相 似之处,宇宙和人类相似,也有生死。 完美的状态(不完美的状态也是)并无可能,宇宙的生老病死是一个循环的过程 。但完美的死亡并不存在,科学只容许转换 (transformation)!我们的宇宙正以 极高速度扩张,它并不静止,而是非常动态。它还会继续扩张,直到受到其他空 间的压力的干扰使它崩溃,并将它吸收和同化!!有两个可能性□从黑洞移除我 们宇宙的质量(一个缓慢的过程),或从白洞注入新的质量(一个快速的过程) 。有数以百万计个宇宙存在,但只有小数是由基本的维数造成的。你并不只是我 们宇宙的原子组成,还有其他的空间的原子!黑洞会吸入我们宇宙的原子和粒子 ,它们转化及成为其他空间的粒子!在黑洞中心,长度、阔度高度和时间都是零 !黑洞是其他宇宙的出入口。其他宇宙的出入口可在任何地方出现,包括你的体 内! 世上可有无限种颜色、电脑语言、晶片设计和理论,但不可能有一种完美的颜色 、电脑语言、设计和系统!你所能得到的只是近乎完美的颜色(波长)、系统、 资料库或理论!大自然就像一个万花筒。 把世上数百万网民的能量结合起来,使得建立一个近乎完美的系统(包括资料库 软件)变得有可能。孤掌难鸣,但籍著网络把大量人手集合起来,他们的总能量 会非常庞大,而且可集中於建立一个近乎完美的系统。人类是拥有有限能量及资 源的生物,经常会犯下不同程度的错误。因为人们犯错的倾向会依特殊技能、特 殊经验和心情有所不同,我们可藉集合不同的人共同努力来使得发现和清除人们 造成软件错误更容易。此外,更多人代表更多工作时间及功能。 很明颢,互联网可连系很多人,也就是说互联网有大量能量和时间,可用心软件 公司更短的时间产生更高质素的软件。即使是微软、IBM 等大公司也不可违抗物 理定律,而必会向物理定律投降。 目前世界上已有太多以 ANSI/ISO SQL 这一个规格为目标的 SQL RDBMS 资料库。 人类不可再浪费时间在产生相似甚至相同的软件,为科学上有更多值得注意的题 材。 结论是∶因为科学的定律,‘开於原始码’系统,像 PostgreSQL、Linux 会比‘ 封闭原始码’系统优异。这是有科学根据的。 4. PostgreSQL 是什麽? PostgreSQL 6.4 版是一个自由的资料库,给予你完整的程式码,是一个近乎依从 (正在趋近)ANSI SQL 1998, 92, 89 规格的物件关联式资料库系统,及可在不 同的硬件平台和操作系统中执行。 有时除错嵌补会在主要的推出 PostgreSQL 的主要版本之後出现。 你可依据自已需要,自行进行修补。请跟从以下步骤∶ 到 postgresql 程式码的目录 cd /usr/src/postgresql6.4 patch -p0 < patchfile make clean make 也请阅读说明书,执行 'man patch' 嵌补档是在 * PostgreSQL 嵌补∶ [16]ftp://ftp.postgresql.org/pub/patches PostgreSQL 的最终目的是百分百符合 ANSI/ISO SQL 及成为世界第一的开放通用 资料库。PostgreSQL 也会指引、推动、控制、监察及指挥未来的 ANSI/ISO SQL 。 即是说,意念会先在 PostgreSQL 实行,之後再加进 ANSI/ISO SQL 中。 Informix Universal server(1997 年推出)的基础是 PostgreSQL 的较旧版本 ,因为 Informix 收购了 Illustra Inc. 及整合到 Informix。Illustra 资料库 是完全根据 Postgres(PostgreSQL 的前身)写成的。 PostgreSQL 是 POSTGRES 资料库管理系统的改良版,一个新一代 DBMS 的研究原 型 (prototype)。在保留 POSTGRES 强大的资料模型及丰富的资料型态的同时, 它以一个扩充了的 SQL 子集来取代 PostQuel 查询语言。 PostgreSQL 是由一群参加 PostgreSQL 开发通信论坛的互联网开发 人员进行的 。目前的协调者为 Marc G. Fournier * [17]scrappy@postgreSQL.org 这队伍会负责所有现在及未来的 PostgreSQL 发展工作。当然,资料库的用户自 己也是 PostgreSQL 的开发人员!这开发过程是分散在互联网上大量资料库用家 的。 PostgreSQL 1.01 的作者是 Andrew Yu 和 Jolly Chen。很多其他人也有参与移 植、测试、除错及加强程式的工作。PostgreSQL 的前身 Postgres 的程式码,是 很多大学毕业生、本科生及程式设计员在 University of California ,Berkeley 的 Michael Stonebraker 教授的指导下的产品。 本软件在 Berkeley 的原名是 Postgres。在 1995 年加上 SQL 功能後,便改名 为 Postgres95。1996 年年尾再改名为 PostgreSQL。 已有数以百万套 PostgreSQL 被安装作资料库伺服器,网上资料库伺服器和应用 程式资料库伺服器。它比其他先进得多,而且是一个物件导向关联式资料库 (ORDBMS)。 PostgreSQL 可储存很多传统资料型态,如整数、字元之外的资料型态。你可以建 立自定型态、函数、遗传 (inheritance) 等。PostgreSQL 可在 Soloris 、SunOS、HPUX、AIX、Linux、Irix、Digital Unix、BSDi、NetBSD、FreeBSD 、SCO Unix、NEXTSTEP、Unixware 及所有其他的 Unix 执行。移植到视窗 95/NT 的工作正在进行中。 * 题目∶ PostgreSQL SQL RDBMS 资料库(物件关联资料库管理系统) * 目前版本∶ 6.4 * 年龄∶ PostgreSQL 十二岁。自 1985 件开始开发 * 作者∶ 十二年来互联网上数以百万计的大学和公司 PostgreSQL 和本文件的有关项目需遵守以下版权声明。 PostgreSQL Data Base Management System Copyright (c) 1994-6 Regents of the University of California Permission to use, copy, modify, and distribute this software and its documentation for any purpose, without fee, and without a written agreement is hereby granted, provided that the above copyright notice and this paragraph and the following two paragraphs appear in all copies. IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. 5. 何处取得 ? 你可从以下地方购买 Redhat Linux 光碟、 Debian Linux 光碟或 Slackware Linux 光碟,从中找到 PostgreSQL 套装软件(源程式码和二元码)∶ * Linux System Labs 网址∶ [18]http://www.lsl.com/ 7 (美元) * Cheap Bytes Inc 网址∶ [19]http://www.cheapbytes.com/ 7 (美元) * Debian Main 网址∶ [20]http://www.debian.org/vendors.html PostgreSQL 组织也售卖‘PostgreSQL CDROM’,内含完整的源程式码,许多 Unix 操作系统的可执行档及完整的文件。 * 从主网页取得 PostgreSQL 光碟∶ [21]http://www.postgresql.org 30(美 元) PostgreSQL 只有二元档的散布∶ * 你可不须编译源程式码而执行 PostgreSQL。从 [22]ftp://www.redhat.com/pub/contrib/i386/ 的 postgresql-6.4.i386.rpm 档可得到英代尔 (Intel) Linux 的二元档。这档 案使用 Rehat 的‘rpm’格式。你亦可找到 PostgreSQL 的程式码。 * Solaris,HPUX,AIX,IRIX 和 Linux 二元档的地址∶ [23]ftp://ftp.postgresql.org/pub/bindist 如果你在任何其他平台成功编 译,也请上载到这里,使得其他人也可使用。 * ftp 站台∶从 [24]ftp://ftp.redhat.com/pub/contrib/i386/ 可取得英代 尔 Linux 的二元档,有关的档案是 postgresql-6.4-3.i386.rpm。这档案使 用 Rehat 的‘rpm’格式。你亦可找到 PostgreSQL 的程式码。 万维网网站∶ * 主网站∶ [25]http://www.postgresql.org/ * 次网站∶ [26]http://logical.thought.net/postgres95/ * [27]http://www.itm.tu-clausthal.de/mirrors/postgres95/ * [28]http://s2k-ftp.cs.berkeley.edu:8000/postgres95/ * [29]http://xenium.pdi.net/PostgreSQL/ * [30]http://s2k-ftp.cs.berkeley.edu:8000/postgres95/ 在此列出 ftp 站∶ * 主 FTP: [31]ftp://ftp.postgresql.org/pub * 次 FTP: [32]ftp://ftp.chicks.net/pub/postgresql * [33]ftp://ftp.emsi.priv.at/pub/postgres/ * [34]ftp://ftp.itm.tu-clausthal.de/pub/mirrors/postgres95 * [35]ftp://rocker.sch.bme.hu/pub/mirrors/postgreSQL * [36]ftp://ftp.jaist.ac.jp/pub/dbms/postgres95 * [37]ftp://ftp.luga.or.at/pub/postgres95 * [38]ftp://postgres95.vnet.net:/pub/postgres95 * [39]ftp://ftpza.co.za/mirrors/postgres * [40]ftp://sunsite.auc.dk/pub/databases/postgresql * [41]ftp://ftp.task.gda.pl/pub/software/postgresql * [42]ftp://xenium.pdi.net/pub/PostgreSQL PostgreSQL 的源程式码也可从 sunsite unc 的映射站得到(全球有大约一千个 )。它是在 Redhat Linux 套件散布的 /pub/contrib/i386/postgresql.rpm 档 中。 * 要知道有什麽映射站,请到 [43]ftp://sunsite.unc.edu 6. PostgreSQL 支援超过 200 Gig 的超级资料库 32 位元处理器的电脑在资料库超过 5 GigaByte 时表现会迅速下降。你可用 32 位元处理器执行 30 gig 的资料库,但表现会下降。32 位元机器受到最多 2 GB 记忆体,2 GB 档案系统及其他操作系统方面的限制。 对极大型的资料库来说,我强烈建议你使用 64 位元处理器,如 Digital Alpha 、Sun Ultra-sparc 64 位元处理器、Silicon graphics 64 位元处理器、Intel Mercel IA-64 处理器、HPUX 64 位元电脑、IBM 64 位元电脑。使用 64 位元的 处理器来编译 PostgreSQL,它就可以处理大型的资料库及查询。查询大型表格和 资料库的速度会比 32 位元的电脑快数倍。64 位元电脑的优点是你有很大的记忆 位址 (memory addressing space) 和操作系统可处理很大的档案系统、为大型资 料库提供较佳表现、支援更多记忆体、能力更强…… 7. 凭什麽相信 PostgreSQL?Regression 测试套件 (Regression test package) 为用户建 立信心 为方便测试PostgreSQL,Regression 测试套件(src/test/regress)已包含在散 布中,它容许你的电脑检证标准的 SQL 操作及 PostgreSQL 的延伸能力。测试套 件中已包含了数百个 SQL 测试程式。 你应用电脑的高速来验证 PostgreSQL,而不是用人脑。电脑可以人脑千万倍甚至 数以亿倍的速度来进行 Regression 测试。现代电脑可在很短时间内执行数十亿 个 SQL 测试。在不久将来,电脑会比人脑快数以兆倍。因此,使用电脑来测试电 脑的表现是合理的。 如有需要,你也可自行增加测试。如果你认为它会对其你互联网用家有帮助,你 也可把它上载到 PostgreSQL 的主网站。Regression 测试软件帮助用户建立对 PostgreSQL 的信心及信任,它也帮助生产系统迅速设立 PostgreSQL。 Regression测试可被视为开发人员与最终用户间相互同意的一份非常有力的技术 文件。PostgreSQL 在开发过程及推出软件之前广泛使用Regression测试来保证质 素。 PostgreSQL 的能力可籍 Regression 测试直接反映出来。如果一种功能、语法或 特性在 Regression 测试中存在,它就被支援,所有其他没有列出的 PostgreSQL 就可能不支援!!你可以自行验证及加入 Regression 测试中。 8. PostgreSQL 的前端 GUI 工具(图像使用者界面) PostgreSQL 套件散布中有一个名为‘pgTcl’的 Tcl/Tk 介面程式库。Tck/Tk 是 一个快速应用程式开发工具 (Rapid Application Development tool) 也是一种 命令稿语言 (scripting language)。使用 Tcl/TK,你可以发开程式一次而在任 何地方,包括 NT、Win 95、Linux、苹果麦金塔 iMac、OS/2 和所有 Unixes 。Tcl 代表‘Tool Command Language’,而 Tk 是‘Tool Kit’。Tcl/Tk 有一 个名为 SpecTcl 的 IDE(综合开发环境)。在 Redhat linux 的套件散布中检查 这 rpm 档或在下列的 sunscript 站台中找寻。 作为命令稿语言,Perl 值得推荐。这是因为它是最通用,非常强劲及可在所有软 硬件平台使用。Perl-Tk 或 Perl-Qt 或 C++ QtEZ 或 C++ Lesstif 也受到推荐 。考虑到时间资源、执行速度和程式设计的容易度, Perl、C 和 Tk 的组合可满 足大部分专案的需要。要注意 Java 程式非常缓慢。C++ 也比 C 缓慢。和所有其 他语言比较,C 速度最高。Perl 程式可使用 Perl2C 程式转变为 C 程式,编译 之後会快速一些。 世界上有百分之九十的互联网命令稿是用 Perl 写成的。所以你只需一种( “Perl”)语言来满足你所有需要□□应用程式和互联网。请参阅本文件的 Perl 资料库介面 (Perl Database Interface) 部分∶ [44]Perl Database Interface 。 在使用 Tcl 开发一个专案前,你要想清楚 Perl 和 Tcl/Tk 的优劣。通常每片 Linux CD-ROM 都会有 Tcl/Tk。你也可在以下地方找到它∶ * Tcl/Tk [45]http://www.scriptics.com * 名为 INCR 的 Tcl 物件导向延伸 [46]http://www.tcltk.com * Visual TCL 网站 [47]http://www.neuron.com * Visual TCL Redhat rpm [48]ftp://ftp.redhat.com/pub/contrib/i386/visualtcl*.rpm * [49]http://sunscript.sun.com/ * [50]http://sunscript.sun.com/TclTkCore/ * [51]ftp://ftp.sunlabs.com/pub/tcl/tcl8.0a2.tar.Z * 参考书籍∶市场上有大量 Tcl/Tk 的书籍。 9. PostgreSQL 的综合开发环境工具 (GUI IDE) 检查下列可和 ODBC/JDBC 驱动程式共同使用的开发工具,它们和 Borland C++ Builder、Borland JBuilder 相似。 Vibe 是一个 Java 和 C++ IDE(综合开发环境),并当选为 Unix Review 的全 年最佳 IDE (IDE of the year)。 * 更多 Vibe 的资料可在 [52]http://www.LinuxMall.com/products/00487.html 找到 * 'QT',一个可在视窗 95/NT 和 Unix 使用的应用程式框架 (application framework)∶ [53]http://www.troll.no,ftp 站 [54]ftp://ftp.troll.no 你也可在视窗 95 中使用 Borland C++ Builder、Delphi、Borland JBuilder 、PowerBuilder 经 ODBC/JDBC 驱动程式连接到 unix 电脑的 PostgreSQL。 请参阅本文件的 PERL 资料库介面部分∶ [55]Perl Database Interface 。我强 烈推荐使用 Perl 和 C/C++ 作 IDE 的选择。 免费的 IDE 工具∶ 检查 Redhat Linux 的光碟。 * Lesstif Motif 工具 [56]ftp://ftp.redhat.com/pub/contrib/i386/lesstiff*.rpm * FreeBuilder [57]ftp://ftp.redhat.com/pub/contrib/i386/free*.rpm * SpecTCL [58]ftp://ftp.redhat.com/pub/contrib/i386/spec*.rpm * JccWarrior [59]ftp://ftp.redhat.com/pub/contrib/i386/jcc*.rpm * PostgreSQL 的 Kanchenjunga Java RAD 工具 [60]http://www.man.ac.uk/~whaley/kj/kanch.html * Applixware 工具 [61]http://www.redhat.com * XWPE X Windows Programming Environment [62]http://www.rpi.edu/~payned/xwpe/ [63]ftp://ftp.redhat.com/pub/contrib/i386/xwpe*.rpm * XWB X Windows Work Bench [64]ftp://ftp.redhat.com/pub/contrib/i386/xwb*.rpm * NEdit [65]ftp://ftp.redhat.com/pub/contrib/i386/nedit*.rpm 10. PostgreSQL 的介面驱动程式 10.1 PostgreSQL 的 ODBC 驱动程式 ODBC 代表‘Open DataBase Connectivity’。它是从不同厂商不同资料库存取资 料的流行介面。使用 ODBC 驱动程式写成的软件保证可和不同资料库,如 PostgreSQL、Oracle、Sybase 和 Informix 等合作。 * PostODBC 已经包括在 PostgreSQL 的散布中。请到主网站 [66]http://www.postgresql.org. 它也包括在 PostgreSQL 光碟中。 * [67]http://www.openlinksw.com Open Link Software Corporation 售卖 PostgreSQL 和其他资料库的 ODBC 驱动程式。她也送出免费的 ODBC (名额 有限)。 * PostgreSQL 的 Insight ODBC [68]http://www.insightdist.com/psqlodbc 这是 PostODBC 的官方网站。 这是一个名为 FreeODBC Pack Package 的计划。目前 仍没 PostgreSQL 版本, 也许你能帮助。 * [69]http://www.ids.net/~bjepson/freeODBC/ 这是一个免费的 ODBC。 10.2 PostgreSQL 的 UDBC 驱动程式 UDBC 是 一种独立於驱动程式管理员 (driver managers) 和 DLL 支援的静态 ODBC 版本,用来直接把资料库连接能力嵌入到应用软件中。 * [70]http://www.openlinksw.com Open Link Software Corporation 出售 PostgreSQL 和其他资料库的 UDBC 驱动程式。 Open Link 也送出免费的 UDBC (名额有限)。 10.3 PostgreSQL 的 JDBC 驱动程式 JDBC 代表‘Java DataBase Connectivity’。Java 是一种升阳 (Sun Microsystems) 所开发的独立於平台的程式语言。Java 程式设计师被鼓励使用 JDBC 来撰写资料库程式,以增强程式在不同资料库,如 PostgreSQL、Oracle 、Informix 等之间的移植能力。如果你写 Java 程式,你可在以下网站取得 PostgreSQL 的 JDBC 驱动程式。 JDBC 驱动程式已包括括在 PostgreSQL 散布中。 * [71]http://www.demon.co.uk/finder/postgres/index.html 升阳的 PostgreSQL 连接 * [72]ftp://ftp.ai.mit.edu/people/rst/rst-jdbc.tar.gz * [73]http://www.openlinksw.com Open Link Software Corporation 出售 PostgreSQL 和其他资料库的 JDBC 驱动程式。 Open Link 也送出免费的 JDBC (名额有限)。 * JDBC 英国网站 [74]http://www.retep.org.uk/postgres * JDBC FAQ 网站 [75]http://eagle.eku.edu/tools/jdbc/faq.html JDBC 的网页、导引和 FAQ 在∶ * JDBC HOME [76]http://splash.javasoft.com/jdbc * JDBC guide [77]http://www.javasoft.com/products/jdk/1.1/docs/guide/jdbc * JDBC FAQ [78]http://javanese.yoyoweb.com/JDBC/FAQ.txt 10.4 PostgreSQL 的 Java Java 程式设计师会觉得这些对他们很有用。 * [79]ftp://ftp.redhat.com/pub/contrib/i386 看 postgresql-jdbc-*.rpm * [80]http://www.blackdown.org 11. PostgreSQL 的 Perl 资料库介面 (Database Interface, DBI) 11.1 PostgreSQL 的 PERL 5 介面 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 的使用者和开发人员的数量。 PostgreSQL 的 Perl 介面已包括在 PostgreSQL 的散布中。请参看 src/pgsql_perl5 目录。 * Pgsql_perl5 电邮联络地址∶ [81]E.Mergl@bawue.de * 另一资料来源∶ [82]ftp://ftp.kciLink.com/pub/PostgresPerl-1.3.tar.gz * Perl 网页 [83]http://www.perl.com/perl/index.html * Perl 导引,请在 [84]http://reference.perl.com/ 参看导引目录 * Perl FAQ 在 [85]http://www.yahoo.com/Computers_and_Internet/Programming_Langua ges/Perl/ * Perl GUI 使用者介面 Perl-Qt rpm∶ [86]ftp://ftp.redhat.com/pub/contrib/i386 也请看 PerlQt-1.06-1.i386.rpm * Perl GUI 使用者介面 Perl-Qt∶ [87]http://www.accessone.com/~jql/perlqt.html * Perl GUI 使用者介面 Perl-XForms∶ [88]ftp://ftp.redhat.com/pub/contrib/i386,寻找 Xforms4Perl-0.8.4-1.i386.rpm * Perl GUI 使用者介面 Perl-Tk∶ [89]ftp://ftp.redhat.com/pub/contrib/i386 * Perl GUIkits∶ [90]http://reference.perl.com/query.cgi?ui * Perl 资料库介面∶ [91]http://reference.perl.com/query.cgi?database * Perl 到 "C" 的翻译工具∶ [92]http://www.perl.com/CPAN-local/modules/by-module/B/ 寻找 Compiler-a3.tar.gz * Bourne shell 到 Perl 的翻译工具∶ [93]http://www.perl.com/CPAN/authors/id/MERLYN/sh2perl-0.02.tar.gz * awk 到 perl 的 a2p 和 sed 到 perl 的 s2p 已包括在 PERL 散布中。 * 也请看 comp.lang.perl.* 等有关 PERL 的新闻组 11.2 Perl 资料库介面 DBI 何谓 DBI? Perl 资料库介面(DBI)是 Perl 语言的一个资料库存取应用程式介面(API) 。Perl DBI API 规格定义了一组函数、变数和惯例,以提供一个一致而独立於实 际所用的资料库介面。有关 DBI 的这一段的资料是来自‘DBI FAQ’文件,作者 是 Alligator Descartes,并获准在此复制。 * Alligator Descartes Hermetica 在 [94]descarte@hermetica.com PostgreSQL 的 DBI 驱动程式 DBD-Pg-0.89 在此取得 DBD-Pg-0.89.tar.gz∶ * DBD-Pg-0.89 : [95]http://www.perl.com/CPAN/modules/by-module/DBD/ * Comprehensive Perl Archive Network CPAN [96]http://www.perl.com/CPAN * DBI 驱动程式名单和 DBI 模组网页 [97]http://www.hermetica.com/technologia/perl/DBI * DBI 的资料在 [98]http://www.fugue.com/dbi/ * 主网页 [99]ftp://ftp.demon.co.uk/pub/perl/db * 杂锦 DBI 连结 [100]http://www-ccs.cs.umass.edu/db.html * 杂锦 DBI 连结 [101]http://www.odmg.org/odmg93/updates_dbarry.html * 杂锦 DBI 连结 [102]http://www.jcc.com/sql_stnd.html * PostgreSQL 资料库 [103]http://www.postgresql.org 系统需求∶ * - 建立、测试和安装 Perl 5 (最少 5.002) * - 建立、测试和安装 DBI 模组 (最少 0.89) * - 建立、测试和安装 PostgreSQL (最少 6.2) DBI 的技术支援 请把意见和错误报告寄到 * [104]E.Mergl@bawue.de 请把以 perl -v、perl -V 的输出、PostgreSQL 的版本、DBD-Pg 的版本、DBI 的版本包括在错误报告中。 何谓 DBI、DBperl、Oraperl 和 *perl? 摘录自 Tim Bunce,DBI 的设计者和作者∶ “DBI 是 Perl 语言的一种应用程式介面(API)。Perl DBI API 规格定义了 一 组函数、变数和惯例,用於提供一个一致而独立於实际所用的资料库介面。” 简单地说,DBI 容许用家透明地 (transparently) 存取多种资料库。所以,如果 你连接到 Oracle、Informix、mSQL、Sybase 或任何资料库,你不需要知道 3GL 层面内里的机制。DBI 所定义的 API 可用於所有这些资料库。 这样的好处是你得到在一篇 perl 手稿中连接两个不同出版商不同的资料库,例 如在一个程式中读取在一个 Oracle 资料库的资料及将它插入到 Informix 资料 库中。DBI 层面容许你简单及有力地做到。 DBperl 是这个介面规格的旧名。它现在一般用於代表用於 perl4 的资料库介面 模组,如 oraperl、isqlperl、ingperl 之类。这些介面没有标准的 API,一般 已没有支援。 这是 DBperl 模组的名单,所对应的 DBI 模组及技术支援资讯。有关 DBI 驱动 程式的问题应该在 dbi-users 通讯论坛提出。 list. 模组名称 所需资料库 作者 DBI ----------- ----------------- ------ --- Sybperl Sybase Michael Peppler DBD::Sybase http://www.mbay.net/~mpeppler Oraperl Oracle 6 & 7 Kevin Stock DBD::Oracle Ingperl Ingres Tim Bunce & DBD::Ingres Ted Lemon Interperl Interbase Buzz Moschetti DBD::Interbase Uniperl Unify 5.0 Rick Wargo None Pgperl Postgres Igor Metz DBD::Pg Btreeperl NDBM John Conover SDBM? Ctreeperl C-Tree John Conover None Cisamperl Informix C-ISAM Mathias Koerber None Duaperl X.500 Directory Eric Douglas None User Agent 不过,部分 DBI 模组有 DBperl 模拟层 (emulation layers),因此 ,DBD:Oracle 会有 Oraperl 模拟层,让你无需更改现存的 Oraperl 手稿便能执 行。这模拟层把 Oraperl API 呼叫翻译成 DBI 呼叫并通过 DBI 执行。 这列表是模拟层的资料∶ 模组 模拟层 状况 ------ --------------- ------ DBD::Oracle Oraperl 完成 DBD::Informix Isqlperl 开发中 DBD::Sybase Sybperl 可用?(有待验证) DBD::mSQL Msqlperl 在 DBD::mSQL-0.61 中实验性推出 Msqlperl 模拟是特殊情况。Msqlperl 是 mSQL 资料库的 perl5 驱动程式,但不 依从 DBI 规格。大家应使用 DBD::mSQL,而不应用 Msqlperl。Msqlperl 可从 CPAN 下载∶ * [105]http://www.perl.com/cgi-bin/cpan_mod?module=Msqlperl DBI 规格 这里有一些 DBI 的资料来源。 * DBI 规格 [106]http://www.hermetica.com/technologia/perl/DBI/doc/dbispec 这会连结到二个规格,即开发队伍努力发展一个稳定的介面期间,正快速更改的 新 DBI 规格草案,和旧 DBperl 规格发展而来,目前的 DBI 介面。 後者应只被视为历史纪录,而不可用作程式设计说明书或任何具权威性的文件。 不过,它还是十分有用的参考资料。 POD 文件 POD 是嵌入到 perl 程式中用以“即场”解释程式码的一段文件,用以 提供 有用的资料给程式设计师和模组的用家。DBI 和驱动程式的 POD 正越来越 流行,要阅读有关文件,请使用以下指令。 DBI 规格 请使用以下指令阅读 DBI 规格的 POD perldoc DBI Oraperl DBD::Oracle 中 Oraperl 模拟层的使用者可用以下指令学习如何用 Oraperl 介面编写程式∶ perldoc Oraperl 这样会产生一份由 Kevin Stock 为 perl4 所写的原装 oraperl man page 更新 版。这里会全面列出及介绍 oraperl API。 DBD::mSQL DBD::mSQL 模组的用家可籍以下指令阅读一些该驱动程式的私家函数 (private functions) 和怪□的资料∶ perldoc DBD::mSQL 常见问题 (FAQ) POD 文件中也包含常见问题。要阅读的话请输入∶ perldoc DBI::FAQ 对不是永久或不能方便地连接上互联网的人来说这比较方便∶ POD 的一般资料 有关 POD 如何撰写 POD,及一般来说的 POD 哲学,可籍此阅读 ∶ perldoc perlpod 安装了 Tk 模组的用家可能会对一个名为 tkpod,使用 Tk 的 POD 阅读器有兴趣 。它会把 POD 编排到一个方便及可阅读的形式∶ □谈、小道消息和观察∶ 在 DBI 的通信论坛中有不同人提出的一连串偶然的□ 谈。 * [107]http://www.hermetica.com/technologia/perl/DBI/tidbits “DBI□□perl5 资料库介面” 本文件由 Alligator Descartes 和 Tim Bunce 所写,关於 DBI 的结构。它在“The Perl Journal”第五期出版。它写得极之好 。请买这本杂志。事实上,请每期都买。“The Perl Journal”的互联网网址是 ∶ * [108]http://www.tpj.com “DBperl” 这文章在一九九六年十一月的“Dr. Dobbs Journal”发表,内容关 於DBperl。 “The Perl5 Database Interface” 这是一本由 Alligator Descartes 写,由 O'Reilly and Associates 出版的书。 通信论坛 Ted Lemon 总共管理三个 DBI 的通信论坛。它们都可在万维网上订阅 或取消 订阅∶ * 通信论坛 [109]http://www.fugue.com/dbi 这些可加入的论坛是∶ dbi-announce 这通信论坛只是作出宣布。如果你不能成功使用以上网址的表格, 请循以下途径订阅这论坛∶ * 电邮∶ [110]dbi-announce-request@fugue.com 内容‘subscribe’ dbi-dev 这通信论坛目的是让开发人员讨论有关 DBI 介面、API 和驱动程式机制 的意见和概念。只对开发人员或有兴趣的人有用。如果你不能成功使用以上网址 的表格,请循以下途径订阅这论坛∶ * 电邮∶ [111]dbi-dev-request@fugue.com 内容为‘subscribe’ dbi-users 这通信论坛是用作错误报告、问题讨论和一般问题。如果你不能成功 使用以上网址的表格,请循下途径订阅这论坛∶ * 电邮∶ [112]dbi-users-request@fugue.com 内容为‘subscribe’ 通信储存处 (Mailing List Archives)∶ * 美国通信储存处 [113]http://outside.organic.com/mail-archives/dbi-users/ * 欧洲通信储存处 [114]http://www.rosat.mpe-garching.mpg.de/mailing-lists/PerlDB-Int erest 编译错误或「测试失败」 如果发生讯息转储 (core dump),尝试使用 Devel::CoreStack 模组来产生讯息 转储的堆叠追踪 (stack trace)。Devel::CoreStack 可在 CPAN 找到∶ * [115]http://www.perl.com/cgi-bin/cpan_mod?module=Devel::CoreStack 把堆叠追踪、模组版本、perl 版本、测试个案、操作系统版本及任何其他适用的 资料电邮到 dbi-users 通信论坛。寄出的资料越齐全,开发人员越快解决问题。 如果你不告诉我们,不要期望得到答案。 视窗 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 [116]http://www.hermetica.com/technologia/perl/DBI/win32 * Win32 ODBC [117]http://www.roth.net 何谓 DBM?为何要用 DBI? UNIX 原本是使用简单以档案为基础的「资料库」,即 dbm 系统。dbm 容许你在 档案快速地存取资料。不过,它有数个严重的缺点。 档案封锁 (File Locking) dbm 系统不容许特别全面的档案封锁能力,也没有修正同时写入资料库引起的问 题的能力。 随意的资料结构 dbm 系统只容许单一固定的资料结构∶链-数值对 (key-value pair)。那数值可 以是复杂的物件,如一个 C 的 struct,但链必须是独一无二的。这对 dbm 系统 的用途造成很大限制。 不过,dbm 系统仍为使用简单资料及资源有限的用家提供了有用的功能,因为它 快速、全面及经过极严谨的测试。存取 dbm 系统的模组现已经 AnyDBM_File 模 组整合到 Perl 的核心散布中。 总括一句,对近乎是唯读的资料库或小型而简单的资料来说,dbm 是一个非常令 人满意的解决方法。不过,对更强大和可增减 (scalable) 的资料集来说,用家 最好使用 DBI。至於全面的交易封锁 (transactional locking),就更不用说了 。□ DBI 是否支援<这项功能>? 根据所提出的功能是一个并不标准,而只为部分资料库所独有的假设,答案是否 。 DBI 反映一个通用而可在大部分资料库使用的 API,而没有资料库独有的功能。 不过,如果驱动程式的作者有兴趣,他们可以籍 DBI 介面所定义的 func method 来加上资料库独有的功能。命令稿的开发人员要注意籍 func methods 提 供的功能一般不能在不同资料库间移植。 对 CGI 来说,dbi 有没有用? 一个字∶有!DBI 对 CGI 程式设计非常有用!事实上,CGI 是 DBI 最重要的用 途之一。 DBI 让 CGI 程式设计师设计功能强大的互联网前端资料库给他们的用家,从而提 供大量按次序排列的资料。DBI 也容许在网站的资料库伺服器超过负荷时,管理 人员在无须更改 CGI 命令稿的情况下将之升级。 我如何加快 CGI 与 DBD Oracle 的连接速度? Apache httpd 管理一组子 httpd (httpd children) 来服务客户。籍著 Doug MacEachern 的 Apache mod_perl 模组,perl 翻译器已嵌入到子 httpd 中 。CGI、DBI 和你喜欢的模组会在儿子诞生时载入。这些模组直到在磁碟上的版本 被更改时才会再被载入。要知道更多有关 Apache 的资料,请看 Apache 计划的 网站∶ * Apache 计划的网站 [118]http://www.apache.org * Mod_perl 模组 [119]http://www.perl.com/cgi-bin/cpan_mod?module=mod_perl 如何使 DBI 和 CGI 持续连接? 籍著 Edmund Mergl 的 Apache::DBI 模组,每个子 httpd 会把资料库登入储存 在杂凑 (hash) 中。如果你的应用程式只有一个资料库用家,每一个儿子都可开 始连连。目前,儿子之间并不会分享资料库连接。Apache::DBI 可从 CPAN 下载 ∶ * [120]http://www.perl.com/cgi-bin/cpan_mod?module=Apache::DBI “我在指令行执行一个 perl 命令稿时,并无问题。不过,当我在 http 执行它时,它会 失败!”何解? 基本上,这很有可能是因为从指令行执行命令稿的使用者已把环境变数设定好, 以 DBD::Oracle 来说,即 $ORACLE_HOME, $ORACLE_SID 或 TWO_TASK。httpd 行 程通常是以 nobody 的身份执行,即没有了设定好的环境。任何在这情况下尝试 执行的手稿都会正确地失败。要解决这问题,在你的命令稿的开头用一个 BEGIN() 区块设定环境。这样便会解决问题。同样地,你要检查你的 httpd 错误 纪录档以寻找线索,以及阅读“Idiot's Guide To Solving Perl / CGI Problems”和“Perl CGI Programming FAQ”以寻找更多资料。这问题大概不会 和 DBI 有关。请两份文件都小心阅读! * Idiot's Guide to Solving Perl / CGI problems [121]http://www.perl.com/perl/faq/index.html 使用 DBI 时,我能否进行多流处理 (multi-threading)? 目前不能。Perl 并不支援多流处理。不过,据估计,多流处理会成为 5.005 版 的基本散布的一部分,即不久之後,DBI 可能会支援多流处理。要看一些使用多 流 SELECT 句子的 Oracle OCI □例程式,请参阅∶ * [122]http://www.hermetica.com/technologia/oracle/oci/orathreads.ta r.gz 我如何用 DBI 呼叫内储程序 (stored procedure)? 假设你在目标资料库,例如一个 Oracle 资料库中建立了内储程序,你可使用 $dbh->do 来使程序立即执行。例如∶ $dbh->do( "BEGIN someProcedure END" ); 在 DBI 中,我如何取回内储程序的返回值? 记著还要检查错误! $sth = $dbh->prepare( "BEGIN foo(:1, :2, :3); END;" ); $sth->bind_param(1, $a); $sth->bind_param_inout(2, \$path, 2000); $sth->bind_param_inout(3, \$success, 2000); $sth->execute; 我可否用 DBI 来丢弃一个资料库? 对 DBI 来说,要适当地支援资料库的建立和丢弃太抽象了。例如,Oracle 根本 不支援丢弃资料库!此外,在 Oracle 中,资料库伺服器基本上就是资料库,但 在 mSQL,即使没有资料库,伺服器也能顺利地执行。这问题牵连太广了。正因如 此,部分驱动程式透过私家 func 方法来建立和删除资料库。你要检查驱动程式 的文件来了解它有没有支援这机制。 DBI 怎样处理 NULL 值? DBI 被指定把 NULL 值当作 undef 值处理。NULL 可以 NULL 的数值来加入到资 料库中,例如∶ $rv = $dbh->do( "INSERT INTO table VALUES( NULL )" ); 不过当查询时,NULL 要和 undef 比较。这是所有驱动程式都适用的标准。 这些 func 方法是做什麽的? DBI 把 func 方法定义为资料库独有功能的进入点,例如建立和丢弃一个资料库 。使用这些驱动程式独有方法十分简单,例如,要使用一个 createDatabase 方 法输入一个引数 (argument) ,我们会写∶ $rv = $dbh->func( 'argument', 'createDatabase' ); 软件开发人员要注意 func 方法不能在不同资料库间移植。 商业支援及训练 Perl5 资料库介面是自由软体。它并没有任何担保 (warranty)。不过,有些机构 提供了 DBI 的技术支援或培训计划。 PERL CLINIC : Perl Clinic 以合约形式为 Perl、DBI、DBD::Oracle 和 Oraperl 提供商业支援。这些支援是由 DBI 作者 Tim Bunce 工作的公司提供的 。欲知详情,请看∶ * [123]http://www.perl.co.uk/tpc 12. PostgreSQL 管理工具 12.1 PGACCESS - PostgreSQL 管理的 GUI 工具 PgAccess 是 PostgreSQL 的 Tcl/Tk 介面。它已经包括在 PostgreSQL 的散布中 。你可能想从这网页找出它有没有新版本∶ * [124]http://www.flex.ro/pgaccess * 如有任何意见、改良的建议,欢迎电邮∶ [125]teo@flex.ro PgAccess 的特色 PgAccess 视窗□Main window, Table builder, Table(query) view, Visual query builder. Tables * 开启表格 (tables) 查阅,最多二百个纪录(可在 perferences 目录更改) * 籍拖曳垂直格线 (grid line) 重整大小(在列表空间 (table space) 比在 列表目录 (table header) 进行好) * 单格中自动换行□每个表dher 的配置独立储存 * 汇入/汇出其他档案格式(SDF、CSV) * 过滤功能(输入如 price>3.14 的过滤器) * 排序功能(自行输入需排序的栏位) * 即场编辑 * 改良了的表格产生助理 (table generator assistant) * 改良了的栏位编辑 Queries * 定义、编辑和储存“用家定义查询”(user defined queries) * 把查询储存作为显示 (views) * 查询的执行 * 观看 select 形式的查询结果 * 删除和更改查询名称 * 具拖曳和放下功能的 Visual query builder。如果你有安装 Netscape Navigator 的 Tcl/Tk 插件,你可在此看到它工作∶ (译按∶不知在哪?! ) 序列 (sequence) * 定义、删除和检查序列 函数 * 使用 SQL 语言定义、检查和删除函数 将来还会有以下改进 * 表格设计(增加栏位、更名等等) * 函数定义 * 报告产生器 * 基本的命令稿编写功能 如有意见、改良的提议,请电邮到∶ * [126]teo@flex.ro 有关 libgtcl 的资料 你会用到 PostgreSQL 到 Tcl 的介面程式库 libgtcl,所谓的 Tcl/Tk 可‘载入 ’模组。libpgtcl 和源程式码位於 PostgreSQL 的 /src/interfaces/libpgtcl 目录。特定来说,你需要一个可在 Tcl/Tk‘载入’的 libpgtcl 程式库。技术上 来说,它和普通的 PostgreSQL 可载入目的档并不相同,因为 libpgtcl 是一堆 目的档的集合。这档案在 Linux 名为 libpgtcl.so。 你可在以上网址下载到一 个预先为 Linux i386 系统编译了的版本。只需把这档案拷贝到系统程式库目录 (/usr/lib)即可。如有疑难,其中一个解决方法是删除原程式码中有关载入 libpgtcl.so 的一句和使用 pgwish(或 wishpg)来载入 pgaccess.tcl,而非 wish,因为这 wish 已链结 libpgtcl 函式库。 12.2 PostgreSQL 的视窗互动式查询工具(WISQL 或 MPSQL) MPSQL 提供给使用者一个图像 SQL 介面控制 PostgreSQL。MPSQL 与 Oracle 的 SQL Worksheet 或微软 SQL Server 的查询工具 WISQL 类似。它有一个漂亮的 GUI 和指令记录。你也可以剪下及贴上。它还有其他有助提高生产力的功能。 * [127]http://www.troubador.com/~keidav/index.html * 电邮∶ [128]keidav@whidbey.com * [129]http://www.ucolick.org/~de/ 在 tcl_syb/wisql.html 档中 * [130]http://www.troubador.com/~keidav/index.html * 电邮∶ [131]de@ucolick.org 12.3 名为 PSQL 的 PostgreSQL 互动式查询工具(ISQL) ISQL 是供文字指令行终端机使用的。 这已包括在散布中,名为 PSQL。和 Sybase ISQL、Oracle SQLplus 十分相似。在 Unix 指令提示输入‘psql’会出 现 psql> 提示。 Type \h to see help of commands. 非常使用者友善和易用。 可在外框命令稿 (shell script) 中使用。 12.4 MPMGR□PostgreSQL 的资料库管理工具 MPMGR 为 PostgreSQL 是供一个图像管理介面。你可在以下地方找到它∶ it at * [132]http://www.mutinybaysoftware.com/ * Email: [133]keidav@mutinybaysoftware.com * [134]http://www.troubador.com/~keidav/index.html * 电邮∶ [135]keidav@whidbey.com * [136]http://www.ucolick.org/~de in file tcl_syb/wisql.html * PostgreSQL 的 WISQL [137]http://www.ucolick.org/~de/Tcl/pictures * 电邮∶ [138]de@ucolick.org 13. 只使用一个显示器 (monitor) 来建立多台 PostgreSQL 电脑 你可叠起电脑主机及只用一个显示器,而用一个 KWM (键盘、影像、显示器 )(Keyborad, Video, Monitor) (译按∶M 是否当为滑鼠?)选择器来选择所用 电脑。这不但节省地方,也节省显示器、键盘和滑鼠(每份总值 100 至 500 美 元),和减少混乱。 籍著选择器,你可叠高多台 PostgreSQL 伺服器(开发、测试、生产)、互联网 伺服器、ftp 伺服器、内联网伺服器、电邮伺服器、新闻伺服器在一个大柜。这 选择器也可控制视窗 95/NT 和 OS/2 电脑。 请查看下列网址∶ * DataComm Warehouse Inc,一天二十四小时,一星期七天都在致电 1-800-328-2261。他们提供所有品种的电脑硬件 [139]http://www.warehouse.com 4 埠 手动 KVM 选择器 (PS/2) 大约 $89.99 Part No. DDS1354 * Network Technologies Inc [140]http://www.networktechinc.com/servswt.html (120 美元/PC 8 埠) 的清单中包括 'Server Switches' 和 'Video only switches' * Scene Double Inc, 英国 [141]http://www.scene.demon.co.uk/qswitch.htm * Cybex corporation [142]http://www.cybex.com * Raritan Inc [143]http://www.raritan.com * RealStar Solutions Inc [144]http://www.real-star.com/kvm.htm * Belkin Inc [145]http://www.belkin.com * Better Box Communications Ltd. [146]http://www.betterbox.com/info.html * 到附近的硬件商铺查询“Server Switch”或称“KVM Auto Switches”。 在 yahoo 搜寻器中找出更多有“Server Switches”或“KVM Switches”的公司 。 每个 PostgreSQL 资料库伺服器最好用一部专用的 unix 电脑,以增强表现。任 何其他程式/行程都不要在这电脑上执行。阅读你所住地方的报章的商业版找出有 哪些商铺售卖 Intel 电脑和 13 □单色萤幕(十分廉宜的萤幕)。你只需要硬件 ,而不需微软视窗/DOS(节省约 150 美元)。 资料库伺服器不需要彩色显示器 ,因为你可在一个彩色的个人电脑上遥控管理。 在以下地方取得 RedHat(或其 他套件散布)Linux 的光碟∶ * Linux System Labs 网址∶ [147]http://www.lsl.com/ 7 美元 * Cheap Bytes Inc 网址∶ [148]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。(浏览器正迅速成为标准的客户 (client)。) 用这个方法,你可只用一个显示器和一个键盘来控制很多部电脑! 以下有关“Server Switch”的资料节录自 Networktechnic Inc 拨 800-742-8324 预订 (在美国免电话费) 想收到我们的产品目录的话,请把你的地址电邮到∶sales@networktechinc.com 只用一个键盘、显示器和滑鼠来控制多部电脑这些电子选择器容许只用一个键盘 、显示器和滑鼠来控制最多六十四部电脑。嵌入 (embedded) 的微电脑所有时间 都模拟在连接了的电脑上的键盘、显示器和滑鼠的存在。 特性及用途 * 键盘、控制台或遥控 * 9 针 D 串联 或 6 针 miniDIN 滑鼠支援 * 5 针 DIN 或 6 针 miniDIN 键盘支援 * 1600x1200 解像度而没有失真 * 使用标准的电线 * 桌面或架装 规格□键盘 * 所有连接器皆为 female * 5 针 DIN 或 6 针 miniDIN * 任何时候都可使所有 PC 软开机或硬开机 (hard or soft boot) 控制□按钮 * 触动一个制来接到那部电脑 * 按紧一个制超过 0.5 秒进入 SCAN、BROADCAST 或 COMMAND 模式 * 前部的 LED 显示键盘的操作模式 * 键入 CTRL+* 来进入 COMMAND 模式 * 提供 SCAN、BROADCAST 或 COMMAND 滑鼠 * 9 针 D 串联 * NTI 开关对所有个人电脑模拟微软串联滑鼠 * 滑鼠的 9 针 D male * 个人电脑的 9 针 D female * 6 针 miniDIN * NTI 开关对所有个人电脑模拟为 IBM PS/2 系列滑鼠 * 所有连接器皆为 female 有线遥控 * 可自行选购□必须购买 * 和按制操作相同 显示器□VGA * 频宽为 150 MHz * 1600X1200 点解像度而不变坏 * 所有连接器皆为 female 14. PostgreSQL 的应用程式和工具 14.1 PostgreSQL 的 4GL 万维网资料库程式□AppGEN 开发系统 AppGEN 可在此下载 * [149]http://www.man.ac.uk/~whaley/ag/appgen.html * [150]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 可以以下途径接触∶ * [151]andrew@arthur.smuht.nwest.nhs.uk 14.2 PostgreSQL 的互联网介面□DBENGINE dbengine 是 Ingo Ciechowski 所写的一个随插即用的 PostgreSQL 互联网介面 。它在 * [152]http://www.cis-computer.com/dbengine/ 有关 DBENGINE∶ dbengine 是互联网与 Postgres95 之间的介面,只需花数分钟 ,它便可为存取任何现存的资料库。 PHP 3 让你在文件中编写类似 Perl 的语言,但不是真的 Perl,AppGEN 和 WDB-P95 需要你为每一个资料库建立设定档 (configuration files)□□听起来 ,你似乎都要先学一类新的假语言 (meta language) 才能启用。 和其他工具不同,你不需要学任何特别的程式或命令稿语言来使用 dbengine。也 不会有每个资料库都有设定档的情况,所以你不需要熟习这些新结构。不过,如 果你想用到 dbengine 的完整功能,学习 Perl 是一个正确决定。 整个系统可籍对一个附加的资料库的一些简单运作设定好,它会包含有关如何理 解你的资料库存取的资料。你甚至可以指定虚假栏 (virual fields),用以在资 料显示在萤幕之前作出即时计算。 使用执照∶ dbengine 是自由软件,和 Perl 的使用条文一样。如果你不知你可 做或不可做什麽,请阅读它的使用执照。最後一句∶它是 GNU 执照的仁慈温和版 本□如果你小心地借用 dbengine 或把它的部分加入到商业的产品中,它不会被 感染。 14.3 PostgreSQL 的 Apache 伺服器模组□NeoSoft NeoWebScript Apache 是一个有名的互联网伺服器。一个 PostgreSQL 到 Apache 的介面模组位 於□ * [153]http://www.neosoft.com/neowebscript/ NeoWebScript 是一程容许你把不同复杂程度的程式嵌入到 HTML 档程式语言。 当有人要求一个包含 NeoWebScript 的 HTML 网页时,支授 NeoWebScript 的伺 服器便执行嵌入了的命令稿,产生一个含有自订内容的网页。 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),使得现存的程式共同工件、更 图像化和可用於 Internet。” 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 14.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 的电邮地址 [154]emmel@h-e-i.de * Heitml 主网页 [155]http://www.heitml.com * Heitml 次网页 [156]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 中嵌入了完整的第四代程式语言, (e.g. , , 和 标签), 和对含整数、实数、布林值、字串和元组 (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 资料。 14.5 PostgreSQL 的 America On-line AOL 万维网伺服者 AOLserver 2.3 版是一个免费的商业万维网伺服者,它可连接到 6.2.1 或以上的 PostgreSQL。欲知详情,请看 * AOL 万维网伺服器 [157]http://www.aolserver.com 14.6 PostgreSQL 的疑难 / 计划追踪系统程式工具(Problem/Project Tracking System Application Tool for PostgreSQL ) 它在 * [158]http://www.homeport.org/~shevett/pts/ 14.7 把 dbase 的 dbf 档转换给 PostgreSQL dbf2msql 程式和 mSQL 及 PostgreSQL 合作愉快。你可在以下方找到 * [159]ftp://ftp.nerosworld.com/pub/SQL/dbf2sql/ * [160]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 写成。 * [161]M.Boekhold@et.tudelft.nl 你也可使用 python 的方法 (method) 在读入 dbf 档及载入到 postgre 资料库 。 * See [162]http://www.python.org 15. PostgreSQL 的互联网资料库设计/完成工具□EARP * [163]http://www.oswego.edu/Earp * [164]ftp://ftp.oswego.edu 的‘pub/unix/earp’目录。 15.1 EARP 是什麽? 是 David Dougherty 的“Easily Adjustable Response Program”。EARP 是一 个利用 PostgreSQL 资料库系系的网上资料库设计/实施工具。功能包括∶ * 一个视觉化的设计系统。 * 一个 sendmail 介面。(可收发电邮) * 一个增强了的保安机制。 * 一个 cgi 驱动程式。 15.2 施行 EARP 主要施行一个在 http 监控程式下执行的 CGI 二元档来存取资料库伺服器 。所有设计工具都建立在驱动程式中,除在网上,再没有地方需要作出设计。那 些工具本身需要一个支援图像的浏览器,所设计出来的物件独立於编写方法,而 是根据个人好恶。 15.3 你需要什麽来执行 EARP EARP 大概可无须或只需一些移植工作便可在不同的平台执行。已知可用的平台包 括∶ * Solaris 2.5 * Linux 1.2.13+ * GNU C++ * PostgreSQL (1.01 / 1.02 版) * netsite 伺服器 * NCSA httpd * GNU C++ * PostgreSQL (1.01 / 1.02 版) * NCSA httpd * Apache httpd 目前(1.3)版本的 Earp 的设计是建基於 1.01/1.02 版的 PostgreSQL 的 libpq。如果你使用版本更新的 Postgres,请预期你需要做一些移植的工作来使 它运作正常。在开发中的版本(Earp 2.0),libpq 会以模组的形式支援。 15.4 它如何工作? EARP 的其中一个主要特色是它使用物件导向的方法来产生用以连接资料库的 html 页。大部分页面都包含多个物件。每个物件都以某些工具产生及取得一个名 字,这些物件会被页面工具 (page tool) 以一个可呼叫的顺序 (callable sequence) 连结在一起。物件可在其 他页面中重用。有关 HTML、查询、读取使 用者输入、可延伸的查询和输入物件格式化 (Extendable Formatting of Query and Input objects)、把现有物件连结成其他物件的基本工具皆有提供。更先进 工具包括电邮工具和多流查询工具。 EARP 的另一个特色是先进的保安。有多种方法限制存取 EARP 系统的不同部分。 为达到先进的保安,EARP 检查每一个连接,以确定每个连接人员的身分 (ids) 及群组 (groups)。不同部分的存取独立定义,最终 的组合决定结果能否存取 EARP 的一个特定部分。此外,实施这些保安特色只需一个支援基本(或更佳)使 用者认证 (user authentication) 的 http 伺服器。 15.5 何处取得 EARP? EARP 可籍匿名 (anonymous) ftp 取得∶ * [165]ftp://ftp.oswego.edu 的 'pub/unix/earp' 目录。 16. PHP Hypertext PreProcessor□PostgreSQL 的伺服器端 html 嵌入命令稿语言 万维网介面工具位於∶ * [166]http://www.php.net * [167]http://www.vex.net/php 前身为 Professional Home Pages (PHP 3) 而现在称为 PHP Hypertext Pre-Processor * 很多国定都有映射站台,名为 www.COUNTRYCODE.php.net * [168]http://www.fe.de.php.net * [169]http://www.sk.php.net * [170]http://php.iquest.net/ 问题可电邮到∶ * [171]rasmus@lerdorf.on.ca PHP 3 是一个伺服器端 html 嵌入命令稿语言。它让你在你的 .HTML 档中加入简 单的命令稿,像 JavaScript 般。不过,和 JavaScript 不同,PHP 独立於伺服 器。JavaScript 是一种客户端的 html 嵌入命令稿语言,而 PHP 3 是伺服器端 语言。PHP 3 的概念和 Netscape 的 LiveWire Pro 产品相似。如果你有足够金 钱,你可在其中一个被支援的操作系统执行 Netscape 的 Commerce Server,你 大致可看到 LiveWire Pro。如果你喜欢快速更新又包括源程式码的自由软件,你 大概会喜欢 PHP 3。 16.1 主要特色 标准的 CGI,FastCGI 和 Apache 模组支援 作为一个标准的 CGI 程式,PHP 3 可在执行任何 Unix 互联网伺服器的任何 Unix 电脑上安装。加上对新 FastCGI 标准的支援,PHP 3 可从中得到速度上的改善。作为一个 Apache 模组, PHP 3 变成 CGI 程式外 一个强劲及快如闪电的选择。 * 存取记录 (Access Logging) 籍著 PHP 3 的存取纪录功能,用者可自行维护 命中数字 (hit counting) 及作出纪录。它完全不利用系统中央的纪录档, 而且即时监察存取过程。Log Viewer Script 提供了个别用者拥有的页面的 存取摘要。此外,本套件可被设定为在每页产生一个显示存取资料的注脚。 本页的结尾就有一个例子。 * 存取控制 (Access Control) 一个以万维网为基础的内建设定画面处理取控 制设定。用者可以为某人拥有的所有或个别网页建立规则,限制谁人能及他 能怎样阅读有关网页。根据用者的网域、浏览器、电邮地址甚至来源文件 (referring document),网页可以密码保护、完全看不到、禁止纪录 (logging disabled) 和做其他事。 * Postgres 支援 Postgres 是一个先进的自由 RDBMS。利用 PHP 3,用者可直 接在 .HTML 档 中嵌入 Postgres95 和 PostgreSQL 的 SQL查询。 * RFC-1867 档案上传支援 档案上传是 Netscape 2.0 的新功能。它让用者把 档案上传到万维网伺服器。使得这事行可的原因,是实际的 Mime 解码由 PHP 3 提供,它可提供额外的框架,在收到上传的档案後做些有用的事。 * HTTP 为基础的认证控制 PHP 3 可用来在 Apache 万维网伺服器中建立自定 的以 HTTP 为基础的认证机制。 * 变数、列阵、相联列阵 (Associative Arrays) PHP 3 支援变数形态、列阵 、甚至如 Perl 般的相联列阵。它们可籍 GET 或 POST 方法在网页间传递。 * 条件式、While 回圈 PHP 3 支援一种类似 C 的全功能手稿语言。你可使用 if/then/elseif/else/endif 条件式、while 回圈和 switch/case 叙述来指 引你的 html 页的显示的逻辑流向。 * 延伸常规表达式 常规扛表达式常被用於模式配对、模式替换 (pattern substitutions) 和一般的字串处理。PHP 3 支援所有常用的常规表达式运作 。 * 原始 HTTP 标头控制 要进行高阶网站设计,使网页视情形传送自定 HTTP 标 头的能力是必须的。一个惯常用法是传送一个 Location: URL 标头来把客户 端传送到其他 URL。它也可用於关掉快取或处理网页页首上的“上次更新” 标头。 * 即时 GIF 图像产生 PHP 3 支援 Thomas Boutell 的 GD 图像函式库,使它 可即时产生 GIF 图像。 * ISP“安全模式”支援 PHP 3 支援一个独有的“安全模式”(Safe Mode),使 得在同一伺服器上有 多个用户使用 PHP 命令稿也没安全问题。 * 它是自由的! 最後一个重要的特性∶这套件是完全自由的。它以 GPL 型式 授权,让你可 为任何目的使用这软件,包括商业用途。欲知详情,请参看 GNU General Public License 文件。 16.2 名誉 *这程式大部分是在及为多伦多大学 (the University of Toronto)开发的。非 常感谢大学 Network Development 的 Lee Oattes 具建设性的批评。 *PostgreSQL 支援的程式码是 Adam Sussman 写成的。 * [172]asussman@vidya.com *无数其他曾协助测试及除错的人。 16.3 PHP 3□简史 初出现时,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 档中的简单电脑语言。虽然仍坚持原有的简称,但它已再不合用。现在 ,PHP/FI 用在整个网站的情况远多过个人网页设定。不论名叫什麽,它籍著把所 简单的命令稿直接嵌入 HTML 档中,消除大量小型 Perl cgi 程式的需要。这样 会加快你的网页,因为 fork 多次 Perl 的困扰已经消除。它也简化了管理大型 网站的工作,因为你可把网页的所有部分放在一个 html 档中。加上多种资料库 的支援,可使用资料库的网的开发变得简单。很多人觉得嵌入查询比分别建立 HTML 和 CGI 档简单得多。 在这文件中,任何提及 PHP、FI 或 PHP/FI 的地方都指同一事物。PHP 和 FI 只 有概 念上的分别。它们可在同一源程式码散布中建立。现在,PHP/FI 已改名为 PHP 3。 16.4 那麽,我能用 PHP/FI 做什麽? 如果你使用 PHP/FI,你首先会注意到它在页尾加上这网页曾被浏览过多少次的资 料(如果你在在编译时选取了 access logging)。这只是 PHP/FI 所做的一小部 分。它的另一个重要角色是作为一个表格直译 cgi 程式 (form interpreter cgi),这也就是 FI 的意思。例如,如果你在一个网页中建立了一个表格,你需 要 一个程式来处理表格上的资料。即使你只想把资料传送到另一网页,你也需要 cgi 程式的帮助。PHP/FI 使得取得和处理表格的资料极为容易。 16.5 一个简单的例子∶ 假设你有一张表格∶
你的 display.html 便可包括类似的东西∶ < ?echo "Hi $ name, you are $ age years old!

" > 就是这样简单!PHP/FI 自动为每个表格输入栏位产生一个变数。之後你便可在 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/FI 提供一种非常强劲的命令稿语言,能做到的事比以上简单的例子多很多。 欲知详情,请参阅有关 PHP/FI Script Language 的章节。 你也可使用 PHP/FI 来设定有什麽人能看到你的网页。这可使用一个内建的设定 画面做到。例如,籍著它你可指定只有某些网域的人可看到你的网页,或建立一 些规则来用密码保护某些网页。欲知详情,请参阅有关 Access Control 的章节 。 PHP/FI 也有能力接收任何依照 RFC-1867 规定的浏览器上传的档案。这特色使用 者能上传文字或二元档。籍著 PHP/FI 的存取控制和逻辑功能,你可全面控制淮 许谁上传及上传後做什麽。欲知详情,请参阅有关 File Upload 的章节。 PHP/FI 支援 PostgreSQL 资料库套件。它支援在 .HTML 档中嵌入 SQL 查询。欲 知详情,请参阅有关 PostgreSQL Support 的章节。 PHP/FI 支援 mysql 资料库套件。它支援在 .HTML 档中嵌入 SQL 查询。欲知详 情,请参阅有关 mysql Support 的章节。 16.6 CGI 改向 (CGI Redirection) Apache 1.0.x 摘要 使用 Apache 伺服器的 cgi 改向模组是执行 PHP/FI 的一个好方法。请注意你无 须担心改向模组,如果你使用 PHP/FI 的 Apache 模组版本 (Apache module version)。有两个这类改向模组。一个是 Dave Andersen 开发的∶ * [173]angio@aros.net 它可在以下地方找到 * [174]ftp://ftp.aros.net/pub/util/apache/mod_cgi_redirect.c 另一个已包括在 Apache 中,名为 mod_actions.c。这些模组极为相似,只是在 用法上有少许差别。两个都测试过,能和 PHP/FI 顺利合作。 查看 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/fi 分析。此外,如果你在 srm.conf 档的 DirectoryIndex 设定行加上 index.phtml,最上层的网页便会自动由 php 分析 ,如果你的 index 档名为 index.phtml。 Netscape HTTPD 你可籍 Netscape Server CGI Redirection 模组来指定自动把某些延伸档名的档 案的要求改向给 PHP/FI。这模组可在 PHP/FI 网页的 File Archieves 中找到。 套件中的 README 明确地解释了如何设定它来用於 PHP/FI。 NCSA HTTPD 目前,NCSA 并不支援模组,所以,要使用 cgi 改向的话,你要修改伺服器的源 程式码。一个对 NCSA 1.5 做这工作的嵌补在在 PHP/FI File Archieves 中找到 。 16.7 在指令行执行 PHP/FI 如果你建立了 CGI 版本的 PHP/FI,你只需在指令行输入 php.cgi filename, 而filename 是你想分析的档案。你可建立独立的 PHP/FI 命令稿,只需把手稿的 第一行写为类似∶ #!/usr/local/bin/php.cgi -q “-q”阻止印出 HTTP 标头。喜欢的话,你可不用请选择。 17. 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 由 by D'Arcy J.M. Cain and Pascal Andre 写成。 * PyGreSQL 的新网站 [175]http://www.druid.net/pygresql/ * D'Arcy 所维护的 [176]http://www.druid.net/~darcy/ * 旧网站在 [177]ftp://ftp.via.ecp.fr/pub/python/contrib/Database/PyGres95.REA DME * D'Arcy J.M. Cain [178]darcy@druid.net * Pascal Andre [179]andre@chimay.via.ecp.fr * Pascal Andre [180]andre@via.ecp.fr 17.1 如何取得 PyGres? 不同套件的主网站在∶ * Python [181]ftp://ftp.python.org:/pub/www.python.org/1.5/python1.5b2.tar. gz * PyGreSQL [182]ftp://ftp.druid.net/pub/distrib/PyGreSQL-2.1.tgz * 旧网站 [183]ftp://ftp.via.ecp.fr/pub/python/contrib/Database/PyGres95-1.0 b.tar.gz 无论如何,你应尝试寻找最接近你的映射站台。请参阅资料来源来找这些站台 。PygreSQL 也会在 Python 和 PostgreSQL 站台的 contrib 目录找到。 17.2 资料和支援 如果你需要这些套件的资料,请查看以下网页∶ * Python : [184]http://www.python.org/ * PostgreSQL : [185]http://epoch.cs.berkeley.edu:8000/postgres95/index.html * PyGreSQL [186]ftp://ftp.druid.net/pub/distrib/PyGreSQL-2.1.tgz * PyGreSQL 旧网站 : [187]http://www.via.ecp.fr/via/products/pygres.html 支援∶ * PyGreSQL 的通信论坛。要参加的话,你可电邮至∶ [188]majordomo@vex.net 在正文中写“subscribe pygresql name@domain” ,把“name@domain” 改为你自己的电邮地址。 * Python 的新闻组∶ newsgroup comp.lang.python * PyGreSQL : 如有臭□报告、意见、注释,请找 Andre [189]andre@via.ecp.fr 18. PostgreSQL 和万维网的闸路 (gateway) □WDB-P95 18.1 有关 wdb-p95 WDB-P95 - 一个由 J. Douglas Dunlop 开发的 PostgreSQL 资料库万维网介面 它在∶ * J Rowe 的新 WDB 在 [190]http://www.lava.net/beowulf/programming/wdb * 新版本的 WWW-WDB 在 [191]http://www.eol.ists.ca/~dunlop/wdb-p95/ * 有问题或想加入通信论坛 [192]dunlop@eol.ists.ca 这是一个修改了的 wdb-1.3a2,提供一个 PostgreSQL 到万维网的闸路。这版本 也需要一个能处理 HTML 列表的浏览器。原本的 wdb 无此要求,但要还原也不难 。 你可尝试 CASI Tape and Image Query。你可看看其 Form Definition File (FDF),它也用於产生 CASI Tape and Image Query,它包含了两个列表的联结 (join)。 这版本包含所有需要用於安装和执行以 WDB-P95 为 PostgreSQL 介面的档案。要 把这系统移植到其他资料库应颇为简单□如果它支援标准的 SQL 和拥有 Perl 介 面。 18.2 PostgreSQL 伺服器、pgperl 和 httpd 是否需在同一电脑? 否□PostgreSQL 不需在同一电脑。因 WDB-P95 由 httpd 呼叫,它们要在同一部 电脑。又因为 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 列表,所以最好有一新最新的万维网客户。) 19. "C", "C++", ESQL/C 语言介面和 PostgreSQL 的逐位运算元 (Bitwise Operators) 19.1 "C" 介面 它已包含在散布中,名为‘libpq’。和 Oracle OCI、Sybase DB-lib 、Informix CLI函式库相似。 19.2 "C++" 介面 它已包含在散布中,名为‘libpq++’。 19.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 API 应名为 egpc 。) 它在 * PostgreSQL 的 ESQL/C 已包含在散布中。 * 主网站 [193]ftp://ftp.lysator.liu.se/pub/linus * 电邮∶ [194]linus@epact.se 19.4 PostgreSQL 的逐位元运算元 逐位元运算元由 Nicolas Moldavsky 写成 * [195]nico@overnet.com.ar 实践逐位元运算(AND、OR、XOR、位元补数 (bitwise complement))的 pgsql “C”函式。可藉 anonymous FTP 得到∶ * [196]ftp://ftp.overnet.com.ar/pub/utils/linux/bitpgsql.tgz 包括了 Linux 的 Makefile。 20. PostgreSQL 的日文假名码 (Kanji Code) 它在以下网址∶ * [197]ftp://ftp.sra.co.jp/pub/cmd/postgres/ 21. 移植 PostgreSQL 到视窗 95 / 视窗 NT 正有人在移植到视窗 95 / 视窗 NT。移植工作使用 gcc、gmake 的 视窗 NT/95 版。要在 win32 编译源程式码,你需要 gnu-win32。GNU gcc 的 win32 版已出 现。请参阅以下网页∶ * [198]http://www.cygnus.com/misc/gnu-win32 在这网页取得 cdk.exe 档(gnu-win32 的自我解压档) (译按∶此工具已改名 为 cygwin,网址为 [199]http://sourceware.cygnus.com。) 移植工作也可以以下的“Unix-Emulator on NT”工具进行 * [200]http://www.softway.com 22. 通信论坛 22.1 取得免费电邮户口 便宜可贪□在以下地方取得免费电邮 * 在 Yahoo [201]http://www.yahoo.com 掣动 e-mail * In Lycos [202]http://www.lycos.com 掣动 new e-mail accounts * In hotmail [203]http://www.hotmail.com 掣动 new e-mail accounts 订阅 PostgreSQL 通信论坛,而 Yahoo 有一个附加特色,会为 PostgreSQL 电邮 建立独立的目录,免致扰乱你其他的电邮。择选目录 Email- > Options- > Filters 及拣选 seperate folder for email。你可用这个电邮户口在世界任何 地方收发电邮,只要你能上网。 如果你有其他电邮,你可用“Mail Filters”来自动把 PostgreSQL 邮件放到独 立的目录,以免混乱。 22.2 英文通信论坛 请参阅主网页的 Mailing Lists 项目∶ * [204]http://www.postgresql.org/ * 把问题电邮至∶ [205]pgsql-questions@postgresql.org * 开发人员 [206]pgsql-hackers@postgresql.org * 有关移植的问题 [207]pgsql-ports@postgresql.org * 文件问题 [208]pgsql-docs@postgresql.org 你会在一日之内从收到答案或回覆! 你也可订阅通讯论坛。请参阅以上‘取得免费电邮户口’一节。要订阅或停止订 阅,电邮至 * [209]pgsql-questions-request@postgresql.org * [210]pgsql-hackers-request@postgresql.org * [211]pgsql-ports-request@postgresql.org * [212]pgsql-docs-request@postgresql.org 讯息的正文只可有一行 subscribe (或) unsubscribe 22.3 通信论坛存库 通信论坛也以 html 格式存库在以下地方∶ * 经 MHonarc 再经 WWW 的每日目录 [213]http://www.postgresql.org/mhonarc/pgsql-questions * [214]ftp://ftp.postgresql.org 目录 /pub/majordomo 22.4 西班牙文通信论坛 目前有一个「非官方」的西班牙文 PostgreSQL 通信论坛。请参阅以上有关‘取 得免费电邮户口’一节。要订阅的话,用者需电邮至∶ * [215]majordomo@tlali.iztacala.unam.mx 讯息的正文只可有一行 inscripcion pgsql-ayuda 23. 文件和参考书 23.1 用户指引和说明书 PostgreSQL 散布中已包括以下各项的 postscript、HTML 格式 和 unix man-pages。如果你能上网,你可在以下地方找到下列文件∶ [216]http://www.postgresql.org/docs * "Installation Guide" * "User Guide" for PostgreSQL * "Implementation Guide" 详细说明 PostgreSQL 资料库的内部运作 * 线上说明书 * HTML 格式的线上说明书 * Postscript 格式的线上说明书,用以列印 23.2 线上文件 * 内建资料型态和运算元的名单和描述 这是6.4 版的 PSQL 指令的一部分 * 支援的 SQL 关键字名单 在 /tools 目录中有一个手稿做这工作 * 支援的句语名单 使用 psql \h 指令 * PostgreSQL 的基本的关联式资料库概念(实施方法)和数个线上例子(查询 ) 看 src/test 中的 regression 测试。你会找到 regress/sql 和 suite/*.sql 目录。 * PostgreSQL 指导 SQL 指导稿件在 src/tutorial 目录中 也请参阅本文件附录乙 [217]Appendix B 的“初学者 SQL 指导”。 23.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 and 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、恢复 (re covery)、并行性 (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 的书!到书店看看吧。 23.4 ANSI/ISO SQL 规格文件□SQL 1992, SQL 1998 ANSI/ISO SQL 规格文件可在下列网站找到∶ * [218]http://www.naiua.org/std-orgs.html * [219]http://www.ansi.org/docs 掣动档案 cat_c.html 及寻找“Database SQL”。 * SQL92 标准 [220]http://www.jcc.com 掣动档案 sql_stnd.html。 * ANSI/ISO SQL 规格 [221]http://www.contrib.andrew.cmu.edu/~shadow/sql.html 你会在此找 到 SQL 的参考资料。 23.5 ANSI/ISO SQL 1992 的语法 请参阅本文件的附录甲 [222]Appendix A 23.6 ANSI/ISO SQL 1998 的语法 SQL 1998 (SQL 3) 规格仍在开发中。参看本文件的“电子途径取得 SQL3 草案” [223]SQL 1998 23.7 初学者 SQL 导引 参看本文附录乙 [224]Appendix B 23.8 SQL92 的时态延伸 (Temporal Extension) * SQL92 的时态延伸的文件 [225]ftp://FTP.cs.arizona.edu/tsql/tsql2/ * 时态 SQL-3 规格 [226]ftp://FTP.cs.arizona.edu/tsql/tsql2/sql3/ 这目录中包括一个 SQL-92 语言规格的时态延伸。这种新语言被名为 TSQL2。 这里的语言规格是这语言的最终版本。 可直接联络 TSQL2 的主席∶ Design Committee, Richard T.Snodgrass, Department of Computer Science, University of Arizona, Tucson, AZ 85721, * [227]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 写成。 * [228]boehlen@iesd.auc.dk 各位可接触他以取得一份解释这翻译过程的论文。这是这程式的旧版本。新版本 在 * [229]http://www.cs.auc.dk/general/DBS/tdb/TimeCenter/Software (the TimeDB and Tiger systems). 23.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’一次取得一 个档案。在命令稿中的注解会在角括号内 < 即是如此 >。 % ftp gatekeeper.dec.com Connected to gatekeeper.dec.com. 220- *** /etc/motd.ftp *** Gatekeeper.DEC.COM is an unsupported service of DEC Corporate Research. <...this goes on for a while...> 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 (译按∶以上只是确保档案会被压缩及以二元格式传送,但没下传任何资料。另 外 迪吉多已被康柏 (Compaq) 收购。) 以下命令稿会取得最新版本的 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”。 23.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 Testing (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 标准的书。这些书提供一个比实际标准易理解的 描述。 有关的标准 (Related Standards) SQL 社群也对多个其他标准有兴趣。这节包括一些有关这些努力的指针。当更多 资料在网上出现後,这个名单也会更长。 * SQL Environments (FIPS 193) * Next Generation Repository Systems (X3H4) - 一份呼吁参与 "Developing Standards for the Next Generation Repository Systems" 的新闻稿。 23.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 物件模型,使它和 ODMG 提出的物件模型看齐。这努 力在 X3H2 和 ISO DBL 文章中描述过∶容纳 SQL3 和 ODMG。在 SQL3/OQL Merger 最近的更新版也可得到。 SQL3 时间表 有关 SQL3 的工作正在进行,但最终标准还有待数月後才出现。 * 国际性投票把 SQL3 基础从草案提升为委员草案 (Committee Draft, CD) 在 一九九六日秋季进行。 * 估计投票会带来大量评论 * 将会需要第二次 CD 投票 * Draft International Standard 投票多半会在 1998 年中进行 * 国际标准可在一九九九年中完成 ANSI 版的标准的编排也差不多。 23.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 功能 23.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) * 取得程序和状态的资料 此外,所有传统 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 支援工作。 23.14 第五部分□ ISO/ANSI SQL/结合 (Bindings) 为方便参考,程式语言的结合被抽出成独立的文件。目前的版本即是 SQL-92 的 动态和嵌入结合 (dynamic and embedded bindings) 的节录。 程式语言结合仍有不同的问题有待解决。 对传统程式语言来说,资料型态和 SQL-92 的可以互相对应。不过, SQL 物件 和程式语言变数之间的对应必须定义。 对物件导向语言来说,目前的 SQL 资料型态、SQL 物件模型和物件导向程式语言 之间 的对应关系必须定义。 物件模型需在公开这些之前稳定下来。 语言结合完成时会成为 SQL3 的一部分。 23.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 年成为标准。 23.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; 重覆 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. 23.17 第八部分□ISO/ANSI SQL MULTIMEDIA (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 24. PostgreSQL 的技术支援 如果你有任何技术上的问题式遇到困难,你可电邮至∶ * [230]pgsql-questions@postgresql.org 及预期在一日内收到回覆。因为互联网产品的用户□围很广,用户又互相帮助, 互联网可轻易为数以百万计用户提供技术支援。电邮支援比电话支援方便得多, 因为你可剪下和贴上错误讯息、程式输出等等,又可轻易传送到通信论坛 / 新闻 组。 在不久的将来,PostgreSQL 组织会向大小型公司出售技术支援,所得收益会用於 维护世界各地的多个映射站台(万维网 和 ftp)。也会用来印制文件、指引和书 籍以帮助顾客。 你也可在 Anderson、WGS(Work Group Solutions)等专业顾问行得到帮助。你 可找他们帮助,因为他们有很好的 C、C++ 专家( PostgreSQL 以 C 写成)。 * Work Group Solutions [231]http://www.wgs.com * Anderson Consulting [232]http://www.ac.com 25. 经济和商业方面 商业资料库缴交很多税项如联邦、州、销售、雇用、社会保障、医疗保险税、员 工健康保障、其他各程员工福利、市场推广和广告费。所有这些费用都不直接用 於资料库的开发。当你购买一个商业资料库,一部分的金额浪费於税款、研究开 发成本等地方。 而且,商业资料库需支付租金和购买 Unix 机器,方装和维护。所有这些成本都 转嫁给用户。 和商业资料库相比,PostgreSQL 拥有无需直接税项的优点,因为它是互联网制造 。一大群人为 PostgreSQL 的开发作出页献。例如,以一个假设的例子,如果在 美国有一百万间公司,而每间都捐十美元(对 PostgreSQL 来说物超所值),每 间便得到一千万元!!这就是互联网上软件开发的魔术。 目前,PostgreSQL 源程式有大约 200,000 行 C、C++ 程式。如果每行 C 程式码 值二美元,今天整个 PostgreSQL 便值四十万美元! 很多公司已开发大量 C、C++ 程式以作自用。因此,引入 PostgreSQL 源程式码 和与互联网上其他公司合作会对公司带来大量利益,节省时间和人力。 26. 其他资料库的名单 以下列出其他 Unix、Linux 的 SQL 资料库。 * 点选及到达 Applications->databases. [233]http://www.caldera.com/tech-ref/linuxapps/linapps.html * 点选及到达 Applications->databases. [234]http://www.xnet.com/~blatura/linapps.shtml * 资料库资源 [235]http://linas.org/linux/db.html 这是由 Linas Vepstas 写成的。 [236]linas@fc.net * 自由资料库名单 [237]http://cuiwww.unige.ch:80/~scg/FreeDB/FreeDB.list.html * Browne 的 RDBMS 名单 [238]http://www.hex.net/~cbbrowne/rdbms.html 由 Christopher B. Browne 写成。 [239]cbbrowne@hex.net * SAL 关联式 RDBMS 名单 [240]http://SAL.KachinaTech.COM/H/1/ * SAL 的物件关联式 DBMS 名单 [241]http://SAL.KachinaTech.COM/H/2/ * SAL's 的工具和其他资料库名单 [242]http://SAL.KachinaTech.COM/H/3/ * ACM SIGMOD 公众可取得的资料库软件索引 [243]http://bunny.cs.uiuc.edu/sigmod/databaseSoftware/ 27. 万维网搜寻提示 互联网非常广阔,拥有大量软件和下方有一个资讯海洋。它在全世界以每年百分 之三百的速度增长。据估计,全球有大约一千万个网站! 要搜寻资料,你需要雅虎、网景、Lycos 等搜寻引擎。去到雅虎,点选 search。 使用过滤选项 (filtering options) 来收窄你的搜寻要求。预设的搜寻动件是 “Intelligent search”,这比较一般化及列出所有可能性。点选“Options”选 择“EXACT phrase”搜寻、“AND”搜寻、“OR”搜寻等等。这样你可更快找到你 想要的讯息。此外,在 search 目录下,有 radio buttons 用以选择搜寻新闻组 、互联网站或雅虎网站。 28. 结论 在研究过所有自由和可取得源程式码的资料库後,发现到只 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 满足所有这些条件,在这情况下是一套适当 的软件。 29. FAQ□有关 PostgreSQL 的问题 请参阅一般性、Linux 和 Irix 的最新版 FAQ∶ * [244]http://www.postgresql.org/docs/faq-english.shtml 30. 版权通知 Copyright (c) 1997 Al Dev (Alavoor Vasudevan). All rights reserved. NO LIABILITY FOR CONSEQUENTIAL DAMAGES. In no event shall the author 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 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 31. 附录甲□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 ::= | | | | | | | | | | | | | | | | | | | | ::= !! (space character in character set in use) ::= " ::= % ::= & ::= ' ::= ( ::= ) ::= * ::= + ::= , ::= - ::= . ::= / ::= : ::= ; ::= < ::= = ::= > ::= ? ::= _ ::= | ::= | ::= [ ::= ] ::= | ::= | | | | | ::= ::= [ ( | )... ] ::= (!! See the Syntax Rules) ::= | ::= | ::= 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 [ ... ] [ ( ... [ ... ] )... ] ::= | ::= !! (See the Syntax Rules.) ::= ::= ( | | )... ::= [ ... ] ::= [...] ::= | ::= !! (implementation-defined end-of-line indicator) ::= B [ ... ] [ ( ... [ ... ] )... ] ::= 0 | 1 ::= X [ ... ] [ ( ... [ ... ] )... ] ::= | A | B | C | D | E | F | a | b | c | d | e | f ::= | |