HOWTO:Database-SQL-RDBMS HOWTO for Linux

作者︰Al Dev (Alavoor Vasudevan) [MAILTO] [email protected]

譯者︰曾達康 [MAILTO] [email protected]

二零零一年一月二日,41.0 版

轉為 Wiki: Ping (ping 'at' pingyeh 'dot' net), 2003 年 11 月 27 日


本文件是一份介紹如何在 Unix 系統快捷地建立一個 SQL 資料庫引擎 (Database Engine)

SQL 資料庫。



  1. 引言
    1. 量子 (Quantum) 電腦——量子物理學很有用
  2. 資料庫保安
    1. 用戶認證
    2. 依據主機控制存取
    3. 認證方法
    4. 存取控制
    5. 經 SSH 的保安 TCP/IP 連接
    6. Kerberos 認證
  3. PostgreSQL 的前端 GUI 工具(圖像使用者界面)
  4. PostgreSQL 的介面驅動程式
    1. PostgreSQL 的 ODBC 驅動程式
    2. PostgreSQL 的 UDBC 驅動程式
    3. PostgreSQL 的 JDBC 驅動程式
    4. PostgreSQL 的 Java
  5. PostgreSQL 的 Perl 資料庫介面 (Database Interface, DBI)
    1. PostgreSQL 的 PERL 介面
    2. Perl 資料庫介面 DBI
      1. 何謂 DBI?
      2. PostgreSQL 的 DBD 驅動程式
      3. DBI 的技術支援
      4. DBI 文件
      5. 視窗 95/NT 有沒有 DBI 支援?
      6. 商業支援及訓練
    3. 測試 Perl 介面
  6. PostgreSQL 管理工具
    1. PGACCESS - 管理 PostgreSQL 的 GUI 工具
    2. PostgreSQL 圖型介面查詢工具 GtkSQL
    3. 視窗中的 PostgreSQL 互動式查詢工具(WISQL 或 MPSQL)
    4. 名為 PSQL 的 PostgreSQL 互動式查詢工具(ISQL)
    5. MPMGR—PostgreSQL 的資料庫管理工具
    6. PgAdmin、PhpPgAdmin 工具
    7. PgBash - SQL shell 工具
    8. PostgreSQL 的 Webmin 工具
  7. PostgreSQL 用的中央處理器
  8. 只使用一個顯示器 (monitor) 來設定多台 PostgreSQL 電腦
  9. PostgreSQL 的萬維網應用程式伺服器
    1. PERL 萬維網應用程式伺服器
    2. PHP 萬維網應用程式伺服器
    3. Lutris Corp "Enhydra Enterprise" (Java)
    4. Zope(Python)
    5. OpenACS(Tcl 語言)
    6. C++, CORBA 萬維網應用程式伺服器
    7. 萬維網應用程式伺服器目錄
  10. PostgreSQL 的應用程式和工具
    1. PostgreSQL 的 4GL 萬維網資料庫程式—AppGEN 開發系統
    2. PostgreSQL 的互聯網介面—DBENGINE
    3. PostgreSQL 的 Apache 伺服器模組—NeoSoft NeoWebScript
    4. HTML 的伺服器端延伸 HEITML 和一個 PostgreSQL 的 4GL 語言
    5. PostgreSQL 的 America On-line AOL 萬維網伺服器
    6. PostgreSQL 的疑難 / 計劃追蹤系統程式工具
    7. 把 dbase 的 dbf 檔轉換至 PostgreSQL
    8. 把微軟 MDB 資料庫轉換至 PostgreSQL
    9. Zeos 客戶
    10. Java 的 Report Writer
  11. 資料庫設計工具—實體關係圖 (Entity Relation Tool) 工具
  12. 物理定律適用於電腦軟件!
  13. PostgreSQL 的互聯網資料庫設計/完成工具—EARP
    1. EARP 是什麼?
    2. 施行
    3. 它如何工作?
    4. 何處取得 EARP?
  14. PHP Hypertext PreProcessor—PostgreSQL 的伺服器端 html 嵌入命令稿語言
    1. 主要特色
    2. PHP—簡史
    3. 那麼,我能用 PHP 做什麼?
    4. 一個簡單的例子
    5. CGI 改向 (Redirection)
      1. Apache 1.0.x 摘要
      2. Netscape HTTPD
      3. NCSA HTTPD
    6. 在指令行執行 PHP
    7. PHPGem 套件
  15. PostgreSQL 的 Python 介面
    1. 如何取得 PyGres?
    2. 資料和支援
    3. 測試 Python 介面
  16. PostgreSQL 和萬維網的閘路 (gateway) — WDB-P95
    1. 有關 wdb-p95
    2. PostgreSQL 伺服器、pgperl 和 httpd 是否需在同一電腦?
  17. "C", "C++",ESQL/C 語言介面和 PostgreSQL 的逐位運算元 (Bitwise Operators)
    1. "C" 介面
    2. "C++" 介面
    3. ESQL/C
    4. PostgreSQL 的逐位元運算元
  18. PostgreSQL 的日文假名碼 (Kanji Code)
  19. 移植 PostgreSQL 到視窗 95 / 視窗 NT
    1. NT 版的作者
    2. 安裝 Cygwin 套件
    3. 設定 Bash 視窗
    4. 安裝 Andy Piper 工具
    5. 安裝 Ludovic Lange 的 Cygwin32 IPC 套件
    6. 安裝 PostgreSQL
  20. 通信論壇
    1. PostgreSQL 的電郵戶口
    2. 英文通信論壇
    3. 通信論壇存庫
    4. 西班牙文通信論壇
  21. 文件和參考書
    1. 用戶指引和說明書
    2. 線上文件
    3. 有用的參考書
    4. ANSI/ISO SQL 規格文件—SQL 1992, SQL 1998
    5. ANSI/ISO SQL 1992 的語法
    6. ANSI/ISO SQL 1998 的語法
    7. 初學者 SQL 導引
    8. SQL92 的時態延伸 (Temporal Extension)
    9. 第零部分—取得 ISO/ANSI SQL 文件
    10. 第一部分—ISO/ANSI SQL 當前情況
    11. 第二部分—ISO/ANSI SQL 基金 (ISO/ANSI SQL Foundation)
    12. 第三部分—ISO/ANSI SQL 呼叫級介面 (Call Level Interface)
    13. 第四部分— ISO/ANSI SQL 持久儲存模組 (Persistent Stored Modules)
    14. 第五部分— ISO/ANSI SQL/結合 (Bindings)
    15. 第六部分—ISO/ANSI SQL XA 介面專門化 (SQL/XA)
    16. 第七部分—時態 ISO/ANSI SQL
      1. 導言
      2. 個案研究—儲存現時資料
      3. 個案研究—儲存歷史資料
      4. 個案研究—投映 (Projection)
      5. 案例研究—連結 (JOIN)
      6. 個案研究—聚集 (AGGREGATES)
      7. 摘要
    17. 第八部分—ISO/ANSI SQL 多媒體 (SQL/MM)
  22. PostgreSQL 的技術支援
    1. 商業支援
  23. PostgreSQL 是什麼?
    1. 白皮書
  24. 經濟和商業方面
  25. 其他資料庫的名單
  26. 萬維網搜尋提示
  27. 結論
  28. FAQ—有關 PostgreSQL 的問題
  29. 本文件的其他格式
  30. 版權和授權
  31. 附錄甲—ANSI/ISO SQL 1992 語法
  32. 附錄乙—初學者 SQL 導引
    1. PostgreSQL 導引
    2. 互聯網 URL 指標
    3. 線上 SQL 指導
  33. 附錄丙—Linux 快速安裝指引
  34. 哪個較好?PostgreSQL 還是 MySQL?
    1. PostgreSQL 打敗 Oracle、IBM DB2、MS SQL server 和其他!!
    2. MySQL 和其他重覆的 RDBMSes
  35. 附錄丁—安裝 Midgard
    1. 測試 Midgard PHP 伺服器
    2. 保安 OpenSSL
  36. 何處取得 ?
  37. PostgreSQL 快速安裝指引
    1. 安裝和測試
    2. PostgreSQL RPMs
    3. Maximum RPM
    4. 例子 RPM
    5. 測試 PyGreSQL—Python 介面
    6. 測試 Perl—Perl 介面
    7. 測試 libpq, libpq++ 介面
    8. 測試 Java 介面
    9. 測試 ecpg 介面
    10. 測試 SQL 的例子—自訂資料型態和函數
    11. 測試 Tcl/TK 介面
    12. 測試 ODBC 介面
    13. 測試 MPSQL Motif-worksheet 介面
    14. 確認
    15. 緊急除錯
  38. 快速開始指引
    1. 資料庫建立、丟棄、改名
    2. 建立和丟棄用戶
    3. 建立和丟棄群組
    4. 建立、編輯和丟棄表格
    5. 建立、編輯和丟棄表格中的紀錄
    6. 改變目前的資料庫
    7. 備份與還原資料庫
    8. 資料庫保安
    9. 線上求助
    10. 建立激發 (Triggers) 和內儲程序 (Stored Procedures)
    11. PostgreSQL 文件
  39. PostgreSQL 支援超過 200 Gig 的超級資料庫
    1. 中央處理器種類—32 位元或 64 位元
    2. 多處理器
    3. 複製 (Replication) 伺服器
  40. 憑什麼相信 PostgreSQL?Regression 測試套件為用戶建立信心

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)運作。

下表列出晶片技術的進步及未來發展趨勢。

如你所見,硬件才重要和需要高科技,軟件則需要人手,但所用的科技就比較簡單。

另一方面,世上每國家都會發展軟件。事實上, 世上任何一個擁有一部低價電腦的人都可編寫軟件。

像 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. 資料庫保安

資料庫保安問題需在多個不同層面探討︰

2.1. 用戶認證

認證是後端伺服器和 postmaster 確保要求存取資料的用戶是否確為其人的過程。所有啟動 Postgres 的用者都與認證是後端伺服器和 postmaster pg_user 類別比較,以確定他們有權做想做的工作。 而用者真實身分的辨別工作以多個不同方法完成︰

2.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 插座的連接用以下格式的記錄控制︰

database 指定本紀錄用於哪個資料庫。all 代表它適用於所有資料庫。

authentication method 指定用戶在使用 Unix 插座時用來認證的方法。不同的方法容後詳述。

來自互聯網插座的連接用以下格式的記錄控制︰

TCP/IP 地址會 邏輯上 and'ed 到指定的 TCP/IP 罩和客戶的 TCP/IP 地址。如兩者相等,這紀錄會用於這個連接。如果一個連接符合超過一個紀錄, 檔案中的第一個紀錄會被使用。不論 TCP/IP 地址還是 TCP/IP 罩都是以分點的十進數格式 (dotted decimal notation) 表達。如果一個連接和所有紀錄都不符,reject 認證方法將會被使用。(參閱 認證方法

2.3. 認證方法

Unix 和 TCP/IP 插座都支援以下認證方法︰

以下認證方法只受 TCP/IP 插座支援︰

這裡有一些例子︰

2.4. 存取控制

Postgres 提供了限制其他用家存取自己資料的機制。

2.5. 經 SSH 的保安 TCP/IP 連接

你可用 ssh 來加密客戶和 Postgres 伺服器間的網絡連接。做得正確的話,這樣可形成一個保安的網絡連接。

[WWW] ssh 的文件提供了大部份開始時需要的資料。以加深了解。逐步解釋只需兩步。

經 ssh 形成一條保安通道︰ 逐步解釋只需兩步。

2.6. Kerberos 認證

Kerberos 是一個業界標準的保安認證系統,適用於經過公用網絡的分散式系統。

如何取得 Kerberos 認證系統並不隨同 Postgres 散佈。不同版本的 Kerberos 多以可供選擇的軟件的形式自作業系統廠商得到。此外,原程式碼的發行版本 (distribution) 可自 MIT Project Athena 得到。

有關 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),對用戶和服務命名作了以下假設(也請參閱以下表格)。

3. PostgreSQL 的前端 GUI 工具(圖像使用者界面)

網頁瀏覽器在未來將會成為最流行的前端 GUI。建議你把所有「祖傳」的視窗 95/NT 程式改寫為在網上執行的程式。

你要使用網上應用程式伺服器如 Enhydra (使用 Java)或 Zope (使用 Python)或 OpenACS

最佳網上命令稿 (script) 編寫(或編譯)語言是 PHP+Zend 編譯器。PHP 功能十分強勁,因為它把 Perl、Java、C++ 和 Javascript 的功能結合到一種語言中,而且可於所有作業系統—Unixes 和視窗 NT/95 執行。

排名以喜歡的程度為先後,最佳工具為

以最佳為先的語言選擇—

  1. Java,但它的程式執行得很慢,而且要授權費。C++ 比 Java 快五倍 !!

  2. Python(強大的物件導向命令稿語言)。

  3. PHP 萬維網伺服器命令稿加上 HTML、DHTML、Javascript 客戶端命令稿及

  1. Perl 命令稿語言使用 Perl-Qt 或 Perl-Tk

  1. 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 的綜合開發環境。

你也可在視窗 95 中使用 Borland C++ Builder、Delphi、Borland JBuilder、 PowerBuilder 經 ODBC/JDBC 驅動程式連接到 unix 電腦的 PostgreSQL。

4. PostgreSQL 的介面驅動程式

4.1. PostgreSQL 的 ODBC 驅動程式

ODBC 代表由微軟制定的‘Open DataBase Connectivity’。 它是從不同廠商的不同資料庫存取資料的流行介面。使用 ODBC 驅動程式寫成的軟件保證可用於不同資料庫,如 PostgreSQL、Oracle、Sybase 和 Informix 等。

4.2. PostgreSQL 的 UDBC 驅動程式

UDBC 是一種獨立於驅動程式管理員 (driver managers) 和 DLL 支援的靜態 ODBC 版本,用來直接把資料庫連接能力嵌入到應用軟件中。

4.3. PostgreSQL 的 JDBC 驅動程式

JDBC 代表‘Java DataBase Connectivity’。Java 是一種昇陽 (Sun Microsystems) 所開發的獨立於平台的程式語言。Java 程式設計師被鼓勵使用 JDBC 來撰寫資料庫程式,以增強程式在不同資料庫,如 PostgreSQL、Oracle、Informix 等之間的移植能力。如果你寫 Java 程式,你可在以下網站取得 PostgreSQL 的 JDBC 驅動程式。

JDBC 驅動程式已包括在 PostgreSQL 發行版本的 postgresql-jdbc*.rpm 套件中。

JDBC 的網頁、導引和 FAQ 在︰

請參考Java 測試 Java 介面 一節。

4.4. PostgreSQL 的 Java

Java 程式設計師會覺得這些對他們很有用。

請參考 Java 測試 Java 介面 一節。

5. PostgreSQL 的 Perl 資料庫介面 (Database Interface, DBI)

5.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 目錄。

5.2. Perl 資料庫介面 DBI

5.2.1. 何謂 DBI?

Perl 資料庫介面(DBI)是 Perl 語言的一個資料庫存取應用程式介面(API)。Perl DBI API 規格定義了一組函數、變數和慣例,以提供一個一致而獨立於實際所用資料庫的介面。 資料庫驅動程式(Perl DBI)的發起人為一定數量的商業資料庫引擎制定標準, 所以你只需花很少工夫便可從 Oracle 轉到 PostgreSQL。

5.2.2. PostgreSQL 的 DBD 驅動程式

在你安裝 DBD PostgreSQL (驅動程式)前,你要先安裝 DBI,從以下地方取得 DBI 驅動程式︰

在此取得 DBD-Pg

5.2.3. DBI 的技術支援

5.2.4. DBI 文件

這裡有一些 DBI 的資料來源。

POD 文件︰ POD 是嵌入到 perl 程式中用以“即場”解釋程式碼的一段文件, 用以給程式設計師和模組的用家提供有用的資料。DBI 和驅動程式的 POD 正越來越流行,要閱讀有關文件,請使用以下指令。

安裝了 Tk 模組的用家可能會對一個名為 tkpod,使用 Tk 的 POD 閱讀器有興趣。它會把 POD 編排到一個方便及可閱讀的形式。

也請看看

用家可能參加的通信論壇為︰

5.2.5. 視窗 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 模組。

5.2.6. 商業支援及訓練

PERL CLINIC : Perl Clinic 以合約形式為 Perl、DBI、DBD::Oracle 和 Oraperl 提供商業支援。這些支援是由 DBI 作者 Tim Bunce 工作的公司提供的。欲知詳情,請看︰

5.3. 測試 Perl 介面

請參閱 Perl 測試 Perl—PostgreSQL 介面一節

6. PostgreSQL 管理工具

6.1. PGACCESS - 管理 PostgreSQL 的 GUI 工具

PgAccess 是 PostgreSQL 的 Tcl/Tk 介面。它已經包括在 PostgreSQL 的發行套件中。你可能想從這網頁找出它有沒有新版本︰

pgaccess 的用法

PgAccess 的特色

PgAccess 視窗—Main window, Table builder, Table(query) view, Visual query builder.

Tables

Queries

序列 (sequence)

函數 (Function)

將來還會有以下改進

有關 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。

6.2. PostgreSQL 圖型介面查詢工具 GtkSQL

GtkSQL 是一個圖型介面查詢工具(像 PostgreSQL 的 psql)。它以 GNU GPL 發行。使用 Gtk+ 1.2.3 和 PostgreSQL 6.3 開發而成。

[WWW] GtkSQL 的主網站

它的主要特色包括︰

  1. 多個 SQL 暫存區

  2. SQL 關鍵字、表格名稱和欄位自動完成

  3. 簡易顯示表格定義

  4. PostgreSQL 和 MySQL 支援(而且容易加上其他資料庫)

[WWW] GtkSQL 目前的版本為 v. 0.3

6.3. 視窗中的 PostgreSQL 互動式查詢工具(WISQL 或 MPSQL)

MPSQL 提供給使用者一個圖像 SQL 介面控制 PostgreSQL。MPSQL 與 Oracle 的 SQL Worksheet 或微軟 SQL Server 的查詢工具 WISQL 類似。它有一個漂亮的 GUI 和指令記錄。你也可以剪下及貼上。它還有其他有助提高生產力的功能。

6.4. 名為 PSQL 的 PostgreSQL 互動式查詢工具(ISQL)

ISQL 是供文字指令行終端機使用的。這已包括在發行版本中,名為 psql。和 Sybase ISQL、Oracle SQLplus 十分相似。在 Unix 指令提示輸入‘psql’會出現 psql 提示。

非常使用者友善和易用。 可在外框命令稿 (shell script) 中使用。

6.5. MPMGR—PostgreSQL 的資料庫管理工具

MPMGR 為 PostgreSQL 是供一個圖像管理介面。你可在以下地方找到它︰

6.6. PgAdmin、PhpPgAdmin 工具

6.7. PgBash - SQL shell 工具

PgBash 的功能類似 psql。而且,PgBash 使用 bash 的代號 (alias)、函數、歷史編輯創造出一個靈活的互動操作環境,提供有用的功能。

[WWW] PgBash 的主網頁

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 的例子如下。

6.8. PostgreSQL 的 Webmin 工具

webmin 工具(透過可以是保安的網頁來管理 Unix 電腦)的最新版本(0.82 版)有一個 PostgreSQL 模組。你可使用這模組來新增用戶、群組、資料庫、表格,也可查閱表格。

你可在 [WWW] http://www.webmin.com/webmin 找到 webmin。

7. PostgreSQL 用的中央處理器

參閱 [WWW] CPU-Design-HOWTO以得到可用於 PostgreSQL 的中央處理器名單,本文也會提供有關中央處理器的詳情。

以下中央處理器 (CPUs)(32 位元和 64 位元)可執行 PostgreSQL。它們都運行 Linux。

以下為 GNU/GPL 開放原始碼處理器名單︰

以下為商業處理器名單︰

其他重要的處理器網站為—

8. 只使用一個顯示器 (monitor) 來設定多台 PostgreSQL 電腦

如果你不想花錢於硬件的選擇器,你可使用 VNC (Vitual Network Computing) 技術,來自電訊業巨人 AT T。 VNC 是 GPL 的,是一個自由軟件。籍著 VNC,你可在一個沒有顯示器的電腦執行 PostgreSQL 程式,而在遠端電腦的顯示器顯示出來!!不過,那些電腦必須以 Ethernet 網絡介面卡連接。VNC 可在 [WWW] 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 電腦。

請查看下列網址︰

在 yahoo 搜尋器中找出更多有“Server Switches”或“KVM Switches”的公司。

每個 PostgreSQL 資料庫伺服器最好用一部專用的 unix 電腦,以增強表現。任何其他程式/行程都不要在這電腦上執行。 閱讀你所住地方的報章的商業版找出有哪些商鋪售賣 Intel 電腦和 13 吋單色螢幕(十分廉宜的螢幕)。你只需要硬件,而不需微軟視窗 / DOS。資料庫伺服器不需要彩色顯示器,因為你可在一個彩色的個人電腦上遙控管理。

你可在網上商店買到單純的電腦硬件。你可在網上拍賣中找到好的價錢。

在以下地方取得 RedHat(或其他發行版本)Linux 的光碟︰

確保你購買的硬件被 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 選擇器,你可只用一個顯示器和一個鍵盤來控制多台主機。

9. PostgreSQL 的萬維網應用程式伺服器

有些應用程式伺服器可和 PostgreSQL 合作,開放原始碼還是商業版本都有。 著名的開放原始碼萬維網應用程式伺服器有以 Perl 為基礎的 SmartWorker、WIRM、 Velocigen、Enhydra(Java)和 Zope(Python),商業的則有 IBM Websphere、BEA Weblogic。

建議你使用保安的萬維網伺服器如 Apache + mod_ssl + OpenSSL。在 [WWW] http://www.c2.net/products/sh3 參閱 Redhat StrongHold 保安伺服器的資料。

萬維網應用程式伺服器可以所支援的程式語言分類。 你必須使用一個以你最喜歡的語言為基礎的萬維網應用程式伺服器。

萬維網應用程式伺服器的分類如下︰

9.1. PERL 萬維網應用程式伺服器

和“C”語言相似,Perl 語言已有很長壽命,而且 Perl 在未來一段很長時間還會被廣泛應用!在某些操作上,Perl 比 Java 快三倍(但 Java 在某些操作上也比 Perl 快)。 Java 是一個非常複雜的系統,既有虛擬機器,又有直譯器,使得它非常緩慢、不穩定和不可靠。 Perl 則簡潔、快速,更是物件導向。

此外,Perl 程式可輕易地編譯,以進一步改良表現。使用 Perl2Exe 這個指令列工具來把 perl 命令稿轉為可執行檔 [WWW] http://www.indigostar.com/perl2exe.htm

PERL 可使用以下萬維網應用程式伺服器

Perl 的商業萬維網伺服器

9.2. PHP 萬維網應用程式伺服器

PHP 可用以下萬維網應用程式伺服器

9.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 寫成,可於 [WWW] http://www.enhydra.org 取得。Enhydra 是一個開放原始碼專案, 但它以商業形式由 Lutris Corp 售賣和支援。請參閱 [WWW] http://www.lutris.com

[WWW] PostgreSQL with Enhydra 閱讀如何設定 PostgreSQL 和 Enhydra 的指導,也請參閱 [WWW] Setup database with Enhydra 以了解如何為 Enhydra 設定資料庫。

你可用 Borland 的 JBuilder 和 Enhydra 合作。JBuilder 在 [WWW] http://www.inprise.com 找到。

也請於 [WWW] http://www.linuxdoc.org/HOWTO/Enterprise-Java-for-Linux-HOWTO.html 參閱 Enterprise Java HOWTO。

9.4. Zope(Python)

Python 漸漸成為極流行的「純」物件導向命令稿語言。Zope 是一個萬維網應用程式伺服器,提供了 PostgreSQL 介面。Zope 可在 [WWW] http://www.zope.org 得到 Python 可在 [WWW] http://www.python.org 找到。

9.5. OpenACS(Tcl 語言)

OpenACS (Open ArsDigita Community System) [WWW] http://openacs.org 是一個用來建立可擴展、社群主導 (community-oriented) 網頁應用程式的先進工具箱。它依靠 AOLserver,一個網頁 / 應用程式伺服器,和 PostgreSQL,一個真正符合 ACID 的 RDBMS。它們是兩個和開放原始碼授權下的免費而高質的產品。

ACS 由 ArsDigita 編寫, [WWW] http://www.arsdigita.com,它們的 ACS (ArsDigita Community System) 嘗試盡量獨立於資料庫,雖然它原本以 Oracle 為基礎(因此 Open ACS 要花時間進行移植)。

也請參閱 [WWW] http://www.appserver-zone.com

9.6. C++, CORBA 萬維網應用程式伺服器

9.7. 萬維網應用程式伺服器目錄

參閱 [WWW] 萬維網應用程式伺服器 目錄,內有一份“黃頁”。

10. PostgreSQL 的應用程式和工具

10.1. PostgreSQL 的 4GL 萬維網資料庫程式—AppGEN 開發系統

AppGEN 可在此下載

AppGEN 是一種高階第四代程式語言和應用程式產生器 (application generator),用以產生以萬維網為基礎的程式。這些程式一般在互聯網或公司內聯網使用。 AppGen 程式以合乎 Common Gateway Interface (CGI) 標準的 C 命令稿 (C scripts) 寫成,大部分互聯網伺服器都可支援。

要使用 AppGen,你需要︰

PostgreSQL,關聯式資料庫系統

支援 CGI 的互聯網伺服器,如 NCSA 的 HTTPD

一個 ANSI C 編譯器,如 GCC

AppGEN 包括以下 Unix (Linux) 可執行程式︰

作者 Andrew Whaley 可以以下途徑接觸︰

10.2. PostgreSQL 的互聯網介面—DBENGINE

dbengine 是 Ingo Ciechowski 所寫的一個隨插即用的 PostgreSQL 互聯網介面。它在

有關 DBENGINE︰ dbengine 是互聯網與 Postgres95 之間的介面,只需花數分鐘, 它便可存取任何現存的資料庫。

PHP 讓你在文件中編寫類似 Perl 的語言,但不是真的 Perl,AppGEN 和 WDB-P95 需要你為每一個資料庫建立設定檔 (configuration files)——聽起來, 你似乎都要先學一類新的假語言 (meta language) 才能啟用。

和其他工具不同,你不需要學任何特別的程式或命令稿語言來使用 dbengine。也不會有每個資料庫都有設定檔的情況,所以你不需要熟習這些新結構。 不過,如果你想用到 dbengine 的完整功能,學習 Perl 會是一個好主意。

整個系統可籍處理一個附加的資料庫設定好, 它會包含有關如何理解你的資料庫存取的資料。你甚至可以指定虛假欄 (virtual fields),用以在資料顯示在螢幕之前作出即時計算。

10.3. PostgreSQL 的 Apache 伺服器模組—NeoSoft NeoWebScript

Apache 是一個有名的互聯網伺服器。一個 PostgreSQL 到 Apache 的介面模組位於—

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

10.4. HTML 的伺服器端延伸 HEITML 和一個 PostgreSQL 的 4GL 語言

heitml 是另一個 postgres 與萬維網間的介面。欲知詳情,請接觸

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 資料。

10.5. PostgreSQL 的 America On-line AOL 萬維網伺服器

AOLserver 2.3 版是一個免費的商業萬維網伺服器,它可連接到 PostgreSQL。欲知詳情,請看

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 開發網頁︰

雖然 AOLserver 是一個偉大的的互聯網伺服器,擁有優良的架構, 它的光芒在於它連接資料庫的能力。AOLserver 擁有自己的資料庫抽象層 (abstraction layer),讓你完全不需修改程式而連接到不同 RDBMS。這些 RDBMS 的連接是公用 (pooled)、持續 (persistent) 的,由不用的執行緒分享。 這容許很快的連結和有效運用資源。

AOLserver 擁有所有主要的 RDBMS 的驅動程式︰PostgreSQL、Oracle、Sybase、 Informix、Illustra、Solid、Interbase 和 MySQL。

10.6. PostgreSQL 的疑難 / 計劃追蹤系統程式工具

它在

10.7. 把 dbase 的 dbf 檔轉換至 PostgreSQL

dbf2msql 程式和 mSQL 及 PostgreSQL 合作愉快。你可在以下方找到

這程式由 Faculty of Electrical Engineering TU Delft, NL Computer Architecture and Digital Technique section 的 Maarten Boekhold 寫成。

你也可使用 python 的方法 (method) 在讀入 dbf 檔及載入到 postgres 資料庫。

10.8. 把微軟 MDB 資料庫轉換至 PostgreSQL

計劃中的 MDB Tools 是一組函式庫和公具程式,用於把微軟 Access 資料庫(mdb 檔)匯出至多用戶的資料庫,如 Oracle、Sybase、DB2、Informix、MySQL、PostgreSQL 之類。

10.9. Zeos 客戶

“Zeos”是一個用來開發和管理資料庫應用程式的軟件產品,用於開放原始碼 SQL 伺服器—MySQL、PostgreSQL 和 InterBase [WWW] http://www.zeos.dn.ua/eng/index.html

10.10. Java 的 Report Writer

Generic Report Writer 是一個目錄驅動的報告編寫器。它不是拖—放 (drag-and-drop) 介面。可用於 PostgreSQL、MySQL 和 Access。它也很可能可用於其他你有 Type 4 JDBC version 1 驅動程式的資料庫。它在 [WWW] http://www.geocities.com/SiliconValley/Ridge/4280/GenericReportWriter/grwhome.html

11. 資料庫設計工具—實體關係圖 (Entity Relation Tool) 工具

"DeZign for databases" ( [WWW] 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”在( [WWW] http://www.heraut.demon.nl)。

12. 物理定律適用於電腦軟件!

這章會說明科學在不同事物,如軟件、宇宙、原子、能量甚至你自己的創造過程中扮演如何重要的角色。也會說明為何科學知識在使用科學的產品前非常重要。

黃金定律是—「你不可用一件來歷不明的產品!!」這定律適用於所有東西— 資料庫系統、電腦系統、作業系統、宇宙甚至你的身體!即是說, 你要得到系統完整的源程式碼和資料。了解人體和人體內的原子的運作非常重要,因為 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) 是能量除以時間,單位是瓦或千瓦。

從以上方程式,很明顯增加 'n' 會大幅改善產品質素。n 越大功率也越大(用千瓦表示)。 你可以想像全互聯網有多少能量(以千焦耳計算) 和功率(以千瓦計算)專注於 Linux 和 PostgreSQL 一類系統!

很明顥,互聯網可連繫很多人,也就是說互聯網有大量能量和時間, 可用比軟件公司更短的時間產生更高質素的軟件。即使是微軟、IBM 等大公司也不可違抗物理定律,而必會向物理定律投降。

結論是︰因為科學的定律,‘開於原始碼’系統,像 PostgreSQL、Linux 會戰勝‘封閉原始碼’系統,和必會比它們優異。這是有科學根據的。 人類不應浪費時間創造太多重覆的軟件產品。

13. PostgreSQL 的互聯網資料庫設計/完成工具—EARP

13.1. EARP 是什麼?

是 David Dougherty 的“Easily Adjustable Response Program”。EARP 是一個利用 PostgreSQL 資料庫系系的網上資料庫設計/實施工具。功能包括︰

13.2. 施行

EARP 主要施行一個在 http 監控程式 (daemon) 下執行的 CGI 二元檔來存取資料庫伺服器。所有設計工具都建立在驅動程式中,除在網上, 再沒有地方需要作出設計。那些工具本身需要一個支援圖像的瀏覽器, 所設計出來的物件獨立於編寫方法,而是根據個人好惡。

13.3. 它如何工作?

EARP 的其中一個主要特色是它使用物件導向的方法來產生用以連接資料庫的 html 頁。大部分頁面都包含多個物件。每個物件都以某些工具產生及取得一個名字, 這些物件會被頁面工具 (page tool) 以一個可呼叫的順序 (callable sequence) 連結在一起。物件可在其他頁面中重用。有關 HTML、查詢、讀取使用者輸入、 可延伸的查詢和輸入物件格式化 (Extendable Formatting of Query and Input objects)、把現有物件連結成其他物件的基本工具皆有提供。 更先進工具包括電郵工具和多流查詢工具。

EARP 的另一個特色是先進的保安。有多種方法限制存取 EARP 系統的不同部分。為達到先進的保安,EARP 檢查每一個連接, 以確定每個連接人員的身分 (ids) 及群組 (groups)。不同部分的存取獨立定義, 最終的組合決定結果能否存取 EARP 的一個特定部分。此外, 實施這些保安特色只需一個支援基本(或更佳)使用者認證 (user authentication) 的 http 伺服器。

13.4. 何處取得 EARP?

EARP 可籍匿名 (anonymous) ftp 取得︰

14. PHP Hypertext PreProcessor—PostgreSQL 的伺服器端 html 嵌入命令稿語言

萬維網介面工具位於︰

PHP 也有一個名為 Zend 的編譯器,可大幅改善表現。首先你在開發、測試和除錯時使用 PHP 命令稿語言。當準備好正式使用時使用 Zend 編譯器產生可迅速執行的執行檔。

前身為 Professional Home Pages(PHP)而現在稱為 PHP Hypertext Pre-Processor

PHP 是一個伺服器端 html 嵌入命令稿語言。它讓你在你的 .HTML 檔中加入簡單的命令稿,像 JavaScript 般。不過,和 JavaScript 不同,PHP 獨立於瀏覽器。JavaScript 是一種客戶端的 html 嵌入命令稿語言,而 PHP 是伺服器端語言。PHP 的概念和 Netscape 的 LiveWire Pro 產品相似。如果你喜歡快速更新又包括源程式碼的自由軟件,你大概會喜歡 PHP 3。

14.1. 主要特色

14.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。

14.3. 那麼,我能用 PHP 做什麼?

如果你使用 PHP,你首先會注意到它在頁尾加上這網頁曾被瀏覽過多少次的資料 (如果你在在編譯時選取了 access logging)。這只是 PHP 所做的一小部分。 它的另一個重要角色是作為一個表格直譯 cgi 程式 (form interpreter cgi),這也就是首名中 FI 的意思。例如,如果你在一個網頁中建立了一個表格, 你需要一個程式來處理表格上的資料。即使你只想把資料傳送到另一網頁,你也需要 cgi 程式的幫助。PHP 使得取得和處理表格的資料極為容易。

14.4. 一個簡單的例子

假設你有一張表格︰

你的 display.html 便可包括類似的東西︰

就是這樣簡單!PHP 自動為每個表格輸入欄位產生一個變數。之後你便可在 ACTION URL 檔中使用這些變數。

在你找出如何使用變數之後的步驟就是在網頁中試用一些邏輯流程標籤。例如, 如果你想根據用者輸入顯示不同訊息,你可使用 if/else 邏輯。在上面的例子, 我們可改變 display.html,使得不同東西會根據用戶輸入顯示出來︰

PHP 提供一種非常強勁的命令稿語言,能做到的事比以上簡單的例子多很多。欲知詳情, 請參閱有關 PHP Script Language 的章節。

你也可使用 PHP 來設定有什麼人能看到你的網頁。這可使用一個內建的設定畫面做到。 例如,籍著它你可指定只有某些網域的人可看到你的網頁, 或建立一些規則來用密碼保護某些網頁。欲知詳情,請參閱有關 Access Control 的章節。

PHP 也有能力接收任何依照 RFC-1867 規定的瀏覽器上傳的檔案。 這特色使用者能上傳文字或二元檔。籍著 PHP 的存取控制和邏輯功能, 你可全面控制淮許誰上傳及上傳後做什麼。欲知詳情,請參閱有關 File Upload 的章節。

PHP 支援 PostgreSQL 資料庫套件。它支援在 .HTML 檔中嵌入 SQL 查詢。

PHP 也支援 mysql 資料庫套件。它支援在 .HTML 檔中嵌入 SQL 查詢。

14.5. CGI 改向 (Redirection)

14.5.1. Apache 1.0.x 摘要

使用 Apache 伺服器的 cgi 改向模組是執行 PHP 的一個好方法。 請注意你無須擔心改向模組,如果你使用 PHP 的 Apache 模組版本 (Apache module version)。有兩個這類改向模組。一個是 Dave Andersen 開發的︰

它可在以下地方找到

另一個已包括在 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 類型應類似︰

如果你使用 mod_actions.c 模組,你需在 srm.conf 檔中加上以下一行︰

如果你使用 mod_cgi_redirect.c 模組,你需在 srm.conf 檔中加上以下一行︰

不要同時使用 mod_actions.c 和 mod_cgi_redirect.c。

安裝及正確設定了這些 cgi 改向模組後,你只需把延伸檔名定為 .phtml, 便可以指定這檔案由 PHP 分析。此外,如果你在 srm.conf 檔的 DirectoryIndex 設定行加上 index.phtml,最上層的網頁便會自動由 php 分析,如果你的 index 檔名為 index.phtml。

14.5.2. Netscape HTTPD

你可籍 Netscape Server CGI Redirection 模組來指定自動把對某些延伸檔名的檔案的要求改向給 PHP。這模組可在 PHP 網頁的 File Archieves 中找到。套件中的 README 明確地解釋了如何設定它來用於 PHP。

14.5.3. NCSA HTTPD

目前,NCSA 並不支援模組,所以,要使用 cgi 改向的話,你要修改伺服器的原始碼。 一個對 NCSA 1.5 做這工作的嵌補在在 PHP 檔案存庫中找到。

14.6. 在指令行執行 PHP

如果你建立了 CGI 版本的 PHP,你只需在指令行輸入 php.cgi filename,而filename 是你想分析的檔案。你可建立獨立的 PHP 命令稿,只需把命令稿 (script) 的第一行寫為類似︰

“-q”阻止印出 HTTP 標頭。喜歡的話,你可不用這選擇。

14.7. PHPGem 套件

PHPGem 是一個 PHP 命令稿,用以加速編寫使用表格的 PHP 命令稿。它可用於不同的 SQL 伺服器,如 PostgreSQL、MySQL、mSQL、ODBC 和 Adabas。 你輸入表格欄位的描述和參數(欄位名稱、欄位的 on/off searching (?) 等等), PHPGem 輸出另一個使用那些表格的 PHP 命令稿(檢視/加/修改/刪除/重覆內容和搜索)。 PHPGem 可使用多層巢狀表格 (multi-level nested tables, ??)。PHPGem 容許你指定每個表格每個欄位每人旳存取控制。PHPGem 也支援影像。

PHPGem 在 [WWW] http://sptl.org/phpgem 找到。

15. 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 寫成。

15.1. 如何取得 PyGres?

不同套件的主網站在︰

無論如何,你應嘗試尋找最接近你的映射站台。請參閱資料來源來找這些站台。PygreSQL 也會在 Python 和 PostgreSQL 站台的 contrib 目錄找到。

15.2. 資料和支援

如果你需要這些套件的資料,請查看以下網頁︰

支援︰

15.3. 測試 Python 介面

請參考 PyGreSQL 測試 Python—PostgreSQL 介面 一節。

16. PostgreSQL 和萬維網的閘路 (gateway) — WDB-P95

16.1. 有關 wdb-p95

WDB-P95 - 一個由 J. Douglas Dunlop 開發的 PostgreSQL 資料庫萬維網介面 它在︰

這是一個修改了的 wdb-1.3a2,提供一個 PostgreSQL 到萬維網的閘路。 這版本也需要能處理 HTML 表格的瀏覽器。原本的 wdb 無此要求,但要還原也不難。

你可嘗試 CASI Tape 和 Image Query。你可看看其 Form Definition File (FDF),它也用於產生 CASI Tape 和 Image Query,它包含了兩個列表的聯結 (join)。

這版本包含所有需要用於安裝和執行以 WDB-P95 為 PostgreSQL 介面的檔案。要把這系統移植到其他資料庫應頗為簡單—如果它支援標準的 SQL 和擁有 Perl 介面。

16.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 表格,所以最好有一新近的萬維網客戶端。)

17. "C", "C++",ESQL/C 語言介面和 PostgreSQL 的逐位運算元 (Bitwise Operators)

17.1. "C" 介面

它已包含在發行版本中,名為‘libpq’。和 Oracle OCI、Sybase DB-lib、Informix CLI 函式庫相似。

17.2. "C++" 介面

它已包含在發行版本中,名為‘libpq++’。 請參考 libpq 測試 libpq, libpq++ 介面 一節。

17.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 包含以下軟件︰

它在

請參考 ecpg 測試 ecpg 介面 一節。

要使用 Vim 彩色編輯器編寫‘ecpg’檔(*.pgc),你要這樣做︰

你應該有一個 $HOME/.gvimrc 檔。否則請自己製造一個,請參考在 [WWW] http://metalab.unc.edu/LDP/HOWTO/Vim-HOWTO.html 的 Vim HOWTO 文件。

在 $HOME/.gvimrc 加上以下一行

現在如果你用

編輯檔案,你可得到依語法突出內文 (syntax highlight) 的顏色。

17.4. PostgreSQL 的逐位元運算元

逐位元運算元由 Nicolas Moldavsky 寫成

實踐逐位元運算(AND、OR、XOR、位元補數 (bitwise complement))的 pgsql“C”函式。可經匿名 FTP 得到︰

包括了 Linux 的 Makefile。

18. PostgreSQL 的日文假名碼 (Kanji Code)

它在以下網址︰

19. 移植 PostgreSQL 到視窗 95 / 視窗 NT

視窗 NT 版的 PostgreSQL 二元檔可在以下地方找到︰

下載可執行檔,將它解壓,並從第十三步開始跟從 安裝 PostgreSQL

如果你想重新編譯原程式碼,請跟從以下指示。移植到視窗 NT 要使用 Cygnus cygwin32 套件,它包括視窗 NT/95 的 gcc、gmake。

到此網頁取得 cdk.exe 檔(gnu-win32 的自我解壓檔) (譯按︰此工具已改名為 cygwin,網址為 [WWW] http://sourceware.cygnus.com。)

19.1. NT 版的作者

PostgreSQL NT 版的作者為—

19.2. 安裝 Cygwin 套件

  1. 下載

  1. 執行 full.exe,安裝到 c:\Unix\Root 目錄。

  2. 執行 Cygwin,鍵入‘mount --help’以閱讀文件。你可用 -f

19.3. 設定 Bash 視窗

安裝 Cygwin 套件後,請進行以下工作以設定工作環境︰

1. 安裝 Vi 編輯器‘Vim’。請參閱 [WWW] http://metalab.unc.edu/LDP/HOWTO/Vim-HOWTO.html

2. cygwin bash 的預定視窗是一個廿四行,底色為黑色的視窗。要設定 bash 視窗的底色和大小,按開始->控制台->MS DOS 主控台,把底色設定為黑色, 大小改為七十行。

(或)右擊視窗標題列,改變內容。

3. 編輯 c:\cygnus\cywinb20 中的 cygnus.bat 和作以下設定—

及編輯 /.bash_profile 加上這幾行

4. 要啟用指令列歷史編輯,鍵入—

bash$ set -o vi

使用 l、k、j、h,你可用 vi 指令編輯指令列歷史。你可重覆和修改之前的指令,以節省打字時間。

5. 你可用以下指令掛上磁碟機 / 目錄—

6. 用以下指令閱讀線上求助訊息—

19.4. 安裝 Andy Piper 工具

  1. cd c:/Unix/Root; bunzip2 cygwin-b20-local.tar.bz2

  2. tar -xvf cygwin-b20-local.tar

  3. cd /local/bin; sh check_cygwin_setup.sh

  4. 完成第四步後,你會看到以下訊息︰

    •  You don't have /bin would you like to mount cygwin as /bin?" 
       [ y/n ]   
       選‘n’,其他問題則選‘y’。
       
        

  5. mount c:/Unix/Root/cygwin-b20/H-i586-cygwin32/i586-cygwin32/bin

  1. cd c:/Unix/Root/cygwin-b20/H-i586-cygwin32/i586-cygwin32; mkdir

  1. cp -R /local/{ bin,libexec,share,man,etc,sbin,info,include }

19.5. 安裝 Ludovic Lange 的 Cygwin32 IPC 套件

  1. tar -zxvf cygwin32_ipc-1.03.tgz

  2. cd cygwin32_ipc-1.03/src and run 'make'

  3. 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 
       
        

19.6. 安裝 PostgreSQL

  1. 下載最新的 PostgreSQL 源程式碼

  2. Postgres 把所有檔案當作二元檔,所以會遇到 lf/cf

  1. 把 Postgres 源程式碼拷貝到 c:/Postgres/Source 目錄,之後

  1. mv postgresql-6.5.3 pgsql

  2. 現在掛上各個目錄—

    •  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 
       
        

  3. mkdir -p /usr/local/pgsql/{bin,include,lib,data}

  4. cd /usr/src/pgsql/src/win32

  5. 拷貝標頭檔—

    •  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 
       
        

  6. ln -s /usr/local/lib /usr/src/pgsql/src/backend/libpostgres.a

  7. cd /usr/src/pgsql/src, 之後執行 './configure'

  8. make > make.txt 2> 1

  9. make install > make.install.txt 2> 1

  10. cp /usr/local/pgsql/lib/pq.dll /usr/local/pgsql/bin

  11. 在 make install 之後你要把 bin 和 lib 目錄中的文字檔轉換,以清除 cr/lf

  1. 在 / 目錄使用任何編輯器產生 .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 
       
        

  2. source /.bashrc, 之後執行 'initdb --username=xxxx'

  1. 編輯 /usr/local/pgsql/data/pg_hba.conf 檔,如︰

    •  host        all     163.17.11.109   255.255.255.0   trust 
       
        

  2. ipc-daemon.exe

  3. postmaster -i

  4. 執行 ' psql -h host_name template1'

20. 通信論壇

20.1. PostgreSQL 的電郵戶口

以下地方取得免費電郵

訂閱 PostgreSQL 通信論壇,而 Yahoo 有一個附加特色,可為 PostgreSQL 電郵建立獨立的目錄,免致擾亂你其他的電郵。擇選目錄 Email- Options- Filters 及揀選 seperate folder for email。 你可用這個電郵戶口在世界任何地方收發電郵,只要你能上網。

如果你有其他電郵,你可用“Mail Filters”來自動把 PostgreSQL 郵件放到獨立的目錄,以免混亂。

20.2. 英文通信論壇

請參閱主網頁的 Mailing Lists 項目︰

你會在一日之內從電郵收到答案或回覆。

你也可訂閱通訊論壇。要訂閱或停止訂閱,電郵至

訊息的正文只可有一行

subscribe

(或)

unsubscribe

20.3. 通信論壇存庫

通信論壇也以 html 格式存庫在以下地方︰

PostgreSQL 主網頁中也有一個專為 pgsql 問題而設的搜尋引擎。

20.4. 西班牙文通信論壇

目前有一個「非官方」的西班牙文 PostgreSQL 通信論壇。要訂閱的話,用者需電郵至︰

訊息的正文只可有一行

inscripcion pgsql-ayuda

21. 文件和參考書

21.1. 用戶指引和說明書

PostgreSQL 發行版本中已包括以下各項的 postscript、HTML 格式 和 unix man-pages。它們在 /usr/doc/postgresql* 目錄中。如果你能上網, 你可在以下地方找到下列文件︰ [WWW] http://www.postgresql.org/docs

21.2. 線上文件

21.3. 有用的參考書

還有數以百計有關 SQL 的書!到書店看看吧。

21.4. ANSI/ISO SQL 規格文件—SQL 1992, SQL 1998

ANSI/ISO SQL 規格文件可在下列網站找到︰

21.5. ANSI/ISO SQL 1992 的語法

請參閱本文件的附錄甲 A 附錄甲

21.6. ANSI/ISO SQL 1998 的語法

SQL 1998 (SQL 3) 規格仍在開發中。參看本文件的“電子途徑取得 SQL3 草案” 1998 SQL 1998

21.7. 初學者 SQL 導引

參看本文附錄乙 B Appendix B

21.8. SQL92 的時態延伸 (Temporal Extension)

這目錄中包括一個 SQL-92 語言規格的時態延伸。這種新語言被名為 TSQL2。 這裡的語言規格是這語言的最終版本。

可直接聯絡 TSQL2 設計委員會的主席︰Richard T.Snodgrass, Department of Computer Science, University of Arizona, Tucson, AZ 85721,

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 寫成。

各位可接觸他以取得一份解釋這翻譯過程的論文。這是這程式的舊版本。新版本在

(the TimeDB and Tiger systems).

21.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 有存貨及可得到︰

價錢 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 得到︰

如果你想以更方便快捷的方法訂購這標準,你需要附出代價。你可從以下組織以 US$308.00 訂購 ISO/IEC 9075:1992, Information Technology - Database Languages - SQL︰

我不知道這是否包括貨運費,但我估計(起碼)國際貨運會額外收費。 他們會頗為快捷地把文件寄給你,甚至會接受“主要的信用卡”。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。

Lynn Barra 也可以電話號碼 +1.202.626.5738 接觸以要求一份,不過郵寄似乎較有禮貌。

電子徑取得 SQL3 草案

最新版本(以寫本文時為準)的 SQL3(ANSI 和 ISO)草案(和所有附件) 可在以下站台以“anonymous ftp”或“ftpmail”得到︰

這目錄中有多個檔案,包括 PostScript 檔和純文字檔(格式不很美觀, 但可在螢幕上無須特別軟件閱讀)。

一般來說,你可找到類似名稱的檔案︰

完成新版本的文件後,“mar94”會改變來說明新的出版日期(例如“aug94”是估計在 “mar94”之後的版本)。

另外,為照顧不能從 FTP 取得檔案名單的讀者,我們在目錄中放置了一個名為

的檔案。這檔案(神奇!)包括了目錄內的檔案名單。

從 Ftp 直接獲得檔案

這是使用 FTP 的例子。它特別說明如何連接到 gatekeeper.dec.com, 到達放置這些檔案的目錄,及把檔案傳送到你的電腦。要注意的的電腦要有上網功能。 簽入名稱是‘ftp’,密碼則是你的電郵地址(即所謂‘anonymous ftp’)。指令‘type binary’是用來確保收到的檔案中沒有位元被截去。‘get’一次取得一個檔案。 在命令稿 (script) 中的注解會在角括號內 即是如此 。

沒有 ftp 支援的情況下取得檔案

Digital Equipment Corporation 和數間其他公司相似,提供 ftp email 服務。它可能需要數天才有回應,但它為不能直接上網的人提供了等同 ftp 的服務。伺服器的地址為︰

[MAILTO] [email protected]

以下命令稿會取得最新版本的 SQL3 文件的 PostScript 版︰

第一句指令告訴伺服器要把檔案傳給你,你需要把 “[MAILTO] [email protected]”換為你的電郵地址。這例子中的檔案 x3h2-93-091.ps 會以 uuencode 了的 compress 檔格式,分成三十四封電郵回覆。 如果你的環境沒有提供重組檔案的工具,你需要用下列命令稿以純文字模式取得檔案︰

但請注意,這 .ps 檔大概會被分為超過七十份來回覆!

要取得任何不是 x3h2-93-091.ps 的檔案,只需把“x3h2-93-091.ps” 換為你想要的檔案的名稱。要取得所有檔案的名單,把“x3h2-93-091.ps”換為 “dir”。

21.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 發展分為多部分的標準。這些部分包括︰

在美國,SQL3 的整體同時當作 ANSI 本土 (Domestic, "D") 專案和 ISO 專案處理。目前估計完成時間是一九九九年。

SQL/CLI 和 SQL/PSM 現正以最高速度處理,以作為 SQL-92 的修訂。在美國, 它們只被當作國際 (International, "I") 專案處理。 SQL/CLI 在一九九五年完成了。SQL/PSM 應該會在 1996 年未段完成。

除了 SQL3 外,還有一些附加的計劃︰

標準委員會和過程 (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 取得︰

除封面和對其他標準的參考外,SQL 標準的兩個版本完全一樣。 兩個版本都可從以下地方取得︰

除 SQL-92 標準外,現在還有一份技術正誤表 (Technical Corrigendum) (除錯)︰

TC 1 應該可從 ANSI 取得。TC 1 只有 ISO 版本——它適用於 ISO 和 ANSI 版本的 SQL-92。

除標準外,也有關於 1992 SQL 標準的書。這些書提供一個比實際標準易理解的描述。

有關的標準

SQL 社群也對多個其他標準有興趣。這節包括一些有關這些努力的指針。 當更多資料在網上出現後,這個名單也會更長。

21.11. 第二部分—ISO/ANSI SQL 基金 (ISO/ANSI SQL Foundation)

SQL3 努力的一個重要部分在 SQL 基金文件中︰

對物件導向能力有數個先決要求︰

這些能力已定義為 SQL/PSM 的一部分

現在有大量工作於煉製 SQL-3 物件模型,使它和 ODMG 提出的物件模型看齊。這努力在 X3H2 和 ISO DBL 文章中描述過︰容納 SQL3 和 ODMG。在 SQL3/OQL Merger 最近的更新版也可得到。

SQL3 時間表

有關 SQL3 的工作正在進行,但最終標準還有待數年後才出現。

ANSI 版的標準的編排也差不多。

21.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 提供了以下事項的國際標準︰

SQL/CLI 時間表

對標準的開發過程,SQL/CLI 正以驚人的速度處理中。

21.13. 第四部分— ISO/ANSI SQL 持久儲存模組 (Persistent Stored Modules)

SQL/PSM 籍以下功能擴充 SQL︰

除作為有價值的應用程式開發工具,SQL/PSM 為 SQL3 提供了物件導向能力的基礎支援。

複句和內存程序

複句和內存程序為主從環境提供多種好處︰

程序語言延伸

程序語言籍流向控制和其他編程技巧為 SQL 加上傳統程式語言的功能。

流向控制語句

程序語言延伸還包括其他編程技巧︰

此外,所有傳統 SQL 語言都可包含在多句的程序中。

外部函數與程序呼叫

一個經常在大量資料庫產品的 wish lists 中出現,而有部分實踐到的特色, 是呼叫用者所寫,在資料庫軟件外的程序。

這功能的好處是它讓資料庫(因此包括資料庫應用程式)使用豐富的程序和函數, 豐富得不能由一個標準組織定出。

SQL/PSM 時間表

SQL/PSM 發展迅速︰

21.14. 第五部分— ISO/ANSI SQL/結合 (Bindings)

為方便參考,程式語言的結合被抽出成獨立的文件。目前的版本即是 SQL-92 的動態和嵌入結合 (dynamic and embedded bindings) 的節錄。

程式語言結合仍有不同的問題有待解決。

對傳統程式語言來說,資料型態和 SQL-92 的可以互相對應。不過, SQL 物件和程式語言變數之間的對應必須定義。

對物件導向語言來說,目前的 SQL 資料型態、SQL 物件模型和物件導向程式語言之間的對應關係必須定義。

物件模型需在公開這些之前穩定下來。

語言結合完成時會成為 SQL3 的一部分。

21.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 年成為標準。

21.16. 第七部分—時態 ISO/ANSI SQL

時態 SQL 處理和時間有關的資料。其概念是在查詢資料時利用它在一個特定時間的情況。 時態 SQL 是一份由 Rick Snodgrass 在一九九四年十二月所寫,描述這概念的文件。

X3 宣佈確認一個新計劃,ISO/IEC 9075 Part 7: SQL/Temporal 是一份關於 SQL/Temporal 的新聞稿

有人質疑過 SQL 3 對附加時間支援的問題(如在 DBL R10-75 提議,要求 SQL 有新的部分來處理時間性的資料庫)。其論點是抽象資料形態 (ADT's) 足以支援時態。 在這資訊性的項目,我使用具體例子來論證擁有抽象資料形態的欄位不能處理時態查詢。 特別來說,很多時間性的查詢不是很難用 SQL 模擬,就是需在過程語言中使用嵌入式 SQL。其他選擇在 TSQL2,一個對 SQL-92 的時態延伸中提出了。

21.16.1. 導言

有效時間 (Valid-time) 的支援超出一個時態 ADT 的能力。使用後者, 一個欄位被指定為時態領域,如 DATE 或 INTERVAL(稍後會有例子)。籍著有效時間, 表格的每行隨著時間改變,因為現實改變了。聯繫到一個有效時間表格的某行的時間戳記 (timestamp),會被查詢語言理解為該行中各欄數值的組合有效的時間。 這個無須言明的時間戳記使得查詢可以簡單易明地表達出來。

21.16.2. 個案研究—儲存現時資料

The University of Arizona 的 Office of Appointed Personnel 在資料庫中有些資料,包括僱員名字、目前薪金和目前職位。 這些可用一個簡單的表格表達出來。

使用這個表格尋找一個僱員的薪金十分簡單。

現在 OAP 想再記錄出生日期。為些,在表格中加了一欄,產生以下綱目 (schema)︰

找尋一名僱員的出生日期個尋找薪金類似。

21.16.3. 個案研究—儲存歷史資料

OAP 想把受僱歷史電腦化。為此,他們加上兩欄, 一欄指出表示此行的資料何時開始有效,另一指出資料何時失效。

Employee (Name, Salary, Title, DateofBirth, Start DATE, Stop DATE)

以資料模型 (data model) 說,這些新欄位和 DateofBirth 毫無分別。不過, 它們的存在產生多種結果。

21.16.4. 個案研究—投映 (Projection)

要找出僱員目前的薪金會較為困難。

這句查詢比之前的複雜。元凶很明顯是新增的兩欄。OAP 想發出薪金歷史給各員工。 特別地,有需要找出每一名僱員在收受一個薪酬的最長時間。不幸地,用 SQL 不能做到。一名僱員在薪酬調整期間職銜可有多次變更。

要注意有三行 Bob 的薪金停留在 $70,000。所以,結果應該是 Bob 有兩行。

另一方法是把薪金和職級資料印給用者,而由用者找出他的薪酬何時變更。 這方法既不吸引,亦不實際。另一方法是盡量使用 SQL。

repeat

迴圈中找出重疊或相鄰而需要合併的時段。在最壞的情況,迴圈會執行 log N 次,N 指一連串重疊或相鄰的同薪金紀錄的數量。讀者可自行模擬查詢在以上例子的執行, 以驗證它的正確性。

第三種方法是使用 SQL 為表格開啟一個游標 (cursor)。為每個薪金管理一個各段落的鏈表 (linked list)。這鏈表開始時需為空白。

重覆至鏈表結束,印出日期和薪金。

如果游標是 ORDER BY Start,鏈表並非必要。

無論如何,一句簡單的查詢是不易用 SQL-92 的功能表達出這目的。使用 TSQL2 的話這查詢會很簡單。

21.16.5. 案例研究—連結 (JOIN)

一個更激進的方法是把綱目重整,把薪金、職級、出生日期資料分開, 從而避開抽取薪酬歷史時遇到的問題。(為方便計,我們以後的討論中不再考慮出生日期。)

Employee1 表格如下︰

這是 Employee2 表格。

改變之後,取得僱員薪金資料變得簡單。

但如果 OAP 想一個表格中包括薪金、職位的時段(即 OAP 想一個像圖 1 形式的表格)?一個方法是印出兩個表格,而讓用者找出有關組合。另一方法是完全使用 SQL。不幸地,這查詢要分析 Employee1 每行和 Employee2 的重疊情況,有四種可能出現。

正確找出所有情形是一件具挑戰性的工作。使用 TSQL2,進行一個具時態的連結就如人們所期望。

21.16.6. 個案研究—聚集 (AGGREGATES)

現在 OAP 被問及最高薪酬是什麼?加上時間前,這很簡單。

現在加上了薪金歷史,我們要找出不同時間最高薪金的歷史。問題當然是 SQL 並不提供具時態的聚集。簡單的方法是印出有關資料,用人手找出最大值。 另一個方法是取巧,把一個當時的 (snapshot) 聚集查詢轉化為不使用聚集的查詢, 再轉化為時態聚集。那個不使用聚集的查詢用於找出不大於它本身數值的薪金。

把這個查詢變為時態查詢並不顯淺。以下是一種方法。

這方法建立輔助表格。我們在這個表格中加上兩個時段中重疊部分的上、下部分。 之後我們把所有子查詢中找出的紀錄刪除,因此影響到 NOT EXISTS。最後我們從輔助表格中找出最長的時段,像之前我們找出薪金資訊般。 如大家所料,這樣的 SQL 句子執行時效率非常低,因為那些複雜的巢狀不等查詢。

第三個方法是盡量少用 SQL,而在主機上所用的語言中用游標找出最長的歷史。

使用 TSQL2 再次簡單直接。

21.16.7. 摘要

大部分資料庫應用程式都需要處理隨時間改變的資料。有效時間在 SQL 並不支援。很多時態查詢不是很難以 SQL 模擬,就是需要把 SQL 嵌入到程序語言中,因為 SQL 在資料模型和查詢語言結構中缺乏對有效時間的支援。

另一方面,我們示範出加上有效時間支援需要對 DBMS 施行作出一些改變, 但能戲劇性地簡化一些查詢,並使其他查詢變得有可能。將來也可於儲存結構、 索引方法的最佳化 (optimization)。而最佳化的策略可導致表現大幅提升。

隨著 SQL3 的一個新部分支援隨時間改變的資料,我們可以開紿處理這類應用,改良 SQL3 處理時態資料的能力。

-- Accredited Standards Committee X3, Information Technology 宣佈認可一個有關 SQL/Temporal 支援的新專案,ISO/IEC 9075 Part 7,並把有關工作交予 Technical Committee X3H2, Database。這個建議中的標準訂明將出現的 SQL3 標準的一個新部分,如第七部分 Temporal SQL 為 SQL 的一個延伸,在 SQL 資料庫環境支援存取和處理具時態的資料。下次 X3H2 會議定於一九九六年三月十一至十四日在堪薩斯 (Kansas) 舉行。

如有查詢,可郵寄往︰

現正尋求可能的專利和其他恰當的事項(版權、商標)。這把有關資料寄交︰

21.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 部分︰

有多個有關空間和地理資料的標準化的工作在進行中︰

22. PostgreSQL 的技術支援

如果你有任何技術上的問題式遇到困難,你可電郵至︰

及預期在一日內收到回覆。因為互聯網產品的用戶範圍很廣,用戶又互相幫助, 互聯網可輕易為數以百萬計用戶提供技術支援。電郵支援比電話支援方便得多, 因為你可剪下和貼上錯誤訊息、程式輸出等等,又可輕易傳送到通信論壇 / 新聞組。

22.1. 商業支援

PostgreSQL 組織也會向公司出售技術支援,所得收益會用於維護世界各地的多個映射站台 (萬維網和 ftp)。也會用來印製文件、指引和書籍以幫助顧客。他們的網址為 [WWW] http://www.postresql.org

另一間名為‘Great Bridge Corporation’正進行 PostgreSQL 的開發、銷售和支援。他們的網頁為 [WWW] http://www.greatbridge.com。它是一間由‘Landmark Communications corp’和其他投資公司設立的公共公司,專門向世界大企業大公司和售賣和支援 PostgreSQL。

你也可在 Redhat、Anderson、WGS(Work Group Solutions)等專業顧問行得到幫助。 你可找他們幫助,因為他們有很好的 C、C++ 專家( PostgreSQL 以 C 寫成)。

23. 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。

這隊伍會負責今後所有 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 的版權保護。

23.1. 白皮書

PostgreSQL 資料簡介︰

PostgreSQL 的白皮書在 [WWW] http://www.greatbridge.com 找到。

24. 經濟和商業方面

商業資料庫繳交很多稅項如聯邦、州、銷售、僱用、社會保障、醫療保險稅、 員工健康保障、其他各程員工福利、市場推廣和廣告費。 所有這些費用都不直接用於資料庫的開發,不用於改善資料庫的品質和技術。 當你購買一個商業資料庫,一部分的金額浪費於稅款、研究開發成本等地方。

而且,商業資料庫需支付租金和購買 Unix 機器,方裝和維護。 所有這些成本都轉嫁給用戶。

和商業資料庫相比,PostgreSQL 擁有無需直接稅項的優點,因為它是互聯網製造。 一大群人為 PostgreSQL 的開發作出頁獻。例如,以一個假設的例子, 如果在美國有一百萬間公司,而每間都捐十美元(對 PostgreSQL 來說物超所值),每間便得到一千萬元!!這就是互聯網上軟件開發的魔術。

目前,PostgreSQL 源程式有大約 250,000 行 C、C++ 程式。如果每行 C 程式碼值二美元,今天整個 PostgreSQL 便值五十萬美元!

很多公司已開發大量 C、C++ 程式以作自用。因此,引入 PostgreSQL 源程式碼和與互聯網上其他公司合作會對公司帶來大量利益,節省時間和人力。

25. 其他資料庫的名單

以下列出其他 Unix、Linux 的 SQL 資料庫。

26. 萬維網搜尋提示

互聯網非常廣闊,擁有大量軟件和下方有一個資訊海洋。 它在全世界以每年百分之三百的速度增長。據估計,全球有大約一千萬個網站!

要搜尋資料,你需要雅虎、網景、Lycos 等搜尋引擎。去到雅虎,點選 search。使用過濾選項 (filtering options) 來收窄你的搜尋要求。預設的搜尋動件是 “Intelligent search”,這比較一般化及列出所有可能性。點選“Options”選擇 “EXACT phrase”搜尋、“AND”搜尋、“OR”搜尋等等。 這樣你可更快找到你想要的訊息。此外,在 search 目錄下,有 radio buttons 用以選擇搜尋新聞組、互聯網站或雅虎網站。

27. 結論

在研究過所有自由和可取得源程式碼的資料庫後,發現到只有 PostgreSQL 是世上最成熟、最多人使用和全面的自由 SQL RDMS(物件關聯式)。

PostgreSQL 非常吸引,因為有很多工作已完成。它有 ODBC 和 JDBC 驅動程式,籍著這些,可以編寫獨立於資料庫的應用程式。用 ODBC 或 JDBC 驅動程式寫的 PostgreSQL 應用程式很容易移植到其他資料庫,如 Oracle、Sybase 和 Informix,反之亦然。

你可能會問「為什麼用 PostgreSQL?」答案是因為由零開始, 開發一個資料庫消耗大量時間,選擇一個滿足以下條件的資料庫系統合乎常識︰

一個

的資料庫系統,而只有 PostgreSQL 滿足所有這些條件,在這情況下是一套適當的軟件。 你可能會說‘PostgreSQL’是一個怪名。但我的看法是—為何改名?這世界會永遠使用 “PostgreSQL”!!

28. FAQ—有關 PostgreSQL 的問題

請參閱一般性、Linux 和 Irix 的最新版 FAQ︰

29. 本文件的其他格式

本文件以十一種不同的格式出版——DVI、Postscript、LaTeX、LyX、GNU-info、HTML、RTF (Rich Text Format)、純文字、Unix man pages 和 SGML。

本文件以一個名為“SGML-Tools”的工具寫成,它可在以下地方找到︰ [WWW] http://www.sgmltools.org 編譯程式後你會得到類似以下的指令︰

LaTeX 文件可轉換為 PHP 檔,只需使用 sgml2latex(和 dvips)產生 Postscript 輸出,及用 Acrobat distill( [WWW] http://www.adobe.com)處理該輸出︰

你也可用 Ghostscript 指令 ps2pdf。ps2pdf 提供了 Adobe 和 Acrobat Distiller 產品的幾乎所有功能︰它把 PostScript 檔轉為 Portable Document Format (PDF) 檔。ps2pdf 使用了一個細小的命令稿(批次檔),它啟動 Ghostscript,挑選一個名為 pdfwrite 的特殊“輸出設備”。要使用 ps2pdf,pdfwrite 設備需在編譯 Ghostscript 時在 makefile 中指定;詳情請參閱 Ghostscript 編譯的文件。

本文件位於︰

你也可在以下映射站台找到本文件︰

(譯按︰本文件的中文〔大五碼〕版可在 [WWW] http://www.linux.org.tw/CLDP/HOWTO/ 找到。而要產生中文文件,你需要 bg5sgmltools,可在 [WWW] http://www.linux.org.tw/CLDP/ 找到。)

要觀看 dvi 格式的文件,使用 xdvi 程式。在 Redhat Linux 中,你可透過 ControlPanel | Applications | Publishing | TeX 按鈕找到 tetex-xdvi*.rpm 套件,當中即為 xdvi 程式。

要閱讀 dvi 文件,執行指令︰

和使用滑鼠調整視窗大小。瀏覽時使用箭頭鍵、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 文件,執行指令—

注意︰本文件很長,如果你想印出這 postscript 檔,大約需要 113 頁。 (譯按︰gv 是 ghostscript 的一個前端界面,所以即使你只打算用 gv,你也要安裝後者。此外,在 OS/2 和視窗中並沒有 gv,只有 GSView,一個和 gv 功能差不多的程式。詳情請參關 [WWW] http://www.cs.wisc.edu/~ghost。)

你可使用 Netscape Navigator,Microsoft Internet Explorer,Redhat Baron Web Browser 或任何其他的萬維網瀏覽器來閱讀 HTML 格式的文件。

你可用 LyX,LaTeX 的一個 X-Window 前端介面來閱讀 LaTeX 和 LyX 檔。

30. 版權和授權

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.

31. 附錄甲—ANSI/ISO SQL 1992 語法

這檔案中包括這語言的 BNF 以深度為先的樹狀模掃 (depth-first tree traversal),大約在 27-AUG-1992 11:03:41.64 完成。這個特定版本所用的 BNF 是只用 ANSI 和 SQL2 的。

32. 附錄乙—初學者 SQL 導引

32.1. PostgreSQL 導引

SQL 導引也包含在 PostgreSQL 中散佈。SQL 導引手稿在 src/tutorial 目錄中。

32.2. 互聯網 URL 指標

初學者的 SQL 導引可在以下地方找到

有意見或疑難?電郵至

John Hoffman 也推薦以下網址︰

32.3. 線上 SQL 指導

到以下網頁取得線上 SQL 指導

33. 附錄丙—Linux 快速安裝指引

如果你計劃在 Linux 使用 PostgreSQL,而在安裝 Linux 時需要幫助,請參考在這附錄中指示的地方。它們包含以下主題︰

34. 哪個較好?PostgreSQL 還是 MySQL?

34.1. PostgreSQL 打敗 Oracle、IBM DB2、MS SQL server 和其他!!

PostgreSQL 在表現、速度、擴展性 (scalability) 和 可信性 (reliability) 各方面的標準測試中打敗 Oracle 8(和 8i)、IBM DB2、MS SQL server、Sybase、 Interbase 和 MySQL!

[WWW] http://www.aldev.8m.com[WWW] http://aldev.webjump.com 閱讀基準測試結果。

(譯按︰有關該測試結果,[WWW] 有不少人提出質疑

34.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 支援的功能如下—

MySQL 可在 [WWW] http://www.tcx.se 找到。

(譯按︰MySQL 已改以 GPL 發行。)

35. 附錄丁—安裝 Midgard

來自 [WWW] http://www.midgard-project.org/download/binaries 的 RPMS 目前不包括 PostgreSQL 支援,所以你要從原始碼 tar.gz 檔安裝。

下載 Midgard 原始碼 tar.gz 檔,閱讀 INSTALL.REDHAT 檔—

35.1. 測試 Midgard PHP 伺服器

要測試安裝是否成功請這樣做— 在你的文件根目錄中建立一個檔案。我通常稱它為 info.php,並在其間加上一行︰

在你的瀏覽器中載入︰[WWW] http://localhost/info.php

你會見到一頁漂亮的掫要,列出你的設定中所有資料。 你大概不會把這檔案放在在生產用的伺服器中,但為了開發時除錯和一般資料, 它會很方便。

35.2. 保安 OpenSSL

你可能要在 [WWW] ftp://ftp.deva.net/pub/sources/crypto/rsaref20.1996.tar.Z 取行 RSA 套裝軟件以啟用 SSL 加密。也請看看 Linux 光碟的 OpenSSL [WWW] http://www.openssl.org

如果你不想啟動 SSL(或你遇到困難),下載原始碼 Apache-Midgard RPM 和修改 *.spec 檔和刪去 SSL,再重見 RPM。

36. 何處取得 ?

你可從以下地方購買 Redhat Linux 光碟、Debian Linux 光碟或 Slackware Linux 光碟,從中找到 PostgreSQL 套件(原始碼和二元碼)︰

PostgreSQL 組織也售賣‘PostgreSQL CDROM’,內含完整的原始碼,許多 Unix 操作系統的可執行檔及完整的文件。

PostgreSQL 只含二元檔的發行版本 (distribution)︰

萬維網網站︰

以下為 ftp 站︰

PostgreSQL 的源程式碼也可從 sunsite unc 的映射站得到(全球有大約一千個)。它是在 Redhat Linux 發行版本 (distribution) 的 /pub/contrib/i386/postgresql.rpm 檔中。

37. PostgreSQL 快速安裝指引

這節會幫你在小於五分鐘內快速安裝和啟動這資料庫。

37.1. 安裝和測試

安裝、測試、確認和執行 PostgreSQL 的步驟 以 root 身份簽入

注意︰如果你看到一個‘postgres’使用者,你可能要備份和清除 postgres 的家目錄 postgres 和刪除這名用者,或把他改名為‘postgres2’之類。安裝時需要乾乾淨淨。

現在你可以在 pgaccess 或 psql 高速下達各種 SQL 指令了!!

在此閱讀所有 FAQ,使用者、程式設計員、管理手冊和指引。

37.2. PostgreSQL RPMs

此外,請看"[WWW] Installation Steps"。

PostgreSQL RPM 由 Lamar Owen 維護,位於 [WWW] [email protected][WWW] http://www.postgresql.org 可找到更多 PostgreSQL 的資料。

37.3. Maximum RPM

熟習 RedHat RPM 套件管理員以管理 PostgreSQL 安裝。在 [WWW] http://www.RPM.org 下載‘Maximum RPM’一書,找尋檔名 maximum-rpm.ps.gz。 在 Linux 使用 gv 指令閱讀它—

有一個 rpm2deb 可把 RPM 套件轉換為 Debian Linux 套件

37.4. 例子 RPM

測試 PostgreSQL 的各種介面需要例子。從以下地方安裝 PostgreSQL 例子目錄—

37.5. 測試 PyGreSQL—Python 介面

安裝 examples 套件,請參閱 RPM 例子 RPM,之後—

37.6. 測試 Perl—Perl 介面

安裝 examples 套件,請參閱 RPM 例子 RPM,之後—

注意︰如果以上指令失敗了請做如此做︰全域變數 @INC 要在包括 site_perl 目錄中的 Pg.pm 模組,所以要如下使用 -I 選項。

……你的 perl 已在存取 PostgreSQL 資料庫!!

要使用 perl 介面,請參閱 example.pl 檔。

37.7. 測試 libpq, libpq++ 介面

安裝 examples 套件,請參閱 RPM 例子 RPM,之後—

……你直接用 C/C++ 介面來存取 PostgreSQL 資料庫!!

37.8. 測試 Java 介面

安裝 examples 套件,請參閱 RPM 例子 RPM 和安裝以下東西。

……你直接用 Java 介面來存取 PostgreSQL 資料庫!

37.9. 測試 ecpg 介面

安裝 examples 套件,請參閱 RPM 例子 RPM,之後—

……你直接用嵌入式 SQL 來存取 PostgreSQL 資料庫!

37.10. 測試 SQL 的例子—自訂資料型態和函數

安裝 examples 套件,請參閱 RPM 例子 RPM,之後—

37.11. 測試 Tcl/TK 介面

Tck/Tk 的例子是 pgaccess 程式。 使用一個文字編輯器閱讀 /usr/bin/pgaccess 檔案—

37.12. 測試 ODBC 介面

  1. 請先取得 [WWW] win32 pgsql odbc 驅動程式

  2. 另外請參閱 /usr/lib/libpsqlodbc.a

37.13. 測試 MPSQL Motif-worksheet 介面

[WWW] http://www.mutinybaysoftware.com 取得 RPM。

37.14. 確認

要確認 PostgreSQL 的高品質,執行 Regression 測試套件︰ 以 root 身份簽入

37.15. 緊急除錯

有時除錯嵌補會在主要的推出 PostgreSQL 的主要版本之後出現。你可依據自己需要,自行進行修補。請跟從以下步驟︰ 到 postgresql 程式碼的目錄

嵌補檔是在

38. 快速開始指引

請參考 快速安裝指引一章。

38.1. 資料庫建立、丟棄、改名

你可使用使用者友善的 GUI,名為‘pgaccess’來建立和丟棄資料庫,也可用指令列‘psql’工具。

你現在可以在 psql 或 pgaccess 高速下達 SQL 指令。

要丟棄資料庫的話︰

也可以在一個 SQL 連接期間用以下指令消滅一個資料庫︰

要更改資料庫名稱,請參閱 備份和還原一節

38.2. 建立和丟棄用戶

要建立新用戶,以 unix 用戶‘postres’簽入,你可用簡單易用的 GUI 工具‘pgaccess’來增減用戶。

擊選“Users”tab,再擊選 Object|New 或 Object|Delete

你也可用指令行命令稿 (script)。名為‘createuser’的命令稿啟動 psql。

要丟棄一個 postgres 用戶,使用命令稿‘destroyuser’。

38.3. 建立和丟棄群組

目前沒有簡單的介面可用來設定用戶群組。你要自行在 pg_group 表格中插入或更新紀錄。如︰

pg_group 中的欄位為︰ groname 群組名稱。這名稱必須全為字母或數字,不可有底線或標點符號。

grosysid 群組代碼。這是一個 int4,每個群組都要獨一無二。

grolist 屬於此群組的 pg_user 代碼名單。是一個 int4[]。

要刪除群組︰

38.4. 建立、編輯和丟棄表格

你可使用使用者友善的 GUI,名為‘pgaccess’,或指令列‘psql’工具來建立、編輯和丟棄資料庫表格。

擊選 Table | New | Design 按鈕。

在 psql 提示下,鍵入標準的 SQL 指令,如‘create table’、‘alter table’或‘drop table’來處理表格。

38.5. 建立、編輯和丟棄表格中的紀錄

你可使用使用者友善的 GUI,名為‘pgaccess’,或指令列‘psql’工具來建立、 編輯和丟棄資料庫表格中的紀錄。

擊選 Table | 選一個表格 | Open 按鈕。

在 psql 提示下,鍵入標準的 SQL 指令,如‘insert into table_name’、‘update table_name’或‘delete from table_name’來處理表格。

38.6. 改變目前的資料庫

你可使用使用者友善的 GUI,名為‘pgaccess’,或指令列‘psql’工具來改變目前的資料庫。

擊選 Database | Open 按鈕。

38.7. 備份與還原資料庫

PostgreSQL 提供了兩個工具來備份你的系統︰pg_dump 備份一個資料庫,pg_dumpall 一次過備份所有資料庫。

還原則︰

這技考可用於搬移資料庫或為資料庫改名。

警告︰每個資料庫都要定時備份。因為 PostgreSQL 自行管理它在檔案系統中的檔案,所以不要倚賴系統備份來作資料庫備份。 沒有人能保證那些檔案在還原後會處於一個可用而一致的狀態。

備份大型資料庫︰因為 PostreSQL 容許表格大過系統的最大檔案容量,把一個表格輸出為一個檔案會有問題, 因為所產生的檔案可能會超出系統的限制。因為 pg_dump 會寫到 stdout,你可使用標準的 unix 工具來解決這可能的問題︰

使用壓縮了的輸出︰

用以下方法重新載入︰

使用 split︰

注意︰以上指令中,在 filename.dump 後有一點 (.)!!你可用以下方法重新載入︰

當然,檔案名稱(filename)和 pg_dump 輸出的內容無需和資料庫名稱配合。此外,還原了的資料庫可有任何新名。 因此這方法適用於為資料庫改名。

要把所有 PostgreSQL 輸出,使用 pg_dumpall

38.8. 資料庫保安

請參閱 PostgreSQL 保安一節。

38.9. 線上求助

你必須知道 PostgreSQL 的線上求助設施,因為它會為你節省很多時間,讓你快速取得資料。

請參閱不同指令,如 createdb、createuser 等等的線上 man pages。

也請參閱 psql 的線上求助訊息,在 psql 提示鍵入 \h

38.10. 建立激發 (Triggers) 和內儲程序 (Stored Procedures)

要建立激發或內儲程序,先在你使用的資料庫執行‘createlang’命令稿來安裝 ‘plpgsql’。如果你想預設使用它,把它安裝在‘template1’, 因為以後建立的資料庫都是 template1 的仿裝品。參閱‘createlang’網頁或位於 /usr/doc/postgresql-7.0.2/user/index.html 的 User Guide。

也請參考 RPM 例子 RPM 中激發和內儲程序的例子。Examples RPM 中的其中一個例子︰

另一個激發程式碼例子︰

你必須安裝 TEST 套件— postgresql-test-7.0.2-2.rpm 和閱讀在 /usr/lib/pgsql/test/regress/sql 中的 SQL 命令稿例子。

要顯示資料庫中激發的名單—

要顯示資料庫中函數和內儲程序的名單—

38.11. PostgreSQL 文件

有關其他問題,請參閱 PostgreSQL 的說明書,它們的資料十分全面。PostgreSQL 文件已在套件中。請閱讀‘User's Guide’、‘Programmer's Guide’、‘Administrator's Guide’和其他說明書。

39. PostgreSQL 支援超過 200 Gig 的超級資料庫

早已有很多大公司將 PostgreSQL 用於大型的資料庫。在此提供以下技考︰

39.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 記憶體。)

39.2. 多處理器

要使用大型的資料料,你最好使用內有 4、16 或 32 夥處理器的 SMP 電腦。另一方面,你也可使用 4 至 5 部單處理器電腦,而把你的資料庫分割 (partition) 為 4 至 5 個分開的資料庫,每個在一部電腦運行。每個處理器都以高速 (100MBits)的乙以太網絡卡連接。例如,你的資料庫中有二百個表格, 你可把它們分為四個資料庫,每個有五十個表格。這樣,你把工作平均分配給 4 部分開的電腦。這是一個比四處理器電腦便宜的方案。 你可使用‘跨資料庫的查詢’、在區域網絡使用 NFS、為唯讀表格‘CREATE VIEW’來完成這工作。每個處理器都可「見到」所有資料庫,即全部 200 個表格。在未來,PostgreSQL 會支援‘跨資料庫的查詢’(已經在 TODO 名單),在將推出的 7.1 版出現。例如,使用代號 a、b 作表格名稱作的跨資料庫查詢會類似——

39.3. 複製 (Replication) 伺服器

為大型企業/商業公司而設的複製伺服器由 PostgreSQL Inc 作商業販賣。你可使用複製伺服器來提供重覆的資料及高度可得性 (availability)。複製伺服器是一件複雜、先進的產品,因此需要金錢。

40. 憑什麼相信 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 測試套件中。

last edited 2004-12-25 08:45:57 by PingYeh