<H1>Perguntas Frequentes (FAQ) sobre PostgreSQL</H1>
<P>Última atualização: Sáb Out 14 19:08:19 EDT 2006</P>
<P>Última atualização: Qui Set 27 02:14:24 EDT 2007</P>
<P>Mantenedor atual: Bruce Momjian (<Ahref=
"mailto:bruce@momjian.us">bruce@momjian.us</A>)
...
...
@@ -43,6 +43,7 @@
<Ahref="#item1.11">1.11</A>) Como eu posso aprender <SMALL>SQL</SMALL>?<BR>
<Ahref="#item1.12">1.12</A>) Como posso submeter uma correção (patch) ou me juntar a equipe de desenvolvimento?<BR>
<Ahref="#item1.13">1.13</A>) Como é o PostgreSQL comparado a outros <SMALL>SGBD</SMALL>s?<BR>
<Ahref="#item1.14">1.14</A>) O PostgreSQL gerenciará as mudanças de horário devido ao horário de verão em vários países?<BR>
<H2align="center">Perguntas sobre Clientes</H2>
...
...
@@ -57,7 +58,7 @@
<Ahref="#item3.3">3.3</A>) Como eu ajusto o servidor de banco de dados para obter uma performance melhor?<BR>
<Ahref="#item3.4">3.4</A>) Quais características de depuração estão disponíveis?<BR>
<Ahref="#item3.5">3.5</A>) Por que eu recebo <I>"Sorry, too many clients"</I> quando eu tento conectar?<BR>
<Ahref="#item3.6">3.6</A>) Qual é o processo de atualização do PostgreSQL?</H3>
<Ahref="#item3.6">3.6</A>) Qual é o processo de atualização do PostgreSQL?<BR>
<Ahref="#item3.7">3.7</A>) Que tipo de hardware eu devo usar?<BR>
...
...
@@ -70,7 +71,7 @@
<Ahref="#item4.6">4.6</A>) Por que minhas consultas estão lentas? Por que elas não estão utilizando meus índices?<BR>
<Ahref="#item4.7">4.7</A>) Como eu vejo como o otimizador de consultas está avaliando minha consulta?<BR>
<Ahref="#item4.8">4.8</A>) 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?<BR>
<Ahref="#item4.9">4.9</A>) Em uma consulta, como eu detecto se um campo é<SMALL>NULL</SMALL>? Como eu posso ordenar por um campo que é<SMALL>NULL</SMALL> ou não?<BR>
<Ahref="#item4.9">4.9</A>) Em uma consulta, como eu detecto se um campo é<SMALL>NULL</SMALL>? Como eu posso concatenar possíveis <SMALL>NULL</SMALL>s? Como eu posso ordenar por um campo que é<SMALL>NULL</SMALL> ou não?<BR>
<Ahref="#item4.10">4.10</A>) Qual é a diferença entre os vários tipos de dado de caracteres?<BR>
<Ahref="#item4.11.1">4.11.1</A>) Como eu crio um campo serial/auto incremento?<BR>
<Ahref="#item4.11.2">4.11.2</A>) Como eu consigo o valor de um campo
...
...
@@ -88,7 +89,7 @@
does not exist" ao acessar tabelas temporárias em funções PL/PgSQL?<BR>
<Ahref="#item4.20">4.20</A>) Quais soluções de replicação estão disponíveis?<BR>
<Ahref="#item4.21">4.21</A>) Por que os nomes de minhas tabelas e colunas não
são reconhecidos em minha consulta?<BR>
são reconhecidos em minha consulta? Por que as maiúsculas não são preservadas?<BR>
<HR>
...
...
@@ -97,10 +98,9 @@
<H3id="item1.1">1.1) O que é PostgreSQL? Como ele é pronunciado?</H3>
<P>PostgreSQL é pronunciado <I>Post-Gres-Q-L</I>, e é, às vezes, referido apenas como
<I>Postgres</I>. Um arquivo de áudio está disponível em
<ahref="http://www.postgresql.org/files/postgresql.mp3">formato MP3</a> para
aqueles que gostariam de ouvir a pronúncia.</P>
<P>PostgreSQL é pronunciado <I>Post-Gres-Q-L</I>, mas também pode ser referido apenas como <I>Postgres</I> principalmente em conversações.
(Para os curiosos que querem saber como se diz "PostgreSQL", um
<ahref="http://www.postgresql.org/files/postgresql.mp3">arquivo de áudio</a> está disponível).</P>
<P>O PostgreSQL é um sistema de banco de dados objeto-relacional que tem as
características de sistemas de bancos de dados comerciais tradicionais com
...
...
@@ -125,7 +125,7 @@
você precisa é se inscrever nas listas de discussão e participar das
discussões. Veja a <ahref="http://www.postgresql.org/docs/faqs.FAQ_DEV.html">
FAQ do desenvolvedor</A> para obter informações como se envolver com o
desenvolvimento do PostgreSQL.</P>
desenvolvimento do Postgres.</P>
<H3id="item1.3">1.3) Qual é a licença do PostgreSQL?</H3>
...
...
@@ -169,7 +169,7 @@
baseados no NT tais como Win200 SP4, WinXP e Win2003. Um instalador pré-empacotado está
disponível em <ahref= "http://pgfoundry.org/projects/pginstaller">
http://pgfoundry.org/projects/pginstaller</a>. Versões do Windows baseadas no MS-DOS
(Win95, Win98, WinMe) podem executar o PostgreSQL utilizando o Cygwin.</P>
(Win95, Win98, WinMe) podem executar o Postgres utilizando o Cygwin.</P>
<p>Há também uma versão para o Novell Netware 6 em
Há também uma coleção de artigos técnicos sbore PostgreSQL em <Ahref="http://techdocs.postgresql.org/">http://techdocs.postgresql.org/</A>.</P>
<P>O programa cliente de linha de comando <I>psql</I> tem alguns comandos \d para
mostrar informações sobre tipos, operadores, funções, agregações, etc. - utilize \?
...
...
@@ -352,7 +353,7 @@
<DT><B>Suporte</B></DT>
<DD>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, <SMALL>SGBD</SMALL>s 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 <SMALL>SGBD</SMALL>s. Há suporte comercial por incidente disponíveis para aqueles que precisam de um. (Veja <Ahref="#item1.7">seção 1.7 da FAQ</A>.)<BR>
<DD>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, <SMALL>SGBD</SMALL>s 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 <SMALL>SGBD</SMALL>s. Há suporte comercial por incidente disponíveis para aqueles que precisam de um. (Veja <Ahref="#item1.7">seção 1.7 da FAQ</A>).<BR>
<BR>
</DD>
...
...
@@ -363,6 +364,10 @@
</DD>
</DL>
<H3id="item1.14">1.14) O PostgreSQL gerenciará mudanças no horário devido ao horário de verão em vários países?</H3>
<P>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.</P>
<HR>
<H2align="center">Perguntas sobre Clientes</H2>
...
...
@@ -482,15 +487,12 @@
<H3id="item3.6">3.6) Qual é o processo de atualização do PostgreSQL?</H3>
<P>O time do PostgreSQL faz somente pequenas mudanças entre versões corretivas, então atualizar da versão 7.4.8 para 7.4.9 não requer uma exportação e uma importação; basta para o servidor de banco de dados, instalar os binários atualizados e reiniciar o servidor.</P>
<P>Todos os usuários devem atualizar para as versões corretivas mais recentes
assim que elas estiverem disponíveis. Enquanto cada atualização tem algum risco,
versões corretivas do PostgreSQL são projetadas para corrigir somente bugs comuns
com um risco mínimo. A comunidade considera <i>não</i> atualizar mais
perigoso do que atualizar.</P>
<P>Versões novas (i.e. da 7.3 para 7.4) 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/importação de um banco de dados é necessária para atualizações entre versões.</P>
para instruções específicas.</P>
<H3id="item3.7">3.7) Que tipo de hardware eu devo usar?</H3>
...
...
@@ -589,29 +591,29 @@
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.</P>
<H3name="item4.5">4.5) Quanto espaço em disco é necessário para armazenar dados de um arquivo texto?</H3>
<H3id="item4.5">4.5) Quanto espaço em disco é necessário para armazenar dados de um arquivo texto?</H3>
<P>Um banco de dados PostgreSQL irá requerer até cinco vezes a quantidade de espaç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çã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,6 MB:</P>
<P>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:</P>
<PRE>
28 bytes: cada cabeçalho de registro (aproximadamente)
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
-------------------------------------------
56 bytes por registro
52 bytes por registro
O tamanho de uma página de dados no PostgreSQLé 8192 bytes (8 KB), então:
O tamanho de uma página de dados no Postgresé 8192 bytes (8 KB), então:
8192 bytes por página
------------------------ = 146 registros por página do banco de dados (arredondado para baixo)
56 bytes por registro
------------------------ = 158 registros por página do banco de dados (arredondado para baixo)
52 bytes por registro
100000 registros de dados
---------------------------- = 685 páginas do banco de dados (arredondado para cima)
146 registros por página
---------------------------- = 633 páginas do banco de dados (arredondado para cima)
158 registros por página
685 páginas do banco de dados * 8192 bytes por página = 5.611.520 bytes (5,6 MB)
633 páginas do banco de dados * 8192 bytes por página = 5.185.536 bytes (5,2 MB)
</PRE>
<P>Índices não requerem muito espaço, mas contém
...
...
@@ -704,7 +706,7 @@
Para forçar uma letra maiúscula ou minúscula a ser armazenada na coluna, utilize
uma restrição <SMALL>CHECK</SMALL> ou um gatilho.</P>
<H3id="item4.9">4.9) Em uma consulta, como eu detecto se um campo é<SMALL>NULL</SMALL>? Como eu posso ordenar por um campo que é<SMALL>NULL</SMALL> ou não?</H3>
<H3id="item4.9">4.9) Em uma consulta, como eu detecto se um campo é<SMALL>NULL</SMALL>? Como eu posso concatenar possíveis <SMALL>NULL</SMALL>s? Como eu posso ordenar por um campo que é<SMALL>NULL</SMALL> ou não?</H3>
<P>Você testa a coluna com <SMALL>IS NULL</SMALL> e <SMALL>IS
NOT NULL</SMALL>, como a seguir:</P>
...
...
@@ -715,6 +717,12 @@
WHERE col IS NULL;
</PRE>
<P>Para concatenar com possíveis <SMALL>NULL</SMALL>s, utilize <I>COALESCE()</I>, assim:</P>
<PRE>
SELECT COALESCE(col1, '') || COALESCE(col2, '')
FROM tab
</PRE>
<P>Para ordenar pelo status <SMALL>NULL</SMALL>, utilize os modificadores
<SMALL>IS NULL</SMALL> e <SMALL>IS NOT NULL</SMALL> na sua cláusula
<SMALL>ORDER BY</SMALL>. Coisas que são <I>verdadeiro</I> serão ordenadas acima
<H3name="4.11.3">4.11.3) <I>currval()</I> não lida com condição de corrida com outros usuários?</H3>
<H3id="item4.11.3">4.11.3) <I>currval()</I> não lida com condição de corrida com outros usuários?</H3>
<P>Não. <I>currval()</I> retorna o valor atual atribuido pela sua sessão, e não por todas as sessões.</P>
...
...
@@ -810,13 +818,12 @@ comprimento</TD></TR>
<P>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.</P>
<H3id="4.16">4.16) O que é um <SMALL>OID</SMALL>? O que é um <SMALL>CTID</SMALL>?</H3>
<H3id="item4.12">4.12) O que é um <SMALL>OID</SMALL>? O que é um <SMALL>CTID</SMALL>?</H3>
<P>Cada registro que é criado no PostgreSQL recebe um <SMALL>OID</SMALL>único
a menos que seja criado com <SMALL>WITHOUT OIDS</SMALL>.
<P>Se uma tabela é criada com <SMALL>WITH OIDS</SMALL>, cada registro recebe um <SMALL>OID</SMALL>único.
O<SMALL>ID</SMALL>s 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 O<SMALL>ID</SMALL>s começam a ser duplicados. O PostgreSQL
4 bilhões e, então, os O<SMALL>ID</SMALL>s começam a ser duplicados. O PostgreSQL
utiliza <SMALL>OID</SMALL>s para ligar as tabelas do sistema.</P>
<P>Para numerar registros nas tabelas do usuários, é melhor utilizar
...
...
@@ -852,7 +859,7 @@ comprimento</TD></TR>
CREATE TABLE teste (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
</PRE>
<H3id="item4.23">4.23) Como eu faço uma junção externa (outer join)?</H3>
<H3id="item4.16">4.16) Como eu faço uma junção externa (outer join)?</H3>
<P>PostgreSQL suporta junções externas utilizando a sintaxe padrão do SQL. Aqui temos dois exemplos:</P>
<PRE>
...
...
@@ -874,7 +881,7 @@ comprimento</TD></TR>
A palavra <SMALL>OUTER</SMALL>é opcional e é assumida nas
junções <SMALL>LEFT</SMALL>, <SMALL>RIGHT</SMALL> e <SMALL>FULL</SMALL>.