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-2008, 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