1
0
mirror of https://github.com/postgres/postgres.git synced 2025-06-13 07:41:39 +03:00

Update Brazilian FAQ.

Euler Taveira de Oliveira
This commit is contained in:
Bruce Momjian
2007-12-10 00:34:06 +00:00
parent a3f208539c
commit c5156c646b
2 changed files with 164 additions and 162 deletions

View File

@ -1,7 +1,7 @@
Perguntas Frequentes (FAQ) sobre PostgreSQL
<20>ltima atualiza<7A><61>o: S<EFBFBD>b Out 14 19:08:19 EDT 2006
<20>ltima atualiza<7A><61>o: Sex Nov 16 10:53:50 EST 2007
Mantenedor atual: Bruce Momjian (bruce@momjian.us)
@ -18,7 +18,7 @@
Perguntas Gerais
1.1) O que <20> PostgreSQL? Como ele <20> pronunciado?
1.1) O que <20> PostgreSQL? Como ele <20> pronunciado? O que <20> Postgres?
1.2) Quem controla o PostgreSQL?
1.3) Qual <20> a licen<65>a do PostgreSQL?
1.4) Quais plataformas o PostgreSQL pode ser executado?
@ -33,6 +33,8 @@
1.12) Como posso submeter uma corre<72><65>o (patch) ou me juntar a equipe
de desenvolvimento?
1.13) Como <20> o PostgreSQL comparado a outros SGBDs?
1.14) O PostgreSQL gerenciar<61> as mudan<61>as de hor<6F>rio devido ao hor<6F>rio
de ver<65>o em v<>rios pa<70>ses?
Perguntas sobre Clientes
@ -51,8 +53,8 @@
3.4) Quais caracter<65>sticas de depura<72><61>o est<73>o dispon<6F>veis?
3.5) Por que eu recebo "Sorry, too many clients" quando eu tento
conectar?
3.6) Qual <20> o processo de atualiza<7A><61>o do PostgreSQL? 3.7) Que tipo de
hardware eu devo usar?
3.6) Qual <20> o processo de atualiza<7A><61>o do PostgreSQL?
3.7) Que tipo de hardware eu devo usar?
Perguntas Operacionais
@ -74,7 +76,8 @@
express<73>es regulares sem diferenciar mau<61>sculas de min<69>sculas? Como eu
utilizo um <20>ndice para buscas sem distinguir mai<61>sculas de min<69>sculas?
4.9) Em uma consulta, como eu detecto se um campo <20> NULL? Como eu
posso ordenar por um campo que <20> NULL ou n<>o?
posso concatenar poss<EFBFBD>veis NULLs? Como eu posso ordenar por um campo
que <20> NULL ou n<>o?
4.10) Qual <20> a diferen<65>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?
@ -95,16 +98,16 @@
exist" ao acessar tabelas tempor<6F>rias em fun<75><6E>es PL/PgSQL?
4.20) Quais solu<6C><75>es de replica<63><61>o est<73>o dispon<6F>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<61>sculas n<>o s<>o
preservadas?
_________________________________________________________________
Perguntas Gerais
1.1) O que <20> PostgreSQL? Como ele <20> pronunciado?
1.1) O que <20> PostgreSQL? Como ele <20> pronunciado? O que <20> Postgres?
PostgreSQL <20> pronunciado Post-Gres-Q-L, e <20>, <20>s vezes, referido apenas
como Postgres. Um arquivo de <20>udio est<73> dispon<6F>vel em formato MP3 para
aqueles que gostariam de ouvir a pron<6F>ncia.
PostgreSQL <20> pronunciado Post-Gres-Q-L. (Para os curiosos que querem
saber como se diz "PostgreSQL", um arquivo de <20>udio est<73> dispon<6F>vel).
O PostgreSQL <20> um sistema de banco de dados objeto-relacional que tem
as caracter<65>sticas de sistemas de bancos de dados comerciais
@ -116,8 +119,12 @@
desenvolvedores volunt<6E>rios (na sua maioria) espalhados pelo mundo e
que se comunicam via Internet. <20> um projeto da comunidade e n<>o <20>
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 <20> um apelido para o PostgreSQL amplamente utilizado. Era o
nome original do projeto em Berkeley e dentre os outros apelidos <20> o
preferido. Se voc<6F> acha 'PostgreSQL' dif<69>cil de pronunciar, diga
apenas 'Postgres'.
1.2) Quem controla o PostgreSQL?
@ -189,11 +196,11 @@
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 <20> a <20>ltima vers<72>o?
A <20>ltima vers<72>o do PostgreSQL <20> a vers<72>o 8.1.5.
A <20>ltima vers<72>o do PostgreSQL <20> a vers<72>o 8.2.5.
N<>s planejamos lan<61>ar vers<72>es novas a cada ano com vers<72>es corretivas
em alguns meses.
@ -220,14 +227,14 @@
Visite o formul<75>rio que reporta bugs do PostgreSQL em
http://www.postgresql.org/support/submitbug.
Verifique tamb<6D>m o nosso ftp ftp://ftp.PostgreSQL.org/pub para ver se
Verifique tamb<6D>m o nosso ftp ftp://ftp.postgresql.org/pub para ver se
h<> uma vers<72>o mais recente do PostgreSQL.
Bugs submetidos utilizando o formul<75>rio ou informado a qualquer lista
de discuss<73>o do PostgreSQL tipicamente gera uma das seguintes
respostas:
* N<>o <20> um bug e o porqu<71>
* <20> um bug conhecido e j<> est<73> na lista de AFAZERES (TODO)
* <20> um bug conhecido e j<> est<73> na lista de AFAZERES
* O bug foi corrigido na vers<72>o atual
* O bug foi corrigido mas n<>o foi empacotado em um vers<72>o oficial
* Um pedido foi feito para obter informa<6D><61>es detalhadas:
@ -239,48 +246,50 @@
* O bug <20> novo. O seguinte pode ocorrer:
+ Uma corre<72><65>o <20> criada e ser<65> inclu<6C>da na pr<70>xima vers<72>o
+ O bug n<>o pode ser corrigido imediatamente e <20> 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<6E>m bugs conhecidos, funcionalidades
ausentes e planos futuros.
lista de AFAZERES que cont<6E>m bugs conhecidos, funcionalidades ausentes
e planos futuros.
Uma solicita<74><61>o de funcionalidade geralmente resulta em uma das
seguintes respostas:
* A funcionalidade j<> est<73> na lista de AFAZERES (TODO)
* A funcionalidade j<> est<73> na lista de AFAZERES
* A funcionalidade n<>o <20> desej<65>vel porque:
+ Ela duplica uma funcionalidade existente que j<> segue o
padr<64>o SQL
+ A funcionalidade aumentar<61> a complexidade do c<>digo mas
adicionar<61> pouco benef<65>cio
+ A funcionalidade ser<65> insegura ou n<>o-confi<66>vel
* A nova funcionalidade <20> adicionada a lista de AFAZERES (TODO)
* A nova funcionalidade <20> 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<70>tica, bugs n<>o duram muito no
programa; e bugs que afetam uma grande quantidade de usu<73>rios s<>o
corrigidos rapidamente. O <20>nico lugar para encontrar todas as
mudan<EFBFBD>as, melhorias e corre<72><65>es em uma vers<72>o do PostgreSQL <20> ler as
mensagens de log do CVS. At<41> mesmo as notas de lan<61>amento n<>o listam
todas as mudan<61>as feitas no programa.
de AFAZERES atualizada. Na pr<70>tica, bugs n<>o duram muito no programa;
e bugs que afetam uma grande quantidade de usu<73>rios s<>o corrigidos
rapidamente. O <20>nico lugar para encontrar todas as mudan<61>as, melhorias
e corre<72><65>es em uma vers<72>o do PostgreSQL <20> ler as mensagens de log do
CVS. At<41> mesmo as notas de lan<61>amento n<>o listam todas as mudan<61>as
feitas no programa.
1.10) Que documenta<74><61>o est<73> dispon<6F>vel?
O PostgreSQL inclui vasta documenta<74><61>o, incluindo um manual extenso,
p<>ginas de manuais (man pages) e alguns exemplos teste. Veja o
diret<65>rio /doc. Voc<6F> tamb<6D>m pode pesquisar os manuais online em
http://www.PostgreSQL.org/docs.
http://www.postgresql.org/docs.
H<> dois livros sobre PostgreSQL dispon<6F>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<6F>veis para compra. Um dos mais populares <20> o do Korry
Douglas. Uma lista de an<61>lise sobre os livros pode ser encontrada em
http://techdocs.PostgreSQL.org/techdocs/bookreviews.php.
http://www.postgresql.org/docs/books/. H<> tamb<6D>m uma cole<6C><65>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<6D><61>es sobre tipos, operadores, fun<75><6E>es, agrega<67><61>es,
@ -291,11 +300,9 @@
1.11) Como eu posso aprender SQL?
Primeiro, considere os livros espec<65>ficos sobre PostgreSQL mencionados
acima. Outro <20> o "Teach Yourself SQL in 21 Days, Second Edition" e
http://members.tripod.com/er4ebus/sql/index.htm. Muitos de nossos
usu<EFBFBD>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<73>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<6D>m bons tutoriais dispon<6F>veis online:
* http://www.intermedia.net/support/sql/sqltut.shtm
@ -347,13 +354,23 @@
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<6F>veis para aqueles que precisam de um. (Veja
se<73><65>o 1.7 da FAQ.)
se<73><65>o 1.7 da FAQ).
Pre<72>o
N<>s somos livres para uso dele tanto comercial quanto n<>o
comercial. Voc<6F> pode adicionar nosso c<>digo ao seu produto sem
limita<74><61>es, exceto aquelas descritas na nossa licen<65>a BSD
mencionada acima.
1.14) O PostgreSQL gerenciar<61> mudan<61>as no hor<6F>rio devido ao hor<6F>rio de ver<65>o
em v<>rios pa<70>ses?
Mudan<61>as no hor<6F>rio de ver<65>o dos USA foram inclu<6C>das nas vers<72>es 8.0
.[4+] do PostgreSQL e em todas as vers<72>es grandes, i.e. 8.1. Mudan<61>as
no Canad<61> e Austr<74>lia Oeste foram inclu<6C>das na 8.0.[10+], 8.1.[6+] e
em todas as vers<72>es grandes subsequentes. Vers<72>es do PostgreSQL
anteriores a 8.0 utilizam o banco de dados de zona hor<6F>ria do sistema
operacional para informa<6D><61>es sobre hor<6F>rio de ver<65>o.
_________________________________________________________________
Perguntas sobre Clientes
@ -367,8 +384,7 @@
Algumas linguagens de programa<6D><61>o como PHP incluem uma interface para
PostgreSQL. Interfaces para linguagens como Perl, TCL, Python e muitas
outras est<73>o dispon<6F>veis em http://gborg.postgresql.org na se<73><65>o de
Drivers/Interfaces ou via busca na Internet.
outras est<73>o dispon<6F>veis em http://www.pgfoundry.org.
2.2) Quais ferramentas est<73>o dispon<6F>veis para utilizar o PostgreSQL com
p<>ginas Web?
@ -450,29 +466,17 @@
3.5) Por que eu recebo "Sorry, too many clients" quando eu tento conectar?
Voc<6F> atingiu o limite padr<64>o que <20> de 100 sess<73>es. Voc<6F> precisa
aumentar o limite do postmaster, que diz quantos processos servidor
Voc<6F> atingiu o limite padr<64>o de 100 sess<73>es. Voc<6F> 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 <20> o processo de atualiza<7A><61>o do PostgreSQL?
O time do PostgreSQL faz somente pequenas mudan<61>as entre vers<72>es
corretivas, ent<6E>o atualizar da vers<72>o 7.4.8 para 7.4.9 n<>o requer uma
exporta<EFBFBD><EFBFBD>o e uma importa<74><61>o; basta para o servidor de banco de dados,
instalar os bin<69>rios atualizados e reiniciar o servidor.
Todos os usu<73>rios devem atualizar para as vers<72>es corretivas mais
recentes assim que elas estiverem dispon<6F>veis. Enquanto cada
atualiza<7A><61>o tem algum risco, vers<72>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<72>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<61>as
geralmente s<>o complexas, ent<6E>o n<>s n<>o mantemos compatibilidade para
os arquivos de dados. Uma exporta<74><61>o/importa<74><61>o de um banco de dados <20>
necess<73>ria para atualiza<7A><61>es entre vers<72>es.
Veja http://www.postgresql.org/support/versioning para discuss<73>o geral
sobre atualiza<7A><61>es e
http://www.postgresql.org/docs/current/static/install-upgrading.html
para instru<72><75>es espec<65>ficas.
3.7) Que tipo de hardware eu devo usar?
@ -585,24 +589,24 @@
inteiro e uma descri<72><69>o em cada linha. Suponha que o tamanho m<>dio da
descri<72><69>o <20> de vinte bytes. O arquivo ter<65> 2,8 MB. O tamanho do
arquivo do banco de dados PostgreSQL que cont<6E>m esses dados pode ser
estimado em 5,6 MB:
28 bytes: cada cabe<62>alho de registro (aproximadamente)
estimado em 5,2 MB:
24 bytes: cada cabe<62>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 <20> 8192 bytes (8 KB), ent<6E>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)
<20>ndices n<>o requerem muito espa<70>o, mas cont<6E>m dados que foram
indexados, ent<6E>o eles podem ocupar algum espa<70>o.
@ -650,10 +654,12 @@
* Busca que n<>o diferenciam mai<61>sculas de min<69>sculas tais como ILIKE
e ~* n<>o utilizam <20>ndices. Em vez disso, utilize <20>ndice de
express<73>o, que <20> descrito na se<73><65>o 4.8.
* O idioma padr<64><EFBFBD>o C deve ser usando durante o initdb porque n<>o <20>
* O idioma padr<64>o C deve ser usando durante o initdb porque n<>o <20>
poss<73>vel saber o pr<70>ximo caracter em idiomas que n<>o sejam o C.
Voc<6F> pode criar um <20>ndice especial text_pattern_ops para tais
casos que funcionam somente para indexa<78><61>o com LIKE.
casos que funcionam somente para indexa<78><61>o com LIKE. Tamb<6D>m <20>
poss<73>vel utilizar indexa<78><61>o de busca textual para buscas por
palavras.
Em vers<72>es anteriores a 8.0, <20>ndices frequentemente n<>o podem ser
utilizados a menos que os tipos de dados correspondam aos tipos de
@ -690,13 +696,18 @@
utilize uma restri<72><69>o CHECK ou um gatilho.
4.9) Em uma consulta, como eu detecto se um campo <20> NULL? Como eu posso
ordenar por um campo que <20> NULL ou n<>o?
concatenar poss<73>veis NULLs? Como eu posso ordenar por um campo que <20> NULL ou
n<>o?
Voc<6F> testa a coluna com IS NULL e IS NOT NULL, como a seguir:
SELECT *
FROM tab
WHERE col IS NULL;
Para concatenar com poss<73>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<63>usula ORDER BY. Coisas que s<>o verdadeiro ser<65>o
ordenadas acima das coisas que s<>o falso, ent<6E>o a consulta a seguir
@ -754,29 +765,22 @@
nome TEXT
);
Veja a p<>gina sobre create_sequence no manual para obter informa<6D><61>es
adicionais sobre sequ<71>ncias.
Sequ<EFBFBD>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<6D><61>es adicionais sobre
sequ<71>ncias.
4.11.2) Como eu consigo o valor de um campo SERIAL?
Uma abordagem <20> obter o pr<70>ximo valor SERIAL de uma sequ<71>ncia com a
fun<EFBFBD><EFBFBD>o nextval() antes de inserir e ent<6E>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')");
A maneira mais simples de obter o pr<70>ximo valor SERIAL de uma
sequ<EFBFBD>ncia <20> com RETURNING. Utilizando o exemplo da tabela em 4.11.1,
ele ficaria assim:
INSERT INTO pessoa (nome) VALUES ('Blaise Pascal') RETURNING id;
Voc<6F> poderia ent<6E>o ter tamb<6D>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<65> <tabela>_<coluna>_seq, onde tabela e coluna s<>o os nomes da
tabela e da coluna SERIAL, respectivamente.
Voc<6F> tamb<EFBFBD>m pode chamar nextval() e utilizar o valor no INSERT ou
chamar currval() ap<61>s o INSERT.
Alternativamente, voc<6F> poderia obter o valor SERIAL atribu<62>do com a
fun<75><6E>o currval() depois de t<>-lo inserido por padr<64>o, i.e.,
execute("INSERT INTO pessoa (nome) VALUES ('Blaise Pascal')");
novo_id = execute("SELECT currval('pessoa_id_seq')");
4.11.3) currval() n<>o lida com condi<64><69>o de corrida com outros usu<73>rios?
N<>o. currval() retorna o valor atual atribuido pela sua sess<73>o, e n<>o
@ -791,14 +795,13 @@
finalizada. Isso causa intervalos na numera<72><61>o por causa de transa<73><61>es
abortadas.
4.16) O que <20> um OID? O que <20> um CTID?
4.12) O que <20> um OID? O que <20> um CTID?
Cada registro que <20> criado no PostgreSQL recebe um OID <20>nico a menos
que seja criado com WITHOUT OIDS. OIDs s<>o automaticamente atribu<62>dos
como inteiros de 4 bytes que s<>o <20>nicos ao longo de toda instala<6C><61>o.
Contudo, eles s<>o limitados em 4 bilh<6C>es, e ent<6E>o os OIDs come<6D>am a
ser duplicados. O PostgreSQL utiliza OIDs para ligar as tabelas do
sistema.
Se uma tabela <20> criada com WITH OIDS, cada registro recebe um OID
<EFBFBD>nico. OIDs s<>o automaticamente atribu<62>dos como inteiros de 4 bytes
que s<>o <20>nicos ao longo de toda instala<6C><61>o. Contudo, eles s<>o
limitados em 4 bilh<6C>es e, ent<6E>o, os OIDs come<6D>am a ser duplicados. O
PostgreSQL utiliza OIDs para ligar as tabelas do sistema.
Para numerar registros nas tabelas do usu<73>rios, <20> melhor utilizar
SERIAL ao inv<6E>s de OIDs porque sequ<71>ncias SERIAL s<>o <20>nicas somente em
@ -814,7 +817,7 @@
Voc<6F> provavelmente est<73> sem mem<65>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
@ -834,7 +837,7 @@
Utilize CURRENT_TIMESTAMP:
CREATE TABLE teste (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP);
4.23) Como eu fa<66>o uma jun<75><6E>o externa (outer join)?
4.16) Como eu fa<66>o uma jun<75><6E>o externa (outer join)?
PostgreSQL suporta jun<75><6E>es externas utilizando a sintaxe padr<64>o do
SQL. Aqui temos dois exemplos:
@ -852,7 +855,7 @@
retornaria os registros combinados mais todos os registros n<>o
combinados de t1 e t2. A palavra OUTER <20> opcional e <20> assumida nas
jun<75><6E>es LEFT, RIGHT e FULL. Jun<75><6E>es ordin<69>rias s<>o chamadas jun<75><6E>es
naturais (INNER).
internas (INNER).
4.17) Como eu fa<66>o consultas utilizando m<>ltiplos bancos de dados?
@ -869,18 +872,20 @@
4.18) Como eu retorno m<>ltiplos registros ou colunas de uma fun<75><6E>o?
<20> f<>cil utilizando fun<75><6E>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<6F>rias em fun<75><6E>es PL/PgSQL?
PL/PgSQL armazena o conte<74>do da fun<75><6E>o, e o efeito indesejado <20> que se
uma fun<75><6E>o PL/PgSQL acessa uma tabela tempor<6F>ria, e aquela tabela <20>
removida e criada novamente, e a fun<75><6E>o <20> chamada novamente, a fun<75><6E>o
ir<EFBFBD> falhar porque o conte<74>do armazenado da fun<75><6E>o ainda apontar<EFBFBD> para
a tabela tempor<6F>ria antiga. A solu<6C><75>o <20> utilizar o EXECUTE para acesso
a tabelas tempor<6F>rias no PL/PgSQL. Isto ir<69> fazer com que a consulta
seja avaliada toda vez.
Em vers<72>es do PostgreSQL < 8.3, PL/PgSQL armazena o conte<74>do da
fun<EFBFBD><EFBFBD>o, e o efeito indesejado <20> que se uma fun<75><6E>o PL/PgSQL acessa uma
tabela tempor<6F>ria, e aquela tabela <20> removida e criada novamente, e a
fun<EFBFBD><EFBFBD>o <20> chamada novamente, a fun<75><6E>o ir<69> falhar porque o conte<74>do
armazenado da fun<75><6E>o ainda apontar<61> para a tabela tempor<6F>ria antiga. A
solu<EFBFBD><EFBFBD>o <20> utilizar o EXECUTE para acesso a tabelas tempor<6F>rias no
PL/PgSQL. Isto ir<69> fazer com que a consulta seja avaliada toda vez.
Este problema n<>o ocorre no PostgreSQL 8.3 ou superior.
4.20) Quais solu<6C><75>es de replica<63><61>o est<73>o dispon<6F>veis?
@ -895,22 +900,23 @@
Replica<63><61>o com m<>ltiplos mestres permite que consultas leitura/escrita
sejam enviadas para m<>ltiplos computadores replicadores. Esta
capacidade tamb<6D>m tem um s<>rio impacto na performance por causa da
necessidade de sincronizar as mudan<61>as entre os servidores. Pgcluster
necessidade de sincronizar as mudan<61>as entre os servidores. PGCluster
<20> a solu<6C><75>o mais popular dispon<6F>vel livremente para PostgreSQL.
H<> tamb<6D>m solu<6C><75>es de replica<63><61>o comerciais e baseadas em hardware
dispon<6F>veis que suportam uma variedade de modelos de replica<63><61>o.
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<61>sculas n<>o s<>o preservadas?
O caso mais comum <20> o uso de aspas ao redor dos nomes da tabela ou
coluna durante a cria<69><61>o da tabela. Ao utilizar aspas, nomes de tabela
e coluna (chamados de identificadores) s<>o armazenados como
especificado, significando que voc<6F> deve utilizar aspas quando se
referir aos nomes na consulta. Algumas interfaces, como pgAdmin,
automaticamente coloca aspas nos identificadores durante a cria<69><61>o da
tabela. Ent<6E>o, para identificadores serem reconhecidos, voc<6F> deve:
A causa mais comum de nomes desconhecidos <EFBFBD> o uso de aspas ao redor
dos nomes da tabela ou coluna durante a cria<69><61>o da tabela. Ao utilizar
aspas, nomes de tabela e coluna (chamados de identificadores) s<>o
armazenados como especificado, significando que voc<6F> deve utilizar
aspas quando se referir aos nomes na consulta. Algumas interfaces,
como pgAdmin, automaticamente colocam aspas nos identificadores
durante a cria<69><61>o da tabela. Ent<6E>o, para identificadores serem
reconhecidos, voc<6F> deve:
* Evitar colocar aspas no identificador ao criar tabelas
* Utilizar somente caracteres min<69>sculos em identificadores
* Colocar aspas em identificadores ao referenci<63>-los nas consultas

View File

@ -10,7 +10,7 @@
alink="#0000ff">
<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=
"mailto:bruce@momjian.us">bruce@momjian.us</A>)
@ -30,7 +30,8 @@
<HR>
<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.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>
@ -96,9 +97,9 @@
<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
<a href="http://www.postgresql.org/files/postgresql.mp3">arquivo de &aacute;udio</a> est&aacute; dispon&iacute;vel).</P>
@ -111,10 +112,14 @@
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
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 &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>
<P>Se voc&ecirc; est&aacute; procurando por um mantenedor, comit&ecirc; central ou empresa
@ -125,7 +130,7 @@
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">
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>
@ -169,7 +174,7 @@
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">
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
<a href="http://forge.novell.com">http://forge.novell.com</a>
@ -212,7 +217,7 @@
"http://www.postgresql.org/support/submitbug">http://www.postgresql.org/support/submitbug</A>.</P>
<P>Verifique tamb&eacute;m o nosso ftp <A href=
"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
lista de discuss&atilde;o do PostgreSQL tipicamente gera uma das seguintes
@ -271,7 +276,7 @@
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
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
as notas de lan&ccedil;amento n&atilde;o listam todas as mudan&ccedil;as feitas no programa.</P>
@ -290,8 +295,8 @@
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
encontrada em <A href=
"http://techdocs.postgresql.org/techdocs/bookreviews.php">http://techdocs.postgresql.org/techdocs/bookreviews.php</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>
"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://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&ccedil;&otilde;es sobre tipos, operadores, fun&ccedil;&otilde;es, agrega&ccedil;&otilde;es, etc. - utilize \?
@ -302,9 +307,7 @@
<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
acima. Outro &eacute; 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&aacute;rios gostam do <I>The Practical SQL Handbook</I>,
acima. 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
Complete Reference SQL</I>, Groff et al., McGraw-Hill.</P>
@ -382,8 +385,7 @@
<P>Algumas linguagens de programa&ccedil;&atilde;o como <SMALL>PHP</SMALL> incluem uma
interface para PostgreSQL. Interfaces para linguagens como Perl,
<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>
na se&ccedil;&atilde;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&atilde;o dispon&iacute;veis para utilizar o PostgreSQL com p&aacute;ginas Web?</H3>
@ -447,7 +449,7 @@
<DD>Um grande n&uacute;mero de configura&ccedil;&otilde;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&aacute;rios veja <a href=
@ -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>
<P>Voc&ecirc; atingiu o limite padr&atilde;o que &eacute; de 100 sess&otilde;es. Voc&ecirc;
precisa aumentar o limite do <I>postmaster</I>, que diz
<P>Voc&ecirc; atingiu o limite padr&atilde;o de 100 sess&otilde;es. Voc&ecirc;
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>
@ -603,7 +605,7 @@
-------------------------------------------
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
------------------------ = 158 registros por p&aacute;gina do banco de dados (arredondado para baixo)
@ -664,10 +666,11 @@
<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
&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.
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>
</UL>
@ -778,37 +781,27 @@ comprimento</TD></TR>
);
</PRE>
Veja a p&aacute;gina sobre <I>create_sequence</I> no manual para
obter informa&ccedil;&otilde;es adicionais sobre sequ&ecirc;ncias.
<P>Sequ&ecirc;ncias automaticamente criadas s&atilde;o nomeadas como
&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
<SMALL>SERIAL</SMALL>?</H3>
<P>Uma abordagem &eacute; obter o pr&oacute;ximo valor <SMALL>SERIAL</SMALL>
de uma sequ&ecirc;ncia com a fun&ccedil;&atilde;o <I>nextval()</I>
<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>, um exemplo em
pseudo-linguagem se pareceria com isto:</P>
<P>A maneira mais simples de obter o pr&oacute;ximo valor <SMALL>SERIAL</SMALL>
de uma sequ&ecirc;ncia &eacute; com <SMALL>RETURNING</SMALL>. Utilizando o
exemplo da tabela em <A href="#item4.11.1">4.11.1</A>, ele ficaria assim:
<PRE>
novo_id = execute("SELECT nextval('pessoa_id_seq')");
execute("INSERT INTO pessoa (id, nome) VALUES (novo_id, 'Blaise Pascal')");
INSERT INTO pessoa (nome) VALUES ('Blaise Pascal') RETURNING id;
</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>
execute("INSERT INTO pessoa (nome) VALUES ('Blaise Pascal')");
novo_id = execute("SELECT currval('pessoa_id_seq')");
</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>
@ -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>
<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>
ulimit -d 262144
limit datasize 256m
@ -904,7 +897,9 @@ comprimento</TD></TR>
<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>
<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>
@ -914,7 +909,7 @@ comprimento</TD></TR>
<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>.
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
enviadas para m&uacute;ltiplos computadores replicadores. Esta capacidade tamb&eacute;m tem
@ -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
durante a cria&ccedil;&atilde;o da tabela. Ao utilizar aspas, nomes de tabela e coluna
(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
referir aos nomes na consulta. Algumas interfaces, como pgAdmin,
automaticamente colocam aspas nos identificadores durante a cria&ccedil;&atilde;o da tabela.
@ -941,6 +936,7 @@ comprimento</TD></TR>
<LI>Utilizar somente caracteres min&uacute;sculos em identificadores</LI>
<LI>Colocar aspas em identificadores ao referenci&aacute;-los nas consultas</LI>
</UL>
</BODY>
</HTML>