
                          PostgreSQL ⣨FAQ
                                       
   £2003  01  06  һ 22:27:35 CST
   
   ĿǰάԱBruce Momjian (pgman@candle.pha.pa.us)
   İάԱΰƽ laser@pgsqldb.com 
   
   ĵ°汾http://www.postgresql.org/files/documentation/fa
   qs/FAQ.html 鿴
   
   ϵͳƽ̨صhttp://www.postgresql.org/docs/faq/ش
     _________________________________________________________________
   
                                  
                                      
   1.1) PostgreSQL ʲôô
   1.2) PostgreSQL İȨʲô?
   1.3) PostgreSQL ʲô Unix ƽ̨ϣ
   1.4) õķ Unix ƽ̨Щ
   1.5) Ҵܵõ PostgreSQL
   1.6) Ҵܵõ PostgreSQL ֧֣
   1.7) PostgreSQL µİ汾ʲô
   1.8) Щõ PostgreSQL ĵ
   1.9) ˽֪ BUG ȱʧԣ
   1.10) Ӧѧϰ SQL 
   1.11) PostgreSQL  Y2K ݵ
   1.12) Ӧ뿪飿
   1.13) Ӧύһ BUG 棿
   1.14) PostgreSQL  DBMS Σ
   1.15) Ӧ PostgreSQL 
   
                               ûͻ
                                      
   2.1)  PostgreSQL  ODBC ô
   2.2) ʲô߿԰ PostgreSQL  Web ҳ棿
   2.3) PostgreSQL ӵͼû
   2.4) ǿʲôԺ PostgreSQL 򽻵
   
                                ϵͳ
                                      
   3.1) ܰ PostgreSQL װ /usr/local/pgsql ĵط
   3.2)  postmaster ʱ Bad System Callϵͳô Core
   Dumped Ϊʲô
   3.3) ͼ postmaster ʱ IpcMemoryCreate Ϊʲô
   3.4) ͼ postmaster ʱ IpcSemaphoreCreate
   Ϊʲô
   3.5) οӣ
   3.6) ݿԻøõܣ
   3.7) PostgreSQL Իʲôĵԣ
   3.8) Ϊʲôͼӵ¼ʱյSorry, too many clients Ϣ
   3.9) pgsql_tmp Ŀ¼ﶼЩʲô
   3.10) ΪʲôҪ PostgreSQL 汾ʱ dump  restore 
   
                                  
                                      
   4.1) αͨα֮ʲô
   4.2) ֻѡһѯͷУ
   4.3) λȡһݿбб psql
   ￴Ķ
   4.4) ӱɾһУ
   4.5) һУһһߴǶ٣
   4.6) 洢һ͵ıļҪٴ̿ռ䣿
   4.7) β鿴ݿԼûĶ壿
   4.8) ҵĲѯûΪʲô
   4.9) βܿѯŻҵĲѯģ
   4.10) R-tree ʲô
   4.11) ʲôǻѯŻGenetic Query Optimization
   4.12)
   ʽʹСд޹صʽңд
   Сд޹زң
   4.13) һѯһֶǷΪ NULL
   4.14) ַ֮ʲôͬ
   4.15.1) һк/ԶֶΣ
   4.15.2) λһкŵֵ
   4.15.3) ʹ currval()  nextval() ᵼºûrace
   condition
   4.15.4)
   Ϊʲô쳣ֹкأΪʲôкֶεȡֵдڼ
   أ
   4.16) ʲô OIDʲô TID 
   4.17) PostgreSQL ʹõһЩĺʲô
   4.18) ΪʲôյERROR: Memory exhausted in AllocSetAlloc()
   4.19) β֪е PostgreSQL İ汾
   4.20) ΪʲôҵĴ´invalid large obj
   descriptorǷĴ
   4.21) δһȱʡֵǵǰʱֶΣ
   4.22) Ϊʲôʹ IN Ӳѯô
   4.23) ν outer join ӣ
   4.24) ʹ漰ݿĲѯ
   4.25) úضлУ
   4.26) Ϊʲô PL/PgSQL вܿɿشɾʱ
   4.27) Щݸѡ
   4.28) Щݼѡ
   
                              չ PostgreSQL
                                      
   5.1) дһû庯 psql ʱΪʲôᵼ core
   dump
   5.2) ܸ PostgreSQL һЩͦͺͺ
   5.3) дһһ¼ C 
   5.4) ޸һԴļΪʲô±ûпı䣿
     _________________________________________________________________
   
                                  
                                      
    1.1) PostgreSQL ʲôô
    
   PostgreSQL  Post-Gres-Q-L 
   
   PostgreSQL һ DBMS о POSTGRES
   ݿϵͳǿ档PostgreSQL ڱ POSTGRES
   ǿģͺͷḻ͵Ļϣһչ˵ SQL
   Ӽȡȵ PostQuel ѯԡPostgreSQL
   ɵĲԴ붼Իá
   
   PostgreSQL Ŀɲμ PostgreSQL
   ʼбһԱССĿǰе Marc G. Fournier
   scrappy@postgreSQL.org
   μμ1.6ڣڸ PostgreSQL
   п
   
   PostgreSQL 1.01  Andrew Yu  Jolly
   ChenΪֲԣԺǿ˴סPostgreS
   QL Դ PostgresڼݴѧУ Michael Stonebraker
   ڵָ£оͱְԱɵġ
   
   ڲ Postgres 1995 ꣬ SQL
   ָܺĳ Postgres95 1996ĩŸΪ PostgreSQL
   
    1.2) PostgreSQL İȨʲô?
    
   PostgreSQL İȨԼ
   
   PostgreSQL ݿϵͳ
   
   PostgreSQL Data Base Management System
   
   ְȨc1996-2002PostgreSQL ȫ򿪷С
   ְȨc1994-6 ݴѧ
   
   Portions copyright (c) 1996-2002, 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.
    BSD Ȩһ
   ĿԴȨԴʹδκơϲҲ
   
   
    1.3) PostgreSQL ʲô Unix ƽ̨ϣ
    
   һ˵һִ UNIX ݵƽ̨ PostgreSQL
   ڰװָг˷ʱȷԵƽ̨
   
    1.4) õķ Unix ƽ̨Щ
    
   ͻ
   
    libpq C ⣬psqlӿںͿͻӦóɿ MS Windows
   ƽ̨ǿܵġ£ͻ MS Windows Уͨ
   TCP/IP һֵ֧ Unix
   ƽ̨ϵķͨѶ汾аһļ win32.mak 
   Win32 libpq  psql PostgreSQL ҲԺ ODBC ͻͨѶ
   
   
   
   ݿڿͨ Cygwin Cygnus  Unix/NT ֲ Windows
   NT  Win2k Сķ汾 See pgsql/doc/FAQ_MSWIN ļ
   http://www.PostgreSQL.org/docs/faq-mswin.html 
   
   ֲ MS Win NT/2000/XP ıĹڽС
   
    1.5) Ҵܵõ PostgreSQL
    
   PostgreSQL FTPվ
   ftp://ftp.PostgreSQL.org/pubվԲοվҳ
   
    1.6) Ҵܵõ PostgreSQL ֧֣
    
   Ҫʼбǣpgsql-general@postgreSQL.orgй
   PostgreSQL ⡣ҪбһʼݣУΪ
        subscribe
        end

   ʼ pgsql-general-request@postgreSQL.org 
   
   ԻȡժҪбҪбʼpgsql-general-digest-req
   uest@postgreSQL.orgΪ
        subscribe
        end

   ÿбﵽԼ 30k ϢʱժҪͷ͸бĳԱ
   
   ԲμӳʼбҪбһʼ
   bugs-request@postgreSQL.orgΪ
        subscribe
        end

   ԲμӿԱʼбҪбһʼ
   hackers-request@postgreSQL.orgΪ
        subscribe
        end

   Ĺ PostgreSQL ʼбϢ PostgreSQL  WWW
   ҳҵ
   
     http://postgresql.org/
     
    EFNet ﻹһ IRC ƵƵ #PostgreSQL unix irc -c
   '#PostgreSQL' "$USER" irc.phoenix.net
   
   ҵֹ֧˾б
   http://www.PostgreSQL.org/users-lounge/commercial-support.html 
   
    1.7) PostgreSQL µİ汾ʲô
    
   PostgreSQL µİ汾ǰ汾 7.2.3עӦ 7.3.1 ˡ
   
   Ǽƻÿĸ·һҪ汾
   
    1.8) Щõ PostgreSQL ĵ
    
   ڷһЩֲᣬֲҳһЩСĲӡμ /doc
   Ŀ¼עӦΪ $PGHOME/doc㻹 PostgreSQL
   ֲᣬ http://www.PostgreSQL.org/users-lounge/docs/ 
   
    PostgreSQL ṩ
   http://www.PostgreSQL.org/docs/awbook.html 
   http://www.commandprompt.com/ppbook/ 
   http://www.ca.PostgreSQL.org/books/ й PostgreSQL
   Ŀɹ鼮б http://techdocs.PostgreSQL.org/ ռй
   PostgreSQL ļ¡
   
   psql һЩ \d ʾͣۼȵϢ
   
   ǵ web վĵ
   
    1.9) ˽֪ BUG ȱʧԣ
    
   PostgreSQL ֧һչ˵ SQL-92 Ӽǵ TODO
   бȡһ֪棬ȱʧԺδƻ
   
    1.10) Ӧѧϰ SQL
    
    http://www.postgresql.org/docs/awbook.html Ĺ PostgreSQL
    SQLעصˡ
   http://www.commandprompt.com/ppbook һ PostgreSQL
   顣http://www.intermedia.net/support/sql/sqltut.shtmhttp://ourw
   orld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM 
   http://sqlcourse.com һŽ̡̳
   
   һ "Teach Yourself SQL in 21 Days, Second
   Edition"21ѧSQLڶ棩
   http://members.tripod.com/er4ebus/sql/index.htm
   
   ǵûϲ The Practical SQL Handbook, Bowman, Judith S., et
   al., Addison-Wesley   The Complete Reference SQL, Groff et
   al., McGraw-Hill 
   
    1.11) PostgreSQL  Y2K ݵ
    
   ǣǺ׿ 2000 AD ֮ 2000 BC ֮ǰڡ
   
    1.12) Ӧ뿪飿
    
   ȣµԴ벢Ķ web վ򷢲е PostgreSQL
   ĵΣ pgsql-hackers  pgsql-patches
   ʼб pgsql-patches ύĲ
   
   ڴʮ PostgreSQL CVS 鵵 COMMIT ȨޡǶѾ
   ύ˷ǳĲˣеύ˺ѸϽ࣬
   ύĲǸġ
   
    1.13) ӦύһBUG棿
    
    http://www.PostgreSQL.org/bugs/bugs.php  PostgreSQL BugTool
   ҳ, ύһBUGָϡ
   
   ͬҲҪǵ ftp վ
   ftp://ftp.postgreSQL.org/pubûиµ PostgreSQL 汾򲹶
   
    1.14) PostgreSQL  DBMS Σ
    
   кüַԣܣɿԣֺ֧ͼ۸
   
   
          PostgreSQL ӵд DBMS
          ԣ磺ӲѯͼοԺ
          ͸ӵȡǻһЩûеԣû̳ͣУ
          Ͷ汾пԼõȡ
          
   
          PostgreSQL
          úͿԴݿƵܡĳЩȽϿ죬
          һЩȽ MySQL ݿϵͳȽϣ
          insert/update ʱΪȻ MySQL
          
          κԡǵҪǿɿԺԣÿ
          ηʱϵظĽܡһȤҳȽ PostgreSQL 
          MySQL http://openacs.org/why-not-mysql.html
          
   ɿ
          ֪ DBMS
          ǿɿģһöûСŬ
          ԵģȶĳٵĴ롣ÿ汾һµ beta
          ԣǵķʷʾǿṩȶģι̵ģ
          ʹõİ汾ⷽݿ൱ġ
          
   ֧
          ǵʼбṩһǳĿԱû԰
          κ⡣ǲܱ֤϶ܽ⣬֮£ DBMS
          Ҳܹṩֱ뿪ԱûȺֲԴ
          Ӵ PostgreSQL ֱ֧ DBMS
          ҪáһЩҵԵԤװ֧֣ԸṩЩҪˡ
          ֧ FAQ  1.6 Сڡ
          
   ۸
          Ƕκ;ѣúͷĿġԲƵ
          ĲƷǵĴ룬ЩİȨ
          BSD İȨ⡣
          
    1.15) Ӧ PostgreSQL 
    
   Դ1996꿪ʼPostgreSQL Ѿһ֯ЩӦù鹦 Marc
   Fournier˲Щһֱ֯
   
   һԴĿ˵ʩǷǳҪġֹܷӳ
   ĿǰĻҡ
   
   Ȼ֯תɱơάǰи¶ȵġһԵĿ֧
   Ĺ˾ܽо֧ҵ
   http://store.pgsql.com/shopping/ о
   
   Ȼҳἰ PostgreSQL ˾Щ֧ PostgreSQL
   ĿûضĹ˾Ը⣬Ҳʼ֧Ʊϵ
   ַ
     _________________________________________________________________
   
                               ûͻ
                                      
    2.1)  PostgreSQL  ODBC ô
    
    ODBC ԻãPsqlODBC  OpenLink ODBC.
   
   http://gborg.postgresql.org/project/psqlodbc/projdisplay.php
    PsqlODBC 
   
   OpenLink ODBC Դ http://www.openlinksw.com/ áǵı׼
   ODBC ͻݣκֵ֧Ŀͻƽ̨Win, Mac,
   Unix, VMSʹ PostgreSQL ODBC
   
   ǿܽƷ۸ЩҪҵֵ֧ûһ
   freeware İ汾Եõѯ
   postgres95@openlink.co.uk
   
    2.2) ʲô߿԰ PostgreSQL  Web ҳ棿
    
   һݿΪ̨ͦ վǣhttp://www.webreview.com 
   
    Web ɣPHP һõĽӿڡڣhttp://www.php.net/ 
   
   ڸӵ񣬺ܶ˲ Perl ӿں CGI.pm  mod_perl 
   
    2.3) PostgreSQL ӵͼû
    
   ǵġм PostgreSQL
   ͼνӿڡPgAccesshttp://www.pgaccess.com)PgAdmin II
   http://www.pgadmin.orgWin32 RHDB Admin
   (http://sources.redhat.com/rhdb/ Լ Rekall
   http://www.thekompany.com/products/rekall/
   רе/proprietary)PHPPgAdmin
   http://phppgadmin.sourceforge.net/ һ web  PostgreSQL
   ʽӿڡ
   
   һͼû棬Ϊ PgAccess
   Ҳҳ http://www.pgaccess.org/
   
    2.4) ǿʲôԺ PostgreSQL 򽻵
    
   еıԶз PostgreSQL
   ĽӿڡԵչģб
   
   PostgreSQL а½ӿڣ
     * C (libpq)
     * Embedded C (ecpg)
     * Java (jdbc)
     * Python (PyGreSQL)
     * TCL (libpgtcl)
       
   Ľӿ http://gborg.postgresql.org ϵ Drivers/Interfaces
   Сڡ
     _________________________________________________________________
   
                                ϵͳ
                                      
    3.1) ܰ PostgreSQL װ /usr/local/pgsql ĵط
    
    configure ʱ --prefix ѡ
   
    3.2)  postmaster ʱ Bad System Callϵͳô Core
    Dumped Ϊʲô
    
   Ǻܶ෽⣬ȼϵͳǷ֧ System V
   չPostgreSQL Ҫںֹ֧ڴźŵơ
   
    3.3) ͼ postmaster ʱ IpcMemoryCreate Ϊʲô
    
   Ҫôûںȷùڴ棬ҪôҪں˵Ŀù
   ڴ档ҪĹڴȡϵṹ
   postmaster
   ʱʹõĻͺ˽ĿԴϵͳʹȱʡͽ
   ĿʱҪ~1MBйعڴźŵƵϸϢο PostgreSQL
   Administrator's Guide 
   
    3.4) ͼ postmaster ʱ IpcSemaphoreCreate Ϊʲô
    
   Ϣ IpcSemaphoreCreate: semget failed (No space left on
   device)ôںû㹻źŵԴPostgres
   ÿǱڵĺ̶̨ҪһźŵơһʱĽԱȽٵĺ
   ̨ postmasterʹÿ -N һȱʡֵ 32
   Ĳ postmasterõĽǼӴں˵ SEMMNS 
   SEMMNI 
   
   ݿܴʱźŵƲÿܵϵͳ
   
   Ϣʲôܾ͸ûںźŵ֧
   йعڴźŵƵϸϢο PostgreSQL Administrator's
   Guide 
   
    3.5) οӣ
    
   ȱʡʱPostgreSQL ֻͨ unix ׽Աӡʹ
   -i  postmasterͨӦı $PGDATA/pg_hba.conf
   ļΪ host-based
   ֤ǲĻӵġ TCP/IP ӡ
   
    3.6) ݿԻøõܣ
    
   ȻԼٲѯEXPLAIN ۲ PostgreSQL
   νĲѯԼʹЩ
   
   һ INSERTʹ COPY
   ԴķʽСȵһ INSERT
   öࡣΣûд BEGIN WORK/COMMIT
   ֮䱻Ϊͬһһ洦
   䡣ԼĶ⿪ͬݸıʱɾ
   ؽ
   
   мڵѡʹáͨ -o -F ѡ postmaster
   ֹ fsync()ÿ fsync() ˢµϡ
   
   㻹ʹ postmaster -B
   ѡӺ˽ʹõĹڴ滺Ŀõ̫
   postmaster ޷ΪѾ
   ںڹڴռϵơÿ 8K ȱʡ 64
   
   
   㻹ʹų̵́ -S
   ѡÿ̨ʱõڴ-S
   ֵKֽڼƵģȱʡ 512 Ҳ˵512K
   
   㻹ʹ CLUSTER ѱݰĳоۼš
   CLUSTER ֲҳȡϸڡ
   
    3.7) PostgreSQL Իʲôĵԣ
    
   PostgreSQL
   мڱ״̬ϢЩϢܶԵ;а
   
   ȣͨ --enable-cassert ѡ configureкܶ assert()
   غ̨̺ڷĳЩδԤϵʱֹͣС
   
   postmaster  postgres һЩõѡȣ postmaster
   ʱȷѱ׼ͱ׼һ־ļȥˣ
        cd /usr/local/pgsql
        ./bin/postmaster >server.log 2>&1 &

    PostgreSQL Ŀ¼һ server.log
   ļļʹϢpostmaster һ
   -d ѡѡǻøϸڻ㱨-d
   ѡһֱԼҪǸߵĵԼܻɾ޴
   ־ļ
   
    postmaster ûУֱ postgres
   ̨̣ȻֱӼ SQL 䡣ֻ
   ƼڵԵʱôɡעʱû޶Ƿֺűʾβ
   ŵԷű룬ʹһۿʲô顣Ϊ̨
   û postmaster
   ģǺʵʵлһ£/̨ܲ֡
   
   
    postmaster ѾУһ psqlȻҳ psql Ӧ
   postgres ̵ PIDʹһ postgres PID
   ϡڵöϵ㲢Ҵ psql ִвѯڵ
   postgres  PGOPTIONS="-W n"Ȼ
   psqlӳ n
   룬ͿԸһҸ˳Ĺ̡
   
   postgres  -s-A -t ѡڵԺܲʱǳá
   
   㻹Դ profiling
   ֱ̨֧Ա۲Щռõִʱ϶ࡣprofile ļ
   pgsql/data/base/dbname Ŀ¼¡ͻ profile
   ļڿͻ˵ǰĿ¼¡ Linux ֧ profiling
   Ҫڱʱ-DLINUX_PROFILE 
   
    3.8) Ϊʲôͼӵ¼ʱյSorry, too many clientsϢ
    
   Ҫ postmaster ʱֵ֧Ĳ̨
   
   ȱʡ 32 ̡ͨʵ -N ֵ postmaster
   Ŀ޸ postgresql.conf ļ
   
   Ҫע -N Ϊ 32ͬ -Bȱʡ
   64-B  -N
   Ϊ˸õܿҪǸҪ󡣶ڴĿĺ˽̣
   ܻᷢ㻹Ҫ Unix
   ںòֵҪĶڴߴ磬SHMMAXźŵƵ
   ĿSEMMNS 
   SEMMNIĽNPROCûMAXUPRCԼļ
   ĿNFILE  NINODE Postgres ĺ̨Ƶԭ
   ΪȷϵͳùԴ
   
    Postgres  6.5 İ汾̨ȱʡ
   64Ҷ޸Ҫ޸ include/storage/sinvaladt.h 
   MaxBackendId Ȼ BUILD
   
    3.9) pgsql_tmp Ŀ¼ﶼЩʲô
    
   Ŀ¼±˲ѯִɵʱļ磬ҪΪ ORDER BY
   򣬲ҪȺ̨ -S
   ĸĿռ䣬ôͻᴴһʱļݡ
   
   ʱļӦԶɾк̨˾Ϳֹͣ
    postmaster ɾЩļ
   
    3.10) ΪʲôҪ PostgreSQL 汾ʱ dump  restore 
    
   PostgreSQL ÿС˽ٵ޸,˴ 7.2 
   7.2.1 Ҫ dump  restoreҪ 7.2 
   7.3ͨ޸ϵͳݱڲʽЩ仯һȽϸӣ
   ǲάļݡdump
   ݰͨõĸʽԱ¼زʹµڲʽ
   
   ļʽûб仯 pg_upgrade űҪ dump 
   restor˵script ָ pg_upgrade ԸôǷá
     _________________________________________________________________
   
                                  
                                      
    4.1) αͨα֮ʲô
    
    DECLARE ֲҳȡϢ
   
    4.2)ֻ SELECT һѯͷУ
    
    FETCH ֲҳʹ SELECT ... LIMIT....
   
   ʹֻҪͷļУҲ漰ѯʹô ORDER BY
   Ĳѯһ ORDER BY ƥ䣬PostgreSQL
   ֻܾҪͷ¼򽫶ѯдֱҪ
   
   
    4.3) λȡһб psql ￴Ķ
    
   Ķ psql Դļpgsql/src/bin/psql/describe.c
   Ϊ psql ķб SQL 㻹Դ -E
   ѡ psqlӡִõĲѯ
   
    4.4) ӱɾһУ
    
   7.3  ALTER TABLE DROP
   COLUMNִ֧ܡǰİ汾У
    BEGIN;
    LOCK TABLE old_table;
    SELECT ...  -- select all columns but the one you want to remove
    INTO TABLE new_table
    FROM old_table;
    DROP TABLE old_table;
    ALTER TABLE new_table RENAME TO old_table;
    COMMIT;

    4.5) һУһһߴǶ٣
    
   һЩƣ
    һݿߴ磿   ƣ 1TB ݿ⣩
    һߴ磿    16TB
    һеߴ磿      1.6TB
     һֶεߴ?   1GB
    һ     
    һ     й,250-1600
    һ

   ȻʵûƣҪܿô̿ռ䡢ڴ/
   Լ
   
   ߴ 16 TB ҪϵͳԴļ֧֡ö 1 GB
   ļ洢ļϵͳߴǲҪġ
   
   ȱʡĿС 32K ıߴӡ
   
    4.6)洢һ͵ƽļҪٴ̿ռ䣿
    
   һ Postgres
   ݿҪ൱һƽļ洢ͬݵ5Ĵ̿ռ䡣
   
   磬һ 100,000
   еļÿһһııƽλ20ֽڡ
   ƽļռ 2.8 MBЩݵ PostgreSQL ݿļԼ 6.4
   MB:
     36 ֽ: ÿеͷֵ
     24 ֽ: һintֶκһıֶ
   +  4 ֽ: ҳָԪָ
   ----------------------------------------
     64 ֽÿ

   PostgreSQL ҳĴС 8192 ֽ (8 KB)

   8192 ֽÿҳ
   -------------------   =  128 /ҳȡ
     64 ֽÿ

   100000 
   --------------------  =  782 ҳȡ
      128 ÿҳ

   782 ҳ * 8192 ֽ/ҳ  =  6,406,144 ֽڣ6.4 MB

   ҪôĶģҲȷʵݣҲܺ
   
   
   ֵλͼУռúٵĿռ䡣
   
    4.7) β鿴ݿԼûĶ壿
    
   psql ෴бʾЩϢ \? Щ pg_
   ͷϵͳҲЩϢ psql -l геݿ⡣
   
   Ҳļ
   pgsql/src/tutorial/syscat.sourceʾݿϵͳȡϢ
   Ҫ SELECT
   
    4.8) ҵĲѯûΪʲô
    
   ÿѯԶʹֻڱĴСһСֵҲѯֻ
   ѡнСʱʹΪɨ漴̴ȡ
   ֱܱӵضȡ˳ɨ裩ΪжǷʹPostgreSQL
   йرͳֵЩͳֵʹ VACUUM ANALYZE ANALYZE
   áʹͳֵŻ֪жУܹõжǷ
   ͳֵȷŻ˳ӷҲáڱݷ仯ʱ
   ӦڽͳֵĻȡ
   
   ͨ ORDER BY
   ִӡһһ˳ɨ裬һʽͨɨ
   Ҫ졣
   
   ǣ LIMIT  ORDER BY ʹʱ
   ʹΪֻ᷵رһС֡ʵϣȻ MAX()  MIN()
   ʹͨ ORDER BY  LLIMIT
   ʹȡֵСֵҲǿԵģ
   SELECT col
   FROM tab
   ORDER BY col [ DESC ]
   LIMIT 1;
   
   ʹͨ LIKE  ~ ʱֻضʹã
     * ַĿʼֱַͨҲ˵
     * LIKE ģʽ % ͷ
     * ~ ʽģʽ ^ ͷ
     * ַƥַģʽͷ [a-e]
     * Сд޹صĲң ILIKE  ~* Ȳʹ 4.12
       ĺ
     *  initdb ʱȱʡı C locale
       
    4.9) βܿѯŻҵĲѯģ
    
   ο EXPLAIN ֲҳ
   
    4.10) R-tree ʲô
    
   R-tree ռݡһϣ޷Χ B-tree
   ֻܴһάķΧR-tree
   Դάݡ磬һΪ point
   ֶϽһ R-tree ôϵͳܸЧػش
   ѡһηΧڵе㡱
    R-Tree Ƶʽǣ
   Guttman, A. "R-Trees: A Dynamic Index Structure for Spatial
   Searching." Proc of the 1984 ACM SIGMOD Int'l Conf on Mgmt of Data,
   45-57.
   㻹 Stonebraker ġReadings in Database
   Systemsҵƪ¡
   ϵͳõ R-Tree ԴκͷΡ˵R-tree
   չΪάʵϣչ R-trees
   ҪһĹĿǰûĵ
   
    4.11) ʲôǻѯŻGenetic Query Optimization
    
   GEQO ģû㷨Genetic
   AlgorithmGAӿӵĲѯŻͨ
   Ӳѯ
   
    4.12)
    ʽʹСд޹صʽдСд
    ޹
    
    ~ ʽƥ䣬 ~*
   Сд޹صʽƥ䡣дЩ޹ص LIKE ֳΪ ILIKE
   Сд޹صĵʽȽͨд
   SELECT *
   FROM tab
   WHERE lower(col) = 'abc';
   ʹñ׼ǿԴһɱõĺ:
   CREATE INDEX tabindex ON tab (lower(col));
   
    4.13) һѯһֶǷΪ NULL
    
    IS NULL  IS NOT NULL ֶΡ
   
    4.14) ַ֮ʲôͬ
    
    ڲ ˵
   --------------------------------------------------
   "char" char 1ַ character
   CHAR(#) bpchar ַʵݲ㶨峤ʱԿո
   VARCHAR(#) varchar
   ָ󳤶ȣ䳤ַ㶨峤ȵĲֲ
   TEXT text Ƚе󳤶
   BYTEA bytea 䳤ֽУ䳤Ķݣ
   ϵͳһЩϢ㽫ڲơ
   "varlena"䳤ͣҲ˵ͷĸֽǳ
   ȣݣʵռõĿռĴСҪһЩȻЩ
   ͶԱѹ洢Ҳ TOAST
   ѻ洢˴̿ռҲܱԤҪ١
   CHAR(n) ʺڴ洢ȻַVARCHAR(n)
   ڴ洢󳤶ȵı䳤ַõġTEXT
   ڴ洢Ƴȵַɴ 1GBYTEA
   ڴ洢ݣǰ NULL
   ֽڣƵ0ֵЩ;͵ܡ
   
    4.15.1) һк/ԶֶΣ
    
   PostgreSQL ֧ 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
   );
   CREATE UNIQUE INDEX person_id_key ON person ( id );
   ο create_sequence ֲҳȡеĸϢ㻹ÿе
   oid ֶΪһΨһֵҪ㵹ݿ⣬Ҫʹ
   pg_dump  -o ѡ COPY WITH OIDS ѡԱ OID
   
    4.15.2) λһкŵֵ
    
   һַڲ֮ǰú nextval() жһ SERIAL
   ֵȻʽ롣ʹ 4.15.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')");
   ʹô INSERT ䷵ص OID
   ȱʡֵȱֲԵķ Perl ʹô
   Edmund Mergl  DBD::Pg ģ DBIoid ֵͨ $sth->execute()
    $sth->{pg_oid_status} á
   
    4.15.3) ʹ currval()  nextval() ᵼһû֮
    
   ᡣcurrval() غ̶̨ûĵǰֵ
   
    4.15.4)
    Ϊʲô쳣ֹкأΪʲôкֶεȡֵдڼأ
    
    
   Ϊ߲ԣкҪʱе񣬲ֻ
   ֮ǰͻᵼزкųּ
   
    4.16) ʲô OIDʲô TID
    
   OID  PostgreSQL еΨһʶPostgreSQL
   ﴴÿһжһΨһ OID initdb д OID
   С 16384 μ include/access/transam.hû OID
   ڻֵȱʡʱЩ OID
   һһݿΨһ PostgreSQL
   װҲΨһġ
   PostgreSQL ڲϵͳʹ OID ڱ֮佨ϵЩ OID
   ڱʶضûԼʹֶ OID 洢 OID
   ֵ OID ֶϴһԿٷʡ
   OID һݿʹõ︳ֵС OID
   ĳɱֵһݱĴʼ OID Ŀ
   CREATE TABLE new(old_oid oid, mycol int);
   SELECT old_oid, mycol INTO new FROM old;
   COPY new TO '/tmp/pgtable';
   DELETE FROM new;
   COPY new WITH OIDS FROM '/tmp/pgtable';
   OID
   4ֽڵ棬ڳ40ʱû˱ֹǴ
   ˱֮ǰơ
   TID ڱʶݿ飨ַͣڣƫƵضСTID
   бĻغı䡣ʹָС
   
    4.17) PostgreSQL ʹõһЩĺʲô
    
   һЩԴһЩһĵʹһЩи÷һ
   ֣
   table, relation, class
   row, record, tuple
   column, field, attribute
   retrieve, select
   replace, update
   append, insert
   OID, serial value
   portal, cursor
   range variable, table name, table alias
   һͨݿбhttp://hea-www.harvard.edu/MST/simul/softw
   are/docs/pkgs/pgsql/glossary/glossary.html 
   
    4.18) ΪʲôյERROR: Memory exhausted in AllocSetAlloc()
    
   ܿϵͳڴùˣں˶ĳЩԴнϵ͵ֵ
    postmaster ֮ǰ
   ulimit -d 262144
   limit datasize 256m
   ȡõ
   shellֻһܳɹĽݶñȽϸߣ
   ҲòѯɡӦڵǰ̣Լк
   󴴽ӽ̡SQLͻʱΪ̨̫ݶ
   ⣬пͻ֮ǰִ
   
    4.19) β֪е PostgreSQL İ汾
    
    psql  SELECT version()
   
    4.20) ΪʲôҵĴ´invalid large obj
    descriptorǷĴ
    
   Ҫʹκδǰ BEGIN WORK 
   COMMITҲ˵Χ lo_open ... lo_close
   Ŀǰ PostgreSQL
   ǿʵʩύʱرմûвʱ
   ״ζԴκͼᵼһ invalid large obj
   descriptorԣûʹһǰܹĴ루Ǵ
   ʱ䣩ôһϢ
   ʹÿͻ˽ӿڣ ODBCҪ set auto-commit off
   
    4.21) δһȱʡֵǵǰʱֶΣ
    
   ʹ CURRENT_TIMESTAMP
   CREATE TABLE test(x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP);
   
    4.22) Ϊʲôʹ IN Ӳѯô
    
   ĿǰͨΪѯÿһ˳ɨӲѯĽӲѯѯ
   ӲѯУѯغܶУIN
   ִеúܿ졣Ϊ˼ӿ IN ѯִУ EXISTS 滻 IN
   SELECT *
   FROM tab
   WHERE col IN (SELECT subcol FROM subtab);
   Ϊ
   SELECT *
   FROM tab
   WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col);
   Ҫִеø죬subcol
   ӦһСϣδķ汾޲ơ
   
    4.23)  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
   ڴǰİ汾Уӿ UNION  NOT IN
   ģ⡣磬ڱ tab1  tab2 ֮ӣ
   SELECT tab1.col1, tab2.col2
   FROM tab1, tab2
   WHERE tab1.col1 = tab2.col1
   UNION ALL
   SELECT tab1.col1, NULL
   FROM tab1
   WHERE tab1.col1 NOT IN (SELECT tab2.col1 FROM tab2)
   ORDER BY col1
   
    4.24) ʹ漰ݿĲѯ
    
   ûа취ѯǰݿ֮ݿ⡣Ϊ PostgreSQL
   ݿصϵͳĿ¼ϵͳݿĲѯִҲδȷ
   contrib/dblink
   úʵֿѯȻͬʱӵͬݿⲢڿͻ
   ϲ
   
    4.25) úضлУ
    
    PL/pgSQL ʹ refcursors ؽο
   http://www.PostgreSQL.org/idocs/index.php?plpgsql-cursors.html,
   23.7.3.3ڡ
   
    4.26) Ϊʲô PL/PgSQL вܿɿشɾʱ
    
   PL/PgSQL 溯ݣɴ˴һõĸһ PL/PgSQL
   һʱȻñɾؽˣٴεøúʧܣ
   ΪĺȻָɵʱķ PL/PgSQL 
   EXECUTE ʱзʡᱣ֤ѯִǰ·
   
    4.27) Щݸѡ
    
   м/ӷʽĸѡЩѡֻݿи£ݿֻ
   ܽжҳ http://gborg.PostgreSQL.org/genpage?replication_research
   гЩѡ
   http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php
   ڽһƵĽ
   
    4.28) Щݼѡ
    
   contrib/pgcrypto ˺ܶ SQL
   ѯʹõļܺܿͻ˵˴ݵΨһ
   pg_hba.conf в hostss 
   7.3 汾Զݿûмܡǰİ汾У
   postgresql.conf д PASSWORD_ENCRYPTION
   ѡڼܵļϵͳϣԴﵽܵĿģ
   ----------------------------------------------------------------------
   ----------
   
                              չ PostgreSQL
                                      
    5.1) дһû庯 psql ʱΪʲôᵼ core dump
    
   ܶࡣһĲԳвԶ庯
   
    5.2) ܸ PostgreSQL һЩͦͺͺ
    
   չ͵ pgsql-hackers ʼбջᱻŵ contrib/
   Ŀ¼
   
    5.3) дһһԪ C 
    
    PostgreSQL 7.3 Ժİ汾УC, PL/PgSQL  SQL
   ȫֵַ֧ΪĺϢο Աָϣthe Programmer's
   Guide contrib/tablefunc һ C
   дķֵΪĺ
   
    5.4) ޸һԴļΪʲô±ûпı䣿
    
   Makefiles ûаͷļȷmake clean һ
   make ʹõ GCC Բѡ --enable-depend
   ñԶͷļϵ
