
                  Perguntas Frequentes (FAQ) sobre PostgreSQL
                                       
   ltima atualizao: Sab Fev 7 22:16:21 EST 2004
   
   Mantenedor atual: Bruce Momjian (pgman@candle.pha.pa.us)
   
   Traduzido por: Euler Taveira de Oliveira (euler@ufgnet.ufg.br)
   
   A verso mais recente desse documento pode ser vista em
   http://www.PostgreSQL.org/docs/faqs/FAQ.html (EN).
   http://www.PostgreSQL.org/docs/faqs/FAQ_brazilian.html (pt_BR).
   
   Perguntas sobre plataformas especficas so respondidas em
   http://www.PostgreSQL.org/docs/index.html.
     _________________________________________________________________
   
                              Perguntas Gerais
                                      
   1.1) O que  PostgreSQL? Como ele  pronunciado?
   1.2) Qual  a licena do PostgreSQL?
   1.3) Quais plataformas Unix o PostgreSQL pode ser executado?
   1.4) Quais portabilidades no-Unix esto disponveis?
   1.5) Onde eu posso conseguir o PostgreSQL?
   1.6) Onde eu posso conseguir suporte?
   1.7) Qual  a ltima verso?
   1.8) Que documentao est disponvel?
   1.9) Como eu posso saber quais so os bugs conhecidos ou
   caractersticas ausentes?
   1.10) Como eu posso aprender SQL?
   1.11) O PostgreSQL est livre do Bug do Milnio?
   1.12) Como posso me juntar a equipe de desenvolvimento?
   1.13) Como eu informo a existncia de um bug?
   1.14) Como  o PostgreSQL comparado a outros SGBDs?
   1.15) Como eu posso ajudar financeiramente o projeto PostgreSQL?
   
                          Perguntas sobre Clientes
                                      
   2.1) H drivers ODBC para PostgreSQL?
   2.2) Quais ferramentas esto disponveis para utilizar o PostgreSQL
   com pginas Web?
   2.3) O PostgreSQL tem interfaces grficas para interagir com usurio?
   2.4) Quais linguagens esto disponveis para comunicar-se com o
   PostgreSQL?
   
                         Perguntas Administrativas
                                      
   3.1) Como eu instalo o PostgreSQL em um local diferente de
   /usr/local/pgsql?
   3.2) Quando eu inicio o postmaster, eu recebo a mensagem Bad System
   Call ou uma descarga de memria (core dump). Por que?
   3.3) Quando eu tento iniciar o postmaster, eu recebo erros
   IpcMemoryCreate. Por que? 3.4) Quando eu tento iniciar o postmaster,
   eu recebo erros IpcSemaphoreCreate. Por que? 3.5) Como eu controlo
   conexes de outras mquinas?
   3.6) Como eu ajusto o servidor de banco de dados para obter uma
   performance melhor?
   3.7) Quais caractersticas de depurao esto disponveis?
   3.8) Por que eu recebo "Sorry, too many clients" quando eu tento
   conectar?
   3.9) O que est no diretrio pgsql_tmp?
   3.10) O que eu preciso fazer para exportar e importar durante a
   atualizao de verses do PostgreSQL?
   
                           Perguntas Operacionais
                                      
   4.1) Qual  a diferena entre cursores binrios e normais?
   4.2) Como eu fao um SELECT somente dos primeiros registros de uma
   consulta? Um registro randmico?
   4.3) Como eu obtenho a lista de tabelas ou outras coisas que eu posso
   ver no psql?
   4.4) Como eu removo uma coluna de uma tabela ou mudo o seu tipo de
   dados?
   4.5) Qual  o tamanho mximo de um registro, uma tabela e um banco de
   dados?
   4.6) Quanto espao em disco  necessrio para armazenar dados de um
   arquivo texto?
   4.7) Como eu descubro quais tabelas, ndices, bancos de dados e
   usurios esto definidos?
   4.8) Minhas consultas esto lentas ou no esto utilizando ndices.
   Por que?
   4.9) Como eu vejo como o otimizador de consultas est avaliando minha
   consulta?
   4.10) O que  um ndice de rvore R (R-tree)?
   4.11) O que  um Otimizador Gentico de Consultas?
   4.12) Como eu fao buscas com expresses regulares e buscas com
   expresses regulares sem diferenciar maisculas de minsculas? Como eu
   utilizo um ndice para buscas que no diferenciam maisculas de
   minsculas?
   4.13) Em uma consulta, como eu detecto se um campo  NULL?
   4.14) Qual  a diferena entre os vrios tipos de dados de caracteres?
   4.15.1) Como eu crio um campo serial/auto incremento?
   4.15.2) Como eu consigo o valor de um campo SERIAL?
   4.15.3) currval() e nextval() no lidam com condio de corrida com
   outros usurios?
   4.15.4) Por que os nmeros da minha sequncia no so reutilizados
   quando uma transao  abortada? Por que h intervalos nos nmeros da
   minha sequncia/coluna SERIAL?
   4.16) O que  um OID? O que  um TID?
   4.17) Qual  o significado de alguns termos utilizados no PostgreSQL?
   4.18) Por que eu recebo o erro "ERROR: Memory exhausted in
   AllocSetAlloc()"?
   4.19) Como eu informo qual verso do PostgreSQL eu estou utilizando?
   4.20) Por que minhas operaes com objetos grandes retorna "invalid
   large obj descriptor"?
   4.21) Como eu crio uma coluna que conter por padro a hora atual?
   4.22) Por que as minhas subconsultas que utilizam IN esto to lentas?
   4.23) Como eu fao uma juno externa (outer join)?
   4.24) Como eu fao consultas utilizando mltiplos bancos de dados?
   4.25) Como eu retorno mltiplos registros ou colunas de uma funo?
   4.26) Por que eu no posso confiar na criao/remoo de tabelas
   temporrias em funes PL/PgSQL?
   4.27) Que opes para replicao esto disponveis?
   4.28) Que opes para encriptao esto disponveis?
   
                          Extendendo o PostgreSQL
                                      
   5.1) Eu escrevi uma funo. Quando eu executo-a no psql, por que ela
   finaliza o programa com descarga de memria (core dump)?
   5.2) Como eu posso contribuir com alguns tipos e funes novas para o
   PostgreSQL?
   5.3) Como eu escrevo uma funo em C que retorna uma tupla?
   5.4) Eu alterei um arquivo do cdigo-fonte. Por que a recompilao no
   surtiu efeito?
     _________________________________________________________________
   
                              Perguntas Gerais
                                      
    1.1) O que  PostgreSQL? Como ele  pronunciado?
    
   PostgreSQL  pronunciado Post-Gres-Qui-El. O nome "Postgres" 
   utilizado frequentemente em conversaes.
   
   PostgreSQL  um melhoramento do sistema de gerncia de banco de dados
   POSTGRES, um prottipo de pesquisa de um SGBD de ltima gerao.
   Enquanto o PostgreSQL retm a modelagem de dados poderosa e a grande
   quantidade de tipos de dados do POSTGRES, ele substituiu a linguagem
   de consulta PostQuel com um subconjunto extendido do SQL. PostgreSQL 
   livre e o cdigo-fonte completo est disponvel.
   
   O desenvolvimento do PostgreSQL  feito por um grupo de
   desenvolvedores que esto inscritos na lista de e-mails de
   desenvolvimento do PostgreSQL. O coordenador atual  Marc G. Fournier
   (scrappy@PostgreSQL.org). (Veja a seo 1.6 para saber como se juntar
   ao grupo). O grupo  responsvel por todo o desenvolvimento do
   PostgreSQL.  um projeto da comunidade e no  controlado por nenhuma
   empresa. Para se juntar ao grupo, veja a FAQ do desenvolvedor
   http://www.PostgreSQL.org/docs/faqs/FAQ_DEV.html
   
   Os autores do PostgreSQL 1.01 foram Andrew Yu e Jolly Chen. Muitos
   outros contribuiram para portar, testar, depurar e melhorar o cdigo.
   O cdigo original do Postgres, do qual o PostgreSQL foi derivado, foi
   um esforo de muitos estudantes de graduao e ps-graduao e uma
   equipe de programadores trabalhando sobre a direo do Professor
   Michael Stonebraker na Universidade da Califnia em Berkeley.
   
   O nome original do software em Berkeley era Postgres. Quando o SQL foi
   adicionado em 1995, seu nome foi mudado para Postgres95. O nome foi
   mudado no fim de 1996 para PostgreSQL.
   
    1.2) Qual  a licena do PostgreSQL?
    
   PostgreSQL est sujeito a seguinte licena:
   
   PostgreSQL Sistema de Gerncia de Banco de Dados
   
   Portions copyright (c) 1996-2002, PostgreSQL Global Development Group
   Portions Copyright (c) 1994-6 Regents of the University of California
   
   Permisso de uso, cpia, modificao e distribuio desse software e
   sua documentao para qualquer propsito, sem taxa, e sem um acordo
   escrito est concedida por esse meio, contanto que a nota da licena
   acima, esse pargrafo e os dois pargrafos seguintes apaream em todas
   as cpias.
   
   EM NENHUM EVENTO A UNIVERSIDADE DA CALIFRNIA SER RESPONSVEL POR
   QUALQUER PARTIDO EM DANOS DIRETOS, INDIRETOS, ESPECIAIS, INCIDENTAIS
   OU CONSEQUENTES, INCLUINDO PERDA DE LUCROS, SURGIDOS A PARTIR DO USO
   DO SOFTWARE E DE SUA DOCUMENTAO, MESMO SE A UNIVERSIDADE DA
   CALIFRNIA ESTIVER SIDO AVISADA DA POSSIBILIDADE DE TAL DANO.
   
   A UNIVERSIDADE DA CALIFRNIA ESPECIFICADAMENTE NO D NENHUMA
   GARANTIA, INCLUINDO, MAS NO LIMITADO A, GARANTIAS IMPLCITAS DE
   COMERCIALIZAO E ATENDIMENTO DE PROPSITO PARTICULAR. O SOFTWARE 
   FORNECIDO ABAIXO "COMO ", E A UNIVERSIDADE DA CALIFRNIA NO TEM
   OBRIGAO DE FORNECER MANUTENO, SUPORTE, ATUALIZAES, MELHORIAS OU
   MODIFICAES.
   
   O que est descrito acima  a licena BSD, uma licena de cdigo
   aberto clssica. Ela no tem restries de como o cdigo pode ser
   utilizado. Ns gostamos dela e no temos intenes de mud-la.
   
    1.3) Quais plataformas Unix o PostgreSQL pode ser executado?
    
   Em geral, uma plataforma moderna compatvel com Unix deve ser capaz de
   executar o PostgreSQL. As plataformas que foram testadas antes do
   lanamento de uma verso so listadas nas instrues de instalao.
   
    1.4) Quais portabilidades no-Unix esto disponveis?
    
   Cliente
   
    possvel compilar a biblioteca libpq, o psql e outras interfaces e
   aplicaes clientes para executar em plataformas MS Windows. Neste
   caso, o cliente est sendo executado no MS Windows e comunica via
   TCP/IP com um servidor executando em uma das plataformas Unix
   suportadas. O arquivo win32.mak est presente na distribuio para que
   seja possvel compilar a biblioteca libpq e o psql para Win32. O
   PostgreSQL tambm se comunica com clientes ODBC.
   
   Servidor
   
   O Servidor de banco de dados pode ser executado em Windows NT e Win2k
   utilizando o Cygwin, uma biblioteca de portabilidade Unix/NT da
   Cygnus. Veja pgsql/doc/FAQ_MSWIN na distribuio ou a FAQ do MS
   Windows em http://www.PostgreSQL.org/docs/faqs/text/FAQ_MSWIN.
   
   Um porte nativo para MS Win NT/2000/XP est sendo desenvolvido. Para
   maiores detalhes sobre o status do PostgreSQL no Windows veja
   http://techdocs.postgresql.org/guides/Windows e
   http://momjian.postgresql.org/main/writings/pgsql/win32.html.
   
   H tambm um porte para Novell Netware 6 em http://forge.novell.com.
   
    1.5) Onde eu posso conseguir o PostgreSQL?
    
   O servidor ftp principal do PostgreSQL  ftp://ftp.PostgreSQL.org/pub.
   Para relao de servidores espelhos (mirrors), consulte nosso website.
   
    1.6) Onde eu posso conseguir suporte?
    
   A lista de discusso principal : pgsql-general@PostgreSQL.org. Ela
   est disponvel para discusses relacionadas ao PostgreSQL. Para se
   inscrever, envie um e-mail com as seguintes linhas no corpo (no envie
   no assunto):
    subscribe
    end

   para pgsql-general-request@PostgreSQL.org.
   
   H tambm uma lista sntese (digest) disponvel. Para se inscrever,
   envie um e-mail para: pgsql-general-digest-request@PostgreSQL.org com
   o seguinte corpo:
    subscribe
    end

   Snteses (Digests) so enviadas aos membros dessa lista quando a lista
   receber cerca de 30k em mensagens.
   
   A lista de discusso sobre bugs est disponvel. Para se inscrever,
   envie um e-mail para pgsql-bugs-request@PostgreSQL.org com o seguinte
   corpo:
    subscribe
    end

   H tambm uma lista de discusso dos desenvolvedores disponvel. Para
   se inscrever, envie um e-mail para
   pgsql-hackers-request@PostgreSQL.org com o seguinte corpo:
    subscribe
    end

   Outras listas de discusses e informaes sobre o PostgreSQL podem ser
   encontradas na homepage do PostgreSQL em:
   
     http://www.PostgreSQL.org
     
   H tambm um canal de IRC na Freenode e EFNet, canal PostgreSQL. Voc
   pode utilizar o comando Unix irc -c '#PostgreSQL' "$USER"
   irc.phoenix.net. ou irc -c '#PostgreSQL' "$USER" irc.freenode.net.
   
   Uma lista de empresas que prestam suporte comercial est disponvel em
   http://techdocs.postgresql.org/companies.php.
   
    1.7) Qual  a ltima verso?
    
   A ltima verso do PostgreSQL  a verso 7.4.1.
   
   Ns planejamos lanar verses novas a cada seis ou oito meses.
   
    1.8) Que documentao est disponvel?
    
   Vrios manuais, pginas de manuais (man pages) e alguns exemplos para
   teste esto includos na distribuio. Veja o diretrio /doc. Voc
   pode acessar os manuais online em http://www.PostgreSQL.org/docs.
   
   H dois livros sobre PostgreSQL disponveis online em
   http://www.PostgreSQL.org/docs/awbook.html e
   http://www.commandprompt.com/ppbook/. H uma lista de livros sobre
   PostgreSQL disponveis para compra em
   http://techdocs.PostgreSQL.org/techdocs/bookreviews.php. H tambm uma
   coleo de artigos tcnicos sobre PostgreSQL em
   http://techdocs.PostgreSQL.org/.
   
   psql tem alguns comandos \d para mostrar informao sobre tipos,
   operadores, funes, agregaes, etc.
   
   Nosso web site contm ainda mais documentao.
   
    1.9) Como eu posso saber quais so os bugs conhecidos ou caractersticas
    ausentes?
    
   PostgreSQL suporta um subconjunto extendido do SQL-92. Veja a nossa
   lista de afazeres (TODO) para saber sobre bugs conhecidos,
   caractersticas ausentes e planos futuros.
   
    1.10) Como eu posso aprender SQL?
    
   O livro "The PostgreSQL book" em
   http://www.PostgreSQL.org/docs/awbook.html ensina SQL. H outro livro
   sobre PostgreSQL em http://www.commandprompt.com/ppbook. H bons
   tutoriais em http://www.intermedia.net/support/sql/sqltut.shtm, ,
   http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM,
   e em http://sqlcourse.com.
   
   Outro  o "Teach Yourself SQL in 21 Days, Second Edition" em
   http://members.tripod.com/er4ebus/sql/index.htm
   
   Muitos dos nossos usurios gostam do The Practical SQL Handbook,
   Bowman, Judith S., et al., Addison-Wesley. Outros gostam do The
   Complete Reference SQL, Groff et al., McGraw-Hill.
   
    1.11) O PostgreSQL est livre do Bug do Milnio?
    
   Sim, ns podemos manipular datas aps o ano 2000 AD e antes do ano
   2000 BC.
   
    1.12) Como posso me juntar a equipe de desenvolvimento?
    
   Primeiramente, faa o download do cdigo-fonte e leia a documentao
   para Desenvolvedores do PostgreSQL no nosso website ou na
   distribuio. Depois, se inscreva nas lista de discusso pgsql-hackers
   e pgsql-patches. Ento submeta patches de alta qualidade para
   pgsql-patches.
   
   H algumas pessoas que tem privilgios para fazer mudanas (commit) na
   rvore CVS do PostgreSQL. Cada um deles submeteram tantos patches de
   alta qualidade que foi impossvel para os committers continuarem a
   fazerem as mudanas, e ento ns confiamos que os patches que eles
   submetem so de alta qualidade.
   
    1.13) Como eu informo a existncia de um bug?
    
   Por favor visite a pgina da ferramenta que reporta bugs em
   http://www.PostgreSQL.org/bugs/bugs.php, que ir lher dar as
   instrues e direes de como submeter um bug.
   
   Verifique tambm o nosso ftp ftp://ftp.PostgreSQL.org/pub para ver se
   h uma verso mais recente do PostgreSQL ou patches.
   
    1.14) Como  o PostgreSQL comparado a outros SGBDs?
    
   H vrias maneiras de se medir um software: caractersticas,
   performance, confiabilidade, suporte e preo.
   
   Caractersticas
          PostgreSQL tem muitas caractersticas presentes em muitos SGBDs
          comerciais como transaes, subconsultas, gatilhos, vises,
          integridade referencial de chave estrangeira e travamento
          (lock) sofisticado. Ns temos algumas caractersticas que eles
          no tem, como tipos definidos pelo usurio, herana, regras e
          controle de concorrncia de mltiplas verses para reduzir
          travamentos (locks).
          
   Performance
          PostgreSQL tem a performance similar a outros bancos de dados
          comerciais e de cdigo livre. Ele  mais rpido em algumas
          coisas, mais lento em outras. Comparado ao MySQL ou sistemas de
          bancos de dados "leves", ns somos mais rpidos com mltiplos
          usurios, consultas complexas e carga de consultas de
          leitura/escrita. MySQL  mais rpido para consultas simples com
          SELECT feitas por poucos usurios.  claro que o MySQL no tem
          muitas das caractersticas mencionadas na seo Caractersticas
          acima. Ns desenvolvemos buscando confiabilidade e
          caractersticas, e ns continuamos a melhorar a performance a
          cada verso. H uma pgina interessante comparando o PostgreSQL
          com o MySQL em
          http://openacs.org/philosophy/why-not-mysql.html. MySQL  uma
          empresa que distribui seu produto via cdigo livre, e requer
          uma licena comercial para software de cdigo fechado, e no
          uma comunidade de desenvolvimento de cdigo livre como o
          PostgreSQL.
          
   Confiabilidade
          Ns sabemos que um SGBD deve ser confivel ou ele  intil. Ns
          empenhamos em lanar verses bem testadas, de cdigo estvel e
          que tenha o mnimo de bugs. Cada verso tem no mnimo um ms de
          teste em verso beta, e nosso histrico de verses mostra que
          ns podemos fornecer verses estveis e slidas que esto
          prontas para uso em produo. Ns acreditamos que somos
          comparados a nosso favor com outros sistemas de bancos de dados
          nessa rea.
          
   Suporte
          Nossas listas de discusso fornecem contato com um grupo de
          desenvolvedores e usurios para ajudar a resolver muitos
          problemas encontrados. Enquanto ns no podemos garantir o
          conserto, SGBDs comerciais nem sempre fornecem tambm. Com
          acesso direto aos desenvolvedores, a comunidade de usurios,
          manuais e o cdigo fonte faz com que o suporte do PostgreSQL
          seja superior ao de outros SGBDs. H suporte comercial por
          incidente disponveis para aqueles que precisam de um. (Veja
          seo 1.6 da FAQ.)
          
   Preo
          Ns somos livres para uso dele tanto comercial quanto no
          comercial. Voc pode adicionar nosso cdigo ao seu produto sem
          limitaes, exceto aquelas descritas na nossa licena
          compatvel com a licena BSD mencionada acima.
          
    1.15) Como eu posso ajudar financeiramente o projeto PostgreSQL?
    
   PostgreSQL teve sua primeira infra-estrutura em 1996 quando iniciamos.
   Somos todos gratos ao Marc Fournier, que criou e gerenciou esta
   infra-estrutura ao longo dos anos.
   
   Infra-estrutura de qualidade  muito importante em um projeto de
   cdigo aberto. Ela previne descontinuidades que podem facilmente
   descontinuar o andamento do projeto.
   
    claro, que a infra-estrutura no  barata. H vrios custos iniciais
   e mensais que so necessrios para mant-la. Se voc ou sua empresa
   tem dinheiro que pode ser doado para ajudar a financiar esse esforo,
   acesse http://store.pgsql.com/shopping/ e faa uma doao.
   
   Embora a pgina mencione PostgreSQL, Inc, a "contribuio"  somente
   para apoiar o projeto PostgreSQL e no financia nenhuma empresa
   especfica. Se voc preferir, voc pode enviar um cheque para o
   endereo de contato.
     _________________________________________________________________
   
   Se voc tiver uma histria de sucesso sobre o PostgreSQL, envie-a para
   nosso website em http://advocacy.postgresql.org.
   
                          Perguntas sobre Clientes
                                      
    2.1) H drivers ODBC para PostgreSQL?
    
   H dois drivers ODBC disponveis, PsqlODBC e o OpenLink ODBC.
   
   Voc pode fazer o download do PsqlODBC em
   http://gborg.postgresql.org/project/psqlodbc/projdisplay.php.
   
   OpenLink ODBC pode ser conseguido em http://www.openlinksw.com. Ele
   trabalha com cliente ODBC padro, ento voc poder ter o ODBC para
   PostgreSQL disponvel em toda plataforma que eles suportam (Win, Mac,
   Unix, VMS).
   
   Eles provavelmente vendero seu produto para pessoas que precisam de
   um suporte de qualidade, mas uma verso gratuita estar sempre
   disponvel. Por favor envie perguntas para postgres95@openlink.co.uk.
   
    2.2) Quais ferramentas esto disponveis para utilizar o PostgreSQL com
    pginas Web?
    
   Uma boa introduo para pginas web que utilizam bancos de dados pode
   ser vista em: http://www.webreview.com
   
   Para integrao na Web, PHP  uma excelente interface. Ele est em
   http://www.php.net.
   
   Para casos complexos, muitos usam a Interface Perl e CGI.pm ou
   mod_perl.
   
    2.3) O PostgreSQL tem interfaces grficas para iteragir com o usurio?
    
   Sim, h vrias interfaces grficas para PostgreSQL disponveis. Entre
   elas o PgAccess http://www.pgaccess.org), PgAdmin III
   (http://www.pgadmin.org, RHDB Admin (http://sources.redhat.com/rhdb/ )
   e o Rekall ( http://www.thekompany.com/products/rekall/,
   proprietria). H tambm o PHPPgAdmin (
   http://phppgadmin.sourceforge.net/ ), uma interface web para
   PostgreSQL.
   
   Veja http://techdocs.postgresql.org/guides/GUITools para uma lista
   mais detalhada.
   
    2.4) Quais linguagens esto disponveis para comunicar-se com PostgreSQL?
    
   Muitas linguagens de programao populares contm uma interface para
   PostgreSQL. Verifique a lista de extenses (mdulos) da sua linguagem
   de programao.
   
   As seguintes interfaces esto includas na distribuio do PostgreSQL:
     * C (libpq)
     * Embedded C (ecpg)
     * Java (jdbc)
     * Python (PyGreSQL)
     * TCL (libpgtcl)
       
   Interfaces adicionais esto disponveis em http://gborg.postgresql.org
   na seo de Drivers/Interfaces.
     _________________________________________________________________
   
                         Perguntas Administrativas
                                      
    3.1) Como eu instalo o PostgreSQL em um local diferente de
    /usr/local/pgsql?
    
   Especifique a opo --prefix quando executar o configure.
   
    3.2) Quando eu inicio o postmaster, eu recebo a mensagem Bad System Call ou
    uma descarga de memria (core dump). Por que?
    
   Isto pode ser vrios problemas, mas primeiro verifique se voc tem
   extenses do System V instaladas no seu kernel. PostgreSQL requer
   suporte no kernel a memria compartilhada e semforos.
   
    3.3) Quando eu tento iniciar o postmaster, eu recebo erros IpcMemoryCreate.
    Por que?
    
   Voc no configurou a memria compartilhada corretamente no seu kernel
   ou voc precisa aumentar a memria compartilhada disponvel no seu
   kernel. A quantidade exata que voc precisa vai depender da
   arquitetura e de quantos buffers e processos do servidor voc
   configurou para o postmaster. Muitos sistemas, com o nmero padro de
   buffers e processos, precisam de aproximadamente 1 MB. Veja o Guia do
   Administrador do PostgreSQL para mais informao sobre memria
   compartilhada e semforos.
   
    3.4) Quando eu tento iniciar o postmaster, eu recebo erros
    IpcSemaphoreCreate. Por que?
    
   Se a mensagem de erro  IpcSemaphoreCreate: semget failed (No space
   left on device) ento o seu kernel no est configurado com o nmero
   de semforos suficientes. O Postgres precisa de um semforo por
   processo do servidor. Uma soluo temporria  iniciar o postmaster
   com um limite pequeno de processos do servidor. Utilize -N com o
   parmetro menor do que o padro (32). Uma soluo permanente seria
   aumentar os parmetros do kernel SEMMNS e SEMMNI.
   
   Semforos inoperantes podem tambm causar danos durante intenso acesso
   ao banco de dados.
   
   Se a mensagem  outra coisa, voc possivelmente no tem suporte a
   semforo configurado no seu kernel. Veja o Guia do Administrador para
   mais informao sobre memria compartilhada e semforos.
   
    3.5) Como eu controlo conexes de outras mquinas?
    
   Por padro, o PostgreSQL s permite conexes da mquina local
   utilizando soquetes de domnio Unix. Outras mquinas no podero
   conectar-se a menos que voc adicione a opo -i no postmaster, e
   habilite a autenticao por mquina modificando o arquivo
   $PGDATA/pg_hba.conf. Isso ir permitir conexes TCP/IP.
   
    3.6) Como eu ajusto o servidor de banco de dados para obter uma performance
    melhor?
    
   Certamente, ndices podem acelerar consultas. O comando EXPLAIN
   permite que voc veja como o PostgreSQL est interpretando a consulta,
   e quais os ndices so utilizados.
   
   Se voc est fazendo muitos INSERTs, considere faz-los em lote
   utilizando o comando COPY. Isso  mais rpido do que INSERTs
   individuais. Segundo, sentenas que no esto em um bloco de transao
   BEGIN WORK/COMMIT so consideradas com se estivessem em sua prpria
   transao. Considere executar vrias sentenas em um mesmo bloco de
   transao. Isso reduz a quantidade de transaes. Tambm, considere
   remover e criar ndices novamente quando estiver fazendo muitas
   mudanas nos dados.
   
   H vrias opes de ajuste. Voc pode desabilitar o fsync() iniciando
   o postmaster com a opo -o -F. Isso ir impedir que fsync()s enviem
   os dados para disco aps cada transao.
   
   Voc tambm pode utilizar a opo -B do postmaster para aumentar o
   nmero de buffers de memria compartilhada utilizados pelos processos
   do servidor. Se voc definiu este parmetro com um valor muito alto, o
   postmaster pode no iniciar porque voc excedeu o limite de espao de
   memria compartilhada do kernel. Cada buffer  de 8K e o padro  de
   64 buffers.
   
   Voc tambm pode utilizar a opo -S do backend para aumentar a mxima
   quantidade de memria utilizada pelo processo servidor para ordenaes
   temporrias. O valor de -S  medido em kilobytes e o padro  de 512
   (ou seja 512K).
   
   Voc tambm pode utilizar o comando CLUSTER para agrupar dados em
   tabelas para combinar um ndice. Veja o manual sobre CLUSTER para mais
   informao.
   
    3.7) Quais caractersticas de depurao esto disponveis?
    
   PostgreSQL tem vrias caractersticas que relatam informaes que
   podem ser valiosas para fins de depurao.
   
   Primeiro, execute o configure com a opo --enable-cassert, muitos
   assert()s monitoram o progresso do ncleo (backend) e finalizam o
   programa quando alguma coisa inesperada acontece.
   
   O postmaster e o postgres tem vrias opes de depurao disponveis.
   Primeiro, quando iniciar o postmaster, tenha certeza que voc enviou a
   saida padro e a sada de erro padro para um arquivo de log, como em:
    cd /usr/local/pgsql
    ./bin/postmaster >server.log 2>&1 &

   Isso ir criar um arquivo server.log no diretrio raiz do PostgreSQL.
   Este arquivo conter informaes teis sobre problemas ou erros
   encontrados pelo servidor. O Postmaster tem uma opo -d que permite
   que informaes mais detalhadas sejam relatadas. A opo -d 
   acompanhada por um nmero que indica o nvel de depurao. Esteja
   alerta de que alto nvel de depurao gera grandes arquivos de log.
   
   Se o postmaster no est sendo executado, voc pode executar o ncleo
   do postgres a partir da linha de comando, e digitar a sua sentena SQL
   diretamente. Isso  recomendado somente para fins de depurao. Note
   que uma nova linha termina a consulta, e no um ponto-e-vrgula. Se
   voc compilou com smbolos de depurao, voc pode utilizar um
   depurador para ver o que est acontecendo. Como o ncleo (backend) no
   foi iniciado a partir do postmaster, ele no est executando em um
   ambiente idntico e problemas de iterao com o ncleo/travamento no
   podem ser reproduzidos.
   
   O programa postgres possue as opes -s, -A, e -t que podem ser muito
   teis para depurao e medidas de performance.
   
   Voc tambm pode compilar com perfil para ver que funes esto
   demandando tempo de execuo. Os arquivo de perfil do ncleo (backend)
   sero colocados no diretrio pgsql/data/base/dbname. O arquivo de
   perfil do cliente ser colocado no diretrio atual do cliente. O Linux
   requer uma compilao com -DLINUX_PROFILE para criao dos perfis.
   
    3.8) Por que eu recebo "Sorry, too many clients" quando eu tento conectar?
    
   Voc precisa aumentar o limite do postmaster de quantos processos do
   servidor concorrentes ele pode iniciar.
   
   O limite padro  de 32 processos. Voc pode aument-lo reiniciando o
   postmaster com o valor conveniente de -N ou modificar o
   postgresql.conf.
   
   Note que se voc definir o -N com um valor maior do que 32, voc
   tambm deve aumentar -B cujo padro  64; -B deve ser pelo menos duas
   vezes -N, e provavelmente deve ser mais do que isso para uma melhor
   performance. Para um grande nmero de processos do servidor, voc
   tambm precisa aumentar vrios parmetros de configurao do kernel do
   Unix. Coisas para serem observadas incluem o tamanho mximo de blocos
   de memria compartilhada, SHMMAX; o nmero mximo de semforos, SEMMNS
   e SEMMNI; o nmero mximo de processos, NPROC; o nmero mximo de
   processos por usurio, MAXUPRC; e o nmero mximo de arquivos abertos,
   NFILE e NINODE. A razo na qual o PostgreSQL tem um limite de nmero
   de processos do servidor permitidos  para que o seu sistema no fique
   sem recursos disponveis.
   
    3.9) O que est no diretrio pgsql_tmp?
    
   Este diretrio contm arquivos temporrios gerados pelo executor de
   uma consulta. Por exemplo, se uma ordenao  necessria para
   satisfazer um ORDER BY e a ordenao requer mais espao do que o
   parmetro -S do servidor permite, ento arquivos temporrios so
   criados para abrigar os dados extras.
   
   Os arquivos temporrios geralmente so apagados automaticamente, mas
   podem persistir caso o servidor termine anormalmente durante a
   ordenao. Uma parada e um reincio do postmaster remover os arquivos
   destes diretrios.
   
    3.10) O que eu preciso fazer para exportar e importar durante a atualizao
    entre verses do PostgreSQL?
    
   O time do PostgreSQL faz somente pequenas mudanas entre verses
   menores, ento atualizar da verso 7.2 para 7.2.1 no requer uma
   exportao e uma importao. Contudo, verses maiores (i.e. da 7.2
   para 7.3) geralmente muda-se o formato interno das tabelas de sistema
   e dos arquivo de dados. Essas mudanas geralmente so complexas, ento
   ns no mantemos compatibilidade para os arquivos de dados. Uma
   exportao em um formato genrico que pode ser importada utilizando o
   novo formato interno.
   
   Em verses onde o formato em disco no muda, o script pg_upgrade pode
   ser utilizado para atualizar sem precisar de um dump/restore. As notas
   da verso mencionam se pg_upgrade est disponvel para a verso.
     _________________________________________________________________
   
                           Perguntas Operacionais
                                      
    4.1) Qual  a diferena entre cursores binrios e normais?
    
   Veja o comando DECLARE no manual para uma descrio.
   
    4.2) Como eu fao um SELECT somente dos primeiros registros de uma
    consulta? Um registro randmico?
    
   Veja o manual do FETCH, ou utilize SELECT ... LIMIT....
   
   Toda a consulta tem que ser avaliada, mesmo se voc s quer os
   primeiros registros. Considere utilizar uma consulta que tenha um
   ORDER BY. Se h um ndice que combina com o ORDER BY, o PostgreSQL
   pode ser capaz de avaliar somente os primeiros registros requisitados,
   ou toda consulta tem que ser avaliada at que os registros desejados
   tenham sido gerados.
   
   Para obter um registro randmico, utilize:
    SELECT col
    FROM tab
    ORDER BY random()
    LIMIT 1;

    4.3) Como eu obtenho a lista de tabelas ou outras coisas que eu posso ver
    no psql?
    
   Voc pode ler o cdigo-fonte do psql no arquivo
   pgsql/src/bin/psql/describe.c. Ele contm comandos SQL que geram a
   sada para os comandos do psql. Voc tambm pode iniciar o psql com a
   opo -E ento sero mostradas as consultas utilizadas para executar
   os comandos que voc digitou.
   
    4.4) Como eu removo uma coluna de uma tabela ou mudo o seu tipo de dados?
    
   A funcionalidade DROP COLUMN foi adicionada a verso 7.3 com comando
   ALTER TABLE DROP COLUMN. Em verses anteriores, voc pode fazer isto:
    BEGIN;
    LOCK TABLE old_table;
    SELECT ...  -- selecione todas colunas mas no aquela que voc quer remover
    INTO TABLE new_table
    FROM old_table;
    DROP TABLE old_table;
    ALTER TABLE new_table RENAME TO old_table;
    COMMIT;

   Para alterar o tipo de dados de uma coluna, faa isto:
    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;

   Voc pode querer executar o comando VACUUM FULL tab para recuperar o
   espao em disco utilizado pelos registros expirados.
   
    4.5) Qual  o tamanho mximo de um registro, uma tabela e um banco de
    dados?
    
   Estes so os limites:
Tamanho mximo de um banco de dados?           ilimitado (existem bancos de dad
os de 32 TB)
Tamanho mximo de uma tabela?                  32 TB
Tamanho mximo de um registro?                 1.6TB
Tamanho mximo de um campo?                    1 GB
Nmero mximo de registros em uma tabela?      ilimitado
Nmero mximo de colunas em uma tabela?        250-1600 dependendo dos tipos da
s colunas
Nmero mximo de ndices em uma tabela?        ilimitado

    claro, que eles no so ilimitados, mas limitados ao espao em disco
   disponvel e espao em memria/swap. A Performance ser penalizada
   quando estes valores se tornarem grandes.
   
   O tamanho mximo de uma tabela com 32 TB no requer suporte a arquivos
   grandes do sistema operacional. Tabelas grandes so armazenadas como
   mltiplos arquivos de 1 GB ento o limite do sistema de arquivos no 
   importante.
   
   O tamanho mximo de uma tabela e o nmero mximo de colunas pode ser
   quadruplicadas aumentando-se o tamanho dos blocos para 32k.
   
    4.6) Quanto espao em disco  necessrio para armazenar dados de um arquivo
    texto?
    
   Um banco de dados PostgreSQL ir requerer at cinco vezes a quantidade
   de espao requerida para armazenar dados em um arquivo texto.
   
   Como um exemplo, considere um arquivo com 100.000 linhas contendo um
   inteiro e uma descrio em cada linha. Suponha que o tamanho mdio da
   descrio  de vinte bytes. O arquivo ter 2.8 MB. O tamanho do
   arquivo do banco de dados PostgreSQL que contm esses dados pode ser
   estimado em 6.4 MB:
    36 bytes: cada cabealho de registro (aproximadamente)
    24 bytes: um campo int e um campo texto
   + 4 bytes: ponteiro na pgina para a tupla
   -------------------------------------------
    64 bytes por registro

   O tamanho de uma pgina de dados no PostgreSQL  8192 bytes (8 KB), ento:

   8192 bytes por pgina
   ------------------------   =  128 registros por pgina do banco de dados (ar
redondado para baixo)
     64 bytes por registro

   100000 registros de dados
   ----------------------------  =  782 pginas do banco de dados (arredondado
para cima)
      128 registros por pgina

782 pginas do banco de dados * 8192 bytes por pgina  =  6,406,144 bytes (6.4
MB)

   ndices no requerem muito espao, mas contm dados que foram
   indexados, ento eles podem ocupar algum espao.
   
   NULLs so armazenados como bitmaps, ento eles utilizam muito pouco
   espao.
   
    4.7) Como eu descrubo quais tabelas, ndices, bancos de dados e usurios
    esto definidos?
    
   psql tem uma variadade de comandos com barra invertida que mostram
   tais informaes. Utilize \? para v-los. H tambm tabelas do sistema
   que comeam com pg_ e que os descrevem tambm. Tambm, psql -l listar
   todos os bancos de dados.
   
   Veja tambm o arquivo pgsql/src/tutorial/syscat.source. Ele ilustra
   muitos SELECTs necessrios para obter informao das tabelas do
   sistema de banco de dados.
   
    4.8) Minhas consultas esto lentas ou no esto utilizando ndices. Por
    que?
    
   ndices no so automaticamente utilizados por toda consulta. ndices
   s so utilizados se uma tabela  maior do que o tamanho mnimo e uma
   consulta seleciona somente uma porcentagem pequena de registros de uma
   tabela. Isto porque o acesso randmico ao disco causado por uma busca
   por ndice pode ser mais lento do que uma leitura ao longo da tabela
   ou uma busca sequencial.
   
   Para determinar se um ndice pode ser utilizado, o PostgreSQL deve ter
   estatsticas sobre a tabela. Estas estatsticas so coletadas
   utilizando VACUUM ANALYZE ou simplesmente ANALYZE. Utilizando
   estatsticas, o otimizador saber quantos registros h na tabela e pode
   determinar melhor se um ndice deve ser utilizado. Estatsticas tambm
   so teis para determinar a ordem de juno tima e mtodos de juno.
   Coleo de estatsticas deve ser feita periodicamente a medida que o
   contedo da tabela muda.
   
   ndices no so normalmente utilizados para ORDER BY ou para fazer
   junes. Uma busca sequencial seguida por uma ordenao explcita 
   usualmente mais rpida do que uma busca por ndice em uma tabela
   grande.
   Contudo, LIMIT combinado com ORDER BY frequentemente utilizar um
   ndice porque somente uma pequena poro da tabela  retornada. De
   fato, embora MAX() e MIN() no utilizem ndices,  possvel obter tais
   valores utilizando um ndice com ORDER BY e LIMIT:
    SELECT col
    FROM tab
    ORDER BY col [ DESC ]
    LIMIT 1;

   Se voc acredita que o otimizador est incorreto ao escolher uma busca
   sequencial, utilize SET enable_seqscan TO 'off' e execute testes para
   ver se uma busca por ndice  de fato  mais rpida.
   
   Quando  utilizado operadores com curingas tais como LIKE ou ~,
   ndices s podem ser utilizados em certas circunstncias:
     * O ncio de uma string de busca deve ser o incio da string, i.e.
          + modelos no LIKE no devem comear com %.
          + modelos no ~ (expresso regular) no devem comear com ^.
     * A string de busca no pode iniciar com uma classe de caracteres,
       i.e. [a-e].
     * Buscas que no diferenciam maisculas de minsculas tais como
       ILIKE e ~* no utilizam ndices. Ao invs, utilize ndices
       funcionais, que so descritos na seo 4.12.
     * A localidade padro C deve ser utilizada durante o initdb.
       
    4.9) Como eu vejo como o otimizador de consulta est avaliando a minha
    consulta?
    
   Veja o comando EXPLAIN no manual.
   
    4.10) O que  um ndice de rvore R?
    
   Um ndice de rvore B  utilizado para indexao de dados espaciais.
   Um ndice do tipo hash no pode manipular buscas em intervalos. Um
   ndice de rvore B manipula somente buscas em intervalos em uma
   dimenso. Um ndice de rvore R pode manipular dados
   multidimensionais. Por exemplo, se um ndice de rvore R pode ser
   contruido em um atributo do tipo point, o sistema pode responder mais
   eficientemente consultas tais como "busque todos os pontos dentro dos
   limites do retngulo."
   
   A pesquisa cannica que descreve o modelo original da rvore R est
   em:
   
   Guttman, A. "R-trees: A Dynamic Index Structure for Spatial
   Searching." Proceedings of the 1984 ACM SIGMOD Int'l Conf on Mgmt of
   Data, 45-57.
   
   Voc tambm pode encontrar esse documento em "Readings in Database
   Systems" do Stonebraker
   
   rvores R podem manipular polgonos e caixas. Na teoria, rvores R
   podem ser extendidos para manipular um grande nmero de dimenses. Na
   prtica, extendendo rvores R requer um pouco de trabalho e ns no
   temos atualmente nenhuma documentao de como faz-lo.
   
    4.11) O que  um Otimizador Gentico de Consultas?
    
   O mdulo GEQO acelera a otimizao de consultas quando se faz uma
   juno de vrias tabelas utilizando o conceito de Algoritmo Gentico
   (AG). Isso permite a manipulao de consultas com muitas junes
   utilizando buscas no exaustivas.
   
    4.12) Como eu fao buscas com expresses regulares e buscas com expresses
    regulares sem diferenciar maisculas de minsculas? Como eu utilizo um
    ndice para buscas que no diferenciam maisculas de minsculas?
    
   O operador ~ faz avaliao de expresses regulares, e ~* faz avaliao
   no sensvel a maisculas de expresses regulares. A variante no
   sensvel a maisculas do LIKE  chamada de ILIKE.
   
   Comparaes de igualdade no sensveis a maisculas so normalmente
   expressadas como:
    SELECT *
    FROM tab
    WHERE lower(col) = 'abc';

   Isso no ir utilizar o ndice padro. Contudo, se voc criar um
   ndice funcional, ele ser utilizado:
    CREATE INDEX tabindex ON tab (lower(col));

    4.13) Em uma consulta, como eu detecto se um campo  NULL?
    
   Voc pode testar a coluna com IS NULL e IS NOT NULL.
   
    4.14) Qual  a difenrena entre os vrios tipos de dados de caracteres?
    
Tipo            Nome Interno    Notas
--------------------------------------------------
VARCHAR(n)      varchar         tamanho especifica o comprimento mximo, sem pr
eenchimento
CHAR(n)         bpchar          preenchimento em branco para comprimento fixo e
specfico
TEXT            text            nenhum limite superior especfico no compriment
o
BYTEA           bytea           vetor de bytes de comprimento varivel (null-by
te safe)
"char"          char            um caracter

   Voc ver o nome interno quando examinar o catlogo do sistema e em
   algumas mensagens de erro.
   
   Os primeiros quatro tipos acima so do tipo "varlena" (i.e., os
   primeiros quatro bytes no disco so o comprimento seguido pelos
   dados). Consequentemente o espao atual utilizado  ligeiramente maior
   do que o tamanho declarado. Contudo, esses tipos de dados tambm so
   sujeitos a compresso ou a serem armazenados fora do padro utilizando
   o TOAST, ento o espao em disco pode tambm ser bem menor do que o
   esperado.
   VARCHAR(n)  melhor quando est armazenando cadeias de caracteres de
   comprimento varivel e h um limite de tamanho desta cadeia. TEXT 
   para cadeias de caracteres de comprimento ilimitado, com o mximo de
   um gigabyte.
   
   CHAR(n) preenche com espaos em branco at o tamanho especificado,
   enquanto o VARCHAR(n) armazena somente os caracteres fornecidos. BYTEA
    para armazenar dados binrios, particularmente valores que incluem
   bytes NULL. Todos os tipos descritos aqui tem caractersticas de
   performance similares.
   
    4.15.1) Como eu crio um campo serial/auto incremento?
    
   PostgreSQL suporta o tipo de dados SERIAL. Ele cria automaticamente
   uma sequncia. Por exemplo:
    CREATE TABLE pessoa (
        id   SERIAL,
        nome TEXT
    );

    automaticamente traduzido em:
    CREATE SEQUENCE pessoa_id_seq;
    CREATE TABLE pessoa (
        id   INT4 NOT NULL DEFAULT nextval('pessoa_id_seq'),
        nome TEXT
    );

   Veja a pgina sobre create_sequence no manual para mais informao
   sobre sequncias. Voc tambm pode utilizar o campo OID para cada
   registro como um valor nico. Contudo, se voc precisar exportar e
   importar o banco de dados, voc precisa utilizar a opo -o do pg_dump
   ou a opo COPY WITH OIDS para preservar os OIDs.
   
    4.15.2) Como eu consigo o valor de um campo SERIAL?
    
   Uma abordagem  obter o prximo valor SERIAL de uma sequncia com a
   funo nextval() antes de inserir e ento inserir com o valor
   explicitamente. Utilizando o exemplo da tabela em 4.15.1, um exemplo
   em pseudo-linguagem se pareceria com isto:
    novo_id = execute("SELECT nextval('pessoa_id_seq')");
    execute("INSERT INTO pessoa (id, nome) VALUES (novo_id, 'Blaise Pascal')");

   Voc poderia ento ter tambm o novo valor armazenado em novo_id para
   utilizar em outras consultas (i.e., como uma chave estrangeira da
   tabela pessoa). Note que o nome da SEQUENCE criada automaticamente
   ser <tabela>_<coluna>_seq, onde tabela e coluna so os nomes da
   tabela e da coluna SERIAL, respectivamente.
   
   Alternativamente, voc poderia obter o valor SERIAL atribudo com a
   funo currval() depois de t-lo inserido por padro, i.e.,
    execute("INSERT INTO pessoa (nome) VALUES ('Blaise Pascal')");
    novo_id = execute("SELECT currval('pessoa_id_seq')");

   Finalmente, voc poderia utilizar o OID retornado da sentena INSERT
   para obter o valor padro, embora este seja a abordagem menos
   portvel, pois o valor do oid no ultrapassa 4 bilhes. Em Perl,
   utilizando DBI com o mdulo DBD::Pg de Edmund Mergl, o valor do oid
   est disponvel via $sth->{pg_oid_status} depois de $sth->execute().
   
    4.15.3) currval() e nextval() no lidam com condio de corrida com outros
    usurios?
    
   No. currval() retorna o valor atual atribuido pelo seu ncleo
   (backend), e no por todos os usurios.
   
    4.15.4) Por que os nmeros da minha sequncia no so reutilizados quando
    uma transao  abortada? Por que h intervalos nos nmeros da minha
    sequncia/coluna SERIAL?
    
   Para melhorar a concorrncia, valores da sequncia so atribudos a
   transaes correntes e no so travados at que a transao seja
   finalizada. Isso causa intervalos na numerao por causa de transaes
   abortadas.
   
    4.16) O que  um OID? O que  um TID?
    
   OIDs so a resposta do PostgreSQL a ids nicos de registros. Cada
   registro que  criado no PostgreSQL recebe um OID nico. Todos OIDs
   produzidos durante o initdb so menores do que 16384 (de
   include/access/transam.h). Todos os OIDs criados pelo usurio so
   iguais ou maiores do que este valor. Por padro, todos estes OIDs so
   nicos no somente na tabela ou no banco de dados, mas na instalao
   do PostgreSQL.
   
   PostgreSQL utiliza OIDs nas tabelas internas do sistema para ligar
   registros entre tabelas. Estes OIDs podem ser utilizados para
   identificar registros de usurios especficos e podem ser utilizados
   em junes.  recomendado que voc utilize o tipo de coluna OID para
   armazenar valores OID. Voc pode criar um ndice no campo OID para
   acesso rpido.
   
   OIDs so atribudos para todas os registros novos de uma rea central
   que  utilizada por todos os bancos de dados. Se voc quer mudar o OID
   de alguma coisa, ou se voc quer fazer uma cpia da tabela, com os
   OIDs, no h razo para que voc no possa faz-la:
        CREATE TABLE nova_tabela(oid_antigo oid, minha_coluna int);
        SELECT oid_antigo, minha_coluna INTO novo FROM tabela_antiga;
        COPY novo TO '/tmp/pgtable';
        DELETE FROM novo;
        COPY nova_tabela WITH OIDS FROM '/tmp/pgtable';

   OIDs so armazenados como inteiros de 4 bytes, e no ultrapassam 4
   bilhes. Ningum nunca reportou que isso tenha ocorrido, e ns
   planejamos remover o limite antes que algem o alcane.
   
   TIDs so utilizados para identificar registros fsicos especficos com
   valores de bloco e deslocamento. TIDs mudam aps registros serem
   modificados ou recarregados. Eles so utilizados por ndices para
   apontar para registros fsicos.
   
    4.17) Qual  o significado de alguns termos utilizados no PostgreSQL?
    
   O cdigo-fonte e documentao antiga utiliza termos de uso comum. Aqui
   esto alguns deles:
     * tabela, relao, classe
     * linha, registro, tupla
     * coluna, campo, atributo
     * recupera, seleciona
     * altera, atualiza
     * incrementa, insere
     * OID, valor serial
     * portal, cursor
     * intervalo varivel, nome da tabela, alias de tabela
       
   Uma lista de termos gerais de bancos de dados pode ser encontrada em:
   http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary
   /glossary.html
   
    4.18) Por que eu recebo o erro "ERROR: Memory exhausted in
    AllocSetAlloc()"?
    
   Voc provavelmente est sem memria virtual no sistema, ou o seu
   ncleo (kernel) tem um limite baixo para certos recursos. Tente isto
   antes de iniciar o postmaster:
            ulimit -d 262144
            limit datasize 256m


   Dependendo da sua shell, somente um desses comando ter sucesso, mas
   ele definir o segmento de dados do seu processo com um limite maior e
   talvez permita que a consulta seja feita. Este comando  aplicado ao
   processo atual e todos os subprocessos criados depois do comando ser
   executado. Se voc tiver problemas com o cliente SQL porque o ncleo
   (backend) retornou muitos dados, tente-o antes de iniciar o cliente.
   
    4.19) Como eu informo qual verso do PostgreSQL eu estou utilizando?
    
   No psql, digite SELECT version();
   
    4.20) Por que minhas operaes com objetos grandes retorna "invalid large
    obj descriptor"?
    
   Voc precisa colocar BEGIN WORK e COMMIT ao redor de qualquer uso de
   operaes com objetos grandes, isto , ao redor de lo_open ...
   lo_close.
   
   Atualmente PostgreSQL obriga o fechamento de manipulao de um objeto
   grande quando uma transao  submetida (commit). Ento a primeira
   tentativa de fazer qualquer coisa com o manipulador ir retornar
   invalid large obj descriptor. Ento o cdigo que funcionava (ao menos
   a algum tempo atrs) agora ir retornar uma mensagem de erro se voc
   no utilizar uma transao.
   
    4.21) Como eu crio uma coluna que conter por padro a hora atual?
    
   Utilize CURRENT_TIMESTAMP:
CREATE TABLE teste (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );

    4.22) Por que as minhas subconsultas que utilizam IN esto to lentas?
    
   Em verses anteriores a 7.4, subconsultas eram agrupadas em consultas
   externas utilizando uma busca sequencial no resultado da subconsulta
   de cada registro da consulta externa. Se uma subconsulta retorna
   somente alguns registros e a consulta externa retorna muitos
   registros, IN  mais rpido. Para acelerar consultas externas,
   substitua IN por EXISTS:
    SELECT *
    FROM tab
    WHERE col IN (SELECT subcol FROM subtab);

   por:
    SELECT *
    FROM tab
    WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col);

   Para isto ser rpido, subcol deve ser uma coluna indexada.
   
   A partir da verso 7.4, IN utiliza a mesma tcnica de agrupamento do
   que consultas normais, e  recomendado utilizar EXISTS.
   
    4.23) Como eu fao uma juno externa (outer join)?
    
   PostgreSQL suporta junes externas utilizando a sintaxe padro do
   SQL. Aqui temos dois exemplos:
    SELECT *
    FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);

   or
    SELECT *
    FROM t1 LEFT OUTER JOIN t2 USING (col);

   Essas duas consultas indnticas juntam t1.col com t2.col, e tambm
   retornam qualquer registro que no foi juntado em t1 (aqueles que no
   combinaram com t2). Uma juno a direita RIGHT adicionaria registros
   que no foram juntados da tabela t2. Uma juno completa (FULL)
   retornaria os registros combinados mais todos os registros no
   combinados de t1 e t2. A palavra OUTER  opcional e  assumida nas
   junes LEFT, RIGHT e FULL. Junes ordinrias so chamadas junes
   naturais (INNER).
   
   Em verses anteriores, junes externas podiam ser simuladas
   utilizando UNION e NOT IN. Por exemplo, quando juntar tab1 e tab2, a
   consulta a seguir faz uma juno externa de duas tabelas:
    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) Como eu fao consultas utilizando mltiplos bancos de dados?
    
   No h outra maneira de consultar um banco de dados caso ele no seja
   o atual. Porque o PostgreSQL carrega catlogos do sistema especficos
   do banco de dados,  incerto como uma consulta em banco de dados
   distintos pode se comportar.
   
   contrib/dblink permite consultas em bancos de dados distintos
   utilizando chamadas de funes.  claro, que um cliente pode fazer
   conexes simultneas em bancos de dados diferentes e juntar os
   resultados no cliente.
   
    4.25) Como eu retorno mltiplos registros ou colunas de uma funo?
    
   No 7.3, voc pode facilmente retornar mltiplos registros ou colunas
   de uma funo,
   http://techdocs.postgresql.org/guides/SetReturningFunctions.
   
    4.26) Por que eu no posso confiar na criao/remoo de tabelas
    temporrias em funes PL/PgSQL?
    
   PL/PgSQL armazena o contedo da funo, e o efeito indesejado  que se
   uma funo PL/PgSQL acessa uma tabela temporria, e aquela tabela 
   removida e criada novamente, e a funo  chamada novamente, a funo
   ir falhar porque o contedo armazenado da funo ainda apontar para
   a tabela temporria antiga. A soluo  utilizar o EXECUTE para acesso
   a tabelas temporrias no PL/PgSQL. Isto ir fazer com que a consulta
   seja avaliada toda vez.
   
    4.27) Que opes para replicao esto disponveis?
    
   H vrias opes de replicao mestre/escravo disponveis. Isto
   permite somente que o mestre faa mudanas no banco de dados e o
   escravo s pode ler o banco de dados. Abaixo em
   http://gborg.PostgreSQL.org/genpage?replication_research lista-os. Uma
   soluo de replicao de mltiplos mestres est sendo desenvolvida em
   http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php.
   
    4.28) Que opes para encriptao esto disponveis?
    
     * No contrib/pgcrypto contm muitas funes de encriptao para
       serem utilizados em consultas SQL.
     * Para encriptar a transmisso do cliente ao servidor, o servidor
       deve ter a opo ssl definida como true no postgresql.conf, e um
       registro host ou hostssl deve existir no pg_hba.conf, e o sslmode
       no cliente no deve estar disable. (Note que tambm  possvel
       utilizar outros esquemas de transporte encriptado, tais como
       stunnel ou ssh, ao invs da conexo SSL nativa do PostgreSQL.)
     * Senhas dos usurios do banco de dados so automaticamente
       encriptadas quando armazenadas na verso 7.3. Em verses
       anteriores, voc deve habilitar a opo PASSWORD_ENCRYPTION no
       postgresql.conf.
     * O servidor pode executar utilizando um sistema de arquivos
       encriptado.
     _________________________________________________________________
   
                          Extendendo o PostgreSQL
                                      
    5.1) Eu escrevi uma funo. Quando eu executo-a no psql, por que ela
    finaliza o programa com descarga de memria (core dump)?
    
   O problema pode ser vrias coisas. Tente testar sua funo em um
   programa independente.
   
    5.2) Como eu posso contribuir com alguns tipos e funes novas para o
    PostgreSQL?
    
   Envie as suas extenses para a lista de discusso pgsql-hackers, e
   elas eventualmente sero colocadas no subdiretrio contrib/.
   
    5.3) Como eu escrevo uma funo em C que retorna uma tupla?
    
   Em verses do PostgreSQL a partir da 7.3, funes que retornam tuplas
   so suportadas em C, PL/PgSQL e SQL. Veja o Guia do Programador para
   mais informao. Um exemplo de uma funo escrita em C e que retorna
   tuplas pode ser encontrada em contrib/tablefunc.
   
    5.4) Eu alterei um arquivo do cdigo-fonte. Por que a recompilao no
    surtiu efeito?
    
   Os arquivos Makefiles no tem as dependncias corretas para incluir
   arquivos. Voc deve executar um make clean e ento o make. Se voc
   est utilizando o GCC voc pode utilizar a opo --enable-depend do
   configure para o compilador computar as dependncias automaticamente.
