2004-06-09 23:46:11 -04:00
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
< HTML >
< HEAD >
< META name = "generator" content = "HTML Tidy, see www.w3.org" >
2006-11-20 15:58:40 -05:00
< META http-equiv = "Content-Type" content = "text/html; charset=iso-8859-1" >
2004-06-09 23:46:11 -04:00
< TITLE > FAQ do PostgreSQL< / TITLE >
< / HEAD >
< BODY bgcolor = "#ffffff" text = "#000000" link = "#ff0000" vlink = "#a00000"
alink="#0000ff">
< H1 > Perguntas Frequentes (FAQ) sobre PostgreSQL< / H1 >
2006-11-20 15:58:40 -05:00
< P > Ú ltima atualizaç ã o: Sá b Out 14 19:08:19 EDT 2006< / P >
2004-06-09 23:46:11 -04:00
< P > Mantenedor atual: Bruce Momjian (< A href =
2006-11-20 15:58:40 -05:00
"mailto:bruce@momjian.us">bruce@momjian.us< / A > )
2004-06-09 23:46:11 -04:00
< / P >
< P > Traduzido por: Euler Taveira de Oliveira (< A href =
2006-11-20 15:58:40 -05:00
"mailto:euler@timbira.com">euler@timbira.com< / A > )< / P >
2004-06-09 23:46:11 -04:00
< P > A versã o mais recente desse documento pode ser vista em < A href =
2005-01-15 17:14:08 -05:00
"http://www.postgresql.org/files/documentation/faqs/FAQ.html">
http://www.postgresql.org/files/documentation/faqs/FAQ.html< / A > (EN).< BR >
< A href = "http://www.postgresql.org/files/documentation/faqs/FAQ_brazilian.html" >
http://www.postgresql.org/files/documentation/faqs/FAQ_brazilian.html< / A > (pt_BR).< / P >
2004-06-09 23:46:11 -04:00
< P > Perguntas sobre plataformas especí ficas sã o respondidas em < A href =
2005-01-15 17:14:08 -05:00
"http://www.postgresql.org/docs/faq/">http://www.postgresql.org/docs/faq/< / A > .< / P >
2004-06-09 23:46:11 -04:00
< HR >
< H2 align = "center" > Perguntas Gerais< / H2 >
2006-11-20 15:58:40 -05:00
< A href = "#item1.1" > 1.1< / A > ) O que é PostgreSQL? Como ele é pronunciado?< BR >
< A href = "#item1.2" > 1.2< / A > ) Quem controla o PostgreSQL?< BR >
< A href = "#item1.3" > 1.3< / A > ) Qual é a licenç a do PostgreSQL?< BR >
< A href = "#item1.4" > 1.4< / A > ) Quais plataformas o PostgreSQL pode ser executado?< BR >
< A href = "#item1.5" > 1.5< / A > ) Onde eu posso conseguir o PostgreSQL?< BR >
< A href = "#item1.6" > 1.6< / A > ) Qual é a ú ltima versã o?< BR >
< A href = "#item1.7" > 1.7< / A > ) Onde eu posso conseguir suporte?< BR >
< A href = "#item1.8" > 1.8< / A > ) Como eu posso submeter um relato de um bug?< BR >
< A href = "#item1.9" > 1.9< / A > ) Como eu posso saber quais sã o os bugs conhecidos ou caracterí sticas ausentes?< BR >
< A href = "#item1.10" > 1.10< / A > ) Que documentaç ã o está disponí vel?< BR >
< A href = "#item1.11" > 1.11< / A > ) Como eu posso aprender < SMALL > SQL< / SMALL > ?< BR >
< A href = "#item1.12" > 1.12< / A > ) Como posso submeter uma correç ã o (patch) ou me juntar a equipe de desenvolvimento?< BR >
< A href = "#item1.13" > 1.13< / A > ) Como é o PostgreSQL comparado a outros < SMALL > SGBD< / SMALL > s?< BR >
2004-06-09 23:46:11 -04:00
< H2 align = "center" > Perguntas sobre Clientes< / H2 >
2006-11-20 15:58:40 -05:00
< A href = "#item2.1" > 2.1< / A > ) Quais interfaces estã o disponí veis para PostgreSQL?< BR >
< A href = "#item2.2" > 2.2< / A > ) Quais ferramentas estã o disponí veis para utilizar o PostgreSQL com pá ginas Web?< BR >
< A href = "#item2.3" > 2.3< / A > ) O PostgreSQL tem interfaces grá ficas para interagir com usuá rio?< BR >
2004-06-09 23:46:11 -04:00
< H2 align = "center" > Perguntas Administrativas< / H2 >
2006-11-20 15:58:40 -05:00
< A href = "#item3.1" > 3.1< / A > ) Como eu instalo o PostgreSQL em um local diferente de < I > /usr/local/pgsql< / I > ?< BR >
< A href = "#item3.2" > 3.2< / A > ) Como eu controlo conexõ es de outras má quinas?< BR >
< A href = "#item3.3" > 3.3< / A > ) Como eu ajusto o servidor de banco de dados para obter uma performance melhor?< BR >
< A href = "#item3.4" > 3.4< / A > ) Quais caracterí sticas de depuraç ã o estã o disponí veis?< BR >
< A href = "#item3.5" > 3.5< / A > ) Por que eu recebo < I > "Sorry, too many clients"< / I > quando eu tento conectar?< BR >
< A href = "#item3.6" > 3.6< / A > ) Qual é o processo de atualizaç ã o do PostgreSQL?< / H3 >
< A href = "#item3.7" > 3.7< / A > ) Que tipo de hardware eu devo usar?< BR >
2004-06-09 23:46:11 -04:00
< H2 align = "center" > Perguntas Operacionais< / H2 >
2006-11-20 15:58:40 -05:00
< A href = "#item4.1" > 4.1< / A > ) Como eu faç o um < SMALL > SELECT< / SMALL > somente dos primeiros registros de uma consulta? Um registro randô mico?< BR >
< A href = "#item4.2" > 4.2< / A > ) Como eu descubro quais tabelas, í ndices, bancos de dados e usuá rios estã o definidos? Como eu vejo as consultas utilizadas pelo < I > psql< / I > para mostrá -los?< BR >
< A href = "#item4.3" > 4.3< / A > ) Como você muda o tipo de dado de uma coluna?< BR >
< A href = "#item4.4" > 4.4< / A > ) Qual é o tamanho má ximo de um registro, uma tabela e um banco de dados?< BR >
< A href = "#item4.5" > 4.5< / A > ) Quanto espaç o em disco é necessá rio para armazenar dados de um arquivo texto?< BR >
< A href = "#item4.6" > 4.6< / A > ) Por que minhas consultas estã o lentas? Por que elas nã o estã o utilizando meus í ndices?< BR >
< A href = "#item4.7" > 4.7< / A > ) Como eu vejo como o otimizador de consultas está avaliando minha consulta?< BR >
< A href = "#item4.8" > 4.8< / A > ) Como eu faç o buscas com expressõ es regulares e buscas com expressõ es regulares sem diferenciar mauú sculas de minú sculas? Como eu utilizo um í ndice para buscas sem distinguir maiú sculas de minú sculas?< BR >
< A href = "#item4.9" > 4.9< / A > ) Em uma consulta, como eu detecto se um campo é < SMALL > NULL< / SMALL > ? Como eu posso ordenar por um campo que é < SMALL > NULL< / SMALL > ou nã o?< BR >
< A href = "#item4.10" > 4.10< / A > ) Qual é a diferenç a entre os vá rios tipos de dado de caracteres?< BR >
< A href = "#item4.11.1" > 4.11.1< / A > ) Como eu crio um campo serial/auto incremento?< BR >
< A href = "#item4.11.2" > 4.11.2< / A > ) Como eu consigo o valor de um campo
2004-06-09 23:46:11 -04:00
< SMALL > SERIAL< / SMALL > ?< BR >
2006-11-20 15:58:40 -05:00
< A href = "#item4.11.3" > 4.11.3< / A > ) < I > currval()< / I > nã o lida com condiç ã o de corrida com outros usuá rios?< BR >
< A href = "#item4.11.4" > 4.11.4< / A > ) Por que os nú meros da minha sequê ncia nã o sã o reutilizados quando uma transaç ã o é abortada? Por que há intervalos nos nú meros da minha sequê ncia/coluna SERIAL?< BR >
< A href = "#item4.12" > 4.12< / A > ) O que é um < SMALL > OID< / SMALL > ? O que é um < SMALL > CTID< / SMALL > ?< BR >
< A href = "#item4.13" > 4.13< / A > ) Por que eu recebo o erro < I > "ERROR: Memory exhausted in AllocSetAlloc()"< / I > ?< BR >
< A href = "#item4.14" > 4.14< / A > ) Como eu informo qual versã o do PostgreSQL eu estou utilizando?< BR >
< A href = "#item4.15" > 4.15< / A > ) Como eu crio uma coluna que conterá por padrã o a hora atual?< BR >
< A href = "#item4.16" > 4.16< / A > ) Como eu faç o uma junç ã o externa (outer join)?< BR >
< A href = "#item4.17" > 4.17< / A > ) Como eu faç o consultas utilizando mú ltiplos bancos de dados?< BR >
< A href = "#item4.18" > 4.18< / A > ) Como eu retorno mú ltiplos registros ou colunas de uma funç ã o?< BR >
< A href = "#item4.19" > 4.19< / A > ) Por que eu obtenho erros "relation with OID ######
does not exist" ao acessar tabelas temporá rias em funç õ es PL/PgSQL?< BR >
< A href = "#item4.20" > 4.20< / A > ) Quais soluç õ es de replicaç ã o estã o disponí veis?< BR >
< A href = "#item4.21" > 4.21< / A > ) Por que os nomes de minhas tabelas e colunas nã o
sã o reconhecidos em minha consulta?< BR >
2004-06-09 23:46:11 -04:00
< HR >
< H2 align = "center" > Perguntas Gerais< / H2 >
2006-11-20 15:58:40 -05:00
< H3 id = "item1.1" > 1.1) O que é PostgreSQL? Como ele é pronunciado?< / H3 >
< P > PostgreSQL é pronunciado < I > Post-Gres-Q-L< / I > , e é , à s vezes, referido apenas como
< I > Postgres< / I > . Um arquivo de á udio está disponí vel em
< a href = "http://www.postgresql.org/files/postgresql.mp3" > formato MP3< / a > para
aqueles que gostariam de ouvir a pronú ncia.< / P >
< P > O PostgreSQL é um sistema de banco de dados objeto-relacional que tem as
caracterí sticas de sistemas de bancos de dados comerciais tradicionais com
melhoramentos encontrados nos sistemas < SMALL > SGBD< / SMALL > s de pró xima geraç ã o.
PostgreSQL é livre e o có digo-fonte completo está disponí vel.< / P >
< P > O desenvolvimento do PostgreSQL é feito por um grupo de desenvolvedores
voluntá rios (na sua maioria) espalhados pelo mundo e que se comunicam via
Internet. É um projeto da comunidade e nã o é controlado por nenhuma
empresa. Para se envolver, veja a FAQ do desenvolvedor em < A href =
"http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html">
http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html< / A >
< / P >
< H3 id = "item1.2" > 1.2) Quem controla o PostgreSQL?< BR > < / H3 >
< P > Se você está procurando por um mantenedor, comitê central ou empresa
controladora do PostgreSQL, desista --- nã o há um(a). Nó s temos um
comitê core e committers CVS, mas estes grupos sã o mais para questõ es
administrativas do que controle. O projeto é direcionado pela comunidade
de desenvolvedores e usuá rios, que qualquer um pode se juntar. Tudo o que
você precisa é se inscrever nas listas de discussã o e participar das
discussõ es. Veja a < a href = "http://www.postgresql.org/docs/faqs.FAQ_DEV.html" >
FAQ do desenvolvedor< / A > para obter informaç õ es como se envolver com o
desenvolvimento do PostgreSQL.< / P >
< H3 id = "item1.3" > 1.3) Qual é a licenç a do PostgreSQL?< / H3 >
< P > O PostgreSQL é distribuí do sob a licenç a BSD clá ssica. Basicamente,
ela permite que usuá rios faç am qualquer coisa com o có digo, incluindo
revender os biná rios sem o có digo-fonte. A ú nica restriç ã o é que você
nã o nos responsabilize legalmente por problemas com o programa de computador.
Há també m a exigê ncia de que esta licenç a apareç a em todas as có pias
do programa de computador. Aqui está a licenç a BSD que usamos atualmente:< / P >
2004-06-09 23:46:11 -04:00
< P > PostgreSQL está sujeito a seguinte licenç a:< / P >
2006-11-20 15:58:40 -05:00
< P > PostgreSQL Data Base Management System< / P >
2004-06-09 23:46:11 -04:00
2007-01-05 17:20:05 -05:00
< P > Portions Copyright (c) 1996-2007, PostgreSQL Global Development Group
2006-11-20 15:58:40 -05:00
Portions Copyright (c) 1994-1996 Regents of the University of California< / P >
2004-06-09 23:46:11 -04:00
2006-11-20 15:58:40 -05:00
< P > Permission to use, copy, modify, and distribute this software
and its documentation for any purpose, without fee, and without a
written agreement is hereby granted, provided that the above
copyright notice and this paragraph and the following two
paragraphs appear in all copies.< / P >
2004-06-09 23:46:11 -04:00
2006-11-20 15:58:40 -05:00
< P > IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY
PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS
SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.< / P >
2004-06-09 23:46:11 -04:00
2006-11-20 15:58:40 -05:00
< P > THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE
SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE
UNIVERSITY OF CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE,
SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.< / P >
2004-06-09 23:46:11 -04:00
2006-11-20 15:58:40 -05:00
< H3 id = "item1.4" > 1.4) Quais plataformas o PostgreSQL pode ser executado?< / H3 >
2004-06-09 23:46:11 -04:00
2006-11-20 15:58:40 -05:00
< P > Em geral, qualquer plataforma moderna compatí vel com Unix deve ser capaz de executar o PostgreSQL. As plataformas que foram testadas antes do lanç amento de uma versã o sã o listadas nas instruç õ es de instalaç ã o.< / P >
2004-06-09 23:46:11 -04:00
2006-11-20 15:58:40 -05:00
< P > O PostgreSQL també m executa nativamente nos sistemas operacionais Microsoft Windows
baseados no NT tais como Win200 SP4, WinXP e Win2003. Um instalador pré -empacotado está
disponí vel em < a href = "http://pgfoundry.org/projects/pginstaller" >
http://pgfoundry.org/projects/pginstaller< / a > . Versõ es do Windows baseadas no MS-DOS
(Win95, Win98, WinMe) podem executar o PostgreSQL utilizando o Cygwin.< / P >
2004-06-09 23:46:11 -04:00
2006-11-20 15:58:40 -05:00
< p > Há també m uma versã o para o Novell Netware 6 em
< a href = "http://forge.novell.com" > http://forge.novell.com< / a >
e uma versã o para OS/2 (eComStation) em < a href =
"http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1& button=Search& key=postgreSQL& stype=all& sort=type& dir=%2F">
http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1& button=Search& key=postgreSQL& stype=all& sort=type& dir=%2F< / a > .< / p >
2004-06-09 23:46:11 -04:00
2006-11-20 15:58:40 -05:00
< H3 id = "item1.5" > 1.5) Onde eu posso conseguir o PostgreSQL?< / H3 >
2004-06-09 23:46:11 -04:00
2006-11-20 15:58:40 -05:00
< P > Via navegador web, utilize < a href = "http://www.postgresql.org/ftp/" >
http://www.postgresql.org/ftp/< / a > e via ftp, utilize
< A href = "ftp://ftp.PostgreSQL.org/pub/" >
ftp://ftp.PostgreSQL.org/pub/< / A > .< / P >
2004-06-09 23:46:11 -04:00
2006-11-20 15:58:40 -05:00
< H3 id = "item1.6" > 1.6) Qual é a ú ltima versã o?< / H3 >
2004-06-09 23:46:11 -04:00
2006-11-20 15:58:40 -05:00
< P > A ú ltima versã o do PostgreSQL é a versã o 8.1.5.< / P >
2004-06-09 23:46:11 -04:00
2006-11-20 15:58:40 -05:00
< P > Nó s planejamos lanç ar versõ es novas a cada ano com versõ es
corretivas em alguns meses.< / P >
2004-06-09 23:46:11 -04:00
2006-11-20 15:58:40 -05:00
< H3 id = "item1.7" > 1.7) Onde eu posso conseguir suporte?< / H3 >
2004-06-09 23:46:11 -04:00
2006-11-20 15:58:40 -05:00
< P > A comunidade do PostgreSQL fornece assistê ncia a muitos de seus
usuá rios via e-mail. O principal sí tio web para inscriç ã o nas listas
de e-mail é < a href = "http://www.postgresql.org/community/lists/" >
http://www.postgresql.org/community/lists/< / a > . As listas < I > general< / I >
e < I > bugs< / I > sã o um bom lugar para iní cio.< / P >
2004-06-09 23:46:11 -04:00
2005-01-15 17:14:08 -05:00
< P > O principal canal de IRC é o < I > #postgresql< / I > na Freenode (< I > irc.freenode.net< / I > ). Para se conectar você pode utilizar o comando Unix < code > irc -c '#postgresql' "$USER" irc.freenode.net< / code > ou utilizar qualquer outro cliente de IRC. Um canal hispâ nico (< I > #postgresql-es< / I > ) e um francê s (< I > #postgresqlfr< / I > ) també m existem na mesma rede. Há també m um canal PostgreSQL na EFNet.< / P >
2004-06-09 23:46:11 -04:00
< P > Uma lista de empresas que prestam suporte comercial está disponí vel em < A href =
2006-11-20 15:58:40 -05:00
"http://www.postgresql.org/support/professional_support">
http://www.postgresql.org/support/professional_support< / A > .< / P >
2004-06-09 23:46:11 -04:00
2006-11-20 15:58:40 -05:00
< H3 id = "item1.8" > 1.8) Como eu informo a existê ncia de um bug?< / H3 >
2004-06-09 23:46:11 -04:00
2005-01-15 17:14:08 -05:00
< P > Visite o formulá rio que reporta bugs do PostgreSQL em < A href =
"http://www.postgresql.org/support/submitbug">http://www.postgresql.org/support/submitbug< / A > .< / P >
2004-06-09 23:46:11 -04:00
< P > Verifique també m o nosso ftp < A href =
"ftp://ftp.PostgreSQL.org/pub">ftp://ftp.PostgreSQL.org/pub< / A > para
2006-11-20 15:58:40 -05:00
ver se há uma versã o mais recente do PostgreSQL.< / P >
< P > Bugs submetidos utilizando o formulá rio ou informado a qualquer
lista de discussã o do PostgreSQL tipicamente gera uma das seguintes
respostas:< / P >
< ul >
< li > Nã o é um bug e o porquê < / li >
< li > É um bug conhecido e já está na lista de
< A href = "http://www.postgresql.org/docs/faqs.TODO.html" > AFAZERES (TODO)< / A > < / li >
< li > O bug foi corrigido na versã o atual< / li >
< li > O bug foi corrigido mas nã o foi empacotado em um versã o oficial< / li >
< li > Um pedido foi feito para obter informaç õ es detalhadas:
< ul >
< li > Sistema Operacional< / li >
< li > Versã o do PostgreSQL< / li >
< li > Exemplo de teste que reproduz o bug< / li >
< li > Informaç õ es sobre depuraç ã o< / li >
< li > Saí da reconstituidora de vestí gios (backtrace) do depurador< / li >
< / ul >
< / li >
< li > O bug é novo. O seguinte pode ocorrer:
< ul >
< li > Uma correç ã o é criada e será incluí da na pró xima versã o< / li >
< li > O bug nã o pode ser corrigido imediatamente e é adicionado
a lista de < A href = "http://www.postgresql.org/docs/faqs.TODO.html" > AFAZERES (TODO)< / A > < / li >
< / ul >
< / li >
< / ul >
< H3 id = "item1.9" > 1.9) Como eu posso saber quais sã o os bugs conhecidos
ou funcionalidades ausentes?< / H3 >
< P > O PostgreSQL suporta um subconjunto extendido do < SMALL > SQL:2003< / SMALL > .
Veja nossa lista de < A href = "http://www.postgresql.org/docs/faqs.TODO.html" > AFAZERES (TODO)< / A >
que conté m bugs conhecidos, funcionalidades ausentes e planos futuros.< / P >
< P > Uma solicitaç ã o de funcionalidade geralmente resulta em uma das
seguintes respostas:< / P >
< ul >
< li > A funcionalidade já está na lista de < A href = "http://www.postgresql.org/docs/faqs.TODO.html" > AFAZERES (TODO)< / A > < / li >
< li > A funcionalidade nã o é desejá vel porque:
< ul >
< li > Ela duplica uma funcionalidade existente que já segue o
padrã o SQL< / li >
< li > A funcionalidade aumentará a complexidade do có digo mas
adicionará pouco benefí cio< / li >
< li > A funcionalidade será insegura ou nã o-confiá vel< / li >
< / ul >
< / li >
< li > A nova funcionalidade é adicionada a lista de
< A href = "http://www.postgresql.org/docs/faqs.TODO.html" > AFAZERES (TODO)< / A > < / li >
< / ul >
< P > O PostgreSQL nã o utiliza sistema de acompanhamento de bugs porque
nó s achamos mais eficiente responder diretamente o e-mail e manter a
lista de < A href = "http://www.postgresql.org/docs/faqs.TODO.html" > AFAZERES (TODO)< / A >
atualizada. Na prá tica, bugs nã o duram muito no programa; e bugs que afetam
uma grande quantidade de usuá rios sã o corrigidos rapidamente. O ú nico lugar
para encontrar todas as mudanç as, melhorias e correç õ es em uma versã o do
PostgreSQL é ler as mensagens de log do
< a href = "http://www.postgresql.org/developer/sourcecode/" > CVS< / a > . Até mesmo
as notas de lanç amento nã o listam todas as mudanç as feitas no programa.< / P >
< H3 id = "item1.10" > 1.10) Que documentaç ã o está disponí vel?< / H3 >
< P > O PostgreSQL inclui vasta documentaç ã o, incluindo um manual extenso,
pá ginas de manuais (man pages) e alguns exemplos teste. Veja o diretó rio
< I > /doc< / I > . Você també m pode pesquisar os manuais online em < A href =
"http://www.PostgreSQL.org/docs">http://www.PostgreSQL.org/docs< / A > .
< / P >
< P > Há dois livros sobre PostgreSQL disponí veis online em < A href =
"http://www.postgresql.org/docs/books/awbook.html">http://www.postgresql.org/docs/books/awbook.html< / A >
e < A href =
"http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook/< / A > .
Há uma lista de livros sobre PostgreSQL disponí veis para compra. Um dos mais
populares é o do Korry Douglas. Uma lista de aná lise sobre os livros pode ser
encontrada em < A href =
"http://techdocs.postgresql.org/techdocs/bookreviews.php">http://techdocs.PostgreSQL.org/techdocs/bookreviews.php< / A > .
< P > O programa cliente de linha de comando < I > psql< / I > tem alguns comandos \d para
mostrar informaç õ es sobre tipos, operadores, funç õ es, agregaç õ es, etc. - utilize \?
para mostrar os comandos disponí veis.< / P >
< P > Nosso sí tio web conté m ainda mais documentaç ã o.< / P >
< H3 id = "item1.11" > 1.11) Como eu posso aprender < SMALL > SQL< / SMALL > ?< / H3 >
< P > Primeiro, considere os livros especí ficos sobre PostgreSQL mencionados
acima. Outro é o "Teach Yourself SQL in 21 Days, Second Edition" e < A href =
"http://members.tripod.com/er4ebus/sql/index.htm">http://members.tripod.com/er4ebus/sql/index.htm< / A > .
Muitos de nossos usuá rios gostam do < I > The Practical SQL Handbook< / I > ,
Bowman, Judith S., et al., Addison-Wesley. Outros do < I > The
Complete Reference SQL< / I > , Groff et al., McGraw-Hill.< / P >
< P > Há també m bons tutoriais disponí veis online:
< UL >
< LI > < A href = "http://www.intermedia.net/support/sql/sqltut.shtm" > http://www.intermedia.net/support/sql/sqltut.shtm< / A >
< / LI >
< LI >
< A href = "http://sqlcourse.com/" > http://sqlcourse.com< / A >
< / LI >
< LI >
< A href = "http://www.w3schools.com/sql/default.asp" > http://www.w3schools.com/sql/default.asp< / A >
< / LI >
< LI > < A href =
"http://mysite.verizon.net/Graeme_Birchall/id1.html">http://mysite.verizon.net/Graeme_Birchall/id1.html< / A >
< / LI >
< / UL >
2004-06-09 23:46:11 -04:00
2006-11-20 15:58:40 -05:00
< H3 id = "item1.12" > 1.12) Como posso submeter uma correç ã o (patch) ou me juntar a equipe de desenvolvimento?< / H3 >
2004-06-09 23:46:11 -04:00
2006-11-20 15:58:40 -05:00
< P > Veja a < a href = "http://www.postgresql.org/docs/faqs.FAQ_DEV.html" >
FAQ do Desenvolvedor< / A > .< / P >
< H3 id = "item1.13" > 1.13) Como é o PostgreSQL comparado a outros < SMALL > SGBD< / SMALL > s?< / H3 >
< P > Há vá rias maneiras de se medir um software: funcionalidades, performance, confiabilidade, suporte e preç o.< / P >
2004-06-09 23:46:11 -04:00
< DL >
2006-11-20 15:58:40 -05:00
< DT > < B > Funcionalidades< / B > < / DT >
2004-06-09 23:46:11 -04:00
2006-11-20 15:58:40 -05:00
< DD > PostgreSQL tem muitas caracterí sticas presentes em muitos < SMALL > SGBD< / SMALL > s comerciais como transaç õ es, subconsultas, gatilhos, visõ es, integridade referencial de chave estrangeira e bloqueio (lock) sofisticado. Nó s temos algumas funcionalidades que eles nã o tem, como tipos definidos pelo usuá rio, heranç a, regras e controle de concorrê ncia de mú ltiplas versõ es para reduzir bloqueios (locks).< BR >
2004-06-09 23:46:11 -04:00
< BR >
< / DD >
< DT > < B > Performance< / B > < / DT >
2006-11-20 15:58:40 -05:00
< DD > A performance do PostgreSQL é compará vel a outros bancos de dados comerciais e de có digo livre. Ele é mais rá pido em algumas coisas, mais lento em outras. Nossa performance é geralmente +/- 10% comparada a de outros bancos de dados.
2004-06-09 23:46:11 -04:00
< BR >
< / DD >
< DT > < B > Confiabilidade< / B > < / DT >
< DD > Nó s sabemos que um < SMALL > SGBD< / SMALL > deve ser confiá vel ou ele é inú til. Nó s empenhamos em lanç ar versõ es bem testadas, de có digo está vel e que tenha o mí nimo de bugs. Cada versã o tem no mí nimo um mê s de teste em versã o beta, e nosso histó rico de versõ es mostra que nó s podemos fornecer versõ es está veis e só lidas que estã o prontas para uso em produç ã o. Nó s acreditamos que somos comparados a nosso favor com outros sistemas de bancos de dados nessa á rea.< BR >
< BR >
< / DD >
< DT > < B > Suporte< / B > < / DT >
2006-11-20 15:58:40 -05:00
< DD > Nossas listas de discussã o fornecem contato com um grupo de desenvolvedores e usuá rios para ajudar a resolver muitos problemas encontrados. Enquanto nó s nã o podemos garantir o conserto, < SMALL > SGBD< / SMALL > s comerciais nem sempre fornecem també m. Com acesso direto aos desenvolvedores, a comunidade de usuá rios, manuais e o có digo fonte faz com que o suporte do PostgreSQL seja superior ao de outros < SMALL > SGBD< / SMALL > s. Há suporte comercial por incidente disponí veis para aqueles que precisam de um. (Veja < A href = "#item1.7" > seç ã o 1.7 da FAQ< / A > .)< BR >
2004-06-09 23:46:11 -04:00
< BR >
< / DD >
< DT > < B > Preç o< / B > < / DT >
2006-11-20 15:58:40 -05:00
< DD > Nó s somos livres para uso dele tanto comercial quanto nã o comercial. Você pode adicionar nosso có digo ao seu produto sem limitaç õ es, exceto aquelas descritas na nossa licenç a BSD mencionada acima.< BR >
2004-06-09 23:46:11 -04:00
< BR >
< / DD >
< / DL >
2005-01-15 17:14:08 -05:00
< HR >
2004-06-09 23:46:11 -04:00
< H2 align = "center" > Perguntas sobre Clientes< / H2 >
2006-11-20 15:58:40 -05:00
< H3 id = "item2.1" > 2.1) Quais interfaces estã o disponí veis para PostgreSQL?< / H3 >
2004-06-09 23:46:11 -04:00
2006-11-20 15:58:40 -05:00
< p > A instalaç ã o do PostgreSQL inclui somente as interfaces < SMALL > C< / SMALL > e
< SMALL > C< / SMALL > embutida. Todas as outras interfaces sã o projetos independentes
que podem ser obtidos separadamente; sendo separados permitem que eles tenham
suas pró prias datas de lanç amento e time de desenvolvedores.< / P >
2004-06-09 23:46:11 -04:00
2006-11-20 15:58:40 -05:00
< P > Algumas linguagens de programaç ã o como < SMALL > PHP< / SMALL > incluem uma
interface para PostgreSQL. Interfaces para linguagens como Perl,
< SMALL > TCL< / SMALL > , Python e muitas outras estã o disponí veis em
< a href = "http://gborg.postgresql.org" > http://gborg.postgresql.org< / A >
na seç ã o de < I > Drivers/Interfaces< / I > ou via busca na Internet.
< / P >
2004-06-09 23:46:11 -04:00
2006-11-20 15:58:40 -05:00
< H3 id = "item2.2" > 2.2) Quais ferramentas estã o disponí veis para utilizar o PostgreSQL com pá ginas Web?< / H3 >
2004-06-09 23:46:11 -04:00
< P > Uma boa introduç ã o para pá ginas web que utilizam bancos de dados pode ser vista em:
< A href = "http://www.webreview.com" > http://www.webreview.com< / A > < / P >
2006-11-20 15:58:40 -05:00
< P > Para integraç ã o na Web, PHP (< A
href="http://www.php.net">http://www.php.net< / A > )
é uma excelente interface.< / P >
2004-06-09 23:46:11 -04:00
2006-11-20 15:58:40 -05:00
< P > Para casos complexos, muitos usam a Interface Perl e DBD::Pg com CGI.pm
ou mod_perl.< / P >
2004-06-09 23:46:11 -04:00
2006-11-20 15:58:40 -05:00
< H3 id = "item2.3" > 2.3) O PostgreSQL tem interfaces grá ficas para iteragir com o usuá rio?< / H3 >
2004-06-09 23:46:11 -04:00
2006-11-20 15:58:40 -05:00
< P > Há um vasto nú mero de Ferramentas Grá ficas (GUI), que estã o disponí veis
para o PostgreSQL, comerciais e de desenvolvedores de có digo aberto. Uma
lista detalhada pode ser encontrada em < A href = "http://www.postgresql.org/docs/techdocs.54" >
Documentaç ã o da Comunidade PostgreSQL< / A > < / P >
2004-06-09 23:46:11 -04:00
< HR >
< H2 align = "center" > Perguntas Administrativas< / H2 >
2006-11-20 15:58:40 -05:00
< H3 id = "item3.1" > 3.1) Como eu instalo o PostgreSQL em um local diferente de < I > /usr/local/pgsql< / I > ?< / H3 >
2004-06-09 23:46:11 -04:00
< P > Especifique a opç ã o < I > --prefix< / I > quando executar o < I > configure< / I > .< / P >
2006-11-20 15:58:40 -05:00
< H3 id = "item3.2" > 3.2) Como eu controlo conexõ es de outras má quinas?< / H3 >
< P > Por padrã o, o PostgreSQL só permite conexõ es da má quina local utilizando soquetes de domí nio Unix ou conexõ es TCP/IP. Outras má quinas nã o poderã o conectar-se a menos que você modifique < I > listen_addresses< / I > no < I > postgresql.conf< / I > , habilite a autenticaç ã o por má quina modificando o arquivo < I > $PGDATA/pg_hba.conf< / I > e reinicie o servidor PostgreSQL.< / P >
< H3 id = "item3.3" > 3.3) Como eu ajusto o servidor de banco de dados para obter uma performance melhor?< / H3 >
< P > Há trê s grandes á reas para melhorar a performance em potencial:< / P >
< DL >
< DT > < B > Mudanç a de Consultas< / B > < / DT >
< DD > Isto involve modificar consultas para obter melhor performance:
< ul >
< li > Criaç ã o de í ndices, incluir expressõ es e í ndices parciais< / li >
< li > Utilizaç ã o o COPY ao invé s de mú ltiplos comandos < SMALL > INSERT< / SMALL > s< / li >
< li > Agrupamento de mú ltiplos comandos em uma ú nica transaç ã o para diminuir
a despesa com efetivaç õ es (commit)< / li >
< li > Utilizaç ã o do < SMALL > CLUSTER< / SMALL > quando recuperar vá rios registros de
um í ndice< / li >
< li > Utilizaç ã o do < SMALL > LIMIT< / SMALL > para retornar um subconjunto da saí da
da consulta< / li >
< li > Utilizaç ã o de Consultas preparadas< / li >
< li > Utilizaç ã o de < SMALL > ANALYZE< / SMALL > para manter as estatí sticas do
otimizador corretas< / li >
< li > Utilizaç ã o regular do < SMALL > VACUUM< / SMALL > ou < I > pg_autovacuum< / I > < / li >
< li > Remoç ã o de í ndices durante grande mudanç a de dados< / li >
< / ul > < BR >
< BR >
< / DD >
< DT > < B > Configuraç ã o do Servidor< / B > < / DT >
< DD > Um grande nú mero de configuraç õ es que afetam a performance.
Para obter detalhes adicionais, veja < a href =
"http://www.postgresql.org/docs/current/static/runtime.html">
Administration Guide/Server Run-time Environment/Run-time
Configuration< / a > para listagem completa, e para
comentá rios veja < a href =
"http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html">
http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html< / a >
e < a href = "http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html" >
http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html< / a > .
< BR >
< BR >
< / DD >
< DT > < B > Seleç ã o do Hardware< / B > < / DT >
< DD > O efeito do hardware na performance é detalhado em
< a href = "http://www.powerpostgresql.com/PerfList/" >
http://www.powerpostgresql.com/PerfList/< / a > e < a
href="http://momjian.us/main/writings/pgsql/hw_performance/index.html">
http://momjian.us/main/writings/pgsql/hw_performance/index.html< / a > .
< BR >
< BR >
< / DD >
< / DL >
2004-06-09 23:46:11 -04:00
2006-11-20 15:58:40 -05:00
< H3 id = "item3.4" > 3.4) Quais caracterí sticas de depuraç ã o estã o disponí veis?< / H3 >
2004-06-09 23:46:11 -04:00
2006-11-20 15:58:40 -05:00
< P > Há muitas variá veis de configuraç ã o do servidor < CODE > log_*< / CODE >
que habilitam a exibiç ã o de consultas e estatí sticas que podem ser
muito ú teis para depuraç ã o e medidas de performance.< / P >
2004-06-09 23:46:11 -04:00
2006-11-20 15:58:40 -05:00
< H3 id = "item3.5" > 3.5) Por que eu recebo < I > "Sorry, too many clients"< / I > quando eu tento conectar?< / H3 >
2004-06-09 23:46:11 -04:00
2006-11-20 15:58:40 -05:00
< P > Você atingiu o limite padrã o que é de 100 sessõ es. Você
precisa aumentar o limite do < I > postmaster< / I > , que diz
quantos processos servidor concorrentes ele pode iniciar, alterando
o valor < I > max_connections< / I > no < I > postgresql.conf< / I > e
reiniciando o < I > postmaster< / I > .< / P >
2004-06-09 23:46:11 -04:00
2006-11-20 15:58:40 -05:00
< H3 id = "item3.6" > 3.6) Qual é o processo de atualizaç ã o do PostgreSQL?< / H3 >
2004-06-09 23:46:11 -04:00
2006-11-20 15:58:40 -05:00
< P > O time do PostgreSQL faz somente pequenas mudanç as entre versõ es corretivas, entã o atualizar da versã o 7.4.8 para 7.4.9 nã o requer uma exportaç ã o e uma importaç ã o; basta para o servidor de banco de dados, instalar os biná rios atualizados e reiniciar o servidor.< / P >
2004-06-09 23:46:11 -04:00
2006-11-20 15:58:40 -05:00
< P > Todos os usuá rios devem atualizar para as versõ es corretivas mais recentes
assim que elas estiverem disponí veis. Enquanto cada atualizaç ã o tem algum risco,
versõ es corretivas do PostgreSQL sã o projetadas para corrigir somente bugs comuns
com um risco mí nimo. A comunidade considera < i > nã o< / i > atualizar mais
perigoso do que atualizar.< / P >
2004-06-09 23:46:11 -04:00
2006-11-20 15:58:40 -05:00
< P > Versõ es novas (i.e. da 7.3 para 7.4) geralmente muda-se o formato interno das tabelas de sistema e dos arquivo de dados. Essas mudanç as geralmente sã o complexas, entã o nó s nã o mantemos compatibilidade para os arquivos de dados. Uma exportaç ã o/importaç ã o de um banco de dados é necessá ria para atualizaç õ es entre versõ es.< / P >
2004-06-09 23:46:11 -04:00
2006-11-20 15:58:40 -05:00
< H3 id = "item3.7" > 3.7) Que tipo de hardware eu devo usar?< / H3 >
2004-09-29 23:50:34 -04:00
2006-11-20 15:58:40 -05:00
< P > Por causa do hardware de PC ser em sua maioria compatí vel, pessoas tendem a acreditar que todos os hardwares de PC sã o de mesma qualidade. Nã o é verdade. ECC RAM, SCSI e placas mã e de qualidade sã o mais confiá veis e tê m uma melhor performance do que hardwares mais baratos. O PostgreSQL executará em quase todo hardware, mas se a confiabilidade e a performance forem importantes é prudente pesquisar sobre as opç õ es de hardware. Nossas listas de discussã o podem ser usadas para discutir opç õ es de hardware e dilemas.< / P >
2004-09-29 23:50:34 -04:00
2004-06-09 23:46:11 -04:00
< HR >
< H2 align = "center" > Perguntas Operacionais< / H2 >
2006-11-20 15:58:40 -05:00
< H3 id = "item4.1" > 4.1) Como eu faç o um < SMALL > SELECT< / SMALL > somente dos primeiros registros de uma consulta? Um registro randô mico?< / H3 >
2004-06-09 23:46:11 -04:00
2006-11-20 15:58:40 -05:00
< P > Para obter somente alguns registros, se você sabe o nú mero de
registros necessá rios ao executar o < SMALL > SELECT< / SMALL > utilize
o < SMALL > LIMIT< / SMALL > . Se um í ndice corresponde no < SMALL > ORDER
BY< / SMALL > é possí vel que a consulta toda nã o tenha que ser
executada. Se você nã o sabe o nú mero de registros ao executar o
< SMALL > SELECT< / SMALL > , utilize um cursor e o < SMALL > FETCH< / SMALL > .< / P >
< P > Para < SMALL > obter< / SMALL > um registro randô mico, utilize:< / P >
2004-06-09 23:46:11 -04:00
< PRE >
SELECT col
FROM tab
ORDER BY random()
LIMIT 1;
< / PRE >
2006-11-20 15:58:40 -05:00
< H3 id = "item4.2" > 4.2) Como eu descubro quais tabelas, í ndices, bancos de dados e usuá rios estã o definidos? Como eu vejo as consultas utilizadas pelo < I > psql< / I > para mostrá -los?< / H3 >
2004-06-09 23:46:11 -04:00
2006-11-20 15:58:40 -05:00
< P > Utilize o comando \dt para ver tabelas no < I > psql< / I > . Para obter
uma lista completa dos comandos no psql você pode utilizar \?.
Alternativamente, você pode ler o có digo-fonte do < I > psql< / I > no arquivo
< I > pgsql/src/bin/psql/describe.c< / I > , ele conté m os comandos < SMALL > SQL< / SMALL >
que geram a saí da para os comandos de contrabarra do < I > psql< / I > . Você
també m pode iniciar o < I > psql< / I > com a opç ã o < I > -E< / I > para que as consultas
utilizadas para executar os comandos que você informou seja exibida.
O PostgreSQL també m fornece uma inteface compatí vel com < SMALL > SQL< / SMALL > do
INFORMATION SCHEMA que você pode consultar para obter informaç ã o sobre o
banco de dados.< / P >
2004-06-09 23:46:11 -04:00
2006-11-20 15:58:40 -05:00
< P > Há també m tabelas do sistema que começ am com < I > pg_< / I > que os descrevem
també m.< / P >
2004-06-09 23:46:11 -04:00
2006-11-20 15:58:40 -05:00
< P > Utilizando o < I > psql -l< / I > listará todos os bancos de dados.< / P >
2004-06-09 23:46:11 -04:00
2006-11-20 15:58:40 -05:00
< P > Veja també m o arquivo < I > pgsql/src/tutorial/syscat.source< / I > . Ele
ilustra muitos dos comandos < SMALL > SELECT< / SMALL > s necessá rios para obter
informaç ã o das tabelas de sistema do banco de dados.< / P >
< H3 id = "item4.3" > 4.3) Como você muda o tipo de dado de uma coluna?< / H3 >
< P > Mudar o tipo de dado de uma coluna pode ser feito facilmente na versã o 8.0
ou superior com < SMALL > ALTER TABLE ALTER COLUMN TYPE< / SMALL > .< / P >
< P > Em versõ es anteriores, faç a isso:< / P >
2004-06-09 23:46:11 -04:00
< PRE >
BEGIN;
2006-11-20 15:58:40 -05:00
ALTER TABLE tab ADD COLUMN col_nova < i > novo_tipo_dado< / i > ;
UPDATE tab SET col_nova = CAST(col_antiga AS < i > novo_tipo_dado< / i > );
ALTER TABLE tab DROP COLUMN col_antiga;
2004-06-09 23:46:11 -04:00
COMMIT;
< / PRE >
2006-11-20 15:58:40 -05:00
< P > Você pode entã o querer fazer um < I > VACUUM FULL tab< / I > para recuperar
o espaç o em disco utilizado pelos registros expirados.< / P >
2004-06-09 23:46:11 -04:00
2006-11-20 15:58:40 -05:00
< H3 id = "item4.4" > 4.4) Qual é o tamanho má ximo de um registro, uma tabela e um banco de dados?< / H3 >
2004-06-09 23:46:11 -04:00
2006-11-20 15:58:40 -05:00
< P > Estes sã o os limites:< / P >
< BLOCKQUOTE >
< TABLE >
< TR > < TD > Tamanho má ximo de um banco de dados?< / TD > < TD > ilimitado (existem bancos de dados de 32 TB)< / TD > < / TR >
< TR > < TD > Tamanho má ximo de uma tabela?< / TD > < TD > 32 TB< / TD > < / TR >
< TR > < TD > Tamanho má ximo de um registro?< / TD > < TD > 400 GB< / TD > < / TR >
< TR > < TD > Tamanho má ximo de um campo?< / TD > < TD > 1 GB< / TD > < / TR >
< TR > < TD > Nú mero má ximo de registros em uma tabela?< / TD > < TD > ilimitado< / TD > < / TR >
< TR > < TD > Nú mero má ximo de colunas em uma tabela?< / TD > < TD > 250-1600 dependendo dos tipos das colunas< / TD > < / TR >
< TR > < TD > Nú mero má ximo de í ndices em uma tabela?< / TD > < TD > ilimitado< / TD > < / TR >
< / TABLE >
< / BLOCKQUOTE >
< P > É claro, que eles nã o sã o ilimitados, mas limitados
ao espaç o em disco disponí vel e espaç o em memó ria/swap.
A Performance será penalizada quando estes valores se tornarem grandes.< / P >
< P > O tamanho má ximo de uma tabela com 32 TB nã o requer suporte a
arquivos grandes do sistema operacional. Tabelas grandes sã o armazenadas
como mú ltiplos arquivos de 1 GB entã o o limite do sistema de
arquivos nã o é importante.< / P >
< P > O tamanho má ximo de uma tabela, o tamanho de um registro e o nú mero
má ximo de colunas podem ser quadruplicados aumentando-se o tamanho padrã o
do bloco para 32k. O tamanho má ximo de uma tabela pode també m ser aumentado utilizando
particionamento de tabela.< / P >
< P > Uma limitaç ã o é que í ndices nã o podem ser criados em colunas maiores do que
2.000 caracteres. Felizmente, tais í ndices sã o raramente necessá rios. Unicidade é
melhor garantida por um í ndice de uma funç ã o de um hash MD5 de uma coluna longa, e
indexaç ã o de texto longo permite a busca de palavras dentro da coluna.< / P >
< H3 name = "item4.5" > 4.5) Quanto espaç o em disco é necessá rio para armazenar dados de um arquivo texto?< / H3 >
2004-06-09 23:46:11 -04:00
< P > Um banco de dados PostgreSQL irá requerer até cinco vezes a quantidade de espaç o requerida para armazenar dados em um arquivo texto.< / P >
2006-11-20 15:58:40 -05:00
< P > Como um exemplo, considere um arquivo com 100.000 linhas contendo um inteiro e uma descriç ã o em cada linha. Suponha que o tamanho mé dio da descriç ã o é de vinte bytes. O arquivo terá 2,8 MB. O tamanho do arquivo do banco de dados PostgreSQL que conté m esses dados pode ser estimado em 5,6 MB:< / P >
2004-06-09 23:46:11 -04:00
< PRE >
2006-11-20 15:58:40 -05:00
28 bytes: cada cabeç alho de registro (aproximadamente)
2004-06-09 23:46:11 -04:00
24 bytes: um campo int e um campo texto
+ 4 bytes: ponteiro na pá gina para a tupla
-------------------------------------------
2006-11-20 15:58:40 -05:00
56 bytes por registro
2004-06-09 23:46:11 -04:00
O tamanho de uma pá gina de dados no PostgreSQL é 8192 bytes (8 KB), entã o:
8192 bytes por pá gina
2006-11-20 15:58:40 -05:00
------------------------ = 146 registros por pá gina do banco de dados (arredondado para baixo)
56 bytes por registro
2004-06-09 23:46:11 -04:00
100000 registros de dados
2006-11-20 15:58:40 -05:00
---------------------------- = 685 pá ginas do banco de dados (arredondado para cima)
146 registros por pá gina
2005-01-15 17:14:08 -05:00
2006-11-20 15:58:40 -05:00
685 pá ginas do banco de dados * 8192 bytes por pá gina = 5.611.520 bytes (5,6 MB)
2004-06-09 23:46:11 -04:00
< / PRE >
2006-11-20 15:58:40 -05:00
< P > Í ndices nã o requerem muito espaç o, mas conté m
dados que foram indexados, entã o eles podem ocupar algum espaç o.< / P >
< P > < SMALL > NULL< / SMALL > s sã o armazenados como bitmaps, entã o eles
utilizam muito pouco espaç o.< / P >
< H3 id = "item4.6" > 4.6) Por que minhas consultas estã o lentas? Por que elas nã o estã o utilizando meus í ndices?< / H3 >
< P > Í ndices nã o sã o utilizados por toda consulta. Í ndices sã o utilizados somente
se a tabela é maior do que um tamanho mí nimo, e a consulta seleciona somente uma
pequena porcentagem dos registros da tabela. Isto porque o acesso randô mico ao
disco causado pela busca indexada pode ser mais lento do que uma leitura ao longo
da tabela ou busca sequencial.< / P >
< P > Para determinar se um í ndice deveria ser utilizado, o PostgreSQL deve ter
estatí sticas sobre a tabela. Estas estatí sticas sã o coletadas utilizando o
< SMALL > VACUUM ANALYZE< / SMALL > ou simplesmente o < SMALL > ANALYZE< / SMALL > .
Utilizando estatí sticas, o otimizador sbae quantos registros estã o na tabela,
e pode melhor determinar se í ndices deveriam ser utilizados.
Estatí sticas també m sã o ú teis para determinar a ordem de junç ã o ó tima e mé todos
de junç ã o. Coleç ã o de estatí sticas deveriam ser feitas periodicamente a
medida que o conteú do da tabela muda.< / P >
< P > Í ndices nã o sã o normalmente utilizados para < SMALL > ORDER BY< / SMALL > ou para
fazer junç õ es. Uma busca sequencial seguido por uma ordenaç ã o explí cita é
geralmente mais rá pida do que uma busca indexada em uma tabela grande.
Contudo, < SMALL > LIMIT< / SMALL > combinado com < SMALL > ORDER BY< / SMALL >
frequentemente utilizará í ndice porque somente uma pequena porç ã o da tabela
será retornada.< / P >
< P > Se você acredita que o otimizador está incorreto ao escolher uma busca
sequencial, utilize < CODE > SET enable_seqscan TO 'off'< / CODE > e execute a
consulta novamente para ver se uma busca indexada é realmente mais rá pida.< / P >
< P > Ao utilizar operadores curinga tais como < SMALL > LIKE< / SMALL > ou < I > ~< / I > ,
í ndices podem ser utilizados somente em algumas condiç õ es:< / P >
< UL >
< LI > O iní cio da cadeia de caracteres da busca deve ser iniciar com uma
cadeia de caracteres, i.e.
< UL >
< LI > modelos < SMALL > LIKE< / SMALL > nã o devem iniciar com < I > %< / I > .< / LI >
< LI > modelos < I > ~< / I > (expressõ es regulares) devem iniciar com < I > ^< / I > .< / LI >
< / UL > < / LI >
< LI > A cadeia de caracteres utilizada na busca nã o pode iniciar com a classe de
caracteres e.g. [a-e].< / LI >
< LI > Busca que nã o diferenciam maiú sculas de minú sculas tais como < SMALL > ILIKE< / SMALL > e
< I > ~*< / I > nã o utilizam í ndices. Em vez disso, utilize í ndice de expressã o, que
é descrito na seç ã o < a href = "#item4.8" > 4.8< / a > .< / LI >
< LI > O idioma padrç ã o < I > C< / I > deve ser usando durante o < i > initdb< / i >
porque nã o é possí vel saber o pró ximo caracter em idiomas que nã o sejam o C.
Você pode criar um í ndice especial < CODE > text_pattern_ops< / CODE > para tais casos
que funcionam somente para indexaç ã o com < SMALL > LIKE< / SMALL > .
< / LI >
< / UL >
< P > Em versõ es anteriores a 8.0, í ndices frequentemente nã o podem ser utilizados
a menos que os tipos de dados correspondam aos tipos de coluna do í ndice. Isto era
particularmente verdadeiro para í ndices de coluna int2, int8 e numeric.< / P >
< H3 id = "item4.7" > 4.7) Como eu vejo como o otimizador de consulta está avaliando a minha consulta?< / H3 >
2004-06-09 23:46:11 -04:00
< P > Veja o comando < SMALL > EXPLAIN< / SMALL > no manual.< / P >
2006-11-20 15:58:40 -05:00
< H3 id = "item4.8" > 4.8) Como eu faç o buscas com expressõ es regulares
2004-06-09 23:46:11 -04:00
e buscas com expressõ es regulares sem diferenciar maiú sculas de minú sculas? Como eu
2006-11-20 15:58:40 -05:00
utilizo um í ndice para buscas que nã o diferenciam maiú sculas de minú sculas?< / H3 >
2004-06-09 23:46:11 -04:00
2006-11-20 15:58:40 -05:00
< P > O operador < I > ~< / I > faz avaliaç ã o de expressõ es regulares,
e < I > ~*< / I > faz avaliaç ã o nã o sensí vel a maiú sculas
de expressõ es regulares. A variante nã o sensí vel a maiú sculas
do < SMALL > LIKE< / SMALL > é chamada de < SMALL > ILIKE< / SMALL > .< / P >
2004-06-09 23:46:11 -04:00
2006-11-20 15:58:40 -05:00
< P > Comparaç õ es de igualdade nã o sensí veis a maiú sculas
sã o normalmente expressadas como:< / P >
2004-06-09 23:46:11 -04:00
< PRE >
SELECT *
FROM tab
WHERE lower(col) = 'abc';
< / PRE >
2006-11-20 15:58:40 -05:00
Isso nã o irá utilizar o í ndice padrã o. Contudo, se
você criar um í ndice de expressã o, ele será utilizado:
2004-06-09 23:46:11 -04:00
< PRE >
CREATE INDEX tabindex ON tab (lower(col));
< / PRE >
2006-11-20 15:58:40 -05:00
< P > Se o í ndice acima é criado como < SMALL > UNIQUE< / SMALL > , embora a
coluna possa armazenar caracteres maiú sculos e minú sculos, ele nã o
pode ter valores idê nticos que diferem apenas em letras maiú sculas e minú sculas.
Para forç ar uma letra maiú scula ou minú scula a ser armazenada na coluna, utilize
uma restriç ã o < SMALL > CHECK< / SMALL > ou um gatilho.< / P >
2004-06-09 23:46:11 -04:00
2006-11-20 15:58:40 -05:00
< H3 id = "item4.9" > 4.9) Em uma consulta, como eu detecto se um campo é < SMALL > NULL< / SMALL > ? Como eu posso ordenar por um campo que é < SMALL > NULL< / SMALL > ou nã o?< / H3 >
2004-06-09 23:46:11 -04:00
2006-11-20 15:58:40 -05:00
< P > Você testa a coluna com < SMALL > IS NULL< / SMALL > e < SMALL > IS
NOT NULL< / SMALL > , como a seguir:< / P >
2004-06-09 23:46:11 -04:00
< PRE >
2006-11-20 15:58:40 -05:00
SELECT *
FROM tab
WHERE col IS NULL;
2004-06-09 23:46:11 -04:00
< / PRE >
2006-11-20 15:58:40 -05:00
< P > Para ordenar pelo status < SMALL > NULL< / SMALL > , utilize os modificadores
< SMALL > IS NULL< / SMALL > e < SMALL > IS NOT NULL< / SMALL > na sua clá usula
< SMALL > ORDER BY< / SMALL > . Coisas que sã o < I > verdadeiro< / I > serã o ordenadas acima
das coisas que sã o < I > falso< / I > , entã o a consulta a seguir irá colocar
entradas NULL no iní cio da lista de resultados:< / P >
2004-06-09 23:46:11 -04:00
2006-11-20 15:58:40 -05:00
< PRE >
SELECT *
FROM tab
ORDER BY (col IS NOT NULL)
< / PRE >
2004-06-09 23:46:11 -04:00
2006-11-20 15:58:40 -05:00
< H3 id = "item4.10" > 4.10) Qual é a diferenç a entre os vá rios tipos de dado de caracteres?< / H3 >
< BLOCKQUOTE >
< TABLE >
< TR > < TH > Tipo< / TH > < TH > Nome Interno< / TH > < TH > Observaç ã o< / TH > < / TR >
< TR > < TD > VARCHAR(n)< / TD > < TD > varchar< / TD > < TD > tamanho especifica o tamanho
má ximo, sem preenchimento< / TD > < / TR >
< TR > < TD > CHAR(n)< / TD > < TD > bpchar< / TD > < TD > preenchimento em branco para
comprimento fixo especí fico< / TD > < / TR >
< TR > < TD > TEXT< / TD > < TD > text< / TD > < TD > nenhum limite superior especí fico no
comprimento< / TD > < / TR >
< TR > < TD > BYTEA< / TD > < TD > bytea< / TD > < TD > vetor de bytes de comprimento variá vel
(seguro a byte nulo)< / TD > < / TR >
< TR > < TD > "char"< / TD > < TD > char< / TD > < TD > um caracter< / TD > < / TR >
< / TABLE >
< / BLOCKQUOTE >
< P > Você verá o nome interno quando examinar o catá logo do sistema e em algumas mensagens de erro.< / P >
< P > Os primeiros quatro tipos acima sã o do tipo "varlena" (i.e., os primeiros quatro bytes no disco sã o o comprimento seguido pelos dados). Consequentemente o espaç o atual utilizado é ligeiramente maior do que o tamanho declarado. Contudo, valores longos sã o també m sujeitos a compressã o, entã o o espaç o em disco pode també m ser bem menor do que o esperado.< / P >
< SMALL > VARCHAR(n)< / SMALL > é melhor quando está armazenando cadeias de caracteres de comprimento variá vel e há um limite de tamanho desta cadeia. < SMALL > TEXT< / SMALL > é para cadeias de caracteres de comprimento ilimitado, com o má ximo de um gigabyte.
< P > < SMALL > CHAR(n)< / SMALL > é para armazenar cadeias de caracteres que sã o todas do mesmo tamanho. < SMALL > CHAR(n)< / SMALL > preenche com espaç os em branco até o tamanho especificado, enquanto o < SMALL > VARCHAR(n)< / SMALL > armazena somente os caracteres fornecidos. < SMALL > BYTEA< / SMALL > é para armazenar dados biná rios, particularmente valores que incluem bytes < SMALL > NULL< / SMALL > . Todos os tipos descritos aqui tem caracterí sticas de performance similares.< / P >
< H3 id = "item4.11.1" > 4.11.1) Como eu crio um campo serial/auto incremento?< / H3 >
< P > PostgreSQL suporta o tipo de dados < SMALL > SERIAL< / SMALL > . Ele cria
automaticamente uma sequê ncia. Por exemplo:< / P >
2004-06-09 23:46:11 -04:00
< PRE >
CREATE TABLE pessoa (
id SERIAL,
nome TEXT
);
< / PRE >
2006-11-20 15:58:40 -05:00
é automaticamente traduzido em:
2004-06-09 23:46:11 -04:00
< PRE >
CREATE SEQUENCE pessoa_id_seq;
CREATE TABLE pessoa (
id INT4 NOT NULL DEFAULT nextval('pessoa_id_seq'),
nome TEXT
);
< / PRE >
2006-11-20 15:58:40 -05:00
Veja a pá gina sobre < I > create_sequence< / I > no manual para
obter informaç õ es adicionais sobre sequê ncias.
2004-06-09 23:46:11 -04:00
2006-11-20 15:58:40 -05:00
< H3 id = "item4.11.2" > 4.11.2) Como eu consigo o valor de um campo
< SMALL > SERIAL< / SMALL > ?< / H3 >
2004-06-09 23:46:11 -04:00
< P > Uma abordagem é obter o pró ximo valor < SMALL > SERIAL< / SMALL >
de uma sequê ncia com a funç ã o < I > nextval()< / I >
< I > antes< / I > de inserir e entã o inserir com o valor explicitamente. Utilizando o
2006-11-20 15:58:40 -05:00
exemplo da tabela em < A href = "#item4.11.1" > 4.11.1< / A > , um exemplo em
2004-06-09 23:46:11 -04:00
pseudo-linguagem se pareceria com isto:< / P >
< PRE >
novo_id = execute("SELECT nextval('pessoa_id_seq')");
execute("INSERT INTO pessoa (id, nome) VALUES (novo_id, 'Blaise Pascal')");
< / PRE >
Você poderia entã o ter també m o novo valor armazenado em
< CODE > novo_id< / CODE > para utilizar em outras consultas (i.e., como uma chave
estrangeira da tabela < CODE > pessoa< / CODE > ). Note que o nome da
< SMALL > SEQUENCE< / SMALL > criada automaticamente será
< < I > tabela< / I > > _< < I > coluna< / I > > _< I > seq< / I > , onde
< I > tabela< / I > e < I > coluna< / I > sã o os nomes da tabela
e da coluna < SMALL > SERIAL< / SMALL > , respectivamente.
< P > Alternativamente, você poderia obter o valor < SMALL > SERIAL< / SMALL >
atribuí do com a funç ã o < I > currval()< / I > < I > depois< / I >
de tê -lo inserido por padrã o, i.e.,< / P >
< PRE >
execute("INSERT INTO pessoa (nome) VALUES ('Blaise Pascal')");
novo_id = execute("SELECT currval('pessoa_id_seq')");
< / PRE >
2006-11-20 15:58:40 -05:00
< H3 name = "4.11.3" > 4.11.3) < I > currval()< / I > nã o lida com condiç ã o de corrida com outros usuá rios?< / H3 >
2004-06-09 23:46:11 -04:00
2006-11-20 15:58:40 -05:00
< P > Nã o. < I > currval()< / I > retorna o valor atual atribuido pela sua sessã o, e nã o por todas as sessõ es.< / P >
2004-06-09 23:46:11 -04:00
2006-11-20 15:58:40 -05:00
< H3 id = "item4.11.4" > 4.11.4) Por que os nú meros da minha sequê ncia nã o sã o reutilizados quando uma transaç ã o é abortada? Por que há intervalos nos nú meros da minha sequê ncia/coluna SERIAL?< / H3 >
2004-06-09 23:46:11 -04:00
< P > Para melhorar a concorrê ncia, valores da sequê ncia sã o atribuí dos a transaç õ es correntes e nã o sã o travados até que a transaç ã o seja finalizada. Isso causa intervalos na numeraç ã o por causa de transaç õ es abortadas.< / P >
2006-11-20 15:58:40 -05:00
< H3 id = "4.16" > 4.16) O que é um < SMALL > OID< / SMALL > ? O que é um < SMALL > CTID< / SMALL > ?< / H3 >
2004-06-09 23:46:11 -04:00
2006-11-20 15:58:40 -05:00
< P > Cada registro que é criado no PostgreSQL recebe um < SMALL > OID< / SMALL > ú nico
a menos que seja criado com < SMALL > WITHOUT OIDS< / SMALL > .
O< SMALL > ID< / SMALL > s sã o automaticamente atribuí dos como inteiros de 4 bytes
que sã o ú nicos ao longo de toda instalaç ã o. Contudo, eles sã o limitados em
4 bilhõ es, e entã o os O< SMALL > ID< / SMALL > s começ am a ser duplicados. O PostgreSQL
utiliza < SMALL > OID< / SMALL > s para ligar as tabelas do sistema.< / P >
2004-06-09 23:46:11 -04:00
2006-11-20 15:58:40 -05:00
< P > Para numerar registros nas tabelas do usuá rios, é melhor utilizar
< SMALL > SERIAL< / SMALL > ao invé s de O< SMALL > ID< / SMALL > s porque
sequê ncias < SMALL > SERIAL< / SMALL > sã o ú nicas somente em uma tabela; e
sã o menos propí cias a atingir o limite.
< SMALL > SERIAL8< / SMALL > está disponí vel para armazenar valores de sequê ncias
com oito bytes.< / P >
2004-06-09 23:46:11 -04:00
2006-11-20 15:58:40 -05:00
< P > C< SMALL > TID< / SMALL > s sã o utilizados para identificar registros fí sicos
especí ficos com valores de block e deslocamento. C< SMALL > TID< / SMALL > s mudam
apó s registros serem modificados ou recarregados. Eles sã o utilizados por
í ndices para apontar registros fí sicos.< / P >
2004-06-09 23:46:11 -04:00
2006-11-20 15:58:40 -05:00
< H3 id = "item4.13" > 4.13) Por que eu recebo o erro < I > "ERROR: Memory exhausted in AllocSetAlloc()"< / I > ?< / H3 >
2004-06-09 23:46:11 -04:00
2006-11-20 15:58:40 -05:00
< P > Você provavelmente está sem memó ria virtual no seu sistema, ou o seu nú cleo (kernel) tem um limite baixo para certos recursos. Tente isto antes de iniciar o < I > postmaster< / I > :< / P >
< PRE >
ulimit -d 262144
limit datasize 256m
< / PRE >
2004-06-09 23:46:11 -04:00
2006-11-20 15:58:40 -05:00
Dependendo da sua shell, somente um desses comando terá sucesso, mas ele definirá o segmento de dados do seu processo com um limite maior e talvez permita que a consulta seja feita. Este comando é aplicado ao processo atual e todos os subprocessos criados depois do comando ser executado. Se você tiver problemas com o cliente < SMALL > SQL< / SMALL > porque o processo servidor retornou muitos dados, tente-o antes de iniciar o cliente.
2004-06-09 23:46:11 -04:00
2006-11-20 15:58:40 -05:00
< H3 id = "item4.14" > 4.14) Como eu informo qual versã o do PostgreSQL eu estou utilizando?< / H3 >
2004-06-09 23:46:11 -04:00
< P > No < I > psql< / I > , digite < CODE > SELECT version();< / CODE > < / P >
2006-11-20 15:58:40 -05:00
< H3 id = "item4.15" > 4.15) Como eu crio uma coluna que conterá por padrã o a hora atual?< / H3 >
2004-06-09 23:46:11 -04:00
< P > Utilize < I > CURRENT_TIMESTAMP< / I > :< / P >
< PRE >
2006-11-20 15:58:40 -05:00
CREATE TABLE teste (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
2004-06-09 23:46:11 -04:00
< / PRE >
2006-11-20 15:58:40 -05:00
< H3 id = "item4.23" > 4.23) Como eu faç o uma junç ã o externa (outer join)?< / H3 >
2004-06-09 23:46:11 -04:00
< P > PostgreSQL suporta junç õ es externas utilizando a sintaxe padrã o do SQL. Aqui temos dois exemplos:< / P >
< PRE >
SELECT *
FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
< / PRE >
or
< PRE >
SELECT *
FROM t1 LEFT OUTER JOIN t2 USING (col);
< / PRE >
2006-11-20 15:58:40 -05:00
< P > Essas duas consultas indê nticas juntam t1.col com t2.col, e també m
retornam qualquer registro que nã o foi juntado em t1 (aqueles que nã o
combinaram com t2). Uma junç ã o a direita < SMALL > RIGHT< / SMALL >
adicionaria registros que nã o foram juntados da tabela t2.
Uma junç ã o completa (< SMALL > FULL< / SMALL > ) retornaria os registros
combinados mais todos os registros nã o combinados de t1 e t2.
A palavra < SMALL > OUTER< / SMALL > é opcional e é assumida nas
junç õ es < SMALL > LEFT< / SMALL > , < SMALL > RIGHT< / SMALL > e < SMALL > FULL< / SMALL > .
Junç õ es ordiná rias sã o chamadas junç õ es
naturais (< SMALL > INNER< / SMALL > ).< / P >
2004-06-09 23:46:11 -04:00
2006-11-20 15:58:40 -05:00
< H3 id = "item4.17" > 4.17) Como eu faç o consultas utilizando mú ltiplos bancos de dados?< / H3 >
2004-06-09 23:46:11 -04:00
2006-11-20 15:58:40 -05:00
< P > Nã o há outra maneira de consultar um banco de dados caso ele
nã o seja o atual. Porque o PostgreSQL carrega catá logos do sistema
especí ficos do banco de dados, é incerto como uma consulta em banco
de dados distintos pode se comportar.< / P >
2004-06-09 23:46:11 -04:00
2006-11-20 15:58:40 -05:00
< P > < I > contrib/dblink< / I > permite consultas em bancos de dados distintos utilizando
chamadas de funç õ es. É claro, que um cliente pode fazer
conexõ es simultâ neas em bancos de dados diferentes e juntar os
resultados no cliente.< / P >
2004-06-09 23:46:11 -04:00
2006-11-20 15:58:40 -05:00
< H3 id = "item4.18" > 4.18) Como eu retorno mú ltiplos registros ou colunas de uma funç ã o?< / H3 >
2004-06-09 23:46:11 -04:00
2006-11-20 15:58:40 -05:00
< P > É fá cil utilizando funç õ es que retornam conjunto,
< a href = "http://techdocs.postgresql.org/guides/SetReturningFunctions" >
http://techdocs.postgresql.org/guides/SetReturningFunctions< / a > .< / P >
2004-06-09 23:46:11 -04:00
2006-11-20 15:58:40 -05:00
< H3 id = "item4.19" > 4.19) Por que eu obtenho erros "relation with OID ######
does not exist" ao acessar tabelas temporá rias em funç õ es PL/PgSQL?< / H3 >
2004-06-09 23:46:11 -04:00
2006-11-20 15:58:40 -05:00
< P > PL/PgSQL armazena o conteú do da funç ã o, e o efeito indesejado é que se uma funç ã o PL/PgSQL acessa uma tabela temporá ria, e aquela tabela é removida e criada novamente, e a funç ã o é chamada novamente, a funç ã o irá falhar porque o conteú do armazenado da funç ã o ainda apontará para a tabela temporá ria antiga. A soluç ã o é utilizar o < SMALL > EXECUTE< / SMALL > para acesso a tabelas temporá rias no PL/PgSQL. Isto irá fazer com que a consulta seja avaliada toda vez.< / P >
2004-06-09 23:46:11 -04:00
2006-11-20 15:58:40 -05:00
< H3 id = "item4.20" > 4.20) Quais soluç õ es de replicaç ã o estã o disponí veis?< / H3 >
< P > Embora "replicaç ã o" seja um termo simples, há vá rias tecnologias para fazer
replicaç ã o, com vantagens e desvantagens para cada um.< / P >
< P > Replicaç ã o mestre/escravo permite que um mestre receba consultas de leitura e
escrita, enquanto os escravos só podem aceitar leitura/consultas < SMALL > SELECT< / SMALL > .
A soluç ã o mais popular de replicaç ã o mestre-escravo para PostgreSQL disponí vel livremente
é < A href = "http://gborg.postgresql.org/project/slony1/projdisplay.php" > Slony-I< / A > .< / P >
< P > Replicaç ã o com mú ltiplos mestres permite que consultas leitura/escrita sejam
enviadas para mú ltiplos computadores replicadores. Esta capacidade també m tem
um sé rio impacto na performance por causa da necessidade de sincronizar as mudanç as
entre os servidores. < A href = "http://pgfoundry.org/projects/pgcluster/" > Pgcluster< / a >
é a soluç ã o mais popular disponí vel livremente para PostgreSQL.< / P >
< P > Há també m soluç õ es de replicaç ã o comerciais e baseadas em hardware disponí veis
que suportam uma variedade de modelos de replicaç ã o.< / P >
< H3 id = "item4.21" > 4.21) Por que os nomes de minhas tabelas e colunas nã o
sã o reconhecidos em minha consulta?< / H3 >
< P > O caso mais comum é o uso de aspas ao redor dos nomes da tabela ou coluna
durante a criaç ã o da tabela. Ao utilizar aspas, nomes de tabela e coluna
(chamados de identificadores) sã o armazenados < a
href="http://www.postgresql.org/docs/8.0/static/sql-syntax.html#SQL-SYNTAX-IDENTIFIERS">
como especificado< / a > , significando que você deve utilizar aspas quando se
referir aos nomes na consulta. Algumas interfaces, como pgAdmin,
automaticamente coloca aspas nos identificadores durante a criaç ã o da tabela.
Entã o, para identificadores serem reconhecidos, você deve:
< UL >
< LI > Evitar colocar aspas no identificador ao criar tabelas< / LI >
< LI > Utilizar somente caracteres minú sculos em identificadores< / LI >
< LI > Colocar aspas em identificadores ao referenciá -los nas consultas< / LI >
< / UL >
2004-06-09 23:46:11 -04:00
< / BODY >
< / HTML >