]> granicus.if.org Git - postgresql/commitdiff
Add Brazilian version of FAQ.
authorBruce Momjian <bruce@momjian.us>
Thu, 10 Jun 2004 03:46:11 +0000 (03:46 +0000)
committerBruce Momjian <bruce@momjian.us>
Thu, 10 Jun 2004 03:46:11 +0000 (03:46 +0000)
Euler Taveira de Oliveira

doc/FAQ_brazilian [new file with mode: 0644]
doc/src/FAQ/FAQ_brazilian.html [new file with mode: 0644]

diff --git a/doc/FAQ_brazilian b/doc/FAQ_brazilian
new file mode 100644 (file)
index 0000000..5766e7e
--- /dev/null
@@ -0,0 +1,1252 @@
+
+                  Perguntas Frequentes (FAQ) sobre PostgreSQL
+                                       
+   Última atualização: Sex Jun 4 00:09:16 EDT 2004
+   
+   Mantenedor atual: Bruce Momjian (pgman@candle.pha.pa.us)
+   
+   Traduzido por: Euler Taveira de Oliveira (euler@ufgnet.ufg.br)
+   
+   A versão 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 específicas são respondidas em
+   http://www.PostgreSQL.org/docs/index.html.
+     _________________________________________________________________
+   
+                              Perguntas Gerais
+                                      
+   1.1) O que é PostgreSQL? Como ele é pronunciado?
+   1.2) Qual é a licença do PostgreSQL?
+   1.3) Quais plataformas Unix o PostgreSQL pode ser executado?
+   1.4) Quais portabilidades não-Unix estão disponíveis?
+   1.5) Onde eu posso conseguir o PostgreSQL?
+   1.6) Onde eu posso conseguir suporte?
+   1.7) Qual é a última versão?
+   1.8) Que documentação está disponível?
+   1.9) Como eu posso saber quais são os bugs conhecidos ou
+   características ausentes?
+   1.10) Como eu posso aprender SQL?
+   1.11) O PostgreSQL está livre do Bug do Milênio?
+   1.12) Como posso me juntar a equipe de desenvolvimento?
+   1.13) Como eu informo a existência 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 estão disponíveis para utilizar o PostgreSQL
+   com páginas Web?
+   2.3) O PostgreSQL tem interfaces gráficas para interagir com usuário?
+   2.4) Quais linguagens estão disponíveis 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 memória (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
+   conexões de outras máquinas?
+   3.6) Como eu ajusto o servidor de banco de dados para obter uma
+   performance melhor?
+   3.7) Quais características de depuração estão disponíveis?
+   3.8) Por que eu recebo "Sorry, too many clients" quando eu tento
+   conectar?
+   3.9) O que está no diretório pgsql_tmp?
+   3.10) O que eu preciso fazer para exportar e importar durante a
+   atualização de versões do PostgreSQL?
+   
+                           Perguntas Operacionais
+                                      
+   4.1) Qual é a diferença entre cursores binários e normais?
+   4.2) Como eu faço um SELECT somente dos primeiros registros de uma
+   consulta? Um registro randômico?
+   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 máximo de um registro, uma tabela e um banco de
+   dados?
+   4.6) Quanto espaço em disco é necessário para armazenar dados de um
+   arquivo texto?
+   4.7) Como eu descubro quais tabelas, índices, bancos de dados e
+   usuários estão definidos?
+   4.8) Minhas consultas estão lentas ou não estão 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 Genético de Consultas?
+   4.12) Como eu faço buscas com expressões regulares e buscas com
+   expressões regulares sem diferenciar maiúsculas de minúsculas? Como eu
+   utilizo um índice para buscas que não diferenciam maiúsculas de
+   minúsculas?
+   4.13) Em uma consulta, como eu detecto se um campo é NULL?
+   4.14) Qual é a diferença entre os vários 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() não lidam com condição de corrida com
+   outros usuários?
+   4.15.4) Por que os números da minha sequência não são reutilizados
+   quando uma transação é abortada? Por que há intervalos nos números da
+   minha sequência/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 versão do PostgreSQL eu estou utilizando?
+   4.20) Por que minhas operações com objetos grandes retorna "invalid
+   large obj descriptor"?
+   4.21) Como eu crio uma coluna que conterá por padrão a hora atual?
+   4.22) Por que as minhas subconsultas que utilizam IN estão tão lentas?
+   4.23) Como eu faço uma junção externa (outer join)?
+   4.24) Como eu faço consultas utilizando múltiplos bancos de dados?
+   4.25) Como eu retorno múltiplos registros ou colunas de uma função?
+   4.26) Por que eu não posso confiar na criação/remoção de tabelas
+   temporárias em funções PL/PgSQL?
+   4.27) Que opções para replicação estão disponíveis?
+   4.28) Que opções para encriptação estão disponíveis?
+   
+                          Extendendo o PostgreSQL
+                                      
+   5.1) Eu escrevi uma função. Quando eu executo-a no psql, por que ela
+   finaliza o programa com descarga de memória (core dump)?
+   5.2) Como eu posso contribuir com alguns tipos e funções novas para o
+   PostgreSQL?
+   5.3) Como eu escrevo uma função em C que retorna uma tupla?
+   5.4) Eu alterei um arquivo do código-fonte. Por que a recompilação não
+   surtiu efeito?
+     _________________________________________________________________
+   
+                              Perguntas Gerais
+                                      
+    1.1) O que é PostgreSQL? Como ele é pronunciado?
+    
+   PostgreSQL é pronunciado Post-Gres-Qui-El. Um arquivo de áudio está
+   disponível em http://www.postgresql.org/postgresql.mp3 para aqueles
+   que gostariam de ouvir a pronúncia.
+   
+   PostgreSQL é um melhoramento do sistema de gerência de banco de dados
+   POSTGRES (e também é, às vezes, chamado simplesmente de "Postgres"),
+   um protótipo de pesquisa de um SGBD de última geração. Enquanto o
+   PostgreSQL retém 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
+   código-fonte completo está disponível.
+   
+   O desenvolvimento do PostgreSQL é feito por um grupo de
+   desenvolvedores que estão inscritos na lista de e-mails de
+   desenvolvimento do PostgreSQL. O coordenador atual é Marc G. Fournier
+   (scrappy@PostgreSQL.org). (Veja a seção 1.6 para saber como se juntar
+   ao grupo). O grupo é responsável por todo o desenvolvimento do
+   PostgreSQL. É um projeto da comunidade e não é controlado por nenhuma
+   empresa. Para se juntar ao grupo, veja a FAQ do desenvolvedor em
+   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 código.
+   O código original do Postgres, do qual o PostgreSQL foi derivado, foi
+   um esforço de muitos estudantes de graduação e pós-graduação e uma
+   equipe de programadores trabalhando sobre a direção do Professor
+   Michael Stonebraker na Universidade da Califónia 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 licença do PostgreSQL?
+    
+   PostgreSQL está sujeito a seguinte licença:
+   
+   PostgreSQL Sistema de Gerência de Banco de Dados
+   
+   Portions copyright (c) 1996-2004, PostgreSQL Global Development Group
+   Portions Copyright (c) 1994-6 Regents of the University of California
+   
+   Permissão de uso, cópia, modificação e distribuição desse software e
+   sua documenta¸ão para qualquer propósito, sem taxa, e sem um acordo
+   escrito está concedida por esse meio, contanto que a nota da licença
+   acima, esse parágrafo e os dois parágrafos seguintes apareçam em todas
+   as cópias.
+   
+   EM NENHUM EVENTO A UNIVERSIDADE DA CALIFÓRNIA SERÁ RESPONSÁVEL 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 DOCUMENTAÇÃO, MESMO SE A UNIVERSIDADE DA
+   CALIFÓRNIA ESTIVER SIDO AVISADA DA POSSIBILIDADE DE TAL DANO.
+   
+   A UNIVERSIDADE DA CALIFÓRNIA ESPECIFICADAMENTE NÃO DÁ NENHUMA
+   GARANTIA, INCLUINDO, MAS NÃO LIMITADO A, GARANTIAS IMPLÍCITAS DE
+   COMERCIALIZAÇÃO E ATENDIMENTO DE PROPÓSITO PARTICULAR. O SOFTWARE É
+   FORNECIDO ABAIXO "COMO É", E A UNIVERSIDADE DA CALIFÓRNIA NÃO TEM
+   OBRIGAÇÃO DE FORNECER MANUTENÇÃO, SUPORTE, ATUALIZAÇÕES, MELHORIAS OU
+   MODIFICAÇÕES.
+   
+   O que está descrito acima é a licença BSD, uma licença de código
+   aberto clássica. Ela não tem restrições de como o código pode ser
+   utilizado. Nós gostamos dela e não temos intenções de mudá-la.
+   
+    1.3) Quais plataformas Unix o PostgreSQL pode ser executado?
+    
+   Em geral, qualquer plataforma moderna compatível com Unix deve ser
+   capaz de executar o PostgreSQL. As plataformas que foram testadas
+   antes do lançamento de uma versão são listadas nas instruções de
+   instalação.
+   
+    1.4) Quais portabilidades não-Unix estão disponíveis?
+    
+   Cliente
+   
+   É possível compilar a biblioteca libpq, o psql e outras interfaces e
+   aplicações 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 distribuição para que
+   seja possível compilar a biblioteca libpq e o psql para Win32. O
+   PostgreSQL também 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 distribuição 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á também 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 relação de servidores espelhos (mirrors), consulte nosso website.
+   
+    1.6) Onde eu posso conseguir suporte?
+    
+   A lista de discussão principal é: pgsql-general@PostgreSQL.org. Ela
+   está disponível para discussões relacionadas ao PostgreSQL. Para se
+   inscrever, envie um e-mail com as seguintes linhas no corpo (não envie
+   no assunto):
+    subscribe
+    end
+
+   para pgsql-general-request@PostgreSQL.org.
+   
+   Há também uma lista síntese (digest) disponível. Para se inscrever,
+   envie um e-mail para: pgsql-general-digest-request@PostgreSQL.org com
+   o seguinte corpo:
+    subscribe
+    end
+
+   Sínteses (Digests) são enviadas aos membros dessa lista quando a lista
+   receber cerca de 30k em mensagens.
+   
+   A lista de discussão sobre bugs está disponível. Para se inscrever,
+   envie um e-mail para pgsql-bugs-request@PostgreSQL.org com o seguinte
+   corpo:
+    subscribe
+    end
+
+   Há também uma lista de discussão dos desenvolvedores disponível. Para
+   se inscrever, envie um e-mail para
+   pgsql-hackers-request@PostgreSQL.org com o seguinte corpo:
+    subscribe
+    end
+
+   Outras listas de discussões e informações sobre o PostgreSQL podem ser
+   encontradas na homepage do PostgreSQL em:
+   
+     http://www.PostgreSQL.org
+     
+   Há também 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á disponível em
+   http://techdocs.postgresql.org/companies.php.
+   
+    1.7) Qual é a última versão?
+    
+   A última versão do PostgreSQL é a versão 7.4.2.
+   
+   Nós planejamos lançar versões novas a cada seis ou oito meses.
+   
+    1.8) Que documentação está disponível?
+    
+   Vários manuais, páginas de manuais (man pages) e alguns exemplos para
+   teste estão incluídos na distribuição. Veja o diretório /doc. Você
+   pode acessar os manuais online em http://www.PostgreSQL.org/docs.
+   
+   Há dois livros sobre PostgreSQL disponíveis online em
+   http://www.PostgreSQL.org/docs/awbook.html e
+   http://www.commandprompt.com/ppbook/. Há uma lista de livros sobre
+   PostgreSQL disponíveis para compra em
+   http://techdocs.PostgreSQL.org/techdocs/bookreviews.php. Há também uma
+   coleção de artigos técnicos sobre PostgreSQL em
+   http://techdocs.PostgreSQL.org/.
+   
+   psql tem alguns comandos \d para mostrar informação sobre tipos,
+   operadores, funções, agregações, etc.
+   
+   Nosso web site contém ainda mais documentação.
+   
+    1.9) Como eu posso saber quais são os bugs conhecidos ou características
+    ausentes?
+    
+   PostgreSQL suporta um subconjunto extendido do SQL-92. Veja a nossa
+   lista de afazeres (TODO) para saber sobre bugs conhecidos,
+   características 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 usuários 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 Milênio?
+    
+   Sim, nós podemos manipular datas após o ano 2000 AD e antes do ano
+   2000 BC.
+   
+    1.12) Como posso me juntar a equipe de desenvolvimento?
+    
+   Primeiramente, faça o download do código-fonte e leia a documentação
+   para Desenvolvedores do PostgreSQL no nosso website ou na
+   distribuição. Depois, se inscreva nas lista de discussão pgsql-hackers
+   e pgsql-patches. Então submeta patches de alta qualidade para
+   pgsql-patches.
+   
+   Há algumas pessoas que tem privilégios para fazer mudanças (commit) na
+   árvore CVS do PostgreSQL. Cada um deles submeteram tantos patches de
+   alta qualidade que foi impossível para os committers continuarem a
+   fazerem as mudanças, e então nós confiamos que os patches que eles
+   submetem são de alta qualidade.
+   
+    1.13) Como eu informo a existência de um bug?
+    
+   Por favor visite a página da ferramenta que reporta bugs em
+   http://www.PostgreSQL.org/bugs/bugs.php, que irá lher dar as
+   instruções e direções de como submeter um bug.
+   
+   Verifique também o nosso ftp ftp://ftp.PostgreSQL.org/pub para ver se
+   há uma versão mais recente do PostgreSQL ou patches.
+   
+    1.14) Como é o PostgreSQL comparado a outros SGBDs?
+    
+   Há várias maneiras de se medir um software: características,
+   performance, confiabilidade, suporte e preço.
+   
+   Características
+          PostgreSQL tem muitas características presentes em muitos SGBDs
+          comerciais como transações, subconsultas, gatilhos, visões,
+          integridade referencial de chave estrangeira e travamento
+          (lock) sofisticado. Nós temos algumas características que eles
+          não tem, como tipos definidos pelo usuário, herança, regras e
+          controle de concorrência de múltiplas versões para reduzir
+          travamentos (locks).
+          
+   Performance
+          PostgreSQL tem a performance similar a outros bancos de dados
+          comerciais e de código livre. Ele é mais rápido em algumas
+          coisas, mais lento em outras. Comparado ao MySQL ou sistemas de
+          bancos de dados "leves", nós somos mais rápidos com múltiplos
+          usuários, consultas complexas e carga de consultas de
+          leitura/escrita. MySQL é mais rápido para consultas simples com
+          SELECT feitas por poucos usuários. É claro que o MySQL não tem
+          muitas das características mencionadas na seção Características
+          acima. Nós desenvolvemos buscando confiabilidade e
+          características, e nós continuamos a melhorar a performance a
+          cada versão. Há uma página interessante comparando o PostgreSQL
+          com o MySQL em
+          http://openacs.org/philosophy/why-not-mysql.html. MySQL é uma
+          empresa que distribui seu produto via código livre, e requer
+          uma licença comercial para software de código fechado, e não
+          uma comunidade de desenvolvimento de código livre como o
+          PostgreSQL.
+          
+   Confiabilidade
+          Nós sabemos que um SGBD deve ser confiável ou ele é inútil. Nós
+          empenhamos em lançar versões bem testadas, de código estável e
+          que tenha o mínimo de bugs. Cada versão tem no mínimo um mês de
+          teste em versão beta, e nosso histórico de versões mostra que
+          nós podemos fornecer versões estáveis e sólidas que estão
+          prontas para uso em produção. Nós acreditamos que somos
+          comparados a nosso favor com outros sistemas de bancos de dados
+          nessa área.
+          
+   Suporte
+          Nossas listas de discussão fornecem contato com um grupo de
+          desenvolvedores e usuários para ajudar a resolver muitos
+          problemas encontrados. Enquanto nós não podemos garantir o
+          conserto, SGBDs comerciais nem sempre fornecem também. Com
+          acesso direto aos desenvolvedores, a comunidade de usuários,
+          manuais e o código fonte faz com que o suporte do PostgreSQL
+          seja superior ao de outros SGBDs. Há suporte comercial por
+          incidente disponíveis para aqueles que precisam de um. (Veja
+          seção 1.6 da FAQ.)
+          
+   Preço
+          Nós somos livres para uso dele tanto comercial quanto não
+          comercial. Você pode adicionar nosso código ao seu produto sem
+          limitações, exceto aquelas descritas na nossa licença
+          compatível com a licença 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
+   código aberto. Ela previne descontinuidades que podem facilmente
+   descontinuar o andamento do projeto.
+   
+   É claro, que a infra-estrutura não é barata. Há vários custos iniciais
+   e mensais que são necessários para manté-la. Se você ou sua empresa
+   tem dinheiro que pode ser doado para ajudar a financiar esse esforço,
+   acesse http://store.pgsql.com/shopping/ e faça uma doação.
+   
+   Embora a página mencione PostgreSQL, Inc, a "contribuição" é somente
+   para apoiar o projeto PostgreSQL e não financia nenhuma empresa
+   específica. Se você preferir, você pode enviar um cheque para o
+   endereço de contato.
+     _________________________________________________________________
+   
+   Se você tiver uma história 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 disponíveis, 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 padrão, então você poderá ter o ODBC para
+   PostgreSQL disponível em toda plataforma que eles suportam (Win, Mac,
+   Unix, VMS).
+   
+   Eles provavelmente venderão seu produto para pessoas que precisam de
+   um suporte de qualidade, mas uma versão gratuita estará sempre
+   disponível. Por favor envie perguntas para postgres95@openlink.co.uk.
+   
+    2.2) Quais ferramentas estão disponíveis para utilizar o PostgreSQL com
+    páginas Web?
+    
+   Uma boa introdução para páginas web que utilizam bancos de dados pode
+   ser vista em: http://www.webreview.com
+   
+   Para integração 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 gráficas para iteragir com o usuário?
+    
+   Sim, há várias interfaces gráficas para PostgreSQL disponíveis. 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/,
+   proprietária). Há também 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 estão disponíveis para comunicar-se com PostgreSQL?
+    
+   Muitas linguagens de programação populares contém uma interface para
+   PostgreSQL. Verifique a lista de extensões (módulos) da sua linguagem
+   de programação.
+   
+   As seguintes interfaces estão incluídas na distribuição do PostgreSQL:
+     * C (libpq)
+     * Embedded C (ecpg)
+     * Java (jdbc)
+     * Python (PyGreSQL)
+     * TCL (libpgtcl)
+       
+   Interfaces adicionais estão disponíveis em http://gborg.postgresql.org
+   na seção de Drivers/Interfaces.
+     _________________________________________________________________
+   
+                         Perguntas Administrativas
+                                      
+    3.1) Como eu instalo o PostgreSQL em um local diferente de
+    /usr/local/pgsql?
+    
+   Especifique a opção --prefix quando executar o configure.
+   
+    3.2) Quando eu inicio o postmaster, eu recebo a mensagem Bad System Call ou
+    uma descarga de memória (core dump). Por que?
+    
+   Isto pode ser vários problemas, mas primeiro verifique se você tem
+   extensões do System V instaladas no seu kernel. PostgreSQL requer
+   suporte no kernel a memória compartilhada e semáforos.
+   
+    3.3) Quando eu tento iniciar o postmaster, eu recebo erros IpcMemoryCreate.
+    Por que?
+    
+   Você não configurou a memória compartilhada corretamente no seu kernel
+   ou você precisa aumentar a memória compartilhada disponível 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 número padrão de
+   buffers e processos, precisam de aproximadamente 1 MB. Veja o Guia do
+   Administrador do PostgreSQL para mais informação sobre memória
+   compartilhada e semáforos.
+   
+    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) então o seu kernel não está configurado com o número
+   de semáforos suficientes. O Postgres precisa de um semáforo por
+   processo do servidor. Uma solução temporária é iniciar o postmaster
+   com um limite pequeno de processos do servidor. Utilize -N com o
+   parâmetro menor do que o padrão (32). Uma solução permanente seria
+   aumentar os parâmetros do kernel SEMMNS e SEMMNI.
+   
+   Semáforos inoperantes podem também causar danos durante intenso acesso
+   ao banco de dados.
+   
+   Se a mensagem é outra coisa, você possivelmente não tem suporte a
+   semáforo configurado no seu kernel. Veja o Guia do Administrador para
+   mais informação sobre memória compartilhada e semáforos.
+   
+    3.5) Como eu controlo conexões de outras máquinas?
+    
+   Por padrão, o PostgreSQL só permite conexões da máquina local
+   utilizando soquetes de domínio Unix. Outras máquinas não poderão
+   conectar-se a menos que você habilite tcpip_sockets no
+   postgresql.conf, e habilite a autenticação por máquina modificando o
+   arquivo $PGDATA/pg_hba.conf. Isso irá permitir conexões 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
+   ANALYZE permite que você veja como o PostgreSQL está interpretando a
+   consulta, e quais os índices são utilizados.
+   
+   Se você está fazendo muitos INSERTs, considere fazê-los em lote
+   utilizando o comando COPY. Isso é mais rápido do que INSERTs
+   individuais. Segundo, sentenças que não estão em um bloco de transação
+   BEGIN WORK/COMMIT são consideradas com se estivessem em sua própria
+   transação. Considere executar várias sentenças em um mesmo bloco de
+   transação. Isso reduz a quantidade de transações. Também, considere
+   remover e criar índices novamente quando estiver fazendo muitas
+   mudanças nos dados.
+   
+   Há várias opções de ajuste. Você pode desabilitar o fsync() iniciando
+   o postmaster com a opção -o -F. Isso irá impedir que fsync()s enviem
+   os dados para disco após cada transação.
+   
+   Você também pode utilizar a opção -B do postmaster para aumentar o
+   número de buffers de memória compartilhada utilizados pelos processos
+   do servidor. Se você definiu este parâmetro com um valor muito alto, o
+   postmaster pode não iniciar porque você excedeu o limite de espaço de
+   memória compartilhada do kernel. Cada buffer é de 8K e o padrão é de
+   64 buffers.
+   
+   Você também pode utilizar a opção -S do backend para aumentar a máxima
+   quantidade de memória utilizada pelo processo servidor para ordenações
+   temporárias. O valor de -S é medido em kilobytes e o padrão é de 512
+   (ou seja 512K).
+   
+   Você também pode utilizar o comando CLUSTER para agrupar dados em
+   tabelas para combinar um índice. Veja o manual sobre CLUSTER para mais
+   informação.
+   
+    3.7) Quais características de depuração estão disponíveis?
+    
+   PostgreSQL tem várias características que relatam informações que
+   podem ser valiosas para fins de depuração.
+   
+   Primeiro, execute o configure com a opção --enable-cassert, muitos
+   assert()s monitoram o progresso do núcleo (backend) e finalizam o
+   programa quando alguma coisa inesperada acontece.
+   
+   O postmaster e o postgres tem várias opções de depuração disponíveis.
+   Primeiro, quando iniciar o postmaster, tenha certeza que você enviou a
+   saida padrão e a saída de erro padrão 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 diretório raiz do PostgreSQL.
+   Este arquivo conterá informações úteis sobre problemas ou erros
+   encontrados pelo servidor. O Postmaster tem uma opção -d que permite
+   que informações mais detalhadas sejam relatadas. A opção -d é
+   acompanhada por um número que indica o nível de depuração. Esteja
+   alerta de que alto nível de depuração gera grandes arquivos de log.
+   
+   Se o postmaster não está sendo executado, você pode executar o núcleo
+   do postgres a partir da linha de comando, e digitar a sua sentença SQL
+   diretamente. Isso é recomendado somente para fins de depuração. Note
+   que uma nova linha termina a consulta, e não um ponto-e-vírgula. Se
+   você compilou com símbolos de depuração, você pode utilizar um
+   depurador para ver o que está acontecendo. Como o núcleo (backend) não
+   foi iniciado a partir do postmaster, ele não está executando em um
+   ambiente idêntico e problemas de iteração com o núcleo/travamento não
+   podem ser reproduzidos.
+   
+   O programa postgres possue as opções -s, -A, e -t que podem ser muito
+   úteis para depuração e medidas de performance.
+   
+   Você também pode compilar com perfil para ver que funções estão
+   demandando tempo de execução. Os arquivo de perfil do núcleo (backend)
+   serão colocados no diretório pgsql/data/base/dbname. O arquivo de
+   perfil do cliente será colocado no diretório atual do cliente. O Linux
+   requer uma compilação com -DLINUX_PROFILE para criação 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 padrão é 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ê
+   também deve aumentar -B cujo padrão é 64; -B deve ser pelo menos duas
+   vezes -N, e provavelmente deve ser mais do que isso para uma melhor
+   performance. Para um grande número de processos do servidor, você
+   também precisa aumentar vários parâmetros de configuração do kernel do
+   Unix. Coisas para serem observadas incluem o tamanho máximo de blocos
+   de memória compartilhada, SHMMAX; o número máximo de semáforos, SEMMNS
+   e SEMMNI; o número máximo de processos, NPROC; o número máximo de
+   processos por usuário, MAXUPRC; e o número máximo de arquivos abertos,
+   NFILE e NINODE. A razão na qual o PostgreSQL tem um limite de número
+   de processos do servidor permitidos é para que o seu sistema não fique
+   sem recursos disponíveis.
+   
+    3.9) O que está no diretório pgsql_tmp?
+    
+   Este diretório contém arquivos temporários gerados pelo executor de
+   uma consulta. Por exemplo, se uma ordenação é necessária para
+   satisfazer um ORDER BY e a ordenação requer mais espaço do que o
+   parâmetro -S do servidor permite, então arquivos temporários são
+   criados para abrigar os dados extras.
+   
+   Os arquivos temporários geralmente são apagados automaticamente, mas
+   podem persistir caso o servidor termine anormalmente durante a
+   ordenação. Uma parada e um reinício do postmaster removerá os arquivos
+   destes diretórios.
+   
+    3.10) O que eu preciso fazer para exportar e importar durante a atualização
+    entre versões do PostgreSQL?
+    
+   O time do PostgreSQL faz somente pequenas mudanças entre versões
+   menores, então atualizar da versão 7.2 para 7.2.1 não requer uma
+   exportação e uma importação. Contudo, versões 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 mudanças geralmente são complexas, então
+   nós não mantemos compatibilidade para os arquivos de dados. Uma
+   exportação em um formato genérico que pode ser importada utilizando o
+   novo formato interno.
+   
+   Em versões onde o formato em disco não muda, o script pg_upgrade pode
+   ser utilizado para atualizar sem precisar de um dump/restore. As notas
+   da versão mencionam se pg_upgrade está disponível para a versão.
+     _________________________________________________________________
+   
+                           Perguntas Operacionais
+                                      
+    4.1) Qual é a diferença entre cursores binários e normais?
+    
+   Veja o comando DECLARE no manual para uma descrição.
+   
+    4.2) Como eu faço um SELECT somente dos primeiros registros de uma
+    consulta? Um registro randômico?
+    
+   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 randômico, 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?
+    
+   Utilize o comando \dt para ver tabelas no psql. Para obter uma lista
+   completa de comandos no psql você pode utilizar \?. Alternativamente
+   você pode ler o código-fonte do psql no arquivo
+   pgsql/src/bin/psql/describe.c. Ele contém comandos SQL que geram a
+   saída para os comandos do psql. Você também pode iniciar o psql com a
+   opção -E então serão mostradas as consultas utilizadas para executar
+   os comandos que você digitou. PostgreSQL também fornece uma interface
+   para o INFORMATION SCHEMA SQLi na qual você pode consultar informações
+   sobre o banco de dados.
+   
+    4.4) Como eu removo uma coluna de uma tabela ou mudo o seu tipo de dados?
+    
+   A funcionalidade DROP COLUMN foi adicionada a versão 7.3 com comando
+   ALTER TABLE DROP COLUMN. Em versões anteriores, você pode fazer isto:
+    BEGIN;
+    LOCK TABLE old_table;
+    SELECT ...  -- selecione todas colunas mas não 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, faça 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
+   espaço em disco utilizado pelos registros expirados.
+   
+    4.5) Qual é o tamanho máximo de um registro, uma tabela e um banco de
+    dados?
+    
+   Estes são os limites:
+Tamanho máximo de um banco de dados?           ilimitado (existem bancos de dad
+os de 32 TB)
+Tamanho máximo de uma tabela?                  32 TB
+Tamanho máximo de um registro?                 1.6TB
+Tamanho máximo de um campo?                    1 GB
+Número máximo de registros em uma tabela?      ilimitado
+Número máximo de colunas em uma tabela?        250-1600 dependendo dos tipos da
+s colunas
+Número máximo de índices em uma tabela?        ilimitado
+
+   É claro, que eles não são ilimitados, mas limitados ao espaço em disco
+   disponível e espaço em memória/swap. A Performance será penalizada
+   quando estes valores se tornarem grandes.
+   
+   O tamanho máximo de uma tabela com 32 TB não requer suporte a arquivos
+   grandes do sistema operacional. Tabelas grandes são armazenadas como
+   múltiplos arquivos de 1 GB então o limite do sistema de arquivos não é
+   importante.
+   
+   O tamanho máximo de uma tabela e o número máximo de colunas pode ser
+   quadruplicadas aumentando-se o tamanho dos blocos para 32k.
+   
+    4.6) Quanto espaço em disco é necessário para armazenar dados de um arquivo
+    texto?
+    
+   Um banco de dados PostgreSQL irá requerer até cinco vezes a quantidade
+   de espaço requerida para armazenar dados em um arquivo texto.
+   
+   Como um exemplo, considere um arquivo com 100.000 linhas contendo um
+   inteiro e uma descrição em cada linha. Suponha que o tamanho médio da
+   descrição é de vinte bytes. O arquivo terá 2.8 MB. O tamanho do
+   arquivo do banco de dados PostgreSQL que contém esses dados pode ser
+   estimado em 6.4 MB:
+    36 bytes: cada cabeçalho de registro (aproximadamente)
+    24 bytes: um campo int e um campo texto
+   + 4 bytes: ponteiro na página para a tupla
+   -------------------------------------------
+    64 bytes por registro
+
+   O tamanho de uma página de dados no PostgreSQL é 8192 bytes (8 KB), então:
+
+   8192 bytes por página
+   ------------------------   =  128 registros por página do banco de dados (ar
+redondado para baixo)
+     64 bytes por registro
+
+   100000 registros de dados
+   ----------------------------  =  782 páginas do banco de dados (arredondado
+para cima)
+      128 registros por página
+
+782 páginas do banco de dados * 8192 bytes por página  =  6,406,144 bytes (6.4
+MB)
+
+   Índices não requerem muito espaço, mas contém dados que foram
+   indexados, então eles podem ocupar algum espaço.
+   
+   NULLs são armazenados como bitmaps, então eles utilizam muito pouco
+   espaço.
+   
+    4.7) Como eu descrubo quais tabelas, índices, bancos de dados e usuários
+    estão definidos?
+    
+   psql tem uma variadade de comandos com barra invertida que mostram
+   tais informações. Utilize \? para vê-los. Há também tabelas do sistema
+   que começam com pg_ e que os descrevem também. Também, psql -l listará
+   todos os bancos de dados.
+   
+   Veja também o arquivo pgsql/src/tutorial/syscat.source. Ele ilustra
+   muitos SELECTs necessários para obter informação das tabelas do
+   sistema de banco de dados.
+   
+    4.8) Minhas consultas estão lentas ou não estão utilizando índices. Por
+    que?
+    
+   Índices não são automaticamente utilizados por toda consulta. Índices
+   só são utilizados se uma tabela é maior do que o tamanho mínimo e uma
+   consulta seleciona somente uma porcentagem pequena de registros de uma
+   tabela. Isto porque o acesso randômico 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
+   estatísticas sobre a tabela. Estas estatísticas são coletadas
+   utilizando VACUUM ANALYZE ou simplesmente ANALYZE. Utilizando
+   estatísticas, o otimizador saber quantos registros há na tabela e pode
+   determinar melhor se um índice deve ser utilizado. Estatísticas também
+   são úteis para determinar a ordem de junção ótima e métodos de junção.
+   Coleção de estatísticas deve ser feita periodicamente a medida que o
+   conteúdo da tabela muda.
+   
+   Índices não são normalmente utilizados para ORDER BY ou para fazer
+   junções. Uma busca sequencial seguida por uma ordenação explícita é
+   usualmente mais rápida do que uma busca por índice em uma tabela
+   grande.
+   Contudo, LIMIT combinado com ORDER BY frequentemente utilizará um
+   índice porque somente uma pequena porção da tabela é retornada. De
+   fato, embora MAX() e MIN() não utilizem índices, é possível 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 rápida.
+   
+   Quando é utilizado operadores com curingas tais como LIKE ou ~,
+   índices só podem ser utilizados em certas circunstâncias:
+     * O ínício de uma string de busca deve ser o início da string, i.e.
+          + modelos no LIKE não devem começar com %.
+          + modelos no ~ (expressão regular) não devem começar com ^.
+     * A string de busca não pode iniciar com uma classe de caracteres,
+       i.e. [a-e].
+     * Buscas que não diferenciam maiúsculas de minúsculas tais como
+       ILIKE e ~* não utilizam índices. Ao invés, utilize índices
+       funcionais, que são descritos na seção 4.12.
+     * A localidade padrão 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 indexação de dados espaciais.
+   Um índice do tipo hash não pode manipular buscas em intervalos. Um
+   índice de árvore B manipula somente buscas em intervalos em uma
+   dimensão. 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 retângulo."
+   
+   A pesquisa canônica 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ê também pode encontrar esse documento em "Readings in Database
+   Systems" do Stonebraker
+   
+   Árvores R podem manipular polígonos e caixas. Na teoria, árvores R
+   podem ser extendidos para manipular um grande número de dimensões. Na
+   prática, extendendo árvores R requer um pouco de trabalho e nós não
+   temos atualmente nenhuma documentação de como fazé-lo.
+   
+    4.11) O que é um Otimizador Genético de Consultas?
+    
+   O módulo GEQO acelera a otimização de consultas quando se faz uma
+   junção de várias tabelas utilizando o conceito de Algoritmo Genético
+   (AG). Isso permite a manipulação de consultas com muitas junções
+   utilizando buscas não exaustivas.
+   
+    4.12) Como eu faço buscas com expressões regulares e buscas com expressões
+    regulares sem diferenciar maiúsculas de minúsculas? Como eu utilizo um
+    índice para buscas que não diferenciam maiúsculas de minúsculas?
+    
+   O operador ~ faz avaliação de expressões regulares, e ~* faz avaliação
+   não sensível a maiúsculas de expressões regulares. A variante não
+   sensível a maiúsculas do LIKE é chamada de ILIKE.
+   
+   Comparações de igualdade não sensíveis a maiúsculas são normalmente
+   expressadas como:
+    SELECT *
+    FROM tab
+    WHERE lower(col) = 'abc';
+
+   Isso não irá utilizar o índice padrão. 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 difenrença entre os vários tipos de dados de caracteres?
+    
+Tipo            Nome Interno    Notas
+--------------------------------------------------
+VARCHAR(n)      varchar         tamanho especifica o comprimento máximo, sem pr
+eenchimento
+CHAR(n)         bpchar          preenchimento em branco para comprimento fixo e
+specífico
+TEXT            text            nenhum limite superior específico no compriment
+o
+BYTEA           bytea           vetor de bytes de comprimento variável (null-by
+te safe)
+"char"          char            um caracter
+
+   Você verá o nome interno quando examinar o catálogo do sistema e em
+   algumas mensagens de erro.
+   
+   Os primeiros quatro tipos acima são do tipo "varlena" (i.e., os
+   primeiros quatro bytes no disco são o comprimento seguido pelos
+   dados). Consequentemente o espaço atual utilizado é ligeiramente maior
+   do que o tamanho declarado. Contudo, esses tipos de dados também são
+   sujeitos a compressão ou a serem armazenados fora do padrão utilizando
+   o TOAST, então o espaço em disco pode também ser bem menor do que o
+   esperado.
+   VARCHAR(n) é melhor quando está armazenando cadeias de caracteres de
+   comprimento variável e há um limite de tamanho desta cadeia. TEXT é
+   para cadeias de caracteres de comprimento ilimitado, com o máximo de
+   um gigabyte.
+   
+   CHAR(n) preenche com espaços em branco até o tamanho especificado,
+   enquanto o VARCHAR(n) armazena somente os caracteres fornecidos. BYTEA
+   é para armazenar dados binários, particularmente valores que incluem
+   bytes NULL. Todos os tipos descritos aqui tem características 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 sequência. 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 página sobre create_sequence no manual para mais informação
+   sobre sequências. Você também 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 opção -o do pg_dump
+   ou a opção COPY WITH OIDS para preservar os OIDs.
+   
+    4.15.2) Como eu consigo o valor de um campo SERIAL?
+    
+   Uma abordagem é obter o próximo valor SERIAL de uma sequência com a
+   função nextval() antes de inserir e então 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 então ter também 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 são os nomes da
+   tabela e da coluna SERIAL, respectivamente.
+   
+   Alternativamente, você poderia obter o valor SERIAL atribuído com a
+   função currval() depois de tê-lo inserido por padrão, 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 sentença INSERT
+   para obter o valor padrão, embora este seja a abordagem menos
+   portável, pois o valor do oid não ultrapassa 4 bilhões. Em Perl,
+   utilizando DBI com o módulo DBD::Pg de Edmund Mergl, o valor do oid
+   está disponível via $sth->{pg_oid_status} depois de $sth->execute().
+   
+    4.15.3) currval() e nextval() não lidam com condição de corrida com outros
+    usuários?
+    
+   Não. currval() retorna o valor atual atribuido pelo seu núcleo
+   (backend), e não por todos os usuários.
+   
+    4.15.4) Por que os números da minha sequência não são reutilizados quando
+    uma transação é abortada? Por que há intervalos nos números da minha
+    sequência/coluna SERIAL?
+    
+   Para melhorar a concorrência, valores da sequência são atribuídos a
+   transações correntes e não são travados até que a transação seja
+   finalizada. Isso causa intervalos na numeração por causa de transações
+   abortadas.
+   
+    4.16) O que é um OID? O que é um TID?
+    
+   OIDs são 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 são menores do que 16384 (de
+   include/access/transam.h). Todos os OIDs criados pelo usuário são
+   iguais ou maiores do que este valor. Por padrão, todos estes OIDs são
+   únicos não somente na tabela ou no banco de dados, mas na instalação
+   do PostgreSQL.
+   
+   PostgreSQL utiliza OIDs nas tabelas internas do sistema para ligar
+   registros entre tabelas. Estes OIDs podem ser utilizados para
+   identificar registros de usuários específicos e podem ser utilizados
+   em junções. É recomendado que você utilize o tipo de coluna OID para
+   armazenar valores OID. Você pode criar um índice no campo OID para
+   acesso rápido.
+   
+   OIDs são atribuídos 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 cópia da tabela, com os
+   OIDs, não há razão para que você não possa fazê-la:
+        CREATE TABLE nova_tabela(minha_coluna int);
+        SELECT oid as oid_antigo, minha_coluna INTO tabela_tmp FROM tabela_anti
+ga;
+        COPY tabela_tmp TO '/tmp/pgtable';
+        DROP TABLE tabela_tmp;
+        COPY nova_tabela WITH OIDS FROM '/tmp/pgtable';
+
+   OIDs são armazenados como inteiros de 4 bytes, e não ultrapassam 4
+   bilhões. Ninguém nunca reportou que isso tenha ocorrido, e nós
+   planejamos remover o limite antes que algúem o alcançe.
+   
+   TIDs são utilizados para identificar registros físicos específicos com
+   valores de bloco e deslocamento. TIDs mudam após registros serem
+   modificados ou recarregados. Eles são utilizados por índices para
+   apontar para registros físicos.
+   
+    4.17) Qual é o significado de alguns termos utilizados no PostgreSQL?
+    
+   O código-fonte e documentação antiga utiliza termos de uso comum. Aqui
+   estão alguns deles:
+     * tabela, relação, classe
+     * linha, registro, tupla
+     * coluna, campo, atributo
+     * recupera, seleciona
+     * altera, atualiza
+     * incrementa, insere
+     * OID, valor serial
+     * portal, cursor
+     * intervalo variável, 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 memória virtual no sistema, ou o seu
+   núcleo (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 núcleo
+   (backend) retornou muitos dados, tente-o antes de iniciar o cliente.
+   
+    4.19) Como eu informo qual versão do PostgreSQL eu estou utilizando?
+    
+   No psql, digite SELECT version();
+   
+    4.20) Por que minhas operações com objetos grandes retorna "invalid large
+    obj descriptor"?
+    
+   Você precisa colocar BEGIN WORK e COMMIT ao redor de qualquer uso de
+   operações com objetos grandes, isto é, ao redor de lo_open ...
+   lo_close.
+   
+   Atualmente PostgreSQL obriga o fechamento de manipulação de um objeto
+   grande quando uma transação é submetida (commit). Então a primeira
+   tentativa de fazer qualquer coisa com o manipulador irá retornar
+   invalid large obj descriptor. Então o código que funcionava (ao menos
+   a algum tempo atrás) agora irá retornar uma mensagem de erro se você
+   não utilizar uma transação.
+   
+    4.21) Como eu crio uma coluna que conterá por padrão 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 estão tão lentas?
+    
+   Em versões 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 rápido. 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 rápido, subcol deve ser uma coluna indexada.
+   
+   A partir da versão 7.4, IN utiliza a mesma técnica de agrupamento do
+   que consultas normais, e é recomendado utilizar EXISTS.
+   
+    4.23) Como eu faço uma junção externa (outer join)?
+    
+   PostgreSQL suporta junções externas utilizando a sintaxe padrão 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 indênticas juntam t1.col com t2.col, e também
+   retornam qualquer registro que não foi juntado em t1 (aqueles que não
+   combinaram com t2). Uma junção a direita RIGHT adicionaria registros
+   que não foram juntados da tabela t2. Uma junção completa (FULL)
+   retornaria os registros combinados mais todos os registros não
+   combinados de t1 e t2. A palavra OUTER é opcional e é assumida nas
+   junções LEFT, RIGHT e FULL. Junções ordinárias são chamadas junções
+   naturais (INNER).
+   
+   Em versões anteriores, junções externas podiam ser simuladas
+   utilizando UNION e NOT IN. Por exemplo, quando juntar tab1 e tab2, a
+   consulta a seguir faz uma junção 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 faço consultas utilizando múltiplos bancos de dados?
+    
+   Não há outra maneira de consultar um banco de dados caso ele não seja
+   o atual. Porque o PostgreSQL carrega catálogos do sistema específicos
+   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 funções. É claro, que um cliente pode fazer
+   conexões simultâneas em bancos de dados diferentes e juntar os
+   resultados no cliente.
+   
+    4.25) Como eu retorno múltiplos registros ou colunas de uma função?
+    
+   No 7.3, você pode facilmente retornar múltiplos registros ou colunas
+   de uma função,
+   http://techdocs.postgresql.org/guides/SetReturningFunctions.
+   
+    4.26) Por que eu não posso confiar na criação/remoção de tabelas
+    temporárias em funções PL/PgSQL?
+    
+   PL/PgSQL armazena o conteúdo da função, e o efeito indesejado é que se
+   uma função PL/PgSQL acessa uma tabela temporária, e aquela tabela é
+   removida e criada novamente, e a função é chamada novamente, a função
+   irá falhar porque o conteúdo armazenado da função ainda apontará para
+   a tabela temporária antiga. A solução é utilizar o EXECUTE para acesso
+   a tabelas temporárias no PL/PgSQL. Isto irá fazer com que a consulta
+   seja avaliada toda vez.
+   
+    4.27) Que opções para replicação estão disponíveis?
+    
+   Há várias opções de replicação mestre/escravo disponíveis. Isto
+   permite somente que o mestre faça mudanças 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
+   solução de replicação de múltiplos mestres está sendo desenvolvida em
+   http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php.
+   
+    4.28) Que opções para encriptação estão disponíveis?
+    
+     * No contrib/pgcrypto contém muitas funções de encriptação para
+       serem utilizados em consultas SQL.
+     * Para encriptar a transmissão do cliente ao servidor, o servidor
+       deve ter a opção ssl definida como true no postgresql.conf, e um
+       registro host ou hostssl deve existir no pg_hba.conf, e o sslmode
+       no cliente não deve estar disable. (Note que também é possível
+       utilizar outros esquemas de transporte encriptado, tais como
+       stunnel ou ssh, ao invés da conexão SSL nativa do PostgreSQL.)
+     * Senhas dos usuários do banco de dados são automaticamente
+       encriptadas quando armazenadas na versão 7.3. Em versões
+       anteriores, você deve habilitar a opção PASSWORD_ENCRYPTION no
+       postgresql.conf.
+     * O servidor pode executar utilizando um sistema de arquivos
+       encriptado.
+     _________________________________________________________________
+   
+                          Extendendo o PostgreSQL
+                                      
+    5.1) Eu escrevi uma função. Quando eu executo-a no psql, por que ela
+    finaliza o programa com descarga de memória (core dump)?
+    
+   O problema pode ser várias coisas. Tente testar sua função em um
+   programa independente.
+   
+    5.2) Como eu posso contribuir com alguns tipos e funções novas para o
+    PostgreSQL?
+    
+   Envie as suas extensões para a lista de discussão pgsql-hackers, e
+   elas eventualmente serão colocadas no subdiretório contrib/.
+   
+    5.3) Como eu escrevo uma função em C que retorna uma tupla?
+    
+   Em versões do PostgreSQL a partir da 7.3, funções que retornam tuplas
+   são suportadas em C, PL/PgSQL e SQL. Veja o Guia do Programador para
+   mais informação. Um exemplo de uma função escrita em C e que retorna
+   tuplas pode ser encontrada em contrib/tablefunc.
+   
+    5.4) Eu alterei um arquivo do código-fonte. Por que a recompilação não
+    surtiu efeito?
+    
+   Os arquivos Makefiles não tem as dependências corretas para incluir
+   arquivos. Você deve executar um make clean e então o make. Se você
+   está utilizando o GCC você pode utilizar a opção --enable-depend do
+   configure para o compilador computar as dependências automaticamente.
diff --git a/doc/src/FAQ/FAQ_brazilian.html b/doc/src/FAQ/FAQ_brazilian.html
new file mode 100644 (file)
index 0000000..76d062e
--- /dev/null
@@ -0,0 +1,992 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+  <HEAD>
+    <META name="generator" content="HTML Tidy, see www.w3.org">
+    <META http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+    <TITLE>FAQ do PostgreSQL</TITLE>
+  </HEAD>
+
+  <BODY bgcolor="#ffffff" text="#000000" link="#ff0000" vlink="#a00000"
+  alink="#0000ff">
+    <H1>Perguntas Frequentes (FAQ) sobre PostgreSQL</H1>
+
+    <P>&Uacute;ltima atualiza&ccedil;&atilde;o: Sex Jun  4 00:09:16 EDT 2004</P>
+
+    <P>Mantenedor atual: Bruce Momjian (<A href=
+    "mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</A>)<BR>
+    </P>
+
+    <P>Traduzido por: Euler Taveira de Oliveira (<A href=
+    "mailto:euler@ufgnet.ufg.br">euler@ufgnet.ufg.br</A>)<BR>
+
+    <P>A vers&atilde;o mais recente desse documento pode ser vista em <A href=
+           "http://www.PostgreSQL.org/docs/faqs/FAQ.html">http://www.PostgreSQL.org/docs/faqs/FAQ.html</A> (EN).<BR>
+    <A href="http://www.postgresql.org/docs/faqs/FAQ_brazilian.html">http://www.PostgreSQL.org/docs/faqs/FAQ_brazilian.html</A>
+     (pt_BR).</P>
+
+     <P>Perguntas sobre plataformas espec&iacute;ficas s&atilde;o respondidas em <A href=
+    "http://www.PostgreSQL.org/docs/index.html">http://www.PostgreSQL.org/docs/index.html</A>.</P>
+    <HR>
+
+    <H2 align="center">Perguntas Gerais</H2>
+    <A href="#1.1">1.1</A>) O que &eacute; PostgreSQL? Como ele &eacute; pronunciado?<BR>
+     <A href="#1.2">1.2</A>) Qual &eacute; a licen&ccedil;a do PostgreSQL?<BR>
+     <A href="#1.3">1.3</A>) Quais plataformas Unix o PostgreSQL pode ser executado?<BR>
+     <A href="#1.4">1.4</A>) Quais portabilidades n&atilde;o-Unix est&atilde;o dispon&iacute;veis?<BR>
+     <A href="#1.5">1.5</A>) Onde eu posso conseguir o PostgreSQL?<BR>
+     <A href="#1.6">1.6</A>) Onde eu posso conseguir suporte?<BR>
+     <A href="#1.7">1.7</A>) Qual &eacute; a &uacute;ltima vers&atilde;o?<BR>
+     <A href="#1.8">1.8</A>) Que documenta&ccedil;&atilde;o est&aacute; dispon&iacute;vel?<BR>
+     <A href="#1.9">1.9</A>) Como eu posso saber quais s&atilde;o os bugs conhecidos ou caracter&iacute;sticas ausentes?<BR>
+     <A href="#1.10">1.10</A>) Como eu posso aprender <SMALL>SQL</SMALL>?<BR>
+     <A href="#1.11">1.11</A>) O PostgreSQL est&aacute; livre do Bug do Mil&ecirc;nio?<BR>
+     <A href="#1.12">1.12</A>) Como posso me juntar a equipe de desenvolvimento?<BR>
+     <A href="#1.13">1.13</A>) Como eu informo a exist&ecirc;ncia de um bug?<BR>
+     <A href="#1.14">1.14</A>) Como &eacute; o PostgreSQL comparado a outros <SMALL>SGBD</SMALL>s?<BR>
+     <A href="#1.15">1.15</A>) Como eu posso ajudar financeiramente o projeto PostgreSQL?<BR>
+     
+
+     <H2 align="center">Perguntas sobre Clientes</H2>
+    <A href="#2.1">2.1</A>) H&aacute; drivers <SMALL>ODBC</SMALL> para PostgreSQL?<BR>
+    <A href="#2.2">2.2</A>) Quais ferramentas est&atilde;o dispon&iacute;veis para utilizar o PostgreSQL com p&aacute;ginas Web?<BR>
+    <A href="#2.3">2.3</A>) O PostgreSQL tem interfaces gr&aacute;ficas para interagir com usu&aacute;rio?<BR>
+    <A href="#2.4">2.4</A>) Quais linguagens est&atilde;o dispon&iacute;veis para comunicar-se com o PostgreSQL?<BR>
+     
+
+    <H2 align="center">Perguntas Administrativas</H2>
+    <A href="#3.1">3.1</A>) Como eu instalo o PostgreSQL em um local diferente de <I>/usr/local/pgsql</I>?<BR>
+    <A href="#3.2">3.2</A>) Quando eu inicio o <I>postmaster</I>, eu recebo a mensagem
+    <I>Bad System Call</I> ou uma descarga de mem&oacute;ria (core dump). Por que?<BR>
+    <A href="#3.3">3.3</A>) Quando eu tento iniciar o <I>postmaster</I>, eu recebo erros <I>IpcMemoryCreate</I>. Por que?
+    <A href="#3.4">3.4</A>) Quando eu tento iniciar o <I>postmaster</I>, eu recebo erros <I>IpcSemaphoreCreate</I>. Por que?
+    <A href="#3.5">3.5</A>) Como eu controlo conex&otilde;es de outras m&aacute;quinas?<BR>
+    <A href="#3.6">3.6</A>) Como eu ajusto o servidor de banco de dados para obter uma performance melhor?<BR>
+    <A href="#3.7">3.7</A>) Quais caracter&iacute;sticas de depura&ccedil;&atilde;o est&atilde;o dispon&iacute;veis?<BR>
+     <A href="#3.8">3.8</A>) Por que eu recebo <I>"Sorry, too many clients"</I> quando eu tento conectar?<BR>
+     <A href="#3.9">3.9</A>) O que est&aacute; no diret&oacute;rio <I>pgsql_tmp</I>?<BR>
+     <A href="#3.10">3.10</A>) O que eu preciso fazer para exportar e importar durante a atualiza&ccedil;&atilde;o de vers&otilde;es do PostgreSQL?<BR>
+
+
+     <H2 align="center">Perguntas Operacionais</H2>
+     <A href="#4.1">4.1</A>) Qual &eacute; a diferen&ccedil;a entre cursores bin&aacute;rios e normais?<BR>
+     <A href="#4.2">4.2</A>) Como eu fa&ccedil;o um <SMALL>SELECT</SMALL> somente dos primeiros registros de uma consulta? Um registro rand&ocirc;mico?<BR>
+     <A href="#4.3">4.3</A>) Como eu obtenho a lista de tabelas ou outras coisas que eu posso ver no <I>psql</I>?<BR>
+     <A href="#4.4">4.4</A>) Como eu removo uma coluna de uma tabela ou mudo o seu tipo de dados?<BR>
+     <A href="#4.5">4.5</A>) Qual &eacute; o tamanho m&aacute;ximo de um registro, uma tabela e um banco de dados?<BR>
+     <A href="#4.6">4.6</A>) Quanto espa&ccedil;o em disco &eacute; necess&aacute;rio para armazenar dados de um arquivo texto?<BR>
+     <A href="#4.7">4.7</A>) Como eu descubro quais tabelas, &iacute;ndices, bancos de dados e usu&aacute;rios est&atilde;o definidos?<BR>
+     <A href="#4.8">4.8</A>) Minhas consultas est&atilde;o lentas ou n&atilde;o est&atilde;o utilizando &iacute;ndices. Por que?<BR>
+     <A href="#4.9">4.9</A>) Como eu vejo como o otimizador de consultas est&aacute; avaliando minha consulta?<BR>
+    <A href="#4.10">4.10</A>) O que &eacute; um &iacute;ndice de &aacute;rvore R (R-tree)?<BR>
+    <A href="#4.11">4.11</A>) O que &eacute; um Otimizador Gen&eacute;tico de Consultas?<BR>
+     <A href="#4.12">4.12</A>) Como eu fa&ccedil;o buscas com express&otilde;es regulares
+     e buscas com express&otilde;es regulares sem diferenciar mai&uacute;sculas de min&uacute;sculas? Como eu utilizo um &iacute;ndice para
+     buscas que n&atilde;o diferenciam mai&uacute;sculas de min&uacute;sculas?<BR>
+    <A href="#4.13">4.13</A>) Em uma consulta, como eu detecto se um campo &eacute; <SMALL>NULL</SMALL>?<BR>
+    <A href="#4.14">4.14</A>) Qual &eacute; a diferen&ccedil;a entre os v&aacute;rios tipos de dados de caracteres?<BR>
+    <A href="#4.15.1">4.15.1</A>) Como eu crio um campo serial/auto incremento?<BR>
+     <A href="#4.15.2">4.15.2</A>) Como eu consigo o valor de um campo
+    <SMALL>SERIAL</SMALL>?<BR>
+     <A href="#4.15.3">4.15.3</A>) <I>currval()</I> e
+    <I>nextval()</I> n&atilde;o lidam com condi&ccedil;&atilde;o de corrida com outros usu&aacute;rios?<BR>
+    <A href="#4.15.4">4.15.4</A>) Por que os n&uacute;meros da minha sequ&ecirc;ncia n&atilde;o s&atilde;o reutilizados quando uma transa&ccedil;&atilde;o &eacute; abortada? Por que h&aacute; intervalos nos n&uacute;meros da minha sequ&ecirc;ncia/coluna SERIAL?<BR>
+    <A href="#4.16">4.16</A>) O que &eacute; um <SMALL>OID</SMALL>? O que &eacute; um <SMALL>TID</SMALL>?<BR>
+    <A href="#4.17">4.17</A>) Qual &eacute; o significado de alguns termos utilizados no PostgreSQL?<BR>
+    <A href="#4.18">4.18</A>) Por que eu recebo o erro <I>"ERROR: Memory exhausted in AllocSetAlloc()"</I>?<BR>
+     <A href="#4.19">4.19</A>) Como eu informo qual vers&atilde;o do PostgreSQL eu estou utilizando?<BR>
+    <A href="#4.20">4.20</A>) Por que minhas opera&ccedil;&otilde;es com objetos grandes retorna <I>"invalid large obj descriptor"</I>?<BR>
+    <A href="#4.21">4.21</A>) Como eu crio uma coluna que conter&aacute; por padr&atilde;o a hora atual?<BR>
+    <A href="#4.22">4.22</A>) Por que as minhas subconsultas que utilizam <code><SMALL>IN</SMALL></code> est&atilde;o t&atilde;o lentas?<BR>
+    <A href="#4.23">4.23</A>) Como eu fa&ccedil;o uma jun&ccedil;&atilde;o externa (outer join)?<BR>
+     <A href="#4.24">4.24</A>) Como eu fa&ccedil;o consultas utilizando m&uacute;ltiplos bancos de dados?<BR>
+    <A href="#4.25">4.25</A>) Como eu retorno m&uacute;ltiplos registros ou colunas de uma fun&ccedil;&atilde;o?<BR>
+    <A href="#4.26">4.26</A>) Por que eu n&atilde;o posso confiar na cria&ccedil;&atilde;o/remo&ccedil;&atilde;o de tabelas tempor&aacute;rias em fun&ccedil;&otilde;es PL/PgSQL?<BR>
+    <A href="#4.27">4.27</A>) Que op&ccedil;&otilde;es para replica&ccedil;&atilde;o est&atilde;o dispon&iacute;veis?<BR>
+    <A href="#4.28">4.28</A>) Que op&ccedil;&otilde;es para encripta&ccedil;&atilde;o est&atilde;o dispon&iacute;veis?<BR>
+     
+
+    <H2 align="center">Extendendo o PostgreSQL</H2>
+    <A href="#5.1">5.1</A>) Eu escrevi uma fun&ccedil;&atilde;o. Quando eu executo-a
+    no <I>psql</I>, por que ela finaliza o programa com descarga de mem&oacute;ria (core dump)?<BR>
+    <A href="#5.2">5.2</A>) Como eu posso contribuir com alguns tipos e fun&ccedil;&otilde;es novas para o PostgreSQL?<BR>
+    <A href="#5.3">5.3</A>) Como eu escrevo uma fun&ccedil;&atilde;o em C que retorna uma tupla?<BR>
+    <A href="#5.4">5.4</A>) Eu alterei um arquivo do c&oacute;digo-fonte. Por que a recompila&ccedil;&atilde;o n&atilde;o surtiu efeito?<BR>
+     
+    <HR>
+
+    <H2 align="center">Perguntas Gerais</H2>
+
+    <H4><A name="1.1">1.1</A>) O que &eacute; PostgreSQL? Como ele &eacute; pronunciado?</H4>
+
+    <P>PostgreSQL &eacute; pronunciado <I>Post-Gres-Qui-El</I>.  Um arquivo de &aacute;udio est&aacute;
+    dispon&iacute;vel em  http://www.postgresql.org/postgresql.mp3 para aqueles que gostariam
+    de ouvir a pron&uacute;ncia.</P>
+
+    <P>PostgreSQL &eacute; um melhoramento do sistema de ger&ecirc;ncia 
+    de banco de dados POSTGRES (e tamb&eacute;m &eacute;, &agrave;s vezes, chamado simplesmente de "Postgres"),
+    um prot&oacute;tipo de pesquisa de um <SMALL>SGBD</SMALL> de
+    &uacute;ltima gera&ccedil;&atilde;o. Enquanto o PostgreSQL ret&eacute;m 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
+    <SMALL>SQL</SMALL>. PostgreSQL &eacute; livre e o c&oacute;digo-fonte completo
+    est&aacute; dispon&iacute;vel.</P>
+
+    <P>O desenvolvimento do PostgreSQL &eacute; feito por um grupo de
+    desenvolvedores que est&atilde;o inscritos na lista de e-mails de
+    desenvolvimento do PostgreSQL. O coordenador atual &eacute; Marc 
+    G. Fournier (<A href="mailto:scrappy@postgresql.org">scrappy@PostgreSQL.org</A>).
+    (Veja a se&ccedil;&atilde;o <A href="#1.6">1.6</A> para saber como
+    se juntar ao grupo). O grupo &eacute; respons&aacute;vel
+    por todo o desenvolvimento do PostgreSQL. &Eacute; um projeto da
+    comunidade e n&atilde;o &eacute; controlado por nenhuma empresa.
+    Para se juntar ao grupo, veja a FAQ do desenvolvedor em
+    <A href="http://www.PostgreSQL.org/docs/faqs/FAQ_DEV.html">
+    http://www.PostgreSQL.org/docs/faqs/FAQ_DEV.html</A></P>
+
+    <P>Os autores do PostgreSQL 1.01 foram Andrew Yu e Jolly Chen.
+    Muitos outros contribuiram para portar, testar, depurar e
+    melhorar o c&oacute;digo. O c&oacute;digo original do Postgres,
+    do qual o PostgreSQL foi derivado, foi um esfor&ccedil;o de muitos
+    estudantes de gradua&ccedil;&atilde;o e p&oacute;s-gradua&ccedil;&atilde;o
+    e uma equipe de programadores trabalhando sobre a dire&ccedil;&atilde;o do
+    Professor Michael Stonebraker na Universidade da Calif&oacute;nia
+    em Berkeley.</P>
+    <P>O nome original do software em Berkeley era Postgres. Quando
+    o <SMALL>SQL</SMALL> foi adicionado em 1995, seu nome foi
+    mudado para Postgres95. O nome foi mudado no fim de 1996 para
+    PostgreSQL.</P>
+
+    <H4><A name="1.2">1.2</A>) Qual &eacute; a licen&ccedil;a do PostgreSQL?</h4>
+
+    <P>PostgreSQL est&aacute; sujeito a seguinte licen&ccedil;a:</P>
+
+    <P>PostgreSQL Sistema de Ger&ecirc;ncia de Banco de Dados</P>
+
+    <P>Portions copyright (c) 1996-2004, PostgreSQL Global Development
+    Group Portions Copyright (c) 1994-6 Regents of the University of
+    California</P>
+    <P>Permiss&atilde;o de uso, c&oacute;pia, modifica&ccedil;&atilde;o
+    e distribui&ccedil;&atilde;o desse software e sua documenta&cedil;&atilde;o
+    para qualquer prop&oacute;sito, sem taxa, e sem um acordo escrito
+    est&aacute; concedida por esse meio, contanto que a nota da licen&ccedil;a
+    acima, esse par&aacute;grafo e os dois par&aacute;grafos seguintes
+    apare&ccedil;am em todas as c&oacute;pias.</P>
+    
+    <P>EM NENHUM EVENTO A UNIVERSIDADE DA CALIF&Oacute;RNIA SER&Aacute;
+    RESPONS&Aacute;VEL 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 DOCUMENTA&Ccedil;&Atilde;O,
+    MESMO SE A UNIVERSIDADE DA CALIF&Oacute;RNIA ESTIVER SIDO AVISADA DA
+    POSSIBILIDADE DE TAL DANO.</P>
+
+    <P>A UNIVERSIDADE DA CALIF&Oacute;RNIA ESPECIFICADAMENTE N&Atilde;O D&Aacute;
+    NENHUMA GARANTIA, INCLUINDO, MAS N&Atilde;O LIMITADO A, GARANTIAS
+    IMPL&Iacute;CITAS DE COMERCIALIZA&Ccedil;&Atilde;O E ATENDIMENTO
+    DE PROP&Oacute;SITO PARTICULAR. O SOFTWARE &Eacute; FORNECIDO ABAIXO
+    "COMO &Eacute;", E A UNIVERSIDADE DA CALIF&Oacute;RNIA
+    N&Atilde;O TEM OBRIGA&Ccedil;&Atilde;O DE FORNECER MANUTEN&Ccedil;&Atilde;O,
+    SUPORTE, ATUALIZA&Ccedil;&Otilde;ES, MELHORIAS OU MODIFICA&Ccedil;&Otilde;ES.</P>
+
+    <P>O que est&aacute; descrito acima &eacute; a licen&ccedil;a BSD, uma
+    licen&ccedil;a de c&oacute;digo aberto cl&aacute;ssica. Ela n&atilde;o
+    tem restri&ccedil;&otilde;es de como o c&oacute;digo pode ser utilizado.
+    N&oacute;s gostamos dela e n&atilde;o temos inten&ccedil;&otilde;es de
+    mud&aacute;-la.</P>
+
+    <H4><A name="1.3">1.3</A>) Quais plataformas Unix o PostgreSQL pode ser executado?</H4>
+
+    <P>Em geral, qualquer plataforma moderna compat&iacute;vel com Unix deve ser capaz de executar o PostgreSQL. As plataformas que foram testadas antes do lan&ccedil;amento de uma vers&atilde;o s&atilde;o listadas nas instru&ccedil;&otilde;es de instala&ccedil;&atilde;o.</P>
+
+    <H4><A name="1.4">1.4</A>) Quais portabilidades n&atilde;o-Unix est&atilde;o dispon&iacute;veis?</H4>
+
+    <P><STRONG>Cliente</STRONG></P>
+
+    <P>&Eacute; poss&iacute;vel compilar a biblioteca <I>libpq</I>, o psql e outras interfaces e aplica&ccedil;&otilde;es clientes para executar em plataformas MS Windows. Neste caso, o cliente est&aacute; sendo executado no MS Windows e comunica via TCP/IP com um servidor executando em uma das plataformas Unix suportadas. O arquivo <I>win32.mak</I> est&aacute; presente na distribui&ccedil;&atilde;o para que seja poss&iacute;vel compilar a biblioteca <I>libpq</I> e o <I>psql</I> para Win32. O PostgreSQL tamb&eacute;m se comunica com clientes <SMALL>ODBC</SMALL>.</P>
+
+    <P><STRONG>Servidor</STRONG></P>
+
+    <P>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 <I>pgsql/doc/FAQ_MSWIN</I> na distribui&ccedil;&atilde;o ou a FAQ do MS Windows em <A href="http://www.PostgreSQL.org/docs/faqs/text/FAQ_MSWIN">http://www.PostgreSQL.org/docs/faqs/text/FAQ_MSWIN</A>.</P>
+
+    <P>Um porte nativo para MS Win NT/2000/XP est&aacute; sendo desenvolvido. Para maiores detalhes sobre o status do PostgreSQL no Windows veja <A href="http://techdocs.postgresql.org/guides/Windows">http://techdocs.postgresql.org/guides/Windows</A> e <A href="http://momjian.postgresql.org/main/writings/pgsql/win32.html">http://momjian.postgresql.org/main/writings/pgsql/win32.html</A>.</P>
+
+    <P>H&aacute; tamb&eacute;m um porte para Novell Netware 6 em
+    <A href="http://forge.novell.com">http://forge.novell.com</A>.</P>
+
+    <H4><A name="1.5">1.5</A>) Onde eu posso conseguir o PostgreSQL?</H4>
+
+    <P>O servidor ftp principal do PostgreSQL &eacute; <A href=
+    "ftp://ftp.PostgreSQL.org/pub">ftp://ftp.PostgreSQL.org/pub</A>.
+    Para rela&ccedil;&atilde;o de servidores espelhos (mirrors), consulte nosso website.</P>
+
+    <H4><A name="1.6">1.6</A>) Onde eu posso conseguir suporte?</H4>
+
+    <P>A lista de discuss&atilde;o principal &eacute;: <A href=
+    "mailto:pgsql-general@PostgreSQL.org">pgsql-general@PostgreSQL.org</A>.
+    Ela est&aacute; dispon&iacute;vel para discuss&otilde;es relacionadas ao PostgreSQL. Para se inscrever, envie um e-mail com as seguintes linhas no corpo (n&atilde;o envie no assunto):</P>
+<PRE>
+    subscribe
+    end
+</PRE>
+
+    <P>para <A href=
+    "mailto:pgsql-general-request@PostgreSQL.org">pgsql-general-request@PostgreSQL.org</A>.</P>
+
+    <P>H&aacute; tamb&eacute;m uma lista s&iacute;ntese (digest) dispon&iacute;vel. Para se inscrever, envie um e-mail para: <A href="mailto:pgsql-general-digest-request@PostgreSQL.org">pgsql-general-digest-request@PostgreSQL.org</A> com o seguinte corpo:</P>
+<PRE>
+    subscribe
+    end
+</PRE>
+
+    S&iacute;nteses (Digests) s&atilde;o enviadas aos membros dessa lista quando a lista receber cerca de 30k em mensagens.
+
+    <P>A lista de discuss&atilde;o sobre bugs est&aacute; dispon&iacute;vel. Para se inscrever, envie um e-mail para <A href="mailto:pgsql-bugs-request@PostgreSQL.org">pgsql-bugs-request@PostgreSQL.org</A> com o seguinte corpo:</P>
+<PRE>
+    subscribe
+    end
+</PRE>
+
+H&aacute; tamb&eacute;m uma lista de discuss&atilde;o dos desenvolvedores dispon&iacute;vel. Para se inscrever, envie um e-mail para <A href="mailto:pgsql-hackers-request@PostgreSQL.org">pgsql-hackers-request@PostgreSQL.org</A> com o seguinte corpo:
+<PRE>
+    subscribe
+    end
+</PRE>
+
+<P>Outras listas de discuss&otilde;es e informa&ccedil;&otilde;es sobre o PostgreSQL podem ser encontradas na homepage do PostgreSQL em:</P>
+
+    <BLOCKQUOTE>
+      <A href="http://www.PostgreSQL.org">http://www.PostgreSQL.org</A>
+    </BLOCKQUOTE>
+
+    <P>H&aacute; tamb&eacute;m um canal de IRC na Freenode e EFNet, canal <I>PostgreSQL</I>. Voc&ecirc; pode utilizar o comando Unix <code>irc -c '#PostgreSQL' "$USER" irc.phoenix.net.</code> ou <code>irc -c '#PostgreSQL' "$USER" irc.freenode.net.</code></P>
+
+    <P>Uma lista de empresas que prestam suporte comercial est&aacute; dispon&iacute;vel em <A href=
+    "http://techdocs.postgresql.org/companies.php">http://techdocs.postgresql.org/companies.php</A>.</P>
+
+    <H4><A name="1.7">1.7</A>) Qual &eacute; a &uacute;ltima vers&atilde;o?</H4>
+
+    <P>A &uacute;ltima vers&atilde;o do PostgreSQL &eacute; a vers&atilde;o 7.4.2.</P>
+
+    <P>N&oacute;s planejamos lan&ccedil;ar vers&otilde;es novas a cada seis ou oito meses.</P>
+
+    <H4><A name="1.8">1.8</A>) Que documenta&ccedil;&atilde;o est&aacute; dispon&iacute;vel?</H4>
+
+    <P>V&aacute;rios manuais, p&aacute;ginas de manuais (man pages) e alguns exemplos para teste est&atilde;o inclu&iacute;dos na distribui&ccedil;&atilde;o. Veja o diret&oacute;rio <I>/doc</I>. Voc&ecirc; pode acessar os manuais online em <A href="http://www.PostgreSQL.org/docs">http://www.PostgreSQL.org/docs</A>.</P>
+
+    <P>H&aacute; dois livros sobre PostgreSQL dispon&iacute;veis online em <A href=
+    "http://www.PostgreSQL.org/docs/awbook.html">http://www.PostgreSQL.org/docs/awbook.html</A>
+    e <A href=
+    "http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook/</A>.
+    H&aacute; uma lista de livros sobre PostgreSQL dispon&iacute;veis para compra em <A
+    href=
+    "http://techdocs.postgresql.org/techdocs/bookreviews.php">http://techdocs.PostgreSQL.org/techdocs/bookreviews.php</A>.
+    H&aacute; tamb&eacute;m uma cole&ccedil;&atilde;o de artigos t&eacute;cnicos sobre PostgreSQL em <A
+    href=
+    "http://techdocs.PostgreSQL.org/">http://techdocs.PostgreSQL.org/</A>.</P>
+
+    <P><I>psql</I> tem alguns comandos \d para mostrar informa&ccedil;&atilde;o sobre tipos, operadores, fun&ccedil;&otilde;es, agrega&ccedil;&otilde;es, etc.</P>
+
+    <P>Nosso web site cont&eacute;m ainda mais documenta&ccedil;&atilde;o.</P>
+
+    <H4><A name="1.9">1.9</A>) Como eu posso saber quais s&atilde;o os bugs conhecidos ou caracter&iacute;sticas ausentes?</H4>
+
+    <P>PostgreSQL suporta um subconjunto extendido do <SMALL>SQL</SMALL>-92.
+    Veja a nossa lista de afazeres (<A href="http://developer.PostgreSQL.org/todo.php">TODO</A>) para saber sobre bugs conhecidos, caracter&iacute;sticas ausentes e planos futuros.</P>
+
+    <H4><A name="1.10">1.10</A>) Como eu posso aprender <SMALL>SQL</SMALL>?</H4>
+
+    <P>O livro "The PostgreSQL book" em <A href=
+    "http://www.PostgreSQL.org/docs/awbook.html">http://www.PostgreSQL.org/docs/awbook.html</A>
+    ensina <SMALL>SQL</SMALL>. H&aacute; outro livro sobre PostgreSQL em <A
+    href=
+    "http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook.</A>
+    H&aacute; bons tutoriais em <A href=
+    "http://www.intermedia.net/support/sql/sqltut.shtm">http://www.intermedia.net/support/sql/sqltut.shtm,</A>
+    , <A href=
+    "http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM">
+    http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM,</A>
+    e em <A href=
+    "http://sqlcourse.com/">http://sqlcourse.com.</A></P>
+
+    <P>Outro &eacute; o "Teach Yourself SQL in 21 Days, Second Edition"
+    em <A href=
+    "http://members.tripod.com/er4ebus/sql/index.htm">http://members.tripod.com/er4ebus/sql/index.htm</A></P>
+
+    <P>Muitos dos nossos usu&aacute;rios gostam do <I>The Practical SQL Handbook</I>,
+    Bowman, Judith S., et al., Addison-Wesley. Outros gostam do <I>The
+    Complete Reference SQL</I>, Groff et al., McGraw-Hill.</P>
+
+    <H4><A name="1.11">1.11</A>) O PostgreSQL est&aacute; livre do Bug do Mil&ecirc;nio?</H4>
+
+    <P>Sim, n&oacute;s podemos manipular datas ap&oacute;s o ano 2000 AD e antes do ano 2000 BC.</P>
+
+    <H4><A name="1.12">1.12</A>) Como posso me juntar a equipe de desenvolvimento?</H4>
+
+    <P>Primeiramente, fa&ccedil;a o download do c&oacute;digo-fonte e leia a documenta&ccedil;&atilde;o para Desenvolvedores do PostgreSQL no nosso website ou na distribui&ccedil;&atilde;o. Depois, se inscreva nas lista de discuss&atilde;o <I>pgsql-hackers</I> e <I>pgsql-patches</I>. Ent&atilde;o submeta patches de alta qualidade para pgsql-patches.</P>
+
+    <P>H&aacute; algumas pessoas que tem privil&eacute;gios para fazer mudan&ccedil;as (commit) na &aacute;rvore <SMALL>CVS</SMALL> do PostgreSQL. Cada um deles submeteram tantos patches de alta qualidade que foi imposs&iacute;vel para os committers continuarem a fazerem as mudan&ccedil;as, e ent&atilde;o n&oacute;s confiamos que os patches que eles submetem s&atilde;o de alta qualidade.</P>
+
+    <H4><A name="1.13">1.13</A>) Como eu informo a exist&ecirc;ncia de um bug?</H4>
+
+    <P>Por favor visite a p&aacute;gina da ferramenta que reporta bugs em <A href=
+    "http://www.PostgreSQL.org/bugs/bugs.php">http://www.PostgreSQL.org/bugs/bugs.php</A>,
+    que ir&aacute; lher dar as instru&ccedil;&otilde;es e dire&ccedil;&otilde;es de como submeter um bug.</P>
+
+    <P>Verifique tamb&eacute;m o nosso ftp <A href=
+    "ftp://ftp.PostgreSQL.org/pub">ftp://ftp.PostgreSQL.org/pub</A> para
+    ver se h&aacute; uma vers&atilde;o mais recente do PostgreSQL ou patches.</P>
+
+    <H4><A name="1.14">1.14</A>) Como &eacute; o PostgreSQL comparado a outros <SMALL>SGBD</SMALL>s?</H4>
+
+    <P>H&aacute; v&aacute;rias maneiras de se medir um software: caracter&iacute;sticas, performance, confiabilidade, suporte e pre&ccedil;o.</P>
+
+    <DL>
+      <DT><B>Caracter&iacute;sticas</B></DT>
+
+      <DD>PostgreSQL tem muitas caracter&iacute;sticas presentes em muitos <SMALL>SGBD</SMALL>s comerciais como transa&ccedil;&otilde;es, subconsultas, gatilhos, vis&otilde;es, integridade referencial de chave estrangeira e travamento (lock) sofisticado. N&oacute;s temos algumas caracter&iacute;sticas que eles n&atilde;o tem, como tipos definidos pelo usu&aacute;rio, heran&ccedil;a, regras e controle de concorr&ecirc;ncia de m&uacute;ltiplas vers&otilde;es para reduzir travamentos (locks).<BR>
+      <BR>
+      </DD>
+
+      <DT><B>Performance</B></DT>
+
+      <DD>PostgreSQL tem a performance similar a outros bancos de dados comerciais e de c&oacute;digo livre. Ele &eacute; mais r&aacute;pido em algumas coisas, mais lento em outras. Comparado ao MySQL ou sistemas de bancos de dados "leves", n&oacute;s somos mais r&aacute;pidos com m&uacute;ltiplos usu&aacute;rios, consultas complexas e carga de consultas de leitura/escrita. MySQL &eacute; mais r&aacute;pido para consultas simples com SELECT feitas por poucos usu&aacute;rios. &Eacute; claro que o MySQL n&atilde;o tem muitas das caracter&iacute;sticas mencionadas na se&ccedil;&atilde;o <I>Caracter&iacute;sticas</I> acima. N&oacute;s desenvolvemos buscando confiabilidade e caracter&iacute;sticas, e n&oacute;s continuamos a melhorar a performance a cada vers&atilde;o. H&aacute; uma p&aacute;gina interessante comparando o PostgreSQL com o MySQL em <A href="http://openacs.org/philosophy/why-not-mysql.html">http://openacs.org/philosophy/why-not-mysql.html</A>. MySQL &eacute; uma empresa que distribui seu produto via c&oacute;digo livre, e requer uma licen&ccedil;a comercial para software de c&oacute;digo fechado, e n&atilde;o uma comunidade de desenvolvimento de c&oacute;digo livre como o PostgreSQL.<BR>
+
+      <BR>
+      </DD>
+
+      <DT><B>Confiabilidade</B></DT>
+
+      <DD>N&oacute;s sabemos que um <SMALL>SGBD</SMALL> deve ser confi&aacute;vel ou ele &eacute; in&uacute;til. N&oacute;s empenhamos em lan&ccedil;ar vers&otilde;es bem testadas, de c&oacute;digo est&aacute;vel e que tenha o m&iacute;nimo de bugs. Cada vers&atilde;o tem no m&iacute;nimo um m&ecirc;s de teste em vers&atilde;o beta, e nosso hist&oacute;rico de vers&otilde;es mostra que n&oacute;s podemos fornecer vers&otilde;es est&aacute;veis e s&oacute;lidas que est&atilde;o prontas para uso em produ&ccedil;&atilde;o. N&oacute;s acreditamos que somos comparados a nosso favor com outros sistemas de bancos de dados nessa &aacute;rea.<BR>
+      <BR>
+      </DD>
+
+      <DT><B>Suporte</B></DT>
+
+      <DD>Nossas listas de discuss&atilde;o fornecem contato com um grupo de desenvolvedores e usu&aacute;rios para ajudar a resolver muitos problemas encontrados. Enquanto n&oacute;s n&atilde;o podemos garantir o conserto, <SMALL>SGBD</SMALL>s comerciais nem sempre fornecem tamb&eacute;m. Com acesso direto aos desenvolvedores, a comunidade de usu&aacute;rios, manuais e o c&oacute;digo fonte faz com que o suporte do PostgreSQL seja superior ao de outros <SMALL>SGBD</SMALL>s. H&aacute; suporte comercial por incidente dispon&iacute;veis para aqueles que precisam de um. (Veja <A href="#1.6">se&ccedil;&atilde;o 1.6 da FAQ</A>.)<BR>
+      <BR>
+      </DD>
+
+      <DT><B>Pre&ccedil;o</B></DT>
+
+      <DD>N&oacute;s somos livres para uso dele tanto comercial quanto n&atilde;o comercial. Voc&ecirc; pode adicionar nosso c&oacute;digo ao seu produto sem limita&ccedil;&otilde;es, exceto aquelas descritas na nossa licen&ccedil;a compat&iacute;vel com a licen&ccedil;a BSD mencionada acima.<BR>
+      <BR>
+      </DD>
+    </DL>
+
+    <H4><A name="1.15">1.15</A>) Como eu posso ajudar financeiramente o projeto PostgreSQL?</H4>
+
+    <P>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.</P>
+    <P>Infra-estrutura de qualidade &eacute; muito importante em um projeto de c&oacute;digo aberto. Ela previne descontinuidades que podem facilmente descontinuar o andamento do projeto.</P>
+    <P>&Eacute; claro, que a infra-estrutura n&atilde;o &eacute; barata. H&aacute; v&aacute;rios custos iniciais e mensais que s&atilde;o necess&aacute;rios para mant&eacute;-la. Se voc&ecirc; ou sua empresa tem dinheiro que pode ser doado para ajudar a financiar esse esfor&ccedil;o, acesse <A href="http://store.pgsql.com/shopping/">http://store.pgsql.com/shopping/</A> e fa&ccedil;a uma doa&ccedil;&atilde;o.</P>
+    <P>Embora a p&aacute;gina mencione PostgreSQL, Inc, a "contribui&ccedil;&atilde;o" &eacute; somente para apoiar o projeto PostgreSQL e n&atilde;o financia nenhuma empresa espec&iacute;fica. Se voc&ecirc; preferir, voc&ecirc; pode enviar um cheque para o endere&ccedil;o de contato.</P>
+    <HR>
+
+    <P>Se voc&ecirc; tiver uma hist&oacute;ria de sucesso sobre o PostgreSQL, envie-a para nosso website em <A href="http://advocacy.postgresql.org">http://advocacy.postgresql.org</A>.</P>
+
+    <H2 align="center">Perguntas sobre Clientes</H2>
+
+    <H4><A name="2.1">2.1</A>) H&aacute; drivers <SMALL>ODBC</SMALL> para PostgreSQL?</H4>
+
+    <P>H&aacute; dois drivers <SMALL>ODBC</SMALL> dispon&iacute;veis, PsqlODBC e o OpenLink <SMALL>ODBC</SMALL>.</P>
+    <P>Voc&ecirc; pode fazer o download do PsqlODBC em <A href="http://gborg.postgresql.org/project/psqlodbc/projdisplay.php">http://gborg.postgresql.org/project/psqlodbc/projdisplay.php</A>.</P>
+
+    <P>OpenLink <SMALL>ODBC</SMALL> pode ser conseguido em <A href="http://www.openlinksw.com/">http://www.openlinksw.com</A>. Ele trabalha com cliente <SMALL>ODBC</SMALL> padr&atilde;o, ent&atilde;o voc&ecirc; poder&aacute; ter o <SMALL>ODBC</SMALL> para PostgreSQL dispon&iacute;vel em toda plataforma que eles suportam (Win, Mac, Unix, VMS).</P>
+    <P>Eles provavelmente vender&atilde;o seu produto para pessoas que precisam de um suporte de qualidade, mas uma vers&atilde;o gratuita estar&aacute; sempre dispon&iacute;vel. Por favor envie perguntas para <A href="mailto:postgres95@openlink.co.uk">postgres95@openlink.co.uk</A>.</P>
+
+    <H4><A name="2.2">2.2</A>) Quais ferramentas est&atilde;o dispon&iacute;veis para utilizar o PostgreSQL com p&aacute;ginas Web?</H4>
+
+    <P>Uma boa introdu&ccedil;&atilde;o para p&aacute;ginas web que utilizam bancos de dados pode ser vista em:
+    <A href="http://www.webreview.com">http://www.webreview.com</A></P>
+
+    <P>Para integra&ccedil;&atilde;o na Web, PHP &eacute; uma excelente interface. Ele est&aacute; em <A
+    href="http://www.php.net">http://www.php.net</A>.</P>
+
+    <P>Para casos complexos, muitos usam a Interface Perl e CGI.pm ou mod_perl.</P>
+
+    <H4><A name="2.3">2.3</A>) O PostgreSQL tem interfaces gr&aacute;ficas para iteragir com o usu&aacute;rio?</H4>
+
+    <P>Sim, h&aacute; v&aacute;rias interfaces gr&aacute;ficas para PostgreSQL dispon&iacute;veis.
+    Entre elas o PgAccess <A href="http://www.pgaccess.org">
+    http://www.pgaccess.org</A>), PgAdmin III (<A
+    href="http://www.pgadmin.org">http://www.pgadmin.org</A>, RHDB Admin (<A
+    href="http://sources.redhat.com/rhdb/">http://sources.redhat.com/rhdb/
+    </A>) e o Rekall (<A href="http://www.thekompany.com/products/rekall/">
+    http://www.thekompany.com/products/rekall/</A>, propriet&aacute;ria). H&aacute;
+    tamb&eacute;m o PhpPgAdmin (<A href="http://phppgadmin.sourceforge.net/">
+    http://phppgadmin.sourceforge.net/ </A>), uma interface web para
+    PostgreSQL.</P>
+
+    <P>Veja <A href="http://techdocs.postgresql.org/guides/GUITools">http://techdocs.postgresql.org/guides/GUITools</A> para uma lista mais detalhada.</P>
+
+    <H4><A name="2.4">2.4</A>) Quais linguagens est&atilde;o dispon&iacute;veis para comunicar-se com PostgreSQL?</H4>
+
+    <P>Muitas linguagens de programa&ccedil;&atilde;o populares cont&eacute;m uma interface para PostgreSQL. Verifique a lista de extens&otilde;es (m&oacute;dulos) da sua linguagem de programa&ccedil;&atilde;o.</P>
+
+    <P>As seguintes interfaces est&atilde;o inclu&iacute;das na distribui&ccedil;&atilde;o do PostgreSQL:</P>
+
+    <UL>
+      <LI>C (libpq)</LI>
+
+      <LI>Embedded C (ecpg)</LI>
+
+      <LI>Java (jdbc)</LI>
+
+      <LI>Python (PyGreSQL)</LI>
+
+      <LI>TCL (libpgtcl)</LI>
+
+    </UL>
+    <P>Interfaces adicionais est&atilde;o dispon&iacute;veis em
+    <A href="http://gborg.postgresql.org">http://gborg.postgresql.org</A>
+    na se&ccedil;&atilde;o de <I>Drivers/Interfaces</I>.
+    </P>
+    <HR>
+
+    <H2 align="center">Perguntas Administrativas</H2>
+
+    <H4><A name="3.1">3.1</A>) Como eu instalo o PostgreSQL em um local diferente de <I>/usr/local/pgsql</I>?</H4>
+
+    <P>Especifique a op&ccedil;&atilde;o <I>--prefix</I> quando executar o <I>configure</I>.</P>
+
+    <H4><A name="3.2">3.2</A>) Quando eu inicio o <I>postmaster</I>, eu recebo a mensagem
+    <I>Bad System Call</I> ou uma descarga de mem&oacute;ria (core dump). Por que?</H4>
+
+    <P>Isto pode ser v&aacute;rios problemas, mas primeiro verifique se voc&ecirc; tem extens&otilde;es do System V instaladas no seu kernel. PostgreSQL requer suporte no kernel a mem&oacute;ria compartilhada e sem&aacute;foros.</P>
+
+    <H4><A name="3.3">3.3</A>) Quando eu tento iniciar o <I>postmaster</I>, eu recebo erros <I>IpcMemoryCreate</I>. Por que?</H4>
+
+    <P>Voc&ecirc; n&atilde;o configurou a mem&oacute;ria compartilhada corretamente no seu kernel ou voc&ecirc; precisa aumentar a mem&oacute;ria compartilhada dispon&iacute;vel no seu kernel. A quantidade exata que voc&ecirc; precisa vai depender da arquitetura e de quantos buffers e processos do servidor voc&ecirc; configurou para o <I>postmaster</I>. Muitos sistemas, com o n&uacute;mero padr&atilde;o de buffers e processos, precisam de aproximadamente 1 MB. Veja o <A href="http://www.PostgreSQL.org/docs/view.php?version=current&amp;idoc=1&amp;file=kernel-resources.html">Guia do Administrador do PostgreSQL</A> para mais informa&ccedil;&atilde;o sobre mem&oacute;ria compartilhada e sem&aacute;foros.</P>
+
+    <H4><A name="3.4">3.4</A>) Quando eu tento iniciar o <I>postmaster</I>, eu recebo erros <I>IpcSemaphoreCreate</I>. Por que?</H4>
+
+    <P>Se a mensagem de erro &eacute; <I>IpcSemaphoreCreate: semget failed (No space left on device)</I> ent&atilde;o o seu kernel n&atilde;o est&aacute; configurado com o n&uacute;mero de sem&aacute;foros suficientes. O Postgres precisa de um sem&aacute;foro por processo do servidor. Uma solu&ccedil;&atilde;o tempor&aacute;ria &eacute; iniciar o <I>postmaster</I> com um limite pequeno de processos do servidor. Utilize <I>-N</I> com o par&acirc;metro menor do que o padr&atilde;o (32). Uma solu&ccedil;&atilde;o permanente seria aumentar os par&acirc;metros do kernel <SMALL>SEMMNS</SMALL> e <SMALL>SEMMNI</SMALL>.</P>
+    
+    <P>Sem&aacute;foros inoperantes podem tamb&eacute;m causar danos durante intenso acesso ao banco de dados.</P>
+    
+    <P>Se a mensagem &eacute; outra coisa, voc&ecirc; possivelmente n&atilde;o tem suporte a sem&aacute;foro configurado no seu kernel. Veja o Guia do Administrador para mais informa&ccedil;&atilde;o sobre mem&oacute;ria compartilhada e sem&aacute;foros.</P>
+
+    <H4><A name="3.5">3.5</A>) Como eu controlo conex&otilde;es de outras m&aacute;quinas?</H4>
+
+    <P>Por padr&atilde;o, o PostgreSQL s&oacute; permite conex&otilde;es da m&aacute;quina local utilizando soquetes de dom&iacute;nio Unix. Outras m&aacute;quinas n&atilde;o poder&atilde;o conectar-se a menos que voc&ecirc; habilite tcpip_sockets no postgresql.conf, <B>e</B> habilite a autentica&ccedil;&atilde;o por m&aacute;quina modificando o arquivo <I>$PGDATA/pg_hba.conf</I>. Isso ir&aacute; permitir conex&otilde;es TCP/IP.</P>
+
+    <H4><A name="3.6">3.6</A>) Como eu ajusto o servidor de banco de dados para obter uma performance melhor?</H4>
+
+    <P>Certamente, &iacute;ndices podem acelerar consultas. O comando <SMALL>EXPLAIN ANALYZE</SMALL> permite que voc&ecirc; veja como o PostgreSQL est&aacute; interpretando a consulta, e quais os &iacute;ndices s&atilde;o utilizados.</P>
+
+    <P>Se voc&ecirc; est&aacute; fazendo muitos <SMALL>INSERTs</SMALL>, considere faz&ecirc;-los em lote utilizando o comando <SMALL>COPY</SMALL>. Isso &eacute; mais r&aacute;pido do que <SMALL>INSERTs</SMALL> individuais. Segundo, senten&ccedil;as que n&atilde;o est&atilde;o em um bloco de transa&ccedil;&atilde;o <SMALL>BEGIN WORK/COMMIT</SMALL> s&atilde;o consideradas com se estivessem em sua pr&oacute;pria transa&ccedil;&atilde;o. Considere executar v&aacute;rias senten&ccedil;as em um mesmo bloco de transa&ccedil;&atilde;o. Isso reduz a quantidade de transa&ccedil;&otilde;es. Tamb&eacute;m, considere remover e criar &iacute;ndices novamente quando estiver fazendo muitas mudan&ccedil;as nos dados.</P>
+
+    <P>H&aacute; v&aacute;rias op&ccedil;&otilde;es de ajuste. Voc&ecirc; pode desabilitar o <I>fsync()</I> iniciando o <I>postmaster</I> com a op&ccedil;&atilde;o <I>-o -F</I>. Isso ir&aacute; impedir que <I>fsync()</I>s enviem os dados para disco ap&oacute;s cada transa&ccedil;&atilde;o.</P>
+
+    <P>Voc&ecirc; tamb&eacute;m pode utilizar a op&ccedil;&atilde;o <I>-B</I> do <I>postmaster</I> para aumentar o n&uacute;mero de buffers de mem&oacute;ria compartilhada utilizados pelos processos do servidor. Se voc&ecirc; definiu este par&acirc;metro com um valor muito alto, o <I>postmaster</I> pode n&atilde;o iniciar porque voc&ecirc; excedeu o limite de espa&ccedil;o de mem&oacute;ria compartilhada do kernel. Cada buffer &eacute; de 8K e o padr&atilde;o &eacute; de 64 buffers.</P>
+
+    <P>Voc&ecirc; tamb&eacute;m pode utilizar a op&ccedil;&atilde;o <I>-S</I> do backend para aumentar a m&aacute;xima quantidade de mem&oacute;ria utilizada pelo processo servidor para ordena&ccedil;&otilde;es tempor&aacute;rias. O valor de <I>-S</I> &eacute; medido em kilobytes e o padr&atilde;o &eacute; de 512 (ou seja 512K).</P>
+
+    <P>Voc&ecirc; tamb&eacute;m pode utilizar o comando <SMALL>CLUSTER</SMALL> para agrupar dados em tabelas para combinar um &iacute;ndice. Veja o manual sobre <SMALL>CLUSTER</SMALL> para mais informa&ccedil;&atilde;o.</P>
+
+
+    <H4><A name="3.7">3.7</A>) Quais caracter&iacute;sticas de depura&ccedil;&atilde;o est&atilde;o dispon&iacute;veis?</H4>
+
+    <P>PostgreSQL tem v&aacute;rias caracter&iacute;sticas que relatam informa&ccedil;&otilde;es que podem ser valiosas para fins de depura&ccedil;&atilde;o.</P>
+
+    <P>Primeiro, execute o <I>configure</I> com a op&ccedil;&atilde;o --enable-cassert, muitos <I>assert()</I>s monitoram o progresso do n&uacute;cleo (backend) e finalizam o programa quando alguma coisa inesperada acontece.</P>
+
+    <P>O <I>postmaster</I> e o <I>postgres</I> tem v&aacute;rias op&ccedil;&otilde;es de depura&ccedil;&atilde;o dispon&iacute;veis. Primeiro, quando iniciar o <I>postmaster</I>, tenha certeza que voc&ecirc; enviou a saida padr&atilde;o e a sa&iacute;da de erro padr&atilde;o para um arquivo de log, como em:</P>
+<PRE>
+    cd /usr/local/pgsql
+    ./bin/postmaster &gt;server.log 2&gt;&amp;1 &amp;
+</PRE>
+
+<P>Isso ir&aacute; criar um arquivo server.log no diret&oacute;rio raiz do PostgreSQL. Este arquivo conter&aacute; informa&ccedil;&otilde;es &uacute;teis sobre problemas ou erros encontrados pelo servidor. O <I>Postmaster</I> tem uma op&ccedil;&atilde;o <I>-d</I> que permite que informa&ccedil;&otilde;es mais detalhadas sejam relatadas. A op&ccedil;&atilde;o <I>-d</I> &eacute; acompanhada por um n&uacute;mero que indica o n&iacute;vel de depura&ccedil;&atilde;o. Esteja alerta de que alto n&iacute;vel de depura&ccedil;&atilde;o gera grandes arquivos de log.</P>
+
+<P>Se o <I>postmaster</I> n&atilde;o est&aacute; sendo executado, voc&ecirc; pode executar o n&uacute;cleo do <I>postgres</I> a partir da linha de comando, e digitar a sua senten&ccedil;a <SMALL>SQL</SMALL> diretamente. Isso &eacute; recomendado <B>somente</B> para fins de depura&ccedil;&atilde;o. Note que uma nova linha termina a consulta, e n&atilde;o um ponto-e-v&iacute;rgula. Se voc&ecirc; compilou com s&iacute;mbolos de depura&ccedil;&atilde;o, voc&ecirc; pode utilizar um depurador para ver o que est&aacute; acontecendo. Como o n&uacute;cleo (backend) n&atilde;o foi iniciado a partir do <I>postmaster</I>, ele n&atilde;o est&aacute; executando em um ambiente id&ecirc;ntico e problemas de itera&ccedil;&atilde;o com o n&uacute;cleo/travamento n&atilde;o podem ser reproduzidos.</P>
+
+<P>O programa <I>postgres</I> possue as op&ccedil;&otilde;es <I>-s, -A</I>, e <I>-t</I> que podem ser muito &uacute;teis para depura&ccedil;&atilde;o e medidas de performance.</P>
+
+<P>Voc&ecirc; tamb&eacute;m pode compilar com perfil para ver que fun&ccedil;&otilde;es est&atilde;o demandando tempo de execu&ccedil;&atilde;o. Os arquivo de perfil do n&uacute;cleo (backend) ser&atilde;o colocados no diret&oacute;rio <I>pgsql/data/base/dbname</I>. O arquivo de perfil do cliente ser&aacute; colocado no diret&oacute;rio atual do cliente. O Linux requer uma compila&ccedil;&atilde;o com <I>-DLINUX_PROFILE</I> para cria&ccedil;&atilde;o dos perfis.</P>
+
+    <H4><A name="3.8">3.8</A>) Por que eu recebo <I>"Sorry, too many clients"</I> quando eu tento conectar?</H4>
+
+    <P>Voc&ecirc; precisa aumentar o limite do <I>postmaster</I> de quantos processos do servidor concorrentes ele pode iniciar.</P>
+
+    <P>O limite padr&atilde;o &eacute; de 32 processos. Voc&ecirc; pode aument&aacute;-lo reiniciando o <I>postmaster</I> com o valor conveniente de <I>-N</I> ou modificar o <I>postgresql.conf</I>.</P>
+
+    <P>Note que se voc&ecirc; definir o <I>-N</I> com um valor maior do que 32, voc&ecirc; tamb&eacute;m deve aumentar <I>-B</I> cujo padr&atilde;o &eacute; 64; <I>-B</I> deve ser pelo menos duas vezes <I>-N</I>, e provavelmente deve ser mais do que isso para uma melhor performance. Para um grande n&uacute;mero de processos do servidor, voc&ecirc; tamb&eacute;m precisa aumentar v&aacute;rios par&acirc;metros de configura&ccedil;&atilde;o do kernel do Unix. Coisas para serem observadas incluem o tamanho m&aacute;ximo de blocos de mem&oacute;ria compartilhada, <SMALL>SHMMAX;</SMALL> o n&uacute;mero m&aacute;ximo de sem&aacute;foros, <SMALL>SEMMNS</SMALL> e <SMALL>SEMMNI;</SMALL> o n&uacute;mero m&aacute;ximo de processos, <SMALL>NPROC;</SMALL> o n&uacute;mero m&aacute;ximo de processos por usu&aacute;rio, <SMALL>MAXUPRC;</SMALL> e o n&uacute;mero m&aacute;ximo de arquivos abertos, <SMALL>NFILE</SMALL> e <SMALL>NINODE</SMALL>. A raz&atilde;o na qual o PostgreSQL tem um limite de n&uacute;mero de processos do servidor permitidos &eacute; para que o seu sistema n&atilde;o fique sem recursos dispon&iacute;veis.</P>
+
+    <H4><A name="3.9">3.9</A>) O que est&aacute; no diret&oacute;rio <I>pgsql_tmp</I>?</H4>
+
+    <P>Este diret&oacute;rio cont&eacute;m arquivos tempor&aacute;rios gerados pelo executor de uma consulta. Por exemplo, se uma ordena&ccedil;&atilde;o &eacute; necess&aacute;ria para satisfazer um <SMALL>ORDER BY</SMALL> e a ordena&ccedil;&atilde;o requer mais espa&ccedil;o do que o par&acirc;metro <I>-S</I> do servidor permite, ent&atilde;o arquivos tempor&aacute;rios s&atilde;o criados para abrigar os dados extras.</P>
+    <P>Os arquivos tempor&aacute;rios geralmente s&atilde;o apagados automaticamente, mas podem persistir caso o servidor termine anormalmente durante a ordena&ccedil;&atilde;o. Uma parada e um rein&iacute;cio do <I>postmaster</I> remover&aacute; os arquivos destes diret&oacute;rios.</P>
+
+    <H4><A name="3.10">3.10</A>) O que eu preciso fazer para exportar e importar durante a atualiza&ccedil;&atilde;o entre vers&otilde;es do PostgreSQL?</H4>
+
+    <P>O time do PostgreSQL faz somente pequenas mudan&ccedil;as entre vers&otilde;es menores, ent&atilde;o atualizar da vers&atilde;o 7.2 para 7.2.1 n&atilde;o requer uma exporta&ccedil;&atilde;o e uma importa&ccedil;&atilde;o. Contudo, vers&otilde;es 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 mudan&ccedil;as geralmente s&atilde;o complexas, ent&atilde;o n&oacute;s n&atilde;o mantemos compatibilidade para os arquivos de dados. Uma exporta&ccedil;&atilde;o em um formato gen&eacute;rico que pode ser importada utilizando o novo formato interno.</P>
+
+    <P>Em vers&otilde;es onde o formato em disco n&atilde;o muda, o script <I>pg_upgrade</I> pode ser utilizado para atualizar sem precisar de um dump/restore. As notas da vers&atilde;o mencionam se <I>pg_upgrade</I> est&aacute; dispon&iacute;vel para a vers&atilde;o.</P>
+
+    <HR>
+
+    <H2 align="center">Perguntas Operacionais</H2>
+
+    <H4><A name="4.1">4.1</A>) Qual &eacute; a diferen&ccedil;a entre cursores bin&aacute;rios e normais?</H4>
+
+    <P>Veja o comando <SMALL>DECLARE</SMALL> no manual para uma descri&ccedil;&atilde;o.</P>
+
+    <H4><A name="4.2">4.2</A>) Como eu fa&ccedil;o um <SMALL>SELECT</SMALL> somente dos primeiros registros de uma consulta? Um registro rand&ocirc;mico?</H4>
+
+    <P>Veja o manual do <SMALL>FETCH</SMALL>, ou utilize
+    <SMALL>SELECT</SMALL> ... <SMALL>LIMIT</SMALL>....</P>
+
+    <P>Toda a consulta tem que ser avaliada, mesmo se voc&ecirc; s&oacute; quer os primeiros registros. Considere utilizar uma consulta que tenha um <SMALL>ORDER BY</SMALL>. Se h&aacute; um &iacute;ndice que combina com o <SMALL>ORDER BY</SMALL>, o PostgreSQL pode ser capaz de avaliar somente os primeiros registros requisitados, ou toda consulta tem que ser avaliada at&eacute; que os registros desejados tenham sido gerados.</P>
+
+    <P>Para obter um registro rand&ocirc;mico, utilize:
+<PRE>
+    SELECT col
+    FROM tab
+    ORDER BY random()
+    LIMIT 1;
+</PRE>
+
+<H4><A name="4.3">4.3</A>) Como eu obtenho a lista de tabelas ou outras coisas que eu posso ver no <I>psql</I>?</h4>
+
+<P>Utilize o comando \dt para ver tabelas no <I>psql</I>. Para obter uma lista completa de
+comandos no psql voc&ecirc; pode utilizar \?. Alternativamente
+voc&ecirc; pode ler o c&oacute;digo-fonte do <I>psql</I> no arquivo <I>pgsql/src/bin/psql/describe.c</I>. Ele cont&eacute;m comandos <SMALL>SQL</SMALL> que geram a sa&iacute;da para os comandos do psql. Voc&ecirc; tamb&eacute;m pode iniciar o <I>psql</I> com a op&ccedil;&atilde;o <I>-E</I> ent&atilde;o ser&atilde;o mostradas as consultas utilizadas para executar os comandos que voc&ecirc; digitou. PostgreSQL tamb&eacute;m fornece uma interface para o INFORMATION SCHEMA <SMALL>SQLi</SMALL> na qual voc&ecirc; pode consultar informa&ccedil;&otilde;es sobre o banco de dados.</P>
+
+    <H4><A name="4.4">4.4</A>) Como eu removo uma coluna de uma tabela ou mudo o seu tipo de dados?</H4>
+
+    <P>A funcionalidade <SMALL>DROP COLUMN</SMALL> foi adicionada a vers&atilde;o 7.3 com comando
+    <SMALL>ALTER TABLE DROP COLUMN</SMALL>.  Em vers&otilde;es anteriores, voc&ecirc; pode fazer isto:</P>
+<PRE>
+    BEGIN;
+    LOCK TABLE old_table;
+    SELECT ...  -- selecione todas colunas mas n&atilde;o aquela que voc&ecirc; quer remover
+    INTO TABLE new_table
+    FROM old_table;
+    DROP TABLE old_table;
+    ALTER TABLE new_table RENAME TO old_table;
+    COMMIT;
+</PRE>
+
+<P>Para alterar o tipo de dados de uma coluna, fa&ccedil;a isto:</P>
+<PRE>
+    BEGIN;
+    ALTER TABLE tab ADD COLUMN new_col <I>new_data_type</I>;
+    UPDATE tab SET new_col = CAST(old_col AS <I>new_data_type</I>);
+    ALTER TABLE tab DROP COLUMN old_col;
+    COMMIT;
+</PRE>
+<P>Voc&ecirc; pode querer executar o comando <I>VACUUM FULL tab</I> para recuperar o espa&ccedil;o em disco utilizado pelos registros expirados.</P>
+    
+    <H4><A name="4.5">4.5</A>) Qual &eacute; o tamanho m&aacute;ximo de um registro, uma tabela e um banco de dados?</H4>
+
+    <P>Estes s&atilde;o os limites:</P>
+<PRE>
+Tamanho m&aacute;ximo de um banco de dados?           ilimitado (existem bancos de dados de 32 TB)
+Tamanho m&aacute;ximo de uma tabela?                  32 TB
+Tamanho m&aacute;ximo de um registro?                 1.6TB
+Tamanho m&aacute;ximo de um campo?                    1 GB
+N&uacute;mero m&aacute;ximo de registros em uma tabela?      ilimitado
+N&uacute;mero m&aacute;ximo de colunas em uma tabela?        250-1600 dependendo dos tipos das colunas
+N&uacute;mero m&aacute;ximo de &iacute;ndices em uma tabela?        ilimitado
+</PRE>
+
+&Eacute; claro, que eles n&atilde;o s&atilde;o ilimitados, mas limitados ao espa&ccedil;o em disco dispon&iacute;vel e espa&ccedil;o em mem&oacute;ria/swap. A Performance ser&aacute; penalizada quando estes valores se tornarem grandes.
+<P>O tamanho m&aacute;ximo de uma tabela com 32 TB n&atilde;o requer suporte a arquivos grandes do sistema operacional. Tabelas grandes s&atilde;o armazenadas como m&uacute;ltiplos arquivos de 1 GB ent&atilde;o o limite do sistema de arquivos n&atilde;o &eacute; importante.</P>
+<P>O tamanho m&aacute;ximo de uma tabela e o n&uacute;mero m&aacute;ximo de colunas pode ser quadruplicadas aumentando-se o tamanho dos blocos para 32k.</P>
+
+    <H4><A name="4.6">4.6</A>) Quanto espa&ccedil;o em disco &eacute; necess&aacute;rio para armazenar dados de um arquivo texto?</H4>
+
+    <P>Um banco de dados PostgreSQL ir&aacute; requerer at&eacute; cinco vezes a quantidade de espa&ccedil;o requerida para armazenar dados em um arquivo texto.</P>
+
+    <P>Como um exemplo, considere um arquivo com 100.000 linhas contendo um inteiro e uma descri&ccedil;&atilde;o em cada linha. Suponha que o tamanho m&eacute;dio da descri&ccedil;&atilde;o &eacute; de vinte bytes. O arquivo ter&aacute; 2.8 MB. O tamanho do arquivo do banco de dados PostgreSQL que cont&eacute;m esses dados pode ser estimado em 6.4 MB:</P>
+<PRE>
+    36 bytes: cada cabe&ccedil;alho de registro (aproximadamente)
+    24 bytes: um campo int e um campo texto
+   + 4 bytes: ponteiro na p&aacute;gina para a tupla
+   -------------------------------------------
+    64 bytes por registro
+
+   O tamanho de uma p&aacute;gina de dados no PostgreSQL &eacute; 8192 bytes (8 KB), ent&atilde;o:
+
+   8192 bytes por p&aacute;gina
+   ------------------------   =  128 registros por p&aacute;gina do banco de dados (arredondado para baixo)
+     64 bytes por registro
+
+   100000 registros de dados
+   ----------------------------  =  782 p&aacute;ginas do banco de dados (arredondado para cima)
+      128 registros por p&aacute;gina
+
+782 p&aacute;ginas do banco de dados * 8192 bytes por p&aacute;gina  =  6,406,144 bytes (6.4 MB)
+</PRE>
+<P>&Iacute;ndices n&atilde;o requerem muito espa&ccedil;o, mas cont&eacute;m dados que foram indexados, ent&atilde;o eles podem ocupar algum espa&ccedil;o.</P> 
+
+<P><SMALL>NULL</SMALL>s s&atilde;o armazenados como bitmaps, ent&atilde;o eles utilizam muito pouco espa&ccedil;o.</P>
+
+    <H4><A name="4.7">4.7</A>) Como eu descrubo quais tabelas, &iacute;ndices, bancos de dados e usu&aacute;rios est&atilde;o definidos?</H4>
+
+    <P><I>psql</I> tem uma variadade de comandos com barra invertida que mostram tais informa&ccedil;&otilde;es. Utilize \? para v&ecirc;-los. H&aacute; tamb&eacute;m tabelas do sistema que come&ccedil;am com <I>pg_</I> e que os descrevem tamb&eacute;m. Tamb&eacute;m, <I>psql -l</I> listar&aacute; todos os bancos de dados.</P>
+
+    <P>Veja tamb&eacute;m o arquivo <I>pgsql/src/tutorial/syscat.source</I>. Ele ilustra muitos <SMALL>SELECT</SMALL>s necess&aacute;rios para obter informa&ccedil;&atilde;o das tabelas do sistema de banco de dados.</P>
+
+    <H4><A name="4.8">4.8</A>) Minhas consultas est&atilde;o lentas ou n&atilde;o est&atilde;o utilizando &iacute;ndices. Por que?</H4>
+    &Iacute;ndices n&atilde;o s&atilde;o automaticamente utilizados por toda consulta. &Iacute;ndices s&oacute; s&atilde;o 
+    utilizados se uma tabela &eacute; maior do que o tamanho m&iacute;nimo e uma consulta
+    seleciona somente uma porcentagem pequena de registros de uma tabela. Isto porque
+    o acesso rand&ocirc;mico ao disco causado por uma busca por &iacute;ndice pode ser
+    mais lento do que uma leitura ao longo da tabela ou uma busca sequencial.
+
+    <P>Para determinar se um &iacute;ndice pode ser utilizado, o PostgreSQL deve ter
+    estat&iacute;sticas sobre a tabela. Estas estat&iacute;sticas s&atilde;o coletadas utilizando
+    <SMALL>VACUUM ANALYZE</SMALL> ou simplesmente <SMALL>ANALYZE</SMALL>.
+    Utilizando estat&iacute;sticas, o otimizador saber quantos registros h&aacute; na tabela
+    e pode determinar melhor se um &iacute;ndice deve ser utilizado.
+    Estat&iacute;sticas tamb&eacute;m s&atilde;o &uacute;teis para determinar a ordem de jun&ccedil;&atilde;o &oacute;tima e
+    m&eacute;todos de jun&ccedil;&atilde;o. Cole&ccedil;&atilde;o de estat&iacute;sticas deve ser feita periodicamente
+    a medida que o conte&uacute;do da tabela muda.</P>
+
+    <P>&Iacute;ndices n&atilde;o s&atilde;o normalmente utilizados para <SMALL>ORDER BY</SMALL> ou
+    para fazer jun&ccedil;&otilde;es. Uma busca sequencial seguida por uma ordena&ccedil;&atilde;o expl&iacute;cita &eacute;
+    usualmente mais r&aacute;pida do que uma busca por &iacute;ndice em uma tabela grande.</P>
+    Contudo, <SMALL>LIMIT</SMALL> combinado com <SMALL>ORDER BY</SMALL>
+    frequentemente utilizar&aacute; um &iacute;ndice porque somente uma pequena por&ccedil;&atilde;o da tabela
+    &eacute; retornada. De fato, embora MAX() e MIN() n&atilde;o utilizem &iacute;ndices,
+    &eacute; poss&iacute;vel obter tais valores utilizando um &iacute;ndice com ORDER BY e LIMIT:
+
+<PRE>
+    SELECT col
+    FROM tab
+    ORDER BY col [ DESC ]
+    LIMIT 1;
+</PRE>
+
+    <P>Se voc&ecirc; acredita que o otimizador est&aacute; incorreto ao escolher uma
+    busca sequencial, utilize <CODE>SET enable_seqscan TO 'off'</CODE> e
+    execute testes para ver se uma busca por &iacute;ndice &eacute; de fato &eacute; mais r&aacute;pida.</P>
+
+    <P>Quando &eacute; utilizado operadores com curingas tais como <SMALL>LIKE</SMALL> ou
+    <I>~</I>, &iacute;ndices s&oacute; podem ser utilizados em certas circunst&acirc;ncias:</P>
+    <UL>
+    <LI>O &iacute;n&iacute;cio de uma string de busca deve ser o in&iacute;cio da string, i.e.
+    <UL>
+    <LI>modelos no <SMALL>LIKE</SMALL> n&atilde;o devem come&ccedil;ar com <I>%</I>.</LI>
+    <LI>modelos no <I>~</I> (express&atilde;o regular) n&atilde;o devem come&ccedil;ar com
+    <I>^</I>.</LI>
+    </UL></LI>
+    <LI>A string de busca n&atilde;o pode iniciar com uma classe de caracteres,
+    i.e. [a-e].</LI>
+    <LI>Buscas que n&atilde;o diferenciam mai&uacute;sculas de min&uacute;sculas tais como <SMALL>ILIKE</SMALL> e
+    <I>~*</I> n&atilde;o utilizam &iacute;ndices. Ao inv&eacute;s, utilize &iacute;ndices
+    funcionais, que s&atilde;o descritos na se&ccedil;&atilde;o <A href="#4.12">4.12</A>.</LI>
+    <LI>A localidade padr&atilde;o <I>C</I> deve ser utilizada durante o
+    <I>initdb</I>.</LI>
+    </UL>
+    <P>
+
+    <H4><A name="4.9">4.9</A>) Como eu vejo como o otimizador de consulta est&aacute; avaliando a minha consulta?</H4>
+
+    <P>Veja o comando <SMALL>EXPLAIN</SMALL> no manual.</P>
+
+    <H4><A name="4.10">4.10</A>) O que &eacute; um &iacute;ndice de &aacute;rvore R?</H4>
+
+    <P>Um &iacute;ndice de &aacute;rvore B &eacute; utilizado para indexa&ccedil;&atilde;o de dados espaciais. Um &iacute;ndice do tipo hash n&atilde;o pode manipular buscas em intervalos. Um &iacute;ndice de &aacute;rvore B manipula somente buscas em intervalos em uma dimens&atilde;o. Um &iacute;ndice de &aacute;rvore R pode manipular dados multidimensionais. Por exemplo, se um &iacute;ndice de &aacute;rvore R pode ser contruido em um atributo do tipo <I>point</I>, o sistema pode responder mais eficientemente consultas tais como "busque todos os pontos dentro dos limites do ret&acirc;ngulo."</P>
+
+    <P>A pesquisa can&ocirc;nica que descreve o modelo original da &aacute;rvore R est&aacute; em:</P>
+
+    <P>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.</P>
+
+    <P>Voc&ecirc; tamb&eacute;m pode encontrar esse documento em "Readings in Database Systems" do Stonebraker</P>
+
+    <P>&Aacute;rvores R podem manipular pol&iacute;gonos e caixas. Na teoria, &aacute;rvores R podem ser extendidos para manipular um grande n&uacute;mero de dimens&otilde;es. Na pr&aacute;tica, extendendo &aacute;rvores R requer um pouco de trabalho e n&oacute;s n&atilde;o temos atualmente nenhuma documenta&ccedil;&atilde;o de como faz&eacute;-lo.</P>
+
+    <H4><A name="4.11">4.11</A>) O que &eacute; um Otimizador Gen&eacute;tico de Consultas?</H4>
+
+    <P>O m&oacute;dulo <SMALL>GEQO</SMALL> acelera a otimiza&ccedil;&atilde;o de consultas quando se faz uma jun&ccedil;&atilde;o de v&aacute;rias tabelas utilizando o conceito de Algoritmo Gen&eacute;tico (AG). Isso permite a manipula&ccedil;&atilde;o de consultas com muitas jun&ccedil;&otilde;es utilizando buscas n&atilde;o exaustivas.</P>
+
+    <H4><A name="4.12">4.12</A>) Como eu fa&ccedil;o buscas com express&otilde;es regulares
+    e buscas com express&otilde;es regulares sem diferenciar mai&uacute;sculas de min&uacute;sculas? Como eu
+    utilizo um &iacute;ndice para buscas que n&atilde;o diferenciam mai&uacute;sculas de min&uacute;sculas?</H4>
+
+<P>O operador <I>~</I> faz avalia&ccedil;&atilde;o de express&otilde;es regulares, e <I>~*</I> faz avalia&ccedil;&atilde;o n&atilde;o sens&iacute;vel a mai&uacute;sculas de express&otilde;es regulares. A variante n&atilde;o sens&iacute;vel a mai&uacute;sculas do <SMALL>LIKE</SMALL> &eacute; chamada de <SMALL>ILIKE</SMALL>.</P>
+
+<P>Compara&ccedil;&otilde;es de igualdade n&atilde;o sens&iacute;veis a mai&uacute;sculas s&atilde;o normalmente expressadas como:</P>
+<PRE>
+    SELECT *
+    FROM tab
+    WHERE lower(col) = 'abc';
+</PRE>
+
+Isso n&atilde;o ir&aacute; utilizar o &iacute;ndice padr&atilde;o. Contudo, se voc&ecirc; criar um &iacute;ndice funcional, ele ser&aacute; utilizado:
+<PRE>
+    CREATE INDEX tabindex ON tab (lower(col));
+</PRE>
+
+<H4><A name="4.13">4.13</A>) Em uma consulta, como eu detecto se um campo &eacute; <SMALL>NULL</SMALL>?</H4>
+
+    <P>Voc&ecirc; pode testar a coluna com <SMALL>IS NULL</SMALL> e <SMALL>IS
+    NOT NULL</SMALL>.</P>
+
+    <H4><A name="4.14">4.14</A>) Qual &eacute; a difenren&ccedil;a entre os v&aacute;rios tipos de dados de caracteres?</H4>
+<PRE>
+Tipo            Nome Interno    Notas
+--------------------------------------------------
+VARCHAR(n)      varchar         tamanho especifica o comprimento m&aacute;ximo, sem preenchimento
+CHAR(n)         bpchar          preenchimento em branco para comprimento fixo espec&iacute;fico
+TEXT            text            nenhum limite superior espec&iacute;fico no comprimento
+BYTEA           bytea           vetor de bytes de comprimento vari&aacute;vel (null-byte safe)
+"char"          char            um caracter
+</PRE>
+
+<P>Voc&ecirc; ver&aacute; o nome interno quando examinar o cat&aacute;logo do sistema e em algumas mensagens de erro.</P>
+
+<P>Os primeiros quatro tipos acima s&atilde;o do tipo "varlena" (i.e., os primeiros quatro bytes no disco s&atilde;o o comprimento seguido pelos dados). Consequentemente o espa&ccedil;o atual utilizado &eacute; ligeiramente maior do que o tamanho declarado. Contudo, esses tipos de dados tamb&eacute;m s&atilde;o sujeitos a compress&atilde;o ou a serem armazenados fora do padr&atilde;o utilizando o <SMALL>TOAST</SMALL>, ent&atilde;o o espa&ccedil;o em disco pode tamb&eacute;m ser bem menor do que o esperado.</P>
+
+<SMALL>VARCHAR(n)</SMALL> &eacute; melhor quando est&aacute; armazenando cadeias de caracteres de comprimento vari&aacute;vel e h&aacute; um limite de tamanho desta cadeia. <SMALL>TEXT</SMALL> &eacute; para cadeias de caracteres de comprimento ilimitado, com o m&aacute;ximo de um gigabyte.
+<P><SMALL>CHAR(n)</SMALL> preenche com espa&ccedil;os em branco at&eacute; o tamanho especificado, enquanto o <SMALL>VARCHAR(n)</SMALL> armazena somente os caracteres fornecidos. <SMALL>BYTEA</SMALL> &eacute; para armazenar dados bin&aacute;rios, particularmente valores que incluem bytes <SMALL>NULL</SMALL>. Todos os tipos descritos aqui tem caracter&iacute;sticas de performance similares.</P>
+
+    <H4><A name="4.15.1">4.15.1</A>) Como eu crio um campo serial/auto incremento?</H4>
+
+    <P>PostgreSQL suporta o tipo de dados <SMALL>SERIAL</SMALL>. Ele cria automaticamente uma sequ&ecirc;ncia. Por exemplo:</P>
+<PRE>
+    CREATE TABLE pessoa ( 
+        id   SERIAL, 
+        nome TEXT 
+    );
+</PRE>
+
+&eacute; automaticamente traduzido em:
+<PRE>
+    CREATE SEQUENCE pessoa_id_seq;
+    CREATE TABLE pessoa ( 
+        id   INT4 NOT NULL DEFAULT nextval('pessoa_id_seq'),
+       nome TEXT 
+    );
+</PRE>
+
+Veja a p&aacute;gina sobre <I>create_sequence</I> no manual para mais informa&ccedil;&atilde;o sobre sequ&ecirc;ncias. Voc&ecirc; tamb&eacute;m pode utilizar o campo <I>OID</I> para cada registro como um valor &uacute;nico. Contudo, se voc&ecirc; precisar exportar e importar o banco de dados, voc&ecirc; precisa utilizar a op&ccedil;&atilde;o <I>-o</I> do <I>pg_dump</I> ou a op&ccedil;&atilde;o <SMALL>COPY WITH OIDS</SMALL> para preservar os <I>OID</I>s.
+
+    <H4><A name="4.15.2">4.15.2</A>) Como eu consigo o valor de um campo
+    <SMALL>SERIAL</SMALL>?</H4>
+
+    <P>Uma abordagem &eacute; obter o pr&oacute;ximo valor <SMALL>SERIAL</SMALL>
+    de uma sequ&ecirc;ncia com a fun&ccedil;&atilde;o <I>nextval()</I>
+    <I>antes</I> de inserir e ent&atilde;o inserir com o valor explicitamente. Utilizando o
+    exemplo da tabela em <A href="#4.15.1">4.15.1</A>, um exemplo em 
+    pseudo-linguagem se pareceria com isto:</P>
+<PRE>
+    novo_id = execute("SELECT nextval('pessoa_id_seq')");
+    execute("INSERT INTO pessoa (id, nome) VALUES (novo_id, 'Blaise Pascal')");
+</PRE>
+
+    Voc&ecirc; poderia ent&atilde;o ter tamb&eacute;m o novo valor armazenado em
+    <CODE>novo_id</CODE> para utilizar em outras consultas (i.e., como uma chave
+    estrangeira da tabela <CODE>pessoa</CODE>). Note que o nome da
+    <SMALL>SEQUENCE</SMALL> criada automaticamente ser&aacute;
+    &lt;<I>tabela</I>&gt;_&lt;<I>coluna</I>&gt;_<I>seq</I>, onde
+    <I>tabela</I> e <I>coluna</I> s&atilde;o os nomes da tabela
+    e da coluna <SMALL>SERIAL</SMALL>, respectivamente.
+
+    <P>Alternativamente, voc&ecirc; poderia obter o valor <SMALL>SERIAL</SMALL>
+    atribu&iacute;do com a fun&ccedil;&atilde;o <I>currval()</I> <I>depois</I>
+    de t&ecirc;-lo inserido por padr&atilde;o, i.e.,</P>
+<PRE>
+    execute("INSERT INTO pessoa (nome) VALUES ('Blaise Pascal')");
+    novo_id = execute("SELECT currval('pessoa_id_seq')");
+</PRE>
+
+    Finalmente, voc&ecirc; poderia utilizar o <A href="#4.16"><SMALL>OID</SMALL></A>
+    retornado da senten&ccedil;a <SMALL>INSERT</SMALL> para obter o valor padr&atilde;o,
+    embora este seja a abordagem menos port&aacute;vel,
+    pois o valor do oid n&atilde;o ultrapassa 4 bilh&otilde;es.
+    Em Perl, utilizando DBI com o m&oacute;dulo DBD::Pg de Edmund Mergl, o valor
+    do oid est&aacute; dispon&iacute;vel via <I>$sth-&gt;{pg_oid_status}</I> depois de
+    <I>$sth-&gt;execute()</I>.
+
+    <H4><A name="4.15.3">4.15.3</A>) <I>currval()</I> e <I>nextval()</I> n&atilde;o lidam com condi&ccedil;&atilde;o de corrida com outros usu&aacute;rios?</H4>
+
+    <P>N&atilde;o. <I>currval()</I> retorna o valor atual atribuido pelo seu n&uacute;cleo (backend), e n&atilde;o por todos os usu&aacute;rios.</P>
+
+    <H4><A name="4.15.4">4.15.4</A>) Por que os n&uacute;meros da minha sequ&ecirc;ncia n&atilde;o s&atilde;o reutilizados quando uma transa&ccedil;&atilde;o &eacute; abortada? Por que h&aacute; intervalos nos n&uacute;meros da minha sequ&ecirc;ncia/coluna SERIAL?</H4>
+
+    <P>Para melhorar a concorr&ecirc;ncia, valores da sequ&ecirc;ncia s&atilde;o atribu&iacute;dos a transa&ccedil;&otilde;es correntes e n&atilde;o s&atilde;o travados at&eacute; que a transa&ccedil;&atilde;o seja finalizada. Isso causa intervalos na numera&ccedil;&atilde;o por causa de transa&ccedil;&otilde;es abortadas.</P>
+
+    <H4><A name="4.16">4.16</A>) O que &eacute; um <SMALL>OID</SMALL>? O que &eacute; um <SMALL>TID</SMALL>?</H4>
+
+    <P><SMALL>OID</SMALL>s s&atilde;o a resposta do PostgreSQL a ids &uacute;nicos de registros.
+    Cada registro que &eacute; criado no PostgreSQL recebe um <SMALL>OID</SMALL> &uacute;nico.
+    Todos <SMALL>OID</SMALL>s produzidos durante o <I>initdb</I> s&atilde;o menores do
+    que 16384 (de <I>include/access/transam.h</I>). Todos os <SMALL>OID</SMALL>s
+    criados pelo usu&aacute;rio s&atilde;o iguais ou maiores do que este valor. Por padr&atilde;o,
+    todos estes <SMALL>OID</SMALL>s s&atilde;o &uacute;nicos n&atilde;o somente na tabela ou no
+    banco de dados, mas na instala&ccedil;&atilde;o do PostgreSQL.</P>
+
+    <P>PostgreSQL utiliza <SMALL>OID</SMALL>s nas tabelas internas do sistema
+    para ligar registros entre tabelas. Estes <SMALL>OID</SMALL>s podem
+    ser utilizados para identificar registros de usu&aacute;rios espec&iacute;ficos e podem ser
+    utilizados em jun&ccedil;&otilde;es. &Eacute; recomendado que voc&ecirc; utilize o tipo de coluna
+    <SMALL>OID</SMALL> para armazenar valores <SMALL>OID</SMALL>.
+    Voc&ecirc; pode criar um &iacute;ndice no campo <SMALL>OID</SMALL> para acesso r&aacute;pido.</P>
+
+    <P><SMALL>OID</SMALL>s s&atilde;o atribu&iacute;dos para todas os registros novos de uma
+    &aacute;rea central que &eacute; utilizada por todos os bancos de dados. Se voc&ecirc; quer mudar
+    o <SMALL>OID</SMALL> de alguma coisa, ou se voc&ecirc; quer fazer uma c&oacute;pia da tabela,
+    com os <SMALL>OID</SMALL>s, n&atilde;o h&aacute; raz&atilde;o para que voc&ecirc; n&atilde;o possa faz&ecirc;-la:</P>
+<PRE>
+       CREATE TABLE nova_tabela(minha_coluna int);
+        SELECT oid as oid_antigo, minha_coluna INTO tabela_tmp FROM tabela_antiga;
+        COPY tabela_tmp TO '/tmp/pgtable';
+        DROP TABLE tabela_tmp;
+       COPY nova_tabela WITH OIDS FROM '/tmp/pgtable';
+</PRE>
+    <P><SMALL>OID</SMALL>s s&atilde;o armazenados como inteiros de 4 bytes, e 
+    n&atilde;o ultrapassam 4 bilh&otilde;es. Ningu&eacute;m nunca reportou que isso tenha ocorrido,
+    e n&oacute;s planejamos remover o limite antes que alg&uacute;em o alcan&ccedil;e.</P>
+
+    <P><SMALL>TID</SMALL>s s&atilde;o utilizados para identificar registros f&iacute;sicos
+    espec&iacute;ficos com valores de bloco e deslocamento. <SMALL>TID</SMALL>s mudam
+    ap&oacute;s registros serem modificados ou recarregados. Eles s&atilde;o utilizados por
+    &iacute;ndices para apontar para registros f&iacute;sicos.</P>
+
+    <H4><A name="4.17">4.17</A>) Qual &eacute; o significado de alguns termos utilizados no PostgreSQL?</H4>
+
+    <P>O c&oacute;digo-fonte e documenta&ccedil;&atilde;o antiga utiliza termos de uso comum. Aqui est&atilde;o alguns deles:</P>
+
+    <UL>
+      <LI>tabela, rela&ccedil;&atilde;o, classe</LI>
+
+      <LI>linha, registro, tupla</LI>
+
+      <LI>coluna, campo, atributo</LI>
+
+      <LI>recupera, seleciona</LI>
+
+      <LI>altera, atualiza</LI>
+
+      <LI>incrementa, insere</LI>
+
+      <LI><SMALL>OID</SMALL>, valor serial</LI>
+
+      <LI>portal, cursor</LI>
+
+      <LI>intervalo vari&aacute;vel, nome da tabela, alias de tabela</LI>
+    </UL>
+
+    <P>Uma lista de termos gerais de bancos de dados pode ser encontrada em: <A href=
+    "http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.html">http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.html</A></P>
+
+    <H4><A name="4.18">4.18</A>) Por que eu recebo o erro <I>"ERROR: Memory exhausted in AllocSetAlloc()"</I>?</H4>
+
+    <P>Voc&ecirc; provavelmente est&aacute; sem mem&oacute;ria virtual no sistema, ou o seu n&uacute;cleo (kernel) tem um limite baixo para certos recursos. Tente isto antes de iniciar o <I>postmaster</I>:</P>
+    <PRE>
+           ulimit -d 262144
+           limit datasize 256m
+    </PRE>
+
+    Dependendo da sua shell, somente um desses comando ter&aacute; sucesso, mas ele definir&aacute; o segmento de dados do seu processo com um limite maior e talvez permita que a consulta seja feita. Este comando &eacute; aplicado ao processo atual e todos os subprocessos criados depois do comando ser executado. Se voc&ecirc; tiver problemas com o cliente <SMALL>SQL</SMALL> porque o n&uacute;cleo (backend) retornou muitos dados, tente-o antes de iniciar o cliente.
+
+    <H4><A name="4.19">4.19</A>) Como eu informo qual vers&atilde;o do PostgreSQL eu estou utilizando?</H4>
+
+    <P>No <I>psql</I>, digite <CODE>SELECT version();</CODE></P>
+
+    <H4><A name="4.20">4.20</A>) Por que minhas opera&ccedil;&otilde;es com objetos grandes retorna <I>"invalid large obj descriptor"</I>?</H4>
+
+    <P>Voc&ecirc; precisa colocar <CODE>BEGIN WORK</CODE> e <CODE>COMMIT</CODE> ao redor de qualquer uso de opera&ccedil;&otilde;es com objetos grandes, isto &eacute;, ao redor de <CODE>lo_open</CODE> ... <CODE>lo_close.</CODE></P>
+
+    <P>Atualmente PostgreSQL obriga o fechamento de manipula&ccedil;&atilde;o de um objeto grande quando uma transa&ccedil;&atilde;o &eacute; submetida (commit). Ent&atilde;o a primeira tentativa de fazer qualquer coisa com o manipulador ir&aacute; retornar <I>invalid large obj descriptor</I>. Ent&atilde;o o c&oacute;digo que funcionava (ao menos a algum tempo atr&aacute;s) agora ir&aacute; retornar uma mensagem de erro se voc&ecirc; n&atilde;o utilizar uma transa&ccedil;&atilde;o.</P>
+
+    <H4><A name="4.21">4.21</A>) Como eu crio uma coluna que conter&aacute; por padr&atilde;o a hora atual?</H4>
+
+    <P>Utilize <I>CURRENT_TIMESTAMP</I>:</P>
+<PRE>
+<CODE>CREATE TABLE teste (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
+</CODE>
+</PRE>
+
+<H4><A name="4.22">4.22</A>) Por que as minhas subconsultas que utilizam <code><SMALL>IN</SMALL></code> est&atilde;o t&atilde;o lentas?</H4>
+
+<P>Em vers&otilde;es 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, <CODE><SMALL>IN</SMALL></CODE> &eacute; mais r&aacute;pido. Para acelerar consultas externas, substitua <CODE>IN</CODE> por <CODE>EXISTS</CODE>:</P>
+<PRE>    SELECT *
+    FROM tab
+    WHERE col IN (SELECT subcol FROM subtab);
+</PRE>
+    por:
+<PRE>    SELECT *
+    FROM tab
+    WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col);
+</PRE>
+
+Para isto ser r&aacute;pido, <CODE>subcol</CODE> deve ser uma coluna indexada. <P>A partir da vers&atilde;o 7.4, <CODE>IN</CODE> utiliza a mesma t&eacute;cnica de agrupamento do que consultas normais, e &eacute; recomendado utilizar <CODE>EXISTS</CODE>.
+
+    <H4><A name="4.23">4.23</A>) Como eu fa&ccedil;o uma jun&ccedil;&atilde;o externa (outer join)?</H4>
+
+    <P>PostgreSQL suporta jun&ccedil;&otilde;es externas utilizando a sintaxe padr&atilde;o do SQL. Aqui temos dois exemplos:</P>
+<PRE>
+    SELECT *
+    FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
+</PRE>
+    or 
+<PRE>
+    SELECT *
+    FROM t1 LEFT OUTER JOIN t2 USING (col);
+</PRE>
+
+<P>Essas duas consultas ind&ecirc;nticas juntam t1.col com t2.col, e tamb&eacute;m retornam qualquer registro que n&atilde;o foi juntado em t1 (aqueles que n&atilde;o combinaram com t2). Uma jun&ccedil;&atilde;o a direita <SMALL>RIGHT</SMALL> adicionaria registros que n&atilde;o foram juntados da tabela t2. Uma jun&ccedil;&atilde;o completa (<SMALL>FULL</SMALL>) retornaria os registros combinados mais todos os registros n&atilde;o combinados de t1 e t2. A palavra <SMALL>OUTER</SMALL> &eacute; opcional e &eacute; assumida nas jun&ccedil;&otilde;es <SMALL>LEFT</SMALL>, <SMALL>RIGHT</SMALL> e <SMALL>FULL</SMALL>. Jun&ccedil;&otilde;es ordin&aacute;rias s&atilde;o chamadas jun&ccedil;&otilde;es naturais (<SMALL>INNER</SMALL>).</P>
+
+<P>Em vers&otilde;es anteriores, jun&ccedil;&otilde;es externas podiam ser simuladas utilizando <SMALL>UNION</SMALL> e <SMALL>NOT IN</SMALL>. Por exemplo, quando juntar <I>tab1</I> e <I>tab2</I>, a consulta a seguir faz uma jun&ccedil;&atilde;o <I>externa</I> de duas tabelas:<BR>
+<BR></P>
+<PRE>
+    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
+</PRE>
+
+<H4><A name="4.24">4.24</A>) Como eu fa&ccedil;o consultas utilizando m&uacute;ltiplos bancos de dados?</H4>
+
+<P>N&atilde;o h&aacute; outra maneira de consultar um banco de dados caso ele n&atilde;o seja o atual. Porque o PostgreSQL carrega cat&aacute;logos do sistema espec&iacute;ficos do banco de dados, &eacute; incerto como uma consulta em banco de dados distintos pode se comportar.</P>
+<P><I>contrib/dblink</I> permite consultas em bancos de dados distintos utilizando chamadas de fun&ccedil;&otilde;es. &Eacute; claro, que um cliente pode fazer conex&otilde;es simult&acirc;neas em bancos de dados diferentes e juntar os resultados no cliente.</P>
+
+    <H4><A name="4.25">4.25</A>) Como eu retorno m&uacute;ltiplos registros ou colunas de uma fun&ccedil;&atilde;o?</H4>
+
+    <P>No 7.3, voc&ecirc; pode facilmente retornar m&uacute;ltiplos registros ou colunas de uma fun&ccedil;&atilde;o, <A href="http://techdocs.postgresql.org/guides/SetReturningFunctions">http://techdocs.postgresql.org/guides/SetReturningFunctions</A>.
+
+    <H4><A name="4.26">4.26</A>) Por que eu n&atilde;o posso confiar na cria&ccedil;&atilde;o/remo&ccedil;&atilde;o de tabelas tempor&aacute;rias em fun&ccedil;&otilde;es PL/PgSQL?</H4>
+    <P>PL/PgSQL armazena o conte&uacute;do da fun&ccedil;&atilde;o, e o efeito indesejado &eacute; que se uma fun&ccedil;&atilde;o PL/PgSQL acessa uma tabela tempor&aacute;ria, e aquela tabela &eacute; removida e criada novamente, e a fun&ccedil;&atilde;o &eacute; chamada novamente, a fun&ccedil;&atilde;o ir&aacute; falhar porque o conte&uacute;do armazenado da fun&ccedil;&atilde;o ainda apontar&aacute; para a tabela tempor&aacute;ria antiga. A solu&ccedil;&atilde;o &eacute; utilizar o <SMALL>EXECUTE</SMALL> para acesso a tabelas tempor&aacute;rias no PL/PgSQL. Isto ir&aacute; fazer com que a consulta seja avaliada toda vez.</P>
+
+    <H4><A name="4.27">4.27</A>) Que op&ccedil;&otilde;es para replica&ccedil;&atilde;o est&atilde;o dispon&iacute;veis?</H4>
+    <P>H&aacute; v&aacute;rias op&ccedil;&otilde;es de replica&ccedil;&atilde;o mestre/escravo dispon&iacute;veis. Isto permite somente que o mestre fa&ccedil;a mudan&ccedil;as no banco de dados e o escravo s&oacute; pode ler o banco de dados. Abaixo em <A href="http://gborg.PostgreSQL.org/genpage?replication_research">http://gborg.PostgreSQL.org/genpage?replication_research</A> lista-os. Uma solu&ccedil;&atilde;o de replica&ccedil;&atilde;o de m&uacute;ltiplos mestres est&aacute; sendo desenvolvida em <A href="http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php">http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php</A>.</P>
+
+    <H4><A name="4.28">4.28</A>) Que op&ccedil;&otilde;es para encripta&ccedil;&atilde;o est&atilde;o dispon&iacute;veis?</H4>
+    <UL>
+           <LI>No <I>contrib/pgcrypto</I> cont&eacute;m muitas fun&ccedil;&otilde;es de encripta&ccedil;&atilde;o para serem utilizados em consultas <SMALL>SQL</SMALL>.</li>
+           <LI>Para encriptar a transmiss&atilde;o do cliente ao servidor, o servidor deve ter a op&ccedil;&atilde;o <I>ssl</I> definida como <I>true</I> no <I>postgresql.conf</I>, e um registro <I>host</I> ou <I>hostssl</I> deve existir no <I>pg_hba.conf</I>, e o <I>sslmode</I> no cliente n&atilde;o deve estar <I>disable</I>. (Note que tamb&eacute;m &eacute; poss&iacute;vel utilizar outros esquemas de transporte encriptado, tais como stunnel ou ssh, ao inv&eacute;s da conex&atilde;o SSL nativa do PostgreSQL.)
+           <LI>Senhas dos usu&aacute;rios do banco de dados s&atilde;o automaticamente encriptadas quando armazenadas na vers&atilde;o 7.3. Em vers&otilde;es anteriores, voc&ecirc; deve habilitar a op&ccedil;&atilde;o <I>PASSWORD_ENCRYPTION</I> no <I>postgresql.conf</I>.</li>
+           <li>O servidor pode executar utilizando um sistema de arquivos encriptado.</li>
+    </UL>
+
+    <HR>
+
+    <H2 align="center">Extendendo o PostgreSQL</H2>
+
+    <H4><A name="5.1">5.1</A>) Eu escrevi uma fun&ccedil;&atilde;o. Quando eu executo-a no <I>psql</I>, por que ela finaliza o programa com descarga de mem&oacute;ria (core dump)?</H4>
+
+    <P>O problema pode ser v&aacute;rias coisas. Tente testar sua fun&ccedil;&atilde;o em um programa independente.</P>
+
+    <H4><A name="5.2">5.2</A>) Como eu posso contribuir com alguns tipos e fun&ccedil;&otilde;es novas para o PostgreSQL?</H4>
+
+    <P>Envie as suas extens&otilde;es para a lista de discuss&atilde;o <I>pgsql-hackers</I>, e elas eventualmente ser&atilde;o colocadas no subdiret&oacute;rio <I>contrib/</I>.</P>
+
+    <H4><A name="5.3">5.3</A>) Como eu escrevo uma fun&ccedil;&atilde;o em C que retorna uma tupla?</H4>
+
+    <P>Em vers&otilde;es do PostgreSQL a partir da 7.3, fun&ccedil;&otilde;es que retornam tuplas s&atilde;o suportadas em C, PL/PgSQL e SQL. Veja o Guia do Programador para mais informa&ccedil;&atilde;o. Um exemplo de uma fun&ccedil;&atilde;o escrita em C e que retorna tuplas pode ser encontrada em <I>contrib/tablefunc</I>.</P>
+
+    <H4><A name="5.4">5.4</A>) Eu alterei um arquivo do c&oacute;digo-fonte. Por que a recompila&ccedil;&atilde;o n&atilde;o surtiu efeito?</H4>
+
+    <P>Os arquivos <I>Makefiles</I> n&atilde;o tem as depend&ecirc;ncias corretas para incluir arquivos. Voc&ecirc; deve executar um <I>make clean</I> e ent&atilde;o o <I>make</I>. Se voc&ecirc; est&aacute; utilizando o <SMALL>GCC</SMALL> voc&ecirc; pode utilizar a op&ccedil;&atilde;o <I>--enable-depend</I> do <I>configure</I> para o compilador computar as depend&ecirc;ncias automaticamente.</P>
+  </BODY>
+</HTML>
+