Put back fast-path for the case that there's no backup blocks in
[PostgreSQL.git] / doc / FAQ_brazilian
blob16d47428b3c948ce77480243c60279ddaddd3ef5
2                   Perguntas Frequentes (FAQ) sobre PostgreSQL
3                                        
4    Última atualização: Sex Nov 16 10:53:50 EST 2007
5    
6    Mantenedor atual: Bruce Momjian (bruce@momjian.us)
7    
8    Traduzido por: Euler Taveira de Oliveira (euler@timbira.com)
9    
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
13    (pt_BR).
14    
15    Perguntas sobre plataformas específicas são respondidas em
16    http://www.postgresql.org/docs/faq/.
17      _________________________________________________________________
18    
19                               Perguntas Gerais
20                                       
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
34    de desenvolvimento?
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?
38    
39                           Perguntas sobre Clientes
40                                       
41    2.1) Quais interfaces estão disponíveis para PostgreSQL?
42    2.2) Quais ferramentas estão disponíveis para utilizar o PostgreSQL
43    com páginas Web?
44    2.3) O PostgreSQL tem interfaces gráficas para interagir com usuário?
45    
46                          Perguntas Administrativas
47                                       
48    3.1) Como eu instalo o PostgreSQL em um local diferente de
49    /usr/local/pgsql?
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
52    performance melhor?
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
55    conectar?
56    3.6) Qual é o processo de atualização do PostgreSQL?
57    3.7) Que tipo de hardware eu devo usar?
58    
59                            Perguntas Operacionais
60                                       
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
65    psql para mostrá-los?
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
68    dados?
69    4.5) Quanto espaço em disco é necessário para armazenar dados de um
70    arquivo texto?
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
74    consulta?
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
80    que é NULL ou não?
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
85    usuários?
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
91    AllocSetAlloc()"?
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
102    preservadas?
103      _________________________________________________________________
104    
105                               Perguntas Gerais
106                                       
107   1.1) O que é PostgreSQL? Como ele é pronunciado? O que é Postgres?
108   
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).
111    
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á
116    disponível.
117    
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
123    
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
127    apenas 'Postgres'.
128    
129   1.2) Quem controla o PostgreSQL?
130   
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.
139    
140   1.3) Qual é a licença do PostgreSQL?
141   
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
148    usamos atualmente:
149    
150    PostgreSQL está sujeito a seguinte licença:
151    
152    PostgreSQL Data Base Management System
153    
154    Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group
155    Portions Copyright (c) 1994-1996 Regents of the University of
156    California
157    
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
162    copies.
163    
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.
169    
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.
176    
177   1.4) Quais plataformas o PostgreSQL pode ser executado?
178   
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
182    instalação.
183    
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
189    o Cygwin.
190    
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.
195    
196   1.5) Onde eu posso conseguir o PostgreSQL?
197   
198    Via navegador web, utilize http://www.postgresql.org/ftp/ e via ftp,
199    utilize ftp://ftp.postgresql.org/pub/.
200    
201   1.6) Qual é a última versão?
202   
203    A última versão do PostgreSQL é a versão 8.2.5.
204    
205    Nós planejamos lançar versões novas a cada ano com versões corretivas
206    em alguns meses.
207    
208   1.7) Onde eu posso conseguir suporte?
209   
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.
214    
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
220    PostgreSQL na EFNet.
221    
222    Uma lista de empresas que prestam suporte comercial está disponível em
223    http://www.postgresql.org/support/professional_support.
224    
225   1.8) Como eu informo a existência de um bug?
226   
227    Visite o formulário que reporta bugs do PostgreSQL em
228    http://www.postgresql.org/support/submitbug.
229    
230    Verifique também o nosso ftp ftp://ftp.postgresql.org/pub para ver se
231    há uma versão mais recente do PostgreSQL.
232    
233    Bugs submetidos utilizando o formulário ou informado a qualquer lista
234    de discussão do PostgreSQL tipicamente gera uma das seguintes
235    respostas:
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
249             lista de AFAZERES
250        
251   1.9) Como eu posso saber quais são os bugs conhecidos ou funcionalidades
252   ausentes?
253   
254    O PostgreSQL suporta um subconjunto extendido do SQL:2003. Veja nossa
255    lista de AFAZERES que contém bugs conhecidos, funcionalidades ausentes
256    e planos futuros.
257    
258    Uma solicitação de funcionalidade geralmente resulta em uma das
259    seguintes respostas:
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
263             padrão SQL
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
268        
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
276    feitas no programa.
277    
278   1.10) Que documentação está disponível?
279   
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.
284    
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/.
293    
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.
297    
298    Nosso sítio web contém ainda mais documentação.
299    
300   1.11) Como eu posso aprender SQL?
301   
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.
306    
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
312        
313   1.12) Como posso submeter uma correção (patch) ou me juntar a equipe de
314   desenvolvimento?
315   
316    Veja a FAQ do Desenvolvedor.
317    
318   1.13) Como é o PostgreSQL comparado a outros SGBDs?
319   
320    Há várias maneiras de se medir um software: funcionalidades,
321    performance, confiabilidade, suporte e preço.
322    
323    Funcionalidades
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
330           bloqueios (locks).
331           
332    Performance
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.
337           
338    Confiabilidade
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
346           nessa área.
347           
348    Suporte
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
357           seção 1.7 da FAQ).
358           
359    Preço
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
363           mencionada acima.
364           
365   1.14) O PostgreSQL gerenciará mudanças no horário devido ao horário de verão
366   em vários países?
367   
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      _________________________________________________________________
375    
376                           Perguntas sobre Clientes
377                                       
378   2.1) Quais interfaces estão disponíveis para PostgreSQL?
379   
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.
384    
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.
388    
389   2.2) Quais ferramentas estão disponíveis para utilizar o PostgreSQL com
390   páginas Web?
391   
392    Uma boa introdução para páginas web que utilizam bancos de dados pode
393    ser vista em: http://www.webreview.com
394    
395    Para integração na Web, PHP (http://www.php.net) é uma excelente
396    interface.
397    
398    Para casos complexos, muitos usam a Interface Perl e DBD::Pg com
399    CGI.pm ou mod_perl.
400    
401   2.3) O PostgreSQL tem interfaces gráficas para iteragir com o usuário?
402   
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      _________________________________________________________________
408    
409                          Perguntas Administrativas
410                                       
411   3.1) Como eu instalo o PostgreSQL em um local diferente de /usr/local/pgsql?
412   
413    Especifique a opção --prefix quando executar o configure.
414    
415   3.2) Como eu controlo conexões de outras máquinas?
416   
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
422    servidor PostgreSQL.
423    
424   3.3) Como eu ajusto o servidor de banco de dados para obter uma performance
425   melhor?
426   
427    Há três grandes áreas para melhorar a performance em potencial:
428    
429    Mudança de Consultas
430           Isto involve modificar consultas para obter melhor performance:
431           
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
437             índice
438           + Utilização do LIMIT para retornar um subconjunto da saída da
439             consulta
440           + Utilização de Consultas preparadas
441           + Utilização de ANALYZE para manter as estatísticas do
442             otimizador corretas
443           + Utilização regular do VACUUM ou pg_autovacuum
444           + Remoção de índices durante grande mudança de dados
445             
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
452           nf_e.html e
453           http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html.
454           
455    Seleção do Hardware
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
459           .
460           
461   3.4) Quais características de depuração estão disponíveis?
462   
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.
466    
467   3.5) Por que eu recebo "Sorry, too many clients" quando eu tento conectar?
468   
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.
473    
474   3.6) Qual é o processo de atualização do PostgreSQL?
475   
476    Veja http://www.postgresql.org/support/versioning para discussão geral
477    sobre atualizações e
478    http://www.postgresql.org/docs/current/static/install-upgrading.html
479    para instruções específicas.
480    
481   3.7) Que tipo de hardware eu devo usar?
482   
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      _________________________________________________________________
492    
493                            Perguntas Operacionais
494                                       
495   4.1) Como eu faço um SELECT somente dos primeiros registros de uma consulta?
496   Um registro randômico?
497   
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.
503    
504    Para obter um registro randômico, utilize:
505     SELECT col
506     FROM tab
507     ORDER BY random()
508     LIMIT 1;
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
512   mostrá-los?
513   
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.
523    
524    Há também tabelas do sistema que começam com pg_ que os descrevem
525    também.
526    
527    Utilizando o psql -l listará todos os bancos de dados.
528    
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.
532    
533   4.3) Como você muda o tipo de dado de uma coluna?
534   
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.
537    
538    Em versões anteriores, faça isso:
539     BEGIN;
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;
543     COMMIT;
545    Você pode então querer fazer um VACUUM FULL tab para recuperar o
546    espaço em disco utilizado pelos registros expirados.
547    
548   4.4) Qual é o tamanho máximo de um registro, uma tabela e um banco de dados?
549   
550    Estes são os limites:
551    
552    Tamanho máximo de um banco de dados? ilimitado (existem bancos de
553    dados de 32 TB)
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
559    das colunas
560    Número máximo de índices em uma tabela? ilimitado
561    
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.
565    
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 é
569    importante.
570    
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.
575    
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.
581    
582   4.5) Quanto espaço em disco é necessário para armazenar dados de um arquivo
583   texto?
584   
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.
587    
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
592    estimado em 5,2 MB:
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.
613    
614    NULLs são armazenados como bitmaps, então eles utilizam muito pouco
615    espaço.
616    
617   4.6) Por que minhas consultas estão lentas? Por que elas não estão utilizando
618   meus índices?
619   
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
625    sequencial.
626    
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.
635    
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.
641    
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.
645    
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
662        palavras.
663        
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.
668    
669   4.7) Como eu vejo como o otimizador de consulta está avaliando a minha
670   consulta?
671   
672    Veja o comando EXPLAIN no manual.
673    
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?
677   
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.
681    
682    Comparações de igualdade não sensíveis a maiúsculas são normalmente
683    expressadas como:
684     SELECT *
685     FROM tab
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.
697    
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
700   não?
701   
702    Você testa a coluna com IS NULL e IS NOT NULL, como a seguir:
703    SELECT *
704    FROM tab
705    WHERE col IS NULL;
707    Para concatenar com possíveis NULLs, utilize COALESCE(), assim:
708    SELECT COALESCE(col1, '') || COALESCE(col2, '')
709    FROM tab
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:
715    SELECT *
716    FROM tab
717    ORDER BY (col IS NOT NULL)
719   4.10) Qual é a diferença entre os vários tipos de dado de caracteres?
720   
721    Tipo Nome Interno Observação
722    VARCHAR(n) varchar tamanho especifica o tamanho máximo, sem
723    preenchimento
724    CHAR(n) bpchar preenchimento em branco para comprimento fixo
725    específico
726    TEXT text nenhum limite superior específico no comprimento
727    BYTEA bytea vetor de bytes de comprimento variável (seguro a byte
728    nulo)
729    "char" char um caracter
730    
731    Você verá o nome interno quando examinar o catálogo do sistema e em
732    algumas mensagens de erro.
733    
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
743    um gigabyte.
744    
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.
751    
752   4.11.1) Como eu crio um campo serial/auto incremento?
753   
754    PostgreSQL suporta o tipo de dados SERIAL. Ele cria automaticamente
755    uma sequência. Por exemplo:
756     CREATE TABLE pessoa (
757         id   SERIAL,
758         nome TEXT
759     );
761    é automaticamente traduzido em:
762     CREATE SEQUENCE pessoa_id_seq;
763     CREATE TABLE pessoa (
764         id   INT4 NOT NULL DEFAULT nextval('pessoa_id_seq'),
765         nome TEXT
766     );
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
772    sequências.
773    
774   4.11.2) Como eu consigo o valor de um campo SERIAL?
775   
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,
778    ele ficaria assim:
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.
783    
784   4.11.3) currval() não lida com condição de corrida com outros usuários?
785   
786    Não. currval() retorna o valor atual atribuido pela sua sessão, e não
787    por todas as sessões.
788    
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?
792   
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
796    abortadas.
797    
798   4.12) O que é um OID? O que é um CTID?
799   
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.
805    
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.
810    
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.
815    
816   4.13) Por que eu recebo o erro "ERROR: Memory exhausted in AllocSetAlloc()"?
817   
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:
821     ulimit -d 262144
822     limit datasize 256m
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.
830    
831   4.14) Como eu informo qual versão do PostgreSQL eu estou utilizando?
832   
833    No psql, digite SELECT version();
834    
835   4.15) Como eu crio uma coluna que conterá por padrão a hora atual?
836   
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)?
841   
842    PostgreSQL suporta junções externas utilizando a sintaxe padrão do
843    SQL. Aqui temos dois exemplos:
844     SELECT *
845     FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
847    or
848     SELECT *
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
858    internas (INNER).
859    
860   4.17) Como eu faço consultas utilizando múltiplos bancos de dados?
861   
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.
866    
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.
871    
872   4.18) Como eu retorno múltiplos registros ou colunas de uma função?
873   
874    É fácil utilizando funções que retornam conjunto,
875    http://www.postgresql.org/docs/techdocs.17.
876    
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?
879   
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.
887    
888    Este problema não ocorre no PostgreSQL 8.3 ou superior.
889    
890   4.20) Quais soluções de replicação estão disponíveis?
891   
892    Embora "replicação" seja um termo simples, há várias tecnologias para
893    fazer replicação, com vantagens e desvantagens para cada um.
894    
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.
899    
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.
905    
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.
908    
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?
911   
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