*** ./doc/src/FAQ/FAQ_brazilian.html.orig 2007-10-07 19:33:14.000000000 -0300 --- ./doc/src/FAQ/FAQ_brazilian.html 2007-10-07 19:33:20.000000000 -0300 *************** *** 10,16 **** alink="#0000ff">

Perguntas Frequentes (FAQ) sobre PostgreSQL

!

Última atualização: Sáb Out 14 19:08:19 EDT 2006

Mantenedor atual: Bruce Momjian (bruce@momjian.us) --- 10,16 ---- alink="#0000ff">

Perguntas Frequentes (FAQ) sobre PostgreSQL

!

Última atualização: Qui Set 27 02:14:24 EDT 2007

Mantenedor atual: Bruce Momjian (bruce@momjian.us) *************** *** 43,48 **** --- 43,49 ---- 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

*************** *** 57,63 **** 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?
--- 58,64 ---- 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?
*************** *** 70,76 **** 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 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 --- 71,77 ---- 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 *************** *** 88,94 **** 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?

--- 89,95 ---- 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?

*************** *** 97,106 ****

1.1) O que é PostgreSQL? Como ele é pronunciado?

!

PostgreSQL é pronunciado Post-Gres-Q-L, e é, às vezes, referido apenas como ! Postgres. Um arquivo de áudio está disponível em ! formato MP3 para ! aqueles que gostariam de ouvir a pronúncia.

O PostgreSQL é um sistema de banco de dados objeto-relacional que tem as características de sistemas de bancos de dados comerciais tradicionais com --- 98,106 ----

1.1) O que é PostgreSQL? Como ele é pronunciado?

!

PostgreSQL é pronunciado Post-Gres-Q-L, mas também pode ser referido apenas como Postgres principalmente em conversações. ! (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 *************** *** 125,131 **** 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?

--- 125,131 ---- 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 Postgres.

1.3) Qual é a licença do PostgreSQL?

*************** *** 169,175 **** 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 --- 169,175 ---- 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 Postgres utilizando o Cygwin.

Há também uma versão para o Novell Netware 6 em http://forge.novell.com *************** *** 181,193 ****

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.1.5.

Nós planejamos lançar versões novas a cada ano com versões corretivas em alguns meses.

--- 181,193 ----

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.

*************** *** 211,218 ****

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 --- 211,218 ----

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 Postgres.

Bugs submetidos utilizando o formulário ou informado a qualquer lista de discussão do PostgreSQL tipicamente gera uma das seguintes *************** *** 220,226 ****

*************** *** 245,257 **** ou funcionalidades ausentes?

O PostgreSQL suporta um subconjunto extendido do SQL:2003. ! Veja nossa lista de AFAZERES (TODO) que contém bugs conhecidos, funcionalidades ausentes e planos futuros.

Uma solicitação de funcionalidade geralmente resulta em uma das seguintes respostas:

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 ! Postgres é ler as mensagens de log do CVS. Até mesmo as notas de lançamento não listam todas as mudanças feitas no programa.

*************** *** 280,286 ****

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 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://techdocs.PostgreSQL.org/techdocs/bookreviews.php.

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 \? --- 290,297 ---- 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://techdocs.postgresql.org/techdocs/bookreviews.php. ! Há também uma coleção de artigos técnicos sbore PostgreSQL em http://techdocs.postgresql.org/.

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 \? *************** *** 352,358 ****

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.)

--- 353,359 ----
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).

*************** *** 363,368 **** --- 364,373 ---- +

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

*************** *** 482,496 ****

3.6) Qual é o processo de atualização do PostgreSQL?

!

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.

! !

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 não atualizar mais ! perigoso do que atualizar.

! !

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.

3.7) Que tipo de hardware eu devo usar?

--- 487,498 ----

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?

*************** *** 589,617 **** 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,6 MB:

!     28 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
  
!    O tamanho de uma página de dados no PostgreSQL é 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
  
     100000 registros de dados
!    ----------------------------  =  685 páginas do banco de dados (arredondado para cima)
!       146 registros por página
  
! 685 páginas do banco de dados * 8192 bytes por página  =  5.611.520 bytes (5,6 MB)
  

Índices não requerem muito espaço, mas contém --- 591,619 ---- 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 Postgres é 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 (arredondado para cima)
!       158 registros por página
  
! 633 páginas do banco de dados * 8192 bytes por página  =  5.185.536 bytes (5,2 MB)
  

Índices não requerem muito espaço, mas contém *************** *** 704,710 **** 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 ordenar por um campo que é NULL ou não?

Você testa a coluna com IS NULL e IS NOT NULL, como a seguir:

--- 706,712 ---- 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:

*************** *** 715,720 **** --- 717,728 ---- 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 *************** *** 802,808 **** novo_id = execute("SELECT currval('pessoa_id_seq')"); !

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.

--- 810,816 ---- novo_id = execute("SELECT currval('pessoa_id_seq')"); !

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.

*************** *** 810,822 ****

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 CTID?

!

Cada registro que é criado no PostgreSQL recebe um OID único ! a menos que seja criado com WITHOUT OIDS. 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 --- 818,829 ----

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 *************** *** 852,858 **** CREATE TABLE teste (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP ); !

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:

--- 859,865 ----
  	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:

***************
*** 874,880 ****
  	A palavra OUTER é opcional e é assumida nas
  	junções LEFT, RIGHT e FULL.
  	Junções ordinárias são chamadas junções
! 	naturais (INNER).

4.17) Como eu faço consultas utilizando múltiplos bancos de dados?

--- 881,887 ---- 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?

*************** *** 891,898 ****

4.18) Como eu retorno múltiplos registros ou colunas de uma função?

É fácil utilizando funções que retornam conjunto, ! ! http://techdocs.postgresql.org/guides/SetReturningFunctions.

4.19) Por que eu obtenho erros "relation with OID ###### does not exist" ao acessar tabelas temporárias em funções PL/PgSQL?

--- 898,905 ----

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?

*************** *** 912,933 ****

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?

!

O caso mais comum é 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 coloca aspas nos identificadores durante a criação da tabela. Então, para identificadores serem reconhecidos, você deve: