2
Perguntas Frequentes (FAQ) sobre PostgreSQL
4
�ltima atualiza��o: Sex Nov 16 10:53:50 EST 2007
6
Mantenedor atual: Bruce Momjian (bruce@momjian.us)
8
Traduzido por: Euler Taveira de Oliveira (euler@timbira.com)
10
A vers�o mais recente desse documento pode ser vista em
11
http://www.postgresql.org/files/documentation/faqs/FAQ.html (EN).
12
http://www.postgresql.org/files/documentation/faqs/FAQ_brazilian.html
15
Perguntas sobre plataformas espec�ficas s�o respondidas em
16
http://www.postgresql.org/docs/faq/.
17
_________________________________________________________________
21
1.1) O que � PostgreSQL? Como ele � pronunciado? O que � Postgres?
22
1.2) Quem controla o PostgreSQL?
23
1.3) Qual � a licen�a do PostgreSQL?
24
1.4) Quais plataformas o PostgreSQL pode ser executado?
25
1.5) Onde eu posso conseguir o PostgreSQL?
26
1.6) Qual � a �ltima vers�o?
27
1.7) Onde eu posso conseguir suporte?
28
1.8) Como eu posso submeter um relato de um bug?
29
1.9) Como eu posso saber quais s�o os bugs conhecidos ou
30
caracter�sticas ausentes?
31
1.10) Que documenta��o est� dispon�vel?
32
1.11) Como eu posso aprender SQL?
33
1.12) Como posso submeter uma corre��o (patch) ou me juntar a equipe
35
1.13) Como � o PostgreSQL comparado a outros SGBDs?
36
1.14) O PostgreSQL gerenciar� as mudan�as de hor�rio devido ao hor�rio
37
de ver�o em v�rios pa�ses?
39
Perguntas sobre Clientes
41
2.1) Quais interfaces est�o dispon�veis para PostgreSQL?
42
2.2) Quais ferramentas est�o dispon�veis para utilizar o PostgreSQL
44
2.3) O PostgreSQL tem interfaces gr�ficas para interagir com usu�rio?
46
Perguntas Administrativas
48
3.1) Como eu instalo o PostgreSQL em um local diferente de
50
3.2) Como eu controlo conex�es de outras m�quinas?
51
3.3) Como eu ajusto o servidor de banco de dados para obter uma
53
3.4) Quais caracter�sticas de depura��o est�o dispon�veis?
54
3.5) Por que eu recebo "Sorry, too many clients" quando eu tento
56
3.6) Qual � o processo de atualiza��o do PostgreSQL?
57
3.7) Que tipo de hardware eu devo usar?
59
Perguntas Operacionais
61
4.1) Como eu fa�o um SELECT somente dos primeiros registros de uma
62
consulta? Um registro rand�mico?
63
4.2) Como eu descubro quais tabelas, �ndices, bancos de dados e
64
usu�rios est�o definidos? Como eu vejo as consultas utilizadas pelo
66
4.3) Como voc� muda o tipo de dado de uma coluna?
67
4.4) Qual � o tamanho m�ximo de um registro, uma tabela e um banco de
69
4.5) Quanto espa�o em disco � necess�rio para armazenar dados de um
71
4.6) Por que minhas consultas est�o lentas? Por que elas n�o est�o
72
utilizando meus �ndices?
73
4.7) Como eu vejo como o otimizador de consultas est� avaliando minha
75
4.8) Como eu fa�o buscas com express�es regulares e buscas com
76
express�es regulares sem diferenciar mau�sculas de min�sculas? Como eu
77
utilizo um �ndice para buscas sem distinguir mai�sculas de min�sculas?
78
4.9) Em uma consulta, como eu detecto se um campo � NULL? Como eu
79
posso concatenar poss�veis NULLs? Como eu posso ordenar por um campo
81
4.10) Qual � a diferen�a entre os v�rios tipos de dado de caracteres?
82
4.11.1) Como eu crio um campo serial/auto incremento?
83
4.11.2) Como eu consigo o valor de um campo SERIAL?
84
4.11.3) currval() n�o lida com condi��o de corrida com outros
86
4.11.4) Por que os n�meros da minha sequ�ncia n�o s�o reutilizados
87
quando uma transa��o � abortada? Por que h� intervalos nos n�meros da
88
minha sequ�ncia/coluna SERIAL?
89
4.12) O que � um OID? O que � um CTID?
90
4.13) Por que eu recebo o erro "ERROR: Memory exhausted in
92
4.14) Como eu informo qual vers�o do PostgreSQL eu estou utilizando?
93
4.15) Como eu crio uma coluna que conter� por padr�o a hora atual?
94
4.16) Como eu fa�o uma jun��o externa (outer join)?
95
4.17) Como eu fa�o consultas utilizando m�ltiplos bancos de dados?
96
4.18) Como eu retorno m�ltiplos registros ou colunas de uma fun��o?
97
4.19) Por que eu obtenho erros "relation with OID ###### does not
98
exist" ao acessar tabelas tempor�rias em fun��es PL/PgSQL?
99
4.20) Quais solu��es de replica��o est�o dispon�veis?
100
4.21) Por que os nomes de minhas tabelas e colunas n�o s�o
101
reconhecidos em minha consulta? Por que as mai�sculas n�o s�o
103
_________________________________________________________________
107
1.1) O que � PostgreSQL? Como ele � pronunciado? O que � Postgres?
109
PostgreSQL � pronunciado Post-Gres-Q-L. (Para os curiosos que querem
110
saber como se diz "PostgreSQL", um arquivo de �udio est� dispon�vel).
112
O PostgreSQL � um sistema de banco de dados objeto-relacional que tem
113
as caracter�sticas de sistemas de bancos de dados comerciais
114
tradicionais com melhoramentos encontrados nos sistemas SGBDs de
115
pr�xima gera��o. PostgreSQL � livre e o c�digo-fonte completo est�
118
O desenvolvimento do PostgreSQL � feito por um grupo de
119
desenvolvedores volunt�rios (na sua maioria) espalhados pelo mundo e
120
que se comunicam via Internet. � um projeto da comunidade e n�o �
121
controlado por nenhuma empresa. Para se envolver, veja a FAQ do
122
desenvolvedor em http://www.postgresql.org/docs/faqs.FAQ_DEV.html
124
Postgres � um apelido para o PostgreSQL amplamente utilizado. Era o
125
nome original do projeto em Berkeley e dentre os outros apelidos � o
126
preferido. Se voc� acha 'PostgreSQL' dif�cil de pronunciar, diga
129
1.2) Quem controla o PostgreSQL?
131
Se voc� est� procurando por um mantenedor, comit� central ou empresa
132
controladora do PostgreSQL, desista --- n�o h� um(a). N�s temos um
133
comit� core e committers CVS, mas estes grupos s�o mais para quest�es
134
administrativas do que controle. O projeto � direcionado pela
135
comunidade de desenvolvedores e usu�rios, que qualquer um pode se
136
juntar. Tudo o que voc� precisa � se inscrever nas listas de discuss�o
137
e participar das discuss�es. Veja a FAQ do desenvolvedor para obter
138
informa��es como se envolver com o desenvolvimento do PostgreSQL.
140
1.3) Qual � a licen�a do PostgreSQL?
142
O PostgreSQL � distribu�do sob a licen�a BSD cl�ssica. Basicamente,
143
ela permite que usu�rios fa�am qualquer coisa com o c�digo, incluindo
144
revender os bin�rios sem o c�digo-fonte. A �nica restri��o � que voc�
145
n�o nos responsabilize legalmente por problemas com o programa de
146
computador. H� tamb�m a exig�ncia de que esta licen�a apare�a em todas
147
as c�pias do programa de computador. Aqui est� a licen�a BSD que
150
PostgreSQL est� sujeito a seguinte licen�a:
152
PostgreSQL Data Base Management System
154
Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group
155
Portions Copyright (c) 1994-1996 Regents of the University of
158
Permission to use, copy, modify, and distribute this software and its
159
documentation for any purpose, without fee, and without a written
160
agreement is hereby granted, provided that the above copyright notice
161
and this paragraph and the following two paragraphs appear in all
164
IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
165
FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES,
166
INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND
167
ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN
168
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
170
THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
171
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
172
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE
173
PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF
174
CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT,
175
UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
177
1.4) Quais plataformas o PostgreSQL pode ser executado?
179
Em geral, qualquer plataforma moderna compat�vel com Unix deve ser
180
capaz de executar o PostgreSQL. As plataformas que foram testadas
181
antes do lan�amento de uma vers�o s�o listadas nas instru��es de
184
O PostgreSQL tamb�m executa nativamente nos sistemas operacionais
185
Microsoft Windows baseados no NT tais como Win200 SP4, WinXP e
186
Win2003. Um instalador pr�-empacotado est� dispon�vel em
187
http://pgfoundry.org/projects/pginstaller. Vers�es do Windows baseadas
188
no MS-DOS (Win95, Win98, WinMe) podem executar o PostgreSQL utilizando
191
H� tamb�m uma vers�o para o Novell Netware 6 em
192
http://forge.novell.com e uma vers�o para OS/2 (eComStation) em
193
http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgre
194
SQL&stype=all&sort=type&dir=%2F.
196
1.5) Onde eu posso conseguir o PostgreSQL?
198
Via navegador web, utilize http://www.postgresql.org/ftp/ e via ftp,
199
utilize ftp://ftp.postgresql.org/pub/.
201
1.6) Qual � a �ltima vers�o?
203
A �ltima vers�o do PostgreSQL � a vers�o 8.2.5.
205
N�s planejamos lan�ar vers�es novas a cada ano com vers�es corretivas
208
1.7) Onde eu posso conseguir suporte?
210
A comunidade do PostgreSQL fornece assist�ncia a muitos de seus
211
usu�rios via e-mail. O principal s�tio web para inscri��o nas listas
212
de e-mail � http://www.postgresql.org/community/lists/. As listas
213
general e bugs s�o um bom lugar para in�cio.
215
O principal canal de IRC � o #postgresql na Freenode
216
(irc.freenode.net). Para se conectar voc� pode utilizar o comando Unix
217
irc -c '#postgresql' "$USER" irc.freenode.net ou utilizar qualquer
218
outro cliente de IRC. Um canal hisp�nico (#postgresql-es) e um franc�s
219
(#postgresqlfr) tamb�m existem na mesma rede. H� tamb�m um canal
222
Uma lista de empresas que prestam suporte comercial est� dispon�vel em
223
http://www.postgresql.org/support/professional_support.
225
1.8) Como eu informo a exist�ncia de um bug?
227
Visite o formul�rio que reporta bugs do PostgreSQL em
228
http://www.postgresql.org/support/submitbug.
230
Verifique tamb�m o nosso ftp ftp://ftp.postgresql.org/pub para ver se
231
h� uma vers�o mais recente do PostgreSQL.
233
Bugs submetidos utilizando o formul�rio ou informado a qualquer lista
234
de discuss�o do PostgreSQL tipicamente gera uma das seguintes
236
* N�o � um bug e o porqu�
237
* � um bug conhecido e j� est� na lista de AFAZERES
238
* O bug foi corrigido na vers�o atual
239
* O bug foi corrigido mas n�o foi empacotado em um vers�o oficial
240
* Um pedido foi feito para obter informa��es detalhadas:
241
+ Sistema Operacional
242
+ Vers�o do PostgreSQL
243
+ Exemplo de teste que reproduz o bug
244
+ Informa��es sobre depura��o
245
+ Sa�da reconstituidora de vest�gios (backtrace) do depurador
246
* O bug � novo. O seguinte pode ocorrer:
247
+ Uma corre��o � criada e ser� inclu�da na pr�xima vers�o
248
+ O bug n�o pode ser corrigido imediatamente e � adicionado a
251
1.9) Como eu posso saber quais s�o os bugs conhecidos ou funcionalidades
254
O PostgreSQL suporta um subconjunto extendido do SQL:2003. Veja nossa
255
lista de AFAZERES que cont�m bugs conhecidos, funcionalidades ausentes
258
Uma solicita��o de funcionalidade geralmente resulta em uma das
260
* A funcionalidade j� est� na lista de AFAZERES
261
* A funcionalidade n�o � desej�vel porque:
262
+ Ela duplica uma funcionalidade existente que j� segue o
264
+ A funcionalidade aumentar� a complexidade do c�digo mas
265
adicionar� pouco benef�cio
266
+ A funcionalidade ser� insegura ou n�o-confi�vel
267
* A nova funcionalidade � adicionada a lista de AFAZERES
269
O PostgreSQL n�o utiliza sistema de acompanhamento de bugs porque n�s
270
achamos mais eficiente responder diretamente o e-mail e manter a lista
271
de AFAZERES atualizada. Na pr�tica, bugs n�o duram muito no programa;
272
e bugs que afetam uma grande quantidade de usu�rios s�o corrigidos
273
rapidamente. O �nico lugar para encontrar todas as mudan�as, melhorias
274
e corre��es em uma vers�o do PostgreSQL � ler as mensagens de log do
275
CVS. At� mesmo as notas de lan�amento n�o listam todas as mudan�as
278
1.10) Que documenta��o est� dispon�vel?
280
O PostgreSQL inclui vasta documenta��o, incluindo um manual extenso,
281
p�ginas de manuais (man pages) e alguns exemplos teste. Veja o
282
diret�rio /doc. Voc� tamb�m pode pesquisar os manuais online em
283
http://www.postgresql.org/docs.
285
H� dois livros sobre PostgreSQL dispon�veis online em
286
http://www.postgresql.org/docs/books/awbook.html e
287
http://www.commandprompt.com/ppbook/. H� uma lista de livros sobre
288
PostgreSQL dispon�veis para compra. Um dos mais populares � o do Korry
289
Douglas. Uma lista de an�lise sobre os livros pode ser encontrada em
290
http://www.postgresql.org/docs/books/. H� tamb�m uma cole��o de
291
artigos t�cnicos sbore PostgreSQL em
292
http://www.postgresql.org/docs/techdocs/.
294
O programa cliente de linha de comando psql tem alguns comandos \d
295
para mostrar informa��es sobre tipos, operadores, fun��es, agrega��es,
296
etc. - utilize \? para mostrar os comandos dispon�veis.
298
Nosso s�tio web cont�m ainda mais documenta��o.
300
1.11) Como eu posso aprender SQL?
302
Primeiro, considere os livros espec�ficos sobre PostgreSQL mencionados
303
acima. Muitos de nossos usu�rios gostam do The Practical SQL Handbook,
304
Bowman, Judith S., et al., Addison-Wesley. Outros do The Complete
305
Reference SQL, Groff et al., McGraw-Hill.
307
H� tamb�m bons tutoriais dispon�veis online:
308
* http://www.intermedia.net/support/sql/sqltut.shtm
309
* http://sqlcourse.com
310
* http://www.w3schools.com/sql/default.asp
311
* http://mysite.verizon.net/Graeme_Birchall/id1.html
313
1.12) Como posso submeter uma corre��o (patch) ou me juntar a equipe de
316
Veja a FAQ do Desenvolvedor.
318
1.13) Como � o PostgreSQL comparado a outros SGBDs?
320
H� v�rias maneiras de se medir um software: funcionalidades,
321
performance, confiabilidade, suporte e pre�o.
324
PostgreSQL tem muitas caracter�sticas presentes em muitos SGBDs
325
comerciais como transa��es, subconsultas, gatilhos, vis�es,
326
integridade referencial de chave estrangeira e bloqueio (lock)
327
sofisticado. N�s temos algumas funcionalidades que eles n�o
328
tem, como tipos definidos pelo usu�rio, heran�a, regras e
329
controle de concorr�ncia de m�ltiplas vers�es para reduzir
333
A performance do PostgreSQL � compar�vel a outros bancos de
334
dados comerciais e de c�digo livre. Ele � mais r�pido em
335
algumas coisas, mais lento em outras. Nossa performance �
336
geralmente +/- 10% comparada a de outros bancos de dados.
339
N�s sabemos que um SGBD deve ser confi�vel ou ele � in�til. N�s
340
empenhamos em lan�ar vers�es bem testadas, de c�digo est�vel e
341
que tenha o m�nimo de bugs. Cada vers�o tem no m�nimo um m�s de
342
teste em vers�o beta, e nosso hist�rico de vers�es mostra que
343
n�s podemos fornecer vers�es est�veis e s�lidas que est�o
344
prontas para uso em produ��o. N�s acreditamos que somos
345
comparados a nosso favor com outros sistemas de bancos de dados
349
Nossas listas de discuss�o fornecem contato com um grupo de
350
desenvolvedores e usu�rios para ajudar a resolver muitos
351
problemas encontrados. Enquanto n�s n�o podemos garantir o
352
conserto, SGBDs comerciais nem sempre fornecem tamb�m. Com
353
acesso direto aos desenvolvedores, a comunidade de usu�rios,
354
manuais e o c�digo fonte faz com que o suporte do PostgreSQL
355
seja superior ao de outros SGBDs. H� suporte comercial por
356
incidente dispon�veis para aqueles que precisam de um. (Veja
360
N�s somos livres para uso dele tanto comercial quanto n�o
361
comercial. Voc� pode adicionar nosso c�digo ao seu produto sem
362
limita��es, exceto aquelas descritas na nossa licen�a BSD
365
1.14) O PostgreSQL gerenciar� mudan�as no hor�rio devido ao hor�rio de ver�o
368
Mudan�as no hor�rio de ver�o dos USA foram inclu�das nas vers�es 8.0
369
.[4+] do PostgreSQL e em todas as vers�es grandes, i.e. 8.1. Mudan�as
370
no Canad� e Austr�lia Oeste foram inclu�das na 8.0.[10+], 8.1.[6+] e
371
em todas as vers�es grandes subsequentes. Vers�es do PostgreSQL
372
anteriores a 8.0 utilizam o banco de dados de zona hor�ria do sistema
373
operacional para informa��es sobre hor�rio de ver�o.
374
_________________________________________________________________
376
Perguntas sobre Clientes
378
2.1) Quais interfaces est�o dispon�veis para PostgreSQL?
380
A instala��o do PostgreSQL inclui somente as interfaces C e C
381
embutida. Todas as outras interfaces s�o projetos independentes que
382
podem ser obtidos separadamente; sendo separados permitem que eles
383
tenham suas pr�prias datas de lan�amento e time de desenvolvedores.
385
Algumas linguagens de programa��o como PHP incluem uma interface para
386
PostgreSQL. Interfaces para linguagens como Perl, TCL, Python e muitas
387
outras est�o dispon�veis em http://www.pgfoundry.org.
389
2.2) Quais ferramentas est�o dispon�veis para utilizar o PostgreSQL com
392
Uma boa introdu��o para p�ginas web que utilizam bancos de dados pode
393
ser vista em: http://www.webreview.com
395
Para integra��o na Web, PHP (http://www.php.net) � uma excelente
398
Para casos complexos, muitos usam a Interface Perl e DBD::Pg com
401
2.3) O PostgreSQL tem interfaces gr�ficas para iteragir com o usu�rio?
403
H� um vasto n�mero de Ferramentas Gr�ficas (GUI), que est�o
404
dispon�veis para o PostgreSQL, comerciais e de desenvolvedores de
405
c�digo aberto. Uma lista detalhada pode ser encontrada em Documenta��o
406
da Comunidade PostgreSQL
407
_________________________________________________________________
409
Perguntas Administrativas
411
3.1) Como eu instalo o PostgreSQL em um local diferente de /usr/local/pgsql?
413
Especifique a op��o --prefix quando executar o configure.
415
3.2) Como eu controlo conex�es de outras m�quinas?
417
Por padr�o, o PostgreSQL s� permite conex�es da m�quina local
418
utilizando soquetes de dom�nio Unix ou conex�es TCP/IP. Outras
419
m�quinas n�o poder�o conectar-se a menos que voc� modifique
420
listen_addresses no postgresql.conf, habilite a autentica��o por
421
m�quina modificando o arquivo $PGDATA/pg_hba.conf e reinicie o
424
3.3) Como eu ajusto o servidor de banco de dados para obter uma performance
427
H� tr�s grandes �reas para melhorar a performance em potencial:
430
Isto involve modificar consultas para obter melhor performance:
432
+ Cria��o de �ndices, incluir express�es e �ndices parciais
433
+ Utiliza��o o COPY ao inv�s de m�ltiplos comandos INSERTs
434
+ Agrupamento de m�ltiplos comandos em uma �nica transa��o para
435
diminuir a despesa com efetiva��es (commit)
436
+ Utiliza��o do CLUSTER quando recuperar v�rios registros de um
438
+ Utiliza��o do LIMIT para retornar um subconjunto da sa�da da
440
+ Utiliza��o de Consultas preparadas
441
+ Utiliza��o de ANALYZE para manter as estat�sticas do
443
+ Utiliza��o regular do VACUUM ou pg_autovacuum
444
+ Remo��o de �ndices durante grande mudan�a de dados
446
Configura��o do Servidor
447
Um grande n�mero de configura��es que afetam a performance.
448
Para obter detalhes adicionais, veja Administration
449
Guide/Server Run-time Environment/Run-time Configuration para
450
listagem completa, e para coment�rios veja
451
http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_co
453
http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html.
456
O efeito do hardware na performance � detalhado em
457
http://www.powerpostgresql.com/PerfList/ e
458
http://momjian.us/main/writings/pgsql/hw_performance/index.html
461
3.4) Quais caracter�sticas de depura��o est�o dispon�veis?
463
H� muitas vari�veis de configura��o do servidor log_* que habilitam a
464
exibi��o de consultas e estat�sticas que podem ser muito �teis para
465
depura��o e medidas de performance.
467
3.5) Por que eu recebo "Sorry, too many clients" quando eu tento conectar?
469
Voc� atingiu o limite padr�o de 100 sess�es. Voc� precisa aumentar o
470
limite do servidor PostgreSQL, que diz quantos processos servidor
471
concorrentes ele pode iniciar, alterando o valor max_connections no
472
postgresql.conf e reiniciando o postmaster.
474
3.6) Qual � o processo de atualiza��o do PostgreSQL?
476
Veja http://www.postgresql.org/support/versioning para discuss�o geral
478
http://www.postgresql.org/docs/current/static/install-upgrading.html
479
para instru��es espec�ficas.
481
3.7) Que tipo de hardware eu devo usar?
483
Por causa do hardware de PC ser em sua maioria compat�vel, pessoas
484
tendem a acreditar que todos os hardwares de PC s�o de mesma
485
qualidade. N�o � verdade. ECC RAM, SCSI e placas m�e de qualidade s�o
486
mais confi�veis e t�m uma melhor performance do que hardwares mais
487
baratos. O PostgreSQL executar� em quase todo hardware, mas se a
488
confiabilidade e a performance forem importantes � prudente pesquisar
489
sobre as op��es de hardware. Nossas listas de discuss�o podem ser
490
usadas para discutir op��es de hardware e dilemas.
491
_________________________________________________________________
493
Perguntas Operacionais
495
4.1) Como eu fa�o um SELECT somente dos primeiros registros de uma consulta?
496
Um registro rand�mico?
498
Para obter somente alguns registros, se voc� sabe o n�mero de
499
registros necess�rios ao executar o SELECT utilize o LIMIT. Se um
500
�ndice corresponde no ORDER BY � poss�vel que a consulta toda n�o
501
tenha que ser executada. Se voc� n�o sabe o n�mero de registros ao
502
executar o SELECT, utilize um cursor e o FETCH.
504
Para obter um registro rand�mico, utilize:
510
4.2) Como eu descubro quais tabelas, �ndices, bancos de dados e usu�rios
511
est�o definidos? Como eu vejo as consultas utilizadas pelo psql para
514
Utilize o comando \dt para ver tabelas no psql. Para obter uma lista
515
completa dos comandos no psql voc� pode utilizar \?. Alternativamente,
516
voc� pode ler o c�digo-fonte do psql no arquivo
517
pgsql/src/bin/psql/describe.c, ele cont�m os comandos SQL que geram a
518
sa�da para os comandos de contrabarra do psql. Voc� tamb�m pode
519
iniciar o psql com a op��o -E para que as consultas utilizadas para
520
executar os comandos que voc� informou seja exibida. O PostgreSQL
521
tamb�m fornece uma inteface compat�vel com SQL do INFORMATION SCHEMA
522
que voc� pode consultar para obter informa��o sobre o banco de dados.
524
H� tamb�m tabelas do sistema que come�am com pg_ que os descrevem
527
Utilizando o psql -l listar� todos os bancos de dados.
529
Veja tamb�m o arquivo pgsql/src/tutorial/syscat.source. Ele ilustra
530
muitos dos comandos SELECTs necess�rios para obter informa��o das
531
tabelas de sistema do banco de dados.
533
4.3) Como voc� muda o tipo de dado de uma coluna?
535
Mudar o tipo de dado de uma coluna pode ser feito facilmente na vers�o
536
8.0 ou superior com ALTER TABLE ALTER COLUMN TYPE.
538
Em vers�es anteriores, fa�a isso:
540
ALTER TABLE tab ADD COLUMN col_nova novo_tipo_dado;
541
UPDATE tab SET col_nova = CAST(col_antiga AS novo_tipo_dado);
542
ALTER TABLE tab DROP COLUMN col_antiga;
545
Voc� pode ent�o querer fazer um VACUUM FULL tab para recuperar o
546
espa�o em disco utilizado pelos registros expirados.
548
4.4) Qual � o tamanho m�ximo de um registro, uma tabela e um banco de dados?
550
Estes s�o os limites:
552
Tamanho m�ximo de um banco de dados? ilimitado (existem bancos de
554
Tamanho m�ximo de uma tabela? 32 TB
555
Tamanho m�ximo de um registro? 400 GB
556
Tamanho m�ximo de um campo? 1 GB
557
N�mero m�ximo de registros em uma tabela? ilimitado
558
N�mero m�ximo de colunas em uma tabela? 250-1600 dependendo dos tipos
560
N�mero m�ximo de �ndices em uma tabela? ilimitado
562
� claro, que eles n�o s�o ilimitados, mas limitados ao espa�o em disco
563
dispon�vel e espa�o em mem�ria/swap. A Performance ser� penalizada
564
quando estes valores se tornarem grandes.
566
O tamanho m�ximo de uma tabela com 32 TB n�o requer suporte a arquivos
567
grandes do sistema operacional. Tabelas grandes s�o armazenadas como
568
m�ltiplos arquivos de 1 GB ent�o o limite do sistema de arquivos n�o �
571
O tamanho m�ximo de uma tabela, o tamanho de um registro e o n�mero
572
m�ximo de colunas podem ser quadruplicados aumentando-se o tamanho
573
padr�o do bloco para 32k. O tamanho m�ximo de uma tabela pode tamb�m
574
ser aumentado utilizando particionamento de tabela.
576
Uma limita��o � que �ndices n�o podem ser criados em colunas maiores
577
do que 2.000 caracteres. Felizmente, tais �ndices s�o raramente
578
necess�rios. Unicidade � melhor garantida por um �ndice de uma fun��o
579
de um hash MD5 de uma coluna longa, e indexa��o de texto longo permite
580
a busca de palavras dentro da coluna.
582
4.5) Quanto espa�o em disco � necess�rio para armazenar dados de um arquivo
585
Um banco de dados PostgreSQL ir� requerer at� cinco vezes a quantidade
586
de espa�o requerida para armazenar dados em um arquivo texto.
588
Como um exemplo, considere um arquivo com 100.000 linhas contendo um
589
inteiro e uma descri��o em cada linha. Suponha que o tamanho m�dio da
590
descri��o � de vinte bytes. O arquivo ter� 2,8 MB. O tamanho do
591
arquivo do banco de dados PostgreSQL que cont�m esses dados pode ser
593
24 bytes: cada cabe�alho de registro (aproximadamente)
594
24 bytes: um campo int e um campo texto
595
+ 4 bytes: ponteiro na p�gina para a tupla
596
-------------------------------------------
597
52 bytes por registro
599
O tamanho de uma p�gina de dados no PostgreSQL � 8192 bytes (8 KB), ent�o:
601
8192 bytes por p�gina
602
------------------------ = 158 registros por p�gina do banco de dados (arredondado para baixo)
603
52 bytes por registro
605
100000 registros de dados
606
---------------------------- = 633 p�ginas do banco de dados (arredondadopara cima)
607
158 registros por p�gina
609
633 p�ginas do banco de dados * 8192 bytes por p�gina = 5.185.536 bytes (5,2MB)
611
�ndices n�o requerem muito espa�o, mas cont�m dados que foram
612
indexados, ent�o eles podem ocupar algum espa�o.
614
NULLs s�o armazenados como bitmaps, ent�o eles utilizam muito pouco
617
4.6) Por que minhas consultas est�o lentas? Por que elas n�o est�o utilizando
620
�ndices n�o s�o utilizados por toda consulta. �ndices s�o utilizados
621
somente se a tabela � maior do que um tamanho m�nimo, e a consulta
622
seleciona somente uma pequena porcentagem dos registros da tabela.
623
Isto porque o acesso rand�mico ao disco causado pela busca indexada
624
pode ser mais lento do que uma leitura ao longo da tabela ou busca
627
Para determinar se um �ndice deveria ser utilizado, o PostgreSQL deve
628
ter estat�sticas sobre a tabela. Estas estat�sticas s�o coletadas
629
utilizando o VACUUM ANALYZE ou simplesmente o ANALYZE. Utilizando
630
estat�sticas, o otimizador sbae quantos registros est�o na tabela, e
631
pode melhor determinar se �ndices deveriam ser utilizados.
632
Estat�sticas tamb�m s�o �teis para determinar a ordem de jun��o �tima
633
e m�todos de jun��o. Cole��o de estat�sticas deveriam ser feitas
634
periodicamente a medida que o conte�do da tabela muda.
636
�ndices n�o s�o normalmente utilizados para ORDER BY ou para fazer
637
jun��es. Uma busca sequencial seguido por uma ordena��o expl�cita �
638
geralmente mais r�pida do que uma busca indexada em uma tabela grande.
639
Contudo, LIMIT combinado com ORDER BY frequentemente utilizar� �ndice
640
porque somente uma pequena por��o da tabela ser� retornada.
642
Se voc� acredita que o otimizador est� incorreto ao escolher uma busca
643
sequencial, utilize SET enable_seqscan TO 'off' e execute a consulta
644
novamente para ver se uma busca indexada � realmente mais r�pida.
646
Ao utilizar operadores curinga tais como LIKE ou ~, �ndices podem ser
647
utilizados somente em algumas condi��es:
648
* O in�cio da cadeia de caracteres da busca deve ser iniciar com uma
649
cadeia de caracteres, i.e.
650
+ modelos LIKE n�o devem iniciar com %.
651
+ modelos ~ (express�es regulares) devem iniciar com ^.
652
* A cadeia de caracteres utilizada na busca n�o pode iniciar com a
653
classe de caracteres e.g. [a-e].
654
* Busca que n�o diferenciam mai�sculas de min�sculas tais como ILIKE
655
e ~* n�o utilizam �ndices. Em vez disso, utilize �ndice de
656
express�o, que � descrito na se��o 4.8.
657
* O idioma padr�o C deve ser usando durante o initdb porque n�o �
658
poss�vel saber o pr�ximo caracter em idiomas que n�o sejam o C.
659
Voc� pode criar um �ndice especial text_pattern_ops para tais
660
casos que funcionam somente para indexa��o com LIKE. Tamb�m �
661
poss�vel utilizar indexa��o de busca textual para buscas por
664
Em vers�es anteriores a 8.0, �ndices frequentemente n�o podem ser
665
utilizados a menos que os tipos de dados correspondam aos tipos de
666
coluna do �ndice. Isto era particularmente verdadeiro para �ndices de
667
coluna int2, int8 e numeric.
669
4.7) Como eu vejo como o otimizador de consulta est� avaliando a minha
672
Veja o comando EXPLAIN no manual.
674
4.8) Como eu fa�o buscas com express�es regulares e buscas com express�es
675
regulares sem diferenciar mai�sculas de min�sculas? Como eu utilizo um �ndice
676
para buscas que n�o diferenciam mai�sculas de min�sculas?
678
O operador ~ faz avalia��o de express�es regulares, e ~* faz avalia��o
679
n�o sens�vel a mai�sculas de express�es regulares. A variante n�o
680
sens�vel a mai�sculas do LIKE � chamada de ILIKE.
682
Compara��es de igualdade n�o sens�veis a mai�sculas s�o normalmente
686
WHERE lower(col) = 'abc';
688
Isso n�o ir� utilizar o �ndice padr�o. Contudo, se voc� criar um
689
�ndice de express�o, ele ser� utilizado:
690
CREATE INDEX tabindex ON tab (lower(col));
692
Se o �ndice acima � criado como UNIQUE, embora a coluna possa
693
armazenar caracteres mai�sculos e min�sculos, ele n�o pode ter valores
694
id�nticos que diferem apenas em letras mai�sculas e min�sculas. Para
695
for�ar uma letra mai�scula ou min�scula a ser armazenada na coluna,
696
utilize uma restri��o CHECK ou um gatilho.
698
4.9) Em uma consulta, como eu detecto se um campo � NULL? Como eu posso
699
concatenar poss�veis NULLs? Como eu posso ordenar por um campo que � NULL ou
702
Voc� testa a coluna com IS NULL e IS NOT NULL, como a seguir:
707
Para concatenar com poss�veis NULLs, utilize COALESCE(), assim:
708
SELECT COALESCE(col1, '') || COALESCE(col2, '')
711
Para ordenar pelo status NULL, utilize os modificadores IS NULL e IS
712
NOT NULL na sua cl�usula ORDER BY. Coisas que s�o verdadeiro ser�o
713
ordenadas acima das coisas que s�o falso, ent�o a consulta a seguir
714
ir� colocar entradas NULL no in�cio da lista de resultados:
717
ORDER BY (col IS NOT NULL)
719
4.10) Qual � a diferen�a entre os v�rios tipos de dado de caracteres?
721
Tipo Nome Interno Observa��o
722
VARCHAR(n) varchar tamanho especifica o tamanho m�ximo, sem
724
CHAR(n) bpchar preenchimento em branco para comprimento fixo
726
TEXT text nenhum limite superior espec�fico no comprimento
727
BYTEA bytea vetor de bytes de comprimento vari�vel (seguro a byte
729
"char" char um caracter
731
Voc� ver� o nome interno quando examinar o cat�logo do sistema e em
732
algumas mensagens de erro.
734
Os primeiros quatro tipos acima s�o do tipo "varlena" (i.e., os
735
primeiros quatro bytes no disco s�o o comprimento seguido pelos
736
dados). Consequentemente o espa�o atual utilizado � ligeiramente maior
737
do que o tamanho declarado. Contudo, valores longos s�o tamb�m
738
sujeitos a compress�o, ent�o o espa�o em disco pode tamb�m ser bem
739
menor do que o esperado.
740
VARCHAR(n) � melhor quando est� armazenando cadeias de caracteres de
741
comprimento vari�vel e h� um limite de tamanho desta cadeia. TEXT �
742
para cadeias de caracteres de comprimento ilimitado, com o m�ximo de
745
CHAR(n) � para armazenar cadeias de caracteres que s�o todas do mesmo
746
tamanho. CHAR(n) preenche com espa�os em branco at� o tamanho
747
especificado, enquanto o VARCHAR(n) armazena somente os caracteres
748
fornecidos. BYTEA � para armazenar dados bin�rios, particularmente
749
valores que incluem bytes NULL. Todos os tipos descritos aqui tem
750
caracter�sticas de performance similares.
752
4.11.1) Como eu crio um campo serial/auto incremento?
754
PostgreSQL suporta o tipo de dados SERIAL. Ele cria automaticamente
755
uma sequ�ncia. Por exemplo:
756
CREATE TABLE pessoa (
761
� automaticamente traduzido em:
762
CREATE SEQUENCE pessoa_id_seq;
763
CREATE TABLE pessoa (
764
id INT4 NOT NULL DEFAULT nextval('pessoa_id_seq'),
768
Sequ�ncias automaticamente criadas s�o nomeadas como
769
<tabela>_<colunaserial>_seq, onde tabela e colunaserial s�o os nomes
770
da tabela e da coluna serial, respectivamente. Veja a p�gina sobre
771
create_sequence no manual para obter informa��es adicionais sobre
774
4.11.2) Como eu consigo o valor de um campo SERIAL?
776
A maneira mais simples de obter o pr�ximo valor SERIAL de uma
777
sequ�ncia � com RETURNING. Utilizando o exemplo da tabela em 4.11.1,
779
INSERT INTO pessoa (nome) VALUES ('Blaise Pascal') RETURNING id;
781
Voc� tamb�m pode chamar nextval() e utilizar o valor no INSERT ou
782
chamar currval() ap�s o INSERT.
784
4.11.3) currval() n�o lida com condi��o de corrida com outros usu�rios?
786
N�o. currval() retorna o valor atual atribuido pela sua sess�o, e n�o
787
por todas as sess�es.
789
4.11.4) Por que os n�meros da minha sequ�ncia n�o s�o reutilizados quando uma
790
transa��o � abortada? Por que h� intervalos nos n�meros da minha
791
sequ�ncia/coluna SERIAL?
793
Para melhorar a concorr�ncia, valores da sequ�ncia s�o atribu�dos a
794
transa��es correntes e n�o s�o travados at� que a transa��o seja
795
finalizada. Isso causa intervalos na numera��o por causa de transa��es
798
4.12) O que � um OID? O que � um CTID?
800
Se uma tabela � criada com WITH OIDS, cada registro recebe um OID
801
�nico. OIDs s�o automaticamente atribu�dos como inteiros de 4 bytes
802
que s�o �nicos ao longo de toda instala��o. Contudo, eles s�o
803
limitados em 4 bilh�es e, ent�o, os OIDs come�am a ser duplicados. O
804
PostgreSQL utiliza OIDs para ligar as tabelas do sistema.
806
Para numerar registros nas tabelas do usu�rios, � melhor utilizar
807
SERIAL ao inv�s de OIDs porque sequ�ncias SERIAL s�o �nicas somente em
808
uma tabela; e s�o menos prop�cias a atingir o limite. SERIAL8 est�
809
dispon�vel para armazenar valores de sequ�ncias com oito bytes.
811
CTIDs s�o utilizados para identificar registros f�sicos espec�ficos
812
com valores de block e deslocamento. CTIDs mudam ap�s registros serem
813
modificados ou recarregados. Eles s�o utilizados por �ndices para
814
apontar registros f�sicos.
816
4.13) Por que eu recebo o erro "ERROR: Memory exhausted in AllocSetAlloc()"?
818
Voc� provavelmente est� sem mem�ria virtual no seu sistema, ou o seu
819
n�cleo (kernel) tem um limite baixo para certos recursos. Tente isto
820
antes de iniciar o servidor PostgreSQL:
824
Dependendo da sua shell, somente um desses comando ter� sucesso, mas
825
ele definir� o segmento de dados do seu processo com um limite maior e
826
talvez permita que a consulta seja feita. Este comando � aplicado ao
827
processo atual e todos os subprocessos criados depois do comando ser
828
executado. Se voc� tiver problemas com o cliente SQL porque o processo
829
servidor retornou muitos dados, tente-o antes de iniciar o cliente.
831
4.14) Como eu informo qual vers�o do PostgreSQL eu estou utilizando?
833
No psql, digite SELECT version();
835
4.15) Como eu crio uma coluna que conter� por padr�o a hora atual?
837
Utilize CURRENT_TIMESTAMP:
838
CREATE TABLE teste (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP);
840
4.16) Como eu fa�o uma jun��o externa (outer join)?
842
PostgreSQL suporta jun��es externas utilizando a sintaxe padr�o do
843
SQL. Aqui temos dois exemplos:
845
FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
849
FROM t1 LEFT OUTER JOIN t2 USING (col);
851
Essas duas consultas ind�nticas juntam t1.col com t2.col, e tamb�m
852
retornam qualquer registro que n�o foi juntado em t1 (aqueles que n�o
853
combinaram com t2). Uma jun��o a direita RIGHT adicionaria registros
854
que n�o foram juntados da tabela t2. Uma jun��o completa (FULL)
855
retornaria os registros combinados mais todos os registros n�o
856
combinados de t1 e t2. A palavra OUTER � opcional e � assumida nas
857
jun��es LEFT, RIGHT e FULL. Jun��es ordin�rias s�o chamadas jun��es
860
4.17) Como eu fa�o consultas utilizando m�ltiplos bancos de dados?
862
N�o h� outra maneira de consultar um banco de dados caso ele n�o seja
863
o atual. Porque o PostgreSQL carrega cat�logos do sistema espec�ficos
864
do banco de dados, � incerto como uma consulta em banco de dados
865
distintos pode se comportar.
867
contrib/dblink permite consultas em bancos de dados distintos
868
utilizando chamadas de fun��es. � claro, que um cliente pode fazer
869
conex�es simult�neas em bancos de dados diferentes e juntar os
870
resultados no cliente.
872
4.18) Como eu retorno m�ltiplos registros ou colunas de uma fun��o?
874
� f�cil utilizando fun��es que retornam conjunto,
875
http://www.postgresql.org/docs/techdocs.17.
877
4.19) Por que eu obtenho erros "relation with OID ###### does not exist" ao
878
acessar tabelas tempor�rias em fun��es PL/PgSQL?
880
Em vers�es do PostgreSQL < 8.3, PL/PgSQL armazena o conte�do da
881
fun��o, e o efeito indesejado � que se uma fun��o PL/PgSQL acessa uma
882
tabela tempor�ria, e aquela tabela � removida e criada novamente, e a
883
fun��o � chamada novamente, a fun��o ir� falhar porque o conte�do
884
armazenado da fun��o ainda apontar� para a tabela tempor�ria antiga. A
885
solu��o � utilizar o EXECUTE para acesso a tabelas tempor�rias no
886
PL/PgSQL. Isto ir� fazer com que a consulta seja avaliada toda vez.
888
Este problema n�o ocorre no PostgreSQL 8.3 ou superior.
890
4.20) Quais solu��es de replica��o est�o dispon�veis?
892
Embora "replica��o" seja um termo simples, h� v�rias tecnologias para
893
fazer replica��o, com vantagens e desvantagens para cada um.
895
Replica��o mestre/escravo permite que um mestre receba consultas de
896
leitura e escrita, enquanto os escravos s� podem aceitar
897
leitura/consultas SELECT. A solu��o mais popular de replica��o
898
mestre-escravo para PostgreSQL dispon�vel livremente � Slony-I.
900
Replica��o com m�ltiplos mestres permite que consultas leitura/escrita
901
sejam enviadas para m�ltiplos computadores replicadores. Esta
902
capacidade tamb�m tem um s�rio impacto na performance por causa da
903
necessidade de sincronizar as mudan�as entre os servidores. PGCluster
904
� a solu��o mais popular dispon�vel livremente para PostgreSQL.
906
H� tamb�m solu��es de replica��o comerciais e baseadas em hardware
907
dispon�veis que suportam uma variedade de modelos de replica��o.
909
4.21) Por que os nomes de minhas tabelas e colunas n�o s�o reconhecidos em
910
minha consulta? Por que as mai�sculas n�o s�o preservadas?
912
A causa mais comum de nomes desconhecidos � o uso de aspas ao redor
913
dos nomes da tabela ou coluna durante a cria��o da tabela. Ao utilizar
914
aspas, nomes de tabela e coluna (chamados de identificadores) s�o
915
armazenados como especificado, significando que voc� deve utilizar
916
aspas quando se referir aos nomes na consulta. Algumas interfaces,
917
como pgAdmin, automaticamente colocam aspas nos identificadores
918
durante a cria��o da tabela. Ent�o, para identificadores serem
919
reconhecidos, voc� deve:
920
* Evitar colocar aspas no identificador ao criar tabelas
921
* Utilizar somente caracteres min�sculos em identificadores
922
* Colocar aspas em identificadores ao referenci�-los nas consultas