Perguntas Frequentes (FAQ) sobre PostgreSQL
- Última atualização: Sáb Out 14 19:08:19 EDT 2006
+ Última atualização: Sex Nov 16 10:53:50 EST 2007
Mantenedor atual: Bruce Momjian (bruce@momjian.us)
Perguntas Gerais
- 1.1) O que é PostgreSQL? Como ele é pronunciado?
+ 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.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
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?
+ 3.6) Qual é o processo de atualização do PostgreSQL?
+ 3.7) Que tipo de hardware eu devo usar?
Perguntas Operacionais
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?
+ 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?
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?
+ reconhecidos em minha consulta? Por que as maiúsculas não são
+ preservadas?
_________________________________________________________________
Perguntas Gerais
- 1.1) O que é PostgreSQL? Como ele é pronunciado?
+ 1.1) O que é PostgreSQL? Como ele é pronunciado? O que é Postgres?
- 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.
+ 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
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/files/documentation/faqs/FAQ_DEV.html
+ 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?
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/.
+ 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.
+ 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.
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
+ 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 (TODO)
+ * É 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:
* 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 (TODO)
+ 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 (TODO) que contém bugs conhecidos, funcionalidades
- ausentes e planos futuros.
+ 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 (TODO)
+ * 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 (TODO)
+ * 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 (TODO) 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.
+ 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.
+ 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://techdocs.PostgreSQL.org/techdocs/bookreviews.php.
+ 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,
1.11) Como eu posso aprender SQL?
Primeiro, considere os livros específicos sobre PostgreSQL mencionados
- acima. Outro é o "Teach Yourself SQL in 21 Days, Second Edition" e
- http://members.tripod.com/er4ebus/sql/index.htm. 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.
+ 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
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.)
+ 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
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://gborg.postgresql.org na seção de
- Drivers/Interfaces ou via busca na Internet.
+ 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?
3.5) Por que eu recebo "Sorry, too many clients" quando eu tento conectar?
- Você atingiu o limite padrão que é de 100 sessões. Você precisa
- aumentar o limite do postmaster, que diz quantos processos servidor
+ 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?
- 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.
+ 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?
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)
+ 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
-------------------------------------------
- 56 bytes por registro
+ 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
- ------------------------ = 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 (arredondadopara cima)
- 146 registros por página
+ ---------------------------- = 633 páginas do banco de dados (arredondadopara cima)
+ 158 registros por página
-685 páginas do banco de dados * 8192 bytes por página = 5.611.520 bytes (5,6MB)
+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.
* 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 é
+ * 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.
+ 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
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?
+ 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
nome TEXT
);
- Veja a página sobre create_sequence no manual para obter informações
- adicionais sobre sequências.
+ 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?
- Uma abordagem é obter o próximo valor SERIAL de uma sequência com a
- função nextval() antes de inserir e então inserir com o valor
- explicitamente. Utilizando o exemplo da tabela em 4.11.1, um exemplo
- em pseudo-linguagem se pareceria com isto:
- novo_id = execute("SELECT nextval('pessoa_id_seq')");
- execute("INSERT INTO pessoa (id, nome) VALUES (novo_id, 'Blaise Pascal')");
-
- Você poderia então ter também o novo valor armazenado em novo_id para
- utilizar em outras consultas (i.e., como uma chave estrangeira da
- tabela pessoa). Note que o nome da SEQUENCE criada automaticamente
- será <tabela>_<coluna>_seq, onde tabela e coluna são os nomes da
- tabela e da coluna SERIAL, respectivamente.
-
- Alternativamente, você poderia obter o valor SERIAL atribuído com a
- função currval() depois de tê-lo inserido por padrão, i.e.,
- execute("INSERT INTO pessoa (nome) VALUES ('Blaise Pascal')");
- novo_id = execute("SELECT currval('pessoa_id_seq')");
+ 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
finalizada. Isso causa intervalos na numeração por causa de transações
abortadas.
- 4.16) O que é um OID? O que é um CTID?
+ 4.12) 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.
+ 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
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 postmaster:
+ antes de iniciar o servidor PostgreSQL:
ulimit -d 262144
limit datasize 256m
Utilize CURRENT_TIMESTAMP:
CREATE TABLE teste (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP);
- 4.23) Como eu faço uma junção externa (outer join)?
+ 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:
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
- naturais (INNER).
+ internas (INNER).
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?
É fácil utilizando funções que retornam conjunto,
- http://techdocs.postgresql.org/guides/SetReturningFunctions.
+ 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?
- 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.
+ 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?
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
+ 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:
+ 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
alink="#0000ff">
<H1>Perguntas Frequentes (FAQ) sobre PostgreSQL</H1>
- <P>Última atualização: Qui Set 27 02:14:24 EDT 2007</P>
+ <P>Última atualização: Sex Nov 16 10:53:50 EST 2007</P>
<P>Mantenedor atual: Bruce Momjian (<A href=
"mailto:bruce@momjian.us">bruce@momjian.us</A>)
<HR>
<H2 align="center">Perguntas Gerais</H2>
- <A href="#item1.1">1.1</A>) O que é PostgreSQL? Como ele é pronunciado?<BR>
+ <A href="#item1.1">1.1</A>) O que é PostgreSQL? Como ele é pronunciado?
+ O que é Postgres?<BR>
<A href="#item1.2">1.2</A>) Quem controla o PostgreSQL?<BR>
<A href="#item1.3">1.3</A>) Qual é a licença do PostgreSQL?<BR>
<A href="#item1.4">1.4</A>) Quais plataformas o PostgreSQL pode ser executado?<BR>
<H2 align="center">Perguntas Gerais</H2>
- <H3 id="item1.1">1.1) O que é PostgreSQL? Como ele é pronunciado?</H3>
+ <H3 id="item1.1">1.1) O que é PostgreSQL? Como ele é pronunciado? O que é Postgres?</H3>
- <P>PostgreSQL é pronunciado <I>Post-Gres-Q-L</I>, mas também pode ser referido apenas como <I>Postgres</I> principalmente em conversações.
+ <P>PostgreSQL é pronunciado <I>Post-Gres-Q-L</I>.
(Para os curiosos que querem saber como se diz "PostgreSQL", um
<a href="http://www.postgresql.org/files/postgresql.mp3">arquivo de áudio</a> está disponível).</P>
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 <A href=
- "http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html">
- http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html</A>
+ "http://www.postgresql.org/docs/faqs.FAQ_DEV.html">
+ http://www.postgresql.org/docs/faqs.FAQ_DEV.html</A>
</P>
+ <P>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'.</P>
+
<H3 id="item1.2">1.2) Quem controla o PostgreSQL?<BR></H3>
<P>Se você está procurando por um mantenedor, comitê central ou empresa
você precisa é se inscrever nas listas de discussão e participar das
discussões. Veja a <a href="http://www.postgresql.org/docs/faqs.FAQ_DEV.html">
FAQ do desenvolvedor</A> para obter informações como se envolver com o
- desenvolvimento do Postgres.</P>
+ desenvolvimento do PostgreSQL.</P>
<H3 id="item1.3">1.3) Qual é a licença do PostgreSQL?</H3>
baseados no NT tais como Win200 SP4, WinXP e Win2003. Um instalador pré-empacotado está
disponível em <a href= "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 Postgres utilizando o Cygwin.</P>
+ (Win95, Win98, WinMe) podem executar o PostgreSQL utilizando o Cygwin.</P>
<p>Há também uma versão para o Novell Netware 6 em
<a href="http://forge.novell.com">http://forge.novell.com</a>
"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
- ver se há uma versão mais recente do Postgres.</P>
+ ver se há uma versão mais recente do PostgreSQL.</P>
<P>Bugs submetidos utilizando o formulário ou informado a qualquer
lista de discussão do PostgreSQL tipicamente gera uma das seguintes
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
+ PostgreSQL é ler as mensagens de log do
<a href="http://www.postgresql.org/developer/sourcecode/">CVS</a>. Até mesmo
as notas de lançamento não listam todas as mudanças feitas no programa.</P>
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 <A href=
- "http://techdocs.postgresql.org/techdocs/bookreviews.php">http://techdocs.postgresql.org/techdocs/bookreviews.php</A>.
- Há também uma coleção de artigos técnicos sbore PostgreSQL em <A href="http://techdocs.postgresql.org/">http://techdocs.postgresql.org/</A>.</P>
+ "http://www.postgresql.org/docs/books/">http://www.postgresql.org/docs/books/</A>.
+ Há também uma coleção de artigos técnicos sbore PostgreSQL em <A href="http://www.postgresql.org/docs/techdocs/">http://www.postgresql.org/docs/techdocs/</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 \?
<H3 id="item1.11">1.11) Como eu posso aprender <SMALL>SQL</SMALL>?</H3>
<P>Primeiro, considere os livros específicos sobre PostgreSQL mencionados
- acima. Outro é o "Teach Yourself SQL in 21 Days, Second Edition" e <A href=
- "http://members.tripod.com/er4ebus/sql/index.htm">http://members.tripod.com/er4ebus/sql/index.htm</A>.
- Muitos de nossos usuários gostam do <I>The Practical SQL Handbook</I>,
+ acima. Muitos de nossos usuários gostam do <I>The Practical SQL Handbook</I>,
Bowman, Judith S., et al., Addison-Wesley. Outros do <I>The
Complete Reference SQL</I>, Groff et al., McGraw-Hill.</P>
<P>Algumas linguagens de programação como <SMALL>PHP</SMALL> incluem uma
interface para PostgreSQL. Interfaces para linguagens como Perl,
<SMALL>TCL</SMALL>, Python e muitas outras estão disponíveis em
- <a href="http://gborg.postgresql.org">http://gborg.postgresql.org</A>
- na seção de <I>Drivers/Interfaces</I> ou via busca na Internet.
+ <a href="http://www.pgfoundry.org">http://www.pgfoundry.org</A>.
</P>
<H3 id="item2.2">2.2) Quais ferramentas estão disponíveis para utilizar o PostgreSQL com páginas Web?</H3>
<DD>Um grande número de configurações que afetam a performance.
Para obter detalhes adicionais, veja <a href=
- "http://www.postgresql.org/docs/current/static/runtime.html">
+ "http://www.postgresql.org/docs/current/static/runtime-config.html">
Administration Guide/Server Run-time Environment/Run-time
Configuration</a> para listagem completa, e para
comentários veja <a href=
<H3 id="item3.5">3.5) Por que eu recebo <I>"Sorry, too many clients"</I> quando eu tento conectar?</H3>
- <P>Você atingiu o limite padrão que é de 100 sessões. Você
- precisa aumentar o limite do <I>postmaster</I>, que diz
+ <P>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 <I>max_connections</I> no <I>postgresql.conf</I> e
reiniciando o <I>postmaster</I>.</P>
-------------------------------------------
52 bytes por registro
- O tamanho de uma página de dados no Postgres é 8192 bytes (8 KB), então:
+ 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)
<LI>Busca que não diferenciam maiúsculas de minúsculas tais como <SMALL>ILIKE</SMALL> e
<I>~*</I> não utilizam índices. Em vez disso, utilize índice de expressão, que
é descrito na seção <a href="#item4.8">4.8</a>.</LI>
- <LI>O idioma padrção <I>C</I> deve ser usando durante o <i>initdb</i>
+ <LI>O idioma padrão <I>C</I> deve ser usando durante o <i>initdb</i>
porque não é possível saber o próximo caracter em idiomas que não sejam o C.
Você pode criar um índice especial <CODE>text_pattern_ops</CODE> para tais casos
- que funcionam somente para indexação com <SMALL>LIKE</SMALL>.
+ que funcionam somente para indexação com <SMALL>LIKE</SMALL>. Também é
+ possível utilizar indexação de busca textual para buscas por palavras.
</LI>
</UL>
);
</PRE>
- Veja a página sobre <I>create_sequence</I> no manual para
- obter informações adicionais sobre sequências.
+ <P>Sequências automaticamente criadas são nomeadas como
+ <<i>tabela</i>>_<<i>colunaserial</i>>_<i>seq</i>, onde
+ <i>tabela</i> e <i>colunaserial</i> são os nomes da tabela e
+ da coluna serial, respectivamente. Veja a página sobre
+ <I>create_sequence</I> no manual para obter informações
+ adicionais sobre sequências.
<H3 id="item4.11.2">4.11.2) Como eu consigo o valor de um campo
<SMALL>SERIAL</SMALL>?</H3>
- <P>Uma abordagem é obter o próximo valor <SMALL>SERIAL</SMALL>
- de uma sequência com a função <I>nextval()</I>
- <I>antes</I> de inserir e então inserir com o valor explicitamente. Utilizando o
- exemplo da tabela em <A href="#item4.11.1">4.11.1</A>, um exemplo em
- pseudo-linguagem se pareceria com isto:</P>
-<PRE>
- novo_id = execute("SELECT nextval('pessoa_id_seq')");
- execute("INSERT INTO pessoa (id, nome) VALUES (novo_id, 'Blaise Pascal')");
-</PRE>
+ <P>A maneira mais simples de obter o próximo valor <SMALL>SERIAL</SMALL>
+ de uma sequência é com <SMALL>RETURNING</SMALL>. Utilizando o
+ exemplo da tabela em <A href="#item4.11.1">4.11.1</A>, ele ficaria assim:
- Você poderia então ter também o novo valor armazenado em
- <CODE>novo_id</CODE> para utilizar em outras consultas (i.e., como uma chave
- estrangeira da tabela <CODE>pessoa</CODE>). Note que o nome da
- <SMALL>SEQUENCE</SMALL> criada automaticamente será
- <<I>tabela</I>>_<<I>coluna</I>>_<I>seq</I>, onde
- <I>tabela</I> e <I>coluna</I> são os nomes da tabela
- e da coluna <SMALL>SERIAL</SMALL>, respectivamente.
-
- <P>Alternativamente, você poderia obter o valor <SMALL>SERIAL</SMALL>
- atribuído com a função <I>currval()</I> <I>depois</I>
- de tê-lo inserido por padrão, i.e.,</P>
<PRE>
- execute("INSERT INTO pessoa (nome) VALUES ('Blaise Pascal')");
- novo_id = execute("SELECT currval('pessoa_id_seq')");
+ INSERT INTO pessoa (nome) VALUES ('Blaise Pascal') RETURNING id;
</PRE>
+ Você também pode chamar <I>nextval()</I> e utilizar o valor no
+ <SMALL>INSERT</SMALL> ou chamar <I>currval()</I> <I>após</I> o
+ <SMALL>INSERT</SMALL>.
+
<H3 id="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>
<H3 id="item4.13">4.13) Por que eu recebo o erro <I>"ERROR: Memory exhausted in AllocSetAlloc()"</I>?</H3>
- <P>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 <I>postmaster</I>:</P>
+ <P>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:</P>
<PRE>
ulimit -d 262144
limit datasize 256m
<H3 id="item4.19">4.19) Por que eu obtenho erros "relation with OID ######
does not exist" ao acessar tabelas temporárias em funções PL/PgSQL?</H3>
- <P>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 <SMALL>EXECUTE</SMALL> para acesso a tabelas temporárias no PL/PgSQL. Isto irá fazer com que a consulta seja avaliada toda vez.</P>
+ <P>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 <SMALL>EXECUTE</SMALL> para acesso a tabelas temporárias no PL/PgSQL. Isto irá fazer com que a consulta seja avaliada toda vez.</P>
+
+ <P>Este problema não ocorre no PostgreSQL 8.3 ou superior.</P>
<H3 id="item4.20">4.20) Quais soluções de replicação estão disponíveis?</H3>
<P>Replicação mestre/escravo permite que um mestre receba consultas de leitura e
escrita, enquanto os escravos só podem aceitar leitura/consultas <SMALL>SELECT</SMALL>.
A solução mais popular de replicação mestre-escravo para PostgreSQL disponível livremente
- é <A href="http://gborg.postgresql.org/project/slony1/projdisplay.php">Slony-I</A>.</P>
+ é <A href="http://main.slony.info">Slony-I</A>.</P>
<P>Replicação com múltiplos mestres permite que consultas leitura/escrita sejam
enviadas para múltiplos computadores replicadores. Esta capacidade também tem
<P>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 <a
- href="http://www.postgresql.org/docs/current/static/sql-syntax.html#SQL-SYNTAX-IDENTIFIERS">
+ href="http://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS">
como especificado</a>, 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.
<LI>Utilizar somente caracteres minúsculos em identificadores</LI>
<LI>Colocar aspas em identificadores ao referenciá-los nas consultas</LI>
</UL>
+
</BODY>
</HTML>