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