--- /dev/null
+
+ PostgreSQL 常è¦åé¡ï¼FAQï¼
+
+ æè¿æ´æ°ï¼2007 å¹´ 2 æ 8 æ¥ ææäº 22:43:13 EST
+ 䏿çæè¿æ´æ°ï¼2007 å¹´ 2 æ 12 æ¥ ææä¸ 12:00:04 CST
+
+
+ æ¬ææªçææ°çæ¬å¯ä»¥å¨
+ http://www.postgresql.org/files/documentation/faqs/FAQ.html æ¥çã
+
+ è使¥ç³»çµ±å¹³å°ç¸éçåé¡å¯å¨ http://www.postgresql.org/docs/faq/
+ 裡æ¾å°çæ¡ã
+ _________________________________________________________________
+
+常è¦åé¡
+
+ 1.1)PostgreSQL æ¯ä»éº¼ï¼è©²æéº¼ç¼é³ï¼
+ 1.2)誰æ§å¶å管çPostgreSQL ï¼
+ 1.3)PostgreSQLççæ¬æ¯ä»éº¼ï¼
+ 1.4)PostgreSQLå¯ä»¥éè¡å¨åªäºä½æ¥ç³»çµ±å¹³å°ä¸ï¼
+ 1.5)æå¾åªè£¡è½å¾å°PostgreSQLï¼
+ 1.6)ææ°çç PostgreSQL æ¯ä»éº¼ï¼
+ 1.7)æå¾åªè£¡è½å¾å°å° PostgreSQL çæ¯æï¼
+ 1.8)æå¦ä½æäº¤ä¸å BUG å ±åï¼
+ 1.9)æå¦ä½ç解已ç¥ç BUG ææ«ç¼ºçåè½ï¼
+ 1.10)è½å¤ ç²åçææ°ææªæåªäºï¼
+ 1.11)ææè©²ææ¨£å¸ç¿ SQL ï¼
+ 1.12)å¦ä½æäº¤è£ä¸ææ¯å å¥éç¼éä¼ï¼
+ 1.13)PostgreSQL åå¶ä»è³æåº«ç³»çµ±æ¯èµ·ä¾å¦ä½ï¼
+ 1.14)PostgreSQL å¯ä»¥èçæè¿ååå家夿å¶çè®ååï¼
+
+ç¨æ¶å®¢æ¶ç«¯åé¡
+
+ 2.1)æåå¯ä»¥ç¨ä»éº¼èªè¨å PostgreSQL é²è¡æºéï¼
+ 2.2)æä»éº¼å·¥å·å¯ä»¥æ PostgreSQL ç¨æ¼ Web é é¢ï¼
+ 2.3)PostgreSQL ææåå½¢ç¨æ¶çé¢(GUI)åï¼
+
+系統管çåé¡
+
+ 3.1)æææ¨£æè½æ PostgreSQL è£å¨ /usr/local/pgsql 以å¤çå°æ¹ï¼
+ 3.2)æå¦ä½æ§å¶ä¾èªå¶ä»é»è¦ç飿¥ï¼
+ 3.3)æææ¨£èª¿æ´è³æåº«ä¼ºæå¨ä»¥ç²å¾æ´å¥½çæ§è½ï¼
+ 3.4)PostgreSQL 裡å¯ä»¥ç²å¾ä»éº¼æ¨£çèª¿è©¦ç¹æ§ï¼
+ 3.5)çºä»éº¼å¨è©¦å飿¥ç»éææ¶å°ãSorry, too many clientsã è¨æ¯ï¼
+ 3.6)PostgreSQL çåç´éç¨æåªäºå§å®¹ï¼
+ 3.7)(ä½¿ç¨ PostgreSQL )æéè¦ä½¿ç¨ä»éº¼é»è¦ç¡¬é«ï¼
+
+æä½åé¡
+
+ 4.1) å¦ä½åªé¸æä¸åæ¥è©¢çµæçé å¹¾è¡ï¼ææ¯é¨æ©çä¸è¡ï¼
+ 4.2) å¦ä½æ¥ç表ãç´¢å¼ãè³æåº«ä»¥åç¨æ¶çå®ç¾©ï¼å¦ä½æ¥ç psql
+ 裡ç¨å°çæ¥è©¢æä»¤ä¸¦é¡¯ç¤ºå®åï¼
+ 4.3) å¦ä½æ´æ¹ä¸åæ¬ä½çè³æé¡åï¼
+ 4.4) å®çè¨éï¼å®ä¸è¡¨ï¼ä¸åè³æåº«çæå¤§éå¶æ¯å¤å°ï¼
+ 4.5) åå²ä¸åå¸åçææ¬æä»¶è£¡çè³æéè¦å¤å°ç£ç¢ç©ºéï¼
+ 4.6) çºä»éº¼æçæ¥è©¢å¾æ¢ï¼çºä»éº¼éäºæ¥è©¢æ²æå©ç¨ç´¢å¼ï¼
+ 4.7) æå¦ä½æè½çå°æ¥è©¢åªå卿¯ææ¨£è©ä¼°èçæçæ¥è©¢çï¼
+ 4.8) æææ¨£åæ£å表éå¼æç´¢å大å°å¯«ç¡éçæ
+ £å表é弿¥æ¾ï¼ææ¨£å©ç¨ç´¢å¼é²è¡å¤§å°å¯«ç¡éæ¥æ¾ï¼
+ 4.9) å¨ä¸åæ¥è©¢è£¡ï¼æææ¨£æª¢æ¸¬ä¸åæ¬ä½æ¯å¦çº
+ NULLï¼æå¦ä½æè½æºç¢ºæåºèä¸è«ææ¬ä½æ¯å¦å«NULLå¼ï¼
+ 4.10) å種å符é¡åä¹éæä»éº¼ä¸åï¼
+ 4.11.1) æææ¨£åµå»ºä¸ååºåèåææ¯èªåéå¢çæ¬ä½ï¼
+ 4.11.2) æå¦ä½ç²å¾ä¸åæå¥çåºåèçå¼ï¼
+ 4.11.3) åæä½¿ç¨ currval() æå°è´åå¶ä»ç¨æ¶çè¡çªææ³åï¼
+ 4.11.4) çºä»éº¼ä¸å¨äºåç°å¸¸ä¸æ¢å¾éç¨åºåèå¢ï¼çºä»éº¼å¨åºåèæ¬ä½çåå¼ä¸
+ åå¨éæ·å¢ï¼
+ 4.12) ä»éº¼æ¯ OIDï¼ä»éº¼æ¯ CTID ï¼
+ 4.13) çºä»éº¼ææ¶å°é¯èª¤è³è¨ãERROR: Memory exhausted in
+ AllocSetAlloc()ãï¼
+ 4.14) æå¦ä½æè½ç¥éæéè¡ç PostgreSQL ççæ¬ï¼
+ 4.15) æå¦ä½åµå»ºä¸åé è¨å¼æ¯ç¶åæéçæ¬ä½ï¼
+ 4.16) å¦ä½å·è¡å¤é£æ¥ï¼outer joinï¼æ¥è©¢ï¼
+ 4.17) å¦ä½å·è¡æ¶åå¤åè³æåº«çæ¥è©¢ï¼
+ 4.18) å¦ä½è®å½æ¸è¿åå¤è¡æå¤åè³æï¼
+ 4.19) çºä»éº¼æå¨ä½¿ç¨ PL/PgSQL 彿¸ååè¨æè¡¨æææ¶å°é¯èª¤è³è¨ãrelation
+ with OID ##### does not existãï¼
+ 4.20) ç®åæåªäºè³æè¤å¯«(replication)æ¹æ¡å¯ç¨ï¼
+ 4.21) çºä½æ¥è©¢çµæé¡¯ç¤ºçè¡¨åææ¬åèæçæ¥è©¢èªå¥ä¸
+ çä¸åï¼çºä½å¤§å¯«çæä¸è½ä¿çï¼
+ _________________________________________________________________
+
+常è¦åé¡
+
+ 1.1) PostgreSQL æ¯ä»éº¼ï¼è©²æéº¼ç¼é³ï¼
+
+ PostgreSQL è®ä½ Post-Gres-Q-Lï¼ææåä¹ç°¡ç¨±çºPostgres
+ ãæ³è½ä¸ä¸å¶ç¼é³ç人å¡å¯å¾é裡ä¸è¼è²é³æä»¶ï¼ MP3 æ ¼å¼ ã
+
+ PostgreSQL æ¯é¢åç®æ¨çéä¿è³æåº«ç³»çµ±ï¼å®å·æå³çµ±åæ¥
+ è³æåº«ç³»çµ±çææåè½ï¼åæå嫿å°å¨ä¸ä¸ä»£ DBMS
+ 系統ç使ç¨çå¢å¼·ç¹æ§ãPostgreSQL
+ æ¯èªç±åè²»çï¼ä¸¦ä¸æææºä»£ç¢¼é½å¯ä»¥ç²å¾ã
+
+ PostgreSQL
+ çéç¼éä¼ä¸»è¦çºå¿é¡èï¼ä»åéä½ä¸çåå°ä¸¦ééäºè¯ç¶²é²è¡è¯ç¹«ï¼éæ¯ä¸å社åéç¼é
+ ç®ï¼å®ä¸è¢«ä»»ä½å¬å¸æ§å¶ã
+ 妿³å å¥éç¼éä¼ï¼è«åè¦éç¼äººå¡å¸¸è¦åé¡ï¼FAQï¼
+ http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html
+
+ 1.2) 誰æ§å¶ PostgreSQL ï¼
+
+ å¦æä½ å¨å°æ¾PostgreSQLçæéäººï¼ææ¯ä»éº¼ä¸
+ 央å§å¡æï¼ææ¯ä»éº¼æå±¬å¬å¸ï¼ä½ åªè½æ¾æ£äº---å çºä¸åä¹ä¸å
+ å¨ï¼ä½æåç確æä¸å æ ¸å¿å§å¡æåCVS管ççµï¼ä½éäºå·¥ä½çµçè¨
+ ç«ä¸»è¦æ¯çºäºé²è¡ç®¡çå·¥ä½è䏿¯å°PostgreSQLé²è¡ç¨ä½å¼æ§å¶ï¼PostgreSQLé
+ ç®æ¯ç±ä»»ä½äººå
+ å¯åå çéç¼äººå¡ç¤¾ååææç¨æ¶æ§å¶çï¼ä½ æéè¦åçå°±æ¯è¨é±éµä»¶å表ï¼åèè¨è«å³å
+ ¯ï¼è¦åèPostgreSQLçéç¼è©³è¦ éç¼äººå¡å¸¸åé¡ (Developer's FAQ) ç²åè³è¨ï¼ã
+
+ 1.3) PostgreSQL ççæ¬æ¯ä»éº¼?
+
+ PostgreSQLçç¼å¸éµå¾ç¶å¸ç BSD çæ¬ãå®åè¨±ç¨æ¶ä¸éç®çå°ä½¿ç¨
+ PostgreSQLï¼çè³ä½ å¯ä»¥é·å® PostgreSQL
+ èä¸å«æºä»£ç¢¼ä¹å¯ä»¥ï¼å¯ä¸çéå¶å°±æ¯ä½ ä¸è½å è»é«èªèº«åé¡èåæå追訴æ³å¾
+ 責任ï¼å¦å¤å°±æ¯è¦æ±ææçè»é«æ·è²ä¸é 忬以ä¸çæ¬è²æã
+ ä¸é¢å°±æ¯æåæä½¿ç¨çBSDçæ¬è²æå§å®¹ï¼
+
+ PostgreSQL è³æåº«ç®¡ç系統
+
+ é¨åçæ¬ï¼cï¼1996-2005ï¼PostgreSQL å¨çéç¼å°çµï¼é¨åçæ¬ï¼cï¼1994-1996
+ å å·å¤§å¸è£äº
+
+ ï¼Portions copyright (c) 1996-2005,PostgreSQL Global Development Group
+ Portions Copyright (c) 1994-6 Regents of the University of
+ Californiaï¼
+
+ å許çºä»»ä½ç®ç使ç¨ï¼æ·è²ï¼ä¿®æ¹ååç¼éåè»é«åå®çææªè䏿¶åä»»ä½è²»ç¨ï¼
+ 並ä¸ç¡é ç°½ç½²å æ¤èç¢ççèæï¼åææ¯ä¸é¢ççæ¬è²æåæ¬æ®µä»¥åä¸é¢å©æ®µæå
+ åºç¾å¨æææ·è²ä¸ã
+
+ ï¼Permission to use, copy, modify, and distribute this software and
+ its documentation for any purpose, without fee, and without a written
+ agreement is hereby granted, provided that the above copyright notice
+ and this paragraph and the following two paragraphs appear in all
+ copies.ï¼
+
+ å¨ä»»ä½ææ³ä¸ï¼å å·å¤§å¸é½ä¸æ¿æå ä½¿ç¨æ
+ ¤è»é«åå¶ææªèå°è´çå°ä»»ä½ç¶äºäººçç´æ¥çï¼
+ 鿥çï¼ç¹æ®çï¼éå çæèç¸ä¼´èççæå£ï¼åæ¬å©çæå¤±ç責任ï¼å³ä½¿å å·å¤§å
+ ¸å·²ç¶å»ºè°äºéäºæå¤±çå¯è½æ§æä¹æ¯å¦æ¤ã
+
+ ï¼IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY
+ PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL
+ DAMAGES, INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS
+ SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA
+ HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.ï¼
+
+ å å·å¤§å¸æç¢ºæ¾æ£ä»»ä½ä¿èï¼åæ¬ä½ä¸å±éæ¼æä¸ç¹å®ç¨éç忥åå©ççé±å«ä¿èã
+ é裡æä¾çé份è»é«æ¯åºæ¼ãç¶ä½æ¯ãçåºç¤çï¼å èå å·å¤§å¸æ²æè²¬ä»»æä¾ç¶
+ è·ï¼æ¯æï¼æ´æ°ï¼å¢å¼·æèä¿®æ¹çæåã
+
+ ï¼THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE
+ PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF
+ CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT,
+ UPDATES, ENHANCEMENTS, OR MODIFICATIONS.ï¼
+
+ 1.4) PostgreSQL å¯ä»¥éè¡å¨åªäºä½æ¥ç³»çµ±å¹³å°ä¸ï¼
+
+ ä¸è¬èªªä¾ï¼ä»»ä½ç¾å¨å° UNIX ç¸å®¹ç使¥ç³»çµ±ä¹ä¸é½è½éè¡ PostgreSQL
+ ãå¨å®è£æå裡ååºäºç¼ä½æç¶éæç¢ºæ¸¬è©¦çå¹³å°ã
+
+ PostgreSQL ä¹å¯ä»¥ç´æ¥éè¡å¨åºæ¼å¾®è» Windows-NT ç使¥ç³»çµ±ï¼å¦
+ Win2000 SP4ï¼WinXP å Win2003ï¼å·²è£½ä½å®æçå®è£åå¯å¾
+ http://pgfoundry.org/projects/pginstallerä¸è¼ï¼åºæ¼MSDOSçWindows使¥
+ 系統 ï¼Win95ï¼Win98ï¼WinMeï¼éè¦ééCygwin模æ¬ç°å¢éè¡PostgreSQLã
+
+ åæä¹æä¸åçº Novell Netware 6 éç¼ççæ¬å¯å¾ http://forge.novell.com
+ ç²åï¼çºOS/2(eComStation)éç¼ççæ¬å¯å¾
+ http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgre
+ SQL&stype=all&sort=type&dir=%2F ä¸è¼ã
+
+ 1.5) æå¾åªè£¡è½å¾å° PostgreSQLï¼
+
+ ééç覽å¨å¯å¾ http://www.postgresql.org/ftp/ ä¸è¼ï¼ä¹å¯ééFTPï¼å¾
+ ftp://ftp.PostgreSQL.org/pub/ ç«é»ä¸è¼ã
+
+ 1.6) ææ°çç PostgreSQL æ¯ä»éº¼ï¼
+
+ PostgreSQL ææ°ççæ¬æ¯çæ¬ 8.2.3 ã
+
+ æåè¨åæ¯å¹´ç¼ä½ä¸å主è¦åç´çæ¬ï¼æ¯å¹¾åæç¼ä½ä¸åå°çæ¬ã
+
+ 1.7) æå¾åªè£¡è½å¾å°å° PostgreSQL çæ¯æï¼
+
+ PostgreSQL社åéééµä»¶å表çºå¶å¤§å¤æ¸ç¨æ¶æä¾å¹«å©ï¼è¨é±éµä»¶å表ç主ç«é
+ »æ¯
+ http://www.postgresql.org/community/lists/ï¼ä¸è¬ææ³ä¸ï¼åå å¥General æ
+ Bugéµä»¶å表æ¯ä¸åè¼å¥½çéå§ã
+
+ 主è¦çIRCé »éæ¯å¨FreeNode(irc.freenode.net)ç#postgresqlï¼çºäºé£ä¸æ
+ ¤é »éï¼å¯ä»¥ä½¿ç¨ UNIX ç¨åº ircï¼å¶æä»¤æ ¼å¼ï¼ irc -c '#postgresql'
+ "$USER" irc.freenode.net ï¼æè使ç¨å¶ä»IRC客æ¶ç«¯ç¨åºã卿¤ç¶²çµ¡ä¸éå
+ å¨ä¸å PostgreSQL ç西ççé »é(#postgersql-es)åæ³èªé »é
+ (#postgresql-fr)ã忍£å°ï¼å¨ EFNET ä¸ä¹æä¸å PostgreSQL ç交æµé »éã
+
+ 坿ä¾åæ¥æ¯æçå¬å¸å表å¯å¨ http://techdocs.postgresql.org/companies.php
+ ç覽ã
+
+ 1.8) æå¦ä½æäº¤ä¸å BUG å ±åï¼
+
+ å¯è¨ªå http://www.postgresql.org/support/submitbugï¼å¡«å¯« Bug
+ ä¸å ±è¡¨æ ¼å³å¯ï¼å樣ä¹å¯è¨ªå ftp ç«é» ftp://ftp.PostgreSQL.org/pub/
+ æª¢æ¥æç¡æ´æ°çPostgreSQL çæ¬æè£ä¸ã
+
+ ééä½¿ç¨ Bug æäº¤è¡¨æ ¼ææ¯ç¼å¾ PostgreSQL éµä»¶å表ç Bug
+ é常ææä»¥ä¸ä¹ä¸åè¦ï¼
+ * ææäº¤å§å®¹ä¸æ¯ä¸å Bug åå¶ä¸æ¯ Bug çåå ã
+ * ææäº¤å§å®¹æ¯ä¸åå·²ç¥ç Bug 並ä¸å·²ç¶å å¥ TODO å¾èçä»»åå表ã
+ * ææäº¤ç Bug å·²å¨ç¶åçæ¬ä¸è¢«ä¿®æ£ã
+ * ææäº¤ç Bug 已修æ£ä½å°æªå°è£ä¸å å¥ç¾å¨çç¼å¸è»é«åã
+ * è«æ±æäº¤èæä¾æ´è©³ç´°çè³è¨ï¼
+ + 使¥ç³»çµ±
+ + PostgreSQL çæ¬
+ + å¯éç¾ Bug çæ¸¬è©¦æ¡ä¾
+ + 調試è³è¨
+ + 調試è·è¹¤è¼¸åº
+ * ææäº¤å§å®¹æ¯ä¸åæ° Bugï¼å°å·è¡ä»¥ä¸å·¥ä½ï¼
+ + åµå»ºä¸åæ°è£ä¸ä¸¦å°å¶å å¥ä¸ä¸å主è¦çæ¬ææ¯å°çæ¹é²çæ¬ä¸ã
+ + æ¤ Bug æ«æä¸è½ä¿®æ£ï¼å°è¢«å è³ TODO å¾èçä»»åå表ã
+
+ 1.9) æå¦ä½ç解已ç¥ç BUG ææ«ç¼ºçåè½ï¼
+
+ PostgreSQL æ¯æä¸åæ´å±ç SQL:2003 çåéãå鱿åç TODO å表ï¼çè§£å·²ç¥ Bug
+ åè¡¨ãæ«ç¼ºçåè½åå°ä¾çéç¼è¨åã
+
+ è¦æ±å¢å æ°åè½çç³è«éå¸¸ææ¶å°ä»¥ä¸ä¹ä¸çåè¦ï¼
+ * 該åè½å·²å å¥ TODO å¾èçä»»åå表ã
+ * 該åè½ä¸æ¯å¿é çï¼å çºï¼
+ + 宿¯ç¾æçä¸ç¬¦å SQL æ¨æºçæåè½çéè¤ã
+ + 該åè½æ§æå¤§å¤§å¢å 代碼çè¤éç¨åºï¼è帶ä¾çå¥½èæ¯å¾®ä¸è¶³éçã
+ + 該åè½æ¯ä¸å®å¨ææ¯ä¸å¯é çã
+ * 該åè½å°è¢«å å¥ TODO å¾èçä»»åå表ã
+
+ PostgreSQL ä¸ä½¿ç¨ Bug è·è¹¤ç³»çµ±ï¼å çºæåç¼ç¾å¨éµä»¶å表ä¸
+ ç´æ¥åè¦ä»¥åä¿è TODO
+ ä»»åå表總æ¯èæ¼ææ°çæçæ¹å¼å·¥ä½æçææ´é«ä¸äºãäºå¯¦ä¸ï¼Bug䏿卿åçè»é«ä¸
+ åå¨å¾é·æéï¼ å°å½±é¿å¾å¤ç¨æ¶çBugä¹ç¸½æ¯å¾å¿«æè¢«ä¿®æ
+ £ãå¯ä¸è½æ¾å°æææ¹é²ãæé«åä¿®æ£çå°æ¹æ¯ CVS
+ çæ¥èªè³è¨ï¼å³ä½¿æ¯å¨è»é«æ°çæ¬çç¼å¸è³è¨ä¸ä¹ä¸æååºæ¯ä¸èçè»é«æ´æ°ã
+
+ 1.10) è½å¤ ç²åçææ°ææªæåªäºï¼
+
+ PostgreSQL åå«å¤§éçææªï¼ä¸»è¦æè©³ç´°çåèæåï¼æåé åä¸äºç測試ä¾åãåè¦
+ /doc ç®éï¼è¯è¨»ï¼æçº $PGHOME/docï¼ã ä½ éå¯ä»¥å¨ç·ç覽 PostgreSQL
+ çæåï¼å¶ç¶²åæ¯ï¼http://www.PostgreSQL.org/docsã
+
+ æå©æ¬éæ¼PostgreSQLçæ¸å¨ç·æä¾ï¼å¨
+ http://www.postgresql.org/docs/books/awbook.html å
+ http://www.commandprompt.com/ppbook/ ã 乿大éç PostgreSQL
+ æ¸ç±å¯ä¾è³¼è²·ï¼å¶ä¸æçºæµè¡ç䏿¬æ¯ç± Korry Douglas 編寫çãå¨
+ http://techdocs.PostgreSQL.org/techdocs/bookreviews.phpä¸ ä¸æå¤§éæé
+ PostgreSQL æ¸ç±çç°¡ä»ã å¨ http://techdocs.PostgreSQL.org/ 䏿¶éäºæé
+ PostgreSQL ç大éæè¡æç« ã
+
+ 客æ¶ç«¯çå½ä»¤è¡ç¨åºpsqlæä¸äºä»¥ \d éé
+ çå½ä»¤ï¼å¯é¡¯ç¤ºéæ¼é¡åï¼æä½ç¬¦ï¼å½æ¸ï¼èåçè³è¨ï¼ä½¿ç¨ \?
+ å¯ä»¥é¡¯ç¤ºææå¯ç¨çå½ä»¤ã
+
+ æåç web ç«é»å嫿´å¤çææªã
+
+ 1.11) ææè©²ææ¨£å¸ç¿ SQL ï¼
+
+ é¦åèæ®ä¸è¿°æå°çèPostgreSQLç¸éçæ¸ç±ï¼å¦å¤ä¸æ¬æ¯ Teach Yourself SQL in
+ 21 Days, Second Editionï¼å¶è©³ç´°ä»ç´¹çç¶²åæ¯
+ http://members.tripod.com/er4ebus/sql/index.htmï¼ æåç許å¤ç¨æ¶åæ¡The
+ Practical SQL Handbookï¼ Bowman, Judith S.
+ 編寫ï¼Addison-Wesleyå¬å¸åºçï¼å¶ä»çååæ¡ The Complete Reference SQL,
+ Groff 編寫ï¼McGraw-Hill å¬å¸åºçã
+
+ å¨ä¸åç¶²åä¸ä¹æå¾å¥½çæç¨ï¼ä»åæ¯
+ * http://www.intermedia.net/support/sql/sqltut.shtm
+ * http://sqlcourse.com.
+ * http://www.w3schools.com/sql/default.asp
+ * http://mysite.verizon.net/Graeme_Birchall/id1.html
+
+ 1.12)å¦ä½æäº¤è£ä¸ææ¯å å¥éç¼éä¼ï¼
+
+ è©³è¦ éç¼äººå¡å¸¸è¦åé¡ (Developer's FAQ) ã
+
+ 1.13) PostgreSQL åå¶ä»è³æåº«ç³»çµ±æ¯èµ·ä¾å¦ä½ï¼
+
+ è©å¹è»é«æå¥½å¹¾ç¨®æ¹æ³ï¼åè½ï¼æ§è½ï¼å¯é æ§ï¼æ¯æå广 ¼ã
+
+ åè½
+ PostgreSQL ææå¤§ååç¨è³æåº«æå¤çåè½ï¼ä¾å¦ï¼äºåï¼å
+ æ¥è©¢ï¼è§¸ç¼å¨ï¼è¦åï¼å¤éµåè宿´æ§åè¤éçéå®çã
+ æåéæä¸äºå®åæ²æçç¹æ§ï¼å¦ç¨æ¶å®ç¾©é¡åï¼ç¹¼æ¿ï¼è¦ååå¤çæ¬ä¸¦è¡æ§å¶ä
+ »¥æ¸å°éççç¨çã
+
+ æ§è½
+ PostgreSQLåå¶ä»åç¨åéæºçè³æåº«å·æé¡ä¼¼çæ§è½ãå°æäºèç宿¯è¼å¿«ï¼å°
+ å¶ä»ä¸äºèç宿¯è¼æ¢ã èå¶ä»è³æåº«ç¸æ¯ï¼æåçæ§è½åªå£éå¸¸å¨ +/-
+ 10%ä¹éã
+
+ å¯é æ§
+ æåé½ç¥éè³æåº«å¿é æ¯å¯é çï¼å¦åå®å°±ä¸é»ç¨é½æ²æãæååªååå°ç¼ä½ç¶éèª
+ çæ¸¬è©¦çï¼ç¼ºé·æå°çç©©å®ä»£ç¢¼ãæ¯åçæ¬è³å°æä¸åæç beta
+ 測試æéï¼ä¸¦ä¸æåçç¼å¸æ
+ ·å²é¡¯ç¤ºæåå¯ä»¥æä¾ç©©å®çï¼ç¢åºçï¼å¯ç¨æ¼çç¢ä½¿ç¨ççæ¬ãæåç¸ä¿¡å¨é
+ æ¹é¢æåèå¶ä»çè³æåº«è»é«æ¯ç¸ç¶çã
+
+ æ¯æ
+ æåçéµä»¶å表æä¾ä¸åé常大çéç¼äººå¡åç¨æ¶ççµä»¥å¹«å©è§£æ±ºæç¢°å°ç
+ ä»»ä½åé¡ãæåä¸è½ä¿è
+ 總æ¯è½è§£æ±ºåé¡ï¼ç¸æ¯ä¹ä¸ï¼åç¨è³æåº«è»é«ä¹ä¸¦ä¸æ¯ç¸½è½å¤ æä¾è§
+ £æ±ºæ¹æ³ã
+ ç´æ¥èéç¼äººå¡ï¼ç¨æ¶ç¾¤ï¼æååæºç¨åºæ¥è§¸ä½¿PostgreSQLçæ¯ææ¯å¶ä»è³
+ æåº«éè¦å¥½ãéæä¸äºåæ¥
+ æ§çå¨é¢æè¡æ¯æï¼å¯ä»¥çµ¦æä¾çµ¦é£äºéè¦ç人ãï¼åé±1.7 å°ç¯ï¼
+
+ 广 ¼
+ æåå°ä»»ä½ç¨éé½åè²»ï¼åæ¬åç¨åéåç¨ç®çã
+ ä½ å¯ä»¥ä¸å éå¶å°åä½ çç¢å裡å 奿åç代碼ï¼é¤äºé£äºæåå¨ä¸é¢ççæ¬
+ è²æè£¡è²æç BSDçæ¬ä¹å¤çå§å®¹ã
+
+ 1.14) PostgreSQL å¯ä»¥èçæè¿ååå家夿å¶çè®åå?
+
+ PostgreSQL 8.0ä¹åççæ¬æ¯ä½¿ç¨ä½æ¥ç³»çµ±ä¸çæåè³æåº«ä¾èç夿å¶çè³è¨ï¼èª
+ 8.0 çå以å¾ççæ¬ PostgreSQL æèªèº«å«æææ°çæåè³è¨ã
+ _________________________________________________________________
+
+ç¨æ¶å®¢æ¶ç«¯åé¡
+
+ 2.1) æåå¯ä»¥ç¨ä»éº¼èªè¨å PostgreSQL é²è¡æºéï¼
+
+ PostgreSQL (é è¨ææ³)åªå®è£æ C åå§åµå¼ C
+ çæ¥å£ï¼å¶ä»çæ¥å£é½æ¯ç¨ç«çé ç®ï¼è½å¤ åå¥ä¸è¼ï¼éäºæ¥å£é ç®ç¨ç«ç好è
+ æ¯ä»åå¯ä»¥æåèªçç¼å¸è¨åååèªç¨ç«çéç¼çµã
+
+ ä¸äºç·¨ç¨èªè¨å¦ PHP é½æè¨ªå PostgreSQL çæ¥å£ï¼PerlãTCLãPython
+ 以åå¾å¤å¶ä»èªè¨çæ¥å£å¨ http://gborg.postgresql.org ç¶²ç«ä¸ç
+ Drivers/Interfaces å°ç¯å¯æ¾å°ï¼ 並ä¸éé Internet å¾å®¹ææç´¢å°ã
+
+ 2.2) æä»éº¼å·¥å·å¯ä»¥æ PostgreSQL ç¨æ¼ Web é é¢ï¼
+
+ ä¸åä»ç´¹ä»¥è³æåº«çºå¾å°çæºä¸é¯çç«é»æ¯ï¼http://www.webreview.comã
+
+ å°æ¼ Web éæï¼PHP æ¯ä¸åæ¥µå¥½çæ¥å£ãå®å¨ http://www.php.net/ã
+
+ å°æ¼è¤éçä»»åï¼å¾å¤äººæ¡ç¨ Perl æ¥å£å ä½¿ç¨ CGI.pm ç DBD::Pg æ mod_perl
+ ã
+
+ 2.3)PostgreSQL ææåå½¢ç¨æ¶çé¢åï¼
+
+ åæ¥ç¨æ¶ææ¯éæºéç¼äººå¡è½æ¾å°å¾å¤çæé PostgreSQLçGUI å形工å·è»é«ï¼å¨
+ PostgreSQLç¤¾åææª æä¸å詳細çå表ã
+ _________________________________________________________________
+
+系統管çåé¡
+
+ 3.1)æææ¨£è½æ PostgreSQL è£å¨ /usr/local/pgsql 以å¤çå°æ¹ï¼
+
+ å¨éè¡ configure æå ä¸ --prefix é¸é ã
+
+ 3.2) æå¦ä½æ§å¶ä¾èªå¶ä»é»è¦ç飿¥ï¼
+
+ é è¨ææ³ä¸ï¼PostgreSQL åªå許ä¾èªæ¬æ©ä¸éé unix å奿¥åæ TCP/IP
+ æ¹å¼ç飿¥ã ä½ åªæå¨ä¿®æ¹äºéç½®æä»¶ postgresql.conf ä¸ç
+ listen_addressesï¼ä¸ä¹å¨éç½®æä»¶ $PGDATA/pg_hba.conf 䏿éäº
+ åºæ¼é ç¨é»è¦ï¼ host-based ï¼ç身份èªèï¼ä¸¦éæ°åå
+ PostgreSQLï¼å¦åå¶ä»é»è¦æ¯ä¸è½èä½ ç PostgreSQL 伺æå¨é²è¡é£æ¥çã
+
+ 3.3) æææ¨£èª¿æ´è³æåº«å¼æä»¥ç²å¾æ´å¥½çæ§è½ï¼
+
+ æä¸åä¸»è¦æ¹é¢å¯ä»¥æå PostgreSQL çæ½è½ã
+
+ æ¥è©¢æ¹å¼çè®å
+ éä¸»è¦æ¶åä¿®æ¹æ¥è©¢æ¹å¼ä»¥ç²åæ´å¥½çæ§è½:
+
+ + åµå»ºç´¢å¼ï¼åæ¬è¡¨éå¼åé¨åç´¢å¼ï¼
+ + ä½¿ç¨ COPY èªå¥ä»£æ¿å¤å Insert èªå¥ï¼
+ + å°å¤åSQLèªå¥çµæä¸åäºå以æ¸å°æäº¤äºåçéé·ï¼
+ + å¾ä¸åç´¢å¼ä¸æå夿¢è¨éæä½¿ç¨ CLUSTERï¼
+ + å¾ä¸åæ¥è©¢çµæä¸ååºé¨åè¨éæä½¿ç¨ LIMITï¼
+ + 使ç¨é ç·¨è¯å¼æ¥è©¢ï¼Prepared Query)ï¼
+ + ä½¿ç¨ ANALYZE ä»¥ä¿æç²¾ç¢ºçåªåçµ±è¨ï¼
+ + å®æä½¿ç¨ VACUUM æ pg_autovacuum
+ + é²è¡å¤§éè³ææ´æ¹æååªé¤ç´¢å¼ï¼ç¶å¾é建索å¼ï¼
+
+ 伺æå¨çéç½®
+ éç½®æä»¶ postgres.conf ä¸çå¾å¤è¨
+ ç½®é½æå½±é¿æ§è½ï¼ææåæ¸çå表å¯è¦ï¼
+ 管ç塿å/è³æåº«ä¼ºæå¨éè¡ç°å¢/è³æåº«ä¼ºæå¨éè¡éç½®ï¼
+ æé忏çè§£éå¯è¦ï¼http://www.varlena.com/varlena/GeneralBits/Tidb
+ its/annotated_conf_e.html å
+ http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.htmlã
+
+ 硬é«ç鏿
+ é»è¦ç¡¬é«å°æ§è½çå½±é¿å¯ç覽
+ http://candle.pha.pa.us/main/writings/pgsql/hw_performance/inde
+ x.html å http://www.powerpostgresql.com/PerfList/ã
+
+ 3.4)PostgreSQL 裡å¯ä»¥ç²å¾ä»éº¼æ¨£çèª¿è©¦ç¹æ§ï¼
+
+ PostgreSQL æå¾å¤é¡ä¼¼ log_*
+ ç伺æå¨éç½®è®éå¯ç¨æ¼æ¥è©¢çåå°åé²ç¨çµ±è¨ï¼èéäºå·¥ä½å°èª¿è©¦åæ§è½æ¸¬è©¦å
+ ¾æå¹«å©ã
+
+ 3.5) çºä»éº¼å¨è©¦å飿¥ææ¶å°ãSorry, too many
+ clientsï¼å·²æå¤ªå¤ç¨æ¶é£æ¥ï¼ãæ¶æ¯ï¼
+
+ éè¡¨ç¤ºä½ å·²éå°é è¨ 100 å並ç¼(åä½)å¾å°é²ç¨æ¸çéå¶ï¼ä½ éè¦ééä¿®æ¹
+ postgresql.conf æä»¶ä¸ç max_connections å¼ä¾ å¢å postmaster
+ çå¾å°ä½µç¼èçæ¸ï¼ä¿®æ¹å¾ééæ°åå postmasterã
+
+ 3.6)PostgreSQL çåç´éç¨æåªäºå§å®¹ ï¼
+
+ PostgreSQL éç¼çµå°æ¯æ¬¡å°çæ¬çåç´ä¸»è¦åªåäºä¸äº Bug ä¿®æ£å·¥ä½ï¼å æ¤å¾
+ 7.4.8 åç´å° 7.4.9 ä¸éè¦ dump å restoreï¼åéè¦åæ
+ ¢è³æåº«ä¼ºæå¨ï¼å®è£æ´æ°å¾çè»é«åï¼ç¶å¾éå伺æå¨å³å¯ã
+
+ ææPostgreSQLçç¨æ¶æè©²å¨ææ¥è¿ï¼ä½ æä½¿ç¨çä¸»çæ¬ï¼çå°æ¹é²çæ¬ç¼ä½ç¡å¿«åç´
+ ãåç®¡æ¯æ¬¡åç´å¯è½é½æä¸é»é¢¨éªï¼PostgreSQLçå°æ¹ é²çå忝è¨è¨ç¨ä¾ä¿®æ
+ £ä¸äº Bug
+ çï¼ç¨å¼ç¢¼æ¹åè¼å°ï¼æä»¥é¢¨éªéæ¯å¾å°çãPostgreSQL社åèªçºä¸è¬ææ³ä¸ä¸åç´ç
+ 風éªéæ¯å¤æ¼åç´çã
+
+ ä¸»çæ¬çåç´ï¼ä¾å¦å¾ 7.3 å° 7.4ï¼é常æä¿®æ¹ç³»çµ±è¡¨åè³æè¡¨çå§é¨æ ¼å¼ã
+ éäºæ¹è®ä¸è¬æ¯è¼è¤éï¼å æ¤æåä¸ç¶æè³ææä»¶çåå¾å¼å®¹æ§ãå æ¤å¾èçæ¬ä¸
+ é²è¡è³æå°åºï¼dumpï¼/ç¶å¾å¨æ°çæ¬ä¸
+ é²è¡è³æå°å¥ï¼reloadï¼å°ä¸»çæ¬çåç´æ¯å¿é çã
+
+ 3.7)(ä½¿ç¨ PostgreSQL )æéè¦ä½¿ç¨ä»éº¼é»è¦ç¡¬é« ï¼
+
+ ç±æ¼é»è¦ç¡¬é«å¤§å¤æ¸æ¯ç¸å®¹çï¼äººå總æ¯å¾åæ¼ç¸ä¿¡ææé»è¦ç¡¬é«è³ªé乿¯ç¸
+ åçãäºå¯¦ä¸ä¸æ¯ï¼ ECC RAMï¼å¸¶å¥å¶æ ¡é©çè¨æ¶é«ï¼ï¼SCSI
+ ï¼ç¡¬ç¢ï¼ååªè³ªçä¸»æ©æ¿æ¯ä¸äºä¾¿å®è²¨è¦æ´å å¯é ä¸å·ææ´å¥½çæ§è½ã
+ PostgreSQL å¹¾ä¹å¯ä»¥éè¡å¨ä»»ä½ç¡¬é«ä¸ï¼
+ ä½å¦æå¯é æ§åæ§è½å°ä½ ç系統å¾éè¦ï¼ä½ å°±éè¦å¨é¢çç ç©¶ä¸ä¸ä½ ç硬é«çµæ
+ äºã卿åçéµä»¶å表ä¸ä¹æéæ¼ ç¡¬é«éç½®åæ§å¹æ¯çè¨è«ã
+ _________________________________________________________________
+
+æä½åé¡
+
+ 4.1) å¦ä½åªé¸æä¸åæ¥è©¢çµæçé å¹¾è¡ï¼ææ¯é¨æ©çä¸è¡ï¼
+
+ å¦æä½ åªæ¯è¦æåå¹¾è¡è³æï¼ä¸¦ä¸ä½ å¨å·è¡æ¥è©¢ä¸
+ ç¥é確åçè¡æ¸ï¼ä½ å¯ä»¥ä½¿ç¨ LIMIT åè½ã 妿æä¸åç´¢å¼è ORDER BY ä¸
+ çæ¢ä»¶å¹éï¼PostgreSQL å¯è½å°±åªèçè¦æ±çé å¹¾æ¢è¨éï¼
+ ï¼å¦åå°å°æ´åæ¥è©¢é²è¡èçç´å°çæéè¦çè¡ï¼ã妿å¨å·è¡æ¥è©¢åè½æä¸ç¥é確åçè¨éæ
+ ¸ï¼ å¯ä½¿ç¨æ¸¸æ¨(cursor)åFETCHåè½ã
+
+ å¯ä½¿ç¨ä»¥ä¸æ¹æ³æåä¸è¡é¨æ©è¨éçï¼
+ SELECT cols
+ FROM tab
+ ORDER BY random()
+ LIMIT 1 ;
+
+ 4.2)
+ å¦ä½æ¥ç表ãç´¢å¼ãè³æåº«ä»¥åç¨æ¶çå®ç¾©ï¼å¦ä½æ¥çpsql裡ç¨å°çæ¥è©¢æä»¤ä¸¦é¡¯ç¤ºå
+ ®åï¼
+
+ å¨psqlä¸ä½¿ç¨ \dt å½ä»¤ä¾é¡¯ç¤ºè³æè¡¨çå®ç¾©ï¼è¦çè§£ psql ä¸
+ ç宿´å½ä»¤å表å¯ä½¿ç¨ \? ï¼å¦å¤ï¼ä½ ä¹å¯ä»¥é±è® psql çæºä»£ç¢¼ æä»¶
+ pgsql/src/bin/psql/describe.cï¼å®åæ¬çºçæ psql åææ§å½ä»¤ç輸åºçææ SQL
+ å½ä»¤ãä½ éå¯ä»¥å¸¶ -E é¸é åå psqlï¼ éæ¨£å®å°åå°åºä½ å¨ psql ä¸
+ æçµ¦åºçå½ä»¤å·è¡æçå§é¨å¯¦é使ç¨ç SQL
+ æ¥è©¢èªå¥ãPostgreSQL乿ä¾äºä¸åå¼å®¹ SQLç INFORMATION SCHEMA æ¥å£ï¼
+ ä½ å¯ä»¥å¾é裡ç²åéæ¼è³æåº«çè³è¨ã
+
+ å¨ç³»çµ±ä¸ä¹æä¸äºä»¥ pg_ æé çç³»çµ±è¡¨ä¹æè¿°äºè¡¨çå®ç¾©ã
+
+ ä½¿ç¨ psql -l æä»¤å¯ä»¥ååºææçè³æåº«ã
+
+ ä¹å¯ä»¥ç覽ä¸ä¸ pgsql/src/tutorial/syscat.source
+ æä»¶ï¼å®åèäºå¾å¤å¯å¾è³æåº«ç³»çµ±è¡¨ä¸ç²åè³è¨çSELECTèªæ³ã
+
+ 4.3) å¦ä½æ´æ¹ä¸åæ¬ä½çè³æé¡åï¼
+
+ å¨8.0çæ¬è£¡æ´æ¹ä¸åæ¬ä½çè³æé¡åå¾å®¹æï¼å¯ä½¿ç¨ ALTER TABLE ALTER COLUMN
+ TYPE ã
+
+ å¨ä»¥åççæ¬ä¸ï¼å¯ä»¥é樣åï¼
+ BEGIN;
+ ALTER TABLE tab ADD COLUMN new_col new_data_type;
+ UPDATE tab SET new_col = CAST(old_col AS new_data_type);
+ ALTER TABLE tab DROP COLUMN old_col;
+ COMMIT;
+
+ ä½ ç¶å¾å¯ä»¥ä½¿ç¨ VACUUM FULL tab æä»¤ä¾ä½¿ç³»çµ±æ¶åç¡æè³ææä½ç¨ç空éã
+
+ 4.4) 宿¢è¨éï¼å®å表ï¼å®åè³æåº«çæå¤§éå¶æ¯å¤å°ï¼
+
+ ä¸é¢æ¯ä¸äºéå¶ï¼
+
+ å®åè³æåº«æå¤§å°ºå¯¸ï¼ ç¡éå¶ï¼å·²å卿 32TB çè³æåº«ï¼
+ å®å表çæå¤§å°ºå¯¸ï¼ 32 TB
+ ä¸è¡è¨éçæå¤§å°ºå¯¸ï¼ 1.6 TB
+ ä¸åæ¬ä½çæå¤§å°ºå¯¸? 1 GB
+ ä¸å表裡æå¤§åæ¸ï¼ ç¡éå¶
+ ä¸å表裡æå¤§æ¬ä½æ¸ï¼ 250-1600 ï¼èåé¡åæéï¼
+ ä¸å表裡çæå¤§ç´¢å¼æ¸éï¼ ç¡éå¶
+
+ ç¶ç¶ï¼å¯¦é䏿²æçæ£çç¡éå¶ï¼éæ¯è¦åå¯ç¨ç£ç¤ç©ºéãå¯ç¨è¨æ¶é«/交æåçå¶ç´ã
+ äºå¯¦ä¸ï¼ç¶ä¸è¿°éäºæ¸å¼è®å¾ç°å¸¸å°å¤§æï¼ç³»çµ±æ§è½ä¹æåå¾å¤§å½±é¿ã
+
+ å®è¡¨çæå¤§å¤§å° 32 TB ä¸éè¦ä½æ¥
+ 系統å°å®åæä»¶ä¹éééº¼å¤§çæ¯æã大表ç¨å¤å 1 GB çæä»¶åå²ï¼å æ
+ ¤æä»¶ç³»çµ±å¤§å°çéå¶æ¯ä¸éè¦çã
+
+ 妿é è¨çå¡å¤§å°å¢é·å° 32K ï¼æå¤§çå®è¡¨å¤§å°åæå¤§åæ¸éå¯ä»¥å¢å å°ååã
+
+ æä¸åéå¶å°±æ¯ä¸è½å°å¤§å°å¤æ¼2000å
+ ç¯çååµå»ºç´¢å¼ã幸éå°æ¯é樣çç´¢å¼å¾å°ç¨å°ãééå°å¤å
+ ç¯åçå§å®¹é²è¡MD5åç¨éç®çµæé²è¡å½æ¸ç´¢å¼å¯å°åçå¯ä¸æ§å¾å°ä¿èï¼
+ 並ä¸å¨ææª¢ç´¢å許å°åä¸çå®è©é²è¡æç´¢ã
+
+ 4.5) åå²ä¸åå¸åçææ¬æä»¶è£¡çè³æéè¦å¤å°ç£ç¤ç©ºéï¼
+
+ ä¸å Postgres è³æåº«ï¼å
+ å²ä¸åææ¬æä»¶ï¼æä½ç¨ç空éæå¤å¯è½éè¦ç¸ç¶æ¼éåææ¬æä»¶èªèº«å¤§å°5åçç£ç¤ç©ºé
+ ã
+
+ ä¾å¦ï¼åè¨æä¸å 100,000 è¡çæä»¶ï¼æ¯è¡æä¸åæ´æ¸åä¸åææ¬æè¿°ã åè¨
+ ææ¬ä¸²çå¹³åé·åº¦çº20ä½åçµ(Byte)ãææ¬æä»¶ä½ç¨ 2.8 MBãå
+ æ¾éäºè³æçPostgreSQLè³æåº«æä»¶å¤§ç´æ¯ 5.2 MB:
+ 24 ååçµ: æ¯è¡çé ï¼å¤§ç´å¼ï¼
+ 24 ååçµç¯: ä¸åæ´æ¸åæ¬ä½åä¸åææ¬åæ¬ä½
+ + 4 ååçµç¯: é é¢å§æååçµçæé
+ ----------------------------------------
+ 52 ååçµæ¯è¡
+
+ PostgreSQL è³æé ç大尿¯ 8192 ä½åçµ (8 KB)ï¼åï¼
+
+ 8192 ååçµæ¯é
+ ------------------- = 158 è¡/è³æé ï¼åä¸åæ´ï¼
+ 52 ååçµæ¯è¡
+
+ 100000 è³æè¡
+ -------------------- = 633 è³æé ï¼åä¸åæ´ï¼
+ 146 è¡/è³æé
+
+ 633 è³æé * 8192 åç¯/é = 5,185,536 åç¯ï¼5.2 MBï¼
+
+ ç´¢å¼ä¸éè¦é麼å¤çé¡å¤æ¶èï¼ä½ä¹ç¢ºå¯¦åæ¬è¢«ç´¢å¼çè³æï¼å æ
+ ¤å®åä¹å¯è½å¾å¤§ã
+
+ ç©ºå¼ NULL åæ¾å¨ä½åä¸ï¼å æ¤ä½ç¨å¾å°ç空éã
+
+ 4.6) çºä»éº¼æçæ¥è©¢å¾æ¢ï¼çºä»éº¼éäºæ¥è©¢æ²æå©ç¨ç´¢å¼ï¼
+
+ ä¸¦éæ¯åæ¥è©¢é½æèªå使ç¨ç´¢å¼ãåªæå¨è¡¨ç大å°è¶éä¸åæå°å¼ï¼ä¸¦ä¸æ¥è©¢åªæé
+ ¸ä¸è¡¨ä¸è¼å°æ¯ä¾çè¨éææææ¡ç¨ç´¢å¼ã 鿝å çºç´¢å¼æçå¼èµ·çé¨å³ç£ç¤å
+ åå¯è½æ¯ç´æ¥å°è®å表ï¼é åºæçï¼æ´æ¢ã
+
+ çºäºå¤æ·æ¯å¦ä½¿ç¨ç´¢å¼ï¼PostgreSQL
+ å¿é ç²å¾æé表ççµ±è¨å¼ãéäºçµ±è¨å¼å¯ä»¥ä½¿ç¨ VACUUM ANALYZEï¼æ ANALYZE
+ ç²å¾ã 使ç¨çµ±è¨å¼ï¼åªåå¨ç¥é表ä¸
+ æå¤å°è¡ï¼å°±è½å¤ æ´å¥½å°å¤æ·æ¯å¦å©ç¨ç´¢å¼ã
+ çµ±è¨å¼å°ç¢ºå®åªåç飿¥é åºå飿¥æ¹æ³ä¹å¾æç¨ãå¨è¡¨çå§å®¹ç¼çè®åæï¼æå®æé²è
+ ¡çµ±è¨å¼çæ´æ°æ¶éã
+
+ ç´¢å¼é常ä¸ç¨æ¼ ORDER BY
+ æå·è¡é£æ¥ãå°ä¸å大表ç䏿¬¡é åºæçåå䏿¬¡æåºé常æ¯ç´¢å¼æçè¦å¿«ãç¶èï¼å¦æ
+ å° LIMIT å ORDER BY
+ çµåå¨ä¸èµ·ä½¿ç¨ç話ï¼éå¸¸å°æä½¿ç¨ç´¢å¼ï¼å çºéæåè¿å表ä¸çä¸å°é¨åè¨éã
+
+ å¦æä½ ç¢ºä¿¡PostgreSQLçåªåå¨ä½¿ç¨é åºæçæ¯ä¸æ£ç¢ºçï¼ä½ å¯ä»¥ä½¿ç¨SET
+ enable_seqscan TO 'off'æä»¤ä¾ééé åºæçï¼
+ ç¶å¾å次éè¡æ¥è©¢ï¼ä½ å°±å¯ä»¥çåºä½¿ç¨ä¸åç´¢å¼æçæ¯å¦ç¢ºå¯¦è¦å¿«ä¸äºã
+
+ ç¶ä½¿ç¨éé符æä½ï¼ä¾å¦ LIKE æ ~ æï¼ç´¢å¼åªè½å¨ç¹å®çææ³ä¸ä½¿ç¨ï¼
+ * å符串çéå§é¨åå¿é æ¯æ®éå符串ï¼ä¹å°±æ¯èªªï¼
+ + LIKE 模å¼ä¸è½ä»¥ % æé ã
+ + ~ ï¼æ£å表éå¼ï¼æ¨¡å¼å¿é 以 ^ æé ã
+ * å符串ä¸è½ä»¥å¹éå¤ååç¬¦çæ¨¡å¼é¡æé ï¼ä¾å¦ [a-e]ã
+ * 大å°å¯«ç¡éçæ¥æ¾ï¼å¦ ILIKE å ~* çä¸ä½¿ç¨ç´¢å¼ï¼ä½å¯ä»¥ç¨ 4.8
+ ç¯æè¿°ç表éå¼ç´¢å¼ã
+ * å¨å initdb æå¿é æ¡ç¨é è¨çæ¬å°è¨ç½® C
+ localeï¼å çºç³»çµ±ä¸å¯è½ç¥éå¨é C locale ææ³æä¸ä¸åæå¤§å符æ¯ä»éº¼ã
+ å¨éç¨®ææ³ä¸ï¼ä½ å¯ä»¥åµå»ºä¸åç¹æ®ç text_pattern_ops ç´¢å¼ä¾ç¨æ¼
+ LIKE çç´¢å¼ã
+
+ å¨ 8.0 ä¹åççæ¬ä¸
+ ï¼é¤éè¦æ¥è©¢çè³æé¡ååç´¢å¼çè³æé¡åç¸å¹éï¼å¦åç´¢å¼ç¶å¸¸æ¯æªè¢«ç¨å°ï¼ç¹å¥æ
+ ¯å° int2, int8 忏å¼åçç´¢å¼ã
+
+ 4.7) æå¦ä½æè½çå°æ¥è©¢åªå卿¯ææ¨£è©ä¼°èçæçæ¥è©¢ï¼
+
+ åè EXPLAIN æåé ã
+
+ 4.8) æææ¨£åæ£å表éå¼æç´¢å大å°å¯«ç¡éçæ
+ £å表é弿¥æ¾ï¼ææ¨£å©ç¨ç´¢å¼é²è¡å¤§å°å¯«ç¡éæ¥æ¾ï¼
+
+ æä½ç¬¦ ~ èçæ£å表éå¼å¹éï¼è ~* èç大å°å¯«ç¡éçæ£å表éå¼å¹éã大å°å¯«ç¡éç
+ LIKE è®ç¨®æçº ILIKEã
+
+ 大å°å¯«ç¡éçç弿¯è¼é常寫åï¼
+ SELECT *
+ FROM tab
+ WHERE lower(col) = 'abc';
+
+ 鿍£å°ä¸æä½¿ç¨æ¨æºçç´¢å¼ã使¯å¯ä»¥åµå»ºä¸åå¨éç¨®ææ³ä¸ä½¿ç¨ç表éå¼ç´¢å¼
+ :
+ CREATE INDEX tabindex ON tab (lower(col));
+
+ 妿ä¸è¿°ç´¢å¼å¨åµå»ºæå å¥ UNIQUE ç´æï¼éç¶ç´¢å¼æ¬ä½èªèº«å§å®¹å¯ä»¥å
+ å²å¤§å°å¯«ä¸éçå§å®¹ï¼ä½å¦ææ UNIQUE
+ ç´æå¾ï¼éäºå§å®¹ä¸è½å忝大å°å¯«ä¸åï¼å¦åæé æè¡çªï¼ãçºäºä¿è
+ ä¸ç¼çéç¨®ææ³ï¼å¯ä»¥ä½¿ç¨ CHECK ç´ææ¢ä»¶ææ¯è§¸ç¼å¨å¨é奿é²è¡éå¶ã
+
+ 4.9) å¨ä¸åæ¥è©¢è£¡ï¼æææ¨£æª¢æ¸¬ä¸åæ¬ä½æ¯å¦çº NULL
+ ï¼æå¦ä½æè½æºç¢ºæåºèä¸è«ææ¬ä½æ¯å¦å« NULL å¼ï¼
+
+ ç¨ IS NULL å IS NOT NULL 測試é忬ä½ï¼å·é«æ¹æ³å¦ä¸ï¼
+ SELECT *
+ FROM tab
+ WHERE col IS NULL;
+
+ çºäºè½å°å« NULL æ¬ä½æåºï¼å¯å¨ ORDER BY æ¢ä»¶ä¸ä½¿ç¨ IS NULL å IS NOT
+ NULL ä¿®é£¾ç¬¦ï¼æ¢ä»¶çºç true å°æ¯æ¢ä»¶çºå false æå¨åé¢ï¼ä¸é¢çä¾å
+ å°±æå°å« NULL çè¨éæå¨çµæçä¸é¢é¨åï¼
+ SELECT *
+ FROM tab
+ ORDER BY (col IS NOT NULL)
+
+ 4.10) å種å符é¡åä¹éæä»éº¼ä¸åï¼
+
+ é¡å å§é¨å稱 說æ
+ VARCHAR(n) varchar æå®äºæå¤§é·åº¦ï¼è®é·å
+ 符串ï¼ä¸è¶³å®ç¾©é·åº¦çé¨åä¸è£é½
+ CHAR(n) bpchar å®é·å符串ï¼å¯¦éè³æä¸è¶³å®ç¾©é·åº¦æï¼ä»¥ç©ºæ ¼è£é½
+ TEXT text æ²æç¹å¥çä¸ééå¶ï¼ååè¡çæå¤§é·åº¦éå¶ï¼
+ BYTEA bytea è®é·åç¯åºåï¼ä½¿ç¨NULLåç¬¦ä¹æ¯å許çï¼
+ "char" char å®åå符
+
+ å¨ç³»çµ±è¡¨åå¨ä¸äºé¯èª¤è³è¨è£¡ä½ å°çå°å§é¨å稱ã
+
+ ä¸é¢æåçåå種é¡åæ¯ "varlena"ï¼è®é·ï¼é¡åï¼ä¹å°±æ¯èªªï¼éé çååå
+ ç¯æ¯é·åº¦ï¼å¾é¢ææ¯è³æï¼ã æ¼æ¯å¯¦éä½ç¨çç©ºéæ¯è²æç大å°è¦å¤ä¸äºã
+ ç¶èéäºé¡åå¦å®ç¾©å¾é·æé½å¯ä»¥è¢«å£ç¸®åå²ï¼å æ
+ ¤ç£ç¤ç©ºéä¹å¯è½æ¯é æ³çè¦å°ã
+
+ VARCHAR(n) å¨åå²éå¶äºæå¤§é·åº¦çè®é·åç¬¦ä¸²æ¯æå¥½çã TEXT é©ç¨æ¼å
+ 岿大å¯é 1G å·¦å³ä½æªå®ç¾©éå¶é·åº¦çå符串ã
+
+ CHAR(n) æé©åæ¼åå²é·åº¦ç¸åçå符串ã
+ CHAR(n)ææ ¹ææçµ¦å®çæ¬ä½é·åº¦ä»¥ç©ºæ ¼è£è¶³ï¼ä¸è¶³çæ¬ä½å§å®¹ï¼ï¼ è
+ VARCHAR(n) åªåå²æçµ¦å®çè³æå§å®¹ã BYTEA ç¨æ¼åå²äºé²å¶è³æï¼å°¤å¶æ¯åå«
+ NULL åç¯çå¼ãéäºé¡åå·æå·®ä¸å¤çæ§è½ã
+
+ 4.11.1) æææ¨£åµå»ºä¸ååºåèææ¯èªåéå¢çæ¬ä½ï¼
+
+ PostgreSQL æ¯æ SERIAL
+ è³æé¡åãï¼æ¬ä½å®ç¾©çºSERIALå¾ï¼å°èªååµå»ºä¸ååºåçæå¨ï¼ä¾å¦ï¼
+ CREATE TABLE person (
+ id SERIAL,
+ name TEXT
+ );
+
+ æèªåè½æçºä»¥ä¸SQLèªå¥ï¼
+ CREATE SEQUENCE person_id_seq;
+ CREATE TABLE person (
+ id INT4 NOT NULL DEFAULT nextval('person_id_seq'),
+ name TEXT
+ );
+
+ åè create_sequence æåé ç²åéæ¼åºåçæå¨çæ´å¤è³è¨ã
+
+ 4.11.2) æå¦ä½ç²å¾ä¸åæå¥çåºåèçå¼ï¼
+
+ ä¸ç¨®æ¹æ³æ¯å¨æå¥ä¹ååç¨å½æ¸ nextval() å¾åºåå°è±¡è£¡æª¢ç´¢åºä¸ä¸å SERIAL
+ å¼ï¼ç¶å¾åç¨æ¤å¼ç²¾ç¢ºå°æå¥ãä½¿ç¨ 4.11.1 裡çä¾è¡¨ï¼å¯ç¨å½ç¢¼é樣æè¿°ï¼
+ new_id = execute("SELECT nextval('person_id_seq')");
+ execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')");
+
+ 鿍£éè½å¨å¶ä»æ¥è©¢ä¸ä½¿ç¨åæ¾å¨ new_id è£¡çæ°å¼ï¼ä¾å¦ï¼ä½çºåç§ person
+ 表çå¤éµï¼ã 注æèªååµå»ºç SEQUENCE å°è±¡çåç¨±å°ææ¯
+
__seqï¼ é裡 table å serialcolumn
+ å奿¯ä½ ç表çå稱åä½ ç SERIAL æ¬ä½çå稱ã
+
+ é¡ä¼¼çï¼å¨ SERIAL å°è±¡é è¨æå¥å¾ä½ å¯ä»¥ç¨å½æ¸ currval() 檢索å賦å¼ç
+ SERIAL å¼ï¼ä¾å¦ï¼
+ execute("INSERT INTO person (name) VALUES ('Blaise Pascal')");
+ new_id = execute("SELECT currval('person_id_seq')");
+
+ 4.11.3) åæä½¿ç¨ currval() æå°è´åå¶ä»ç¨æ¶çè¡çªææ³åï¼
+
+ 䏿ãcurrval() è¿åçæ¯ä½ æ¬æ¬¡æè©±é²ç¨æè³¦çå¼è䏿¯ææç¨æ¶çç¶åå¼ã
+
+ 4.11.4) çºä»éº¼ä¸å¨äºåç°å¸¸ä¸æ¢å¾éç¨åºåèå¢ï¼çºä»éº¼å¨åºåèæ¬ä½çåå¼ä¸åå¨éæ·å¢ï¼
+
+ çºäºæé«ä½µç¼æ§ï¼åºåèå¨éè¦çæåè³¦äºæ
+ £å¨éè¡çäºåï¼ä¸¦ä¸å¨äºåçµæä¹åä¸é²è¡éå®ï¼ éå°±æå°è´ç°å¸¸ä¸
+ æ¢çäºåå¾ï¼åºåèæåºç¾ééã
+
+ 4.12) ä»éº¼æ¯ OID ï¼ä»éº¼æ¯ CTID ï¼
+
+ PostgreSQL 裡åµå»ºçæ¯ä¸è¡è¨é齿ç²å¾ä¸åå¯ä¸ç OIDï¼é¤éå¨åµå»ºè¡¨æä½¿ç¨
+ WITHOUT OIDS é¸é ã OID åµå»ºææèªåçæä¸å 4ä½åçµçæ´æ¸ï¼ææ OID å¨ç¸æ
+ PostgreSQL 伺æå¨ä¸åæ¯å¯ä¸çã ç¶èï¼å®å¨è¶é 40åæå°æº¢åºï¼ OID æ
+ ¤å¾æåºç¾éè¤ãPostgreSQL å¨å®çå§é¨ç³»çµ±è¡¨è£¡ä½¿ç¨ OID
+ å¨è¡¨ä¹é建ç«è¯ç¹«ã
+
+ å¨ç¨æ¶çè³æè¡¨ä¸ï¼æå¥½æ¯ä½¿ç¨ SERIAl ä¾ä»£æ¿ OID å çº SERIAL åªè¦ä¿è
+ å¨å®å表ä¸çæ¸å¼æ¯å¯ä¸çå°±å¯ä»¥äºï¼éæ¨£å®æº¢åºçå¯è½æ§å°±é常å°äºï¼
+ SERIAL8 å¯ç¨ä¾ä¿å8ååçµçåºåæ¸å¼ã
+
+ CTID ç¨æ¼æ¨è帶èè³æå¡ï¼å°åï¼åï¼å¡å§ï¼åç§»çç¹å®çç©çè¡ã CTID
+ å¨è¨éè¢«æ´æ¹æéè¼å¾ç¼çæ¹è®ãç´¢å¼è³æä½¿ç¨å®åæåç©çè¡ã
+
+ 4.13) çºä»éº¼ææ¶å°é¯èª¤è³è¨ãERROR: Memory exhausted in AllocSetAlloc()ãï¼
+
+ éå¾å¯è½æ¯ç³»çµ±çèæ¬å§åç¨åäºï¼æèå§æ ¸å°æäºè³æºæè¼ä½çéå¶å¼ãå¨åå
+ postmaster ä¹å試試ä¸é¢çå½ä»¤ï¼
+ ulimit -d 262144
+ limit datasize 256m
+
+ åæ±ºæ¼ä½ ç¨ç
+ shellï¼ä¸é¢å½ä»¤åªæä¸æ¢è½æåï¼ä½æ¯å®å°æä½ çé²ç¨è³ææ®µéå¶è¨å¾æ¯è¼é«ï¼
+ å èä¹è¨±è½è®æ¥è©¢å®æã鿢å½ä»¤æç¨æ¼ç¶åé²ç¨ï¼ä»¥åææå¨éæ¢å½ä»¤éè¡å¾åµå»ºç
+ åé²ç¨ã
+ å¦æä½ æ¯å¨éè¡SQL客æ¶ç«¯æå çºå¾å°è¿åäºå¤ªå¤çè³æèåºç¾åé¡ï¼è«å¨éè¡å®¢æ¶ç
+ «¯ä¹åå·è¡ä¸è¿°å½ä»¤ã
+
+ 4.14) æå¦ä½æè½ç¥éæéè¡çPostgreSQLççæ¬ï¼
+
+ å¾ psql 裡ï¼è¼¸å¥ SELECT version();æä»¤ã
+
+ 4.15) æå¦ä½åµå»ºä¸åé è¨å¼æ¯ç¶åæéçæ¬ä½ï¼
+
+ ä½¿ç¨ CURRENT_TIMESTAMPï¼
+ CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
+
+ 4.16) æææ¨£é²è¡ outer join ï¼å¤é£æ¥ï¼ï¼
+
+ PostgreSQL æ¡ç¨æ¨æºç SQL èªæ³æ¯æå¤é£æ¥ãé裡æ¯å©åä¾åï¼
+ SELECT *
+ FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
+
+ ææ¯
+ SELECT *
+ FROM t1 LEFT OUTER JOIN t2 USING (col);
+
+ éå©åçå¹çæ¥è©¢å¨ t1.col å t2.col ä¸å飿¥ï¼ä¸¦ä¸è¿å t1 ä¸
+ æææªé£æ¥çè¡ï¼é£äºå¨ t2 䏿²æå¹éçè¡ï¼ã å³[å¤]飿¥ï¼RIGHT OUTER
+ JOINï¼å°è¿å t2 䏿ªé£æ¥çè¡ã å®å¨å¤é£æ¥ï¼FULL OUTER JOINï¼å°è¿å t1 å t2
+ 䏿ªé£æ¥çè¡ã ééµå OUTER å¨å·¦[å¤]飿¥ãå³[å¤]飿¥åå®å¨[å¤]飿¥ä¸
+ æ¯å¯é¸çï¼æ®é飿¥è¢«ç¨±çºå§é£æ¥ï¼INNER JOINï¼ã
+
+ 4.17) å¦ä½ä½¿ç¨æ¶åå¤åè³æåº«çæ¥è©¢ï¼
+
+ æ²æè¾¦æ³æ¥è©¢ç¶åè³æåº«ä¹å¤çè³æåº«ã
+ å çºPostgreSQLè¦å è¼èè³æåº«ç¸éç系統ç®éï¼ç³»çµ±è¡¨ï¼ï¼å æ
+ ¤è·¨è³æåº«çæ¥è©¢å¦ä½å·è¡æ¯ä¸å®çã
+
+ éå å¢å¼æ¨¡å¡ contrib/dblink
+ å許æ¡ç¨å½æ¸èª¿ç¨å¯¦ç¾è·¨åº«æ¥è©¢ãç¶ç¶ç¨æ¶ä¹å¯ä»¥åæé£æ¥å°ä¸åçè³æåº«å·è
+ ¡æ¥è©¢ç¶å¾å¨å®¢æ¶ç«¯åä½µçµæã
+
+ 4.18) å¦ä½è®å½æ¸è¿åå¤è¡æå¤åè³æï¼
+
+ å¨å½æ¸ä¸è¿åè³æè¨ééçåè½æ¯å¾å®¹æä½¿ç¨çï¼è©³æåè¦ï¼
+ http://techdocs.postgresql.org/guides/SetReturningFunctions
+
+ 4.19) çºä»éº¼æå¨ä½¿ç¨ PL/PgSQL 彿¸ååè¨æè¡¨æææ¶å°é¯èª¤è³è¨ãrelation with OID
+ ##### does not existãï¼
+
+ PL/PgSQL æç·©å彿¸çè³æ¬å§å®¹ï¼ç±æ¤å¸¶ä¾çä¸åä¸å¥½çå¯ä½ç¨æ¯è¥ä¸å
+ PL/PgSQL
+ 彿¸è¨ªåäºä¸åè¨æè¡¨ï¼ç¶å¾è©²è¡¨è¢«åªé¤ä¸¦é建äºï¼å忬¡èª¿ç¨è©²å½æ¸å°å¤
+ ±æï¼ å çºç·©åç彿¸å§å®¹ä»ç¶æåèçè¨æè¡¨ãè§£æ±ºçæ¹æ³æ¯å¨ PL/PgSQL ä¸
+ ç¨EXECUTE å°è¨æè¡¨é²è¡è¨ªåã鿍£æä¿èæ¥è©¢å¨å·è¡å總æè¢«éæ°è§£æã
+
+ 4.20) ç®åæåªäºè³æè¤å¯«(replication)æ¹æ¡å¯ç¨ï¼
+
+ ãè¤å¯«ãåªæ¯ä¸åè¡èªï¼æå¥½å¹¾ç¨®è¤å¯«æè¡å¯ç¨ï¼æ¯ç¨®é½æåªé»å缺é»ï¼
+
+ 主/å¾å¼è¤å¯«æ¹å¼æ¯å許ä¸å主伺æå¨æ¥åè®/寫çç³è«ï¼èå¤åå¾ä¼ºæå¨åªè½æ¥å
+ è®/SELECTæ¥è©¢çç³è«ï¼ ç®åææµè¡ä¸åè²»ç主/å¾PostgreSQLè¤å¯«æ¹æ¡æ¯
+ Slony-I ã
+
+ å¤å主伺æå¨çè¤å¯«æ¹å¼å許å°è®/寫çç³è«ç¼é給å¤å°ç主æ©ï¼é種æ¹å¼ç±æ¼é
+ è¦å¨å¤å°ä¼ºæå¨ä¹éåæ¥è³æè®å å¯è½æå¸¶ä¾è¼å´éçæ§è½æå¤±ï¼Pgcluster
+ æ¯ç®åéç¨®æ¹æ¡ä¸æå¥½çï¼ä¸¦ä¸éå¯ä»¥åè²»ä¸è¼ã
+
+ 乿ä¸äºåæ¥éä»è²»ååºæ¼ç¡¬é«çè³æè¤å¯«æ¹æ¡ï¼æ¯æä¸è¿°å種è¤å¯«æ¨¡åã
+
+ 4.21) çºä½æ¥è©¢çµæé¡¯ç¤ºçè¡¨åææ¬åèæçæ¥è©¢èªå¥ä¸çä¸åï¼çºä½å¤§å¯«çæä¸è½ä¿çï¼
+
+ æå¸¸è¦çåå æ¯å¨åµå»ºè¡¨æå°è¡¨åææ¯æ¬å使ç¨äºéå¼è( ' '
+ )ï¼ç¶ä½¿ç¨äºéå¼èå¾ï¼è¡¨åææ¬åï¼ç¨±çºæ¨è符ï¼å岿æ¯åå 大å°å¯«çï¼
+ éæè¬èä½ å¨æ¥è©¢æè¡¨åææ¬åä¹æä½¿ç¨éå¼èï¼ä¸äºå·¥å·è»é«ï¼å pgAdmin
+ æå¨ç¼åºåµå»ºè¡¨çæä»¤æèªåå°å¨æ¯åæ¨è符ä¸å éå¼èã å æ¤ï¼çºäºæ¨è
+ 符ççµ±ä¸ï¼ä½ æè©²ï¼
+ * å¨åµå»ºè¡¨æé¿åå°æ¨è符使ç¨éå¼èå¼èµ·ä¾ã
+ * 卿¨è符ä¸åªä½¿ç¨å°å¯«åæ¯ã
+ * ï¼çºäºèå·²åå¨çæ¨è符ç¸åï¼å¨æ¥è©¢ä¸ä½¿ç¨éå¼èå°æ¨è符å¼èµ·ä¾ã
PostgreSQL 常见问题(FAQ)
\r
\r
\r
-
最近更新:2007 年 1 月 5 日 星期五 15:40:20 EST
\r
- 中文版最近更新:2007 年 1 月 29 日 星期一 22:48:04 CST \r
+
最近更新:2007 年 1 月 30 日 星期二 17:37:01 EST
\r
+ 中文版最近更新:2007 年 2 月 1 日 星期四 12:55:04 CST \r
\r
\r
-
1.13)PostgreSQL 和其他数据库系统比起来如何?
\r
+
1.13)PostgreSQL 和其他数据库系统比起来如何?
\r
+
1.14)PostgreSQL 可以处理最近各个国家夏时制的变化吗?
\r
\r
\r
\r
\r
\r
+
1.14) PostgreSQL可以处理最近各个国家夏时制的变化吗?
\r
+ \r
+
PostgreSQL 8.0之前的版本是使用操作系统中的时区数据库来处理夏时制的信息,自8.0版及以后的版本PostgreSQL会自身含有最新的时区信息。
\r
+\r
\r
\r
\r
--- /dev/null
+\r
+\r
+\r
+\r
+
PostgreSQL 常见问题(FAQ)\r
+\r
+\r
+\r
+\r
+\r
+\r
+
PostgreSQL 常見問題(FAQ)
\r
+\r
+\r
+
最近更新:2007 年 2 月 8 日 星期二 22:43:13 EST
\r
+ 中文版最近更新:2007 年 2 月 12 日 星期一 12:00:04 CST \r
+\r
+\r
+ 本文檔的最新版本可以在\r
+\r
+\r
+
\r
+\r
+\r
+\r
+
1.1)PostgreSQL 是什麼?該怎麼發音?
\r
+
1.2)誰控制和管理PostgreSQL ?
\r
+
1.4)PostgreSQL可以運行在哪些作業系統平台上?
\r
+
1.5)我從哪裡能得到PostgreSQL?
\r
+\r
+
1.6)最新版的 PostgreSQL 是什麼?
\r
+
1.7)我從哪裡能得到對 PostgreSQL 的支持?
\r
+
1.9)我如何瞭解已知的 BUG 或暫缺的功能?
\r
+\r
+
1.13)PostgreSQL 和其他資料庫系統比起來如何?
\r
+
1.14)PostgreSQL 可以處理最近各個國家夏時制的變化嗎?
\r
+\r
+\r
+
2.1)我們可以用什麼語言和 PostgreSQL 進行溝通?
\r
+
2.2)有什麼工具可以把 PostgreSQL 用於 Web 頁面?
\r
+\r
+
2.3)PostgreSQL 擁有圖形用戶界面(GUI)嗎?
\r
+\r
+\r
+
3.1)我怎樣才能把 PostgreSQL 裝在 /usr/local/pgsql 以外的地方?
\r
+
3.3)我怎樣調整資料庫伺服器以獲得更好的性能?
\r
+\r
+
3.4)PostgreSQL 裡可以獲得什麼樣的調試特性?
\r
+
3.5)為什麼在試圖連接登錄時收到「Sorry, too many clients」 訊息?
\r
+
3.6)PostgreSQL 的升級過程有哪些內容?
\r
+
3.7)(使用 PostgreSQL )我需要使用什麼電腦硬體?
\r
+\r
+\r
+\r
+
4.1) 如何只選擇一個查詢結果的頭幾行?或是隨機的一行?
\r
+
4.2) 如何查看表、索引、資料庫以及用戶的定義?如何查看
psql 裡用到的查詢指令並顯示它們?
\r
+
4.4) 單筆記錄,單一表,一個資料庫的最大限制是多少?
\r
+
4.5) 存儲一個典型的文本文件裡的資料需要多少磁碟空間?
\r
+\r
+
4.6) 為什麼我的查詢很慢?為什麼這些查詢沒有利用索引?
\r
+
4.7) 我如何才能看到查詢優化器是怎樣評估處理我的查詢的?
\r
+
4.8) 我怎樣做正則表達式搜索和大小寫無關的正則表達式查找?怎樣利用索引進行大小寫無關查找?
\r
+
4.9) 在一個查詢裡,我怎樣檢測一個欄位是否為 NULL?我如何才能準確排序而不論某欄位是否含NULL值?
\r
+
4.11.1) 我怎樣創建一個序列號型或是自動遞增的欄位?
\r
+\r
+
4.11.3) 同時使用 currval() 會導致和其他用戶的衝突情況嗎?
\r
+
4.11.4) 為什麼不在事務異常中止後重用序列號呢?為什麼在序列號欄位的取值中存在間斷呢?
\r
+
4.12) 什麼是 OID?什麼是 CTID ?
\r
+
4.13) 為什麼我收到錯誤資訊「
ERROR: Memory exhausted in AllocSetAlloc()」?
\r
+\r
+
4.14) 我如何才能知道所運行的 PostgreSQL 的版本?
\r
+
4.15) 我如何創建一個預設值是當前時間的欄位?
\r
+
4.16) 如何執行外連接(outer join)查詢?
\r
+
4.19) 為什麼我在使用 PL/PgSQL 函數存取臨時表時會收到錯誤資訊「relation with OID ##### does not exist」?
\r
+\r
+
4.20) 目前有哪些資料複寫(replication)方案可用?
\r
+
4.21) 為何查詢結果顯示的表名或欄名與我的查詢語句中的不同?為何大寫狀態不能保留?
\r
+\r
+\r
+
\r
+\r
+\r
+\r
+\r
+\r
+\r
+
PostgreSQL 是面向目標的關係資料庫系統,它具有傳統商業資料庫系統的所有功能,同時又含有將在下一代 DBMS 系統的使用的增強特性。PostgreSQL 是自由免費的,並且所有源代碼都可以獲得。\r
+\r
+\r
+
PostgreSQL 的開發隊伍主要為志願者,他們遍佈世界各地並通過互聯網進行聯繫,這是一個社區開發項目,它不被任何公司控制。\r
+ 如想加入開發隊伍,請參見開發人員常見問題(FAQ)\r
+\r
+\r
+\r
+ 核心委員會和CVS管理組,但這些工作組的設立主要是為了進行管理工作而不是對PostgreSQL進行獨佔式控制,PostgreSQL項目是由任何人均\r
+ 可參加的開發人員社區和所有用戶控制的,你所需要做的就是訂閱郵件列表,參與討論即可(要參與PostgreSQL的開發詳見\r
+\r
+\r
+\r
+\r
+\r
+PostgreSQL 而不含源代碼也可以,唯一的限制就是你不能因軟體自身問題而向我們追訴法律責任,另外就是要求所有的軟體拷貝中須包括以下版權聲明。\r
+下面就是我們所使用的BSD版權聲明內容:\r
+\r
+\r
+\r
+Development Group Portions Copyright (c) 1994-6 Regents of the\r
+University of California)\r
+\r
+ 並且無須簽署因此而產生的證明,前提是上面的版權聲明和本段以及下面兩段文字出現在所有拷貝中。\r
+\r
+\r
+\r
+ documentation for any purpose, without fee, and without a written agreement is \r
+ hereby granted, provided that the above copyright notice and this paragraph and \r
+ the following two paragraphs appear in all copies.)\r
+\r
+\r
+ 間接的,特殊的,附加的或者相伴而生的損壞,包括利益損失的責任,即使加州大學已經建議了這些損失的可能性時也是如此。\r
+\r
+\r
+ DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST \r
+ PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF \r
+ THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH \r
+ DAMAGE.)\r
+\r
+\r
+\r
+ 這裡提供的這份軟體是基於「當作是」的基礎的,因而加州大學沒有責任提供維護,支持,更新,增強或者修改的服務。\r
+\r
+\r
+ NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A \r
+ PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND \r
+ THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, \r
+ SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.)
\r
+\r
+\r
+\r
+\r
+\r
+\r
+ (Win95,Win98,WinMe)需要通過Cygwin模擬環境運行PostgreSQL。\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+ 主要的IRC頻道是在FreeNode(irc.freenode.net)的#postgresql,為了連上此頻道,可以使用 UNIX 程序 irc,其指令格式:\r
+ irc -c '#postgresql' "$USER" irc.freenode.net ,或者使用其他IRC客戶端程序。在此網絡中還存在一個 PostgreSQL 的西班牙頻道(#postgersql-es)和法語頻道\r
+ (#postgresql-fr)。同樣地,在 EFNET 上也有一個 PostgreSQL 的交流頻道。\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+通過使用 Bug 提交表格或是發往 PostgreSQL 郵件列表的 Bug 通常會有以下之一回覆:\r
+\r
+\r
+
所提交內容不是一個 Bug 及其不是 Bug 的原因。\r
+
所提交內容是一個已知的 Bug 並且已經加入 TODO 待處理任務列表。\r
+
所提交的 Bug 已在當前版本中被修正。\r
+
所提交的 Bug 已修正但尚未將補丁加入現在的發布軟體包。\r
+
請求提交者提供更詳細的資訊:\r
+
作業系統\r
+\r
+
PostgreSQL 版本\r
+
可重現 Bug 的測試案例\r
+
調試資訊\r
+
調試跟蹤輸出\r
+ \r
+\r
+
所提交內容是一個新 Bug,將執行以下工作:\r
+\r
+
創建一個新補丁並將其加入下一個主要版本或是小的改進版本中。\r
+
此 Bug 暫時不能修正,將被加至 TODO 待處理任務列表。\r
+ \r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+
要求增加新功能的申請通常會收到以下之一的回覆:
\r
+\r
+
該功能已加入 TODO 待處理任務列表。\r
+
該功能不是必須的,因為:\r
+
它是現有的且符合 SQL 標準的某功能的重複。\r
+
該功能性會大大增加代碼的複雜程序,而帶來的好處是微不足道的。\r
+
該功能是不安全或是不可靠的。\r
+\r
+ \r
+\r
+
該功能將被加入 TODO 待處理任務列表。\r
+\r
+\r
+PostgreSQL 不使用 Bug 跟蹤系統,因為我們發現在郵件列表中直接回覆以及保證 TODO 任務列表總是處於最新狀態的方式工作效率會更高一些。事實上,Bug不會在我們的軟體中存在很長時間,\r
+對影響很多用戶的Bug也總是很快會被修正。唯一能找到所有改進、提高和修正的地方是 CVS 的日誌資訊,即使是在軟體新版本的發布資訊中也不會列出每一處的軟體更新。\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+ 有兩本關於PostgreSQL的書在線提供,在 \r
+ 也有大量的 PostgreSQL 書籍可供購買,其中最為流行的一本是由 Korry Douglas 編寫的。在 \r
+ 上有大量有關 PostgreSQL 書籍的簡介。\r
+\r
+ 客戶端的命令行程序psql有一些以 \d 開頭的命令,可顯示關於類型,操作符,函數,聚合等資訊,使用 \? 可以顯示所有可用的命令。\r
+\r
+\r
+ 我們的 web 站點包含更多的文檔。\r
+\r
+\r
+\r
+\r
+\r
+ 我們的許多用戶喜歡The Practical SQL Handbook, Bowman, Judith S. 編寫,Addison-Wesley公司出版,其他的則喜歡\r
+ The Complete Reference SQL, Groff 編寫,McGraw-Hill 公司出版。\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+
PostgreSQL 擁有大型商用資料庫最多的功能,例如:事務,子查詢,觸發器,視圖,外鍵參考完整性和複雜的鎖定等。\r
+ 我們還有一些它們沒有的特性,如用戶定義類型,繼承,規則和多版本並行控制以減少鎖的爭用等。
\r
+\r
+ \r
+\r
+
性能\r
+
PostgreSQL和其他商用和開源的資料庫具有類似的性能。對某些處理它比較快,對其他一些處理它比較慢。\r
+ 與其他資料庫相比,我們的性能優劣通常在 +/- 10%之間。
\r
+ \r
+\r
+
可靠性\r
+
\r
+\r
+ 我們都知道資料庫必須是可靠的,否則它就一點用都沒有。我們努力做到發佈經過認真測試的,缺陷最少的穩定代碼。每個版本至少有一個月的 beta\r
+ 測試時間,並且我們的發布歷史顯示我們可以提供穩定的,牢固的,可用於生產使用的版本。我們相信在這方面我們與其他的資料庫軟體是相當的。
\r
+ \r
+\r
+
支持\r
+
\r
+ 我們的郵件列表提供一個非常大的開發人員和用戶的組以幫助解決所碰到的任何問題。我們不能保證總是能解決問題,相比之下,商用資料庫軟體也並不是總能夠提供解決方法。\r
+ 直接與開發人員,用戶群,手冊和源程序接觸使PostgreSQL的支持比其他資料庫還要好。還有一些商業性的全面技術支持,可以給提供給那些需要的人。(參閱1.7 小節)
\r
+ \r
+\r
+\r
+
價格\r
+
\r
+ 我們對任何用途都免費,包括商用和非商用目的。\r
+ 你可以不加限制地向你的產品裡加入我們的代碼,除了那些我們在上面的版權聲明裡聲明的 BSD版權之外的內容。\r
+ \r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+
\r
+\r
+\r
+\r
+\r
+\r
+ 是他們可以有各自的發布計劃和各自獨立的開發組。\r
+\r
+ 並且通過 Internet 很容易搜索到。\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+ 對於複雜的任務,很多人採用 Perl 接口和 使用 CGI.pm 的 DBD::Pg 或 mod_perl 。\r
+\r
+\r
+\r
+\r
+\r
+\r
+
\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+ 你只有在修改了配置文件 postgresql.conf 中的 listen_addresses,且也在配置文件 $PGDATA/pg_hba.conf 中打開了\r
+ 基於遠程電腦( host-based )的身份認證,並重新啟動 PostgreSQL,否則其他電腦是不能與你的 PostgreSQL 伺服器進行連接的。\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+
\r
+ 這主要涉及修改查詢方式以獲取更好的性能:\r
+
創建索引,包括表達式和部分索引;\r
+\r
+
使用 COPY 語句代替多個 Insert 語句;\r
+
將多個SQL語句組成一個事務以減少提交事務的開銷;\r
+
從一個索引中提取多條記錄時使用 CLUSTER;\r
+
從一個查詢結果中取出部分記錄時使用 LIMIT;\r
+
使用預編譯式查詢(Prepared Query);\r
+
使用 ANALYZE 以保持精確的優化統計;\r
+\r
+
定期使用 VACUUM 或 pg_autovacuum\r
+
進行大量資料更改時先刪除索引(然後重建索引)\r
+ \r
+ \r
+\r
+
伺服器的配置\r
+
\r
+\r
+ 配置文件 postgres.conf 中的很多設置都會影響性能,所有參數的列表可見:\r
+ \r
+ \r
+\r
+
硬體的選擇\r
+\r
+
\r
+ 電腦硬體對性能的影響可瀏覽 \r
+ \r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+ 增加 postmaster 的後台併發處理數,修改後需重新啟動 postmaster。\r
+\r
+\r
+\r
+\r
+\r
+所有PostgreSQL的用戶應該在最接近(你所使用的主版本)的小改進版本發佈盡快升級。儘管每次升級可能都有一點風險,PostgreSQL的小改\r
+進版僅僅是設計用來修正一些 Bug 的,程式碼改動較少,所以風險還是很小的。PostgreSQL社區認為一般情況下不升級的風險還是多於升級的。\r
+\r
+ 這些改變一般比較複雜,因此我們不維持資料文件的向後兼容性。因此從老版本中進行資料導出(dump)/然後在新版本中進行資料導入(reload)對主版本的升級是必須的。\r
+\r
+\r
+\r
+ ECC RAM(帶奇偶校驗的記憶體),SCSI (硬碟)和優質的主機板比一些便宜貨要更加可靠且具有更好的性能。 PostgreSQL 幾乎可以運行在任何硬體上,\r
+ 但如果可靠性和性能對你的系統很重要,你就需要全面的研究一下你的硬體組態了。在我們的郵件列表上也有關於\r
+ 硬體配置和性價比的討論。\r
+\r
+\r
+\r
+
\r
+\r
+\r
+\r
+\r
+ 如果有一個索引與 ORDER BY 中的條件匹配,PostgreSQL 可能就只處理要求的頭幾條記錄,\r
+ (否則將對整個查詢進行處理直到生成需要的行)。如果在執行查詢功能時不知道確切的記錄數,\r
+ 可使用游標(cursor)和FETCH功能。\r
+\r
+\r
+ FROM tab\r
+ ORDER BY random()\r
+ LIMIT 1 ;\r
+\r
+\r
+\r
+\r
+\r
+ 文件 pgsql/src/bin/psql/describe.c,它包括為生成 psql 反斜槓命令的輸出的所有 SQL 命令。你還可以帶 -E 選項啟動 psql,\r
+ 這樣它將列印出你在 psql 中所給出的命令執行時的內部實際使用的 SQL 查詢語句。PostgreSQL也提供了一個兼容 SQL的 INFORMATION SCHEMA 接口,\r
+ 你可以從這裡獲取關於資料庫的資訊。\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+ ALTER TABLE tab ADD COLUMN new_col new_data_type;\r
+ UPDATE tab SET new_col = CAST(old_col AS new_data_type);\r
+ ALTER TABLE tab DROP COLUMN old_col;\r
+ COMMIT;\r
+\r
+\r
+\r
+\r
+\r
+
\r
+\r
+
\r
+
單個資料庫最大尺寸? | 無限制(已存在有 32TB 的資料庫) |
\r
+
單個表的最大尺寸? | 32 TB |
\r
+
一行記錄的最大尺寸? | 1.6 TB |
\r
+
一個欄位的最大尺寸? | 1 GB |
\r
+\r
+
\r
+
一個表裡最大列數? | \r
+
無限制 |
\r
+
\r
+
一個表裡最大欄位數? | \r
+
250-1600 (與列類型有關) |
\r
+
一個表裡的最大索引數量? | 無限制 |
\r
+
\r
+
\r
+\r
+\r
+\r
+ 事實上,當上述這些數值變得異常地大時,系統性能也會受很大影響。\r
+\r
+\r
+\r
+\r
+ 並且全文檢索允許對列中的單詞進行搜索。\r
+\r
+\r
+\r
+\r
+ 假設文本串的平均長度為20位元組(Byte)。文本文件佔用 2.8 MB。存放這些資料的PostgreSQL資料庫文件大約是 5.2 MB:\r
+\r
+ 24 字元組節: 一個整數型欄位和一個文本型欄位\r
+ + 4 字元組節: 頁面內指向元組的指針\r
+ ----------------------------------------\r
+ 52 字元組每行\r
+\r
+ PostgreSQL 資料頁的大小是 8192 位元組 (8 KB),則:\r
+\r
+ 8192 字元組每頁\r
+ ------------------- = 158 行/資料頁(向下取整)\r
+ 52 字元組每行\r
+\r
+ 100000 資料行\r
+ -------------------- = 633 資料頁(向上取整)\r
+ 146 行/資料頁\r
+\r
+ 633 資料頁 * 8192 字節/頁 = 5,185,536 字節(5.2 MB)\r
+\r
+\r
+\r
+\r
+\r
+\r
+ 這是因為索引掃瞄引起的隨即磁盤存取可能比直接地讀取表(順序掃瞄)更慢。\r
+\r
+\r
+ 使用統計值,優化器知道表中有多少行,就能夠更好地判斷是否利用索引。\r
+ 統計值對確定優化的連接順序和連接方法也很有用。在表的內容發生變化時,應定期進行統計值的更新收集。\r
+\r
+ 結合在一起使用的話,通常將會使用索引,因為這時僅返回表中的一小部分記錄。\r
+\r
+ 然後再次運行查詢,你就可以看出使用一個索引掃瞄是否確實要快一些。\r
+\r
+\r
+\r
+\r
+\r
+\r
+
在做 initdb 時必須採用預設的本地設置 C locale,因為系統不可能知道在非 C locale 情況時下一個最大字符是什麼。\r
+ 在這種情況下,你可以創建一個特殊的 text_pattern_ops
索引來用於 LIKE 的索引。\r
+ \r
+\r
+ 在 8.0 之前的版本中,除非要查詢的資料類型和索引的資料類型相匹配,否則索引經常是未被用到,特別是對 int2, int8 和數值型的索引。\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+ FROM tab\r
+ WHERE lower(col) = 'abc';\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+ FROM tab\r
+ WHERE col IS NULL;\r
+\r
+\r
+ IS NOT NULL 修飾符,條件為真 true 將比條件為假 false 排在前面,下面的例子就會將含\r
+ NULL 的記錄排在結果的上面部分:\r
+\r
+\r
+ FROM tab\r
+ ORDER BY (col IS NOT NULL)\r
+\r
+\r
+
\r
+
\r
+
類型 | \r
+
內部名稱 | \r
+
說明 | \r
+
\r
+\r
+
VARCHAR(n) | varchar | 指定了最大長度,變長字符串,不足定義長度的部分不補齊 |
\r
+
CHAR(n) | bpchar | 定長字符串,實際資料不足定義長度時,以空格補齊 |
\r
+
TEXT | text | 沒有特別的上限限制(僅受行的最大長度限制) |
\r
+
BYTEA | bytea | 變長字節序列(使用NULL字符也是允許的) |
\r
+\r
+
"char" | char | 單個字符 |
\r
+
\r
+
\r
+\r
+\r
+\r
+ 於是實際佔用的空間比聲明的大小要多一些。\r
+ 然而這些類型如定義很長時都可以被壓縮存儲,因此磁盤空間也可能比預想的要少。\r
+\r
+\r
+ TEXT 適用於存儲最大可達 1G 左右但未定義限制長度的字符串。\r
+\r
+ 而 VARCHAR(n) 只存儲所給定的資料內容。\r
+ BYTEA 用於存儲二進制資料,尤其是包含 NULL 字節的值。這些類型具有差不多的性能。\r
+\r
+\r
+\r
+\r
+\r
+\r
+ id SERIAL, \r
+ name TEXT \r
+ );\r
+\r
+\r
+\r
+ CREATE TABLE person ( \r
+ id INT4 NOT NULL DEFAULT nextval('person_id_seq'),\r
+ name TEXT\r
+ );\r
+\r
+\r
+\r
+\r
+\r
+\r
+
new_id = execute("SELECT nextval('person_id_seq')");\r
+ execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')");\r
+\r
+ 這樣還能在其他查詢中使用存放在 new_id 裡的新值(例如,作為參照 person 表的外鍵)。\r
+ 注意自動創建的 SEQUENCE 對象的名稱將會是 <table>_<serialcolumn>_seq,\r
+ 這裡 table 和 serialcolumn 分別是你的表的名稱和你的 SERIAL 欄位的名稱。\r
+\r
+ 類似的,在 SERIAL 對象預設插入後你可以用函數 currval() 檢索剛賦值的 SERIAL 值,例如:\r
+\r
+\r
+
execute("INSERT INTO person (name) VALUES ('Blaise Pascal')");\r
+ new_id = execute("SELECT currval('person_id_seq')");\r
+\r
+\r
+\r
+\r
+\r
+ 這就會導致異常中止的事務後,序列號會出現間隔。\r
+\r
+\r
+\r
+\r
+ OID 創建時會自動生成一個 4位元組的整數,所有 OID 在相應 PostgreSQL 伺服器中均是唯一的。 然而,它在超過 40億時將溢出,\r
+ OID 此後會出現重複。PostgreSQL 在它的內部系統表裡使用 OID 在表之間建立聯繫。\r
+\r
+ 在用戶的資料表中,最好是使用 SERIAl 來代替 OID\r
+\r
+ 因為 SERIAL 只要保證在單個表中的數值是唯一的就可以了,這樣它溢出的可能性就非常小了,\r
+ SERIAL8 可用來保存8字元組的序列數值。\r
+\r
+\r
+ CTID 在記錄被更改或重載後發生改變。索引資料使用它們指向物理行。\r
+\r
+\r
+\r
+\r
+\r
+ limit datasize 256m\r
+\r
+ 因而也許能讓查詢完成。這條命令應用於當前進程,以及所有在這條命令運行後創建的子進程。\r
+ 如果你是在運行SQL客戶端時因為後台返回了太多的資料而出現問題,請在運行客戶端之前執行上述命令。\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+ FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);\r
+\r
+\r
+ FROM t1 LEFT OUTER JOIN t2 USING (col);\r
+\r
+ 右[外]連接(RIGHT OUTER JOIN)將返回 t2 中未連接的行。\r
+ 完全外連接(FULL OUTER JOIN)將返回 t1 和 t2 中未連接的行。\r
+ 關鍵字 OUTER 在左[外]連接、右[外]連接和完全[外]連接中是可選的,普通連接被稱為內連接(INNER JOIN)。\r
+\r
+\r
+\r
+ 因為PostgreSQL要加載與資料庫相關的系統目錄(系統表),因此跨資料庫的查詢如何執行是不定的。\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+ 函數訪問了一個臨時表,然後該表被刪除並重建了,則再次調用該函數將失敗,\r
+ 因為緩存的函數內容仍然指向舊的臨時表。解決的方法是在 PL/PgSQL 中用EXECUTE\r
+ 對臨時表進行訪問。這樣會保證查詢在執行前總會被重新解析。\r
+\r
+\r
+\r
+\r
+ 目前最流行且免費的主/從PostgreSQL複寫方案是 \r
+\r
+ 多個主伺服器的複寫方式允許將讀/寫的申請發送給多台的主機,這種方式由於需要在多台伺服器之間同步資料變動\r
+ 可能會帶來較嚴重的性能損失,
Pgcluster 是目前這種方案中最好的,並且還可以免費下載。
\r
+\r
+ 也有一些商業需付費和基於硬體的資料複寫方案,支持上述各種複寫模型。\r
+\r
+\r
+\r
+
4.21) 為何查詢結果顯示的表名或欄名與我的查詢語句中的不同?為何大寫狀態不能保留?
\r
+\r
+ 最常見的原因是在創建表時對表名或是欄名使用了雙引號( ' ' ),當使用了雙引號後,表名或欄名(稱為標識符)存儲時是區分\r
+ 這意謂著你在查詢時表名或欄名也應使用雙引號,一些工具軟體,像 pgAdmin 會在發出創建表的指令時自動地在每個標識符上加雙引號。\r
+ 因此,為了標識符的統一,你應該:\r
+
在創建表時避免將標識符使用雙引號引起來。\r
+
在標識符中只使用小寫字母。\r
+\r
+
(為了與已存在的標識符相同)在查詢中使用雙引號將標識符引起來。\r
+\r
+\r
+\r
+\r
+
\ No newline at end of file