Perguntas Frequentes (FAQ) sobre PostgreSQL
- Última atualização: Sat Nov 20 17:28:23 EDT 2004
+ Última atualização: Dom Jan 9 14:44:04 EDT 2005
Mantenedor atual: Bruce Momjian (pgman@candle.pha.pa.us)
Traduzido por: Euler Taveira de Oliveira (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).
+ 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/index.html.
+ http://www.postgresql.org/docs/faq/.
_________________________________________________________________
Perguntas Gerais
4.14) Qual é a diferença entre os vários tipos de dados de caracteres?
4.15.1) Como eu crio um campo serial/auto incremento?
4.15.2) Como eu consigo o valor de um campo SERIAL?
- 4.15.3) currval() e nextval() não lidam com condição de corrida com
- outros usuários?
+ 4.15.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?
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 é 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"),
ao grupo). O grupo é responsável por todo o desenvolvimento do
PostgreSQL. É um projeto da comunidade e não é controlado por nenhuma
empresa. Para se juntar ao grupo, veja a FAQ do desenvolvedor em
- http://www.PostgreSQL.org/docs/faqs/FAQ_DEV.html
+ 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 melhorar o código.
PostgreSQL Sistema de Gerência de Banco de Dados
- Portions copyright (c) 1996-2004, PostgreSQL Global Development Group
+ Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
Portions Copyright (c) 1994-6 Regents of the University of California
Permissão de uso, cópia, modificação e distribuição desse software e
Iniciando com a versão 8.0, o PostgreSQL agora pode ser executado
nativamente nos sistemas operacionais Microsoft Windows baseados no NT
tais como Win2000, WinXP e Win2003. Um instalador está disponível em
- http://pgfoundry.org/projects/pginstaller.
+ 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.
+ 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=postgre
+ SQL&stype=all&sort=type&dir=%2F.
1.5) Onde eu posso conseguir o PostgreSQL?
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.
+ 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.5.
+ 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.
coleção de artigos técnicos sobre PostgreSQL em
http://techdocs.PostgreSQL.org/.
- psql tem alguns comandos \d para mostrar informação sobre tipos,
- operadores, funções, agregações, etc.
+ 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.
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.
+ 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 ou patches.
travamentos (locks).
Performance
- PostgreSQL tem a performance similar a outros bancos de dados
- comerciais e de código livre. Ele é mais rápido em algumas
- coisas, mais lento em outras. Comparado ao MySQL ou sistemas de
- bancos de dados "leves", nós somos mais rápidos com múltiplos
- usuários, consultas complexas e carga de consultas de
+ 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. 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.
+ cada versão.
Confiabilidade
Nós sabemos que um SGBD deve ser confiável ou ele é inútil. Nós
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.
+ nossa lista advocacy em pgsql-advocacy@postgresql.org.
+ _________________________________________________________________
Perguntas sobre Clientes
2.3) O PostgreSQL tem interfaces gráficas para iteragir com o usuário?
Sim, há várias interfaces gráficas para PostgreSQL disponíveis. Entre
- elas o PgAccess http://www.pgaccess.org), PgAdmin III
- (http://www.pgadmin.org, RHDB Admin (http://sources.redhat.com/rhdb/ )
- e o Rekall ( http://www.thekompany.com/products/rekall/,
- proprietária). Há também o PhpPgAdmin (
- http://phppgadmin.sourceforge.net/ ), uma interface web para
- PostgreSQL.
+ 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 PostgreSQL.
Veja http://techdocs.postgresql.org/guides/GUITools para uma lista
mais detalhada.
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.
+ 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?
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.
+ 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ê 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
+ 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
- 64 buffers.
+ 1000 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 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
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.
+ 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)
* Buscas que não diferenciam maiúsculas de minúsculas tais como
ILIKE e ~* não utilizam índices. Ao invés, utilize índices
funcionais, que são descritos na seção 4.12.
- * A localidade padrão C deve ser utilizada durante o initdb.
+ * 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
+ .
Em versões anteriores a 8.0, índices frequentemente não podiam ser
usados a menos que os tipos de dados correspodessem aos tipos da
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().
+ 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() e nextval() não lidam com condição de corrida com outros
- usuários?
+ 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.
alink="#0000ff">
<H1>Perguntas Frequentes (FAQ) sobre PostgreSQL</H1>
- <P>Última atualização: Sat Nov 20 17:28:23 EDT 2004</P>
+ <P>Última atualização: Dom Jan 9 14:44:04 EDT 2005</P>
<P>Mantenedor atual: Bruce Momjian (<A href=
"mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</A>)<BR>
"mailto:eulerto@yahoo.com.br">eulerto@yahoo.com.br</A>)<BR>
<P>A versão mais recente desse documento pode ser vista em <A href=
- "http://www.PostgreSQL.org/docs/faqs/FAQ.html">http://www.PostgreSQL.org/docs/faqs/FAQ.html</A> (EN).<BR>
- <A href="http://www.postgresql.org/docs/faqs/FAQ_brazilian.html">http://www.PostgreSQL.org/docs/faqs/FAQ_brazilian.html</A>
- (pt_BR).</P>
+ "http://www.postgresql.org/files/documentation/faqs/FAQ.html">
+ http://www.postgresql.org/files/documentation/faqs/FAQ.html</A> (EN).<BR>
+ <A href="http://www.postgresql.org/files/documentation/faqs/FAQ_brazilian.html">
+ http://www.postgresql.org/files/documentation/faqs/FAQ_brazilian.html</A> (pt_BR).</P>
<P>Perguntas sobre plataformas específicas são respondidas em <A href=
- "http://www.PostgreSQL.org/docs/index.html">http://www.PostgreSQL.org/docs/index.html</A>.</P>
+ "http://www.postgresql.org/docs/faq/">http://www.postgresql.org/docs/faq/</A>.</P>
<HR>
<H2 align="center">Perguntas Gerais</H2>
<A href="#4.15.1">4.15.1</A>) Como eu crio um campo serial/auto incremento?<BR>
<A href="#4.15.2">4.15.2</A>) Como eu consigo o valor de um campo
<SMALL>SERIAL</SMALL>?<BR>
- <A href="#4.15.3">4.15.3</A>) <I>currval()</I> e
- <I>nextval()</I> não lidam com condição de corrida com outros usuários?<BR>
+ <A href="#4.15.3">4.15.3</A>) <I>currval()</I> não lida com condição de corrida com outros usuários?<BR>
<A href="#4.15.4">4.15.4</A>) 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?<BR>
<A href="#4.16">4.16</A>) O que é um <SMALL>OID</SMALL>? O que é um <SMALL>TID</SMALL>?<BR>
<A href="#4.17">4.17</A>) Qual é o significado de alguns termos utilizados no PostgreSQL?<BR>
<A href="#4.24">4.24</A>) Como eu faço consultas utilizando múltiplos bancos de dados?<BR>
<A href="#4.25">4.25</A>) Como eu retorno múltiplos registros ou colunas de uma função?<BR>
<A href="#4.26">4.26</A>) Por que eu não posso confiar na criação/remoção de tabelas temporárias em funções PL/PgSQL?<BR>
- <A href="#4.28">4.27</A>) Que opções para encriptação estão disponíveis?<BR>
+ <A href="#4.27">4.27</A>) Que opções para encriptação estão disponíveis?<BR>
<H2 align="center">Extendendo o PostgreSQL</H2>
<H4><A name="1.1">1.1</A>) O que é PostgreSQL? Como ele é pronunciado?</H4>
- <P>PostgreSQL é pronunciado <I>Post-Gres-Qui-El</I>. Um arquivo de áudio está
- disponível em http://www.postgresql.org/postgresql.mp3 para aqueles que gostariam
- de ouvir a pronúncia.</P>
+ <P>PostgreSQL é pronunciado <I>Post-Gres-Q-L</I>.</P>
<P>PostgreSQL é um melhoramento do sistema de gerência
de banco de dados POSTGRES (e também é, às vezes, chamado simplesmente de "Postgres"),
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
- <A href="http://www.PostgreSQL.org/docs/faqs/FAQ_DEV.html">
- http://www.PostgreSQL.org/docs/faqs/FAQ_DEV.html</A></P>
+ <A href="http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html">
+ http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html</A></P>
<P>Os autores do PostgreSQL 1.01 foram Andrew Yu e Jolly Chen.
Muitos outros contribuiram para portar, testar, depurar e
baseados no NT tais como Win2000, WinXP e Win2003. Um instalador
está disponível em <a href=
"http://pgfoundry.org/projects/pginstaller">
- http://pgfoundry.org/projects/pginstaller</a>.
+ http://pgfoundry.org/projects/pginstaller</a> Versões do Windows
+ baseados no MSDOS (Win95, Win98, WinMe) podem executar o PostgreSQL utilizando o Cygwin.
<P>Há também um porte para Novell Netware 6 em
- <A href="http://forge.novell.com">http://forge.novell.com</A>.</P>
+ <A href="http://forge.novell.com">http://forge.novell.com</A>
+ e uma versão para OS/2 (eComStation) em <a href=
+ "http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2F">
+ http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2F</a>.</P>
<H4><A name="1.5">1.5</A>) Onde eu posso conseguir o PostgreSQL?</H4>
<A href="http://www.PostgreSQL.org">http://www.PostgreSQL.org</A>
</BLOCKQUOTE>
- <P>Há também um canal de IRC na Freenode e EFNet, canal <I>PostgreSQL</I>. Você pode utilizar o comando Unix <code>irc -c '#PostgreSQL' "$USER" irc.phoenix.net.</code> ou <code>irc -c '#PostgreSQL' "$USER" irc.freenode.net.</code></P>
+ <P>O principal canal de IRC é o <I>#postgresql</I> na Freenode (<I>irc.freenode.net</I>). Para se conectar você pode utilizar o comando Unix <code>irc -c '#postgresql' "$USER" irc.freenode.net</code> ou utilizar qualquer outro cliente de IRC. Um canal hispânico (<I>#postgresql-es</I>) e um francês (<I>#postgresqlfr</I>) também existem na mesma rede. Há também um canal PostgreSQL na EFNet.</P>
<P>Uma lista de empresas que prestam suporte comercial está disponível em <A href=
"http://techdocs.postgresql.org/companies.php">http://techdocs.postgresql.org/companies.php</A>.</P>
<H4><A name="1.7">1.7</A>) Qual é a última versão?</H4>
- <P>A última versão do PostgreSQL é a versão 7.4.5.</P>
+ <P>A última versão do PostgreSQL é a versão 7.4.6.</P>
<P>Nós planejamos lançar versões novas a cada seis ou oito meses.</P>
href=
"http://techdocs.PostgreSQL.org/">http://techdocs.PostgreSQL.org/</A>.</P>
- <P><I>psql</I> tem alguns comandos \d para mostrar informação sobre tipos, operadores, funções, agregações, etc.</P>
+ <P>O programa cliente de linha de comando <I>psql</I> tem alguns comandos \d para mostrar informação sobre tipos, operadores, funções, agregações, etc. Use \? para mostrar os comandos disponíveis.</P>
<P>Nosso web site contém ainda mais documentação.</P>
<H4><A name="1.13">1.13</A>) Como eu informo a existência de um bug?</H4>
- <P>Por favor visite a página da ferramenta que reporta bugs em <A href=
- "http://www.PostgreSQL.org/bugs/bugs.php">http://www.PostgreSQL.org/bugs/bugs.php</A>,
- que irá lher dar as instruções e direções de como submeter um bug.</P>
+ <P>Visite o formulário que reporta bugs do PostgreSQL em <A href=
+ "http://www.postgresql.org/support/submitbug">http://www.postgresql.org/support/submitbug</A>.</P>
<P>Verifique também o nosso ftp <A href=
"ftp://ftp.PostgreSQL.org/pub">ftp://ftp.PostgreSQL.org/pub</A> para
<DT><B>Performance</B></DT>
- <DD>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 <I>Características</I> 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 <A href="http://openacs.org/philosophy/why-not-mysql.html">http://openacs.org/philosophy/why-not-mysql.html</A>. 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.<BR>
+ <DD>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 <I>Características</I> acima. Nós desenvolvemos buscando confiabilidade e características, e nós continuamos a melhorar a performance a cada versão.<BR>
<BR>
</DD>
<P>Infra-estrutura de qualidade é muito importante em um projeto de código aberto. Ela previne descontinuidades que podem facilmente descontinuar o andamento do projeto.</P>
<P>É 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 <A href="http://store.pgsql.com/shopping/">http://store.pgsql.com/shopping/</A> e faça uma doação.</P>
<P>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.</P>
- <HR>
- <P>Se você tiver uma história de sucesso sobre o PostgreSQL, envie-a para nosso website em <A href="http://advocacy.postgresql.org">http://advocacy.postgresql.org</A>.</P>
+ <P>Se você tiver uma história de sucesso sobre o PostgreSQL, envie-a para nossa lista <i>advocacy</i> em <a href="mailto:pgsql-advocacy@postgresql.org">pgsql-advocacy@postgresql.org</a>.</P>
+
+ <HR>
<H2 align="center">Perguntas sobre Clientes</H2>
<P>Sim, há várias interfaces gráficas para PostgreSQL disponíveis.
Entre elas o PgAccess <A href="http://www.pgaccess.org">
- http://www.pgaccess.org</A>), PgAdmin III (<A
+ http://www.pgaccess.org</A>), pgAdmin III (<A
href="http://www.pgadmin.org">http://www.pgadmin.org</A>, RHDB Admin (<A
href="http://sources.redhat.com/rhdb/">http://sources.redhat.com/rhdb/
- </A>) e o Rekall (<A href="http://www.thekompany.com/products/rekall/">
+ </A>), TORA (<a href="http://www.globecom.net/tora/">http://www.globecom.net/tora/</a>,
+ parcialmente comercial) e o Rekall (<A href="http://www.thekompany.com/products/rekall/">
http://www.thekompany.com/products/rekall/</A>, proprietária). Há
também o PhpPgAdmin (<A href="http://phppgadmin.sourceforge.net/">
http://phppgadmin.sourceforge.net/ </A>), uma interface web para
<H4><A name="3.3">3.3</A>) Quando eu tento iniciar o <I>postmaster</I>, eu recebo erros <I>IpcMemoryCreate</I>. Por que?</H4>
- <P>Você 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 <I>postmaster</I>. Muitos sistemas, com o número padrão de buffers e processos, precisam de aproximadamente 1 MB. Veja o <A href="http://www.PostgreSQL.org/docs/view.php?version=current&idoc=1&file=kernel-resources.html">Guia do Administrador do PostgreSQL</A> para mais informação sobre memória compartilhada e semáforos.</P>
+ <P>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 <I>postmaster</I>. Muitos sistemas, com o número padrão de buffers e processos, precisam de aproximadamente 1 MB. Veja a seção <A href="http://www.postgresql.org/docs/current/static/kernel-resources.html">PostgreSQL Administrator's Guide/Server Run-time Environment/Managing Kernel Resources</A> para mais informação sobre memória compartilhada e semáforos.</P>
<H4><A name="3.4">3.4</A>) Quando eu tento iniciar o <I>postmaster</I>, eu recebo erros <I>IpcSemaphoreCreate</I>. Por que?</H4>
<P>Se você está fazendo muitos <SMALL>INSERTs</SMALL>, considere fazê-los em lote utilizando o comando <SMALL>COPY</SMALL>. Isso é mais rápido do que <SMALL>INSERTs</SMALL> individuais. Segundo, sentenças que não estão em um bloco de transação <SMALL>BEGIN WORK/COMMIT</SMALL> 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.</P>
- <P>Há várias opções de ajuste. Você pode desabilitar o <I>fsync()</I> iniciando o <I>postmaster</I> com a opção <I>-o -F</I>. Isso irá impedir que <I>fsync()</I>s enviem os dados para disco após cada transação.</P>
+ <P>Há várias opções de ajuste em <a href="http://www.postgresql.org/docs/current/static/runtime.html">Administration Guide/Server Run-time Environment/Run-time Configuration</a>. Você pode desabilitar o <I>fsync()</I> utilizando a opção <i>fsync</i>. Isso irá impedir que <I>fsync()</I>s enviem os dados para disco após cada transação.</P>
- <P>Você também pode utilizar a opção <I>-B</I> do <I>postmaster</I> 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 <I>postmaster</I> 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.</P>
+ <P>Você pode utilizar a opção <I>shared_buffers</I> 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 <I>postmaster</I> 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.</P>
- <P>Você também pode utilizar a opção <I>-S</I> do backend para aumentar a máxima quantidade de memória utilizada pelo processo servidor para ordenações temporárias. O valor de <I>-S</I> é medido em kilobytes e o padrão é de 512 (ou seja 512K).</P>
+ <P>Você também pode utilizar a opção <I>sort_mem</I> (no PostgreSQL 8.0: <I>work_mem</I>) 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).</P>
<P>Você também pode utilizar o comando <SMALL>CLUSTER</SMALL> para agrupar dados em tabelas para combinar um índice. Veja o manual sobre <SMALL>CLUSTER</SMALL> para mais informação.</P>
<P>Se o <I>postmaster</I> não está sendo executado, você pode executar o núcleo do <I>postgres</I> a partir da linha de comando, e digitar a sua sentença <SMALL>SQL</SMALL> diretamente. Isso é recomendado <B>somente</B> 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 <I>postmaster</I>, 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.</P>
-<P>O programa <I>postgres</I> possue as opções <I>-s, -A</I>, e <I>-t</I> que podem ser muito úteis para depuração e medidas de performance.</P>
+<P>Se o <i>postmaster</i> está sendo executado, inicie o <i>psql</i> em uma janela, e então encontre o <small>PID</small> do processo <i>postgres</i> utilizado pelo <i>psql</i> utilizando <pre>SELECT pg_backend_pid()</pre>. Utilize um depurador para anexar ao <small>PID</small> do <i>postgres</i>. Você pode definir pontos de parada (<i>breakpoints</i>) no depurador e digitar consultas no <i>psql</i>. Se você está depurando a inicialização do <i>postgres</i>, você pode definir PGOPTIONS="-W n" e então iniciar o <i>psql</i>. Isto retardará a inicialização por <i>n</i> segundos então você pode anexar o depurador ao processo, definir quaisquer pontos de parada e continuar pela sequência de inicialização.</p>
+
+<P>Há várias variáveis de configuração do servidor <pre>log_*</pre> que habilitam a exibição de estatísticas que podem ser muito úteis para depuração e medidas de performance.</P>
<P>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 <I>pgsql/data/base/dbname</I>. O arquivo de perfil do cliente será colocado no diretório atual do cliente. O Linux requer uma compilação com <I>-DLINUX_PROFILE</I> para criação dos perfis.</P>
<P>Veja também o arquivo <I>pgsql/src/tutorial/syscat.source</I>. Ele ilustra muitos <SMALL>SELECT</SMALL>s necessários para obter informação das tabelas do sistema de banco de dados.</P>
<H4><A name="4.8">4.8</A>) Minhas consultas estão lentas ou não estão utilizando índices. Por que?</H4>
- Índices não são automaticamente utilizados por toda consulta. Índices só são
+
+ <p>Í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
<I>~*</I> não utilizam índices. Ao invés, utilize índices
funcionais, que são descritos na seção <A href="#4.12">4.12</A>.</LI>
<LI>A localidade padrão <I>C</I> deve ser utilizada durante o
- <I>initdb</I>.</LI>
+ <i>initdb</i> 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 <PRE>text_pattern_ops</PRE> para tais casos que funcionam somente para
+ indexação utilizando <PRE>LIKE</PRE>.
+ </LI>
</UL>
<P>
novo_id = execute("SELECT currval('pessoa_id_seq')");
</PRE>
- Finalmente, você poderia utilizar o <A href="#4.16"><SMALL>OID</SMALL></A>
+ <p>Finalmente, você poderia utilizar o <A href="#4.16"><SMALL>OID</SMALL></A>
retornado da sentença <SMALL>INSERT</SMALL> 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
+ Em Perl, utilizando DBI com o módulo DBD::Pg, o valor
do oid está disponível via <I>$sth->{pg_oid_status}</I> depois de
- <I>$sth->execute()</I>.
+ <I>$sth->execute()</I>.</p>
- <H4><A name="4.15.3">4.15.3</A>) <I>currval()</I> e <I>nextval()</I> não lidam com condição de corrida com outros usuários?</H4>
+ <H4><A name="4.15.3">4.15.3</A>) <I>currval()</I> não lida com condição de corrida com outros usuários?</H4>
<P>Não. <I>currval()</I> retorna o valor atual atribuido pelo seu núcleo (backend), e não por todos os usuários.</P>