mirror of
				https://github.com/postgres/postgres.git
				synced 2025-11-04 00:02:52 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			923 lines
		
	
	
		
			41 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			923 lines
		
	
	
		
			41 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
 | 
						|
                  Perguntas Frequentes (FAQ) sobre PostgreSQL
 | 
						|
                                       
 | 
						|
   Última atualização: Sex Nov 16 10:53:50 EST 2007
 | 
						|
   
 | 
						|
   Mantenedor atual: Bruce Momjian (bruce@momjian.us)
 | 
						|
   
 | 
						|
   Traduzido por: Euler Taveira de Oliveira (euler@timbira.com)
 | 
						|
   
 | 
						|
   A versão mais recente desse documento pode ser vista em
 | 
						|
   http://www.postgresql.org/files/documentation/faqs/FAQ.html (EN).
 | 
						|
   http://www.postgresql.org/files/documentation/faqs/FAQ_brazilian.html
 | 
						|
   (pt_BR).
 | 
						|
   
 | 
						|
   Perguntas sobre plataformas específicas são respondidas em
 | 
						|
   http://www.postgresql.org/docs/faq/.
 | 
						|
     _________________________________________________________________
 | 
						|
   
 | 
						|
                              Perguntas Gerais
 | 
						|
                                      
 | 
						|
   1.1) O que é PostgreSQL? Como ele é pronunciado? O que é Postgres?
 | 
						|
   1.2) Quem controla o PostgreSQL?
 | 
						|
   1.3) Qual é a licença do PostgreSQL?
 | 
						|
   1.4) Quais plataformas o PostgreSQL pode ser executado?
 | 
						|
   1.5) Onde eu posso conseguir o PostgreSQL?
 | 
						|
   1.6) Qual é a última versão?
 | 
						|
   1.7) Onde eu posso conseguir suporte?
 | 
						|
   1.8) Como eu posso submeter um relato de um bug?
 | 
						|
   1.9) Como eu posso saber quais são os bugs conhecidos ou
 | 
						|
   características ausentes?
 | 
						|
   1.10) Que documentação está disponível?
 | 
						|
   1.11) Como eu posso aprender SQL?
 | 
						|
   1.12) Como posso submeter uma correção (patch) ou me juntar a equipe
 | 
						|
   de desenvolvimento?
 | 
						|
   1.13) Como é o PostgreSQL comparado a outros SGBDs?
 | 
						|
   1.14) O PostgreSQL gerenciará as mudanças de horário devido ao horário
 | 
						|
   de verão em vários países?
 | 
						|
   
 | 
						|
                          Perguntas sobre Clientes
 | 
						|
                                      
 | 
						|
   2.1) Quais interfaces estão disponíveis 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?
 | 
						|
   
 | 
						|
                         Perguntas Administrativas
 | 
						|
                                      
 | 
						|
   3.1) Como eu instalo o PostgreSQL em um local diferente de
 | 
						|
   /usr/local/pgsql?
 | 
						|
   3.2) Como eu controlo conexões de outras máquinas?
 | 
						|
   3.3) Como eu ajusto o servidor de banco de dados para obter uma
 | 
						|
   performance melhor?
 | 
						|
   3.4) Quais características de depuração estão disponíveis?
 | 
						|
   3.5) Por que eu recebo "Sorry, too many clients" quando eu tento
 | 
						|
   conectar?
 | 
						|
   3.6) Qual é o processo de atualização do PostgreSQL?
 | 
						|
   3.7) Que tipo de hardware eu devo usar?
 | 
						|
   
 | 
						|
                           Perguntas Operacionais
 | 
						|
                                      
 | 
						|
   4.1) Como eu faço um SELECT somente dos primeiros registros de uma
 | 
						|
   consulta? Um registro randômico?
 | 
						|
   4.2) Como eu descubro quais tabelas, índices, bancos de dados e
 | 
						|
   usuários estão definidos? Como eu vejo as consultas utilizadas pelo
 | 
						|
   psql para mostrá-los?
 | 
						|
   4.3) Como você muda o tipo de dado de uma coluna?
 | 
						|
   4.4) Qual é o tamanho máximo de um registro, uma tabela e um banco de
 | 
						|
   dados?
 | 
						|
   4.5) Quanto espaço em disco é necessário para armazenar dados de um
 | 
						|
   arquivo texto?
 | 
						|
   4.6) Por que minhas consultas estão lentas? Por que elas não estão
 | 
						|
   utilizando meus índices?
 | 
						|
   4.7) Como eu vejo como o otimizador de consultas está avaliando minha
 | 
						|
   consulta?
 | 
						|
   4.8) Como eu faço buscas com expressões regulares e buscas com
 | 
						|
   expressões regulares sem diferenciar mauúsculas de minúsculas? Como eu
 | 
						|
   utilizo um índice para buscas sem distinguir maiúsculas de minúsculas?
 | 
						|
   4.9) Em uma consulta, como eu detecto se um campo é NULL? Como eu
 | 
						|
   posso concatenar possíveis NULLs? Como eu posso ordenar por um campo
 | 
						|
   que é NULL ou não?
 | 
						|
   4.10) Qual é a diferença entre os vários tipos de dado de caracteres?
 | 
						|
   4.11.1) Como eu crio um campo serial/auto incremento?
 | 
						|
   4.11.2) Como eu consigo o valor de um campo SERIAL?
 | 
						|
   4.11.3) currval() não lida com condição de corrida com outros
 | 
						|
   usuários?
 | 
						|
   4.11.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.12) O que é um OID? O que é um CTID?
 | 
						|
   4.13) Por que eu recebo o erro "ERROR: Memory exhausted in
 | 
						|
   AllocSetAlloc()"?
 | 
						|
   4.14) Como eu informo qual versão do PostgreSQL eu estou utilizando?
 | 
						|
   4.15) Como eu crio uma coluna que conterá por padrão a hora atual?
 | 
						|
   4.16) Como eu faço uma junção externa (outer join)?
 | 
						|
   4.17) Como eu faço consultas utilizando múltiplos bancos de dados?
 | 
						|
   4.18) Como eu retorno múltiplos registros ou colunas de uma função?
 | 
						|
   4.19) Por que eu obtenho erros "relation with OID ###### does not
 | 
						|
   exist" ao acessar tabelas temporárias em funções PL/PgSQL?
 | 
						|
   4.20) Quais soluções de replicação estão disponíveis?
 | 
						|
   4.21) Por que os nomes de minhas tabelas e colunas não são
 | 
						|
   reconhecidos em minha consulta? Por que as maiúsculas não são
 | 
						|
   preservadas?
 | 
						|
     _________________________________________________________________
 | 
						|
   
 | 
						|
                              Perguntas Gerais
 | 
						|
                                      
 | 
						|
  1.1) O que é PostgreSQL? Como ele é pronunciado? O que é Postgres?
 | 
						|
  
 | 
						|
   PostgreSQL é pronunciado Post-Gres-Q-L. (Para os curiosos que querem
 | 
						|
   saber como se diz "PostgreSQL", um arquivo de áudio está disponível).
 | 
						|
   
 | 
						|
   O PostgreSQL é um sistema de banco de dados objeto-relacional que tem
 | 
						|
   as características de sistemas de bancos de dados comerciais
 | 
						|
   tradicionais com melhoramentos encontrados nos sistemas SGBDs de
 | 
						|
   próxima geração. PostgreSQL é livre e o código-fonte completo está
 | 
						|
   disponível.
 | 
						|
   
 | 
						|
   O desenvolvimento do PostgreSQL é feito por um grupo de
 | 
						|
   desenvolvedores voluntários (na sua maioria) espalhados pelo mundo e
 | 
						|
   que se comunicam via Internet. É um projeto da comunidade e não é
 | 
						|
   controlado por nenhuma empresa. Para se envolver, veja a FAQ do
 | 
						|
   desenvolvedor em http://www.postgresql.org/docs/faqs.FAQ_DEV.html
 | 
						|
   
 | 
						|
   Postgres é um apelido para o PostgreSQL amplamente utilizado. Era o
 | 
						|
   nome original do projeto em Berkeley e dentre os outros apelidos é o
 | 
						|
   preferido. Se você acha 'PostgreSQL' difícil de pronunciar, diga
 | 
						|
   apenas 'Postgres'.
 | 
						|
   
 | 
						|
  1.2) Quem controla o PostgreSQL?
 | 
						|
  
 | 
						|
   Se você está procurando por um mantenedor, comitê central ou empresa
 | 
						|
   controladora do PostgreSQL, desista --- não há um(a). Nós temos um
 | 
						|
   comitê core e committers CVS, mas estes grupos são mais para questões
 | 
						|
   administrativas do que controle. O projeto é direcionado pela
 | 
						|
   comunidade de desenvolvedores e usuários, que qualquer um pode se
 | 
						|
   juntar. Tudo o que você precisa é se inscrever nas listas de discussão
 | 
						|
   e participar das discussões. Veja a FAQ do desenvolvedor para obter
 | 
						|
   informações como se envolver com o desenvolvimento do PostgreSQL.
 | 
						|
   
 | 
						|
  1.3) Qual é a licença do PostgreSQL?
 | 
						|
  
 | 
						|
   O PostgreSQL é distribuído sob a licença BSD clássica. Basicamente,
 | 
						|
   ela permite que usuários façam qualquer coisa com o código, incluindo
 | 
						|
   revender os binários sem o código-fonte. A única restrição é que você
 | 
						|
   não nos responsabilize legalmente por problemas com o programa de
 | 
						|
   computador. Há também a exigência de que esta licença apareça em todas
 | 
						|
   as cópias do programa de computador. Aqui está a licença BSD que
 | 
						|
   usamos atualmente:
 | 
						|
   
 | 
						|
   PostgreSQL está sujeito a seguinte licença:
 | 
						|
   
 | 
						|
   PostgreSQL Data Base Management System
 | 
						|
   
 | 
						|
   Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group
 | 
						|
   Portions Copyright (c) 1994-1996 Regents of the University of
 | 
						|
   California
 | 
						|
   
 | 
						|
   Permission to use, copy, modify, and distribute this software and its
 | 
						|
   documentation for any purpose, without fee, and without a written
 | 
						|
   agreement is hereby granted, provided that the above copyright notice
 | 
						|
   and this paragraph and the following two paragraphs appear in all
 | 
						|
   copies.
 | 
						|
   
 | 
						|
   IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
 | 
						|
   FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES,
 | 
						|
   INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND
 | 
						|
   ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN
 | 
						|
   ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
						|
   
 | 
						|
   THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
 | 
						|
   INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 | 
						|
   MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE
 | 
						|
   PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF
 | 
						|
   CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT,
 | 
						|
   UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
 | 
						|
   
 | 
						|
  1.4) Quais plataformas 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.
 | 
						|
   
 | 
						|
   O PostgreSQL também executa nativamente nos sistemas operacionais
 | 
						|
   Microsoft Windows baseados no NT tais como Win200 SP4, WinXP e
 | 
						|
   Win2003. Um instalador pré-empacotado está disponível em
 | 
						|
   http://pgfoundry.org/projects/pginstaller. Versões do Windows baseadas
 | 
						|
   no MS-DOS (Win95, Win98, WinMe) podem executar o PostgreSQL utilizando
 | 
						|
   o Cygwin.
 | 
						|
   
 | 
						|
   Há também uma versão para o Novell Netware 6 em
 | 
						|
   http://forge.novell.com e uma versão para OS/2 (eComStation) em
 | 
						|
   http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgre
 | 
						|
   SQL&stype=all&sort=type&dir=%2F.
 | 
						|
   
 | 
						|
  1.5) Onde eu posso conseguir o PostgreSQL?
 | 
						|
  
 | 
						|
   Via navegador web, utilize http://www.postgresql.org/ftp/ e via ftp,
 | 
						|
   utilize ftp://ftp.postgresql.org/pub/.
 | 
						|
   
 | 
						|
  1.6) Qual é a última versão?
 | 
						|
  
 | 
						|
   A última versão do PostgreSQL é a versão 8.2.5.
 | 
						|
   
 | 
						|
   Nós planejamos lançar versões novas a cada ano com versões corretivas
 | 
						|
   em alguns meses.
 | 
						|
   
 | 
						|
  1.7) Onde eu posso conseguir suporte?
 | 
						|
  
 | 
						|
   A comunidade do PostgreSQL fornece assistência a muitos de seus
 | 
						|
   usuários via e-mail. O principal sítio web para inscrição nas listas
 | 
						|
   de e-mail é http://www.postgresql.org/community/lists/. As listas
 | 
						|
   general e bugs são um bom lugar para início.
 | 
						|
   
 | 
						|
   O principal canal de IRC é o #postgresql na Freenode
 | 
						|
   (irc.freenode.net). Para se conectar você pode utilizar o comando Unix
 | 
						|
   irc -c '#postgresql' "$USER" irc.freenode.net ou utilizar qualquer
 | 
						|
   outro cliente de IRC. Um canal hispânico (#postgresql-es) e um francês
 | 
						|
   (#postgresqlfr) também existem na mesma rede. Há também um canal
 | 
						|
   PostgreSQL na EFNet.
 | 
						|
   
 | 
						|
   Uma lista de empresas que prestam suporte comercial está disponível em
 | 
						|
   http://www.postgresql.org/support/professional_support.
 | 
						|
   
 | 
						|
  1.8) Como eu informo a existência de um bug?
 | 
						|
  
 | 
						|
   Visite o formulário que reporta bugs do PostgreSQL em
 | 
						|
   http://www.postgresql.org/support/submitbug.
 | 
						|
   
 | 
						|
   Verifique também o nosso ftp ftp://ftp.postgresql.org/pub para ver se
 | 
						|
   há uma versão mais recente do PostgreSQL.
 | 
						|
   
 | 
						|
   Bugs submetidos utilizando o formulário ou informado a qualquer lista
 | 
						|
   de discussão do PostgreSQL tipicamente gera uma das seguintes
 | 
						|
   respostas:
 | 
						|
     * Não é um bug e o porquê
 | 
						|
     * É um bug conhecido e já está na lista de AFAZERES
 | 
						|
     * O bug foi corrigido na versão atual
 | 
						|
     * O bug foi corrigido mas não foi empacotado em um versão oficial
 | 
						|
     * Um pedido foi feito para obter informações detalhadas:
 | 
						|
          + Sistema Operacional
 | 
						|
          + Versão do PostgreSQL
 | 
						|
          + Exemplo de teste que reproduz o bug
 | 
						|
          + Informações sobre depuração
 | 
						|
          + Saída reconstituidora de vestígios (backtrace) do depurador
 | 
						|
     * O bug é novo. O seguinte pode ocorrer:
 | 
						|
          + Uma correção é criada e será incluída na próxima versão
 | 
						|
          + O bug não pode ser corrigido imediatamente e é adicionado a
 | 
						|
            lista de AFAZERES
 | 
						|
       
 | 
						|
  1.9) Como eu posso saber quais são os bugs conhecidos ou funcionalidades
 | 
						|
  ausentes?
 | 
						|
  
 | 
						|
   O PostgreSQL suporta um subconjunto extendido do SQL:2003. Veja nossa
 | 
						|
   lista de AFAZERES que contém bugs conhecidos, funcionalidades ausentes
 | 
						|
   e planos futuros.
 | 
						|
   
 | 
						|
   Uma solicitação de funcionalidade geralmente resulta em uma das
 | 
						|
   seguintes respostas:
 | 
						|
     * A funcionalidade já está na lista de AFAZERES
 | 
						|
     * A funcionalidade não é desejável porque:
 | 
						|
          + Ela duplica uma funcionalidade existente que já segue o
 | 
						|
            padrão SQL
 | 
						|
          + A funcionalidade aumentará a complexidade do código mas
 | 
						|
            adicionará pouco benefício
 | 
						|
          + A funcionalidade será insegura ou não-confiável
 | 
						|
     * A nova funcionalidade é adicionada a lista de AFAZERES
 | 
						|
       
 | 
						|
   O PostgreSQL não utiliza sistema de acompanhamento de bugs porque nós
 | 
						|
   achamos mais eficiente responder diretamente o e-mail e manter a lista
 | 
						|
   de AFAZERES atualizada. Na prática, bugs não duram muito no programa;
 | 
						|
   e bugs que afetam uma grande quantidade de usuários são corrigidos
 | 
						|
   rapidamente. O único lugar para encontrar todas as mudanças, melhorias
 | 
						|
   e correções em uma versão do PostgreSQL é ler as mensagens de log do
 | 
						|
   CVS. Até mesmo as notas de lançamento não listam todas as mudanças
 | 
						|
   feitas no programa.
 | 
						|
   
 | 
						|
  1.10) Que documentação está disponível?
 | 
						|
  
 | 
						|
   O PostgreSQL inclui vasta documentação, incluindo um manual extenso,
 | 
						|
   páginas de manuais (man pages) e alguns exemplos teste. Veja o
 | 
						|
   diretório /doc. Você também pode pesquisar os manuais online em
 | 
						|
   http://www.postgresql.org/docs.
 | 
						|
   
 | 
						|
   Há dois livros sobre PostgreSQL disponíveis online em
 | 
						|
   http://www.postgresql.org/docs/books/awbook.html e
 | 
						|
   http://www.commandprompt.com/ppbook/. Há uma lista de livros sobre
 | 
						|
   PostgreSQL disponíveis para compra. Um dos mais populares é o do Korry
 | 
						|
   Douglas. Uma lista de análise sobre os livros pode ser encontrada em
 | 
						|
   http://www.postgresql.org/docs/books/. Há também uma coleção de
 | 
						|
   artigos técnicos sbore PostgreSQL em
 | 
						|
   http://www.postgresql.org/docs/techdocs/.
 | 
						|
   
 | 
						|
   O programa cliente de linha de comando psql tem alguns comandos \d
 | 
						|
   para mostrar informações sobre tipos, operadores, funções, agregações,
 | 
						|
   etc. - utilize \? para mostrar os comandos disponíveis.
 | 
						|
   
 | 
						|
   Nosso sítio web contém ainda mais documentação.
 | 
						|
   
 | 
						|
  1.11) Como eu posso aprender SQL?
 | 
						|
  
 | 
						|
   Primeiro, considere os livros específicos sobre PostgreSQL mencionados
 | 
						|
   acima. Muitos de nossos usuários gostam do The Practical SQL Handbook,
 | 
						|
   Bowman, Judith S., et al., Addison-Wesley. Outros do The Complete
 | 
						|
   Reference SQL, Groff et al., McGraw-Hill.
 | 
						|
   
 | 
						|
   Há também bons tutoriais disponíveis online:
 | 
						|
     * http://www.intermedia.net/support/sql/sqltut.shtm
 | 
						|
     * http://sqlcourse.com
 | 
						|
     * http://www.w3schools.com/sql/default.asp
 | 
						|
     * http://mysite.verizon.net/Graeme_Birchall/id1.html
 | 
						|
       
 | 
						|
  1.12) Como posso submeter uma correção (patch) ou me juntar a equipe de
 | 
						|
  desenvolvimento?
 | 
						|
  
 | 
						|
   Veja a FAQ do Desenvolvedor.
 | 
						|
   
 | 
						|
  1.13) Como é o PostgreSQL comparado a outros SGBDs?
 | 
						|
  
 | 
						|
   Há várias maneiras de se medir um software: funcionalidades,
 | 
						|
   performance, confiabilidade, suporte e preço.
 | 
						|
   
 | 
						|
   Funcionalidades
 | 
						|
          PostgreSQL tem muitas características presentes em muitos SGBDs
 | 
						|
          comerciais como transações, subconsultas, gatilhos, visões,
 | 
						|
          integridade referencial de chave estrangeira e bloqueio (lock)
 | 
						|
          sofisticado. Nós temos algumas funcionalidades 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
 | 
						|
          bloqueios (locks).
 | 
						|
          
 | 
						|
   Performance
 | 
						|
          A performance do PostgreSQL é comparável a outros bancos de
 | 
						|
          dados comerciais e de código livre. Ele é mais rápido em
 | 
						|
          algumas coisas, mais lento em outras. Nossa performance é
 | 
						|
          geralmente +/- 10% comparada a de outros bancos de dados.
 | 
						|
          
 | 
						|
   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.7 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 BSD
 | 
						|
          mencionada acima.
 | 
						|
          
 | 
						|
  1.14) O PostgreSQL gerenciará mudanças no horário devido ao horário de verão
 | 
						|
  em vários países?
 | 
						|
  
 | 
						|
   Mudanças no horário de verão dos USA foram incluídas nas versões 8.0
 | 
						|
   .[4+] do PostgreSQL e em todas as versões grandes, i.e. 8.1. Mudanças
 | 
						|
   no Canadá e Austrália Oeste foram incluídas na 8.0.[10+], 8.1.[6+] e
 | 
						|
   em todas as versões grandes subsequentes. Versões do PostgreSQL
 | 
						|
   anteriores a 8.0 utilizam o banco de dados de zona horária do sistema
 | 
						|
   operacional para informações sobre horário de verão.
 | 
						|
     _________________________________________________________________
 | 
						|
   
 | 
						|
                          Perguntas sobre Clientes
 | 
						|
                                      
 | 
						|
  2.1) Quais interfaces estão disponíveis para PostgreSQL?
 | 
						|
  
 | 
						|
   A instalação do PostgreSQL inclui somente as interfaces C e C
 | 
						|
   embutida. Todas as outras interfaces são projetos independentes que
 | 
						|
   podem ser obtidos separadamente; sendo separados permitem que eles
 | 
						|
   tenham suas próprias datas de lançamento e time de desenvolvedores.
 | 
						|
   
 | 
						|
   Algumas linguagens de programação como PHP incluem uma interface para
 | 
						|
   PostgreSQL. Interfaces para linguagens como Perl, TCL, Python e muitas
 | 
						|
   outras estão disponíveis em http://www.pgfoundry.org.
 | 
						|
   
 | 
						|
  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 (http://www.php.net) é uma excelente
 | 
						|
   interface.
 | 
						|
   
 | 
						|
   Para casos complexos, muitos usam a Interface Perl e DBD::Pg com
 | 
						|
   CGI.pm ou mod_perl.
 | 
						|
   
 | 
						|
  2.3) O PostgreSQL tem interfaces gráficas para iteragir com o usuário?
 | 
						|
  
 | 
						|
   Há um vasto número de Ferramentas Gráficas (GUI), que estão
 | 
						|
   disponíveis para o PostgreSQL, comerciais e de desenvolvedores de
 | 
						|
   código aberto. Uma lista detalhada pode ser encontrada em Documentação
 | 
						|
   da Comunidade PostgreSQL
 | 
						|
     _________________________________________________________________
 | 
						|
   
 | 
						|
                         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) 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 ou conexões TCP/IP. Outras
 | 
						|
   máquinas não poderão conectar-se a menos que você modifique
 | 
						|
   listen_addresses no postgresql.conf, habilite a autenticação por
 | 
						|
   máquina modificando o arquivo $PGDATA/pg_hba.conf e reinicie o
 | 
						|
   servidor PostgreSQL.
 | 
						|
   
 | 
						|
  3.3) Como eu ajusto o servidor de banco de dados para obter uma performance
 | 
						|
  melhor?
 | 
						|
  
 | 
						|
   Há três grandes áreas para melhorar a performance em potencial:
 | 
						|
   
 | 
						|
   Mudança de Consultas
 | 
						|
          Isto involve modificar consultas para obter melhor performance:
 | 
						|
          
 | 
						|
          + Criação de índices, incluir expressões e índices parciais
 | 
						|
          + Utilização o COPY ao invés de múltiplos comandos INSERTs
 | 
						|
          + Agrupamento de múltiplos comandos em uma única transação para
 | 
						|
            diminuir a despesa com efetivações (commit)
 | 
						|
          + Utilização do CLUSTER quando recuperar vários registros de um
 | 
						|
            índice
 | 
						|
          + Utilização do LIMIT para retornar um subconjunto da saída da
 | 
						|
            consulta
 | 
						|
          + Utilização de Consultas preparadas
 | 
						|
          + Utilização de ANALYZE para manter as estatísticas do
 | 
						|
            otimizador corretas
 | 
						|
          + Utilização regular do VACUUM ou pg_autovacuum
 | 
						|
          + Remoção de índices durante grande mudança de dados
 | 
						|
            
 | 
						|
   Configuração do Servidor
 | 
						|
          Um grande número de configurações que afetam a performance.
 | 
						|
          Para obter detalhes adicionais, veja Administration
 | 
						|
          Guide/Server Run-time Environment/Run-time Configuration para
 | 
						|
          listagem completa, e para comentários veja
 | 
						|
          http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_co
 | 
						|
          nf_e.html e
 | 
						|
          http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html.
 | 
						|
          
 | 
						|
   Seleção do Hardware
 | 
						|
          O efeito do hardware na performance é detalhado em
 | 
						|
          http://www.powerpostgresql.com/PerfList/ e
 | 
						|
          http://momjian.us/main/writings/pgsql/hw_performance/index.html
 | 
						|
          .
 | 
						|
          
 | 
						|
  3.4) Quais características de depuração estão disponíveis?
 | 
						|
  
 | 
						|
   Há muitas variáveis de configuração do servidor log_* que habilitam a
 | 
						|
   exibição de consultas e estatísticas que podem ser muito úteis para
 | 
						|
   depuração e medidas de performance.
 | 
						|
   
 | 
						|
  3.5) Por que eu recebo "Sorry, too many clients" quando eu tento conectar?
 | 
						|
  
 | 
						|
   Você atingiu o limite padrão de 100 sessões. Você precisa aumentar o
 | 
						|
   limite do servidor PostgreSQL, que diz quantos processos servidor
 | 
						|
   concorrentes ele pode iniciar, alterando o valor max_connections no
 | 
						|
   postgresql.conf e reiniciando o postmaster.
 | 
						|
   
 | 
						|
  3.6) Qual é o processo de atualização do PostgreSQL?
 | 
						|
  
 | 
						|
   Veja http://www.postgresql.org/support/versioning para discussão geral
 | 
						|
   sobre atualizações e
 | 
						|
   http://www.postgresql.org/docs/current/static/install-upgrading.html
 | 
						|
   para instruções específicas.
 | 
						|
   
 | 
						|
  3.7) Que tipo de hardware eu devo usar?
 | 
						|
  
 | 
						|
   Por causa do hardware de PC ser em sua maioria compatível, pessoas
 | 
						|
   tendem a acreditar que todos os hardwares de PC são de mesma
 | 
						|
   qualidade. Não é verdade. ECC RAM, SCSI e placas mãe de qualidade são
 | 
						|
   mais confiáveis e têm uma melhor performance do que hardwares mais
 | 
						|
   baratos. O PostgreSQL executará em quase todo hardware, mas se a
 | 
						|
   confiabilidade e a performance forem importantes é prudente pesquisar
 | 
						|
   sobre as opções de hardware. Nossas listas de discussão podem ser
 | 
						|
   usadas para discutir opções de hardware e dilemas.
 | 
						|
     _________________________________________________________________
 | 
						|
   
 | 
						|
                           Perguntas Operacionais
 | 
						|
                                      
 | 
						|
  4.1) Como eu faço um SELECT somente dos primeiros registros de uma consulta?
 | 
						|
  Um registro randômico?
 | 
						|
  
 | 
						|
   Para obter somente alguns registros, se você sabe o número de
 | 
						|
   registros necessários ao executar o SELECT utilize o LIMIT. Se um
 | 
						|
   índice corresponde no ORDER BY é possível que a consulta toda não
 | 
						|
   tenha que ser executada. Se você não sabe o número de registros ao
 | 
						|
   executar o SELECT, utilize um cursor e o FETCH.
 | 
						|
   
 | 
						|
   Para obter um registro randômico, utilize:
 | 
						|
    SELECT col
 | 
						|
    FROM tab
 | 
						|
    ORDER BY random()
 | 
						|
    LIMIT 1;
 | 
						|
 | 
						|
  4.2) Como eu descubro quais tabelas, índices, bancos de dados e usuários
 | 
						|
  estão definidos? Como eu vejo as consultas utilizadas pelo psql para
 | 
						|
  mostrá-los?
 | 
						|
  
 | 
						|
   Utilize o comando \dt para ver tabelas no psql. Para obter uma lista
 | 
						|
   completa dos 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 os comandos SQL que geram a
 | 
						|
   saída para os comandos de contrabarra do psql. Você também pode
 | 
						|
   iniciar o psql com a opção -E para que as consultas utilizadas para
 | 
						|
   executar os comandos que você informou seja exibida. O PostgreSQL
 | 
						|
   também fornece uma inteface compatível com SQL do INFORMATION SCHEMA
 | 
						|
   que você pode consultar para obter informação sobre o banco de dados.
 | 
						|
   
 | 
						|
   Há também tabelas do sistema que começam com pg_ que os descrevem
 | 
						|
   também.
 | 
						|
   
 | 
						|
   Utilizando o psql -l listará todos os bancos de dados.
 | 
						|
   
 | 
						|
   Veja também o arquivo pgsql/src/tutorial/syscat.source. Ele ilustra
 | 
						|
   muitos dos comandos SELECTs necessários para obter informação das
 | 
						|
   tabelas de sistema do banco de dados.
 | 
						|
   
 | 
						|
  4.3) Como você muda o tipo de dado de uma coluna?
 | 
						|
  
 | 
						|
   Mudar o tipo de dado de uma coluna pode ser feito facilmente na versão
 | 
						|
   8.0 ou superior com ALTER TABLE ALTER COLUMN TYPE.
 | 
						|
   
 | 
						|
   Em versões anteriores, faça isso:
 | 
						|
    BEGIN;
 | 
						|
    ALTER TABLE tab ADD COLUMN col_nova novo_tipo_dado;
 | 
						|
    UPDATE tab SET col_nova = CAST(col_antiga AS novo_tipo_dado);
 | 
						|
    ALTER TABLE tab DROP COLUMN col_antiga;
 | 
						|
    COMMIT;
 | 
						|
 | 
						|
   Você pode então querer fazer um VACUUM FULL tab para recuperar o
 | 
						|
   espaço em disco utilizado pelos registros expirados.
 | 
						|
   
 | 
						|
  4.4) 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
 | 
						|
   dados de 32 TB)
 | 
						|
   Tamanho máximo de uma tabela? 32 TB
 | 
						|
   Tamanho máximo de um registro? 400 GB
 | 
						|
   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
 | 
						|
   das 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, o tamanho de um registro e o número
 | 
						|
   máximo de colunas podem ser quadruplicados aumentando-se o tamanho
 | 
						|
   padrão do bloco para 32k. O tamanho máximo de uma tabela pode também
 | 
						|
   ser aumentado utilizando particionamento de tabela.
 | 
						|
   
 | 
						|
   Uma limitação é que índices não podem ser criados em colunas maiores
 | 
						|
   do que 2.000 caracteres. Felizmente, tais índices são raramente
 | 
						|
   necessários. Unicidade é melhor garantida por um índice de uma função
 | 
						|
   de um hash MD5 de uma coluna longa, e indexação de texto longo permite
 | 
						|
   a busca de palavras dentro da coluna.
 | 
						|
   
 | 
						|
  4.5) 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 5,2 MB:
 | 
						|
    24 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
 | 
						|
   -------------------------------------------
 | 
						|
    52 bytes por registro
 | 
						|
 | 
						|
   O tamanho de uma página de dados no PostgreSQL é 8192 bytes (8 KB), então:
 | 
						|
 | 
						|
   8192 bytes por página
 | 
						|
   ------------------------   =  158 registros por página do banco de dados (arredondado para baixo)
 | 
						|
     52 bytes por registro
 | 
						|
 | 
						|
   100000 registros de dados
 | 
						|
   ----------------------------  =  633 páginas do banco de dados (arredondadopara cima)
 | 
						|
      158 registros por página
 | 
						|
 | 
						|
633 páginas do banco de dados * 8192 bytes por página  =  5.185.536 bytes (5,2MB)
 | 
						|
 | 
						|
   Í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.6) Por que minhas consultas estão lentas? Por que elas não estão utilizando
 | 
						|
  meus índices?
 | 
						|
  
 | 
						|
   Índices não são utilizados por toda consulta. Índices são utilizados
 | 
						|
   somente se a tabela é maior do que um tamanho mínimo, e a consulta
 | 
						|
   seleciona somente uma pequena porcentagem dos registros da tabela.
 | 
						|
   Isto porque o acesso randômico ao disco causado pela busca indexada
 | 
						|
   pode ser mais lento do que uma leitura ao longo da tabela ou busca
 | 
						|
   sequencial.
 | 
						|
   
 | 
						|
   Para determinar se um índice deveria ser utilizado, o PostgreSQL deve
 | 
						|
   ter estatísticas sobre a tabela. Estas estatísticas são coletadas
 | 
						|
   utilizando o VACUUM ANALYZE ou simplesmente o ANALYZE. Utilizando
 | 
						|
   estatísticas, o otimizador sbae quantos registros estão na tabela, e
 | 
						|
   pode melhor determinar se índices deveriam ser utilizados.
 | 
						|
   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 deveriam ser feitas
 | 
						|
   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 seguido por uma ordenação explícita é
 | 
						|
   geralmente mais rápida do que uma busca indexada em uma tabela grande.
 | 
						|
   Contudo, LIMIT combinado com ORDER BY frequentemente utilizará índice
 | 
						|
   porque somente uma pequena porção da tabela será retornada.
 | 
						|
   
 | 
						|
   Se você acredita que o otimizador está incorreto ao escolher uma busca
 | 
						|
   sequencial, utilize SET enable_seqscan TO 'off' e execute a consulta
 | 
						|
   novamente para ver se uma busca indexada é realmente mais rápida.
 | 
						|
   
 | 
						|
   Ao utilizar operadores curinga tais como LIKE ou ~, índices podem ser
 | 
						|
   utilizados somente em algumas condições:
 | 
						|
     * O início da cadeia de caracteres da busca deve ser iniciar com uma
 | 
						|
       cadeia de caracteres, i.e.
 | 
						|
          + modelos LIKE não devem iniciar com %.
 | 
						|
          + modelos ~ (expressões regulares) devem iniciar com ^.
 | 
						|
     * A cadeia de caracteres utilizada na busca não pode iniciar com a
 | 
						|
       classe de caracteres e.g. [a-e].
 | 
						|
     * Busca que não diferenciam maiúsculas de minúsculas tais como ILIKE
 | 
						|
       e ~* não utilizam índices. Em vez disso, utilize índice de
 | 
						|
       expressão, que é descrito na seção 4.8.
 | 
						|
     * O idioma padrão C deve ser usando durante o initdb porque não é
 | 
						|
       possível saber o próximo caracter em idiomas que não sejam o C.
 | 
						|
       Você pode criar um índice especial text_pattern_ops para tais
 | 
						|
       casos que funcionam somente para indexação com LIKE. Também é
 | 
						|
       possível utilizar indexação de busca textual para buscas por
 | 
						|
       palavras.
 | 
						|
       
 | 
						|
   Em versões anteriores a 8.0, índices frequentemente não podem ser
 | 
						|
   utilizados a menos que os tipos de dados correspondam aos tipos de
 | 
						|
   coluna do índice. Isto era particularmente verdadeiro para índices de
 | 
						|
   coluna int2, int8 e numeric.
 | 
						|
   
 | 
						|
  4.7) Como eu vejo como o otimizador de consulta está avaliando a minha
 | 
						|
  consulta?
 | 
						|
  
 | 
						|
   Veja o comando EXPLAIN no manual.
 | 
						|
   
 | 
						|
  4.8) 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 de expressão, ele será utilizado:
 | 
						|
    CREATE INDEX tabindex ON tab (lower(col));
 | 
						|
 | 
						|
   Se o índice acima é criado como UNIQUE, embora a coluna possa
 | 
						|
   armazenar caracteres maiúsculos e minúsculos, ele não pode ter valores
 | 
						|
   idênticos que diferem apenas em letras maiúsculas e minúsculas. Para
 | 
						|
   forçar uma letra maiúscula ou minúscula a ser armazenada na coluna,
 | 
						|
   utilize uma restrição CHECK ou um gatilho.
 | 
						|
   
 | 
						|
  4.9) Em uma consulta, como eu detecto se um campo é NULL? Como eu posso
 | 
						|
  concatenar possíveis NULLs? Como eu posso ordenar por um campo que é NULL ou
 | 
						|
  não?
 | 
						|
  
 | 
						|
   Você testa a coluna com IS NULL e IS NOT NULL, como a seguir:
 | 
						|
   SELECT *
 | 
						|
   FROM tab
 | 
						|
   WHERE col IS NULL;
 | 
						|
 | 
						|
   Para concatenar com possíveis NULLs, utilize COALESCE(), assim:
 | 
						|
   SELECT COALESCE(col1, '') || COALESCE(col2, '')
 | 
						|
   FROM tab
 | 
						|
 | 
						|
   Para ordenar pelo status NULL, utilize os modificadores IS NULL e IS
 | 
						|
   NOT NULL na sua cláusula ORDER BY. Coisas que são verdadeiro serão
 | 
						|
   ordenadas acima das coisas que são falso, então a consulta a seguir
 | 
						|
   irá colocar entradas NULL no início da lista de resultados:
 | 
						|
   SELECT *
 | 
						|
   FROM tab
 | 
						|
   ORDER BY (col IS NOT NULL)
 | 
						|
 | 
						|
  4.10) Qual é a diferença entre os vários tipos de dado de caracteres?
 | 
						|
  
 | 
						|
   Tipo Nome Interno Observação
 | 
						|
   VARCHAR(n) varchar tamanho especifica o tamanho máximo, sem
 | 
						|
   preenchimento
 | 
						|
   CHAR(n) bpchar preenchimento em branco para comprimento fixo
 | 
						|
   específico
 | 
						|
   TEXT text nenhum limite superior específico no comprimento
 | 
						|
   BYTEA bytea vetor de bytes de comprimento variável (seguro a byte
 | 
						|
   nulo)
 | 
						|
   "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, valores longos são também
 | 
						|
   sujeitos a compressão, 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) é para armazenar cadeias de caracteres que são todas do mesmo
 | 
						|
   tamanho. 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.11.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
 | 
						|
    );
 | 
						|
 | 
						|
   Sequências automaticamente criadas são nomeadas como
 | 
						|
   <tabela>_<colunaserial>_seq, onde tabela e colunaserial são os nomes
 | 
						|
   da tabela e da coluna serial, respectivamente. Veja a página sobre
 | 
						|
   create_sequence no manual para obter informações adicionais sobre
 | 
						|
   sequências.
 | 
						|
   
 | 
						|
  4.11.2) Como eu consigo o valor de um campo SERIAL?
 | 
						|
  
 | 
						|
   A maneira mais simples de obter o próximo valor SERIAL de uma
 | 
						|
   sequência é com RETURNING. Utilizando o exemplo da tabela em 4.11.1,
 | 
						|
   ele ficaria assim:
 | 
						|
    INSERT INTO pessoa (nome) VALUES ('Blaise Pascal') RETURNING id;
 | 
						|
 | 
						|
   Você também pode chamar nextval() e utilizar o valor no INSERT ou
 | 
						|
   chamar currval() após o INSERT.
 | 
						|
   
 | 
						|
  4.11.3) currval() não lida com condição de corrida com outros usuários?
 | 
						|
  
 | 
						|
   Não. currval() retorna o valor atual atribuido pela sua sessão, e não
 | 
						|
   por todas as sessões.
 | 
						|
   
 | 
						|
  4.11.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.12) O que é um OID? O que é um CTID?
 | 
						|
  
 | 
						|
   Se uma tabela é criada com WITH OIDS, cada registro recebe um OID
 | 
						|
   único. OIDs são automaticamente atribuídos como inteiros de 4 bytes
 | 
						|
   que são únicos ao longo de toda instalação. Contudo, eles são
 | 
						|
   limitados em 4 bilhões e, então, os OIDs começam a ser duplicados. O
 | 
						|
   PostgreSQL utiliza OIDs para ligar as tabelas do sistema.
 | 
						|
   
 | 
						|
   Para numerar registros nas tabelas do usuários, é melhor utilizar
 | 
						|
   SERIAL ao invés de OIDs porque sequências SERIAL são únicas somente em
 | 
						|
   uma tabela; e são menos propícias a atingir o limite. SERIAL8 está
 | 
						|
   disponível para armazenar valores de sequências com oito bytes.
 | 
						|
   
 | 
						|
   CTIDs são utilizados para identificar registros físicos específicos
 | 
						|
   com valores de block e deslocamento. CTIDs mudam após registros serem
 | 
						|
   modificados ou recarregados. Eles são utilizados por índices para
 | 
						|
   apontar registros físicos.
 | 
						|
   
 | 
						|
  4.13) Por que eu recebo o erro "ERROR: Memory exhausted in AllocSetAlloc()"?
 | 
						|
  
 | 
						|
   Você provavelmente está sem memória virtual no seu sistema, ou o seu
 | 
						|
   núcleo (kernel) tem um limite baixo para certos recursos. Tente isto
 | 
						|
   antes de iniciar o servidor PostgreSQL:
 | 
						|
    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 processo
 | 
						|
   servidor retornou muitos dados, tente-o antes de iniciar o cliente.
 | 
						|
   
 | 
						|
  4.14) Como eu informo qual versão do PostgreSQL eu estou utilizando?
 | 
						|
  
 | 
						|
   No psql, digite SELECT version();
 | 
						|
   
 | 
						|
  4.15) 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.16) 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
 | 
						|
   internas (INNER).
 | 
						|
   
 | 
						|
  4.17) 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.18) Como eu retorno múltiplos registros ou colunas de uma função?
 | 
						|
  
 | 
						|
   É fácil utilizando funções que retornam conjunto,
 | 
						|
   http://www.postgresql.org/docs/techdocs.17.
 | 
						|
   
 | 
						|
  4.19) Por que eu obtenho erros "relation with OID ###### does not exist" ao
 | 
						|
  acessar tabelas temporárias em funções PL/PgSQL?
 | 
						|
  
 | 
						|
   Em versões do PostgreSQL < 8.3, 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.
 | 
						|
   
 | 
						|
   Este problema não ocorre no PostgreSQL 8.3 ou superior.
 | 
						|
   
 | 
						|
  4.20) Quais soluções de replicação estão disponíveis?
 | 
						|
  
 | 
						|
   Embora "replicação" seja um termo simples, há várias tecnologias para
 | 
						|
   fazer replicação, com vantagens e desvantagens para cada um.
 | 
						|
   
 | 
						|
   Replicação mestre/escravo permite que um mestre receba consultas de
 | 
						|
   leitura e escrita, enquanto os escravos só podem aceitar
 | 
						|
   leitura/consultas SELECT. A solução mais popular de replicação
 | 
						|
   mestre-escravo para PostgreSQL disponível livremente é Slony-I.
 | 
						|
   
 | 
						|
   Replicação com múltiplos mestres permite que consultas leitura/escrita
 | 
						|
   sejam enviadas para múltiplos computadores replicadores. Esta
 | 
						|
   capacidade também tem um sério impacto na performance por causa da
 | 
						|
   necessidade de sincronizar as mudanças entre os servidores. PGCluster
 | 
						|
   é a solução mais popular disponível livremente para PostgreSQL.
 | 
						|
   
 | 
						|
   Há também soluções de replicação comerciais e baseadas em hardware
 | 
						|
   disponíveis que suportam uma variedade de modelos de replicação.
 | 
						|
   
 | 
						|
  4.21) Por que os nomes de minhas tabelas e colunas não são reconhecidos em
 | 
						|
  minha consulta? Por que as maiúsculas não são preservadas?
 | 
						|
  
 | 
						|
   A causa mais comum de nomes desconhecidos é o uso de aspas ao redor
 | 
						|
   dos nomes da tabela ou coluna durante a criação da tabela. Ao utilizar
 | 
						|
   aspas, nomes de tabela e coluna (chamados de identificadores) são
 | 
						|
   armazenados como especificado, significando que você deve utilizar
 | 
						|
   aspas quando se referir aos nomes na consulta. Algumas interfaces,
 | 
						|
   como pgAdmin, automaticamente colocam aspas nos identificadores
 | 
						|
   durante a criação da tabela. Então, para identificadores serem
 | 
						|
   reconhecidos, você deve:
 | 
						|
     * Evitar colocar aspas no identificador ao criar tabelas
 | 
						|
     * Utilizar somente caracteres minúsculos em identificadores
 | 
						|
     * Colocar aspas em identificadores ao referenciá-los nas consultas
 |