*** FAQ_brazilian.html.orig 2005-01-15 11:58:51.000000000 -0200 --- FAQ_brazilian.html 2005-01-15 12:28:50.000000000 -0200 *************** *** 10,16 **** alink="#0000ff">

Perguntas Frequentes (FAQ) sobre PostgreSQL

!

Última atualização: Sat Nov 20 17:28:23 EDT 2004

Mantenedor atual: Bruce Momjian (pgman@candle.pha.pa.us)
--- 10,16 ---- alink="#0000ff">

Perguntas Frequentes (FAQ) sobre PostgreSQL

!

Última atualização: Dom Jan 9 14:44:04 EDT 2005

Mantenedor atual: Bruce Momjian (pgman@candle.pha.pa.us)
*************** *** 20,31 **** "mailto:eulerto@yahoo.com.br">eulerto@yahoo.com.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

--- 20,32 ---- "mailto:eulerto@yahoo.com.br">eulerto@yahoo.com.br)

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

*************** *** 88,95 **** 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?
--- 89,95 ---- 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() não lida 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?
*************** *** 102,108 **** 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 encriptação estão disponíveis?

Extendendo o PostgreSQL

--- 102,108 ---- 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 encriptação estão disponíveis?

Extendendo o PostgreSQL

*************** *** 118,126 ****

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"), --- 118,124 ----

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

!

PostgreSQL é pronunciado Post-Gres-Q-L.

PostgreSQL é um melhoramento do sistema de gerência de banco de dados POSTGRES (e também é, às vezes, chamado simplesmente de "Postgres"), *************** *** 140,147 **** 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 --- 138,145 ---- 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/files/documentation/faqs/FAQ_DEV.html

Os autores do PostgreSQL 1.01 foram Andrew Yu e Jolly Chen. Muitos outros contribuiram para portar, testar, depurar e *************** *** 204,213 **** baseados no NT tais como Win2000, WinXP e Win2003. Um instalador está disponível em ! http://pgfoundry.org/projects/pginstaller.

Há também um porte para Novell Netware 6 em ! http://forge.novell.com.

1.5) Onde eu posso conseguir o PostgreSQL?

--- 202,215 ---- baseados no NT tais como Win2000, WinXP e Win2003. Um instalador está disponível em ! http://pgfoundry.org/projects/pginstaller Versões do Windows ! baseados no MSDOS (Win95, Win98, WinMe) podem executar o PostgreSQL utilizando o Cygwin.

Há também um porte para 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=postgreSQL&stype=all&sort=type&dir=%2F.

1.5) Onde eu posso conseguir o PostgreSQL?

*************** *** 254,267 **** 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.5.

Nós planejamos lançar versões novas a cada seis ou oito meses.

--- 256,269 ---- http://www.PostgreSQL.org !

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://techdocs.postgresql.org/companies.php.

1.7) Qual é a última versão?

!

A última versão do PostgreSQL é a versão 7.4.6.

Nós planejamos lançar versões novas a cada seis ou oito meses.

*************** *** 280,286 **** href= "http://techdocs.PostgreSQL.org/">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.

--- 282,288 ---- href= "http://techdocs.PostgreSQL.org/">http://techdocs.PostgreSQL.org/.

!

O programa cliente de linha de comando psql tem alguns comandos \d para mostrar informação sobre tipos, operadores, funções, agregações, etc. Use \? para mostrar os comandos disponíveis.

Nosso web site contém ainda mais documentação.

*************** *** 324,332 ****

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 --- 326,333 ----

1.13) 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 *************** *** 345,351 ****

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.

--- 346,352 ----
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. 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.

*************** *** 375,383 ****

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

--- 376,385 ----

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 nossa lista advocacy em pgsql-advocacy@postgresql.org.

! !

Perguntas sobre Clientes

*************** *** 403,412 ****

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 --- 405,415 ----

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/ ! ), TORA (http://www.globecom.net/tora/, ! parcialmente comercial) e o Rekall ( http://www.thekompany.com/products/rekall/, proprietária). Há também o PhpPgAdmin ( http://phppgadmin.sourceforge.net/ ), uma interface web para *************** *** 451,457 ****

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?

--- 454,460 ----

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 a seção PostgreSQL Administrator's Guide/Server Run-time Environment/Managing Kernel Resources 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?

*************** *** 471,481 ****

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.

--- 474,484 ----

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 em Administration Guide/Server Run-time Environment/Run-time Configuration. Você pode desabilitar o fsync() utilizando a opção fsync. Isso irá impedir que fsync()s enviem os dados para disco após cada transação.

!

Você pode utilizar a opção shared_buffers 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 1000 buffers.

!

Você também pode utilizar a opção sort_mem (no PostgreSQL 8.0: work_mem) para aumentar a máxima quantidade de memória utilizada pelo processo servidor para cada ordenação temporária. O valor padrão é 1024 (ou seja 1MB).

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.

*************** *** 496,502 ****

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.

--- 499,507 ----

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.

!

Se o postmaster está sendo executado, inicie o psql em uma janela, e então encontre o PID do processo postgres utilizado pelo psql utilizando

SELECT pg_backend_pid()
. Utilize um depurador para anexar ao PID do postgres. Você pode definir pontos de parada (breakpoints) no depurador e digitar consultas no psql. Se você está depurando a inicialização do postgres, você pode definir PGOPTIONS="-W n" e então iniciar o psql. Isto retardará a inicialização por n segundos então você pode anexar o depurador ao processo, definir quaisquer pontos de parada e continuar pela sequência de inicialização.

! !

Há várias variáveis de configuração do servidor

log_*
que habilitam a exibição de estatísticas 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.

*************** *** 629,635 ****

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 --- 634,641 ----

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 *************** *** 678,684 **** ~* 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.
  • --- 684,694 ---- ~* 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 porque não é possível saber o próximo/maior caracter ! em uma localidade que não seja a C. Você pode criar um índice ! especial
    text_pattern_ops
    para tais casos que funcionam somente para ! indexação utilizando
    LIKE
    . !
  • *************** *** 797,811 **** 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.

    --- 807,821 ---- 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, o valor do oid está disponível via $sth->{pg_oid_status} depois de ! $sth->execute().

    !

    4.15.3) currval() não lida 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.