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