From 28ebe6b5d0ecafee14db78759ce906987532b704 Mon Sep 17 00:00:00 2001 From: Bruce Momjian <bruce@momjian.us> Date: Wed, 21 Feb 2007 16:42:36 +0000 Subject: [PATCH] Update Chinese FAQs to have two versions, a traditional Chinese version (Taiwan) and a Simplified version (China (PRC)). Backpatch to 8.2.X. Daojing.Zhou --- doc/{FAQ_chinese => FAQ_chinese_simp} | 11 +- doc/FAQ_chinese_trad | 793 +++++++++++++ ...FAQ_chinese.html => FAQ_chinese_simp.html} | 11 +- doc/src/FAQ/FAQ_chinese_trad.html | 1003 +++++++++++++++++ 4 files changed, 1813 insertions(+), 5 deletions(-) rename doc/{FAQ_chinese => FAQ_chinese_simp} (98%) create mode 100644 doc/FAQ_chinese_trad rename doc/src/FAQ/{FAQ_chinese.html => FAQ_chinese_simp.html} (96%) create mode 100644 doc/src/FAQ/FAQ_chinese_trad.html diff --git a/doc/FAQ_chinese b/doc/FAQ_chinese_simp similarity index 98% rename from doc/FAQ_chinese rename to doc/FAQ_chinese_simp index 43d46647592..fde161fa103 100644 --- a/doc/FAQ_chinese +++ b/doc/FAQ_chinese_simp @@ -1,8 +1,8 @@ PostgreSQL 常è§é®é¢ï¼FAQï¼ - æè¿æ´æ°ï¼2007 å¹´ 1 æ 5 æ¥ ææäº 15:40:20 EST - ä¸æçæè¿æ´æ°ï¼2007 å¹´ 1 æ 29 æ¥ ææä¸ 22:48:04 CST + æè¿æ´æ°ï¼2007 å¹´ 1 æ 30 æ¥ ææäº 17:37:01 EST + ä¸æçæè¿æ´æ°ï¼2007 å¹´ 2 æ 1 æ¥ ææå 12:55:04 CST ç®åç»´æ¤äººåï¼Bruce Momjian (pgman@candle.pha.pa.us) ä¸æçç»´æ¤äººåï¼Daojing.Zhouï¼doudou586@gmail.comï¼ @@ -29,6 +29,7 @@ 1.11)æåºè¯¥ææ ·å¦ä¹ SQL ï¼ 1.12)å¦ä½æ交补ä¸ææ¯å å¥å¼åéä¼ï¼ 1.13)PostgreSQL åå¶ä»æ°æ®åºç³»ç»æ¯èµ·æ¥å¦ä½ï¼ + 1.14)PostgreSQL å¯ä»¥å¤çæè¿å个å½å®¶å¤æ¶å¶çåååï¼ ç¨æ·å®¢æ·ç«¯é®é¢ @@ -317,6 +318,12 @@ æ们对任ä½ç¨éé½åè´¹ï¼åæ¬åç¨åéåç¨ç®çã ä½ å¯ä»¥ä¸å éå¶å°åä½ ç产åéå å¥æ们ç代ç ï¼é¤äºé£äºæ们å¨ä¸é¢çç æ声æé声æç BSDçæä¹å¤çå容ã + + 1.14) PostgreSQLå¯ä»¥å¤çæè¿å个å½å®¶å¤æ¶å¶çååå? + + PostgreSQL 8.0ä¹åççæ¬æ¯ä½¿ç¨æä½ç³»ç»ä¸ + çæ¶åºæ°æ®åºæ¥å¤çå¤æ¶å¶çä¿¡æ¯ï¼èª8.0çå以åççæ¬PostgreSQLä¼èªèº«å«æææ°çæ + ¶åºä¿¡æ¯ã _________________________________________________________________ ç¨æ·å®¢æ·ç«¯é®é¢ diff --git a/doc/FAQ_chinese_trad b/doc/FAQ_chinese_trad new file mode 100644 index 00000000000..b1908535777 --- /dev/null +++ b/doc/FAQ_chinese_trad @@ -0,0 +1,793 @@ + + PostgreSQL 常è¦åé¡ï¼FAQï¼ + + æè¿æ´æ°ï¼2007 å¹´ 2 æ 8 æ¥ ææäº 22:43:13 EST + ä¸æçæè¿æ´æ°ï¼2007 å¹´ 2 æ 12 æ¥ ææä¸ 12:00:04 CST + + ç¶åç¶è·äººå¡ï¼Bruce Momjian (pgman@candle.pha.pa.us) + æ£é«ä¸æçç¶è·äººå¡ï¼éæç(ChaoYi, Kuo)ï¼kuo.chaoyi@gmail.comï¼ + + æ¬ææªçææ°çæ¬å¯ä»¥å¨ + http://www.postgresql.org/files/documentation/faqs/FAQ.html æ¥çã + + èä½æ¥ç³»çµ±å¹³å°ç¸éçåé¡å¯å¨ http://www.postgresql.org/docs/faq/ + 裡æ¾å°çæ¡ã + _________________________________________________________________ + +常è¦åé¡ + + 1.1)PostgreSQL æ¯ä»éº¼ï¼è©²æ麼ç¼é³ï¼ + 1.2)誰æ§å¶å管çPostgreSQL ï¼ + 1.3)PostgreSQLççæ¬æ¯ä»éº¼ï¼ + 1.4)PostgreSQLå¯ä»¥éè¡å¨åªäºä½æ¥ç³»çµ±å¹³å°ä¸ï¼ + 1.5)æå¾åªè£¡è½å¾å°PostgreSQLï¼ + 1.6)ææ°çç PostgreSQL æ¯ä»éº¼ï¼ + 1.7)æå¾åªè£¡è½å¾å°å° PostgreSQL çæ¯æï¼ + 1.8)æå¦ä½æ交ä¸å BUG å ±åï¼ + 1.9)æå¦ä½ç解已ç¥ç BUG ææ«ç¼ºçåè½ï¼ + 1.10)è½å¤ ç²åçææ°ææªæåªäºï¼ + 1.11)ææ該æ樣å¸ç¿ SQL ï¼ + 1.12)å¦ä½æ交è£ä¸ææ¯å å¥éç¼éä¼ï¼ + 1.13)PostgreSQL åå¶ä»è³æ庫系統æ¯èµ·ä¾å¦ä½ï¼ + 1.14)PostgreSQL å¯ä»¥èçæè¿ååå家å¤æå¶çè®ååï¼ + +ç¨æ¶å®¢æ¶ç«¯åé¡ + + 2.1)æåå¯ä»¥ç¨ä»éº¼èªè¨å PostgreSQL é²è¡æºéï¼ + 2.2)æä»éº¼å·¥å·å¯ä»¥æ PostgreSQL ç¨æ¼ Web é é¢ï¼ + 2.3)PostgreSQL ææåå½¢ç¨æ¶çé¢(GUI)åï¼ + +系統管çåé¡ + + 3.1)ææ樣æè½æ PostgreSQL è£å¨ /usr/local/pgsql 以å¤çå°æ¹ï¼ + 3.2)æå¦ä½æ§å¶ä¾èªå¶ä»é»è¦çé£æ¥ï¼ + 3.3)ææ樣調æ´è³æ庫伺æå¨ä»¥ç²å¾æ´å¥½çæ§è½ï¼ + 3.4)PostgreSQL 裡å¯ä»¥ç²å¾ä»éº¼æ¨£ç調試ç¹æ§ï¼ + 3.5)çºä»éº¼å¨è©¦åé£æ¥ç»éææ¶å°ãSorry, too many clientsã è¨æ¯ï¼ + 3.6)PostgreSQL çåç´éç¨æåªäºå§å®¹ï¼ + 3.7)(ä½¿ç¨ PostgreSQL )æéè¦ä½¿ç¨ä»éº¼é»è¦ç¡¬é«ï¼ + +æä½åé¡ + + 4.1) å¦ä½åªé¸æä¸åæ¥è©¢çµæçé å¹¾è¡ï¼ææ¯é¨æ©çä¸è¡ï¼ + 4.2) å¦ä½æ¥ç表ãç´¢å¼ãè³æ庫以åç¨æ¶çå®ç¾©ï¼å¦ä½æ¥ç psql + 裡ç¨å°çæ¥è©¢æ令並顯示å®åï¼ + 4.3) å¦ä½æ´æ¹ä¸åæ¬ä½çè³æé¡åï¼ + 4.4) å®çè¨éï¼å®ä¸è¡¨ï¼ä¸åè³æ庫çæ大éå¶æ¯å¤å°ï¼ + 4.5) åå²ä¸åå¸åçææ¬æ件裡çè³æéè¦å¤å°ç£ç¢ç©ºéï¼ + 4.6) çºä»éº¼æçæ¥è©¢å¾æ¢ï¼çºä»éº¼éäºæ¥è©¢æ²æå©ç¨ç´¢å¼ï¼ + 4.7) æå¦ä½æè½çå°æ¥è©¢åªåå¨æ¯æ樣è©ä¼°èçæçæ¥è©¢çï¼ + 4.8) ææ樣åæ£å表éå¼æç´¢å大å°å¯«ç¡éçæ + £å表éå¼æ¥æ¾ï¼æ樣å©ç¨ç´¢å¼é²è¡å¤§å°å¯«ç¡éæ¥æ¾ï¼ + 4.9) å¨ä¸åæ¥è©¢è£¡ï¼ææ樣檢測ä¸åæ¬ä½æ¯å¦çº + NULLï¼æå¦ä½æè½æºç¢ºæåºèä¸è«ææ¬ä½æ¯å¦å«NULLå¼ï¼ + 4.10) å種å符é¡åä¹éæä»éº¼ä¸åï¼ + 4.11.1) ææ樣åµå»ºä¸ååºåèåææ¯èªåéå¢çæ¬ä½ï¼ + 4.11.2) æå¦ä½ç²å¾ä¸åæå¥çåºåèçå¼ï¼ + 4.11.3) åæä½¿ç¨ currval() æå°è´åå¶ä»ç¨æ¶çè¡çªææ³åï¼ + 4.11.4) çºä»éº¼ä¸å¨äºåç°å¸¸ä¸æ¢å¾éç¨åºåèå¢ï¼çºä»éº¼å¨åºåèæ¬ä½çåå¼ä¸ + åå¨éæ·å¢ï¼ + 4.12) ä»éº¼æ¯ OIDï¼ä»éº¼æ¯ CTID ï¼ + 4.13) çºä»éº¼ææ¶å°é¯èª¤è³è¨ãERROR: Memory exhausted in + AllocSetAlloc()ãï¼ + 4.14) æå¦ä½æè½ç¥éæéè¡ç PostgreSQL ççæ¬ï¼ + 4.15) æå¦ä½åµå»ºä¸åé è¨å¼æ¯ç¶åæéçæ¬ä½ï¼ + 4.16) å¦ä½å·è¡å¤é£æ¥ï¼outer joinï¼æ¥è©¢ï¼ + 4.17) å¦ä½å·è¡æ¶åå¤åè³æ庫çæ¥è©¢ï¼ + 4.18) å¦ä½è®å½æ¸è¿åå¤è¡æå¤åè³æï¼ + 4.19) çºä»éº¼æå¨ä½¿ç¨ PL/PgSQL å½æ¸ååè¨æ表æææ¶å°é¯èª¤è³è¨ãrelation + with OID ##### does not existãï¼ + 4.20) ç®åæåªäºè³æè¤å¯«(replication)æ¹æ¡å¯ç¨ï¼ + 4.21) çºä½æ¥è©¢çµæ顯示ç表åææ¬åèæçæ¥è©¢èªå¥ä¸ + çä¸åï¼çºä½å¤§å¯«çæä¸è½ä¿çï¼ + _________________________________________________________________ + +常è¦åé¡ + + 1.1) PostgreSQL æ¯ä»éº¼ï¼è©²æ麼ç¼é³ï¼ + + PostgreSQL è®ä½ Post-Gres-Q-Lï¼ææåä¹ç°¡ç¨±çºPostgres + ãæ³è½ä¸ä¸å¶ç¼é³ç人å¡å¯å¾é裡ä¸è¼è²é³æä»¶ï¼ MP3 æ ¼å¼ ã + + PostgreSQL æ¯é¢åç®æ¨çéä¿è³æ庫系統ï¼å®å·æå³çµ±åæ¥ + è³æ庫系統çææåè½ï¼åæåå«æå°å¨ä¸ä¸ä»£ DBMS + 系統ç使ç¨çå¢å¼·ç¹æ§ãPostgreSQL + æ¯èªç±åè²»çï¼ä¸¦ä¸æææºä»£ç¢¼é½å¯ä»¥ç²å¾ã + + PostgreSQL + çéç¼éä¼ä¸»è¦çºå¿é¡èï¼ä»åéä½ä¸çåå°ä¸¦ééäºè¯ç¶²é²è¡è¯ç¹«ï¼éæ¯ä¸å社åéç¼é + ç®ï¼å®ä¸è¢«ä»»ä½å¬å¸æ§å¶ã + å¦æ³å å¥éç¼éä¼ï¼è«åè¦éç¼äººå¡å¸¸è¦åé¡ï¼FAQï¼ + http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html + + 1.2) 誰æ§å¶ PostgreSQL ï¼ + + å¦æä½ å¨å°æ¾PostgreSQLçæé人ï¼ææ¯ä»éº¼ä¸ + 央å§å¡æï¼ææ¯ä»éº¼æ屬å¬å¸ï¼ä½ åªè½æ¾æ£äº---å çºä¸åä¹ä¸å + å¨ï¼ä½æåç確æä¸å æ ¸å¿å§å¡æåCVS管ççµï¼ä½éäºå·¥ä½çµçè¨ + ç«ä¸»è¦æ¯çºäºé²è¡ç®¡çå·¥ä½èä¸æ¯å°PostgreSQLé²è¡ç¨ä½å¼æ§å¶ï¼PostgreSQLé + ç®æ¯ç±ä»»ä½äººå + å¯åå çéç¼äººå¡ç¤¾ååææç¨æ¶æ§å¶çï¼ä½ æéè¦åçå°±æ¯è¨é±éµä»¶å表ï¼åèè¨è«å³å + ¯ï¼è¦åèPostgreSQLçéç¼è©³è¦ éç¼äººå¡å¸¸åé¡ (Developer's FAQ) ç²åè³è¨ï¼ã + + 1.3) PostgreSQL ççæ¬æ¯ä»éº¼? + + PostgreSQLçç¼å¸éµå¾ç¶å¸ç BSD çæ¬ãå®å許ç¨æ¶ä¸éç®çå°ä½¿ç¨ + PostgreSQLï¼çè³ä½ å¯ä»¥é·å® PostgreSQL + èä¸å«æºä»£ç¢¼ä¹å¯ä»¥ï¼å¯ä¸çéå¶å°±æ¯ä½ ä¸è½å è»é«èªèº«åé¡èåæå追訴æ³å¾ + 責任ï¼å¦å¤å°±æ¯è¦æ±ææçè»é«æ·è²ä¸é åæ¬ä»¥ä¸çæ¬è²æã + ä¸é¢å°±æ¯æåæ使ç¨çBSDçæ¬è²æå§å®¹ï¼ + + PostgreSQL è³æ庫管ç系統 + + é¨åçæ¬ï¼cï¼1996-2005ï¼PostgreSQL å¨çéç¼å°çµï¼é¨åçæ¬ï¼cï¼1994-1996 + å å·å¤§å¸è£äº + + ï¼Portions copyright (c) 1996-2005,PostgreSQL Global Development Group + Portions Copyright (c) 1994-6 Regents of the University of + Californiaï¼ + + å許çºä»»ä½ç®ç使ç¨ï¼æ·è²ï¼ä¿®æ¹ååç¼éåè»é«åå®çææªèä¸æ¶åä»»ä½è²»ç¨ï¼ + 並ä¸ç¡é 簽署å æ¤èç¢ççèæï¼åææ¯ä¸é¢ççæ¬è²æåæ¬æ®µä»¥åä¸é¢å©æ®µæå + åºç¾å¨æææ·è²ä¸ã + + ï¼Permission to use, copy, modify, and distribute this software and + its documentation for any purpose, without fee, and without a written + agreement is hereby granted, provided that the above copyright notice + and this paragraph and the following two paragraphs appear in all + copies.ï¼ + + å¨ä»»ä½ææ³ä¸ï¼å å·å¤§å¸é½ä¸æ¿æå 使ç¨æ + ¤è»é«åå¶ææªèå°è´çå°ä»»ä½ç¶äºäººçç´æ¥çï¼ + éæ¥çï¼ç¹æ®çï¼éå çæèç¸ä¼´èççæå£ï¼åæ¬å©çæ失ç責任ï¼å³ä½¿å å·å¤§å + ¸å·²ç¶å»ºè°äºéäºæ失çå¯è½æ§æä¹æ¯å¦æ¤ã + + ï¼IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY + PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL + DAMAGES, INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS + SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA + HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.ï¼ + + å å·å¤§å¸æ確æ¾æ£ä»»ä½ä¿èï¼åæ¬ä½ä¸å±éæ¼æä¸ç¹å®ç¨éçåæ¥åå©ççé±å«ä¿èã + é裡æä¾çé份è»é«æ¯åºæ¼ãç¶ä½æ¯ãçåºç¤çï¼å èå å·å¤§å¸æ²æ責任æä¾ç¶ + è·ï¼æ¯æï¼æ´æ°ï¼å¢å¼·æèä¿®æ¹çæåã + + ï¼THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE + PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF + CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, + UPDATES, ENHANCEMENTS, OR MODIFICATIONS.ï¼ + + 1.4) PostgreSQL å¯ä»¥éè¡å¨åªäºä½æ¥ç³»çµ±å¹³å°ä¸ï¼ + + ä¸è¬èªªä¾ï¼ä»»ä½ç¾å¨å° UNIX ç¸å®¹çä½æ¥ç³»çµ±ä¹ä¸é½è½éè¡ PostgreSQL + ãå¨å®è£æå裡ååºäºç¼ä½æç¶éæ確測試çå¹³å°ã + + PostgreSQL ä¹å¯ä»¥ç´æ¥éè¡å¨åºæ¼å¾®è» Windows-NT çä½æ¥ç³»çµ±ï¼å¦ + Win2000 SP4ï¼WinXP å Win2003ï¼å·²è£½ä½å®æçå®è£åå¯å¾ + http://pgfoundry.org/projects/pginstallerä¸è¼ï¼åºæ¼MSDOSçWindowsä½æ¥ + 系統 ï¼Win95ï¼Win98ï¼WinMeï¼éè¦ééCygwin模æ¬ç°å¢éè¡PostgreSQLã + + åæä¹æä¸åçº Novell Netware 6 éç¼ççæ¬å¯å¾ http://forge.novell.com + ç²åï¼çºOS/2(eComStation)éç¼ççæ¬å¯å¾ + http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgre + SQL&stype=all&sort=type&dir=%2F ä¸è¼ã + + 1.5) æå¾åªè£¡è½å¾å° PostgreSQLï¼ + + ééç覽å¨å¯å¾ http://www.postgresql.org/ftp/ ä¸è¼ï¼ä¹å¯ééFTPï¼å¾ + ftp://ftp.PostgreSQL.org/pub/ ç«é»ä¸è¼ã + + 1.6) ææ°çç PostgreSQL æ¯ä»éº¼ï¼ + + PostgreSQL ææ°ççæ¬æ¯çæ¬ 8.2.3 ã + + æåè¨åæ¯å¹´ç¼ä½ä¸å主è¦åç´çæ¬ï¼æ¯å¹¾åæç¼ä½ä¸åå°çæ¬ã + + 1.7) æå¾åªè£¡è½å¾å°å° PostgreSQL çæ¯æï¼ + + PostgreSQL社åéééµä»¶å表çºå¶å¤§å¤æ¸ç¨æ¶æä¾å¹«å©ï¼è¨é±éµä»¶å表ç主ç«é + »æ¯ + http://www.postgresql.org/community/lists/ï¼ä¸è¬ææ³ä¸ï¼åå å¥General æ + Bugéµä»¶å表æ¯ä¸åè¼å¥½çéå§ã + + 主è¦çIRCé »éæ¯å¨FreeNode(irc.freenode.net)ç#postgresqlï¼çºäºé£ä¸æ + ¤é »éï¼å¯ä»¥ä½¿ç¨ UNIX ç¨åº ircï¼å¶æä»¤æ ¼å¼ï¼ irc -c '#postgresql' + "$USER" irc.freenode.net ï¼æè使ç¨å¶ä»IRC客æ¶ç«¯ç¨åºãå¨æ¤ç¶²çµ¡ä¸éå + å¨ä¸å PostgreSQL ç西ççé »é(#postgersql-es)åæ³èªé »é + (#postgresql-fr)ãå樣å°ï¼å¨ EFNET ä¸ä¹æä¸å PostgreSQL ç交æµé »éã + + å¯æä¾åæ¥æ¯æçå¬å¸å表å¯å¨ http://techdocs.postgresql.org/companies.php + ç覽ã + + 1.8) æå¦ä½æ交ä¸å BUG å ±åï¼ + + å¯è¨ªå http://www.postgresql.org/support/submitbugï¼å¡«å¯« Bug + ä¸å ±è¡¨æ ¼å³å¯ï¼å樣ä¹å¯è¨ªå ftp ç«é» ftp://ftp.PostgreSQL.org/pub/ + 檢æ¥æç¡æ´æ°çPostgreSQL çæ¬æè£ä¸ã + + ééä½¿ç¨ Bug æäº¤è¡¨æ ¼ææ¯ç¼å¾ PostgreSQL éµä»¶å表ç Bug + é常ææ以ä¸ä¹ä¸åè¦ï¼ + * ææ交å§å®¹ä¸æ¯ä¸å Bug åå¶ä¸æ¯ Bug çåå ã + * ææ交å§å®¹æ¯ä¸åå·²ç¥ç Bug 並ä¸å·²ç¶å å¥ TODO å¾èçä»»åå表ã + * ææ交ç Bug å·²å¨ç¶åçæ¬ä¸è¢«ä¿®æ£ã + * ææ交ç Bug 已修æ£ä½å°æªå°è£ä¸å å¥ç¾å¨çç¼å¸è»é«åã + * è«æ±æ交èæä¾æ´è©³ç´°çè³è¨ï¼ + + ä½æ¥ç³»çµ± + + PostgreSQL çæ¬ + + å¯éç¾ Bug ç測試æ¡ä¾ + + 調試è³è¨ + + 調試è·è¹¤è¼¸åº + * ææ交å§å®¹æ¯ä¸åæ° Bugï¼å°å·è¡ä»¥ä¸å·¥ä½ï¼ + + åµå»ºä¸åæ°è£ä¸ä¸¦å°å¶å å¥ä¸ä¸å主è¦çæ¬ææ¯å°çæ¹é²çæ¬ä¸ã + + æ¤ Bug æ«æä¸è½ä¿®æ£ï¼å°è¢«å è³ TODO å¾èçä»»åå表ã + + 1.9) æå¦ä½ç解已ç¥ç BUG ææ«ç¼ºçåè½ï¼ + + PostgreSQL æ¯æä¸åæ´å±ç SQL:2003 çåéãåé±æåç TODO å表ï¼çè§£å·²ç¥ Bug + å表ãæ«ç¼ºçåè½åå°ä¾çéç¼è¨åã + + è¦æ±å¢å æ°åè½çç³è«é常ææ¶å°ä»¥ä¸ä¹ä¸çåè¦ï¼ + * 該åè½å·²å å¥ TODO å¾èçä»»åå表ã + * 該åè½ä¸æ¯å¿é çï¼å çºï¼ + + å®æ¯ç¾æçä¸ç¬¦å SQL æ¨æºçæåè½çéè¤ã + + 該åè½æ§æ大大å¢å 代碼çè¤éç¨åºï¼è帶ä¾ç好èæ¯å¾®ä¸è¶³éçã + + 該åè½æ¯ä¸å®å¨ææ¯ä¸å¯é çã + * 該åè½å°è¢«å å¥ TODO å¾èçä»»åå表ã + + PostgreSQL ä¸ä½¿ç¨ Bug è·è¹¤ç³»çµ±ï¼å çºæåç¼ç¾å¨éµä»¶åè¡¨ä¸ + ç´æ¥åè¦ä»¥åä¿è TODO + ä»»åå表總æ¯èæ¼ææ°çæçæ¹å¼å·¥ä½æçææ´é«ä¸äºãäºå¯¦ä¸ï¼Bugä¸æå¨æåçè»é«ä¸ + åå¨å¾é·æéï¼ å°å½±é¿å¾å¤ç¨æ¶çBugä¹ç¸½æ¯å¾å¿«æ被修æ + £ãå¯ä¸è½æ¾å°æææ¹é²ãæé«åä¿®æ£çå°æ¹æ¯ CVS + çæ¥èªè³è¨ï¼å³ä½¿æ¯å¨è»é«æ°çæ¬çç¼å¸è³è¨ä¸ä¹ä¸æååºæ¯ä¸èçè»é«æ´æ°ã + + 1.10) è½å¤ ç²åçææ°ææªæåªäºï¼ + + PostgreSQL åå«å¤§éçææªï¼ä¸»è¦æ詳細çåèæåï¼æåé åä¸äºç測試ä¾åãåè¦ + /doc ç®éï¼è¯è¨»ï¼æçº $PGHOME/docï¼ã ä½ éå¯ä»¥å¨ç·ç覽 PostgreSQL + çæåï¼å¶ç¶²åæ¯ï¼http://www.PostgreSQL.org/docsã + + æå©æ¬éæ¼PostgreSQLçæ¸å¨ç·æä¾ï¼å¨ + http://www.postgresql.org/docs/books/awbook.html å + http://www.commandprompt.com/ppbook/ ã ä¹æ大éç PostgreSQL + æ¸ç±å¯ä¾è³¼è²·ï¼å¶ä¸æçºæµè¡çä¸æ¬æ¯ç± Korry Douglas 編寫çãå¨ + http://techdocs.PostgreSQL.org/techdocs/bookreviews.phpä¸ ä¸æ大éæé + PostgreSQL æ¸ç±çç°¡ä»ã å¨ http://techdocs.PostgreSQL.org/ ä¸æ¶éäºæé + PostgreSQL ç大éæè¡æç« ã + + 客æ¶ç«¯çå½ä»¤è¡ç¨åºpsqlæä¸äºä»¥ \d éé + çå½ä»¤ï¼å¯é¡¯ç¤ºéæ¼é¡åï¼æä½ç¬¦ï¼å½æ¸ï¼èåçè³è¨ï¼ä½¿ç¨ \? + å¯ä»¥é¡¯ç¤ºææå¯ç¨çå½ä»¤ã + + æåç web ç«é»åå«æ´å¤çææªã + + 1.11) ææ該æ樣å¸ç¿ SQL ï¼ + + é¦åèæ®ä¸è¿°æå°çèPostgreSQLç¸éçæ¸ç±ï¼å¦å¤ä¸æ¬æ¯ Teach Yourself SQL in + 21 Days, Second Editionï¼å¶è©³ç´°ä»ç´¹ç網åæ¯ + http://members.tripod.com/er4ebus/sql/index.htmï¼ æåç許å¤ç¨æ¶åæ¡The + Practical SQL Handbookï¼ Bowman, Judith S. + 編寫ï¼Addison-Wesleyå¬å¸åºçï¼å¶ä»çååæ¡ The Complete Reference SQL, + Groff 編寫ï¼McGraw-Hill å¬å¸åºçã + + å¨ä¸å網åä¸ä¹æå¾å¥½çæç¨ï¼ä»åæ¯ + * http://www.intermedia.net/support/sql/sqltut.shtm + * http://sqlcourse.com. + * http://www.w3schools.com/sql/default.asp + * http://mysite.verizon.net/Graeme_Birchall/id1.html + + 1.12)å¦ä½æ交è£ä¸ææ¯å å¥éç¼éä¼ï¼ + + è©³è¦ éç¼äººå¡å¸¸è¦åé¡ (Developer's FAQ) ã + + 1.13) PostgreSQL åå¶ä»è³æ庫系統æ¯èµ·ä¾å¦ä½ï¼ + + è©å¹è»é«æ好幾種æ¹æ³ï¼åè½ï¼æ§è½ï¼å¯é æ§ï¼æ¯æåå¹æ ¼ã + + åè½ + PostgreSQL ææ大ååç¨è³æ庫æå¤çåè½ï¼ä¾å¦ï¼äºåï¼å + æ¥è©¢ï¼è§¸ç¼å¨ï¼è¦åï¼å¤éµåèå®æ´æ§åè¤éçéå®çã + æåéæä¸äºå®åæ²æçç¹æ§ï¼å¦ç¨æ¶å®ç¾©é¡åï¼ç¹¼æ¿ï¼è¦ååå¤çæ¬ä¸¦è¡æ§å¶ä + »¥æ¸å°éççç¨çã + + æ§è½ + PostgreSQLåå¶ä»åç¨åéæºçè³æ庫å·æé¡ä¼¼çæ§è½ãå°æäºèçå®æ¯è¼å¿«ï¼å° + å¶ä»ä¸äºèçå®æ¯è¼æ¢ã èå¶ä»è³æ庫ç¸æ¯ï¼æåçæ§è½åªå£éå¸¸å¨ +/- + 10%ä¹éã + + å¯é æ§ + æåé½ç¥éè³æ庫å¿é æ¯å¯é çï¼å¦åå®å°±ä¸é»ç¨é½æ²æãæååªååå°ç¼ä½ç¶éèª + ç測試çï¼ç¼ºé·æå°çç©©å®ä»£ç¢¼ãæ¯åçæ¬è³å°æä¸åæç beta + 測試æéï¼ä¸¦ä¸æåçç¼å¸æ + ·å²é¡¯ç¤ºæåå¯ä»¥æä¾ç©©å®çï¼ç¢åºçï¼å¯ç¨æ¼çç¢ä½¿ç¨ççæ¬ãæåç¸ä¿¡å¨é + æ¹é¢æåèå¶ä»çè³æ庫è»é«æ¯ç¸ç¶çã + + æ¯æ + æåçéµä»¶å表æä¾ä¸åé常大çéç¼äººå¡åç¨æ¶ççµä»¥å¹«å©è§£æ±ºæ碰å°ç + ä»»ä½åé¡ãæåä¸è½ä¿è + 總æ¯è½è§£æ±ºåé¡ï¼ç¸æ¯ä¹ä¸ï¼åç¨è³æ庫è»é«ä¹ä¸¦ä¸æ¯ç¸½è½å¤ æä¾è§ + £æ±ºæ¹æ³ã + ç´æ¥èéç¼äººå¡ï¼ç¨æ¶ç¾¤ï¼æååæºç¨åºæ¥è§¸ä½¿PostgreSQLçæ¯ææ¯å¶ä»è³ + æ庫éè¦å¥½ãéæä¸äºåæ¥ + æ§çå¨é¢æè¡æ¯æï¼å¯ä»¥çµ¦æä¾çµ¦é£äºéè¦ç人ãï¼åé±1.7 å°ç¯ï¼ + + å¹æ ¼ + æåå°ä»»ä½ç¨éé½åè²»ï¼åæ¬åç¨åéåç¨ç®çã + ä½ å¯ä»¥ä¸å éå¶å°åä½ çç¢å裡å å¥æåç代碼ï¼é¤äºé£äºæåå¨ä¸é¢ççæ¬ + è²æ裡è²æç BSDçæ¬ä¹å¤çå§å®¹ã + + 1.14) PostgreSQL å¯ä»¥èçæè¿ååå家å¤æå¶çè®åå? + + PostgreSQL 8.0ä¹åççæ¬æ¯ä½¿ç¨ä½æ¥ç³»çµ±ä¸çæåè³æ庫ä¾èçå¤æå¶çè³è¨ï¼èª + 8.0 çå以å¾ççæ¬ PostgreSQL æèªèº«å«æææ°çæåè³è¨ã + _________________________________________________________________ + +ç¨æ¶å®¢æ¶ç«¯åé¡ + + 2.1) æåå¯ä»¥ç¨ä»éº¼èªè¨å PostgreSQL é²è¡æºéï¼ + + PostgreSQL (é è¨ææ³)åªå®è£æ C åå§åµå¼ C + çæ¥å£ï¼å¶ä»çæ¥å£é½æ¯ç¨ç«çé ç®ï¼è½å¤ åå¥ä¸è¼ï¼éäºæ¥å£é ç®ç¨ç«ç好è + æ¯ä»åå¯ä»¥æåèªçç¼å¸è¨åååèªç¨ç«çéç¼çµã + + ä¸äºç·¨ç¨èªè¨å¦ PHP é½æ訪å PostgreSQL çæ¥å£ï¼PerlãTCLãPython + 以åå¾å¤å¶ä»èªè¨çæ¥å£å¨ http://gborg.postgresql.org 網ç«ä¸ç + Drivers/Interfaces å°ç¯å¯æ¾å°ï¼ 並ä¸éé Internet å¾å®¹ææç´¢å°ã + + 2.2) æä»éº¼å·¥å·å¯ä»¥æ PostgreSQL ç¨æ¼ Web é é¢ï¼ + + ä¸åä»ç´¹ä»¥è³æ庫çºå¾å°çæºä¸é¯çç«é»æ¯ï¼http://www.webreview.comã + + å°æ¼ Web éæï¼PHP æ¯ä¸å極好çæ¥å£ãå®å¨ http://www.php.net/ã + + å°æ¼è¤éçä»»åï¼å¾å¤äººæ¡ç¨ Perl æ¥å£å ä½¿ç¨ CGI.pm ç DBD::Pg æ mod_perl + ã + + 2.3)PostgreSQL ææåå½¢ç¨æ¶çé¢åï¼ + + åæ¥ç¨æ¶ææ¯éæºéç¼äººå¡è½æ¾å°å¾å¤çæé PostgreSQLçGUI å形工å·è»é«ï¼å¨ + PostgreSQL社åææª æä¸å詳細çå表ã + _________________________________________________________________ + +系統管çåé¡ + + 3.1)ææ樣è½æ PostgreSQL è£å¨ /usr/local/pgsql 以å¤çå°æ¹ï¼ + + å¨éè¡ configure æå ä¸ --prefix é¸é ã + + 3.2) æå¦ä½æ§å¶ä¾èªå¶ä»é»è¦çé£æ¥ï¼ + + é è¨ææ³ä¸ï¼PostgreSQL åªå許ä¾èªæ¬æ©ä¸éé unix åå¥æ¥åæ TCP/IP + æ¹å¼çé£æ¥ã ä½ åªæå¨ä¿®æ¹äºéç½®æ件 postgresql.conf ä¸ç + listen_addressesï¼ä¸ä¹å¨éç½®æ件 $PGDATA/pg_hba.conf ä¸æéäº + åºæ¼é ç¨é»è¦ï¼ host-based ï¼ç身份èªèï¼ä¸¦éæ°åå + PostgreSQLï¼å¦åå¶ä»é»è¦æ¯ä¸è½èä½ ç PostgreSQL 伺æå¨é²è¡é£æ¥çã + + 3.3) ææ樣調æ´è³æ庫å¼æ以ç²å¾æ´å¥½çæ§è½ï¼ + + æä¸å主è¦æ¹é¢å¯ä»¥æå PostgreSQL çæ½è½ã + + æ¥è©¢æ¹å¼çè®å + é主è¦æ¶åä¿®æ¹æ¥è©¢æ¹å¼ä»¥ç²åæ´å¥½çæ§è½: + + + åµå»ºç´¢å¼ï¼åæ¬è¡¨éå¼åé¨åç´¢å¼ï¼ + + ä½¿ç¨ COPY èªå¥ä»£æ¿å¤å Insert èªå¥ï¼ + + å°å¤åSQLèªå¥çµæä¸åäºå以æ¸å°æ交äºåçéé·ï¼ + + å¾ä¸åç´¢å¼ä¸æåå¤æ¢è¨éæä½¿ç¨ CLUSTERï¼ + + å¾ä¸åæ¥è©¢çµæä¸ååºé¨åè¨éæä½¿ç¨ LIMITï¼ + + 使ç¨é ç·¨è¯å¼æ¥è©¢ï¼Prepared Query)ï¼ + + ä½¿ç¨ ANALYZE 以ä¿æ精確çåªåçµ±è¨ï¼ + + å®æä½¿ç¨ VACUUM æ pg_autovacuum + + é²è¡å¤§éè³ææ´æ¹æååªé¤ç´¢å¼ï¼ç¶å¾é建索å¼ï¼ + + 伺æå¨çéç½® + éç½®æ件 postgres.conf ä¸çå¾å¤è¨ + ç½®é½æå½±é¿æ§è½ï¼ææåæ¸çå表å¯è¦ï¼ + 管çå¡æå/è³æ庫伺æå¨éè¡ç°å¢/è³æ庫伺æå¨éè¡éç½®ï¼ + æéåæ¸ç解éå¯è¦ï¼http://www.varlena.com/varlena/GeneralBits/Tidb + its/annotated_conf_e.html å + http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.htmlã + + 硬é«çé¸æ + é»è¦ç¡¬é«å°æ§è½çå½±é¿å¯ç覽 + http://candle.pha.pa.us/main/writings/pgsql/hw_performance/inde + x.html å http://www.powerpostgresql.com/PerfList/ã + + 3.4)PostgreSQL 裡å¯ä»¥ç²å¾ä»éº¼æ¨£ç調試ç¹æ§ï¼ + + PostgreSQL æå¾å¤é¡ä¼¼ log_* + ç伺æå¨éç½®è®éå¯ç¨æ¼æ¥è©¢çåå°åé²ç¨çµ±è¨ï¼èéäºå·¥ä½å°èª¿è©¦åæ§è½æ¸¬è©¦å + ¾æ幫å©ã + + 3.5) çºä»éº¼å¨è©¦åé£æ¥ææ¶å°ãSorry, too many + clientsï¼å·²æ太å¤ç¨æ¶é£æ¥ï¼ãæ¶æ¯ï¼ + + éè¡¨ç¤ºä½ å·²éå°é è¨ 100 å並ç¼(åä½)å¾å°é²ç¨æ¸çéå¶ï¼ä½ éè¦ééä¿®æ¹ + postgresql.conf æ件ä¸ç max_connections å¼ä¾ å¢å postmaster + çå¾å°ä½µç¼èçæ¸ï¼ä¿®æ¹å¾ééæ°åå postmasterã + + 3.6)PostgreSQL çåç´éç¨æåªäºå§å®¹ ï¼ + + PostgreSQL éç¼çµå°æ¯æ¬¡å°çæ¬çåç´ä¸»è¦åªåäºä¸äº Bug ä¿®æ£å·¥ä½ï¼å æ¤å¾ + 7.4.8 åç´å° 7.4.9 ä¸éè¦ dump å restoreï¼åéè¦åæ + ¢è³æ庫伺æå¨ï¼å®è£æ´æ°å¾çè»é«åï¼ç¶å¾éå伺æå¨å³å¯ã + + ææPostgreSQLçç¨æ¶æ該å¨ææ¥è¿ï¼ä½ æ使ç¨ç主çæ¬ï¼çå°æ¹é²çæ¬ç¼ä½ç¡å¿«åç´ + ãå管æ¯æ¬¡åç´å¯è½é½æä¸é»é¢¨éªï¼PostgreSQLçå°æ¹ é²çååæ¯è¨è¨ç¨ä¾ä¿®æ + £ä¸äº Bug + çï¼ç¨å¼ç¢¼æ¹åè¼å°ï¼æ以風éªéæ¯å¾å°çãPostgreSQL社åèªçºä¸è¬ææ³ä¸ä¸åç´ç + 風éªéæ¯å¤æ¼åç´çã + + 主çæ¬çåç´ï¼ä¾å¦å¾ 7.3 å° 7.4ï¼é常æä¿®æ¹ç³»çµ±è¡¨åè³æ表çå§é¨æ ¼å¼ã + éäºæ¹è®ä¸è¬æ¯è¼è¤éï¼å æ¤æåä¸ç¶æè³ææ件çåå¾å¼å®¹æ§ãå æ¤å¾èçæ¬ä¸ + é²è¡è³æå°åºï¼dumpï¼/ç¶å¾å¨æ°çæ¬ä¸ + é²è¡è³æå°å¥ï¼reloadï¼å°ä¸»çæ¬çåç´æ¯å¿é çã + + 3.7)(ä½¿ç¨ PostgreSQL )æéè¦ä½¿ç¨ä»éº¼é»è¦ç¡¬é« ï¼ + + ç±æ¼é»è¦ç¡¬é«å¤§å¤æ¸æ¯ç¸å®¹çï¼äººå總æ¯å¾åæ¼ç¸ä¿¡ææé»è¦ç¡¬é«è³ªéä¹æ¯ç¸ + åçãäºå¯¦ä¸ä¸æ¯ï¼ ECC RAMï¼å¸¶å¥å¶æ ¡é©çè¨æ¶é«ï¼ï¼SCSI + ï¼ç¡¬ç¢ï¼ååªè³ªç主æ©æ¿æ¯ä¸äºä¾¿å®è²¨è¦æ´å å¯é ä¸å·ææ´å¥½çæ§è½ã + PostgreSQL å¹¾ä¹å¯ä»¥éè¡å¨ä»»ä½ç¡¬é«ä¸ï¼ + ä½å¦æå¯é æ§åæ§è½å°ä½ ç系統å¾éè¦ï¼ä½ å°±éè¦å¨é¢çç 究ä¸ä¸ä½ ç硬é«çµæ + äºãå¨æåçéµä»¶å表ä¸ä¹æéæ¼ ç¡¬é«éç½®åæ§å¹æ¯çè¨è«ã + _________________________________________________________________ + +æä½åé¡ + + 4.1) å¦ä½åªé¸æä¸åæ¥è©¢çµæçé å¹¾è¡ï¼ææ¯é¨æ©çä¸è¡ï¼ + + å¦æä½ åªæ¯è¦æåå¹¾è¡è³æï¼ä¸¦ä¸ä½ å¨å·è¡æ¥è©¢ä¸ + ç¥é確åçè¡æ¸ï¼ä½ å¯ä»¥ä½¿ç¨ LIMIT åè½ã å¦ææä¸åç´¢å¼è ORDER BY ä¸ + çæ¢ä»¶å¹éï¼PostgreSQL å¯è½å°±åªèçè¦æ±çé å¹¾æ¢è¨éï¼ + ï¼å¦åå°å°æ´åæ¥è©¢é²è¡èçç´å°çæéè¦çè¡ï¼ãå¦æå¨å·è¡æ¥è©¢åè½æä¸ç¥é確åçè¨éæ + ¸ï¼ å¯ä½¿ç¨æ¸¸æ¨(cursor)åFETCHåè½ã + + å¯ä½¿ç¨ä»¥ä¸æ¹æ³æåä¸è¡é¨æ©è¨éçï¼ + SELECT cols + FROM tab + ORDER BY random() + LIMIT 1 ; + + 4.2) + å¦ä½æ¥ç表ãç´¢å¼ãè³æ庫以åç¨æ¶çå®ç¾©ï¼å¦ä½æ¥çpsql裡ç¨å°çæ¥è©¢æ令並顯示å + ®åï¼ + + å¨psqlä¸ä½¿ç¨ \dt å½ä»¤ä¾é¡¯ç¤ºè³æ表çå®ç¾©ï¼è¦ç解 psql ä¸ + çå®æ´å½ä»¤å表å¯ä½¿ç¨ \? ï¼å¦å¤ï¼ä½ ä¹å¯ä»¥é±è® psql çæºä»£ç¢¼ æ件 + pgsql/src/bin/psql/describe.cï¼å®åæ¬çºçæ psql åææ§å½ä»¤ç輸åºçææ SQL + å½ä»¤ãä½ éå¯ä»¥å¸¶ -E é¸é åå psqlï¼ é樣å®å°åå°åºä½ å¨ psql ä¸ + æ給åºçå½ä»¤å·è¡æçå§é¨å¯¦é使ç¨ç SQL + æ¥è©¢èªå¥ãPostgreSQLä¹æä¾äºä¸åå¼å®¹ SQLç INFORMATION SCHEMA æ¥å£ï¼ + ä½ å¯ä»¥å¾é裡ç²åéæ¼è³æ庫çè³è¨ã + + å¨ç³»çµ±ä¸ä¹æä¸äºä»¥ pg_ æé ç系統表ä¹æè¿°äºè¡¨çå®ç¾©ã + + ä½¿ç¨ psql -l æ令å¯ä»¥ååºææçè³æ庫ã + + ä¹å¯ä»¥ç覽ä¸ä¸ pgsql/src/tutorial/syscat.source + æ件ï¼å®åèäºå¾å¤å¯å¾è³æ庫系統表ä¸ç²åè³è¨çSELECTèªæ³ã + + 4.3) å¦ä½æ´æ¹ä¸åæ¬ä½çè³æé¡åï¼ + + å¨8.0çæ¬è£¡æ´æ¹ä¸åæ¬ä½çè³æé¡åå¾å®¹æï¼å¯ä½¿ç¨ ALTER TABLE ALTER COLUMN + TYPE ã + + å¨ä»¥åççæ¬ä¸ï¼å¯ä»¥é樣åï¼ + BEGIN; + ALTER TABLE tab ADD COLUMN new_col new_data_type; + UPDATE tab SET new_col = CAST(old_col AS new_data_type); + ALTER TABLE tab DROP COLUMN old_col; + COMMIT; + + ä½ ç¶å¾å¯ä»¥ä½¿ç¨ VACUUM FULL tab æ令ä¾ä½¿ç³»çµ±æ¶åç¡æè³ææä½ç¨ç空éã + + 4.4) å®æ¢è¨éï¼å®å表ï¼å®åè³æ庫çæ大éå¶æ¯å¤å°ï¼ + + ä¸é¢æ¯ä¸äºéå¶ï¼ + + å®åè³æ庫æå¤§å°ºå¯¸ï¼ ç¡éå¶ï¼å·²åå¨æ 32TB çè³æåº«ï¼ + å®å表çæå¤§å°ºå¯¸ï¼ 32 TB + ä¸è¡è¨éçæå¤§å°ºå¯¸ï¼ 1.6 TB + ä¸åæ¬ä½çæ大尺寸? 1 GB + ä¸å表裡æ大åæ¸ï¼ ç¡éå¶ + ä¸å表裡æ大æ¬ä½æ¸ï¼ 250-1600 ï¼èåé¡åæéï¼ + ä¸å表裡çæ大索å¼æ¸éï¼ ç¡éå¶ + + ç¶ç¶ï¼å¯¦éä¸æ²æçæ£çç¡éå¶ï¼éæ¯è¦åå¯ç¨ç£ç¤ç©ºéãå¯ç¨è¨æ¶é«/交æåçå¶ç´ã + äºå¯¦ä¸ï¼ç¶ä¸è¿°éäºæ¸å¼è®å¾ç°å¸¸å°å¤§æï¼ç³»çµ±æ§è½ä¹æåå¾å¤§å½±é¿ã + + å®è¡¨çæå¤§å¤§å° 32 TB ä¸éè¦ä½æ¥ + 系統å°å®åæ件ä¹éé麼大çæ¯æã大表ç¨å¤å 1 GB çæ件åå²ï¼å æ + ¤æ件系統大å°çéå¶æ¯ä¸éè¦çã + + å¦æé è¨çå¡å¤§å°å¢é·å° 32K ï¼æ大çå®è¡¨å¤§å°åæ大åæ¸éå¯ä»¥å¢å å°ååã + + æä¸åéå¶å°±æ¯ä¸è½å°å¤§å°å¤æ¼2000å + ç¯çååµå»ºç´¢å¼ã幸éå°æ¯é樣çç´¢å¼å¾å°ç¨å°ãééå°å¤å + ç¯åçå§å®¹é²è¡MD5åç¨éç®çµæé²è¡å½æ¸ç´¢å¼å¯å°åçå¯ä¸æ§å¾å°ä¿èï¼ + 並ä¸å¨æ檢索å許å°åä¸çå®è©é²è¡æç´¢ã + + 4.5) åå²ä¸åå¸åçææ¬æ件裡çè³æéè¦å¤å°ç£ç¤ç©ºéï¼ + + ä¸å Postgres è³æ庫ï¼å + å²ä¸åææ¬æ件ï¼æä½ç¨ç空éæå¤å¯è½éè¦ç¸ç¶æ¼éåææ¬æ件èªèº«å¤§å°5åçç£ç¤ç©ºé + ã + + ä¾å¦ï¼åè¨æä¸å 100,000 è¡çæ件ï¼æ¯è¡æä¸åæ´æ¸åä¸åææ¬æè¿°ã åè¨ + ææ¬ä¸²çå¹³åé·åº¦çº20ä½åçµ(Byte)ãææ¬æ件ä½ç¨ 2.8 MBãå + æ¾éäºè³æçPostgreSQLè³æ庫æ件大ç´æ¯ 5.2 MB: + 24 ååçµ: æ¯è¡çé ï¼å¤§ç´å¼ï¼ + 24 ååçµç¯: ä¸åæ´æ¸åæ¬ä½åä¸åææ¬åæ¬ä½ + + 4 ååçµç¯: é é¢å§æååçµçæé + ---------------------------------------- + 52 ååçµæ¯è¡ + + PostgreSQL è³æé ç大å°æ¯ 8192 ä½åçµ (8 KB)ï¼åï¼ + + 8192 ååçµæ¯é + ------------------- = 158 è¡/è³æé ï¼åä¸åæ´ï¼ + 52 ååçµæ¯è¡ + + 100000 è³æè¡ + -------------------- = 633 è³æé ï¼åä¸åæ´ï¼ + 146 è¡/è³æé + + 633 è³æé * 8192 åç¯/é = 5,185,536 åç¯ï¼5.2 MBï¼ + + ç´¢å¼ä¸éè¦é麼å¤çé¡å¤æ¶èï¼ä½ä¹ç¢ºå¯¦åæ¬è¢«ç´¢å¼çè³æï¼å æ + ¤å®åä¹å¯è½å¾å¤§ã + + ç©ºå¼ NULL åæ¾å¨ä½åä¸ï¼å æ¤ä½ç¨å¾å°ç空éã + + 4.6) çºä»éº¼æçæ¥è©¢å¾æ¢ï¼çºä»éº¼éäºæ¥è©¢æ²æå©ç¨ç´¢å¼ï¼ + + 並éæ¯åæ¥è©¢é½æèªå使ç¨ç´¢å¼ãåªæå¨è¡¨ç大å°è¶éä¸åæå°å¼ï¼ä¸¦ä¸æ¥è©¢åªæé + ¸ä¸è¡¨ä¸è¼å°æ¯ä¾çè¨éææææ¡ç¨ç´¢å¼ã éæ¯å çºç´¢å¼æçå¼èµ·çé¨å³ç£ç¤å + åå¯è½æ¯ç´æ¥å°è®å表ï¼é åºæçï¼æ´æ¢ã + + çºäºå¤æ·æ¯å¦ä½¿ç¨ç´¢å¼ï¼PostgreSQL + å¿é ç²å¾æé表ççµ±è¨å¼ãéäºçµ±è¨å¼å¯ä»¥ä½¿ç¨ VACUUM ANALYZEï¼æ ANALYZE + ç²å¾ã 使ç¨çµ±è¨å¼ï¼åªåå¨ç¥éè¡¨ä¸ + æå¤å°è¡ï¼å°±è½å¤ æ´å¥½å°å¤æ·æ¯å¦å©ç¨ç´¢å¼ã + çµ±è¨å¼å°ç¢ºå®åªåçé£æ¥é åºåé£æ¥æ¹æ³ä¹å¾æç¨ãå¨è¡¨çå§å®¹ç¼çè®åæï¼æå®æé²è + ¡çµ±è¨å¼çæ´æ°æ¶éã + + ç´¢å¼é常ä¸ç¨æ¼ ORDER BY + æå·è¡é£æ¥ãå°ä¸å大表çä¸æ¬¡é åºæçååä¸æ¬¡æåºé常æ¯ç´¢å¼æçè¦å¿«ãç¶èï¼å¦æ + å° LIMIT å ORDER BY + çµåå¨ä¸èµ·ä½¿ç¨ç話ï¼é常å°æ使ç¨ç´¢å¼ï¼å çºéæåè¿å表ä¸çä¸å°é¨åè¨éã + + å¦æä½ ç¢ºä¿¡PostgreSQLçåªåå¨ä½¿ç¨é åºæçæ¯ä¸æ£ç¢ºçï¼ä½ å¯ä»¥ä½¿ç¨SET + enable_seqscan TO 'off'æ令ä¾ééé åºæçï¼ + ç¶å¾å次éè¡æ¥è©¢ï¼ä½ å°±å¯ä»¥çåºä½¿ç¨ä¸åç´¢å¼æçæ¯å¦ç¢ºå¯¦è¦å¿«ä¸äºã + + ç¶ä½¿ç¨éé符æä½ï¼ä¾å¦ LIKE æ ~ æï¼ç´¢å¼åªè½å¨ç¹å®çææ³ä¸ä½¿ç¨ï¼ + * å符串çéå§é¨åå¿é æ¯æ®éå符串ï¼ä¹å°±æ¯èªªï¼ + + LIKE 模å¼ä¸è½ä»¥ % æé ã + + ~ ï¼æ£å表éå¼ï¼æ¨¡å¼å¿é 以 ^ æé ã + * å符串ä¸è½ä»¥å¹éå¤åå符ç模å¼é¡æé ï¼ä¾å¦ [a-e]ã + * 大å°å¯«ç¡éçæ¥æ¾ï¼å¦ ILIKE å ~* çä¸ä½¿ç¨ç´¢å¼ï¼ä½å¯ä»¥ç¨ 4.8 + ç¯æè¿°ç表éå¼ç´¢å¼ã + * å¨å initdb æå¿é æ¡ç¨é è¨çæ¬å°è¨ç½® C + localeï¼å çºç³»çµ±ä¸å¯è½ç¥éå¨é C locale ææ³æä¸ä¸åæ大å符æ¯ä»éº¼ã + å¨é種ææ³ä¸ï¼ä½ å¯ä»¥åµå»ºä¸åç¹æ®ç text_pattern_ops ç´¢å¼ä¾ç¨æ¼ + LIKE çç´¢å¼ã + + å¨ 8.0 ä¹åççæ¬ä¸ + ï¼é¤éè¦æ¥è©¢çè³æé¡ååç´¢å¼çè³æé¡åç¸å¹éï¼å¦åç´¢å¼ç¶å¸¸æ¯æªè¢«ç¨å°ï¼ç¹å¥æ + ¯å° int2, int8 åæ¸å¼åçç´¢å¼ã + + 4.7) æå¦ä½æè½çå°æ¥è©¢åªåå¨æ¯æ樣è©ä¼°èçæçæ¥è©¢ï¼ + + åè EXPLAIN æåé ã + + 4.8) ææ樣åæ£å表éå¼æç´¢å大å°å¯«ç¡éçæ + £å表éå¼æ¥æ¾ï¼æ樣å©ç¨ç´¢å¼é²è¡å¤§å°å¯«ç¡éæ¥æ¾ï¼ + + æä½ç¬¦ ~ èçæ£å表éå¼å¹éï¼è ~* èç大å°å¯«ç¡éçæ£å表éå¼å¹éã大å°å¯«ç¡éç + LIKE è®ç¨®æçº ILIKEã + + 大å°å¯«ç¡éççå¼æ¯è¼é常寫åï¼ + SELECT * + FROM tab + WHERE lower(col) = 'abc'; + + é樣å°ä¸æ使ç¨æ¨æºçç´¢å¼ãä½æ¯å¯ä»¥åµå»ºä¸åå¨é種ææ³ä¸ä½¿ç¨ç表éå¼ç´¢å¼ + : + CREATE INDEX tabindex ON tab (lower(col)); + + å¦æä¸è¿°ç´¢å¼å¨åµå»ºæå å¥ UNIQUE ç´æï¼éç¶ç´¢å¼æ¬ä½èªèº«å§å®¹å¯ä»¥å + å²å¤§å°å¯«ä¸éçå§å®¹ï¼ä½å¦ææ UNIQUE + ç´æå¾ï¼éäºå§å®¹ä¸è½ååæ¯å¤§å°å¯«ä¸åï¼å¦åæé æè¡çªï¼ãçºäºä¿è + ä¸ç¼çé種ææ³ï¼å¯ä»¥ä½¿ç¨ CHECK ç´ææ¢ä»¶ææ¯è§¸ç¼å¨å¨éå¥æé²è¡éå¶ã + + 4.9) å¨ä¸åæ¥è©¢è£¡ï¼ææ樣檢測ä¸åæ¬ä½æ¯å¦çº NULL + ï¼æå¦ä½æè½æºç¢ºæåºèä¸è«ææ¬ä½æ¯å¦å« NULL å¼ï¼ + + ç¨ IS NULL å IS NOT NULL 測試éåæ¬ä½ï¼å·é«æ¹æ³å¦ä¸ï¼ + SELECT * + FROM tab + WHERE col IS NULL; + + çºäºè½å°å« NULL æ¬ä½æåºï¼å¯å¨ ORDER BY æ¢ä»¶ä¸ä½¿ç¨ IS NULL å IS NOT + NULL 修飾符ï¼æ¢ä»¶çºç true å°æ¯æ¢ä»¶çºå false æå¨åé¢ï¼ä¸é¢çä¾å + å°±æå°å« NULL çè¨éæå¨çµæçä¸é¢é¨åï¼ + SELECT * + FROM tab + ORDER BY (col IS NOT NULL) + + 4.10) å種å符é¡åä¹éæä»éº¼ä¸åï¼ + + é¡å å§é¨å稱 說æ + VARCHAR(n) varchar æå®äºæ大é·åº¦ï¼è®é·å + 符串ï¼ä¸è¶³å®ç¾©é·åº¦çé¨åä¸è£é½ + CHAR(n) bpchar å®é·å符串ï¼å¯¦éè³æä¸è¶³å®ç¾©é·åº¦æï¼ä»¥ç©ºæ ¼è£é½ + TEXT text æ²æç¹å¥çä¸ééå¶ï¼ååè¡çæ大é·åº¦éå¶ï¼ + BYTEA bytea è®é·åç¯åºåï¼ä½¿ç¨NULLå符ä¹æ¯å許çï¼ + "char" char å®åå符 + + å¨ç³»çµ±è¡¨åå¨ä¸äºé¯èª¤è³è¨è£¡ä½ å°çå°å§é¨å稱ã + + ä¸é¢æåçåå種é¡åæ¯ "varlena"ï¼è®é·ï¼é¡åï¼ä¹å°±æ¯èªªï¼éé çååå + ç¯æ¯é·åº¦ï¼å¾é¢ææ¯è³æï¼ã æ¼æ¯å¯¦éä½ç¨ç空éæ¯è²æç大å°è¦å¤ä¸äºã + ç¶èéäºé¡åå¦å®ç¾©å¾é·æé½å¯ä»¥è¢«å£ç¸®åå²ï¼å æ + ¤ç£ç¤ç©ºéä¹å¯è½æ¯é æ³çè¦å°ã + + VARCHAR(n) å¨åå²éå¶äºæ大é·åº¦çè®é·å符串æ¯æ好çã TEXT é©ç¨æ¼å + å²æ大å¯é 1G å·¦å³ä½æªå®ç¾©éå¶é·åº¦çå符串ã + + CHAR(n) æé©åæ¼åå²é·åº¦ç¸åçå符串ã + CHAR(n)ææ ¹ææ給å®çæ¬ä½é·åº¦ä»¥ç©ºæ ¼è£è¶³ï¼ä¸è¶³çæ¬ä½å§å®¹ï¼ï¼ è + VARCHAR(n) åªåå²æ給å®çè³æå§å®¹ã BYTEA ç¨æ¼åå²äºé²å¶è³æï¼å°¤å¶æ¯åå« + NULL åç¯çå¼ãéäºé¡åå·æå·®ä¸å¤çæ§è½ã + + 4.11.1) ææ樣åµå»ºä¸ååºåèææ¯èªåéå¢çæ¬ä½ï¼ + + PostgreSQL æ¯æ SERIAL + è³æé¡åãï¼æ¬ä½å®ç¾©çºSERIALå¾ï¼å°èªååµå»ºä¸ååºåçæå¨ï¼ä¾å¦ï¼ + CREATE TABLE person ( + id SERIAL, + name TEXT + ); + + æèªåè½æçºä»¥ä¸SQLèªå¥ï¼ + CREATE SEQUENCE person_id_seq; + CREATE TABLE person ( + id INT4 NOT NULL DEFAULT nextval('person_id_seq'), + name TEXT + ); + + åè create_sequence æåé ç²åéæ¼åºåçæå¨çæ´å¤è³è¨ã + + 4.11.2) æå¦ä½ç²å¾ä¸åæå¥çåºåèçå¼ï¼ + + ä¸ç¨®æ¹æ³æ¯å¨æå¥ä¹ååç¨å½æ¸ nextval() å¾åºåå°è±¡è£¡æª¢ç´¢åºä¸ä¸å SERIAL + å¼ï¼ç¶å¾åç¨æ¤å¼ç²¾ç¢ºå°æå¥ãä½¿ç¨ 4.11.1 裡çä¾è¡¨ï¼å¯ç¨å½ç¢¼é樣æè¿°ï¼ + new_id = execute("SELECT nextval('person_id_seq')"); + execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')"); + + é樣éè½å¨å¶ä»æ¥è©¢ä¸ä½¿ç¨åæ¾å¨ new_id 裡çæ°å¼ï¼ä¾å¦ï¼ä½çºåç§ person + 表çå¤éµï¼ã 注æèªååµå»ºç SEQUENCE å°è±¡çå稱å°ææ¯ + <table>_<serialcolumn>_seqï¼ é裡 table å serialcolumn + åå¥æ¯ä½ ç表çå稱åä½ ç SERIAL æ¬ä½çå稱ã + + é¡ä¼¼çï¼å¨ SERIAL å°è±¡é è¨æå¥å¾ä½ å¯ä»¥ç¨å½æ¸ currval() 檢索å賦å¼ç + SERIAL å¼ï¼ä¾å¦ï¼ + execute("INSERT INTO person (name) VALUES ('Blaise Pascal')"); + new_id = execute("SELECT currval('person_id_seq')"); + + 4.11.3) åæä½¿ç¨ currval() æå°è´åå¶ä»ç¨æ¶çè¡çªææ³åï¼ + + ä¸æãcurrval() è¿åçæ¯ä½ æ¬æ¬¡æ話é²ç¨æ賦çå¼èä¸æ¯ææç¨æ¶çç¶åå¼ã + + 4.11.4) çºä»éº¼ä¸å¨äºåç°å¸¸ä¸æ¢å¾éç¨åºåèå¢ï¼çºä»éº¼å¨åºåèæ¬ä½çåå¼ä¸åå¨éæ·å¢ï¼ + + çºäºæé«ä½µç¼æ§ï¼åºåèå¨éè¦çæå賦äºæ + £å¨éè¡çäºåï¼ä¸¦ä¸å¨äºåçµæä¹åä¸é²è¡éå®ï¼ éå°±æå°è´ç°å¸¸ä¸ + æ¢çäºåå¾ï¼åºåèæåºç¾ééã + + 4.12) ä»éº¼æ¯ OID ï¼ä»éº¼æ¯ CTID ï¼ + + PostgreSQL 裡åµå»ºçæ¯ä¸è¡è¨éé½æç²å¾ä¸åå¯ä¸ç OIDï¼é¤éå¨åµå»ºè¡¨æä½¿ç¨ + WITHOUT OIDS é¸é ã OID åµå»ºææèªåçæä¸å 4ä½åçµçæ´æ¸ï¼ææ OID å¨ç¸æ + PostgreSQL 伺æå¨ä¸åæ¯å¯ä¸çã ç¶èï¼å®å¨è¶é 40åæå°æº¢åºï¼ OID æ + ¤å¾æåºç¾éè¤ãPostgreSQL å¨å®çå§é¨ç³»çµ±è¡¨è£¡ä½¿ç¨ OID + å¨è¡¨ä¹é建ç«è¯ç¹«ã + + å¨ç¨æ¶çè³æ表ä¸ï¼æ好æ¯ä½¿ç¨ SERIAl ä¾ä»£æ¿ OID å çº SERIAL åªè¦ä¿è + å¨å®å表ä¸çæ¸å¼æ¯å¯ä¸çå°±å¯ä»¥äºï¼é樣å®æº¢åºçå¯è½æ§å°±é常å°äºï¼ + SERIAL8 å¯ç¨ä¾ä¿å8ååçµçåºåæ¸å¼ã + + CTID ç¨æ¼æ¨è帶èè³æå¡ï¼å°åï¼åï¼å¡å§ï¼å移çç¹å®çç©çè¡ã CTID + å¨è¨é被æ´æ¹æéè¼å¾ç¼çæ¹è®ãç´¢å¼è³æ使ç¨å®åæåç©çè¡ã + + 4.13) çºä»éº¼ææ¶å°é¯èª¤è³è¨ãERROR: Memory exhausted in AllocSetAlloc()ãï¼ + + éå¾å¯è½æ¯ç³»çµ±çèæ¬å§åç¨åäºï¼æèå§æ ¸å°æäºè³æºæè¼ä½çéå¶å¼ãå¨åå + postmaster ä¹å試試ä¸é¢çå½ä»¤ï¼ + ulimit -d 262144 + limit datasize 256m + + å決æ¼ä½ ç¨ç + shellï¼ä¸é¢å½ä»¤åªæä¸æ¢è½æåï¼ä½æ¯å®å°æä½ çé²ç¨è³æ段éå¶è¨å¾æ¯è¼é«ï¼ + å èä¹è¨±è½è®æ¥è©¢å®æãéæ¢å½ä»¤æç¨æ¼ç¶åé²ç¨ï¼ä»¥åææå¨éæ¢å½ä»¤éè¡å¾åµå»ºç + åé²ç¨ã + å¦æä½ æ¯å¨éè¡SQL客æ¶ç«¯æå çºå¾å°è¿åäºå¤ªå¤çè³æèåºç¾åé¡ï¼è«å¨éè¡å®¢æ¶ç + «¯ä¹åå·è¡ä¸è¿°å½ä»¤ã + + 4.14) æå¦ä½æè½ç¥éæéè¡çPostgreSQLççæ¬ï¼ + + å¾ psql 裡ï¼è¼¸å¥ SELECT version();æ令ã + + 4.15) æå¦ä½åµå»ºä¸åé è¨å¼æ¯ç¶åæéçæ¬ä½ï¼ + + ä½¿ç¨ CURRENT_TIMESTAMPï¼ + CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); + + 4.16) ææ樣é²è¡ outer join ï¼å¤é£æ¥ï¼ï¼ + + PostgreSQL æ¡ç¨æ¨æºç SQL èªæ³æ¯æå¤é£æ¥ãé裡æ¯å©åä¾åï¼ + SELECT * + FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col); + + ææ¯ + SELECT * + FROM t1 LEFT OUTER JOIN t2 USING (col); + + éå©åçå¹çæ¥è©¢å¨ t1.col å t2.col ä¸åé£æ¥ï¼ä¸¦ä¸è¿å t1 ä¸ + æææªé£æ¥çè¡ï¼é£äºå¨ t2 ä¸æ²æå¹éçè¡ï¼ã å³[å¤]é£æ¥ï¼RIGHT OUTER + JOINï¼å°è¿å t2 ä¸æªé£æ¥çè¡ã å®å¨å¤é£æ¥ï¼FULL OUTER JOINï¼å°è¿å t1 å t2 + ä¸æªé£æ¥çè¡ã ééµå OUTER å¨å·¦[å¤]é£æ¥ãå³[å¤]é£æ¥åå®å¨[å¤]é£æ¥ä¸ + æ¯å¯é¸çï¼æ®éé£æ¥è¢«ç¨±çºå§é£æ¥ï¼INNER JOINï¼ã + + 4.17) å¦ä½ä½¿ç¨æ¶åå¤åè³æ庫çæ¥è©¢ï¼ + + æ²æ辦æ³æ¥è©¢ç¶åè³æ庫ä¹å¤çè³æ庫ã + å çºPostgreSQLè¦å è¼èè³æ庫ç¸éç系統ç®éï¼ç³»çµ±è¡¨ï¼ï¼å æ + ¤è·¨è³æ庫çæ¥è©¢å¦ä½å·è¡æ¯ä¸å®çã + + éå å¢å¼æ¨¡å¡ contrib/dblink + å許æ¡ç¨å½æ¸èª¿ç¨å¯¦ç¾è·¨åº«æ¥è©¢ãç¶ç¶ç¨æ¶ä¹å¯ä»¥åæé£æ¥å°ä¸åçè³æ庫å·è + ¡æ¥è©¢ç¶å¾å¨å®¢æ¶ç«¯åä½µçµæã + + 4.18) å¦ä½è®å½æ¸è¿åå¤è¡æå¤åè³æï¼ + + å¨å½æ¸ä¸è¿åè³æè¨ééçåè½æ¯å¾å®¹æ使ç¨çï¼è©³æåè¦ï¼ + http://techdocs.postgresql.org/guides/SetReturningFunctions + + 4.19) çºä»éº¼æå¨ä½¿ç¨ PL/PgSQL å½æ¸ååè¨æ表æææ¶å°é¯èª¤è³è¨ãrelation with OID + ##### does not existãï¼ + + PL/PgSQL æç·©åå½æ¸çè³æ¬å§å®¹ï¼ç±æ¤å¸¶ä¾çä¸åä¸å¥½çå¯ä½ç¨æ¯è¥ä¸å + PL/PgSQL + å½æ¸è¨ªåäºä¸åè¨æ表ï¼ç¶å¾è©²è¡¨è¢«åªé¤ä¸¦é建äºï¼åå次調ç¨è©²å½æ¸å°å¤ + ±æï¼ å çºç·©åçå½æ¸å§å®¹ä»ç¶æåèçè¨æ表ã解決çæ¹æ³æ¯å¨ PL/PgSQL ä¸ + ç¨EXECUTE å°è¨æ表é²è¡è¨ªåãé樣æä¿èæ¥è©¢å¨å·è¡å總æ被éæ°è§£æã + + 4.20) ç®åæåªäºè³æè¤å¯«(replication)æ¹æ¡å¯ç¨ï¼ + + ãè¤å¯«ãåªæ¯ä¸åè¡èªï¼æ好幾種è¤å¯«æè¡å¯ç¨ï¼æ¯ç¨®é½æåªé»å缺é»ï¼ + + 主/å¾å¼è¤å¯«æ¹å¼æ¯å許ä¸å主伺æå¨æ¥åè®/寫çç³è«ï¼èå¤åå¾ä¼ºæå¨åªè½æ¥å + è®/SELECTæ¥è©¢çç³è«ï¼ ç®åææµè¡ä¸åè²»ç主/å¾PostgreSQLè¤å¯«æ¹æ¡æ¯ + Slony-I ã + + å¤å主伺æå¨çè¤å¯«æ¹å¼å許å°è®/寫çç³è«ç¼é給å¤å°ç主æ©ï¼é種æ¹å¼ç±æ¼é + è¦å¨å¤å°ä¼ºæå¨ä¹éåæ¥è³æè®å å¯è½æ帶ä¾è¼å´éçæ§è½æ失ï¼Pgcluster + æ¯ç®åé種æ¹æ¡ä¸æ好çï¼ä¸¦ä¸éå¯ä»¥åè²»ä¸è¼ã + + ä¹æä¸äºåæ¥éä»è²»ååºæ¼ç¡¬é«çè³æè¤å¯«æ¹æ¡ï¼æ¯æä¸è¿°å種è¤å¯«æ¨¡åã + + 4.21) çºä½æ¥è©¢çµæ顯示ç表åææ¬åèæçæ¥è©¢èªå¥ä¸çä¸åï¼çºä½å¤§å¯«çæä¸è½ä¿çï¼ + + æ常è¦çåå æ¯å¨åµå»ºè¡¨æå°è¡¨åææ¯æ¬å使ç¨äºéå¼è( ' ' + )ï¼ç¶ä½¿ç¨äºéå¼èå¾ï¼è¡¨åææ¬åï¼ç¨±çºæ¨è符ï¼åå²ææ¯åå 大å°å¯«çï¼ + éæè¬èä½ å¨æ¥è©¢æ表åææ¬åä¹æ使ç¨éå¼èï¼ä¸äºå·¥å·è»é«ï¼å pgAdmin + æå¨ç¼åºåµå»ºè¡¨çæ令æèªåå°å¨æ¯åæ¨è符ä¸å éå¼èã å æ¤ï¼çºäºæ¨è + 符ççµ±ä¸ï¼ä½ æè©²ï¼ + * å¨åµå»ºè¡¨æé¿åå°æ¨è符使ç¨éå¼èå¼èµ·ä¾ã + * å¨æ¨è符ä¸åªä½¿ç¨å°å¯«åæ¯ã + * ï¼çºäºèå·²åå¨çæ¨è符ç¸åï¼å¨æ¥è©¢ä¸ä½¿ç¨éå¼èå°æ¨è符å¼èµ·ä¾ã diff --git a/doc/src/FAQ/FAQ_chinese.html b/doc/src/FAQ/FAQ_chinese_simp.html similarity index 96% rename from doc/src/FAQ/FAQ_chinese.html rename to doc/src/FAQ/FAQ_chinese_simp.html index 5198cbf129d..db0a0c306a0 100644 --- a/doc/src/FAQ/FAQ_chinese.html +++ b/doc/src/FAQ/FAQ_chinese_simp.html @@ -15,8 +15,8 @@ <h1> PostgreSQL 常è§é—®é¢˜ï¼ˆFAQ) </h1> -<p> 最近更新:2007 å¹´ 1 月 5 æ—¥ 星期五 15:40:20 EST <br/> - ä¸æ–‡ç‰ˆæœ€è¿‘更新:2007 å¹´ 1 月 29 æ—¥ 星期一 22:48:04 CST +<p> 最近更新:2007 å¹´ 1 月 30 æ—¥ 星期二 17:37:01 EST <br/> + ä¸æ–‡ç‰ˆæœ€è¿‘更新:2007 å¹´ 2 月 1 æ—¥ 星期四 12:55:04 CST </p> <p> ç›®å‰ç»´æŠ¤äººå‘˜ï¼šBruce Momjian (<a href="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</a>)<br/> ä¸æ–‡ç‰ˆç»´æŠ¤äººå‘˜ï¼šDaojing.Zhou(<a href="mailto:doudou586@gmail.com">doudou586@gmail.com</a>) @@ -49,7 +49,8 @@ <a href="#1.11">1.11</a>)æˆ‘åº”è¯¥æ€Žæ ·å¦ä¹ SQL ?<br/> <a href="#1.12">1.12</a>)如何æ交补ä¸æˆ–æ˜¯åŠ å…¥å¼€å‘队ä¼ï¼Ÿ<br/> -<a href="#1.13">1.13</a>)PostgreSQL 和其他数æ®åº“系统比起æ¥å¦‚何?<br/> +<a href="#1.13">1.13</a>)PostgreSQL 和其他数æ®åº“系统比起æ¥å¦‚何?<br/> +<a href="#1.14">1.14</a>)PostgreSQL å¯ä»¥å¤„ç†æœ€è¿‘å„个国家å¤æ—¶åˆ¶çš„å˜åŒ–å—?<br/> </p> <h2><a name="用户客户端问题"></a> 用户客户端问题 </h2> @@ -393,6 +394,10 @@ PostgreSQLä¸ä½¿ç”¨Bugè·Ÿè¸ªç³»ç»Ÿï¼Œå› ä¸ºæˆ‘ä»¬å‘现在邮件列表ä¸ç›´æŽ¥ </dl> +<h3><a name="1.14"></a>1.14) PostgreSQLå¯ä»¥å¤„ç†æœ€è¿‘å„个国家å¤æ—¶åˆ¶çš„å˜åŒ–å—?</h3> + +<p>PostgreSQL 8.0之å‰çš„版本是使用æ“作系统ä¸çš„时区数æ®åº“æ¥å¤„ç†å¤æ—¶åˆ¶çš„ä¿¡æ¯ï¼Œè‡ª8.0版åŠä»¥åŽçš„版本PostgreSQL会自身å«æœ‰æœ€æ–°çš„时区信æ¯ã€‚</p> + <hr/> diff --git a/doc/src/FAQ/FAQ_chinese_trad.html b/doc/src/FAQ/FAQ_chinese_trad.html new file mode 100644 index 00000000000..9a56180a084 --- /dev/null +++ b/doc/src/FAQ/FAQ_chinese_trad.html @@ -0,0 +1,1003 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html> +<head> + + <title>PostgreSQL 常è§é—®é¢˜ï¼ˆFAQ)</title> +</head> + + + +<body> + +<h1> PostgreSQL 常見å•é¡Œï¼ˆFAQ) </h1> + + +<p> 最近更新:2007 å¹´ 2 月 8 æ—¥ 星期二 22:43:13 EST <br/> + ä¸æ–‡ç‰ˆæœ€è¿‘更新:2007 å¹´ 2 月 12 æ—¥ 星期一 12:00:04 CST +</p> +<p> 當å‰ç¶è·äººå“¡ï¼šBruce Momjian (<a href="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</a>)<br/> + æ£é«”ä¸æ–‡ç‰ˆç¶è·äººå“¡ï¼šéƒæœç›Š(ChaoYi, Kuo)(<a href="mailto:kuo.chaoyi@gmail.com">kuo.chaoyi@gmail.com</a>)</p> + +<p> + 本文檔的最新版本å¯ä»¥åœ¨ + <a href="http://www.postgresql.org/files/documentation/faqs/FAQ.html">http://www.postgresql.org/files/documentation/faqs/FAQ.html</a> 查看。 +</p> +<p> + 與作æ¥ç³»çµ±å¹³å°ç›¸é—œçš„å•é¡Œå¯åœ¨ <a href="http://www.postgresql.org/docs/faq/">http://www.postgresql.org/docs/faq/</a> 裡找到ç”案。<br/> +</p> +<hr/> + +<h2><a name="常見å•é¡Œ"> 常見å•é¡Œ </a></h2> + + +<p> +<a href="#1.1">1.1</a>)PostgreSQL 是什麼?該怎麼發音?<br/> +<a href="#1.2">1.2</a>)誰控制和管ç†PostgreSQL ?<br/> +<a href="#1.3">1.3</a>)PostgreSQL的版權是什麼?<br/> +<a href="#1.4">1.4</a>)PostgreSQLå¯ä»¥é‹è¡Œåœ¨å“ªäº›ä½œæ¥ç³»çµ±å¹³å°ä¸Šï¼Ÿ<br/> +<a href="#1.5">1.5</a>)我從哪裡能得到PostgreSQL?<br/> + +<a href="#1.6">1.6</a>)最新版的 PostgreSQL 是什麼?<br/> +<a href="#1.7">1.7</a>)æˆ‘å¾žå“ªè£¡èƒ½å¾—åˆ°å° PostgreSQL 的支æŒï¼Ÿ<br/> +<a href="#1.8">1.8</a>)我如何æ交一個 BUG å ±å‘Šï¼Ÿ<br/> +<a href="#1.9">1.9</a>)我如何çžè§£å·²çŸ¥çš„ BUG 或暫缺的功能?<br/> +<a href="#1.10">1.10</a>)èƒ½å¤ ç²å–的最新文檔有哪些?<br/> +<a href="#1.11">1.11</a>)我應該怎樣å¸ç¿’ SQL ?<br/> + +<a href="#1.12">1.12</a>)如何æ交補ä¸æˆ–æ˜¯åŠ å…¥é–‹ç™¼éšŠä¼ï¼Ÿ<br/> +<a href="#1.13">1.13</a>)PostgreSQL 和其他資料庫系統比起來如何?<br/> +<a href="#1.14">1.14</a>)PostgreSQL å¯ä»¥è™•ç†æœ€è¿‘å„個國家å¤æ™‚制的變化嗎?<br/> +</p> + +<h2><a name="用戶客戶端å•é¡Œ"> 用戶客戶端å•é¡Œ </a></h2> +<p> +<a href="#2.1">2.1</a>)我們å¯ä»¥ç”¨ä»€éº¼èªžè¨€å’Œ PostgreSQL 進行æºé€šï¼Ÿ<br/> +<a href="#2.2">2.2</a>)有什麼工具å¯ä»¥æŠŠ PostgreSQL 用於 Web é é¢ï¼Ÿ<br/> + +<a href="#2.3">2.3</a>)PostgreSQL æ“有圖形用戶界é¢(GUI)嗎?<br/> +</p> + +<h2><a name="系統管ç†å•é¡Œ"> 系統管ç†å•é¡Œ </a></h2> +<p> +<a href="#3.1">3.1</a>)我怎樣æ‰èƒ½æŠŠ PostgreSQL è£åœ¨ /usr/local/pgsql 以外的地方?<br/> +<a href="#3.2">3.2</a>)我如何控制來自其他電腦的連接?<br/> +<a href="#3.3">3.3</a>)我怎樣調整資料庫伺æœå™¨ä»¥ç²å¾—更好的性能?<br/> + +<a href="#3.4">3.4</a>)PostgreSQL 裡å¯ä»¥ç²å¾—什麼樣的調試特性?<br/> +<a href="#3.5">3.5</a>)為什麼在試圖連接登錄時收到「Sorry, too many clients〠訊æ¯ï¼Ÿ<br/> +<a href="#3.6">3.6</a>)PostgreSQL çš„å‡ç´šéŽç¨‹æœ‰å“ªäº›å…§å®¹ï¼Ÿ<br/> +<a href="#3.7">3.7</a>)(使用 PostgreSQL )我需è¦ä½¿ç”¨ä»€éº¼é›»è…¦ç¡¬é«”?<br/> +</p> + +<h2><a name="æ“作å•é¡Œ"> æ“作å•é¡Œ </a></h2> + +<p> +<a href="#4.1">4.1</a>) 如何åªé¸æ“‡ä¸€å€‹æŸ¥è©¢çµæžœçš„é 幾行?或是隨機的一行?<br/> +<a href="#4.2">4.2</a>) 如何查看表ã€ç´¢å¼•ã€è³‡æ–™åº«ä»¥åŠç”¨æˆ¶çš„定義?如何查看<i> psql</i> 裡用到的查詢指令並顯示它們?<br/> +<a href="#4.3">4.3</a>) 如何更改一個欄ä½çš„資料類型?<br/> +<a href="#4.4">4.4</a>) å–®ç†è¨˜éŒ„,單一表,一個資料庫的最大é™åˆ¶æ˜¯å¤šå°‘?<br/> +<a href="#4.5">4.5</a>) å˜å„²ä¸€å€‹å…¸åž‹çš„文本文件裡的資料需è¦å¤šå°‘ç£ç¢Ÿç©ºé–“?<br/> + +<a href="#4.6">4.6</a>) 為什麼我的查詢很慢?為什麼這些查詢沒有利用索引?<br/> +<a href="#4.7">4.7</a>) 我如何æ‰èƒ½çœ‹åˆ°æŸ¥è©¢å„ªåŒ–器是怎樣評估處ç†æˆ‘的查詢的?<br/> +<a href="#4.8">4.8</a>) 我怎樣åšæ£å‰‡è¡¨é”å¼æœç´¢å’Œå¤§å°å¯«ç„¡é—œçš„æ£å‰‡è¡¨é”å¼æŸ¥æ‰¾ï¼Ÿæ€Žæ¨£åˆ©ç”¨ç´¢å¼•é€²è¡Œå¤§å°å¯«ç„¡é—œæŸ¥æ‰¾ï¼Ÿ<br/> +<a href="#4.9">4.9</a>) 在一個查詢裡,我怎樣檢測一個欄ä½æ˜¯å¦ç‚º NULL?我如何æ‰èƒ½æº–確排åºè€Œä¸è«–æŸæ¬„ä½æ˜¯å¦å«NULL值?<br/> +<a href="#4.10">4.10</a>) å„種å—符類型之間有什麼ä¸åŒï¼Ÿ<br/> +<a href="#4.11.1">4.11.1</a>) 我怎樣創建一個åºåˆ—號型或是自動éžå¢žçš„欄ä½ï¼Ÿ<br/> + +<a href="#4.11.2">4.11.2</a>) 我如何ç²å¾—一個æ’入的åºåˆ—號的值?<br/> +<a href="#4.11.3">4.11.3</a>) åŒæ™‚使用 currval() 會導致和其他用戶的è¡çªæƒ…æ³å—Žï¼Ÿ<br/> +<a href="#4.11.4">4.11.4</a>) 為什麼ä¸åœ¨äº‹å‹™ç•°å¸¸ä¸æ¢å¾Œé‡ç”¨åºåˆ—號呢?為什麼在åºåˆ—號欄ä½çš„å–值ä¸å˜åœ¨é–“斷呢?<br/> +<a href="#4.12">4.12</a>) 什麼是 OID?什麼是 CTID ?<br/> +<a href="#4.13">4.13</a>) 為什麼我收到錯誤資訊「<i>ERROR: Memory exhausted in AllocSetAlloc()</i>ã€ï¼Ÿ<br/> + +<a href="#4.14">4.14</a>) 我如何æ‰èƒ½çŸ¥é“所é‹è¡Œçš„ PostgreSQL 的版本?<br/> +<a href="#4.15">4.15</a>) 我如何創建一個é è¨å€¼æ˜¯ç•¶å‰æ™‚間的欄ä½ï¼Ÿ<br/> +<a href="#4.16">4.16</a>) 如何執行外連接(outer join)查詢?<br/> +<a href="#4.17">4.17</a>) 如何執行涉åŠå¤šå€‹è³‡æ–™åº«çš„查詢?<br/> +<a href="#4.18">4.18</a>) 如何讓函數返回多行或多列資料?<br/> +<a href="#4.19">4.19</a>) 為什麼我在使用 PL/PgSQL 函數å˜å–臨時表時會收到錯誤資訊「relation with OID ##### does not existã€ï¼Ÿ<br/> + +<a href="#4.20">4.20</a>) ç›®å‰æœ‰å“ªäº›è³‡æ–™è¤‡å¯«(replication)方案å¯ç”¨ï¼Ÿ<br/> +<a href="#4.21">4.21</a>) 為何查詢çµæžœé¡¯ç¤ºçš„表å或欄å與我的查詢語å¥ä¸çš„ä¸åŒï¼Ÿç‚ºä½•å¤§å¯«ç‹€æ…‹ä¸èƒ½ä¿ç•™ï¼Ÿ<br/> +</p> + +<hr/> + +<h2><a name="常見å•é¡Œ"> 常見å•é¡Œ </a></h2> + +<h3><a name="常見å•é¡Œ"> </a><a name="1.1">1.1) PostgreSQL 是什麼?該怎麼發音? </a></h3> + + +<p><a name="1.1">PostgreSQL 讀作 <i>Post-Gres-Q-L</i>,有時候也簡稱為<i>Postgres</i> 。想è½ä¸€ä¸‹å…¶ç™¼éŸ³çš„人員å¯å¾žé€™è£¡ä¸‹è¼‰è²éŸ³æ–‡ä»¶ï¼š + </a><a href="http://www.postgresql.org/files/postgresql.mp3">MP3 æ ¼å¼</a> 。 +</p> + +<p>PostgreSQL 是é¢å‘目標的關係資料庫系統,它具有傳統商æ¥è³‡æ–™åº«ç³»çµ±çš„所有功能,åŒæ™‚åˆå«æœ‰å°‡åœ¨ä¸‹ä¸€ä»£ DBMS 系統的使用的增強特性。PostgreSQL 是自由å…費的,並且所有æºä»£ç¢¼éƒ½å¯ä»¥ç²å¾—。 +</p> + +<p>PostgreSQL 的開發隊ä¼ä¸»è¦ç‚ºå¿—願者,他們é佈世界å„地並通éŽäº’è¯ç¶²é€²è¡Œè¯ç¹«ï¼Œé€™æ˜¯ä¸€å€‹ç¤¾å€é–‹ç™¼é …目,它ä¸è¢«ä»»ä½•å…¬å¸æŽ§åˆ¶ã€‚ + å¦‚æƒ³åŠ å…¥é–‹ç™¼éšŠä¼ï¼Œè«‹åƒè¦‹é–‹ç™¼äººå“¡å¸¸è¦‹å•é¡Œï¼ˆFAQ) + <a href="http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html">http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html</a> + +</p> + +<h3> <a name="1.2">1.2) 誰控制 PostgreSQL ? </a></h3> +<p> +<a name="1.2"> å¦‚æžœä½ åœ¨å°‹æ‰¾PostgreSQL的掌門人,或是什麼ä¸å¤®å§”員會,或是什麼所屬公å¸ï¼Œä½ åªèƒ½æ”¾æ£„了---å› ç‚ºä¸€å€‹ä¹Ÿä¸å˜åœ¨ï¼Œä½†æˆ‘們的確有一個 + æ ¸å¿ƒå§”å“¡æœƒå’ŒCVS管ç†çµ„,但這些工作組的è¨ç«‹ä¸»è¦æ˜¯ç‚ºäº†é€²è¡Œç®¡ç†å·¥ä½œè€Œä¸æ˜¯å°PostgreSQL進行ç¨ä½”å¼æŽ§åˆ¶ï¼ŒPostgreSQLé …ç›®æ˜¯ç”±ä»»ä½•äººå‡ + å¯åƒåŠ 的開發人員社å€å’Œæ‰€æœ‰ç”¨æˆ¶æŽ§åˆ¶çš„ï¼Œä½ æ‰€éœ€è¦åšçš„就是訂閱郵件列表,åƒèˆ‡è¨Žè«–å³å¯ï¼ˆè¦åƒèˆ‡PostgreSQL的開發詳見 + </a><a href="http://www.postgresql.org/docs/faqs.FAQ_DEV.html"> 開發人員常å•é¡Œ (Developer's FAQ) </a>ç²å–資訊)。 +</p> + + +<h3> <a name="1.3">1.3) PostgreSQL 的版權是什麼? </a></h3> + + +<p><a name="1.3">PostgreSQL的發布éµå¾žç¶“典的 BSD 版權。它å…許用戶ä¸é™ç›®çš„地使用 PostgreSQLï¼Œç”šè‡³ä½ å¯ä»¥éŠ·å”® +PostgreSQL 而ä¸å«æºä»£ç¢¼ä¹Ÿå¯ä»¥ï¼Œå”¯ä¸€çš„é™åˆ¶å°±æ˜¯ä½ ä¸èƒ½å› 軟體自身å•é¡Œè€Œå‘我們追訴法律責任,å¦å¤–就是è¦æ±‚所有的軟體拷è²ä¸é ˆåŒ…括以下版權è²æ˜Žã€‚ +下é¢å°±æ˜¯æˆ‘們所使用的BSD版權è²æ˜Žå…§å®¹ï¼š</a></p> + +<p><a name="1.3">PostgreSQL 資料庫管ç†ç³»çµ±</a></p> + +<p><a name="1.3"> 部分版權(c)1996-2005,PostgreSQL å…¨çƒé–‹ç™¼å°çµ„,部分版權(c)1994-1996 åŠ å·žå¤§å¸è‘£äº‹</a></p> + +<p><a name="1.3"> (Portions copyright (c) 1996-2005,PostgreSQL Global +Development Group Portions Copyright (c) 1994-6 Regents of the +University of California)</a></p> + +<p> +<a name="1.3"> å…許為任何目的使用,拷è²ï¼Œä¿®æ”¹å’Œåˆ†ç™¼é€™å€‹è»Ÿé«”和它的文檔而ä¸æ”¶å–任何費用, + ä¸¦ä¸”ç„¡é ˆç°½ç½²å› æ¤è€Œç”¢ç”Ÿçš„è‰æ˜Žï¼Œå‰æ是上é¢çš„版權è²æ˜Žå’Œæœ¬æ®µä»¥åŠä¸‹é¢å…©æ®µæ–‡å—出ç¾åœ¨æ‰€æœ‰æ‹·è²ä¸ã€‚ + +</a></p> + +<p> +<a name="1.3"> (Permission to use, copy, modify, and distribute this software and its + documentation for any purpose, without fee, and without a written agreement is + hereby granted, provided that the above copyright notice and this paragraph and + the following two paragraphs appear in all copies.) +</a></p> + +<p> +<a name="1.3"> 在任何情æ³ä¸‹ï¼ŒåŠ 州大å¸éƒ½ä¸æ‰¿æ“”å› ä½¿ç”¨æ¤è»Ÿé«”åŠå…¶æ–‡æª”而導致的å°ä»»ä½•ç•¶äº‹äººçš„直接的, + é–“æŽ¥çš„ï¼Œç‰¹æ®Šçš„ï¼Œé™„åŠ çš„æˆ–è€…ç›¸ä¼´è€Œç”Ÿçš„æ壞,包括利益æ失的責任,å³ä½¿åŠ 州大å¸å·²ç¶“建è°äº†é€™äº›æ失的å¯èƒ½æ€§æ™‚也是如æ¤ã€‚ +</a></p> + +<p> +<a name="1.3"> (IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST + PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF + THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + DAMAGE.) +</a></p> + + +<p> +<a name="1.3"> åŠ å·žå¤§å¸æ˜Žç¢ºæ”¾æ£„任何ä¿è‰ï¼ŒåŒ…括但ä¸å±€é™æ–¼æŸä¸€ç‰¹å®šç”¨é€”的商æ¥å’Œåˆ©ç›Šçš„éš±å«ä¿è‰ã€‚ + 這裡æ供的這份軟體是基於「當作是ã€çš„åŸºç¤Žçš„ï¼Œå› è€ŒåŠ å·žå¤§å¸æ²’有責任æä¾›ç¶è·ï¼Œæ”¯æŒï¼Œæ›´æ–°ï¼Œå¢žå¼·æˆ–者修改的æœå‹™ã€‚ +</a></p> + +<p> +<a name="1.3"> (THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT + NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND + THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, + SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.)<br/> + +</a></p> + +<h3><a name="1.3"> </a><a name="1.4">1.4) PostgreSQL å¯ä»¥é‹è¡Œåœ¨å“ªäº›ä½œæ¥ç³»çµ±å¹³å°ä¸Šï¼Ÿ </a></h3> + +<p><a name="1.4"> 一般說來,任何ç¾åœ¨å° UNIX 相容的作æ¥ç³»çµ±ä¹‹ä¸Šéƒ½èƒ½é‹è¡Œ PostgreSQL 。在安è£æŒ‡å—裡列出了發佈時經éŽæ˜Žç¢ºæ¸¬è©¦çš„å¹³å°ã€‚</a></p> + + +<p><a name="1.4">PostgreSQL 也å¯ä»¥ç›´æŽ¥é‹è¡Œåœ¨åŸºæ–¼å¾®è»Ÿ Windows-NT 的作æ¥ç³»çµ±ï¼Œå¦‚ Win2000 SP4,WinXP å’Œ Win2003,已製作完æˆçš„安è£åŒ…å¯å¾ž + </a><a href="http://pgfoundry.org/projects/pginstaller">http://pgfoundry.org/projects/pginstaller</a>下載,基於MSDOSçš„Windows作æ¥ç³»çµ± + (Win95,Win98,WinMe)需è¦é€šéŽCygwin模擬環境é‹è¡ŒPostgreSQL。 +</p> + +<p> + åŒæ™‚也有一個為 Novell Netware 6 開發的版本å¯å¾ž <a href="http://forge.novell.com" target="_top">http://forge.novell.com</a> ç²å–,為OS/2(eComStation)開發的版本å¯å¾ž + <a href="http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2F" target="_top">http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2F</a> 下載。 + +</p> + +<h3> <a name="1.5">1.5) 我從哪裡能得到 PostgreSQL? </a></h3> + +<p> +<a name="1.5"> 通éŽç€è¦½å™¨å¯å¾ž </a><a href="http://www.postgresql.org/ftp/">http://www.postgresql.org/ftp/</a> 下載,也å¯é€šéŽFTP,從 + <a href="ftp://ftp.PostgreSQL.org/pub/">ftp://ftp.PostgreSQL.org/pub/</a> 站點下載。 +</p> + +<h3> <a name="1.6">1.6) 最新版的 PostgreSQL 是什麼? </a></h3> + + +<p><a name="1.6">PostgreSQL 最新的版本是版本 8.2.3 。</a></p> + +<p><a name="1.6">我們計劃æ¯å¹´ç™¼ä½ˆä¸€å€‹ä¸»è¦å‡ç´šç‰ˆæœ¬ï¼Œæ¯å¹¾å€‹æœˆç™¼ä½ˆä¸€å€‹å°ç‰ˆæœ¬ã€‚</a></p> + + +<h3><a name="1.6"> </a><a name="1.7">1.7) æˆ‘å¾žå“ªè£¡èƒ½å¾—åˆ°å° PostgreSQL 的支æŒï¼Ÿ </a></h3> + +<p><a name="1.7">PostgreSQL社å€é€šéŽéƒµä»¶åˆ—表為其大多數用戶æ供幫助,訂閱郵件列表的主站點是 </a><a href="http://www.postgresql.org/community/lists/" target="_top">http://www.postgresql.org/community/lists/</a>,一般情æ³ä¸‹ï¼Œå…ˆåŠ å…¥<i>General</i> 或 <i>Bug</i>郵件列表是一個較好的開始。 +</p> + +<p> + 主è¦çš„IRCé »é“是在FreeNode(<i>irc.freenode.net</i>)çš„<i>#postgresql</i>,為了連上æ¤é »é“,å¯ä»¥ä½¿ç”¨ UNIX ç¨‹åº ircï¼Œå…¶æŒ‡ä»¤æ ¼å¼ï¼š + irc -c '#postgresql' "$USER" irc.freenode.net ,或者使用其他IRC客戶端程åºã€‚在æ¤ç¶²çµ¡ä¸é‚„å˜åœ¨ä¸€å€‹ PostgreSQL 的西çç‰™é »é“(<i>#postgersql-es</i>)å’Œæ³•èªžé »é“ + (<i>#postgresql-fr</i>)。åŒæ¨£åœ°ï¼Œåœ¨ EFNET 上也有一個 PostgreSQL 的交æµé »é“。 +</p> + +<p> + å¯æ供商æ¥æ”¯æŒçš„å…¬å¸åˆ—表å¯åœ¨ <a href="http://techdocs.postgresql.org/companies.php" target="_top">http://techdocs.postgresql.org/companies.php</a> ç€è¦½ã€‚ + +</p> + + + +<h3> <a name="1.8">1.8) 我如何æ交一個 BUG å ±å‘Šï¼Ÿ </a></h3> + +<p> +<a name="1.8"> å¯è¨ªå• </a><a href="http://www.postgresql.org/support/submitbug">http://www.postgresql.org/support/submitbug</a>,填寫 Bug ä¸Šå ±è¡¨æ ¼å³å¯ï¼ŒåŒæ¨£ä¹Ÿå¯è¨ªå• ftp 站點 <a href="ftp://ftp.PostgreSQL.org/pub/">ftp://ftp.PostgreSQL.org/pub/</a> 檢查有無更新的PostgreSQL 版本或補ä¸ã€‚ +</p> + + +<p> +通éŽä½¿ç”¨ Bug æäº¤è¡¨æ ¼æˆ–æ˜¯ç™¼å¾€ PostgreSQL 郵件列表的 Bug 通常會有以下之一回覆: +</p> + +<ul> +<li>所æ交內容ä¸æ˜¯ä¸€å€‹ Bug åŠå…¶ä¸æ˜¯ Bug çš„åŽŸå› ã€‚</li> +<li>所æ交內容是一個已知的 Bug ä¸¦ä¸”å·²ç¶“åŠ å…¥ TODO 待處ç†ä»»å‹™åˆ—表。</li> +<li>所æ交的 Bug 已在當å‰ç‰ˆæœ¬ä¸è¢«ä¿®æ£ã€‚</li> +<li>所æ交的 Bug 已修æ£ä½†å°šæœªå°‡è£œä¸åŠ å…¥ç¾åœ¨çš„發布軟體包。</li> +<li>請求æ交者æ供更詳細的資訊: + <ul> + <li>作æ¥ç³»çµ±</li> + + <li>PostgreSQL 版本</li> + <li>å¯é‡ç¾ Bug 的測試案例</li> + <li>調試資訊</li> + <li>調試跟蹤輸出</li> + </ul> +</li> +<li>所æ交內容是一個新 Bug,將執行以下工作: + <ul> + + <li>創建一個新補ä¸ä¸¦å°‡å…¶åŠ 入下一個主è¦ç‰ˆæœ¬æˆ–是å°çš„改進版本ä¸ã€‚</li> + <li>æ¤ Bug 暫時ä¸èƒ½ä¿®æ£ï¼Œå°‡è¢«åŠ 至 TODO 待處ç†ä»»å‹™åˆ—表。</li> + </ul> +</li> +</ul> + + +<h3> <a name="1.9">1.9) 我如何çžè§£å·²çŸ¥çš„ BUG 或暫缺的功能? </a></h3> +<p><a name="1.9">PostgreSQL 支æŒä¸€å€‹æ“´å±•çš„ SQL:2003 çš„å集。åƒé–±æˆ‘們的</a><a href="http://www.postgresql.org/docs/faqs.TODO.html"> TODO</a> 列表,çžè§£å·²çŸ¥ Bug 列表ã€æš«ç¼ºçš„功能和將來的開發計劃。 + +</p> + +<p>è¦æ±‚å¢žåŠ æ–°åŠŸèƒ½çš„ç”³è«‹é€šå¸¸æœƒæ”¶åˆ°ä»¥ä¸‹ä¹‹ä¸€çš„å›žè¦†ï¼š</p> + +<ul> +<li>è©²åŠŸèƒ½å·²åŠ å…¥ TODO 待處ç†ä»»å‹™åˆ—表。</li> +<li>該功能ä¸æ˜¯å¿…é ˆçš„ï¼Œå› ç‚ºï¼š + <ul> + <li>它是ç¾æœ‰çš„ä¸”ç¬¦åˆ SQL 標準的æŸåŠŸèƒ½çš„é‡è¤‡ã€‚</li> + <li>è©²åŠŸèƒ½æ€§æœƒå¤§å¤§å¢žåŠ ä»£ç¢¼çš„è¤‡é›œç¨‹åºï¼Œè€Œå¸¶ä¾†çš„好處是微ä¸è¶³é“的。</li> + <li>該功能是ä¸å®‰å…¨æˆ–是ä¸å¯é 的。</li> + + </ul> +</li> +<li>è©²åŠŸèƒ½å°‡è¢«åŠ å…¥ TODO 待處ç†ä»»å‹™åˆ—表。</li> +</ul> + +<p> +PostgreSQL ä¸ä½¿ç”¨ Bug è·Ÿè¹¤ç³»çµ±ï¼Œå› ç‚ºæˆ‘å€‘ç™¼ç¾åœ¨éƒµä»¶åˆ—表ä¸ç›´æŽ¥å›žè¦†ä»¥åŠä¿è‰ TODO 任務列表總是處於最新狀態的方å¼å·¥ä½œæ•ˆçŽ‡æœƒæ›´é«˜ä¸€äº›ã€‚事實上,Bugä¸æœƒåœ¨æˆ‘們的軟體ä¸å˜åœ¨å¾ˆé•·æ™‚間, +å°å½±éŸ¿å¾ˆå¤šç”¨æˆ¶çš„Bug也總是很快會被修æ£ã€‚唯一能找到所有改進ã€æ高和修æ£çš„地方是 CVS 的日誌資訊,å³ä½¿æ˜¯åœ¨è»Ÿé«”新版本的發布資訊ä¸ä¹Ÿä¸æœƒåˆ—出æ¯ä¸€è™•çš„軟體更新。 +</p> + + + +<h3> <a name="1.10">1.10) èƒ½å¤ ç²å–的最新文檔有哪些? </a></h3> + + +<p><a name="1.10">PostgreSQL 包å«å¤§é‡çš„文檔,主è¦æœ‰è©³ç´°çš„åƒè€ƒæ‰‹å†Šï¼Œæ‰‹å†Šé 和一些的測試例å。åƒè¦‹ /doc 目錄(è¯è¨»ï¼šæ‡‰ç‚º $PGHOME/doc)。 + ä½ é‚„å¯ä»¥åœ¨ç·šç€è¦½ PostgreSQL 的手冊,其網å€æ˜¯ï¼š</a><a href="http://www.PostgreSQL.org/docs">http://www.PostgreSQL.org/docs</a>。 +</p> + +<p> + 有兩本關於PostgreSQL的書在線æ供,在 + <a href="http://www.postgresql.org/docs/books/awbook.html">http://www.postgresql.org/docs/books/awbook.html</a> + å’Œ <a href="http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook/</a> 。 + 也有大é‡çš„ PostgreSQL 書ç±å¯ä¾›è³¼è²·ï¼Œå…¶ä¸æœ€ç‚ºæµè¡Œçš„一本是由 Korry Douglas 編寫的。在 + <a href="http://techdocs.PostgreSQL.org/techdocs/bookreviews.php">http://techdocs.PostgreSQL.org/techdocs/bookreviews.php</a>上 + 上有大é‡æœ‰é—œ PostgreSQL 書ç±çš„簡介。 + 在 <a href="http://techdocs.PostgreSQL.org/">http://techdocs.PostgreSQL.org/</a> 上收集了有關 PostgreSQL 的大é‡æŠ€è¡“æ–‡ç« ã€‚</p> + +<p> + 客戶端的命令行程åº<i>psql</i>有一些以 \d é–‹é 的命令,å¯é¡¯ç¤ºé—œæ–¼é¡žåž‹ï¼Œæ“作符,函數,èšåˆç‰è³‡è¨Šï¼Œä½¿ç”¨ \? å¯ä»¥é¡¯ç¤ºæ‰€æœ‰å¯ç”¨çš„命令。 +</p> + +<p> + 我們的 web 站點包å«æ›´å¤šçš„文檔。 +</p> + + + +<h3> <a name="1.11">1.11) 我應該怎樣å¸ç¿’ SQL ? </a></h3> + +<p> +<a name="1.11"> 首先考慮上述æ到的與PostgreSQL相關的書ç±ï¼Œå¦å¤–一本是 <i>Teach Yourself SQL in 21 Days, Second Edition</i>,其詳細介紹的網å€æ˜¯ + </a><a href="http://members.tripod.com/er4ebus/sql/index.htm">http://members.tripod.com/er4ebus/sql/index.htm</a>, + 我們的許多用戶喜æ¡<i>The Practical SQL Handbook</i>, Bowman, Judith S. 編寫,Addison-Wesleyå…¬å¸å‡ºç‰ˆï¼Œå…¶ä»–çš„å‰‡å–œæ¡ + <i>The Complete Reference SQL</i>, Groff 編寫,McGraw-Hill å…¬å¸å‡ºç‰ˆã€‚ +</p> + +<p>在下列網å€ä¸Šä¹Ÿæœ‰å¾ˆå¥½çš„教程,他們是</p> +<ul> +<li><a href="http://www.intermedia.net/support/sql/sqltut.shtm">http://www.intermedia.net/support/sql/sqltut.shtm</a></li> +<li><a href="http://sqlcourse.com/">http://sqlcourse.com.</a></li> +<li><a href="http://www.w3schools.com/sql/default.asp">http://www.w3schools.com/sql/default.asp</a></li> +<li><a href="http://mysite.verizon.net/Graeme_Birchall/id1.html">http://mysite.verizon.net/Graeme_Birchall/id1.html</a></li> +</ul> + + + +<h3> <a name="1.12">1.12)如何æ交補ä¸æˆ–æ˜¯åŠ å…¥é–‹ç™¼éšŠä¼ï¼Ÿ </a></h3> +<p> +<a name="1.12"> 詳見</a><a href="http://www.PostgreSQL.org/docs/awbook.html"> 開發人員常見å•é¡Œ (Developer's FAQ) </a>。</p> + + +<h3> <a name="1.13">1.13) PostgreSQL 和其他資料庫系統比起來如何? </a></h3> + +<p> +<a name="1.13">評價軟體有好幾種方法:功能,性能,å¯é 性,支æŒå’Œåƒ¹æ ¼ã€‚ +</a></p> + +<dl> +<a name="1.13"> <dt><b>功能</b></dt> + <dd>PostgreSQL æ“有大型商用資料庫最多的功能,例如:事務,å查詢,觸發器,視圖,外éµåƒè€ƒå®Œæ•´æ€§å’Œè¤‡é›œçš„鎖定ç‰ã€‚ + 我們還有一些它們沒有的特性,如用戶定義類型,繼承,è¦å‰‡å’Œå¤šç‰ˆæœ¬ä¸¦è¡ŒæŽ§åˆ¶ä»¥æ¸›å°‘鎖的çˆç”¨ç‰ã€‚<br/> + + </dd> + + <dt><b>性能</b></dt> + <dd>PostgreSQL和其他商用和開æºçš„資料庫具有類似的性能。å°æŸäº›è™•ç†å®ƒæ¯”較快,å°å…¶ä»–一些處ç†å®ƒæ¯”較慢。 + 與其他資料庫相比,我們的性能優劣通常在 +/- 10%之間。<br/> + </dd> + + <dt><b>å¯é 性</b></dt> + <dd> + + 我們都知é“è³‡æ–™åº«å¿…é ˆæ˜¯å¯é 的,å¦å‰‡å®ƒå°±ä¸€é»žç”¨éƒ½æ²’有。我們努力åšåˆ°ç™¼ä½ˆç¶“éŽèªçœŸæ¸¬è©¦çš„,缺陷最少的穩定代碼。æ¯å€‹ç‰ˆæœ¬è‡³å°‘有一個月的 beta + 測試時間,並且我們的發布æ·å²é¡¯ç¤ºæˆ‘們å¯ä»¥æ供穩定的,牢固的,å¯ç”¨æ–¼ç”Ÿç”¢ä½¿ç”¨çš„版本。我們相信在這方é¢æˆ‘們與其他的資料庫軟體是相當的。<br/> + </dd> + + <dt><b>支æŒ</b></dt> + <dd> + 我們的郵件列表æ供一個éžå¸¸å¤§çš„開發人員和用戶的組以幫助解決所碰到的任何å•é¡Œã€‚我們ä¸èƒ½ä¿è‰ç¸½æ˜¯èƒ½è§£æ±ºå•é¡Œï¼Œç›¸æ¯”之下,商用資料庫軟體也並ä¸æ˜¯ç¸½èƒ½å¤ æ供解決方法。 + 直接與開發人員,用戶群,手冊和æºç¨‹åºæŽ¥è§¸ä½¿PostgreSQL的支æŒæ¯”其他資料庫還è¦å¥½ã€‚還有一些商æ¥æ€§çš„å…¨é¢æŠ€è¡“支æŒï¼Œå¯ä»¥çµ¦æ供給那些需è¦çš„人。(åƒé–±1.7 å°ç¯€ï¼‰<br/> + </dd> + + + <dt><b>åƒ¹æ ¼</b></dt> + <dd> + 我們å°ä»»ä½•ç”¨é€”都å…費,包括商用和éžå•†ç”¨ç›®çš„。 + ä½ å¯ä»¥ä¸åŠ é™åˆ¶åœ°å‘ä½ çš„ç”¢å“è£¡åŠ å…¥æˆ‘å€‘çš„ä»£ç¢¼ï¼Œé™¤äº†é‚£äº›æˆ‘å€‘åœ¨ä¸Šé¢çš„版權è²æ˜Žè£¡è²æ˜Žçš„ BSD版權之外的內容。 + </dd> + +</a></dl> + + +<h3><a name="1.14">1.14) PostgreSQL å¯ä»¥è™•ç†æœ€è¿‘å„個國家å¤æ™‚制的變化嗎?</a></h3> +<a name="1.14"> +</a> +<p><a name="1.14">PostgreSQL 8.0之å‰çš„版本是使用作æ¥ç³»çµ±ä¸çš„時å€è³‡æ–™åº«ä¾†è™•ç†å¤æ™‚制的資訊,自 8.0 版åŠä»¥å¾Œçš„版本 PostgreSQL 會自身å«æœ‰æœ€æ–°çš„時å€è³‡è¨Šã€‚</a></p> + + +<hr/> + + +<h2><a name="用戶客戶端å•é¡Œ"> 用戶客戶端å•é¡Œ </a></h2> + + +<h3><a name="用戶客戶端å•é¡Œ"> </a><a name="2.1">2.1) 我們å¯ä»¥ç”¨ä»€éº¼èªžè¨€å’Œ PostgreSQL 進行æºé€šï¼Ÿ </a></h3> + +<p><a name="2.1">PostgreSQL (é è¨æƒ…æ³)åªå®‰è£æœ‰ C å’Œå…§åµŒå¼ C 的接å£ï¼Œå…¶ä»–的接å£éƒ½æ˜¯ç¨ç«‹çš„é …ç›®ï¼Œèƒ½å¤ åˆ†åˆ¥ä¸‹è¼‰ï¼Œé€™äº›æŽ¥å£é …ç›®ç¨ç«‹çš„好處 + 是他們å¯ä»¥æœ‰å„自的發布計劃和å„自ç¨ç«‹çš„開發組。 +</a></p> +<p> +<a name="2.1"> 一些編程語言如 PHP éƒ½æœ‰è¨ªå• PostgreSQL 的接å£ï¼ŒPerlã€TCLã€Python 以åŠå¾ˆå¤šå…¶ä»–語言的接å£åœ¨ + </a><a href="http://gborg.postgresql.org" target="_top">http://gborg.postgresql.org</a> 網站上的<i> Drivers/Interfaces</i> å°ç¯€å¯æ‰¾åˆ°ï¼Œ + ä¸¦ä¸”é€šéŽ Internet 很容易æœç´¢åˆ°ã€‚ +</p> + + + + +<h3> <a name="2.2">2.2) 有什麼工具å¯ä»¥æŠŠ PostgreSQL 用於 Web é é¢ï¼Ÿ </a></h3> +<p> +<a name="2.2"> 一個介紹以資料庫為後å°çš„挺ä¸éŒ¯çš„站點是:</a><a href="http://www.webreview.com">http://www.webreview.com</a>。 +</p> +<p> + å°æ–¼ Web 集æˆï¼ŒPHP 是一個極好的接å£ã€‚它在 <a href="http://www.php.net/">http://www.php.net/</a>。 + +</p> +<p> + å°æ–¼è¤‡é›œçš„任務,很多人採用 Perl 接å£å’Œ 使用 CGI.pm çš„ DBD::Pg 或 mod_perl 。 +</p> + + +<h3> <a name="2.3">2.3)PostgreSQL æ“有圖形用戶界é¢å—Žï¼Ÿ </a></h3> +<p> +<a name="2.3"> 商æ¥ç”¨æˆ¶æˆ–是開æºé–‹ç™¼äººå“¡èƒ½æ‰¾åˆ°å¾ˆå¤šçš„有關 PostgreSQLçš„GUI 圖形工具軟體,在 </a><a href="http://www.postgresql.org/docs/techdocs.54">PostgreSQL社å€æ–‡æª”</a> 有一個詳細的列表。 +</p> + + +<hr/> + + + +<h2><a name="系統管ç†å•é¡Œ"> 系統管ç†å•é¡Œ </a></h2> + +<h3><a name="系統管ç†å•é¡Œ"> </a><a name="3.1">3.1)我怎樣能把 PostgreSQL è£åœ¨ /usr/local/pgsql 以外的地方? </a></h3> +<p> +<a name="3.1"> 在é‹è¡Œ configure æ™‚åŠ ä¸Š --prefix é¸é …。 +</a></p> + + + +<h3><a name="3.1"> </a><a name="3.2">3.2) 我如何控制來自其他電腦的連接? </a></h3> +<p> +<a name="3.2"> é è¨æƒ…æ³ä¸‹ï¼ŒPostgreSQL åªå…è¨±ä¾†è‡ªæœ¬æ©Ÿä¸”é€šéŽ unix 域套接å—或 TCP/IP æ–¹å¼çš„連接。 + ä½ åªæœ‰åœ¨ä¿®æ”¹äº†é…置文件 <i>postgresql.conf</i> ä¸çš„ <i>listen_addresses</i>,且也在é…置文件 <i>$PGDATA/pg_hba.conf</i> ä¸æ‰“開了 + 基於é 程電腦( host-based )的身份èªè‰ï¼Œä¸¦é‡æ–°å•Ÿå‹• PostgreSQL,å¦å‰‡å…¶ä»–電腦是ä¸èƒ½èˆ‡ä½ çš„ PostgreSQL 伺æœå™¨é€²è¡Œé€£æŽ¥çš„。 +</a></p> + + +<h3><a name="3.2"> </a><a name="3.3">3.3) 我怎樣調整資料庫引擎以ç²å¾—更好的性能? </a></h3> + + +<p> +<a name="3.3"> 有三個主è¦æ–¹é¢å¯ä»¥æå‡ PostgreSQL 的潛能。 +</a></p> + +<dl> +<a name="3.3"> <dt><b>查詢方å¼çš„變化</b></dt> + <dd> + 這主è¦æ¶‰åŠä¿®æ”¹æŸ¥è©¢æ–¹å¼ä»¥ç²å–更好的性能: + <ul> + <li>創建索引,包括表é”å¼å’Œéƒ¨åˆ†ç´¢å¼•ï¼›</li> + + <li>使用 COPY 語å¥ä»£æ›¿å¤šå€‹ Insert 語å¥ï¼›</li> + <li>將多個SQL語å¥çµ„æˆä¸€å€‹äº‹å‹™ä»¥æ¸›å°‘æ交事務的開銷;</li> + <li>從一個索引ä¸æå–多æ¢è¨˜éŒ„時使用 CLUSTERï¼›</li> + <li>從一個查詢çµæžœä¸å–出部分記錄時使用 LIMITï¼›</li> + <li>使用é ç·¨è¯å¼æŸ¥è©¢ï¼ˆPrepared Query)ï¼›</li> + <li>使用 ANALYZE 以ä¿æŒç²¾ç¢ºçš„優化統計;</li> + + <li>定期使用 VACUUM 或 <i>pg_autovacuum</i></li> + <li>進行大é‡è³‡æ–™æ›´æ”¹æ™‚先刪除索引(然後é‡å»ºç´¢å¼•ï¼‰</li> + </ul> + </dd> + + <dt><b>伺æœå™¨çš„é…ç½®</b></dt> + <dd> + + é…置文件 <i>postgres.conf</i> ä¸çš„很多è¨ç½®éƒ½æœƒå½±éŸ¿æ€§èƒ½ï¼Œæ‰€æœ‰åƒæ•¸çš„列表å¯è¦‹ï¼š + </dd> +</a><a href="http://www.postgresql.org/docs/current/static/runtime.html">管ç†å“¡æŒ‡å—/資料庫伺æœå™¨é‹è¡Œç’°å¢ƒ/資料庫伺æœå™¨é‹è¡Œé…ç½®</a>, + 有關åƒæ•¸çš„解釋å¯è¦‹ï¼š<a href="http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html" target="_top">http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html</a> å’Œ + <a href="http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html">http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html</a>。 + + + <dt><b>硬體的é¸æ“‡</b></dt> + + <dd> + 電腦硬體å°æ€§èƒ½çš„影響å¯ç€è¦½ + <a href="http://candle.pha.pa.us/main/writings/pgsql/hw_performance/index.html" target="_top">http://candle.pha.pa.us/main/writings/pgsql/hw_performance/index.html</a> å’Œ + <a href="http://www.powerpostgresql.com/PerfList/">http://www.powerpostgresql.com/PerfList/</a>。 + </dd> + +</dl> + + +<h3> <a name="3.4">3.4)PostgreSQL 裡å¯ä»¥ç²å¾—什麼樣的調試特性? </a></h3> + + +<p><a name="3.4">PostgreSQL 有很多類似<code> log_* </code>的伺æœå™¨é…置變é‡å¯ç”¨æ–¼æŸ¥è©¢çš„列å°å’Œé€²ç¨‹çµ±è¨ˆï¼Œè€Œé€™äº›å·¥ä½œå°èª¿è©¦å’Œæ€§èƒ½æ¸¬è©¦å¾ˆæœ‰å¹«åŠ©ã€‚ +</a></p> + + + +<h3><a name="3.4"> </a><a name="3.5">3.5) 為什麼在試圖連接時收到「Sorry, too many clients(已有太多用戶連接)ã€æ¶ˆæ¯ï¼Ÿ </a></h3> +<p> +<a name="3.5"> é€™è¡¨ç¤ºä½ å·²é”到é è¨ 100 個並發(åŒä½œ)後å°é€²ç¨‹æ•¸çš„é™åˆ¶ï¼Œä½ 需è¦é€šéŽä¿®æ”¹ <i>postgresql.conf</i> 文件ä¸çš„ <i>max_connections</i> 值來 + å¢žåŠ postmaster 的後å°ä½µç™¼è™•ç†æ•¸ï¼Œä¿®æ”¹å¾Œéœ€é‡æ–°å•Ÿå‹• <i>postmaster</i>。 + +</a></p> + + +<h3><a name="3.5"> </a><a name="3.6">3.6)PostgreSQL çš„å‡ç´šéŽç¨‹æœ‰å“ªäº›å…§å®¹ ? </a></h3> +<p> +<a name="3.6"> PostgreSQL 開發組å°æ¯æ¬¡å°ç‰ˆæœ¬çš„å‡ç´šä¸»è¦åªåšäº†ä¸€äº› Bug ä¿®æ£å·¥ä½œï¼Œå› æ¤å¾ž 7.4.8 å‡ç´šåˆ° 7.4.9 ä¸éœ€è¦ dump å’Œ restore,僅需è¦åœæ¢è³‡æ–™åº«ä¼ºæœå™¨ï¼Œå®‰è£æ›´æ–°å¾Œçš„軟體包,然後é‡å•Ÿä¼ºæœå™¨å³å¯ã€‚ +</a></p> +<p> +<a name="3.6"> +所有PostgreSQLçš„ç”¨æˆ¶æ‡‰è©²åœ¨æœ€æŽ¥è¿‘ï¼ˆä½ æ‰€ä½¿ç”¨çš„ä¸»ç‰ˆæœ¬ï¼‰çš„å°æ”¹é€²ç‰ˆæœ¬ç™¼ä½ˆç›¡å¿«å‡ç´šã€‚儘管æ¯æ¬¡å‡ç´šå¯èƒ½éƒ½æœ‰ä¸€é»žé¢¨éšªï¼ŒPostgreSQLçš„å°æ”¹ +進版僅僅是è¨è¨ˆç”¨ä¾†ä¿®æ£ä¸€äº› Bug 的,程å¼ç¢¼æ”¹å‹•è¼ƒå°‘,所以風險還是很å°çš„。PostgreSQL社å€èªç‚ºä¸€èˆ¬æƒ…æ³ä¸‹ä¸å‡ç´šçš„風險還是多於å‡ç´šçš„。 +</a></p> +<p> +<a name="3.6"> 主版本的å‡ç´šï¼ˆä¾‹å¦‚從 7.3 到 7.4ï¼‰é€šå¸¸æœƒä¿®æ”¹ç³»çµ±è¡¨å’Œè³‡æ–™è¡¨çš„å…§éƒ¨æ ¼å¼ã€‚ + é€™äº›æ”¹è®Šä¸€èˆ¬æ¯”è¼ƒè¤‡é›œï¼Œå› æ¤æˆ‘們ä¸ç¶æŒè³‡æ–™æ–‡ä»¶çš„å‘å¾Œå…¼å®¹æ€§ã€‚å› æ¤å¾žè€ç‰ˆæœ¬ä¸é€²è¡Œè³‡æ–™å°Žå‡ºï¼ˆdump)/然後在新版本ä¸é€²è¡Œè³‡æ–™å°Žå…¥ï¼ˆreload)å°ä¸»ç‰ˆæœ¬çš„å‡ç´šæ˜¯å¿…é ˆçš„ã€‚ + +</a></p> + +<h3><a name="3.6"> </a><a name="3.7">3.7)(使用 PostgreSQL )我需è¦ä½¿ç”¨ä»€éº¼é›»è…¦ç¡¬é«” ? </a></h3> +<p> +<a name="3.7"> 由於電腦硬體大多數是相容的,人們總是傾å‘於相信所有電腦硬體質é‡ä¹Ÿæ˜¯ç›¸åŒçš„。事實上ä¸æ˜¯ï¼Œ + ECC RAM(帶奇å¶æ ¡é©—的記憶體),SCSI (硬碟)和優質的主機æ¿æ¯”一些便宜貨è¦æ›´åŠ å¯é 且具有更好的性能。 PostgreSQL 幾乎å¯ä»¥é‹è¡Œåœ¨ä»»ä½•ç¡¬é«”上, + 但如果å¯é 性和性能å°ä½ 的系統很é‡è¦ï¼Œä½ 就需è¦å…¨é¢çš„ç ”ç©¶ä¸€ä¸‹ä½ çš„ç¡¬é«”çµ„æ…‹äº†ã€‚åœ¨æˆ‘å€‘çš„éƒµä»¶åˆ—è¡¨ä¸Šä¹Ÿæœ‰é—œæ–¼ + 硬體é…置和性價比的討論。 +</a></p> + + +<hr/> + +<h2><a name="æ“作å•é¡Œ"> æ“作å•é¡Œ </a></h2> + + + +<h3><a name="æ“作å•é¡Œ"> </a><a name="4.1">4.1) 如何åªé¸æ“‡ä¸€å€‹æŸ¥è©¢çµæžœçš„é 幾行?或是隨機的一行? </a></h3> +<p> +<a name="4.1"> å¦‚æžœä½ åªæ˜¯è¦æå–å¹¾è¡Œè³‡æ–™ï¼Œä¸¦ä¸”ä½ åœ¨åŸ·è¡ŒæŸ¥è©¢ä¸çŸ¥é“ç¢ºåˆ‡çš„è¡Œæ•¸ï¼Œä½ å¯ä»¥ä½¿ç”¨ LIMIT 功能。 + 如果有一個索引與 <i> ORDER BY</i> ä¸çš„æ¢ä»¶åŒ¹é…,PostgreSQL å¯èƒ½å°±åªè™•ç†è¦æ±‚çš„é å¹¾æ¢è¨˜éŒ„, + (å¦å‰‡å°‡å°æ•´å€‹æŸ¥è©¢é€²è¡Œè™•ç†ç›´åˆ°ç”Ÿæˆéœ€è¦çš„行)。如果在執行查詢功能時ä¸çŸ¥é“確切的記錄數, + å¯ä½¿ç”¨æ¸¸æ¨™(cursor)å’ŒFETCH功能。 +</a></p> +<p> +<a name="4.1"> å¯ä½¿ç”¨ä»¥ä¸‹æ–¹æ³•æå–一行隨機記錄的: +</a></p> +<pre><a name="4.1"> SELECT cols + FROM tab + ORDER BY random() + LIMIT 1 ; + +</a></pre> + + + +<h3><a name="4.1"> </a><a name="4.2">4.2) 如何查看表ã€ç´¢å¼•ã€è³‡æ–™åº«ä»¥åŠç”¨æˆ¶çš„定義?如何查看<i>psql</i>裡用到的查詢指令並顯示它們? </a></h3> +<p> +<a name="4.2"> 在<i>psql</i>ä¸ä½¿ç”¨ \dt 命令來顯示資料表的定義,è¦çžè§£ <i>psql</i> ä¸çš„完整命令列表å¯ä½¿ç”¨ \? ,å¦å¤–ï¼Œä½ ä¹Ÿå¯ä»¥é–±è®€ <i>psql</i> çš„æºä»£ç¢¼ + 文件<i> pgsql/src/bin/psql/describe.c</i>ï¼Œå®ƒåŒ…æ‹¬ç‚ºç”Ÿæˆ <i>psql</i> å斜槓命令的輸出的所有 SQL å‘½ä»¤ã€‚ä½ é‚„å¯ä»¥å¸¶ <i>-E</i> é¸é …å•Ÿå‹• <i>psql</i>, + 這樣它將列å°å‡ºä½ 在 <i>psql</i> ä¸æ‰€çµ¦å‡ºçš„命令執行時的內部實際使用的 SQL 查詢語å¥ã€‚PostgreSQL也æ供了一個兼容 SQLçš„ INFORMATION SCHEMA 接å£ï¼Œ + ä½ å¯ä»¥å¾žé€™è£¡ç²å–關於資料庫的資訊。 + +</a></p> +<p> +<a name="4.2"> 在系統ä¸ä¹Ÿæœ‰ä¸€äº›ä»¥ <i>pg_</i> 打é 的系統表也æ述了表的定義。 +</a></p> +<p> +<a name="4.2"> 使用 <i>psql -l</i> 指令å¯ä»¥åˆ—出所有的資料庫。 +</a></p> +<p> +<a name="4.2"> 也å¯ä»¥ç€è¦½ä¸€ä¸‹ <i>pgsql/src/tutorial/syscat.source </i>文件,它列舉了很多å¯å¾žè³‡æ–™åº«ç³»çµ±è¡¨ä¸ç²å–資訊的SELECT語法。 + +</a></p> + + +<h3><a name="4.2"> </a><a name="4.3">4.3) 如何更改一個欄ä½çš„資料類型? </a></h3> +<p> +<a name="4.3"> 在8.0版本裡更改一個欄ä½çš„資料類型很容易,å¯ä½¿ç”¨ ALTER TABLE ALTER COLUMN TYPE 。 +</a></p> +<p> +<a name="4.3"> 在以å‰çš„版本ä¸ï¼Œå¯ä»¥é€™æ¨£åšï¼š +</a></p> +<pre><a name="4.3"> BEGIN; + ALTER TABLE tab ADD COLUMN new_col new_data_type; + UPDATE tab SET new_col = CAST(old_col AS new_data_type); + ALTER TABLE tab DROP COLUMN old_col; + COMMIT; + +</a></pre> +<p> +<a name="4.3"> ä½ ç„¶å¾Œå¯ä»¥ä½¿ç”¨<i> VACUUM FULL tab </i>指令來使系統收回無效資料所佔用的空間。 +</a></p> + +<h3><a name="4.3"> </a><a name="4.4">4.4) å–®æ¢è¨˜éŒ„,單個表,單個資料庫的最大é™åˆ¶æ˜¯å¤šå°‘? </a></h3> +<p> +<a name="4.4"> 下é¢æ˜¯ä¸€äº›é™åˆ¶ï¼š +</a></p> +<blockquote> +<a name="4.4"> </a><table> + + <tbody> + <tr><td>單個資料庫最大尺寸?</td><td>ç„¡é™åˆ¶ï¼ˆå·²å˜åœ¨æœ‰ 32TB 的資料庫)</td></tr> + <tr><td>單個表的最大尺寸?</td><td>32 TB</td></tr> + <tr><td>一行記錄的最大尺寸?</td><td>1.6 TB</td></tr> + <tr><td>一個欄ä½çš„最大尺寸?</td><td>1 GB</td></tr> + + <tr> + <td>一個表裡最大列數?</td> + <td>ç„¡é™åˆ¶</td></tr> + <tr> + <td>一個表裡最大欄ä½æ•¸ï¼Ÿ</td> + <td>250-1600 (與列類型有關)</td></tr> + <tr><td>一個表裡的最大索引數é‡ï¼Ÿ</td><td>ç„¡é™åˆ¶</td></tr> + </tbody> +</table> +</blockquote> + + +<p> +<a name="4.4"> 當然,實際上沒有真æ£çš„ç„¡é™åˆ¶ï¼Œé‚„是è¦å—å¯ç”¨ç£ç›¤ç©ºé–“ã€å¯ç”¨è¨˜æ†¶é«”/交æ›å€çš„制約。 + 事實上,當上述這些數值變得異常地大時,系統性能也會å—很大影響。 +</a></p> + +<p> +<a name="4.4"> å–®è¡¨çš„æœ€å¤§å¤§å° 32 TB ä¸éœ€è¦ä½œæ¥ç³»çµ±å°å–®å€‹æ–‡ä»¶ä¹Ÿéœ€é€™éº¼å¤§çš„支æŒã€‚大表用多個 1 GB 的文件å˜å„²ï¼Œå› æ¤æ–‡ä»¶ç³»çµ±å¤§å°çš„é™åˆ¶æ˜¯ä¸é‡è¦çš„。 +</a></p> +<p> +<a name="4.4"> 如果é è¨çš„塊大å°å¢žé•·åˆ° 32K ,最大的單表大å°å’Œæœ€å¤§åˆ—數還å¯ä»¥å¢žåŠ 到四å€ã€‚ +</a></p> +<p> +<a name="4.4"> 有一個é™åˆ¶å°±æ˜¯ä¸èƒ½å°å¤§å°å¤šæ–¼2000å—節的列創建索引。幸é‹åœ°æ˜¯é€™æ¨£çš„索引很少用到。通éŽå°å¤šå—節列的內容進行MD5哈稀é‹ç®—çµæžœé€²è¡Œå‡½æ•¸ç´¢å¼•å¯å°åˆ—的唯一性得到ä¿è‰ï¼Œ + 並且全文檢索å…許å°åˆ—ä¸çš„單詞進行æœç´¢ã€‚ +</a></p> + + +<h3><a name="4.4"> </a><a name="4.5">4.5) å˜å„²ä¸€å€‹å…¸åž‹çš„文本文件裡的資料需è¦å¤šå°‘ç£ç›¤ç©ºé–“? </a></h3> +<p> +<a name="4.5"> 一個 Postgres 資料庫(å˜å„²ä¸€å€‹æ–‡æœ¬æ–‡ä»¶ï¼‰æ‰€ä½”用的空間最多å¯èƒ½éœ€è¦ç›¸ç•¶æ–¼é€™å€‹æ–‡æœ¬æ–‡ä»¶è‡ªèº«å¤§å°5å€çš„ç£ç›¤ç©ºé–“。 +</a></p> +<p> +<a name="4.5"> 例如,å‡è¨æœ‰ä¸€å€‹ 100,000 行的文件,æ¯è¡Œæœ‰ä¸€å€‹æ•´æ•¸å’Œä¸€å€‹æ–‡æœ¬æ述。 + å‡è¨æ–‡æœ¬ä¸²çš„å¹³å‡é•·åº¦ç‚º20ä½å…ƒçµ„(Byte)。文本文件佔用 2.8 MB。å˜æ”¾é€™äº›è³‡æ–™çš„PostgreSQL資料庫文件大約是 5.2 MB: +</a></p> +<pre><a name="4.5"> 24 å—元組: æ¯è¡Œçš„é (大約值) + 24 å—元組節: 一個整數型欄ä½å’Œä¸€å€‹æ–‡æœ¬åž‹æ¬„ä½ + + 4 å—元組節: é é¢å…§æŒ‡å‘å…ƒçµ„çš„æŒ‡é‡ + ---------------------------------------- + 52 å—元組æ¯è¡Œ + + PostgreSQL 資料é 的大å°æ˜¯ 8192 ä½å…ƒçµ„ (8 KB),則: + + 8192 å—元組æ¯é + ------------------- = 158 è¡Œ/資料é (å‘下å–整) + 52 å—元組æ¯è¡Œ + + 100000 資料行 + -------------------- = 633 資料é (å‘上å–整) + 146 è¡Œ/資料é + + 633 資料é * 8192 å—節/é = 5,185,536 å—節(5.2 MB) +</a></pre> + + +<p> +<a name="4.5"> 索引ä¸éœ€è¦é€™éº¼å¤šçš„é¡å¤–æ¶ˆè€—ï¼Œä½†ä¹Ÿç¢ºå¯¦åŒ…æ‹¬è¢«ç´¢å¼•çš„è³‡æ–™ï¼Œå› æ¤å®ƒå€‘也å¯èƒ½å¾ˆå¤§ã€‚ +</a></p> +<p> +<a name="4.5"> 空值<i> NULL </i>å˜æ”¾åœ¨ä½åœ–ä¸ï¼Œå› æ¤ä½”用很少的空間。 +</a></p> + +<h3><a name="4.5"> </a><a name="4.6">4.6) 為什麼我的查詢很慢?為什麼這些查詢沒有利用索引? </a></h3> +<p> +<a name="4.6"> 並éžæ¯å€‹æŸ¥è©¢éƒ½æœƒè‡ªå‹•ä½¿ç”¨ç´¢å¼•ã€‚åªæœ‰åœ¨è¡¨çš„大å°è¶…éŽä¸€å€‹æœ€å°å€¼ï¼Œä¸¦ä¸”查詢åªæœƒé¸ä¸è¡¨ä¸è¼ƒå°æ¯”例的記錄時æ‰æœƒæŽ¡ç”¨ç´¢å¼•ã€‚ + é€™æ˜¯å› ç‚ºç´¢å¼•æŽƒçž„å¼•èµ·çš„éš¨å³ç£ç›¤å˜å–å¯èƒ½æ¯”直接地讀å–è¡¨ï¼ˆé †åºæŽƒçž„)更慢。 + +</a></p> +<p> +<a name="4.6"> 為了判斷是å¦ä½¿ç”¨ç´¢å¼•ï¼ŒPostgreSQL å¿…é ˆç²å¾—有關表的統計值。這些統計值å¯ä»¥ä½¿ç”¨ VACUUM ANALYZE,或 ANALYZE ç²å¾—。 + 使用統計值,優化器知é“表ä¸æœ‰å¤šå°‘è¡Œï¼Œå°±èƒ½å¤ æ›´å¥½åœ°åˆ¤æ–·æ˜¯å¦åˆ©ç”¨ç´¢å¼•ã€‚ + 統計值å°ç¢ºå®šå„ªåŒ–çš„é€£æŽ¥é †åºå’Œé€£æŽ¥æ–¹æ³•ä¹Ÿå¾ˆæœ‰ç”¨ã€‚在表的內容發生變化時,應定期進行統計值的更新收集。 +</a></p> +<p> +<a name="4.6"> 索引通常ä¸ç”¨æ–¼ ORDER BY 或執行連接。å°ä¸€å€‹å¤§è¡¨çš„ä¸€æ¬¡é †åºæŽƒçž„å†åšä¸€æ¬¡æŽ’åºé€šå¸¸æ¯”索引掃瞄è¦å¿«ã€‚然而,如果將 LIMIT å’Œ ORDER BY + çµåˆåœ¨ä¸€èµ·ä½¿ç”¨çš„è©±ï¼Œé€šå¸¸å°‡æœƒä½¿ç”¨ç´¢å¼•ï¼Œå› ç‚ºé€™æ™‚åƒ…è¿”å›žè¡¨ä¸çš„一å°éƒ¨åˆ†è¨˜éŒ„。 +</a></p> +<p> +<a name="4.6"> å¦‚æžœä½ ç¢ºä¿¡PostgreSQLçš„å„ªåŒ–å™¨ä½¿ç”¨é †åºæŽƒçž„是ä¸æ£ç¢ºçš„ï¼Œä½ å¯ä»¥ä½¿ç”¨<code>SET enable_seqscan TO 'off'</code>æŒ‡ä»¤ä¾†é—œé–‰é †åºæŽƒçž„, + 然後å†æ¬¡é‹è¡ŒæŸ¥è©¢ï¼Œä½ å°±å¯ä»¥çœ‹å‡ºä½¿ç”¨ä¸€å€‹ç´¢å¼•æŽƒçž„是å¦ç¢ºå¯¦è¦å¿«ä¸€äº›ã€‚ +</a></p> + +<p> + +<a name="4.6"> 當使用通é…符æ“作,例如 <i>LIKE</i> 或 <i>~</i> 時,索引åªèƒ½åœ¨ç‰¹å®šçš„情æ³ä¸‹ä½¿ç”¨ï¼š +</a></p> +<ul> +<a name="4.6"> </a><li><a name="4.6">å—ç¬¦ä¸²çš„é–‹å§‹éƒ¨åˆ†å¿…é ˆæ˜¯æ™®é€šå—符串,也就是說: + </a><ul> +<a name="4.6"> </a><li><a name="4.6"> <i>LIKE</i> 模å¼ä¸èƒ½ä»¥ <i>%</i> 打é 。</a></li> + +<a name="4.6"> </a><li><a name="4.6"> <i>~</i> (æ£å‰‡è¡¨é”å¼ï¼‰æ¨¡å¼å¿…é ˆä»¥ <i>^</i> 打é 。</a></li> +<a name="4.6"> </a></ul> +<a name="4.6"> </a></li> +<a name="4.6"> </a><li><a name="4.6">å—符串ä¸èƒ½ä»¥åŒ¹é…多個å—符的模å¼é¡žæ‰“é ,例如 [a-e]。</a></li> +<a name="4.6"> </a><li><a name="4.6">大å°å¯«ç„¡é—œçš„查找,如 ILIKE å’Œ ~* ç‰ä¸ä½¿ç”¨ç´¢å¼•ï¼Œä½†å¯ä»¥ç”¨ </a><a href="#4.8">4.8</a> 節æ述的表é”å¼ç´¢å¼•ã€‚</li> + + <li>åœ¨åš initdb æ™‚å¿…é ˆæŽ¡ç”¨é è¨çš„本地è¨ç½® C localeï¼Œå› ç‚ºç³»çµ±ä¸å¯èƒ½çŸ¥é“åœ¨éž C locale 情æ³æ™‚下一個最大å—符是什麼。 + 在這種情æ³ä¸‹ï¼Œä½ å¯ä»¥å‰µå»ºä¸€å€‹ç‰¹æ®Šçš„ <code>text_pattern_ops</code> 索引來用於 <small>LIKE</small> 的索引。 + </li> +</ul> +<p> + 在 8.0 之å‰çš„版本ä¸ï¼Œé™¤éžè¦æŸ¥è©¢çš„資料類型和索引的資料類型相匹é…,å¦å‰‡ç´¢å¼•ç¶“å¸¸æ˜¯æœªè¢«ç”¨åˆ°ï¼Œç‰¹åˆ¥æ˜¯å° int2, int8 和數值型的索引。 +</p> + +<h3> <a name="4.7">4.7) 我如何æ‰èƒ½çœ‹åˆ°æŸ¥è©¢å„ªåŒ–器是怎樣評估處ç†æˆ‘的查詢? </a></h3> + + +<p><a name="4.7">åƒè€ƒ <small>EXPLAIN</small> 手冊é 。</a></p> + +<h3><a name="4.7"> </a><a name="4.8">4.8) 我怎樣åšæ£å‰‡è¡¨é”å¼æœç´¢å’Œå¤§å°å¯«ç„¡é—œçš„æ£å‰‡è¡¨é”å¼æŸ¥æ‰¾ï¼Ÿæ€Žæ¨£åˆ©ç”¨ç´¢å¼•é€²è¡Œå¤§å°å¯«ç„¡é—œæŸ¥æ‰¾ï¼Ÿ </a></h3> +<p> +<a name="4.8"> æ“作符 <i> ~ </i> 處ç†æ£å‰‡è¡¨é”å¼åŒ¹é…,而 <i>~*</i> 處ç†å¤§å°å¯«ç„¡é—œçš„æ£å‰‡è¡¨é”å¼åŒ¹é…。大å°å¯«ç„¡é—œçš„ LIKE 變種æˆç‚º ILIKE。 + +</a></p> +<p> +<a name="4.8"> 大å°å¯«ç„¡é—œçš„ç‰å¼æ¯”較通常寫åšï¼š +</a></p> +<pre><a name="4.8"> SELECT * + FROM tab + WHERE lower(col) = 'abc'; +</a></pre> + +<p> +<a name="4.8"> 這樣將ä¸æœƒä½¿ç”¨æ¨™æº–的索引。但是å¯ä»¥å‰µå»ºä¸€å€‹åœ¨é€™ç¨®æƒ…æ³ä¸‹ä½¿ç”¨çš„表é”å¼ç´¢å¼•: +</a></p> +<pre><a name="4.8"> CREATE INDEX tabindex ON tab (lower(col)); + +</a></pre> +<p> +<a name="4.8"> å¦‚æžœä¸Šè¿°ç´¢å¼•åœ¨å‰µå»ºæ™‚åŠ å…¥ UNIQUE ç´„æŸï¼Œé›–然索引欄ä½è‡ªèº«å…§å®¹å¯ä»¥å˜å„²å¤§å°å¯«ä¸é™çš„內容,但如果有 UNIQUE ç´„æŸå¾Œï¼Œé€™äº›å…§å®¹ä¸èƒ½åƒ…僅是大å°å¯«ä¸åŒï¼ˆå¦å‰‡æœƒé€ æˆè¡çªï¼‰ã€‚為了ä¿è‰ä¸ç™¼ç”Ÿé€™ç¨®æƒ…æ³ï¼Œå¯ä»¥ä½¿ç”¨ CHECK ç´„æŸæ¢ä»¶æˆ–是觸發器在錄入時進行é™åˆ¶ã€‚ +</a></p> + + +<h3><a name="4.8"> </a><a name="4.9">4.9) 在一個查詢裡,我怎樣檢測一個欄ä½æ˜¯å¦ç‚º <i>NULL</i> ?我如何æ‰èƒ½æº–確排åºè€Œä¸è«–æŸæ¬„ä½æ˜¯å¦å« <i>NULL</i> 值? </a></h3> +<p> + +<a name="4.9"> 用 <small>IS NULL</small> å’Œ <small>IS NOT NULL</small> 測試這個欄ä½ï¼Œå…·é«”方法如下: +</a></p> +<pre><a name="4.9"> SELECT * + FROM tab + WHERE col IS NULL; +</a></pre> + +<p><a name="4.9">為了能å°å« <small>NULL </small>欄ä½æŽ’åºï¼Œå¯åœ¨ <small>ORDER BY</small> æ¢ä»¶ä¸ä½¿ç”¨ <small>IS NULL</small> å’Œ + <small>IS NOT NULL</small> 修飾符,æ¢ä»¶ç‚ºçœŸ <i>true</i> 將比æ¢ä»¶ç‚ºå‡ <i>false</i> 排在å‰é¢ï¼Œä¸‹é¢çš„例åå°±æœƒå°‡å« + NULL 的記錄排在çµæžœçš„上é¢éƒ¨åˆ†ï¼š + +</a></p> +<pre><a name="4.9"> SELECT * + FROM tab + ORDER BY (col IS NOT NULL) +</a></pre> + +<h3><a name="4.9"> </a><a name="4.10">4.10) å„種å—符類型之間有什麼ä¸åŒï¼Ÿ </a></h3> +<blockquote> +<a name="4.10"> </a><table width="614"> + <tbody> + <tr><th width="104">é¡žåž‹</th> + <th width="77">內部å稱</th> + <th width="417">說明</th> + </tr> + + <tr><td>VARCHAR(n)</td><td>varchar</td><td>指定了最大長度,變長å—符串,ä¸è¶³å®šç¾©é•·åº¦çš„部分ä¸è£œé½Š</td></tr> + <tr><td>CHAR(n)</td><td>bpchar</td><td>定長å—符串,實際資料ä¸è¶³å®šç¾©é•·åº¦æ™‚ï¼Œä»¥ç©ºæ ¼è£œé½Š</td></tr> + <tr><td>TEXT</td><td>text</td><td>沒有特別的上é™é™åˆ¶ï¼ˆåƒ…å—行的最大長度é™åˆ¶ï¼‰</td></tr> + <tr><td>BYTEA</td><td>bytea</td><td>變長å—節åºåˆ—(使用NULLå—符也是å…許的)</td></tr> + + <tr><td>"char"</td><td>char</td><td>單個å—符</td></tr> + </tbody> + </table> +</blockquote> + +<p> +<a name="4.10"> åœ¨ç³»çµ±è¡¨å’Œåœ¨ä¸€äº›éŒ¯èª¤è³‡è¨Šè£¡ä½ å°‡çœ‹åˆ°å…§éƒ¨å稱。 +</a></p> +<p> +<a name="4.10"> 上é¢æ‰€åˆ—çš„å‰å››ç¨®é¡žåž‹æ˜¯ "varlena"(變長)類型(也就是說,開é 的四個å—節是長度,後é¢æ‰æ˜¯è³‡æ–™ï¼‰ã€‚ + 於是實際佔用的空間比è²æ˜Žçš„大å°è¦å¤šä¸€äº›ã€‚ + 然而這些類型如定義很長時都å¯ä»¥è¢«å£“縮å˜å„²ï¼Œå› æ¤ç£ç›¤ç©ºé–“也å¯èƒ½æ¯”é 想的è¦å°‘。 + +</a></p> +<p> +<a name="4.10"> <small>VARCHAR(n)</small> 在å˜å„²é™åˆ¶äº†æœ€å¤§é•·åº¦çš„變長å—符串是最好的。 + <small>TEXT</small> é©ç”¨æ–¼å˜å„²æœ€å¤§å¯é” 1G å·¦å³ä½†æœªå®šç¾©é™åˆ¶é•·åº¦çš„å—符串。 +</a></p> +<p> +<a name="4.10"> <small>CHAR(n)</small> 最é©åˆæ–¼å˜å„²é•·åº¦ç›¸åŒçš„å—符串。 <small>CHAR(n)</small>æœƒæ ¹æ“šæ‰€çµ¦å®šçš„æ¬„ä½é•·åº¦ä»¥ç©ºæ ¼è£œè¶³ï¼ˆä¸è¶³çš„欄ä½å…§å®¹ï¼‰ï¼Œ + 而 <small>VARCHAR(n)</small> åªå˜å„²æ‰€çµ¦å®šçš„資料內容。 + <small>BYTEA</small> 用於å˜å„²äºŒé€²åˆ¶è³‡æ–™ï¼Œå°¤å…¶æ˜¯åŒ…å« NULL å—節的值。這些類型具有差ä¸å¤šçš„性能。 + +</a></p> + + + +<h3><a name="4.10"> </a><a name="4.11.1">4.11.1) 我怎樣創建一個åºåˆ—號或是自動éžå¢žçš„欄ä½ï¼Ÿ </a></h3> +<p><a name="4.11.1">PostgreSQL æ”¯æŒ SERIAL 資料類型。(欄ä½å®šç¾©ç‚ºSERIAL後)將自動創建一個åºåˆ—生æˆå™¨ï¼Œä¾‹å¦‚: +</a></p> +<pre><a name="4.11.1"> CREATE TABLE person ( + id SERIAL, + name TEXT + ); +</a></pre> +<p> +<a name="4.11.1"> 會自動轉æ›ç‚ºä»¥ä¸‹SQL語å¥ï¼š +</a></p> + +<pre><a name="4.11.1"> CREATE SEQUENCE person_id_seq; + CREATE TABLE person ( + id INT4 NOT NULL DEFAULT nextval('person_id_seq'), + name TEXT + ); +</a></pre> +<p> +<a name="4.11.1"> åƒè€ƒ create_sequence 手冊é ç²å–關於åºåˆ—生æˆå™¨çš„更多資訊。 +</a></p> + + +<h3><a name="4.11.1"> </a><a name="4.11.2">4.11.2) 我如何ç²å¾—一個æ’入的åºåˆ—號的值? </a></h3> +<p> +<a name="4.11.2"> 一種方法是在æ’入之å‰å…ˆç”¨å‡½æ•¸ nextval() 從åºåˆ—å°è±¡è£¡æª¢ç´¢å‡ºä¸‹ä¸€å€‹ SERIAL 值,然後å†ç”¨æ¤å€¼ç²¾ç¢ºåœ°æ’入。使用 + </a><a href="#4.11.1"> 4.11.1</a> 裡的例表,å¯ç”¨å½ç¢¼é€™æ¨£æ述: + +</p> +<pre> new_id = execute("SELECT nextval('person_id_seq')"); + execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')"); +</pre> +<p> + 這樣還能在其他查詢ä¸ä½¿ç”¨å˜æ”¾åœ¨ new_id 裡的新值(例如,作為åƒç…§ person 表的外éµï¼‰ã€‚ + 注æ„自動創建的 SEQUENCE å°è±¡çš„å稱將會是 <<i>table</i>>_<<i>serialcolumn</i>>_<i>seq</i>, + 這裡 table å’Œ serialcolumn åˆ†åˆ¥æ˜¯ä½ çš„è¡¨çš„åç¨±å’Œä½ çš„ SERIAL 欄ä½çš„å稱。 +</p> +<p> + 類似的,在 SERIAL å°è±¡é è¨æ’å…¥å¾Œä½ å¯ä»¥ç”¨å‡½æ•¸ currval() 檢索剛賦值的 SERIAL 值,例如: + +</p> +<pre> execute("INSERT INTO person (name) VALUES ('Blaise Pascal')"); + new_id = execute("SELECT currval('person_id_seq')"); +</pre> + +<h3> <a name="4.11.3">4.11.3) åŒæ™‚使用 <i>currval()</i> 會導致和其他用戶的è¡çªæƒ…æ³å—Žï¼Ÿ </a></h3> +<p> +<a name="4.11.3"> ä¸æœƒã€‚<i>currval()</i> è¿”å›žçš„æ˜¯ä½ æœ¬æ¬¡æœƒè©±é€²ç¨‹æ‰€è³¦çš„å€¼è€Œä¸æ˜¯æ‰€æœ‰ç”¨æˆ¶çš„當å‰å€¼ã€‚<br/> + +</a></p> + +<h3><a name="4.11.3"> </a><a name="4.11.4">4.11.4) 為什麼ä¸åœ¨äº‹å‹™ç•°å¸¸ä¸æ¢å¾Œé‡ç”¨åºåˆ—號呢?為什麼在åºåˆ—號欄ä½çš„å–值ä¸å˜åœ¨é–“斷呢? </a></h3> +<p> +<a name="4.11.4"> 為了æ高併發性,åºåˆ—號在需è¦çš„時候賦予æ£åœ¨é‹è¡Œçš„事務,並且在事務çµæŸä¹‹å‰ä¸é€²è¡ŒéŽ–定, + 這就會導致異常ä¸æ¢çš„事務後,åºåˆ—號會出ç¾é–“隔。 +</a></p> + +<h3><a name="4.11.4"> </a><a name="4.12">4.12) 什麼是 <small>OID</small> ?什麼是 <small>CTID</small> ? </a></h3> + + +<p><a name="4.12">PostgreSQL 裡創建的æ¯ä¸€è¡Œè¨˜éŒ„都會ç²å¾—一個唯一的 <small>OID</small>,除éžåœ¨å‰µå»ºè¡¨æ™‚使用 <small>WITHOUT OIDS</small> é¸é …。 + <small>OID </small>創建時會自動生æˆä¸€å€‹ 4ä½å…ƒçµ„的整數,所有 OID 在相應 PostgreSQL 伺æœå™¨ä¸å‡æ˜¯å”¯ä¸€çš„。 ç„¶è€Œï¼Œå®ƒåœ¨è¶…éŽ 40億時將溢出, + <small>OID</small> æ¤å¾Œæœƒå‡ºç¾é‡è¤‡ã€‚PostgreSQL 在它的內部系統表裡使用 OID 在表之間建立è¯ç¹«ã€‚ +</a></p> +<p><a name="4.12"> + 在用戶的資料表ä¸ï¼Œæœ€å¥½æ˜¯ä½¿ç”¨ <small>SERIAl</small> 來代替 <small>OID</small> + + å› ç‚º<small> SERIAL</small> åªè¦ä¿è‰åœ¨å–®å€‹è¡¨ä¸çš„數值是唯一的就å¯ä»¥äº†ï¼Œé€™æ¨£å®ƒæº¢å‡ºçš„å¯èƒ½æ€§å°±éžå¸¸å°äº†ï¼Œ + <small>SERIAL8</small> å¯ç”¨ä¾†ä¿å˜8å—元組的åºåˆ—數值。 +</a></p> + +<p> +<a name="4.12"> <small>CTID</small> 用於標è˜å¸¶è‘—資料塊(地å€ï¼‰å’Œï¼ˆå¡Šå…§ï¼‰å移的特定的物ç†è¡Œã€‚ + <small>CTID</small> 在記錄被更改或é‡è¼‰å¾Œç™¼ç”Ÿæ”¹è®Šã€‚索引資料使用它們指å‘物ç†è¡Œã€‚ +</a></p> + + + +<h3><a name="4.12"> </a><a name="4.13">4.13) 為什麼我收到錯誤資訊「<i>ERROR: Memory exhausted in AllocSetAlloc()</i>ã€ï¼Ÿ </a></h3> +<p> +<a name="4.13"> 這很å¯èƒ½æ˜¯ç³»çµ±çš„虛擬內å˜ç”¨å…‰äº†ï¼Œæˆ–è€…å…§æ ¸å°æŸäº›è³‡æºæœ‰è¼ƒä½Žçš„é™åˆ¶å€¼ã€‚在啟動 postmaster 之å‰è©¦è©¦ä¸‹é¢çš„命令: +</a></p> +<pre><a name="4.13"> ulimit -d 262144 + limit datasize 256m +</a></pre> +<p> +<a name="4.13"> å–æ±ºæ–¼ä½ ç”¨çš„ shell,上é¢å‘½ä»¤åªæœ‰ä¸€æ¢èƒ½æˆåŠŸï¼Œä½†æ˜¯å®ƒå°‡æŠŠä½ 的進程資料段é™åˆ¶è¨å¾—比較高, + å› è€Œä¹Ÿè¨±èƒ½è®“æŸ¥è©¢å®Œæˆã€‚這æ¢å‘½ä»¤æ‡‰ç”¨æ–¼ç•¶å‰é€²ç¨‹ï¼Œä»¥åŠæ‰€æœ‰åœ¨é€™æ¢å‘½ä»¤é‹è¡Œå¾Œå‰µå»ºçš„å進程。 + å¦‚æžœä½ æ˜¯åœ¨é‹è¡ŒSQLå®¢æˆ¶ç«¯æ™‚å› ç‚ºå¾Œå°è¿”回了太多的資料而出ç¾å•é¡Œï¼Œè«‹åœ¨é‹è¡Œå®¢æˆ¶ç«¯ä¹‹å‰åŸ·è¡Œä¸Šè¿°å‘½ä»¤ã€‚ + +</a></p> + +<h3><a name="4.13"> </a><a name="4.14">4.14) 我如何æ‰èƒ½çŸ¥é“所é‹è¡Œçš„PostgreSQL的版本? </a></h3> +<p> +<a name="4.14"> 從 psql 裡,輸入 <code>SELECT version();</code>指令。 +</a></p> + +<h3><a name="4.14"> </a><a name="4.15">4.15) 我如何創建一個é è¨å€¼æ˜¯ç•¶å‰æ™‚間的欄ä½ï¼Ÿ </a></h3> +<p> +<a name="4.15"> 使用 CURRENT_TIMESTAMP: + +</a></p> +<pre><a name="4.15"> CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); +</a></pre> + + +<h3><a name="4.15"> </a><a name="4.16">4.16) 我怎樣進行 outer join (外連接)? </a></h3> +<p><a name="4.16">PostgreSQL 採用標準的 SQL 語法支æŒå¤–連接。這裡是兩個例å:</a></p> +<pre><a name="4.16"> SELECT * + FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col); +</a></pre> +<p><a name="4.16">或是</a></p> + +<pre><a name="4.16"> SELECT * + FROM t1 LEFT OUTER JOIN t2 USING (col); +</a></pre> +<p> +<a name="4.16"> 這兩個ç‰åƒ¹çš„查詢在 t1.col å’Œ t2.col 上åšé€£æŽ¥ï¼Œä¸¦ä¸”返回 t1 ä¸æ‰€æœ‰æœªé€£æŽ¥çš„行(那些在 t2 ä¸æ²’有匹é…的行)。 + å³[外]連接(RIGHT OUTER JOIN)將返回 t2 ä¸æœªé€£æŽ¥çš„行。 + 完全外連接(FULL OUTER JOIN)將返回 t1 å’Œ t2 ä¸æœªé€£æŽ¥çš„行。 + é—œéµå— OUTER 在左[外]連接ã€å³[外]連接和完全[外]連接ä¸æ˜¯å¯é¸çš„,普通連接被稱為內連接(INNER JOIN)。 +</a></p> + + +<h3><a name="4.16"> </a><a name="4.17">4.17) 如何使用涉åŠå¤šå€‹è³‡æ–™åº«çš„查詢? </a></h3> +<p> +<a name="4.17"> 沒有辦法查詢當å‰è³‡æ–™åº«ä¹‹å¤–的資料庫。 + å› ç‚ºPostgreSQLè¦åŠ è¼‰èˆ‡è³‡æ–™åº«ç›¸é—œçš„ç³»çµ±ç›®éŒ„ï¼ˆç³»çµ±è¡¨ï¼‰ï¼Œå› æ¤è·¨è³‡æ–™åº«çš„查詢如何執行是ä¸å®šçš„。 +</a></p> + +<p> +<a name="4.17"> é™„åŠ å¢žå€¼æ¨¡å¡Š contrib/dblink å…許採用函數調用實ç¾è·¨åº«æŸ¥è©¢ã€‚當然用戶也å¯ä»¥åŒæ™‚連接到ä¸åŒçš„資料庫執行查詢然後在客戶端åˆä½µçµæžœã€‚ +</a></p> + +<h3><a name="4.17"> </a><a name="4.18">4.18) 如何讓函數返回多行或多列資料? </a></h3> +<p> +<a name="4.18"> 在函數ä¸è¿”回資料記錄集的功能是很容易使用的,詳情åƒè¦‹ï¼š + </a><a href="http://techdocs.postgresql.org/guides/SetReturningFunctions">http://techdocs.postgresql.org/guides/SetReturningFunctions</a> +</p> + +<h3> <a name="4.19">4.19) 為什麼我在使用 PL/PgSQL 函數å˜å–臨時表時會收到錯誤資訊「relation with OID ##### does not existã€ï¼Ÿ </a></h3> + +<p> +<a name="4.19"> PL/PgSQL 會緩å˜å‡½æ•¸çš„腳本內容,由æ¤å¸¶ä¾†çš„一個ä¸å¥½çš„副作用是若一個 PL/PgSQL + 函數訪å•äº†ä¸€å€‹è‡¨æ™‚表,然後該表被刪除並é‡å»ºäº†ï¼Œå‰‡å†æ¬¡èª¿ç”¨è©²å‡½æ•¸å°‡å¤±æ•—, + å› ç‚ºç·©å˜çš„函數內容ä»ç„¶æŒ‡å‘舊的臨時表。解決的方法是在 PL/PgSQL ä¸ç”¨<small>EXECUTE</small> + å°è‡¨æ™‚表進行訪å•ã€‚這樣會ä¿è‰æŸ¥è©¢åœ¨åŸ·è¡Œå‰ç¸½æœƒè¢«é‡æ–°è§£æžã€‚ +</a></p> + +<h3><a name="4.19"> </a><a name="4.20">4.20) ç›®å‰æœ‰å“ªäº›è³‡æ–™è¤‡å¯«(replication)方案å¯ç”¨ï¼Ÿ </a></h3> +<p> +<a name="4.20"> 「複寫ã€åªæ˜¯ä¸€å€‹è¡“語,有好幾種複寫技術å¯ç”¨ï¼Œæ¯ç¨®éƒ½æœ‰å„ªé»žå’Œç¼ºé»žï¼š +</a></p> +<p> + +<a name="4.20"> 主/從å¼è¤‡å¯«æ–¹å¼æ˜¯å…許一個主伺æœå™¨æŽ¥å—讀/寫的申請,而多個從伺æœå™¨åªèƒ½æŽ¥å—讀/<small>SELECT</small>查詢的申請, + ç›®å‰æœ€æµè¡Œä¸”å…費的主/從PostgreSQL複寫方案是 + </a><a href="http://gborg.postgresql.org/project/slony1/projdisplay.php">Slony-I </a>。 +</p> +<p> + 多個主伺æœå™¨çš„複寫方å¼å…許將讀/寫的申請發é€çµ¦å¤šå°çš„主機,這種方å¼ç”±æ–¼éœ€è¦åœ¨å¤šå°ä¼ºæœå™¨ä¹‹é–“åŒæ¥è³‡æ–™è®Šå‹• + å¯èƒ½æœƒå¸¶ä¾†è¼ƒåš´é‡çš„性能æ失,<a href="http://pgfoundry.org/projects/pgcluster/">Pgcluster</a> 是目å‰é€™ç¨®æ–¹æ¡ˆä¸æœ€å¥½çš„,並且還å¯ä»¥å…費下載。 +</p> +<p> + 也有一些商æ¥éœ€ä»˜è²»å’ŒåŸºæ–¼ç¡¬é«”的資料複寫方案,支æŒä¸Šè¿°å„種複寫模型。 +</p> + + +<h3> <a name="4.21">4.21</a>) 為何查詢çµæžœé¡¯ç¤ºçš„表å或欄å與我的查詢語å¥ä¸çš„ä¸åŒï¼Ÿç‚ºä½•å¤§å¯«ç‹€æ…‹ä¸èƒ½ä¿ç•™ï¼Ÿ </h3> + +<p> + æœ€å¸¸è¦‹çš„åŽŸå› æ˜¯åœ¨å‰µå»ºè¡¨æ™‚å°è¡¨å或是欄å使用了雙引號( ' ' ),當使用了雙引號後,表å或欄å(稱為標è˜ç¬¦ï¼‰å˜å„²æ™‚是å€åˆ† +<a href="http://www.postgresql.org/docs/8.0/static/sql-syntax.html#SQL-SYNTAX-IDENTIFIERS">大å°å¯«çš„</a>, + 這æ„è¬‚è‘—ä½ åœ¨æŸ¥è©¢æ™‚è¡¨å或欄åä¹Ÿæ‡‰ä½¿ç”¨é›™å¼•è™Ÿï¼Œä¸€äº›å·¥å…·è»Ÿé«”ï¼Œåƒ pgAdmin 會在發出創建表的指令時自動地在æ¯å€‹æ¨™è˜ç¬¦ä¸ŠåŠ 雙引號。 + å› æ¤ï¼Œç‚ºäº†æ¨™è˜ç¬¦çš„çµ±ä¸€ï¼Œä½ æ‡‰è©²ï¼š</p> +<ul> +<li>在創建表時é¿å…將標è˜ç¬¦ä½¿ç”¨é›™å¼•è™Ÿå¼•èµ·ä¾†ã€‚</li> +<li>在標è˜ç¬¦ä¸åªä½¿ç”¨å°å¯«å—æ¯ã€‚</li> + +<li>(為了與已å˜åœ¨çš„標è˜ç¬¦ç›¸åŒï¼‰åœ¨æŸ¥è©¢ä¸ä½¿ç”¨é›™å¼•è™Ÿå°‡æ¨™è˜ç¬¦å¼•èµ·ä¾†ã€‚</li> +</ul> + +</body> + +</html> \ No newline at end of file -- GitLab