diff --git a/doc/FAQ_chinese b/doc/FAQ_chinese index 9e0dd9b33febd557886dbbb3bb05e5f9c688ad49..43d466475927567ea510c28b48547cd168e62ca8 100644 --- a/doc/FAQ_chinese +++ b/doc/FAQ_chinese @@ -1,725 +1,794 @@ - PostgreSQL ³£¼ûÎÊÌ⣨FAQ£© + PostgreSQL 常è§é®é¢ï¼FAQï¼ - ×î½ü¸üУº2005 Äê 06 Ô 02 ÈÕ ÐÇÆÚÎå 22:27:35 CST + æè¿æ´æ°ï¼2007 å¹´ 1 æ 5 æ¥ ææäº 15:40:20 EST + ä¸æçæè¿æ´æ°ï¼2007 å¹´ 1 æ 29 æ¥ ææä¸ 22:48:04 CST - Ŀǰά»¤ÈËÔ±£ºBruce Momjian (pgman@candle.pha.pa.us) - ÖÐÎÄ°æά»¤ÈËÔ±£ºdoudou586 £¨doudou586_2005@yahoo.com.cn£© + ç®åç»´æ¤äººåï¼Bruce Momjian (pgman@candle.pha.pa.us) + ä¸æçç»´æ¤äººåï¼Daojing.Zhouï¼doudou586@gmail.comï¼ - ±¾ÎĵµµÄ×îа汾¿ÉÒÔÔÚ - http://www.postgresql.org/files/documentation/faqs/FAQ.html²é¿´¡£ + æ¬ææ¡£çææ°çæ¬å¯ä»¥å¨ + http://www.postgresql.org/files/documentation/faqs/FAQ.htmlæ¥çã - Óë²Ù×÷ϵͳƽ̨Ïà¹ØµÄÎÊÌâÔÚhttp://www.postgresql.org/docs/faq/Àï»Ø´ð¡£ + ä¸æä½ç³»ç»å¹³å°ç¸å³çé®é¢å¯å¨http://www.postgresql.org/docs/faq/éæ¾å°ç + æ¡ã _________________________________________________________________ -³£¼ûÎÊÌâ +常è§é®é¢ - 1.1)PostgreSQL ÊÇʲô£¿¸ÃÔõô·¢Òô£¿ - 1.2)PostgreSQL µÄ°æȨÊÇʲô£¿ - 1.3)PostgreSQL ¿ÉÒÔÔËÐÐÔÚÄÄЩ²Ù×÷ϵͳƽ̨ÉÏ£¿ - 1.4)ÎÒ´ÓÄÄÀïÄܵõ½ PostgreSQL£¿ - 1.5)ÎÒ´ÓÄÄÀïÄܵõ½¶Ô PostgreSQL µÄÖ§³Ö£¿ - 1.6)ÎÒÈçºÎÌá½»Ò»¸öBUG±¨¸æ£¿ - 1.7)×îаæµÄPostgreSQL ÊÇʲô£¿ - 1.8)Äܹ»»ñÈ¡µÄ×îÐÂÎĵµÓÐÄÄЩ£¿ - 1.9)ÎÒÈçºÎÁ˽âÒÑÖªµÄ BUG »òÔÝȱµÄ¹¦ÄÜ£¿ - 1.10)ÎÒÓ¦¸ÃÔõÑùѧϰ SQL £¿ - 1.11)ÎÒÓ¦¸ÃÔõÑù¼ÓÈ뿪·¢¶ÓÎ飿 - 1.12)PostgreSQL ºÍÆäËûÊý¾Ý¿âϵͳ±ÈÆðÀ´ÈçºÎ£¿ - 1.13)Ë¿ØÖƺ͹ÜÀíPostgreSQL £¿ - -Óû§¿Í»§¶ËÎÊÌâ + 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 åå¶ä»æ°æ®åºç³»ç»æ¯èµ·æ¥å¦ä½ï¼ + +ç¨æ·å®¢æ·ç«¯é®é¢ - 2.1)ÎÒÃÇ¿ÉÒÔÓÃʲôÓïÑÔºÍ PostgreSQL ´ò½»µÀ£¿ - 2.2)ÓÐʲô¹¤¾ß¿ÉÒÔ°Ñ PostgreSQL ÓÃÓÚ Web Ò³Ã棿 - 2.3)PostgreSQL ÓµÓÐͼÐÎÓû§½çÃæÂ𣿠+ 2.1)æ们å¯ä»¥ç¨ä»ä¹è¯è¨åPostgreSQL æ交éï¼ + 2.2)æä»ä¹å·¥å·å¯ä»¥æPostgreSQL ç¨äº Web 页é¢ï¼ + 2.3)PostgreSQL æ¥æå¾å½¢ç¨æ·çé¢åï¼ -ϵͳ¹ÜÀíÎÊÌâ +ç³»ç»ç®¡çé®é¢ - 3.1)ÎÒÔõÑù²ÅÄÜ°Ñ PostgreSQL ×°ÔÚ /usr/local/pgsql ÒÔÍâµÄµØ·½£¿ - 3.2)ÎÒÈçºÎ¿ØÖÆÀ´×ÔÆäËûÖ÷»úµÄÁ¬½Ó£¿ - 3.3)ÎÒÔõÑùµ÷ÕûÊý¾Ý¿âÒýÇæÒÔ»ñµÃ¸üºÃµÄÐÔÄÜ£¿ - 3.4)PostgreSQL Àï¿ÉÒÔ»ñµÃʲôÑùµÄµ÷ÊÔÌØÐÔ£¿ - 3.5)ΪʲôÔÚÊÔͼÁ¬½ÓµÇ¼ʱÊÕµ½¡°Sorry, too many clients¡± ÏûÏ¢£¿ - 3.6)ΪʲôҪÔÚÉý¼¶ PostgreSQL Ö÷Òª·¢²¼°æ±¾Ê±×ö dump ºÍ restore £¿ - 3.7)(ʹÓÃPostgreSQL)ÎÒÐèҪʹÓÃʲô¼ÆËã»úÓ²¼þ £¿ - -²Ù×÷ÎÊÌâ + 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)ΪʲôÎҵIJéѯºÜÂý£¿ÎªÊ²Ã´ÕâЩ²éѯûÓÐÀûÓÃË÷Òý£¿ - 4.7)ÎÒÈçºÎ²ÅÄÜ¿´µ½²éѯÓÅ»¯Æ÷ÊÇÔõÑùÆÀ¹À´¦ÀíÎҵIJéѯµÄ£¿ - 4.8)ÎÒÔõÑù×öÕýÔò±í´ïʽËÑË÷ºÍ´óСдÎ޹صÄÕýÔò±í´ïʽ²éÕÒ£¿ÔõÑùÀûÓÃË÷Òý½ø - ÐдóСдÎ޹زéÕÒ£¿ - 4.9)ÔÚÒ»¸ö²éѯÀÎÒÔõÑù¼ì²âÒ»¸ö×Ö¶ÎÊÇ·ñΪ - NULL£¿ÎÒÈçºÎ²ÅÄÜ׼ȷÅÅÐò¶ø²»ÂÛij×Ö¶ÎÊÇ·ñº¬NULLÖµ£¿ - 4.10)¸÷ÖÖ×Ö·ûÀàÐÍÖ®¼äÓÐʲô²»Í¬£¿ - 4.11.1)ÎÒÔõÑù´´½¨Ò»¸öÐòÁкÅ/×Ô¶¯µÝÔöµÄ×ֶΣ¿ - 4.11.2)ÎÒÈçºÎ»ñµÃÒ»¸ö²åÈëµÄÐòÁкŵÄÖµ£¿ - 4.11.3)ʹÓà currval() »áµ¼ÖºÍÆäËûÓû§µÄÎÉÂÒÇé¿ö£¨race condition£©Â𣿠- 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)Ä¿Ç°ÓÐÄÄЩÊý¾Ý¸´ÖÆ·½°¸¿ÉÓã¿ + 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) ç®åæåªäºæ°æ®å¤å¶æ¹æ¡å¯ç¨ï¼ + 4.21) 为ä½æ¥è¯¢ç»ææ¾ç¤ºç表åæååä¸æçæ¥è¯¢è¯å¥ä¸ + çä¸åï¼ä¸ºä½å¤§åç¶æä¸è½ä¿çï¼ _________________________________________________________________ -³£¼ûÎÊÌâ +常è§é®é¢ - 1.1)PostgreSQL ÊÇʲô£¿¸ÃÔõô·¢Òô£¿ - - PostgreSQL ¶Á×÷ Post-Gres-Q-L£¬ÓÐʱºòÒ²¼ò³ÆΪPostgres ¡£ + 1.1)PostgreSQL æ¯ä»ä¹ï¼è¯¥æä¹åé³ï¼ + + PostgreSQL è¯»ä½ Post-Gres-Q-Lï¼ææ¶åä¹ç®ç§°ä¸ºPostgres + ãæ³å¬ä¸ä¸å¶åé³ç人åå¯ä»è¿éä¸è½½å£°é³æä»¶ï¼ MP3 æ ¼å¼ ã PostgreSQL - ÊÇÃæÏòÄ¿±êµÄ¹ØϵÊý¾Ý¿âϵͳ£¬Ëü¾ßÓд«Í³ÉÌÒµÊý¾Ý¿âϵͳµÄËùÓй¦ÄÜ£¬Í¬Ê±ÓÖ - º¬Óн«ÔÚÏÂÒ»´ú DBMS ϵͳµÄʹÓõÄÔöÇ¿ÌØÐÔ¡£ PostgreSQL - ÊÇ×ÔÓÉÃâ·ÑµÄ£¬²¢ÇÒËùÓÐÔ´´úÂ붼¿ÉÒÔ»ñµÃ¡£ + æ¯é¢åç®æ çå³ç³»æ°æ®åºç³»ç»ï¼å®å·æä¼ ç»åä¸æ°æ®åºç³»ç»çææåè½ï¼åæ¶åå«æå°å + ¨ä¸ä¸ä»£ DBMS ç³»ç»ç使ç¨çå¢å¼ºç¹æ§ãPostgreSQL + æ¯èªç±åè´¹çï¼å¹¶ä¸æææºä»£ç é½å¯ä»¥è·å¾ã PostgreSQL - µÄ¿ª·¢¶ÓÎéÖ÷ҪΪ־ԸÕߣ¬ËûÃDZ鲼ÊÀ½ç¸÷µØ²¢Í¨¹ý»¥ÁªÍø½øÐÐÁªÏµ£¬ÕâÊÇÒ»¸ö - ÉçÇø¿ª·¢ÏîÄ¿£¬Ëü²»±»Èκι«Ë¾¿ØÖÆ¡£ - ÈçÏë¼ÓÈ뿪·¢¶ÓÎ飬Çë²Î¼û¿ª·¢ÈËÔ±³£¼ûÎÊÌ⣨FAQ£© + çå¼åéä¼ä¸»è¦ä¸ºå¿æ¿èï¼ä»ä»¬éå¸ä¸çåå°å¹¶éè¿äºèç½è¿è¡èç³»ï¼è¿æ¯ä¸ä¸ªç¤¾å + ºå¼å项ç®ï¼å®ä¸è¢«ä»»ä½å¬å¸æ§å¶ã + å¦æ³å å¥å¼åéä¼ï¼è¯·åè§å¼å人å常è§é®é¢ï¼FAQï¼ http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html - 1.2)PostgreSQL µÄ°æȨÊÇʲô? - - PostgreSQLµÄ·¢²¼×ñ´Ó¾ - µäµÄBSD°æȨ¡£¹ØÓÚÔ´´úÂëµÄÈçºÎʹÓÃûÓÐÈκÎÏÞÖÆ£¬ÎÒÃǺÜϲ»¶ÕâÖÖ·½Ê½²¢ÇÒ» - ¹Ã»ÓдòËã¸Ä±äËü¡£ - - ÏÂÃæ¾ÍÊÇÎÒÃÇʹÓõÄBSD°æȨÄÚÈÝ£º - - ²¿·Ö°æȨ£¨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 + 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.£© + copies.ï¼ - ÔÚÈκÎÇé¿öÏ£¬¼ÓÖÝ´óѧ¶¼²»³Ðµ£ÒòʹÓôËÈí¼þ¼°ÆäÎĵµ¶øµ¼ÖµĶÔÈκε±ÊÂÈË - µÄÖ±½ÓµÄ£¬ - ¼ä½ÓµÄ£¬ÌØÊâµÄ£¬¸½¼ÓµÄ»òÕßÏà°é¶øÉúµÄË𻵣¬°üÀ¨ÀûÒæËðʧµÄÔðÈΣ¬¼´Ê¹¼ÓÖÝ - ´óѧÒѾ½¨ÒéÁËÕâЩËðʧµÄ¿ÉÄÜÐÔʱҲÊÇÈç´Ë¡£ + å¨ä»»ä½æåµä¸ï¼å å·å¤§å¦é½ä¸æ¿æå 使ç¨æ + ¤è½¯ä»¶åå¶ææ¡£è导è´ç对任ä½å½äºäººçç´æ¥çï¼ + é´æ¥çï¼ç¹æ®çï¼éå çæèç¸ä¼´èççæåï¼åæ¬å©çæ失ç责任ï¼å³ä½¿å å·å¤§å + ¦å·²ç»å»ºè®®äºè¿äºæ失çå¯è½æ§æ¶ä¹æ¯å¦æ¤ã - £¨IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY + ï¼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.£© + HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.ï¼ - ¼ÓÖÝ´óѧÃ÷È··ÅÆúÈκα£Ö¤£¬°üÀ¨µ«²»¾ÖÏÞÓÚijһÌض¨ÓÃ;µÄÉÌÒµºÍÀûÒæµÄÒþº¬ - ±£Ö¤¡£ - ÕâÀïÌṩµÄÕâ·ÝÈí¼þÊÇ»ùÓÚ¡°µ±×÷ÊÇ¡±µÄ»ù´¡µÄ£¬Òò¶ø¼ÓÖÝ´óѧûÓÐÔðÈÎÌṩά - »¤£¬Ö§³Ö£¬¸üУ¬ÔöÇ¿»òÕßÐ޸ĵķþÎñ¡£ + å å·å¤§å¦æç¡®æ¾å¼ä»»ä½ä¿è¯ï¼åæ¬ä½ä¸å±éäºæä¸ç¹å®ç¨éçåä¸åå©ççéå«ä¿è¯ã + è¿éæä¾çè¿ä»½è½¯ä»¶æ¯åºäºâå½ä½æ¯âçåºç¡çï¼å èå å·å¤§å + ¦æ²¡æ责任æä¾ç»´æ¤ï¼æ¯æï¼æ´æ°ï¼å¢å¼ºæèä¿®æ¹çæå¡ã - £¨THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + ï¼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.£© + UPDATES, ENHANCEMENTS, OR MODIFICATIONS.ï¼ - 1.3)PostgreSQL ¿ÉÒÔÔËÐÐÔÚÄÄЩ²Ù×÷ϵͳƽ̨ÉÏ£¿ - - Ò»°ã˵À´£¬Ò»¸öÏÖ´úµÄ UNIX ¼æÈݵÄƽ̨¶¼ÄÜÔËÐÐ PostgreSQL - ¡£ÔÚ°²×°Ö¸ÄÏÀïÁгöÁË·¢²¼Ê±¾¹ýÃ÷È·²âÊÔµÄƽ̨¡£ + 1.4)PostgreSQL å¯ä»¥è¿è¡å¨åªäºæä½ç³»ç»å¹³å°ä¸ï¼ + + ä¸è¬è¯´æ¥ï¼ä»»ä½ç°å¨å¯¹ UNIX å¼å®¹çæä½ç³»ç»ä¹ä¸é½è½è¿è¡PostgreSQL + ãå¨å®è£æåéååºäºåå¸æ¶ç»è¿æç¡®æµè¯çå¹³å°ã - PostgreSQlÒ²¿ÉÒÔÖ±½ÓÔËÐÐÔÚ»ùÓÚ΢ÈíWindows-NTµÄ²Ù×÷ϵͳ£¬ÈçWin2000£¬Win - XP ºÍ Win2003£¬ÒÑÖÆ×÷Íê³ÉµÄ°²×°°ü¿É´Ó - http://pgfoundry.org/projects/pginstallerÏÂÔØ£¬»ùÓÚMSDOSµÄWindows²Ù×÷Ï - µÍ³ £¨Win95£¬Win98£¬WinMe£©ÐèҪͨ¹ýCygwinÄ£Äâ»·¾³ÔËÐÐ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¿ª·¢µÄ°æ±¾¿É´Ó + åæ¶ä¹æä¸ä¸ªä¸º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.4)ÎÒ´ÓÄÄÀïÄܵõ½ PostgreSQL£¿ - - ͨ¹ýä¯ÀÀÆ÷¿É´Óhttp://www.postgresql.org/ftp/ÏÂÔØ£¬Ò²¿Éͨ¹ýFTP£¬´Ó - ftp://ftp.PostgreSQL.org/pub/Õ¾µãÏÂÔØ¡£ - - 1.5)ÎÒ´ÓÄÄÀïÄܵõ½¶Ô 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.6)ÎÒÈçºÎÌá½»Ò»¸öBUG±¨¸æ£¿ - - ¿É·ÃÎÊ - http://www.postgresql.org/support/submitbug£¬ÌîдBugÉϱ¨±í¸ñ¼´¿É¡£ - - ͬÑùÒ²¿É·ÃÎÊftpÕ¾µãftp://ftp.PostgreSQL.org/pub/ - ¼ì²éÓÐÎÞ¸üеÄPostgreSQL°æ±¾»ò²¹¶¡¡£ - - 1.7)×îаæµÄPostgreSQL ÊÇʲô£¿ - - PostgreSQL ×îеİ汾ÊÇ°æ±¾ 8.0.2 £¨Òë×¢£ºÏÖ×îа汾Ϊ8.0.3£©¡£ - - ÎÒÃǼƻ®Ã¿Äê·¢²¼Ò»¸öÖ÷Òª°æ±¾£¬Ã¿¼¸¸öÔ·¢²¼Ò»¸öС°æ±¾¡£ - - 1.8)Äܹ»»ñÈ¡µÄ×îÐÂÎĵµÓÐÄÄЩ£¿ - - PostgreSQL°üº¬´óÁ¿µÄÎĵµ£¬Ö÷ÒªÓÐһЩÊֲᣬÊÖ²áÒ³ºÍһЩµÄ²âÊÔÀý×Ó¡£²Î¼û - /doc Ŀ¼£¨Òë×¢£ºÓ¦Îª $PGHOME/doc£©¡£ Ä㻹¿ÉÒÔÔÚÏßä¯ÀÀ PostgreSQL - µÄÊֲᣬÆäµØÖ·ÊÇ£ºhttp://www.PostgreSQL.org/docs¡£ - - ÓÐÁ½±¾¹ØÓÚ PostgreSQL µÄÊéÔÚÏßÌṩ£¬ÔÚ - http://www.PostgreSQL.org/docs/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.9)ÎÒÈçºÎÁ˽âÒÑÖªµÄ BUG »òÔÝȱµÄ¹¦ÄÜ£¿ - - PostgreSQL Ö§³ÖÒ»¸öÀ©Õ¹Á赀 SQL-92 µÄ×Ó¼¯¡£²ÎÔÄÎÒÃǵÄTODO - ÁÐ±í£¬»ñÈ¡Ò»¸öÒÑÖªBug£¬ÔÝȱµÄ¹¦Äܺͽ«À´µÄ¼Æ»®¡£ - - 1.10)ÎÒÓ¦¸ÃÔõÑùѧϰ SQL £¿ - - Ê×ÏÈ¿¼ÂÇÉÏÊöÌáµ½µÄÓëPostgreSQLÏà¹ØµÄÊé¼®£¬ÁíÍâÒ»±¾ÊÇTeach Yourself SQL - in 21 Days, Second Edition£¬ ÎÒÃǵÄÐí¶àÓû§Ï²»¶The Practical SQL - Handbook Bowman, Judith S., et al., Addison-Wesley£¬ÆäËûµÄÔòϲ»¶ The - Complete Reference SQL, Groff et al., McGraw-Hill¡£ - - 1.11)ÎÒÓ¦¸ÃÔõÑù¼ÓÈ뿪·¢¶ÓÎ飿 - - Ïê¼û Developer's FAQ ¡£ - - 1.12)PostgreSQL ºÍÆäËûÊý¾Ý¿âϵͳ±ÈÆðÀ´ÈçºÎ£¿ - - ÆÀ¼ÛÈí¼þÓкü¸ÖÖ·½·¨£ºÌØÐÔ£¬ÐÔÄÜ£¬¿É¿¿ÐÔ£¬Ö§³ÖºÍ¼Û¸ñ¡£ - - ÌØÐÔ - PostgreSQL ÓµÓдóÐÍÉÌÓà DBMS Àï´ó¶àÊýÌØÐÔ£¬ - ÀýÈ磺ÊÂÎñ£¬×Ó²éѯ£¬´¥·¢Æ÷£¬ÊÓͼ£¬Íâ¼ü²Î¿¼ÍêÕûÐԺ͸´ÔÓµÄËøµÈ¡£ - ÎÒÃÇ»¹ÓÐһЩËüÃÇûÓеÄÌØÐÔ£¬ÈçÓû§¶¨ÒåÀàÐÍ£¬¼Ì³Ð£¬¹æÔòºÍ¶à°æ±¾² - ¢ÐпØÖÆÒÔ¼õÉÙËøµÄÕùÓõȡ£ - - ÐÔÄÜ - PostgreSQL ºÍÆäËûÉÌÓúͿªÔ´µÄÊý¾Ý¿â¾ßÓÐÀàËƵÄÐÔÄÜ¡£ - ¶ÔijЩ´¦ÀíËü±È½Ï¿ì£¬¶ÔÆäËûһЩ´¦ÀíËü±È½ÏÂý¡£ - ÓëÆäËûÊý¾Ý¿âÏà±È£¬ÎÒÃǵÄÐÔÄÜͨ³£ÔÚ +/- 10%Ö®¼ä¡£ + 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.1 ã + + æ们计åæ¯å¹´åå¸ä¸ä¸ªä¸»è¦å级çæ¬ï¼æ¯å 个æåå¸ä¸ä¸ªå°çæ¬ã + + 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/d + ocsã + + æ两æ¬å³äºPostgreSQLç书å¨çº¿æä¾ï¼å¨ + http://www.PostgreSQL.org/docs/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 æ¥æ大ååç¨æ°æ®åºæå¤çåè½ï¼ä¾å¦ï¼äºå¡ï¼å + æ¥è¯¢ï¼è§¦åå¨ï¼è§å¾ï¼å¤é®åèå®æ´æ§åå¤æçéå®çã + æ们è¿æä¸äºå®ä»¬æ²¡æçç¹æ§ï¼å¦ç¨æ·å®ä¹ç±»åï¼ç»§æ¿ï¼è§ååå¤çæ¬å¹¶è + ¡æ§å¶ä»¥åå°éçäºç¨çã - ¿É¿¿ÐÔ - ÎÒÃÇÖªµÀ DBMS ±ØÐëÊÇ¿É¿¿µÄ£¬·ñÔòËü¾ÍÒ»µãÓö¼Ã»ÓС£ - ÎÒÃÇŬÁ¦×öµ½·¢²¼¾ - ¹ýÈÏÕæ²âÊԵģ¬Îȶ¨µÄ³ô³æ×îÉٵĴúÂ롣ÿ¸ö°æ±¾ÖÁÉÙÓÐÒ»¸öÔ嵀 beta - ²âÊÔʱ¼ä£¬²¢ÇÒÎÒÃǵķ¢²¼ÀúÊ·ÏÔʾÎÒÃÇ¿ÉÒÔÌṩÎȶ¨µÄ£¬Àι̵ģ¬¿ÉÓ - ÃÓÚÉú²úʹÓõİ汾¡£ÎÒÃÇÏàÐÅ - ÔÚÕâ·½ÃæÎÒÃÇÓëÆäËûµÄÊý¾Ý¿âÈí¼þÊÇÏ൱µÄ¡£ + æ§è½ + PostgreSQLåå¶ä»åç¨åå¼æºçæ°æ®åºå·æ类似çæ§è½ã对æäºå¤çå®æ¯è¾å¿« + ï¼å¯¹å¶ä»ä¸äºå¤çå®æ¯è¾æ¢ã ä¸å¶ä»æ°æ®åºç¸æ¯ï¼æ们çæ§è½ä¼å£éå¸¸å¨ + +/- 10%ä¹é´ã - Ö§³Ö - ÎÒÃǵÄÓʼþÁбíÌṩһ¸ö·Ç³£´óµÄ¿ª·¢ÈËÔ±ºÍÓû§µÄ×éÒÔ°ïÖú½â¾öËùÅöµ - ½µÄÈκÎÎÊÌâ¡£ ÎÒÃDz»Äܱ£Ö¤¿Ï¶¨Äܽâ¾öÎÊÌ⣬Ïà±È֮ϣ¬ÉÌÓà DBMS - Ò²²¢²»ÊÇ×ÜÄܹ»Ìṩ½â¾ö·½·¨¡£ - Ö±½ÓÓ뿪·¢ÈËÔ±£¬Óû§Èº£¬ÊÖ²áºÍÔ´³ÌÐò½Ó´¥Áî PostgreSQL - µÄÖ§³Ö±ÈÆäËû DBMS - »¹ÒªºÃ¡£»¹ÓÐһЩÉÌÒµÐÔµÄÔ¤°ü×°µÄÖ§³Ö£¬¿ÉÒÔ¸øÌṩ¸øÄÇЩÐèÒªµÄÈË¡ - ££¨²ÎÔÄ FAQ Ìõ¿î 1.5 С½Ú£© + å¯é æ§ + æ们é½ç¥éæ°æ®åºå¿é¡»æ¯å¯é çï¼å¦åå®å°±ä¸ç¹ç¨é½æ²¡æãæ们åªååå°åå¸ + ç»è¿è®¤çæµè¯çï¼ç¼ºé·æå°ç稳å®ä»£ç ãæ¯ä¸ªçæ¬è³å°æä¸ä¸ªæç beta + æµè¯æ¶é´ï¼å¹¶ä¸æ们çåå¸åå²æ¾ç¤ºæ们å¯ä»¥æä¾ç¨³å®çï¼ç¢åºçï¼å¯ç¨ä + ºç产使ç¨ççæ¬ãæ们ç¸ä¿¡å¨è¿æ¹é¢æ们ä¸å¶ä»çæ°æ®åºè½¯ä»¶æ¯ç¸å½çã - ¼Û¸ñ - ÎÒÃǶÔÈκÎÓÃ;¶¼Ãâ·Ñ£¬°üÀ¨ÉÌÓúͷÇÉÌÓÃÄ¿µÄ¡£ - Äã¿ÉÒÔ²»¼ÓÏÞÖƵØÏòÄãµÄ²úÆ·Àï¼ÓÈëÎÒÃǵĴúÂ룬³ýÁËÄÇЩÎÒÃÇÔÚÉÏÃæµ - Ä°æȨÉùÃ÷ÀïÉùÃ÷µÄ BSD ·ç¸ñµÄ°æȨÍâ¡£ + æ¯æ + æ们çé®ä»¶å表æä¾ä¸ä¸ªé常大çå¼å人ååç¨æ·çç»ä»¥å¸®å©è§£å³æ碰å + °çä»»ä½é®é¢ãæ们ä¸è½ä¿è¯æ»æ¯è½è§£å³é®é¢ï¼ç¸æ¯ä¹ä¸ï¼åç¨æ°æ®åºè½¯ + 件ä¹å¹¶ä¸æ¯æ»è½å¤æä¾è§£å³æ¹æ³ã + ç´æ¥ä¸å¼å人åï¼ç¨æ·ç¾¤ï¼æååæºç¨åºæ¥è§¦ä½¿PostgreSQLçæ¯ææ¯å¶ä»æ° + æ®åºè¿è¦å¥½ãè¿æä¸äºåä¸æ§çå¨é¢ææ¯æ¯æï¼å¯ä»¥ç»æä¾ç»é£äºéè¦ç人ãï¼ + åé1.7 å°èï¼ - 1.13)Ë¿ØÖÆPostgreSQL £¿ - - Èç¹ûÄãÔÚÑ°ÕÒPostgreSQLµÄÕÆÃÅÈË£¬»òÊÇʲôÖÐÑëίԱ»á£¬»òÊÇʲôËùÊô¹«Ë¾£¬ - ÄãÖ»ÄÜ·ÅÆúÁË---ÒòΪһ¸öÒ²²»´æÔÚ£¬µ«ÎÒÃǵÄÈ·ÓÐÒ»¸ö - ίԱ»áºÍCVS¹ÜÀí×飬µ«ÕâЩ¹¤×÷×éµÄÉèÁ¢Ö÷ÒªÊÇΪÁ˽øÐйÜÀí¹¤×÷¶ø²»ÊǶÔPos - tgreSQL½øÐпØÖÆ£¬PostgreSQLÏîÄ¿ÊÇÓÉÈκÎÈ˾ù - ¿É²Î¼ÓµÄ¿ª·¢ÈËÔ±ÉçÇøºÍËùÓÐÓû§¿ØÖƵģ¬ÄãËùÐèÒª×öµÄ¾ÍÊǼÓÈëÓʼþÁÐ±í£¬²Î - ÓëÌÖÂÛ¼´¿É£¨Òª²ÎÓëPostgreSQLµÄ¿ª·¢Ïê¼û Developer's FAQ »ñÈ¡ÐÅÏ¢£©¡£ + ä»·æ ¼ + æ们对任ä½ç¨éé½åè´¹ï¼åæ¬åç¨åéåç¨ç®çã + ä½ å¯ä»¥ä¸å éå¶å°åä½ ç产åéå å¥æ们ç代ç ï¼é¤äºé£äºæ们å¨ä¸é¢çç + æ声æé声æç BSDçæä¹å¤çå容ã _________________________________________________________________ -Óû§¿Í»§¶ËÎÊÌâ +ç¨æ·å®¢æ·ç«¯é®é¢ - 2.1)ÎÒÃÇ¿ÉÒÔÓÃʲôÓïÑÔºÍ PostgreSQL ´ò½»µÀ£¿ - - PostgreSQL(ȱʡÇé¿ö)Ö»°²×°ÓÐCºÍÄÚǶʽCµÄ½Ó¿Ú£¬ÆäËûµÄ½Ó¿Ú¶¼ÊǶÀÁ¢µÄÏîÄ¿ - £¬Äܹ»·Ö±ðÏÂÔØ£¬ÕâЩ½Ó¿ÚÏîÄ¿¶ÀÁ¢µÄºÃ´¦ - ÊÇËûÃÇ¿ÉÒÔÓи÷×Եķ¢²¼¼Æ»®ºÍ¸÷×Ô¶ÀÁ¢µÄ¿ª·¢×é¡£ + 2.1) æ们å¯ä»¥ç¨ä»ä¹è¯è¨åPostgreSQLæ交éï¼ + + PostgreSQL(缺çæåµ)åªå®è£æCåååµå¼Cçæ¥å£ï¼å¶ä»çæ¥å£é½æ¯ç¬ç«ç项ç®ï¼è½å¤ + åå«ä¸è½½ï¼è¿äºæ¥å£é¡¹ç®ç¬ç«çå¥½å¤ + æ¯ä»ä»¬å¯ä»¥æåèªçåå¸è®¡åååèªç¬ç«çå¼åç»ã - һЩ±à³ÌÓïÑÔÈçPHP¶¼ÓзÃÎÊ PostgreSQL - µÄ½Ó¿Ú£¬Perl,TCL,PythonÒÔ¼°ºÜ¶àÆäËûÓïÑԵĽӿÚÔÚ - http://gborg.postgresql.org ÉϵÄDrivers/InterfacesС½Ú¿ÉÕÒµ½£¬ - ²¢ÇÒͨ¹ýInternetºÜÈÝÒ×ËÑË÷µ½¡£ + ä¸äºç¼ç¨è¯ + è¨å¦PHPé½æ访é®PostgreSQLçæ¥å£ï¼PerlãTCLãPython以åå¾å¤å¶ä»è¯è¨çæ¥å£å¨ + http://gborg.postgresql.orgç½ç«ä¸çDrivers/Interfaceså°èå¯æ¾å°ï¼ + 并ä¸éè¿Internetå¾å®¹ææç´¢å°ã - 2.2)ÓÐʲô¹¤¾ß¿ÉÒÔ°Ñ PostgreSQL ÓÃÓÚ Web Ò³Ã棿 - - Ò»¸ö½éÉÜÒÔÊý¾Ý¿âΪºǫ́µÄͦ²»´íµÄÕ¾µãÊÇ£ºhttp://www.webreview.com¡£ + 2.2) æä»ä¹å·¥å·å¯ä»¥æPostgreSQLç¨äº Web 页é¢ï¼ + + ä¸ä¸ªä»ç»ä»¥æ°æ®åºä¸ºåå°çæºä¸éçç«ç¹æ¯ï¼http://www.webreview.comã - ¶ÔÓÚ Web ¼¯³É£¬PHP ÊÇÒ»¸ö¼«ºÃµÄ½Ó¿Ú¡£ËüÔÚ£ºhttp://www.php.net/¡£ + å¯¹äº Web éæï¼PHP æ¯ä¸ä¸ªæ好çæ¥å£ãå®å¨http://www.php.net/ã - ¶ÔÓÚ¸´ÔÓµÄÈÎÎñ£¬ºÜ¶àÈ˲ÉÓà Perl ½Ó¿ÚºÍ CGI.pm »ò mod_perl ¡£ + 对äºå¤æçä»»å¡ï¼å¾å¤äººéç¨ Perl æ¥å£å 使ç¨CGI.pmçDBD::Pg æ mod_perl ã - 2.3)PostgreSQL ÓµÓÐͼÐÎÓû§½çÃæÂ𣿠- - Êǵģ¬ÔÚ - http://techdocs.postgresql.org/guides/GUIToolsÓÐÒ»¸öÏêϸµÄÁÐ±í¡£ + 2.3)PostgreSQLæ¥æå¾å½¢ç¨æ·çé¢åï¼ + + åä¸ç¨æ·ææ¯å¼æºå¼å人åè½æ¾å°å¾å¤çæå³PostgreSQLçGUIå¾å½¢å·¥å·è½¯ä»¶ï¼å¨ + PostgreSQL社åºææ¡£æä¸ä¸ªè¯¦ç»çå表ã _________________________________________________________________ -ϵͳ¹ÜÀíÎÊÌâ +ç³»ç»ç®¡çé®é¢ - 3.1)ÎÒÔõÑùÄÜ°Ñ PostgreSQL ×°ÔÚ /usr/local/pgsql ÒÔÍâµÄµØ·½£¿ - - ÔÚÔËÐÐ configure ʱ¼ÓÉÏ --prefix Ñ¡Ïî¡£ - - 3.2)ÎÒÈçºÎ¿ØÖÆÀ´×ÔÆäËûÖ÷»úµÄÁ¬½Ó£¿ - - ȱʡʱ£¬PostgreSQL Ö»ÔÊÐíͨ¹ý unix - ÓòÌ×½Ó×Ö»òTCP/IP·½Ê½ÇÒÀ´×Ô±¾»úµÄÁ¬½Ó¡£ - ÄãÖ»ÓÐÔÚÐÞ¸ÄÁËÅäÖÃÎļþpostgresql.confÖеÄlisten_addresses£¬ÇÒÒ²ÔÚÅäÖÃÎ - ļþpg_hba.confÖдò¿ªÁË Ö÷»úΪ»ù´¡£¨ host-based - £©µÄÉí·ÝÈÏÖ¤£¬²¢ÖØÐÂÆô¶¯PostgreSQL£¬·ñÔòÆäËû»úÆ÷ÊDz»ÄÜÓëÄãµÄPostgreSQL - ·þÎñÆ÷Á¬½ÓµÄ¡£ - - 3.3)ÎÒÔõÑùµ÷ÕûÊý¾Ý¿âÒýÇæÒÔ»ñµÃ¸üºÃµÄÐÔÄÜ£¿ - - ÓÐÈý¸öÖ÷Òª·½Ãæ¿ÉÒÔÌáÉýPostgreSQLµÄDZÄÜ¡£ - - ²éѯ·½Ê½µÄ±ä»¯ - ÕâÖ÷ÒªÉæ¼°Ð޸IJéѯ·½Ê½ÒÔ»ñÈ¡¸üºÃµÄÐÔÄÜ: + 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 - + ½øÐдóÁ¿Êý¾Ý¸ü¸ÄʱÏÈɾ³ýË÷Òý£¨È»ºóÖؽ¨Ë÷Òý£© + + å建索å¼ï¼åæ¬è¡¨è¾¾å¼åé¨åç´¢å¼ï¼ + + 使ç¨COPYè¯å¥ä»£æ¿å¤ä¸ªInsertè¯å¥ï¼ + + å°å¤ä¸ªSQLè¯å¥ç»æä¸ä¸ªäºå¡ä»¥åå°æ交äºå¡çå¼éï¼ + + ä»ä¸ä¸ªç´¢å¼ä¸æåå¤æ¡è®°å½æ¶ä½¿ç¨CLUSTERï¼ + + ä»ä¸ä¸ªæ¥è¯¢ç»æä¸ååºé¨åè®°å½æ¶ä½¿ç¨LIMITï¼ + + 使ç¨é¢ç¼è¯å¼æ¥è¯¢ï¼Prepared Query)ï¼ + + 使ç¨ANALYZE以ä¿æ精确çä¼åç»è®¡ï¼ + + å®æä½¿ç¨ VACUUM æ pg_autovacuum + + è¿è¡å¤§éæ°æ®æ´æ¹æ¶åå é¤ç´¢å¼ï¼ç¶åé建索å¼ï¼ - ·þÎñÆ÷µÄÅäÖà - ÅäÖÃÎļþpostgres.confÖеĺܶàÉèÖö¼»áÓ°ÏìÐÔÄÜ£¬ËùÓвÎÊýµÄÁбí¿É - ¼û£º Administration Guide/Server Run-time Environment/Run-time - Configuration£¬ ÓйزÎÊýµÄ½âÊͿɼû£º - http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_co - nf_e.html ºÍ - http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html¡£ + æå¡å¨çéç½® + éç½®æ件postgres.confä¸ + çå¾å¤è®¾ç½®é½ä¼å½±åæ§è½ï¼ææåæ°çå表å¯è§ï¼ + 管çåæå/æ°æ®åºæå¡å¨è¿è¡ç¯å¢/æ°æ®åºæå¡å¨è¿è¡éç½®ï¼ + æå³åæ°ç解éå¯è§ï¼http://www.varlena.com/varlena/GeneralBits/Tid + bits/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/¡£ + 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 Ö÷Òª·¢²¼°æ±¾Ê±×ö dump ºÍ restore £¿ - - PostgreSQL ¿ª·¢×é¶Ôÿ´ÎСµÄÉý¼¶½ö×öÁ˽ÏÉÙµÄÐ޸ģ¬Òò´Ë´Ó 7.4.0 Éý¼¶µ½ - 7.4.1 ²»ÐèÒª dump ºÍ restore¡£ µ«ÊÇÖ÷ÒªµÄÉý¼¶£¨ÀýÈç´Ó 7.3 µ½ - 7.4£©Í¨³£»áÐÞ¸Äϵͳ±íºÍÊý¾Ý±íµÄÄÚ²¿¸ñʽ¡£ - ÕâЩ±ä»¯Ò»°ã±È½Ï¸´ÔÓ£¬Òò´ËÎÒÃDz»Î¬Êý¾ÝÎļþµÄÏòºó¼æÈÝ¡£ dump - ½«Êý¾Ý°´ÕÕͨÓõĸñʽÊä³ö£¬Ëæºó¿ÉÒÔ±»ÖØмÓÔز¢Ê¹ÓÃеÄÄÚ²¿¸ñʽ¡£ - - 3.7)(ʹÓÃPostgreSQL)ÎÒÐèҪʹÓÃʲô¼ÆËã»úÓ²¼þ £¿ - - ÓÉÓÚ¼ÆËã»úÓ²¼þ´ó¶àÊýÊǼæÈݵģ¬ÈËÃÇ×ÜÊÇÇãÏòÓÚÏàÐÅËùÓмÆËã»úÓ²¼þÖÊÁ¿Ò²ÊÇ - ÏàͬµÄ¡£ÊÂʵÉϲ»ÊÇ£¬ ECC RAM£¨´øÆæżУÑéµÄÄڴ棩£¬SCSI - £¨Ó²ÅÌ£©ºÍÓÅÖʵÄÖ÷°å±ÈһЩ±ãÒË»õÒª¸ü¼Ó¿É¿¿ÇÒ¾ßÓиüºÃµÄÐÔÄÜ¡£PostgreSQL - ¼¸ºõ¿ÉÒÔÔËÐÐÔÚÈκÎÓ²¼þÉÏ£¬ - µ«Èç¹û¿É¿¿ÐÔºÍÐÔÄܶÔÄãµÄϵͳºÜÖØÒª£¬Äã¾ÍÐèҪȫÃæµÄÑо¿Ò»ÏÂÄãµÄÓ²¼þÅäÖà - ÁË¡£ÔÚÎÒÃǵÄÓʼþÁбíÉÏÒ²ÓйØÓÚ Ó²¼þÅäÖúÍÐԼ۱ȵÄÌÖÂÛ¡£ + 3.4)PostgreSQLéå¯ä»¥è·å¾ä»ä¹æ ·çè°è¯ç¹æ§ï¼ + + PostgreSQL æå¾å¤ç±»ä¼¼ log_* + çæå¡å¨éç½®åéå¯ç¨äºæ¥è¯¢çæå°åè¿ç¨ç»è®¡ï¼èè¿äºå·¥ä½å¯¹è°è¯åæ§è½æµè¯å¾æå¸ + ®å©ã + + 3.5) 为ä»ä¹å¨è¯å¾è¿æ¥æ¶æ¶å°âSorry, too many + clientsï¼å·²æ太å¤ç¨æ·è¿æ¥ï¼âæ¶æ¯ï¼ + + è¿è¡¨ç¤ºä½ 已达å°ç¼ºç100个并ååå°è¿ç¨æ°çéå¶ï¼ä½ éè¦éè¿ä¿®æ¹postgres + ql.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.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²éѯ¡£Postg - reSQLÒ²ÌṩÁËÒ»¸ö¼æÈÝSQLµÄINFORMATION SCHEMA½Ó¿Ú£¬ - Äã¿ÉÒÔ´ÓÕâÀï»ñÈ¡¹ØÓÚÊý¾Ý¿âµÄÐÅÏ¢¡£ - - ÔÚϵͳÖÐÓÐһЩÒÔpg_ ´òÍ·µÄϵͳ±íÒ²ÃèÊöÁ˱íµÄ¶¨Òå¡£ - - ʹÓà psql -l Ö¸Áî¿ÉÒÔÁгöËùÓеÄÊý¾Ý¿â¡£ - - Ò²¿ÉÒÔä¯ÀÀһϠ- pgsql/src/tutorial/syscat.sourceÎļþ£¬ËüÁоÙÁ˺ܶà¿É´ÓÊý¾Ý¿âϵͳ±íÖлñ - È¡ÐÅÏ¢µÄSELECTÓï·¨¡£ - - 4.3)ÈçºÎ¸ü¸ÄÒ»¸ö×ֶεÄÊý¾ÝÀàÐÍ£¿ - - ÔÚ8.0°æ±¾Àï¸ü¸ÄÒ»¸ö×ֶεÄÊý¾ÝÀàÐͺÜÈÝÒ×£¬¿ÉʹÓà ALTER TABLE ALTER - COLUMN TYPE ¡£ - - ÔÚÒÔÇ°µÄ°æ±¾ÖУ¬¿ÉÒÔÕâÑù×ö£º - BEGIN; + 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 - µÄÎļþ´æ´¢£¬Òò´ËÎļþϵͳ³ß´çµÄÏÞÖÆÊDz»ÖØÒªµÄ¡£ - - Èç¹ûȱʡµÄ¿é´óСÔö³¤µ½ 32K £¬×î´óµÄ±í³ß´çºÍ×î´óÁÐÊý»¹¿ÉÒÔÔö¼Óµ½Ëı¶¡£ - - 4.5)´æ´¢Ò»¸öµäÐ͵ÄÎı¾ÎļþÀïµÄÊý¾ÝÐèÒª¶àÉÙ´ÅÅ̿ռ䣿 - - Ò»¸ö Postgres - Êý¾Ý¿â£¨´æ´¢Ò»¸öÎı¾Îļþ£©ËùÕ¼ÓõĿռä×î¶à¿ÉÄÜÐèÒªÏ൱ÓÚÕâ¸öÎı¾Îļþ×Ô - Éí´óС5±¶µÄ´ÅÅ̿ռ䡣 - - ÀýÈ磬¼ÙÉèÓÐÒ»¸ö 100,000 ÐеÄÎļþ£¬Ã¿ÐÐÓÐÒ»¸öÕûÊýºÍÒ»¸öÎı¾ÃèÊö¡£ - ¼ÙÉèÎı¾´®µÄƽ¾ù³¤¶ÈΪ20×Ö½Ú¡£Îı¾ÎļþÕ¼Óà 2.8 MB¡£´æ·ÅÕâЩÊý¾ÝµÄ - PostgreSQL Êý¾Ý¿âÎļþ´óÔ¼ÊÇ 6.4 MB: - 32 ×Ö½Ú: ÿÐеÄÍ·£¨¹À¼ÆÖµ£© - 24 ×Ö½Ú: Ò»¸öÕûÊýÐÍ×ֶκÍÒ»¸öÎı¾ÐÍ×ֶΠ- + 4 ×Ö½Ú: Ò³ÃæÄÚÖ¸ÏòÔª×éµÄÖ¸Õë + ä½ ç¶åå¯ä»¥ä½¿ç¨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åèãææ¬æ件å ç¨ 2.8 MBãå + æ¾è¿äºæ°æ®çPostgreSQLæ°æ®åºæä»¶å¤§çº¦æ¯ 6.4 MB: + 28 åè: æ¯è¡ç头ï¼å¤§çº¦å¼ï¼ + 24 åè: ä¸ä¸ªæ´æ°åå段åä¸ä¸ªææ¬åå段 + + 4 åè: 页é¢åæååç»çæé ---------------------------------------- - 60 ×Ö½ÚÿÐÐ - - PostgreSQL Êý¾ÝÒ³µÄ´óСÊÇ 8192 ×Ö½Ú (8 KB)£¬Ôò£º + 56 åèæ¯è¡ - 8192 ×Ö½Úÿҳ - ------------------- = 136 ÐÐ/Êý¾ÝÒ³£¨ÏòÏÂÈ¡Õû£© - 60 ×Ö½ÚÿÐÐ + PostgreSQL æ°æ®é¡µç大å°æ¯ 8192 åè (8 KB)ï¼åï¼ - 100000 Êý¾ÝÐÐ - -------------------- = 735 Êý¾ÝÒ³£¨ÏòÉÏÈ¡Õû£© - 128 ÐÐÿҳ + 8192 åèæ¯é¡µ + ------------------- = 146 è¡/æ°æ®é¡µï¼åä¸åæ´ï¼ + 56 åèæ¯è¡ - 735 Êý¾ÝÒ³ * 8192 ×Ö½Ú/Ò³ = 6,021,120 ×Ö½Ú£¨6 MB£© + 100000 æ°æ®è¡ + -------------------- = 685 æ°æ®é¡µï¼åä¸åæ´ï¼ + 146 è¡/æ°æ®é¡µ - Ë÷Òý²»ÐèÒªÕâô¶àµÄ¶îÍâÏûºÄ£¬µ«Ò²È·Êµ°üÀ¨±»Ë÷ÒýµÄÊý¾Ý£¬Òò´ËËüÃÇÒ²¿ÉÄÜºÜ - ´ó¡£ - - ¿ÕÖµNULL´æ·ÅÔÚλͼÖУ¬Òò´ËÕ¼ÓúÜÉٵĿռ䡣 - - 4.6)ΪʲôÎҵIJéѯºÜÂý£¿ÎªÊ²Ã´ÕâЩ²éѯûÓÐÀûÓÃË÷Òý£¿ - - ²¢·Çÿ¸ö²éѯ¶¼»á×Ô¶¯Ê¹ÓÃË÷Òý¡£Ö»ÓÐÔÚ±íµÄ´óС³¬¹ýÒ»¸ö×îСֵ£¬²¢ÇÒ²éѯֻ - »áÑ¡ÖбíÖнÏС±ÈÀýµÄ¼Ç¼ʱ²Å»á²ÉÓÃË÷Òý¡£ - ÕâÊÇÒòΪË÷ÒýɨÃèÒýÆðµÄËæ¼´´ÅÅÌ´æÈ¡¿ÉÄܱÈÖ±½ÓµØ¶ÁÈ¡±í£¨Ë³ÐòɨÃ裩¸üÂý¡£ - - ΪÁËÅжÏÊÇ·ñʹÓÃË÷Òý£¬PostgreSQL±ØÐë»ñµÃÓйرíµÄͳ¼ÆÖµ¡£ÕâЩͳ¼ÆÖµ¿ÉÒÔ - ʹÓà VACUUM ANALYZE£¬»ò ANALYZE »ñµÃ¡£ - ʹÓÃͳ¼ÆÖµ£¬ÓÅ»¯Æ÷ÖªµÀ±íÖÐÓжàÉÙÐУ¬¾ÍÄܹ»¸üºÃµØÅжÏÊÇ·ñÀûÓÃË÷Òý¡£ - ͳ¼ÆÖµ¶ÔÈ·¶¨ÓÅ»¯µÄÁ¬½Ó˳ÐòºÍÁ¬½Ó·½·¨Ò²ºÜÓÐÓá£ÔÚ±íµÄÄÚÈÝ·¢Éú±ä»¯Ê±£¬Ó¦ - ¶¨ÆÚ½øÐÐͳ¼ÆÖµµÄ¸üÐÂÊÕ¼¯¡£ - - Ë÷Òýͨ³£²»ÓÃÓÚ ORDER BY - »òÖ´ÐÐÁ¬½Ó¡£¶ÔÒ»¸ö´ó±íµÄÒ»´Î˳ÐòɨÃ裬ÔÙ×öÒ»¸öÏÔʽµÄÅÅÐòͨ³£±ÈË÷ÒýɨÃè - Òª¿ì¡£ - - µ«ÊÇ£¬ÔÚ LIMIT ºÍ ORDER BY ½áºÏʹÓÃʱ¾ - ³£»áʹÓÃË÷Òý£¬ÒòΪÕâÖ»»á·µ»Ø±íµÄһС²¿·Ö¡£ ʵ¼ÊÉÏ£¬ËäÈ» MAX() ºÍ MIN() - ²¢²»Ê¹ÓÃË÷Òý£¬Í¨¹ý¶Ô ORDER BY ºÍ LLIMIT - ʹÓÃË÷ÒýÈ¡µÃ×î´óÖµºÍ×îСֵҲÊÇ¿ÉÒԵģº - SELECT col - FROM tab - ORDER BY col [ DESC ] - LIMIT 1; + 685 æ°æ®é¡µ * 8192 åè/页 = 5,611,520 åèï¼5.6 MBï¼ - Èç¹ûÄãÈ·ÐÅPostgreSQLµÄÓÅ»¯Æ÷ʹÓÃ˳ÐòɨÃèÊDz»ÕýÈ·µÄ£¬Äã¿ÉÒÔʹÓÃSET - enable_seqscan TO 'off'Ö¸Á - È»ºóÔÙ´ÎÔËÐвéѯ£¬Äã¾Í¿ÉÒÔ¿´³öʹÓÃÒ»¸öË÷ÒýɨÃèÊÇ·ñȷʵҪ¿ìһЩ¡£ - - µ±Ê¹ÓÃͨÅä·û²Ù×÷£¬ÀýÈç LIKE »ò ~ ʱ£¬Ë÷ÒýÖ»ÄÜÔÚÌض¨µÄÇé¿öÏÂʹÓ㺠- * ×Ö·û´®µÄ¿ªÊ¼²¿·Ö±ØÐëÊÇÆÕͨ×Ö·û´®£¬Ò²¾ÍÊÇ˵£º - + LIKE ģʽ²»ÄÜÒÔ % ´òÍ·¡£ - + ~ £¨ÕýÔò±í´ïʽ£©Ä£Ê½±ØÐëÒÔ ^ ´òÍ·¡£ - * ×Ö·û´®²»ÄÜÒÔÆ¥Åä¶à¸ö×Ö·ûµÄģʽÀà´òÍ·£¬ÀýÈç [a-e]¡£ - * ´óСдÎ޹صIJéÕÒ£¬Èç ILIKE ºÍ ~* µÈ²»Ê¹ÓÃË÷Òý£¬µ«¿ÉÒÔÓà 4.8 - ½ÚÃèÊöµÄº¯ÊýË÷Òý¡£ - * ÔÚ×ö initdb ʱ±ØÐë²ÉÓÃȱʡµÄ±¾µØÉèÖà C - locale£¬ÒòΪϵͳ²»¿ÉÄÜÖªµÀÔÚ·ÇC localeÇé¿öʱÏÂÒ»¸ö×î´ó×Ö·ûÊÇʲô¡£ - ÔÚÕâÖÖÇé¿öÏ£¬Äã¿ÉÒÔ´´½¨Ò»¸öÌØÊâµÄtext_pattern_opsË÷ÒýÀ´ÓÃÓÚLIKEµÄ - Ë÷Òý¡£ + ç´¢å¼ä¸éè¦è¿ä¹å¤çé¢å¤æ¶èï¼ä½ä¹ç¡®å®åæ¬è¢«ç´¢å¼çæ°æ®ï¼å æ + ¤å®ä»¬ä¹å¯è½å¾å¤§ã + + 空å¼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ºÍÊýÖµÐ͵ÄË÷Òý¡£ + å¨8.0ä¹åççæ¬ä¸ + ï¼é¤éè¦æ¥è¯¢çæ°æ®ç±»ååç´¢å¼çæ°æ®ç±»åç¸å¹éï¼å¦åç´¢å¼ç»å¸¸æ¯æªè¢«ç¨å°ï¼ç + ¹å«æ¯å¯¹int2,int8åæ°å¼åçç´¢å¼ã - 4.7)ÎÒÈçºÎ²ÅÄÜ¿´µ½²éѯÓÅ»¯Æ÷ÊÇÔõÑùÆÀ¹À´¦ÀíÎҵIJéѯ£¿ - - ²Î¿¼ EXPLAIN ÊÖ²áÒ³¡£ + 4.7) æå¦ä½æè½çå°æ¥è¯¢ä¼åå¨æ¯ææ ·è¯ä¼°å¤çæçæ¥è¯¢ï¼ + + åè EXPLAIN æå页ã - 4.8)ÎÒÔõÑù×öÕýÔò±í´ïʽËÑË÷ºÍ´óСдÎ޹صÄÕýÔò±í´ïʽ²éÕÒ£¿ÔõÑùÀûÓÃË÷Òý½øÐдóÐ - ¡Ð´Î޹زéÕÒ£¿ - - ²Ù×÷·û ~ ´¦ÀíÕýÔò±í´ïʽƥÅ䣬¶ø ~* - ´¦Àí´óСдÎ޹صÄÕýÔò±í´ïʽƥÅä¡£´óдЩÎÞ¹ØµÄ LIKE ±äÖÖ³ÉΪ ILIKE¡£ + 4.8) æææ ·åæ£å表达å¼æç´¢å大å°åæ å³çæ + £å表达å¼æ¥æ¾ï¼ææ ·å©ç¨ç´¢å¼è¿è¡å¤§å°åæ å³æ¥æ¾ï¼ + + æä½ç¬¦ ~ å¤çæ£å表达å¼å¹éï¼è ~* å¤ç大å°åæ å³çæ + £å表达å¼å¹éã大å°åæ å³ç LIKE åç§æ为 ILIKEã - ´óСдÎ޹صĵÈʽ±È½Ïͨ³£Ð´×ö£º + 大å°åæ å³ççå¼æ¯è¾é常ååï¼ SELECT * FROM tab WHERE lower(col) = 'abc'; - ÕâÑù½«²»»áʹÓñê×¼µÄË÷Òý¡£µ«ÊÇ¿ÉÒÔ´´½¨Ò»¸ö¿É±»ÀûÓõĺ¯ÊýË÷Òý: + è¿æ ·å°ä¸ä¼ä½¿ç¨æ åçç´¢å¼ãä½æ¯å¯ä»¥å建ä¸ä¸ªå¨è¿ç§æåµä¸ä½¿ç¨ç表达å¼ç + ´¢å¼: CREATE INDEX tabindex ON tab (lower(col)); - 4.9)ÔÚÒ»¸ö²éѯÀÎÒÔõÑù¼ì²âÒ»¸ö×Ö¶ÎÊÇ·ñΪ NULL - £¿ÎÒÈçºÎ²ÅÄÜ׼ȷÅÅÐò¶ø²»ÂÛij×Ö¶ÎÊÇ·ñº¬ NULL Öµ£¿ - - Óà IS NULL ºÍ IS NOT NULL ²âÊÔÕâ¸ö×ֶΣ¬¾ßÌå·½·¨ÈçÏ£º + å¦æä¸è¿°ç´¢å¼å¨å建æ¶å å¥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 µÄ¼Ç¼ÅÅÔÚ½á¹ûµÄÉÏÃ沿·Ö£º + 为äºè½å¯¹å« 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"£¨±ä³¤£©ÀàÐÍ£¨Ò²¾ÍÊÇ˵£¬¿ªÍ·µÄËĸö×Ö½ÚÊ - dz¤¶È£¬ºóÃæ²ÅÊÇÊý¾Ý£©¡£ ÓÚÊÇʵ¼ÊÕ¼ÓõĿռä±ÈÉùÃ÷µÄ´óСҪ¶àһЩ¡£ - È»¶øÕâЩÀàÐͶ¼¿ÉÒÔ±»Ñ¹Ëõ´æ´¢£¬Ò²¿ÉÒÔÓà TOAST - ÍÑ»ú´æ´¢£¬Òò´Ë´ÅÅÌ¿Õ¼äÒ²¿ÉÄܱÈÔ¤ÏëµÄÒªÉÙ¡£ - - VARCHAR(n) ÔÚ´æ´¢ÏÞÖÆÁË×î´ó³¤¶ÈµÄ±ä³¤×Ö·û´®ÊÇ×îºÃµÄ¡£ TEXT - ÊÊÓÃÓÚ´æ´¢×î´ó¿É´ï 1G×óÓÒµ«Î´¶¨ÒåÏÞÖƳ¤¶ÈµÄ×Ö·û´®¡£ - - CHAR(n) ×îÊʺÏÓÚ´æ´¢³¤¶ÈÏàͬµÄ×Ö·û´®¡£ - CHAR(n)»á¸ù¾ÝËù¸ø¶¨µÄ×ֶ㤶ÈÒÔ¿Õ¸ñ²¹×㣨²»×ãµÄ×Ö¶ÎÄÚÈÝ£©£¬ ¶ø - VARCHAR(n) Ö»´æ´¢Ëù¸ø¶¨µÄÊý¾ÝÄÚÈÝ¡£ BYTEA - ÓÃÓÚ´æ´¢¶þ½øÖÆÊý¾Ý£¬ÓÈÆäÊÇ°üº¬ NULL - ×Ö½ÚµÄÖµ¡£ÕâЩÀàÐ;ßÓÐÏàËƵÄÐÔÄÜÌØÐÔ¡£ - - 4.11.1)ÎÒÔõÑù´´½¨Ò»¸öÐòÁкÅ/×Ô¶¯µÝÔöµÄ×ֶΣ¿ - - PostgreSQL Ö§³Ö SERIAL - Êý¾ÝÀàÐÍ¡£ËüÔÚ×Ö¶ÎÉÏ×Ô¶¯´´½¨Ò»¸öÐòÁкÍË÷Òý¡£ÀýÈ磺 - CREATE TABLE person ( - id SERIAL, - name TEXT - ); + 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 + ); - »á×Ô¶¯×ª»»Îª£º - CREATE SEQUENCE person_id_seq; - CREATE TABLE person ( - id INT4 NOT NULL DEFAULT nextval('person_id_seq'), - 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')"); + åè 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')"); + è¿æ ·è¿è½å¨å¶ä»æ¥è¯¢ä¸ä½¿ç¨åæ¾å¨ 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() »áµ¼ÖºÍÆäËûÓû§µÄ³åÍ»Çé¿ö£¨race condition£©Â𣿠- - ²»»á¡£currval() ·µ»ØµÄÊÇÄã±¾´Î»á»°½ø³ÌËù¸³µÄÖµ¶ø²»ÊÇËùÓÐÓû§µÄµ±Ç°Öµ¡£ - - 4.11.4)Ϊʲô²»ÔÚÊÂÎñÒì³£ÖÐÖ¹ºóÖØÓÃÐòÁкÅÄØ£¿ÎªÊ²Ã´ÔÚÐòÁкÅ×ֶεÄÈ¡ÖµÖдæÔÚ - ¼ä¶ÏÄØ£¿ - - ΪÁËÌá¸ß²¢·¢ÐÔ£¬ÐòÁкÅÔÚÐèÒªµÄʱºò¸³ÓèÕýÔÚÔËÐеÄÊÂÎñ£¬²¢ÇÒÔÚÊÂÎñ½áÊøÖ® - Ç°²»½øÐÐËø¶¨£¬ Õâ¾Í»áµ¼ÖÂÒì³£ÖÐÖ¹µÄÊÂÎñºó£¬ÐòÁкŻá³öÏÖ¼ä¸ô¡£ - - 4.12)ʲôÊÇ OID £¿Ê²Ã´ÊÇ CTID £¿ - + 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Ö»ÊDZ£Ö¤ÔÚµ¥¸ö±íÖÐÊý¾ÝÊÇΨһµÄ£¬ÕâÑùËüÒç³öµÄ¿ÉÄÜÐԾͷdz£Ð¡ÁË - £¬ SERIAL8¿ÉÓÃÀ´±£´æ8×Ö½ÚµÄÐòÁкÅ×ֶΡ£ - - CTID ÓÃÓÚ±êʶ´ø×ÅÊý¾Ý¿é£¨µØÖ·£©ºÍ£¨¿éÄÚ£©Æ«ÒƵÄÌض¨µÄÎïÀíÐС£ CTID - ÔڼǼ±»¸ü¸Ä»òÖØÔغó·¢Éú¸Ä±ä¡£Ë÷ÒýÈë¿ÚʹÓÃËüÃÇÖ¸ÏòÎïÀíÐС£ - - 4.13)ΪʲôÎÒÊÕµ½´íÎóÐÅÏ¢¡°ERROR: Memory exhausted in AllocSetAlloc()¡±£¿ - - ÕâºÜ¿ÉÄÜÊÇϵͳµÄÐéÄâÄÚ´æÓùâÁË£¬»òÕßÄں˶ÔijЩ×ÊÔ´Óнϵ͵ÄÏÞÖÆÖµ¡£ÔÚÆô - ¶¯ postmaster ֮ǰÊÔÊÔÏÂÃæµÄÃüÁ - ulimit -d 262144 - limit datasize 256m + éå建çæ¯ä¸è¡è®°å½é½ä¼è·å¾ä¸ä¸ªå¯ä¸ç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 ); + åå³äºä½ ç¨ç + 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); + 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); + ææ¯ + 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 - Òª¼ÓÔØÓëÊý¾Ý¿âÏà¹ØµÄϵͳĿ¼£¨ÏµÍ³±í£©£¬Òò´Ë¿çÊý¾Ý¿âµÄ²éѯÈçºÎÖ´ÐÐÊDz» - ¶¨µÄ¡£ - - ¸½¼ÓÔöֵģ¿écontrib/dblinkÔÊÐí²ÉÓú¯Êýµ÷ÓÃʵÏÖ¿ç¿â²éѯ¡£µ±È»Óû§Ò²¿ÉÒÔ - ͬʱÁ¬½Óµ½²»Í¬µÄÊý¾Ý¿âÖ´ÐвéѯȻºóÔÚ¿Í»§¶ËºÏ²¢½á¹û¡£ - - 4.18)ÈçºÎÈú¯Êý·µ»Ø¶àÐлò¶àÁУ¿ - - ÔÚº¯ÊýÖзµ»ØÊý¾Ý¼Ç¼¼¯µÄ¹¦ÄÜÊǺÜÈÝÒ×ʹÓõģ¬ÏêÇé²Î¼û£º + è¿ä¸¤ä¸ªçä»·çæ¥è¯¢å¨ 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.27)Ä¿Ç°ÓÐÄÄЩÊý¾Ý¸´ÖÆ·½°¸¿ÉÓã¿ - - ¡°¸´ÖÆ¡±Ö»ÊÇÒ»¸öÊõÓÓкü¸ÖÖ¸´ÖƼ¼Êõ¿ÉʹÓã¬Ã¿ÖÖ¶¼ÓÐÓŵãºÍȱµã£º - - Ö÷/´Ó¸´ÖÆ·½Ê½ÊÇÔÊÐíÒ»¸öÖ÷·þÎñÆ÷½ÓÊܶÁ/дµÄÉêÇ룬¶ø¶à¸ö´Ó·þÎñÆ÷Ö»ÄܽÓÊÜ - ¶Á/SELECT²éѯµÄÉêÇ룬 Ä¿Ç°×îÁ÷ÐÐÇÒÊÇÃâ·ÑµÄÖ÷/´Ó PostgreSQL¸´ÖÆ·½°¸ÊÇ - Slony-I ¡£ - - ¶à¸öÖ÷·þÎñÆ÷µÄ¸´ÖÆ·½Ê½ÔÊÐí½«¶Á/дµÄÉêÇë·¢Ë͸ø¶ą̀µÄ¼ÆËã»ú£¬ÕâÖÖ·½Ê½ÓÉÓ - ÚÐèÒªÔÚ¶ą̀·þÎñÆ÷Ö®¼äͬ²½Êý¾Ý±ä¶¯ - ¿ÉÄÜ»á´øÀ´½ÏÑÏÖصÄÐÔÄÜËðʧ£¬PgclusterÊÇÄ¿Ç°ÕâÖÖ·½°¸ - ÖÐ×îºÃµÄ£¬¶øÇÒ»¹¿ÉÒÔÃâ·ÑÏÂÔØ¡£ - - Ò²ÓÐһЩÉÌÒµÐ踶·ÑºÍ»ùÓÚÓ²¼þµÄÊý¾Ý¸´ÖÆ·½°¸£¬Ö§³ÖÉÏÊö¸÷ÖÖ¸´ÖÆÄ£ÐÍ¡£ + 4.19) 为ä»ä¹æå¨ä½¿ç¨PL/PgSQLå½æ°åå临æ¶è¡¨æ¶ä¼æ¶å°é误信æ¯ârelation with + OID ##### does not existâï¼ + + PL/PgSQLä¼ç¼åå½æ°çèæ¬å容ï¼ç±æ¤å¸¦æ¥çä¸ä¸ªä¸å¥½çå¯ä½ç¨æ¯è¥ä¸ä¸ª + PL/PgSQL + å½æ°è®¿é®äºä¸ä¸ªä¸´æ¶è¡¨ï¼ç¶å该表被å é¤å¹¶é建äºï¼åå次è°ç¨è¯¥å½æ°å + °å¤±è´¥ï¼ å 为ç¼åçå½æ°å容ä»ç¶æåæ§ç临æ¶è¡¨ã解å³çæ¹æ³æ¯å¨ PL/PgSQL + ä¸ç¨EXECUTE + 对临æ¶è¡¨è¿è¡è®¿é®ãè¿æ ·ä¼ä¿è¯æ¥è¯¢å¨æ§è¡åæ»ä¼è¢«éæ°è§£æã + + 4.20) ç®åæåªäºæ°æ®å¤å¶æ¹æ¡å¯ç¨ï¼ + + âå¤å¶âåªæ¯ä¸ä¸ªæ¯è¯ï¼æ好å ç§å¤å¶ææ¯å¯ç¨ï¼æ¯ç§é½æä¼ç¹å缺ç¹ï¼ + + 主/ä»å¤å¶æ¹å¼æ¯å许ä¸ä¸ªä¸»æå¡å¨æ¥å读/åçç³è¯·ï¼èå¤ä¸ªä»æå¡å¨åªè½æ¥åè + ¯»/SELECTæ¥è¯¢çç³è¯·ï¼ ç®åææµè¡ä¸åè´¹ç主/ä»PostgreSQLå¤å¶æ¹æ¡æ¯ + Slony-I ã + + å¤ä¸ªä¸»æå¡å¨çå¤å¶æ¹å¼å许å°è¯»/åçç³è¯·åéç»å¤å°ç计ç®æºï¼è¿ç§æ¹å¼ç±äºé + è¦å¨å¤å°æå¡å¨ä¹é´åæ¥æ°æ®åå¨ + å¯è½ä¼å¸¦æ¥è¾ä¸¥éçæ§è½æ失ï¼Pgclusteræ¯ç®åè¿ç§æ¹æ¡ ä¸ + æ好çï¼èä¸è¿å¯ä»¥åè´¹ä¸è½½ã + + ä¹æä¸äºåä¸éä»è´¹ååºäºç¡¬ä»¶çæ°æ®å¤å¶æ¹æ¡ï¼æ¯æä¸è¿°åç§å¤å¶æ¨¡åã + + 4.21) 为ä½æ¥è¯¢ç»ææ¾ç¤ºç表åæååä¸æçæ¥è¯¢è¯å¥ä¸çä¸åï¼ä¸ºä½å¤§åç¶æä¸è½ä¿çï¼ + + æ常è§çåå æ¯å¨å建表æ¶å¯¹è¡¨åææ¯åå使ç¨äºåå¼å·ââï¼å½ä½¿ç¨äºåå¼å·åï¼è¡ + ¨åæååï¼ç§°ä¸ºæ è¯ç¬¦ï¼åå¨æ¶æ¯åºå 大å°åçï¼ + è¿æè°çä½ å¨æ¥è¯¢æ¶è¡¨åæååä¹åºä½¿ç¨åå¼å·ï¼ä¸äºå·¥å·è½¯ä»¶ï¼åpgAdminä¼å¨ + ååºå建表çæ令æ¶èªå¨å°å¨æ¯ä¸ªæ è¯ç¬¦ä¸å åå¼å·ã å æ + ¤ï¼ä¸ºäºæ è¯ç¬¦çç»ä¸ï¼ä½ åºè¯¥ï¼ + * å¨å建表æ¶é¿åå°æ è¯ç¬¦ä½¿ç¨åå¼å·å¼èµ·æ¥ã + * å¨æ è¯ç¬¦ä¸åªä½¿ç¨å°ååæ¯ã + * ï¼ä¸ºäºä¸å·²åå¨çæ è¯ç¬¦ç¸åï¼å¨æ¥è¯¢ä¸ä½¿ç¨åå¼å·å°æ è¯ç¬¦å¼èµ·æ¥ã diff --git a/doc/src/FAQ/FAQ_chinese.html b/doc/src/FAQ/FAQ_chinese.html index d089d69eab5c1a545433f7afa8b533dc5ee0d3c4..5198cbf129d81ead5df1ba5439f2f5f4d58fc3e8 100644 --- a/doc/src/FAQ/FAQ_chinese.html +++ b/doc/src/FAQ/FAQ_chinese.html @@ -1,875 +1,1006 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en" dir="ltr"> - <head> - <title> - PostgreSQL: PostgreSQL ³£¼ûÎÊÌ⣨FAQ£© - </title> - <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> - </head> - - <body> - -<h1>PostgreSQL ³£¼ûÎÊÌ⣨FAQ£©</h1> -<p> -×î½ü¸üУº2005 Äê 06 Ô 02 ÈÕ ÐÇÆÚÎå 22:27:35 CST -</p> -<p> - Ŀǰά»¤ÈËÔ±£ºBruce Momjian (<a href="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</a>)<br/> - ÖÐÎÄ°æά»¤ÈËÔ±£ºdoudou586 £¨doudou586_2005@yahoo.com.cn£© -</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/> - -<div><h2>³£¼ûÎÊÌâ</h2></div> - -<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>)ÎÒÈçºÎÌá½»Ò»¸öBUG±¨¸æ£¿<br/> -<a href="#1.7">1.7</a>)×îаæµÄPostgreSQL ÊÇʲô£¿<br/> -<a href="#1.8">1.8</a>)Äܹ»»ñÈ¡µÄ×îÐÂÎĵµÓÐÄÄЩ£¿<br/> -<a href="#1.9">1.9</a>)ÎÒÈçºÎÁ˽âÒÑÖªµÄ BUG »òÔÝȱµÄ¹¦ÄÜ£¿<br/> -<a href="#1.10">1.10</a>)ÎÒÓ¦¸ÃÔõÑùѧϰ SQL £¿<br/> -<a href="#1.11">1.11</a>)ÎÒÓ¦¸ÃÔõÑù¼ÓÈ뿪·¢¶ÓÎ飿<br/> -<a href="#1.12">1.12</a>)PostgreSQL ºÍÆäËûÊý¾Ý¿âϵͳ±ÈÆðÀ´ÈçºÎ£¿<br/> -<a href="#1.13">1.13</a>)Ë¿ØÖƺ͹ÜÀíPostgreSQL £¿ -</p> - -<div><h2>Óû§¿Í»§¶ËÎÊÌâ</h2></div> -<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 ÓµÓÐͼÐÎÓû§½çÃæÂð£¿<br/> -</p> - -<div><h2>ϵͳ¹ÜÀíÎÊÌâ</h2></div> -<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 Ö÷Òª·¢²¼°æ±¾Ê±×ö dump ºÍ restore £¿<br/> -<a href="#3.7">3.7</a>)(ʹÓÃPostgreSQL)ÎÒÐèҪʹÓÃʲô¼ÆËã»úÓ²¼þ £¿<br/> -</p> - -<div><h2>²Ù×÷ÎÊÌâ</h2></div> -<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>)ΪʲôÎҵIJéѯºÜÂý£¿ÎªÊ²Ã´ÕâЩ²éѯûÓÐÀûÓÃË÷Òý£¿<br/> -<a href="#4.7">4.7</a>)ÎÒÈçºÎ²ÅÄÜ¿´µ½²éѯÓÅ»¯Æ÷ÊÇÔõÑùÆÀ¹À´¦ÀíÎҵIJéѯµÄ£¿<br/> -<a href="#4.8">4.8</a>)ÎÒÔõÑù×öÕýÔò±í´ïʽËÑË÷ºÍ´óСдÎ޹صÄÕýÔò±í´ïʽ²éÕÒ£¿ÔõÑùÀûÓÃË÷Òý½øÐдóСдÎ޹زéÕÒ£¿<br/> -<a href="#4.9">4.9</a>)ÔÚÒ»¸ö²éѯÀÎÒÔõÑù¼ì²âÒ»¸ö×Ö¶ÎÊÇ·ñΪ NULL£¿ÎÒÈçºÎ²ÅÄÜ׼ȷÅÅÐò¶ø²»ÂÛij×Ö¶ÎÊÇ·ñº¬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() »áµ¼ÖºÍÆäËûÓû§µÄÎÉÂÒÇé¿ö£¨race condition£©Âð£¿<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>)Ä¿Ç°ÓÐÄÄЩÊý¾Ý¸´ÖÆ·½°¸¿ÉÓã¿<br/> -</p> - -<hr/> - -<div><h2>³£¼ûÎÊÌâ</h2></div> - -<h4><a name="1.1"></a>1.1)PostgreSQL ÊÇʲô£¿¸ÃÔõô·¢Òô£¿</h4> -<p> -PostgreSQL ¶Á×÷ <i>Post-Gres-Q-L</i>£¬ÓÐʱºòÒ²¼ò³ÆΪ<i>Postgres</i> ¡£ -</p> -<p> - PostgreSQL ÊÇÃæÏòÄ¿±êµÄ¹ØϵÊý¾Ý¿âϵͳ£¬Ëü¾ßÓд«Í³ÉÌÒµÊý¾Ý¿âϵͳµÄËùÓй¦ÄÜ£¬Í¬Ê±ÓÖº¬Óн«ÔÚÏÂÒ»´ú DBMS ϵͳµÄʹÓõÄÔöÇ¿ÌØÐÔ¡£ - PostgreSQL ÊÇ×ÔÓÉÃâ·ÑµÄ£¬²¢ÇÒËùÓÐÔ´´úÂ붼¿ÉÒÔ»ñµÃ¡£ -</p> - -<p> - PostgreSQL µÄ¿ª·¢¶ÓÎéÖ÷ҪΪ־ԸÕߣ¬ËûÃDZ鲼ÊÀ½ç¸÷µØ²¢Í¨¹ý»¥ÁªÍø½øÐÐÁªÏµ£¬ÕâÊÇÒ»¸öÉçÇø¿ª·¢ÏîÄ¿£¬Ëü²»±»Èκι«Ë¾¿ØÖÆ¡£ - ÈçÏë¼ÓÈ뿪·¢¶ÓÎ飬Çë²Î¼û¿ª·¢ÈËÔ±³£¼ûÎÊÌ⣨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> - - -<h4><a name="1.2"></a>1.2)PostgreSQL µÄ°æȨÊÇʲô?</h4> -<p> -PostgreSQLµÄ·¢²¼×ñ´Ó¾µäµÄBSD°æȨ¡£¹ØÓÚÔ´´úÂëµÄÈçºÎʹÓÃûÓÐÈκÎÏÞÖÆ£¬ÎÒÃǺÜϲ»¶ÕâÖÖ·½Ê½²¢ÇÒ»¹Ã»ÓдòËã¸Ä±äËü¡£ -</p> -<p> -ÏÂÃæ¾ÍÊÇÎÒÃÇʹÓõÄBSD°æȨÄÚÈÝ£º -</p> - -<p> - ²¿·Ö°æȨ£¨c£©1996-2005£¬PostgreSQL È«Çò¿ª·¢Ð¡×飬²¿·Ö°æȨ£¨c£©1994-1996 ¼ÓÖÝ´óѧ¶Ê -</p> - -<p> - £¨Portions copyright (c) 1996-2005, PostgreSQL Global Development Group Portions Copyright (c) 1994-6 Regents of the University of California£© -</p> - -<p> - ÔÊÐíΪÈκÎÄ¿µÄʹÓ㬿½±´£¬Ð޸ĺͷַ¢Õâ¸öÈí¼þºÍËüµÄÎĵµ¶ø²»ÊÕÈ¡ÈκηÑÓ㬠- ²¢ÇÒÎÞÐëÇ©ÊðÒò´Ë¶ø²úÉúµÄÖ¤Ã÷£¬Ç°ÌáÊÇÉÏÃæµÄ°æȨÉùÃ÷ºÍ±¾¶ÎÒÔ¼°ÏÂÃæÁ½¶ÎÎÄ×Ö³öÏÖÔÚËùÓп½±´ÖС£ -</p> - -<p> - £¨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.£© -</p> - -<p> - ÔÚÈκÎÇé¿öÏ£¬¼ÓÖÝ´óѧ¶¼²»³Ðµ£ÒòʹÓôËÈí¼þ¼°ÆäÎĵµ¶øµ¼ÖµĶÔÈκε±ÊÂÈ˵ÄÖ±½ÓµÄ£¬ - ¼ä½ÓµÄ£¬ÌØÊâµÄ£¬¸½¼ÓµÄ»òÕßÏà°é¶øÉúµÄË𻵣¬°üÀ¨ÀûÒæËðʧµÄÔðÈΣ¬¼´Ê¹¼ÓÖÝ´óѧÒѾ½¨ÒéÁËÕâЩËðʧµÄ¿ÉÄÜÐÔʱҲÊÇÈç´Ë¡£ -</p> - -<p> - £¨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.£© -</p> - -<p> - ¼ÓÖÝ´óѧÃ÷È··ÅÆúÈκα£Ö¤£¬°üÀ¨µ«²»¾ÖÏÞÓÚijһÌض¨ÓÃ;µÄÉÌÒµºÍÀûÒæµÄÒþº¬±£Ö¤¡£ - ÕâÀïÌṩµÄÕâ·ÝÈí¼þÊÇ»ùÓÚ¡°µ±×÷ÊÇ¡±µÄ»ù´¡µÄ£¬Òò¶ø¼ÓÖÝ´óѧûÓÐÔðÈÎÌṩά»¤£¬Ö§³Ö£¬¸üУ¬ÔöÇ¿»òÕßÐ޸ĵķþÎñ¡£ -</p> - -<p> - £¨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/> - -</p> - -<h4><a name="1.3"></a>1.3)PostgreSQL ¿ÉÒÔÔËÐÐÔÚÄÄЩ²Ù×÷ϵͳƽ̨ÉÏ£¿</h4> - -<p> - Ò»°ã˵À´£¬Ò»¸öÏÖ´úµÄ UNIX ¼æÈݵÄƽ̨¶¼ÄÜÔËÐÐ PostgreSQL ¡£ÔÚ°²×°Ö¸ÄÏÀïÁгöÁË·¢²¼Ê±¾¹ýÃ÷È·²âÊÔµÄƽ̨¡£ -</p> - -<p> - PostgreSQlÒ²¿ÉÒÔÖ±½ÓÔËÐÐÔÚ»ùÓÚ΢ÈíWindows-NTµÄ²Ù×÷ϵͳ£¬ÈçWin2000£¬WinXP ºÍ Win2003£¬ÒÑÖÆ×÷Íê³ÉµÄ°²×°°ü¿É´Ó - <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"> http://forge.novell.com </a>»ñÈ¡£¬ÎªOS/2¿ª·¢µÄ°æ±¾¿É´Ó - <a href="http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2F"> - http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2F</a> -</p> - -<h4><a name="1.4"></a>1.4)ÎÒ´ÓÄÄÀïÄܵõ½ PostgreSQL£¿</h4> - -<p> - ͨ¹ýä¯ÀÀÆ÷¿É´Ó<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> - - -<h4><a name="1.5"></a>1.5)ÎÒ´ÓÄÄÀïÄܵõ½¶Ô PostgreSQL µÄÖ§³Ö£¿</h4> -<p> - PostgreSQLÉçÇøͨ¹ýÓʼþÁбíΪÆä´ó¶àÊýÓû§Ìṩ°ïÖú£¬¼ÓÈëÓʼþÁбíµÄÖ÷Õ¾µãÊÇ<a href="http://www.postgresql.org/community/lists/"> 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"> http://techdocs.postgresql.org/companies.php</a>¡£ -</p> - - - -<h4><a name="1.6"></a>1.6)ÎÒÈçºÎÌá½»Ò»¸öBUG±¨¸æ£¿</h4> -<p> - ¿É·ÃÎÊ <a href="http://www.postgresql.org/support/submitbug">http://www.postgresql.org/support/submitbug</a>£¬ÌîдBugÉϱ¨±í¸ñ¼´¿É¡£ -</p> - -<p> - ͬÑùÒ²¿É·ÃÎÊftpÕ¾µã<a href="ftp://ftp.PostgreSQL.org/pub/">ftp://ftp.PostgreSQL.org/pub/</a> ¼ì²éÓÐÎÞ¸üеÄPostgreSQL°æ±¾»ò²¹¶¡¡£ -</p> - - - -<h4><a name="1.7"></a>1.7)×îаæµÄPostgreSQL ÊÇʲô£¿</h4> -<p> - PostgreSQL ×îеİ汾ÊÇ°æ±¾ 8.0.2 £¨Òë×¢£ºÏÖ×îа汾Ϊ8.0.3£©¡£ -</p> - -<p> - ÎÒÃǼƻ®Ã¿Äê·¢²¼Ò»¸öÖ÷Òª°æ±¾£¬Ã¿¼¸¸öÔ·¢²¼Ò»¸öС°æ±¾¡£ -</p> - - -<h4><a name="1.8"></a>1.8)Äܹ»»ñÈ¡µÄ×îÐÂÎĵµÓÐÄÄЩ£¿</h4> - -<p> - PostgreSQL°üº¬´óÁ¿µÄÎĵµ£¬Ö÷ÒªÓÐһЩÊֲᣬÊÖ²áÒ³ºÍһЩµÄ²âÊÔÀý×Ó¡£²Î¼û /doc Ŀ¼£¨Òë×¢£ºÓ¦Îª $PGHOME/doc£©¡£ - Ä㻹¿ÉÒÔÔÚÏßä¯ÀÀ PostgreSQL µÄÊֲᣬÆäµØÖ·ÊÇ£º<a href="http://www.PostgreSQL.org/docs">http://www.PostgreSQL.org/docs</a>¡£ -</p> -<p> - ÓÐÁ½±¾¹ØÓÚ PostgreSQL µÄÊéÔÚÏßÌṩ£¬ÔÚ - <a href="http://www.PostgreSQL.org/docs/awbook.html">http://www.PostgreSQL.org/docs/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> - -<h4><a name="1.9"></a>1.9)ÎÒÈçºÎÁ˽âÒÑÖªµÄ BUG »òÔÝȱµÄ¹¦ÄÜ£¿</h4> -<p> - PostgreSQL Ö§³ÖÒ»¸öÀ©Õ¹Á赀 SQL-92 µÄ×Ó¼¯¡£²ÎÔÄÎÒÃǵÄ<a href="http://www.postgresql.org/docs/faqs.TODO.html">TODO</a> ÁÐ±í£¬»ñÈ¡Ò»¸öÒÑÖªBug£¬ÔÝȱµÄ¹¦Äܺͽ«À´µÄ¼Æ»®¡£ -</p> - - -<h4><a name="1.10"></a>1.10)ÎÒÓ¦¸ÃÔõÑùѧϰ SQL £¿</h4> -<p> - Ê×ÏÈ¿¼ÂÇÉÏÊöÌáµ½µÄÓëPostgreSQLÏà¹ØµÄÊé¼®£¬ÁíÍâÒ»±¾ÊÇ<i>Teach Yourself SQL in 21 Days, Second Edition</i>£¬ - ÎÒÃǵÄÐí¶àÓû§Ï²»¶<i>The Practical SQL Handbook</i> Bowman, Judith S., et al., Addison-Wesley£¬ÆäËûµÄÔòϲ»¶ - <i>The Complete Reference SQL</i>, Groff et al., McGraw-Hill¡£ -</p> - - -<h4><a name="1.11"></a>1.11)ÎÒÓ¦¸ÃÔõÑù¼ÓÈ뿪·¢¶ÓÎ飿</h4> -<p> - Ïê¼û<a href="http://www.postgresql.org/docs/faqs.FAQ_DEV.html"> Developer's FAQ </a>¡£ -</p> - - -<h4><a name="1.12"></a>1.12)PostgreSQL ºÍÆäËûÊý¾Ý¿âϵͳ±ÈÆðÀ´ÈçºÎ£¿</h4> -<p> -ÆÀ¼ÛÈí¼þÓкü¸ÖÖ·½·¨£ºÌØÐÔ£¬ÐÔÄÜ£¬¿É¿¿ÐÔ£¬Ö§³ÖºÍ¼Û¸ñ¡£ -</p> -<dl> - <dt><b>ÌØÐÔ</b></dt> - <dd> - PostgreSQL ÓµÓдóÐÍÉÌÓà DBMS Àï´ó¶àÊýÌØÐÔ£¬ - ÀýÈ磺ÊÂÎñ£¬×Ó²éѯ£¬´¥·¢Æ÷£¬ÊÓͼ£¬Íâ¼ü²Î¿¼ÍêÕûÐԺ͸´ÔÓµÄËøµÈ¡£ - ÎÒÃÇ»¹ÓÐһЩËüÃÇûÓеÄÌØÐÔ£¬ÈçÓû§¶¨ÒåÀàÐÍ£¬¼Ì³Ð£¬¹æÔòºÍ¶à°æ±¾²¢ÐпØÖÆÒÔ¼õÉÙËøµÄÕùÓõȡ£<br/> - </dd> - - <dt><b>ÐÔÄÜ</b></dt> - <dd> - PostgreSQL ºÍÆäËûÉÌÓúͿªÔ´µÄÊý¾Ý¿â¾ßÓÐÀàËƵÄÐÔÄÜ¡£ - ¶ÔijЩ´¦ÀíËü±È½Ï¿ì£¬¶ÔÆäËûһЩ´¦ÀíËü±È½ÏÂý¡£ - ÓëÆäËûÊý¾Ý¿âÏà±È£¬ÎÒÃǵÄÐÔÄÜͨ³£ÔÚ +/- 10%Ö®¼ä¡£<br/> - </dd> - - <dt><b>¿É¿¿ÐÔ</b></dt> - <dd> - ÎÒÃÇÖªµÀ DBMS ±ØÐëÊÇ¿É¿¿µÄ£¬·ñÔòËü¾ÍÒ»µãÓö¼Ã»ÓС£ - ÎÒÃÇŬÁ¦×öµ½·¢²¼¾¹ýÈÏÕæ²âÊԵģ¬Îȶ¨µÄ³ô³æ×îÉٵĴúÂ롣ÿ¸ö°æ±¾ÖÁÉÙÓÐÒ»¸öÔ嵀 beta - ²âÊÔʱ¼ä£¬²¢ÇÒÎÒÃǵķ¢²¼ÀúÊ·ÏÔʾÎÒÃÇ¿ÉÒÔÌṩÎȶ¨µÄ£¬Àι̵ģ¬¿ÉÓÃÓÚÉú²úʹÓõİ汾¡£ÎÒÃÇÏàÐÅ - ÔÚÕâ·½ÃæÎÒÃÇÓëÆäËûµÄÊý¾Ý¿âÈí¼þÊÇÏ൱µÄ¡£<br/> - </dd> - - <dt><b>Ö§³Ö</b></dt> - <dd> - ÎÒÃǵÄÓʼþÁбíÌṩһ¸ö·Ç³£´óµÄ¿ª·¢ÈËÔ±ºÍÓû§µÄ×éÒÔ°ïÖú½â¾öËùÅöµ½µÄÈκÎÎÊÌâ¡£ - ÎÒÃDz»Äܱ£Ö¤¿Ï¶¨Äܽâ¾öÎÊÌ⣬Ïà±È֮ϣ¬ÉÌÓà DBMS Ò²²¢²»ÊÇ×ÜÄܹ»Ìṩ½â¾ö·½·¨¡£ - Ö±½ÓÓ뿪·¢ÈËÔ±£¬Óû§Èº£¬ÊÖ²áºÍÔ´³ÌÐò½Ó´¥Áî PostgreSQL µÄÖ§³Ö±ÈÆäËû DBMS - »¹ÒªºÃ¡£»¹ÓÐһЩÉÌÒµÐÔµÄÔ¤°ü×°µÄÖ§³Ö£¬¿ÉÒÔ¸øÌṩ¸øÄÇЩÐèÒªµÄÈË¡££¨²ÎÔÄ FAQ Ìõ¿î 1.5 С½Ú£©<br/> - </dd> - - <dt><b>¼Û¸ñ</b></dt> - <dd> - ÎÒÃǶÔÈκÎÓÃ;¶¼Ãâ·Ñ£¬°üÀ¨ÉÌÓúͷÇÉÌÓÃÄ¿µÄ¡£ - Äã¿ÉÒÔ²»¼ÓÏÞÖƵØÏòÄãµÄ²úÆ·Àï¼ÓÈëÎÒÃǵĴúÂ룬³ýÁËÄÇЩÎÒÃÇÔÚÉÏÃæµÄ°æȨÉùÃ÷ÀïÉùÃ÷µÄ BSD ·ç¸ñµÄ°æȨÍâ¡£ - </dd> - -</dl> - - -<h4><a name="1.13"></a>1.13)Ë¿ØÖÆPostgreSQL £¿</h4> -<p> - Èç¹ûÄãÔÚÑ°ÕÒPostgreSQLµÄÕÆÃÅÈË£¬»òÊÇʲôÖÐÑëίԱ»á£¬»òÊÇʲôËùÊô¹«Ë¾£¬ÄãÖ»ÄÜ·ÅÆúÁË---ÒòΪһ¸öÒ²²»´æÔÚ£¬µ«ÎÒÃǵÄÈ·ÓÐÒ»¸ö - ίԱ»áºÍCVS¹ÜÀí×飬µ«ÕâЩ¹¤×÷×éµÄÉèÁ¢Ö÷ÒªÊÇΪÁ˽øÐйÜÀí¹¤×÷¶ø²»ÊǶÔPostgreSQL½øÐпØÖÆ£¬PostgreSQLÏîÄ¿ÊÇÓÉÈκÎÈ˾ù - ¿É²Î¼ÓµÄ¿ª·¢ÈËÔ±ÉçÇøºÍËùÓÐÓû§¿ØÖƵģ¬ÄãËùÐèÒª×öµÄ¾ÍÊǼÓÈëÓʼþÁÐ±í£¬²ÎÓëÌÖÂÛ¼´¿É£¨Òª²ÎÓëPostgreSQLµÄ¿ª·¢Ïê¼û - <a href="http://www.postgresql.org/docs/faqs.FAQ_DEV.html"> Developer's FAQ </a>»ñÈ¡ÐÅÏ¢£©¡£ -</p> - -<hr/> - - -<div> <h2>Óû§¿Í»§¶ËÎÊÌâ</h2> </div> - -<h4><a name="2.1"></a>2.1)ÎÒÃÇ¿ÉÒÔÓÃʲôÓïÑÔºÍ PostgreSQL ´ò½»µÀ£¿</h4> -<p> - PostgreSQL(ȱʡÇé¿ö)Ö»°²×°ÓÐCºÍÄÚǶʽCµÄ½Ó¿Ú£¬ÆäËûµÄ½Ó¿Ú¶¼ÊǶÀÁ¢µÄÏîÄ¿£¬Äܹ»·Ö±ðÏÂÔØ£¬ÕâЩ½Ó¿ÚÏîÄ¿¶ÀÁ¢µÄºÃ´¦ - ÊÇËûÃÇ¿ÉÒÔÓи÷×Եķ¢²¼¼Æ»®ºÍ¸÷×Ô¶ÀÁ¢µÄ¿ª·¢×é¡£ -</p> -<p> - һЩ±à³ÌÓïÑÔÈçPHP¶¼ÓзÃÎÊ PostgreSQL µÄ½Ó¿Ú£¬Perl,TCL,PythonÒÔ¼°ºÜ¶àÆäËûÓïÑԵĽӿÚÔÚ - <a href="http://gborg.postgresql.org/"> http://gborg.postgresql.org </a>ÉϵÄ<i>Drivers/Interfaces</i>С½Ú¿ÉÕÒµ½£¬ - ²¢ÇÒͨ¹ýInternetºÜÈÝÒ×ËÑË÷µ½¡£ -</p> - - - -<h4><a name="2.2"></a>2.2)ÓÐʲô¹¤¾ß¿ÉÒÔ°Ñ PostgreSQL ÓÃÓÚ Web Ò³Ã棿</h4> -<p> - Ò»¸ö½éÉÜÒÔÊý¾Ý¿âΪºǫ́µÄͦ²»´íµÄÕ¾µãÊÇ£º<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 »ò mod_perl ¡£ -</p> - - -<h4><a name="2.3"></a>2.3)PostgreSQL ÓµÓÐͼÐÎÓû§½çÃæÂð£¿</h4> -<p> - Êǵģ¬ÔÚ <a href="http://techdocs.postgresql.org/guides/GUITools">http://techdocs.postgresql.org/guides/GUITools</a>ÓÐÒ»¸öÏêϸµÄÁÐ±í¡£ -</p> - - - -<hr/> - -<div> <h2>ϵͳ¹ÜÀíÎÊÌâ</h2> </div> - -<h4><a name="3.1"></a>3.1)ÎÒÔõÑùÄÜ°Ñ PostgreSQL ×°ÔÚ /usr/local/pgsql ÒÔÍâµÄµØ·½£¿</h4> -<p> - ÔÚÔËÐÐ configure ʱ¼ÓÉÏ --prefix Ñ¡Ïî¡£ -</p> - - -<h4><a name="3.2"></a>3.2)ÎÒÈçºÎ¿ØÖÆÀ´×ÔÆäËûÖ÷»úµÄÁ¬½Ó£¿</h4> -<p> - ȱʡʱ£¬PostgreSQL Ö»ÔÊÐíͨ¹ý unix ÓòÌ×½Ó×Ö»òTCP/IP·½Ê½ÇÒÀ´×Ô±¾»úµÄÁ¬½Ó¡£ - ÄãÖ»ÓÐÔÚÐÞ¸ÄÁËÅäÖÃÎļþ<i>postgresql.conf</i>ÖеÄ<i>listen_addresses</i>£¬ÇÒÒ²ÔÚÅäÖÃÎļþ<i>pg_hba.conf</i>Öдò¿ªÁË - Ö÷»úΪ»ù´¡£¨ host-based £©µÄÉí·ÝÈÏÖ¤£¬²¢ÖØÐÂÆô¶¯PostgreSQL£¬·ñÔòÆäËû»úÆ÷ÊDz»ÄÜÓëÄãµÄPostgreSQL·þÎñÆ÷Á¬½ÓµÄ¡£ -</p> - - -<h4><a name="3.3"></a>3.3)ÎÒÔõÑùµ÷ÕûÊý¾Ý¿âÒýÇæÒÔ»ñµÃ¸üºÃµÄÐÔÄÜ£¿</h4> -<p> - ÓÐÈý¸öÖ÷Òª·½Ãæ¿ÉÒÔÌáÉýPostgreSQLµÄDZÄÜ¡£ -</p> - -<dl> - <dt><b>²éѯ·½Ê½µÄ±ä»¯</b></dt> - <dd> - ÕâÖ÷ÒªÉæ¼°Ð޸IJéѯ·½Ê½ÒÔ»ñÈ¡¸üºÃµÄÐÔÄÜ: - <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>ÖеĺܶàÉèÖö¼»áÓ°ÏìÐÔÄÜ£¬ËùÓвÎÊýµÄÁбí¿É¼û£º - <a href="http://www.postgresql.org/docs/current/static/runtime.html">Administration Guide/Server Run-time Environment/Run-time Configuration</a>£¬ - ÓйزÎÊýµÄ½âÊͿɼû£º<a href="http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html"> - 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>¡£ - </dd> - - <dt><b>Ó²¼þµÄÑ¡Ôñ</b></dt> - <dd> - ¼ÆËã»úÓ²¼þ¶ÔÐÔÄܵÄÓ°Ïì¿Éä¯ÀÀ <a href="http://candle.pha.pa.us/main/writings/pgsql/hw_performance/index.html"> - 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> - - -<h4><a name="3.4"></a>3.4)PostgreSQL Àï¿ÉÒÔ»ñµÃʲôÑùµÄµ÷ÊÔÌØÐÔ£¿</h4> -<p> - PostgreSQL ÓкܶàÀàËÆ<i> log_* </i>µÄ·þÎñÆ÷ÅäÖñäÁ¿¿ÉÓÃÓÚ²éѯµÄ´òÓ¡ºÍ½ø³Ìͳ¼Æ£¬¶øÕâЩ¹¤×÷¶Ôµ÷ÊÔºÍÐÔÄܲâÊÔºÜÓаïÖú¡£ -</p> - - - -<h4><a name="3.5"></a>3.5)ΪʲôÔÚÊÔͼÁ¬½ÓʱÊÕµ½¡°Sorry, too many clients¡±ÏûÏ¢£¿</h4> -<p> - Õâ±íʾÄãÒѴﵽȱʡ100¸ö²¢·¢ºǫ́½ø³ÌÊýµÄÏÞÖÆ£¬ÄãÐèҪͨ¹ýÐÞ¸Ä<i>postgresql.conf</i>ÎļþÖеÄ<i>max_connections</i>ÖµÀ´ - Ôö¼ÓpostmasterµÄºǫ́²¢·¢´¦ÀíÊý£¬Ð޸ĺóÐèÖØÐÂÆô¶¯<i>postmaster</i>¡£ -</p> - - -<h4><a name="3.6"></a>3.6)ΪʲôҪÔÚÉý¼¶ PostgreSQL Ö÷Òª·¢²¼°æ±¾Ê±×ö dump ºÍ restore £¿</h4> -<p> - PostgreSQL ¿ª·¢×é¶Ôÿ´ÎСµÄÉý¼¶½ö×öÁ˽ÏÉÙµÄÐ޸ģ¬Òò´Ë´Ó 7.4.0 Éý¼¶µ½ 7.4.1 ²»ÐèÒª dump ºÍ restore¡£ - µ«ÊÇÖ÷ÒªµÄÉý¼¶£¨ÀýÈç´Ó 7.3 µ½ 7.4£©Í¨³£»áÐÞ¸Äϵͳ±íºÍÊý¾Ý±íµÄÄÚ²¿¸ñʽ¡£ - ÕâЩ±ä»¯Ò»°ã±È½Ï¸´ÔÓ£¬Òò´ËÎÒÃDz»Î¬Êý¾ÝÎļþµÄÏòºó¼æÈÝ¡£ - dump ½«Êý¾Ý°´ÕÕͨÓõĸñʽÊä³ö£¬Ëæºó¿ÉÒÔ±»ÖØмÓÔز¢Ê¹ÓÃеÄÄÚ²¿¸ñʽ¡£ -</p> - -<h4><a name="3.7"></a>3.7)(ʹÓÃPostgreSQL)ÎÒÐèҪʹÓÃʲô¼ÆËã»úÓ²¼þ £¿</h4> -<p> - ÓÉÓÚ¼ÆËã»úÓ²¼þ´ó¶àÊýÊǼæÈݵģ¬ÈËÃÇ×ÜÊÇÇãÏòÓÚÏàÐÅËùÓмÆËã»úÓ²¼þÖÊÁ¿Ò²ÊÇÏàͬµÄ¡£ÊÂʵÉϲ»ÊÇ£¬ - ECC RAM£¨´øÆæżУÑéµÄÄڴ棩£¬SCSI £¨Ó²ÅÌ£©ºÍÓÅÖʵÄÖ÷°å±ÈһЩ±ãÒË»õÒª¸ü¼Ó¿É¿¿ÇÒ¾ßÓиüºÃµÄÐÔÄÜ¡£PostgreSQL¼¸ºõ¿ÉÒÔÔËÐÐÔÚÈκÎÓ²¼þÉÏ£¬ - µ«Èç¹û¿É¿¿ÐÔºÍÐÔÄܶÔÄãµÄϵͳºÜÖØÒª£¬Äã¾ÍÐèҪȫÃæµÄÑо¿Ò»ÏÂÄãµÄÓ²¼þÅäÖÃÁË¡£ÔÚÎÒÃǵÄÓʼþÁбíÉÏÒ²ÓйØÓÚ - Ó²¼þÅäÖúÍÐԼ۱ȵÄÌÖÂÛ¡£ -</p> - - -<hr/> - -<div><h2>²Ù×÷ÎÊÌâ</h2> </div> - - -<h4><a name="4.1"></a>4.1)ÈçºÎֻѡÔñÒ»¸ö²éѯ½á¹ûµÄÍ·¼¸ÐУ¿»òÊÇËæ»úµÄÒ»ÐУ¿</h4> -<p> - Èç¹ûÄãÖ»ÊÇÒªÌáÈ¡¼¸ÐÐÊý¾Ý£¬²¢ÇÒÄãÔÚÖ´ÐвéѯÖÐÖªµÀÈ·ÇеÄÐÐÊý£¬Äã¿ÉÒÔʹÓÃLIMIT¹¦ÄÜ¡£ - Èç¹ûÓÐÒ»¸öË÷ÒýÓë <i> ORDER BY</i>ÖеÄÌõ¼þÆ¥Å䣬PostgreSQL ¿ÉÄܾÍÖ»´¦ÀíÒªÇóµÄÍ·¼¸Ìõ¼Ç¼£¬ - £¨·ñÔò½«¶ÔÕû¸ö²éѯ½øÐд¦ÀíÖ±µ½Éú³ÉÐèÒªµÄÐУ©¡£Èç¹ûÔÚÖ´Ðвéѯ¹¦ÄÜʱ²»ÖªµÀÈ·ÇеļǼÊý£¬ - ¿ÉʹÓÃÓαê(cursor)ºÍFETCH¹¦ÄÜ¡£ -</p> -<p> - ¿ÉʹÓÃÒÔÏ·½·¨ÌáÈ¡Ò»ÐÐËæ»ú¼Ç¼µÄ£º -</p> -<pre> - SELECT cols - FROM tab - ORDER BY random() - LIMIT 1 ; -</pre> - - - -<h4><a name="4.2"></a>4.2)ÈçºÎ²é¿´±í¡¢Ë÷Òý¡¢Êý¾Ý¿âÒÔ¼°Óû§µÄ¶¨Ò壿ÈçºÎ²é¿´<i>psql</i>ÀïÓõ½µÄ²éѯָÁî²¢ÏÔʾËüÃÇ£¿</h4> -<p> - ÔÚ<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½Ó¿Ú£¬ - Äã¿ÉÒÔ´ÓÕâÀï»ñÈ¡¹ØÓÚÊý¾Ý¿âµÄÐÅÏ¢¡£ -</p> -<p> - ÔÚϵͳÖÐÓÐһЩÒÔ<i>pg_</i> ´òÍ·µÄϵͳ±íÒ²ÃèÊöÁ˱íµÄ¶¨Òå¡£ -</p> -<p> - ʹÓà <i>psql -l</i> Ö¸Áî¿ÉÒÔÁгöËùÓеÄÊý¾Ý¿â¡£ -</p> -<p> - Ò²¿ÉÒÔä¯ÀÀһϠ<i>pgsql/src/tutorial/syscat.source</i>Îļþ£¬ËüÁоÙÁ˺ܶà¿É´ÓÊý¾Ý¿âϵͳ±íÖлñÈ¡ÐÅÏ¢µÄSELECTÓï·¨¡£ -</p> - - -<h4><a name="4.3"></a>4.3)ÈçºÎ¸ü¸ÄÒ»¸ö×ֶεÄÊý¾ÝÀàÐÍ£¿</h4> -<p> - ÔÚ8.0°æ±¾Àï¸ü¸ÄÒ»¸ö×ֶεÄÊý¾ÝÀàÐͺÜÈÝÒ×£¬¿ÉʹÓà ALTER TABLE ALTER COLUMN TYPE ¡£ -</p> -<p> - ÔÚÒÔÇ°µÄ°æ±¾ÖУ¬¿ÉÒÔÕâÑù×ö£º -</p> -<pre> - 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; -</pre> -<p> - ÄãÈ»ºó¿ÉÒÔʹÓÃ<i>VACUUM FULL tab </i>Ö¸ÁîÀ´Ê¹ÏµÍ³ÊÕ»ØÎÞЧÊý¾ÝËùÕ¼ÓõĿռ䡣 -</p> - -<h4><a name="4.4"></a>4.4)Ò»ÐмǼ£¬Ò»¸ö±í£¬Ò»¸ö¿âµÄ×î´ó³ß´çÊǶàÉÙ£¿</h4> -<p> - ÏÂÃæÊÇһЩÏÞÖÆ£º -</p> -<blockquote> - <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> - µ±È»£¬Êµ¼ÊÉÏûÓÐÕæÕýµÄÎÞÏÞÖÆ£¬»¹ÊÇÒªÊÜ¿ÉÓôÅÅ̿ռ䡢¿ÉÓÃÄÚ´æ/½»»»ÇøµÄÖÆÔ¼¡£ - ÊÂʵÉÏ£¬µ±ÕâЩÊýÖµ±äµÃÒì³£µØ´óʱ£¬ÏµÍ³ÐÔÄÜÒ²»áÊܴܺóÓ°Ïì¡£ -</p> - -<p> - ±íµÄ×î´ó³ß´ç 32 TB ²»ÐèÒª²Ù×÷ϵͳ¶Ô´óÎļþµÄÖ§³Ö¡£´ó±íÓöà¸ö 1 GB µÄÎļþ´æ´¢£¬Òò´ËÎļþϵͳ³ß´çµÄÏÞÖÆÊDz»ÖØÒªµÄ¡£ -</p> -<p> - Èç¹ûȱʡµÄ¿é´óСÔö³¤µ½ 32K £¬×î´óµÄ±í³ß´çºÍ×î´óÁÐÊý»¹¿ÉÒÔÔö¼Óµ½Ëı¶¡£ -</p> - - -<h4><a name="4.5"></a>4.5)´æ´¢Ò»¸öµäÐ͵ÄÎı¾ÎļþÀïµÄÊý¾ÝÐèÒª¶àÉÙ´ÅÅ̿ռ䣿</h4> -<p> - Ò»¸ö Postgres Êý¾Ý¿â£¨´æ´¢Ò»¸öÎı¾Îļþ£©ËùÕ¼ÓõĿռä×î¶à¿ÉÄÜÐèÒªÏ൱ÓÚÕâ¸öÎı¾Îļþ×ÔÉí´óС5±¶µÄ´ÅÅ̿ռ䡣 -</p> -<p> - ÀýÈ磬¼ÙÉèÓÐÒ»¸ö 100,000 ÐеÄÎļþ£¬Ã¿ÐÐÓÐÒ»¸öÕûÊýºÍÒ»¸öÎı¾ÃèÊö¡£ - ¼ÙÉèÎı¾´®µÄƽ¾ù³¤¶ÈΪ20×Ö½Ú¡£Îı¾ÎļþÕ¼Óà 2.8 MB¡£´æ·ÅÕâЩÊý¾ÝµÄ PostgreSQL Êý¾Ý¿âÎļþ´óÔ¼ÊÇ 6.4 MB: -</p> -<pre> - 32 ×Ö½Ú: ÿÐеÄÍ·£¨¹À¼ÆÖµ£© - 24 ×Ö½Ú: Ò»¸öÕûÊýÐÍ×ֶκÍÒ»¸öÎı¾ÐÍ×ֶΠ- + 4 ×Ö½Ú: Ò³ÃæÄÚÖ¸ÏòÔª×éµÄÖ¸Õë - ---------------------------------------- - 60 ×Ö½ÚÿÐÐ - - PostgreSQL Êý¾ÝÒ³µÄ´óСÊÇ 8192 ×Ö½Ú (8 KB)£¬Ôò£º - - 8192 ×Ö½Úÿҳ - ------------------- = 136 ÐÐ/Êý¾ÝÒ³£¨ÏòÏÂÈ¡Õû£© - 60 ×Ö½ÚÿÐÐ - - 100000 Êý¾ÝÐÐ - -------------------- = 735 Êý¾ÝÒ³£¨ÏòÉÏÈ¡Õû£© - 128 ÐÐÿҳ - - 735 Êý¾ÝÒ³ * 8192 ×Ö½Ú/Ò³ = 6,021,120 ×Ö½Ú£¨6 MB£© -</pre> - -<p> - Ë÷Òý²»ÐèÒªÕâô¶àµÄ¶îÍâÏûºÄ£¬µ«Ò²È·Êµ°üÀ¨±»Ë÷ÒýµÄÊý¾Ý£¬Òò´ËËüÃÇÒ²¿ÉÄÜºÜ´ó¡£ -</p> -<p> - ¿ÕÖµ<i>NULL</i>´æ·ÅÔÚλͼÖУ¬Òò´ËÕ¼ÓúÜÉٵĿռ䡣 -</p> - -<h4><a name="4.6"></a>4.6)ΪʲôÎҵIJéѯºÜÂý£¿ÎªÊ²Ã´ÕâЩ²éѯûÓÐÀûÓÃË÷Òý£¿</h4> -<p> - ²¢·Çÿ¸ö²éѯ¶¼»á×Ô¶¯Ê¹ÓÃË÷Òý¡£Ö»ÓÐÔÚ±íµÄ´óС³¬¹ýÒ»¸ö×îСֵ£¬²¢ÇÒ²éѯֻ»áÑ¡ÖбíÖнÏС±ÈÀýµÄ¼Ç¼ʱ²Å»á²ÉÓÃË÷Òý¡£ - ÕâÊÇÒòΪË÷ÒýɨÃèÒýÆðµÄËæ¼´´ÅÅÌ´æÈ¡¿ÉÄܱÈÖ±½ÓµØ¶ÁÈ¡±í£¨Ë³ÐòɨÃ裩¸üÂý¡£ -</p> -<p> - ΪÁËÅжÏÊÇ·ñʹÓÃË÷Òý£¬PostgreSQL±ØÐë»ñµÃÓйرíµÄͳ¼ÆÖµ¡£ÕâЩͳ¼ÆÖµ¿ÉÒÔʹÓà VACUUM ANALYZE£¬»ò ANALYZE »ñµÃ¡£ - ʹÓÃͳ¼ÆÖµ£¬ÓÅ»¯Æ÷ÖªµÀ±íÖÐÓжàÉÙÐУ¬¾ÍÄܹ»¸üºÃµØÅжÏÊÇ·ñÀûÓÃË÷Òý¡£ - ͳ¼ÆÖµ¶ÔÈ·¶¨ÓÅ»¯µÄÁ¬½Ó˳ÐòºÍÁ¬½Ó·½·¨Ò²ºÜÓÐÓá£ÔÚ±íµÄÄÚÈÝ·¢Éú±ä»¯Ê±£¬Ó¦¶¨ÆÚ½øÐÐͳ¼ÆÖµµÄ¸üÐÂÊÕ¼¯¡£ -</p> -<p> - Ë÷Òýͨ³£²»ÓÃÓÚ ORDER BY »òÖ´ÐÐÁ¬½Ó¡£¶ÔÒ»¸ö´ó±íµÄÒ»´Î˳ÐòɨÃ裬ÔÙ×öÒ»¸öÏÔʽµÄÅÅÐòͨ³£±ÈË÷ÒýɨÃèÒª¿ì¡£ -</p> - -<p> - µ«ÊÇ£¬ÔÚ LIMIT ºÍ ORDER BY ½áºÏʹÓÃʱ¾³£»áʹÓÃË÷Òý£¬ÒòΪÕâÖ»»á·µ»Ø±íµÄһС²¿·Ö¡£ - ʵ¼ÊÉÏ£¬ËäÈ» MAX() ºÍ MIN() ²¢²»Ê¹ÓÃË÷Òý£¬Í¨¹ý¶Ô - ORDER BY ºÍ LLIMIT ʹÓÃË÷ÒýÈ¡µÃ×î´óÖµºÍ×îСֵҲÊÇ¿ÉÒԵģº -</p> -<pre> - SELECT col - FROM tab - ORDER BY col [ DESC ] - LIMIT 1; -</pre> -<p> - Èç¹ûÄãÈ·ÐÅPostgreSQLµÄÓÅ»¯Æ÷ʹÓÃ˳ÐòɨÃèÊDz»ÕýÈ·µÄ£¬Äã¿ÉÒÔʹÓÃ<code>SET enable_seqscan TO 'off'</code>Ö¸Á - È»ºóÔÙ´ÎÔËÐвéѯ£¬Äã¾Í¿ÉÒÔ¿´³öʹÓÃÒ»¸öË÷ÒýɨÃèÊÇ·ñȷʵҪ¿ìһЩ¡£ -</p> - -<p> - µ±Ê¹ÓÃͨÅä·û²Ù×÷£¬ÀýÈç <i>LIKE</i> »ò <i>~</i> ʱ£¬Ë÷ÒýÖ»ÄÜÔÚÌض¨µÄÇé¿öÏÂʹÓ㺠-</p> -<ul> - <li>×Ö·û´®µÄ¿ªÊ¼²¿·Ö±ØÐëÊÇÆÕͨ×Ö·û´®£¬Ò²¾ÍÊÇ˵£º - <ul> - <li> <i>LIKE</i> ģʽ²»ÄÜÒÔ <i>%</i> ´òÍ·¡£</li> - <li> <i>~</i> £¨ÕýÔò±í´ïʽ£©Ä£Ê½±ØÐëÒÔ <i>^</i> ´òÍ·¡£</li> - </ul> - </li> - <li>×Ö·û´®²»ÄÜÒÔÆ¥Åä¶à¸ö×Ö·ûµÄģʽÀà´òÍ·£¬ÀýÈç [a-e]¡£</li> - <li>´óСдÎ޹صIJéÕÒ£¬Èç ILIKE ºÍ ~* µÈ²»Ê¹ÓÃË÷Òý£¬µ«¿ÉÒÔÓà <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> - -<h4><a name="4.7"></a>4.7)ÎÒÈçºÎ²ÅÄÜ¿´µ½²éѯÓÅ»¯Æ÷ÊÇÔõÑùÆÀ¹À´¦ÀíÎҵIJéѯ£¿</h4> -<p> - ²Î¿¼ <small>EXPLAIN</small> ÊÖ²áÒ³¡£ -</p> - -<h4><a name="4.8"></a>4.8)ÎÒÔõÑù×öÕýÔò±í´ïʽËÑË÷ºÍ´óСдÎ޹صÄÕýÔò±í´ïʽ²éÕÒ£¿ÔõÑùÀûÓÃË÷Òý½øÐдóСдÎ޹زéÕÒ£¿</h4> -<p> - ²Ù×÷·û <i> ~ </i> ´¦ÀíÕýÔò±í´ïʽƥÅ䣬¶ø <i>~*</i> ´¦Àí´óСдÎ޹صÄÕýÔò±í´ïʽƥÅä¡£´óдЩÎÞ¹ØµÄ LIKE ±äÖÖ³ÉΪ ILIKE¡£ -</p> -<p> - ´óСдÎ޹صĵÈʽ±È½Ïͨ³£Ð´×ö£º -</p> -<pre> SELECT * - FROM tab - WHERE lower(col) = 'abc'; -</pre> -<p> - ÕâÑù½«²»»áʹÓñê×¼µÄË÷Òý¡£µ«ÊÇ¿ÉÒÔ´´½¨Ò»¸ö¿É±»ÀûÓõĺ¯ÊýË÷Òý: -</p> -<pre> CREATE INDEX tabindex ON tab (lower(col)); -</pre> - -<h4><a name="4.9"></a>4.9)ÔÚÒ»¸ö²éѯÀÎÒÔõÑù¼ì²âÒ»¸ö×Ö¶ÎÊÇ·ñΪ <i>NULL</i> £¿ÎÒÈçºÎ²ÅÄÜ׼ȷÅÅÐò¶ø²»ÂÛij×Ö¶ÎÊÇ·ñº¬ <i>NULL</i> Öµ£¿</h4> -<p> - Óà <small>IS NULL</small> ºÍ <small>IS NOT NULL</small> ²âÊÔÕâ¸ö×ֶΣ¬¾ßÌå·½·¨ÈçÏ£º -</p> -<pre> SELECT * - FROM tab - WHERE col IS NULL; -</pre> - -<p>ΪÁËÄܶԺ¬ <small>NULL</small>×Ö¶ÎÅÅÐò£¬¿ÉÔÚ <small>ORDER BY</small> Ìõ¼þÖÐʹÓà <small>IS NULL</small>ºÍ - <small>IS NOT NULL</small> ÐÞÊηû£¬Ìõ¼þΪÕæ <i>true</i> ½«±ÈÌõ¼þΪ¼Ù<i>false</i> ÅÅÔÚÇ°Ã棬ÏÂÃæµÄÀý×ӾͻὫº¬ - NULL µÄ¼Ç¼ÅÅÔÚ½á¹ûµÄÉÏÃ沿·Ö£º -</p> -<pre> SELECT * - FROM tab - ORDER BY (col IS NOT NULL) -</pre> - -<h4><a name="4.10"></a>4.10)¸÷ÖÖ×Ö·ûÀàÐÍÖ®¼äÓÐʲô²»Í¬£¿</h4> -<blockquote> - <table> - <tbody> - <tr><th>ÀàÐÍ</th><th>ÄÚ²¿Ãû³Æ</th><th>˵Ã÷</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> - ÔÚϵͳ±íºÍÔÚһЩ´íÎóÐÅÏ¢ÀïÄ㽫¿´µ½ÄÚ²¿Ãû³Æ¡£ -</p> -<p> - ÉÏÃæËùÁеÄÇ°ËÄÖÖÀàÐÍÊÇ"varlena"£¨±ä³¤£©ÀàÐÍ£¨Ò²¾ÍÊÇ˵£¬¿ªÍ·µÄËĸö×Ö½ÚÊdz¤¶È£¬ºóÃæ²ÅÊÇÊý¾Ý£©¡£ - ÓÚÊÇʵ¼ÊÕ¼ÓõĿռä±ÈÉùÃ÷µÄ´óСҪ¶àһЩ¡£ - È»¶øÕâЩÀàÐͶ¼¿ÉÒÔ±»Ñ¹Ëõ´æ´¢£¬Ò²¿ÉÒÔÓà TOAST ÍÑ»ú´æ´¢£¬Òò´Ë´ÅÅÌ¿Õ¼äÒ²¿ÉÄܱÈÔ¤ÏëµÄÒªÉÙ¡£ -</p> -<p> - <small>VARCHAR(n)</small> ÔÚ´æ´¢ÏÞÖÆÁË×î´ó³¤¶ÈµÄ±ä³¤×Ö·û´®ÊÇ×îºÃµÄ¡£ - <small>TEXT</small> ÊÊÓÃÓÚ´æ´¢×î´ó¿É´ï 1G×óÓÒµ«Î´¶¨ÒåÏÞÖƳ¤¶ÈµÄ×Ö·û´®¡£ -</p> -<p> - <small>CHAR(n)</small> ×îÊʺÏÓÚ´æ´¢³¤¶ÈÏàͬµÄ×Ö·û´®¡£ <small>CHAR(n)</small>»á¸ù¾ÝËù¸ø¶¨µÄ×ֶ㤶ÈÒÔ¿Õ¸ñ²¹×㣨²»×ãµÄ×Ö¶ÎÄÚÈÝ£©£¬ - ¶ø <small>VARCHAR(n)</small> Ö»´æ´¢Ëù¸ø¶¨µÄÊý¾ÝÄÚÈÝ¡£ - <small>BYTEA</small> ÓÃÓÚ´æ´¢¶þ½øÖÆÊý¾Ý£¬ÓÈÆäÊÇ°üº¬ NULL ×Ö½ÚµÄÖµ¡£ÕâЩÀàÐ;ßÓÐÏàËƵÄÐÔÄÜÌØÐÔ¡£ -</p> - - - -<h4><a name="4.11.1"></a>4.11.1)ÎÒÔõÑù´´½¨Ò»¸öÐòÁкÅ/×Ô¶¯µÝÔöµÄ×ֶΣ¿</h4> -<p> - PostgreSQL Ö§³Ö SERIAL Êý¾ÝÀàÐÍ¡£ËüÔÚ×Ö¶ÎÉÏ×Ô¶¯´´½¨Ò»¸öÐòÁкÍË÷Òý¡£ÀýÈ磺 -</p> -<pre> - CREATE TABLE person ( - id SERIAL, - name TEXT - ); -</pre> -<p> - »á×Ô¶¯×ª»»Îª£º -</p> -<pre> - CREATE SEQUENCE person_id_seq; - CREATE TABLE person ( - id INT4 NOT NULL DEFAULT nextval('person_id_seq'), - name TEXT - ); -</pre> -<p> - ²Î¿¼ create_sequence ÊÖ²áÒ³»ñÈ¡¹ØÓÚÐòÁеĸü¶àÐÅÏ¢¡£ -</p> - - -<h4><a name="4.11.2"></a>4.11.2)ÎÒÈçºÎ»ñµÃÒ»¸ö²åÈëµÄÐòÁкŵÄÖµ£¿</h4> -<p> - Ò»ÖÖ·½·¨ÊÇÔÚ²åÈë֮ǰÏÈÓú¯Êý nextval() ´ÓÐòÁжÔÏóÀï¼ìË÷³öÏÂÒ»¸ö SERIAL Öµ£¬È»ºóÔÙÏÔʽ²åÈ롣ʹÓà - <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> - -<h4><a name="4.11.3"></a>4.11.3)ʹÓà <i>currval()</i> »áµ¼ÖºÍÆäËûÓû§µÄ³åÍ»Çé¿ö£¨race condition£©Âð£¿</h4> -<p> - ²»»á¡£<i>currval()</i> ·µ»ØµÄÊÇÄã±¾´Î»á»°½ø³ÌËù¸³µÄÖµ¶ø²»ÊÇËùÓÐÓû§µÄµ±Ç°Öµ¡£<br/> -</p> - -<h4><a name="4.11.4"></a>4.11.4)Ϊʲô²»ÔÚÊÂÎñÒì³£ÖÐÖ¹ºóÖØÓÃÐòÁкÅÄØ£¿ÎªÊ²Ã´ÔÚÐòÁкÅ×ֶεÄÈ¡ÖµÖдæÔÚ¼ä¶ÏÄØ£¿</h4> -<p> - ΪÁËÌá¸ß²¢·¢ÐÔ£¬ÐòÁкÅÔÚÐèÒªµÄʱºò¸³ÓèÕýÔÚÔËÐеÄÊÂÎñ£¬²¢ÇÒÔÚÊÂÎñ½áÊø֮ǰ²»½øÐÐËø¶¨£¬ - Õâ¾Í»áµ¼ÖÂÒì³£ÖÐÖ¹µÄÊÂÎñºó£¬ÐòÁкŻá³öÏÖ¼ä¸ô¡£ -</p> - -<h4><br/><a name="4.12"></a>4.12)ʲôÊÇ <small>OID</small> £¿Ê²Ã´ÊÇ <small>CTID</small> £¿</h4> -<p> - PostgreSQL Àï´´½¨µÄÿһÐмǼ¶¼»á»ñµÃÒ»¸öΨһµÄ<small>OID</small>£¬³ý·ÇÔÚ´´½¨±íʱʹÓÃ<small>WITHOUT OIDS</small>Ñ¡Ïî¡£ - <small>OID</small>´´½¨Ê±»á×Ô¶¯Éú³ÉÒ»¸ö4×Ö½ÚµÄÕûÊý£¬ËùÓÐ OID ÔÚÕû¸ö PostgreSQL ÖоùÊÇΨһµÄ¡£ È»¶ø£¬ËüÔÚ³¬¹ý40ÒÚʱ½«Òç³ö£¬ - <small>OID</small>´Ëºó»á³öÏÖÖظ´¡£PostgreSQL ÔÚËüµÄÄÚ²¿ÏµÍ³±íÀïʹÓà OID ÔÚ±íÖ®¼ä½¨Á¢ÁªÏµ¡£ -</p> -<p> - ÔÚÓû§µÄÊý¾Ý±íÖУ¬×îºÃÊÇʹÓÃ<small>SERIAl</small>À´´úÌæ<small>OID</small> - ÒòΪ<small>SERIAL</small>Ö»ÊDZ£Ö¤ÔÚµ¥¸ö±íÖÐÊý¾ÝÊÇΨһµÄ£¬ÕâÑùËüÒç³öµÄ¿ÉÄÜÐԾͷdz£Ð¡ÁË£¬ - <small>SERIAL8</small>¿ÉÓÃÀ´±£´æ8×Ö½ÚµÄÐòÁкÅ×ֶΡ£ -</p> - -<p> - <small>CTID</small> ÓÃÓÚ±êʶ´ø×ÅÊý¾Ý¿é£¨µØÖ·£©ºÍ£¨¿éÄÚ£©Æ«ÒƵÄÌض¨µÄÎïÀíÐС£ - <small>CTID</small> ÔڼǼ±»¸ü¸Ä»òÖØÔغó·¢Éú¸Ä±ä¡£Ë÷ÒýÈë¿ÚʹÓÃËüÃÇÖ¸ÏòÎïÀíÐС£ -</p> - - -<h4><a name="4.13"></a>4.13)ΪʲôÎÒÊÕµ½´íÎóÐÅÏ¢¡°<i>ERROR: Memory exhausted in AllocSetAlloc()</i>¡±£¿</h4> -<p> - ÕâºÜ¿ÉÄÜÊÇϵͳµÄÐéÄâÄÚ´æÓùâÁË£¬»òÕßÄں˶ÔijЩ×ÊÔ´Óнϵ͵ÄÏÞÖÆÖµ¡£ÔÚÆô¶¯ postmaster ֮ǰÊÔÊÔÏÂÃæµÄÃüÁ -</p> -<pre> - ulimit -d 262144 - limit datasize 256m -</pre> -<p> - È¡¾öÓÚÄãÓÃµÄ shell£¬ÉÏÃæÃüÁîÖ»ÓÐÒ»ÌõÄܳɹ¦£¬µ«ÊÇËü½«°ÑÄãµÄ½ø³ÌÊý¾Ý¶ÎÏÞÖÆÉèµÃ±È½Ï¸ß£¬ - Òò¶øÒ²ÐíÄÜÈòéѯÍê³É¡£ÕâÌõÃüÁîÓ¦ÓÃÓÚµ±Ç°½ø³Ì£¬ÒÔ¼°ËùÓÐÔÚÕâÌõÃüÁîÔËÐк󴴽¨µÄ×Ó½ø³Ì¡£ - Èç¹ûÄãÊÇÔÚÔËÐÐSQL¿Í»§¶ËʱÒòΪºǫ́·µ»ØÁËÌ«¶àµÄÊý¾Ý¶ø³öÏÖÎÊÌ⣬ÇëÔÚÔËÐпͻ§¶Ë֮ǰִÐÐÉÏÊöÃüÁî¡£ -</p> - -<h4><a name="4.14"></a>4.14)ÎÒÈçºÎ²ÅÄÜÖªµÀËùÔËÐÐµÄ PostgreSQL µÄ°æ±¾£¿</h4> -<p> - ´Ó psql ÀÊäÈë <code>SELECT version();</code>Ö¸Áî¡£ -</p> - -<h4><a name="4.15"></a>4.15)ÎÒÈçºÎ´´½¨Ò»¸öȱʡֵÊǵ±Ç°Ê±¼äµÄ×ֶΣ¿</h4> -<p> - ʹÓà CURRENT_TIMESTAMP£º -</p> -<pre> - CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -</pre> - - -<h4><a name="4.16"></a>4.16)ÎÒÔõÑù½øÐÐ outer join £¨ÍâÁ¬½Ó£©£¿</h4> -<p> - PostgreSQL ²ÉÓñê×¼µÄ SQL Óï·¨Ö§³ÖÍâÁ¬½Ó¡£ÕâÀïÊÇÁ½¸öÀý×Ó£º -</p> -<pre> - SELECT * - FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col); -</pre> -<p>»òÊÇ</p> -<pre> - SELECT * - FROM t1 LEFT OUTER JOIN t2 USING (col); -</pre> -<p> - ÕâÁ½¸öµÈ¼ÛµÄ²éѯÔÚ t1.col ºÍ t2.col ÉÏ×öÁ¬½Ó£¬²¢ÇÒ·µ»Ø t1 ÖÐËùÓÐδÁ¬½ÓµÄÐУ¨ÄÇЩÔÚ t2 ÖÐûÓÐÆ¥ÅäµÄÐУ©¡£ - ÓÒ[Íâ]Á¬½Ó(RIGHT OUTER JOIN)½«·µ»Ø t2 ÖÐδÁ¬½ÓµÄÐС£ - ÍêÈ«ÍâÁ¬½Ó£¨FULL OUTER JOIN£©½«·µ»Ø t1 ºÍ t2 ÖÐδÁ¬½ÓµÄÐС£ - ¹Ø¼ü×Ö OUTER ÔÚ×ó[Íâ]Á¬½Ó¡¢ÓÒ[Íâ]Á¬½ÓºÍÍêÈ«[Íâ]Á¬½ÓÖÐÊÇ¿ÉÑ¡µÄ£¬ÆÕͨÁ¬½Ó±»³ÆΪÄÚÁ¬½Ó£¨INNER JOIN£©¡£ -</p> - - -<h4><a name="4.17"></a>4.17)ÈçºÎʹÓÃÉæ¼°¶à¸öÊý¾Ý¿âµÄ²éѯ£¿</h4> -<p> - ûÓа취²éѯµ±Ç°Êý¾Ý¿âÖ®ÍâµÄÊý¾Ý¿â¡£ - ÒòΪ PostgreSQL Òª¼ÓÔØÓëÊý¾Ý¿âÏà¹ØµÄϵͳĿ¼£¨ÏµÍ³±í£©£¬Òò´Ë¿çÊý¾Ý¿âµÄ²éѯÈçºÎÖ´ÐÐÊDz»¶¨µÄ¡£ -</p> -<p> - ¸½¼ÓÔöֵģ¿écontrib/dblinkÔÊÐí²ÉÓú¯Êýµ÷ÓÃʵÏÖ¿ç¿â²éѯ¡£µ±È»Óû§Ò²¿ÉÒÔͬʱÁ¬½Óµ½²»Í¬µÄÊý¾Ý¿âÖ´ÐвéѯȻºóÔÚ¿Í»§¶ËºÏ²¢½á¹û¡£ -</p> - -<h4><a name="4.18"></a>4.18)ÈçºÎÈú¯Êý·µ»Ø¶àÐлò¶àÁУ¿</h4> -<p> - ÔÚº¯ÊýÖзµ»ØÊý¾Ý¼Ç¼¼¯µÄ¹¦ÄÜÊǺÜÈÝÒ×ʹÓõģ¬ÏêÇé²Î¼û£º - <a href="http://techdocs.postgresql.org/guides/SetReturningFunctions">http://techdocs.postgresql.org/guides/SetReturningFunctions</a> -</p> - -<h4><a name="4.19"></a>4.19)ΪʲôÎÒÔÚʹÓÃPL/PgSQLº¯Êý´æÈ¡ÁÙʱ±íʱ»áÊÕµ½´íÎóÐÅÏ¢¡°relation with OID ##### does not exist¡±£¿</h4> -<p> - PL/PgSQL»á»º´æº¯ÊýµÄÄÚÈÝ£¬ÓÉ´Ë´øÀ´µÄÒ»¸ö²»ºÃµÄ¸±×÷ÓÃÊÇÈôÒ»¸ö PL/PgSQL - º¯Êý·ÃÎÊÁËÒ»¸öÁÙʱ±í£¬È»ºó¸Ã±í±»É¾³ý²¢Öؽ¨ÁË£¬ÔòÔٴε÷Óøú¯Êý½«Ê§°Ü£¬ - ÒòΪ»º´æµÄº¯ÊýÄÚÈÝÈÔȻָÏò¾ÉµÄÁÙʱ±í¡£½â¾öµÄ·½·¨ÊÇÔÚ PL/PgSQL ÖÐÓÃ<small>EXECUTE</small> - ¶ÔÁÙʱ±í½øÐзÃÎÊ¡£ÕâÑù»á±£Ö¤²éѯÔÚÖ´ÐÐÇ°×ܻᱻÖØнâÎö¡£ -</p> - -<h4><a name="4.27"></a>4.27)Ä¿Ç°ÓÐÄÄЩÊý¾Ý¸´ÖÆ·½°¸¿ÉÓã¿</h4> -<p> - ¡°¸´ÖÆ¡±Ö»ÊÇÒ»¸öÊõÓÓкü¸ÖÖ¸´ÖƼ¼Êõ¿ÉʹÓã¬Ã¿ÖÖ¶¼ÓÐÓŵãºÍȱµã£º -</p> -<p> - Ö÷/´Ó¸´ÖÆ·½Ê½ÊÇÔÊÐíÒ»¸öÖ÷·þÎñÆ÷½ÓÊܶÁ/дµÄÉêÇ룬¶ø¶à¸ö´Ó·þÎñÆ÷Ö»ÄܽÓÊܶÁ/<small>SELECT</small>²éѯµÄÉêÇ룬 - Ä¿Ç°×îÁ÷ÐÐÇÒÊÇÃâ·ÑµÄÖ÷/´Ó PostgreSQL¸´ÖÆ·½°¸ÊÇ - <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> - - - -</body> -</html> - +<!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 å¹´ 1 月 5 æ—¥ 星期五 15:40:20 EST <br/> + ä¸æ–‡ç‰ˆæœ€è¿‘更新:2007 å¹´ 1 月 29 æ—¥ 星期一 22:48: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>) +</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/> +</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 拥有图形用户界é¢å—?<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>) ç›®å‰æœ‰å“ªäº›æ•°æ®å¤åˆ¶æ–¹æ¡ˆå¯ç”¨ï¼Ÿ<br/> +<a href="#4.21">4.21</a>) 为何查询结果显示的表å或列å与我的查询è¯å¥ä¸çš„ä¸åŒï¼Ÿä¸ºä½•å¤§å†™çŠ¶æ€ä¸èƒ½ä¿ç•™ï¼Ÿ<br/> +</p> + +<hr/> + +<h2><a name="常è§é—®é¢˜"></a> 常è§é—®é¢˜ </h2> + +<h3> <a name="1.1"></a>1.1)PostgreSQL 是什么?该怎么å‘音? </h3> + + +<p>PostgreSQL 读作 <i>Post-Gres-Q-L</i>,有时候也简称为<i>Postgres</i> 。想å¬ä¸€ä¸‹å…¶å‘音的人员å¯ä»Žè¿™é‡Œä¸‹è½½å£°éŸ³æ–‡ä»¶ï¼š + <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"></a>1.2) è°æŽ§åˆ¶PostgreSQL ? </h3> +<p> + å¦‚æžœä½ åœ¨å¯»æ‰¾PostgreSQL的掌门人,或是什么ä¸å¤®å§”员会,或是什么所属公å¸ï¼Œä½ åªèƒ½æ”¾å¼ƒäº†---å› ä¸ºä¸€ä¸ªä¹Ÿä¸å˜åœ¨ï¼Œä½†æˆ‘们的确有一个 + æ ¸å¿ƒå§”å‘˜ä¼šå’ŒCVS管ç†ç»„,但这些工作组的设立主è¦æ˜¯ä¸ºäº†è¿›è¡Œç®¡ç†å·¥ä½œè€Œä¸æ˜¯å¯¹PostgreSQL进行独å å¼æŽ§åˆ¶ï¼ŒPostgreSQLé¡¹ç›®æ˜¯ç”±ä»»ä½•äººå‡ + å¯å‚åŠ çš„å¼€å‘äººå‘˜ç¤¾åŒºå’Œæ‰€æœ‰ç”¨æˆ·æŽ§åˆ¶çš„ï¼Œä½ æ‰€éœ€è¦åšçš„就是订阅邮件列表,å‚与讨论å³å¯ï¼ˆè¦å‚与PostgreSQLçš„å¼€å‘è¯¦è§ + <a href="http://www.postgresql.org/docs/faqs.FAQ_DEV.html"> å¼€å‘人员常问题 (Developer's FAQ) </a>获å–ä¿¡æ¯ï¼‰ã€‚ +</p> + + +<h3> <a name="1.3"></a>1.3)PostgreSQL的版æƒæ˜¯ä»€ä¹ˆ? </h3> + + +<p>PostgreSQLçš„å‘布éµä»Žç»å…¸çš„BSD版æƒã€‚它å…许用户ä¸é™ç›®çš„地使用PostgreSQLï¼Œç”šè‡³ä½ å¯ä»¥é”€å”®PostgreSQL而ä¸å«æºä»£ç 也å¯ä»¥ï¼Œå”¯ä¸€çš„é™åˆ¶å°±æ˜¯ä½ ä¸èƒ½å› 软件自身问题而å‘我们追诉法律责任,å¦å¤–就是è¦æ±‚所有的软件拷è´ä¸é¡»åŒ…括以下版æƒå£°æ˜Žã€‚下é¢å°±æ˜¯æˆ‘们所使用的BSD版æƒå£°æ˜Žå†…容:</p> + +<p>PostgreSQLæ•°æ®åº“管ç†ç³»ç»Ÿ</p> + +<p> 部分版æƒï¼ˆc)1996-2005,PostgreSQL å…¨çƒå¼€å‘å°ç»„,部分版æƒï¼ˆc)1994-1996 åŠ å·žå¤§å¦è‘£äº‹</p> + +<p> (Portions copyright (c) 1996-2005,PostgreSQL Global Development Group Portions Copyright (c) 1994-6 Regents of the University of California)</p> + +<p> + å…许为任何目的使用,拷è´ï¼Œä¿®æ”¹å’Œåˆ†å‘这个软件和它的文档而ä¸æ”¶å–任何费用, + å¹¶ä¸”æ— é¡»ç¾ç½²å› æ¤è€Œäº§ç”Ÿçš„è¯æ˜Žï¼Œå‰æ是上é¢çš„版æƒå£°æ˜Žå’Œæœ¬æ®µä»¥åŠä¸‹é¢ä¸¤æ®µæ–‡å—出现在所有拷è´ä¸ã€‚ + +</p> + +<p> + (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.) +</p> + +<p> + åœ¨ä»»ä½•æƒ…å†µä¸‹ï¼ŒåŠ å·žå¤§å¦éƒ½ä¸æ‰¿æ‹…å› ä½¿ç”¨æ¤è½¯ä»¶åŠå…¶æ–‡æ¡£è€Œå¯¼è‡´çš„对任何当事人的直接的, + é—´æŽ¥çš„ï¼Œç‰¹æ®Šçš„ï¼Œé™„åŠ çš„æˆ–è€…ç›¸ä¼´è€Œç”Ÿçš„æŸå,包括利益æŸå¤±çš„责任,å³ä½¿åŠ 州大å¦å·²ç»å»ºè®®äº†è¿™äº›æŸå¤±çš„å¯èƒ½æ€§æ—¶ä¹Ÿæ˜¯å¦‚æ¤ã€‚ +</p> + +<p> + (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.) +</p> + + +<p> + åŠ å·žå¤§å¦æ˜Žç¡®æ”¾å¼ƒä»»ä½•ä¿è¯ï¼ŒåŒ…括但ä¸å±€é™äºŽæŸä¸€ç‰¹å®šç”¨é€”的商业和利益的éšå«ä¿è¯ã€‚ + 这里æ供的这份软件是基于“当作是â€çš„åŸºç¡€çš„ï¼Œå› è€ŒåŠ å·žå¤§å¦æ²¡æœ‰è´£ä»»æ供维护,支æŒï¼Œæ›´æ–°ï¼Œå¢žå¼ºæˆ–者修改的æœåŠ¡ã€‚ +</p> + +<p> + (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/> + +</p> + +<h3> <a name="1.4"></a>1.4)PostgreSQL å¯ä»¥è¿è¡Œåœ¨å“ªäº›æ“作系统平å°ä¸Šï¼Ÿ </h3> + +<p> 一般说æ¥ï¼Œä»»ä½•çŽ°åœ¨å¯¹ UNIX 兼容的æ“作系统之上都能è¿è¡ŒPostgreSQL 。在安装指å—里列出了å‘布时ç»è¿‡æ˜Žç¡®æµ‹è¯•çš„å¹³å°ã€‚</p> + + +<p>PostgreSQl也å¯ä»¥ç›´æŽ¥è¿è¡Œåœ¨åŸºäºŽå¾®è½¯Windows-NTçš„æ“作系统,如Win2000 SP4,WinXP å’Œ Win2003,已制作完æˆçš„安装包å¯ä»Ž + <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"></a>1.5) 我从哪里能得到PostgreSQL? </h3> + +<p> + 通过æµè§ˆå™¨å¯ä»Ž<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"></a>1.6) 最新版的PostgreSQL是什么? </h3> + + +<p>PostgreSQL 最新的版本是版本 8.2.1 。</p> + +<p>我们计划æ¯å¹´å‘布一个主è¦å‡çº§ç‰ˆæœ¬ï¼Œæ¯å‡ 个月å‘布一个å°ç‰ˆæœ¬ã€‚</p> + + +<h3> <a name="1.7"></a>1.7) 我从哪里能得到对PostgreSQL的支æŒï¼Ÿ </h3> + +<p>PostgreSQL社区通过邮件列表为其大多数用户æ供帮助,订阅邮件列表的主站点是 <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"></a>1.8) 我如何æ交一个BUG报告? </h3> + +<p> + å¯è®¿é—® <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"></a>1.9) 我如何了解已知的 BUG 或暂缺的功能? </h3> +<p>PostgreSQL 支æŒä¸€ä¸ªæ‰©å±•çš„ SQL:2003 çš„å集。å‚阅我们的<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"></a>1.10) 能够获å–的最新文档有哪些? </h3> + + +<p>PostgreSQL包å«å¤§é‡çš„文档,主è¦æœ‰è¯¦ç»†çš„å‚考手册,手册页和一些的测试例å。å‚è§ /doc 目录(译注:应为 $PGHOME/doc)。 + ä½ è¿˜å¯ä»¥åœ¨çº¿æµè§ˆPostgreSQL的手册,其网å€æ˜¯ï¼š<a href="http://www.PostgreSQL.org/docs">http://www.PostgreSQL.org/docs</a>。 +</p> + +<p> + 有两本关于PostgreSQL的书在线æ供,在 + <a href="http://www.PostgreSQL.org/docs/awbook.html">http://www.PostgreSQL.org/docs/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"></a>1.11) æˆ‘åº”è¯¥æ€Žæ ·å¦ä¹ SQL ? </h3> + +<p> + 首先考虑上述æ到的与PostgreSQL相关的书ç±ï¼Œå¦å¤–一本是<i>Teach Yourself SQL in 21 Days, Second Edition</i>,其详细介ç»çš„网å€æ˜¯ + <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"></a>1.12)如何æ交补ä¸æˆ–æ˜¯åŠ å…¥å¼€å‘队ä¼ï¼Ÿ </h3> +<p> + 详è§<a href="http://www.postgresql.org/docs/faqs.FAQ_DEV.html"> å¼€å‘人员常è§é—®é¢˜ (Developer's FAQ) </a>。 + +</p> + + +<h3> <a name="1.13"></a>1.13)PostgreSQL和其他数æ®åº“系统比起æ¥å¦‚何? </h3> + +<p> +è¯„ä»·è½¯ä»¶æœ‰å¥½å‡ ç§æ–¹æ³•ï¼šåŠŸèƒ½ï¼Œæ€§èƒ½ï¼Œå¯é 性,支æŒå’Œä»·æ ¼ã€‚ +</p> + +<dl> + <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> + +</dl> + + + +<hr/> + + +<h2><a name="用户客户端问题"></a> 用户客户端问题 </h2> + + +<h3> <a name="2.1"></a>2.1) 我们å¯ä»¥ç”¨ä»€ä¹ˆè¯è¨€å’ŒPostgreSQL打交é“? </h3> + +<p>PostgreSQL(缺çœæƒ…况)åªå®‰è£…有C和内嵌å¼C的接å£ï¼Œå…¶ä»–的接å£éƒ½æ˜¯ç‹¬ç«‹çš„项目,能够分别下载,这些接å£é¡¹ç›®ç‹¬ç«‹çš„好处 + 是他们å¯ä»¥æœ‰å„自的å‘布计划和å„自独立的开å‘组。 +</p> +<p> + 一些编程è¯è¨€å¦‚PHP都有访问PostgreSQL的接å£ï¼ŒPerlã€TCLã€Python以åŠå¾ˆå¤šå…¶ä»–è¯è¨€çš„接å£åœ¨ + <a href="http://gborg.postgresql.org" target="_top">http://gborg.postgresql.org</a>网站上的<i>Drivers/Interfaces</i>å°èŠ‚å¯æ‰¾åˆ°ï¼Œ + 并且通过Internet很容易æœç´¢åˆ°ã€‚ +</p> + + + + +<h3> <a name="2.2"></a>2.2) 有什么工具å¯ä»¥æŠŠPostgreSQL用于 Web 页é¢ï¼Ÿ </h3> +<p> + 一个介ç»ä»¥æ•°æ®åº“为åŽå°çš„挺ä¸é”™çš„站点是:<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"></a>2.3)PostgreSQL拥有图形用户界é¢å—? </h3> +<p> + 商业用户或是开æºå¼€å‘人员能找到很多的有关PostgreSQLçš„GUI图形工具软件,在 <a href="http://www.postgresql.org/docs/techdocs.54">PostgreSQL社区文档</a>有一个详细的列表。 +</p> + + +<hr/> + + + +<h2><a name="系统管ç†é—®é¢˜"></a> 系统管ç†é—®é¢˜ </h2> + +<h3> <a name="3.1"></a>3.1)æˆ‘æ€Žæ ·èƒ½æŠŠPostgreSQL装在 /usr/local/pgsql 以外的地方? </h3> +<p> + 在è¿è¡Œ configure æ—¶åŠ ä¸Š --prefix 选项。 +</p> + + + +<h3> <a name="3.2"></a>3.2) 我如何控制æ¥è‡ªå…¶ä»–电脑的连接? </h3> +<p> + 缺çœæƒ…况下,PostgreSQLåªå…许æ¥è‡ªæœ¬æœºä¸”通过 unix 域套接å—或TCP/IPæ–¹å¼çš„连接。 + ä½ åªæœ‰åœ¨ä¿®æ”¹äº†é…置文件<i>postgresql.conf</i>ä¸çš„<i>listen_addresses</i>,且也在é…置文件<i>$PGDATA/pg_hba.conf</i>ä¸æ‰“开了 + 基于远程电脑( host-based )的身份认è¯ï¼Œå¹¶é‡æ–°å¯åŠ¨PostgreSQL,å¦åˆ™å…¶ä»–电脑是ä¸èƒ½ä¸Žä½ çš„PostgreSQLæœåŠ¡å™¨è¿›è¡Œè¿žæŽ¥çš„。 +</p> + + +<h3> <a name="3.3"></a>3.3) æˆ‘æ€Žæ ·è°ƒæ•´æ•°æ®åº“引擎以获得更好的性能? </h3> + + +<p> + 有三个主è¦æ–¹é¢å¯ä»¥æå‡PostgreSQL的潜能。 +</p> + +<dl> + <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>ä¸çš„很多设置都会影å“性能,所有å‚数的列表å¯è§ï¼š + <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>。 + </dd> + + <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"></a>3.4)PostgreSQL里å¯ä»¥èŽ·å¾—ä»€ä¹ˆæ ·çš„è°ƒè¯•ç‰¹æ€§ï¼Ÿ </h3> + + +<p>PostgreSQL 有很多类似<code> log_* </code>çš„æœåŠ¡å™¨é…ç½®å˜é‡å¯ç”¨äºŽæŸ¥è¯¢çš„打å°å’Œè¿›ç¨‹ç»Ÿè®¡ï¼Œè€Œè¿™äº›å·¥ä½œå¯¹è°ƒè¯•å’Œæ€§èƒ½æµ‹è¯•å¾ˆæœ‰å¸®åŠ©ã€‚ +</p> + + + +<h3> <a name="3.5"></a>3.5) 为什么在试图连接时收到“Sorry, too many clients(已有太多用户连接)â€æ¶ˆæ¯ï¼Ÿ </h3> +<p> + è¿™è¡¨ç¤ºä½ å·²è¾¾åˆ°ç¼ºçœ100个并å‘åŽå°è¿›ç¨‹æ•°çš„é™åˆ¶ï¼Œä½ 需è¦é€šè¿‡ä¿®æ”¹<i>postgresql.conf</i>文件ä¸çš„<i>max_connections</i>å€¼æ¥ + å¢žåŠ postmasterçš„åŽå°å¹¶å‘处ç†æ•°ï¼Œä¿®æ”¹åŽéœ€é‡æ–°å¯åŠ¨<i>postmaster</i>。 + +</p> + + +<h3> <a name="3.6"></a>3.6)PostgreSQLçš„å‡çº§è¿‡ç¨‹æœ‰å“ªäº›å†…容 ? </h3> +<p> + PostgreSQL å¼€å‘组对æ¯æ¬¡å°ç‰ˆæœ¬çš„å‡çº§ä¸»è¦åªåšäº†ä¸€äº›Bugä¿®æ£å·¥ä½œï¼Œå› æ¤ä»Ž 7.4.8 å‡çº§åˆ° 7.4.9 ä¸éœ€è¦ dump å’Œ restore,仅需è¦åœæ¢æ•°æ®åº“æœåŠ¡å™¨ï¼Œå®‰è£…æ›´æ–°åŽçš„软件包,然åŽé‡å¯æœåŠ¡å™¨å³å¯ã€‚ +</p> +<p> + 所有PostgreSQLçš„ç”¨æˆ·åº”è¯¥åœ¨æœ€æŽ¥è¿‘ï¼ˆä½ æ‰€ä½¿ç”¨çš„ä¸»ç‰ˆæœ¬ï¼‰çš„å°æ”¹è¿›ç‰ˆæœ¬å‘布尽快å‡çº§ã€‚尽管æ¯æ¬¡å‡çº§å¯èƒ½éƒ½æœ‰ä¸€ç‚¹é£Žé™©ï¼ŒPostgreSQLçš„å°æ”¹è¿›ç‰ˆä»…仅是设计用æ¥ä¿®æ£ä¸€äº›Bug的,代ç 改动较少,所以风险还是很å°çš„。PostgreSQL社区认为一般情况下ä¸å‡çº§çš„风险还是多于å‡çº§çš„。 +</p> +<p> + 主版本的å‡çº§ï¼ˆä¾‹å¦‚从 7.3 到 7.4)通常会修改系统表和数æ®è¡¨çš„å†…éƒ¨æ ¼å¼ã€‚ + 这些改å˜ä¸€èˆ¬æ¯”较å¤æ‚ï¼Œå› æ¤æˆ‘们ä¸ç»´æŒæ•°æ®æ–‡ä»¶çš„å‘åŽå…¼å®¹æ€§ã€‚å› æ¤ä»Žè€ç‰ˆæœ¬ä¸è¿›è¡Œæ•°æ®å¯¼å‡ºï¼ˆdump)/然åŽåœ¨æ–°ç‰ˆæœ¬ä¸è¿›è¡Œæ•°æ®å¯¼å…¥ï¼ˆreload)对主版本的å‡çº§æ˜¯å¿…须的。 + +</p> + +<h3> <a name="3.7"></a>3.7)(使用PostgreSQL)我需è¦ä½¿ç”¨ä»€ä¹ˆè®¡ç®—机硬件 ? </h3> +<p> + 由于计算机硬件大多数是兼容的,人们总是倾å‘于相信所有计算机硬件质é‡ä¹Ÿæ˜¯ç›¸åŒçš„。事实上ä¸æ˜¯ï¼Œ + ECC RAM(带奇å¶æ ¡éªŒçš„内å˜ï¼‰ï¼ŒSCSI (硬盘)和优质的主æ¿æ¯”一些便宜货è¦æ›´åŠ å¯é 且具有更好的性能。PostgreSQLå‡ ä¹Žå¯ä»¥è¿è¡Œåœ¨ä»»ä½•ç¡¬ä»¶ä¸Šï¼Œ + 但如果å¯é æ€§å’Œæ€§èƒ½å¯¹ä½ çš„ç³»ç»Ÿå¾ˆé‡è¦ï¼Œä½ 就需è¦å…¨é¢çš„ç ”ç©¶ä¸€ä¸‹ä½ çš„ç¡¬ä»¶é…置了。在我们的邮件列表上也有关于 + 硬件é…置和性价比的讨论。 +</p> + + +<hr/> + +<h2><a name="æ“作问题"></a> æ“作问题 </h2> + + + +<h3> <a name="4.1"></a>4.1) 如何åªé€‰æ‹©ä¸€ä¸ªæŸ¥è¯¢ç»“æžœçš„å¤´å‡ è¡Œï¼Ÿæˆ–æ˜¯éšæœºçš„一行? </h3> +<p> + å¦‚æžœä½ åªæ˜¯è¦æå–å‡ è¡Œæ•°æ®ï¼Œå¹¶ä¸”ä½ åœ¨æ‰§è¡ŒæŸ¥è¯¢ä¸çŸ¥é“ç¡®åˆ‡çš„è¡Œæ•°ï¼Œä½ å¯ä»¥ä½¿ç”¨LIMIT功能。 + 如果有一个索引与 <i> ORDER BY</i>ä¸çš„æ¡ä»¶åŒ¹é…,PostgreSQL å¯èƒ½å°±åªå¤„ç†è¦æ±‚çš„å¤´å‡ æ¡è®°å½•ï¼Œ + (å¦åˆ™å°†å¯¹æ•´ä¸ªæŸ¥è¯¢è¿›è¡Œå¤„ç†ç›´åˆ°ç”Ÿæˆéœ€è¦çš„行)。如果在执行查询功能时ä¸çŸ¥é“确切的记录数, + å¯ä½¿ç”¨æ¸¸æ ‡(cursor)å’ŒFETCH功能。 +</p> +<p> + å¯ä½¿ç”¨ä»¥ä¸‹æ–¹æ³•æå–一行éšæœºè®°å½•çš„: +</p> +<pre> + SELECT cols + FROM tab + ORDER BY random() + LIMIT 1 ; + +</pre> + + + +<h3> <a name="4.2"></a>4.2) 如何查看表ã€ç´¢å¼•ã€æ•°æ®åº“以åŠç”¨æˆ·çš„定义?如何查看<i>psql</i>里用到的查询指令并显示它们? </h3> +<p> + 在<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接å£ï¼Œ + ä½ å¯ä»¥ä»Žè¿™é‡ŒèŽ·å–关于数æ®åº“çš„ä¿¡æ¯ã€‚ + +</p> +<p> + 在系统ä¸ä¹Ÿæœ‰ä¸€äº›ä»¥<i>pg_</i> 打头的系统表也æ述了表的定义。 +</p> +<p> + 使用 <i>psql -l</i> 指令å¯ä»¥åˆ—出所有的数æ®åº“。 +</p> +<p> + 也å¯ä»¥æµè§ˆä¸€ä¸‹ <i>pgsql/src/tutorial/syscat.source</i>文件,它列举了很多å¯ä»Žæ•°æ®åº“系统表ä¸èŽ·å–ä¿¡æ¯çš„SELECTè¯æ³•ã€‚ + +</p> + + +<h3> <a name="4.3"></a>4.3) 如何更改一个å—段的数æ®ç±»åž‹ï¼Ÿ </h3> +<p> + 在8.0版本里更改一个å—段的数æ®ç±»åž‹å¾ˆå®¹æ˜“,å¯ä½¿ç”¨ ALTER TABLE ALTER COLUMN TYPE 。 +</p> +<p> + 在以å‰çš„版本ä¸ï¼Œå¯ä»¥è¿™æ ·åšï¼š +</p> +<pre> + 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; + +</pre> +<p> + ä½ ç„¶åŽå¯ä»¥ä½¿ç”¨<i>VACUUM FULL tab </i>指令æ¥ä½¿ç³»ç»Ÿæ”¶å›žæ— 效数æ®æ‰€å 用的空间。 +</p> + +<h3> <a name="4.4"></a>4.4) å•æ¡è®°å½•ï¼Œå•ä¸ªè¡¨ï¼Œå•ä¸ªæ•°æ®åº“的最大é™åˆ¶æ˜¯å¤šå°‘? </h3> +<p> + 下é¢æ˜¯ä¸€äº›é™åˆ¶ï¼š +</p> +<blockquote> + <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> + 当然,实际上没有真æ£çš„æ— é™åˆ¶ï¼Œè¿˜æ˜¯è¦å—å¯ç”¨ç£ç›˜ç©ºé—´ã€å¯ç”¨å†…å˜/交æ¢åŒºçš„制约。 + 事实上,当上述这些数值å˜å¾—异常地大时,系统性能也会å—很大影å“。 +</p> + +<p> + å•è¡¨çš„æœ€å¤§å¤§å° 32 TB ä¸éœ€è¦æ“作系统对å•ä¸ªæ–‡ä»¶ä¹Ÿéœ€è¿™ä¹ˆå¤§çš„支æŒã€‚大表用多个 1 GB 的文件å˜å‚¨ï¼Œå› æ¤æ–‡ä»¶ç³»ç»Ÿå¤§å°çš„é™åˆ¶æ˜¯ä¸é‡è¦çš„。 +</p> +<p> + 如果缺çœçš„å—大å°å¢žé•¿åˆ° 32K ,最大的å•è¡¨å¤§å°å’Œæœ€å¤§åˆ—数还å¯ä»¥å¢žåŠ 到四å€ã€‚ +</p> +<p> + 有一个é™åˆ¶å°±æ˜¯ä¸èƒ½å¯¹å¤§å°å¤šäºŽ2000å—节的列创建索引。幸è¿åœ°æ˜¯è¿™æ ·çš„索引很少用到。通过对多å—节列的内容进行MD5哈稀è¿ç®—结果进行函数索引å¯å¯¹åˆ—的唯一性得到ä¿è¯ï¼Œ + 并且全文检索å…许对列ä¸çš„å•è¯è¿›è¡Œæœç´¢ã€‚ +</p> + + +<h3> <a name="4.5"></a>4.5) å˜å‚¨ä¸€ä¸ªå…¸åž‹çš„文本文件里的数æ®éœ€è¦å¤šå°‘ç£ç›˜ç©ºé—´ï¼Ÿ </h3> +<p> + 一个 Postgres æ•°æ®åº“(å˜å‚¨ä¸€ä¸ªæ–‡æœ¬æ–‡ä»¶ï¼‰æ‰€å 用的空间最多å¯èƒ½éœ€è¦ç›¸å½“于这个文本文件自身大å°5å€çš„ç£ç›˜ç©ºé—´ã€‚ +</p> +<p> + 例如,å‡è®¾æœ‰ä¸€ä¸ª 100,000 行的文件,æ¯è¡Œæœ‰ä¸€ä¸ªæ•´æ•°å’Œä¸€ä¸ªæ–‡æœ¬æ述。 + å‡è®¾æ–‡æœ¬ä¸²çš„å¹³å‡é•¿åº¦ä¸º20å—节。文本文件å 用 2.8 MB。å˜æ”¾è¿™äº›æ•°æ®çš„PostgreSQLæ•°æ®åº“文件大约是 6.4 MB: +</p> +<pre> + 28 å—节: æ¯è¡Œçš„头(大约值) + 24 å—节: 一个整数型å—段和一个文本型å—段 + + 4 å—节: 页é¢å†…指å‘元组的指针 + ---------------------------------------- + 56 å—节æ¯è¡Œ + + PostgreSQL æ•°æ®é¡µçš„大å°æ˜¯ 8192 å—节 (8 KB),则: + + 8192 å—节æ¯é¡µ + ------------------- = 146 è¡Œ/æ•°æ®é¡µï¼ˆå‘下å–整) + 56 å—节æ¯è¡Œ + + 100000 æ•°æ®è¡Œ + -------------------- = 685 æ•°æ®é¡µï¼ˆå‘上å–整) + 146 è¡Œ/æ•°æ®é¡µ + + 685 æ•°æ®é¡µ * 8192 å—节/页 = 5,611,520 å—节(5.6 MB) +</pre> + + +<p> + 索引ä¸éœ€è¦è¿™ä¹ˆå¤šçš„é¢å¤–消耗,但也确实包括被索引的数æ®ï¼Œå› æ¤å®ƒä»¬ä¹Ÿå¯èƒ½å¾ˆå¤§ã€‚ +</p> +<p> + 空值<i>NULL</i>å˜æ”¾åœ¨ä½å›¾ä¸ï¼Œå› æ¤å 用很少的空间。 +</p> + +<h3> <a name="4.6"></a>4.6) 为什么我的查询很慢?为什么这些查询没有利用索引? </h3> +<p> + 并éžæ¯ä¸ªæŸ¥è¯¢éƒ½ä¼šè‡ªåŠ¨ä½¿ç”¨ç´¢å¼•ã€‚åªæœ‰åœ¨è¡¨çš„大å°è¶…过一个最å°å€¼ï¼Œå¹¶ä¸”查询åªä¼šé€‰ä¸è¡¨ä¸è¾ƒå°æ¯”例的记录时æ‰ä¼šé‡‡ç”¨ç´¢å¼•ã€‚ + è¿™æ˜¯å› ä¸ºç´¢å¼•æ‰«æ引起的éšå³ç£ç›˜å˜å–å¯èƒ½æ¯”直接地读å–表(顺åºæ‰«æ)更慢。 + +</p> +<p> + 为了判æ–是å¦ä½¿ç”¨ç´¢å¼•ï¼ŒPostgreSQL必须获得有关表的统计值。这些统计值å¯ä»¥ä½¿ç”¨ VACUUM ANALYZE,或 ANALYZE 获得。 + 使用统计值,优化器知é“表ä¸æœ‰å¤šå°‘行,就能够更好地判æ–是å¦åˆ©ç”¨ç´¢å¼•ã€‚ + 统计值对确定优化的连接顺åºå’Œè¿žæŽ¥æ–¹æ³•ä¹Ÿå¾ˆæœ‰ç”¨ã€‚在表的内容å‘生å˜åŒ–时,应定期进行统计值的更新收集。 +</p> +<p> + 索引通常ä¸ç”¨äºŽ ORDER BY 或执行连接。对一个大表的一次顺åºæ‰«æå†åšä¸€æ¬¡æŽ’åºé€šå¸¸æ¯”索引扫æè¦å¿«ã€‚然而,如果将 LIMIT å’Œ ORDER BY + 结åˆåœ¨ä¸€èµ·ä½¿ç”¨çš„è¯ï¼Œé€šå¸¸å°†ä¼šä½¿ç”¨ç´¢å¼•ï¼Œå› 为这时仅返回表ä¸çš„一å°éƒ¨åˆ†è®°å½•ã€‚ +</p> +<p> + å¦‚æžœä½ ç¡®ä¿¡PostgreSQL的优化器使用顺åºæ‰«æ是ä¸æ£ç¡®çš„ï¼Œä½ å¯ä»¥ä½¿ç”¨<code>SET enable_seqscan TO 'off'</code>指令æ¥å…³é—顺åºæ‰«æ, + 然åŽå†æ¬¡è¿è¡ŒæŸ¥è¯¢ï¼Œä½ å°±å¯ä»¥çœ‹å‡ºä½¿ç”¨ä¸€ä¸ªç´¢å¼•æ‰«æ是å¦ç¡®å®žè¦å¿«ä¸€äº›ã€‚ +</p> + +<p> + + 当使用通é…符æ“作,例如 <i>LIKE</i> 或 <i>~</i> 时,索引åªèƒ½åœ¨ç‰¹å®šçš„情况下使用: +</p> +<ul> + <li>å—符串的开始部分必须是普通å—符串,也就是说: + <ul> + <li> <i>LIKE</i> 模å¼ä¸èƒ½ä»¥ <i>%</i> 打头。</li> + + <li> <i>~</i> (æ£åˆ™è¡¨è¾¾å¼ï¼‰æ¨¡å¼å¿…须以 <i>^</i> 打头。</li> + </ul> + </li> + <li>å—符串ä¸èƒ½ä»¥åŒ¹é…多个å—符的模å¼ç±»æ‰“头,例如 [a-e]。</li> + <li>大å°å†™æ— 关的查找,如 ILIKE å’Œ ~* ç‰ä¸ä½¿ç”¨ç´¢å¼•ï¼Œä½†å¯ä»¥ç”¨ <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"></a>4.7) 我如何æ‰èƒ½çœ‹åˆ°æŸ¥è¯¢ä¼˜åŒ–å™¨æ˜¯æ€Žæ ·è¯„ä¼°å¤„ç†æˆ‘的查询? </h3> + + +<p>å‚考 <small>EXPLAIN</small> 手册页。</p> + +<h3> <a name="4.8"></a>4.8) æˆ‘æ€Žæ ·åšæ£åˆ™è¡¨è¾¾å¼æœç´¢å’Œå¤§å°å†™æ— 关的æ£åˆ™è¡¨è¾¾å¼æŸ¥æ‰¾ï¼Ÿæ€Žæ ·åˆ©ç”¨ç´¢å¼•è¿›è¡Œå¤§å°å†™æ— 关查找? </h3> +<p> + æ“作符 <i> ~ </i> 处ç†æ£åˆ™è¡¨è¾¾å¼åŒ¹é…,而 <i>~*</i> 处ç†å¤§å°å†™æ— 关的æ£åˆ™è¡¨è¾¾å¼åŒ¹é…。大å°å†™æ— 关的 LIKE å˜ç§æˆä¸º ILIKE。 + +</p> +<p> + 大å°å†™æ— 关的ç‰å¼æ¯”较通常写åšï¼š +</p> +<pre> + SELECT * + FROM tab + WHERE lower(col) = 'abc'; +</pre> + +<p> + è¿™æ ·å°†ä¸ä¼šä½¿ç”¨æ ‡å‡†çš„索引。但是å¯ä»¥åˆ›å»ºä¸€ä¸ªåœ¨è¿™ç§æƒ…况下使用的表达å¼ç´¢å¼•: +</p> +<pre> + CREATE INDEX tabindex ON tab (lower(col)); + +</pre> +<p> + å¦‚æžœä¸Šè¿°ç´¢å¼•åœ¨åˆ›å»ºæ—¶åŠ å…¥UNIQUE约æŸï¼Œè™½ç„¶ç´¢å¼•å—段自身内容å¯ä»¥å˜å‚¨å¤§å°å†™ä¸é™çš„内容,但如果有UNIQUE约æŸåŽï¼Œè¿™äº›å†…容ä¸èƒ½ä»…仅是大å°å†™ä¸åŒï¼ˆå¦åˆ™ä¼šé€ æˆå†²çªï¼‰ã€‚为了ä¿è¯ä¸å‘生这ç§æƒ…况,å¯ä»¥ä½¿ç”¨CHECK约æŸæ¡ä»¶æˆ–是触å‘器在录入时进行é™åˆ¶ã€‚ +</p> + + +<h3> <a name="4.9"></a>4.9) åœ¨ä¸€ä¸ªæŸ¥è¯¢é‡Œï¼Œæˆ‘æ€Žæ ·æ£€æµ‹ä¸€ä¸ªå—段是å¦ä¸º <i>NULL</i> ?我如何æ‰èƒ½å‡†ç¡®æŽ’åºè€Œä¸è®ºæŸå—段是å¦å« <i>NULL</i> 值? </h3> +<p> + + 用 <small>IS NULL</small> å’Œ <small>IS NOT NULL</small> 测试这个å—段,具体方法如下: +</p> +<pre> SELECT * + FROM tab + WHERE col IS NULL; +</pre> + +<p>ä¸ºäº†èƒ½å¯¹å« <small>NULL</small>å—段排åºï¼Œå¯åœ¨ <small>ORDER BY</small> æ¡ä»¶ä¸ä½¿ç”¨ <small>IS NULL</small>å’Œ + <small>IS NOT NULL</small> 修饰符,æ¡ä»¶ä¸ºçœŸ <i>true</i> 将比æ¡ä»¶ä¸ºå‡<i>false</i> 排在å‰é¢ï¼Œä¸‹é¢çš„例åå°±ä¼šå°†å« + NULL 的记录排在结果的上é¢éƒ¨åˆ†ï¼š + +</p> +<pre> SELECT * + FROM tab + ORDER BY (col IS NOT NULL) +</pre> + +<h3> <a name="4.10"></a>4.10) å„ç§å—符类型之间有什么ä¸åŒï¼Ÿ </h3> +<blockquote> + <table> + <tbody> + <tr><th>类型</th><th>内部å称</th><th>说明</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> + 在系统表和在一些错误信æ¯é‡Œä½ 将看到内部å称。 +</p> +<p> + 上é¢æ‰€åˆ—çš„å‰å››ç§ç±»åž‹æ˜¯"varlena"(å˜é•¿ï¼‰ç±»åž‹ï¼ˆä¹Ÿå°±æ˜¯è¯´ï¼Œå¼€å¤´çš„四个å—节是长度,åŽé¢æ‰æ˜¯æ•°æ®ï¼‰ã€‚ + 于是实际å 用的空间比声明的大å°è¦å¤šä¸€äº›ã€‚ + 然而这些类型如定义很长时都å¯ä»¥è¢«åŽ‹ç¼©å˜å‚¨ï¼Œå› æ¤ç£ç›˜ç©ºé—´ä¹Ÿå¯èƒ½æ¯”预想的è¦å°‘。 + +</p> +<p> + <small>VARCHAR(n)</small> 在å˜å‚¨é™åˆ¶äº†æœ€å¤§é•¿åº¦çš„å˜é•¿å—符串是最好的。 + <small>TEXT</small> 适用于å˜å‚¨æœ€å¤§å¯è¾¾ 1Gå·¦å³ä½†æœªå®šä¹‰é™åˆ¶é•¿åº¦çš„å—符串。 +</p> +<p> + <small>CHAR(n)</small> 最适åˆäºŽå˜å‚¨é•¿åº¦ç›¸åŒçš„å—符串。 <small>CHAR(n)</small>ä¼šæ ¹æ®æ‰€ç»™å®šçš„å—æ®µé•¿åº¦ä»¥ç©ºæ ¼è¡¥è¶³ï¼ˆä¸è¶³çš„å—段内容), + 而 <small>VARCHAR(n)</small> åªå˜å‚¨æ‰€ç»™å®šçš„æ•°æ®å†…容。 + <small>BYTEA</small> 用于å˜å‚¨äºŒè¿›åˆ¶æ•°æ®ï¼Œå°¤å…¶æ˜¯åŒ…å« NULL å—节的值。这些类型具有差ä¸å¤šçš„性能。 + +</p> + + + +<h3> <a name="4.11.1"></a>4.11.1) æˆ‘æ€Žæ ·åˆ›å»ºä¸€ä¸ªåºåˆ—å·æˆ–是自动递增的å—段? </h3> +<p>PostgreSQL æ”¯æŒ SERIAL æ•°æ®ç±»åž‹ã€‚(å—段定义为SERIALåŽï¼‰å°†è‡ªåŠ¨åˆ›å»ºä¸€ä¸ªåºåˆ—生æˆå™¨ï¼Œä¾‹å¦‚: +</p> +<pre> + CREATE TABLE person ( + id SERIAL, + name TEXT + ); +</pre> +<p> + 会自动转æ¢ä¸ºä»¥ä¸‹SQLè¯å¥ï¼š +</p> + +<pre> + CREATE SEQUENCE person_id_seq; + CREATE TABLE person ( + id INT4 NOT NULL DEFAULT nextval('person_id_seq'), + name TEXT + ); +</pre> +<p> + å‚考 create_sequence 手册页获å–关于åºåˆ—生æˆå™¨çš„更多信æ¯ã€‚ +</p> + + +<h3> <a name="4.11.2"></a>4.11.2) 我如何获得一个æ’入的åºåˆ—å·çš„值? </h3> +<p> + 一ç§æ–¹æ³•æ˜¯åœ¨æ’入之å‰å…ˆç”¨å‡½æ•° nextval() 从åºåˆ—对象里检索出下一个 SERIAL 值,然åŽå†ç”¨æ¤å€¼ç²¾ç¡®åœ°æ’入。使用 + <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"></a>4.11.3) åŒæ—¶ä½¿ç”¨ <i>currval()</i> 会导致和其他用户的冲çªæƒ…况å—? </h3> +<p> + ä¸ä¼šã€‚<i>currval()</i> è¿”å›žçš„æ˜¯ä½ æœ¬æ¬¡ä¼šè¯è¿›ç¨‹æ‰€èµ‹çš„值而ä¸æ˜¯æ‰€æœ‰ç”¨æˆ·çš„当å‰å€¼ã€‚<br/> + +</p> + +<h3> <a name="4.11.4"></a>4.11.4) 为什么ä¸åœ¨äº‹åŠ¡å¼‚常ä¸æ¢åŽé‡ç”¨åºåˆ—å·å‘¢ï¼Ÿä¸ºä»€ä¹ˆåœ¨åºåˆ—å·å—段的å–值ä¸å˜åœ¨é—´æ–呢? </h3> +<p> + 为了æ高并å‘性,åºåˆ—å·åœ¨éœ€è¦çš„时候赋予æ£åœ¨è¿è¡Œçš„事务,并且在事务结æŸä¹‹å‰ä¸è¿›è¡Œé”定, + 这就会导致异常ä¸æ¢çš„事务åŽï¼Œåºåˆ—å·ä¼šå‡ºçŽ°é—´éš”。 +</p> + +<h3> <a name="4.12"></a>4.12) 什么是 <small>OID</small> ?什么是 <small>CTID</small> ? </h3> + + +<p>PostgreSQL 里创建的æ¯ä¸€è¡Œè®°å½•éƒ½ä¼šèŽ·å¾—一个唯一的<small>OID</small>,除éžåœ¨åˆ›å»ºè¡¨æ—¶ä½¿ç”¨<small>WITHOUT OIDS</small>选项。 + <small>OID</small>创建时会自动生æˆä¸€ä¸ª4å—节的整数,所有 OID 在相应PostgreSQLæœåŠ¡å™¨ä¸å‡æ˜¯å”¯ä¸€çš„。 然而,它在超过40亿时将溢出, + <small>OID</small>æ¤åŽä¼šå‡ºçŽ°é‡å¤ã€‚PostgreSQL 在它的内部系统表里使用 OID 在表之间建立è”系。 +</p> +<p> + 在用户的数æ®è¡¨ä¸ï¼Œæœ€å¥½æ˜¯ä½¿ç”¨<small>SERIAl</small>æ¥ä»£æ›¿<small>OID</small> + + å› ä¸º<small>SERIAL</small>åªè¦ä¿è¯åœ¨å•ä¸ªè¡¨ä¸çš„数值是唯一的就å¯ä»¥äº†ï¼Œè¿™æ ·å®ƒæº¢å‡ºçš„å¯èƒ½æ€§å°±éžå¸¸å°äº†ï¼Œ + <small>SERIAL8</small>å¯ç”¨æ¥ä¿å˜8å—节的åºåˆ—数值。 +</p> + +<p> + <small>CTID</small> ç”¨äºŽæ ‡è¯†å¸¦ç€æ•°æ®å—(地å€ï¼‰å’Œï¼ˆå—内)å移的特定的物ç†è¡Œã€‚ + <small>CTID</small> 在记录被更改或é‡è½½åŽå‘生改å˜ã€‚索引数æ®ä½¿ç”¨å®ƒä»¬æŒ‡å‘物ç†è¡Œã€‚ +</p> + + + +<h3> <a name="4.13"></a>4.13) 为什么我收到错误信æ¯â€œ<i>ERROR: Memory exhausted in AllocSetAlloc()</i>â€ï¼Ÿ </h3> +<p> + 这很å¯èƒ½æ˜¯ç³»ç»Ÿçš„虚拟内å˜ç”¨å…‰äº†ï¼Œæˆ–è€…å†…æ ¸å¯¹æŸäº›èµ„æºæœ‰è¾ƒä½Žçš„é™åˆ¶å€¼ã€‚在å¯åŠ¨ postmaster 之å‰è¯•è¯•ä¸‹é¢çš„命令: +</p> +<pre> + ulimit -d 262144 + limit datasize 256m +</pre> +<p> + å–å†³äºŽä½ ç”¨çš„ shell,上é¢å‘½ä»¤åªæœ‰ä¸€æ¡èƒ½æˆåŠŸï¼Œä½†æ˜¯å®ƒå°†æŠŠä½ 的进程数æ®æ®µé™åˆ¶è®¾å¾—比较高, + å› è€Œä¹Ÿè®¸èƒ½è®©æŸ¥è¯¢å®Œæˆã€‚è¿™æ¡å‘½ä»¤åº”用于当å‰è¿›ç¨‹ï¼Œä»¥åŠæ‰€æœ‰åœ¨è¿™æ¡å‘½ä»¤è¿è¡ŒåŽåˆ›å»ºçš„å进程。 + å¦‚æžœä½ æ˜¯åœ¨è¿è¡ŒSQLå®¢æˆ·ç«¯æ—¶å› ä¸ºåŽå°è¿”回了太多的数æ®è€Œå‡ºçŽ°é—®é¢˜ï¼Œè¯·åœ¨è¿è¡Œå®¢æˆ·ç«¯ä¹‹å‰æ‰§è¡Œä¸Šè¿°å‘½ä»¤ã€‚ + +</p> + +<h3> <a name="4.14"></a>4.14) 我如何æ‰èƒ½çŸ¥é“所è¿è¡Œçš„PostgreSQL的版本? </h3> +<p> + 从 psql 里,输入 <code>SELECT version();</code>指令。 +</p> + +<h3> <a name="4.15"></a>4.15) 我如何创建一个缺çœå€¼æ˜¯å½“å‰æ—¶é—´çš„å—段? </h3> +<p> + 使用 CURRENT_TIMESTAMP: + +</p> +<pre> + CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); +</pre> + + +<h3> <a name="4.16"></a>4.16) æˆ‘æ€Žæ ·è¿›è¡Œ outer join (外连接)? </h3> +<p>PostgreSQL é‡‡ç”¨æ ‡å‡†çš„ SQL è¯æ³•æ”¯æŒå¤–连接。这里是两个例å:</p> +<pre> + SELECT * + FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col); +</pre> +<p>或是</p> + +<pre> + SELECT * + FROM t1 LEFT OUTER JOIN t2 USING (col); +</pre> +<p> + 这两个ç‰ä»·çš„查询在 t1.col å’Œ t2.col 上åšè¿žæŽ¥ï¼Œå¹¶ä¸”返回 t1 ä¸æ‰€æœ‰æœªè¿žæŽ¥çš„行(那些在 t2 ä¸æ²¡æœ‰åŒ¹é…的行)。 + å³[外]连接(RIGHT OUTER JOIN)将返回 t2 ä¸æœªè¿žæŽ¥çš„行。 + 完全外连接(FULL OUTER JOIN)将返回 t1 å’Œ t2 ä¸æœªè¿žæŽ¥çš„行。 + å…³é”®å— OUTER 在左[外]连接ã€å³[外]连接和完全[外]连接ä¸æ˜¯å¯é€‰çš„,普通连接被称为内连接(INNER JOIN)。 +</p> + + +<h3> <a name="4.17"></a>4.17) 如何使用涉åŠå¤šä¸ªæ•°æ®åº“的查询? </h3> +<p> + 没有办法查询当å‰æ•°æ®åº“之外的数æ®åº“。 + å› ä¸ºPostgreSQLè¦åŠ 载与数æ®åº“ç›¸å…³çš„ç³»ç»Ÿç›®å½•ï¼ˆç³»ç»Ÿè¡¨ï¼‰ï¼Œå› æ¤è·¨æ•°æ®åº“的查询如何执行是ä¸å®šçš„。 +</p> + +<p> + é™„åŠ å¢žå€¼æ¨¡å—contrib/dblinkå…许采用函数调用实现跨库查询。当然用户也å¯ä»¥åŒæ—¶è¿žæŽ¥åˆ°ä¸åŒçš„æ•°æ®åº“执行查询然åŽåœ¨å®¢æˆ·ç«¯åˆå¹¶ç»“果。 +</p> + +<h3> <a name="4.18"></a>4.18) 如何让函数返回多行或多列数æ®ï¼Ÿ </h3> +<p> + 在函数ä¸è¿”回数æ®è®°å½•é›†çš„功能是很容易使用的,详情å‚è§ï¼š + <a href="http://techdocs.postgresql.org/guides/SetReturningFunctions">http://techdocs.postgresql.org/guides/SetReturningFunctions</a> +</p> + +<h3> <a name="4.19"></a>4.19) 为什么我在使用PL/PgSQL函数å˜å–临时表时会收到错误信æ¯â€œrelation with OID ##### does not existâ€ï¼Ÿ </h3> + +<p> + PL/PgSQL会缓å˜å‡½æ•°çš„脚本内容,由æ¤å¸¦æ¥çš„一个ä¸å¥½çš„副作用是若一个 PL/PgSQL + 函数访问了一个临时表,然åŽè¯¥è¡¨è¢«åˆ 除并é‡å»ºäº†ï¼Œåˆ™å†æ¬¡è°ƒç”¨è¯¥å‡½æ•°å°†å¤±è´¥ï¼Œ + å› ä¸ºç¼“å˜çš„函数内容ä»ç„¶æŒ‡å‘旧的临时表。解决的方法是在 PL/PgSQL ä¸ç”¨<small>EXECUTE</small> + å¯¹ä¸´æ—¶è¡¨è¿›è¡Œè®¿é—®ã€‚è¿™æ ·ä¼šä¿è¯æŸ¥è¯¢åœ¨æ‰§è¡Œå‰æ€»ä¼šè¢«é‡æ–°è§£æžã€‚ +</p> + +<h3> <a name="4.20"></a>4.20) ç›®å‰æœ‰å“ªäº›æ•°æ®å¤åˆ¶æ–¹æ¡ˆå¯ç”¨ï¼Ÿ </h3> +<p> + “å¤åˆ¶â€åªæ˜¯ä¸€ä¸ªæœ¯è¯ï¼Œæœ‰å¥½å‡ ç§å¤åˆ¶æŠ€æœ¯å¯ç”¨ï¼Œæ¯ç§éƒ½æœ‰ä¼˜ç‚¹å’Œç¼ºç‚¹ï¼š +</p> +<p> + + 主/从å¤åˆ¶æ–¹å¼æ˜¯å…许一个主æœåŠ¡å™¨æŽ¥å—读/写的申请,而多个从æœåŠ¡å™¨åªèƒ½æŽ¥å—读/<small>SELECT</small>查询的申请, + ç›®å‰æœ€æµè¡Œä¸”å…费的主/从PostgreSQLå¤åˆ¶æ–¹æ¡ˆæ˜¯ + <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