Commit c5156c64 authored by Bruce Momjian's avatar Bruce Momjian

Update Brazilian FAQ.

Euler Taveira de Oliveira
parent a3f20853
Perguntas Frequentes (FAQ) sobre PostgreSQL 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) Mantenedor atual: Bruce Momjian (bruce@momjian.us)
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
Perguntas Gerais 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.2) Quem controla o PostgreSQL?
1.3) Qual é a licença do PostgreSQL? 1.3) Qual é a licença do PostgreSQL?
1.4) Quais plataformas o PostgreSQL pode ser executado? 1.4) Quais plataformas o PostgreSQL pode ser executado?
...@@ -33,6 +33,8 @@ ...@@ -33,6 +33,8 @@
1.12) Como posso submeter uma correção (patch) ou me juntar a equipe 1.12) Como posso submeter uma correção (patch) ou me juntar a equipe
de desenvolvimento? de desenvolvimento?
1.13) Como é o PostgreSQL comparado a outros SGBDs? 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 Perguntas sobre Clientes
...@@ -51,8 +53,8 @@ ...@@ -51,8 +53,8 @@
3.4) Quais características de depuração estão disponíveis? 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 3.5) Por que eu recebo "Sorry, too many clients" quando eu tento
conectar? conectar?
3.6) Qual é o processo de atualização do PostgreSQL? 3.7) Que tipo de 3.6) Qual é o processo de atualização do PostgreSQL?
hardware eu devo usar? 3.7) Que tipo de hardware eu devo usar?
Perguntas Operacionais Perguntas Operacionais
...@@ -74,7 +76,8 @@ ...@@ -74,7 +76,8 @@
expressões regulares sem diferenciar mauúsculas de minúsculas? Como eu expressões regulares sem diferenciar mauúsculas de minúsculas? Como eu
utilizo um índice para buscas sem distinguir maiúsculas de minúsculas? 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 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.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.1) Como eu crio um campo serial/auto incremento?
4.11.2) Como eu consigo o valor de um campo SERIAL? 4.11.2) Como eu consigo o valor de um campo SERIAL?
...@@ -95,16 +98,16 @@ ...@@ -95,16 +98,16 @@
exist" ao acessar tabelas temporárias em funções PL/PgSQL? exist" ao acessar tabelas temporárias em funções PL/PgSQL?
4.20) Quais soluções de replicação estão disponíveis? 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 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 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 PostgreSQL é pronunciado Post-Gres-Q-L. (Para os curiosos que querem
como Postgres. Um arquivo de áudio está disponível em formato MP3 para saber como se diz "PostgreSQL", um arquivo de áudio está disponível).
aqueles que gostariam de ouvir a pronúncia.
O PostgreSQL é um sistema de banco de dados objeto-relacional que tem O PostgreSQL é um sistema de banco de dados objeto-relacional que tem
as características de sistemas de bancos de dados comerciais as características de sistemas de bancos de dados comerciais
...@@ -116,8 +119,12 @@ ...@@ -116,8 +119,12 @@
desenvolvedores voluntários (na sua maioria) espalhados pelo mundo e desenvolvedores voluntários (na sua maioria) espalhados pelo mundo e
que se comunicam via Internet. É um projeto da comunidade e não é que se comunicam via Internet. É um projeto da comunidade e não é
controlado por nenhuma empresa. Para se envolver, veja a FAQ do controlado por nenhuma empresa. Para se envolver, veja a FAQ do
desenvolvedor em desenvolvedor em http://www.postgresql.org/docs/faqs.FAQ_DEV.html
http://www.postgresql.org/files/documentation/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.2) Quem controla o PostgreSQL?
...@@ -189,11 +196,11 @@ ...@@ -189,11 +196,11 @@
1.5) Onde eu posso conseguir o PostgreSQL? 1.5) Onde eu posso conseguir o PostgreSQL?
Via navegador web, utilize http://www.postgresql.org/ftp/ e via ftp, 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? 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 Nós planejamos lançar versões novas a cada ano com versões corretivas
em alguns meses. em alguns meses.
...@@ -220,14 +227,14 @@ ...@@ -220,14 +227,14 @@
Visite o formulário que reporta bugs do PostgreSQL em Visite o formulário que reporta bugs do PostgreSQL em
http://www.postgresql.org/support/submitbug. 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. há uma versão mais recente do PostgreSQL.
Bugs submetidos utilizando o formulário ou informado a qualquer lista Bugs submetidos utilizando o formulário ou informado a qualquer lista
de discussão do PostgreSQL tipicamente gera uma das seguintes de discussão do PostgreSQL tipicamente gera uma das seguintes
respostas: respostas:
* Não é um bug e o porquê * 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 na versão atual
* O bug foi corrigido mas não foi empacotado em um versão oficial * O bug foi corrigido mas não foi empacotado em um versão oficial
* Um pedido foi feito para obter informações detalhadas: * Um pedido foi feito para obter informações detalhadas:
...@@ -239,48 +246,50 @@ ...@@ -239,48 +246,50 @@
* O bug é novo. O seguinte pode ocorrer: * O bug é novo. O seguinte pode ocorrer:
+ Uma correção é criada e será incluída na próxima versão + Uma correção é criada e será incluída na próxima versão
+ O bug não pode ser corrigido imediatamente e é adicionado a + 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 1.9) Como eu posso saber quais são os bugs conhecidos ou funcionalidades
ausentes? ausentes?
O PostgreSQL suporta um subconjunto extendido do SQL:2003. Veja nossa O PostgreSQL suporta um subconjunto extendido do SQL:2003. Veja nossa
lista de AFAZERES (TODO) que contém bugs conhecidos, funcionalidades lista de AFAZERES que contém bugs conhecidos, funcionalidades ausentes
ausentes e planos futuros. e planos futuros.
Uma solicitação de funcionalidade geralmente resulta em uma das Uma solicitação de funcionalidade geralmente resulta em uma das
seguintes respostas: 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: * A funcionalidade não é desejável porque:
+ Ela duplica uma funcionalidade existente que já segue o + Ela duplica uma funcionalidade existente que já segue o
padrão SQL padrão SQL
+ A funcionalidade aumentará a complexidade do código mas + A funcionalidade aumentará a complexidade do código mas
adicionará pouco benefício adicionará pouco benefício
+ A funcionalidade será insegura ou não-confiável + 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 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 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 de AFAZERES atualizada. Na prática, bugs não duram muito no programa;
programa; e bugs que afetam uma grande quantidade de usuários são e bugs que afetam uma grande quantidade de usuários são corrigidos
corrigidos rapidamente. O único lugar para encontrar todas as rapidamente. O único lugar para encontrar todas as mudanças, melhorias
mudanças, melhorias e correções em uma versão do PostgreSQL é ler as e correções em uma versão do PostgreSQL é ler as mensagens de log do
mensagens de log do CVS. Até mesmo as notas de lançamento não listam CVS. Até mesmo as notas de lançamento não listam todas as mudanças
todas as mudanças feitas no programa. feitas no programa.
1.10) Que documentação está disponível? 1.10) Que documentação está disponível?
O PostgreSQL inclui vasta documentação, incluindo um manual extenso, O PostgreSQL inclui vasta documentação, incluindo um manual extenso,
páginas de manuais (man pages) e alguns exemplos teste. Veja o páginas de manuais (man pages) e alguns exemplos teste. Veja o
diretório /doc. Você também pode pesquisar os manuais online em 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 Há dois livros sobre PostgreSQL disponíveis online em
http://www.postgresql.org/docs/books/awbook.html e http://www.postgresql.org/docs/books/awbook.html e
http://www.commandprompt.com/ppbook/. Há uma lista de livros sobre http://www.commandprompt.com/ppbook/. Há uma lista de livros sobre
PostgreSQL disponíveis para compra. Um dos mais populares é o do Korry 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 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 O programa cliente de linha de comando psql tem alguns comandos \d
para mostrar informações sobre tipos, operadores, funções, agregações, para mostrar informações sobre tipos, operadores, funções, agregações,
...@@ -291,11 +300,9 @@ ...@@ -291,11 +300,9 @@
1.11) Como eu posso aprender SQL? 1.11) Como eu posso aprender SQL?
Primeiro, considere os livros específicos sobre PostgreSQL mencionados Primeiro, considere os livros específicos sobre PostgreSQL mencionados
acima. Outro é o "Teach Yourself SQL in 21 Days, Second Edition" e acima. Muitos de nossos usuários gostam do The Practical SQL Handbook,
http://members.tripod.com/er4ebus/sql/index.htm. Muitos de nossos Bowman, Judith S., et al., Addison-Wesley. Outros do The Complete
usuários gostam do The Practical SQL Handbook, Bowman, Judith S., et Reference SQL, Groff et al., McGraw-Hill.
al., Addison-Wesley. Outros do The Complete Reference SQL, Groff et
al., McGraw-Hill.
Há também bons tutoriais disponíveis online: Há também bons tutoriais disponíveis online:
* http://www.intermedia.net/support/sql/sqltut.shtm * http://www.intermedia.net/support/sql/sqltut.shtm
...@@ -347,13 +354,23 @@ ...@@ -347,13 +354,23 @@
manuais e o código fonte faz com que o suporte do PostgreSQL manuais e o código fonte faz com que o suporte do PostgreSQL
seja superior ao de outros SGBDs. Há suporte comercial por seja superior ao de outros SGBDs. Há suporte comercial por
incidente disponíveis para aqueles que precisam de um. (Veja incidente disponíveis para aqueles que precisam de um. (Veja
seção 1.7 da FAQ.) seção 1.7 da FAQ).
Preço Preço
Nós somos livres para uso dele tanto comercial quanto não Nós somos livres para uso dele tanto comercial quanto não
comercial. Você pode adicionar nosso código ao seu produto sem comercial. Você pode adicionar nosso código ao seu produto sem
limitações, exceto aquelas descritas na nossa licença BSD limitações, exceto aquelas descritas na nossa licença BSD
mencionada acima. 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 Perguntas sobre Clientes
...@@ -367,8 +384,7 @@ ...@@ -367,8 +384,7 @@
Algumas linguagens de programação como PHP incluem uma interface para Algumas linguagens de programação como PHP incluem uma interface para
PostgreSQL. Interfaces para linguagens como Perl, TCL, Python e muitas PostgreSQL. Interfaces para linguagens como Perl, TCL, Python e muitas
outras estão disponíveis em http://gborg.postgresql.org na seção de outras estão disponíveis em http://www.pgfoundry.org.
Drivers/Interfaces ou via busca na Internet.
2.2) Quais ferramentas estão disponíveis para utilizar o PostgreSQL com 2.2) Quais ferramentas estão disponíveis para utilizar o PostgreSQL com
páginas Web? páginas Web?
...@@ -450,29 +466,17 @@ ...@@ -450,29 +466,17 @@
3.5) Por que eu recebo "Sorry, too many clients" quando eu tento conectar? 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 Você atingiu o limite padrão de 100 sessões. Você precisa aumentar o
aumentar o limite do postmaster, que diz quantos processos servidor limite do servidor PostgreSQL, que diz quantos processos servidor
concorrentes ele pode iniciar, alterando o valor max_connections no concorrentes ele pode iniciar, alterando o valor max_connections no
postgresql.conf e reiniciando o postmaster. postgresql.conf e reiniciando o postmaster.
3.6) Qual é o processo de atualização do PostgreSQL? 3.6) Qual é o processo de atualização do PostgreSQL?
O time do PostgreSQL faz somente pequenas mudanças entre versões Veja http://www.postgresql.org/support/versioning para discussão geral
corretivas, então atualizar da versão 7.4.8 para 7.4.9 não requer uma sobre atualizações e
exportação e uma importação; basta para o servidor de banco de dados, http://www.postgresql.org/docs/current/static/install-upgrading.html
instalar os binários atualizados e reiniciar o servidor. para instruções específicas.
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? 3.7) Que tipo de hardware eu devo usar?
...@@ -585,24 +589,24 @@ ...@@ -585,24 +589,24 @@
inteiro e uma descrição em cada linha. Suponha que o tamanho médio da 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 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 arquivo do banco de dados PostgreSQL que contém esses dados pode ser
estimado em 5,6 MB: estimado em 5,2 MB:
28 bytes: cada cabeçalho de registro (aproximadamente) 24 bytes: cada cabeçalho de registro (aproximadamente)
24 bytes: um campo int e um campo texto 24 bytes: um campo int e um campo texto
+ 4 bytes: ponteiro na página para a tupla + 4 bytes: ponteiro na página para a tupla
------------------------------------------- -------------------------------------------
56 bytes por registro 52 bytes por registro
O tamanho de uma página de dados no PostgreSQL é 8192 bytes (8 KB), então: O tamanho de uma página de dados no PostgreSQL é 8192 bytes (8 KB), então:
8192 bytes por página 8192 bytes por página
------------------------ = 146 registros por página do banco de dados (arredondado para baixo) ------------------------ = 158 registros por página do banco de dados (arredondado para baixo)
56 bytes por registro 52 bytes por registro
100000 registros de dados 100000 registros de dados
---------------------------- = 685 páginas do banco de dados (arredondadopara cima) ---------------------------- = 633 páginas do banco de dados (arredondadopara cima)
146 registros por página 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 Índices não requerem muito espaço, mas contém dados que foram
indexados, então eles podem ocupar algum espaço. indexados, então eles podem ocupar algum espaço.
...@@ -650,10 +654,12 @@ ...@@ -650,10 +654,12 @@
* Busca que não diferenciam maiúsculas de minúsculas tais como ILIKE * Busca que não diferenciam maiúsculas de minúsculas tais como ILIKE
e ~* não utilizam índices. Em vez disso, utilize índice de e ~* não utilizam índices. Em vez disso, utilize índice de
expressão, que é descrito na seção 4.8. 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. 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 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 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 utilizados a menos que os tipos de dados correspondam aos tipos de
...@@ -690,13 +696,18 @@ ...@@ -690,13 +696,18 @@
utilize uma restrição CHECK ou um gatilho. utilize uma restrição CHECK ou um gatilho.
4.9) Em uma consulta, como eu detecto se um campo é NULL? Como eu posso 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: Você testa a coluna com IS NULL e IS NOT NULL, como a seguir:
SELECT * SELECT *
FROM tab FROM tab
WHERE col IS NULL; 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 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 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 ordenadas acima das coisas que são falso, então a consulta a seguir
...@@ -754,29 +765,22 @@ ...@@ -754,29 +765,22 @@
nome TEXT nome TEXT
); );
Veja a página sobre create_sequence no manual para obter informações Sequências automaticamente criadas são nomeadas como
adicionais sobre sequências. <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? 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 A maneira mais simples de obter o próximo valor SERIAL de uma
função nextval() antes de inserir e então inserir com o valor sequência é com RETURNING. Utilizando o exemplo da tabela em 4.11.1,
explicitamente. Utilizando o exemplo da tabela em 4.11.1, um exemplo ele ficaria assim:
em pseudo-linguagem se pareceria com isto: INSERT INTO pessoa (nome) VALUES ('Blaise Pascal') RETURNING id;
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')");
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? 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 Não. currval() retorna o valor atual atribuido pela sua sessão, e não
...@@ -791,14 +795,13 @@ ...@@ -791,14 +795,13 @@
finalizada. Isso causa intervalos na numeração por causa de transações finalizada. Isso causa intervalos na numeração por causa de transações
abortadas. 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 Se uma tabela é criada com WITH OIDS, cada registro recebe um OID
que seja criado com WITHOUT OIDS. OIDs são automaticamente atribuídos único. OIDs são automaticamente atribuídos como inteiros de 4 bytes
como inteiros de 4 bytes que são únicos ao longo de toda instalação. que são únicos ao longo de toda instalação. Contudo, eles são
Contudo, eles são limitados em 4 bilhões, e então os OIDs começam a limitados em 4 bilhões e, então, os OIDs começam a ser duplicados. O
ser duplicados. O PostgreSQL utiliza OIDs para ligar as tabelas do PostgreSQL utiliza OIDs para ligar as tabelas do sistema.
sistema.
Para numerar registros nas tabelas do usuários, é melhor utilizar 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 SERIAL ao invés de OIDs porque sequências SERIAL são únicas somente em
...@@ -814,7 +817,7 @@ ...@@ -814,7 +817,7 @@
Você provavelmente está sem memória virtual no seu sistema, ou o seu 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 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 ulimit -d 262144
limit datasize 256m limit datasize 256m
...@@ -834,7 +837,7 @@ ...@@ -834,7 +837,7 @@
Utilize CURRENT_TIMESTAMP: Utilize CURRENT_TIMESTAMP:
CREATE TABLE teste (x int, modtime timestamp DEFAULT 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 PostgreSQL suporta junções externas utilizando a sintaxe padrão do
SQL. Aqui temos dois exemplos: SQL. Aqui temos dois exemplos:
...@@ -852,7 +855,7 @@ ...@@ -852,7 +855,7 @@
retornaria os registros combinados mais todos os registros não retornaria os registros combinados mais todos os registros não
combinados de t1 e t2. A palavra OUTER é opcional e é assumida nas 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 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.17) Como eu faço consultas utilizando múltiplos bancos de dados?
...@@ -869,18 +872,20 @@ ...@@ -869,18 +872,20 @@
4.18) Como eu retorno múltiplos registros ou colunas de uma função? 4.18) Como eu retorno múltiplos registros ou colunas de uma função?
É fácil utilizando funções que retornam conjunto, É 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 4.19) Por que eu obtenho erros "relation with OID ###### does not exist" ao
acessar tabelas temporárias em funções PL/PgSQL? acessar tabelas temporárias em funções PL/PgSQL?
PL/PgSQL armazena o conteúdo da função, e o efeito indesejado é que se Em versões do PostgreSQL < 8.3, PL/PgSQL armazena o conteúdo da
uma função PL/PgSQL acessa uma tabela temporária, e aquela tabela é função, e o efeito indesejado é que se uma função PL/PgSQL acessa uma
removida e criada novamente, e a função é chamada novamente, a função tabela temporária, e aquela tabela é removida e criada novamente, e a
irá falhar porque o conteúdo armazenado da função ainda apontará para função é chamada novamente, a função irá falhar porque o conteúdo
a tabela temporária antiga. A solução é utilizar o EXECUTE para acesso armazenado da função ainda apontará para a tabela temporária antiga. A
a tabelas temporárias no PL/PgSQL. Isto irá fazer com que a consulta solução é utilizar o EXECUTE para acesso a tabelas temporárias no
seja avaliada toda vez. 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? 4.20) Quais soluções de replicação estão disponíveis?
...@@ -895,22 +900,23 @@ ...@@ -895,22 +900,23 @@
Replicação com múltiplos mestres permite que consultas leitura/escrita Replicação com múltiplos mestres permite que consultas leitura/escrita
sejam enviadas para múltiplos computadores replicadores. Esta sejam enviadas para múltiplos computadores replicadores. Esta
capacidade também tem um sério impacto na performance por causa da 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. é a solução mais popular disponível livremente para PostgreSQL.
Há também soluções de replicação comerciais e baseadas em hardware Há também soluções de replicação comerciais e baseadas em hardware
disponíveis que suportam uma variedade de modelos de replicação. 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 4.21) Por que os nomes de minhas tabelas e colunas não são reconhecidos em
minha consulta? minha consulta? Por que as maiúsculas não são preservadas?
O caso mais comum é o uso de aspas ao redor dos nomes da tabela ou A causa mais comum de nomes desconhecidos é o uso de aspas ao redor
coluna durante a criação da tabela. Ao utilizar aspas, nomes de tabela dos nomes da tabela ou coluna durante a criação da tabela. Ao utilizar
e coluna (chamados de identificadores) são armazenados como aspas, nomes de tabela e coluna (chamados de identificadores) são
especificado, significando que você deve utilizar aspas quando se armazenados como especificado, significando que você deve utilizar
referir aos nomes na consulta. Algumas interfaces, como pgAdmin, aspas quando se referir aos nomes na consulta. Algumas interfaces,
automaticamente coloca aspas nos identificadores durante a criação da como pgAdmin, automaticamente colocam aspas nos identificadores
tabela. Então, para identificadores serem reconhecidos, você deve: durante a criação da tabela. Então, para identificadores serem
reconhecidos, você deve:
* Evitar colocar aspas no identificador ao criar tabelas * Evitar colocar aspas no identificador ao criar tabelas
* Utilizar somente caracteres minúsculos em identificadores * Utilizar somente caracteres minúsculos em identificadores
* Colocar aspas em identificadores ao referenciá-los nas consultas * Colocar aspas em identificadores ao referenciá-los nas consultas
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
alink="#0000ff"> alink="#0000ff">
<H1>Perguntas Frequentes (FAQ) sobre PostgreSQL</H1> <H1>Perguntas Frequentes (FAQ) sobre PostgreSQL</H1>
<P>&Uacute;ltima atualiza&ccedil;&atilde;o: Qui Set 27 02:14:24 EDT 2007</P> <P>&Uacute;ltima atualiza&ccedil;&atilde;o: Sex Nov 16 10:53:50 EST 2007</P>
<P>Mantenedor atual: Bruce Momjian (<A href= <P>Mantenedor atual: Bruce Momjian (<A href=
"mailto:bruce@momjian.us">bruce@momjian.us</A>) "mailto:bruce@momjian.us">bruce@momjian.us</A>)
...@@ -30,7 +30,8 @@ ...@@ -30,7 +30,8 @@
<HR> <HR>
<H2 align="center">Perguntas Gerais</H2> <H2 align="center">Perguntas Gerais</H2>
<A href="#item1.1">1.1</A>) O que &eacute; PostgreSQL? Como ele &eacute; pronunciado?<BR> <A href="#item1.1">1.1</A>) O que &eacute; PostgreSQL? Como ele &eacute; pronunciado?
O que &eacute; Postgres?<BR>
<A href="#item1.2">1.2</A>) Quem controla o PostgreSQL?<BR> <A href="#item1.2">1.2</A>) Quem controla o PostgreSQL?<BR>
<A href="#item1.3">1.3</A>) Qual &eacute; a licen&ccedil;a do PostgreSQL?<BR> <A href="#item1.3">1.3</A>) Qual &eacute; a licen&ccedil;a do PostgreSQL?<BR>
<A href="#item1.4">1.4</A>) Quais plataformas o PostgreSQL pode ser executado?<BR> <A href="#item1.4">1.4</A>) Quais plataformas o PostgreSQL pode ser executado?<BR>
...@@ -96,9 +97,9 @@ ...@@ -96,9 +97,9 @@
<H2 align="center">Perguntas Gerais</H2> <H2 align="center">Perguntas Gerais</H2>
<H3 id="item1.1">1.1) O que &eacute; PostgreSQL? Como ele &eacute; pronunciado?</H3> <H3 id="item1.1">1.1) O que &eacute; PostgreSQL? Como ele &eacute; pronunciado? O que &eacute; Postgres?</H3>
<P>PostgreSQL &eacute; pronunciado <I>Post-Gres-Q-L</I>, mas tamb&eacute;m pode ser referido apenas como <I>Postgres</I> principalmente em conversa&ccedil;&otilde;es. <P>PostgreSQL &eacute; pronunciado <I>Post-Gres-Q-L</I>.
(Para os curiosos que querem saber como se diz "PostgreSQL", um (Para os curiosos que querem saber como se diz "PostgreSQL", um
<a href="http://www.postgresql.org/files/postgresql.mp3">arquivo de &aacute;udio</a> est&aacute; dispon&iacute;vel).</P> <a href="http://www.postgresql.org/files/postgresql.mp3">arquivo de &aacute;udio</a> est&aacute; dispon&iacute;vel).</P>
...@@ -111,10 +112,14 @@ ...@@ -111,10 +112,14 @@
volunt&aacute;rios (na sua maioria) espalhados pelo mundo e que se comunicam via volunt&aacute;rios (na sua maioria) espalhados pelo mundo e que se comunicam via
Internet. &Eacute; um projeto da comunidade e n&atilde;o &eacute; controlado por nenhuma Internet. &Eacute; um projeto da comunidade e n&atilde;o &eacute; controlado por nenhuma
empresa. Para se envolver, veja a FAQ do desenvolvedor em <A href= 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/docs/faqs.FAQ_DEV.html">
http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html</A> http://www.postgresql.org/docs/faqs.FAQ_DEV.html</A>
</P> </P>
<P>Postgres &eacute; um apelido para o PostgreSQL amplamente utilizado. Era o nome original do
projeto em Berkeley e dentre os outros apelidos &eacute; o preferido. Se voc&ecirc; acha
'PostgreSQL' dif&iacute;cil de pronunciar, diga apenas 'Postgres'.</P>
<H3 id="item1.2">1.2) Quem controla o PostgreSQL?<BR></H3> <H3 id="item1.2">1.2) Quem controla o PostgreSQL?<BR></H3>
<P>Se voc&ecirc; est&aacute; procurando por um mantenedor, comit&ecirc; central ou empresa <P>Se voc&ecirc; est&aacute; procurando por um mantenedor, comit&ecirc; central ou empresa
...@@ -125,7 +130,7 @@ ...@@ -125,7 +130,7 @@
voc&ecirc; precisa &eacute; se inscrever nas listas de discuss&atilde;o e participar das voc&ecirc; precisa &eacute; se inscrever nas listas de discuss&atilde;o e participar das
discuss&otilde;es. Veja a <a href="http://www.postgresql.org/docs/faqs.FAQ_DEV.html"> discuss&otilde;es. Veja a <a href="http://www.postgresql.org/docs/faqs.FAQ_DEV.html">
FAQ do desenvolvedor</A> para obter informa&ccedil;&otilde;es como se envolver com o FAQ do desenvolvedor</A> para obter informa&ccedil;&otilde;es como se envolver com o
desenvolvimento do Postgres.</P> desenvolvimento do PostgreSQL.</P>
<H3 id="item1.3">1.3) Qual &eacute; a licen&ccedil;a do PostgreSQL?</H3> <H3 id="item1.3">1.3) Qual &eacute; a licen&ccedil;a do PostgreSQL?</H3>
...@@ -169,7 +174,7 @@ ...@@ -169,7 +174,7 @@
baseados no NT tais como Win200 SP4, WinXP e Win2003. Um instalador pr&eacute;-empacotado est&aacute; baseados no NT tais como Win200 SP4, WinXP e Win2003. Um instalador pr&eacute;-empacotado est&aacute;
dispon&iacute;vel em <a href= "http://pgfoundry.org/projects/pginstaller"> dispon&iacute;vel em <a href= "http://pgfoundry.org/projects/pginstaller">
http://pgfoundry.org/projects/pginstaller</a>. Vers&otilde;es do Windows baseadas no MS-DOS http://pgfoundry.org/projects/pginstaller</a>. Vers&otilde;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&aacute; tamb&eacute;m uma vers&atilde;o para o Novell Netware 6 em <p>H&aacute; tamb&eacute;m uma vers&atilde;o para o Novell Netware 6 em
<a href="http://forge.novell.com">http://forge.novell.com</a> <a href="http://forge.novell.com">http://forge.novell.com</a>
...@@ -212,7 +217,7 @@ ...@@ -212,7 +217,7 @@
"http://www.postgresql.org/support/submitbug">http://www.postgresql.org/support/submitbug</A>.</P> "http://www.postgresql.org/support/submitbug">http://www.postgresql.org/support/submitbug</A>.</P>
<P>Verifique tamb&eacute;m o nosso ftp <A href= <P>Verifique tamb&eacute;m o nosso ftp <A href=
"ftp://ftp.postgresql.org/pub">ftp://ftp.postgresql.org/pub</A> para "ftp://ftp.postgresql.org/pub">ftp://ftp.postgresql.org/pub</A> para
ver se h&aacute; uma vers&atilde;o mais recente do Postgres.</P> ver se h&aacute; uma vers&atilde;o mais recente do PostgreSQL.</P>
<P>Bugs submetidos utilizando o formul&aacute;rio ou informado a qualquer <P>Bugs submetidos utilizando o formul&aacute;rio ou informado a qualquer
lista de discuss&atilde;o do PostgreSQL tipicamente gera uma das seguintes lista de discuss&atilde;o do PostgreSQL tipicamente gera uma das seguintes
...@@ -271,7 +276,7 @@ ...@@ -271,7 +276,7 @@
atualizada. Na pr&aacute;tica, bugs n&atilde;o duram muito no programa; e bugs que afetam atualizada. Na pr&aacute;tica, bugs n&atilde;o duram muito no programa; e bugs que afetam
uma grande quantidade de usu&aacute;rios s&atilde;o corrigidos rapidamente. O &uacute;nico lugar uma grande quantidade de usu&aacute;rios s&atilde;o corrigidos rapidamente. O &uacute;nico lugar
para encontrar todas as mudan&ccedil;as, melhorias e corre&ccedil;&otilde;es em uma vers&atilde;o do para encontrar todas as mudan&ccedil;as, melhorias e corre&ccedil;&otilde;es em uma vers&atilde;o do
Postgres &eacute; ler as mensagens de log do PostgreSQL &eacute; ler as mensagens de log do
<a href="http://www.postgresql.org/developer/sourcecode/">CVS</a>. At&eacute; mesmo <a href="http://www.postgresql.org/developer/sourcecode/">CVS</a>. At&eacute; mesmo
as notas de lan&ccedil;amento n&atilde;o listam todas as mudan&ccedil;as feitas no programa.</P> as notas de lan&ccedil;amento n&atilde;o listam todas as mudan&ccedil;as feitas no programa.</P>
...@@ -290,8 +295,8 @@ ...@@ -290,8 +295,8 @@
H&aacute; uma lista de livros sobre PostgreSQL dispon&iacute;veis para compra. Um dos mais H&aacute; uma lista de livros sobre PostgreSQL dispon&iacute;veis para compra. Um dos mais
populares &eacute; o do Korry Douglas. Uma lista de an&aacute;lise sobre os livros pode ser populares &eacute; o do Korry Douglas. Uma lista de an&aacute;lise sobre os livros pode ser
encontrada em <A href= encontrada em <A href=
"http://techdocs.postgresql.org/techdocs/bookreviews.php">http://techdocs.postgresql.org/techdocs/bookreviews.php</A>. "http://www.postgresql.org/docs/books/">http://www.postgresql.org/docs/books/</A>.
H&aacute; tamb&eacute;m uma cole&ccedil;&atilde;o de artigos t&eacute;cnicos sbore PostgreSQL em <A href="http://techdocs.postgresql.org/">http://techdocs.postgresql.org/</A>.</P> H&aacute; tamb&eacute;m uma cole&ccedil;&atilde;o de artigos t&eacute;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 <P>O programa cliente de linha de comando <I>psql</I> tem alguns comandos \d para
mostrar informa&ccedil;&otilde;es sobre tipos, operadores, fun&ccedil;&otilde;es, agrega&ccedil;&otilde;es, etc. - utilize \? mostrar informa&ccedil;&otilde;es sobre tipos, operadores, fun&ccedil;&otilde;es, agrega&ccedil;&otilde;es, etc. - utilize \?
...@@ -302,9 +307,7 @@ ...@@ -302,9 +307,7 @@
<H3 id="item1.11">1.11) Como eu posso aprender <SMALL>SQL</SMALL>?</H3> <H3 id="item1.11">1.11) Como eu posso aprender <SMALL>SQL</SMALL>?</H3>
<P>Primeiro, considere os livros espec&iacute;ficos sobre PostgreSQL mencionados <P>Primeiro, considere os livros espec&iacute;ficos sobre PostgreSQL mencionados
acima. Outro &eacute; o "Teach Yourself SQL in 21 Days, Second Edition" e <A href= acima. Muitos de nossos usu&aacute;rios gostam do <I>The Practical SQL Handbook</I>,
"http://members.tripod.com/er4ebus/sql/index.htm">http://members.tripod.com/er4ebus/sql/index.htm</A>.
Muitos de nossos usu&aacute;rios gostam do <I>The Practical SQL Handbook</I>,
Bowman, Judith S., et al., Addison-Wesley. Outros do <I>The Bowman, Judith S., et al., Addison-Wesley. Outros do <I>The
Complete Reference SQL</I>, Groff et al., McGraw-Hill.</P> Complete Reference SQL</I>, Groff et al., McGraw-Hill.</P>
...@@ -382,8 +385,7 @@ ...@@ -382,8 +385,7 @@
<P>Algumas linguagens de programa&ccedil;&atilde;o como <SMALL>PHP</SMALL> incluem uma <P>Algumas linguagens de programa&ccedil;&atilde;o como <SMALL>PHP</SMALL> incluem uma
interface para PostgreSQL. Interfaces para linguagens como Perl, interface para PostgreSQL. Interfaces para linguagens como Perl,
<SMALL>TCL</SMALL>, Python e muitas outras est&atilde;o dispon&iacute;veis em <SMALL>TCL</SMALL>, Python e muitas outras est&atilde;o dispon&iacute;veis em
<a href="http://gborg.postgresql.org">http://gborg.postgresql.org</A> <a href="http://www.pgfoundry.org">http://www.pgfoundry.org</A>.
na se&ccedil;&atilde;o de <I>Drivers/Interfaces</I> ou via busca na Internet.
</P> </P>
<H3 id="item2.2">2.2) Quais ferramentas est&atilde;o dispon&iacute;veis para utilizar o PostgreSQL com p&aacute;ginas Web?</H3> <H3 id="item2.2">2.2) Quais ferramentas est&atilde;o dispon&iacute;veis para utilizar o PostgreSQL com p&aacute;ginas Web?</H3>
...@@ -447,7 +449,7 @@ ...@@ -447,7 +449,7 @@
<DD>Um grande n&uacute;mero de configura&ccedil;&otilde;es que afetam a performance. <DD>Um grande n&uacute;mero de configura&ccedil;&otilde;es que afetam a performance.
Para obter detalhes adicionais, veja <a href= 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 Administration Guide/Server Run-time Environment/Run-time
Configuration</a> para listagem completa, e para Configuration</a> para listagem completa, e para
coment&aacute;rios veja <a href= coment&aacute;rios veja <a href=
...@@ -479,8 +481,8 @@ ...@@ -479,8 +481,8 @@
<H3 id="item3.5">3.5) Por que eu recebo <I>"Sorry, too many clients"</I> quando eu tento conectar?</H3> <H3 id="item3.5">3.5) Por que eu recebo <I>"Sorry, too many clients"</I> quando eu tento conectar?</H3>
<P>Voc&ecirc; atingiu o limite padr&atilde;o que &eacute; de 100 sess&otilde;es. Voc&ecirc; <P>Voc&ecirc; atingiu o limite padr&atilde;o de 100 sess&otilde;es. Voc&ecirc;
precisa aumentar o limite do <I>postmaster</I>, que diz precisa aumentar o limite do servidor PostgreSQL, que diz
quantos processos servidor concorrentes ele pode iniciar, alterando quantos processos servidor concorrentes ele pode iniciar, alterando
o valor <I>max_connections</I> no <I>postgresql.conf</I> e o valor <I>max_connections</I> no <I>postgresql.conf</I> e
reiniciando o <I>postmaster</I>.</P> reiniciando o <I>postmaster</I>.</P>
...@@ -603,7 +605,7 @@ ...@@ -603,7 +605,7 @@
------------------------------------------- -------------------------------------------
52 bytes por registro 52 bytes por registro
O tamanho de uma p&aacute;gina de dados no Postgres &eacute; 8192 bytes (8 KB), ent&atilde;o: O tamanho de uma p&aacute;gina de dados no PostgreSQL &eacute; 8192 bytes (8 KB), ent&atilde;o:
8192 bytes por p&aacute;gina 8192 bytes por p&aacute;gina
------------------------ = 158 registros por p&aacute;gina do banco de dados (arredondado para baixo) ------------------------ = 158 registros por p&aacute;gina do banco de dados (arredondado para baixo)
...@@ -664,10 +666,11 @@ ...@@ -664,10 +666,11 @@
<LI>Busca que n&atilde;o diferenciam mai&uacute;sculas de min&uacute;sculas tais como <SMALL>ILIKE</SMALL> e <LI>Busca que n&atilde;o diferenciam mai&uacute;sculas de min&uacute;sculas tais como <SMALL>ILIKE</SMALL> e
<I>~*</I> n&atilde;o utilizam &iacute;ndices. Em vez disso, utilize &iacute;ndice de express&atilde;o, que <I>~*</I> n&atilde;o utilizam &iacute;ndices. Em vez disso, utilize &iacute;ndice de express&atilde;o, que
&eacute; descrito na se&ccedil;&atilde;o <a href="#item4.8">4.8</a>.</LI> &eacute; descrito na se&ccedil;&atilde;o <a href="#item4.8">4.8</a>.</LI>
<LI>O idioma padr&ccedil;&atilde;o <I>C</I> deve ser usando durante o <i>initdb</i> <LI>O idioma padr&atilde;o <I>C</I> deve ser usando durante o <i>initdb</i>
porque n&atilde;o &eacute; poss&iacute;vel saber o pr&oacute;ximo caracter em idiomas que n&atilde;o sejam o C. porque n&atilde;o &eacute; poss&iacute;vel saber o pr&oacute;ximo caracter em idiomas que n&atilde;o sejam o C.
Voc&ecirc; pode criar um &iacute;ndice especial <CODE>text_pattern_ops</CODE> para tais casos Voc&ecirc; pode criar um &iacute;ndice especial <CODE>text_pattern_ops</CODE> para tais casos
que funcionam somente para indexa&ccedil;&atilde;o com <SMALL>LIKE</SMALL>. que funcionam somente para indexa&ccedil;&atilde;o com <SMALL>LIKE</SMALL>. Tamb&eacute;m &eacute;
poss&iacute;vel utilizar indexa&ccedil;&atilde;o de busca textual para buscas por palavras.
</LI> </LI>
</UL> </UL>
...@@ -778,38 +781,28 @@ comprimento</TD></TR> ...@@ -778,38 +781,28 @@ comprimento</TD></TR>
); );
</PRE> </PRE>
Veja a p&aacute;gina sobre <I>create_sequence</I> no manual para <P>Sequ&ecirc;ncias automaticamente criadas s&atilde;o nomeadas como
obter informa&ccedil;&otilde;es adicionais sobre sequ&ecirc;ncias. &lt;<i>tabela</i>&gt;_&lt;<i>colunaserial</i>&gt;_<i>seq</i>, onde
<i>tabela</i> e <i>colunaserial</i> s&atilde;o os nomes da tabela e
da coluna serial, respectivamente. Veja a p&aacute;gina sobre
<I>create_sequence</I> no manual para obter informa&ccedil;&otilde;es
adicionais sobre sequ&ecirc;ncias.
<H3 id="item4.11.2">4.11.2) Como eu consigo o valor de um campo <H3 id="item4.11.2">4.11.2) Como eu consigo o valor de um campo
<SMALL>SERIAL</SMALL>?</H3> <SMALL>SERIAL</SMALL>?</H3>
<P>Uma abordagem &eacute; obter o pr&oacute;ximo valor <SMALL>SERIAL</SMALL> <P>A maneira mais simples de obter o pr&oacute;ximo valor <SMALL>SERIAL</SMALL>
de uma sequ&ecirc;ncia com a fun&ccedil;&atilde;o <I>nextval()</I> de uma sequ&ecirc;ncia &eacute; com <SMALL>RETURNING</SMALL>. Utilizando o
<I>antes</I> de inserir e ent&atilde;o inserir com o valor explicitamente. Utilizando o exemplo da tabela em <A href="#item4.11.1">4.11.1</A>, ele ficaria assim:
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>
Voc&ecirc; poderia ent&atilde;o ter tamb&eacute;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&aacute;
&lt;<I>tabela</I>&gt;_&lt;<I>coluna</I>&gt;_<I>seq</I>, onde
<I>tabela</I> e <I>coluna</I> s&atilde;o os nomes da tabela
e da coluna <SMALL>SERIAL</SMALL>, respectivamente.
<P>Alternativamente, voc&ecirc; poderia obter o valor <SMALL>SERIAL</SMALL>
atribu&iacute;do com a fun&ccedil;&atilde;o <I>currval()</I> <I>depois</I>
de t&ecirc;-lo inserido por padr&atilde;o, i.e.,</P>
<PRE> <PRE>
execute("INSERT INTO pessoa (nome) VALUES ('Blaise Pascal')"); INSERT INTO pessoa (nome) VALUES ('Blaise Pascal') RETURNING id;
novo_id = execute("SELECT currval('pessoa_id_seq')");
</PRE> </PRE>
Voc&ecirc; tamb&eacute;m pode chamar <I>nextval()</I> e utilizar o valor no
<SMALL>INSERT</SMALL> ou chamar <I>currval()</I> <I>ap&oacute;s</I> o
<SMALL>INSERT</SMALL>.
<H3 id="item4.11.3">4.11.3) <I>currval()</I> n&atilde;o lida com condi&ccedil;&atilde;o de corrida com outros usu&aacute;rios?</H3> <H3 id="item4.11.3">4.11.3) <I>currval()</I> n&atilde;o lida com condi&ccedil;&atilde;o de corrida com outros usu&aacute;rios?</H3>
<P>N&atilde;o. <I>currval()</I> retorna o valor atual atribuido pela sua sess&atilde;o, e n&atilde;o por todas as sess&otilde;es.</P> <P>N&atilde;o. <I>currval()</I> retorna o valor atual atribuido pela sua sess&atilde;o, e n&atilde;o por todas as sess&otilde;es.</P>
...@@ -840,7 +833,7 @@ comprimento</TD></TR> ...@@ -840,7 +833,7 @@ comprimento</TD></TR>
<H3 id="item4.13">4.13) Por que eu recebo o erro <I>"ERROR: Memory exhausted in AllocSetAlloc()"</I>?</H3> <H3 id="item4.13">4.13) Por que eu recebo o erro <I>"ERROR: Memory exhausted in AllocSetAlloc()"</I>?</H3>
<P>Voc&ecirc; provavelmente est&aacute; sem mem&oacute;ria virtual no seu sistema, ou o seu n&uacute;cleo (kernel) tem um limite baixo para certos recursos. Tente isto antes de iniciar o <I>postmaster</I>:</P> <P>Voc&ecirc; provavelmente est&aacute; sem mem&oacute;ria virtual no seu sistema, ou o seu n&uacute;cleo (kernel) tem um limite baixo para certos recursos. Tente isto antes de iniciar o servidor PostgreSQL:</P>
<PRE> <PRE>
ulimit -d 262144 ulimit -d 262144
limit datasize 256m limit datasize 256m
...@@ -904,7 +897,9 @@ comprimento</TD></TR> ...@@ -904,7 +897,9 @@ comprimento</TD></TR>
<H3 id="item4.19">4.19) Por que eu obtenho erros "relation with OID ###### <H3 id="item4.19">4.19) Por que eu obtenho erros "relation with OID ######
does not exist" ao acessar tabelas tempor&aacute;rias em fun&ccedil;&otilde;es PL/PgSQL?</H3> does not exist" ao acessar tabelas tempor&aacute;rias em fun&ccedil;&otilde;es PL/PgSQL?</H3>
<P>PL/PgSQL armazena o conte&uacute;do da fun&ccedil;&atilde;o, e o efeito indesejado &eacute; que se uma fun&ccedil;&atilde;o PL/PgSQL acessa uma tabela tempor&aacute;ria, e aquela tabela &eacute; removida e criada novamente, e a fun&ccedil;&atilde;o &eacute; chamada novamente, a fun&ccedil;&atilde;o ir&aacute; falhar porque o conte&uacute;do armazenado da fun&ccedil;&atilde;o ainda apontar&aacute; para a tabela tempor&aacute;ria antiga. A solu&ccedil;&atilde;o &eacute; utilizar o <SMALL>EXECUTE</SMALL> para acesso a tabelas tempor&aacute;rias no PL/PgSQL. Isto ir&aacute; fazer com que a consulta seja avaliada toda vez.</P> <P>Em vers&otilde;es do PostgreSQL &lt; 8.3, PL/PgSQL armazena o conte&uacute;do da fun&ccedil;&atilde;o, e o efeito indesejado &eacute; que se uma fun&ccedil;&atilde;o PL/PgSQL acessa uma tabela tempor&aacute;ria, e aquela tabela &eacute; removida e criada novamente, e a fun&ccedil;&atilde;o &eacute; chamada novamente, a fun&ccedil;&atilde;o ir&aacute; falhar porque o conte&uacute;do armazenado da fun&ccedil;&atilde;o ainda apontar&aacute; para a tabela tempor&aacute;ria antiga. A solu&ccedil;&atilde;o &eacute; utilizar o <SMALL>EXECUTE</SMALL> para acesso a tabelas tempor&aacute;rias no PL/PgSQL. Isto ir&aacute; fazer com que a consulta seja avaliada toda vez.</P>
<P>Este problema n&atilde;o ocorre no PostgreSQL 8.3 ou superior.</P>
<H3 id="item4.20">4.20) Quais solu&ccedil;&otilde;es de replica&ccedil;&atilde;o est&atilde;o dispon&iacute;veis?</H3> <H3 id="item4.20">4.20) Quais solu&ccedil;&otilde;es de replica&ccedil;&atilde;o est&atilde;o dispon&iacute;veis?</H3>
...@@ -914,7 +909,7 @@ comprimento</TD></TR> ...@@ -914,7 +909,7 @@ comprimento</TD></TR>
<P>Replica&ccedil;&atilde;o mestre/escravo permite que um mestre receba consultas de leitura e <P>Replica&ccedil;&atilde;o mestre/escravo permite que um mestre receba consultas de leitura e
escrita, enquanto os escravos s&oacute; podem aceitar leitura/consultas <SMALL>SELECT</SMALL>. escrita, enquanto os escravos s&oacute; podem aceitar leitura/consultas <SMALL>SELECT</SMALL>.
A solu&ccedil;&atilde;o mais popular de replica&ccedil;&atilde;o mestre-escravo para PostgreSQL dispon&iacute;vel livremente A solu&ccedil;&atilde;o mais popular de replica&ccedil;&atilde;o mestre-escravo para PostgreSQL dispon&iacute;vel livremente
&eacute; <A href="http://gborg.postgresql.org/project/slony1/projdisplay.php">Slony-I</A>.</P> &eacute; <A href="http://main.slony.info">Slony-I</A>.</P>
<P>Replica&ccedil;&atilde;o com m&uacute;ltiplos mestres permite que consultas leitura/escrita sejam <P>Replica&ccedil;&atilde;o com m&uacute;ltiplos mestres permite que consultas leitura/escrita sejam
enviadas para m&uacute;ltiplos computadores replicadores. Esta capacidade tamb&eacute;m tem enviadas para m&uacute;ltiplos computadores replicadores. Esta capacidade tamb&eacute;m tem
...@@ -931,7 +926,7 @@ comprimento</TD></TR> ...@@ -931,7 +926,7 @@ comprimento</TD></TR>
<P>A causa mais comum de nomes desconhecidos &eacute; o uso de aspas ao redor dos nomes da tabela ou coluna <P>A causa mais comum de nomes desconhecidos &eacute; o uso de aspas ao redor dos nomes da tabela ou coluna
durante a cria&ccedil;&atilde;o da tabela. Ao utilizar aspas, nomes de tabela e coluna durante a cria&ccedil;&atilde;o da tabela. Ao utilizar aspas, nomes de tabela e coluna
(chamados de identificadores) s&atilde;o armazenados <a (chamados de identificadores) s&atilde;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&ecirc; deve utilizar aspas quando se como especificado</a>, significando que voc&ecirc; deve utilizar aspas quando se
referir aos nomes na consulta. Algumas interfaces, como pgAdmin, referir aos nomes na consulta. Algumas interfaces, como pgAdmin,
automaticamente colocam aspas nos identificadores durante a cria&ccedil;&atilde;o da tabela. automaticamente colocam aspas nos identificadores durante a cria&ccedil;&atilde;o da tabela.
...@@ -941,6 +936,7 @@ comprimento</TD></TR> ...@@ -941,6 +936,7 @@ comprimento</TD></TR>
<LI>Utilizar somente caracteres min&uacute;sculos em identificadores</LI> <LI>Utilizar somente caracteres min&uacute;sculos em identificadores</LI>
<LI>Colocar aspas em identificadores ao referenci&aacute;-los nas consultas</LI> <LI>Colocar aspas em identificadores ao referenci&aacute;-los nas consultas</LI>
</UL> </UL>
</BODY> </BODY>
</HTML> </HTML>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment