Sophie

Sophie

distrib > Mandriva > 2010.0 > i586 > media > contrib-release > by-pkgid > f8eb492b80dedd2f6cd33cf45dfc65b6 > files > 52

howto-text-zh-2006-5mdv2010.0.noarch.rpm


    Linux ªº Database-SQL-RDBMS HOWTO ¤å¥ó (PostgreSQL ª«¥óÃöÁp¸ê®Æ®w¨t²Î)
                                       
§@ªÌ¡JAl Dev (Alavoor Vasudevan) [1]alavoor@yahoo.com
ĶªÌ¡J´¿¹F±d [2]a9504480@graduate.hku.hk

   ¤G¹s¹s¤@¦~¤@¤ë¤G¤é¡A41.0 ª©
     _________________________________________________________________
   
   ¥»¤å¥ó¬O¤@¥÷¤¶²Ð¦p¦ó¦b Unix ¨t²Î§Ö±¶¦a«Ø¥ß¤@­Ó SQL ¸ê®Æ®w¤ÞÀº
   (Database Engine) ¤Î«eºÝ¤u¨ãªº¡u¹ê¥Î«ü«n¡v¡C¥¦¤]°Q½×°ê»Ú¼Ð·Çªº
   ANSI/ISO SQL »y¨¥¤Î±´°Q¦b¤¬Ápºô¤¤¡u¶}©ñ¦¡¶}µo¡vÀô¹Ò ("open
   development" environment) ¶}µo SQL ¸ê®Æ®w¤ÞÀºªºÀuÂI¡C¥¦¬OÃö©ó¦p¦ó¦b
   Unix ¨t²Î¤¤«Ø¥ß PostgreSQL ³o­Ó¬J¥i¥Î§@À³¥Îµ{¦¡¸ê®Æ®w¦øªA¾¹
   (Application Database Server)¡A¤S¥i¥Î§@¸Uºûºô¸ê®Æ®w¦øªA¾¹ (Web
   Database Server) ªº·s¤@¥Nª«¥óÃöÁp¦¡¸ê®Æ®w¡CPostgreSQL ¹Á¸Õ¹ê½î¤µ«áªº°ê
   »Ú ISO / ANSI SQL ¼Ð·Ç¡C¥»¤å¥ó¤]´£¨ÑÃö©ó¸ê®Æ®wªº¤¶­±µ{¦¡¡A¦p«eºÝ¹Ï¹³¤¶
   ­±¡BÀ³¥Îµ{¦¡°ª³t¶}µo (Rapid Application Development) ¤u¨ã¡BODBC¡BJDBC
   ÅX°Êµ{¦¡¡BC¡BC++¡BJava¡BPerl µ{¦¡»y¨¥¤¶­±©Mºô¤W¸ê®Æ®w¤u¨ã¡C³o¸Ì´£¨Ñªº¸ê
   ®Æ¾A¥Î©ó©Ò¦³ Unix / Windows NT ¥­¥x¤Î¨ä¥L¸ê®Æ®w¡A¹ï¸ê®Æ®w¡BSQL »y¨¥¤Î
   PostgreSQL ªº·s¤â«D±`¦³¥Î¡C³o¤å¥ó¤]¦³¤@­Ó SQL ªº¾É¤Þ¡A¸ÑÄÀ SQL ªº»yªk¡A
   ¹ïªì¾ÇªÌ«D±`¦³¥Î¡C¦³¸gÅ窺¥Î®a·|ı±o³o¬O¤@¥÷¦³¥Îªº°Ñ¦Ò¸ê®Æ¡C¹ï¾Ç¥Í¨Ó»¡
   ¡A³o³B´£¨Ñªº¸ê®Æ·|Åý¥L­Ì±o¨ì PostgresSQL ÃöÁp¦¡¸ê®Æ®wªº·½µ{¦¡½X¡A±q¦Ó¾Ç
   ²ß¦p¦ó½s¼g¤@­Óª«¥óÃöÁp¦¡ SQL ¸ê®Æ®w¡C
     _________________________________________________________________
   
1. ¤Þ¨¥

     * 1.1 ¶q¤l (Quantum) ¹q¸£¡X¡X¶q¤lª«²z¾Ç«Ü¦³¥Î
       
2. ª«²z©w«ß¾A¥Î©ó¹q¸£³n¥ó¡I

3. PostgreSQL ¬O¤°»ò¡H

     * 3.1 ¥Õ¥Ö®Ñ
       
4. ­þ­Ó¸û¦n¡HPostgreSQL ÁÙ¬O MySQL¡H

     * 4.1 PostgreSQL ¥´±Ñ Oracle¡BIBM DB2¡BMS SQL server ©M¨ä¥L¡I¡I
     * 4.2 MySQL ©M¨ä¥L­«ÂЪº RDBMSes
       
5. ¦ó³B¨ú±o ?

6. PostgreSQL §Ö³t¦w¸Ë«ü¤Þ 

     * 6.1 ¦w¸Ë©M´ú¸Õ
     * 6.2 PostgreSQL RPMs
     * 6.3 Maximum RPM
     * 6.4 ¨Ò¤l RPM 
     * 6.5 ´ú¸Õ PyGreSQL¡XPython ¤¶­± 
     * 6.6 ´ú¸Õ Perl¡XPerl ¤¶­± 
     * 6.7 ´ú¸Õ libpq, libpq++ ¤¶­± 
     * 6.8 ´ú¸Õ Java ¤¶­± 
     * 6.9 ´ú¸Õ ecpg ¤¶­± 
     * 6.10 ´ú¸Õ SQL ªº¨Ò¤l¡X¦Û­q¸ê®Æ«¬ºA©M¨ç¼Æ 
     * 6.11 ´ú¸Õ Tcl/TK ¤¶­±
     * 6.12 ´ú¸Õ ODBC ¤¶­±
     * 6.13 ´ú¸Õ MPSQL Motif-worksheet ¤¶­±
     * 6.14 ½T»{
     * 6.15 ºò«æ°£¿ù
       
7. §Ö³t¶}©l«ü¤Þ

     * 7.1 ¸ê®Æ®w«Ø¥ß¡B¥á±ó¡B§ï¦W
     * 7.2 «Ø¥ß©M¥á±ó¥Î¤á
     * 7.3 «Ø¥ß©M¥á±ó¸s²Õ
     * 7.4 «Ø¥ß¡B½s¿è©M¥á±óªí®æ
     * 7.5 «Ø¥ß¡B½s¿è©M¥á±óªí®æ¤¤ªº¬ö¿ý
     * 7.6 §ïÅܥثeªº¸ê®Æ®w
     * 7.7 ³Æ¥÷»PÁÙ­ì¸ê®Æ®w 
     * 7.8 ¸ê®Æ®w«O¦w
     * 7.9 ½u¤W¨D§U
     * 7.10 «Ø¥ß¿Eµo (Triggers) ©M¤ºÀxµ{§Ç (Stored Procedures)
     * 7.11 PostgreSQL ¤å¥ó
       
8. PostgreSQL ¤ä´©¶W¹L 200 Gig ªº¶W¯Å¸ê®Æ®w

     * 8.1 ¤¤¥¡³B²z¾¹ºØÃþ¡X32 ¦ì¤¸©Î 64 ¦ì¤¸
     * 8.2 ¦h³B²z¾¹
     * 8.3 ½Æ»s (Replication) ¦øªA¾¹
       
9. ¾Ì¤°»ò¬Û«H PostgreSQL¡HRegression ´ú¸Õ®M¥ó¬°¥Î¤á«Ø¥ß«H¤ß

10. ¸ê®Æ®w«O¦w 

     * 10.1 ¥Î¤á»{ÃÒ
     * 10.2 ¨Ì¾Ú¥D¾÷±±¨î¦s¨ú
     * 10.3 »{ÃÒ¤èªk 
     * 10.4 ¦s¨ú±±¨î
     * 10.5 ¸g SSH ªº«O¦w TCP/IP ³s±µ
     * 10.6 Kerberos »{ÃÒ
       
11. PostgreSQL ªº«eºÝ GUI ¤u¨ã¡]¹Ï¹³¨Ï¥ÎªÌ¬É­±¡^

12. PostgreSQL ªº¤¶­±ÅX°Êµ{¦¡

     * 12.1 PostgreSQL ªº ODBC ÅX°Êµ{¦¡
     * 12.2 PostgreSQL ªº UDBC ÅX°Êµ{¦¡
     * 12.3 PostgreSQL ªº JDBC ÅX°Êµ{¦¡
     * 12.4 PostgreSQL ªº Java
       
13. PostgreSQL ªº Perl ¸ê®Æ®w¤¶­± (Database Interface, DBI) 

     * 13.1 PostgreSQL ªº PERL ¤¶­±
     * 13.2 Perl ¸ê®Æ®w¤¶­± DBI
     * 13.3 ´ú¸Õ Perl ¤¶­±
       
14. PostgreSQL ºÞ²z¤u¨ã

     * 14.1 PGACCESS - ºÞ²z PostgreSQL ªº GUI ¤u¨ã
     * 14.2 PostgreSQL ¹Ï«¬¤¶­±¬d¸ß¤u¨ã GtkSQL 
     * 14.3 µøµ¡¤¤ªº PostgreSQL ¤¬°Ê¦¡¬d¸ß¤u¨ã¡]WISQL ©Î MPSQL¡^
     * 14.4 ¦W¬° PSQL ªº PostgreSQL ¤¬°Ê¦¡¬d¸ß¤u¨ã¡]ISQL¡^
     * 14.5 MPMGR¡XPostgreSQL ªº¸ê®Æ®wºÞ²z¤u¨ã
     * 14.6 PgAdmin¡BPhpPgAdmin ¤u¨ã
     * 14.7 PgBash - SQL shell ¤u¨ã
     * 14.8 PostgreSQL ªº Webmin ¤u¨ã
       
15. PostgreSQL ¥Îªº¤¤¥¡³B²z¾¹

16. ¥u¨Ï¥Î¤@­ÓÅã¥Ü¾¹ (monitor) ¨Ó³]©w¦h¥x PostgreSQL ¹q¸£

17. PostgreSQL ªº¸UºûºôÀ³¥Îµ{¦¡¦øªA¾¹

     * 17.1 PERL ¸UºûºôÀ³¥Îµ{¦¡¦øªA¾¹ 
     * 17.2 PHP ¸UºûºôÀ³¥Îµ{¦¡¦øªA¾¹ 
     * 17.3 Lutris Corp "Enhydra Enterprise" (Java) 
     * 17.4 Zope¡]Python¡^ 
     * 17.5 OpenACS¡]Tcl »y¨¥¡^
     * 17.6 C++, CORBA ¸UºûºôÀ³¥Îµ{¦¡¦øªA¾¹ 
     * 17.7 ¸UºûºôÀ³¥Îµ{¦¡¦øªA¾¹¥Ø¿ý 
       
18. PostgreSQL ªºÀ³¥Îµ{¦¡©M¤u¨ã

     * 18.1 PostgreSQL ªº 4GL ¸Uºûºô¸ê®Æ®wµ{¦¡¡XAppGEN ¶}µo¨t²Î
     * 18.2 PostgreSQL ªº¤¬Ápºô¤¶­±¡XDBENGINE
     * 18.3 PostgreSQL ªº Apache ¦øªA¾¹¼Ò²Õ¡XNeoSoft NeoWebScript
     * 18.4 HTML ªº¦øªA¾¹ºÝ©µ¦ù HEITML ©M¤@­Ó PostgreSQL ªº 4GL »y¨¥
     * 18.5 PostgreSQL ªº America On-line AOL ¸Uºûºô¦øªA¾¹
     * 18.6 PostgreSQL ªººÃÃø / ­p¹º°lÂܨt²Îµ{¦¡¤u¨ã
     * 18.7 §â dbase ªº dbf ÀÉÂà´«¦Ü PostgreSQL
     * 18.8 §â·L³n MDB ¸ê®Æ®wÂà´«¦Ü PostgreSQL
     * 18.9 Zeos «È¤á
     * 18.10 Java ªº Report Writer
       
19. ¸ê®Æ®w³]­p¤u¨ã¡X¹êÅéÃö«Y¹Ï (Entity Relation Tool) ¤u¨ã

20. PostgreSQL ªº¤¬Ápºô¸ê®Æ®w³]­p/§¹¦¨¤u¨ã¡XEARP

     * 20.1 EARP ¬O¤°»ò¡H
     * 20.2 ¬I¦æ
     * 20.3 ¥¦¦p¦ó¤u§@¡H
     * 20.4 ¦ó³B¨ú±o EARP¡H
       
21. PHP Hypertext PreProcessor¡XPostgreSQL ªº¦øªA¾¹ºÝ html ´O¤J©R¥O½Z»y¨¥

     * 21.1 ¥D­n¯S¦â
     * 21.2 PHP¡X²¥v
     * 21.3 ¨º»ò¡A§Ú¯à¥Î PHP °µ¤°»ò¡H
     * 21.4 ¤@­Ó²³æªº¨Ò¤l
     * 21.5 CGI §ï¦V (Redirection)
     * 21.6 ¦b«ü¥O¦æ°õ¦æ PHP
     * 21.7 PHPGem ®M¥ó
       
22. PostgreSQL ªº Python ¤¶­±

     * 22.1 ¦p¦ó¨ú±o PyGres¡H
     * 22.2 ¸ê®Æ©M¤ä´©
     * 22.3 ´ú¸Õ Python ¤¶­±
       
23. PostgreSQL ©M¸Uºûºôªº¹h¸ô (gateway) ¡X WDB-P95

     * 23.1 ¦³Ãö wdb-p95
     * 23.2 PostgreSQL ¦øªA¾¹¡Bpgperl ©M httpd ¬O§_»Ý¦b¦P¤@¹q¸£¡H
       
24. "C", "C++", ESQL/C »y¨¥¤¶­±©M PostgreSQL ªº³v¦ì¹Bºâ¤¸ (Bitwise Operators)

     * 24.1 "C" ¤¶­±
     * 24.2 "C++" ¤¶­±
     * 24.3 ESQL/C
     * 24.4 PostgreSQL ªº³v¦ì¤¸¹Bºâ¤¸
       
25. PostgreSQL ªº¤é¤å°²¦W½X (Kanji Code)

26. ²¾´Ó PostgreSQL ¨ìµøµ¡ 95 / µøµ¡ NT

     * 26.1 NT ª©ªº§@ªÌ
     * 26.2 ¦w¸Ë Cygwin ®M¥ó
     * 26.3 ³]©w Bash µøµ¡
     * 26.4 ¦w¸Ë Andy Piper ¤u¨ã
     * 26.5 ¦w¸Ë Ludovic Lange ªº Cygwin32 IPC ®M¥ó
     * 26.6 ¦w¸Ë PostgreSQL 
       
27. ³q«H½×¾Â

     * 27.1 PostgreSQL ªº¹q¶l¤á¤f
     * 27.2 ­^¤å³q«H½×¾Â
     * 27.3 ³q«H½×¾Â¦s®w
     * 27.4 ¦è¯Z¤ú¤å³q«H½×¾Â
       
28. ¤å¥ó©M°Ñ¦Ò®Ñ

     * 28.1 ¥Î¤á«ü¤Þ©M»¡©ú®Ñ
     * 28.2 ½u¤W¤å¥ó
     * 28.3 ¦³¥Îªº°Ñ¦Ò®Ñ
     * 28.4 ANSI/ISO SQL ³W®æ¤å¥ó¡XSQL 1992, SQL 1998
     * 28.5 ANSI/ISO SQL 1992 ªº»yªk
     * 28.6 ANSI/ISO SQL 1998 ªº»yªk
     * 28.7 ªì¾ÇªÌ SQL ¾É¤Þ
     * 28.8 SQL92 ªº®ÉºA©µ¦ù (Temporal Extension)
     * 28.9 ²Ä¹s³¡¤À¡X¨ú±o ISO/ANSI SQL ¤å¥ó 
     * 28.10 ²Ä¤@³¡¤À¡XISO/ANSI SQL ·í«e±¡ªp
     * 28.11 ²Ä¤G³¡¤À¡XISO/ANSI SQL °òª÷ (ISO/ANSI SQL Foundation)
     * 28.12 ²Ä¤T³¡¤À¡XISO/ANSI SQL ©I¥s¯Å¤¶­± (Call Level Interface)
     * 28.13 ²Ä¥|³¡¤À¡X ISO/ANSI SQL «ù¤[Àx¦s¼Ò²Õ (Persistent Stored
       Modules)
     * 28.14 ²Ä¤­³¡¤À¡X ISO/ANSI SQL/µ²¦X (Bindings)
     * 28.15 ²Ä¤»³¡¤À¡XISO/ANSI SQL XA ¤¶­±±Mªù¤Æ ¡]SQL/XA¡^
     * 28.16 ²Ä¤C³¡¤À¡X®ÉºA ISO/ANSI SQL 
     * 28.17 ²Ä¤K³¡¤À¡XISO/ANSI SQL ¦h´CÅé (SQL/MM)
       
29. PostgreSQL ªº§Þ³N¤ä´©

     * 29.1 °Ó·~¤ä´©
       
30. ¸gÀÙ©M°Ó·~¤è­±

31. ¨ä¥L¸ê®Æ®wªº¦W³æ

32. ¸Uºûºô·j´M´£¥Ü

33. µ²½×

34. FAQ¡X¦³Ãö PostgreSQL ªº°ÝÃD

35. ¥»¤å¥óªº¨ä¥L®æ¦¡

36. ª©Åv©M±ÂÅv

Appendix

37. ªþ¿ý¥Ò¡XANSI/ISO SQL 1992 »yªk 

38. ªþ¿ý¤A¡Xªì¾ÇªÌ SQL ¾É¤Þ 

     * 38.1 PostgreSQL ¾É¤Þ
     * 38.2 ¤¬Ápºô URL «ü¼Ð
     * 38.3 ½u¤W SQL «ü¾É
       
39. ªþ¿ý¤þ¡XLinux §Ö³t¦w¸Ë«ü¤Þ 

40. ªþ¿ý¤B¡X¦w¸Ë Midgard 

     * 40.1 ´ú¸Õ Midgard PHP ¦øªA¾¹
     * 40.2 «O¦w OpenSSL 
     _________________________________________________________________
   
1. ¤Þ¨¥

   ¥»¤å¥óªº¥D­n¥Ø¼Ð¬O´£¨Ñ¤@­ÓÃö©ó§Ö±¶¦a³]©w PostgreSQL ªº URL ªº¸ÔºÉ¦W³æ¡A
   ©M´£­Ò¶}©ñ­ì©l½X¨t²Î¡A¦p PostgreSQL¡BLinux ªº¦n³B¡C
   
   ¥@¬É¤Wªº¨C¤@³¡¹q¸£³£»Ý­n¤@­Ó¸ê®Æ®w¨Ó¦s¨ú¸ê®Æ¡C§A¨Ï¥Î¹q¸£¥D­n²z¥Ñ¬O¥Î¨Ó
   Àx¦s¡B Ū¨ú©M³B²z¸ê®Æ¡A¦Ó¥B¥¦­Ì­n«Ü§Ö§¹¦¨¤u§@¡A±q¦Ó¸`¬Ù§Aªº®É¶¡¡C¦P®É¡A
   ¨t²Î¥²¶·Â²³æ¡B §¹¾ã¡B§Ö³t¡B¥i¾a¡B¸gÀÙ©M©ö¥Î¡C¸ê®Æ®w¬O³Ì­«­nªº¨t²Î¡A ¦]
   ¬°¥¦Àx¦s¤F¥@¬É¤W¨C¤@¶¡¤½¥qªºÃöÁä¸ê®Æ¡C¥@¤Wªº¨C¤@¶µ¤u·~³£»Ý­n¤@­Ó¸ê®Æ®w
   ¨t²Î¡C ¨S¦³ªº¸Ü¡A¹q°T¡B¨T¨®¡B»È¦æ¡B¯èªÅ¤½¥qµ¥¤u·~³£¤£¯à¦³®Ä¹B§@¡C ³Ì¬y
   ¦æªº¸ê®Æ®w¨t²Î³£¸ò±q°ê»Ú¼Ð·Ç²Õ´ (International Standard Organisation,
   ISO) ªº³W®æ©M ANSI SQL¡]¬ü°ê¡^¼Ð·Ç¡C·~¬É±`¥Îªº³Ì·s³W®æ¬O ISO/ANSI SQL
   1992¡C¤U¤@­Ó¼Ð·Ç¬O SQL 1998/99¡A¤S¦W SQL-3¡A³o¤´¦b¶}µo¤¤¡C¬y¦æªº¸ê®Æ®w
   ¡A¦p Oracle¡ASybase ©M Informix ³£¬O®Ú¾Ú³o¨Ç¼Ð·Ç¡A©Î¹Á¸Õ¹ê¬I³o¨Ç¼Ð·Ç¡C
   
   ¨S¦³¦p ANSI/ISO SQL ªº¼Ð·Ç¡A¥Î¤á­n¤@¦¸«Ø¥ß¤@®M¾A¥Î©ó©Ò¦³¸ê®Æ®w¨t²ÎªºÀ³
   ¥Î³n¥ó·|«D±`§xÃø¡C «È¤á§Æ±æ¤@¦¸¹L¨Ï¥Î ISO SQL¡AODBC¡AJDBC µo®i¤@­ÓÀ³¥Î
   ³n¥ó¦Ó¦b¥@¤W©Ò¦³ªº¸ê®Æ®w¨t²ÎÀ³¥Î¡C
   
   ¥@¤W¦Û¥Ñ¦Ó¤ä´© ISO SQL¡BANSI SQL/98¡BSQL/92 ©M ANSI SQL/89 ªºÃöÁp¦¡¸ê®Æ
   ®w (RDBMS) ¤¤¡A³Ì¬y¦æªº¬O PostgreSQL¡CPostgreSQL ¬O·s¤@¥Nªºª«¥óÃöÁp¦¡¸ê
   ®Æ®w¡A ¥H¥þ­±²Å¦X ISO/ANSI µ¥ SQL ¼Ð·Ç¬°¥Ø¼Ð¡C§K¶Oªº RDBMS ¤¤
   ¡APostgreSQL ¬O°ß¤@¦P®É¤ä´©ª«¥ó¸ê®Æ®w©M SQL ªº¡C¥»¤å¥ó·|§i¶D§A¦p¦ó¦w¸Ë
   ³o¸ê®Æ®w¡B ¦p¦ó«Ø¥ßºô¤W¸ê®Æ®w¡BÀ³¥Î³n¥ó¸ê®Æ®w¡B«eºÝ¹Ï¹³¤¶­±©M¤¶­±µ{¦¡¡C
   §Ú±j¯P«Øij§A©Ò¼gªº¸ê®Æ®w³n¥ó¥²¶·¦Ê¤À¦Ê²Å¦X ISO/ANSI SQL¡BODBC¡BJDBC µ¥
   ¼Ð·Ç¡A³o¼Ë¡A¨Ï±o§Aªºµ{¦¡¯à²¾´Ó¨ì¤£¦Pªº¸ê®Æ®w¡A¦p PostgreSQL¡BOracle¡B
   Sybase¡BInformix µ¥¡C
   
   §A¥i±q PostgreSQL ±o¨ì³Ì°ª½è¯À¤Î«D±`Â×´Iªº¥\¯à¡A¦]¬°¥¦¨Ì±q¡u¶}©ñ­ì©l½X
   ¶}µo¼Ò¦¡¡v (Open Source Code development model)¡C¶}©ñ­ì©l½X¼Ò¦¡·|µ¹§A§¹
   ¾ãªº·½µ{¦¡½X¡A ¶}µo¹Lµ{¦b¤¬Ápºô¤W¥Ñ¦³·¥¤j¶qªº¤H¤â¶i¦æ¡C ¥Ø«eªºÁͶÕÅã¥Ü
   ¥¼¨Ó¤j³¡¤Àªº³n¥ó¶}µo¤u§@·|¦b¥@¬É³q¦æªº©Ò¿×¡u¸ê°T°ª³t¤½¸ô¡v
   (Information Super-Highway) ¤W¶i¦æ¡C¥¼¨Ó¼Æ¦~¡A¤¬Ápºô·|Ãz¬µ©Ê¦a¦¨ªø¡A ³o
   ¼Ë·|«P¦¨·~¬É§ó¦h¨Ï¥Î PostgreSQL¡C
   
   Âǧâ²Î­p¾Ç¡B¼Æ¾Ç©M¬ì¾Çªº­ì²zÀ³¥Î©ó³n¥ó½è¯À¡A§Ú­Ì¥u·|¦b¤@­Ó¦p
   PostgreSQL ¯ë¡A§â­ìµ{¦¡½X¶}©ñµ¹¸g¸ê°T°ª³t¤½¸ô³sô¦b¤@°_ªº¤j¶qÀY¸£ªº¨t²Î
   ¤U¡A ¤~¯à±o¨ì³Ì°ª½è¯Àªº³n¥ó¡C¥¿©Ò¿×¶°«ä¼s¯q¡C ¶}©ñ­ì©l½Xªº¼Ò¦¡¤]¥i¨¾¤î
   ­«ÂФu§@¡A«D±`¸gÀÙ¡A ¸`¬Ùµo§G®É¶¡¤Î¦X²Å¦³ÃöÀu¤Æ°ê®a©M¦a²y¸ê·½ªº²{¥N¸gÀÙ
   ©w«ß¡C¥u­n¦³¤H¼g¦n¤F¤@­Ó³n¥ó¡A §A«K¤£»Ý­n¦A¨Ó¤@¦¸¡C§A¤£·|§âÄ_¶Qªº®É¶¡®ö
   ¶O©ó¦­¤w°µ¦nªº¤u§@¡C ¤@¤o¥ú³±¤@¤oª÷¡A§A­n¦n¦n§Q¥Î¡A¦]¬°¤H¤@¤Ñ¥u¦³¤K¤p®É
   ¤u§@¡I¦b§Ú­Ì½ñ¤J¤Ü¤@¥@¬ö®É¡A §Ú­Ì¨ú±o©Ò»Ý³n¥óªº¤èªk±N·|§ïÅÜ¡C¨C¤Hªº²Ä¤@
   ¿ï¾Ü³£±N·|¬O¦p PostgreSQL¡BLinux µ¥¶}©ñ­ì©l½X¨t²Î¡C
   
   ÁʶR¥i°õ¦æªº³n¥ó¤£¥Nªí§A¾Ö¦³³n¥ó¡C­ìµ{¦¡½X¬O¬Ã¶Qªº¸ê²£¡A¤G¤¸ÀɨõL»ù­È
   ¡C ÁʶR³n¥ó¥i¯à·|¦¨¬°¾ú¥v¡C§A¥u»Ý­n¶R¦nªºµw¥ó¡A ªá¿ú¦bµw¥ó¤W¦Ó±q¤¬Ápºô
   ¤W¨ú±o³n¥ó¬O­È±oªº¡C­«ÂI¬O¤u§@¶q¤jªº¹q¸£µw¥ó¡C µw¥ó¤~¬O¯u¥¿¶]°Êªº°¨¤Ç¡A
   ³n¥ó¥u¬OÃ@µ¦¨e¡C¹q¸£µw¥óªº½ÆÂøµ{«×¨Ï±o¥þ²y¥u¦³ 6 ­Ó°ê®aªí²{¥X³]­p¤Î¥Í²£
   ¹q¸£´¹¤ù©Mµw¥óªº¯à¤O¡C³o¬O¤@ºØ¥ý¶iªº¬ì§Þ¡A¹Lµ{«D±`½ÆÂø¡A ¸êª÷±K¶°¡A³]¼t
   ¤Î¥Í²£ 0.18¡]¬Æ¦Ü¤p©ó 0.18¡^·L¦Ì¬ì§Þªº¾÷¾¹§ë¸êÃe¤j¡C ¦b¤@¤p¤ù´¹¤ù¤W«K¦³
   ¼Æ¥H¦Ê¸U­pªº¥b¾ÉÅé©M¹q¸ôÀ½¦b¤@°_¡CApplied Material¡BAMD¡B­^¯Sº¸¡BCyrix
   ¡B¤é¥ß¡BIBM ¤Î¨ä¥L¤u¥qªá¶O¤j¶q¤H-¦~ (man-years) ¦b°ª¬ì§Þ¡A¦p´¹¤ù³]­p¡B
   ·L¹q¤l (Micro-electronics) ¤Î¯Ç¹q¤l (Nano-electronics) ªº¬ã¨s¤W¡C·L¦Ì¥N
   ªí¦Ê¸U¤À¤§¤@¦Ì (10^-6)¡A¯Ç¦Ì¥Nªí¤Q»õ¤À¤§¤@¦Ì (10^-9)¡C²{¤µ·L¹q¤l§Þ³N¤¤
   ¡A0.35 ·L¦Ìªº¨Ï¥Î¾T§@¾ÉÅé¡A0.25 ·L¦Ìªº¨Ï¥Î»É¡C ¦b¤£¤[ªº±N¨Ó¡A¥Î»Éªº
   0.10 ·L¦Ì§Þ³N¡A¬Æ­P¯Ç¹q¤l§Þ³N±N·|À³¥Î©ó¹q¸£´¹¤ù¡C ¦]¬°»É¾É¹q¯à¤O¸û±j¡A
   ¾T¾ÉÅé±N·|³Q²^¨O¡C¦b¨è»k´¹¤ù (photolithography) ªº¹Lµ{¤¤¡A ·¥°ªÀWªºµµ¥~
   ½u¡BX-®g½u©Î¹q¤l§ô·|³Q¥Î©ó¨è»k (etch) ¯S¼x¤j¤p (feature size) ¤p©ó
   0.15 ·L¦Ìªº¹q¸ô¡C¤µ«á¤G¤Q¦~¡Aª¿¤ù±N·|³Q¤À¤l¹q¸£ (molecular computers)
   ©M¥Íª«´¹¤ù (bio chips) ¨ú¥N¡C¥¦­Ìªº³t«×±N·|¤ñª¿¤ù§Ö¼Æ¤Q»õ­¿¡I¤À¤l¬O¤@²Õ
   ­ì¤l¡C ¦Ó·L¤pªº­ì¤l²Õ¦¨§A¦b¥@¤W©Ò¨£ªº©Ò¦³ª«¥ó¡C ¤À¤l¹q¸£·|¥Îª«½èªº¤À¤l
   ¨Ó·í¶W§Öªº¹q¤l¶}Ãö¨î¡C¶}¨î (ON) ¥Nªí 1¡BÃö³¬ (OFF) ¥Nªí 0¡C¥@¤W©Ò¦³¹q¸£
   µ{¦¡³£¬O®Ú¾Ú¤G¤¸¼Æ¡]¼Æ¦r 1 ©M 0¡^¹B§@¡C
   
   ¤Uªí¦C¥X´¹¤ù§Þ³Nªº¶i¨B¤Î¥¼¨Óµo®iÁͶաC
   
                                 ¥¼¨Ó´¹¤ù¯à¤Oªº¶i®i
                                 ******************
+--------------------------+---------+---------+---------+---------+--------+--
-------+---------+
| ¶µ¥Ø/¦~¥÷                | 1997    | 1999    | 2001    | 2003    | 2012   | 2
020    | 2030    |
+--------------------------+---------+---------+---------+---------+--------+--
-------+---------+
| ¯S¼x¤j¤p¡]·L¦Ì¡^         | 0.25    | 0.18    | 0.15    | 0.13    | 0.05   |<
0.00001|  ­ì¤l   |
+--------------------------+---------+---------+---------+---------+--------+--
-------+---------+
| ´¹¤ù¤j¤p¡]­½¦Ì¡^         | 200     | 300     | 300     | 300     | 450    |¥Í
ª«/¤À¤l|  ¶q¤l   |
+--------------------------+---------+---------+---------+---------+--------+--
-------+---------+
| ³Ì§C¹B¦æ¹qÀ£             | 1.8-2.5 | 1.5-1.8 | 1.2-1.5 | 1.2-1.5 | 0.5-0.6| <
 0.001 |  ·¥¤p   |
+--------------------------+---------+---------+---------+---------+--------+--
-------+---------+
| ³Ì¤j¥\²v®ø¯Ó             | 70      | 90      | 110     | 130     | 175    | 6
00     |  ·¥¤p   |
+--------------------------+---------+---------+---------+---------+--------+--
-------+---------+
| ¹B¦æÀW²v (MHz)           | 750     | 1,250   | 1,500   | 2,100   | 10,000 | >
 50,000|  -----  +
+--------------------------+---------+---------+---------+---------+--------+--
-------+---------+
| DRAM ®e¶q                | 256 MB  | 1 GB    | 2 GB    | 4 GB    | 256 GB | >
 1000GB|  -----  |
+--------------------------+---------+---------+---------+---------+--------+--
-------+---------+

   ¦p§A©Ò¨£¡Aµw¥ó¤~­«­n©M»Ý­n°ª¬ì§Þ¡A³n¥ó«h»Ý­n¤H¤â¡A¦ý©Ò¥Îªº¬ì§Þ´N¤ñ¸û²
   ³æ¡C
   
   ¥t¤@¤è­±¡A¥@¤W¨C°ê®a³£·|µo®i³n¥ó¡C¨Æ¹ê¤W¡A ¥@¤W¥ô¦ó¤@­Ó¾Ö¦³¤@³¡§C»ù¹q¸£
   ªº¤H³£¥i½s¼g³n¥ó¡C
   
   ¹³ Oracle¡AInformix¡ASybase¡AIBM DB2 (Unix) µ¥¸ê®Æ®w¡A³£¬O¥Î "C" »y¨¥¼g
   ¦¨¡A ¤G¤¸ÀÉ«h¬O¥Î½sĶ¾¹²£¥Í¡A³o¼Ë«K¥i°âµ¹¥Î¤á¤F¡COracle¡BSybase
   ¡BInformix ¸ê®Æ®w¬O¦Ê¤À¦Êªº C µ{¦¡¡I¡I
   
   ¤Q¥|¦~¨Ó¡A¤H­Ì¤w¦b PostgreSQL ¤W°µ¤F«Ü¦h¤u§@¡A±qÀY³Ð³y¥t¤@­Ó²Å¦X
   ANSI/ISO SQL ªº¸ê®Æ®w¨t²Î¨Ã¤£¦X²Å±`²z¡C¦b PostgreSQL ªº·½µ{¦¡¤W¥[¤W¤í¯Ê
   ªº¥\¯à©Î±N¤§¥[±j¡A ¤§«á¥ß¨è¨Ï¥Î¡A¦³«Ü¤j¦n³B¡C
   
   ¾Ú¦ô­p¡A¹ï¡u¤¬Ápºô²£«~¡vªº»Ý¨D±N·|¥H«ü¼Æ¯Å¼Æ (exponentially) ¼Wªø¡A¦]¬°
   ¥¦¥iºûô¤@¸s°ª½è¯À¡B§C»ù¦ÓÃe¤j¼Æ¶qªº¨Ï¥ÎªÌ¤Î¶}µo¤H­û¡C ¤£¨Ï¥Î¡u¤¬Ápºô²£
   «~¡vªº°ê®a·|¿ù¹L³o³õ¡u¥þ²y¤¬Ápºô­²©R¡v¦Ó³Q¨ä¥L°ê®a¤j¤j©ßÂ÷¡C ³o¬O¦]¬°¤¬
   Ápºô¥»¨­´N¬O¥@¤W³Ì¤jªº¡u³n¥ó¤½¥q¡v¡A¤]¬O¤j«¬ªº³n¥ó¡uµo¹q¾÷¡v¡I
   
1.1 ¶q¤l (Quantum) ¹q¸£¡X¡X¶q¤lª«²z¾Ç«Ü¦³¥Î

   ¦p§A¦b«eªí¡u¥¼¨Ó´¹¤ù¯à¤Oªº¶i®i¡v©Ò¨£¡A¦b¤j¬ù 2030 ¦~¡APostgreSQL ¤@Ãþ¸ê
   ®Æ®w¨t²Î·|¦b¶q¤l¹q¸£¹B¦æ¡C¶q¤l¹q¸£®Ú¾Ú­ì¤l²É¤lªº¯S©Ê¡A¦p±ÛÂà (spin) ¤è
   ¦V¨Ó²£¥Íª¬ºA¡C¨Ò¦p¡A¦b¦V¤W±ÛÂà (spin is up) ®É¡A¤@¹Ù²É¤l¥i³Q¬Ý§@¡§¤@¡¨
   ¡A¦V¤U±ÛÂà®É¥i³Q¬Ý§@¡§¹s¡¨¡C­ì¤l©M¨ä®Ö¤ß¥i¥X²{­«Å| (superposition) ªºª¬
   ºA¡A¨Ï±o¤@¡B¹s©M¨ä¶¡ªº¼Æ­È¥i¦P®Éªí¹F¡CÄyµÛ¤zÂZ­ì¤lªº±ÛÂà¡A ¶q¤l¦ì
   (qubit) ¥i©ñ¦b¤@°_¡A¥O¥¦­Ì¥i·í¤@­Ó¾ãÅé¨Ó¹B§@¡A ¨Ï±o«D½u©Ê­pºâ
   (nonlinear computational) ¯à¤O»»»»»â¥ý²{¥N¶W¯Å¹q¸£¡I¡I ¦b­ì¤l¼h­±¡A¶q¤l
   ª«²z¾Ç¦³§U²z¸Ñ­ì¤l²É¤lªºªí²{¡C
   
2. ª«²z©w«ß¾A¥Î©ó¹q¸£³n¥ó¡I

   ³o³¹·|»¡©ú¬ì¾Ç¦b¤£¦P¨Æª«¡A¦p³n¥ó¡B¦t©z¡B­ì¤l¡B¯à¶q¬Æ¦Ü§A¦Û¤vªº³Ð³y¹Lµ{
   ¤¤§êºt¦p¦ó­«­nªº¨¤¦â¡C¤]·|»¡©ú¬°¦ó¬ì¾Çª¾ÃѦb¨Ï¥Î¬ì¾Çªº²£«~«e«D±`­«­n¡C
   
   ¶Àª÷©w«ß¬O¡X¡u§A¤£¥i¥Î¤@¥ó¨Ó¾ú¤£©úªº²£«~¡I¡I¡v³o©w«ß¾A¥Î©ó©Ò¦³ªF¦è¡X ¸ê
   ®Æ®w¨t²Î¡B¹q¸£¨t²Î¡B§@·~¨t²Î¡B¦t©z¬Æ¦Ü§Aªº¨­Åé¡I§Y¬O»¡¡A §A­n±o¨ì¨t²Î§¹
   ¾ãªº·½µ{¦¡½X©M¸ê®Æ¡C¤F¸Ñ¤HÅé©M¤HÅ餺ªº­ì¤lªº¹B§@«D±`­«­n¡A¦]¬°
   PostgreSQL¡B·L³nµøµ¡ 95 µ¥³£¬O¤H³yªº¡C
   
   ³Ð³y¬O«Ü­«­nªº¤@¨B¡C¨Ï¥Î¬ì¾Çª«¥óªº¤H¥²¶·ª¾¹D¥¦¦p¦ó²£¥Í¡C³o¬Æ¦Ü¾A¥Î©ó¹q
   ¸£¨t²Î©M PostgreSQL¡C¤j¦h¼Æ¤H³£¨S¦³¬ì¾Çª¾ÃÑ¡A¦]¦¹¤£ª¾¹D¦p·L³nµøµ¡
   NT/95¡BOracle¡B ¤HÅé©M¦t©zµ¥¨t²Î¦p¦ó²£¥Í¡C«Ü¦h¤H¤£ª¾¹D¤°»ò³Ð³y¦t©z©M·L
   ³nµøµ¡ NT/95 ©M¥¦­Ì¤º³¡¬O¤°»ò¡C½ÆÂøªº¨t²Î¥H²³æªº²Õ¦¨³¡¤À«Ø¦¨¡X¡X¦³¤d¤d
   ¸U¸U­Ó¦t©z²£¥Í¤F¡A ¨C­Ó¦t©z³£¬O¤d¤d¸U¸U­Ó¶W¬P¹Î (super-cluster) ²Õ¦¨¡A
   ¨C­Ó¶W¬P¹Î³£¬O¤d¤d¸U¸U­Ó¬P¨t (galaxy) ²Õ¦¨¡A¨C­Ó¬P¨t³£¬O¤d¤d¸U¸U¹ÙùÚ¬P
   (star) ²Õ¦¨¡A¦³¨ÇùÚ¬P¨t²Î¤¤¦³¦æ¬P (planet)¡A¦Ó¦æ¬P¬O¼Æ¥H¤Q»õ­pªº­ì¤l²Õ
   ¦¨¡C¡]¥@¬É¾ú¥v¤¤¡A ¥u¦b¥j¦L«×¦³¤@­Ó¤H³Ð³y¤F¤@­Ó¦t©z¡A¦ý¦b²{¥NªÀ·|¦A¨S¦³
   µo¥Í¡C ¥@¤W¤£¤Ö°ê®a³£¥¿¹Á¸Õ³Ð³y¦t©z¡C¡^³Ð³y¦t©z¬O¤@¥ó·¥¬°¥ý¶iªº¬ì§Þ¡A
   ¤ñ¬µ¤¤¼s®q©Mªø±T¡A³y¦¨®£©Æªº¯}Ãaªº­ì¤l¼u¥ý¶i±o¦h¡C ²{¥N®ÖªZ¬J²Ó¤p¤S±j«l
   ¡A¥u»Ý¤@­Ó³o¨Ç®Ö¼u§ë¤J¤Ó¥­¬v§Y¥i¨Ï¦a²y®ø¥¢¡I ªZ¾¹ªºÅܤƵL½a¡I¡I¦b¥j¦L«×
   ªº¾Ô³õ¤¤´N¥Î¹L®ÖªZ©M¨ä¥L§ó±j¤O«D¤ZªºªZ¾¹¡I ·í¦ã§B¯S¡D·R¦]´µ©Z (Albert
   Eienstein)¡]¤@­Ó¤G¤Q¥@¬ö 00 ¦~¥Nªº¬ì¾Ç®a¡^»¡®ÖªZ¥i¨Ï¤j«°¥«¤H¶¡»]µo®É¡A
   ¨S¦³¤H¬Û«H¥L¡C ¤µ®É¤µ¤é¤]¨S¦³¤H¬Û«H¤H¤O¥i³Ð³y¦t©z¡C
   
   ·L³nµøµ¡¤E¤­¤§Ãþ³n¥ó¬O¥H C ©M²Õ¦X»y¨¥¼g¦¨¡A¥u¥Î¨ì 1 ©M 0¡C§Ú­Ì©Ò¦íªº³o
   Ãþ¦t©z¬O¥Ñ¨ä¥LªÅ¶¡¤¤¨â²É¤£¬Û¦ü¦Ó¾A¦Xªº­ì¤l²Õ¦X¼²À»¦Ó¦¨¡C¡]¦³½ìªº¨Æ¦b²É
   ¤l¼²À»¤§«e­è¦nµo¥Í¤F¡^ ¤HÅé¬O¥Ñ¨â²É¤£¬Û¦ü¦Ó¦X¾Aªº²Ó­M²Õ¦X¼²À»¦Ó¦¨¡I¡I 
   ¡]¦³½ìªº¨Æ¦b²Ó­M¼²À»¤§«e­è¦nµo¥Í¤F¡^¤HÃþ¿ò¶Ç¤F¦t©zªº¯S©Ê¡C §A©Ò¦bªº¦t©z
   ¥H«e¨Ã¤£¦s¦b¡X¡X¦t©z¤¤ªº­ì¤l¨Ã¤£¦s¦b¡A¬Æ¦Ü®É¶¡³£¤£¦s¦b¡I ¦t©z¦b¤jÃz¬µ®É
   ¥X¥Í¡A¶}©lÂX±i¨Ã«ùÄò¦¨ªø¡Cª½¦Ü²{¦b¦t©z¤´¦bÂX±i¡I¡I ¦³¤H¦b¤@­Ó¦W¬°
   ¡¥Brahma¡¦ªº¦t©z³Ð³y¤F§A©Ò¦bªº¦t©z¡C ª¾ÃѬO³o­Ó¦t©z¤§¥À¡I¡I ¡¥Brahma¡¦
   ¦b§A¥Í¬¡ªºÀ¦¨à¦t©z½Ï¥Í¤§«e¤w¸g·R¤W¤F¡¥ª¾ÃѤ§¥À¡¦¡I¡I ¨º¹Lµ{©M§A¥X¥Íªº¸g
   ¹L®t¤£¦h¡I¨S¦³¨Ó¦Ûª¾ÃѤ§¥Àªºªº¡¥°ò¦]¡¦¡A­n¼g¤@­Ó¤p«¬ªº 'C' µ{¦¡¤]¨S¥i¯à
   ¡I¡]Ķ«ö¡J§¹¥þ¤£©ú¥Õ³o¤@¬q·Q»¡¤°»ò¡A§ó¤£ª¾«ç¼ËĶ¤~²Å¦X­ì·N¡A ¤j®a¦pªGª¾
   ¹D¡A½Ð¨Ó¨ç³qª¾¡C¡^
   
   ¦³´Â¤@¤é§Ú­Ìªº¦t©z·|Ãö¤W¡]¤@Án¥¨ÅT¤§«á¡^¡A¨ä¤¤ªº©Ò¦³­ì¤l·|§¹¥þ·´·À©M®ø
   ¥¢¡I
   
   ¤HÃþ¹ê¦b¬O¦³¥i¯à³Ð³y¦t©zªº¡C¥i¥H³Ð³yªº¦t©zÁ`¼Æ¬OµL­­¤j¡A ¥i¥H³Ð³yªº§@·~
   ¨t²ÎªºÁ`¼Æ¤]¬OµL­­¤j¡I¡I¦³¼Æ¥H¦Ê¸U­pªº¦t©z¡A ¥i¤À¬°¤T¤jÃþ¡CµL­­¼Æ¶qªº¦t
   ©z©MµL­­Åܤƪº¦hºû­ì¤l (multi-dimensional atoms) ±Y¶ò¦¨¬°¼Æ­Ó°ò¥»ºû¦t©z
   (primary-dimensional-universe)¡C «D±`¥ý¶iªº¼Æ¾Ç¤]¤ä«ù³o²z½×¡C
   
   ¬ì¾Ç©M²Î­p¾Ç©w«ß¤ä«ù¶}©ñ­ì©l½X¡A¦p PostgreSQL ©M Linux¡C¤¬Ápºôªº³t«×»P
   ¤é­Ñ¼W¡A¤]¶V¨Ó¶V¥i¾a¡A¶}©ñ­ì©l½Xªº°Ê¶q (momentum) ·|¨³³t¼W¥[¡C¥t¥~¡A¦p
   ªG²Î­p¾Ç¤Î¬ì¾Ç©w«ß¥¿½Tªº¸Ü¡A ¤H­Ì§óª`·N¬ì¾Ç©M·íµLª¾ªº¤H¶}©l¾Ç²ß¬ì¾Ç¡A«Ê
   ³¬¦¡µ{¦¡¿ð¦­·|¦b¥@¤W®ø¥¢¡C
   
   µo®i PostgreSQL ³oÃþ­p¹º»Ý­n¯à¶q©M®É¶¡µ¥¸ê·½¡A¦]¦¹¡APostgreSQL ¬O¯à¶q©M
   ®É¶¡ªº²£«~¡C¯à¶q©M®É¶¡¥u¯à¦b¬ì¾Ç¤W¸ÑÄÀ¡A©Ò¥Hª«²z¾Ç©M PostgreSQL¡BLinux
   ¤§Ãþ³n¥ó±M®×¬O¦³ª½±µÃöÁpªº¡C¬ì¾Ç¡]ª«²z¡^©w«ß¾A¥Î©ó¥ô¦ó®É¶¡ªÅ¶¡¡A¥ô¦ó¦æ
   ¬°¡A ¬Æ¦Ü³n¥ó¶}µo¡C
   
   ª«²z¾Ç§Y¨Ï¦b§A»¡¸Ü¡]Ánªi¡^¡B¨B¦æ¡]¦a­±©M¸}¤§¶¡ªº¼¯À¿¤O¡^¡B ¬Ý®Ñ©M½s¼g³n
   ¥ó®É³£µo¥Í§@¥Î¡C¥@¤W©Ò¦³¬ì¾Ç³£´Ó®Ú©ó¼Æ¾Ç¡A¥]¬A PostgreSQL¡CPostgreSQL
   ¨Ï¥Î¤F¼Æ¾Çªº¤@­Ó¤p¤ÀªK¡¥²{¥N¥N¼Æ¡¦(Modern Algebra)¡C²{¥N¥N¼Æ³B²z¡¥¶°¦X
   ½×¡¦(Set Theory)¡B¡¥Ãö«Y¥N¼Æ¡¦(Relational Algebra)¡B¸s²Õ (Groups)¡BÀô
   (Rings)¡B¦¬¶° (Collections)¡B¶° (Sets)¡BÁp¦X (Unions)¡B¥æ¿ù
   (Intersections)¡B±Æ¥¸ (Exclusions)¡B°ì (Domains)¡B¦C (Lists) µ¥µ¥¡C
   
   PostgreSQL ³oÃþ²£«~¤§©Ò¥H¦s¦b¡A«K¬O¦]¬°¯à¶q©M®É¶¡¡C ¦Ó½è¶q©M¯à¶q¬O¦P¤@
   ¨Æª«¡I½è¯à¬Û¦Pªº¨Æ¹ê¦b¤@¦Ê¦~«e¤´¥¼¬°¤H©Òª¾¡I §Y¨Ï¦b¤µ®É¤µ¤é¥@¤H¤]¤£ª¾¹D
   ¤¬Ápºô¬O³Ì¤jªº³n¥ó¡uµo¹q¾÷¡v ©M¥@¤W³Ì¤jªº¡u³n¥ó¤½¥q¡v¡C
   
   ¸£²Ó­M¦b¤u§@¡]½s¼gµ{¦¡¡^®É·|®ø¯Ó¯à¶q¡A§â¨Ó¦Û­¹ª«ªº¤Æ¾Ç¯àÂà¤Æ¬°¹q¯à¤Î¼ö
   ¯à¡C §Y¨Ï¦b§A¾\Ū³o¬q¤å¦r®É¡A§Aªº¸£²Ó­M«K·|®ø¯Ó¿U®Æ¤Î¨Ï¥Î¤p¶q¯à¶q¡C¤]´N
   ¬O»¡¡A ¤H¸£¬O¤@¥x¼ö¤O¾Ç¤Wªº¾÷¾¹ (thermodynamic heat engine)¡C¥¿¦]¬°³o¼Ë
   ¡A ¼ö¤O¾Çªº©w«ß¤]¾A¥Î©ó¤H¸£¡A¤]´N¶¡±µ¦a¼vÅT¨ì PostgreSQL ¤@Ãþ³n¥ó¡C
   
   ¥@¤W¥i¦³µL­­ºØÃC¦â¡B¹q¸£»y¨¥¡B´¹¤ù³]­p©M²z½×¡A¦ý¤£¥i¯à¦³¤@ºØ§¹¬üªºÃC¦â
   ¡B ¹q¸£»y¨¥¡B³]­p©M¨t²Î¡I§A©Ò¯à±o¨ìªº¥u¬Oªñ¥G§¹¬üªºÃC¦â¡]ªiªø¡^¡B¨t²Î¡B
   ¸ê®Æ®w©Î²z½×¡I¤j¦ÛµM´N¹³¤@­Ó¸Uªáµ©¡X¦³µL­­ºû¼ÆªºªÅ¶¡¡A ¨ä¥LªÅ¶¡²É¤lªºÅÜ
   ­­ÅܤơA¦ý¥¦­Ì¥þ³¡µ²¦X¬°¤p¼ÆªºªÅ¶¡¡A¤Ï¤§¥çµM¡C
   
   §â¥@¤W¼Æ¦Ê¸Uºô¥Áªº¯à¶qµ²¦X°_¨Ó¡A¨Ï±o«Ø¥ß¤@­Óªñ¥G§¹¬üªº¨t²Î ¡]¥]¬A¸ê®Æ®w
   ³n¥ó¡^Åܱo¦³¥i¯à¡C©t´xÃø»ï¡A¦ýÄyµÛºôµ¸§â¤j¶q¤H¤â¶°¦X°_¨Ó¡A ¥L­ÌªºÁ`¯à¶q
   ·|«D±`Ãe¤j¡A¦Ó¥B¥i¶°¤¤©ó«Ø¥ß¤@­Óªñ¥G§¹¬üªº¨t²Î¡C
   
   ¯à¶qªº³æ¦ì¬OµJ¦Õ (Joules)¡A¤dµJ¦Õ©Î¤½¤ç¡A®É¶¡¥H¬í©Î¤p®É¶q«×¡C¥\²v
   (power) ¬O¯à¶q°£¥H®É¶¡¡A³æ¦ì¬O¥Ë©Î¤d¥Ë¡C
     _________________________________________________________________
   
        ¨C¤Hªº¯à¶q = y µJ¦Õ
©Î¥H½è¶q¨Ó»¡
        ¨C¤Hªº¯à¶q = y ¤½§J
½è¶q©M¯à¶q¤§¶¡ªºÂà´«¦]¼Æ¬O E = m * c * c¡A'c' ¬O¥ú³t¦Ó 'm' ¬O½è¶q¡C
        ®É¶¡ = 8 ¤p®É¡]³o¬O¤@­Ó±`¼Æ¡A¦]¬°¤@¤H¤@¤Ñ¥u¦³ 8 ¤p®É¡^
        ¥\²v = ¯à¶q / ®É¶¡
             = (y / (8 * 60 * 60)) ¥Ë
        ¥@¬ÉªºÁ`¥\²v = n * (y / (8 * 60 * 60)) ¥Ë
n = °Ñ»P­p¹ºªºÁ`¤H¼Æ¡C
     _________________________________________________________________
   
   ±q¥H¤W¤èµ{¦¡¡A«Ü©úÅã¼W¥[ 'n' ·|¤j´T§ïµ½²£«~½è¯À¡Cn ¶V¤j¥\²v¤]¶V¤j¡]¥Î¤d
   ¥Ëªí¥Ü¡^¡C §A¥i¥H·Q¹³¥þ¤¬Ápºô¦³¦h¤Ö¯à¶q¡]¥H¤dµJ¦Õ­pºâ¡^ ©M¥\²v¡]¥H¤d¥Ë
   ­pºâ¡^±Mª`©ó Linux ©M PostgreSQL ¤@Ãþ¨t²Î¡I
   
   «Ü©úÅV¡A¤¬Ápºô¥i³sô«Ü¦h¤H¡A¤]´N¬O»¡¤¬Ápºô¦³¤j¶q¯à¶q©M®É¶¡¡A ¥i¥Î¤ñ³n¥ó
   ¤½¥q§óµuªº®É¶¡²£¥Í§ó°ª½è¯Àªº³n¥ó¡C§Y¨Ï¬O·L³n¡BIBM µ¥¤j¤½¥q¤]¤£¥i¹H§Üª«
   ²z©w«ß¡A¦Ó¥²·|¦Vª«²z©w«ß§ë­°¡C
   
   µ²½×¬O¡J¦]¬°¬ì¾Çªº©w«ß¡A¡¥¶}©ó­ì©l½X¡¦¨t²Î¡A¹³ PostgreSQL¡BLinux ·|¾Ô³Ó
   ¡¥«Ê³¬­ì©l½X¡¦¨t²Î¡A©M¥²·|¤ñ¥¦­ÌÀu²§¡C³o¬O¦³¬ì¾Ç®Ú¾Úªº¡C ¤HÃþ¤£À³®ö¶O®É
   ¶¡³Ð³y¤Ó¦h­«ÂЪº³n¥ó²£«~¡C
   
3. PostgreSQL ¬O¤°»ò¡H

   PostgreSQL ¬O¤@­Ó¦Û¥Ñªº¸ê®Æ®w¡Aµ¹¤©§A§¹¾ãªºµ{¦¡½X¡A¬O¤@­Ó¥H ANSI SQL
   1998, 92, 89 ³W®æ¬°¥Ø¼Ðªºª«¥óÃöÁp¦¡¸ê®Æ®w¨t²Î¡A¥i¦b¤£¦Pªºµw¥ó¥­¥x©M¾Þ§@
   ¨t²Î¤¤¹B¦æ¡C PostgreSQL ªº³Ì²×¥Øªº¬O¦Ê¤À¦Ê²Å¦X ANSI/ISO SQL ¤Î¦¨¬°¥@¬É
   ²Ä¤@ªº¶}©ñ³q¥Î¸ê®Æ®w¡C
   
   ¤µ¤Ñ¡APostgreSQL ¬O¥@¤W³Ì¥ý¶iªº¨t²Î¡C¥O¤H¸Ò²§ªº¬O¡A«Ü¦h°Ó·~ªº¸ê®Æ®w¦b½è
   ¯À¡B ¯S©Ê©M¯à¤O¦U¤è­±³£°l¤£¤W¥¦¡I¡IPostgreSQL ¬O¦a²y¤W«Ü¦h°ê®aªº¦X§@¦¨
   ªG¡A¬O¤@­Ó©M°ê»Ú¤ÓªÅ¯¸ (International Space Station) ¬Û¦üªº±M®×¡C¦b¥¼¨Ó
   ªº¼Æ¤Q¦~¡APostgreSQL ¤´·|¬O³Ì¨Îªº¸ê®Æ®w¨t²Î¡A¦]¬°¥¦¬O¤@­Ó¶}©ñ­ì©l½X¨t²Î
   ¡C
   
   PostgreSQL ­I«áªº°ò¥»·Qªk¬O¡X¥u­n¤@­Ó¼Ò²Õªºµ{¦¡¼g¦n¤F¡A §A´N¤£À³®ö¶O®É
   ¶¡­«·s¼g¤@¦¸¡A­þºÞ¥uªá¤d¤À¤§¤@¬í¡I¡I
   
   Informix Universal server¡]1997 ¦~±À¥X¡^ªº°ò¦¬O PostgreSQL ªº¸ûª©¥»
   ¡A¦]¬° Informix ¦¬ÁʤF Illustra Inc. ¤Î¾ã¦X¨ì Informix¡CIllustra ¸ê®Æ®w
   ¬O®Ú¾Ú Postgres¡]PostgreSQL ªº«e¨­¡^¼g¦¨ªº¡C
   
   PostgreSQL ¬O POSTGRES ¸ê®Æ®wºÞ²z¨t²Îªº§ï¨}ª©¡A¤@­Ó·s¤@¥N DBMS ªº¬ã¨s­ì
   «¬ (prototype)¡C¦b«O¯d POSTGRES ±j¤jªº¸ê®Æ¼Ò«¬¤ÎÂ×´Iªº¸ê®Æ«¬ºAªº¦P®É¡A
   ¥¦¥H¤@­ÓÂX¥R¤Fªº SQL ¤l¶°¨Ó¨ú¥N PostQuel ¬d¸ß»y¨¥¡C
   
   PostgreSQL ¬O¥Ñ¤@¸s°Ñ¥[ PostgreSQL ¶}µo³q«H½×¾Âªº¤¬Ápºô¶}µo¤H­û¶i¦æªº¡C
   ¥Ø«eªº¨ó½ÕªÌ¬° Marc G. Fournier¡C
     * [3]scrappy@postgreSQL.org
       
   ³o¶¤¥î·|­t³d¤µ«á©Ò¦³ PostgreSQL µo®i¤u§@¡C·íµM¡A¸ê®Æ®wªº¥Î¤á¦Û¤v¤]¬O
   PostgreSQL ªº¶}µo¤H­û¡I³o¶}µo¹Lµ{¬O¤À´²¦b¤¬Ápºô¤W¤j¶q¸ê®Æ®w¥Î®aªº¡C
   
   PostgreSQL 1.01 ªº§@ªÌ¬O Andrew Yu ©M Jolly Chen¡CPostgreSQL ªº«e¨­
   Postgres ªºµ{¦¡½X¡A¬O«Ü¦h¤j¾Ç²¦·~¥Í¡B¥»¬ì¥Í¤Îµ{¦¡³]­p­û¦b University
   of California¡ABerkeley ªº Michael Stonebraker ±Ð±Âªº«ü¾É¤Uªº²£«~¡C
   
   ¤w¦³¼Æ¥H¦Ê¸U®M PostgreSQL ³Q¦w¸Ë§@¸ê®Æ®w¦øªA¾¹¡A ºô¤W¸ê®Æ®w¦øªA¾¹©MÀ³¥Î
   µ{¦¡¸ê®Æ®w¦øªA¾¹¡C¥¦¬O¤@­Ó«Ü¥ý¶iªºª«¥óÃöÁp¦¡¸ê®Æ®w ¡]ORDBMS¡^¡C
   
   PostgreSQL ¥i¦b Soloris¡BSunOS¡BHPUX¡BAIX¡BLinux¡BIrix¡BDigital Unix
   ¡BBSDi¡B NetBSD¡BFreeBSD¡BSCO Unix¡BNEXTSTEP¡BUnixware ¤Î©Ò¦³¨ä¥Lªº
   Unix °õ¦æ¡C²¾´Ó¨ìµøµ¡ 95/NT ªº¤u§@¤w¥H Cygnus cygwin32 ®M¥ó§¹¦¨¡C
   
   ¥»¤å©Ò­zªº PostgreSQL ©M¦³Ãöª«¥ó¨ü University of California, Berkeley
   ªºª©Åv«OÅ@¡C
   
3.1 ¥Õ¥Ö®Ñ

   PostgreSQL ¸ê®Æ²¤¶¡J
   
     * ÃD¥Ø¡J PostgreSQL SQL RDBMS ¸ê®Æ®w¡]ª«¥óÃöÁp¸ê®Æ®wºÞ²z¨t²Î¡^
     * ¥Ø«eª©¥»¡J7.0.1
     * ¦~ÄÖ¡J PostgreSQL ¤Q¤­·³¡C¦Û 1985 ¦~¶}©l¶}µo
     * §@ªÌ¡J ¤Q¤­¦~¨Ó¤¬Ápºô¤W¼Æ¥H¦Ê¸U­pªº¤j¾Ç©M¤½¥q
       
   PostgreSQL ªº¥Õ¥Ö®Ñ¦b [4]http://www.greatbridge.com §ä¨ì¡C
   
4. ­þ­Ó¸û¦n¡HPostgreSQL ÁÙ¬O MySQL¡H

4.1 PostgreSQL ¥´±Ñ Oracle¡BIBM DB2¡BMS SQL server ©M¨ä¥L¡I¡I

   PostgreSQL ¦bªí²{¡B³t«×¡BÂX®i©Ê (scalability) ©M ¥i«H©Ê (reliability)
   ¦U¤è­±ªº¼Ð·Ç´ú¸Õ¤¤¥´±Ñ Oracle 8¡]©M 8i¡^¡BIBM DB2¡BMS SQL server
   ¡BSybase¡B Interbase ©M MySQL¡I
   
   ¨ì [5]http://www.aldev.8m.com ©Î [6]http://aldev.webjump.com ¾\Ū°ò·Ç´ú
   ¸Õµ²ªG¡C
   
   ¡]Ķ«ö¡J¦³Ãö¸Ó´ú¸Õµ²ªG¡A¦³¤£¤Ö¤H´£¥X½èºÃ¡A½Ð°Ñ¾\
   [7]http://www.devshed.com/BrainDump/MySQL_Benchmarks/¡^
   
4.2 MySQL ©M¨ä¥L­«ÂЪº RDBMSes

   MySQL ¬O¥t¤@­Ó¶}©ñ­ì©l½Xªº SQL ¦øªA¾¹¡A¦ý¥¦¤£¤ä´©¥æ©ö (Transaction)¡C¥¦
   ¾A¥Î©ó«D±`¤pªº¸ê®Æ®w¡A¦Ó¤£¤ä´©¥ý¶iªº SQL ¥\¯à¡CPostgreSQL «h¬O¤@­Ó¥ø·~
   ¯Åªº¸ê®Æ®w¡A¤ä´©¥æ©ö©M´X¥G©Ò¦³ SQL µ²ºc¡CPostgreSQL ¤ñ°Ó·~ªº¸ê®Æ®w¡A¦p
   Oracle¡BSybase ©M Informix µ¥¥ý¶i±o¦h¡CPostgreSQL ¤ä´©«D±`¥ý¶iªºÂê©w¾÷
   ¨î (locking mechanism) ©M«Ü¦h¦b°Ó·~¸ê®Æ®w¤¤§ä¤£¨ìªº¥ý¶i¥\¯à¡I¡I
   
   ¦b¤£¤[±N¨Ó¡AMySQL ªº¶}µo±N·|°±¤î¡A¦]¬° MySQL ¤]¥H ANSI SQL ¬°¥Ø¼Ð¡A¬O¤@
   ­Ó­«ÂЪº²£«~¡C§Ú­Ì­n³Ì¥ý¶i©M¦¨¼ôªº¶}©ñ­ì©l½X SQL ¦øªA¾¹¡A¦Ó©ß±¼©Ò¦³¨ä¥L
   ªº¡A¦]¬°§Ú­Ì¨S¦³«Ü¦h®É¶¡¡]¨Ó¹ï¥I¦h­Ó RDBMS¡^¡I¨Æ¹ê¤W¡A§A³s¥u¹ï¥I¤@­Ó¦p
   PostgreSQL ¯ë±j«lªº SQL ¦øªA¾¹ªº®É¶¡¤]¨S¦³¡C©Ò¦³ MySQL ¥ÎªÌ³£·|Âಾ¨ì
   PostgreSQL¡C¦Ó¥B¡AMySQL ¬O¤@­Ó¡¥Ãþ°Ó·~¡¦(quasi-commercial) ªº²£«~¡A©M
   PostgreSQL ¤£¦P¡A«áªÌ¶}©ñ­ì©l½X¡AµL»Ý±ÂÅv¶O¡C¬J¥Í·ì¡A¦ó¥Í«G¡C¦³¤F
   PostgreSQL¡A´N¤£»Ý¦A¦³¥t¤@­Ó SQL ¸ê®Æ®w¨t²Î¤F¡C
   
   ¦p MySQL ¤@Ãþªº­«Âв£«~¨Ï±o¥Î®aµL©Ò¾A±q¡A¤À´²¸ê·½¡C ¤@­Ó¡§ªñ¥G§¹¬ü¡¨ªº
   ¨t²ÎÀ³¸Ó¬O¿W¤@µL¤Gªº¨t²Î¡A ¥@¤W¨C¤@­Ó¤H³£À³¬°¥¦¤u§@¡I¡I­«ÂЪº²£«~¹ú¦h©ó
   §Q¡A¦]¦¹¡Aµ´¤£­È±o¤À´²¸ê·½¡C ³o¤w¦b°Ó·~ªº¸ê®Æ®wµo¥Í¡A¦p Oracle¡BSybase
   ¡BInformix ©M·L³n SQL server¡C³o¼Ë·|¨Ï±o¥ÎªÌ¤Àµõ¡A¦Ó¥B²£«~¤¬¤£­Ý®e¡C§Ú
   «o·Q§â SQL ¦øªA¾¹ªº­ì©l½Xµ¹§A±±¨î¡I¡I¡I
   
   §A¤£»Ý­n¤W¦Ê­Ó¸ê®Æ®w¨t²Î¡A§A¥u»Ý­n¤@­Ó³Ì¦nªº¸ê®Æ®w¦øªA¾¹¡A¥¦´N¬O
   ¡¥PostgreSQL¡¦¡C
   
   ĵ§i¡J®Ú¾Ú¤@¥÷¦p ANSI SQL ªº³W®æ¡A¤H­Ì¥i³y¥XµL­­­Ó¸ê®Æ®w¨t²Î¡I¡I
   
   MySQL ¨S¦³¦Ó PostgreSQL ¤ä´©ªº¥\¯à¦p¤U¡X
     * ¥æ©ö (Transactions)
     * ¤ºÀxµ{§Ç (Stored Procedures)
     * ¿Eµo (Triggers)¡]update¡Ainsert ©M delete¡^
     * ª«¥ó¾É¦V¸ê®Æ®w (Object oriented databases)
     * ¥ý¶iªº«ÊÂê¨t²Î (Locking systems)¡A¦b¦h¥Î¤á¡B¦h¥æ©öÀô¹Ò¤Uªº¨Ã¦æºÞ²z
       (concurrency management)¡C
     * ¤l¬d¸ß (Sub-queries)
     * ¦øªA¾¹ºÝ´å¼Ð (Server-side cursors)
     * ¬d¸ß§Ö¨ú (Query caching)
     * ¸ê®Æ®w«ÊÂê (Locking of databases)
     * ¸û¦nªº³sµ²¤ä´©¡]JOIN¡BUNION¡BMINUS¡BINTERSECT¡Bouter join¡^
     * «Ü¦h¨ä¥L¥\¯à¡X¡X¦h¤£³Ó¼Æ¡C
       
   MySQL ¥i¦b [8]http://www.tcx.se §ä¨ì¡C
   
   ¡]Ķ«ö¡JMySQL ¤w§ï¥H GPL µo¦æ¡C¡^
   
5. ¦ó³B¨ú±o ?

   §A¥i±q¥H¤U¦a¤èÁʶR Redhat Linux ¥úºÐ¡BDebian Linux ¥úºÐ©Î Slackware
   Linux ¥úºÐ¡A±q¤¤§ä¨ì PostgreSQL ®M¥ó¡]­ì©l½X©M¤G¤¸½X¡^¡J
     * Linux System Labs ºô§}¡J [9]http://www.lsl.com/ ¡]7 ¬ü¤¸¡^
     * CheapBytes Inc ºô§}¡J [10]http://www.cheapbytes.com/ ¡]7 ¬ü¤¸¡^
     * Debian ¥Dºô§}¡J [11]http://www.debian.org/vendors.html
       
   PostgreSQL ²Õ´¤]°â½æ¡¥PostgreSQL CDROM¡¦¡A¤º§t§¹¾ãªº­ì©l½X¡A³\¦h Unix
   ¾Þ§@¨t²Îªº¥i°õ¦æÀɤΧ¹¾ãªº¤å¥ó¡C
     * ±q¥Dºô­¶¨ú±o PostgreSQL ¥úºÐ¡J [12]http://www.postgresql.org 30¡]¬ü
       ¤¸¡^
       
   PostgreSQL ¥u§t¤G¤¸Àɪºµo¦æª©¥» (distribution)¡J
     * PostgreSQL RPMs ªººûÅ@¤H¬O Lamer Owen¡A¦b [13]lamar.owen@wgcr.org
       §ä¨ì¡C
     * PostgreSQL ·½ RPM ©M¤G¤¸ RPM
       [14]http://www.ramifordistat.net/postgres¡C
     * PostgreSQL ·½ RPM ©M¤G¤¸ RPM [15]http://www.postgresql.org ¡CÂI¿ï
       ¡§Latest News¡¨©M Redhat RPMs¡C
     * PostgreSQL ·½ RPM ©M¤G¤¸ RPM
       [16]http://www.redhat.com/pub/contrib/i386/ ¡Cftp ¯¸¥x¦b
       [17]ftp://ftp.redhat.com/pub/contrib/i386/
     * Solaris, HPUX, AIX, IRIX, Linux ªº¤G¤¸Àɯ¸¥x¡J
       [18]ftp://ftp.postgresql.org/pub/bindist
       
   ¸Uºûºôºô¯¸¡J
     * ¥Dºô¯¸¡J [19]http://www.postgresql.org/
     * ¦¸ºô¯¸¡J [20]http://logical.thought.net/postgres95/
     * [21]http://www.itm.tu-clausthal.de/mirrors/postgres95/
     * [22]http://s2k-ftp.cs.berkeley.edu:8000/postgres95/
     * [23]http://xenium.pdi.net/PostgreSQL/
     * [24]http://s2k-ftp.cs.berkeley.edu:8000/postgres95/
       
   ¥H¤U¬° ftp ¯¸¡J
     * ¥D FTP: [25]ftp://ftp.postgresql.org/pub
     * ¦¸ FTP: [26]ftp://ftp.chicks.net/pub/postgresql
     * [27]ftp://ftp.emsi.priv.at/pub/postgres/
     * [28]ftp://ftp.itm.tu-clausthal.de/pub/mirrors/postgres95
     * [29]ftp://rocker.sch.bme.hu/pub/mirrors/postgreSQL
     * [30]ftp://ftp.jaist.ac.jp/pub/dbms/postgres95
     * [31]ftp://ftp.luga.or.at/pub/postgres95
     * [32]ftp://postgres95.vnet.net:/pub/postgres95
     * [33]ftp://ftpza.co.za/mirrors/postgres
     * [34]ftp://sunsite.auc.dk/pub/databases/postgresql
     * [35]ftp://ftp.task.gda.pl/pub/software/postgresql
     * [36]ftp://xenium.pdi.net/pub/PostgreSQL
       
   PostgreSQL ªº·½µ{¦¡½X¤]¥i±q sunsite unc ªº¬M®g¯¸±o¨ì¡]¥þ²y¦³¤j¬ù¤@¤d­Ó
   ¡^¡C¥¦¬O¦b Redhat Linux µo¦æª©¥» (distribution) ªº
   /pub/contrib/i386/postgresql.rpm Àɤ¤¡C
     * ­nª¾¹D¦³¤°»ò¬M®g¯¸¡A½Ð¨ì [37]ftp://sunsite.unc.edu
       
6. PostgreSQL §Ö³t¦w¸Ë«ü¤Þ

   ³o¸`·|À°§A¦b¤p©ó¤­¤ÀÄÁ¤º§Ö³t¦w¸Ë©M±Ò°Ê³o¸ê®Æ®w¡C
   
6.1 ¦w¸Ë©M´ú¸Õ

   ¦w¸Ë¡B´ú¸Õ¡B½T»{©M°õ¦æ PostgreSQL ªº¨BÆJ ¥H root ¨­¥÷ñ¤J
     _________________________________________________________________
   
# cd /mnt/cdrom/RedHat/RPMS
# man rpm
# ls postgre*.rpm
# rpm -qpl postgre*.rpm | less ¡]Æ[¬ÝÀɮצW³æ¡^
# rpm -qpi postgre*.rpm ¡]Æ[¬Ý®M¥ó¸ê®Æ¡^
# cat /etc/passwd | grep postgres
     _________________________________________________________________
   
   ª`·N¡J¦pªG§A¬Ý¨ì¤@­Ó¡¥postgres¡¦¨Ï¥ÎªÌ¡A§A¥i¯à­n³Æ¥÷©M²M°£ postgres ªº
   ®a¥Ø¿ý  postgres ©M§R°£³o¦W¥ÎªÌ¡A©Î§â¥L§ï¦W¬°¡¥postgres2¡¦¤§Ãþ¡C¦w¸Ë®É
   »Ý­n°®°®²b²b¡C
     _________________________________________________________________
   
:
# rpm -i postgre*.rpm ¡]¥²¶·¦w¸Ë©Ò¦³®M¥ó¡A§Y«È¤áºÝ¡B¶}µo¡B¸ê®Æ©M¥D®M¥ó¨Ó¨Ï
pgaccess ¥¿±`¤u§@¡^
# man chkconfig
# chkconfig --add postgresql  ¡]¥Î¨Ó¦b¶}¾÷®É¶}©l pg¡C¡^
# /etc/rc.d/init.d/postgresql start ¡]±Ò°Ê postgresql¡^
# man xhost
# xhost +  ¡]Åý pgaccess ¨Ï¥ÎÅã¥Ü¸Ë¸m¡^
# su - postgres
bash$ man createdb
bash$ createdb mydatabase
bash$ man psql
bash$ psql mydatabase
¡K¡K¦b psql ¤¤¥i«ö¤W / ¤U½b©C¨Ó½s¿è¾ú¥v°O¿ý©Î \s

bash$ export DISPLAY=<¥D¾÷¦W>:0.0
bash$ man pgaccess
bash$ pgaccess mydatabase
     _________________________________________________________________
   
   ²{¦b§A¥i¥H¦b pgaccess ©Î psql °ª³t¤U¹F¦UºØ SQL «ü¥O¤F¡I¡I
     _________________________________________________________________
   
bash$ cd /usr/doc/postgresql*
     _________________________________________________________________
   
   ¦b¦¹¾\Ū©Ò¦³ FAQ¡A¨Ï¥ÎªÌ¡Bµ{¦¡³]­p­û¡BºÞ²z¤â¥U©M«ü¤Þ¡C
   
6.2 PostgreSQL RPMs

   ¦¹¥~¡A½Ð¬Ý [38]http://www.ramifordistat.net/postgres ªº "Installation
   Steps"¡C
   
   PostgreSQL RPM ¥Ñ Lamar Owen ºûÅ@¡A¦ì©ó [39]lamar.owen@wgcr.org ¦b
   [40]http://www.postgresql.org ¥i§ä¨ì§ó¦h PostgreSQL ªº¸ê®Æ¡C
   
6.3 Maximum RPM

   ¼ô²ß RedHat RPM ®M¥óºÞ²z­û¥HºÞ²z PostgreSQL ¦w¸Ë¡C¦b
   [41]http://www.RPM.org ¤U¸ü¡¥Maximum RPM¡¦¤@®Ñ¡A§ä´MÀɦW
   maximum-rpm.ps.gz¡C ¦b Linux ¨Ï¥Î gv «ü¥O¾\Ū¥¦¡X
     _________________________________________________________________
   
# gv maximum-rpm.ps.gz
     _________________________________________________________________
   
   ¦³¤@­Ó rpm2deb ¥i§â RPM ®M¥óÂà´«¬° Debian Linux ®M¥ó
   
6.4 ¨Ò¤l RPM

   ´ú¸Õ PostgreSQL ªº¦UºØ¤¶­±»Ý­n¨Ò¤l¡C±q¥H¤U¦a¤è¦w¸Ë PostgreSQL ¨Ò¤l¥Ø¿ý
   ¡X
     * Linux ¥úºÐ - postgresql-*examples.rpm
     * postgresql-*examples.rpm [42]http://www.aldev.8m.com ©Î
       [43]http://aldev.webjump.com
     * PostgreSQL ­ìµ{¦¡½X postgresql*.src.rpm¡A¦b examples¡Btesting ©Î
       tutorial ¥Ø¿ý´M§ä¡C
       
6.5 ´ú¸Õ PyGreSQL¡XPython ¤¶­±

   ¦w¸Ë examples ®M¥ó¡A½Ð°Ñ¾\ [44]¨Ò¤l RPM¡A¤§«á¡X
     _________________________________________________________________
   
bash$ cd /usr/lib/pgsql/python
bash$ createdb thilo
bash$ psql thilo
thilo=> create table test (aa char(30), bb char(30) );
thilo=> \q
bash$ /usr/bin/python
>>> import _pg
>>> db = _pg.connect('thilo', 'localhost')
>>> db.query("INSERT INTO test VALUES ('ping', 'pong')")
>>> db.query("SELECT * FROM test")
eins|zwei
----+----
ping|pong
(1 row)
>>>CTRL+D
bash$
¡K¡K¦n¹³¦æ¤F¡X²{¦b¥¿¦¡¦w¸Ë¥¦
bash$ su - root
# cp /usr/lib/pgsql/python/_pg.so /usr/lib/python1.5/lib-dynload
     _________________________________________________________________
   
6.6 ´ú¸Õ Perl¡XPerl ¤¶­±

   ¦w¸Ë examples ®M¥ó¡A½Ð°Ñ¾\ [45]¨Ò¤l RPM¡A¤§«á¡X
     _________________________________________________________________
   
root# chown -R postgres.postgres /var/lib/pgsql/examples
bash$ cd /var/lib/pgsql/examples/perl5
bash$ perl ./example.pl
     _________________________________________________________________
   
   ª`·N¡J¦pªG¥H¤W«ü¥O¥¢±Ñ¤F½Ð°µ¦p¦¹°µ¡J¥þ°ìÅÜ¼Æ @INC ­n¦b¥]¬A site_perl ¥Ø
   ¿ý¤¤ªº Pg.pm ¼Ò²Õ¡A©Ò¥H­n¦p¤U¨Ï¥Î -I ¿ï¶µ¡C
     _________________________________________________________________
   
bash$ perl -I/usr/lib/perl5/site_perl/5.004/i386-linux-thread ./example.pl
     _________________________________________________________________
   
   ¡K¡K§Aªº perl ¤w¦b¦s¨ú PostgreSQL ¸ê®Æ®w¡I¡I
   
   ­n¨Ï¥Î perl ¤¶­±¡A½Ð°Ñ¾\ example.pl ÀÉ¡C
   
6.7 ´ú¸Õ libpq, libpq++ ¤¶­±

   ¦w¸Ë examples ®M¥ó¡A½Ð°Ñ¾\ [46]¨Ò¤l RPM¡A¤§«á¡X
     _________________________________________________________________
   
root# chown -R postgres.postgres /var/lib/pgsql/examples
bash$ cd /var/lib/pgsql/examples/libpq
bash$ gcc testlibpq.c -I/usr/include/pgsql -lpq
bash$ export PATH=$PATH:.
bash$ a.out

bash$ cd /var/lib/pgsql/examples/libpq++
bash$ g++ testlibpq0.cc -I/usr/include/pgsql -I/usr/include/pgsql/libpq++
-lpq++ -lpq -lcrypt
bash$ ./a.out ¡]ª`·N¡J¤£¶·²z·|¿ù»~°T®§¡X¦p¤U¡^
> create table foo (aa int, bb char(4));
No tuples returned...
status = 1
Error returned: fe_setauthsvc: invalid name: , ignoring...
> insert into foo values ('4535', 'vasu');
No tuples returned...
status = 1
Error returned: fe_setauthsvc: invalid name: , ignoring...
> select * from foo;
aa   |bb   |
-----|-----|
4535 |vasu |
Query returned 1 row.
>
>CTRL+D
bash$
     _________________________________________________________________
   
   ¡K¡K§Aª½±µ¥Î C/C++ ¤¶­±¨Ó¦s¨ú PostgreSQL ¸ê®Æ®w¡I¡I
   
6.8 ´ú¸Õ Java ¤¶­±

   ¦w¸Ë examples ®M¥ó¡A½Ð°Ñ¾\ [47]¨Ò¤l RPM ©M¦w¸Ë¥H¤UªF¦è¡C
     * ±q [48]ftp://ftp.redhat.com/pub/contrib/i386 ©Î
       [49]http://www.blackdown.org ¨ú±o JDK jdk-*glibc*.rpm
     * ±q [50]ftp://ftp.redhat.com/pub/contrib/i386 ¨ú±o
       postgresql-jdbc-*.rpm
     _________________________________________________________________
   
root# chown -R postgres.postgres /var/lib/pgsql/examples
bash$ cd /var/lib/pgsql/examples/jdbc
bash$ echo $CLASSPATH
 --> À³Åã¥Ü CLASSPATH=/usr/lib/pgsql/jdbc7.0-1.2.jar:.:/home/java/jdk1.2.2/lib:
/usr/lib/pgsql:/usr/lib/pgsql/classes.zip:/usr/lib/pgsql/pg.jar

¦Ó jdbc*.jar ªºª©¥»¸¹½X­n¥¿½T¡C
*.jar ÀÉ­n©ñ¦b /usr/lib/pgsql ©M  /usr/libjdk*/lib ¥Ø¿ý¤¤¡C

bash$ export CLASSPATH=/usr/lib/pgsql/jdbc7.0-1.2.jar:.:/home/java/jdk1.2.2/lib
:/usr/lib/pgsql:/usr/lib/pgsql/classes.zip:/usr/lib/pgsql/pg.jar

½s¿è©Ò¦³ psql.java ÀÉ¡A§â¡¥package¡¦ªº¦æÅܬ°µû½×¡C
bash$ javac psql.java
bash$ java psql jdbc:postgresql:template1 postgres < password >[1] select * fro
m pg_tables;
tablename       tableowner      hasindexes      hasrules
pg_type postgres        true    false   false
pg_attribute    postgres        true    false   false
[2]
CTRL+C
bash$
     _________________________________________________________________
   
   ¡K¡K§Aª½±µ¥Î Java ¤¶­±¨Ó¦s¨ú PostgreSQL ¸ê®Æ®w¡I
   
6.9 ´ú¸Õ ecpg ¤¶­±

   ¦w¸Ë examples ®M¥ó¡A½Ð°Ñ¾\ [51]¨Ò¤l RPM¡A¤§«á¡X
     _________________________________________________________________
   
root# chown -R postgres.postgres /var/lib/pgsql/examples
bash$ cd /var/lib/pgsql/examples/ecpg
bash$ ecpg test1.pgc -I/usr/include/pgsql
bash$ cc test1.c -I/usr/include/pgsql -lecpg -lpq -lcrypt
bash$ createdb mm
bash$ ./a.out
     _________________________________________________________________
   
   ¡K¡K§Aª½±µ¥Î´O¤J¦¡ SQL ¨Ó¦s¨ú PostgreSQL ¸ê®Æ®w¡I
   
6.10 ´ú¸Õ SQL ªº¨Ò¤l¡X¦Û­q¸ê®Æ«¬ºA©M¨ç¼Æ

   ¦w¸Ë examples ®M¥ó¡A½Ð°Ñ¾\ [52]¨Ò¤l RPM¡A¤§«á¡X
     _________________________________________________________________
   
root# chown -R postgres.postgres /var/lib/pgsql/examples
bash$ cd /var/lib/pgsql/examples/sql
¥¼¼g¦n¡K
     _________________________________________________________________
   
6.11 ´ú¸Õ Tcl/TK ¤¶­±

   Tck/Tk ªº¨Ò¤l¬O pgaccess µ{¦¡¡C ¨Ï¥Î¤@­Ó¤å¦r½s¿è¾¹¾\Ū
   /usr/bin/pgaccess ÀɮסX
     _________________________________________________________________
   
bash$ view /usr/bin/pgaccess
bash$ export DISPLAY=<§A¹q¸£ªº¥D¾÷¦W>:0.0
bash$ createdb mydb
bash$ pgaccess mydb
     _________________________________________________________________
   
6.12 ´ú¸Õ ODBC ¤¶­±

    1. ¦b [53]http://www.insightdist.com/psqlodbc/ ¨ú±o win32 pgsql odbc
       ÅX°Êµ{¦¡
    2. ¥t¥~½Ð°Ñ¾\ /usr/lib/libpsqlodbc.a
       
6.13 ´ú¸Õ MPSQL Motif-worksheet ¤¶­±

   ¦b [54]http://www.mutinybaysoftware.com ¨ú±o RPM¡C
   
6.14 ½T»{

   ­n½T»{ PostgreSQL ªº°ª«~½è¡A°õ¦æ Regression ´ú¸Õ®M¥ó¡J ¥H root ¨­¥÷ñ¤J
     _________________________________________________________________
   
# rpm -i postgresql*test.rpm
¾\Ū README ÀɩΦw¸Ë·½µ{¦¡¡A¥¦¤w¦³ regress ¥Ø¿ý
# rpm -i postgresql*.src.rpm
# cd /usr/src/redhat/SPECS
# more postgresql*.spec ¡]¥H¹î¬Ý»Ý­n¦w¸Ë­þ¨Ç RPM ®M¥ó¡^
# rpm -bp postgresql*.spec ¡]¡K³o¼Ë·|·Ç³Æ¸Ó®M¥ó¡^

Regression ´ú¸Õ»Ý­n Makefiles ©MÃþ¦ü *fmgr*.h ªº¼ÐÀYÀÉ¡A¥i¥Î¥H¤U«ü¥O
²£¥Í¡X
# rpm --short-circuit -bc postgresql*.spec ¡]¨«±¶®|¡I¡^
¬Ý¨ì¡¥make -C common  SUBSYS.o¡¦«á«ö CTRL-C ²×¤î¤u§@¡C³o®É­Ô configure
¤w¸g¦¨¥\¡A©Ò¦³ Makefiles ©M¼ÐÀYÀɤ]¤w²£¥Í¡C§A¤£¦A»Ý­nÅý¥¦Ä~Äò¤U¥h¡C
# cd /usr/src/redhat/BUILD
# chown -R postgres postgresql*
# su - postgres
bash$ cd /usr/src/redhat/BUILD/postgresql-6.5.3/src/test/regress
bash$ more README
bash$ make clean; make all runtest
bash$ more regress.out
     _________________________________________________________________
   
6.15 ºò«æ°£¿ù

   ¦³®É°£¿ù´O¸É·|¦b¥D­nªº±À¥X PostgreSQL ªº¥D­nª©¥»¤§«á¥X²{¡C§A¥i¨Ì¾Ú¦Û¤v
   »Ý­n¡A¦Û¦æ¶i¦æ­×¸É¡C½Ð¸ò±q¥H¤U¨BÆJ¡J ¨ì postgresql µ{¦¡½Xªº¥Ø¿ý
   
                # rpm -i postgresql*.src.rpm
                # cd /usr/src/postgresql6.5.3
                # man patch
                # patch -p0 < patchfile
                # make clean
                # make

   ´O¸ÉÀɬO¦b
     * PostgreSQL ´O¸É¡J [55]ftp://ftp.postgresql.org/pub/patches
       
7. §Ö³t¶}©l«ü¤Þ

   ½Ð°Ñ¦Ò [56]§Ö³t¦w¸Ë«ü¤Þ¤@³¹¡C
   
7.1 ¸ê®Æ®w«Ø¥ß¡B¥á±ó¡B§ï¦W

   §A¥i¨Ï¥Î¨Ï¥ÎªÌ¤Íµ½ªº GUI¡A¦W¬°¡¥pgaccess¡¦¨Ó«Ø¥ß©M¥á±ó¸ê®Æ®w¡A¤]¥i¥Î«ü
   ¥O¦C¡¥psql¡¦¤u¨ã¡C
     _________________________________________________________________
   
¦p§A¥H root ¨­¥÷µn¤J¡AÅܨ­¬°¥ÎªÌ¡¥postgres¡¦¡J
# xhost + ¡]Åý pgaccess ¨Ï¥ÎÅã¥Ü¸Ë¸m¡^
# su - postgres
bash$ man createdb
bash$ createdb mydatabase
bash$ man psql
bash$ psql mydatabase
¡K¦b psql «ö¤W / ¤U½b©C¨Ó½s¿è¾ú¥v¬ö¿ý©Î¥Î \s

bash$ export DISPLAY=<¥D¾÷¦W>:0.0
bash$ man pgaccess
bash$ pgaccess mydatabase
     _________________________________________________________________
   
   §A²{¦b¥i¥H¦b psql ©Î pgaccess °ª³t¤U¹F SQL «ü¥O¡C
   
   ­n¥á±ó¸ê®Æ®wªº¸Ü¡J
     _________________________________________________________________
   
bash$ man dropdb
bash$ man destroydb  ¡]¦b¸ûª©¥»ªº pgsql ¤¤¨Ï¥Î¡^
bash$ dropdb <¸ê®Æ®w¦WºÙ>
     _________________________________________________________________
   
   ¤]¥i¥H¦b¤@­Ó SQL ³s±µ´Á¶¡¥Î¥H¤U«ü¥O®ø·À¤@­Ó¸ê®Æ®w¡J
     _________________________________________________________________
   
> drop database <¸ê®Æ®w¦WºÙ>
     _________________________________________________________________
   
   ­n§ó§ï¸ê®Æ®w¦WºÙ¡A½Ð°Ñ¾\ [57]³Æ¥÷©MÁÙ­ì¤@¸`
   
7.2 «Ø¥ß©M¥á±ó¥Î¤á

   ­n«Ø¥ß·s¥Î¤á¡A¥H unix ¥Î¤á¡¥postres¡¦Ã±¤J¡A§A¥i¥Î²³æ©ö¥Îªº GUI ¤u¨ã
   ¡¥pgaccess¡¦¨Ó¼W´î¥Î¤á¡C
     _________________________________________________________________
   
bash$ man pgaccess
bash$ pgaccess <¸ê®Æ®w¦WºÙ>
     _________________________________________________________________
   
   À»¿ï¡§Users¡¨tab¡A¦AÀ»¿ï Object|New ©Î Object|Delete
   
   §A¤]¥i¥Î«ü¥O¦æ©R¥O½Z (script)¡C¦W¬°¡¥createuser¡¦ªº©R¥O½Z±Ò°Ê psql¡C
     _________________________________________________________________
   
bash$ man createuser
bash$ createuser <¥Î¤á¦WºÙ>
bash$ createuser -h host -p port -i userid <¥Î¤á¦WºÙ>
     _________________________________________________________________
   
   ­n¥á±ó¤@­Ó postgres ¥Î¤á¡A¨Ï¥Î©R¥O½Z¡¥destroyuser¡¦¡C
     _________________________________________________________________
   
bash$ man dropuser
bash$ man destroyuser ¡]¦b¸ûª©¥»ªº pgsql ¤¤¨Ï¥Î¡^
bash$ destroyuser
     _________________________________________________________________
   
7.3 «Ø¥ß©M¥á±ó¸s²Õ

   ¥Ø«e¨S¦³Â²³æªº¤¶­±¥i¥Î¨Ó³]©w¥Î¤á¸s²Õ¡C§A­n¦Û¦æ¦b pg_group ªí®æ¤¤´¡¤J©Î
   §ó·s¬ö¿ý¡C¦p¡J
     _________________________________________________________________
   
bash$ su - postgres
bash$ psql <¸ê®Æ®w¦WºÙ>
¡K¦b psql «ö¤W / ¤U½b©C¨Ó½s¿è¾ú¥v¬ö¿ý©Î¥Î \s

psql=> insert into pg_group (groname, grosysid, grolist)
psql=> values ('posthackers', '1234', '{5443, 8261}' );
INSERT 58224
psql=> grant insert on foo to group posthackers;
CHANGE
psql=>
     _________________________________________________________________
   
   pg_group ¤¤ªºÄæ¦ì¬°¡J groname ¸s²Õ¦WºÙ¡C³o¦WºÙ¥²¶·¥þ¬°¦r¥À©Î¼Æ¦r¡A¤£¥i
   ¦³©³½u©Î¼ÐÂI²Å¸¹¡C
   
   grosysid ¸s²Õ¥N½X¡C³o¬O¤@­Ó int4¡A¨C­Ó¸s²Õ³£­n¿W¤@µL¤G¡C
   
   grolist Äݩ󦹸s²Õªº pg_user ¥N½X¦W³æ¡C¬O¤@­Ó int4[]¡C
   
   ­n§R°£¸s²Õ¡J
     _________________________________________________________________
   
bash$ su - postgres
bash$ psql <¸ê®Æ®w¦WºÙ>
¡K¦b psql «ö¤W / ¤U½b©C¨Ó½s¿è¾ú¥v¬ö¿ý©Î¥Î \s


psql=> delete from pg_group where groname = 'posthackers';
     _________________________________________________________________
   
7.4 «Ø¥ß¡B½s¿è©M¥á±óªí®æ

   §A¥i¨Ï¥Î¨Ï¥ÎªÌ¤Íµ½ªº GUI¡A¦W¬°¡¥pgaccess¡¦¡A©Î«ü¥O¦C¡¥psql¡¦¤u¨ã¨Ó«Ø¥ß
   ¡B½s¿è©M¥á±ó¸ê®Æ®wªí®æ¡C
     _________________________________________________________________
   
bash$ man pgaccess
bash$ pgaccess <¸ê®Æ®w¦WºÙ>
     _________________________________________________________________
   
   À»¿ï Table | New | Design «ö¶s¡C
     _________________________________________________________________
   
bash$ man psql
bash$ psql <¸ê®Æ®w¦WºÙ>
¡K¦b psql «ö¤W / ¤U½b©C¨Ó½s¿è¾ú¥v¬ö¿ý©Î¥Î \s
     _________________________________________________________________
   
   ¦b psql ´£¥Ü¤U¡AÁä¤J¼Ð·Çªº SQL «ü¥O¡A¦p¡¥create table¡¦¡B¡¥alter table
   ¡¦©Î¡¥drop table¡¦¨Ó³B²zªí®æ¡C
   
7.5 «Ø¥ß¡B½s¿è©M¥á±óªí®æ¤¤ªº¬ö¿ý

   §A¥i¨Ï¥Î¨Ï¥ÎªÌ¤Íµ½ªº GUI¡A¦W¬°¡¥pgaccess¡¦¡A©Î«ü¥O¦C¡¥psql¡¦¤u¨ã¨Ó«Ø¥ß
   ¡B ½s¿è©M¥á±ó¸ê®Æ®wªí®æ¤¤ªº¬ö¿ý¡C
     _________________________________________________________________
   
bash$ man pgaccess
bash$ pgaccess <¸ê®Æ®w¦WºÙ>
     _________________________________________________________________
   
   À»¿ï Table | < ¿ï¤@­Óªí®æ > | Open «ö¶s¡C
     _________________________________________________________________
   
bash$ man psql
bash$ psql <¸ê®Æ®w¦WºÙ>
¡K¦b psql «ö¤W / ¤U½b©C¨Ó½s¿è¾ú¥v¬ö¿ý©Î¥Î \s
     _________________________________________________________________
   
   ¦b psql ´£¥Ü¤U¡AÁä¤J¼Ð·Çªº SQL «ü¥O¡A¦p¡¥insert into table_name¡¦¡B
   ¡¥update table_name¡¦©Î¡¥delete from table_name¡¦¨Ó³B²zªí®æ¡C
   
7.6 §ïÅܥثeªº¸ê®Æ®w

   §A¥i¨Ï¥Î¨Ï¥ÎªÌ¤Íµ½ªº GUI¡A¦W¬°¡¥pgaccess¡¦¡A©Î«ü¥O¦C¡¥psql¡¦¤u¨ã¨Ó§ïÅÜ
   ¥Ø«eªº¸ê®Æ®w¡C
     _________________________________________________________________
   
bash$ man pgaccess
bash$ pgaccess <¸ê®Æ®w¦WºÙ>
     _________________________________________________________________
   
   À»¿ï Database | Open «ö¶s¡C
     _________________________________________________________________
   
bash$ man psql
bash$ psql <¸ê®Æ®w¦WºÙ>
¡K¦b psql «ö¤W / ¤U½b©C¨Ó½s¿è¾ú¥v¬ö¿ý©Î¥Î \s

psql=> connect <¸ê®Æ®w¦WºÙ> <user>
     _________________________________________________________________
   
7.7 ³Æ¥÷»PÁÙ­ì¸ê®Æ®w

   PostgreSQL ´£¨Ñ¤F¨â­Ó¤u¨ã¨Ó³Æ¥÷§Aªº¨t²Î¡Jpg_dump ³Æ¥÷¤@­Ó¸ê®Æ®w
   ¡Apg_dumpall ¤@¦¸¹L³Æ¥÷©Ò¦³¸ê®Æ®w¡C
     _________________________________________________________________
   
bash$ su - postgres
bash$ man pd_dump
bash$ pd_dump <¸ê®Æ®w¦WºÙ> > database_name.pgdump
     _________________________________________________________________
   
   ÁÙ­ì«h¡J
     _________________________________________________________________
   
bash$ cat database_name.pgdump | psql <¸ê®Æ®w¦WºÙ>
     _________________________________________________________________
   
   ³o§Þ¦Ò¥i¥Î©ó·h²¾¸ê®Æ®w©Î¬°¸ê®Æ®w§ï¦W¡C
   
   ĵ§i¡J¨C­Ó¸ê®Æ®w³£­n©w®É³Æ¥÷¡C¦]¬° PostgreSQL ¦Û¦æºÞ²z¥¦¦bÀɮרt²Î¤¤ªº
   ÀɮסA©Ò¥H¤£­n­Ê¿à¨t²Î³Æ¥÷¨Ó§@¸ê®Æ®w³Æ¥÷¡C ¨S¦³¤H¯à«OÃÒ¨º¨ÇÀɮצbÁÙ­ì«á
   ·|³B©ó¤@­Ó¥i¥Î¦Ó¤@­Pªºª¬ºA¡C
   
   ³Æ¥÷¤j«¬¸ê®Æ®w¡J¦]¬° PostreSQL ®e³\ªí®æ¤j¹L¨t²Îªº³Ì¤jÀÉ®×®e¶q¡A§â¤@­Óªí
   ®æ¿é¥X¬°¤@­ÓÀÉ®×·|¦³°ÝÃD¡A ¦]¬°©Ò²£¥ÍªºÀÉ®×¥i¯à·|¶W¥X¨t²Îªº­­¨î¡C¦]¬°
   pg_dump ·|¼g¨ì stdout¡A§A¥i¨Ï¥Î¼Ð·Çªº unix ¤u¨ã¨Ó¸Ñ¨M³o¥i¯àªº°ÝÃD¡J
   
   ¨Ï¥ÎÀ£ÁY¤Fªº¿é¥X¡J
     _________________________________________________________________
   
bash$ pg_dump <¸ê®Æ®w¦WºÙ> | gzip > filename.dump.gz
     _________________________________________________________________
   
   ¥Î¥H¤U¤èªk­«·s¸ü¤J¡J
     _________________________________________________________________
   
bash$ createdb <¸ê®Æ®w¦WºÙ>
bash$ gunzip -c filename.dump.gz | psql <¸ê®Æ®w¦WºÙ>
     _________________________________________________________________
   
   ©Î
     _________________________________________________________________
   
bash$ cat filename.dump.gz | gunzip | psql <¸ê®Æ®w¦WºÙ>
     _________________________________________________________________
   
   ¨Ï¥Î split¡J
     _________________________________________________________________
   
bash$ pg_dump <¸ê®Æ®w¦WºÙ> | split -b 1m - filename.dump.
     _________________________________________________________________
   
   ª`·N¡J¥H¤W«ü¥O¤¤¡A¦b filename.dump «á¦³¤@ÂI (.)¡I¡I§A¥i¥Î¥H¤U¤èªk­«·s¸ü
   ¤J¡J
     _________________________________________________________________
   
bash$ man createdb
bash$ createdb <¸ê®Æ®w¦WºÙ>
bash$ cat filename.dump.* | pgsql <¸ê®Æ®w¦WºÙ>
     _________________________________________________________________
   
   ·íµM¡AÀɮצWºÙ¡]filename¡^©M pg_dump ¿é¥Xªº¤º®eµL»Ý©M¸ê®Æ®w¦WºÙ°t¦X¡C¦¹
   ¥~¡AÁÙ­ì¤Fªº¸ê®Æ®w¥i¦³¥ô¦ó·s¦W¡C ¦]¦¹³o¤èªk¾A¥Î©ó¬°¸ê®Æ®w§ï¦W¡C
   
   ­n§â©Ò¦³ PostgreSQL ¿é¥X¡A¨Ï¥Î pg_dumpall
     _________________________________________________________________
   
bash$ man pg_dumpall
bash$ pg_dumpall -o > db.out
­n­«·s¸ü¤J¡J
bash$ psql -e template1 < db.out
     _________________________________________________________________
   
7.8 ¸ê®Æ®w«O¦w

   ½Ð°Ñ¾\ [58]PostgreSQL «O¦w¤@¸`¡C
   
7.9 ½u¤W¨D§U

   §A¥²¶·ª¾¹D PostgreSQL ªº½u¤W¨D§U³]¬I¡A¦]¬°¥¦·|¬°§A¸`¬Ù«Ü¦h®É¶¡¡AÅý§A§Ö
   ³t¨ú±o¸ê®Æ¡C
   
   ½Ð°Ñ¾\¤£¦P«ü¥O¡A¦p createdb¡Bcreateuser µ¥µ¥ªº½u¤W man pages¡C
     _________________________________________________________________
   
bash$ man createdb
     _________________________________________________________________
   
   ¤]½Ð°Ñ¾\ psql ªº½u¤W¨D§U°T®§¡A¦b psql ´£¥ÜÁä¤J \h
     _________________________________________________________________
   
bash$ psql mydatabase
psql> \h
´£¥Ü¡J¦b psql «ö¤W / ¤U½b©C¨Ó½s¿è¾ú¥v¬ö¿ý©Î¥Î \s
     _________________________________________________________________
   
7.10 «Ø¥ß¿Eµo (Triggers) ©M¤ºÀxµ{§Ç (Stored Procedures)

   ­n«Ø¥ß¿Eµo©Î¤ºÀxµ{§Ç¡A¥ý¦b§A¨Ï¥Îªº¸ê®Æ®w°õ¦æ¡¥createlang¡¦©R¥O½Z¨Ó¦w¸Ë
   ¡¥plpgsql¡¦¡C¦pªG§A·Q¹w³]¨Ï¥Î¥¦¡A§â¥¦¦w¸Ë¦b¡¥template1¡¦¡A ¦]¬°¥H«á«Ø¥ß
   ªº¸ê®Æ®w³£¬O template1 ªº¥é¸Ë«~¡C°Ñ¾\¡¥createlang¡¦ºô­¶©Î¦ì©ó
   /usr/doc/postgresql-7.0.2/user/index.html ªº User Guide¡C
     _________________________________________________________________
   
bash$ man createlang
bash$ createdb mydb
bash$ export PGLIB=/usr/lib/pgsql
bash$ createlang plpgsql mydb
bash$ createlang plpgsql template1
     _________________________________________________________________
   
   ¤]½Ð°Ñ¦Ò [59]¨Ò¤l RPM ¤¤¿Eµo©M¤ºÀxµ{§Çªº¨Ò¤l¡CExamples RPM ¤¤ªº¨ä¤¤¤@­Ó
   ¨Ò¤l¡J
     _________________________________________________________________
   
create function tg_pfield_au() returns opaque as '
begin
    if new.name != old.name then
        update PSlot set pfname = new.name where pfname = old.name;
    end if;
    return new;
end;
' language 'plpgsql';

create trigger tg_pfield_au after update
    on PField for each row execute procedure tg_pfield_au();
     _________________________________________________________________
   
   ¥t¤@­Ó¿Eµoµ{¦¡½X¨Ò¤l¡J
     _________________________________________________________________
   
create trigger check_fkeys_pkey_exist
        before insert or update on fkeys
        for each row
        execute procedure
        check_primary_key ('fkey1', 'fkey2', 'pkeys', 'pkey1', 'pkey2');
     _________________________________________________________________
   
   §A¥²¶·¦w¸Ë TEST ®M¥ó¡X postgresql-test-7.0.2-2.rpm ©M¾\Ū¦b
   /usr/lib/pgsql/test/regress/sql ¤¤ªº SQL ©R¥O½Z¨Ò¤l¡C
   
   ­nÅã¥Ü¸ê®Æ®w¤¤¿Eµoªº¦W³æ¡X
     _________________________________________________________________
   
bash$ psql mydb
psql=> \?
psql=> \dS
psql=> \d pg_trigger
psql=> select tgname from pg_trigger order by tgname;
     _________________________________________________________________
   
   ­nÅã¥Ü¸ê®Æ®w¤¤¨ç¼Æ©M¤ºÀxµ{§Çªº¦W³æ¡X
     _________________________________________________________________
   
bash$ psql mydb
psql=> \?
psql=> \dS
psql=> \d pg_proc
psql=> select proname, prosrc from pg_proc order by proname;
psql=> \df
     _________________________________________________________________
   
7.11 PostgreSQL ¤å¥ó

   ¦³Ãö¨ä¥L°ÝÃD¡A½Ð°Ñ¾\ PostgreSQL ªº»¡©ú®Ñ¡A¥¦­Ìªº¸ê®Æ¤Q¤À¥þ­±
   ¡CPostgreSQL ¤å¥ó¤w¦b®M¥ó¤¤¡C½Ð¾\Ū¡¥User's Guide¡¦¡B¡¥Programmer's
   Guide¡¦¡B¡¥Administrator's Guide¡¦©M¨ä¥L»¡©ú®Ñ¡C
   
8. PostgreSQL ¤ä´©¶W¹L 200 Gig ªº¶W¯Å¸ê®Æ®w

   ¦­¤w¦³«Ü¦h¤j¤½¥q±N PostgreSQL ¥Î©ó¤j«¬ªº¸ê®Æ®w¡C¦b¦¹´£¨Ñ¥H¤U§Þ¦Ò¡J
   
8.1 ¤¤¥¡³B²z¾¹ºØÃþ¡X32 ¦ì¤¸©Î 64 ¦ì¤¸

   32 ¦ì¤¸³B²z¾¹ªº¹q¸£¦b¸ê®Æ®w¶W¹L 5 GigaByte ®Éªí²{·|¨³³t¤U­°¡C§A¥i¥Î 32
   ¦ì¤¸³B²z¾¹°õ¦æ 30 gig ªº¸ê®Æ®w¡A¦ýªí²{·|¤U­°¡C32 ¦ì¤¸¾÷¾¹¨ü¨ì³Ì¦h 2 GB
   °O¾ÐÅé¡B2 GB Àɮרt²Î¤Î¾Þ§@¨t²Î¨ä¥L¤è­±ªº­­¨î¡C¨Ï¥Î SGI¡BIBM¡B©Î HP ¬°
   Linux ¯S»sªºÀɮרt²Î©Î ext3-fs ¨Ó¦b 32 ¦ì¤¸¾÷¾¹¤W¤ä´©¤j¹L 2 GB ªºÀɮפj
   ¤p¡C
   
   ¹ï·¥¤j«¬ªº¸ê®Æ®w¨Ó»¡¡A§Ú±j¯P«Øij§A¨Ï¥Î 64 ¦ì¤¸³B²z¾¹¡A¦p Digital Alpha
   ¡BSun Ultra-sparc 64 ¦ì¤¸³B²z¾¹¡BSGI 64 ¦ì¤¸³B²z¾¹¡BIntel Mercel IA-64
   ³B²z¾¹¡BHPUX 64 ¦ì¤¸¹q¸£¡BIBM 64 ¦ì¤¸¹q¸£¡C¨Ï¥Î 64 ¦ì¤¸ªº³B²z¾¹¨Ó½sĶ
   PostgreSQL¡A¥¦´N¥i¥H³B²z¤j«¬ªº¸ê®Æ®w¤Î¬d¸ß¡C¬d¸ß¤j«¬ªí®æ©M¸ê®Æ®wªº³t«×
   ·|¤ñ 32 ¦ì¤¸ªº¹q¸£§Ö¼Æ­¿¡C64 ¦ì¤¸¹q¸£ªºÀuÂI¬O§A¦³«Ü¤jªº°O¾Ð¦ì§}
   (memory addressing space) ©M¾Þ§@¨t²Î¥i³B²z«Ü¤jªºÀɮרt²Î¡B¬°¤j«¬¸ê®Æ®w
   ´£¨Ñ¸û¨Îªí²{¡B ¤ä´©§ó¦h°O¾ÐÅé¡B¯à¤O§ó±j¡K¡K
   
   ¡]Ķ«ö¡J2.4 ªº Linux ®Ö¤ß¤w¬ð¯} 2 GB Àɮפj¤pªº­­¨î¡A¨Ã¤ä´©³Ì¦h 64 GB
   °O¾ÐÅé¡C¡^
   
8.2 ¦h³B²z¾¹

   ­n¨Ï¥Î¤j«¬ªº¸ê®Æ®Æ¡A§A³Ì¦n¨Ï¥Î¤º¦³ 4¡B16 ©Î 32 ¹Ù³B²z¾¹ªº SMP ¹q¸£¡C¥t
   ¤@¤è­±¡A§A¤]¥i¨Ï¥Î 4 ¦Ü 5 ³¡³æ³B²z¾¹¹q¸£¡A¦Ó§â§Aªº¸ê®Æ®w¤À³Î
   (partition) ¬° 4 ¦Ü 5 ­Ó¤À¶}ªº¸ê®Æ®w¡A¨C­Ó¦b¤@³¡¹q¸£¹B¦æ¡C¨C­Ó³B²z¾¹³£
   ¥H°ª³t ¡]100MBits¡^ªº¤A¥H¤Óºôµ¸¥d³s±µ¡C¨Ò¦p¡A§Aªº¸ê®Æ®w¤¤¦³¤G¦Ê­Óªí®æ¡A
   §A¥i§â¥¦­Ì¤À¬°¥|­Ó¸ê®Æ®w¡A¨C­Ó¦³¤­¤Q­Óªí®æ¡C³o¼Ë¡A§A§â¤u§@¥­§¡¤À°tµ¹ 4
   ³¡¤À¶}ªº¹q¸£¡C³o¬O¤@­Ó¤ñ¥|³B²z¾¹¹q¸£«K©yªº¤è®×¡C §A¥i¨Ï¥Î¡¥¸ó¸ê®Æ®wªº¬d
   ¸ß¡¦¡B¦b°Ï°ìºôµ¸¨Ï¥Î NFS¡B¬°°ßŪªí®æ¡¥CREATE VIEW¡¦¨Ó§¹¦¨³o¤u§@¡C¨C­Ó³B
   ²z¾¹³£¥i¡u¨£¨ì¡v©Ò¦³¸ê®Æ®w¡A§Y¥þ³¡ 200 ­Óªí®æ¡C¦b¥¼¨Ó¡APostgreSQL ·|¤ä
   ´©¡¥¸ó¸ê®Æ®wªº¬d¸ß¡¦¡]¤w¸g¦b TODO ¦W³æ¡^¡A¦b±N±À¥Xªº 7.1 ª©¥X²{¡C¨Ò¦p¡A
   ¨Ï¥Î¥N¸¹ a¡Bb §@ªí®æ¦WºÙ§@ªº¸ó¸ê®Æ®w¬d¸ß·|Ãþ¦ü¡X¡X
     _________________________________________________________________
   
select a.col1, a.col2, b.col4, b.col7
from
    database1.my_tablea a, database2.my_tableb b
where
    a.col1 = b.col3 and
    a.col4 = b.col9;

update my_tablea
set
    col1 =  b.col2
from
    database1.my_tablea a, database2.my_tableb b
where
    a.col4 = b.col9;
     _________________________________________________________________
   
8.3 ½Æ»s (Replication) ¦øªA¾¹

   ¬°¤j«¬¥ø·~/°Ó·~¤½¥q¦Ó³]ªº½Æ»s¦øªA¾¹¥Ñ PostgreSQL Inc §@°Ó·~³c½æ¡C§A¥i¨Ï
   ¥Î½Æ»s¦øªA¾¹¨Ó´£¨Ñ­«ÂЪº¸ê®Æ¤Î°ª«×¥i±o©Ê (availability)¡C½Æ»s¦øªA¾¹¬O¤@
   ¥ó½ÆÂø¡B¥ý¶iªº²£«~¡A¦]¦¹»Ý­nª÷¿ú¡C
   
9. ¾Ì¤°»ò¬Û«H PostgreSQL¡HRegression ´ú¸Õ®M¥ó¬°¥Î¤á«Ø¥ß«H¤ß

   ¦³¿à¡uª«²z¾Ç©w«ß¡v¡A§Ú­Ì¥i¥H¬ì¾Ç¦aÀËÃÒ PostgreSQL ¬O§_¯uªº¨Ì±q
   ISO/ANSI SQL ³W®æ¤u§@¡C¬°¤è«K´ú¸Õ PostgreSQL¡ARegression ´ú¸Õ®M¥ó
   ¡]src/test/regress¡^¤w¥]§t¦bµo¦æª©¥» (distribution) ¤¤¡A ¥¦®e³\§Aªº¹q¸£
   ÀËÃҼзǪº SQL ¾Þ§@¤Î PostgreSQL ªº©µ¦ù¯à¤O¡C ´ú¸Õ®M¥ó¤¤¤w¥]§t¤F¼Æ¦Ê­Ó
   SQL ´ú¸Õµ{¦¡¡C
   
   §AÀ³¥Î¹q¸£ªº°ª³t¨ÓÅçÃÒ PostgreSQL¡A¦Ó¤£¬O¥Î¤H¸£¡C ¹q¸£¥i¥H¤H¸£¤d¸U­¿¬Æ
   ¦Ü¼Æ¥H»õ­¿ªº³t«×¨Ó¶i¦æ Regression ´ú¸Õ¡C²{¥N¹q¸£¥i¦b«Üµu®É¶¡¤º°õ¦æ¼Æ¤Q
   »õ­Ó SQL ´ú¸Õ¡C¦b¤£¤[±N¨Ó¡A¹q¸£·|¤ñ¤H¸£§Ö¼Æ¥H¥ü­¿¡C¦]¦¹¡A ¨Ï¥Î¹q¸£¨Ó´ú
   ¸Õ¹q¸£ªºªí²{¬O¦X²zªº¡C
   
   ¦p¦³»Ý­n¡A§A¤]¥i¦Û¦æ¼W¥[´ú¸Õ¡C¦pªG§A»{¬°¥¦·|¹ï¨ä§A¤¬Ápºô¥Î®a¦³À°§U¡A §A
   ¤]¥i§â¥¦¤W¸ü¨ì PostgreSQL ªº¥Dºô¯¸¡CRegression ´ú¸Õ®M¥óÀ°§U¥Î¤á«Ø¥ß¹ï
   PostgreSQL ªº«H¤ß¤Î«H¥ô¡A¥¦¤]À°§U¥Í²£¨t²Î¨³³t³]¥ß PostgreSQL¡C
   
   Regression ´ú¸Õ®M¥ó¥i³Qµø¬°¶}µo¤H­û»P³Ì²×¥Î¤á¶¡¬Û¤¬¦P·Nªº¤@¥÷¡§«D±`¦³¤O
   ¡¨ªº§Þ³N¤å¥ó¡CPostgreSQL ¦b¶}µo¹Lµ{¤Î±À¥X³n¥ó¤§«e¼sªx¨Ï¥Î Regression ´ú
   ¸Õ®M¥ó¨Ó«OÃÒ½è¯À¡C
   
   PostgreSQL ªº¯à¤O¥iÄy Regression ´ú¸Õ®M¥óª½±µ¤Ï¬M¥X¨Ó¡C¦pªG¤@ºØ¥\¯à¡B
   »yªk©Î¯S©Ê¦b Regression ´ú¸Õ¤¤¦s¦b¡A¥¦´N³Q¤ä´©¡A©Ò¦³¨ä¥L¨S¦³¦C¥Xªº
   PostgreSQL ´N¥i¯à¤£¤ä´©¡I¡I§A¥i¥H¦Û¦æÅçÃҤΥ[¤J Regression ´ú¸Õ®M¥ó¤¤¡C
   
10. ¸ê®Æ®w«O¦w

   ¸ê®Æ®w«O¦w°ÝÃD»Ý¦b¦h­Ó¤£¦P¼h­±±´°Q¡J
     * ¸ê®Æ®wÀɮ׫OÅ@¡C¸ê®Æ®wªº©Ò¦³Àɮ׳£¤£²a postgres ¶W¯Å¥Î¤á¥H¥~ªº¥Î¤á
       Ū¨ú¡C
     * ¾Ú¹w³]­È¡A±q¥Î¤á³s±µ¨ì¸ê®Æ®w¦øªA¾¹¥u¯à³z¹L¥»¾÷ªº UNIX ´¡®y
       (socket)¡A¤£¬O TCP/IP ´¡®y¡C¦øªA¾¹»Ý¥H -i ¿ï¶µ±Ò°Ê¤~¯à®e³\«D¥»¾÷«È
       ¤á³s±µ¡C
     * «È¤á³s±µ¥i¥H IP ¦a§}©M / ©Î¥ÎªÌ¦WºÙ¥[¥H­­¨î¡A¥u»Ý­×§ï $PG_DATA ¤¤ªº
       pg_hba.conf ÀÉ¡C
     * ¥iÄy¥~³¡®M¥ó»{ÃҫȤá³s±µ¡C
     * ¨C¦ì Postgres ¥Î¤á³£¦³¤@­Ó¨Ï¥ÎªÌ¦WºÙ©M¿ï¾Ü©Ê¦a¾Ö¦³¤@­Ó±K½X¡C ¹w³]­È
       ¬O¥Î¤á¨S¦³Åv­­¼g¤J¤£¬O¦Û¤v«Ø¥ßªº¸ê®Æ®w¡C
     * ¥Î¤á¥i³Q½s°t¨ì¸s²Õ¤¤¡A¯à§_¦s¨ú¤@­Óªí®æ¥i¥H¸s²Õ¯SÅv¨Ó­­¨î¡C
       
10.1 ¥Î¤á»{ÃÒ

   »{ÃÒ¬O«áºÝ¦øªA¾¹©M postmaster ½T«O­n¨D¦s¨ú¸ê®Æªº¥Î¤á¬O§_½T¬°¨ä¤Hªº¹Lµ{
   ¡C©Ò¦³±Ò°Ê Postgres ªº¥ÎªÌ³£»P»{ÃÒ¬O«áºÝ¦øªA¾¹©M postmaster pg_user Ãþ
   §O¤ñ¸û¡A¥H½T©w¥L­Ì¦³Åv°µ·Q°µªº¤u§@¡C ¦Ó¥ÎªÌ¯u¹ê¨­¤Àªº¿ë§O¤u§@¥H¦h­Ó¤£¦P
   ¤èªk§¹¦¨¡J
     * ¦b¨Ï¥ÎªÌ shell ¤¤¡J ¦b¨Ï¥ÎªÌ shell ª½±µ±Ò°Êªº«áºÝ¦øªA¾¹°O¤U¥ÎªÌªº¡]
       ¦³®Ä¡^¨Ï¥ÎªÌ¥N¸¹ (effective user-id)¡A¤§«á§@¤@¦¸ setuid ¨Ó¤Æ¨­¬°
       postgres¡C ¦³®Ä¨Ï¥ÎªÌÃѧO¸¹·|³Q¥Î§@¦s¨ú±±¨îªº°ò¦¡C¦A¨S¦³¨ä¥L»{ÃÒ¤u
       §@¡C
     * ¨Ó¦Ûºôµ¸¡J ¦pªG Postgres ¨t²Î¥H¤À´²¦¡¹B¦æ¡A¥ô¦ó¤H³£¥i¦s¨ú
       postmaster ¦æµ{ (process) ªº¤¬Ápºô TCP °ð¡C¸ê®Æ®wºÞ²z­û»Ý³]©w
       $PGDATA ¥Ø¿ý¤¤ªº pg_hda.conf ÀÉ¡A¨Ó«ü©w¤£¦P¥D¾÷³s±µ¤£¦P¸ê®Æ®w®É©Ò¥Î
       ªº»{ÃÒ¨t²Î¡C ½Ð°Ñ¾\ pg_hba.conf(5) ¡]man 5 pg_hba.conf¡^ ¥H¤F¸Ñ¤£¦P
       »{ÃÒ¨t²Î¡C·íµM¡A®Ú¾Ú¥D¾÷¨Ó¶i¦æ»{ÃÒ¦b Unix ¤]¤£¬O²@µL¯}Þä¡C¦³¨M¤ßªº
       ¤J«IªÌ¤]¥i¥H°°¸Ë¦Û¤v©Ò¥Îªº¥D¾÷¡C³o¨Ç«O¦w°ÝÃD¤£¦b Postgres ªº±±¨î½d
       ³ò¡C
       
10.2 ¨Ì¾Ú¥D¾÷±±¨î¦s¨ú

   ¨Ì¾Ú¥D¾÷±±¨î¦s¨ú§Y PostgreSQL ¥Î©ó¨M©w¤°»ò«È¤á¥i¦s¨ú¸ê®Æ®w©M¥L­Ì¦p¦ó½T
   »{¨­¥÷ªº¹Lµ{¡C¨C­Ó¸ê®Æ®w³£¦³¤@­Ó¦W¬° pg_hba.conf ªºÀɮסA¦b¥¦ªº
   $PGDATA ¥Ø¿ý¤¤¡A¥¦±±¨î½Ö¯à¦s¨ú¸ê®Æ®w¡C¨C­Ó¦s¨ú¸ê®Æ®wªº¥Î¤á³£­n¦b
   pg_hba.conf ¤¤¦³¬ÛÀ³ªº¬ö¿ý¡C§_«h©Ò¦³¨Ó¦Û¸Ó«È¤áªº³s±µ³£·|¥H"User
   authemtication failed" ¿ù»~°T®§³Q©Ú¡C
   
   ½Ð°Ñ¾\ pg_hba.conf(5) ªº man page¡]man 5 pg_hba.conf¡^¡C
   
   pg_hba.conf Àɪº°ò¥»®æ¦¡¬O¤@²Õ¬ö¿ý¡A¤@¦æ¤@­Ó¡CªÅ¦æ©Î¥H hash ¦r¥À¡]#¡^¶}
   ©lªº¦æ«h¤£²z·|¡C¤@­Ó¬ö¿ý¥Ñ¤@¨Ç¥ÎªÅ®æ©M / ©Î Tab ¤À¶}ªºÄæ¦ì²Õ¦¨¡C
   
   ±q«È¤á¨Óªº³s±µ¥i¸g Unix ´¡®y©Î¤¬Ápºô´¡®y¡]§Y TCP/IP¡^¡C¨Ó¦Û Unix ´¡®yªº
   ³s±µ¥Î¥H¤U®æ¦¡ªº°O¿ý±±¨î¡J
     _________________________________________________________________
   
local database authentication method
     _________________________________________________________________
   
   ¦Ó
   
   database «ü©w¥»¬ö¿ý¥Î©ó­þ­Ó¸ê®Æ®w¡Call ¥Nªí¥¦¾A¥Î©ó©Ò¦³¸ê®Æ®w¡C
   
   authentication method «ü©w¥Î¤á¦b¨Ï¥Î Unix ´¡®y®É¥Î¨Ó»{ÃÒªº¤èªk¡C¤£¦Pªº
   ¤èªk®e«á¸Ô­z¡C
   
   ¨Ó¦Û¤¬Ápºô´¡®yªº³s±µ¥Î¥H¤U®æ¦¡ªº°O¿ý±±¨î¡J
     _________________________________________________________________
   
host database TCP/IP-address TCP/IP-mask authentication method
     _________________________________________________________________
   
   TCP/IP ¦a§}·| ÅÞ¿è¤W and'ed ¨ì«ü©wªº TCP/IP ¸n©M«È¤áªº TCP/IP ¦a§}¡C¦p
   ¨âªÌ¬Ûµ¥¡A³o¬ö¿ý·|¥Î©ó³o­Ó³s±µ¡C¦pªG¤@­Ó³s±µ²Å¦X¶W¹L¤@­Ó¬ö¿ý¡A Àɮפ¤ªº
   ²Ä¤@­Ó¬ö¿ý·|³Q¨Ï¥Î¡C¤£½× TCP/IP ¦a§}ÁÙ¬O TCP/IP ¸n³£¬O¥H¤ÀÂIªº¤Q¶i¼Æ®æ
   ¦¡ (dotted decimal notation) ªí¹F¡C¦pªG¤@­Ó³s±µ©M©Ò¦³¬ö¿ý³£¤£²Å
   ¡Areject »{ÃÒ¤èªk±N·|³Q¨Ï¥Î¡C¡]°Ñ¾\ [60]»{ÃÒ¤èªk¡^
   
10.3 »{ÃÒ¤èªk

   Unix ©M TCP/IP ´¡®y³£¤ä´©¥H¤U»{ÃÒ¤èªk¡J
     * trust µL±ø¥ó¦a®e³\³s±µ¡C
     * reject µL±ø¥ó¦a©Úµ´³s±µ¡C
     * crypt °Ý«È¤áºÝ¥ÎªÌªº±K½X¡C¥¦·|¸g¥[±K¡]¨Ï¥Î crypt(3)¡^©M»P
       pg_shadow ªí®æªº±K½X¤ñ¸û¡C¦pªG±K½X¬Û²Å¡A«K®e³\³s±µ¡C
     * password °Ý«È¤áºÝ¥ÎªÌªº±K½X¡C¥¦·|­ì¸Ë¶Ç°e©M»P pg_shadow ªí®æªº±K½X
       ¤ñ¸û¡C¦pªG±K½X¬Û²Å¡A«K®e³\³s±µ¡C¤@­Ó¿ï¾Ü©Êªº±K½XÀÉ¥i¦b password Ãö
       Áä¦r«á¥X²{¡C³o¼Ë±K½Xªº°t¹ï·|¥Î³oÀɮסA¦Ó¤£¬O pg_shadow ÀɮסC½Ð°Ñ¾\
       pg_passwd¡C
       
   ¥H¤U»{ÃÒ¤èªk¥u¨ü TCP/IP ´¡®y¤ä´©¡J
     * krb4 ¥Î Kerberos V4 ¨Ó»{ÃҥΤá¡C
     * krb5 ¥Î Kerberos V4 ¨Ó»{ÃҥΤá¡C
     * ident ¥Î«È¤áºÝªº ident ¦øªA¾¹¨Ó»{ÃҥΤá¡]RFC 1413¡^¡C¦b ident ÃöÁä
       ¦r«áÁÙ¥i¿ï¾Ü©Ê¦a«ü©ú¤@­Ó¬M®g¡AÅý ident ¥Î¤á¦WºÙ¹ïÀ³¨ì Postgres ¥Î¤á
       ¦WºÙ¡C¹ïÀ³ªºÃö«YÀx¦s¦b $PGDATA/pg_ident.conf Àɤ¤¡C
       
   ³o¸Ì¦³¤@¨Ç¨Ò¤l¡J
     _________________________________________________________________
   
# «H¥ô©Ò¦³¨Ó¦Û Unix ´¡®yªº³s±µ¡C
local   trust
# «H¥ô©Ò¦³³o³¡¹q¸£¸g TCP/IP ¨Óªº³s±µ¡C
host    all 127.0.0.1   255.255.255.255     trust
# §Ú­Ì°Q¹½³o³¡¹q¸£¡C
host    all 192.168.0.10    255.255.255.0       reject
# ³o³¡¹q¸£¤£À´¥[±K¡A©Ò¥H§Ú­Ì­n¯Â¤å¦rªº±K½X¡C
host    all 192.168.0.3 255.255.255.0       password
# ³o¸s¹q¸£ªº¨ä¥L¦¨­û³£­n´£¨Ñ¥[±K¤Fªº±K½X¡C
host    all 192.168.0.0 255.255.255.0       crypt
     _________________________________________________________________
   
10.4 ¦s¨ú±±¨î

   Postgres ´£¨Ñ¤F­­¨î¨ä¥L¥Î®a¦s¨ú¦Û¤v¸ê®Æªº¾÷¨î¡C
     * ¸ê®Æ®w¶W¯Å¥Î®a (Database superusers) ¸ê®Æ®w¶W¯Å¥Î®a¡]§Y
       pg_user.usesuper ³]©w¬°¹ïªº¥Î®a¡^¦Û°Ê³q¹L¥H¤U¨â¶µ¤§¥~ªº©Ò¦³¦s¨ú±±¨î
       ¡Jpg_user.usecatupd ¨S¦³³]©w¬°¹ïªº¸Ü¤£­ã¤â°Ê§ó·s¨t²Î¥Ø¿ý¡AºR·´¨t²Î
       ¥Ø¿ý¡]©Î­×§ï¥¦ªººõ¥Ø (schema)¡^«h¥Ã¤£­ã³\¡C
     * ¦s¨ú¯SÅv (Access Privilege) ¦s¨ú¯SÅv¬O¥Î¨Ó­­¨îŪ¡B¼g©M³]©wÃþ§O
       (class) ³W«hªºÅv¤O¡A¥Î SQL grant/revoke(1) ¨Ó¨M©w¡C
     * ²¾°£Ãþ§O©M­×§ïºõ¥Ø ·´·À©Î­×§ï²{¦sÃþ§Oªºµ²ºc¡A¦p­×§ï¡B¥á±óªí®æ¡A©M¥á
       ±ó¯Á¤Þ¡A¥u¯à¥ÑÃþ§Oªº¥D¤H°õ¦æ¡C ¦p¤W©Ò­z¡A³oÃþ°Ê§@¤£³\¥Î©ó¨t²Î¥Ø¿ý¡C
       
10.5 ¸g SSH ªº«O¦w TCP/IP ³s±µ

   §A¥i¥Î ssh ¨Ó¥[±K«È¤á©M Postgres ¦øªA¾¹¶¡ªººôµ¸³s±µ¡C°µ±o¥¿½Tªº¸Ü¡A³o¼Ë
   ¥i§Î¦¨¤@­Ó«O¦wªººôµ¸³s±µ¡C
   
   ssh ªº¤å¥ó´£¨Ñ¤F¤j³¡¥÷¶}©l®É»Ý­nªº¸ê®Æ¡C½Ð°Ñ¾\
   [61]http://www.heimhardt.de/htdocs/ssh.html ¥H¥[²`¤F¸Ñ¡C³v¨B¸ÑÄÀ¥u»Ý¨â
   ¨B¡C
   
   ¸g ssh §Î¦¨¤@±ø«O¦w³q¹D¡J ³v¨B¸ÑÄÀ¥u»Ý¨â¨B¡C
     * ²£¥Í¤@±ø¨ì«áºÝ¹q¸£ªº³q¹D¡A¦p¤U¡J
         _____________________________________________________________
       
ssh -L 3333:wit.mcs.anl.gov:5432 postgres@wit.mcs.anl.gov
         _____________________________________________________________
       
     * -L °Ñ¼Æ«áªº²Ä¤@­Ó¼Æ¦r¡A33333¡A¬O§A³o¤è³q¹Dªº°ð¸¹¡C²Ä¤G­Ó¼Æ¦r¡A
       5432¡A¬O¥t¤@¤èªº²×ÂI¡X«áºÝªº°ð¸¹¡C¨â­Ó°ð¼Æ¤§¶¡ªº¦WºÙ©Î¦a§}ÄÝ©ó¦øªA
       ¾¹¡C ssh ³Ì«á¤@­Ó°Ñ¼Æ¤¤¥Î®a¦Û¦æ¿ï¾Ü¬O§_¥[¤Wªº¥Î¤á¦WºÙ¤]¬O¡C ¨S¦³¥Î
       ¤á¦WºÙªº¸Ü¡Assh ·|¹Á¸Õ¨Ï¥Îµn¤J«È¤áºÝ¹q¸£ªº¥Î¤á¦WºÙ¡C §A¥i¥Î¥ô¦ó¦øªA
       ¾¹¹q¸£±µ¨üªº¥Î¤á¦WºÙ¡A¤£¤@©w­n¥Î©M PostgreSQL ¦³Ãöªº¡C
     * §A²{¦b¤w¶}©l¤F¤@­Ó ssh ®É¬q¡A§A§â¥i§A©Ò¥Îªº¹q¸£ªº Postgres «È¤á³s±µ
       ¨ì§A«e¤@¨B©Ò©wªº°ð¸¹¡C¦p§A¨Ï¥Î psql¡A§A­n¥t¤@­Ó¤¶­±¡A¦]¬°¤§«e©Ò¥Îªº
       ¤@­Ó¤w³Q ssh ¦û¾Ú¡C
         _____________________________________________________________
       
psql -h localhost -p 3333 -d mpw
         _____________________________________________________________
       
     * ª`·N§A­n¥Î -h °Ñ¼Æ¨Ï±o§Aªº«È¤á¥Î TCP ´¡®y¦Ó¤£¬O Unix ´¡®y¡C¦pªG§A¥Î
       5432 §@³q¹Dªº²×ÂI§A¥i²¤¥h°ðªº°Ñ¼Æ¡C
       
10.6 Kerberos »{ÃÒ

   Kerberos ¬O¤@­Ó·~¬É¼Ð·Çªº«O¦w»{ÃÒ¨t²Î¡A¾A¥Î©ó¸g¹L¤½¥Îºôµ¸ªº¤À´²¦¡¨t²Î¡C
   
   ¦p¦ó¨ú±o Kerberos »{ÃÒ¨t²Î¨Ã¤£ÀH¦P Postgres ´²§G¡C¤£¦Pª©¥»ªº Kerberos
   ¦h¥H¥i¨Ñ¿ï¾Üªº³n¥óªº§Î¦¡¦Û§@·~¨t²Î¼t°Ó±o¨ì¡C¦¹¥~¡A­ìµ{¦¡½Xªºµo¦æª©¥»
   (distribution) ¥i¦Û MIT Project Athena ±o¨ì¡C
     _________________________________________________________________
   
ª`·N¡J§Y¨Ï§A¨Ï¼t°Ó´£¨Ñ¤F Kerberos¡A§A¤´¥i¯à·Q¥Î MIT
ª©¡A¦]¬°¤@¨Ç¼t°Óªºª©¥»³Q¬G·N§ËÃa¥H­P¤£¯à©M MIT ª©¥»¦X§@¡C
     _________________________________________________________________
   
   ¦³Ãö Kerberos ªº¬d¸ß¥i´£¥æ§Aªº¼t°Ó©Î MIT Project Athena¡Cª`·N FAQLs¡]±`
   °Ý°ÝÃD¦W³æ¡AFrequently-Asked Questions Lists) ·|³Q©w®É±H¦Ü Kerberos ³q
   «H½×¾Â¡]±H«H¥h­q¾\¡^¡A©M USENET ·s»D²Õ¡C
   
   ¦w¸Ë¡J ¦w¸Ë Kerberos ¦b Kerberos Installation Notes ¤¤¤w¸Ô²Ó»¡©ú¡C­n½T
   ©w¦øªA¾¹Áä½XÀÉ (key file)¡]srvtab ©Î keytab¡^¥i³Q postgres ¥Î¤áŪ¨ì¡CÄy
   ³]©w src/Makefile.global Àɪº KRBVERS ÅܼơAPostgres ©Î¨ä«È¤áµ{¦¡¥i½sĶ
   ¬°¨Ï¥Î MIT Kerberos ³q°T¨ó©wªº²Ä¥|©Î¤­ª©¡C§A¤]¥i§ïÅÜ Postgres ´Á±æ§ä¨ì
   ¬ÛÃö¨ç¦¡®w¡B¼ÐÀYÀÉ©M¦Û¤vªº¦øªA¾¹Áä½XÀɪº¦ì¸m¡C½sĶ§¹«á¡A Postgres ­nµn
   °O¬°¤@­Ó Kerberos ªA°È¡C½Ð°Ñ¾\ Kerberos Operations Notes ©M¬ÛÃö manual
   pages ¥H¨ú±o¦³Ãöµn°OªA°Èªº¸Ô±¡¡C
   
   ¾Þ§@¡J ¦w¸Ë¤§«á¡APostgres ¦b¦U¤è­±À³¦p¤@¯ë Kerberos ªA°È¹B§@¡C­nª¾¹D»{
   ÃÒªº¨Ï¥Î¤èªk¡A½Ð°Ñ¾\ PostgreSQL User's Guide ¦³Ãö postmaster ©M psql ªº
   ³¹¸`¡C
   
   ¦b Kerberos ²Ä¤­ª©±¾³¨ (hooks)¡A¹ï¥Î¤á©MªA°È©R¦W§@¤F¥H¤U°²³]¡]¤]½Ð°Ñ¾\
   ¥H¤Uªí®æ¡^¡C
     * ¥Î¤áªº¥D­n¦WºÙ (principal names¡Aanames) ²Ä¤@­Ó³¡¥÷¤¤°²³]§t¦³ Unix
       / Postgres ¥Î¤á¦WºÙ¡C
     * Postgres ªA°È°²³]¦³¨â­Ó³¡¥÷¡AªA°È¦WºÙ©M¥D¾÷¦WºÙ¡C«áªÌ¦p¦P²Ä¥|ª©ªº®æ
       ¦¡ ¡]§Y°£¥h©Ò¦³°ì¦Wªº³¡¤À¡^¡C
     _________________________________________________________________
   
                ªí®æ¡JKerberos °Ñ¼Æ¨Ò¤l
 ------------------------------------------------------
 °Ñ¼Æ       ¨Ò¤l
 ------------------------------------------------------
 user       frew@S2K.ORG
 user       aoki/HOST=miyu.S2K.Berkeley.EDU@S2K.ORG
 host       postgres_dbms/ucbvax@S2K.ORG
 ------------------------------------------------------
     _________________________________________________________________
   
11. PostgreSQL ªº«eºÝ GUI ¤u¨ã¡]¹Ï¹³¨Ï¥ÎªÌ¬É­±¡^

   ºô­¶ÂsÄý¾¹¦b¥¼¨Ó±N·|¦¨¬°³Ì¬y¦æªº«eºÝ GUI¡C«Øij§A§â©Ò¦³¡u¯ª¶Ç¡vªºµøµ¡
   95/NT µ{¦¡§ï¼g¬°¦bºô¤W°õ¦æªºµ{¦¡¡C
   
   §A­n¨Ï¥Îºô¤WÀ³¥Îµ{¦¡¦øªA¾¹¦p [62]Enhydra ¡]¨Ï¥Î Java¡^©Î [63]Zope ¡]¨Ï
   ¥Î Python¡^©Î [64]OpenACS ¡C
   
   ³Ì¨Îºô¤W©R¥O½Z (script) ½s¼g¡]©Î½sĶ¡^»y¨¥¬O [65]PHP+Zend ½sĶ¾¹¡CPHP
   ¥\¯à¤Q¤À±j«l¡A¦]¬°¥¦§â Perl¡BJava¡BC++ ©M Javascript ªº¥\¯àµ²¦X¨ì¤@ºØ»y
   ¨¥¤¤¡A¦Ó¥B¥i©ó©Ò¦³§@·~¨t²Î¡XUnixes ©Mµøµ¡ NT/95 °õ¦æ¡C
   
   ±Æ¦W¥H³ßÅwªºµ{«×¬°¥ý«á¡A³Ì¨Î¤u¨ã¬°
     * Enhydra ¦b [66]Enhydra ¥[¤W Borland Java JBuilder Linux ª©
       [67]http://www.inprise.com
     * Zope ¦b [68]Zope
     * OpenACS ¦b [69]OpenACS
     * PHP ©R¥O½Z©M Zend ½sĶ¾¹ [70]PHP+Zend ½sĶ¾¹
     * X-Designer ¤ä´© C++, Java ©M MFC [71]http://www.ist.co.uk/xd
     * Windows95 ©M Unix ª©ªº QT ¦b [72]http://www.troll.no ©M
       [73]ftp://ftp.troll.no
     * Code Crusader ¦b Linux cdrom ¤¤¡A®Ú¾Ú MetroWorks Code Warrior ¼g¦¨
       ªº§K¶O³n¥ó
       [74]http://www.kaze.stetson.edu/cdevel/code_crusader/about.html
     * MetroWorks ªº Code Warrior [75]http://www.metrowerks.com
     * GNU Prof C++ IDE¡A¨Ó¦Û [76](Redhat) Cygnus
       [77]http://www.cygnus.com
     * Borland C++ Builder Linux ª© [78]http://www.inprise.com
     * Borland Java JBuilder Linux ª© [79]http://www.inprise.com
       
   ¥H³Ì¨Î¬°¥ýªº»y¨¥¿ï¾Ü¡X
    1. Java¡A¦ý¥¦ªºµ{¦¡°õ¦æ±o«ÜºC¡A¦Ó¥B­n±ÂÅv¶O¡CC++ ¤ñ Java §Ö¤­­¿¡I¡I
    2. Python¡]±j¤jªºª«¥ó¾É¦V©R¥O½Z»y¨¥¡^¡C
    3. PHP ¸Uºûºô¦øªA¾¹©R¥O½Z¥[¤W HTML¡BDHTML¡BJavascript «È¤áºÝ©R¥O½Z¤Î
       Java-Applet¡C
    4. Perl ©R¥O½Z»y¨¥¨Ï¥Î Perl-Qt ©Î Perl-Tk [80]Perl ¸ê®Æ®w¤¶­±
    5. Omnipresent ©M Omnipotent »y¨¥ C++ (GNU g++)¡J
          + Fast CGI¡]¥H C++ ¼g¦¨¡^¥[¤W Javascript/Java-Applet §@¬°ºô­¶«e
            ºÝ¤¶­±
          + GNU C++ ¥[ QtEZ ©Î QT
          + GNU C++ ¥[ Lesstif ©Î Motif¡C
       
   ÁÙ¦³¨ä¥L¤u¨ã¡XPostgreSQL µo¦æª©¥» (distribution) ¤¤¦³¤@­Ó¦W¬°¡¥pgTcl¡¦
   ªº Tcl/Tk ¤¶­±µ{¦¡®w¡CTcl/Tk ¦³¤@­Ó¦W¬° SpecTcl ªººî¦X¶}µoÀô¹Ò¡C
   
     * Lesstif Motif ¤u¨ã
       [81]ftp://ftp.redhat.com/pub/contrib/i386/lesstif*.rpm
     * Vibe Java/C++ ¦b [82]http://www.LinuxMall.com/products/00487.html
     * JccWarrior [83]ftp://ftp.redhat.com/pub/contrib/i386/jcc*.rpm
     * Tcl/Tk [84]http://www.scriptics.com
     * ¦W¬° INCR ªº Tcl ª«¥ó¾É¦V©µ¦ù [85]http://www.tcltk.com
     * Visual TCL ºô¯¸ [86]http://www.neuron.com
     * Visual TCL Redhat rpm ¦b
       [87]ftp://ftp.redhat.com/pub/contrib/i386/visualtcl*.rpm
     * [88]http://sunscript.sun.com/
     * [89]http://sunscript.sun.com/TclTkCore/
     * [90]ftp://ftp.sunlabs.com/pub/tcl/tcl8.0a2.tar.Z
     * Java FreeBuilder
       [91]ftp://ftp.redhat.com/pub/contrib/i386/free*.rpm
     * SpecTCL [92]ftp://ftp.redhat.com/pub/contrib/i386/spec*.rpm
     * PostgreSQL ªº Java RAD ¤u¨ã Kanchenjunga
       [93]http://www.man.ac.uk/~whaley/kj/kanch.html
     * Applixware ¤u¨ã [94]http://www.redhat.com ¡]Ķ«ö¡JRedhat ¦­¤w°±°â
       Applix ²£«~¡C¡^
     * XWPE X Window Programming Environment
       [95]http://www.identicalsoftware.com/xwpe/ ©Î
       [96]ftp://ftp.rpi.edu/~payned/xwpe
       [97]ftp://ftp.redhat.com/pub/contrib/i386/xwpe*.rpm
     * XWB X Window Work Bench
       [98]ftp://ftp.redhat.com/pub/contrib/i386/xwb*.rpm
     * NEdit [99]ftp://ftp.redhat.com/pub/contrib/i386/nedit*.rpm
       
   §A¤]¥i¦bµøµ¡ 95 ¤¤¨Ï¥Î Borland C++ Builder¡BDelphi¡BBorland JBuilder¡B
   PowerBuilder ¸g ODBC/JDBC ÅX°Êµ{¦¡³s±µ¨ì unix ¹q¸£ªº PostgreSQL¡C
   
12. PostgreSQL ªº¤¶­±ÅX°Êµ{¦¡

12.1 PostgreSQL ªº ODBC ÅX°Êµ{¦¡

   ODBC ¥Nªí¥Ñ·L³n¨î©wªº¡¥Open DataBase Connectivity¡¦¡C ¥¦¬O±q¤£¦P¼t°Óªº
   ¤£¦P¸ê®Æ®w¦s¨ú¸ê®Æªº¬y¦æ¤¶­±¡C¨Ï¥Î ODBC ÅX°Êµ{¦¡¼g¦¨ªº³n¥ó«OÃÒ¥i¥Î©ó¤£
   ¦P¸ê®Æ®w¡A¦p PostgreSQL¡BOracle¡BSybase ©M Informix µ¥¡C
   
     * [100]PostODBC ¤w¸g¥]¬A¦bµo¦æª©¥»¤¤¡C½Ð°Ñ¾\¥Dºô­¶
       [101]http://www.postgresql.org¡C ¥¦¤w¥]¬A¦b PostgreSQL ¥úºÐ¤¤¡C
     * ¦b [102]http://www.iodbc.org ªº¶}©ñ­ì©l½X ODBC ±M®×¡C
     * [103]http://www.openlinksw.com Open Link Software Corporation °â½æ
       PostgreSQL ©M¨ä¥L¸ê®Æ®wªº ODBC ÅX°Êµ{¦¡¡C¦o¤]°e¥X§K¶Oªº ODBC (¦WÃB
       ¦³­­¡^¡C
     * Insight ªº PostgreSQL ODBC
       [104]http://www.insightdist.com/psqlodbc ³o¬O PostODBC ªº©x¤èºô¯¸¡C
     * FreeODBC ®M¥ó [105]http://www.ids.net/~bjepson/freeODBC/¡C³o¬O¤@­Ó
       §K¶Oªº ODBC¡C
     * PostgreSQL ªº ODBC 32 Explorer [106]http://members.nbci.com/anhr
       
12.2 PostgreSQL ªº UDBC ÅX°Êµ{¦¡

   UDBC ¬O¤@ºØ¿W¥ß©óÅX°Êµ{¦¡ºÞ²z­û (driver managers) ©M DLL ¤ä´©ªºÀRºA
   ODBC ª©¥»¡A¥Î¨Óª½±µ§â¸ê®Æ®w³s±µ¯à¤O´O¤J¨ìÀ³¥Î³n¥ó¤¤¡C
     * [107]http://www.openlinksw.com Open Link Software Corporation ¥X°â
       PostgreSQL ©M¨ä¥L¸ê®Æ®wªº UDBC ÅX°Êµ{¦¡¡COpen Link ¤]°e¥X§K¶Oªº
       UDBC (¦WÃB¦³­­¡^¡C
       
12.3 PostgreSQL ªº JDBC ÅX°Êµ{¦¡

   JDBC ¥Nªí¡¥Java DataBase Connectivity¡¦¡CJava ¬O¤@ºØª@¶§ (Sun
   Microsystems) ©Ò¶}µoªº¿W¥ß©ó¥­¥xªºµ{¦¡»y¨¥¡CJava µ{¦¡³]­p®v³Q¹ªÀy¨Ï¥Î
   JDBC ¨Ó¼¶¼g¸ê®Æ®wµ{¦¡¡A¥H¼W±jµ{¦¡¦b¤£¦P¸ê®Æ®w¡A¦p PostgreSQL¡BOracle
   ¡BInformix µ¥¤§¶¡ªº²¾´Ó¯à¤O¡C¦pªG§A¼g Java µ{¦¡¡A§A¥i¦b¥H¤Uºô¯¸¨ú±o
   PostgreSQL ªº JDBC ÅX°Êµ{¦¡¡C
   
   JDBC ÅX°Êµ{¦¡¤w¥]¬A¦b PostgreSQL µo¦æª©¥»ªº postgresql-jdbc*.rpm ®M¥ó¤¤
   ¡C
   
     * [108]http://www.demon.co.uk/finder/postgres/index.html ª@¶§ Java ªº
       PostgreSQL ³s±µ
     * [109]ftp://ftp.ai.mit.edu/people/rst/rst-jdbc.tar.gz
     * [110]http://www.openlinksw.com Open Link Software Corporation ¥X°â
       PostgreSQL ©M¨ä¥L¸ê®Æ®wªº JDBC ÅX°Êµ{¦¡¡COpen Link ¤]°e¥X§K¶Oªº
       JDBC (¦WÃB¦³­­¡^¡C
     * JDBC ­^°êºô¯¸ [111]http://www.retep.org.uk/postgres
     * JDBC FAQ ºô¯¸ [112]http://eagle.eku.edu/tools/jdbc/faq.html
       
   JDBC ªººô­¶¡B¾É¤Þ©M FAQ ¦b¡J
     * JDBC HOME [113]http://splash.javasoft.com/jdbc
     * JDBC ¾É¤Þ
       [114]http://www.javasoft.com/products/jdk/1.1/docs/guide/jdbc
     * JDBC FAQ [115]http://javanese.yoyoweb.com/JDBC/FAQ.txt
       
   ½Ð°Ñ¦Ò [116]´ú¸Õ Java ¤¶­± ¤@¸`¡C
   
12.4 PostgreSQL ªº Java

   Java µ{¦¡³]­p®v·|ı±o³o¨Ç¹ï¥L­Ì«Ü¦³¥Î¡C
     * [117]ftp://ftp.redhat.com/pub/contrib/i386 ¬Ý
       postgresql-jdbc-*.rpm
     * [118]http://www.blackdown.org
       
   ½Ð°Ñ¦Ò [119]´ú¸Õ Java ¤¶­± ¤@¸`¡C
   
13. PostgreSQL ªº Perl ¸ê®Æ®w¤¶­± (Database Interface, DBI)

13.1 PostgreSQL ªº PERL ¤¶­±

   PERL ¬O¡¥Practical Exptraction and Report Language¡¦ªºÂ²¼g¡C ¥@¤W©Ò¦³³n
   µw¥ó¥­¥x³£¥i¨Ï¥Î Perl¡C§A©Ò¦bµøµ¡ 95/NT¡BÄ«ªG³Áª÷¶ð iMac¡B©Ò¦³ Unix
   ¡]Solaris¡BHPUX¡BAIX¡BLinux¡BIrix¡BSCO µ¥µ¥¡^¡B¤j«¬¹q¸£ MVS¡B®à­±ªº
   OS/2¡BOS/400¡BAmdahl UTS ©M¨ä¥L«Ü¦h¹q¸£¡CPerl ¬Æ¦Ü¥i¦b«Ü¦h¤£¬y¦æ©M¤£¬°
   ¤Hª¾ªº¾Þ§@¨t²Î©Mµw¥ó°õ¦æ¡I¡I©Ò¥H¡A¦b¬Ý¨ì Perl ¦b¤@­Ó¨u¨£ªº¾Þ§@¨t²Î¤W°õ
   ¦æ®É¡A¤£¥²¤jÅå¤p©Ç¡C§A¥i¥H·Q¹³¨ì Perl ªº¨Ï¥ÎªÌ©M¶}µo¤H­ûªº¼Æ¶q¡C©M¡§C¡¨
   »y¨¥¬Û¦ü¡APerl ¤w¦³«Üªø¹Ø©R¡A¦Ó¦b¥¼¨Ó¼Æ¤d¦~¤´¤j¦æ¨ä¹D¡IPerl ªº°õ¦æ³t«×
   ¤ñ Java §Ö¤Q­¿¡A¦³®É¬Æ¦Ü¤ñ¡§C¡¨§Ö¡CJava ¬O¤@­Ó«D±`½ÆÂøªº¨t²Î¡A¬J¦³µêÀÀ
   ¾÷¾¹¡A¤S¦³ª½Ä¶¾¹¡A¨Ï±o¥¦«D±`½wºC¡B¤£Ã­©w©M¤£¥i¾a¡C Perl «h²¼ä¡B§Ö³t¡A
   §ó¬Oª«¥ó¾É¦V¡C
   
   PostgreSQL ªº Perl ¤¶­±¤w¥]¬A¦b PostgreSQL ªº¦w¸Ë®M¥ó¤¤¡C½Ð°Ñ¬Ý
   src/pgsql_perl5 ¥Ø¿ý¡C
     * Pgsql_perl5 ¹q¶lÁpµ¸¦a§}¡J [120]E.Mergl@bawue.de
     * Perl ºô­¶ [121]http://www.perl.com/perl/index.html
     * Perl ¾É¤Þ¡A½Ð¦b [122]http://reference.perl.com/ °Ñ¬Ý¾É¤Þ¥Ø¿ý
     * Perl FAQ ¦b
       [123]http://www.yahoo.com/Computers_and_Internet/Programming_Langu
       ages/Perl/
     * ±q [124]http://www.perl.com/CPAN/modules/by-module/CPAN ¨ú±o©Ò¦³
       Perl ¼Ò²Õ¤§¥À¡A¥´¤U¡¥/usr/bin/cpan¡¦¡B¡¥man CPAN¡¦©M¼Æ¥H¤d­pªº¼Ò²Õ
       [125]http://www.perl.com/CPAN-local/modules/by-module¡C
     * Perl GUI ¨Ï¥ÎªÌ¤¶­± Perl-Qt rpm¡J
       [126]ftp://ftp.redhat.com/pub/contrib/i386 ¤]½Ð¬Ý
       PerlQt-1.06-1.i386.rpm
     * Perl GUI ¨Ï¥ÎªÌ¤¶­± Perl-Qt¡J
       [127]http://www.accessone.com/~jql/perlqt.html
     * Perl GUI ¨Ï¥ÎªÌ¤¶­± Perl-XForms¡J
       [128]ftp://ftp.redhat.com/pub/contrib/i386¡A´M§ä
       Xforms4Perl-0.8.4-1.i386.rpm
     * Perl GUI ¨Ï¥ÎªÌ¤¶­± Perl-Tk¡J
       [129]ftp://ftp.redhat.com/pub/contrib/i386
     * Perl GUI kits¡J [130]http://reference.perl.com/query.cgi?ui
     * Perl ¸ê®Æ®w¤¶­±¡J
       [131]http://reference.perl.com/query.cgi?database
     * Perl ¨ì "C" ªºÂ½Ä¶¤u¨ã¡J
       [132]http://www.perl.com/CPAN-local/modules/by-module/B/ ´M§ä
       Compiler-a3.tar.gz
     * §â Perl ½sĶ¬°¥i°õ¦æÀÉ¡CPerl2Exe ¬O¤@­Ó¥i§â perl ©R¥O½ZÂର¥i°õ¦æÀÉ
       ªºªº«ü¥O¦C¤u¨ã¡C [133]http://www.indigostar.com/perl2exe.htm
     * Bourne shell ¨ì Perl ªºÂ½Ä¶¤u¨ã¡J
       [134]http://www.perl.com/CPAN/authors/id/MERLYN/sh2perl-0.02.tar.g
       z
     * awk Âର perl ªº a2p ©M sed Âର perl ªº s2p ¤w¥]¬A¦b PERL ´²§G¤¤¡C
     * ¤]½Ð¬Ý comp.lang.perl.* µ¥¦³Ãö PERL ªº·s»D²Õ
       
13.2 Perl ¸ê®Æ®w¤¶­± DBI

  ¦ó¿× DBI¡H
  
   Perl ¸ê®Æ®w¤¶­±¡]DBI¡^¬O Perl »y¨¥ªº¤@­Ó¸ê®Æ®w¦s¨úÀ³¥Îµ{¦¡¤¶­±¡]API¡^
   ¡CPerl DBI API ³W®æ©w¸q¤F¤@²Õ¨ç¼Æ¡BÅܼƩMºD¨Ò¡A¥H´£¨Ñ¤@­Ó¤@­P¦Ó¿W¥ß©ó¹ê
   »Ú©Ò¥Î¸ê®Æ®wªº¤¶­±¡C ¸ê®Æ®wÅX°Êµ{¦¡¡]Perl DBI¡^ªºµo°_¤H¬°¤@©w¼Æ¶qªº°Ó·~
   ¸ê®Æ®w¤ÞÀº¨î©w¼Ð·Ç¡A ©Ò¥H§A¥u»Ýªá«Ü¤Ö¤u¤Ò«K¥i±q Oracle Âà¨ì PostgreSQL
   ¡C
   
  PostgreSQL ªº DBD ÅX°Êµ{¦¡
  
   ¦b§A¦w¸Ë DBD PostgreSQL ¡]ÅX°Êµ{¦¡¡^«e¡A§A­n¥ý¦w¸Ë DBI¡A±q¥H¤U¦a¤è¨ú±o
   DBI ÅX°Êµ{¦¡¡J
     * ¥ý±q [135]http://www.perl.com/CPAN/modules/by-module/CPAN ¨ú±o©Ò¦³
       Perl ¼Ò²Õ¤§¥À¡A¥´¡¥/usr/bin/cpan¡¦¡B¡¥man CPAN¡¦©M¼Æ¥H¤d­pªº¼Ò²Õ
       [136]http://www.perl.com/CPAN-local/modules/by-module¡C
     * DBI ¼Ò²Õ [137]http://www.perl.com/CPAN-local/modules/by-module/DBI
     * DBI ¼Ò²Õ [138]http://www.symbolstone.org/technology/perl/DBI
     * DBI FAQ
       [139]http://www.symbolstone.org/technology/perl/DBI/doc/faq.html
     * Perl DBI ªº°Ñ¦Ò¤å¥ó
       [140]http://www.symbolstone.org/technology/perl/DBI
     * DBI ³q«H½×¾Â [141]http://www.fugue.com/dbi
     * Perl ¸ê®Æ®w°Ñ¦Ò¤å¥ó
       [142]http://www.perl.com/reference/query.cgi?section=database
     * ¤U¸ü DBI rpm ¡]ª`·N¡J¥i¯à¬Oª©¡^
       [143]http://rpmfind.net/linux/rpm2html/search.php?query=DBI
       
   ¦b¦¹¨ú±o DBD-Pg
     * ¥ý±q [144]http://www.perl.com/CPAN/modules/by-module/CPAN ¨ú±o©Ò¦³
       Perl ¼Ò²Õ¤§¥À¡A¥´¡¥/usr/bin/cpan¡¦¡B¡¥man CPAN¡¦©M¼Æ¥H¤d­pªº¼Ò²Õ
       [145]http://www.perl.com/CPAN-local/modules/by-module¡C
     * DBD ¼Ò²Õ [146]http://www.perl.com/CPAN-local/modules/by-module/DBD
       ¡A§ä DBD-pg ÀÉ©Î [147]DBD¡C
     * Comprehensive Perl Archive Network CPAN
       [148]http://www.perl.com/CPAN ¦b³o³B¿ï¡¥Database¡¦¡]¦b Search ²°¤l
       ¤W¤è¡^¡A À»¿ï¡¥Go¡¦«ö¶s¡C
     * ¹w¥ý½sĶ¤Fªºµøµ¡ NT/2000 ®M¥ó¥i¦b
       [149]http://www.edmund-mergl.de/export/DBD-Pg.zip ±o¨ì
     * ¤U¸ü DBD rpm ¡]ª`·N¡J¥i¯à¬Oª©¡^
       [150]http://rpmfind.net/linux/rpm2html/search.php?query=DBD
     * Perl ¼Ò²Õ¡]¼Æ¥H¤d­p¡^
       [151]http://www.perl.com/CPAN-local/modules/by-module¡C
       
  DBI ªº§Þ³N¤ä´©
  
     * ½Ð±N·N¨£©Î¿ù»~³ø§i³s¦P perl -v ©M perl -V ªº¿é¥X¡BPostgreSQL ªºª©¥»
       ¡BDBD-pg ªºª©¥»¡BDBI ªºª©¥»±H¦Ü [152]E.Mergl@bawue.de
       
  DBI ¤å¥ó
  
   ³o¸Ì¦³¤@¨Ç DBI ªº¸ê®Æ¨Ó·½¡C
   
   POD ¤å¥ó¡J POD ¬O´O¤J¨ì perl µ{¦¡¤¤¥Î¥H¡§§Y³õ¡¨¸ÑÄÀµ{¦¡½Xªº¤@¬q¤å¥ó¡A
   ¥Î¥Hµ¹µ{¦¡³]­p®v©M¼Ò²Õªº¥Î®a´£¨Ñ¦³¥Îªº¸ê®Æ¡CDBI ©MÅX°Êµ{¦¡ªº POD ¥¿¶V¨Ó
   ¶V¬y¦æ¡A­n¾\Ū¦³Ãö¤å¥ó¡A½Ð¨Ï¥Î¥H¤U«ü¥O¡C
     _________________________________________________________________
   
DBI ³W®æªº PO ¥i¥Î¥H¤U«ü¥O¾\Ū
        $ perldoc DBI

¨Ï¥Îµ²¦X¨ì DBD::Oracle ªº Oraperl ¼ÒÀÀ¼hªº¤H¥i¥Î¥H¤U«ü¥O¾\Ū¦p¦ó¥Î Oraperl
¤¶­±½s¼gµ{¦¡¡J
        $ perldoc Oraperl

DBD::mSQL ¼Ò²Õªº¥Î®a¥iÄy¥H¤U«ü¥O¾\Ū¤@¨Ç¸ÓÅX°Êµ{¦¡ªº¿W®a¨ç¼Æ (private
functions) ©M¯S²§¥\¯àªº¸ê®Æ¡J
        $ perldoc DBD::mSQL

POD ¤å¥ó¤¤¤]¥]§t±`¨£°ÝÃD¡C­n¾\Ūªº¸Ü½Ð¿é¤J¡J
        $ perldoc DBI::FAQ

POD ªº¤@¯ë¸ê®Æ¡X¦p¦ó¼¶¼g POD¡A¤Î¾ãÅ骺 POD ­õ¾Ç¡A¥iÄy¥H¤U«ü¥O¾\Ū¡J
        $ perldoc perlpod
     _________________________________________________________________
   
   ¦w¸Ë¤F Tk ¼Ò²Õªº¥Î®a¥i¯à·|¹ï¤@­Ó¦W¬° tkpod¡A¨Ï¥Î Tk ªº POD ¾\Ū¾¹¦³¿³½ì
   ¡C¥¦·|§â POD ½s±Æ¨ì¤@­Ó¤è«K¤Î¥i¾\Ūªº§Î¦¡¡C
   
   ¤]½Ð¬Ý¬Ý
     * ¨Ó¦Û DBI ªº³q«H½×¾Âªº¸ê®Æ
       [153]http://www.symbolstone.org/technology/perl/DBI/tidbits
     * DBI Perl Journal ºô­¶ [154]http://www.tpj.com
     * ¡§DBperl¡¨³o¤å³¹¦b¤@¤E¤E¤»¦~¤Q¤@¤ëªº¡§Dr. Dobbs Journal¡¨µoªí¡C
     * ¡§The Perl5 Database Interface¡¨¡A¤@¥»¥Ñ Alligator Descartes ¼g¦¨¡A
       ¥Ñ O'Reilly and Associates ¥Xª©ªº®Ñ¡C
       
   ¥Î®a¥i¯à°Ñ¥[ªº³q«H½×¾Â¬°¡J
     * ³q«H½×¾Â [155]http://www.fugue.com/dbi
     * dbi-announce ¹q¶l¦Ü [156]dbi-announce-request@fugue.com ¥H
       'subscribe' ¬°¥¿¤å¤º®e
     * dbi-dev ¶}µo¤H­û±M¥Î Email: [157]dbi-dev-request@fugue.com ¥H
       'subscribe' ¬°¥¿¤å¤º®e
     * dbi-users ¤@¯ë°Q½× Email: [158]dbi-users-request@fugue.com ¥H
       'subscribe' ¬°¥¿¤å¤º®e
     * ¬ü°ê³q«H¦s®w
       [159]http://outside.organic.com/mail-archives/dbi-users/
     * ¼Ú¬w³q«H¦s®w
       [160]http://www.rosat.mpe-garching.mpg.de/mailing-lists/PerlDB-Int
       erest
       
  µøµ¡ 95/NT ¦³¨S¦³ DBI ¤ä´©¡H
  
   DBI ©M DBD::Oracle ªº Win32 ª©¥»¤w¦¨¬° DBI ªº¼Ð·Ç³¡¤À¡C¦]¦¹¡A¤ñ DBI
   0.81 °ªªºª©¥»À³¸Ó·|¥¿±`¹B§@¡C³z¹L ODBC¡A§A¥i¥H¦s¨ú·L³n Access ©M
   SQL-Server ¸ê®Æ®w¡C¦b DBI-0.79¡]¤Î¥H«á¡^¦³¤@­Ó Win32::ODBC DBI ¼ÒÀÀ¼h¡C
   ¥¦¦W¬° DBI::W32ODBC¡C§A»Ý­n¨Ï¥Î Win32::odbc ¼Ò²Õ¡C
     * Win32 DBI [161]http://www.symbolstone.org/technology/perl/DBI
     * Win32 ODBC [162]http://www.roth.net
     * ·L³n SQL server ªº Perl ¤¶­±
       [163]http://www.algonet.se/~sommar/mssql
       
  °Ó·~¤ä´©¤Î°V½m
  
   PERL CLINIC : Perl Clinic ¥H¦X¬ù§Î¦¡¬° Perl¡BDBI¡BDBD::Oracle ©M
   Oraperl ´£¨Ñ°Ó·~¤ä´©¡C³o¨Ç¤ä´©¬O¥Ñ DBI §@ªÌ Tim Bunce ¤u§@ªº¤½¥q´£¨Ñªº
   ¡C±ýª¾¸Ô±¡¡A½Ð¬Ý¡J
     * ¤ä´© [164]http://www.perlclinic.com
     * ¤ä´© [165]http://www.perldirect.com
     * °ö°V [166]http://www.westlake.com/training
       
13.3 ´ú¸Õ Perl ¤¶­±

   ½Ð°Ñ¾\ [167]´ú¸Õ Perl¡XPostgreSQL ¤¶­±¤@¸`
   
14. PostgreSQL ºÞ²z¤u¨ã

14.1 PGACCESS - ºÞ²z PostgreSQL ªº GUI ¤u¨ã

   PgAccess ¬O PostgreSQL ªº Tcl/Tk ¤¶­±¡C¥¦¤w¸g¥]¬A¦b PostgreSQL ªºµo¦æ®M
   ¥ó¤¤¡C§A¥i¯à·Q±q³oºô­¶§ä¥X¥¦¦³¨S¦³·sª©¥»¡J
     * [168]http://www.flex.ro/pgaccess
     * ¦p¦³¥ô¦ó·N¨£¡B§ï¨}ªº«Øij¡A¹q¶l¡J [169]teo@flex.ro
       
   pgaccess ªº¥Îªk
     _________________________________________________________________
   
# man xhost
# xhost +
# su - postgres
bash$ man pgaccess
bash$ export DISPLAY=<¥D¾÷¦W>:0.0
bash$ pgaccess mydatabase
     _________________________________________________________________
   
   PgAccess ªº¯S¦â
   
   PgAccess µøµ¡¡XMain window, Table builder, Table(query) view, Visual
   query builder.
   
   Tables
     * ¶}±Òªí®æ (tables) ¬d¾\¡A³Ì¦h¤G¦Ê­Ó¬ö¿ý¡]¥i¦b perferences µæ³æ§ó§ï¡^
     * Äy©ì¦²««ª½®æ½u (grid line) ­«¾ã¤j¤p¡]¦b¦CªíªÅ¶¡ (table space) ¶i¦æ
       ¤ñ¦b¦Cªí¥Ø¿ý (table header) ¦n¡^
     * ³æ®æ¤¤¦Û°Ê´«¦æ¡X¨C­Óªí®æªº°t¸m¿W¥ßÀx¦s
     * ¶×¤J/¶×¥X¨ä¥LÀɮ׮榡¡]SDF¡BCSV¡^
     * ¹LÂo¥\¯à¡]¿é¤J¦p price>3.14 ªº¹LÂo¾¹¡^
     * ±Æ§Ç¥\¯à¡]¦Û¦æ¿é¤J»Ý±Æ§ÇªºÄæ¦ì¡^
     * §Y³õ½s¿è
     * §ï¨}¤Fªºªí®æ²£¥Í§U²z (table generator assistant)
     * §ï¨}¤FªºÄæ¦ì½s¿è
       
   Queries
     * ©w¸q¡B½s¿è©MÀx¦s¡§¥Î®a©w¸q¬d¸ß¡¨(user defined queries)
     * §â¬d¸ßÀx¦s§@¬°´ºÆ[ (views)
     * ¬d¸ßªº°õ¦æ
     * Æ[¬Ý select §Î¦¡ªº¬d¸ßµ²ªG
     * §R°£©M§ó§ï¬d¸ß¦WºÙ
     * ¨ã©ì¦²©M©ñ¤U¥\¯àªº Visual query builder¡C¦pªG§A¦³¦w¸Ë Netscape
       Navigator ªº Tcl/Tk ´¡¥ó¡A§A¥i¦b¦¹¬Ý¨ì¥¦¤u§@¡J ¡]Ķ«ö¡J¤£ª¾¦b­þ¡H¡I
       ¡^
       
   §Ç¦C (sequence)
     * ©w¸q¡B§R°£©MÀˬd§Ç¦C
       
   ¨ç¼Æ (Function)
     * ¨Ï¥Î SQL »y¨¥©w¸q¡BÀˬd©M§R°£¨ç¼Æ
       
   ±N¨ÓÁÙ·|¦³¥H¤U§ï¶i
     * ªí®æ³]­p¡]¼W¥[Äæ¦ì¡B§ó¦Wµ¥µ¥¡^
     * ¨ç¼Æ©w¸q
     * ³ø§i²£¥Í¾¹
     * °ò¥»ªº©R¥O½Z½s¼g¥\¯à
       
   ¦³Ãö LIBGTCL ªº¸ê®Æ
   
   §A·|¥Î¨ì PostgreSQL ¨ì Tcl ªº¤¶­±µ{¦¡®w libpgtcl¡A©Ò¿×ªº Tcl/Tk ¥i¡¥¸ü
   ¤J¡¦¼Ò²Õ¡Clibpgtcl ©M­ì©l½X¦ì©ó PostgreSQL ªº /src/interfaces/libpgtcl
   ¥Ø¿ý¡C¯S©w¨Ó»¡¡A§A»Ý­n¤@­Ó¥i¦b Tcl/Tk¡¥¸ü¤J¡¦ªº libpgtcl µ{¦¡®w¡C§Þ³N¤W
   ¨Ó»¡¡A¥¦©M´¶³qªº PostgreSQL ¥i¸ü¤J¥ØªºÀɨ䣬ۦP¡A¦]¬° libpgtcl ¬O¤@°ï
   ¥ØªºÀÉ (object files) ªº¶°¦X¡C³oÀɮצb Linux ¦W¬° libpgtcl.so¡C§A¥i¦b¥H
   ¤Wºô§}¤U¸ü¤@­Ó¬° Linux i386 ¨t²Î¹w¥ý½sĶ¤Fªºª©¥»¡C¥u»Ý§â³oÀɮ׫þ¨©¨ì¨t
   ²Îµ{¦¡®w¥Ø¿ý¡]/usr/lib¡^ §Y¥i¡C¦p¦³ºÃÃø¡A¨ä¤¤¤@­Ó¸Ñ¨M¤èªk¬O§R°£­ì©l½X¤¤
   ¦³Ãö¸ü¤J libpgtcl.so ªº¤@¥y©M¨Ï¥Î pgwish¡]©Î wishpg¡^¨Ó¸ü¤J
   pgaccess.tcl¡A¦Ó«D wish¡A¦]¬°³o wish ¤wÃìµ² libpgtcl ¨ç¦¡®w¡C
   
   ¦pªG§A¦b½sĶ pgaccess ¥Ø¿ý®É¹J¨ì crypt not found ªº°ÝÃD¡A½Ð¨Ï¥Î
   -lcrypt¡C
   
14.2 PostgreSQL ¹Ï«¬¤¶­±¬d¸ß¤u¨ã GtkSQL

   GtkSQL ¬O¤@­Ó¹Ï«¬¤¶­±¬d¸ß¤u¨ã¡]¹³ PostgreSQL ªº psql¡^¡C¥¦¥H GNU GPL µo
   ¦æ¡C¨Ï¥Î Gtk+ 1.2.3 ©M PostgreSQL 6.3 ¶}µo¦Ó¦¨¡C
   
   GtkSQL ªº¥Dºô¯¸¬° [170]http://gtksql.sourceforge.net¡C
   
   ¥¦ªº¥D­n¯S¦â¥]¬A¡J
    1. ¦h­Ó SQL ¼È¦s°Ï
    2. SQL ÃöÁä¦r¡Bªí®æ¦WºÙ©MÄæ¦ì¦Û°Ê§¹¦¨
    3. ²©öÅã¥Üªí®æ©w¸q
    4. PostgreSQL ©M MySQL ¤ä´©¡]¦Ó¥B®e©ö¥[¤W¨ä¥L¸ê®Æ®w¡^
       
   GtkSQL ¥Ø«eªºª©¥»¬° v. 0.3¡C§A¥i¦b
   [171]https://sourceforge.net/project/?form_grp=533 ¤U¸ü­ì©l½X¡C
   
14.3 µøµ¡¤¤ªº PostgreSQL ¤¬°Ê¦¡¬d¸ß¤u¨ã¡]WISQL ©Î MPSQL¡^

   MPSQL ´£¨Ñµ¹¨Ï¥ÎªÌ¤@­Ó¹Ï¹³ SQL ¤¶­±±±¨î PostgreSQL¡CMPSQL »P Oracle ªº
   SQL Worksheet ©Î·L³n SQL Server ªº¬d¸ß¤u¨ã WISQL Ãþ¦ü¡C¥¦¦³¤@­Óº}«Gªº
   GUI ©M«ü¥O°O¿ý¡C§A¤]¥i¥H°Å¤U¤Î¶K¤W¡C¥¦ÁÙ¦³¨ä¥L¦³§U´£°ª¥Í²£¤Oªº¥\¯à¡C
     * [172]http://www.troubador.com/~keidav/index.html
     * ¹q¶l¡J [173]keidav@whidbey.com
     * [174]http://www.ucolick.org/~de/ ¦b tcl_syb/wisql.html Àɤ¤
     * [175]http://www.troubador.com/~keidav/index.html
     * ¹q¶l¡J [176]de@ucolick.org
       
14.4 ¦W¬° PSQL ªº PostgreSQL ¤¬°Ê¦¡¬d¸ß¤u¨ã¡]ISQL¡^

   ISQL ¬O¨Ñ¤å¦r«ü¥O¦æ²×ºÝ¾÷¨Ï¥Îªº¡C³o¤w¥]¬A¦bµo¦æª©¥»¤¤¡A¦W¬° psql¡C©M
   Sybase ISQL¡BOracle SQLplus ¤Q¤À¬Û¦ü¡C¦b Unix «ü¥O´£¥Ü¿é¤J¡¥psql¡¦·|¥X
   ²{ psql> ´£¥Ü¡C
   
bash# su - postgres
bash$ man psql
bash$ psql mydatabase
¥´ \h ¥H¾\Ū«ü¥Oªº¨D§U°T®§

   «D±`¨Ï¥ÎªÌ¤Íµ½©M©ö¥Î¡C ¥i¦b¥~®Ø©R¥O½Z (shell script) ¤¤¨Ï¥Î¡C
   
14.5 MPMGR¡XPostgreSQL ªº¸ê®Æ®wºÞ²z¤u¨ã

   MPMGR ¬° PostgreSQL ¬O¨Ñ¤@­Ó¹Ï¹³ºÞ²z¤¶­±¡C§A¥i¦b¥H¤U¦a¤è§ä¨ì¥¦¡J
     * [177]http://www.mutinybaysoftware.com/
     * Email: [178]keidav@mutinybaysoftware.com
     * [179]http://www.troubador.com/~keidav/index.html
     * ¹q¶l¡J [180]keidav@whidbey.com
     * [181]http://www.ucolick.org/~de in file tcl_syb/wisql.html
     * PostgreSQL ªº WISQL [182]http://www.ucolick.org/~de/Tcl/pictures
     * ¹q¶l¡J [183]de@ucolick.org
       
14.6 PgAdmin¡BPhpPgAdmin ¤u¨ã

     * µøµ¡ 95/NT ªº PgAdmin ¤u¨ã µøµ¡ 95/NT ªº PostgreSQL ¸ê®Æ®w³]­p¤u¨ã
       [184]http://www.pgadmin.freeserve.co.uk
     * ºô¤W¹B§@ªººÞ²z¤u¨ã¡XPostgreSQL ¥Îªº PhpPgAdmin ¦b
       [185]http://www.phpwizard.net/projects/phpPgAdmin
       
14.7 PgBash - SQL shell ¤u¨ã

   PgBash ªº¥\¯àÃþ¦ü psql¡C¦Ó¥B¡APgBash ¨Ï¥Î bash ªº¥N¸¹ (alias)¡B¨ç¼Æ¡B¾ú
   ¥v½s¿è³Ð³y¥X¤@­ÓÆF¬¡ªº¤¬°Ê¾Þ§@Àô¹Ò¡A´£¨Ñ¦³¥Îªº¥\¯à¡C
   
   PgBash ªº¥Dºô­¶¦b
   [186]http://www.psn.co.jp/PostgreSQL/pgbash/index-e.html
   
   PgBash ¬O¤@­Ó¥]¬A PostgreSQL¡§ª½±µ SQL¡¨©Î¡§´O¤J¦¡ SQL¡¨ ("direct SQL"
   or the "embedded SQL") ¤¶­±ªº shell¡AÄy§ï¨} bash¡]¥Ø«e³Ì·sª©¬° 2.03
   ¡^shell ¦Ó¨Ó¡CPgBash ¥i¥Î§@µn¤J shell¡Bsub-shell¡]±q shell ±Ò°Êªº
   shell) ©M shell µ{¦¡¡C
   
   ¦b¦¹¡Aª½±µ SQL ¦³§âµ²ªGª½±µ¿é¥X¨ì¼Ð·Ç¿é¥Xªº¯à¤O¡C¦Ó´O¤J¦¡ SQL ¦³§â´£¨ú
   ¥X¨Óªºµ²ªG³]©w¨ì shell Åܼƪº¯à¤O¡C¥¦­Ì«h¦A¸g shell ©R¥O½Z (script) »y
   ¨¥³B²z¡C
   
   SQL »y¥y¡]¥H¤À¼Æ§@µ²§ô¦r§¹¡^³Q·í§@¤@­Ó shell «ü¥O³B²z¡A§Ú­Ì¥i¥H°õ¦æ
   SQL »y¥y¨Ã¥Î©óºÞ¹D (pipeline)¡B§ï¦V©M­I´º¤u§@¿ï¶µ¡C¦¹¥~¡A¨Ï¥Î exec_sql
   «ü¥O¡A§Ú­Ì¥i¥Î¤£¦Pªº¿ï¶µ¨Ó°õ¦æ SQL »y¥y¡C¹ê»Ú°õ¦æ SQL ªº¨Ò¤l¦p¤U¡C
     _________________________________________________________________
   
prompt> /usr/local/bin/pgbash                ¡K¡K±Ò°Ê pgbash
pgbash> connect to db2@xxx.com user sakaida; ¡K¡K³s±µ¨ì¸ê®Æ®w
pgbash> select * from test limit 100; | more ¡K¡K¨Ï¥ÎºÞ¹D
pgbash> select * from test; > /tmp/sel.dat & ¡K¡K¨Ï¥Î§ï¦V©M­I´º¤u§@
pgbash> addr='Osaka'
pgbash> insert into test values(
>  111,'name',                               ¡K¡K¥i¥H´«¦æ
> '$addr'                                    ¡K¡K¨Ï¥Î shell ÅܼÆ
> );
pgbash> connect to db3@yyy.com user postgres;
pgbash> set connection db2;                  ¡K¡K§â¥Ø«eªº¸ê®Æ®w§ï¬° db2
pgbash> select * from test;                  ¡K¡K¦Û db2 ªº test ªí®æ¿ï¾Ü
pgbash> exec_sql -d db3 "select * from test3"¡K¡K³s±µ¨ì db3
pgbash> ls
pgbash> begin;
pgbash> declare cur cursor for select * from test;
pgbash> fetch in cur into :AA,:BB;           ¡K¡K³]©w shell ÅܼÆ
pgbash> echo "AA=$AA, BB=$BB"
pgbash> end;
pgbash> fc fetch                             ¡K¡K½s¿è¾ú¥v¬ö¿ý©M°õ¦æ
pgbash> !echo                                ¡K¡K¦A¦¸ echo
pgbash> disconnect all                       ¡K¡KÃö³¬©Ò¦³³s±µ
pgbash> exit                                 ¡K¡Kµ²§ô pgbash
     _________________________________________________________________
   
14.8 PostgreSQL ªº Webmin ¤u¨ã

   webmin ¤u¨ã¡]³z¹L¥i¥H¬O«O¦wªººô­¶¨ÓºÞ²z Unix ¹q¸£¡^ªº³Ì·sª©¥»¡]0.82 ª©
   ¡^¦³¤@­Ó PostgreSQL ¼Ò²Õ¡C§A¥i¨Ï¥Î³o¼Ò²Õ¨Ó·s¼W¥Î¤á¡B¸s²Õ¡B¸ê®Æ®w¡Bªí®æ
   ¡A¤]¥i¬d¾\ªí®æ¡C
   
   §A¥i¦b [187]http://www.webmin.com/webmin §ä¨ì webmin¡C
   
15. PostgreSQL ¥Îªº¤¤¥¡³B²z¾¹

   °Ñ¾\¤å¥ó [188]http://metalab.unc.edu/LDP/HOWTO/CPU-Design-HOWTO.html ¥H
   ±o¨ì¥i¥Î©ó PostgreSQL ªº¤¤¥¡³B²z¾¹¦W³æ¡A¥»¤å¤]·|´£¨Ñ¦³Ãö¤¤¥¡³B²z¾¹ªº¸Ô
   ±¡¡C
   
   ¥H¤U¤¤¥¡³B²z¾¹ (CPUs)¡]32 ¦ì¤¸©M 64 ¦ì¤¸¡^¥i°õ¦æ PostgreSQL¡C¥¦­Ì³£¹B¦æ
   Linux¡C
     * ³B²z¾¹¥Dºô¯¸¬O¡JGoogle ·j´M¤ÞÀº CPU ¯¸
       ¡§Computers>Hardware>Components>Microprocessors¡¨
       [189]http://directory.google.com/Top/Computers/Hardware/Components
       /Microprocessors
       
   ¥H¤U¬° GNU/GPL ¶}©ñ­ì©l½X³B²z¾¹¦W³æ¡J
     * ¶}©ñ­ì©l½X³B²z¾¹ºô¯¸¡XGoogle ·j´M "Computers>Hardware>Open Source"
       [190]http://directory.google.com/Top/Computers/Hardware/Open_Sourc
       e
     * OpenRISC 1000 Free 32-bit ³B²z¾¹ IP ®Ö¤ß¡A»P±MÂ_ªº ARM ©M MIPS Ävª§
       ¡A¦ì©ó [191]http://www.opencores.org/cores/or1k
     * OpenRISC 2000 ¦ì©ó [192]http://www.opencores.org
     * ¼Ú¬w¤ÓªÅÁ`¸pªº ESA-32bit ©M ESA-64bit ³B²z¾¹¡§LEON¡¨Sparc
       [193]http://www.estec.esa.nl/wsmwww/leon
     * GNU/GPL Freedom 64-bit F-CPU [194]http://www.f-cpu.org ©Î
       [195]http://f-cpu.tux.org ¬M®g¯¸¥x¦ì©ó [196]http://www.f-cpu.de
     * STM 32 ¦ì¤¸¡AÂù¦V¶W¯Â¶q (2-way superscalar) RISC ³B²z¾¹
       [197]http://www.asahi-net.or.jp/~uf8e-itu
     * ¥H Verilog ©Î VRML ¼g¦¨ªº§K¶O·L³B²z¾¹©M DSP IP ®Ö¤ß
       [198]http://www.cmosexod.com
     * ¥i¨Ï¶}µo¥[§Öªº§K¶Oµw¥ó®Ö¤ß
       [199]http://www.scrap.de/html/opencore.htm
     * Opencores org¡X¶}©ñ­ì©l½X¡B¦Û¥Ñ IP core
       [200]http://www.opencores.org
     * Linux ¶}©ñµw¥ó©M§K¶O EDA ¨t²Î [201]http://opencollector.org
     * ARM ³B²z¾¹ [202]http://www.arm.com/Documentation
     * Cogent ³B²z¾¹ [203]http://www.cogcomp.com
       
   ¥H¤U¬°°Ó·~³B²z¾¹¦W³æ¡J
     * «Xù´µªº E2k 64-bit CPU¡]«Ü§Öªº³B²z¾¹¡I¡I¡I¡^ ºô¯¸¡J
       [204]http://www.elbrus.ru/roadmap/e2k.html Elbrus ¤w©M¬ü°êª@¶§·L¨t
       ²Îµ²¬°¦X§@¥ë¦ñ¡C
     * Áú°ê¤T¬P (Samsung) 64 ¦ì¤¸³B²z¾¹¡A¨Ó¦Û DEC Alpha¡C
       [205]http://www.samsungsemi.com Alpha-64bit ³B²z¾¹¦b
       [206]http://www.alpha-processor.com ¤T¬P©M¬ü°êªº Compaq ¥¿¦X§@¶}µo
       Alpha ³B²z¾¹¡C
     * ­^¯Sº¸ (Intel) IA 64 [207]http://developer.intel.com/design/ia-64
     * ¥þ¬ü¹F (Transmeta) crusoe ³B²z¾¹¡A©M¤£¤[±N¨Óªº¥þ¬ü¹F 64 ¦ì¤¸³B²z¾¹
       ¡C [208]http://www.transmeta.com
     * Sun Ultra-sparc 64 ¦ì¤¸³B²z¾¹ [209]http://www.sun.com ©Î
       [210]http://www.sunmicrosystems.com
     * MIPS¡@RISC ³B²z¾¹ [211]http://www.mips.com
     * SGI Graphics MIPS Architecture ¤¤¥¡³B²z¾¹
       [212]http://www.sgi.com/processors
     * IDT MIPS Architecture ¤¤¥¡³B²z¾¹ [213]http://www.idt.com
     * IBM Power PC¡]¼¯¦«Ã¹©Ô¡^
       [214]http://www.motorola.com/SPS/PowerPC/index.html
     * ¼¯¦«Ã¹©Ô´O¤J¦¡³B²z¾¹¡CÎÚ¾Ú PowerPC¡BM-CORE¡BColdFire¡BM68k ©Î
       M68HC ®Ö¤ß [215]http://www.mot-sps.com
     * M68k ©Î M68K ®Ö¤ß [216]http://www.mot-sps.com
     * ¤é¥ß SuperH 64-bit RISC ³B²z¾¹ SH7750 [217]http://www.hitachi.com
       ¦pªG¤@¦¸¶R¤@¸U­Ó¡A¨C­Ó¥u°â¥|¤Q¬ü¤¸¡C
     * Fujitsu 64-bit ³B²z¾¹ [218]http://www.fujitsu.com
     * HAL (California) Super-Sparc 64-bit ³B²z¾¹ [219]http://www.hal.com
       ¤]©M Sun ªº sparc µ²ºc¬Û®e¡C
     * Pyramid Technologies ªº Seimens Pyramid ¤¤¥¡³B²z¾¹
     * Intel X86 ¨t¦C 32-bit ¤¤¥¡³B²z¾¹¡A©bÄË¡BÁÉ´­µ¥µ¥¡C
     * AMDs X86 ¨t¦C 32-bit ¤¤¥¡³B²z¾¹¡AK-6¡BAthlon µ¥µ¥¡C
     * National's Cyrix X86 ³B²z¾¹ 32-bit CPUs Cyrix µ¥µ¥¡C
     * ¨ä¥L°ê®a¡]¥xÆW¡BÁú°ê¡A¤é¥»¡^ªº¨ä¥L¤¤¥¡³B²z¾¹¡H¡H½Ð§i¶D§Ú¡K¡K
       
   ¨ä¥L­«­nªº³B²z¾¹ºô¯¸¬°¡X
     * ¤Ü¥|¤p®É¥þ²y³B²z¾¹·s»D
       [220]http://www.newsnow.co.uk/cgi/NewsNow/NewsLink.htm?Theme=Proce
       ssors
     * ¹q¸£µ²ºcºôÛÚ¦ì©ó [221]http://www.cs.wisc.edu/~arch/www
     * ARM ³B²z¾¹ [222]http://www.arm.com/Documentation
     * °¶¤jªº³B²z¾¹ [223]http://www.cs.uregina.ca/~bayko/cpu.html
     * Microdesign ¸ê·½ [224]http://www.mdronline.com
       
16. ¥u¨Ï¥Î¤@­ÓÅã¥Ü¾¹ (monitor) ¨Ó³]©w¦h¥x PostgreSQL ¹q¸£

   ¦pªG§A¤£·Qªá¿ú©óµw¥óªº¿ï¾Ü¾¹¡A§A¥i¨Ï¥Î VNC (Vitual Network Computing)
   §Þ³N¡A¨Ó¦Û¹q°T·~¥¨¤H AT & T¡C VNC ¬O GPL ªº¡A¬O¤@­Ó¦Û¥Ñ³n¥ó¡CÄyµÛ VNC¡A
   §A¥i¦b¤@­Ó¨S¦³Åã¥Ü¾¹ªº¹q¸£°õ¦æ PostgreSQL µ{¦¡¡A¦Ó¦b»·ºÝ¹q¸£ªºÅã¥Ü¾¹Åã
   ¥Ü¥X¨Ó¡I¡I¤£¹L¡A¨º¨Ç¹q¸£¥²¶·¥H Ethernet ºôµ¸¤¶­±¥d³s±µ¡CVNC ¥i¦b
   [225]http://www.uk.research.att.com/vnc §ä¨ì¡C¡]Ķ«ö¡JVNC ¬O¨Ï¥Î
   TCP/IP¡A²z½×¤W¥u­n¦³ IP ¦a§}«K¥i¦b»·ºÝ¹q¸£³s±µ¡A¤£¤@©w­n Ethernet¡C¤£¹L
   ³t«×¥i¯à«ÜºC¡C¡^
   
   §A¥iÅ|°_¦h¥x¹q¸£¥D¾÷¤Î¥u¥Î¤@­ÓÅã¥Ü¾¹¡A¦Ó¥Î¤@­Ó KWM¡]Áä½L¡B¼v¹³¡BÅã¥Ü¾¹
   ¡^ (Keyborad, Video, Monitor) ¡]Ķ«ö¡JM ¬O§_·í¬°·Æ¹«¡H¡^¿ï¾Ü¾¹¨Ó¿ï¾Ü©Ò
   ¥Î¹q¸£¡C ³o¤£¦ý¸`¬Ù¦a¤è¡A´î¤Ö²V¶Ã¡A¤]¸`¬ÙÅã¥Ü¾¹¡BÁä½L©M·Æ¹«¡]¨C¥÷Á`­È
   100 ¦Ü 500 ¬ü¤¸¡^¡C
   
   ÄyµÛ¿ï¾Ü¾¹¡A§A¥iÅ|°ª¦h¥x PostgreSQL ¦øªA¾¹¡]¶}µo¡B´ú¸Õ¡B¥Í²£¡^¡B¤¬Ápºô
   ¦øªA¾¹¡B ftp ¦øªA¾¹¡B¤ºÁpºô¦øªA¾¹¡B¹q¶l¦øªA¾¹¡B·s»D¦øªA¾¹¦b¤@­Ó¤jÂd¡C³o
   ¿ï¾Ü¾¹¤]¥i±±¨îµøµ¡ 95/NT ©M OS/2 ¹q¸£¡C
   
   ½Ð¬d¬Ý¤U¦Cºô§}¡J
     * DataComm Warehouse Inc¡A¹q¸Ü 1-800-328-2261¡C¥L­Ì´£¨Ñ©Ò¦³«~ºØªº¹q¸£
       µw¥ó [226]http://www.warehouse.com 4 °ð¤â°Ê KVM ¿ï¾Ü¾¹ (PS/2) ¤j¬ù
       $89.99¡C Part No. DDS1354
     * Network Technologies Inc
       [227]http://www.networktechinc.com/servswt.html (120 ¬ü¤¸/PC 8 °ð)
       ªº²M³æ¤¤¥]¬A 'Server Switches' ©M 'Video only switches'
     * Scene Double Inc, ­^°ê
       [228]http://www.scene.demon.co.uk/qswitch.htm
     * Cybex corporation [229]http://www.cybex.com
     * Raritan Inc [230]http://www.raritan.com
     * RealStar Solutions Inc [231]http://www.real-star.com/kvm.htm
     * Belkin Inc [232]http://www.belkin.com
     * Better Box Communications Ltd.
       [233]http://www.betterbox.com/info.html
     * ¨ìªþªñªºµw¥ó°Ó¾Q¬d¸ß¡§Server Switch¡¨©ÎºÙ¡§KVM Auto Switches¡¨¡C
       
   ¦b yahoo ·j´M¾¹¤¤§ä¥X§ó¦h¦³¡§Server Switches¡¨©Î¡§KVM Switches¡¨ªº¤½¥q
   ¡C
   
   ¨C­Ó PostgreSQL ¸ê®Æ®w¦øªA¾¹³Ì¦n¥Î¤@³¡±M¥Îªº unix ¹q¸£¡A¥H¼W±jªí²{¡C¥ô
   ¦ó¨ä¥Lµ{¦¡/¦æµ{³£¤£­n¦b³o¹q¸£¤W°õ¦æ¡C ¾\Ū§A©Ò¦í¦a¤èªº³ø³¹ªº°Ó·~ª©§ä¥X
   ¦³­þ¨Ç°Ó¾Q°â½æ Intel ¹q¸£©M 13 ¦T³æ¦â¿Ã¹õ¡]¤Q¤À·G©yªº¿Ã¹õ¡^¡C§A¥u»Ý­nµw
   ¥ó¡A¦Ó¤£»Ý·L³nµøµ¡ / DOS¡C¸ê®Æ®w¦øªA¾¹¤£»Ý­n±m¦âÅã¥Ü¾¹¡A¦]¬°§A¥i¦b¤@­Ó
   ±m¦âªº­Ó¤H¹q¸£¤W»»±±ºÞ²z¡C
   
   §A¥i¦bºô¤W°Ó©±¶R¨ì³æ¯Âªº¹q¸£µw¥ó¡C§A¥i¦bºô¤W©ç½æ¤¤§ä¨ì¦nªº»ù¿ú¡C
     * ºô¤W°Ó©±»P©ç½æ³õ [234]http://www.egghead.com
     * ºô¤W°Ó©± [235]http://www.buy.com
     * ©ç½æ³õ [236]http://www.ubid.com
       
   ¦b¥H¤U¦a¤è¨ú±o RedHat¡]©Î¨ä¥Lµo¦æª©¥»¡^Linux ªº¥úºÐ¡J
     * Linux System Labs ºô§}¡J [237]http://www.lsl.com/ 7 ¬ü¤¸
     * Cheap Bytes Inc ºô§}¡J [238]http://www.cheapbytes.com/ 7 ¬ü¤¸
       
   ½T«O§AÁʶRªºµw¥ó³Q RedHat Linux ¤ä´©¡CÁʶR«e¦b RedHat ªº ftp ¯¸§ä¥XÀò±À
   Â˪ºµw¥ó¡A¦p SCSI °t±µ¾¹©MÅã¥Ü¥d¡C¥Î¤j¬ù¤»¦Ê¬ü¤¸«K¥i±o¨ì¤@¥x±j«lªº
   Intel ¹q¸£¡A¥Î RedHat Linux ¨Ó°õ¦æ PostgreSQL¡C±qµøµ¡ 95¡BOS/2¡BUnix
   Motif¡BÂsÄý¾¹¡]¦p Redbaron¡BOpera¡BNetscape ¤Î¨ä¥L¤Ü¦h­Ó¡^¸g
   odbc/jdbc/perl/tcl ¨Ó³s±µ PostgreSQL¡C¡]ÂsÄý¾¹¥¿¨³³t¦¨¬°¼Ð·Çªº GUI «È¤á
   (client)¡C¡^
   
   ¨Ï¥Î KWM ¿ï¾Ü¾¹¡A§A¥i¥u¥Î¤@­ÓÅã¥Ü¾¹©M¤@­ÓÁä½L¨Ó±±¨î¦h¥x¥D¾÷¡C
   
17. PostgreSQL ªº¸UºûºôÀ³¥Îµ{¦¡¦øªA¾¹

   ¦³¨ÇÀ³¥Îµ{¦¡¦øªA¾¹¥i©M PostgreSQL ¦X§@¡A¶}©ñ­ì©l½XÁÙ¬O°Ó·~ª©¥»³£¦³¡C µÛ
   ¦Wªº¶}©ñ­ì©l½X¸UºûºôÀ³¥Îµ{¦¡¦øªA¾¹¦³¥H Perl ¬°°ò¦ªº SmartWorker¡BWIRM
   ¡B Velocigen¡BEnhydra¡]Java¡^©M Zope¡]Python¡^¡A°Ó·~ªº«h¦³ IBM
   Websphere¡BBEA Weblogic¡C
   
   «Øij§A¨Ï¥Î«O¦wªº¸Uºûºô¦øªA¾¹¦p Apache + mod_ssl + OpenSSL¡C¦b
   [239]http://www.c2.net/products/sh3 °Ñ¾\ Redhat StrongHold «O¦w¦øªA¾¹ªº
   ¸ê®Æ¡C
   
   ¸UºûºôÀ³¥Îµ{¦¡¦øªA¾¹¥i¥H©Ò¤ä´©ªºµ{¦¡»y¨¥¤ÀÃþ¡C §A¥²¶·¨Ï¥Î¤@­Ó¥H§A³Ì³ßÅw
   ªº»y¨¥¬°°ò¦ªº¸UºûºôÀ³¥Îµ{¦¡¦øªA¾¹¡C
   
   ¸UºûºôÀ³¥Îµ{¦¡¦øªA¾¹ªº¤ÀÃþ¦p¤U¡J
     * ¥H PERL »y¨¥¬°°ò¦
     * ¥H PHP »y¨¥¬°°ò¦¡]©M PERL ¬Û¦ü¡A¤]¦³ÂI¦ü Java¡^
     * ¥H Python »y¨¥¬°°ò¦¡]ª«¥ó¾É¦V©R¥O½Z»y¨¥¡^
     * ¥H Java »y¨¥¬°°ò¦¡]Sun Microsystems Java¡^
     * ¥H Tcl »y¨¥¬°°ò¦¡]Tcl/TK¡XºÙ¬°¡§Tickle¡¨©R¥O½Z»y¨¥
     * ¥H C++ »y¨¥¬°°ò¦¡]C++ ©M CORBA¡^
       
17.1 PERL ¸UºûºôÀ³¥Îµ{¦¡¦øªA¾¹

   ©M¡§C¡¨»y¨¥¬Û¦ü¡APerl »y¨¥¤w¦³«Üªø¹Ø©R¡A¦Ó¥B Perl ¦b¥¼¨Ó¤@¬q«Üªø®É¶¡ÁÙ
   ·|³Q¼sªxÀ³¥Î¡I¦b¬Y¨Ç¾Þ§@¤W¡APerl ¤ñ Java §Ö¤T­¿¡]¦ý Java ¦b¬Y¨Ç¾Þ§@¤W¤]
   ¤ñ Perl §Ö¡^¡C Java ¬O¤@­Ó«D±`½ÆÂøªº¨t²Î¡A¬J¦³µêÀÀ¾÷¾¹¡A¤S¦³ª½Ä¶¾¹¡A¨Ï
   ±o¥¦«D±`½wºC¡B¤£Ã­©w©M¤£¥i¾a¡C Perl «h²¼ä¡B§Ö³t¡A§ó¬Oª«¥ó¾É¦V¡C
   
   ¦¹¥~¡APerl µ{¦¡¥i»´©ö¦a½sĶ¡A¥H¶i¤@¨B§ï¨}ªí²{¡C¨Ï¥Î Perl2Exe ³o­Ó«ü¥O¦C
   ¤u¨ã¨Ó§â perl ©R¥O½ZÂର¥i°õ¦æÀÉ
   [240]http://www.indigostar.com/perl2exe.htm¡C
   
   PERL ¥i¨Ï¥Î¥H¤U¸UºûºôÀ³¥Îµ{¦¡¦øªA¾¹
     * Mason [241]http://www.masonhq.com ¬O¤@­Ó¥\¯à±j«l¡A¥H Perl ¬°°ò¦ªº
       ºô­¶¶}µo©M¶Ç°e¤ÞÀº¡C¨Ï¥Î Mason¡A§A¥i¦b§Aªº HTML ¤¤´O¤J Perl ½X¡A¤S
       ¥i¦Û¦@¨É¡B¥i­«¥Îªº¤¸¥ó«Ø¥ßºô­¶¡C
     * BingoX [242]http://opensource.cnation.com/projects/BingoX ¬O¤@­Ó¶}
       ©ñ­ì©l½X¡Bª«¥ó¾É¦Vªº¸UºûºôÀ³¥Î¬[ºc¡A¥Î mod_perl ½s¼g¡A¥H¤j´T´î¤Ö«Ø
       ¥ß¤j«¬°ÊºA¡B¸ê®Æ®wÅX°Êªººô¯¸©MÀ³¥Îµ{¦¡©Ò»Ý®É¶¡¡C
       SmartWorkder ¬O Perl Ãþ§Oªº¶°¦X¡A®e³\§Aªº¸UºûºôÀ³¥Îµ{¦¡¦¨¬°¯u¥¿ªºÀ³
       ¥Îµ{¦¡¡A ¦Ó¤£¬O HTML ¼Ë¥»¤¤ÀH·N´O¤Jµ{¦¡½X¡C SmartWorker
       [243]http://www.smartworker.org
     * Apache-Perl ¾ã¦X­p¹º mod_perl ¨Ï±o§¹¥þ¥H Perl ¼g¦¨ Apache ¼Ò²Õ¦³¥i
       ¯à¡C¦Ó¥B¡A´O¤J¨ì¦øªA¾¹ªº«ù¤[ª½Ä¶¾¹ (persistent interpreter) ÁקK¤F
       ±Ò°Ê¥~³¡ª½Ä¶¾¹ªº³Â·Ð©M Perl ªº±Ò°Ê®É¶¡¡C °Ñ¾\
       [244]http://perl.apache.org ©M
       [245]http://modperl.sourcegarden.org ªº mod_perl_garden ­p¹º¡C
     * Apache::ASP [246]http://www.apache-asp.org §â Active Server Pages
       ²¾´Ó¨ì Apache ¸Uºûºô¦øªA¾¹¡A¨Ï¥Î Perl §@¬°¥D¾÷ªº©R¥O½Z»y¨¥
       ¡CApache::ASP ®e³\¶}µo¤H­û³Ð³y¥]¬AÀô¸`ºÞ²z (session management) ¥\
       ¯à©M´O¤J Perl ½Xªº°ÊºAºô¤WÀ³¥Îµ{¦¡¡C¥t¥~¡A ¥¦ÁÙ¦³«Ü¦h±j«lªº©µ¦ù¥\¯à
       ¡A¥]¬A XML tablibs¡BXSLT Åã²{ (XSLT rendering)¡BÁÙ¦³¤£¦b­ì¥» ASP
       API ªº·s¨Æ¥ó¡C
     * WIRM¡]Web Interface Repository Manager¡^¬O¤@­Ó¥H Perl ¬°°ò¦ªºÀ³¥Î
       µ{¦¡¦øªA¾¹¡A´£¨Ñ¤@­Ó°ª¶¥ªº½sµ{Àô¹Ò¥H¶}µoºô¤W¸ê°T¨t²Î (web
       information systems)¡CWIRM ¥]¬A¤@­Óª«¥óÃöÁp¦¡¸ê®Æ®w©M¤@®M¥Î§@µøı¤Æ
       (visualizing)¡B¾ã¦X©M¤ÀªR²§½è (heterogeneous) ¦h´CÅé¸ê®Æªº Perl ¤¶
       ­±¡CWIRM ´£¨Ñ¤u¨ã´À¦h´CÅé¸ê®Æ®w²£¥Í¹ï¤º®e±Ó·Pªº´ºÆ[
       (context-sensitive views)¡A ¨Ï¶}µo¤H­û¥i¥H§Ö³t¶}µo¦b¤º®e©Mªí¹F¤è¦¡
       ¾AÀ³¤£¦PÃþ«¬¥Î®aª«ºAºô­¶¡C °Ñ¾\ [247]http://www.wirm.org
     * EmbPerl [248]http://perl.apache.org/embperl Åý§A¥i¦b HTML ¤å¥ó¤¤´O
       ¤J Perl µ{¦¡½X¡C¨Ï¥Î Perl ªí¥Ü§A¥i¨Ï¥Î¤@ºØºë¤ßªw»sªº»y¨¥¡A¦b WWW ¦­
       ¤w¼sªx§Q¥Î¡C§A¤]¥i¥Î¼Æ¥H¦Ê­p¦­¼g¦nªºªº Perl ¼Ò²Õ¡X¥]¬A DBI¡X¨Ó¦s¨ú
       ¶V¨Ó¶V¦h¸ê®Æ®w¨t²Î¡C
     * ePerl [249]http://www.engelschall.com/sw/eperl ª½Ä¶¤@­Ó¥[¤W¤F Perl
       5 µ{¦¡ªº ASCII ÀÉ¡A¥u³B²z Perl 5 µ{¦¡½X¦Ó¤£²z·|¯Â ASCII ¼Æ¾Ú¡C¥¦¥i
       ¥Î¤£¦P¤èªk¹B§@¡J§@¬°¤@­Ó¿W¥ßªº Unix Âo¾¹©Î§â Perl 5 ¼Ò²Õ¾ã¦X¨ì¤@¯ë
       ªºÀɮײ£¥Í¤u§@¡A¥ç¥i§@¬°¤@ºØ±j«lªº¸Uºûºô¦øªA¾¹©R¥O½Z»y¨¥¡A ¨Ó²£¥Í°Ê
       ºA HTML ­¶¡C
     * XPP [250]http://opensource.cnation.com/projects/XPP ¥Nªí¡¥XPP
       Parses Perl¡¦©Î¡¥XPML Page Parser¡¦¡A¬O¤@­Ó§Ö³t­Ý¦³®Äªº HTML ¤ÀªR¾¹
       ¡A¥i¤ÀªR¦W¬° XPML ­¶ªº°ÊºA HTML ­¶¤¤´O¤J¤Fªº perl©MÃþ¦ü HTML ªº¼ÐÅÒ
       ¡C
     * Gamla¡X¤@­Ó¥H Perl ¬°°ò¦ªº RAD ©MÀ³¥Îµ{¦¡¦øªA¾¹¡Cgamla ­p¹ºªº¥Øªº
       ¬O³Ð³y¤@­ÓÀ³¥Îµ{¦¡§Ö³t¶}µo¡]RAD¡^¤u¨ã©M¤@­Ó¥H Perl ¬°°ò¦ªº¸UºûºôÀ³
       ¥Îµ{¦¡¦øªA¾¹¡C©Ò¦³ Gamla ­p¹º²£¥Íªº­ìµ{¦¡½X³£·|¦b¤½²³»â°ì (public
       domain) ÄÀ©ñ¡C Gamla ¦b [251]http://gamla.iglu.org.il
     * AxKit [252]http://www.axkit.org ¬O¤@­Ó Apache¡]©M mod_perl¡^©M XML
       À³¥Îµ{¦¡¦øªA¾¹¡C¥¦¯à§Y®É§â XML Âà´«¬°¥ô¦ó®æ¦¡¡A¦p HTML¡BWAP ©Î¯Â¤å
       ¦r¡C Âà´«¹Lµ{¥i¨Ï¥Î W3C ¼Ð·Ç§Þ¦Ò¡A©Î¦Û¦æ³]­pªºµ{¦¡½X¡CAxKit ¤]¨Ï¥Î
       ¤º¸mªº Perl ª½Ä¶¾¹¨Ó´£¨Ñ¦³½ì¦Ó±j«lªº§Þ¦Ò§@ XML Âà´«¤§¥Î¡C AxKit ±j
       ½Õªº¬O§â¤º®e©Mªí¹F¤èªk¤À¶}¡CAxKit ªººÞ½u (pipelining) §Þ¥©®e³\¤º®e
       ¤À¤£¦P¶¥¬qÂà´«¬°¥iªí²{ªº®æ¦¡¡A®e³\³¡¤À¥­¥x¥H¤£¦P¤è¦¡¬Ý¨ì¼Æ¾Ú¡C
       AxKit ®e³\ºô­¶³]­p­û¶°¤¤ºë¤O©óºô¯¸³]­p¡A¤º®e¶}µoªÌ¯Âºé¬°¤º®e¤u§@¡A
       ¦Óºô¯¸ºÞ²z­û¤]¯à¦b¨ä±j¶µºÉ¨ä©Ò¯à¡C
       
   Perl ªº°Ó·~¸Uºûºô¦øªA¾¹
     * Zelerate AllCommerce
       [253]http://www.zelerate.org/html/eng/home.shtml ¬O¤@­Ó°Ó·~¡B¤º®e¡B
       «È¤á©MÃö«YºÞ²z¨t²Î¡C³o­Ó°ªªí²{¡B¥i©µ®iªº¤¬ÁpºôÀ³¥Îµ{¦¡¥H Perl ¼g¦¨
       ¡A¤Î¥Î¤F¤@­Ó«áºÝ¸ê®Æ®w¡C
     * VelociGen ªA°È XML¡B¸ê®Æ®w©Î§Y®É°e¨ìªº°ÊºA¤º®e¡A³t«×©MÀRºA HTML ¤@
       ¼Ë¡X¹F¨ì CGI ªº¤»¤Q­¿¡A¦Ó§A¤£»Ý­×§ï§AªºÀ³¥Îµ{¦¡¡CVelociGen ¤]ÂǦøªA
       ¾¹ºÝ XML ¼ÐÅÒ¡B·N¥~«OÅ@ (crash protection) ©M¦h³¡¹q¸£¶¡­t¸ü¥­¿Å¡A¨Ï
       ¶}µo§ó²³æ¡C VelociGen ¥i§¹¬ü¦a¥[¤J¨ì¥ô¦ó¥­¥x¤Wªº¥ô¦ó¸Uºûºô¦øªA¾¹¡A
       ¼W±j¦øªA¾¹ªºªí²{©M¥[§Ö¥H°ÊºA¤º®e¥D¾Éªººô¯¸ªº¤ÏÀ³¡CVelociGen ¥i¦P®É
       ³B²z¤j¶q­n¨D¡A¤ñ Java Servlets §Ö¤Q­¿©Î¤ñ Cold Fusion §Ö¥|­¿¡C
       Velocigen [254]http://www.binevolve.com/velocigen
       
17.2 PHP ¸UºûºôÀ³¥Îµ{¦¡¦øªA¾¹

   PHP ¥i¥Î¥H¤U¸UºûºôÀ³¥Îµ{¦¡¦øªA¾¹
     * Midgard PHP ¸UºûºôÀ³¥Îµ{¦¡¦øªA¾¹¥H PHP ©R¥O½Z»y¨¥¬°°ò¦¡A¦Ó PHP °õ
       ¦æ·¥¬°§Ö³t¡X¤ñ Java §Ö¡CMidgrad ªº¥Dºô¯¸¬°
       [255]http://www.midgard-project.org¡CPHP ¥i¥Î Zend ½sĶº[Àu¤Æ¾¹½sĶ
       [256]http://www.zend.com¡CPHP °õ¦æ±o«Ü§Ö¡A¦Ó³t«×¤ñ Java §Ö¤­¦Ü¤Q­¿
       ¡C °Ñ¾\ [257]Midgard ¦w¸Ë ©M PHP HOWTO
       [258]http://www.linuxdoc.org/HOWTO/PHP-HOWTO.html
     * Ariadne [259]http://www.muze.nl/software/ariadne ¬O¤@­Ó¸UºûºôÀ³¥Î¨t
       ²Î¡C ¥¦¥]§t¤@­Ó§¹¾ãªº¬[ºc¡A¥Î PHP »´ÃP¦a¶}µo©MºÞ²z¸UºûºôÀ³¥Îµ{¦¡¡C
       ³o¨t²Î¨Ï¥Î¤@­Ó¼Ò²Õ¤Æªº¤è¦¡¡A©Ò¦³¥æ©ö³£¨Ï¥Î©â¶Hªº¤¶­±¡C ³o°µªk¬°§ó§ï
       ¨t²Î¤u§@©Î¥[¤W·s¥\¯à±a¨Ó·¥¤jªº¦Û¥Ñ¡A¦Ó¥B¤£»Ý­«·s½s¼g¨ä¥L³¡¤À¡C
       
17.3 Lutris Corp "Enhydra Enterprise" (Java)

   Enhydra ¤ä´© PostgreSQL ¸ê®Æ®w¡C
   
   Enhydra ¬O¤@­Ó·¥¬°¬y¦æªº Java/XML/J2EE ¸UºûºôÀ³¥Îµ{¦¡¦øªA¾¹¡A¥Ñ Lutris
   Corporation ¶}µo¡C¥¦¬O¥þ²y³Ì¦nªº Java/XML ¸UºûºôÀ³¥Îµ{¦¡¦øªA¾¹¡C¥¦¤ä´©
   EJB¡BServlets¡BJSP¡BJNDI¡BJDBC¡BJTA¡BCORBA¡BXMLC/Rocks¡BDODS ©M°ê»Ú¤Æ¡C
   ¥¦¤w¬°«Ü¦h¼Ú¬üªº Fortune 500 ¤½¥q±´¥Î¡CFrench Telecom ¤@Ãþ¤½¥q¥¿ª½±µÃÙ
   §U Enhydra¡C¥¦¥H¦Ê¤À¦Ê¯Â¥¿ Java ¼g¦¨¡A¥i©ó [260]http://www.enhydra.org
   ¨ú±o¡CEnhydra ¬O¤@­Ó¶}©ñ­ì©l½X±M®×¡A ¦ý¥¦¥H°Ó·~§Î¦¡¥Ñ Lutris Corp °â½æ
   ©M¤ä´©¡C½Ð°Ñ¾\ [261]http://www.lutris.com¡C
   
   ¦b [262]PostgreSQL with Enhydra ¾\Ū¦p¦ó³]©w PostgreSQL ©M Enhydra ªº«ü
   ¾É¡A¤]½Ð°Ñ¾\ [263]Setup database with Enhydra ¥H¤F¸Ñ¦p¦ó¬° Enhydra ³]©w
   ¸ê®Æ®w¡C
   
   §A¥i¥Î Borland ªº JBuilder ©M Enhydra ¦X§@¡CJBuilder ¦b
   [264]http://www.inprise.com §ä¨ì¡C
   
   ¤]½Ð©ó
   [265]http://www.linuxdoc.org/HOWTO/Enterprise-Java-for-Linux-HOWTO.htm
   l °Ñ¾\ Enterprise Java HOWTO¡C
   
17.4 Zope¡]Python¡^

   Python º¥º¥¦¨¬°·¥¬y¦æªº¡u¯Â¡vª«¥ó¾É¦V©R¥O½Z»y¨¥¡CZope ¬O¤@­Ó¸UºûºôÀ³¥Î
   µ{¦¡¦øªA¾¹¡A´£¨Ñ¤F PostgreSQL ¤¶­±¡CZope ¥i¦b [266]http://www.zope.org
   ±o¨ì Python ¥i¦b [267]http://www.python.org §ä¨ì¡C
   
17.5 OpenACS¡]Tcl »y¨¥¡^

   OpenACS (Open ArsDigita Community System) [268]http://openacs.org ¬O¤@
   ­Ó¥Î¨Ó«Ø¥ß¥iÂX®i¡BªÀ¸s¥D¾É (community-oriented) ºô­¶À³¥Îµ{¦¡ªº¥ý¶i¤u¨ã
   ½c¡C¥¦¨Ì¾a AOLserver¡A¤@­Óºô­¶ / À³¥Îµ{¦¡¦øªA¾¹¡A©M PostgreSQL¡A¤@­Ó¯u
   ¥¿²Å¦X ACID ªº RDBMS¡C¥¦­Ì¬O¨â­Ó©M¶}©ñ­ì©l½X±ÂÅv¤Uªº§K¶O¦Ó°ª½èªº²£«~¡C
   
   ACS ¥Ñ ArsDigita ½s¼g¡A [269]http://www.arsdigita.com¡A¥¦­Ìªº ACS
   (ArsDigita Community System) ¹Á¸ÕºÉ¶q¿W¥ß©ó¸ê®Æ®w¡AÁöµM¥¦­ì¥»¥H Oracle
   ¬°°ò¦¡]¦]¦¹ Open ACS ­nªá®É¶¡¶i¦æ²¾´Ó¡^¡C
   
   ¤]½Ð°Ñ¾\ [270]http://www.appserver-zone.com¡C
   
17.6 C++, CORBA ¸UºûºôÀ³¥Îµ{¦¡¦øªA¾¹

     * PortalSphere ¸UºûºôÀ³¥Îµ{¦¡¦øªA¾¹¥H C++ ¼g¦¨¡A¦b Unix¡]©M Linux¡^¬°
       ³Ì°ª³t«×©Mí©w«×¹B¦æ¡CPortalSphere ÄY®æ¦a¿í±q CORBA ¼Ð·Ç¡A¬J¤ä´©¼Ð
       ·Çªº HTTP ³q°T¨ó©w©M IIOP ÂI¹ïÂI¨ó©w¡A¥H´£¨Ñ¶W°ª³tªº¥D±q³s±µ¡C ©M©Ò
       ¦³µÛ¦Wªº¸ê®Æ®wª½±µµ²¦X¡A³o¨Ç¯S¦â¨Ï PortalSphere §Ö¦p°{¹q¡A ¦Ó¥B¿W®a
       ¾Ö¦³¦b¤¬Ápºô¤W¤ä´©¹ê®É¨Æ¥óªº¯à¤O¡C PortalSphere ¥i¤ñ HTTP/CGI §Ö¤@
       ¦Ê­¿¡Cª½±µ³s±µ¨ì¤j³¡¤ÀµÛ¦Wªº¸ê®Æ®w¡A¥i©µ®i¦Ü¤ä´©¶W¹L¤@¸U­Ó¥Î¤á³s±µ
       ¡C ¨ì [271]http://www.portalsphere.com/overview.html ¤F¸Ñ
       PortalSphere¡C
     * FlashPoint C++¡BC¡BPERL ¸UºûºôÀ³¥Îµ{¦¡¦øªA¾¹­p¹ºªº¥Ø«e¬O¦b¤@­Ó¦h¬y
       (multi-thread) ªºÀô¹Ò¤ä´©°ª³tºô¤WÀ³¥Îµ{¦¡ªA°È¡B¤ä´©¦h¼Ëªº¶}µo»y¨¥¡A
       ¥]¬A C ©M C++¡B©M¤ä´©¦b«Ü¦h¨ä¥¦Àô¹Ò¤UÃø¥H°õ¦æªº³n¥ó¤uµ{¤è¦¡¡C¥¦¥i©M
       Apache ¤@°_¤u¥ó¡Aµø¥G§Aªº»Ý­n¡A¬Æ¦Ü¥i¨ú¥N¥¦¡C°Ñ¾\
       [272]http://www.bouldersoftware.com/products/flashpoint ©M¤U¸ü
       [273]FlashPoint Redhat RPM ®M¥ó¡C
     * "C Server Pages" [274]http://cserverpages.20m.com ¬O¤@­Ó¦³®Ä²v©M¥i
       ©µ®iªºÀ³¥Îµ{¦¡¦øªA¾¹¡A¥H C++¼g¦¨¡A¨Ï¥¦¾Ö¦³³B²z¥H C++ ¼g¦¨ªº¦øªA¾¹­¶
       ©M´O¤J¤F°ÊºA¤¸¯Àªº¼Ëª©ªº¯à¤O¡C§A¥i¥Î§A³ßÅwªº¤è¦¡¡A©Î¨âºØ³£¥Î¡C §A¥i
       ¥Î C++ «Ø¥ß¦Û¤vªº°Ó·~ª«¥ó¡C§Aªººô­¶¥i¥H¬O¥«³õ¤W¥ô¦ó ORB ªº CORBA «È
       ¤á¡C
       
17.7 ¸UºûºôÀ³¥Îµ{¦¡¦øªA¾¹¥Ø¿ý

   °Ñ¾\ [275]¸UºûºôÀ³¥Îµ{¦¡¦øªA¾¹ ¥Ø¿ý¡A¤º¦³¤@¥÷¡§¶À­¶¡¨¡C
   
18. PostgreSQL ªºÀ³¥Îµ{¦¡©M¤u¨ã

18.1 PostgreSQL ªº 4GL ¸Uºûºô¸ê®Æ®wµ{¦¡¡XAppGEN ¶}µo¨t²Î

   AppGEN ¥i¦b¦¹¤U¸ü
     * [276]http://www.man.ac.uk/~whaley/ag/appgen.html
     * [277]ftp://ftp.mcc.ac.uk/pub/linux/ALPHA/AppGEN.
       
   AppGEN ¬O¤@ºØ°ª¶¥²Ä¥|¥Nµ{¦¡»y¨¥©MÀ³¥Îµ{¦¡²£¥Í¾¹ (application
   generator)¡A¥Î¥H²£¥Í¥H¸Uºûºô¬°°ò¦ªºµ{¦¡¡C³o¨Çµ{¦¡¤@¯ë¦b¤¬Ápºô©Î¤½¥q¤º
   Ápºô¨Ï¥Î¡C AppGen µ{¦¡¥H¦X¥G Common Gateway Interface (CGI) ¼Ð·Çªº C ©R
   ¥O½Z (C scripts) ¼g¦¨¡A¤j³¡¤À¤¬Ápºô¦øªA¾¹³£¥i¤ä´©¡C
   
   ­n¨Ï¥Î AppGen¡A§A»Ý­n¡J
   
   PostgreSQL¡AÃöÁp¦¡¸ê®Æ®w¨t²Î
   
   ¤ä´© CGI ªº¤¬Ápºô¦øªA¾¹¡A¦p NCSA ªº HTTPD
   
   ¤@­Ó ANSI C ½sĶ¾¹¡A¦p GCC
   
   AppGEN ¥]¬A¥H¤U Unix ¡]Linux¡^ ¥i°õ¦æµ{¦¡¡J
   
     * defgen¡A¥¦·|®Ú¾ÚÅÞ¿è¸ê®Æµ²ºc²£¥Í¤@­Ó°ò¦ªº¼ËªOµ{¦¡¡C ³o¨Çµ{¦¡¥i¥[¤J
       ¡B§ó·s¡B§R°£©M´M§ä¸ê®Æ®w¤¤ªº¬ö¿ý¡A¤S¥i¦Û°Ê«O«ù°Ñ¦Ò¾ã¦X©Ê
       (referential integrity)¡C
     * appgen¡AAppGEN ªº½sĶµ{¦¡¡C¥¦·|§â AppGEN ªº·½µ{¦¡½X½sĶ¬°¥i¥Ñ CGI
       °õ¦æªº C ­ì©l½X¤Î¥i§Y®É¦bºô¤W¨Ï¥Î HTML ®æ¦¡¤å¥ó¡C
     * dbf2sql¡A§â dBase III ¬Û®eªº .dbf ÀÉÂà´«¬°¥i°õ¦æªº SQL ©R¥O½Zªº¤u¨ã
       µ{¦¡¡C³o¨Ï±o¤j³¡¤ÀÀx¦s¦b DOS/µøµ¡¸ê®Æ®w®M¥óªº¸ê®Æ¥i²¾´Ó¨ì¤@­Ó SQL
       ¦øªA¾¹¡A¦p PostgreSQL¡C
     * ¦¹¥~¡AAppGEN ¦¬¶°¤F¤@¨Ç·|¦b°õ¦æ´Á¶¡¨Ï¥Îªº HTML ¤å¥ó¡BGIF ÀÉ©M Java
       ¤pµ{¦¡¡C·íµM¡A¦p©Ò¦³¦nªº³n¥ó¯ë¡A¥¦¤]¥]¬A§¹¾ãªº·½µ{¦¡½X¡C
       
   §@ªÌ Andrew Whaley ¥i¥H¥H¤U³~®|±µÄ²¡J
     * [278]andrew@arthur.smuht.nwest.nhs.uk
       
18.2 PostgreSQL ªº¤¬Ápºô¤¶­±¡XDBENGINE

   dbengine ¬O Ingo Ciechowski ©Ò¼gªº¤@­ÓÀH´¡§Y¥Îªº PostgreSQL ¤¬Ápºô¤¶­±
   ¡C¥¦¦b
     * [279]http://www.cis-computer.com/software/dbengine/ 
       
   ¦³Ãö DBENGINE¡J dbengine ¬O¤¬Ápºô»P Postgres95 ¤§¶¡ªº¤¶­±¡A¥u»Ýªá¼Æ¤ÀÄÁ
   ¡A ¥¦«K¥i¦s¨ú¥ô¦ó²{¦sªº¸ê®Æ®w¡C
   
   PHP Åý§A¦b¤å¥ó¤¤½s¼gÃþ¦ü Perl ªº»y¨¥¡A¦ý¤£¬O¯uªº Perl¡AAppGEN ©M
   WDB-P95 »Ý­n§A¬°¨C¤@­Ó¸ê®Æ®w«Ø¥ß³]©wÀÉ (configuration files)¡X¡XÅ¥°_¨Ó
   ¡A §A¦ü¥G³£­n¥ý¾Ç¤@Ãþ·sªº°²»y¨¥ (meta language) ¤~¯à±Ò¥Î¡C
   
   ©M¨ä¥L¤u¨ã¤£¦P¡A§A¤£»Ý­n¾Ç¥ô¦ó¯S§Oªºµ{¦¡©Î©R¥O½Z»y¨¥¨Ó¨Ï¥Î dbengine¡C¤]
   ¤£·|¦³¨C­Ó¸ê®Æ®w³£¦³³]©wÀɪº±¡ªp¡A©Ò¥H§A¤£»Ý­n¼ô²ß³o¨Ç·sµ²ºc¡C ¤£¹L¡A¦p
   ªG§A·Q¥Î¨ì dbengine ªº§¹¾ã¥\¯à¡A¾Ç²ß Perl ·|¬O¤@­Ó¦n¥D·N¡C
   
   ¾ã­Ó¨t²Î¥iÄy³B²z¤@­Óªþ¥[ªº¸ê®Æ®w³]©w¦n¡A ¥¦·|¥]§t¦³Ãö¦p¦ó²z¸Ñ§Aªº¸ê®Æ®w
   ¦s¨úªº¸ê®Æ¡C§A¬Æ¦Ü¥i¥H«ü©wµê°²Äæ (virtual fields)¡A¥Î¥H¦b¸ê®ÆÅã¥Ü¦b¿Ã¹õ
   ¤§«e§@¥X§Y®É­pºâ¡C
   
18.3 PostgreSQL ªº Apache ¦øªA¾¹¼Ò²Õ¡XNeoSoft NeoWebScript

   Apache ¬O¤@­Ó¦³¦Wªº¤¬Ápºô¦øªA¾¹¡C¤@­Ó PostgreSQL ¨ì Apache ªº¤¶­±¼Ò²Õ¦ì
   ©ó¡X
     * [280]http://www.neosoft.com/neowebscript/
       
   NeoWebScript ¬O¤@µ{®e³\§A§â¤£¦P½ÆÂøµ{«×ªºµ{¦¡´O¤J¨ì HTML Àɵ{¦¡»y¨¥¡C
   
   ·í¦³¤H­n¨D¤@­Ó¥]§t NeoWebScript ªº HTML ºô­¶®É¡A¤ä±Â NeoWebScript ªº¦ø
   ªA¾¹«K°õ¦æ´O¤J¤Fªº©R¥O½Z (script)¡A²£¥Í¤@­Ó§t¦³¦Û­q¤º®eªººô­¶¡C
   
   NeoWebScript ¬Oª½±µ¦bºô­¶ªº HTML ½X½s¼g¥\¯à±j¤j¡B ¦øªA¾¹¬°°ò¦ªº¤¬°Êµ{
   ¦¡ªº¤@­Ó¤èªk¡A°ª³t¡B¦w¥þ¡B©ö¾Ç¡CÄyµÛ NeoWebScript¡A§Y¨Ï¹ï·s¤â¨Ó»¡¡A­p¼Æ
   ¾¹ (counter)¡B¹q¶lªí®æ (email forms)¡BÀð¯È¡Bñ¦Wï (guest books)¡B³X«È
   ¬ö¿ý³£Åܱo²³æ¡C½Ð¬Ý¬Ý NeoWebScript ¹ï¦Û¤v¡BPERL ©M JavaScript §@¥Xªº¤ñ
   ¸û¡C
   
   ¦pªG§A·Q¦b§Aªº¤¬Ápºô¦øªA¾¹¦w¸Ë NeoWebScript¡A §Aªººôµ¸ºÞ²z­û¦b¶}©l«e»Ý
   ¥ý¾\Ū¥L­Ìªº Sysop FAQ¡C¡mTheory of Operations¡n·|¸ÑÄÀ NeoWebScript ¦p
   ¦ó¹B§@¡A¡mInstallation¡n·|³v¨B»¡©ú¡C¡mManagement¡n Ãö©ó³]©w©M°õ¦æ¦øªA¾¹
   ªº¨Æ©y¡A¡mTest¡nÅý§A½T©w NeoWebScript ¹B§@¥¿±`¡A¡mTroubleshooting¡n©M¦ø
   ªA¾¹ªº°ÝÃD¦³Ãö¡C
   
   ¦b¦Û¤vªº ISP¡B¤ºÁpºô©Î¥~Ápºô¨Ï¥Î NeoWebScript ¶O¥Î¥þ§K¡A §A·|¦bµn°O¤U¸ü
   ®É±o¨ì§¹¥þªº°õ·Ó¡C¤£¹L¡A ¦pªG§A·Q§â¥¦´O¤J¨ì¦Û¤vªº²£«~©Î¦b°Ó·~ªº¦øªA¾¹¡]
   ¦p SSL¡^¨Ï¥Î¡A¥¦Á`­È 99 ¬ü¤¸¡C
   
   NeoWebScript ¬O¤@­Ó®e³\§A¦bºô­¶¤¤´O¤J Tcl/Tk »y¨¥§@¬°©R¥O½Z¤u¨ãªº
   Apache ¼Ò²Õ¡C¥¦¥Ñ Karl Lehenbauer¡ANeoSoft ªº Chief Technical Officer
   µo©ú¡A¨Ã¥Ñ Neosoft ªºµ{¦¡³]­p®v©M§Þ³N¼¶½Z­û½s¼g¤å¥ó¡B§ï¨}¤Î¥[±j¥\¯à¡C
   
   Apache ¬O¥@¤W³Ì¬y¦æªº¤¬Ápºô¦øªA¾¹¡A¸g½Õ¬dªººô¯¸¤¤¦³¤»¤Q¤K¤Ú¥P¨Ï¥Î¡C
   
   Tcl/Tk ¬O¥Ñ Dr. John Ousterhout ¶}µoªº¤@ºØ±j«l¡B¦Û¥Ñ¡B¸ó¥­¥xªº©R¥O½Z»y
   ¨¥¡C ¥L»¡¹L¡§Tck/Tk¡¨®e³\³n¥ó¶}µo¤H­û¤ñ¨Ï¥Î¥H C ©Î C++ ¬°°ò¦ªº¤u¨ã§Ö¤Q
   ­¿§¹¦¨¤u§@¡C ¥¦¤]¬O¤@ºØ°¶¤jªº½¦¤ô»y¨¥ (glue language)¡A¨Ï±o²{¦sªºµ{¦¡¦@
   ¦P¤u§@¡B §ó¹Ï¹³¤Æ©M¥i¥Î©ó¤¬Ápºô¡C¡¨
   
   NeoSoft ³Ð¿ì¤H¤Î Chief Technical Officer¡AKarl Lehenbauer ¦b¶}©l®É«K¤w
   °Ñ»P Tcl/Tk ¶}µo¡C¥L¤]©M Mark Diehkans ¤@°_³Ð§@¤F Extended Tcl¡A¤S¦W¬°
   TclX ©Î NeoSoft Tcl¡A©µ¦ù³oºØ»y¨¥ªº¥\¯à¡C«Ü¦h Tcl ªº®Ö¤ß«ü¥O³£¨Ó¦Û
   Extended Tcl¡A¦Ó¥Ñ Dr. Ousterhout ¥[¤J¨ì®Ö¤ß»y¨¥¤¤¡C
   
   NeoSoft Inc., 1770 St. James Place, Suite 500, Houston, TX 77056 USA
   
18.4 HTML ªº¦øªA¾¹ºÝ©µ¦ù HEITML ©M¤@­Ó PostgreSQL ªº 4GL »y¨¥

   heitml ¬O¥t¤@­Ó postgres »P¸Uºûºô¶¡ªº¤¶­±¡C±ýª¾¸Ô±¡¡A½Ð±µÄ²
   

          Helmut Emmelmann H.E.I. Informationssyteme GmbH
          Wimpfenerstrasse 23 Tel. 49-621-795141
          68259 Mannheim Germany Fax. 49-621-795161

     * Mr.Helmut Emmelmann ªº¹q¶l¦a§} [281]emmel@h-e-i.de
     * Heitml ¥Dºô­¶ [282]http://www.heitml.com
     * Heitml ¦¸ºô­¶ [283]http://www.h-e-i.deom
       
   Heitml ¦P®É¬O HTML ªº¦øªA¾¹ºÝ©µ¦ù©M¤@ºØ 4GL »y¨¥¡Cºô­¶½s¼g¤H­û¥i¥H
   HTML ªº­·®æ¥ÎÃþ¦ü HTML ¼ÐÅÒ½s¼gµ{¦¡¡C
   
   Heitml¡]­µ "Hi"-TML¡^¬O HTML ªº©µ¦ù¤Î¤@­Ó¥þ­±ªº²Ä¥|¥N»y¨¥¡A ¥¦®e³\¥H¤¬
   Ápºô¬°°ò¦ªºµ{¦¡ª½±µ§Q¥Î SQL ¸ê®Æ®w¤¤ªº¸ê®Æ¡A¦Ó¤£»Ý¨Ï¥Î½ÆÂøªº CGI ©R¥O
   ½Z¡C
   
   Heitml ¦b¦øªA¾¹ºÝ©µ¦ù HTML¡A°ÊºA¦a§â¡§.hei¡¨ÀÉÂà´«¬° HTML ®æ¦¡¡A ¨Ï¥¦»P
   ¥ô¦óÂsÄý¾¹­Ý®e¡C¥¦¥]¬A¤j®a¼ô±x¡B©ö¥Îªº HTML »yªk¡A ¤Î´£¨Ñ¤j¶q¹w¥ý¶}µo¤F
   ªº¼ÐÅÒ©Mµ{¦¡®w¨ÓÀ³ªþ¥H©¹¥Ñ CGI ¶i¦æªº¤u§@¡C¹³ XML ¯ë¡Aheitml ®e³\¨Ï¥ÎªÌ
   ¦Û©w¼ÐÅÒ¡CÄyµÛ heitml¡A¨Ï¥ÎªÌ¦Û©wªº¼ÐÅÒ¥i½Ķ¬° HTML ¤Î¶Ç°eµ¹ÂsÄý¾¹¡C
   
   Heitml ¦P®É¥H HTML ³]­pªÌ©M±M·~ªºµ{¦¡³]­p®v¬°¥Ø¼Ð¡CHTML ³]­p®v¥i¨Ï¥Î
   heitml ¼ÐÅҨӫإ߰ʺAªººô­¶¡A¦s¨ú SQL ¸ê®Æ®w¡A©Î«Ø¥ß§¹¾ãªº¸UºûºôÀ³¥Îµ{
   ¦¡¡C­p¼Æ¾¹¡B µn°O¸ê®Æ®w (registration databases)¡B·j´M¾¹ªí®æ¡B¹q¶lªí®æ
   ¡B¶¥¼h¦¡¿ï³æ (hierachical menus) ³£¥i»´ÃP¦aÄyµÛ¦b¤j¶q¤¸¥ó¨ç¦¡®w
   (Component Libraries) ¹w«ØªºÃþ¦ü HTML ªº¼ÐÅÒ²£¥Í¡C
   
   ¹ïµ{¦¡³]­p®v¨Ó»¡¡Aheitml ¦b HTML ¤¤´O¤J¤F§¹¾ãªº²Ä¥|¥Nµ{¦¡»y¨¥¡A
   

(¦p <if>, <while>, ©M <let> ¼ÐÅÒ)¡A

   ©M¹ï§t¾ã¼Æ¡B¹ê¼Æ¡B¥¬ªL­È¡B¦r¦ê©M¤¸²Õ (tuple) ªºªí¹F¦¡±j«l¹Bºâ¯à¤O¡C ¤¸
   ²Õªº°Ñ¦Ò»yªk (reference semantics) ´N¹³ª«¥ó¾É¦V»y¨¥¡A¤ÎÀx¦s¦b°ïÅ|¤¤
   ¡CHeitml ÅܼơA¥]¬A©Ò¦³¦b°ïÅ|¤¤ªº½ÆÂø¸ê®Æµ²ºc¡A¦b Session Mode ¤¤¥i¦b¤£
   ¦Pºô­¶¶¡ºû«ù¡C §A¤]¥i¥H¦Û­q¼ÐÅÒ©ÎÀô¹Ò¼ÐÅÒ (environment tags)¡A¬Æ¦Ü­«·s
   ©w¸q HTML ¼ÐÅÒ¡C
   
   heitml ¨Ï±o¥H¤U¨Æ±¡¦³¥i¯à
   
   ¡X¡X¥H¨ãµ²ºc¤Î¼Ò²Õ¤Æ (structured and modular) ¤è¦¡¶}µoºô­¶¡A¤j´T´î§Cºû
   Å@§xÂZ¡C
   
   ¡X¡X¶}µo¦³´¼¼z¤Î¤¬°Êªººô­¶¡A¤º®e¥i°ÊºA¦a¾AÀ³¥ÎªÌ©Ò»Ý¡C
   
   ¡X¡XµL»Ý³]­pµ{¦¡«K¥iÅã¥Ü SQL ¸ê®Æ®wªº¤º®e¡A§A¥u»Ý­n¨Ï¥Î¹w¥ý ©w¸qªº
   ¡§dba¡¨¨t¦C¼ÐÅÒ¡C
   
   ¡X¡X¨Ï¥Î Session Variables ¶}µo½ÆÂøªº¸ê®Æ®w¤Î¥Ø¿ýÁʪ«µ{¦¡¡C
   
   Heitml ¥i¸g CGI ¤¶­±¦b Linux ªº¥ô¦ó¤¬Ápºô¦øªA¾¹¤¤°õ¦æ¡A¦Ó¦b Apache ¤¤¥i
   ¨Ï¥Î apache API ¨Ï±o°õ¦æ³t«×¯S§O§Ö¡]ÁקK¤F CGI ªº¤u§@¡^¡C¥Ø«e¡A¥¦¤ä´©
   mSQL¡]²Ä¤@¤Î¤Gª©¡^¡BPostgreSQL¡]²Ä¤»ª©¡^¡BmySQL¡B¤Î the yard databases
   ¡Cheitml ¥i¦b Linux¡BBSDi¡BSolaris ©M SunOS °õ¦æ¡A¥H¤Î¦bµøµ¡ NT ¥[¤W
   CGI ©M ISAPI¡BODBC¡Bµøµ¡ 95 ¤¤¨Ï¥Î¡C
   
   heitml¡]Linux ª©¡^¹ï¬ã¨s¡B«D°Ó·~©Ê©M­Ó¤H¥Î³~¬O§K¶Oªº¡C°Ó·~ºô¯¸»Ýªþ¥X±Â
   Åv¶O¡C ³]¦³¸Õ¥Î´Á­­¦Ó¥\¯à§¹¾ãªº¸Õ¥Îª©¥i§K¶O¤U¸ü¡C¡]¤£¹L­nª`·N¡A¨C­Ó§A¶}
   µoªº¡§.hei¡¨ ºô­¶³£·|¦L¥X¤@­Ó°T®§«ü¥X¥¦¬O«D°Ó¥Îª©¥»¡Cµn°O¤§«á§A·|¦¬¨ì¤@
   ­ÓÁä½X¡A ¨Ï§A¥iÃö±¼³o°T®§¦ÓµL»Ý­«·s¦w¸Ë¡C¡^
   
   heitml¡]­µ¡§Hi¡¨-TML¡^ÄyµÛ¥i¦Û¦æ©w¸qªº¼ÐÅÒ©M§¹¾ãªºµ{¦¡³]­p¯à¤O¤j´T©µ¦ù
   ¤Î¼W±j HTML ªº¥\¯à¡C³o¨Ï°ÊºAªº¤º®e©M¸ê®Æ®wµ{¦¡¥i¦b HTML ¥@¬É¤¤¥X²{¡A¦Ó
   ¤£»Ý­n CGI ©Î¥~³¡¤â½Z©Îµ{¦¡»y¨¥¡C¤]´N¬O»¡¡A¤@­Ó HTML §@ªÌ¥i¦bºô­¶¤¤´O¤J
   À³¥Îµ{¦¡¡C ³o¥u»Ý­n¨Ï¥Î·sªº¼ÐÅÒ¡A¦Ó¤£»Ý CGI ©Îµ{¦¡³]­p¡C¥t¤@¤è­±¡A ¶i¶¥
   ¨Ï¥ÎªÌ©Îµ{¦¡³]­p®v¥i³Ð³y¤Î³]­p±j«lªº¼ÐÅÒ®w¡C³o°µªk¨Ï±o heitml ¹ï HTML
   ·s¤â©M±M·~µ{¦¡³]­p®v¦@®É¾A¥Î¡Cheitml ¦b¸Uºûºô¦øªA¾¹¤W°õ¦æ¤Î°ÊºA¦a²£¥Í
   HTML¡A©Ò¥H heitml ©M¤¬Ápºô¼Ð·Ç­Ý®e¡A¤]©M¥ô¦óÂsÄý¾¹­Ý®e¡C ¥¦¤@¤è­±¬°¥ÎªÌ
   ´£¨Ñ§¹¾ãªº¸ê®Æ®w¦s¨ú¥\¯à¡A¥t¤@¤è­±¨Ï¥ÎªÌµL»Ý²z·|¥ô¦ó¤£¥²­nªº CGI ½ÆÂø©Ê
   ¡Cheitml ¬O®Ú¾Ú¦³Ãö½sĶ¾¹ºc³y©M¥æ©ö (transaction) ¨t²Îªº³Ì·s¬ã¨s¦¨ªG¦Ó
   ¶}µoªº¡C
   
   heitml ­¶ªº¶}µo¹Lµ{©M HTML ­¶¤@¼Ë¡A³£¬O¨Ï¥Î¤å¦r½s¿è¾¹©Î HTML ½s¿è¾¹¡A¤]
   ¦p±`¦a©ñ¦b¸Uºûºô¦øªA¾¹¤W¡C¤£¹L¡A·sªººô­¶¥i¥]¬A°ÊºAªº heitml ¼ÐÅÒ©M¨Ï¥Î
   ¼ÐÅÒ®w¡C§A¥i¨Ï¥Î³o¨Ç¼ÐÅÒ¦s¨ú¸ê®Æ®w¡B²£¥Í°ÊºA¤º®e¡B±H¥X¹q¶l¡A ¬Æ¦Ü¥i¥H¶}
   µo±j«lªºÀ³¥Îµ{¦¡¡A¦pµn°O¸ê®Æ®w (registration database) ©MÁʪ«¨t²Î¡C
   
   HTML ·s¤â©M±M·~µ{¦¡³]­p®v¤@¼Ë·|¬°¯à°÷°ª³t¦Ó²©ö¦a³]­pºëªöªºÀ³¥Îµ{¦¡¡A
   ¦p§Ú­Ìªº¤¬°Êñ¦Wï¡A¦Ó¤£»Ý¨Ï¥Î½ÆÂø¦ÓÃø¾Çªº CGI ©R¥O½Z¦ÓÅå³Y¡C³o¤u§@¥u»Ý
   ¨Ï¥Î dba ¼ÐÅÒ®w¤¤ªº¤u¨ã«K¥i°µ¨ì¡C
   
   heitml ¥]¬A¤£¦PºØÃþªº¼ÐÅÒ®w¡A¥Î¥H²£¥Íñ¦Wï¡B¸ê®Æ®wºûÅ@µ{¦¡¡B ¥i©µ¦ùªº
   ¬d¸ßªí®æ¡B±j«lªº¹q¶lªí®æ©Îºô­¶ªº¶¥¼h¦¡¿ï³æ (hierarchic menu)¡C³o¨Ç¤u¨ã
   ¤w¥i¨Ï¥Î¡A§A¥u»Ý¦bºô­¶¤W¥[¤W¹ïÀ³ªº¼ÐÅÒ¡C
   
   §@¬°¤@­Ó¦³¸gÅ窺µ{¦¡³]­p®v¡A§A¥i¥þ­±¨Ï¥Î heitml ªº«ù¤[°ÊºA¤¸²Õ¬[ºc
   (persistent dynamic tuple architecture)¡Jheitml ¤£³æ¬O¦³°ÊºA«¬ºA
   (dynamic typing)¡B¥þ¥\¯àªºªí¹F¦¡­pºâ¡B»¼°j¨ç¼Æ©MÂ×´Iªº°Ñ¼Æ¶Ç»¼¯S¦âªº©R
   ½Z»y¨¥¡A ¤]Äy°ÊºA¤¸²Õ¬[ºc¦Û°Ê«O«ù¥ô¦ó¤j¤pªº session ¸ê®Æ¡C
   
18.5 PostgreSQL ªº America On-line AOL ¸Uºûºô¦øªA¾¹

   AOLserver 2.3 ª©¬O¤@­Ó§K¶Oªº°Ó·~¸Uºûºô¦øªA¾¹¡A¥¦¥i³s±µ¨ì PostgreSQL¡C±ý
   ª¾¸Ô±¡¡A½Ð¬Ý
     * AOL ¸Uºûºô¦øªA¾¹¥Dºô­¶ [284]http://www.aolserver.com
     * Philip Greenspun ªº AOLserver ¤¶²Ð
       [285]http://photo.net/wtr/aolserver/introduction-1.html
       
   AOLserver ¬O¤@­Ó§Ö³t¡A¥þ¦h¬y³B²z (multithreaded)¡A¤ä´© Tcl ªº¸Uºûºô¦øªA
   ¾¹¡C¦ý¤£¤î©ó¦¹¡A¥¦ÁÙ¬O¤@­Ó¥þ­±¤ä´©¸ê®Æ®wªº¸Uºûºô¶}µo¥­¥x¡C
   
   ¨Ï¥Î AOLserver¡A§A¥i¦³¤½¥Î (pooled) ªº PostgreSQL¡]©M¨ä¥L RDBMS¡^³s±µ¡A
   ¥Ñ¤£¦P°õ¦æºü (threads) ¤À¨É¡CAOLserver ¦³ Tcl ©M C API¡AÅý§A¥i¶}µo±j«l
   ªº°ÊºAºô­¶¡C©Ò¦³³o¨ÇªF¦è³£¦b 1995 ¦~¶}©l¡C¥¦¥H APL (AOLserver Public
   License) ©Î GPL ±ÂÅv¡A¦]¦¹¬O¥þ¦Û¥Ñªº³n¥ó¡C
   
   ¹ïºô­¶¨Ó»¡¡ATcl API ³Ì¦³¥Î¡CAOLserver ¦³¤@²Õ±j«lªº Tcl ©I¥s¡A¨Ò¦p
   ns_sendmail¡]¥Î¨Óµo¥X¹q¶l¡^¡Bns_httpget¡]¥Î¨Ó¨ú¦^¤@­Ó URL¡^
   ¡Bns_schedule¡]Ãþ¥H cron ªº¥\¯à¡A¥Î¥H±Æ©wµ{¦¡¦b¯S©w®É¶¡°õ¦æ¡^µ¥µ¥¡C§A¤]
   ¥i¥Î Tcl API ¨Ó»´©öÂX®i AOLserver ªº¥\¯à¡C¨C¤@­Ó AOLserver ªºµêÀÀ¦øªA¾¹
   ³£¥i¾Ö¦³¨p®aªº Tcl ©R¥O½Z¡§¨ç¦¡®w¡¨¡A¥Ñ AOLserver ¸ÑÄÀ¡A¨Ã¥iÅý¸ÓµêÀÀ¦ø
   ªA¾¹¤¤¥ô¦óºô­¶¨Ï¥Î±o¨ì¡C
   
   §A¥i¥Î¤TºØ¤èªk¬° AOLserver ¶}µoºô­¶¡J
     * ¯Â HMTL
     * .tcl ­¶¡X¡X§Y¥i¥Î ns_write ©I¥s¨Ó¶Ç¦^ HTML ªº tcl µ{¦¡¡C
     * .adp ­¶¡X¡XAOL Dynamic Pages¡C§A¥H¯Â HTML ¶}µoºô­¶¡A¦ý§A¥i¥Î <% %>
       ©Î <%= %> ¨Ó´O¤J Tcl ½X¡A©M PHP ©Î ASP ¬Û¦ü¡C
       
   ÁöµM AOLserver ¬O¤@­Ó°¶¤jªºªº¤¬Ápºô¦øªA¾¹¡A¾Ö¦³Àu¨}ªº¬[ºc¡A ¥¦ªº¥ú¨~¦b
   ©ó¥¦³s±µ¸ê®Æ®wªº¯à¤O¡CAOLserver ¾Ö¦³¦Û¤vªº¸ê®Æ®w©â¶H¼h (abstraction
   layer)¡AÅý§A§¹¥þ¤£»Ý­×§ïµ{¦¡¦Ó³s±µ¨ì¤£¦P RDBMS¡C³o¨Ç RDBMS ªº³s±µ¬O¤½¥Î
   (pooled)¡B«ùÄò (persistent) ªº¡A¥Ñ¤£¥Îªº°õ¦æºü¤À¨É¡C ³o®e³\«Ü§Öªº³sµ²©M
   ¦³®Ä¹B¥Î¸ê·½¡C
   
   AOLserver ¾Ö¦³©Ò¦³¥D­nªº RDBMS ªºÅX°Êµ{¦¡¡JPostgreSQL¡BOracle¡BSybase¡B
   Informix¡BIllustra¡BSolid¡BInterbase ©M MySQL¡C
   
18.6 PostgreSQL ªººÃÃø / ­p¹º°lÂܨt²Îµ{¦¡¤u¨ã

   ¥¦¦b
     * [286]http://www.homeport.org/~shevett/pts/
       
18.7 §â dbase ªº dbf ÀÉÂà´«¦Ü PostgreSQL

   dbf2msql µ{¦¡©M mSQL ¤Î PostgreSQL ¦X§@´r§Ö¡C§A¥i¦b¥H¤U¤è§ä¨ì
     * [287]ftp://ftp.nerosworld.com/pub/SQL/dbf2sql/
     * [288]ftp://ftp.postgresql.org/pub/incoming/dbf2pg-3.0.tar.gz
       
   ³oµ{¦¡¥Ñ Faculty of Electrical Engineering TU Delft, NL Computer
   Architecture and Digital Technique section ªº Maarten Boekhold ¼g¦¨¡C
     * [289]M.Boekhold@et.tudelft.nl
       
   §A¤]¥i¨Ï¥Î python ªº¤èªk (method) ¦bŪ¤J dbf Àɤθü¤J¨ì postgres ¸ê®Æ®w
   ¡C
     * See [290]http://www.python.org
       
18.8 §â·L³n MDB ¸ê®Æ®wÂà´«¦Ü PostgreSQL

   ­p¹º¤¤ªº MDB Tools ¬O¤@²Õ¨ç¦¡®w©M¤½¨ãµ{¦¡¡A¥Î©ó§â·L³n Access ¸ê®Æ®w
   ¡]mdb ÀÉ¡^¶×¥X¦Ü¦h¥Î¤áªº¸ê®Æ®w¡A¦p Oracle¡BSybase¡BDB2¡BInformix
   ¡BMySQL¡BPostgreSQL ¤§Ãþ¡C
     * ±q [291]http://mdbtools.sourceforge.net ¨ú±o MDB Tools
     * ³q«H½×¾Â
       [292]http://lists.sourceforge.net/mailman/listinfo/mdbtools-dev
       
18.9 Zeos «È¤á

   ¡§Zeos¡¨¬O¤@­Ó¥Î¨Ó¶}µo©MºÞ²z¸ê®Æ®wÀ³¥Îµ{¦¡ªº³n¥ó²£«~¡A¥Î©ó¶}©ñ­ì©l½X
   SQL ¦øªA¾¹¡XMySQL¡BPostgreSQL ©M InterBase
   [293]http://www.zeos.dn.ua/eng/index.html
   
18.10 Java ªº Report Writer

   Generic Report Writer ¬O¤@­Ó¥Ø¿ýÅX°Êªº³ø§i½s¼g¾¹¡C¥¦¤£¬O©ì¡X©ñ
   (drag-and-drop) ¤¶­±¡C¥i¥Î©ó PostgreSQL¡BMySQL ©M Access¡C¥¦¤]«Ü¥i¯à¥i
   ¥Î©ó¨ä¥L§A¦³ Type 4 JDBC version 1 ÅX°Êµ{¦¡ªº¸ê®Æ®w¡C¥¦¦b
   [294]http://www.geocities.com/SiliconValley/Ridge/4280/GenericReportWr
   iter/grwhome.html¡C
   
19. ¸ê®Æ®w³]­p¤u¨ã¡X¹êÅéÃö«Y¹Ï (Entity Relation Tool) ¤u¨ã

   "DeZign for databases" (
   [295]http://www.heraut.demon.nl/dezign/index.html) ¬O¤@­Ó¨Ï¥Î¹êÅéÃö«Y¹Ï
   ªºªº¸ê®Æ®w¶}µo¤u¨ã¡C¥¦¥Hµø¹³§Î¦¡¤ä´©¹êÅé©MÃö«Yªº±Æ¦C¡A ¨Ã¦Û°Ê¬°¤j³¡¤À¬y
   ¦æ²£¥Í¸ê®Æ®w¤è®× (schema)¡C
   
   ¡§DeZign for databases¡¨¦b³]­p®É¨Ï¥Î¦Û°Ê¥~ÁäÂಾ (automatic foregin
   key migration ?)¡A¦¨¥\±q³æ¤@ªº³W½d¤ä´©ÅÞ¿è©M¹ê½è¼Æ¾Úµ¥¯Å (data level)¡C
   ¦h´ÚÅã¥Ü³]©w¥]¬A¹êÅé/¥DÁä/³s¥~Á䪺ÄÝ©Ê/¤£³s¥~Á䪺ÄÝ©Ê¡C¡§DeZign for
   databases¡¨ ¤]¤ä´©©w¸q°ì (domain)¡]¥Î¤á¦Û©w¸ê®Æ«¬ºA¡^¡C
   
   DeZign ²£¥Íªº³ø§i¥i±N½ÆÂøªº³]­p¥H²¤Æ¤Fªº§Î¦¡´£¥æ¤©¤£¦Pµ¥¯ÅªººÞ²z¼h¡C
   §A¥u»Ý«ö¤@¤U·Æ¹««K¥i²£¥Í³ø§i¡B¸ê®Æ¦r¨å (datadictionaries) ©M¸ê®Æ®w¡C ¥¦
   ¤ä´©¥H¤U¸ê®Æ®w¡JOracle¡BInterbase¡BIBM DB2¡BSybase¡B·L³n Access
   (95/97/2000)¡B·L³n SQL Server¡BParadox¡BdBase¡BInformix¡BSQL-Anywhere
   ¡BMySQL ©M PostgreSQL¡C
   
   Heraut¡§DeZign for databases¡¨¦b¡] [296]http://www.heraut.demon.nl¡^¡C
   
20. PostgreSQL ªº¤¬Ápºô¸ê®Æ®w³]­p/§¹¦¨¤u¨ã¡XEARP

     * [297]http://www.oswego.edu/Earp
     * [298]ftp://ftp.oswego.edu ªº¡¥pub/unix/earp¡¦¥Ø¿ý¡C
       
20.1 EARP ¬O¤°»ò¡H

   ¬O David Dougherty ªº¡§Easily Adjustable Response Program¡¨¡CEARP ¬O¤@
   ­Ó§Q¥Î PostgreSQL ¸ê®Æ®w¨t¨tªººô¤W¸ê®Æ®w³]­p/¹ê¬I¤u¨ã¡C¥\¯à¥]¬A¡J
   
     * ¤@­Óµøı¤Æªº³]­p¨t²Î¡C
     * ¤@­Ó sendmail ¤¶­±¡C¡]¥i¦¬µo¹q¶l¡^
     * ¤@­Ó¼W±j¤Fªº«O¦w¾÷¨î¡C
     * ¤@­Ó cgi ÅX°Êµ{¦¡¡C
       
20.2 ¬I¦æ

   EARP ¥D­n¬I¦æ¤@­Ó¦b http ºÊ±±µ{¦¡ (daemon) ¤U°õ¦æªº CGI ¤G¤¸ÀɨӦs¨ú¸ê
   ®Æ®w¦øªA¾¹¡C©Ò¦³³]­p¤u¨ã³£«Ø¥ß¦bÅX°Êµ{¦¡¤¤¡A°£¦bºô¤W¡A ¦A¨S¦³¦a¤è»Ý­n§@
   ¥X³]­p¡C¨º¨Ç¤u¨ã¥»¨­»Ý­n¤@­Ó¤ä´©¹Ï¹³ªºÂsÄý¾¹¡A ©Ò³]­p¥X¨Óªºª«¥ó¿W¥ß©ó½s
   ¼g¤èªk¡A¦Ó¬O®Ú¾Ú­Ó¤H¦n´c¡C
   
20.3 ¥¦¦p¦ó¤u§@¡H

   EARP ªº¨ä¤¤¤@­Ó¥D­n¯S¦â¬O¥¦¨Ï¥Îª«¥ó¾É¦Vªº¤èªk¨Ó²£¥Í¥Î¥H³s±µ¸ê®Æ®wªº
   html ­¶¡C¤j³¡¤À­¶­±³£¥]§t¦h­Óª«¥ó¡C¨C­Óª«¥ó³£¥H¬Y¨Ç¤u¨ã²£¥Í¤Î¨ú±o¤@­Ó¦W
   ¦r¡A ³o¨Çª«¥ó·|³Q­¶­±¤u¨ã (page tool) ¥H¤@­Ó¥i©I¥sªº¶¶§Ç (callable
   sequence) ³sµ²¦b¤@°_¡Cª«¥ó¥i¦b¨ä¥L­¶­±¤¤­«¥Î¡C¦³Ãö HTML¡B¬d¸ß¡BŪ¨ú¨Ï¥Î
   ªÌ¿é¤J¡B ¥i©µ¦ùªº¬d¸ß©M¿é¤Jª«¥ó®æ¦¡¤Æ (Extendable Formatting of Query
   and Input objects)¡B§â²{¦³ª«¥ó³sµ²¦¨¨ä¥Lª«¥óªº°ò¥»¤u¨ã¬Ò¦³´£¨Ñ¡C §ó¥ý¶i
   ¤u¨ã¥]¬A¹q¶l¤u¨ã©M¦h¬y¬d¸ß¤u¨ã¡C
   
   EARP ªº¥t¤@­Ó¯S¦â¬O¥ý¶iªº«O¦w¡C¦³¦hºØ¤èªk­­¨î¦s¨ú EARP ¨t²Îªº¤£¦P³¡¤À¡C
   ¬°¹F¨ì¥ý¶iªº«O¦w¡AEARP Àˬd¨C¤@­Ó³s±µ¡A ¥H½T©w¨C­Ó³s±µ¤H­ûªº¨­¤À (ids)
   ¤Î¸s²Õ (groups)¡C¤£¦P³¡¤Àªº¦s¨ú¿W¥ß©w¸q¡A ³Ì²×ªº²Õ¦X¨M©wµ²ªG¯à§_¦s¨ú
   EARP ªº¤@­Ó¯S©w³¡¤À¡C¦¹¥~¡A ¹ê¬I³o¨Ç«O¦w¯S¦â¥u»Ý¤@­Ó¤ä´©°ò¥»¡]©Î§ó¨Î¡^
   ¨Ï¥ÎªÌ»{ÃÒ (user authentication) ªº http ¦øªA¾¹¡C
   
20.4 ¦ó³B¨ú±o EARP¡H

   EARP ¥iÄy°Î¦W (anonymous) ftp ¨ú±o¡J
     * [299]ftp://ftp.oswego.edu ªº 'pub/unix/earp' ¥Ø¿ý¡C
       
21. PHP Hypertext PreProcessor¡XPostgreSQL ªº¦øªA¾¹ºÝ html ´O¤J©R¥O½Z»y¨¥

   ¸Uºûºô¤¶­±¤u¨ã¦ì©ó¡J
     * [300]http://www.php.net
     * [301]http://www.vex.net/php
       
   PHP ¤]¦³¤@­Ó¦W¬° Zend ªº½sĶ¾¹¡A¥i¤j´T§ïµ½ªí²{¡C­º¥ý§A¦b¶}µo¡B´ú¸Õ©M°£
   ¿ù®É¨Ï¥Î PHP ©R¥O½Z»y¨¥¡C·í·Ç³Æ¦n¥¿¦¡¨Ï¥Î®É¨Ï¥Î Zend ½sĶ¾¹²£¥Í¥i¨³³t°õ
   ¦æªº°õ¦æÀÉ¡C
   
   «e¨­¬° Professional Home Pages¡]PHP¡^¦Ó²{¦bºÙ¬° PHP Hypertext
   Pre-Processor
     * «Ü¦h°ê©w³£¦³¬M®g¯¸¥x¡A¦W¬° www.COUNTRYCODE.php.net
     * [302]http://www.fe.de.php.net
     * [303]http://www.sk.php.net
     * [304]http://php.iquest.net/
     * °ÝÃD¥i¹q¶l¨ì¡J [305]rasmus@lerdorf.on.ca
       
   PHP ¬O¤@­Ó¦øªA¾¹ºÝ html ´O¤J©R¥O½Z»y¨¥¡C¥¦Åý§A¦b§Aªº .HTML Àɤ¤¥[¤J²³æ
   ªº©R¥O½Z¡A¹³ JavaScript ¯ë¡C¤£¹L¡A©M JavaScript ¤£¦P¡APHP ¿W¥ß©óÂsÄý¾¹
   ¡CJavaScript ¬O¤@ºØ«È¤áºÝªº html ´O¤J©R¥O½Z»y¨¥¡A¦Ó PHP ¬O¦øªA¾¹ºÝ»y¨¥
   ¡CPHP ªº·§©À©M Netscape ªº LiveWire Pro ²£«~¬Û¦ü¡C¦pªG§A³ßÅw§Ö³t§ó·s¤S
   ¥]¬A·½µ{¦¡½Xªº¦Û¥Ñ³n¥ó¡A§A¤j·§·|³ßÅw PHP 3¡C
   
     * ¤ä´© PostgreSQL ªºµ{¦¡½X¥Ñ Adam Sussman ¼g¦¨
       [306]asussman@vidya.com
       
21.1 ¥D­n¯S¦â

     * ¼Ð·Çªº CGI¡AFastCGI ©M Apache ¼Ò²Õ¤ä´©¡X §@¬°¤@­Ó¼Ð·Çªº CGI µ{¦¡
       ¡APHP ¥i¦b°õ¦æ¥ô¦ó Unix ¤¬Ápºô¦øªA¾¹ªº¥ô¦ó Unix ¹q¸£¤W¦w¸Ë¡C¥[¤W¹ï
       ·s FastCGI ¼Ð·Çªº¤ä´©¡APHP ¥i±q¤¤±o¨ì³t«×¤Wªº§ïµ½¡C§@¬°¤@­Ó Apache
       ¼Ò²Õ¡A PHP Åܦ¨ CGI µ{¦¡¥~¤@­Ó±j«l¤Î§Ö¦p°{¹qªº¿ï¾Ü¡C
     * ¦s¨ú°O¿ý (Access Logging)¡X ÄyµÛ PHP ªº¦s¨ú¬ö¿ý¥\¯à¡A¥ÎªÌ¥i¦Û¦æºûÅ@
       ©R¤¤¼Æ¦r (hit counting) ¤Î§@¥X¬ö¿ý¡C¥¦§¹¥þ¤£§Q¥Î¨t²Î¤¤¥¡ªº¬ö¿ýÀÉ¡A
       ¦Ó¥B§Y®ÉºÊ¹î¦s¨ú¹Lµ{¡CLog Viewer Script ´£¨Ñ¤F­Ó§O¥ÎªÌ¾Ö¦³ªº­¶­±ªº
       ¦s¨úºK­n¡C¦¹¥~¡A ¥»®M¥ó¥i³Q³]©w¬°¦b¨C­¶²£¥Í¤@­ÓÅã¥Ü¦s¨ú¸ê®Æªºµù¸}¡C
       ¥»­¶ªºµ²§À´N¦³¤@­Ó¨Ò¤l¡C
     * ¦s¨ú±±¨î (Access Control)¡X ¤@­Ó¥H¸Uºûºô¬°°ò¦ªº¤º«Ø³]©wµe­±³B²z¨ú
       ±±¨î³]©w¡C ¥ÎªÌ¥i¥H¬°¬Y¤H¾Ö¦³ªº©Ò¦³©Î­Ó§Oºô­¶«Ø¥ß³W«h¡A­­¨î½Ö¤H¯à¤Î
       ¥L¯à«ç¼Ë¾\Ū¦³Ãöºô­¶¡C ®Ú¾Ú¥ÎªÌªººô°ì¡BÂsÄý¾¹¡B¹q¶l¦a§}¬Æ¦Ü¨Ó·½¤å¥ó
       (referring document)¡Aºô­¶¥i¥H±K½X«OÅ@¡B§¹¥þ¬Ý¤£¨ì¡B¸T¤î¬ö¿ý
       (logging disabled) ©M°µ¨ä¥L¨Æ¡C
     * PostgreSQL ¤ä´©¡X Postgres ¬O¤@­Ó¥ý¶iªº¦Û¥Ñ RDBMS¡C§Q¥Î PHP¡A¥ÎªÌ¥i
       ª½±µ¦b .HTML Àɤ¤´O¤J PostgreSQL ªº¡uSQL ¬d¸ß¡v¡C
     * RFC-1867 ÀɮפW¶Ç¤ä´©¡X ÀɮפW¶Ç¬O Netscape 2.0 ªº·s¥\¯à¡C¥¦Åý¥ÎªÌ
       §âÀɮפW¶Ç¨ì¸Uºûºô¦øªA¾¹¡C ¨Ï±o³o¨Æ¦æ¥iªº­ì¦]¡A¬O¹ê»Úªº Mime ¸Ñ½X¥Ñ
       PHP ´£¨Ñ¡A¥¦¥i´£¨ÑÃB¥~ªº®Ø¬[¡A ¦b¦¬¨ì¤W¶ÇªºÀɮ׫ᰵ¨Ç¦³¥Îªº¨Æ¡C
     * HTTP ¬°°ò¦ªº»{ÃÒ±±¨î¡X PHP ¥i¥Î¨Ó¦b Apache ¸Uºûºô¦øªA¾¹¤¤«Ø¥ß¦Û©w
       ªº¥H HTTP ¬°°ò¦ªº»{ÃÒ¾÷¨î¡C
     * ÅܼơB¦C°}¡B¬ÛÁp¦C°} (Associative Arrays)¡X PHP ¤ä´©ÅܼƧκA¡B¦C°}
       ¡B¬Æ¦Ü¦p Perl ¯ëªº¬ÛÁp¦C°}¡C¥¦­Ì¥iÄy GET ©Î POST ¤èªk¦bºô­¶¶¡¶Ç»¼¡C
     * ±ø¥ó¦¡¡BWhile °j°é¡X PHP ¤ä´©¤@ºØÃþ¦ü C ªº¥þ¥\¯à©R¥O½Z»y¨¥¡C§A¥i¨Ï
       ¥Î if/then/elseif/else/endif ±ø¥ó¦¡¡Bwhile °j°é©M switch/case ±Ô­z
       ¨Ó«ü¤Þ§Aªº html ­¶ªºÅã¥ÜªºÅÞ¿è¬y¦V¡C
     * ©µ¦ù¥¿³Wªí¹F¦¡¡X ¥¿³Wªí¹F¦¡±`³Q¥Î©ó¼Ë¦¡¤Ç°t¡B¼Ë¦¡´À´« (pattern
       substitutions) ©M¤@¯ëªº¦r¦ê³B²z¡CPHP ¤ä´©©Ò¦³±`¥Îªº¥¿³Wªí¹F¦¡¹B§@¡C
     * ­ì©l HTTP ¼ÐÀY±±¨î¡X ­n¶i¦æ°ª¶¥ºô¯¸³]­p¡A¨Ïºô­¶µø±¡§Î¶Ç°e¦Û©w HTTP
       ¼ÐÀYªº¯à¤O¬O¥²¶·ªº¡C ¤@­ÓºD±`¥Îªk¬O¶Ç°e¤@­Ó Location: URL ¼ÐÀY¨Ó§â
       «È¤áºÝ¶Ç°e¨ì¨ä¥L URL¡C¥¦¤]¥i¥Î©óÃö±¼§Ö¨ú©Î³B²zºô­¶­¶­º¤Wªº¡§last
       update¡¨¼ÐÀY¡C
     * §Y®É GIF ¹Ï¹³²£¥Í¡X PHP ¤ä´© Thomas Boutell ªº GD ¹Ï¹³¨ç¦¡®w¡A¨Ï¥¦
       ¥i§Y®É²£¥Í GIF ¹Ï¹³¡C
     * ISP¡§¦w¥þ¼Ò¦¡¡¨¤ä´©¡X PHP ¤ä´©¤@­Ó¿W¦³ªº¡§¦w¥þ¼Ò¦¡¡¨(Safe Mode)¡A¨Ï
       ±o¦b¦P¤@¦øªA¾¹¤W¦³¦h­Ó¥Î¤á¨Ï¥Î PHP ©R¥O½Z¤]¨S¦w¥þ°ÝÃD¡C
     * ·sª©¥»ªº PHP ¥[¤J¤F«Ü¦h·s¥\¯à¡A½Ð°Ñ¾\¥Dºô­¶
       [307]http://www.php.net
     * ¥¦¬O¦Û¥Ñªº¡I ³Ì«á¤@­Ó¥²­nªº¯S©Ê¡C³o®M¥ó¬O§¹¥þ¦Û¥Ñªº¡C¥¦¥H GNU/GPL
       ±ÂÅv¡AÅý§A¥i¬°¥ô¦ó¥Øªº¨Ï¥Î³o³n¥ó¡A¥]¬A°Ó·~¥Î³~¡C±ýª¾¸Ô±¡¡A½Ð°Ñ¬Ý
       GNU General Public License ¤å¥ó¡C
       
21.2 PHP¡X²¥v

   ªì¥X²{®É¡APHP ¬O¤@­Ó¥H Perl ¼g¦¨¤p¥©Â²³æªº cgi ¥]¸Ë¾¹ (wrapper)¡C³o®M¥ó
   ³Ì¥ý¦W¬° Personal Home Page Tools¡A«á¨ÓÅܬ° Personal Home Page
   Construction Kit¡C
   
   ¥t¦³¤@¤u¨ã¬O¼g¨Ó²¤Æ¦bºô­¶¤¤´O¤J SQL ¬d¸ßªº¤u§@¡C¥¦°ò¥»¤W¬O¥t¤@­Ó CGI
   ¥]¸Ë¾¹¡A¯à¤ÀªR (parsed) SQL ¬d¸ß¤Î²¤Æ«Ø¥ß®Ú¾Ú³o¨Ç¬d¸ßªºªí®æ©M¦Cªíªº¤u
   §@¡C ³o¤u¨ã¦W¬° FI (Form Interpreter)¡C
   
   PHP/FI 2.0 ª©§¹¥þ­«¼g³o¨â®M¥ó¡A±N¤§¦X¦Ó¬°¤@¡C¥¦¶i¤Æ¦Ü¥i§â²³æ¹q¸£»y¨¥´O
   ¤J HTML Àɤ¤¡C¥¦ÄyµÛ§â©Ò²³æªº©R¥O½Zª½±µ´O¤J HTML Àɤ¤¡A®ø°£¤j¶q¤p«¬
   Perl cgi µ{¦¡ªº»Ý­n¡C³o¼Ë·|¥[§Ö§Aªººô­¶¡A¦]¬° fork ¦h¦¸ Perl ªº§xÂZ¤w¸g
   ®ø°£¡C ¥¦¤]²¤Æ¤FºÞ²z¤j«¬ºô¯¸ªº¤u§@¡A¦]¬°§A¥i§âºô­¶ªº©Ò¦³³¡¤À©ñ¦b¤@­Ó
   html Àɤ¤¡C¥[¤W¦hºØ¸ê®Æ®wªº¤ä´©¡A¥i¨Ï¥Î¸ê®Æ®wªººô­¶ªº¶}µoÅܱo²³æ¡C «Ü
   ¦h¤Hı±o´O¤J¬d¸ß¤ñ¤À§O«Ø¥ß HTML ©M CGI Àɲ³æ±o¦h¡C
   
   PHP/FI ¤w§ï¦W¬° PHP¡C
   
21.3 ¨º»ò¡A§Ú¯à¥Î PHP °µ¤°»ò¡H

   ¦pªG§A¨Ï¥Î PHP¡A§A­º¥ý·|ª`·N¨ì¥¦¦b­¶§À¥[¤W³oºô­¶´¿³QÂsÄý¹L¦h¤Ö¦¸ªº¸ê®Æ
   ¡]¦pªG§A¦b¦b½sĶ®É¿ï¨ú¤F access logging¡^¡C³o¥u¬O PHP ©Ò°µªº¤@¤p³¡¤À¡C
   ¥¦ªº¥t¤@­Ó­«­n¨¤¦â¬O§@¬°¤@­Óªí®æª½Ä¶ cgi µ{¦¡ (form interpreter cgi)¡A
   ³o¤]´N¬O­º¦W¤¤ FI ªº·N«ä¡C¨Ò¦p¡A¦pªG§A¦b¤@­Óºô­¶¤¤«Ø¥ß¤F¤@­Óªí®æ¡A §A»Ý
   ­n¤@­Óµ{¦¡¨Ó³B²zªí®æ¤Wªº¸ê®Æ¡C§Y¨Ï§A¥u·Q§â¸ê®Æ¶Ç°e¨ì¥t¤@ºô­¶¡A§A¤]»Ý­n
   cgi µ{¦¡ªºÀ°§U¡CPHP ¨Ï±o¨ú±o©M³B²zªí®æªº¸ê®Æ·¥¬°®e©ö¡C
   
21.4 ¤@­Ó²³æªº¨Ò¤l

   °²³]§A¦³¤@±iªí®æ¡J
   
<FORM ACTION="/cgi-bin/php.cgi/~userid/display.html" METHOD=POST>
<INPUT TYPE="text" name="name">
<INPUT TYPE="text" name="age">
<INPUT TYPE="submit">
<FORM>

   §Aªº display.html «K¥i¥]¬AÃþ¦üªºªF¦è¡J
   
< ?echo "Hi $ name, you are $ age years old!<p>" >

   ´N¬O³o¼Ë²³æ¡IPHP ¦Û°Ê¬°¨C­Óªí®æ¿é¤JÄæ¦ì²£¥Í¤@­ÓÅܼơC¤§«á§A«K¥i¦b
   ACTION URL Àɤ¤¨Ï¥Î³o¨ÇÅܼơC
   
   ¦b§A§ä¥X¦p¦ó¨Ï¥ÎÅܼƤ§«áªº¨BÆJ´N¬O¦bºô­¶¤¤¸Õ¥Î¤@¨ÇÅÞ¿è¬yµ{¼ÐÅÒ¡C¨Ò¦p¡A
   ¦pªG§A·Q®Ú¾Ú¥ÎªÌ¿é¤JÅã¥Ü¤£¦P°T®§¡A§A¥i¨Ï¥Î if/else ÅÞ¿è¡C¦b¤W­±ªº¨Ò¤l¡A
   §Ú­Ì¥i§ïÅÜ display.html¡A¨Ï±o¤£¦PªF¦è·|®Ú¾Ú¥Î¤á¿é¤JÅã¥Ü¥X¨Ó¡J
   
<?
    if($age>50);
        echo "Hi $name, you are ancient!<p>";
    elseif($age>30);
        echo "Hi $name, you are very old!<p>";
    else;
        echo "Hi $name.";
    endif;
>

   PHP ´£¨Ñ¤@ºØ«D±`±j«lªº©R¥O½Z»y¨¥¡A¯à°µ¨ìªº¨Æ¤ñ¥H¤W²³æªº¨Ò¤l¦h«Ü¦h¡C±ý
   ª¾¸Ô±¡¡A ½Ð°Ñ¾\¦³Ãö PHP Script Language ªº³¹¸`¡C
   
   §A¤]¥i¨Ï¥Î PHP ¨Ó³]©w¦³¤°»ò¤H¯à¬Ý¨ì§Aªººô­¶¡C³o¥i¨Ï¥Î¤@­Ó¤º«Øªº³]©wµe­±
   °µ¨ì¡C ¨Ò¦p¡AÄyµÛ¥¦§A¥i«ü©w¥u¦³¬Y¨Çºô°ìªº¤H¥i¬Ý¨ì§Aªººô­¶¡A ©Î«Ø¥ß¤@¨Ç
   ³W«h¨Ó¥Î±K½X«OÅ@¬Y¨Çºô­¶¡C±ýª¾¸Ô±¡¡A½Ð°Ñ¾\¦³Ãö Access Control ªº³¹¸`¡C
   
   PHP ¤]¦³¯à¤O±µ¦¬¥ô¦ó¨Ì·Ó RFC-1867 ³W©wªºÂsÄý¾¹¤W¶ÇªºÀɮסC ³o¯S¦â¨Ï¥ÎªÌ
   ¯à¤W¶Ç¤å¦r©Î¤G¤¸ÀÉ¡CÄyµÛ PHP ªº¦s¨ú±±¨î©MÅÞ¿è¥\¯à¡A §A¥i¥þ­±±±¨î²a³\½Ö
   ¤W¶Ç¤Î¤W¶Ç«á°µ¤°»ò¡C±ýª¾¸Ô±¡¡A½Ð°Ñ¾\¦³Ãö File Upload ªº³¹¸`¡C
   
   PHP ¤ä´© PostgreSQL ¸ê®Æ®w®M¥ó¡C¥¦¤ä´©¦b .HTML Àɤ¤´O¤J SQL ¬d¸ß¡C
   
   PHP ¤]¤ä´© mysql ¸ê®Æ®w®M¥ó¡C¥¦¤ä´©¦b .HTML Àɤ¤´O¤J SQL ¬d¸ß¡C
   
21.5 CGI §ï¦V (Redirection)

  Apache 1.0.x ºK­n
  
   ¨Ï¥Î Apache ¦øªA¾¹ªº cgi §ï¦V¼Ò²Õ¬O°õ¦æ PHP ªº¤@­Ó¦n¤èªk¡C ½Ðª`·N§AµL¶·
   ¾á¤ß§ï¦V¼Ò²Õ¡A¦pªG§A¨Ï¥Î PHP ªº Apache ¼Ò²Õª©¥» (Apache module
   version)¡C¦³¨â­Ó³oÃþ§ï¦V¼Ò²Õ¡C¤@­Ó¬O Dave Andersen ¶}µoªº¡J
     * [308]angio@aros.net
       
   ¥¦¥i¦b¥H¤U¦a¤è§ä¨ì
     * [309]ftp://ftp.aros.net/pub/util/apache/mod_cgi_redirect.c
       
   ¥t¤@­Ó¤w¥]¬A¦b Apache ¤¤¡A¦W¬° mod_actions.c¡C³o¨Ç¼Ò²Õ·¥¬°¬Û¦ü¡A ¥u¬O¦b
   ¥Îªk¤W¦³¤Ö³\®t§O¡C¨â­Ó³£´ú¸Õ¹L¡A¯à©M PHP ¶¶§Q¦X§@¡C
   
   ¬d¬Ý Apache ªº¤å¥óÃö©ó¦p¦ó¥[¤J¤@­Ó¼Ò²Õ¡C¤@¯ë¨Ó»¡¡A§A§â¼Ò²Õ¦WºÙ¥[¨ì¤@­Ó
   ¦W¬° Configuration ªºÀɮפ¤¡C¦pªG§A¨Ï¥Î mod_actions ¼Ò²Õ¡A§A­n¥[ªº¤@¥y
   ¬O¡J
   
   Module action_module mod_actions.o
   
   ¦pªG§A¨Ï¥Î mod_cgi_redirect ¼Ò²Õ¡A¥[¤W¥H¤U¤@¥y¡J
   
   Module cgi_redirect_module mod_cgi_redirect.o
   
   ­«·s½sĶ§Aªº httpd ¤Î¦w¸Ë¥¦¡C­n³]©w cgi §ï¦V§A»Ý­n¦b§Aªº mime.types ÀÉ
   ¤¤«Ø¥ß·sªº mime Ãþ«¬¡A©Î¦b§Aªº srm.conf Àɤ¤¨Ï¥Î AddType «ü¥O¨Ó¥[¤W
   mime Ãþ«¬¡C©Ò¥[¤Wªº mime Ãþ«¬À³Ãþ¦ü¡J
   
     application/x-httpd-php phtml

   ¦pªG§A¨Ï¥Î mod_actions.c ¼Ò²Õ¡A§A»Ý¦b srm.conf Àɤ¤¥[¤W¥H¤U¤@¦æ¡J
   
     Action application/x-httpd-php /cgi-bin/php.cgi

   ¦pªG§A¨Ï¥Î mod_cgi_redirect.c ¼Ò²Õ¡A§A»Ý¦b srm.conf Àɤ¤¥[¤W¥H¤U¤@¦æ¡J
   
     CgiRedirect application/x-httpd-php /cgi-bin/php.cgi

   ¤£­n¦P®É¨Ï¥Î mod_actions.c ©M mod_cgi_redirect.c¡C
   
   ¦w¸Ë¤Î¥¿½T³]©w¤F³o¨Ç cgi §ï¦V¼Ò²Õ«á¡A§A¥u»Ý§â©µ¦ùÀɦW©w¬° .phtml¡A «K¥i
   ¥H«ü©w³oÀÉ®×¥Ñ PHP ¤ÀªR¡C¦¹¥~¡A¦pªG§A¦b srm.conf Àɪº DirectoryIndex ³]
   ©w¦æ¥[¤W index.phtml¡A³Ì¤W¼hªººô­¶«K·|¦Û°Ê¥Ñ php ¤ÀªR¡A¦pªG§Aªº index
   ÀɦW¬° index.phtml¡C
   
  Netscape HTTPD
  
   §A¥iÄy Netscape Server CGI Redirection ¼Ò²Õ¨Ó«ü©w¦Û°Ê§â¹ï¬Y¨Ç©µ¦ùÀɦWªº
   Àɮתº­n¨D§ï¦Vµ¹ PHP¡C³o¼Ò²Õ¥i¦b PHP ºô­¶ªº File Archieves ¤¤§ä¨ì¡C®M¥ó
   ¤¤ªº README ©ú½T¦a¸ÑÄÀ¤F¦p¦ó³]©w¥¦¨Ó¥Î©ó PHP¡C
   
  NCSA HTTPD
  
   ¥Ø«e¡ANCSA ¨Ã¤£¤ä´©¼Ò²Õ¡A©Ò¥H¡A­n¨Ï¥Î cgi §ï¦Vªº¸Ü¡A§A­n­×§ï¦øªA¾¹ªº­ì
   ©l½X¡C ¤@­Ó¹ï NCSA 1.5 °µ³o¤u§@ªº´O¸É¦b¦b PHP Àɮצs®w¤¤§ä¨ì¡C
   
21.6 ¦b«ü¥O¦æ°õ¦æ PHP

   ¦pªG§A«Ø¥ß¤F CGI ª©¥»ªº PHP¡A§A¥u»Ý¦b«ü¥O¦æ¿é¤J php.cgi filename¡A
   ¦Ófilename ¬O§A·Q¤ÀªRªºÀɮסC§A¥i«Ø¥ß¿W¥ßªº PHP ©R¥O½Z¡A¥u»Ý§â©R¥O½Z
   (script) ªº²Ä¤@¦æ¼g¬°Ãþ¦ü¡J
   
    #!/usr/local/bin/php.cgi -q

   ¡§-q¡¨ªý¤î¦L¥X HTTP ¼ÐÀY¡C³ßÅwªº¸Ü¡A§A¥i¤£¥Î³o¿ï¾Ü¡C
   
21.7 PHPGem ®M¥ó

   PHPGem ¬O¤@­Ó PHP ©R¥O½Z¡A¥Î¥H¥[³t½s¼g¨Ï¥Îªí®æªº PHP ©R¥O½Z¡C¥¦¥i¥Î©ó¤£
   ¦Pªº SQL ¦øªA¾¹¡A¦p PostgreSQL¡BMySQL¡BmSQL¡BODBC ©M Adabas¡C §A¿é¤Jªí
   ®æÄæ¦ìªº´y­z©M°Ñ¼Æ¡]Äæ¦ì¦WºÙ¡BÄæ¦ìªº on/off searching (?) µ¥µ¥¡^¡A
   PHPGem ¿é¥X¥t¤@­Ó¨Ï¥Î¨º¨Çªí®æªº PHP ©R¥O½Z¡]À˵ø/¥[/­×§ï/§R°£/­«ÂФº®e
   ©M·j¯Á¡^¡C PHPGem ¥i¨Ï¥Î¦h¼h±_ª¬ªí®æ (multi-level nested tables, ??)
   ¡CPHPGem ®e³\§A«ü©w¨C­Óªí®æ¨C­ÓÄæ¦ì¨C¤HÊú¦s¨ú±±¨î¡CPHPGem ¤]¤ä´©¼v¹³¡C
   
   PHPGem ¦b [310]http://sptl.org/phpgem §ä¨ì¡C
   
22. PostgreSQL ªº Python ¤¶­±

   Python ¬O¤@­Óª½Ä¶ªºª«¥ó¾É¦V©R¥O½Z»y¨¥¡C¥¦¨Ï¥Î²©ö¡]»´¥©ªº»yªk¡B ²³æª½
   ±µªº¥y¤l¡^¡A¦³«Ü¦h¥Î©ó«Ø¥ß GUI ªº©µ¦ù¡B¸Uºûºô¤¶­±µ¥µ¥¡C ¤@­Ó¦³´¼¼zªºÂs
   Äý¾¹¡]Ãþ¦ü HotJava¡^¥¿¦b¶}µo¤¤¡]¤@¤E¤E¤­¦~¤Q¤@¤ë¡^¡A ³o·|µ¹¤©µ{¦¡³]­p­û
   «Ü¦h¾÷·|¡CPython ªºª©Åv«ù¦³¤H¬°²üÄõªü©i´µ¯S¤¦ªº Stichting S
   Mathematisch Centrum¡A¥i¦Û¥Ñ´²§G¡C¥¦¥]¬Aª«¥ó¡BÃþ§O (classes)¡B¼Ò²Õ¡B©M
   ¨Ò¥~ (exceptions) ªº°ÊºA¸ü¤J¡C¨Ï¥Î C »y¨¥¨Ó±N¨ä¤¶­±¥[¤J·s¨t²Î¨ç¦¡®w¬Oª½
   ±µªº¤u§@¡A¨Ï Python ¦b¦Û¦æ³]©w®É®e©ö¨Ï¥Î¡CPython ¬O¤@­Ó¾Ö¦³ X ¤¶­±ªº°ª
   µ¥©R¥O½Z»y¨¥¡C¦b Linux ¥úºÐ¤¤ªº Python ®M¥ó¥]¬A¤j³¡¤À¼Ð·Ç Python ¼Ò²Õ¡A
   ¥H¤Î¥Î§@ Tk ¤¶­±ªº Tix widget ¼Ò²Õ¡C
   
   PyGreSQL ¬O¤@­Ó¥Î§@ PostgreSQL ¸ê®Æ®wªº¤¶­±¡C¥¦´O¤J¤F PostgreSQL ¬d¸ß¨ç
   ¦¡®w¡A¨Ï±o¦b Python ¤â½Z¤¤¨Ï¥Î±j«lªº PostgreSQL ¯S©Ê¤Q¤À²³æ¡CPyGreSQL
   ¥Ñ D'Arcy J.M. Cain ©M Pascal Andre ¼g¦¨¡C
     * PyGreSQL ªº·sºô¯¸ [311]http://www.druid.net/pygresql/
     * D'Arcy ©ÒºûÅ@ªº [312]http://www.druid.net/~darcy/
     * ºô¯¸¦b
       [313]ftp://ftp.via.ecp.fr/pub/python/contrib/Database/PyGres95.REA
       DME 
     * D'Arcy J.M. Cain [314]darcy@druid.net
     * Pascal Andre [315]andre@chimay.via.ecp.fr
     * Pascal Andre [316]andre@via.ecp.fr
       
22.1 ¦p¦ó¨ú±o PyGres¡H

   ¤£¦P®M¥óªº¥Dºô¯¸¦b¡J
     * Python
       [317]ftp://ftp.python.org:/pub/www.python.org/1.5/python1.5b2.tar.
       gz
     * PyGreSQL [318]ftp://ftp.druid.net/pub/distrib/PyGreSQL-2.1.tgz
     * ºô¯¸
       [319]ftp://ftp.via.ecp.fr/pub/python/contrib/Database/PyGres95-1.0
       b.tar.gz 
       
   µL½×¦p¦ó¡A§AÀ³¹Á¸Õ´M§ä³Ì±µªñ§Aªº¬M®g¯¸¥x¡C½Ð°Ñ¾\¸ê®Æ¨Ó·½¨Ó§ä³o¨Ç¯¸¥x
   ¡CPygreSQL ¤]·|¦b Python ©M PostgreSQL ¯¸¥xªº contrib ¥Ø¿ý§ä¨ì¡C
   
22.2 ¸ê®Æ©M¤ä´©

   ¦pªG§A»Ý­n³o¨Ç®M¥óªº¸ê®Æ¡A½Ð¬d¬Ý¥H¤Uºô­¶¡J
     * Python¡J [320]http://www.python.org/
     * PostgreSQL¡J
       [321]http://epoch.cs.berkeley.edu:8000/postgres95/index.html
     * PyGreSQL [322]ftp://ftp.druid.net/pub/distrib/PyGreSQL-2.1.tgz
     * PyGreSQL ºô¯¸¡J
       [323]http://www.via.ecp.fr/via/products/pygres.html
       
   ¤ä´©¡J
     * PyGreSQL ªº³q«H½×¾Â¡C­n°Ñ¥[ªº¸Ü¡A§A¥i¹q¶l¦Ü¡J
       [324]majordomo@vex.net ¦b¥¿¤å¤¤¼g¡§subscribe pygresql name@domain¡¨
       ¡A§â¡§name@domain¡¨ §ï¬°§A¦Û¤vªº¹q¶l¦a§}¡C
     * Python ªº·s»D²Õ¡J newsgroup comp.lang.python
     * PyGreSQL : ¦p¦³¯äÂγø§i¡B·N¨£¡Bª`ÄÀ¡A½Ð§ä Andre
       [325]andre@via.ecp.fr
       
22.3 ´ú¸Õ Python ¤¶­±

   ½Ð°Ñ¦Ò [326]´ú¸Õ Python¡XPostgreSQL ¤¶­± ¤@¸`¡C
   
23. PostgreSQL ©M¸Uºûºôªº¹h¸ô (gateway) ¡X WDB-P95

23.1 ¦³Ãö wdb-p95

   WDB-P95 - ¤@­Ó¥Ñ J. Douglas Dunlop ¶}µoªº PostgreSQL ¸ê®Æ®w¸Uºûºô¤¶­±
   ¥¦¦b¡J
     * J Rowe ªº·s WDB ¦b
       [327]http://www.lava.net/beowulf/programming/wdb
     * ·sª©¥»ªº WWW-WDB ¦b [328]http://www.eol.ists.ca/~dunlop/wdb-p95/
     * ¦³°ÝÃD©Î·Q¥[¤J³q«H½×¾Â [329]dunlop@eol.ists.ca
       
   ³o¬O¤@­Ó­×§ï¤Fªº wdb-1.3a2¡A´£¨Ñ¤@­Ó PostgreSQL ¨ì¸Uºûºôªº¹h¸ô¡C ³oª©¥»
   ¤]»Ý­n¯à³B²z HTML ªí®æªºÂsÄý¾¹¡C­ì¥»ªº wdb µL¦¹­n¨D¡A¦ý­nÁÙ­ì¤]¤£Ãø¡C
   
   §A¥i¹Á¸Õ CASI Tape ©M Image Query¡C§A¥i¬Ý¬Ý¨ä Form Definition File
   (FDF)¡A¥¦¤]¥Î©ó²£¥Í CASI Tape ©M Image Query¡A¥¦¥]§t¤F¨â­Ó¦CªíªºÁpµ²
   (join)¡C
   
   ³oª©¥»¥]§t©Ò¦³»Ý­n¥Î©ó¦w¸Ë©M°õ¦æ¥H WDB-P95 ¬° PostgreSQL ¤¶­±ªºÀɮסC­n
   §â³o¨t²Î²¾´Ó¨ì¨ä¥L¸ê®Æ®wÀ³»á¬°Â²³æ¡X¦pªG¥¦¤ä´©¼Ð·Çªº SQL ©M¾Ö¦³ Perl ¤¶
   ­±¡C
   
23.2 PostgreSQL ¦øªA¾¹¡Bpgperl ©M httpd ¬O§_»Ý¦b¦P¤@¹q¸£¡H

   §_¡XPostgreSQL ¤£»Ý¦b¦P¤@¹q¸£¡C¦] WDB-P95 ¥Ñ httpd ºÊ±±µ{¦¡ (daemon) ©I
   ¥s¡A¥¦­Ì­n¦b¦P¤@³¡¹q¸£¡C¤S¦]¬° WDB-P95 ¨Ï¥Î Pg.pm¡Apgperl ¤]­n¦b¦P¤@¹q
   ¸£¡C Pgperl ¬O¥H libpq ¨ç¦¡®w¼g¦¨¡A©Ò¥H¥¦¥i¦s¨úºôµ¸¤W¥ô¦ó PostgreSQL ¦ø
   ªA¾¹¡A´N¦p¨ä¥L PostgreSQL «È¤á¡C¦p¤U©Ò­z¡J
   
   (¸Uºûºô«È¤á (Netscape)) => (HTTP ¦øªA¾¹ (NCSA's http) + WDB-P95 +
   pgperl + libpq)=> (PostgreSQL ¦øªA¾¹)
   
   ¬A¸¹ () ¥Nªí¹q¸£¡C
   
   ¨C³¡¹q¸£¥i¬O¤£¦PÃþ«¬¡JNT¡BSUN¡BHP¡K¡K¦ý§A»Ý­n¦b§A¥´ºâ°õ¦æ WDB-P95 ªº¹q
   ¸£ªº libpq ¤¶­±¨ç¦¡®w¡A¦]¬°§A­n¥Î¥¦¨Ó½sĶ pgperl¡C¡]³o¨t²Î³]­p¦¨·|¨Ï¥Î
   HTML ªí®æ¡A©Ò¥H³Ì¦n¦³¤@·sªñªº¸Uºûºô«È¤áºÝ¡C¡^
   
24. "C", "C++", ESQL/C »y¨¥¤¶­±©M PostgreSQL ªº³v¦ì¹Bºâ¤¸ (Bitwise Operators)

24.1 "C" ¤¶­±

   ¥¦¤w¥]§t¦bµo¦æª©¥»¤¤¡A¦W¬°¡¥libpq¡¦¡C©M Oracle OCI¡BSybase DB-lib
   ¡BInformix CLI ¨ç¦¡®w¬Û¦ü¡C
   
24.2 "C++" ¤¶­±

   ¥¦¤w¥]§t¦bµo¦æª©¥»¤¤¡A¦W¬°¡¥libpq++¡¦¡C ½Ð°Ñ¦Ò [330]´ú¸Õ libpq,
   libpq++ ¤¶­± ¤@¸`¡C
   
24.3 ESQL/C

   PostgreSQL ESQL/C 'Embedded C Pre-compiler' Ãþ¦ü Oracle Pro*C
   ¡BInformix ESQL/C¡CPostgreSQL ESQL/C ¬O¤@ºØ SQL À³¥Îµ{¦¡¤¶­± (API)¡A¨Ï
   C µ{¦¡³]­p®v¯à¦Û¦æ³]­p¥i¾Ö¦³ºÞ²z¸ê®Æ®wªº¯à¤OªºÀ³¥Îµ{¦¡¡CPostgreSQL
   ESQL/C ®e³\§A¨Ï¥Î§A©Ò¼ô±xªº²Ä¤T¥N¹q¸£»y¨¥¦Ó¤S¯à§Q¥Î¨ìµ²ºc¤Æ¬d¸ß»y¨¥
   (SQL) ªºÀuÂI¡C
   
   ESQL/C ¥]§t¥H¤U³n¥ó¡J
     * ESQL/C ¨ç¦¡®w´£¨Ñ¨ã¸ê®Æ®w¦øªA¾¹¦s¨ú¯à¤Oªº C ¨ç¦¡¡C
     * ESQL/C ¼ÐÀYÀÉ´£¨Ñ¹ï ESQL/C µ{¦¡¦³¥Îªº¸ê®Æµ²ºc¡B±`¼Æ©M¥¨¶°ªº©w¸q¡C
     * ESQL/C ¹w³B²z¾¹¡A¤@­Ó§â¥]§t SQL ¥y¤lªº C ÀÉÂà´«¬°¥i°õ¦æÀɪº·½µ{¦¡¹w
       ³B²z¾¹¡C ¡]Ķ«ö¡JÀ³¬°§â§t´O¤J¦¡ SQL ªº C ÀÉ®×Âà´«¬°¼Ð·Çªº C ÀɮסA
       ¨Ã¥i¥Ñ gcc ½sĶ¬°¥i°õ¦æÀÉ¡C¥t¥~¡APostgreSQL ªº SQL ´O¤J¦¡ SQL ¹w³B
       ²z¾¹À³¦W¬° ecpg¡C¡^
       
   ¥¦¦b
     * PostgreSQL ªº ESQL/C ¤w¥]§t¦bµo¦æª©¥»¤¤¡C
     * ¥Dºô¯¸ [331]ftp://ftp.lysator.liu.se/pub/linus
     * ¹q¶l¡J [332]linus@epact.se
       
   ½Ð°Ñ¦Ò [333]´ú¸Õ ecpg ¤¶­± ¤@¸`¡C
   
   ­n¨Ï¥Î Vim ±m¦â½s¿è¾¹½s¼g¡¥ecpg¡¦ÀÉ¡]*.pgc¡^¡A§A­n³o¼Ë°µ¡J
     _________________________________________________________________
   
bash$ su - postgres
bash$ mkdir $HOME/vim
«Ø¥ß¤@­Ó¦W¬°¡¥$HOME/vim/myfilestypes.vim¡¦ªºÀɮסA¤º¦³¥H¤U¼Æ¦æ

    " myfiletypefile
        au! BufRead,BufNewFile *.pgc    set filetype=esqlc
     _________________________________________________________________
   
   §AÀ³¸Ó¦³¤@­Ó $HOME/.gvimrc ÀÉ¡C§_«h½Ð¦Û¤v»s³y¤@­Ó¡A½Ð°Ñ¦Ò¦b
   [334]http://metalab.unc.edu/LDP/HOWTO/Vim-HOWTO.html ªº Vim HOWTO ¤å¥ó
   ¡C
   
   ¦b $HOME/.gvimrc ¥[¤W¥H¤U¤@¦æ
     _________________________________________________________________
   
let myfiletypefile = "~/vim/myfiletypes.vim"
     _________________________________________________________________
   
   ²{¦b¦pªG§A¥Î
     _________________________________________________________________
   
bash$ gvim sample.pgc
     _________________________________________________________________
   
   ½s¿èÀɮסA§A¥i±o¨ì¨Ì»yªk¬ð¥X¤º¤å (syntax highlight) ªºÃC¦â¡C
   
24.4 PostgreSQL ªº³v¦ì¤¸¹Bºâ¤¸

   ³v¦ì¤¸¹Bºâ¤¸¥Ñ Nicolas Moldavsky ¼g¦¨
     * [335]nico@overnet.com.ar
       
   ¹ê½î³v¦ì¤¸¹Bºâ¡]AND¡BOR¡BXOR¡B¦ì¤¸¸É¼Æ (bitwise complement)¡^ªº pgsql
   ¡§C¡¨¨ç¦¡¡C¥i¸g°Î¦W FTP ±o¨ì¡J
     * [336]ftp://ftp.overnet.com.ar/pub/utils/linux/bitpgsql.tgz
       
   ¥]¬A¤F Linux ªº Makefile¡C
   
25. PostgreSQL ªº¤é¤å°²¦W½X (Kanji Code)

   ¥¦¦b¥H¤Uºô§}¡J
     * [337]ftp://ftp.sra.co.jp/pub/cmd/postgres/
       
26. ²¾´Ó PostgreSQL ¨ìµøµ¡ 95 / µøµ¡ NT

   µøµ¡ NT ª©ªº PostgreSQL ¤G¤¸ÀÉ¥i¦b¥H¤U¦a¤è§ä¨ì¡J
     * µøµ¡ NT PostgreSQL ¤G¤¸ÀÉ [338]http://www.askesis.nl
     * [339]http://www.postgresql.org
       
   ¤U¸ü¥i°õ¦æÀÉ¡A±N¥¦¸ÑÀ£¡A¨Ã±q²Ä¤Q¤T¨B¶}©l¸ò±q [340]¦w¸Ë PostgreSQL¡C
   
   ¦pªG§A·Q­«·s½sĶ­ìµ{¦¡½X¡A½Ð¸ò±q¥H¤U«ü¥Ü¡C²¾´Ó¨ìµøµ¡ NT ­n¨Ï¥Î Cygnus
   cygwin32 ®M¥ó¡A¥¦¥]¬Aµøµ¡ NT/95 ªº gcc¡Bgmake¡C
     * Cygwin 32 ®M¥ó¦b [341]http://www.cygnus.com/misc/gnu-win32 §ä¨ì
       
   ¨ì¦¹ºô­¶¨ú±o cdk.exe ÀÉ¡]gnu-win32 ªº¦Û§Ú¸ÑÀ£ÀÉ¡^ ¡]Ķ«ö¡J¦¹¤u¨ã¤w§ï¦W
   ¬° cygwin¡Aºô§}¬° [342]http://sourceware.cygnus.com¡C¡^
   
26.1 NT ª©ªº§@ªÌ

   PostgreSQL NT ª©ªº§@ªÌ¬°¡X
     * Daniel Horak [343]horak@mmp.plzen-city.cz
     * Joost Kraaijeveld [344]JKraaijeveld@askesis.nl
     * Kevin Lo [345]kevlo@FreeBSD.org
     * NT ª©ªººô­¶¦b
       [346]http://www.freebsd.org/~kevlo/postgres/portNT.html
       
26.2 ¦w¸Ë Cygwin ®M¥ó

    1. ¤U¸ü
       [347]ftp://go.cygnus.com/pub/sourceware.cygnus.com/cygwin/latest/f
       ull.exe
    2. °õ¦æ full.exe¡A¦w¸Ë¨ì c:\Unix\Root ¥Ø¿ý¡C
    3. °õ¦æ Cygwin¡AÁä¤J¡¥mount --help¡¦¥H¾\Ū¤å¥ó¡C§A¥i¥Î -f ¿ï¶µ±j¨î±¾¤W
       ¡C¤§«á°õ¦æ¡§umount / " ©M¡§mount c:\Unix\Root /¡¨
       
26.3 ³]©w Bash µøµ¡

   ¦w¸Ë Cygwin ®M¥ó«á¡A½Ð¶i¦æ¥H¤U¤u§@¥H³]©w¤u§@Àô¹Ò¡J
   
   1. ¦w¸Ë Vi ½s¿è¾¹¡¥Vim¡¦¡C½Ð°Ñ¾\
   [348]http://metalab.unc.edu/LDP/HOWTO/Vim-HOWTO.html
   
   2. cygwin bash ªº¹w©wµøµ¡¬O¤@­Ó¤Ü¥|¦æ¡A©³¦â¬°¶Â¦âªºµøµ¡¡C­n³]©w bash µø
   µ¡ªº©³¦â©M¤j¤p¡A«ö¶}©l->±±¨î¥x->MS DOS ¥D±±¥x¡A§â©³¦â³]©w¬°¶Â¦â¡A ¤j¤p
   §ï¬°¤C¤Q¦æ¡C
   
   ¡]©Î¡^¥kÀ»µøµ¡¼ÐÃD¦C¡A§ïÅܤº®e¡C
   
   3. ½s¿è c:\cygnus\cywinb20 ¤¤ªº cygnus.bat ©M§@¥H¤U³]©w¡X
     _________________________________________________________________
   
set HOME=c:\cygnus\cygwinb20
bash --login
     _________________________________________________________________
   
   ¤Î½s¿è  /.bash_profile ¥[¤W³o´X¦æ
     _________________________________________________________________
   
set -o vi
PATH=$PATH:/usr/local/bin:/usr/bin
export PATH
     _________________________________________________________________
   
   4. ­n±Ò¥Î«ü¥O¦C¾ú¥v½s¿è¡AÁä¤J¡X
   
   bash$ set -o vi
   
   ¨Ï¥Î l¡Bk¡Bj¡Bh¡A§A¥i¥Î vi «ü¥O½s¿è«ü¥O¦C¾ú¥v¡C§A¥i­«ÂЩM­×§ï¤§«eªº«ü¥O
   ¡A¥H¸`¬Ù¥´¦r®É¶¡¡C
   
   5. §A¥i¥Î¥H¤U«ü¥O±¾¤WºÏºÐ¾÷ / ¥Ø¿ý¡X
     _________________________________________________________________
   
bash$ umount /
bash$ mount "c:\cygnus"  /
bash$ mount "c:\cygnus\cygwin-b20\postgres" /usr/local/pgsql
     _________________________________________________________________
   
   6. ¥Î¥H¤U«ü¥O¾\Ū½u¤W¨D§U°T®§¡X
     _________________________________________________________________
   
bash$ mount --help
bash$ ls --help
     _________________________________________________________________
   
26.4 ¦w¸Ë Andy Piper ¤u¨ã

    1. ¨ì [349]ftp://ftp.xemacs.org/pub/xemacs/aux/ ¤U¸ü
       cygwin-b20-local.tar.bz2 ¨ì c:/Unix/Root ¥Ø¿ý¡C
    2. cd c:/Unix/Root; bunzip2 cygwin-b20-local.tar.bz2
    3. tar -xvf cygwin-b20-local.tar
    4. cd /local/bin; sh check_cygwin_setup.sh
    5. §¹¦¨²Ä¥|¨B«á¡A§A·|¬Ý¨ì¥H¤U°T®§¡J
         _____________________________________________________________
       
You don't have /bin would you like to mount cygwin as /bin?"
[ y/n ]
¿ï¡¥n¡¦¡A¨ä¥L°ÝÃD«h¿ï¡¥y¡¦¡C
         _____________________________________________________________
       
    6. mount c:/Unix/Root/cygwin-b20/H-i586-cygwin32/i586-cygwin32/bin
       /bin
    7. cd c:/Unix/Root/cygwin-b20/H-i586-cygwin32/i586-cygwin32; mkdir
       libexec share man etc sbin info
    8. cp -R /local/{ bin,libexec,share,man,etc,sbin,info,include }
       
26.5 ¦w¸Ë Ludovic Lange ªº Cygwin32 IPC ®M¥ó

    1. ¨ì [350]http://www.multione.capgemini.fr/tools/pack_ipc ¤U¸ü
       cygwin32_ipc-1.03.tgz ¨ì c:/Unix/Root ¥Ø¿ý¡C
    2. tar -zxvf cygwin32_ipc-1.03.tgz
    3. cd cygwin32_ipc-1.03/src and run 'make'
    4. mkdir -p c:/usr/local/{bin,include,lib,include/sys}
         _____________________________________________________________
       
cp /cygwin32_ipc-1.03/bin/* c:/usr/local/bin
cp /cygwin32_ipc-1.03/include/sys/* c:/usr/local/include/sys
cp /cygwin32_ipc-1.03/lib/* c:/usr/local/lib
cp c:/usr/local/bin/* /bin
cp c:/Unix/Root/cygwin-b20/H-i586-cygwin32/bin/* /bin
         _____________________________________________________________
       
    5. mount c:/usr/local/bin /usr/local/bin
         _____________________________________________________________
       
mount c:/usr/local/include /usr/local/include
mount c:/usr/local/lib /usr/local/lib
cp /local/lib/* /usr/local/lib
         _____________________________________________________________
       
26.6 ¦w¸Ë PostgreSQL

    1. ¤U¸ü³Ì·sªº PostgreSQL ·½µ{¦¡½X
    2. Postgres §â©Ò¦³ÀÉ®×·í§@¤G¤¸ÀÉ¡A©Ò¥H·|¹J¨ì lf/cf °ÝÃD¡A§Ú­Ì­n°µ²Ä¤G
       ¦Ü¤­¨B¡J
         _____________________________________________________________
       
mkdir -p c:/Postgres/{Source,Binary}
mkdir c:/Postgres/Binary/pgsql
mkdir -p /usr/src/pgsql
mkdir -p /usr/local/pgsql
         _____________________________________________________________
       
    3. §â Postgres ·½µ{¦¡½X«þ¨©¨ì c:/Postgres/Source ¥Ø¿ý¡A¤§«á tar -zxvf
       postgresql-6.5.3.tar.gz
    4. mv postgresql-6.5.3 pgsql
    5. ²{¦b±¾¤W¦U­Ó¥Ø¿ý¡X
         _____________________________________________________________
       
mount -b c:/Postgres/Binary/pgsql /usr/local/pgsql
mount c:/Postgres/Source/pgsql /usr/src/pgsql
mount c:/Unix/Root/cygwin-b20/share /sw/cygwin-b20/share
         _____________________________________________________________
       
    6. mkdir -p /usr/local/pgsql/{bin,include,lib,data}
    7. cd /usr/src/pgsql/src/win32
    8. «þ¨©¼ÐÀYÀÉ¡X
         _____________________________________________________________
       
cp un.h c:/Unix/Root/cygwin-b20/H-i586-cygwin32/i586-cygwin32/include/sys
cp endian.h c:/Unix/Root/cygwin-b20/H-i586-cygwin32/i586-cygwin32/include
cp tcp.h c:/Unix/Root/cygwin-b20/H-i586-cygwin32/i586-cygwin32/include/netinet
         _____________________________________________________________
       
    9. ln -s /usr/local/lib /usr/src/pgsql/src/backend/libpostgres.a
   10. cd /usr/src/pgsql/src, ¤§«á°õ¦æ './configure'
   11. make > make.txt 2>&1
   12. make install > make.install.txt 2>&1
   13. cp /usr/local/pgsql/lib/pq.dll /usr/local/pgsql/bin
   14. ¦b make install ¤§«á§A­n§â bin ©M lib ¥Ø¿ý¤¤ªº¤å¦rÀÉÂà´«¡A¥H²M°£
       cr/lf ©M eof ¤§ÃþªF¦è¡C
   15. ¦b / ¥Ø¿ý¨Ï¥Î¥ô¦ó½s¿è¾¹²£¥Í .bashrc ¦p¤U¡J
         _____________________________________________________________
       
PATH=$PATH:/usr/local/pgsql/bin:/usr/local/bin
PGDATA=/usr/local/pgsql/data
PGLIB=/usr/local/pgsql/lib
LD_LIBRARY_PATH=/usr/local/pgsql/lib:/usr/local/lib
export LD_LIBRARY_PATH PATH PGDATA PGLIB
         _____________________________________________________________
       
   16. source /.bashrc, ¤§«á°õ¦æ 'initdb --username=xxxx' ­nª`·N¸ê®Æ®w¨t²Î
       ªº¾Ö¦³¤H¤£¥i¥H¬O root/administrator¡C
   17. ½s¿è /usr/local/pgsql/data/pg_hba.conf ÀÉ¡A¦p¡J
         _____________________________________________________________
       
host        all     163.17.11.109   255.255.255.0   trust
         _____________________________________________________________
       
   18. ipc-daemon.exe&
   19. postmaster -i&
   20. °õ¦æ ' psql -h host_name template1'
       
27. ³q«H½×¾Â

27.1 PostgreSQL ªº¹q¶l¤á¤f

   ¥H¤U¦a¤è¨ú±o§K¶O¹q¶l
     * ¦b Yahoo [351]http://www.yahoo.com À»¿ï e-mail
     * In Lycos [352]http://www.lycos.com À»¿ï new e-mail accounts
     * In hotmail [353]http://www.hotmail.com À»¿ï new e-mail accounts
       
   ­q¾\ PostgreSQL ³q«H½×¾Â¡A¦Ó Yahoo ¦³¤@­Óªþ¥[¯S¦â¡A¥i¬° PostgreSQL ¹q¶l
   «Ø¥ß¿W¥ßªº¥Ø¿ý¡A§K­PÂZ¶Ã§A¨ä¥Lªº¹q¶l¡C¾Ü¿ï¥Ø¿ý Email- > Options- >
   Filters ¤Î´z¿ï seperate folder for email¡C §A¥i¥Î³o­Ó¹q¶l¤á¤f¦b¥@¬É¥ô¦ó
   ¦a¤è¦¬µo¹q¶l¡A¥u­n§A¯à¤Wºô¡C
   
   ¦pªG§A¦³¨ä¥L¹q¶l¡A§A¥i¥Î¡§Mail Filters¡¨¨Ó¦Û°Ê§â PostgreSQL ¶l¥ó©ñ¨ì¿W
   ¥ßªº¥Ø¿ý¡A¥H§K²V¶Ã¡C
   
27.2 ­^¤å³q«H½×¾Â

   ½Ð°Ñ¾\¥Dºô­¶ªº Mailing Lists ¶µ¥Ø¡J
     * [354]http://www.postgresql.org/
     * §â°ÝÃD¹q¶l¦Ü¡J [355]pgsql-questions@postgresql.org
     * ¶}µo¤H­û [356]pgsql-hackers@postgresql.org
     * ¦³Ãö²¾´Óªº°ÝÃD [357]pgsql-ports@postgresql.org
     * ¤å¥ó°ÝÃD [358]pgsql-docs@postgresql.org
       
   §A·|¦b¤@¤é¤§¤º±q¹q¶l¦¬¨ìµª®×©Î¦^ÂСC
   
   §A¤]¥i­q¾\³q°T½×¾Â¡C­n­q¾\©Î°±¤î­q¾\¡A¹q¶l¦Ü
     * [359]pgsql-questions-request@postgresql.org
     * [360]pgsql-hackers-request@postgresql.org
     * [361]pgsql-ports-request@postgresql.org
     * [362]pgsql-docs-request@postgresql.org
       
   °T®§ªº¥¿¤å¥u¥i¦³¤@¦æ
   
   subscribe
   
   ¡]©Î¡^
   
   unsubscribe
   
27.3 ³q«H½×¾Â¦s®w

   ³q«H½×¾Â¤]¥H html ®æ¦¡¦s®w¦b¥H¤U¦a¤è¡J
     * ¸g MHonarc ¦A¸g WWW ªº¨C¤é¥Ø¿ý
       [363]http://www.postgresql.org/mhonarc/pgsql-questions
     * [364]ftp://ftp.postgresql.org ¥Ø¿ý /pub/majordomo
       
   PostgreSQL ¥Dºô­¶¤¤¤]¦³¤@­Ó±M¬° pgsql °ÝÃD¦Ó³]ªº·j´M¤ÞÀº¡C
   
27.4 ¦è¯Z¤ú¤å³q«H½×¾Â

   ¥Ø«e¦³¤@­Ó¡u«D©x¤è¡vªº¦è¯Z¤ú¤å PostgreSQL ³q«H½×¾Â¡C­n­q¾\ªº¸Ü¡A¥ÎªÌ»Ý
   ¹q¶l¦Ü¡J
     * [365]majordomo@tlali.iztacala.unam.mx
       
   °T®§ªº¥¿¤å¥u¥i¦³¤@¦æ
   
   inscripcion pgsql-ayuda
   
28. ¤å¥ó©M°Ñ¦Ò®Ñ

28.1 ¥Î¤á«ü¤Þ©M»¡©ú®Ñ

   PostgreSQL µo¦æª©¥»¤¤¤w¥]¬A¥H¤U¦U¶µªº postscript¡BHTML ®æ¦¡ ©M unix
   man-pages¡C¥¦­Ì¦b /usr/doc/postgresql* ¥Ø¿ý¤¤¡C¦pªG§A¯à¤Wºô¡A §A¥i¦b¥H
   ¤U¦a¤è§ä¨ì¤U¦C¤å¥ó¡J [366]http://www.postgresql.org/docs
   
     * "Installation Guide"
     * "User Guide" for PostgreSQL
     * "Implementation Guide" ¸Ô²Ó»¡©ú PostgreSQL ¸ê®Æ®wªº¤º³¡¹B§@
     * ½u¤W»¡©ú®Ñ
     * HTML ®æ¦¡ªº½u¤W»¡©ú®Ñ
     * Postscript ®æ¦¡ªº½u¤W»¡©ú®Ñ¡A¥Î¥H¦C¦L
       
28.2 ½u¤W¤å¥ó

     * ¤º«Ø¸ê®Æ«¬ºA©M¹Bºâ¤¸ªº¦W³æ©M¸Ñ»¡
       
A ¬O§_ PSQL «ü¥Oªº¤@³¡¤À

     * ¤ä´©ªº SQL ÃöÁä¦r¦W³æ
       
¦b·½µ{¦¡ /tools ¥Ø¿ý¤¤¦³¤@­Ó©R¥O½Z (script)

     * ¤ä´©ªº¥y»y¦W³æ
       
¨Ï¥Î psql \h «ü¥O

     * PostgreSQL ªº°ò¥»ªºÃöÁp¦¡¸ê®Æ®w·§©À¡]¹ê¬I¤èªk¡^©M¼Æ­Ó½u¤W¨Ò¤l¡]¬d¸ß
       ¡^
       
¬Ý src/test ¤¤ªº regression ´ú¸Õ¡A½Ð°Ñ¾\ <ref name="¨Ò¤l RPM"
id="Examples RPM">¡C§A·|§ä¨ì regress/sql ©M suite/*.sql ¥Ø¿ý¡C

     * PostgreSQL «ü¾É
       
SQL «ü¾É½Z¥ó¦b src/tutorial ¥Ø¿ý¤¤

       ¤]½Ð°Ñ¾\¥»¤å¥óªþ¿ý¤A [367]ªþ¿ý¤A ªº¡§ªì¾ÇªÌ SQL «ü¾É¡¨¡C
       
28.3 ¦³¥Îªº°Ñ¦Ò®Ñ

     * "Understanding the New SQL: A Complete Guide" - Jim Melton ©M Alan
       R.Simon µÛ
       
Morgan Kaufman Publisher ¬O¨ä¤¤¤@¥»³Ì¦nªº SQL ®Ñ¡C³o¥»®Ñ¥H SQL92 ¬°·Ç¡C

     * "A Guide to THE SQL STANDARD" - C.J.Date µÛ
       

Addison-Wesley Publishing company ¤]¬O¤@¥»¦n®Ñ¡C¦³Ãö SQL ªº¦W§@¡C

     * SQL - The Standard Handbook, ¤@¤E¤E¤G¦~¤Q¤@¤ë
       
Stephen Cannan ©M 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
       
³o¥»¬O¸ê®Æ®wºÞ²z¨t²Îªº¸t¸g¡C³o¥»®Ñ¸Ô²Ó»¡©ú¥¿³W¤Æ (normalization)¡BSQL¡B«ì´_
(recovery)¡B¨Ã¦æ©Ê (concurrency)¡B«O¦w¡B¾ã¦X©Ê (integrity)¡B
¹ï­ì¥»ªºÃöÁp¼Ò¦¡ªº©µ¦ù¡B²{¤µªº¸ÜÃD¦p¥D±q¨t²Î©Mª«¥ó¾É¦V¼Ò¦¡¡C
¤]¥]¬A¤j¶q°Ñ¦Ò¸ê®Æ¥H¨Ñ²`¤J¬ã¨s¡C¦V¤j³¡¤À¥Î¤á±ÀÂË¡C

     * Stefan Stanczyk, "Theory and Practice of Relational Databases",
       UCL Press Ltd, 1990, ISBN 1-857-28232-9
       
³o¥»®Ñ¸Ô²Ó»¡©úÃöÁp¦¡¸ê®Æ®w¡BÃö«Y¥N¼Æ (relational algebra)¡BÃö«Yºtºâ (calculus)
©M¥¿³W¤Æªº²z½×¡C¦ý¥¦¤£¥]§t²{¹ê¥@¬Éªº°ÝÃD©M¸û½ÆÂøªº¨Ò¤l¡C¦V¤j³¡¤À¥Î¤á±ÀÂË¡C

     * "The Practical SQL Handbook" ²Ä¤Tª©¡A Addison Wesley Developers
       Press ISBN 0-201-44787-8
       
¦V¤j³¡¤À¥Î¤á±ÀÂË¡C

     * Michael Stonebraker, "Readings in Database Systems", Morgan
       Kaufmann, 1988, ISBN 0-934613-65-6
       
³o¬O¹L¥h¼Æ¦~¦³Ãö¸ê®Æ®wªº½×¤å¶°¡C¥¦¤£¬Oµ¹¤@¯ë¥ÎªÌ¬Ý¡A¦Ó¬O¶i¶¥ªº¾Ç¥Í¡]¬ã¨s¥Í¡^
©Î¸ê®Æ®w¶}µo¤H­û¡C

     * C.J.Date, "Relational Database - Selected Readings",
       Addison-Wesley, 1986, ISBN 0-201-14196-5
       
³o¬O¹L¥h¼Æ¦~¦³Ãö¸ê®Æ®wªº½×¤å¶°¡C¥¦¤£¬Oµ¹¤@¯ë¥ÎªÌ¬Ý¡A¦Ó¬O¶i¶¥ªº¾Ç¥Í¡]¬ã¨s¥Í¡^
©Î¸ê®Æ®w¶}µo¤H­û¡C

     * Nick Ryan ©M Dan Smith, "Database Systems Engineering",
       International Thomson Computer Press, 1995, ISBN 1-85032-115-9
       
³o¥»®Ñ²`¤J»¡©ú¦s¨ú¤èªk©MÀx¦s§Þ¦Ò¡C

     * Bipin C. Desai, "An introduction to Database Systems", West
       Publishing Co., 1990, ISBN 0-314-66771-7
       
¥¦¤£¬Oµ¹¤@¯ë¥ÎªÌ¬Ý¡A¦Ó¬O¶i¶¥ªº¾Ç¥Í¡]¬ã¨s¥Í¡^©Î¸ê®Æ®w¶}µo¤H­û¡C

     * 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
       
»¡©ú«Ø¥ß¸g¥Ñ repository metamodels ªº¥D±q¸ê®Æ®wÀ³¥Îµ{¦¡ªº­n¨D©M ANSI
¼Ð·Ç SQL 1993 ªºÀ³¥Î¡C

   ÁÙ¦³¼Æ¥H¦Ê­p¦³Ãö SQL ªº®Ñ¡I¨ì®Ñ©±¬Ý¬Ý§a¡C
   
28.4 ANSI/ISO SQL ³W®æ¤å¥ó¡XSQL 1992, SQL 1998

   ANSI/ISO SQL ³W®æ¤å¥ó¥i¦b¤U¦Cºô¯¸§ä¨ì¡J
     * [368]http://www.naiua.org/std-orgs.html
     * [369]http://www.ansi.org/docs ´w°ÊÀÉ®× cat_c.html ¤Î´M§ä¡§Database
       SQL¡¨¡C
     * SQL92 ¼Ð·Ç [370]http://www.jcc.com ´w°ÊÀÉ®× sql_stnd.html¡C
     * ANSI/ISO SQL ³W®æ
       [371]http://www.contrib.andrew.cmu.edu/~shadow/sql.html §A·|¦b¦¹§ä
       ¨ì SQL ªº°Ñ¦Ò¸ê®Æ¡C
       
28.5 ANSI/ISO SQL 1992 ªº»yªk

   ½Ð°Ñ¾\¥»¤å¥óªºªþ¿ý¥Ò [372]ªþ¿ý¥Ò
   
28.6 ANSI/ISO SQL 1998 ªº»yªk

   SQL 1998 (SQL 3) ³W®æ¤´¦b¶}µo¤¤¡C°Ñ¬Ý¥»¤å¥óªº¡§¹q¤l³~®|¨ú±o SQL3 ¯ó®×¡¨
   [373]SQL 1998
   
28.7 ªì¾ÇªÌ SQL ¾É¤Þ

   °Ñ¬Ý¥»¤åªþ¿ý¤A [374]Appendix B
   
28.8 SQL92 ªº®ÉºA©µ¦ù (Temporal Extension)

     * SQL92 ªº®ÉºA©µ¦ùªº¤å¥ó [375]ftp://FTP.cs.arizona.edu/tsql/tsql2/
     * Temporal SQL-3 ³W®æ [376]ftp://FTP.cs.arizona.edu/tsql/tsql2/sql3/
       
   ³o¥Ø¿ý¤¤¥]¬A¤@­Ó SQL-92 »y¨¥³W®æªº®ÉºA©µ¦ù¡C³oºØ·s»y¨¥³Q¦W¬° TSQL2¡C
   
   ³o¸Ìªº»y¨¥³W®æ¬O³o»y¨¥ªº³Ì²×ª©¥»¡C
   
   ¥iª½±µÁpµ¸ TSQL2 ³]­p©e­û·|ªº¥D®u¡JRichard T.Snodgrass, Department of
   Computer Science, University of Arizona, Tucson, AZ 85721,
     * [377]rts@cs.arizona.edu
       
   TSQL2 Language Design Committee ªº¹q¶l¦a§}©M¤J·|¸Ô±¡¥i¦b»y¨¥³W®æ³Ì«áªº
   ¤@³¹§ä¨ì¡C
   
   ³o¥Ø¿ý¤¤ªº¤º®e¦p¤U¡C
   
   spec.dvi,.ps TSQL2 »y¨¥³W®æ¡A¤@¤E¤E¥|¦~¤E¤ë¥Xª©
   
   bookspec.ps TSQL2 »y¨¥³W®æ¡A¤º®e¦p¦b TSQL2 ªº®Ñ¯ë¡A¤@¤E¤E¤­¦~¤Q¤ë ¥Xª©
   ¡]½Ð°Ñ¾\¤U¤å¡^
   
   sql3 ´£¥æµ¹ ANSI ©M ISO SQL3 Äw©e·|ªº­×­q«Øij
   
   ©M»y¨¥³W®æ¤@°_¡A³o¸ÌÁÙ¦¬¶°¤F¤@¨Ç¦³Ãö³]­p¤Wªº¨M©wªºµû½×¡B´£¨Ñ¨Ò¤l¡B ©M¬ã
   ¨s¦p¦ó¹ê½î³o»y¨¥¡C³o¨Çµû½×­ì¥»¬Oµ¹ TSQL2 Language Design Committee ªº«Ø
   ij¡C¥¦­Ì²{¦b¦³¥t¤@­Ó¥Î³B¡J´£¨Ñ¦³Ãö TSQL2 ºc³yªº¨Ò¤l¡B ±À°Ê³]­p®É§@¥Xªº
   ¤j¶q¨M©w¡B¤ñ¸û TSQL2 ©M¹L¥h¤Q¤­¦~¦³¤H´£Ä³¹Lªº¤j¶q»y¨¥¡C ¥²¶·±j½Õ¡A½Ð¨Ç
   µû½×¥Ø«e¤£¬O TSQL2 »y¨¥³W®æªº¤@³¡¤À¡A¦Ó¬O¹ï¥¦ªº¸É¥R©Mµo®i¡C ³o»y¨¥³W®æ
   ¤w¬O TSQL2 ªº³Ì²×¨M©w¡C
   
   ³o¨Çµû½×¡A¥[¤W»y¨¥³W®æ¡B¼Æ­Ó¯Á¤Þ©M¨ä¥L¤ä´©§÷®Æ¡A¤w¸g¶°µ²¦¨®Ñ¡J
   
   Snodgrass, R.T., editor, The TSQL2 Temporal Query Language, Kluwer
   Academic Publishers, 1995, 674+xxiv ­¶¡C
   
   ®Ñ¤¤¦³¤@­Ó¸`¿ý¤Fªºµû»ù¡A§¹¾ãªºµû»ù¦b¦¹¥Ø¿ý¤¤ªº eval.ps ´£¨Ñ¡C
   
   tl2tsql2.pl ÀɬO¤@­Ó§âÀò±µ¨üªº®ÉºAÅÞ¿è (temporal logic) ½Ķ¬° TSQL2 ªº
   prolog µ{¦¡¡C³oµ{¦¡¥Ñ Michael Boehlen ¼g¦¨¡C
     * [378]boehlen@iesd.auc.dk
       
   ¦U¦ì¥i±µÄ²¥L¥H¨ú±o¤@¥÷¸ÑÄÀ³o½Ķ¹Lµ{ªº½×¤å¡C³o¬O³oµ{¦¡ªºÂª©¥»¡C·sª©¥»
   ¦b
     * [379]http://www.cs.auc.dk/general/DBS/tdb/TimeCenter/Software
       
   (the TimeDB and Tiger systems).
   
28.9 ²Ä¹s³¡¤À¡X¨ú±o ISO/ANSI SQL ¤å¥ó

   ³o¤å³¹»¡©ú¦p¦ó¡]¦Xªk¦a¡^¨ú±o¤@¥÷ SQL-92 ¼Ð·Ç©M«ç¼Ë¨ú±o¤@¥÷¡§²{®Éªº
   ¡¨SQL3 ¯ó®×¡C
   
   ³o¼Ð·Çª©Åv©Ò¦³¡A ANSI ¼Ð·Çªº«ù¦³¤H¬° ANSI¡AISO ¼Ð·Çªº«ù¦³¤H¬° ISO¡C
   
   ²{®É¦³¨â¡]2¡^­Ó SQL ¼Ð·Ç¡A¤À§O¥Ñ ANSI ©M ISO ¥Xª©¡C³o¨â¥÷¼Ð·Ç¨C­Ó¦r³£¤@
   ¼Ò¤@¼Ë¡A °£¤F¤@¨Ç¤p¸`¡A¦p¤å¥ó¼ÐÃD¡B­¶­º¡Bµu¥y¡§International Standard¡¨
   ©M¡§American Standard¡¨¤§Ãþ¡C
   
   ÁʶR SQL-92 ¼Ð·Ç
   
   The ISO standard, ISO/IEC 9075:1992, Information Technology - Database
   Languages - SQL¡A¥Ø«e¡]¤@¤E¤E¤T¦~¤T¤ë¡^¦b ANSI ¦³¦s³f¤Î¥i±o¨ì¡J
   
     American National Standards Institute
     1430 Broadway
     New York, NY 10018 (USA)
     Phone (sales): +1.212.642.4900

   »ù¿ú US$230.00¡CANSI ª©¡AANSI X3.135-1992, American National Standard
   for Information Systems - Database Language SQL¡A¥Ø«e¨ÃµL¦s³f¡A ¦ýÀ³¸Ó
   ¥i¦b¤@¤E¤E¤T¦~¤T¤ë¤U¦¯¦Ü¤­¤ë¤W¦¯¶¡±o¨ì¡C¦ô­p¥¦ªº»ù¿ú¬O US$225.00¡C
   
   ¦pªG§A±q ANSI ÁʶR¥ô¦ó¤@¥÷¤å¥ó¡A§A»Ý­nµ¹ 7% ªº¤âÄò¶O¡]§Y¤j¬ù US$9.10¡^
   ¡C®ü¥~¶l±HªÖ©w·|§ó¶Q¡CANSI ­n¨D©Ò¦³³æ¾Ú³£¦ñÀH¤@¥÷¤½¥q­q³æªº½Æ¦L¥»¡A ©Î
   ªÌ§A¥i¥H¬ü¤¸±H¤@±i¬ü°êªº»È¦æªº¤ä²¼¡A¥L­Ì·|¦bµ²¤F½ã«á±Hµ¹§A¡C ¡]¨Ò¥~±¡ªp
   ¡J¦pªG§Aªº²Õ´¬O ANSI ªº¤½¥q·|­û (corporate member)¡AANSI ·|§â¤å¥ó±Hµ¹
   §A¦Ó¦V¤½¥q¦¬¿ú¡C¡^
   
   ¦b¬ü°ê°ê¥~¡AISO ¼Ð·Ç¤]¥i±q§@¬° ISO (International Organization for
   Standardization) ©Î IEC (International Electrotechnical Commission) ·|
   ­ûªº¥»¤g°êÀç¾÷ºc¡]°ê®aªº¼Ð·Ç²Õ´¡^ÁʶR¡C°êÀç¾÷ºc¤Î¨ä¦a§}ªº¦W³æ¥i±q
   ANSI ©Î¨ä¥L°êÀç¾÷ºc¨ú±o¡C¥¦­Ì¤]¥i±q ISO ±o¨ì¡J
   
     International Organization for Standardization
     Central Secretariat
     1, rue de Varembi
     CH-1211 Genhve 20
     Switzerland

   ¦pªG§A·Q¥H§ó¤è«K§Ö±¶ªº¤èªk­qÁʳo¼Ð·Ç¡A§A»Ý­nªþ¥X¥N»ù¡C§A¥i±q¥H¤U²Õ´¥H
   US$308.00 ­qÁÊ ISO/IEC 9075:1992, Information Technology - Database
   Languages - SQL¡J
   
     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

   §Ú¤£ª¾¹D³o¬O§_¥]¬A³f¹B¶O¡A¦ý§Ú¦ô­p¡]°_½X¡^°ê»Ú³f¹B·|ÃB¥~¦¬¶O¡C ¥L­Ì·|»á
   ¬°§Ö±¶¦a§â¤å¥ó±Hµ¹§A¡A¬Æ¦Ü·|±µ¨ü¡§¥D­nªº«H¥Î¥d¡¨¡CGlobal ÁÙ¨S¦³ ANSI ª©
   ¡A©Î¥L­Ì¨S¦³»ù¿ú©Î¦ô­p®É¶¡¡]¦ý§Ú¹w­p¥¦·|¦b ANSI ¥Xª©«á¼Æ¶g¤§¤º¥X²{¡A»ù
   ¿ú±µªñ US$300.00¡^¡C
   
   ÁʶR¤@¥÷ SQL3 ¯ó®× (Working Draft)
   
   §A¥i±q ANSI X3 Secretariat, CBEMA (Computer and Business Equipment
   Manufacturers Association) ÁʶR¤@¥÷ SQL3 ¯ó®×ªº½Æ¦L¥»¡C¥L­Ì·N¹Ï½T«O¯à´£
   ¨Ñ¡§³Ìªñ¡¨ª©¥»ªº SQL3 ¯ó®×¡A¨Ã¥H US$60.00 ¦Ü US$65.00 ¥X°â¡C§A¥i¥H¥H¤U
   ³~®|±µÄ² CBEMA¡C
   
     CBEMA, X3 Secretariat
     Attn: Lynn Barra
     1250 Eye St.
     Suite 200
     Washington, DC 20005 (USA)

   Lynn Barra ¤]¥i¥H¹q¸Ü¸¹½X +1.202.626.5738 ±µÄ²¥H­n¨D¤@¥÷¡A¤£¹L¶l±H¦ü¥G
   ¸û¦³Â§»ª¡C
   
   ¹q¤l®|¨ú±o SQL3 ¯ó®×
   
   ³Ì·sª©¥»¡]¥H¼g¥»¤å®É¬°·Ç¡^ªº SQL3¡]ANSI ©M ISO¡^¯ó®×¡]©M©Ò¦³ªþ¥ó¡^ ¥i¦b
   ¥H¤U¯¸¥x¥H¡§anonymous ftp¡¨©Î¡§ftpmail¡¨±o¨ì¡J
   
     gatekeeper.dec.com

  ¦b

     /pub/standards/sql/

   ³o¥Ø¿ý¤¤¦³¦h­ÓÀɮסA¥]¬A PostScript ÀÉ©M¯Â¤å¦rÀÉ¡]®æ¦¡¤£«Ü¬üÆ[¡A ¦ý¥i¦b
   ¿Ã¹õ¤WµL¶·¯S§O³n¥ó¾\Ū¡^¡C
   
   ¤@¯ë¨Ó»¡¡A§A¥i§ä¨ìÃþ¦ü¦WºÙªºÀɮסJ
   
     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

   §¹¦¨·sª©¥»ªº¤å¥ó«á¡A¡§mar94¡¨·|§ïÅܨӻ¡©ú·sªº¥Xª©¤é´Á¡]¨Ò¦p¡§aug94¡¨¬O
   ¦ô­p¦b ¡§mar94¡¨¤§«áªºª©¥»¡^¡C
   
   ¥t¥~¡A¬°·ÓÅU¤£¯à±q FTP ¨ú±oÀɮצW³æªºÅªªÌ¡A§Ú­Ì¦b¥Ø¿ý¤¤©ñ¸m¤F¤@­Ó¦W¬°
   
     ls

   ªºÀɮסC³oÀɮס]¯«©_¡I¡^¥]¬A¤F¥Ø¿ý¤ºªºÀɮצW³æ¡C
   
   ±q Ftp ª½±µÀò±oÀÉ®×
   
   ³o¬O¨Ï¥Î FTP ªº¨Ò¤l¡C¥¦¯S§O»¡©ú¦p¦ó³s±µ¨ì gatekeeper.dec.com¡A ¨ì¹F©ñ¸m
   ³o¨ÇÀɮתº¥Ø¿ý¡A¤Î§âÀɮ׶ǰe¨ì§Aªº¹q¸£¡C­nª`·Nªºªº¹q¸£­n¦³¤Wºô¥\¯à¡C ñ
   ¤J¦WºÙ¬O¡¥ftp¡¦¡A±K½X«h¬O§Aªº¹q¶l¦a§}¡]§Y©Ò¿×¡¥anonymous ftp¡¦¡^¡C«ü¥O
   ¡¥type binary¡¦¬O¥Î¨Ó½T«O¦¬¨ìªºÀɮפ¤¨S¦³¦ì¤¸³QºI¥h¡C¡¥get¡¦¤@¦¸¨ú±o¤@
   ­ÓÀɮסC ¦b©R¥O½Z (script) ¤¤ªºª`¸Ñ·|¦b¨¤¬A¸¹¤º < §Y¬O¦p¦¹ >¡C
   
  % ftp gatekeeper.dec.com
  Connected to gatekeeper.dec.com.
  220- *** /etc/motd.ftp ***
       Gatekeeper.DEC.COM is an unsupported service of DEC Corporate Research.
       <¡Kµ¥¤@·|¡K>
  220 gatekeeper.dec.com FTP server (Version 5.83 Sat ... 1992) ready.
  Name (gatekeeper.dec.com:<§Aªºµn¤J¦WºÙ>): ftp  <anonymous ¤]¥i>
  331 Guest login ok, send ident as password.
  Password: <Áä¤J§Aªº¹q¶l¦a§}>
  230 Guest login ok, access restrictions apply.
  Remote system type is UNIX.  <¤°»ò¤]¨S©Ò¿×>
  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
  % <³oÀɮפw¦¨¬°§Aªº¹q¸£¤¤ªº x3h2-93-082.txt>

   ¨S¦³ ftp ¤ä´©ªº±¡ªp¤U¨ú±oÀÉ®×
   
   Digital Equipment Corporation ©M¼Æ¶¡¨ä¥L¤½¥q¬Û¦ü¡A´£¨Ñ ftp email ªA°È¡C
   ¥¦¥i¯à»Ý­n¼Æ¤Ñ¤~¦³¦^À³¡A¦ý¥¦¬°¤£¯àª½±µ¤Wºôªº¤H´£¨Ñ¤Fµ¥¦P ftp ªºªA°È¡C¦ø
   ªA¾¹ªº¦a§}¬°¡J
   
   ftpmail@decwrl.dec.com
   
   ¥H¤U©R¥O½Z·|¨ú±o³Ì·sª©¥»ªº SQL3 ¤å¥óªº PostScript ª©¡J
   
     reply joe.programmer@imaginary-corp.com
     connect gatekeeper.dec.com anonymous
     binary
     compress
     uuencode
     chdir /pub/standards/sql
     get x3h2-93-091.ps
     quit

   ²Ä¤@¥y«ü¥O§i¶D¦øªA¾¹­n§âÀɮ׶ǵ¹§A¡A§A»Ý­n§â
   ¡§joe.programmer@imaginary-corp.com¡¨´«¬°§Aªº¹q¶l¦a§}¡C³o¨Ò¤l¤¤ªºÀÉ®×
   x3h2-93-091.ps ·|¥H uuencode ¤Fªº compress Àɮ榡¡A¤À¦¨¤T¤Q¥|«Ê¹q¶l¦^ÂÐ
   ¡C ¦pªG§AªºÀô¹Ò¨S¦³´£¨Ñ­«²ÕÀɮתº¤u¨ã¡A§A»Ý­n¥Î¤U¦C©R¥O½Z¥H¯Â¤å¦r¼Ò¦¡¨ú
   ±oÀɮסJ
   
     reply joe.programmer@imaginary-corp.com
     connect gatekeeper.dec.com anonymous
     chdir /pub/standards/sql
     get x3h2-93-091.ps
     quit

   ¦ý½Ðª`·N¡A³o .ps Àɤj·§·|³Q¤À¬°¶W¹L¤C¤Q¥÷¨Ó¦^ÂСI
   
   ­n¨ú±o¥ô¦ó¤£¬O x3h2-93-091.ps ªºÀɮסA¥u»Ý§â¡§x3h2-93-091.ps¡¨ ´«¬°§A·Q
   ­nªºÀɮתº¦WºÙ¡C­n¨ú±o©Ò¦³Àɮתº¦W³æ¡A§â¡§x3h2-93-091.ps¡¨´«¬° ¡§dir¡¨
   ¡C
   
28.10 ²Ä¤@³¡¤À¡XISO/ANSI SQL ·í«e±¡ªp

   ³o³¹¬O¦³Ãö SQL ¼Ð·Ç©M¨ä·í«e±¡ªpªº¸ê®Æ¨Ó·½¡C
   
   ·í«e±¡ªp¡J
   
   ¥Ø«e¥¿¦b¶i¦æ¶}µo¤u§@¡A¥H§ï¶i SQL ¬°¬°­pºâ¤W§¹¾ãªº»y¨¥ (computationally
   complete language)¡A¥H¥i¥Î©ó«ù¤[¡B½ÆÂøªºª«¥ó¡C³o¥]¬A¡J¤@¯ë¤Æ©M±Mªù¤Æµ¥
   ¯Å (generalization and specialization hierarchies)¡B¦h¯ÅÄ~©Ó (multiple
   inheritance)¡B¦Û­q¸ê®Æ§ÎºA¡B¿Eµo (triggers) ©M§PÂ_ (assertions)¡Bª¾ÃÑ®w
   ¨t²Î¤ä´© (support for knowledge based systems)¡B°j»¼¬d¸ß¦¡ (recursive
   query expression) ©Mªþ¥[¸ê®ÆºÞ²z¤u¨ã¡C¥¦¤]¥]¬A©â¶H¸ê®Æ«¬ºA (ADTs)¡Bª«¥ó
   ÃѧO¦r (object identifiers)¡B¤èªk (methods)¡BÄ~©Ó (inheritance)¡B¦h«¬
   (polymorphism)¡B¥]¸Ë (encapsulation)¡B ©M©Ò¦³¨ä¥L»Pª«¥ó¸ê®ÆºÞ²z¦³Ãöªº¥\
   ¯àªº³W®æ¡C
   
   ¤@¤E¤E¤»¦~¬î©u¡ASQL3 ¼Æ­Ó³¡¤À¶i¦æ¤F¤@¦¸ ISO CD ¤£°O¦W§ë²¼¡C³o¼Æ³¡¤À¬O
   SQL/Framework¡BSQL/Foundation ©M SQL/Bindings¡C¤@¦p©Ò®Æ¡A §ë²¼µ²ªG¬O¦b
   ¦¬¨ì¬ù¤E¦Ê­Óµû½×¤U¾D§_¨M¡C¤@¤ë¤U¦¯Á|¦æ¤F¤@¦¸ ISO DBL ½s¿è·|ij (editing
   meeting)¡A³B²z¤F¤j¶q¦bµû½×¤¤´£¤Î©Î¥t¥~´£¥æªº°ÝÃD¸Ñ¨M¤èªk¡C ¥Ñ©ó¸Ó¦¸·|ij
   ¥¼¯à³B²z©Ò¦³µû½×¡A·|ij±N·|©µªø¡C ½s¿è·|ij©w©ó¤@¤E¤E¤C¦~¤C¤ë¦b­Û´°§¹¦¨¡C
   
   ¾Ú¦ô­p¡A¦b¤C¤ëªº½s¿è·|ij¤§«á¡A·|¦A´£¥X¹ï¦³Ãö¨º¨Ç³¡¤Àªº SQL ¶i¦æ³Ì«áªº
   CD §ë²¼¡C³Ì«á CD ¹Lµ{·|ªá¤j¬ù¤»­Ó¤ë¡A¤§«á·|¦³ DBL ½s¿è·|ij¡BDIS §ë²¼©M
   §Ö±¶ªº IS §ë²¼¡C
   
   ISO ªºµ{§Ç¦b SQL/92 ¤§«á§ïÅܤF¡A©Ò¥H SQL ©e­û·|¤´¦bºN¯Á³o¹Lµ{ªº¸Ô±¡¡C
   
   ¦pªG¨Æ¨Æ¶¶§Q¡ASQL3 ªº³o¨Ç³¡¤À·|¦b 1998 ¦~«á´Á¦¨¬°©x¤è ISO/IEC ¼Ð·Ç¡A¤£
   ¹L®É¶¡«D±`ºò­¢¡C
   
   ¦b¤@¤E¤E¤T¦~¡AANSI ©M ISO ¶}µo©e­û·|¨M©w§â¤§«áªº SQL µo®i¤À¬°¦h³¡¤Àªº¼Ð
   ·Ç¡C³o¨Ç³¡¤À¥]¬A¡J
   
     * 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.
       
   ¦b¬ü°ê¡ASQL3 ªº¾ãÅé¦P®É·í§@ ANSI ¥»¤g (Domestic, "D") ±M®×©M ISO ±M®×³B
   ²z¡C¥Ø«e¦ô­p§¹¦¨®É¶¡¬O¤@¤E¤E¤E¦~¡C
   
   SQL/CLI ©M SQL/PSM ²{¥¿¥H³Ì°ª³t«×³B²z¡A¥H§@¬° SQL-92 ªº­×­q¡C¦b¬ü°ê¡A
   ¥¦­Ì¥u³Q·í§@°ê»Ú (International, "I") ±M®×³B²z¡C SQL/CLI ¦b¤@¤E¤E¤­¦~§¹
   ¦¨¤F¡CSQL/PSM À³¸Ó·|¦b 1996 ¦~¥¼¬q§¹¦¨¡C
   
   °£¤F SQL3 ¥~¡AÁÙ¦³¤@¨Çªþ¥[ªº­p¹º¡J
   
     * SQL/MM An ongoing effort to define standard multi-media packages
       using the SQL3 ADT capabilities.
     * Remote Data Access (RDA)
       
   ¼Ð·Ç©e­û·|©M¹Lµ{ (Standards Committee and Process)
   
   ¨Æ¹ê¤W¡A¥@¤W¦³¦h­Ó SQL ¼Ð·Ç©e­û·|¡CISO ¦³¤@³¡¤À¬O¤@­Ó°ê»Ú SQL ¼Ð·Ç¤p²Õ
   ¡C¦h­Ó°ê®a³£¦³¥H SQL ¬°­«ÂIªº©e­û·|¡C³o¨Ç°ê®a¡]³q±`¡^¬£¥X¥Nªí°Ñ»P
   ISO/IEC JTC1/SC 21/WG3 DBL ·|ij¡C¥D°Ê°Ñ»P ISO SQL ¼Ð·Ç¨î©wªº°ê®a¬O¡J
   
     * ¿D¬w
     * ¤Ú¦è
     * ¥[®³¤j
     * ªk°ê
     * ¼w°ê
     * ¤é¥»
     * Áú°ê
     * ²üÄõ
     * ­^°ê
     * ¬ü°ê
       
   NIST ½T»{ (NIST Validation)
   
   ¦b¬ü°ê¡ASQL ¹ê½îªº½T»{¤u§@¥Ñ National Institute of Standards and
   Training (NIST) ¶i¦æ¡CNIST ¥Ø«e¦³¤@®M¤Jªù¯Å (entry level) SQL-92 ªº´ú¸Õ
   ®M¥ó¡CNIST ½T»{­n¨Dªº¸Ô±¡³Q©w¸q¬°¤@¶µ Federal Information Processing
   Standard (FIPS)¡C¥Ø«e¹ï SQL ªº­n¨D©w¸q©ó FIPS 127-2¡C¥»¤å¥óªº
   Postscript ©M¤å¦r¼Ò¦¡¥i±q NIST ¨ú±o¡C¥Ø«e³q¹L SQL ½T»{ªº²£«~¦W³æ¤]¥i¦b
   NIST ¨ú±o¡C
   
   ¼Ð·Ç SQL ¥Zª«©M¤å¥ó (Standard SQL Publications and Articles)
   
   SQL ¼Ð·Ç¦³¨â­Óª©¥»¡C¨â­Ó³£¥i±q ANSI ¨ú±o¡J
   
     * ISO/IEC 9075:1992, "Information Technology --- Database Languages
       --- SQL"
     * ANSI X3.135-1992, "Database Language SQL"
       
   °£«Ê­±©M¹ï¨ä¥L¼Ð·Çªº°Ñ¦Ò¥~¡ASQL ¼Ð·Çªº¨â­Óª©¥»§¹¥þ¤@¼Ë¡C ¨â­Óª©¥»³£¥i±q
   ¥H¤U¦a¤è¨ú±o¡J
   
     American National Standards Institute
     1430 Broadway
     New York, NY 10018
     USA
     Phone (sales): +1.212.642.4900

   °£ SQL-92 ¼Ð·Ç¥~¡A²{¦bÁÙ¦³¤@¥÷§Þ³N¥¿»~ªí (Technical Corrigendum) ¡]°£¿ù
   ¡^¡J
   
   * Technical Corrigendum 1:1994 to ISO/IEC 9075:1992

   TC 1 À³¸Ó¥i±q ANSI ¨ú±o¡CTC 1 ¥u¦³ ISO ª©¥»¡X¡X¥¦¾A¥Î©ó ISO ©M ANSI ª©
   ¥»ªº SQL-92¡C
   
   °£¼Ð·Ç¥~¡A¤]¦³Ãö©ó 1992 SQL ¼Ð·Çªº®Ñ¡C³o¨Ç®Ñ´£¨Ñ¤@­Ó¤ñ¹ê»Ú¼Ð·Ç©ö²z¸Ñªº
   ´y­z¡C
   
   ¦³Ãöªº¼Ð·Ç
   
   SQL ªÀ¸s¤]¹ï¦h­Ó¨ä¥L¼Ð·Ç¦³¿³½ì¡C³o¸`¥]¬A¤@¨Ç¦³Ãö³o¨Ç§V¤Oªº«ü°w¡C ·í§ó¦h
   ¸ê®Æ¦bºô¤W¥X²{«á¡A³o­Ó¦W³æ¤]·|§óªø¡C
   
     * SQL Environments (FIPS 193)
     * Next Generation Repository Systems (X3H4) - ¤@¥÷©IÆ~°Ñ»P
       "Developing Standards for the Next Generation Repository Systems"
       ªº·s»D½Z¡C
       
28.11 ²Ä¤G³¡¤À¡XISO/ANSI SQL °òª÷ (ISO/ANSI SQL Foundation)

   SQL3 §V¤Oªº¤@­Ó­«­n³¡¤À¦b SQL °òª÷¤å¥ó¤¤¡J
   
     * °ò¥»ªº SQL/PSM ¯à¤O¡]¨Ó¦Û SQL/PSM-92¡^
     * ·sªº¸ê®Æ«¬ºA
     * ¿Eµo (Triggers)
     * ¤lªí®æ (Subtables)
     * ©â¹³¸ê®Æ«¬ºA (Abstract Data Types, ADT)
     * ª«¥ó¾É¦V¯à¤O
       
   ¹ïª«¥ó¾É¦V¯à¤O¦³¼Æ­Ó¥ý¨M­n¨D¡J
   
     * ©w¸q½ÆÂø¹B§@ªº¯à¤O
     * §â½ÆÂøªº¹B§@Àx¦s¦b¸ê®Æ®w¤¤
     * ©I¥s¥~³¡µ{§Ç¡A¦³¨Ç¤£¯à¥Î SQL °µ¨ìªº¹B§@¡A©Î»Ý­n©M¥~­±·¾³q
       
   ³o¨Ç¯à¤O¤w©w¸q¬° SQL/PSM ªº¤@³¡¤À
   
   ²{¦b¦³¤j¶q¤u§@©ó·Ò»s SQL-3 ª«¥ó¼Ò«¬¡A¨Ï¥¦©M ODMG ´£¥Xªºª«¥ó¼Ò«¬¬Ý»ô¡C³o
   §V¤O¦b X3H2 ©M ISO DBL ¤å³¹¤¤´y­z¹L¡J®e¯Ç SQL3 ©M ODMG¡C¦b SQL3/OQL
   Merger ³Ìªñªº§ó·sª©¤]¥i±o¨ì¡C
   
   SQL3 ®É¶¡ªí
   
   ¦³Ãö SQL3 ªº¤u§@¥¿¦b¶i¦æ¡A¦ý³Ì²×¼Ð·ÇÁÙ¦³«Ý¼Æ¦~«á¤~¥X²{¡C
   
     * °ê»Ú©Ê§ë²¼§â SQL3 °ò¦±q¯ó®×´£¤É¬°©e­û¯ó®× (Committee Draft, CD) ¦b
       ¤@¤E¤E¤»¤é¬î©u¶i¦æ¡C
     * ¦ô­p§ë²¼·|±a¨Ó¤j¶qµû½×
     * ±N·|»Ý­n²Ä¤G¦¸ CD §ë²¼
     * Draft International Standard §ë²¼¦h¥b·|¦b 1998 ¦~¤¤¶i¦æ
     * °ê»Ú¼Ð·Ç¥i¦b¤@¤E¤E¤E¦~¤¤§¹¦¨
       
   ANSI ª©ªº¼Ð·Çªº½s±Æ¤]®t¤£¦h¡C
   
28.12 ²Ä¤T³¡¤À¡XISO/ANSI SQL ©I¥s¯Å¤¶­± (Call Level Interface)

   SQL/CLI ¬O¤@ºØ¹ï SQL ¸ê®Æ®wªº©I¥s¯Å¤¶­±¡C¥¦³]­p¬°¤ä´©¥]»q
   (shrink-wrapped) ªºÀ³¥Îµ{¦¡¡CCLI ­ì¥»¥Ñ SQL Access Group (SAG) ªº¤@­Ó¤p
   ²Õ©e­û·|³Ð³y¡C SAG/CLI ³W®æ¦b 1992 ¦~¥H·L³n Open DataBase Connectivity
   (ODBC) ³W®æ¤½§G¡C¤@¤E¤E¤T¦~¡A SAG §â CLI ´£¥æ¨ì ANSI ©M ISO SQL ©e­û·|
   ¤¤¡C(SQL Access Group ²{¤wµ²¦X¨ì X/Open consortium ¤¤¡C)
   
   SQL/CLI ´£¨Ñ¤F¥H¤U¨Æ¶µªº°ê»Ú¼Ð·Ç¡J
   
     * ¿W¥ß©ó¹ê½î¤èªkªº CLI ¨Ó¦s¨ú SQL ¸ê®Æ®w
     * ¥D±q¤u¨ã (Client-server tools) ¥i»´©öÄy°ÊºAÃìµ²¨ç¦¡®w¦s¨ú¸ê®Æ®w
     * ¤ä´©¤Î¹ªÀyÂ×´Iªº¥D±q¤u¨ã
       
   SQL/CLI ®É¶¡ªí
   
   ¹ï¼Ð·Çªº¶}µo¹Lµ{¡ASQL/CLI ¥¿¥HÅå¤Hªº³t«×³B²z¤¤¡C
   
     * SQL/CLI ¬O¹ï 1992 SQL ¼Ð·Ç¡]SQL-92¡^ªº¸É¿ò
     * ¤@¤E¤E¤­¦~§¹¦¨¡A¦¨¬° ISO ¼Ð·Ç
     * ISO/IEC 9075-3:1995 Information technology -- Database languages
       -- SQL -- Part 3: Call-Level Interface (SQL/CLI)
     * ¥Ø«e SQL/CLI ¥¿§V¤O¥[¤W SQL3 ¥\¯à
       
28.13 ²Ä¥|³¡¤À¡X ISO/ANSI SQL «ù¤[Àx¦s¼Ò²Õ (Persistent Stored Modules)

   SQL/PSM Äy¥H¤U¥\¯àÂX¥R SQL¡J
   
     * µ{§Ç»y¨¥ (Procedural language) ©µ¦ù
     * ½Æ¥y (Multi-statement) ©MÀx¦sµ{§Ç
     * ¥~³¡¨ç¼Æ»Pµ{§Ç©I¥s (External function and procedure calls)
       
   °£§@¬°¦³»ù­ÈªºÀ³¥Îµ{¦¡¶}µo¤u¨ã¡ASQL/PSM ¬° SQL3 ´£¨Ñ¤Fª«¥ó¾É¦V¯à¤Oªº°ò
   ¦¤ä´©¡C
   
   ½Æ¥y©M¤º¦sµ{§Ç
   
   ½Æ¥y©M¤º¦sµ{§Ç¬°¥D±qÀô¹Ò´£¨Ñ¦hºØ¦n³B¡J
   
     * ªí²{¡X¥Ñ©ó¤º¦sµ{§Ç¥i°õ¦æ¦h¥y SQL »y¥y¡A»P«È¤á¸gºôµ¸ªº·¾³q¥i´î¤Ö¡C
     * «O¦w¡X¥ÎªÌ¥i¥H¦³Åv§Q¸g¤º¦sµ{§Ç§ó·s¤@­Ó©Î¦h­Óªí®æ¡A¦ý¨SÅvª½±µ§ó·s¡C
     * ¤À¨Éµ{¦¡½X¡X¤£»Ý¨C­Ó¦s¨ú¸ê®Æ®w«È¤á¤u¨ã³£­«¼g©M­«¸Õ¤º¦sµ{§Çªºµ{¦¡½X
       ¡C
     * ±±¨î¡X¬°À³¥Îµ{¦¡ªº°õ¦æ´£¨Ñ³æ¤@ªº©w¸q©M±±¨î¡C
       
   µ{§Ç»y¨¥©µ¦ù
   
   µ{§Ç»y¨¥Äy¬y¦V±±¨î©M¨ä¥L½sµ{§Þ¥©¬° SQL ¥[¤W¶Ç²Îµ{¦¡»y¨¥ªº¥\¯à¡C
   
   ¬y¦V±±¨î»y¥y
   
     * If-then-else
     * °j°éµ²ºc (Looping constructs)
     * ¨Ò¥~³B²z (Exception handling)
     * Case »y¥y
     * Begin-End °Ï¶ô
       
   µ{§Ç»y¨¥©µ¦ùÁÙ¥]¬A¨ä¥L½sµ{§Þ¥©¡J
   
     * Åܼƫŧi
     * Set »y¥y¡A¥Î©ó½á­È (assignment)
     * ¨ú±o¦æµ{ (process) ©Mª¬ºAªº¸ê®Æ
       
   ¦¹¥~¡A©Ò¦³¶Ç²Î SQL »y¨¥³£¥i¥]§t¦b¦h¥yªºµ{§Ç¤¤¡C
   
   ¥~³¡¨ç¼Æ»Pµ{§Ç©I¥s
   
   ¤@­Ó¸g±`¦b¤j¶q¸ê®Æ®w²£«~ªº wish lists ¤¤¥X²{¡A¦Ó¦³³¡¤À¹ê½î¨ìªº¯S¦â¡A ¬O
   ©I¥s¥ÎªÌ©Ò¼g¡A¦b¸ê®Æ®w³n¥ó¥~ªºµ{§Ç¡C
   
     * ®e³\¬Y­Ó¹q¸£©ÎÀ³¥Îµ{¦¡¥[¤W¦Û¤vªº¸ê®Æ®w¨ç¼Æ
     * ¥i¦b¾ã­Ó¸ê®Æ®wÀ³¥Îµ{¦¡¨Ï¥Î
       
   ³o¥\¯àªº¦n³B¬O¥¦Åý¸ê®Æ®w¡]¦]¦¹¥]¬A¸ê®Æ®wÀ³¥Îµ{¦¡¡^¨Ï¥ÎÂ×´Iªºµ{§Ç©M¨ç¼Æ
   ¡A Â×´I±o¤£¯à¥Ñ¤@­Ó¼Ð·Ç²Õ´©w¥X¡C
   
   SQL/PSM ®É¶¡ªí
   
   SQL/PSM µo®i¨³³t¡J
   
     * SQL/PSM ¬O SQL-92 ªº¸É¿ò
     * ¦³Ãö§â SQL/PSM ±q°ê»Ú¼Ð·Çªº¯ó®×Åܬ°°ê»Ú¼Ð·Çªº°ê»Ú§ë²¼¦b¤@¤E¤E¤»¦~¤@
       ¤ë§¹¦¨¡C
     * ¤@¤E¤E¤»¦~¤­¤ëªº½s¿è·|ij¥¼¯à¸Ñ¨M©Ò¦³µû½×
     * PSM ½s¿è·|ij¦w±Æ©ó¤@¤E¤E¤»¦~¤E¤ë¤T¤Q¤é¦Ü¤Q¤ë¥|¤é´Á¶¡­«¶}
     * ¦w±Æºò­¢¡A¦ý PSM ¦³¥i¯à¦b¤@¤E¤E¤»¦~¶¡¥Xª©
     * ©x¤è¥ô©R¬°¡J ISO/IEC DIS 9075-4:199? Information technology --
       Database languages -- SQL -- Part 4: SQL Persistent Stored Modules
       (SQL/PSM)
     * ²{¥¿¬° SQL3 ¥[¤W SQL/PSM ¤ä´©¤u§@¡C
       
28.14 ²Ä¤­³¡¤À¡X ISO/ANSI SQL/µ²¦X (Bindings)

   ¬°¤è«K°Ñ¦Ò¡Aµ{¦¡»y¨¥ªºµ²¦X³Q©â¥X¦¨¿W¥ßªº¤å¥ó¡C¥Ø«eªºª©¥»§Y¬O SQL-92 ªº
   °ÊºA©M´O¤Jµ²¦X (dynamic and embedded bindings) ªº¸`¿ý¡C
   
   µ{¦¡»y¨¥µ²¦X¤´¦³¤£¦Pªº°ÝÃD¦³«Ý¸Ñ¨M¡C
   
   ¹ï¶Ç²Îµ{¦¡»y¨¥¨Ó»¡¡A¸ê®Æ«¬ºA©M SQL-92 ªº¥i¥H¤¬¬Û¹ïÀ³¡C¤£¹L¡A SQL ª«¥ó©M
   µ{¦¡»y¨¥ÅܼƤ§¶¡ªº¹ïÀ³¥²¶·©w¸q¡C
   
   ¹ïª«¥ó¾É¦V»y¨¥¨Ó»¡¡A¥Ø«eªº SQL ¸ê®Æ«¬ºA¡BSQL ª«¥ó¼Ò«¬©Mª«¥ó¾É¦Vµ{¦¡»y¨¥
   ¤§¶¡ªº¹ïÀ³Ãö«Y¥²¶·©w¸q¡C
   
   ª«¥ó¼Ò«¬»Ý¦b¤½¶}³o¨Ç¤§«eí©w¤U¨Ó¡C
   
   »y¨¥µ²¦X§¹¦¨®É·|¦¨¬° SQL3 ªº¤@³¡¤À¡C
   
28.15 ²Ä¤»³¡¤À¡XISO/ANSI SQL XA ¤¶­±±Mªù¤Æ ¡]SQL/XA¡^

   ³o³W®æ·|¬°Á`¥æ©öºÞ²z­û (global Transaction Manager) ©M SQL ¸ê·½ºÞ²z­û
   (SQL Resource Manager) ¤§¶¡À³¥Îµ{¦¡¤¶­± (API) ´£¨Ñ¼Ð·Ç¡C¥¦·|®Ú¾Ú
   ISO/IEC 10026 ªº¤º®e¡A¡§¤À´²¥æ©ö³B²z (Distributed Transaction
   Processing¡^¡¨ ¼Ð·Ç¤Æ¨ç¼Æ©I¥s¡ASQL ¸ê·½ºÞ²z­û·|¥Î¥H¤ä´©¤À¤G¶¥¬qªº½T©w
   (two-phase commit)¡C°ò¦ªº¤å¥ó¬O¦Û¸g X/Open §å·Ç¦Ó¨Ó¦Û¤@¥÷ X/Open ¥Xª©
   ª«¡A¥¦²M·¡ªº«ü©ú xa_close, xa_commit, xa_complete, xa_end, xa_forget,
   xa_open, xa_prepare, xa_recover, xa_rollback ©M xa_start µ¥¦h­Ó¨ç¼Æ¡A¥H
   SQL ¸ê®Æ«¬ºAªº¿é¤J©M¿é¥X°Ñ¼Æªº»yªk¡C
   
   ISO ¥Ø«e¥¿¹Á¸ÕºÉ§Ö°l¤W (fast-tract) X/Open XA ³W®æ¡C ³o­Ó¹Lµ{­ì«Ê¤£°Ê±Ä
   ¥Î¤@­Ó¥Ø«eªº·~¬É³W®æ¡C¥H ISO SC21¡AJTC 1 µ¥¯Åªº XA ºÉ§Ö°l¤W§ë²¼¦b¤@¤E¤E
   ¤­¦~¥|¤ë¤G¤Q¤C¤é¶}©l¡A¤@¤E¤E¤­¦~¤Q¤ë¤G¤Q¤C¤éµ²§ô¡C¦pªG XA ³W®æ¸g 75% ²¼
   ¼Æ©M 2/3 ªº JTC 1 p-members §å·Ç¡A¥¦·|¦¨¬°¤@­Ó°ê»Ú¼Ð·Ç¡C ¦pªG¸gºÉ§Ö°l¤W
   §ë²¼§å·Ç¡ASQL/XA ¥i¦b 1996 ¦~¦¨¬°¼Ð·Ç¡C
   
28.16 ²Ä¤C³¡¤À¡X®ÉºA ISO/ANSI SQL

   ®ÉºA SQL ³B²z©M®É¶¡¦³Ãöªº¸ê®Æ¡C¨ä·§©À¬O¦b¬d¸ß¸ê®Æ®É§Q¥Î¥¦¦b¤@­Ó¯S©w®É¶¡
   ªº±¡ªp¡C ®ÉºA SQL ¬O¤@¥÷¥Ñ Rick Snodgrass ¦b¤@¤E¤E¥|¦~¤Q¤G¤ë©Ò¼g¡A´y­z
   ³o·§©Àªº¤å¥ó¡C
   
   X3 «Å§G½T»{¤@­Ó·s­p¹º¡AISO/IEC 9075 Part 7: SQL/Temporal ¬O¤@¥÷Ãö©ó
   SQL/Temporal ªº·s»D½Z
   
----------------------------------------------------------------------------
                                Temporal SQL
                                ************
Rick Snodgrass¡]TSQL2 ©e­û·|¥D®u¡^
31-Dec-1994

   ¦³¤H½èºÃ¹L SQL 3 ¹ïªþ¥[®É¶¡¤ä´©ªº°ÝÃD¡]¦p¦b DBL R10-75 ´£Ä³¡A­n¨D SQL
   ¦³·sªº³¡¤À¨Ó³B²z®É¶¡©Êªº¸ê®Æ®w¡^¡C¨ä½×ÂI¬O©â¶H¸ê®Æ§ÎºA (ADT's) ¨¬¥H¤ä´©
   ®ÉºA¡C ¦b³o¸ê°T©Êªº¶µ¥Ø¡A§Ú¨Ï¥Î¨ãÅé¨Ò¤l¨Ó½×ÃÒ¾Ö¦³©â¶H¸ê®Æ§ÎºAªºÄæ¦ì¤£¯à
   ³B²z®ÉºA¬d¸ß¡C ¯S§O¨Ó»¡¡A«Ü¦h®É¶¡©Êªº¬d¸ß¤£¬O«ÜÃø¥Î SQL ¼ÒÀÀ¡A´N¬O»Ý¦b
   ¹Lµ{»y¨¥¤¤¨Ï¥Î´O¤J¦¡ SQL¡C¨ä¥L¿ï¾Ü¦b TSQL2¡A¤@­Ó¹ï SQL-92 ªº®ÉºA©µ¦ù¤¤
   ´£¥X¤F¡C
   
  ¾É¨¥
  
   ¦³®Ä®É¶¡ (Valid-time) ªº¤ä´©¶W¥X¤@­Ó®ÉºA ADT ªº¯à¤O¡C¨Ï¥Î«áªÌ¡A ¤@­ÓÄæ
   ¦ì³Q«ü©w¬°®ÉºA»â°ì¡A¦p DATE ©Î INTERVAL¡]µy«á·|¦³¨Ò¤l¡^¡CÄyµÛ¦³®Ä®É¶¡¡A
   ªí®æªº¨C¦æÀHµÛ®É¶¡§ïÅÜ¡A¦]¬°²{¹ê§ïÅܤF¡CÁpô¨ì¤@­Ó¦³®Ä®É¶¡ªí®æªº¬Y¦æªº
   ®É¶¡ÂW°O (timestamp)¡A·|³Q¬d¸ß»y¨¥²z¸Ñ¬°¸Ó¦æ¤¤¦UÄæ¼Æ­Èªº²Õ¦X¦³®Äªº®É¶¡
   ¡C ³o­ÓµL¶·¨¥©úªº®É¶¡ÂW°O¨Ï±o¬d¸ß¥i¥H²³æ©ö©ú¦aªí¹F¥X¨Ó¡C
   
  ­Ó®×¬ã¨s¡XÀx¦s²{®É¸ê®Æ
  
   The University of Arizona ªº Office of Appointed Personnel ¦b¸ê®Æ®w¤¤¦³
   ¨Ç¸ê®Æ¡A¥]¬A¹µ­û¦W¦r¡B¥Ø«eÁ~ª÷©M¥Ø«e¾¦ì¡C ³o¨Ç¥i¥Î¤@­Ó²³æªºªí®æªí¹F¥X
   ¨Ó¡C
   
        Employee(Name, Salary, Title)

   ¨Ï¥Î³o­Óªí®æ´M§ä¤@­Ó¹µ­ûªºÁ~ª÷¤Q¤À²³æ¡C
   
        SELECT Salary
        FROM Employee
        WHERE Name = 'Bob'

   ²{¦b OAP ·Q¦A°O¿ý¥X¥Í¤é´Á¡C¬°¨Ç¡A¦bªí®æ¤¤¥[¤F¤@Äæ¡A²£¥Í¥H¤Uºõ¥Ø
   (schema)¡J
   
        Employee(Name, Salary, Title, DateofBirth DATE)

   §ä´M¤@¦W¹µ­ûªº¥X¥Í¤é´Á­Ó´M§äÁ~ª÷Ãþ¦ü¡C
   
        SELECT DateofBirth
        FROM Employee
        WHERE Name = 'Bob'

  ­Ó®×¬ã¨s¡XÀx¦s¾ú¥v¸ê®Æ
  
   OAP ·Q§â¨ü¹µ¾ú¥v¹q¸£¤Æ¡C¬°¦¹¡A¥L­Ì¥[¤W¨âÄæ¡A ¤@Äæ«ü¥Xªí¥Ü¦¹¦æªº¸ê®Æ¦ó®É
   ¶}©l¦³®Ä¡A¥t¤@«ü¥X¸ê®Æ¦ó®É¥¢®Ä¡C
   
   Employee (Name, Salary, Title, DateofBirth, Start DATE, Stop DATE)
   
   ¥H¸ê®Æ¼Ò«¬ (data model) »¡¡A³o¨Ç·sÄæ¦ì©M DateofBirth ²@µL¤À§O¡C¤£¹L¡A
   ¥¦­Ìªº¦s¦b²£¥Í¦hºØµ²ªG¡C
   
  ­Ó®×¬ã¨s¡X§ë¬M (Projection)
  
   ­n§ä¥X¹µ­û¥Ø«eªºÁ~ª÷·|¸û¬°§xÃø¡C
   
        SELECT Salary
        FROM Employee
        WHERE Name = 'Bob' AND Start <= CURRENT_DATE AND CURRENT_DATE <= Stop

   ³o¥y¬d¸ß¤ñ¤§«eªº½ÆÂø¡C¤¸¤¿«Ü©úÅã¬O·s¼Wªº¨âÄæ¡COAP ·Qµo¥XÁ~ª÷¾ú¥vµ¹¦U­û
   ¤u¡C ¯S§O¦a¡A¦³»Ý­n§ä¥X¨C¤@¦W¹µ­û¦b¦¬¨ü¤@­ÓÁ~¹Sªº³Ìªø®É¶¡¡C¤£©¯¦a¡A¥Î
   SQL ¤£¯à°µ¨ì¡C¤@¦W¹µ­û¦bÁ~¹S½Õ¾ã´Á¶¡Â¾»Î¥i¦³¦h¦¸Åܧó¡C
   
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

   ­nª`·N¦³¤T¦æ Bob ªºÁ~ª÷°±¯d¦b $70,000¡C©Ò¥H¡Aµ²ªGÀ³¸Ó¬O Bob ¦³¨â¦æ¡C
   
Name    Salary  Start           Stop
----    ------  -----           ----
Bob     60000   1993-01-01      1993-05-30
Bob     70000   1993-06-01      1994-12-31

   ¥t¤@¤èªk¬O§âÁ~ª÷©M¾¯Å¸ê®Æ¦Lµ¹¥ÎªÌ¡A¦Ó¥Ñ¥ÎªÌ§ä¥X¥LªºÁ~¹S¦ó®ÉÅܧó¡C ³o¤è
   ªk¬J¤£§l¤Þ¡A¥ç¤£¹ê»Ú¡C¥t¤@¤èªk¬OºÉ¶q¨Ï¥Î SQL¡C
   
CREATE TABLE Temp(Salary, Start, Stop)
AS      SELECT Salary, Start, Stop
        FROM Employee;

   repeat
   
        UPDATE Temp T1
        SET (T1.Stop) = (SELECT MAX(T2.Stop)
                         FROM Temp AS T2
                         WHERE T1.Salary = T2.Salary AND T1.Start < T2.Start
                                AND T1.Stop >= T2.Start AND T1.Stop < T2.Stop)
        WHERE EXISTS (SELECT *
                      FROM Temp AS T2
                      WHERE T1.Salary = T2.Salary AND T1.Start < T2.Start
                                AND T1.Stop >= T2.Start AND T1.Stop < T2.Stop)
        until no rows updated;

DELETE FROM Temp T1

WHERE EXISTS (SELECT *
              FROM Temp AS T2
              WHERE T1.Salary = T2.Salary
                        AND ((T1.Start > T2.Start AND T1.Stop <= T2.Stop)
                        OR (T1.Start >= T2.Start AND T1.Stop < T2.Stop))

   °j°é¤¤§ä¥X­«Å|©Î¬Û¾F¦Ó»Ý­n¦X¨Öªº®É¬q¡C¦b³ÌÃaªº±¡ªp¡A°j°é·|°õ¦æ log N ¦¸
   ¡AN «ü¤@³s¦ê­«Å|©Î¬Û¾Fªº¦PÁ~ª÷¬ö¿ýªº¼Æ¶q¡CŪªÌ¥i¦Û¦æ¼ÒÀÀ¬d¸ß¦b¥H¤W¨Ò¤l
   ªº°õ¦æ¡A ¥HÅçÃÒ¥¦ªº¥¿½T©Ê¡C
   
   ²Ä¤TºØ¤èªk¬O¨Ï¥Î SQL ¬°ªí®æ¶}±Ò¤@­Ó´å¼Ð (cursor)¡C¬°¨C­ÓÁ~ª÷ºÞ²z¤@­Ó¦U
   ¬q¸¨ªºÃìªí (linked list)¡C³oÃìªí¶}©l®É»Ý¬°ªÅ¥Õ¡C
   
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;

   ­«ÂЦÜÃìªíµ²§ô¡A¦L¥X¤é´Á©MÁ~ª÷¡C
   
   ¦pªG´å¼Ð¬O ORDER BY Start¡AÃìªí¨Ã«D¥²­n¡C
   
   µL½×¦p¦ó¡A¤@¥y²³æªº¬d¸ß¬O¤£©ö¥Î SQL-92 ªº¥\¯àªí¹F¥X³o¥Øªº¡C¨Ï¥Î TSQL2
   ªº¸Ü³o¬d¸ß·|«Ü²³æ¡C
   
        SELECT Salary
        FROM Employee

  ®×¨Ò¬ã¨s¡X³sµ² (JOIN)
  
   ¤@­Ó§ó¿E¶iªº¤èªk¬O§âºõ¥Ø­«¾ã¡A§âÁ~ª÷¡B¾¯Å¡B¥X¥Í¤é´Á¸ê®Æ¤À¶}¡A ±q¦ÓÁ׶}
   ©â¨úÁ~¹S¾ú¥v®É¹J¨ìªº°ÝÃD¡C¡]¬°¤è«K­p¡A§Ú­Ì¥H«áªº°Q½×¤¤¤£¦A¦Ò¼{¥X¥Í¤é´Á
   ¡C¡^
   
        Employee1 (Name, Salary, Start DATE, Stop DATE)
        Employee2 (Name, Title, Start DATE, Stop DATE)

   Employee1 ªí®æ¦p¤U¡J
   
Name    Salary  Start           Stop
----    ------  -----           ----
Bob     60000   1993-01-01      1993-05-30
Bob     70000   1993-06-01      1993-12-31

   ³o¬O Employee2 ªí®æ¡C
   
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

   §ïÅܤ§«á¡A¨ú±o¹µ­ûÁ~ª÷¸ê®ÆÅܱo²³æ¡C
   
        SELECT Salary, Start, Stop
        FROM Employee1
        WHERE Name = 'Bob'

   ¦ý¦pªG OAP ·Q¤@­Óªí®æ¤¤¥]¬AÁ~ª÷¡B¾¦ìªº®É¬q¡]§Y OAP ·Q¤@­Ó¹³¹Ï 1 §Î¦¡ªº
   ªí®æ¡^¡H¤@­Ó¤èªk¬O¦L¥X¨â­Óªí®æ¡A¦ÓÅý¥ÎªÌ§ä¥X¦³Ãö²Õ¦X¡C¥t¤@¤èªk¬O§¹¥þ¨Ï
   ¥Î SQL¡C¤£©¯¦a¡A³o¬d¸ß­n¤ÀªR Employee1 ¨C¦æ©M Employee2 ªº­«Å|±¡ªp¡A¦³
   ¥|ºØ¥i¯à¥X²{¡C
   
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

   ¥¿½T§ä¥X©Ò¦³±¡§Î¬O¤@¥ó¨ã¬D¾Ô©Êªº¤u§@¡C¨Ï¥Î TSQL2¡A¶i¦æ¤@­Ó¨ã®ÉºAªº³sµ²
   ´N¦p¤H­Ì©Ò´Á±æ¡C
   
        SELECT Employee1.Name, Salary, Dept
        FROM Employee1, Employee2
        WHERE Employee1.Name = Employee2.Name

  ­Ó®×¬ã¨s¡X»E¶° (AGGREGATES)
  
   ²{¦b OAP ³Q°Ý¤Î³Ì°ªÁ~¹S¬O¤°»ò¡H¥[¤W®É¶¡«e¡A³o«Ü²³æ¡C
   
        SELECT MAX(Salary)
        FROM Employee

   ²{¦b¥[¤W¤FÁ~ª÷¾ú¥v¡A§Ú­Ì­n§ä¥X¤£¦P®É¶¡³Ì°ªÁ~ª÷ªº¾ú¥v¡C°ÝÃD·íµM¬O SQL ¨Ã
   ¤£´£¨Ñ¨ã®ÉºAªº»E¶°¡C²³æªº¤èªk¬O¦L¥X¦³Ãö¸ê®Æ¡A¥Î¤H¤â§ä¥X³Ì¤j­È¡C ¥t¤@­Ó
   ¤èªk¬O¨ú¥©¡A§â¤@­Ó·í®Éªº (snapshot) »E¶°¬d¸ßÂà¤Æ¬°¤£¨Ï¥Î»E¶°ªº¬d¸ß¡A ¦A
   Âà¤Æ¬°®ÉºA»E¶°¡C¨º­Ó¤£¨Ï¥Î»E¶°ªº¬d¸ß¥Î©ó§ä¥X¤£¤j©ó¥¦¥»¨­¼Æ­ÈªºÁ~ª÷¡C
   
        SELECT Salary
        FROM Employee AS E1
        WHERE NOT EXISTS (SELECT *
                          FROM Employee AS E2
                          WHERE E2.Salary > E1.Salary)

   §â³o­Ó¬d¸ßÅܬ°®ÉºA¬d¸ß¨Ã¤£Åã²L¡C¥H¤U¬O¤@ºØ¤èªk¡C
   
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;

   ³o¤èªk«Ø¥ß»²§Uªí®æ¡C§Ú­Ì¦b³o­Óªí®æ¤¤¥[¤W¨â­Ó®É¬q¤¤­«Å|³¡¤Àªº¤W¡B¤U³¡¤À
   ¡C ¤§«á§Ú­Ì§â©Ò¦³¤l¬d¸ß¤¤§ä¥Xªº¬ö¿ý§R°£¡A¦]¦¹¼vÅT¨ì NOT EXISTS¡C³Ì«á§Ú
   ­Ì±q»²§Uªí®æ¤¤§ä¥X³Ìªøªº®É¬q¡A¹³¤§«e§Ú­Ì§ä¥XÁ~ª÷¸ê°T¯ë¡C ¦p¤j®a©Ò®Æ¡A³o
   ¼Ëªº SQL ¥y¤l°õ¦æ®É®Ä²v«D±`§C¡A¦]¬°¨º¨Ç½ÆÂøªº±_ª¬¤£µ¥¬d¸ß¡C
   
   ²Ä¤T­Ó¤èªk¬OºÉ¶q¤Ö¥Î SQL¡A¦Ó¦b¥D¾÷¤W©Ò¥Îªº»y¨¥¤¤¥Î´å¼Ð§ä¥X³Ìªøªº¾ú¥v¡C
   
   ¨Ï¥Î TSQL2 ¦A¦¸Â²³æª½±µ¡C
   
        SELECT MAX(Salary)
        FROM Employee

  ºK­n
  
   ¤j³¡¤À¸ê®Æ®wÀ³¥Îµ{¦¡³£»Ý­n³B²zÀH®É¶¡§ïÅܪº¸ê®Æ¡C¦³®Ä®É¶¡¦b SQL ¨Ã¤£¤ä´©
   ¡C«Ü¦h®ÉºA¬d¸ß¤£¬O«ÜÃø¥H SQL ¼ÒÀÀ¡A´N¬O»Ý­n§â SQL ´O¤J¨ìµ{§Ç»y¨¥¤¤¡A¦]
   ¬° SQL ¦b¸ê®Æ¼Ò«¬©M¬d¸ß»y¨¥µ²ºc¤¤¯Ê¥F¹ï¦³®Ä®É¶¡ªº¤ä´©¡C
   
   ¥t¤@¤è­±¡A§Ú­Ì¥Ü½d¥X¥[¤W¦³®Ä®É¶¡¤ä´©»Ý­n¹ï DBMS ¬I¦æ§@¥X¤@¨Ç§ïÅÜ¡A ¦ý¯à
   À¸¼@©Ê¦a²¤Æ¤@¨Ç¬d¸ß¡A¨Ã¨Ï¨ä¥L¬d¸ßÅܱo¦³¥i¯à¡C±N¨Ó¤]¥i©óÀx¦sµ²ºc¡B ¯Á¤Þ
   ¤èªkªº³Ì¨Î¤Æ (optimization)¡C¦Ó³Ì¨Î¤Æªºµ¦²¤¥i¾É­Pªí²{¤j´T´£¤É¡C
   
   ÀHµÛ SQL3 ªº¤@­Ó·s³¡¤À¤ä´©ÀH®É¶¡§ïÅܪº¸ê®Æ¡A§Ú­Ì¥i¥H¶}Öí³B²z³oÃþÀ³¥Î¡A
   §ï¨} SQL3 ³B²z®ÉºA¸ê®Æªº¯à¤O¡C
   
----------------------------------------------------------------------------
           Accredited Standards Committee* X3, Information Technology
NEWS RELEASE

¤å¥ó½s¸¹¡J       PR/96-0002

¦^ÂСJ       Barbara Bennett at bbennett@itic.nw.dc.us

             X3 «Å§G»{¥i¤@­Ó³o±M®×, ISO/IEC 9075 Part 7:  SQL/Temporal

Washington D.C., 1996 ¦~¤@¤ë
----------------------------------------------------------------------------

   -- Accredited Standards Committee X3, Information Technology «Å§G»{¥i¤@
   ­Ó¦³Ãö SQL/Temporal ¤ä´©ªº·s±M®×¡AISO/IEC 9075 Part 7¡A¨Ã§â¦³Ãö¤u§@¥æ¤©
   Technical Committee X3H2, Database¡C³o­Ó«Øij¤¤ªº¼Ð·Ç­q©ú±N¥X²{ªº SQL3
   ¼Ð·Çªº¤@­Ó·s³¡¤À¡A¦p²Ä¤C³¡¤À Temporal SQL ¬° SQL ªº¤@­Ó©µ¦ù¡A¦b SQL ¸ê
   ®Æ®wÀô¹Ò¤ä´©¦s¨ú©M³B²z¨ã®ÉºAªº¸ê®Æ¡C¤U¦¸ X3H2 ·|ij©w©ó¤@¤E¤E¤»¦~¤T¤ë¤Q
   ¤@¦Ü¤Q¥|¤é¦b³ôÂÄ´µ (Kansas) Á|¦æ¡C
   
   ¦p¦³¬d¸ß¡A¥i¶l±H©¹¡J
   
        Chairman of X3H2,
        Dr. Donald R. Deutsch,
        Sybase, Inc., Suite 800,
        6550 Rock Spring
        Drive, Bethesda, MD  20817.
        Email: deutsch@sybase.com.

   ²{¥¿´M¨D¥i¯àªº±M§Q©M¨ä¥L«ê·íªº¨Æ¶µ¡]ª©Åv¡B°Ó¼Ð¡^¡C³o§â¦³Ãö¸ê®Æ±H¥æ¡J
   
        X3 Secretariat at
        1250 Eye Street
        NW, Suite 200,
        Washington DC  20005.
        Email: x3sec@itic.nw.dc.us
        FAX:  (202)638-4922.

28.17 ²Ä¤K³¡¤À¡XISO/ANSI SQL ¦h´CÅé (SQL/MM)

   ¤@­Ó¬°«Ø¥ß¥Î©ó¦h´CÅéÀ³¥Îµ{¦¡ªº SQL ª«¥ó¨ç¦¡®wªº·s ISO/IEC °ê»Ú¼Ð·Ç¤Æ­p
   ¹º¦b¤@¤E¤E¤T¦~ªì´ÁÀò§å·Ç¶i¦æ¡C³o­Ó·s¼Ð·Ç¤Æ¦æ°Ê¦W¬° SQL Multimedia
   (SQL/MM)¡A¥¦·|¥Î¯óÀÀ¤¤ªº SQL3 ³W®æ¤¤ªº©â¶H¸ê®Æ«¬ºA¡]ADT¡^³W®æ©M¥Ø¼Ð«ü©w
   SQL ADT ©w¸q®M¥ó¡C
   
   SQL/MM ¥Ø¼Ð¬°¼Ð·Ç¤Æ¬ì¾Ç©M¤uµ{¡B¥þ¤å©M¤å¥ó³B²z¡BºÞ²z¦h´CÅ骫¥ó¡A¦p¼v¹³¡B
   Án­µ¡B °Êµe¡B­µ¼Ö©M¿ý¹³ªºª«¥ó¨ç¼Æ®w¡C¥¦¦h¼Æ·|´£¥X¤@ºØ¥Î©ó¨ä¥L JTC1 ¼Ð·Ç
   ²Õ´¡]¦p¦³Ãö¤å¥óªº SC18¡B¼v¹³ªº SC24¡B·Ó¤ù©M°Ê§@¹Ï¹³ªº SC29¡^©w¸qªºª«¥ó
   ªº SQL »y¨¥µ²¦X (binding)¡C
   
   SQL/MM ªº±M®×­p¹º«ü¥X¥¦·|¦¨¬°¤@¥÷¦h³¡¤À¼Ð·Ç¡A¥]§t¤£©w¼Æ¶qªº³¡¤À¡C ²Ä¤@
   ³¡¤À·|¬O¨ä¥L³¡¤À¦p¦ó«Ø¦¨ªº®Ø¬[¡C¨ä¥L¨C­Ó³¡¤À·|±Mª`©ó¤@­Ó¯S©wªº SQL À³¥Î
   µ{¦¡®M¥ó¡C¥H¤U¬°¤@¤E¤E¥|¦~¤K¤ë¦s¦bªº SQL/MM ³¡¤À¡J
   
     * 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.
       
   ¦³¦h­Ó¦³ÃöªÅ¶¡©M¦a²z¸ê®Æªº¼Ð·Ç¤Æªº¤u§@¦b¶i¦æ¤¤¡J
   
     * ANSI X3L1 - Geographic Information Systems. Unisys ªº Mark
       Ashworth of Unisys ¬O X3L1 ©M ANSI X3H2 ¶¡ªºÁpµ¸¤H¡C ¥L¤]¬O SQL/MM
       ¯ó½Z²Ä¤@¡B¤T©M¥|³¡¤Àªº½s¿è¡C
     * ISO TC 211 - Geographic information/Geomatics
       
29. PostgreSQL ªº§Þ³N¤ä´©

   ¦pªG§A¦³¥ô¦ó§Þ³N¤Wªº°ÝÃD¦¡¹J¨ì§xÃø¡A§A¥i¹q¶l¦Ü¡J
     * [380]pgsql-questions@postgresql.org
     * ·s»D²Õ [381]comp.databases.postgresql.general
     * ·s»D²Õ [382]comp.databases.postgresql.hackers
     * ·s»D²Õ [383]comp.databases.postgresql.doc
     * ·s»D²Õ [384]comp.databases.postgresql.bugs
     * ·s»D²Õ [385]linux.postgres
     * ¨ä¥L³q«H½×¾Â [386]http://www.postgresql.org
       
   ¤Î¹w´Á¦b¤@¤é¤º¦¬¨ì¦^ÂСC¦]¬°¤¬Ápºô²£«~ªº¥Î¤á½d³ò«Ü¼s¡A¥Î¤á¤S¤¬¬ÛÀ°§U¡A
   ¤¬Ápºô¥i»´©ö¬°¼Æ¥H¦Ê¸U­p¥Î¤á´£¨Ñ§Þ³N¤ä´©¡C¹q¶l¤ä´©¤ñ¹q¸Ü¤ä´©¤è«K±o¦h¡A
   ¦]¬°§A¥i°Å¤U©M¶K¤W¿ù»~°T®§¡Bµ{¦¡¿é¥Xµ¥µ¥¡A¤S¥i»´©ö¶Ç°e¨ì³q«H½×¾Â / ·s»D
   ²Õ¡C
   
29.1 °Ó·~¤ä´©

   PostgreSQL ²Õ´¤]·|¦V¤½¥q¥X°â§Þ³N¤ä´©¡A©Ò±o¦¬¯q·|¥Î©óºûÅ@¥@¬É¦U¦aªº¦h­Ó
   ¬M®g¯¸¥x ¡]¸Uºûºô©M ftp¡^¡C¤]·|¥Î¨Ó¦L»s¤å¥ó¡B«ü¤Þ©M®ÑÄy¥HÀ°§UÅU«È¡C¥L­Ì
   ªººô§}¬° [387]http://www.postresql.org¡C
   
   ¥t¤@¶¡¦W¬°¡¥Great Bridge Corporation¡¦¥¿¶i¦æ PostgreSQL ªº¶}µo¡B¾P°â©M
   ¤ä´©¡C¥L­Ìªººô­¶¬° [388]http://www.greatbridge.com¡C¥¦¬O¤@¶¡¥Ñ
   ¡¥Landmark Communications corp¡¦©M¨ä¥L§ë¸ê¤½¥q³]¥ßªº¤½¦@¤½¥q¡A±Mªù¦V¥@
   ¬É¤j¥ø·~¤j¤½¥q©M°â½æ©M¤ä´© PostgreSQL¡C
   
   §A¤]¥i¦b Redhat¡BAnderson¡BWGS¡]Work Group Solutions¡^µ¥±M·~ÅU°Ý¦æ±o¨ì
   À°§U¡C §A¥i§ä¥L­ÌÀ°§U¡A¦]¬°¥L­Ì¦³«Ü¦nªº C¡BC++ ±M®a¡] PostgreSQL ¥H C
   ¼g¦¨¡^¡C
     * Redhat ¤½¥q¡X¸ê®Æ®wÅU°Ý³¡ [389]http://www.redhat.com
     * Work Group Solutions [390]http://www.wgs.com
     * Anderson Consulting [391]http://www.ac.com
       
30. ¸gÀÙ©M°Ó·~¤è­±

   °Ó·~¸ê®Æ®wú¥æ«Ü¦hµ|¶µ¦pÁp¨¹¡B¦{¡B¾P°â¡B¹µ¥Î¡BªÀ·|«O»Ù¡BÂåÀø«OÀIµ|¡B ­û
   ¤u°·±d«O»Ù¡B¨ä¥L¦Uµ{­û¤uºÖ§Q¡B¥«³õ±À¼s©M¼s§i¶O¡C ©Ò¦³³o¨Ç¶O¥Î³£¤£ª½±µ¥Î
   ©ó¸ê®Æ®wªº¶}µo¡A¤£¥Î©ó§ïµ½¸ê®Æ®wªº«~½è©M§Þ³N¡C ·í§AÁʶR¤@­Ó°Ó·~¸ê®Æ®w¡A
   ¤@³¡¤Àªºª÷ÃB®ö¶O©óµ|´Ú¡B¬ã¨s¶}µo¦¨¥»µ¥¦a¤è¡C
   
   ¦Ó¥B¡A°Ó·~¸ê®Æ®w»Ý¤ä¥I¯²ª÷©MÁʶR Unix ¾÷¾¹¡A¤è¸Ë©MºûÅ@¡C ©Ò¦³³o¨Ç¦¨¥»³£
   Âà¶ùµ¹¥Î¤á¡C
   
   ©M°Ó·~¸ê®Æ®w¬Û¤ñ¡APostgreSQL ¾Ö¦³µL»Ýª½±µµ|¶µªºÀuÂI¡A¦]¬°¥¦¬O¤¬Ápºô»s³y
   ¡C ¤@¤j¸s¤H¬° PostgreSQL ªº¶}µo§@¥X­¶Äm¡C¨Ò¦p¡A¥H¤@­Ó°²³]ªº¨Ò¤l¡A ¦pªG
   ¦b¬ü°ê¦³¤@¦Ê¸U¶¡¤½¥q¡A¦Ó¨C¶¡³£®½¤Q¬ü¤¸¡]¹ï PostgreSQL ¨Ó»¡ª«¶W©Ò­È¡^¡A
   ¨C¶¡«K±o¨ì¤@¤d¸U¤¸¡I¡I³o´N¬O¤¬Ápºô¤W³n¥ó¶}µoªºÅ]³N¡C
   
   ¥Ø«e¡APostgreSQL ·½µ{¦¡¦³¤j¬ù 250,000 ¦æ C¡BC++ µ{¦¡¡C¦pªG¨C¦æ C µ{¦¡½X
   ­È¤G¬ü¤¸¡A¤µ¤Ñ¾ã­Ó PostgreSQL «K­È¤­¤Q¸U¬ü¤¸¡I
   
   «Ü¦h¤½¥q¤w¶}µo¤j¶q C¡BC++ µ{¦¡¥H§@¦Û¥Î¡C¦]¦¹¡A¤Þ¤J PostgreSQL ·½µ{¦¡½X
   ©M»P¤¬Ápºô¤W¨ä¥L¤½¥q¦X§@·|¹ï¤½¥q±a¨Ó¤j¶q§Q¯q¡A¸`¬Ù®É¶¡©M¤H¤O¡C
   
31. ¨ä¥L¸ê®Æ®wªº¦W³æ

   ¥H¤U¦C¥X¨ä¥L Unix¡BLinux ªº SQL ¸ê®Æ®w¡C
     * ÂI¿ï¤Î¨ì¹F Applications->databases.
       [392]http://www.caldera.com/tech-ref/linuxapps/linapps.html
     * ÂI¿ï¤Î¨ì¹F Applications->databases.
       [393]http://www.xnet.com/~blatura/linapps.shtml
     * ¸ê®Æ®w¸ê·½ [394]http://linas.org/linux/db.html ³o¬O¥Ñ Linas
       Vepstas ¼g¦¨ªº¡C [395]linas@fc.net
     * ¦Û¥Ñ¸ê®Æ®w¦W³æ
       [396]http://cuiwww.unige.ch:80/~scg/FreeDB/FreeDB.list.html
     * Browne ªº RDBMS ¦W³æ [397]http://www.hex.net/~cbbrowne/rdbms.html
       ¥Ñ Christopher B. Browne ¼g¦¨¡C [398]cbbrowne@hex.net
     * SAL ÃöÁp¦¡ RDBMS ¦W³æ [399]http://SAL.KachinaTech.COM/H/1/
     * SAL ªºª«¥ó¾É¦V DBMS ¦W³æ [400]http://SAL.KachinaTech.COM/H/2/
     * SAL's ªº¤u¨ã©M¨ä¥L¸ê®Æ®w¦W³æ [401]http://SAL.KachinaTech.COM/H/3/
     * ACM SIGMOD ¤½²³¥i¨ú±oªº¸ê®Æ®w³n¥ó¯Á¤Þ
       [402]http://bunny.cs.uiuc.edu/sigmod/databaseSoftware/
       
32. ¸Uºûºô·j´M´£¥Ü

   ¤¬Ápºô«D±`¼sÁï¡A¾Ö¦³¤j¶q³n¥ó©M¤U¤è¦³¤@­Ó¸ê°T®ü¬v¡C ¥¦¦b¥þ¥@¬É¥H¨C¦~¦Ê¤À
   ¤§¤T¦Êªº³t«×¼Wªø¡C¾Ú¦ô­p¡A¥þ²y¦³¤j¬ù¤@¤d¸U­Óºô¯¸¡I
   
   ­n·j´M¸ê®Æ¡A§A»Ý­n¶®ªê¡Bºô´º¡BLycos µ¥·j´M¤ÞÀº¡C¥h¨ì¶®ªê¡AÂI¿ï search¡C
   ¨Ï¥Î¹LÂo¿ï¶µ (filtering options) ¨Ó¦¬¯¶§Aªº·j´M­n¨D¡C¹w³]ªº·j´M°Ê¥ó¬O
   ¡§Intelligent search¡¨¡A³o¤ñ¸û¤@¯ë¤Æ¤Î¦C¥X©Ò¦³¥i¯à©Ê¡CÂI¿ï¡§Options¡¨¿ï
   ¾Ü ¡§EXACT phrase¡¨·j´M¡B¡§AND¡¨·j´M¡B¡§OR¡¨·j´Mµ¥µ¥¡C ³o¼Ë§A¥i§ó§Ö§ä¨ì
   §A·Q­nªº°T®§¡C¦¹¥~¡A¦b search ¥Ø¿ý¤U¡A¦³ radio buttons ¥Î¥H¿ï¾Ü·j´M·s»D
   ²Õ¡B¤¬Ápºô¯¸©Î¶®ªêºô¯¸¡C
   
33. µ²½×

   ¦b¬ã¨s¹L©Ò¦³¦Û¥Ñ©M¥i¨ú±o·½µ{¦¡½Xªº¸ê®Æ®w«á¡Aµo²{¨ì¥u¦³ PostgreSQL ¬O¥@
   ¤W³Ì¦¨¼ô¡B³Ì¦h¤H¨Ï¥Î©M¥þ­±ªº¦Û¥Ñ SQL RDMS¡]ª«¥óÃöÁp¦¡¡^¡C
   
   PostgreSQL «D±`§l¤Þ¡A¦]¬°¦³«Ü¦h¤u§@¤w§¹¦¨¡C¥¦¦³ ODBC ©M JDBC ÅX°Êµ{¦¡¡A
   ÄyµÛ³o¨Ç¡A¥i¥H½s¼g¿W¥ß©ó¸ê®Æ®wªºÀ³¥Îµ{¦¡¡C¥Î ODBC ©Î JDBC ÅX°Êµ{¦¡¼gªº
   PostgreSQL À³¥Îµ{¦¡«Ü®e©ö²¾´Ó¨ì¨ä¥L¸ê®Æ®w¡A¦p Oracle¡BSybase ©M
   Informix¡A¤Ï¤§¥çµM¡C
   
   §A¥i¯à·|°Ý¡u¬°¤°»ò¥Î PostgreSQL¡H¡vµª®×¬O¦]¬°¥Ñ¹s¶}©l¡A ¶}µo¤@­Ó¸ê®Æ®w
   ®ø¯Ó¤j¶q®É¶¡¡A¿ï¾Ü¤@­Óº¡¨¬¥H¤U±ø¥óªº¸ê®Æ®w¨t²Î¦X¥G±`ÃÑ¡J
   
   ¤@­Ó
     * ¥i¨ú±o­ìµ{¦¡½X¡X¥²¶·¬O¶}©ñµ{¦¡½X¨t²Î
     * ¨S¦³ªþ¥[±ÂÅv¦r¥y (license string)¡B¨S¦³¾Ö¦³Åv¦r¥y¡]Ķ«ö
       ¡JPostgreSQL ¬O GPL¡A¨Ã«DµL±ÂÅv¨óij¡C¦pªG¨S¦³±ÂÅv¦r¥y¡A¨Ï¥Î¥¦«K¹Hªk
       ¤F¡I¡^
     * ¥i¦b¤¬Ápºô´²§G
     * ¤w¶}µo¦h¦~
     * º¡¨¬ ISO/ANSI SQL 92¡]©M SQL 89¡^µ¥¼Ð·Ç
     * ¥iº¡¨¬¥¼¨Óªº»Ý­n¡A¦p SQL 3¡]SQL 98¡^
     * ¾Ö¦³¥ý¶i¥\¯à
       
   ªº¸ê®Æ®w¨t²Î¡A¦Ó¥u¦³ PostgreSQL º¡¨¬©Ò¦³³o¨Ç±ø¥ó¡A¦b³o±¡ªp¤U¬O¤@®M¾A·í
   ªº³n¥ó¡C §A¥i¯à·|»¡¡¥PostgreSQL¡¦¬O¤@­Ó©Ç¦W¡C¦ý§Úªº¬Ýªk¬O¡X¬°¦ó§ï¦W¡H³o
   ¥@¬É·|¥Ã»·¨Ï¥Î ¡§PostgreSQL¡¨¡I¡I
   
34. FAQ¡X¦³Ãö PostgreSQL ªº°ÝÃD

   ½Ð°Ñ¾\¤@¯ë©Ê¡BLinux ©M Irix ªº³Ì·sª© FAQ¡J
     * [403]http://www.postgresql.org/docs/faq-english.shtml
       
35. ¥»¤å¥óªº¨ä¥L®æ¦¡

   ¥»¤å¥ó¥H¤Q¤@ºØ¤£¦Pªº®æ¦¡¥Xª©¡X¡XDVI¡BPostscript¡BLaTeX¡BLyX¡BGNU-info
   ¡BHTML¡BRTF ¡]Rich Text Format¡^¡B¯Â¤å¦r¡BUnix man pages ©M SGML¡C
     * §A¥i¦b
       [404]ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO/other-formats/ ¨ú±o
       ¥H HTML¡BDVI¡BPostscript ©Î SGML ®æ¦¡¼g¦¨ªº³æ¤@ tar.gz ÀÉ¡C ¡]Ķ«ö
       ¡Jsunsite.unc.edu ¦­¤w§ï¦W¬° metalab.unc.edu¡C¡^
     * ¯Â¤å¦rÀɦb¡J [405]ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO
     * ¨ä¥L»y¨¥ªºÂ½Ä¶¡A¦pªk¤å¡B¼w¤å¡B¦è¯Z¤ú¤å¡B¤¤¤å¡B¤é¤å¦ì©ó
       [406]ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO §Ú¹ï½Ķ¨ì¥ô¦ó¨ä¥L
       »y¨¥ªºÀ°§UµL¥ôÅwªï¡C
       
   ¥»¤å¥ó¥H¤@­Ó¦W¬°¡§SGML-Tools¡¨ªº¤u¨ã¼g¦¨¡A¥¦¥i¦b¥H¤U¦a¤è§ä¨ì¡J
   [407]http://www.sgmltools.org ½sĶµ{¦¡«á§A·|±o¨ìÃþ¦ü¥H¤Uªº«ü¥O¡J
     * sgml2html databasehowto.sgml ¡]²£¥Í HTML ÀÉ¡^
     * sgml2rtf databasehowto.sgml ¡]²£¥Í RTF ÀÉ¡^
     * sgml2latex databasehowto.sgml ¡]²£¥Í LaTeX ÀÉ¡^
       
   LaTeX ¤å¥ó¥iÂà´«¬° PHP ÀÉ¡A¥u»Ý¨Ï¥Î sgml2latex¡]©M dvips¡^²£¥Í
   Postscript ¿é¥X¡A¤Î¥Î Acrobat distill¡] [408]http://www.adobe.com¡^³B²z
   ¸Ó¿é¥X¡J
     _________________________________________________________________
   
bash$ man sgml2latex
bash$ sgml2latex filename.sgml
bash$ man dvips
bash$ dvips -o filename.ps filename.dvi
bash$ distill filename.ps
bash$ man ghostscript
bash$ man ps2pdf
bash$ ps2pdf input.ps output.pdf
bash$ acroread output.pdf &
     _________________________________________________________________
   
   §A¤]¥i¥Î Ghostscript «ü¥O ps2pdf¡Cps2pdf ´£¨Ñ¤F Adobe ©M Acrobat
   Distiller ²£«~ªº´X¥G©Ò¦³¥\¯à¡J¥¦§â PostScript ÀÉÂର Portable Document
   Format (PDF) ÀÉ¡Cps2pdf ¨Ï¥Î¤F¤@­Ó²Ó¤pªº©R¥O½Z¡]§å¦¸ÀÉ¡^¡A¥¦±Ò°Ê
   Ghostscript¡A¬D¿ï¤@­Ó¦W¬° pdfwrite ªº¯S®í¡§¿é¥X³]³Æ¡¨¡C­n¨Ï¥Î ps2pdf
   ¡Apdfwrite ³]³Æ»Ý¦b½sĶ Ghostscript ®É¦b makefile ¤¤«ü©w¡F¸Ô±¡½Ð°Ñ¾\
   Ghostscript ½sĶªº¤å¥ó¡C
   
   ¥»¤å¥ó¦ì©ó¡J
     * [409]http://sunsite.unc.edu/LDP/HOWTO/PostgreSQL-HOWTO.html
       
   §A¤]¥i¦b¥H¤U¬M®g¯¸¥x§ä¨ì¥»¤å¥ó¡J
     * [410]http://www.caldera.com/LDP/HOWTO/PostgreSQL-HOWTO.html
     * [411]http://www.WGS.com/LDP/HOWTO/PostgreSQL-HOWTO.html
     * [412]http://www.cc.gatech.edu/linux/LDP/HOWTO/PostgreSQL-HOWTO.htm
       l
     * [413]http://www.redhat.com/linux-info/ldp/HOWTO/PostgreSQL-HOWTO.h
       tml
     * ¨ä¥L¦b§Aªþªñ¡]¥Hºôµ¸¦ì§}¨Ó»¡¡^ªº¯¸¥x¥i¦b
       [414]http://sunsite.unc.edu/LDP/hmirrors.html §ä¨ì¡A¿ï¾Ü¤@­Óºô¯¸©M
       ¨ì /LDP/HOWTO/PostgreSQL-HOWTO.html ¥Ø¿ý¡C
       
   ¡]Ķ«ö¡J¥»¤å¥óªº¤¤¤å¡e¤j¤­½X¡fª©¥i¦b
   [415]http://www.linux.org.tw/CLDP/HOWTO/ §ä¨ì¡C¦Ó­n²£¥Í¤¤¤å¤å¥ó¡A§A»Ý­n
   bg5sgmltools¡A¥i¦b [416]http://www.linux.org.tw/CLDP/ §ä¨ì¡C¡^
   
   ­nÆ[¬Ý dvi ®æ¦¡ªº¤å¥ó¡A¨Ï¥Î xdvi µ{¦¡¡C¦b Redhat Linux ¤¤¡A§A¥i³z¹L
   ControlPanel | Applications | Publishing | TeX «ö¶s§ä¨ì
   tetex-xdvi*.rpm ®M¥ó¡A·í¤¤§Y¬° xdvi µ{¦¡¡C
   
   ­n¾\Ū dvi ¤å¥ó¡A°õ¦æ«ü¥O¡J
   
        xdvi -geometry 80x90 howto.dvi
        man xdvi

   ©M¨Ï¥Î·Æ¹«½Õ¾ãµøµ¡¤j¤p¡CÂsÄý®É¨Ï¥Î½bÀYÁä¡BPage Up¡BPage Down Áä¡A§A¤]¥i
   ¥Î 'f', 'd', 'u', 'c', 'l', 'r', 'p', 'n' ¦r¥À¨Ó²¾¤W¡B²¾¤U¡B¸m¤¤¡B¨ì«e
   «á­¶µ¥µ¥¡C ­nÃö±¼ expert menu¡A«ö 'x'¡C
   
   §A¥i¥Îµ{¦¡ 'gv' (ghostview) ©Î 'ghostscript' ¨Ó¾\Ū postscript ÀÉ¡C¦b
   RedHat Linux ¤¤¡Aghostscript µ{¦¡¬O¦b ghostscript*.rpm ®M¥ó¡Agv «h¦b
   gv*.rpm¡C§A¥i³z¹L ControlPanel | Applications | Graphics «ö¶s§ä¨ì¥¦­Ì
   ¡Cgv µ{¦¡¤ñ ghostscript ©ö¥Î±o¦h¡Cghostscript ©M gv ¤]¥i¦b¨ä¥L¥­¥x¡A¦p
   OS/2¡Bµøµ¡ 95 ¤Î NT ±o¨ì¡A§A¤]¥i¦b³o¨Ç¥­¥x¾\Ū¥»¤å¥ó¡C
   
     * ¦b [417]http://www.cs.wisc.edu/~ghost ¨ú±o ghostscript ªºµøµ¡ 95
       ¡BOS/2 ©M¨ä¥L§@·~¨t²Îªºª©¥»¡C
       
   ­n¾\Ū postscript ¤å¥ó¡A°õ¦æ«ü¥O¡X
   
                gv howto.ps
                ghostscript howto.ps

   ª`·N¡J¥»¤å¥ó«Üªø¡A¦pªG§A·Q¦L¥X³o postscript ÀÉ¡A¤j¬ù»Ý­n 113 ­¶¡C ¡]Ķ
   «ö¡Jgv ¬O ghostscript ªº¤@­Ó«eºÝ¬É­±¡A©Ò¥H§Y¨Ï§A¥u¥´ºâ¥Î gv¡A§A¤]­n¦w¸Ë
   «áªÌ¡C¦¹¥~¡A¦b OS/2 ©Mµøµ¡¤¤¨Ã¨S¦³ gv¡A¥u¦³ GSView¡A¤@­Ó©M gv ¥\¯à®t¤£
   ¦hªºµ{¦¡¡C¸Ô±¡½Ð°ÑÃö [418]http://www.cs.wisc.edu/~ghost¡C¡^
   
   §A¥i¨Ï¥Î Netscape Navigator¡AMicrosoft Internet Explorer¡ARedhat Baron
   Web Browser ©Î¥ô¦ó¨ä¥Lªº¸UºûºôÂsÄý¾¹¨Ó¾\Ū HTML ®æ¦¡ªº¤å¥ó¡C
   
   §A¥i¥Î LyX¡ALaTeX ªº¤@­Ó X-Window «eºÝ¤¶­±¨Ó¾\Ū LaTeX ©M LyX ÀÉ¡C
   
36. ª©Åv©M±ÂÅv

   Copyright Al Dev (Alavoor Vasudevan) 1997-2000.
   
   Copyright policy is GNU/GPL as per LDP (Linux Documentation project).
   LDP is a GNU/GPL project. Additional restrictions are - you must
   retain the author's name, email address and this copyright notice on
   all the copies. If you make any changes or additions to this document
   then you should intimate all the authors of this document.
   
   NO LIABILITY FOR CONSEQUENTIAL DAMAGES. In no event shall the
   author/authors of this document be liable for any damages whatsoever
   (including without limitation, special, incidental, consequential, or
   direct/indirect damages for personal injury, loss of business profits,
   business interruption, loss of business information, or any other
   pecuniary loss) arising out of the use of this document.
   
   Author/authors offers no warranties or guarantees on fitness,
   usability, merchantability of this document. Brands, companies and
   product names mentioned in this document are trademarks or registered
   trademarks of their respective holders. Please refer to individual
   copyright notices of brands, companies and products mentioned in this
   document. It is your responsibility to read and understand the
   copyright notices of the organisations/companies/products/authors
   mentioned in this document before using their respective information.
   
Appendix

37. ªþ¿ý¥Ò¡XANSI/ISO SQL 1992 »yªk

   ³oÀɮפ¤¥]¬A³o»y¨¥ªº BNF ¥H²`«×¬°¥ýªº¾ðª¬¼Ò±½ (depth-first tree
   traversal)¡A¤j¬ù¦b 27-AUG-1992 11:03:41.64 §¹¦¨¡C³o­Ó¯S©wª©¥»©Ò¥Îªº
   BNF ¬O¥u¥Î ANSI ©M SQL2 ªº¡C
   


<SQL terminal character> ::=
      <SQL language character>
    | <SQL embedded language character>

<SQL language character> ::=
      <simple Latin letter>
    | <digit>
    | <SQL special character>

<simple Latin letter> ::=
      <simple Latin upper case letter>
    | <simple Latin lower case letter>

<simple Latin upper case letter> ::=
          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

<simple Latin lower case letter> ::=
          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

<digit> ::=
    0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

<SQL special character> ::=
      <space>
    | <double quote>
    | <percent>
    | <ampersand>
    | <quote>
    | <left paren>
    | <right paren>
    | <asterisk>
    | <plus sign>
    | <comma>
    | <minus sign>
    | <period>
    | <solidus>
    | <colon>
    | <semicolon>
    | <less than operator>
    | <equals operator>
    | <greater than operator>
    | <question mark>
    | <underscore>
    | <vertical bar>

<space> ::= !! <EMPHASIS>¡]¨Ï¥Î¤¤ªº¦r¶°©Ò¥ÎªºªÅ¥Õ¦r¤¸¡^

<double quote> ::= "

<percent> ::= %

<ampersand> ::= &

<quote> ::= '

<left paren> ::= (

<right paren> ::= )

<asterisk> ::= *

<plus sign> ::= +

<comma> ::= ,

<minus sign> ::= -

<period> ::= .

<solidus> ::= /

<colon> ::= :

<semicolon> ::= ;

<less than operator> ::= <

<equals operator> ::= =

<greater than operator> ::= >

<question mark> ::= ?

<underscore> ::= _

<vertical bar> ::= |

<SQL embedded language character> ::=
      <left bracket>
    | <right bracket>

<left bracket> ::= [

<right bracket> ::= ]

<token> ::=
      <nondelimiter token>
    | <delimiter token>

<nondelimiter token> ::=
      <regular identifier>
    | <key word>
    | <unsigned numeric literal>
    | <national character string literal>
    | <bit string literal>
    | <hex string literal>

<regular identifier> ::= <identifier body>

<identifier body> ::=
    <identifier start> [ ( <underscore> | <identifier part> )... ]

<identifier start> ::= <EMPHASIS>¡]!! °Ñ¬Ý¤åªk³W«h¡^

<identifier part> ::=
      <identifier start>
    | <digit>

<key word> ::=
      <reserved word>
    | <non-reserved word>

<reserved word> ::=
      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

<non-reserved word> ::=

      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

<unsigned numeric literal> ::=
      <exact numeric literal>
    | <approximate numeric literal>

<exact numeric literal> ::=
      <unsigned integer> [ <period> [ <unsigned integer> ] ]
    | <period> <unsigned integer>

<unsigned integer> ::= <digit>...

<approximate numeric literal> ::= <mantissa> E <exponent>

<mantissa> ::= <exact numeric literal>

<exponent> ::= <signed integer>

<signed integer> ::= [ <sign> ] <unsigned integer>

<sign> ::= <plus sign> | <minus sign>

<national character string literal> ::=
    N <quote> [ <character representation>... ] <quote>
      [ ( <separator>... <quote> [ <character representation>... ] <quote> )...
 ]

<character representation> ::=
      <nonquote character>
    | <quote symbol>

<nonquote character> ::= !! <EMPHASIS>¡]!! °Ñ¬Ý¤åªk³W«h¡^

<quote symbol> ::= <quote><quote>

<separator> ::= ( <comment> | <space> | <newline> )...

<comment> ::=
    <comment introducer> [ <comment character>... ] <newline>

<comment introducer> ::= <minus sign><minus sign>[<minus sign>...]

<comment character> ::=
      <nonquote character>
    | <quote>

<newline> ::= !! <EMPHASIS>¡]¹ê½î¤èªk©w¸qªº¦æ¥½«ü¥Ü¡^


<bit string literal> ::=
    B <quote> [ <bit>... ] <quote>
      [ ( <separator>... <quote> [ <bit>... ] <quote> )... ]

<bit> ::= 0 | 1

<hex string literal> ::=
    X <quote> [ <hexit>... ] <quote>
      [ ( <separator>... <quote> [ <hexit>... ] <quote> )... ]

<hexit> ::= <digit> | A | B | C | D | E | F | a | b | c | d | e | f

<delimiter token> ::=
      <character string literal>
    | <date string>
    | <time string>
    | <timestamp string>
    | <interval string>
    | <delimited identifier>
    | <SQL special character>
    | <not equals operator>
    | <greater than or equals operator>
    | <less than or equals operator>
    | <concatenation operator>
    | <double period>
    | <left bracket>
    | <right bracket>

<character string literal> ::=
    [ <introducer><character set specification> ]
    <quote> [ <character representation>... ] <quote>
      [ ( <separator>... <quote> [ <character representation>... ] <quote> )...
 ]

<introducer> ::= <underscore>

<character set specification> ::=
      <standard character repertoire name>
    | <implementation-defined character repertoire name>
    | <user-defined character repertoire name>
    | <standard universal character form-of-use name>
    | <implementation-defined universal character form-of-use name>

<standard character repertoire name> ::= <character set name>

<character set name> ::= [ <schema name> <period> ]
      <SQL language identifier>

<schema name> ::=
    [ <catalog name> <period> ] <unqualified schema name>

<catalog name> ::= <identifier>

<identifier> ::=
    [ <introducer><character set specification> ] <actual identifier>

<actual identifier> ::=
      <regular identifier>
    | <delimited identifier>

<delimited identifier> ::=
    <double quote> <delimited identifier body> <double quote>

<delimited identifier body> ::= <delimited identifier part>...

<delimited identifier part> ::=
      <nondoublequote character>
    | <doublequote symbol>

<nondoublequote character> ::= <EMPHASIS>¡]!! °Ñ¬Ý¤åªk³W«h¡^

<doublequote symbol> ::= <double quote><double quote>

<unqualified schema name> ::= <identifier>

<SQL language identifier> ::=
    <SQL language identifier start>
       [ ( <underscore> | <SQL language identifier part> )... ]

<SQL language identifier start> ::= <simple Latin letter>

<SQL language identifier part> ::=
      <simple Latin letter>
    | <digit>

<implementation-defined character repertoire name> ::=
    <character set name>

<user-defined character repertoire name> ::= <character set name>

<standard universal character form-of-use name> ::=
    <character set name>

<implementation-defined universal character form-of-use name> ::=
    <character set name>

<date string> ::=
    <quote> <date value> <quote>

<date value> ::=
    <years value> <minus sign> <months value>
        <minus sign> <days value>

<years value> ::= <datetime value>

<datetime value> ::= <unsigned integer>

<months value> ::= <datetime value>

<days value> ::= <datetime value>

<time string> ::=
    <quote> <time value> [ <time zone interval> ] <quote>

<time value> ::=
    <hours value> <colon> <minutes value> <colon> <seconds value>

<hours value> ::= <datetime value>

<minutes value> ::= <datetime value>

<seconds value> ::=
      <seconds integer value> [ <period> [ <seconds fraction> ] ]

<seconds integer value> ::= <unsigned integer>

<seconds fraction> ::= <unsigned integer>

<time zone interval> ::=
    <sign> <hours value> <colon> <minutes value>

<timestamp string> ::=
    <quote> <date value> <space> <time value>
        [ <time zone interval> ] <quote>

<interval string> ::=
    <quote> ( <year-month literal> | <day-time literal> ) <quote>

<year-month literal> ::=
      <years value>
    | [ <years value> <minus sign> ] <months value>

<day-time literal> ::=
      <day-time interval>
    | <time interval>

<day-time interval> ::=
    <days value>
      [ <space> <hours value> [ <colon> <minutes value>
        [ <colon> <seconds value> ] ] ]

<time interval> ::=
      <hours value> [ <colon> <minutes value> [ <colon> <seconds value> ] ]
    | <minutes value> [ <colon> <seconds value> ]
    | <seconds value>

<not equals operator> ::= <>

<greater than or equals operator> ::= >=

<less than or equals operator> ::= <=

<concatenation operator> ::= ||

<double period> ::= ..

<module> ::=
    <module name clause>
    <language clause>
    <module authorization clause>
    [ <temporary table declaration>... ]
    <module contents>...

<module name clause> ::=
    MODULE [ <module name> ]
      [ <module character set specification> ]

<module name> ::= <identifier>

<module character set specification> ::=
    NAMES ARE <character set specification>

<language clause> ::=
    LANGUAGE <language name>

<language name> ::=
    ADA | C | COBOL | FORTRAN | MUMPS | PASCAL | PLI

<module authorization clause> ::=
      SCHEMA <schema name>
    | AUTHORIZATION <module authorization identifier>
    | SCHEMA <schema name>
          AUTHORIZATION <module authorization identifier>

<module authorization identifier> ::=
    <authorization identifier>

<authorization identifier> ::= <identifier>

<temporary table declaration> ::=
    DECLARE LOCAL TEMPORARY TABLE
        <qualified local table name>
      <table element list>
      [ ON COMMIT ( PRESERVE | DELETE ) ROWS ]

<qualified local table name> ::=
    MODULE <period> <local table name>

<local table name> ::= <qualified identifier>

<qualified identifier> ::= <identifier>

<table element list> ::=
      <left paren> <table element> [ ( <comma> <table element> )... ] <right pa
ren>

<table element> ::=
      <column definition>
    | <table constraint definition>

<column definition> ::=
    <column name> ( <data type> | <domain name> )
    [ <default clause> ]
    [ <column constraint definition>... ]
    [ <collate clause> ]

<column name> ::= <identifier>

<data type> ::=
      <character string type>
           [ CHARACTER SET <character set specification> ]
    | <national character string type>
    | <bit string type>
    | <numeric type>
    | <datetime type>
    | <interval type>

<character string type> ::=
      CHARACTER [ <left paren> <length> <right paren> ]
    | CHAR [ <left paren> <length> <right paren> ]
    | CHARACTER VARYING <left paren> <length> <right paren>
    | CHAR VARYING <left paren> <length> <right paren>
    | VARCHAR <left paren> <length> <right paren>

<length> ::= <unsigned integer>

<national character string type> ::=
      NATIONAL CHARACTER [ <left paren> <length> <right paren> ]
    | NATIONAL CHAR [ <left paren> <length> <right paren> ]
    | NCHAR [ <left paren> <length> <right paren> ]
    | NATIONAL CHARACTER VARYING <left paren> <length> <right paren>
    | NATIONAL CHAR VARYING <left paren> <length> <right paren>
    | NCHAR VARYING <left paren> <length> <right paren>

<bit string type> ::=
      BIT [ <left paren> <length> <right paren> ]
    | BIT VARYING <left paren> <length> <right paren>

<numeric type> ::=
      <exact numeric type>
    | <approximate numeric type>

<exact numeric type> ::=
      NUMERIC [ <left paren> <precision> [ <comma> <scale> ] <right paren> ]
    | DECIMAL [ <left paren> <precision> [ <comma> <scale> ] <right paren> ]
    | DEC [ <left paren> <precision> [ <comma> <scale> ] <right paren> ]
    | INTEGER
    | INT
    | SMALLINT

<precision> ::= <unsigned integer>

<scale> ::= <unsigned integer>

<approximate numeric type> ::=
      FLOAT [ <left paren> <precision> <right paren> ]
    | REAL
    | DOUBLE PRECISION

<datetime type> ::=
      DATE
    | TIME [ <left paren> <time precision> <right paren> ]
          [ WITH TIME ZONE ]
    | TIMESTAMP [ <left paren> <timestamp precision> <right paren> ]
          [ WITH TIME ZONE ]

<time precision> ::= <time fractional seconds precision>

<time fractional seconds precision> ::= <unsigned integer>

<timestamp precision> ::= <time fractional seconds precision>

<interval type> ::= INTERVAL <interval qualifier>

<interval qualifier> ::=
      <start field> TO <end field>
    | <single datetime field>

<start field> ::=
    <non-second datetime field>
        [ <left paren> <interval leading field precision> <right paren> ]

<non-second datetime field> ::= YEAR | MONTH | DAY | HOUR
    | MINUTE

<interval leading field precision> ::= <unsigned integer>

<end field> ::=
      <non-second datetime field>
    | SECOND [ <left paren> <interval fractional seconds precision> <right pare
n> ]

<interval fractional seconds precision> ::= <unsigned integer>

<single datetime field> ::=
      <non-second datetime field>
          [ <left paren> <interval leading field precision> <right paren> ]
    | SECOND [ <left paren> <interval leading field precision>
          [ <comma> <interval fractional seconds precision> ] <right paren> ]

<domain name> ::= <qualified name>

<qualified name> ::=
    [ <schema name> <period> ] <qualified identifier>

<default clause> ::=
      DEFAULT <default option>

<default option> ::=
      <literal>
    | <datetime value function>
    | USER
    | CURRENT_USER
    | SESSION_USER
    | SYSTEM_USER
    | NULL

<literal> ::=
      <signed numeric literal>
    | <general literal>

<signed numeric literal> ::=
    [ <sign> ] <unsigned numeric literal>

<general literal> ::=
      <character string literal>
    | <national character string literal>
    | <bit string literal>
    | <hex string literal>
    | <datetime literal>
    | <interval literal>

<datetime literal> ::=
      <date literal>
    | <time literal>
    | <timestamp literal>

<date literal> ::=
    DATE <date string>

<time literal> ::=
    TIME <time string>

<timestamp literal> ::=
    TIMESTAMP <timestamp string>

<interval literal> ::=
    INTERVAL [ <sign> ] <interval string> <interval qualifier>

<datetime value function> ::=
      <current date value function>
    | <current time value function>
    | <current timestamp value function>

<current date value function> ::= CURRENT_DATE

<current time value function> ::=
      CURRENT_TIME [ <left paren> <time precision> <right paren> ]

<current timestamp value function> ::=
      CURRENT_TIMESTAMP [ <left paren> <timestamp precision> <right paren> ]

<column constraint definition> ::=
    [ <constraint name definition> ]
    <column constraint>
      [ <constraint attributes> ]

<constraint name definition> ::= CONSTRAINT <constraint name>

<constraint name> ::= <qualified name>

<column constraint> ::=
      NOT NULL
    | <unique specification>
    | <references specification>
    | <check constraint definition>

<unique specification> ::=
    UNIQUE | PRIMARY KEY

<references specification> ::=
    REFERENCES <referenced table and columns>
      [ MATCH <match type> ]
      [ <referential triggered action> ]

<referenced table and columns> ::=
     <table name> [ <left paren> <reference column list> <right paren> ]

<table name> ::=
      <qualified name>
    | <qualified local table name>

<reference column list> ::= <column name list>

<column name list> ::=
    <column name> [ ( <comma> <column name> )... ]

<match type> ::=
      FULL
    | PARTIAL

<referential triggered action> ::=
      <update rule> [ <delete rule> ]
    | <delete rule> [ <update rule> ]

<update rule> ::= ON UPDATE <referential action>

<referential action> ::=
      CASCADE
    | SET NULL
    | SET DEFAULT
    | NO ACTION

<delete rule> ::= ON DELETE <referential action>

<check constraint definition> ::=
    CHECK
        <left paren> <search condition> <right paren>

<search condition> ::=
      <boolean term>
    | <search condition> OR <boolean term>

<boolean term> ::=
      <boolean factor>
    | <boolean term> AND <boolean factor>

<boolean factor> ::=
    [ NOT ] <boolean test>

<boolean test> ::=
    <boolean primary> [ IS [ NOT ]
          <truth value> ]

<boolean primary> ::=
      <predicate>
    | <left paren> <search condition> <right paren>

<predicate> ::=
      <comparison predicate>
    | <between predicate>
    | <in predicate>
    | <like predicate>
    | <null predicate>
    | <quantified comparison predicate>
    | <exists predicate>
    | <unique predicate>
    | <match predicate>
    | <overlaps predicate>

<comparison predicate> ::=
    <row value constructor> <comp op>
        <row value constructor>

<row value constructor> ::=
       <row value constructor element>
    | <left paren> <row value constructor list> <right paren>
    | <row subquery>

<row value constructor element> ::=
      <value expression>
    | <null specification>
    | <default specification>

<value expression> ::=
      <numeric value expression>
    | <string value expression>
    | <datetime value expression>
    | <interval value expression>

<numeric value expression> ::=
      <term>
    | <numeric value expression> <plus sign> <term>
    | <numeric value expression> <minus sign> <term>

<term> ::=
      <factor>
    | <term> <asterisk> <factor>
    | <term> <solidus> <factor>

<factor> ::=
    [ <sign> ] <numeric primary>

<numeric primary> ::=
      <value expression primary>
    | <numeric value function>

<value expression primary> ::=
      <unsigned value specification>
    | <column reference>
    | <set function specification>
    | <scalar subquery>
    | <case expression>
    | <left paren> <value expression> <right paren>
    | <cast specification>

<unsigned value specification> ::=
      <unsigned literal>
    | <general value specification>

<unsigned literal> ::=
      <unsigned numeric literal>
    | <general literal>

<general value specification> ::=
      <parameter specification>
    | <dynamic parameter specification>
    | <variable specification>
    | USER
    | CURRENT_USER
    | SESSION_USER
    | SYSTEM_USER
    | VALUE

<parameter specification> ::=
    <parameter name> [ <indicator parameter> ]

<parameter name> ::= <colon> <identifier>

<indicator parameter> ::=
    [ INDICATOR ] <parameter name>

<dynamic parameter specification> ::= <question mark>

<variable specification> ::=
    <embedded variable name> [ <indicator variable> ]

<embedded variable name> ::=
    <colon><host identifier>

<host identifier> ::=
      <Ada host identifier>
    | <C host identifier>
    | <COBOL host identifier>
    | <Fortran host identifier>
    | <MUMPS host identifier>
    | <Pascal host identifier>
    | <PL/I host identifier>

<Ada host identifier> ::= !! <EMPHASIS>¡]°Ñ¬Ý¤åªk³W«h¡^

<C host identifier> ::=
    !! <EMPHASIS>¡]°Ñ¬Ý¤åªk³W«h¡^

<COBOL host identifier> ::= !! <EMPHASIS>¡]°Ñ¬Ý¤åªk³W«h¡^

<Fortran host identifier> ::= !! <EMPHASIS>¡]°Ñ¬Ý¤åªk³W«h¡^

<MUMPS host identifier> ::= !! <EMPHASIS>¡]°Ñ¬Ý¤åªk³W«h¡^

<Pascal host identifier> ::= !! <EMPHASIS>¡]°Ñ¬Ý¤åªk³W«h¡^

<PL/I host identifier> ::= !! <EMPHASIS>¡]°Ñ¬Ý¤åªk³W«h¡^

<indicator variable> ::=
    [ INDICATOR ] <embedded variable name>

<column reference> ::= [ <qualifier> <period> ] <column name>

<qualifier> ::=
      <table name>
    | <correlation name>

<correlation name> ::= <identifier>

<set function specification> ::=
      COUNT <left paren> <asterisk> <right paren>
    | <general set function>

<general set function> ::=
      <set function type>
          <left paren> [ <set quantifier> ] <value expression> <right paren>

<set function type> ::=
    AVG | MAX | MIN | SUM | COUNT

<set quantifier> ::= DISTINCT | ALL

<scalar subquery> ::= <subquery>

<subquery> ::= <left paren> <query expression> <right paren>

<query expression> ::=
      <non-join query expression>
    | <joined table>

<non-join query expression> ::=
      <non-join query term>
    | <query expression> UNION  [ ALL ]
          [ <corresponding spec> ] <query term>
    | <query expression> EXCEPT [ ALL ]
          [ <corresponding spec> ] <query term>

<non-join query term> ::=
      <non-join query primary>
    | <query term> INTERSECT [ ALL ]
          [ <corresponding spec> ] <query primary>

<non-join query primary> ::=
      <simple table>
    | <left paren> <non-join query expression> <right paren>

<simple table> ::=
      <query specification>
    | <table value constructor>
    | <explicit table>

<query specification> ::=
    SELECT [ <set quantifier> ] <select list> <table expression>

<select list> ::=
      <asterisk>
    | <select sublist> [ ( <comma> <select sublist> )... ]

<select sublist> ::=
      <derived column>
    | <qualifier> <period> <asterisk>

<derived column> ::= <value expression> [ <as clause> ]

<as clause> ::= [ AS ] <column name>

<table expression> ::=
    <from clause>
    [ <where clause> ]
    [ <group by clause> ]
    [ <having clause> ]

<from clause> ::= FROM <table reference>
    [ ( <comma> <table reference> )... ]

<table reference> ::=
      <table name> [ [ AS ] <correlation name>
          [ <left paren> <derived column list> <right paren> ] ]
    | <derived table> [ AS ] <correlation name>
          [ <left paren> <derived column list> <right paren> ]
    | <joined table>

<derived column list> ::= <column name list>

<derived table> ::= <table subquery>

<table subquery> ::= <subquery>

<joined table> ::=
      <cross join>
    | <qualified join>
    | <left paren> <joined table> <right paren>

<cross join> ::=
    <table reference> CROSS JOIN <table reference>

<qualified join> ::=
    <table reference> [ NATURAL ] [ <join type> ] JOIN
      <table reference> [ <join specification> ]

<join type> ::=
      INNER
    | <outer join type> [ OUTER ]
    | UNION

<outer join type> ::=
      LEFT
    | RIGHT
    | FULL

<join specification> ::=
      <join condition>
    | <named columns join>

<join condition> ::= ON <search condition>

<named columns join> ::=
    USING <left paren> <join column list> <right paren>

<join column list> ::= <column name list>

<where clause> ::= WHERE <search condition>

<group by clause> ::=
    GROUP BY <grouping column reference list>

<grouping column reference list> ::=
    <grouping column reference>
        [ ( <comma> <grouping column reference> )... ]

<grouping column reference> ::=
    <column reference> [ <collate clause> ]

<collate clause> ::= COLLATE <collation name>

<collation name> ::= <qualified name>

<having clause> ::= HAVING <search condition>

<table value constructor> ::=
    VALUES <table value constructor list>

<table value constructor list> ::=
    <row value constructor> [ ( <comma> <row value constructor> )... ]

<explicit table> ::= TABLE <table name>

<query term> ::=
      <non-join query term>
    | <joined table>

<corresponding spec> ::=
    CORRESPONDING [ BY <left paren> <corresponding column list> <right paren> ]

<corresponding column list> ::= <column name list>

<query primary> ::=
      <non-join query primary>
    | <joined table>

<case expression> ::=
      <case abbreviation>
    | <case specification>

<case abbreviation> ::=
      NULLIF <left paren> <value expression> <comma>
            <value expression> <right paren>
    | COALESCE <left paren> <value expression>
            ( <comma> <value expression> )... <right paren>

<case specification> ::=
      <simple case>
    | <searched case>

<simple case> ::=
    CASE <case operand>
      <simple when clause>...
      [ <else clause> ]
    END

<case operand> ::= <value expression>

<simple when clause> ::= WHEN <when operand> THEN <result>

<when operand> ::= <value expression>

<result> ::= <result expression> | NULL

<result expression> ::= <value expression>

<else clause> ::= ELSE <result>

<searched case> ::=
    CASE
      <searched when clause>...
      [ <else clause> ]
    END

<searched when clause> ::= WHEN <search condition> THEN <result>

<cast specification> ::=
    CAST <left paren> <cast operand> AS
        <cast target> <right paren>

<cast operand> ::=
      <value expression>
    | NULL

<cast target> ::=
      <domain name>
    | <data type>

<numeric value function> ::=
      <position expression>
    | <extract expression>
    | <length expression>

<position expression> ::=
    POSITION <left paren> <character value expression>
        IN <character value expression> <right paren>

<character value expression> ::=
      <concatenation>
    | <character factor>

<concatenation> ::=
    <character value expression> <concatenation operator>
        <character factor>

<character factor> ::=
    <character primary> [ <collate clause> ]

<character primary> ::=
      <value expression primary>
    | <string value function>

<string value function> ::=
      <character value function>
    | <bit value function>

<character value function> ::=
      <character substring function>
    | <fold>
    | <form-of-use conversion>
    | <character translation>
    | <trim function>

<character substring function> ::=
    SUBSTRING <left paren> <character value expression> FROM <start position>
                [ FOR <string length> ] <right paren>

<start position> ::= <numeric value expression>

<string length> ::= <numeric value expression>

<fold> ::= ( UPPER | LOWER )
     <left paren> <character value expression> <right paren>

<form-of-use conversion> ::=
    CONVERT <left paren> <character value expression>
        USING <form-of-use conversion name> <right paren>

<form-of-use conversion name> ::= <qualified name>

<character translation> ::=
    TRANSLATE <left paren> <character value expression>
        USING <translation name> <right paren>

<translation name> ::= <qualified name>

<trim function> ::=
    TRIM <left paren> <trim operands> <right paren>

<trim operands> ::=
    [ [ <trim specification> ] [ <trim character> ] FROM ] <trim source>

<trim specification> ::=
      LEADING
    | TRAILING
    | BOTH

<trim character> ::= <character value expression>

<trim source> ::= <character value expression>

<bit value function> ::=
    <bit substring function>

<bit substring function> ::=
    SUBSTRING <left paren> <bit value expression> FROM <start position>
        [ FOR <string length> ] <right paren>

<bit value expression> ::=
      <bit concatenation>
    | <bit factor>

<bit concatenation> ::=
    <bit value expression> <concatenation operator> <bit factor>

<bit factor> ::= <bit primary>

<bit primary> ::=
      <value expression primary>
    | <string value function>

<extract expression> ::=
    EXTRACT <left paren> <extract field>
        FROM <extract source> <right paren>

<extract field> ::=
      <datetime field>
    | <time zone field>

<datetime field> ::=
      <non-second datetime field>
    | SECOND

<time zone field> ::=
      TIMEZONE_HOUR
    | TIMEZONE_MINUTE

<extract source> ::=
      <datetime value expression>
    | <interval value expression>

<datetime value expression> ::=
      <datetime term>
    | <interval value expression> <plus sign> <datetime term>
    | <datetime value expression> <plus sign> <interval term>
    | <datetime value expression> <minus sign> <interval term>

<interval term> ::=
      <interval factor>
    | <interval term 2> <asterisk> <factor>
    | <interval term 2> <solidus> <factor>
    | <term> <asterisk> <interval factor>

<interval factor> ::=
    [ <sign> ] <interval primary>

<interval primary> ::=
      <value expression primary> [ <interval qualifier> ]

<interval term 2> ::= <interval term>

<interval value expression> ::=
      <interval term>
    | <interval value expression 1> <plus sign> <interval term 1>
    | <interval value expression 1> <minus sign> <interval term 1>
    | <left paren> <datetime value expression> <minus sign>
          <datetime term> <right paren> <interval qualifier>

<interval value expression 1> ::= <interval value expression>

<interval term 1> ::= <interval term>

<datetime term> ::=
      <datetime factor>

<datetime factor> ::=
      <datetime primary> [ <time zone> ]

<datetime primary> ::=
      <value expression primary>
    | <datetime value function>

<time zone> ::=
    AT <time zone specifier>

<time zone specifier> ::=
      LOCAL
    | TIME ZONE <interval value expression>

<length expression> ::=
      <char length expression>
    | <octet length expression>
    | <bit length expression>

<char length expression> ::=
    ( CHAR_LENGTH | CHARACTER_LENGTH )
        <left paren> <string value expression> <right paren>

<string value expression> ::=
      <character value expression>
    | <bit value expression>

<octet length expression> ::=
    OCTET_LENGTH <left paren> <string value expression> <right paren>

<bit length expression> ::=
    BIT_LENGTH <left paren> <string value expression> <right paren>

<null specification> ::=
    NULL

<default specification> ::=
    DEFAULT

<row value constructor list> ::=
    <row value constructor element>
        [ ( <comma> <row value constructor element> )... ]

<row subquery> ::= <subquery>

<comp op> ::=
      <equals operator>
    | <not equals operator>
    | <less than operator>
    | <greater than operator>
    | <less than or equals operator>
    | <greater than or equals operator>

<between predicate> ::=
    <row value constructor> [ NOT ] BETWEEN
      <row value constructor> AND <row value constructor>

<in predicate> ::=
    <row value constructor>
      [ NOT ] IN <in predicate value>

<in predicate value> ::=
      <table subquery>
    | <left paren> <in value list> <right paren>

<in value list> ::=
    <value expression> ( <comma> <value expression> )...

<like predicate> ::=
    <match value> [ NOT ] LIKE <pattern>
      [ ESCAPE <escape character> ]

<match value> ::= <character value expression>

<pattern> ::= <character value expression>

<escape character> ::= <character value expression>

<null predicate> ::= <row value constructor>
    IS [ NOT ] NULL

<quantified comparison predicate> ::=
    <row value constructor> <comp op> <quantifier> <table subquery>

<quantifier> ::= <all> | <some>

<all> ::= ALL

<some> ::= SOME | ANY

<exists predicate> ::= EXISTS <table subquery>

<unique predicate> ::= UNIQUE <table subquery>

<match predicate> ::=
    <row value constructor> MATCH [ UNIQUE ]
        [ PARTIAL | FULL ] <table subquery>

<overlaps predicate> ::=
    <row value constructor 1> OVERLAPS <row value constructor 2>

<row value constructor 1> ::= <row value constructor>

<row value constructor 2> ::= <row value constructor>

<truth value> ::=
      TRUE
    | FALSE
    | UNKNOWN

<constraint attributes> ::=
      <constraint check time> [ [ NOT ] DEFERRABLE ]
    | [ NOT ] DEFERRABLE [ <constraint check time> ]

<constraint check time> ::=
      INITIALLY DEFERRED
    | INITIALLY IMMEDIATE

<table constraint definition> ::=
    [ <constraint name definition> ]
    <table constraint> [ <constraint attributes> ]

<table constraint> ::=
      <unique constraint definition>
    | <referential constraint definition>
    | <check constraint definition>

<unique constraint definition> ::=
            <unique specification> even in SQL3)
    <unique specification>
      <left paren> <unique column list> <right paren>

<unique column list> ::= <column name list>

<referential constraint definition> ::=
    FOREIGN KEY
        <left paren> <referencing columns> <right paren>
      <references specification>

<referencing columns> ::=
    <reference column list>

<module contents> ::=
      <declare cursor>
    | <dynamic declare cursor>
    | <procedure>

<declare cursor> ::=
    DECLARE <cursor name> [ INSENSITIVE ] [ SCROLL ] CURSOR
      FOR <cursor specification>

<cursor name> ::= <identifier>

<cursor specification> ::=
    <query expression> [ <order by clause> ]
      [ <updatability clause> ]

<order by clause> ::=
    ORDER BY <sort specification list>

<sort specification list> ::=
    <sort specification> [ ( <comma> <sort specification> )... ]

<sort specification> ::=
    <sort key> [ <collate clause> ] [ <ordering specification> ]

<sort key> ::=
      <column name>
    | <unsigned integer>

<ordering specification> ::= ASC | DESC

<updatability clause> ::=
    FOR
        ( READ ONLY |
          UPDATE [ OF <column name list> ] )

<dynamic declare cursor> ::=
    DECLARE <cursor name> [ INSENSITIVE ] [ SCROLL ] CURSOR
        FOR <statement name>

<statement name> ::= <identifier>

<procedure> ::=
    PROCEDURE <procedure name>
        <parameter declaration list> <semicolon>
      <SQL procedure statement> <semicolon>

<procedure name> ::= <identifier>

<parameter declaration list> ::=
      <left paren> <parameter declaration>
          [ ( <comma> <parameter declaration> )... ] <right paren>
    | <parameter declaration>...

<parameter declaration> ::=
      <parameter name> <data type>
    | <status parameter>

<status parameter> ::=
    SQLCODE | SQLSTATE

<SQL procedure statement> ::=
      <SQL schema statement>
    | <SQL data statement>
    | <SQL transaction statement>
    | <SQL connection statement>
    | <SQL session statement>
    | <SQL dynamic statement>
    | <SQL diagnostics statement>

<SQL schema statement> ::=
      <SQL schema definition statement>
    | <SQL schema manipulation statement>

<SQL schema definition statement> ::=
      <schema definition>
    | <table definition>
    | <view definition>
    | <grant statement>
    | <domain definition>
    | <character set definition>
    | <collation definition>
    | <translation definition>
    | <assertion definition>

<schema definition> ::=
    CREATE SCHEMA <schema name clause>
      [ <schema character set specification> ]
      [ <schema element>... ]

<schema name clause> ::=
      <schema name>
    | AUTHORIZATION <schema authorization identifier>
    | <schema name> AUTHORIZATION
          <schema authorization identifier>

<schema authorization identifier> ::=
    <authorization identifier>

<schema character set specification> ::=
    DEFAULT CHARACTER
        SET <character set specification>

<schema element> ::=
      <domain definition>
    | <table definition>
    | <view definition>
    | <grant statement>
    | <assertion definition>
    | <character set definition>
    | <collation definition>
    | <translation definition>

<domain definition> ::=
    CREATE DOMAIN <domain name>
        [ AS ] <data type>
      [ <default clause> ]
      [ <domain constraint>... ]
      [ <collate clause> ]

<domain constraint> ::=
    [ <constraint name definition> ]
    <check constraint definition> [ <constraint attributes> ]

<table definition> ::=
    CREATE [ ( GLOBAL | LOCAL ) TEMPORARY ] TABLE
        <table name>
      <table element list>
      [ ON COMMIT ( DELETE | PRESERVE ) ROWS ]

<view definition> ::=
    CREATE VIEW <table name> [ <left paren> <view column list>
                                  <right paren> ]
      AS <query expression>
      [ WITH [ <levels clause> ] CHECK OPTION ]

<view column list> ::= <column name list>

<levels clause> ::=
    CASCADED | LOCAL

<grant statement> ::=
   GRANT <privileges> ON <object name>
     TO <grantee> [ ( <comma> <grantee> )... ]
       [ WITH GRANT OPTION ]

<privileges> ::=
      ALL PRIVILEGES
    | <action list>

<action list> ::= <action> [ ( <comma> <action> )... ]

<action> ::=
      SELECT
    | DELETE
    | INSERT [ <left paren> <privilege column list> <right paren> ]
    | UPDATE [ <left paren> <privilege column list> <right paren> ]
    | REFERENCES [ <left paren> <privilege column list> <right paren> ]
    | USAGE

<privilege column list> ::= <column name list>

<object name> ::=
      [ TABLE ] <table name>
    | DOMAIN <domain name>
    | COLLATION <collation name>
    | CHARACTER SET <character set name>
    | TRANSLATION <translation name>

<grantee> ::=
      PUBLIC
    | <authorization identifier>

<assertion definition> ::=
    CREATE ASSERTION <constraint name> <assertion check>
      [ <constraint attributes> ]

<assertion check> ::=
    CHECK
        <left paren> <search condition> <right paren>

<character set definition> ::=
    CREATE CHARACTER SET <character set name>
        [ AS ]
      <character set source>
      [ <collate clause> | <limited collation definition> ]

<character set source> ::=
      GET <existing character set name>

<existing character set name> ::=
      <standard character repertoire name>
    | <implementation-defined character repertoire name>
    | <schema character set name>

<schema character set name> ::= <character set name>

<limited collation definition> ::=
    COLLATION FROM <collation source>

<collation source> ::=
      <collating sequence definition>
    | <translation collation>

<collating sequence definition> ::=
      <external collation>
    | <schema collation name>
    | DESC <left paren> <collation name> <right paren>
    | DEFAULT

<external collation> ::=
    EXTERNAL <left paren> <quote> <external collation name> <quote> <right pare
n>

<external collation name> ::=
      <standard collation name>
    | <implementation-defined collation name>

<standard collation name> ::= <collation name>

<implementation-defined collation name> ::= <collation name>

<schema collation name> ::= <collation name>

<translation collation> ::=
    TRANSLATION <translation name>
        [ THEN COLLATION <collation name> ]

<collation definition> ::=
    CREATE COLLATION <collation name> FOR
        <character set specification>
      FROM <collation source>
        [ <pad attribute> ]

<pad attribute> ::=
      NO PAD
    | PAD SPACE

<translation definition> ::=
    CREATE TRANSLATION <translation name>
      FOR <source character set specification>
        TO <target character set specification>
      FROM <translation source>

<source character set specification> ::= <character set specification>

<target character set specification> ::= <character set specification>

<translation source> ::=
      <translation specification>

<translation specification> ::=
      <external translation>
    | IDENTITY
    | <schema translation name>

<external translation> ::=
    EXTERNAL <left paren> <quote> <external translation name> <quote> <right pa
ren>

<external translation name> ::=
      <standard translation name>
    | <implementation-defined translation name>

<standard translation name> ::= <translation name>

<implementation-defined translation name> ::= <translation name>

<schema translation name> ::= <translation name>

<SQL schema manipulation statement> ::=
      <drop schema statement>
    | <alter table statement>
    | <drop table statement>
    | <drop view statement>
    | <revoke statement>
    | <alter domain statement>
    | <drop domain statement>
    | <drop character set statement>
    | <drop collation statement>
    | <drop translation statement>
    | <drop assertion statement>

<drop schema statement> ::=
    DROP SCHEMA <schema name> <drop behavior>

<drop behavior> ::= CASCADE | RESTRICT

<alter table statement> ::=
    ALTER TABLE <table name> <alter table action>

<alter table action> ::=
      <add column definition>
    | <alter column definition>
    | <drop column definition>
    | <add table constraint definition>
    | <drop table constraint definition>

<add column definition> ::=
    ADD [ COLUMN ] <column definition>

<alter column definition> ::=
    ALTER [ COLUMN ] <column name> <alter column action>

<alter column action> ::=
      <set column default clause>
    | <drop column default clause>

<set column default clause> ::=
    SET <default clause>

<drop column default clause> ::=
    DROP DEFAULT

<drop column definition> ::=
    DROP [ COLUMN ] <column name> <drop behavior>

<add table constraint definition> ::=
    ADD <table constraint definition>

<drop table constraint definition> ::=
    DROP CONSTRAINT <constraint name> <drop behavior>

<drop table statement> ::=
    DROP TABLE <table name> <drop behavior>

<drop view statement> ::=
    DROP VIEW <table name> <drop behavior>

<revoke statement> ::=
    REVOKE [ GRANT OPTION FOR ]
        <privileges>
        ON <object name>
      FROM <grantee> [ ( <comma> <grantee> )... ] <drop behavior>

<alter domain statement> ::=
    ALTER DOMAIN <domain name> <alter domain action>

<alter domain action> ::=
      <set domain default clause>
    | <drop domain default clause>
    | <add domain constraint definition>
    | <drop domain constraint definition>

<set domain default clause> ::= SET <default clause>

<drop domain default clause> ::= DROP DEFAULT

<add domain constraint definition> ::=
    ADD <domain constraint>

<drop domain constraint definition> ::=
    DROP CONSTRAINT <constraint name>

<drop domain statement> ::=
    DROP DOMAIN <domain name> <drop behavior>

<drop character set statement> ::=
    DROP CHARACTER SET <character set name>

<drop collation statement> ::=
    DROP COLLATION <collation name>

<drop translation statement> ::=
    DROP TRANSLATION <translation name>

<drop assertion statement> ::=
    DROP ASSERTION <constraint name>

<SQL data statement> ::=
      <open statement>
    | <fetch statement>
    | <close statement>
    | <select statement: single row>
    | <SQL data change statement>

<open statement> ::=
    OPEN <cursor name>

<fetch statement> ::=
    FETCH [ [ <fetch orientation> ] FROM ]
      <cursor name> INTO <fetch target list>

<fetch orientation> ::=
      NEXT
    | PRIOR
    | FIRST
    | LAST
    | ( ABSOLUTE | RELATIVE ) <simple value specification>

<simple value specification> ::=
      <parameter name>
    | <embedded variable name>
    | <literal>

<fetch target list> ::=
    <target specification> [ ( <comma> <target specification> )... ]

<target specification> ::=
      <parameter specification>
    | <variable specification>

<close statement> ::=
    CLOSE <cursor name>

<select statement: single row> ::=
    SELECT [ <set quantifier> ] <select list>
      INTO <select target list>
        <table expression>

<select target list> ::=
    <target specification> [ ( <comma> <target specification> )... ]

<SQL data change statement> ::=
      <delete statement: positioned>
    | <delete statement: searched>
    | <insert statement>
    | <update statement: positioned>
    | <update statement: searched>

<delete statement: positioned> ::=
    DELETE FROM <table name>
      WHERE CURRENT OF <cursor name>

<delete statement: searched> ::=
    DELETE FROM <table name>
      [ WHERE <search condition> ]

<insert statement> ::=
    INSERT INTO <table name>
      <insert columns and source>

<insert columns and source> ::=
      [ <left paren> <insert column list> <right paren> ]
            <query expression>
    | DEFAULT VALUES

<insert column list> ::= <column name list>

<update statement: positioned> ::=
    UPDATE <table name>
      SET <set clause list>
        WHERE CURRENT OF <cursor name>

<set clause list> ::=
    <set clause> [ ( <comma> <set clause> )... ]

<set clause> ::=
    <object column> <equals operator> <update source>

<object column> ::= <column name>

<update source> ::=
      <value expression>
    | <null specification>
    | DEFAULT

<update statement: searched> ::=
    UPDATE <table name>
      SET <set clause list>
      [ WHERE <search condition> ]

<SQL transaction statement> ::=
      <set transaction statement>
    | <set constraints mode statement>
    | <commit statement>
    | <rollback statement>

<set transaction statement> ::=
    SET TRANSACTION <transaction mode>
        [ ( <comma> <transaction mode> )... ]

<transaction mode> ::=
      <isolation level>
    | <transaction access mode>
    | <diagnostics size>

<isolation level> ::=
    ISOLATION LEVEL <level of isolation>

<level of isolation> ::=
      READ UNCOMMITTED
    | READ COMMITTED
    | REPEATABLE READ
    | SERIALIZABLE

<transaction access mode> ::=
      READ ONLY
    | READ WRITE

<diagnostics size> ::=
    DIAGNOSTICS SIZE <number of conditions>

<number of conditions> ::= <simple value specification>

<set constraints mode statement> ::=
    SET CONSTRAINTS <constraint name list>
        ( DEFERRED | IMMEDIATE )

<constraint name list> ::=
      ALL
    | <constraint name> [ ( <comma> <constraint name> )... ]

<commit statement> ::=
    COMMIT [ WORK ]

<rollback statement> ::=
    ROLLBACK [ WORK ]

<SQL connection statement> ::=
      <connect statement>
    | <set connection statement>
    | <disconnect statement>

<connect statement> ::=
    CONNECT TO <connection target>

<connection target> ::=
      <SQL-server name>
        [ AS <connection name> ]
          correspondence with Tony Gordon)
        [ USER <user name> ]
    | DEFAULT

<SQL-server name> ::= <simple value specification>

<connection name> ::= <simple value specification>

<user name> ::= <simple value specification>

<set connection statement> ::=
    SET CONNECTION <connection object>

<connection object> ::=
      DEFAULT
    | <connection name>

<disconnect statement> ::=
    DISCONNECT <disconnect object>

<disconnect object> ::=
      <connection object>
    | ALL
    | CURRENT

<SQL session statement> ::=
      <set catalog statement>
    | <set schema statement>
    | <set names statement>
    | <set session authorization identifier statement>
    | <set local time zone statement>

<set catalog statement> ::=
    SET CATALOG <value specification>

<value specification> ::=
      <literal>
    | <general value specification>

<set schema statement> ::=
    SET SCHEMA <value specification>

<set names statement> ::=
    SET NAMES <value specification>

<set session authorization identifier statement> ::=
    SET SESSION AUTHORIZATION
        <value specification>

<set local time zone statement> ::=
    SET TIME ZONE
        <set time zone value>

<set time zone value> ::=
      <interval value expression>
    | LOCAL

<SQL dynamic statement> ::=
      <system descriptor statement>
    | <prepare statement>
    | <deallocate prepared statement>
    | <describe statement>
    | <execute statement>
    | <execute immediate statement>
    | <SQL dynamic data statement>

<system descriptor statement> ::=
      <allocate descriptor statement>
    | <deallocate descriptor statement>
    | <set descriptor statement>
    | <get descriptor statement>

<allocate descriptor statement> ::=
    ALLOCATE DESCRIPTOR <descriptor name>
       [ WITH MAX <occurrences> ]

<descriptor name> ::=
    [ <scope option> ] <simple value specification>

<scope option> ::=
      GLOBAL
    | LOCAL

<occurrences> ::= <simple value specification>

<deallocate descriptor statement> ::=
    DEALLOCATE DESCRIPTOR <descriptor name>

<set descriptor statement> ::=
    SET DESCRIPTOR <descriptor name>
        <set descriptor information>

<set descriptor information> ::=
      <set count>
    | VALUE <item number>
        <set item information> [ ( <comma> <set item information> )... ]

<set count> ::=
    COUNT <equals operator> <simple value specification 1>

<simple value specification 1> ::= <simple value specification>

<item number> ::= <simple value specification>

<set item information> ::=
    <descriptor item name> <equals operator> <simple value specification 2>

<descriptor item name> ::=
      TYPE
    | LENGTH
    | OCTET_LENGTH
    | RETURNED_LENGTH
    | RETURNED_OCTET_LENGTH
    | PRECISION
    | SCALE
    | DATETIME_INTERVAL_CODE
    | DATETIME_INTERVAL_PRECISION
    | NULLABLE
    | INDICATOR
    | DATA
    | NAME
    | UNNAMED
    | COLLATION_CATALOG
    | COLLATION_SCHEMA
    | COLLATION_NAME
    | CHARACTER_SET_CATALOG
    | CHARACTER_SET_SCHEMA
    | CHARACTER_SET_NAME

<simple value specification 2> ::= <simple value specification>

<item number> ::= <simple value specification>

<get descriptor statement> ::=
    GET DESCRIPTOR <descriptor name> <get descriptor information>

<get descriptor information> ::=
      <get count>
    | VALUE <item number>
        <get item information> [ ( <comma> <get item information> )... ]

<get count> ::=
    <simple target specification 1> <equals operator>
         COUNT

<simple target specification 1> ::= <simple target specification>

<simple target specification> ::=
      <parameter name>
    | <embedded variable name>

<get item information> ::=
    <simple target specification 2> <equals operator> <descriptor item name>>

<simple target specification 2> ::= <simple target specification>

<prepare statement> ::=
    PREPARE <SQL statement name> FROM <SQL statement variable>

<SQL statement name> ::=
      <statement name>
    | <extended statement name>

<extended statement name> ::=
    [ <scope option> ] <simple value specification>

<SQL statement variable> ::= <simple value specification>

<deallocate prepared statement> ::=
    DEALLOCATE PREPARE <SQL statement name>

<describe statement> ::=
      <describe input statement>
    | <describe output statement>

<describe input statement> ::=
    DESCRIBE INPUT <SQL statement name> <using descriptor>

<using descriptor> ::=
    ( USING | INTO ) SQL DESCRIPTOR <descriptor name>

<describe output statement> ::=
    DESCRIBE [ OUTPUT ] <SQL statement name> <using descriptor>

<execute statement> ::=
    EXECUTE <SQL statement name>
      [ <result using clause> ]
      [ <parameter using clause> ]

<result using clause> ::= <using clause>

<using clause> ::=
      <using arguments>
    | <using descriptor>

<using arguments> ::=
    ( USING | INTO ) <argument> [ ( <comma> <argument> )... ]

<argument> ::= <target specification>

<parameter using clause> ::= <using clause>

<execute immediate statement> ::=
    EXECUTE IMMEDIATE <SQL statement variable>

<SQL dynamic data statement> ::=
      <allocate cursor statement>
    | <dynamic open statement>
    | <dynamic fetch statement>
    | <dynamic close statement>
    | <dynamic delete statement: positioned>
    | <dynamic update statement: positioned>

<allocate cursor statement> ::=
    ALLOCATE <extended cursor name> [ INSENSITIVE ]
        [ SCROLL ] CURSOR
      FOR <extended statement name>

<extended cursor name> ::=
    [ <scope option> ] <simple value specification>

<dynamic open statement> ::=
    OPEN <dynamic cursor name> [ <using clause> ]

<dynamic cursor name> ::=
      <cursor name>
    | <extended cursor name>

<dynamic fetch statement> ::=
    FETCH [ [ <fetch orientation> ] FROM ] <dynamic cursor name>
        <using clause>

<dynamic close statement> ::=
    CLOSE <dynamic cursor name>

<dynamic delete statement: positioned> ::=
    DELETE FROM <table name>
      WHERE CURRENT OF
          <dynamic cursor name>

<dynamic update statement: positioned> ::=
    UPDATE <table name>
      SET <set clause>
          [ ( <comma> <set clause> )... ]
        WHERE CURRENT OF
            <dynamic cursor name>

<SQL diagnostics statement> ::=
    <get diagnostics statement>

<get diagnostics statement> ::=
    GET DIAGNOSTICS <sql diagnostics information>

<sql diagnostics information> ::=
      <statement information>
    | <condition information>

<statement information> ::=
    <statement information item> [ ( <comma> <statement information item> )...
]

<statement information item> ::=
    <simple target specification> <equals operator> <statement information item
 name>

<statement information item name> ::=
      NUMBER
    | MORE
    | COMMAND_FUNCTION
    | DYNAMIC_FUNCTION
    | ROW_COUNT

<condition information> ::=
    EXCEPTION <condition number>
      <condition information item> [ ( <comma> <condition information item> )..
. ]

<condition number> ::= <simple value specification>

<condition information item> ::=
    <simple target specification> <equals operator> <condition information item
 name>

<condition information item name> ::=
      CONDITION_NUMBER
    | RETURNED_SQLSTATE
    | CLASS_ORIGIN
    | SUBCLASS_ORIGIN
    | SERVER_NAME
    | CONNECTION_NAME
    | CONSTRAINT_CATALOG
    | CONSTRAINT_SCHEMA
    | CONSTRAINT_NAME
    | CATALOG_NAME
    | SCHEMA_NAME
    | TABLE_NAME
    | COLUMN_NAME
    | CURSOR_NAME
    | MESSAGE_TEXT
    | MESSAGE_LENGTH
    | MESSAGE_OCTET_LENGTH

<embedded SQL host program> ::=
      <embedded SQL Ada program>
    | <embedded SQL C program>
    | <embedded SQL COBOL program>
    | <embedded SQL Fortran program>
    | <embedded SQL MUMPS program>
    | <embedded SQL Pascal program>
    | <embedded SQL PL/I program>

<embedded SQL Ada program> ::= !! <EMPHASIS>(See the Syntax Rules.)

<embedded SQL C program> ::=
      !! <EMPHASIS>(See the Syntax Rules.)

<embedded SQL COBOL program> ::= !! <EMPHASIS>(See the Syntax Rules.)

<embedded SQL Fortran program> ::=
    !! <EMPHASIS>(See the Syntax Rules.)

<embedded SQL MUMPS program> ::= !! <EMPHASIS>(See the Syntax Rules.)

<embedded SQL Pascal program> ::=
    !! <EMPHASIS>(See the Syntax Rules.)

<embedded SQL PL/I program> ::= !! <EMPHASIS>(See the Syntax Rules.)

<embedded SQL declare section> ::=
      <embedded SQL begin declare>
        [ <embedded character set declaration> ]
        [ <host variable definition>... ]
      <embedded SQL end declare>
    | <embedded SQL MUMPS declare>

<embedded SQL begin declare> ::=
    <SQL prefix> BEGIN DECLARE SECTION
        [ <SQL terminator> ]

<SQL prefix> ::=
      EXEC SQL
    | <ampersand>SQL<left paren>

<SQL terminator> ::=
      END-EXEC
    | <semicolon>
    | <right paren>

<embedded character set declaration> ::=
    SQL NAMES ARE <character set specification>

<host variable definition> ::=
      <Ada variable definition>
    | <C variable definition>
    | <COBOL variable definition>
    | <Fortran variable definition>
    | <MUMPS variable definition>
    | <Pascal variable definition>
    | <PL/I variable definition>

<Ada variable definition> ::=
    <Ada host identifier> [ ( <comma> <Ada host identifier> )... ] :
    <Ada type specification> [ <Ada initial value> ]

<Ada type specification> ::=
      <Ada qualified type specification>
    | <Ada unqualified type specification>

<Ada qualified type specification> ::=
      SQL_STANDARD.CHAR [ CHARACTER SET
         [ IS ] <character set specification> ]
          <left paren> 1 <double period> <length> <right paren>
    | SQL_STANDARD.BIT
          <left paren> 1 <double period> <length> <right paren>
    | SQL_STANDARD.SMALLINT
    | SQL_STANDARD.INT
    | SQL_STANDARD.REAL
    | SQL_STANDARD.DOUBLE_PRECISION
    | SQL_STANDARD.SQLCODE_TYPE
    | SQL_STANDARD.SQLSTATE_TYPE
    | SQL_STANDARD.INDICATOR_TYPE

<Ada unqualified type specification> ::=
      CHAR
          <left paren> 1 <double period> <length> <right paren>
    | BIT
          <left paren> 1 <double period> <length> <right paren>
    | SMALLINT
    | INT
    | REAL
    | DOUBLE_PRECISION
    | SQLCODE_TYPE
    | SQLSTATE_TYPE
    | INDICATOR_TYPE

<Ada initial value> ::=
    <Ada assignment operator> <character representation>...

<Ada assignment operator> ::= <colon><equals operator>

<C variable definition> ::=
      [ <C storage class> ]
      [ <C class modifier> ]
      <C variable specification>
    <semicolon>

<C storage class> ::=
      auto
    | extern
    | static

<C class modifier> ::= const | volatile

<C variable specification> ::=
      <C numeric variable>
    | <C character variable>
    | <C derived variable>

<C numeric variable> ::=
    ( long | short | float | double )
      <C host identifier> [ <C initial value> ]
            [ ( <comma> <C host identifier> [ <C initial value> ] )... ]

<C initial value> ::=
    <equals operator> <character representation>...

<C character variable> ::=
    char [ CHARACTER SET
             [ IS ] <character set specification> ]
      <C host identifier>
        <C array specification> [ <C initial value> ]
        [ ( <comma> <C host identifier>
          <C array specification>
                 [ <C initial value> ] )... ]

<C array specification> ::=
    <left bracket> <length> <right bracket>

<C derived variable> ::=
      <C VARCHAR variable>
    | <C bit variable>

<C VARCHAR variable> ::=
    VARCHAR [ CHARACTER SET [ IS ]
        <character set specification> ]
        <C host identifier>
            <C array specification> [ <C initial value> ]
          [ ( <comma> <C host identifier>
              <C array specification>
                      [ <C initial value> ] )... ]

<C bit variable> ::=
    BIT <C host identifier>
        <C array specification> [ <C initial value> ]
      [ ( <comma> <C host identifier>
        <C array specification>
                   [ <C initial value> ] )... ]

<COBOL variable definition> ::=
    (01|77) <COBOL host identifier> <COBOL type specification>
      [ <character representation>... ] <period>

<COBOL type specification> ::=
      <COBOL character type>
    | <COBOL bit type>
    | <COBOL numeric type>
    | <COBOL integer type>

<COBOL character type> ::=
    [ CHARACTER SET [ IS ]
          <character set specification> ]
    ( PIC | PICTURE ) [ IS ] ( X [ <left paren> <length> <right paren> ] )...

<COBOL bit type> ::=
    ( PIC | PICTURE ) [ IS ]
        ( B [ <left paren> <length> <right paren> ] )...

<COBOL numeric type> ::=
    ( PIC | PICTURE ) [ IS ]
      S <COBOL nines specification>
    [ USAGE [ IS ] ] DISPLAY SIGN LEADING SEPARATE

<COBOL nines specification> ::=
      <COBOL nines> [ V [ <COBOL nines> ] ]
    | V <COBOL nines>

<COBOL nines> ::= ( 9 [ <left paren> <length> <right paren> ] )...

<COBOL integer type> ::=
      <COBOL computational integer>
    | <COBOL binary integer>

<COBOL computational integer> ::=
    ( PIC | PICTURE ) [ IS ] S<COBOL nines>
      [ USAGE [ IS ] ] ( COMP | COMPUTATIONAL )

<COBOL binary integer> ::=
    ( PIC | PICTURE ) [ IS ] S<COBOL nines>
      [ USAGE [ IS ] ] BINARY

<Fortran variable definition> ::=
    <Fortran type specification>
    <Fortran host identifier>
        [ ( <comma> <Fortran host identifier> )... ]

<Fortran type specification> ::=
      CHARACTER [ <asterisk> <length> ]
          [ CHARACTER SET [ IS ]
                <character set specification> ]
    | BIT [ <asterisk> <length> ]
    | INTEGER
    | REAL
    | DOUBLE PRECISION

<MUMPS variable definition> ::=
    ( <MUMPS numeric variable> | <MUMPS character variable> )
        <semicolon>

<MUMPS numeric variable> ::=
    <MUMPS type specification>
      <MUMPS host identifier> [ ( <comma> <MUMPS host identifier> )... ]

<MUMPS type specification> ::=
      INT
    | DEC
          [ <left paren> <precision> [ <comma> <scale> ] <right paren> ]
    | REAL

<MUMPS character variable> ::=
    VARCHAR <MUMPS host identifier> <MUMPS length specification>
      [ ( <comma> <MUMPS host identifier> <MUMPS length specification> )... ]

<MUMPS length specification> ::=
    <left paren> <length> <right paren>

<Pascal variable definition> ::=
    <Pascal host identifier> [ ( <comma> <Pascal host identifier> )... ] <colon
>
      <Pascal type specification> <semicolon>

<Pascal type specification> ::=
      PACKED ARRAY
          <left bracket> 1 <double period> <length> <right bracket>
        OF CHAR
          [ CHARACTER SET [ IS ]
                <character set specification> ]
    | PACKED ARRAY
          <left bracket> 1 <double period> <length> <right bracket>
        OF BIT
    | INTEGER
    | REAL
    | CHAR [ CHARACTER SET
                                [ IS ] <character set specification> ]
    | BIT

<PL/I variable definition> ::=
    (DCL | DECLARE)
        (   <PL/I host identifier>
          | <left paren> <PL/I host identifier>
                [ ( <comma> <PL/I host identifier> )... ] <right paren> )
    <PL/I type specification>
    [ <character representation>... ] <semicolon>

<PL/I type specification> ::=
      ( CHAR | CHARACTER ) [ VARYING ]
          <left paren><length><right paren>
          [ CHARACTER SET
                [ IS ] <character set specification> ]
    | BIT [ VARYING ] <left paren><length><right paren>
    | <PL/I type fixed decimal> <left paren> <precision>
          [ <comma> <scale> ] <right paren>
    | <PL/I type fixed binary> [ <left paren> <precision> <right paren> ]
    | <PL/I type float binary> <left paren> <precision> <right paren>

<PL/I type fixed decimal> ::=
      ( DEC | DECIMAL ) FIXED
    | FIXED ( DEC | DECIMAL )

<PL/I type fixed binary> ::=
      ( BIN | BINARY ) FIXED
    | FIXED ( BIN | BINARY )

<PL/I type float binary> ::=
      ( BIN | BINARY ) FLOAT
    | FLOAT ( BIN | BINARY )

<embedded SQL end declare> ::=
    <SQL prefix> END DECLARE SECTION
        [ <SQL terminator> ]

<embedded SQL MUMPS declare> ::=
    <SQL prefix>
      BEGIN DECLARE SECTION
        [ <embedded character set declaration> ]
        [ <host variable definition>... ]
      END DECLARE SECTION
    <SQL terminator>

<embedded SQL statement> ::=
    <SQL prefix>
      <statement or declaration>
    [ <SQL terminator> ]

<statement or declaration> ::=
      <declare cursor>
    | <dynamic declare cursor>
    | <temporary table declaration>
    | <embedded exception declaration>
    | <SQL procedure statement>

<embedded exception declaration> ::=
    WHENEVER <condition> <condition action>

<condition> ::=
    SQLERROR | NOT FOUND

<condition action> ::=
    CONTINUE | <go to>

<go to> ::=
    ( GOTO | GO TO ) <goto target>

<goto target> ::=
      <host label identifier>
    | <unsigned integer>
    | <host PL/I label variable>

<host label identifier> ::= !!<EMPHASIS>¡]°Ñ¬Ý¤åªk³W«h¡^

<host PL/I label variable> ::= !!<EMPHASIS>¡]°Ñ¬Ý¤åªk³W«h¡^

<preparable statement> ::=
      <preparable SQL data statement>
    | <preparable SQL schema statement>
    | <preparable SQL transaction statement>
    | <preparable SQL session statement>
    | <preparable implementation-defined statement>

<preparable SQL data statement> ::=
      <delete statement: searched>
    | <dynamic single row select statement>
    | <insert statement>
    | <dynamic select statement>
    | <update statement: searched>
    | <preparable dynamic delete statement: positioned>
    | <preparable dynamic update statement: positioned>

<dynamic single row select statement> ::= <query specification>

<dynamic select statement> ::= <cursor specification>

<preparable dynamic delete statement: positioned> ::=
   DELETE [ FROM <table name> ]
      WHERE CURRENT OF <cursor name>

<preparable dynamic update statement: positioned> ::=
   UPDATE [ <table name> ]
      SET <set clause list>
      WHERE CURRENT OF <cursor name>

<preparable SQL schema statement> ::=
      <SQL schema statement>

<preparable SQL transaction statement> ::=
      <SQL transaction statement>

<preparable SQL session statement> ::=
      <SQL session statement>

<preparable implementation-defined statement> ::=
    !! <EMPHASIS>(See the Syntax Rules.)

<direct SQL statement> ::=
    <directly executable statement> <semicolon>

<directly executable statement> ::=
      <direct SQL data statement>
    | <SQL schema statement>
    | <SQL transaction statement>
    | <SQL connection statement>
    | <SQL session statement>
    | <direct implementation-defined statement>

<direct SQL data statement> ::=
      <delete statement: searched>
    | <direct select statement: multiple rows>
    | <insert statement>
    | <update statement: searched>
    | <temporary table declaration>

<direct select statement: multiple rows> ::=
    <query expression> [ <order by clause> ]

<direct implementation-defined statement> ::=
    !!<EMPHASIS>(See the Syntax Rules)

<SQL object identifier> ::=
    <SQL provenance> <SQL variant>

<SQL provenance> ::= <arc1> <arc2> <arc3>

<arc1> ::= iso | 1 | iso <left paren> 1 <right paren>

<arc2> ::= standard | 0 | standard <left paren> 0 <right paren>

<arc3> ::= 9075

<SQL variant> ::= <SQL edition> <SQL conformance>

<SQL edition> ::= <1987> | <1989> | <1992>

<1987> ::= 0 | edition1987 <left paren> 0 <right paren>

<1989> ::= <1989 base> <1989 package>

<1989 base> ::= 1 | edition1989 <left paren> 1 <right paren>

<1989 package> ::= <integrity no> | <integrity yes>

<integrity no> ::= 0 | IntegrityNo <left paren> 0 <right paren>

<integrity yes> ::= 1 | IntegrityYes <left paren> 1 <right paren>

<1992> ::= 2 | edition1992 <left paren> 2 <right paren>

<SQL conformance> ::= <low> | <intermediate> | <high>

<low> ::= 0 | Low <left paren> 0 <right paren>

<intermediate> ::= 1 | Intermediate <left paren> 1 <right paren>

<high> ::= 2 | High <left paren> 2 <right paren>

38. ªþ¿ý¤A¡Xªì¾ÇªÌ SQL ¾É¤Þ

38.1 PostgreSQL ¾É¤Þ

   SQL ¾É¤Þ¤]¥]§t¦b PostgreSQL ¤¤´²§G¡CSQL ¾É¤Þ¤â½Z¦b src/tutorial ¥Ø¿ý¤¤
   ¡C
   
38.2 ¤¬Ápºô URL «ü¼Ð

   ªì¾ÇªÌªº SQL ¾É¤Þ¥i¦b¥H¤U¦a¤è§ä¨ì
     * Jim Hoffman ªº«ü¾É [419]http://w3.one.net/~jhoffman/sqltut.htm
     * Carnegie Mellon Univ [420]http://www.heinz.cmu.edu/project/dbms ¦b
       ¦¹À»¿ï¡¥technical¡¦->¡¥SQL_examples.html¡¦©M¨ä¥L¡C
     * Concord Univ
       [421]http://www.cs.concordia.ca/Course_Notes/oracle/browser/node1.
       html
       
   ¦³·N¨£©ÎºÃÃø¡H¹q¶l¦Ü
     * Jim Hoffman [422]jhoffman@one.net
       
   John Hoffman ¤]±ÀÂË¥H¤Uºô§}¡J
     * SQL Reference
       [423]http://www.contrib.andrew.cmu.edu/~shadow/sql.html
     * Ask the SQL Pro [424]http://www.inquiry.com/techtips/thesqlpro/
     * SQL Pro's Relational DB Useful Sites
       [425]http://www.inquiry.com/techtips/thesqlpro/usefulsites.html
     * Programmer's Source
       [426]http://infoweb.magi.com/~steve/develop.html
     * DBMS Sites [427]http://info.itu.ch/special/wwwfiles ¨ì¦¹¨ú±o
       compdb.html ÀÉ
     * DB Ingredients [428]http://www.compapp.dcu.ie/databases/f017.html
     * Web Authoring [429]http://www.stars.com/Tutorial/CGI/
     * Computing Dictionary
       [430]http://wfn-shop.princeton.edu/cgi-bin/foldoc
     * DBMS Lab/Links [431]http://www-ccs.cs.umass.edu/db.html
     * SQL FAQ
       [432]http://epoch.CS.Berkeley.EDU:8000/sequoia/dba/montage/FAQ Go
       here and see file SQL_TOC.html
     * SQL Databases
       [433]http://chaos.mur.csu.edu.au/itc125/cgi/sqldb.html
     * RIT Database Design Page
       [434]http://www.it.rit.edu/~wjs/IT/199602/icsa720/icsa720postings.
       html
     * Database Jump Site [435]http://www.pcslink.com/~ej/dbweb.html
     * Programming Tutorials on the Web
       [436]http://www.eng.uc.edu/~jtilley/tutorial.html
     * Development Resources
       [437]http://www.ndev.com/ndc2/support/resources.htp
     * Query List [438]http://ashok.pair.com/sql.htm
     * IMAGE SQL Miscellaneous
       [439]http://jazz.external.hp.com/training/sqltables/main.html
     * Internet Resource List
       [440]http://www.eit.com/web/netservices.html
       
38.3 ½u¤W SQL «ü¾É

   ¨ì¥H¤Uºô­¶¨ú±o½u¤W SQL «ü¾É
     * SQL ªì¾Ç½Òµ{ [441]http://sqlcourse.com
     * SQL ¶i¶¥½Òµ{ [442]http://sqlcourse2.com
       
39. ªþ¿ý¤þ¡XLinux §Ö³t¦w¸Ë«ü¤Þ

   ¦pªG§A­p¹º¦b Linux ¨Ï¥Î PostgreSQL¡A¦Ó¦b¦w¸Ë Linux ®É»Ý­nÀ°§U¡A½Ð°Ñ¦Ò¦b
   ³oªþ¿ý¤¤«ü¥Üªº¦a¤è¡C¥¦­Ì¥]§t¥H¤U¥DÃD¡J
     * Salient Features of Linux - Why Linux is better as a database
       server when compared with Windows 95/NT
     * 10 minutes Linux Quick Install Instructions
     * Microsoft-Linux Analogy List
     * Quick Steps to Recompile the Linux Kernel
       
     * ¥Dºô­¶ [443]http://www.aldev.8m.com
     * ¬M®g¯¸¥x [444]http://aldev.webjump.com
     * ¬M®g¯¸¥x [445]http://www.homepages.infoseek.com/~aldev1/index.html
     * ¬M®g¯¸¥x [446]http://www3.bcity.com/aldev/
     * ¬M®g¯¸¥x [447]http://www.members.spree.com/technology/aldev/
       
40. ªþ¿ý¤B¡X¦w¸Ë Midgard

   ¨Ó¦Û [448]http://www.midgard-project.org/download/binaries ªº RPMS ¥Ø«e
   ¤£¥]¬A PostgreSQL ¤ä´©¡A©Ò¥H§A­n±q­ì©l½X tar.gz Àɦw¸Ë¡C
   
   ¤U¸ü Midgard ­ì©l½X tar.gz ÀÉ¡A¾\Ū INSTALL.REDHAT ÀÉ¡X
     _________________________________________________________________
   
bash# cd midgard-lib-1.4beta6
bash# ./configure --prefix=/usr/local --with-mysql=/usr/local --includedir=/usr
/include/mysql --with-midgard=/usr/local --with-pgsql=/var/lib/pgsql --included
ir=/usr/include/pgsql
bash# make
bash# make install
bash# ldconfig -v | grep -i midga
«þ¨©ìøÀYÀÉ¡A¥H¨¾ make install ¤£³o¼Ë°µ¡K
bash# cp *.h /usr/local/include


bash# cd ../mod_midgard-1.4beta5c
bash# ./configure --prefix=/usr/local --with-mysql=/usr/local --includedir=/usr
/include/mysql --with-midgard=/usr --with-pgsql=/var/lib/pgsql --includedir=/us
r/include/pgsql
bash# make
bash# make install
# ­×§ï apache ³]©w¬° /usr/¡K¡K
#modify apache line to correct /usr/.....
bash# vi /etc/httpd/conf/httpd.conf   ¡]©Î¦b  /etc/apache/httpd.conf¡^
bash# /etc/init.d/apache restart
# ­A­«·s±Ò°Ê apache¡I¡I¡I

bash# cd ../midgard-php-1.4beta6
bash# ./configure '--with-apxs' '--with-mysql' '--with-pgsql' '--with-midgard'
--prefix=/usr/local --with-midgard=/usr/local

bash# gvim Makefile
¦b INCLUDE ÅܼƤ¤¥[¤W -I/usr/include/pgsql¡C

¤]­n¦p¤U¦b $(APXS) «ü¥O¤¤¥[¤W $(INCLUDE)¡X

libphp3.so: mod_php3.c libmodphp3-so.a  pcrelib/libpcre.a midgard/libphpmidgard
.a
    -@test -f ./mod_php3.c || test -L ./mod_php3.c || $(LN_S) $(srcdir)/mod_php
3.c ./mod_php3.c
    -@test -f ./mod_php3.c || test -h ./mod_php3.c || $(LN_S) $(srcdir)/mod_php
3.c ./mod_php3.c
    $(APXS) -c -o libphp3.so  -I$(srcdir) $(INCLUDE) -I. -I/usr/local/include -
I/usr/lib/glib/include  -Wl,'-rpath /usr/local/lib' ./mod_php3.c libmodphp3-so.
a
$(APXS_LDFLAGS)

bash# make
bash# make install
# ­×§ï apache ³]©w¬° /usr/¡K¡K
# ¥[¤W¦p¤U¼Æ¦æ¡X
    LoadModule php4_module        modules/libphp4.so
            AddModule mod_php4.c
    LoadModule php4_module        lib/apache/libphp4.so

    <IfModule mod_php4.c>
        AddType application/x-httpd-php4 .php4
        AddType application/x-httpd-php4 .php
        AddType application/x-httpd-php4-source .phps
        AddType application/x-httpd-php .php
    </IfModule>

bash# vi /etc/httpd/conf/httpd.conf   ¡]©Î¦b /etc/apache/httpd.conf¡^

bash# /etc/init.d/apache restart
# ­n­«·s±Ò°Ê apache¡I¡I¡I
     _________________________________________________________________
   
40.1 ´ú¸Õ Midgard PHP ¦øªA¾¹

   ­n´ú¸Õ¦w¸Ë¬O§_¦¨¥\½Ð³o¼Ë°µ¡X ¦b§Aªº¤å¥ó®Ú¥Ø¿ý¤¤«Ø¥ß¤@­ÓÀɮסC§Ú³q±`ºÙ¥¦
   ¬° info.php¡A¨Ã¦b¨ä¶¡¥[¤W¤@¦æ¡J
     _________________________________________________________________
   
<?phpinfo()?>
     _________________________________________________________________
   
   ¦b§AªºÂsÄý¾¹¤¤¸ü¤J¡Jhttp://localhost/info.php
   
   §A·|¨£¨ì¤@­¶º}«GªºÕp­n¡A¦C¥X§Aªº³]©w¤¤©Ò¦³¸ê®Æ¡C §A¤j·§¤£·|§â³oÀɮשñ¦b
   ¦b¥Í²£¥Îªº¦øªA¾¹¤¤¡A¦ý¬°¤F¶}µo®É°£¿ù©M¤@¯ë¸ê®Æ¡A ¥¦·|«Ü¤è«K¡C
   
40.2 «O¦w OpenSSL

   §A¥i¯à­n¦b
   [449]ftp://ftp.deva.net/pub/sources/crypto/rsaref20.1996.tar.Z ¨ú¦æ
   RSA ®M¸Ë³n¥ó¥H±Ò¥Î SSL ¥[±K¡C¤]½Ð¬Ý¬Ý Linux ¥úºÐªº OpenSSL
   [450]http://www.openssl.org¡C
   
   ¦pªG§A¤£·Q±Ò°Ê SSL¡]©Î§A¹J¨ì§xÃø¡^¡A¤U¸ü­ì©l½X Apache-Midgard RPM ©M­×
   §ï *.spec ÀÉ©M§R¥h SSL¡A¦A­«¨£ RPM¡C

References

   1. mailto:alavoor@yahoo.com
   2. mailto:a9504480@graduate.hku.hk
   3. mailto:scrappy@postgreSQL.org
   4. http://www.greatbridge.com/
   5. http://www.aldev.8m.com/
   6. http://aldev.webjump.com/
   7. http://www.devshed.com/BrainDump/MySQL_Benchmarks/
   8. http://www.tcx.se/
   9. http://www.lsl.com/
  10. http://www.cheapbytes.com/
  11. http://www.debian.org/vendors.html
  12. http://www.postgresql.org/
  13. mailto:lamar.owen@wgcr.org
  14. http://www.ramifordistat.net/postgres
  15. http://www.postgresql.org/
  16. http://www.redhat.com/pub/contrib/i386/
  17. ftp://ftp.redhat.com/pub/contrib/i386/
  18. ftp://ftp.postgresql.org/pub/bindist
  19. http://www.postgresql.org/
  20. http://logical.thought.net/postgres95/
  21. http://www.itm.tu-clausthal.de/mirrors/postgres95/
  22. http://s2k-ftp.cs.berkeley.edu:8000/postgres95/
  23. http://xenium.pdi.net/PostgreSQL/
  24. http://s2k-ftp.cs.berkeley.edu:8000/postgres95/
  25. ftp://ftp.postgresql.org/pub
  26. ftp://ftp.chicks.net/pub/postgresql
  27. ftp://ftp.emsi.priv.at/pub/postgres/
  28. ftp://ftp.itm.tu-clausthal.de/pub/mirrors/postgres95
  29. ftp://rocker.sch.bme.hu/pub/mirrors/postgreSQL
  30. ftp://ftp.jaist.ac.jp/pub/dbms/postgres95
  31. ftp://ftp.luga.or.at/pub/postgres95
  32. ftp://postgres95.vnet.net/pub/postgres95
  33. ftp://ftpza.co.za/mirrors/postgres
  34. ftp://sunsite.auc.dk/pub/databases/postgresql
  35. ftp://ftp.task.gda.pl/pub/software/postgresql
  36. ftp://xenium.pdi.net/pub/PostgreSQL
  37. ftp://sunsite.unc.edu/
  38. http://www.ramifordistat.net/postgres
  39. mailto:lamar.owen@wgcr.org
  40. http://www.postgresql.org/
  41. http://www.RPM.org/
  42. http://www.aldev.8m.com/
  43. http://aldev.webjump.com/
  44. file://localhost/tmp/zh-sgmltools.5381/PostgreSQL-HOWTO.txt.html#Examples RPM
  45. file://localhost/tmp/zh-sgmltools.5381/PostgreSQL-HOWTO.txt.html#Examples RPM
  46. file://localhost/tmp/zh-sgmltools.5381/PostgreSQL-HOWTO.txt.html#Examples RPM
  47. file://localhost/tmp/zh-sgmltools.5381/PostgreSQL-HOWTO.txt.html#Examples RPM
  48. ftp://ftp.redhat.com/pub/contrib/i386
  49. http://www.blackdown.org/
  50. ftp://ftp.redhat.com/pub/contrib/i386
  51. file://localhost/tmp/zh-sgmltools.5381/PostgreSQL-HOWTO.txt.html#Examples RPM
  52. file://localhost/tmp/zh-sgmltools.5381/PostgreSQL-HOWTO.txt.html#Examples RPM
  53. http://www.insightdist.com/psqlodbc/
  54. http://www.mutinybaysoftware.com/
  55. ftp://ftp.postgresql.org/pub/patches
  56. file://localhost/tmp/zh-sgmltools.5381/PostgreSQL-HOWTO.txt.html#Quick-Installation
  57. file://localhost/tmp/zh-sgmltools.5381/PostgreSQL-HOWTO.txt.html#backup_restore
  58. file://localhost/tmp/zh-sgmltools.5381/PostgreSQL-HOWTO.txt.html#security
  59. file://localhost/tmp/zh-sgmltools.5381/PostgreSQL-HOWTO.txt.html#Examples RPM
  60. file://localhost/tmp/zh-sgmltools.5381/PostgreSQL-HOWTO.txt.html#auth_method
  61. http://www.heimhardt.de/htdocs/ssh.html
  62. file://localhost/tmp/zh-sgmltools.5381/PostgreSQL-HOWTO.txt.html#Enhydra
  63. file://localhost/tmp/zh-sgmltools.5381/PostgreSQL-HOWTO.txt.html#Zope
  64. file://localhost/tmp/zh-sgmltools.5381/PostgreSQL-HOWTO.txt.html#OpenACS
  65. file://localhost/tmp/zh-sgmltools.5381/PostgreSQL-HOWTO.txt.html#PHP
  66. file://localhost/tmp/zh-sgmltools.5381/PostgreSQL-HOWTO.txt.html#Enhydra
  67. http://www.inprise.com/
  68. file://localhost/tmp/zh-sgmltools.5381/PostgreSQL-HOWTO.txt.html#Zope
  69. file://localhost/tmp/zh-sgmltools.5381/PostgreSQL-HOWTO.txt.html#OpenACS
  70. file://localhost/tmp/zh-sgmltools.5381/PostgreSQL-HOWTO.txt.html#PHP
  71. http://www.ist.co.uk/xd
  72. http://www.troll.no/
  73. ftp://ftp.troll.no/
  74. http://www.kaze.stetson.edu/cdevel/code_crusader/about.html
  75. http://www.metrowerks.com/
  76. http://www.redhat.com/
  77. http://www.cygnus.com/
  78. http://www.inprise.com/
  79. http://www.inprise.com/
  80. file://localhost/tmp/zh-sgmltools.5381/PostgreSQL-HOWTO.txt.html#Perl Database Interface
  81. ftp://ftp.redhat.com/pub/contrib/i386/lesstif*.rpm
  82. http://www.LinuxMall.com/products/00487.html
  83. ftp://ftp.redhat.com/pub/contrib/i386/jcc*.rpm
  84. http://www.scriptics.com/
  85. http://www.tcltk.com/
  86. http://www.neuron.com/
  87. ftp://ftp.redhat.com/pub/contrib/i386/visualtcl*.rpm
  88. http://sunscript.sun.com/
  89. http://sunscript.sun.com/TclTkCore/
  90. ftp://ftp.sunlabs.com/pub/tcl/tcl8.0a2.tar.Z
  91. ftp://ftp.redhat.com/pub/contrib/i386/free*.rpm
  92. ftp://ftp.redhat.com/pub/contrib/i386/spec*.rpm
  93. http://www.man.ac.uk/~whaley/kj/kanch.html
  94. http://www.redhat.com/
  95. http://www.identicalsoftware.com/xwpe/
  96. ftp://ftp.rpi.edu/~payned/xwpe
  97. ftp://ftp.redhat.com/pub/contrib/i386/xwpe*.rpm
  98. ftp://ftp.redhat.com/pub/contrib/i386/xwb*.rpm
  99. ftp://ftp.redhat.com/pub/contrib/i386/nedit*.rpm
 100. http://www.insightdist.com/psqlodbc
 101. http://www.postgresql.org/
 102. http://www.iodbc.org/
 103. http://www.openlinksw.com/
 104. http://www.insightdist.com/psqlodbc
 105. http://www.ids.net/~bjepson/freeODBC/
 106. http://members.nbci.com/anhr
 107. http://www.openlinksw.com/
 108. http://www.demon.co.uk/finder/postgres/index.html
 109. ftp://ftp.ai.mit.edu/people/rst/rst-jdbc.tar.gz
 110. http://www.openlinksw.com/
 111. http://www.retep.org.uk/postgres
 112. http://eagle.eku.edu/tools/jdbc/faq.html
 113. http://splash.javasoft.com/jdbc
 114. http://www.javasoft.com/products/jdk/1.1/docs/guide/jdbc
 115. http://javanese.yoyoweb.com/JDBC/FAQ.txt
 116. file://localhost/tmp/zh-sgmltools.5381/PostgreSQL-HOWTO.txt.html#Testing Java
 117. ftp://ftp.redhat.com/pub/contrib/i386
 118. http://www.blackdown.org/
 119. file://localhost/tmp/zh-sgmltools.5381/PostgreSQL-HOWTO.txt.html#Testing Java
 120. mailto:E.Mergl@bawue.de
 121. http://www.perl.com/perl/index.html
 122. http://reference.perl.com/
 123. http://www.yahoo.com/Computers_and_Internet/Programming_Languages/Perl/
 124. http://www.perl.com/CPAN/modules/by-module/CPAN
 125. http://www.perl.com/CPAN-local/modules/by-module
 126. ftp://ftp.redhat.com/pub/contrib/i386
 127. http://www.accessone.com/~jql/perlqt.html
 128. ftp://ftp.redhat.com/pub/contrib/i386
 129. ftp://ftp.redhat.com/pub/contrib/i386
 130. http://reference.perl.com/query.cgi?ui
 131. http://reference.perl.com/query.cgi?database
 132. http://www.perl.com/CPAN-local/modules/by-module/B/
 133. http://www.indigostar.com/perl2exe.htm
 134. http://www.perl.com/CPAN/authors/id/MERLYN/sh2perl-0.02.tar.gz
 135. http://www.perl.com/CPAN/modules/by-module/CPAN
 136. http://www.perl.com/CPAN-local/modules/by-module
 137. http://www.perl.com/CPAN-local/modules/by-module/DBI
 138. http://www.symbolstone.org/technology/perl/DBI
 139. http://www.symbolstone.org/technology/perl/DBI/doc/faq.html
 140. http://www.symbolstone.org/technology/perl/DBI
 141. http://www.fugue.com/dbi
 142. http://www.perl.com/reference/query.cgi?section=database
 143. http://rpmfind.net/linux/rpm2html/search.php?query=DBI
 144. http://www.perl.com/CPAN/modules/by-module/CPAN
 145. http://www.perl.com/CPAN-local/modules/by-module
 146. http://www.perl.com/CPAN-local/modules/by-module/DBD
 147. http://www.perl.com/CPAN/modules/by-module/DBD
 148. http://www.perl.com/CPAN
 149. http://www.edmund-mergl.de/export/DBD-Pg.zip
 150. http://rpmfind.net/linux/rpm2html/search.php?query=DBD
 151. http://www.perl.com/CPAN-local/modules/by-module
 152. mailto:E.Mergl@bawue.de
 153. http://www.symbolstone.org/technology/perl/DBI/tidbits
 154. http://www.tpj.com/
 155. http://www.fugue.com/dbi
 156. mailto:dbi-announce-request@fugue.com
 157. mailto:dbi-dev-request@fugue.com
 158. mailto:dbi-users-request@fugue.com
 159. http://outside.organic.com/mail-archives/dbi-users/
 160. http://www.rosat.mpe-garching.mpg.de/mailing-lists/PerlDB-Interest
 161. http://www.symbolstone.org/technology/perl/DBI
 162. http://www.roth.net/
 163. http://www.algonet.se/~sommar/mssql
 164. http://www.perlclinic.com/
 165. http://www.perldirect.com/
 166. http://www.westlake.com/training
 167. file://localhost/tmp/zh-sgmltools.5381/PostgreSQL-HOWTO.txt.html#Testing Perl
 168. http://www.flex.ro/pgaccess
 169. mailto:teo@flex.ro
 170. http://gtksql.sourceforge.net/
 171. https://sourceforge.net/project/?form_grp=533
 172. http://www.troubador.com/~keidav/index.html
 173. mailto:keidav@whidbey.com
 174. http://www.ucolick.org/~de/
 175. http://www.troubador.com/~keidav/index.html
 176. mailto:de@ucolick.org
 177. http://www.mutinybaysoftware.com/
 178. mailto:keidav@mutinybaysoftware.com
 179. http://www.troubador.com/~keidav/index.html
 180. mailto:keidav@whidbey.com
 181. http://www.ucolick.org/~de
 182. http://www.ucolick.org/~de/Tcl/pictures
 183. mailto:de@ucolick.org
 184. http://www.pgadmin.freeserve.co.uk/
 185. http://www.phpwizard.net/projects/phpPgAdmin
 186. http://www.psn.co.jp/PostgreSQL/pgbash/index-e.html
 187. http://www.webmin.com/webmin
 188. http://metalab.unc.edu/LDP/HOWTO/CPU-Design-HOWTO.html
 189. http://directory.google.com/Top/Computers/Hardware/Components/Microprocessors
 190. http://directory.google.com/Top/Computers/Hardware/Open_Source
 191. http://www.opencores.org/cores/or1k
 192. http://www.opencores.org/
 193. http://www.estec.esa.nl/wsmwww/leon
 194. http://www.f-cpu.org/
 195. http://f-cpu.tux.org/
 196. http://www.f-cpu.de/
 197. http://www.asahi-net.or.jp/~uf8e-itu
 198. http://www.cmosexod.com/
 199. http://www.scrap.de/html/opencore.htm
 200. http://www.opencores.org/
 201. http://opencollector.org/
 202. http://www.arm.com/Documentation
 203. http://www.cogcomp.com/
 204. http://www.elbrus.ru/roadmap/e2k.html
 205. http://www.samsungsemi.com/
 206. http://www.alpha-processor.com/
 207. http://developer.intel.com/design/ia-64
 208. http://www.transmeta.com/
 209. http://www.sun.com/
 210. http://www.sunmicrosystems.com/
 211. http://www.mips.com/
 212. http://www.sgi.com/processors
 213. http://www.idt.com/
 214. http://www.motorola.com/SPS/PowerPC/index.html
 215. http://www.mot-sps.com/
 216. http://www.mot-sps.com/
 217. http://www.hitachi.com/
 218. http://www.fujitsu.com/
 219. http://www.hal.com/
 220. http://www.newsnow.co.uk/cgi/NewsNow/NewsLink.htm?Theme=Processors
 221. http://www.cs.wisc.edu/~arch/www
 222. http://www.arm.com/Documentation
 223. http://www.cs.uregina.ca/~bayko/cpu.html
 224. http://www.mdronline.com/
 225. http://www.uk.research.att.com/vnc
 226. http://www.warehouse.com/
 227. http://www.networktechinc.com/servswt.html
 228. http://www.scene.demon.co.uk/qswitch.htm
 229. http://www.cybex.com/
 230. http://www.raritan.com/
 231. http://www.real-star.com/kvm.htm
 232. http://www.belkin.com/
 233. http://www.betterbox.com/info.html
 234. http://www.egghead.com/
 235. http://www.buy.com/
 236. http://www.ubid.com/
 237. http://www.lsl.com/
 238. http://www.cheapbytes.com/
 239. http://www.c2.net/products/sh3
 240. http://www.indigostar.com/perl2exe.htm
 241. http://www.masonhq.com/
 242. http://opensource.cnation.com/projects/BingoX
 243. http://www.smartworker.org/
 244. http://perl.apache.org/
 245. http://modperl.sourcegarden.org/
 246. http://www.apache-asp.org/
 247. http://www.wirm.org/
 248. http://perl.apache.org/embperl
 249. http://www.engelschall.com/sw/eperl
 250. http://opensource.cnation.com/projects/XPP
 251. http://gamla.iglu.org.il/
 252. http://www.axkit.org/
 253. http://www.zelerate.org/html/eng/home.shtml
 254. http://www.binevolve.com/velocigen
 255. http://www.midgard-project.org/
 256. http://www.zend.com/
 257. file://localhost/tmp/zh-sgmltools.5381/PostgreSQL-HOWTO.txt.html#midgardinstall
 258. http://www.linuxdoc.org/HOWTO/PHP-HOWTO.html
 259. http://www.muze.nl/software/ariadne
 260. http://www.enhydra.org/
 261. http://www.lutris.com/
 262. http://www.enhydra.org/software/documentation/enhydra/NewApp-DODS-Tutorial-PGSQL.html
 263. http://www.enhydra.org/software/documentation/enhydra/Enhydra-NewApp-DODS-Tutorial.htm
 264. http://www.inprise.com/
 265. http://www.linuxdoc.org/HOWTO/Enterprise-Java-for-Linux-HOWTO.html
 266. http://www.zope.org/
 267. http://www.python.org/
 268. http://openacs.org/
 269. http://www.arsdigita.com/
 270. http://www.appserver-zone.com/
 271. http://www.portalsphere.com/overview.html
 272. http://www.bouldersoftware.com/products/flashpoint
 273. http://www.bouldersoftware.com/products/flashpoint/download.html
 274. http://cserverpages.20m.com/
 275. http://198.85.71.76/html.html
 276. http://www.man.ac.uk/~whaley/ag/appgen.html
 277. ftp://ftp.mcc.ac.uk/pub/linux/ALPHA/AppGEN
 278. mailto:andrew@arthur.smuht.nwest.nhs.uk
 279. http://www.cis-computer.com/software/dbengine/
 280. http://www.neosoft.com/neowebscript/
 281. mailto:emmel@h-e-i.de
 282. http://www.heitml.com/
 283. http://www.h-e-i.deom/
 284. http://www.aolserver.com/
 285. http://photo.net/wtr/aolserver/introduction-1.html
 286. http://www.homeport.org/~shevett/pts/
 287. ftp://ftp.nerosworld.com/pub/SQL/dbf2sql/
 288. ftp://ftp.postgresql.org/pub/incoming/dbf2pg-3.0.tar.gz
 289. mailto:M.Boekhold@et.tudelft.nl
 290. http://www.python.org/
 291. http://mdbtools.sourceforge.net/
 292. http://lists.sourceforge.net/mailman/listinfo/mdbtools-dev
 293. http://www.zeos.dn.ua/eng/index.html
 294. http://www.geocities.com/SiliconValley/Ridge/4280/GenericReportWriter/grwhome.html
 295. http://www.heraut.demon.nl/dezign/index.html
 296. http://www.heraut.demon.nl/
 297. http://www.oswego.edu/Earp
 298. ftp://ftp.oswego.edu/
 299. ftp://ftp.oswego.edu/
 300. http://www.php.net/
 301. http://www.vex.net/php
 302. http://www.fe.de.php.net/
 303. http://www.sk.php.net/
 304. http://php.iquest.net/
 305. mailto:rasmus@lerdorf.on.ca
 306. mailto:asussman@vidya.com
 307. http://www.php.net/
 308. mailto:angio@aros.net
 309. ftp://ftp.aros.net/pub/util/apache/mod_cgi_redirect.c
 310. http://sptl.org/phpgem
 311. http://www.druid.net/pygresql/
 312. http://www.druid.net/~darcy/
 313. ftp://ftp.via.ecp.fr/pub/python/contrib/Database/PyGres95.README
 314. mailto:darcy@druid.net
 315. mailto:andre@chimay.via.ecp.fr
 316. mailto:andre@via.ecp.fr
 317. ftp://ftp.python.org/pub/www.python.org/1.5/python1.5b2.tar.gz
 318. ftp://ftp.druid.net/pub/distrib/PyGreSQL-2.1.tgz
 319. ftp://ftp.via.ecp.fr/pub/python/contrib/Database/PyGres95-1.0b.tar.gz
 320. http://www.python.org/
 321. http://epoch.cs.berkeley.edu:8000/postgres95/index.html
 322. ftp://ftp.druid.net/pub/distrib/PyGreSQL-2.1.tgz
 323. http://www.via.ecp.fr/via/products/pygres.html
 324. mailto:majordomo@vex.net
 325. mailto:andre@via.ecp.fr
 326. file://localhost/tmp/zh-sgmltools.5381/PostgreSQL-HOWTO.txt.html#Testing PyGreSQL
 327. http://www.lava.net/beowulf/programming/wdb
 328. http://www.eol.ists.ca/~dunlop/wdb-p95/
 329. mailto:dunlop@eol.ists.ca
 330. file://localhost/tmp/zh-sgmltools.5381/PostgreSQL-HOWTO.txt.html#Testing libpq
 331. ftp://ftp.lysator.liu.se/pub/linus
 332. mailto:linus@epact.se
 333. file://localhost/tmp/zh-sgmltools.5381/PostgreSQL-HOWTO.txt.html#Testing ecpg
 334. http://metalab.unc.edu/LDP/HOWTO/Vim-HOWTO.html
 335. mailto:nico@overnet.com.ar
 336. ftp://ftp.overnet.com.ar/pub/utils/linux/bitpgsql.tgz
 337. ftp://ftp.sra.co.jp/pub/cmd/postgres/
 338. http://www.askesis.nl/
 339. http://www.postgresql.org/
 340. file://localhost/tmp/zh-sgmltools.5381/PostgreSQL-HOWTO.txt.html#installpgsql
 341. http://www.cygnus.com/misc/gnu-win32
 342. http://sourceware.cygnus.com/
 343. mailto:horak@mmp.plzen-city.cz
 344. mailto:JKraaijeveld@askesis.nl
 345. mailto:kevlo@FreeBSD.org
 346. http://www.freebsd.org/~kevlo/postgres/portNT.html
 347. ftp://go.cygnus.com/pub/sourceware.cygnus.com/cygwin/latest/full.exe
 348. http://metalab.unc.edu/LDP/HOWTO/Vim-HOWTO.html
 349. ftp://ftp.xemacs.org/pub/xemacs/aux/
 350. http://www.multione.capgemini.fr/tools/pack_ipc
 351. http://www.yahoo.com/
 352. http://www.lycos.com/
 353. http://www.hotmail.com/
 354. http://www.postgresql.org/
 355. mailto:pgsql-questions@postgresql.org
 356. mailto:pgsql-hackers@postgresql.org
 357. mailto:pgsql-ports@postgresql.org
 358. mailto:pgsql-docs@postgresql.org
 359. mailto:pgsql-questions-request@postgresql.org
 360. mailto:pgsql-hackers-request@postgresql.org
 361. mailto:pgsql-ports-request@postgresql.org
 362. mailto:pgsql-docs-request@postgresql.org
 363. http://www.postgresql.org/mhonarc/pgsql-questions
 364. ftp://ftp.postgresql.org/
 365. mailto:majordomo@tlali.iztacala.unam.mx
 366. http://www.postgresql.org/docs
 367. file://localhost/tmp/zh-sgmltools.5381/PostgreSQL-HOWTO.txt.html#Appendix B
 368. http://www.naiua.org/std-orgs.html
 369. http://www.ansi.org/docs
 370. http://www.jcc.com/
 371. http://www.contrib.andrew.cmu.edu/~shadow/sql.html
 372. file://localhost/tmp/zh-sgmltools.5381/PostgreSQL-HOWTO.txt.html#Appendix A
 373. file://localhost/tmp/zh-sgmltools.5381/PostgreSQL-HOWTO.txt.html#SQL 1998
 374. file://localhost/tmp/zh-sgmltools.5381/PostgreSQL-HOWTO.txt.html#Appendix B
 375. ftp://FTP.cs.arizona.edu/tsql/tsql2/
 376. ftp://FTP.cs.arizona.edu/tsql/tsql2/sql3/
 377. mailto:rts@cs.arizona.edu
 378. mailto:boehlen@iesd.auc.dk
 379. http://www.cs.auc.dk/general/DBS/tdb/TimeCenter/Software
 380. mailto:pgsql-questions@postgresql.org
 381. file://localhost/tmp/zh-sgmltools.5381/comp.databases.postgresql.general
 382. file://localhost/tmp/zh-sgmltools.5381/comp.databases.postgresql.hackers
 383. file://localhost/tmp/zh-sgmltools.5381/comp.databases.postgresql.doc
 384. file://localhost/tmp/zh-sgmltools.5381/comp.databases.postgresql.bugs
 385. file://localhost/tmp/zh-sgmltools.5381/linux.postgres
 386. http://www.postgresql.org/
 387. http://www.postresql.org/
 388. http://www.greatbridge.com/
 389. http://www.redhat.com/
 390. http://www.wgs.com/
 391. http://www.ac.com/
 392. http://www.caldera.com/tech-ref/linuxapps/linapps.html
 393. http://www.xnet.com/~blatura/linapps.shtml
 394. http://linas.org/linux/db.html
 395. mailto:linas@fc.net
 396. http://cuiwww.unige.ch/~scg/FreeDB/FreeDB.list.html
 397. http://www.hex.net/~cbbrowne/rdbms.html
 398. mailto:cbbrowne@hex.net
 399. http://SAL.KachinaTech.COM/H/1/
 400. http://SAL.KachinaTech.COM/H/2/
 401. http://SAL.KachinaTech.COM/H/3/
 402. http://bunny.cs.uiuc.edu/sigmod/databaseSoftware/
 403. http://www.postgresql.org/docs/faq-english.shtml
 404. ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO/other-formats/
 405. ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO
 406. ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO
 407. http://www.sgmltools.org/
 408. http://www.adobe.com/
 409. http://sunsite.unc.edu/LDP/HOWTO/PostgreSQL-HOWTO.html
 410. http://www.caldera.com/LDP/HOWTO/PostgreSQL-HOWTO.html
 411. http://www.WGS.com/LDP/HOWTO/PostgreSQL-HOWTO.html
 412. http://www.cc.gatech.edu/linux/LDP/HOWTO/PostgreSQL-HOWTO.html
 413. http://www.redhat.com/linux-info/ldp/HOWTO/PostgreSQL-HOWTO.html
 414. http://sunsite.unc.edu/LDP/hmirrors.html
 415. http://www.linux.org.tw/CLDP/HOWTO/
 416. http://www.linux.org.tw/CLDP/
 417. http://www.cs.wisc.edu/~ghost
 418. http://www.cs.wisc.edu/~ghost
 419. http://w3.one.net/~jhoffman/sqltut.htm
 420. http://www.heinz.cmu.edu/project/dbms
 421. http://www.cs.concordia.ca/Course_Notes/oracle/browser/node1.html
 422. mailto:jhoffman@one.net
 423. http://www.contrib.andrew.cmu.edu/~shadow/sql.html
 424. http://www.inquiry.com/techtips/thesqlpro/
 425. http://www.inquiry.com/techtips/thesqlpro/usefulsites.html
 426. http://infoweb.magi.com/~steve/develop.html
 427. http://info.itu.ch/special/wwwfiles
 428. http://www.compapp.dcu.ie/databases/f017.html
 429. http://www.stars.com/Tutorial/CGI/
 430. http://wfn-shop.princeton.edu/cgi-bin/foldoc
 431. http://www-ccs.cs.umass.edu/db.html
 432. http://epoch.CS.Berkeley.EDU:8000/sequoia/dba/montage/FAQ
 433. http://chaos.mur.csu.edu.au/itc125/cgi/sqldb.html
 434. http://www.it.rit.edu/~wjs/IT/199602/icsa720/icsa720postings.html
 435. http://www.pcslink.com/~ej/dbweb.html
 436. http://www.eng.uc.edu/~jtilley/tutorial.html
 437. http://www.ndev.com/ndc2/support/resources.htp
 438. http://ashok.pair.com/sql.htm
 439. http://jazz.external.hp.com/training/sqltables/main.html
 440. http://www.eit.com/web/netservices.html
 441. http://sqlcourse.com/
 442. http://sqlcourse2.com/
 443. http://www.aldev.8m.com/
 444. http://aldev.webjump.com/
 445. http://www.homepages.infoseek.com/~aldev1/index.html
 446. http://www3.bcity.com/aldev/
 447. http://www.members.spree.com/technology/aldev/
 448. http://www.midgard-project.org/download/binaries
 449. ftp://ftp.deva.net/pub/sources/crypto/rsaref20.1996.tar.Z
 450. http://www.openssl.org/