summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruce Momjian2006-11-20 20:58:40 +0000
committerBruce Momjian2006-11-20 20:58:40 +0000
commitfb2619859c4202246ddfc114527f410d14ea6d8e (patch)
tree79e1cd221d77aeb965ff61638de66017cf5772b4
parent016e0b4177ed9e3ef6d7d4d5ba6592a7ecfe3eec (diff)
Update Brazilian FAQ.
Euler Taveira de Oliveira
-rw-r--r--doc/FAQ_brazilian1550
-rw-r--r--doc/src/FAQ/FAQ_brazilian.html1379
2 files changed, 1266 insertions, 1663 deletions
diff --git a/doc/FAQ_brazilian b/doc/FAQ_brazilian
index 0f8ddf1925d..450b001351f 100644
--- a/doc/FAQ_brazilian
+++ b/doc/FAQ_brazilian
@@ -1,11 +1,11 @@
Perguntas Frequentes (FAQ) sobre PostgreSQL
- �ltima atualiza��o: Dom Jan 9 14:44:04 EDT 2005
+ �ltima atualiza��o: S�b Out 14 19:08:19 EDT 2006
- Mantenedor atual: Bruce Momjian ([email protected])
+ Mantenedor atual: Bruce Momjian ([email protected])
- Traduzido por: Euler Taveira de Oliveira ([email protected])
+ Traduzido por: Euler Taveira de Oliveira ([email protected])
A vers�o mais recente desse documento pode ser vista em
http://www.postgresql.org/files/documentation/faqs/FAQ.html (EN).
@@ -19,242 +19,192 @@
Perguntas Gerais
1.1) O que � PostgreSQL? Como ele � pronunciado?
- 1.2) Qual � a licen�a do PostgreSQL?
- 1.3) Quais plataformas Unix o PostgreSQL pode ser executado?
- 1.4) Quais portabilidades n�o-Unix est�o dispon�veis?
+ 1.2) Quem controla o PostgreSQL?
+ 1.3) Qual � a licen�a do PostgreSQL?
+ 1.4) Quais plataformas o PostgreSQL pode ser executado?
1.5) Onde eu posso conseguir o PostgreSQL?
- 1.6) Onde eu posso conseguir suporte?
- 1.7) Qual � a �ltima vers�o?
- 1.8) Que documenta��o est� dispon�vel?
+ 1.6) Qual � a �ltima vers�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�o os bugs conhecidos ou
caracter�sticas ausentes?
- 1.10) Como eu posso aprender SQL?
- 1.11) O PostgreSQL est� livre do Bug do Mil�nio?
- 1.12) Como posso me juntar a equipe de desenvolvimento?
- 1.13) Como eu informo a exist�ncia de um bug?
- 1.14) Como � o PostgreSQL comparado a outros SGBDs?
- 1.15) Como eu posso ajudar financeiramente o projeto PostgreSQL?
+ 1.10) Que documenta��o est� dispon�vel?
+ 1.11) Como eu posso aprender SQL?
+ 1.12) Como posso submeter uma corre��o (patch) ou me juntar a equipe
+ de desenvolvimento?
+ 1.13) Como � o PostgreSQL comparado a outros SGBDs?
Perguntas sobre Clientes
- 2.1) H� drivers ODBC para PostgreSQL?
+ 2.1) Quais interfaces est�o dispon�veis para PostgreSQL?
2.2) Quais ferramentas est�o dispon�veis para utilizar o PostgreSQL
com p�ginas Web?
2.3) O PostgreSQL tem interfaces gr�ficas para interagir com usu�rio?
- 2.4) Quais linguagens est�o dispon�veis para comunicar-se com o
- PostgreSQL?
Perguntas Administrativas
3.1) Como eu instalo o PostgreSQL em um local diferente de
/usr/local/pgsql?
- 3.2) Quando eu inicio o postmaster, eu recebo a mensagem Bad System
- Call ou uma descarga de mem�ria (core dump). Por que?
- 3.3) Quando eu tento iniciar o postmaster, eu recebo erros
- IpcMemoryCreate. Por que? 3.4) Quando eu tento iniciar o postmaster,
- eu recebo erros IpcSemaphoreCreate. Por que? 3.5) Como eu controlo
- conex�es de outras m�quinas?
- 3.6) Como eu ajusto o servidor de banco de dados para obter uma
+ 3.2) Como eu controlo conex�es de outras m�quinas?
+ 3.3) Como eu ajusto o servidor de banco de dados para obter uma
performance melhor?
- 3.7) Quais caracter�sticas de depura��o est�o dispon�veis?
- 3.8) Por que eu recebo "Sorry, too many clients" quando eu tento
+ 3.4) Quais caracter�sticas de depura��o est�o dispon�veis?
+ 3.5) Por que eu recebo "Sorry, too many clients" quando eu tento
conectar?
- 3.9) O que est� no diret�rio pgsql_tmp?
- 3.10) O que eu preciso fazer para exportar e importar durante a
- atualiza��o de vers�es do PostgreSQL?
- 3.11) Que tipo de hardware eu devo usar?
+ 3.6) Qual � o processo de atualiza��o do PostgreSQL? 3.7) Que tipo de
+ hardware eu devo usar?
Perguntas Operacionais
- 4.1) Qual � a diferen�a entre cursores bin�rios e normais?
- 4.2) Como eu fa�o um SELECT somente dos primeiros registros de uma
+ 4.1) Como eu fa�o um SELECT somente dos primeiros registros de uma
consulta? Um registro rand�mico?
- 4.3) Como eu obtenho a lista de tabelas ou outras coisas que eu posso
- ver no psql?
- 4.4) Como eu removo uma coluna de uma tabela ou mudo o seu tipo de
+ 4.2) Como eu descubro quais tabelas, �ndices, bancos de dados e
+ usu�rios est�o definidos? Como eu vejo as consultas utilizadas pelo
+ psql para mostr�-los?
+ 4.3) Como voc� muda o tipo de dado de uma coluna?
+ 4.4) Qual � o tamanho m�ximo de um registro, uma tabela e um banco de
dados?
- 4.5) Qual � o tamanho m�ximo de um registro, uma tabela e um banco de
- dados?
- 4.6) Quanto espa�o em disco � necess�rio para armazenar dados de um
+ 4.5) Quanto espa�o em disco � necess�rio para armazenar dados de um
arquivo texto?
- 4.7) Como eu descubro quais tabelas, �ndices, bancos de dados e
- usu�rios est�o definidos?
- 4.8) Minhas consultas est�o lentas ou n�o est�o utilizando �ndices.
- Por que?
- 4.9) Como eu vejo como o otimizador de consultas est� avaliando minha
+ 4.6) Por que minhas consultas est�o lentas? Por que elas n�o est�o
+ utilizando meus �ndices?
+ 4.7) Como eu vejo como o otimizador de consultas est� avaliando minha
consulta?
- 4.10) O que � um �ndice de �rvore R (R-tree)?
- 4.11) O que � um Otimizador Gen�tico de Consultas?
- 4.12) Como eu fa�o buscas com express�es regulares e buscas com
- express�es regulares sem diferenciar mai�sculas de min�sculas? Como eu
- utilizo um �ndice para buscas que n�o diferenciam mai�sculas de
- min�sculas?
- 4.13) Em uma consulta, como eu detecto se um campo � NULL?
- 4.14) Qual � a diferen�a entre os v�rios tipos de dados de caracteres?
- 4.15.1) Como eu crio um campo serial/auto incremento?
- 4.15.2) Como eu consigo o valor de um campo SERIAL?
- 4.15.3) currval() n�o lida com condi��o de corrida com outros
+ 4.8) Como eu fa�o buscas com express�es regulares e buscas com
+ express�es regulares sem diferenciar mau�sculas de min�sculas? Como eu
+ utilizo um �ndice para buscas sem distinguir mai�sculas de min�sculas?
+ 4.9) Em uma consulta, como eu detecto se um campo � NULL? Como eu
+ posso ordenar por um campo que � NULL ou n�o?
+ 4.10) Qual � a diferen�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��o de corrida com outros
usu�rios?
- 4.15.4) Por que os n�meros da minha sequ�ncia n�o s�o reutilizados
+ 4.11.4) Por que os n�meros da minha sequ�ncia n�o s�o reutilizados
quando uma transa��o � abortada? Por que h� intervalos nos n�meros da
minha sequ�ncia/coluna SERIAL?
- 4.16) O que � um OID? O que � um TID?
- 4.17) Qual � o significado de alguns termos utilizados no PostgreSQL?
- 4.18) Por que eu recebo o erro "ERROR: Memory exhausted in
+ 4.12) O que � um OID? O que � um CTID?
+ 4.13) Por que eu recebo o erro "ERROR: Memory exhausted in
AllocSetAlloc()"?
- 4.19) Como eu informo qual vers�o do PostgreSQL eu estou utilizando?
- 4.20) Por que minhas opera��es com objetos grandes retorna "invalid
- large obj descriptor"?
- 4.21) Como eu crio uma coluna que conter� por padr�o a hora atual?
- 4.22) Por que as minhas subconsultas que utilizam IN est�o t�o lentas?
- 4.23) Como eu fa�o uma jun��o externa (outer join)?
- 4.24) Como eu fa�o consultas utilizando m�ltiplos bancos de dados?
- 4.25) Como eu retorno m�ltiplos registros ou colunas de uma fun��o?
- 4.26) Por que eu n�o posso confiar na cria��o/remo��o de tabelas
- tempor�rias em fun��es PL/PgSQL?
- 4.27) Que op��es para encripta��o est�o dispon�veis?
-
- Extendendo o PostgreSQL
-
- 5.1) Eu escrevi uma fun��o. Quando eu executo-a no psql, por que ela
- finaliza o programa com descarga de mem�ria (core dump)?
- 5.2) Como eu posso contribuir com alguns tipos e fun��es novas para o
- PostgreSQL?
- 5.3) Como eu escrevo uma fun��o em C que retorna uma tupla?
- 5.4) Eu alterei um arquivo do c�digo-fonte. Por que a recompila��o n�o
- surtiu efeito?
+ 4.14) Como eu informo qual vers�o do PostgreSQL eu estou utilizando?
+ 4.15) Como eu crio uma coluna que conter� por padr�o a hora atual?
+ 4.16) Como eu fa�o uma jun��o externa (outer join)?
+ 4.17) Como eu fa�o consultas utilizando m�ltiplos bancos de dados?
+ 4.18) Como eu retorno m�ltiplos registros ou colunas de uma fun��o?
+ 4.19) Por que eu obtenho erros "relation with OID ###### does not
+ exist" ao acessar tabelas tempor�rias em fun��es PL/PgSQL?
+ 4.20) Quais solu��es de replica��o est�o dispon�veis?
+ 4.21) Por que os nomes de minhas tabelas e colunas n�o s�o
+ reconhecidos em minha consulta?
_________________________________________________________________
Perguntas Gerais
- 1.1) O que � PostgreSQL? Como ele � pronunciado?
-
- PostgreSQL � pronunciado Post-Gres-Q-L.
-
- PostgreSQL � um melhoramento do sistema de ger�ncia de banco de dados
- POSTGRES (e tamb�m �, �s vezes, chamado simplesmente de "Postgres"),
- um prot�tipo de pesquisa de um SGBD de �ltima gera��o. Enquanto o
- PostgreSQL ret�m a modelagem de dados poderosa e a grande quantidade
- de tipos de dados do POSTGRES, ele substituiu a linguagem de consulta
- PostQuel com um subconjunto extendido do SQL. PostgreSQL � livre e o
- c�digo-fonte completo est� dispon�vel.
+ 1.1) O que � PostgreSQL? Como ele � pronunciado?
+
+ PostgreSQL � pronunciado Post-Gres-Q-L, e �, �s vezes, referido apenas
+ como Postgres. Um arquivo de �udio est� dispon�vel em formato MP3 para
+ aqueles que gostariam de ouvir a pron�ncia.
+
+ O PostgreSQL � um sistema de banco de dados objeto-relacional que tem
+ as caracter�sticas de sistemas de bancos de dados comerciais
+ tradicionais com melhoramentos encontrados nos sistemas SGBDs de
+ pr�xima gera��o. PostgreSQL � livre e o c�digo-fonte completo est�
+ dispon�vel.
O desenvolvimento do PostgreSQL � feito por um grupo de
- desenvolvedores que est�o inscritos na lista de e-mails de
- desenvolvimento do PostgreSQL. O coordenador atual � Marc G. Fournier
- ([email protected]). (Veja a se��o 1.6 para saber como se juntar
- ao grupo). O grupo � respons�vel por todo o desenvolvimento do
- PostgreSQL. � um projeto da comunidade e n�o � controlado por nenhuma
- empresa. Para se juntar ao grupo, veja a FAQ do desenvolvedor em
+ desenvolvedores volunt�rios (na sua maioria) espalhados pelo mundo e
+ que se comunicam via Internet. � um projeto da comunidade e n�o �
+ controlado por nenhuma empresa. Para se envolver, veja a FAQ do
+ desenvolvedor em
http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html
- Os autores do PostgreSQL 1.01 foram Andrew Yu e Jolly Chen. Muitos
- outros contribuiram para portar, testar, depurar e melhorar o c�digo.
- O c�digo original do Postgres, do qual o PostgreSQL foi derivado, foi
- um esfor�o de muitos estudantes de gradua��o e p�s-gradua��o e uma
- equipe de programadores trabalhando sobre a dire��o do Professor
- Michael Stonebraker na Universidade da Calif�nia em Berkeley.
-
- O nome original do software em Berkeley era Postgres. Quando o SQL foi
- adicionado em 1995, seu nome foi mudado para Postgres95. O nome foi
- mudado no fim de 1996 para PostgreSQL.
+ 1.2) Quem controla o PostgreSQL?
+
+ Se voc� est� procurando por um mantenedor, comit� central ou empresa
+ controladora do PostgreSQL, desista --- n�o h� um(a). N�s temos um
+ comit� core e committers CVS, mas estes grupos s�o mais para quest�es
+ administrativas do que controle. O projeto � direcionado pela
+ comunidade de desenvolvedores e usu�rios, que qualquer um pode se
+ juntar. Tudo o que voc� precisa � se inscrever nas listas de discuss�o
+ e participar das discuss�es. Veja a FAQ do desenvolvedor para obter
+ informa��es como se envolver com o desenvolvimento do PostgreSQL.
+
+ 1.3) Qual � a licen�a do PostgreSQL?
+
+ O PostgreSQL � distribu�do sob a licen�a BSD cl�ssica. Basicamente,
+ ela permite que usu�rios fa�am qualquer coisa com o c�digo, incluindo
+ revender os bin�rios sem o c�digo-fonte. A �nica restri��o � que voc�
+ n�o nos responsabilize legalmente por problemas com o programa de
+ computador. H� tamb�m a exig�ncia de que esta licen�a apare�a em todas
+ as c�pias do programa de computador. Aqui est� a licen�a BSD que
+ usamos atualmente:
- 1.2) Qual � a licen�a do PostgreSQL?
-
PostgreSQL est� sujeito a seguinte licen�a:
- PostgreSQL Sistema de Ger�ncia de Banco de Dados
+ PostgreSQL Data Base Management System
Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group
- Portions Copyright (c) 1994-6 Regents of the University of California
-
- Permiss�o de uso, c�pia, modifica��o e distribui��o desse software e
- sua documenta��o para qualquer prop�sito, sem taxa, e sem um acordo
- escrito est� concedida por esse meio, contanto que a nota da licen�a
- acima, esse par�grafo e os dois par�grafos seguintes apare�am em todas
- as c�pias.
-
- EM NENHUM EVENTO A UNIVERSIDADE DA CALIF�RNIA SER� RESPONS�VEL POR
- QUALQUER PARTIDO EM DANOS DIRETOS, INDIRETOS, ESPECIAIS, INCIDENTAIS
- OU CONSEQUENTES, INCLUINDO PERDA DE LUCROS, SURGIDOS A PARTIR DO USO
- DO SOFTWARE E DE SUA DOCUMENTA��O, MESMO SE A UNIVERSIDADE DA
- CALIF�RNIA ESTIVER SIDO AVISADA DA POSSIBILIDADE DE TAL DANO.
-
- A UNIVERSIDADE DA CALIF�RNIA ESPECIFICADAMENTE N�O D� NENHUMA
- GARANTIA, INCLUINDO, MAS N�O LIMITADO A, GARANTIAS IMPL�CITAS DE
- COMERCIALIZA��O E ATENDIMENTO DE PROP�SITO PARTICULAR. O SOFTWARE �
- FORNECIDO ABAIXO "COMO �", E A UNIVERSIDADE DA CALIF�RNIA N�O TEM
- OBRIGA��O DE FORNECER MANUTEN��O, SUPORTE, ATUALIZA��ES, MELHORIAS OU
- MODIFICA��ES.
-
- O que est� descrito acima � a licen�a BSD, uma licen�a de c�digo
- aberto cl�ssica. Ela n�o tem restri��es de como o c�digo pode ser
- utilizado. N�s gostamos dela e n�o temos inten��es de mud�-la.
-
- 1.3) Quais plataformas Unix o PostgreSQL pode ser executado?
-
+ 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�vel com Unix deve ser
capaz de executar o PostgreSQL. As plataformas que foram testadas
antes do lan�amento de uma vers�o s�o listadas nas instru��es de
instala��o.
- 1.4) Quais portabilidades n�o-Unix est�o dispon�veis?
-
- Iniciando com a vers�o 8.0, o PostgreSQL agora pode ser executado
- nativamente nos sistemas operacionais Microsoft Windows baseados no NT
- tais como Win2000, WinXP e Win2003. Um instalador est� dispon�vel em
- http://pgfoundry.org/projects/pginstaller Vers�es do Windows baseados
- no MSDOS (Win95, Win98, WinMe) podem executar o PostgreSQL utilizando
+ O PostgreSQL tamb�m executa nativamente nos sistemas operacionais
+ Microsoft Windows baseados no NT tais como Win200 SP4, WinXP e
+ Win2003. Um instalador pr�-empacotado est� dispon�vel em
+ http://pgfoundry.org/projects/pginstaller. Vers�es do Windows baseadas
+ no MS-DOS (Win95, Win98, WinMe) podem executar o PostgreSQL utilizando
o Cygwin.
- H� tamb�m um porte para Novell Netware 6 em http://forge.novell.com e
- uma vers�o para OS/2 (eComStation) em
+ H� tamb�m uma vers�o para o Novell Netware 6 em
+ http://forge.novell.com e uma vers�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?
-
- O servidor ftp principal do PostgreSQL � ftp://ftp.PostgreSQL.org/pub.
- Para obter a rela��o de servidores espelhos (mirrors), consulte nosso
- website.
-
- 1.6) Onde eu posso conseguir suporte?
-
- A lista de discuss�o principal �: [email protected]. Ela
- est� dispon�vel para discuss�es relacionadas ao PostgreSQL. Para se
- inscrever, envie um e-mail com as seguintes linhas no corpo (n�o envie
- no assunto):
- subscribe
- end
-
+ 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/.
- H� tamb�m uma lista s�ntese (digest) dispon�vel. Para se inscrever,
- envie um e-mail para: [email protected] com
- o seguinte corpo:
- subscribe
- end
-
- S�nteses (Digests) s�o enviadas aos membros dessa lista quando a lista
- receber cerca de 30k em mensagens.
-
- A lista de discuss�o sobre bugs est� dispon�vel. Para se inscrever,
- envie um e-mail para [email protected] com o seguinte
- corpo:
- subscribe
- end
-
- H� tamb�m uma lista de discuss�o dos desenvolvedores dispon�vel. Para
- se inscrever, envie um e-mail para
- [email protected] com o seguinte corpo:
- subscribe
- end
-
- Outras listas de discuss�es e informa��es sobre o PostgreSQL podem ser
- encontradas na homepage do PostgreSQL em:
+ 1.6) Qual � a �ltima vers�o?
+
+ A �ltima vers�o do PostgreSQL � a vers�o 8.1.5.
+
+ N�s planejamos lan�ar vers�es novas a cada ano com vers�es corretivas
+ em alguns meses.
+
+ 1.7) Onde eu posso conseguir suporte?
+
+ A comunidade do PostgreSQL fornece assist�ncia a muitos de seus
+ usu�rios via e-mail. O principal s�tio web para inscri��o nas listas
+ de e-mail � http://www.postgresql.org/community/lists/. As listas
+ general e bugs s�o um bom lugar para in�cio.
- http://www.PostgreSQL.org
-
O principal canal de IRC � o #postgresql na Freenode
(irc.freenode.net). Para se conectar voc� pode utilizar o comando Unix
irc -c '#postgresql' "$USER" irc.freenode.net ou utilizar qualquer
@@ -263,110 +213,120 @@
PostgreSQL na EFNet.
Uma lista de empresas que prestam suporte comercial est� dispon�vel em
- http://techdocs.postgresql.org/companies.php.
-
- 1.7) Qual � a �ltima vers�o?
-
- A �ltima vers�o do PostgreSQL � a vers�o 7.4.6.
+ http://www.postgresql.org/support/professional_support.
- N�s planejamos lan�ar vers�es novas a cada seis ou oito meses.
+ 1.8) Como eu informo a exist�ncia de um bug?
+
+ Visite o formul�rio que reporta bugs do PostgreSQL em
+ http://www.postgresql.org/support/submitbug.
- 1.8) Que documenta��o est� dispon�vel?
-
- V�rios manuais, p�ginas de manuais (man pages) e alguns exemplos para
- teste est�o inclu�dos na distribui��o. Veja o diret�rio /doc. Voc�
- pode acessar os manuais online em http://www.PostgreSQL.org/docs.
+ Verifique tamb�m o nosso ftp ftp://ftp.PostgreSQL.org/pub para ver se
+ h� uma vers�o mais recente do PostgreSQL.
+
+ Bugs submetidos utilizando o formul�rio ou informado a qualquer lista
+ de discuss�o do PostgreSQL tipicamente gera uma das seguintes
+ respostas:
+ * N�o � um bug e o porqu�
+ * � um bug conhecido e j� est� na lista de AFAZERES (TODO)
+ * O bug foi corrigido na vers�o atual
+ * O bug foi corrigido mas n�o foi empacotado em um vers�o oficial
+ * Um pedido foi feito para obter informa��es detalhadas:
+ + Sistema Operacional
+ + Vers�o do PostgreSQL
+ + Exemplo de teste que reproduz o bug
+ + Informa��es sobre depura��o
+ + Sa�da reconstituidora de vest�gios (backtrace) do depurador
+ * O bug � novo. O seguinte pode ocorrer:
+ + Uma corre��o � criada e ser� inclu�da na pr�xima vers�o
+ + O bug n�o pode ser corrigido imediatamente e � 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�m bugs conhecidos, funcionalidades
+ ausentes e planos futuros.
+
+ Uma solicita��o de funcionalidade geralmente resulta em uma das
+ seguintes respostas:
+ * A funcionalidade j� est� na lista de AFAZERES (TODO)
+ * A funcionalidade n�o � desej�vel porque:
+ + Ela duplica uma funcionalidade existente que j� segue o
+ padr�o SQL
+ + A funcionalidade aumentar� a complexidade do c�digo mas
+ adicionar� pouco benef�cio
+ + A funcionalidade ser� insegura ou n�o-confi�vel
+ * A nova funcionalidade � 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�tica, bugs n�o duram muito no
+ programa; e bugs que afetam uma grande quantidade de usu�rios s�o
+ corrigidos rapidamente. O �nico lugar para encontrar todas as
+ mudan�as, melhorias e corre��es em uma vers�o do PostgreSQL � ler as
+ mensagens de log do CVS. At� mesmo as notas de lan�amento n�o listam
+ todas as mudan�as feitas no programa.
+
+ 1.10) Que documenta��o est� dispon�vel?
+
+ O PostgreSQL inclui vasta documenta��o, incluindo um manual extenso,
+ p�ginas de manuais (man pages) e alguns exemplos teste. Veja o
+ diret�rio /doc. Voc� tamb�m pode pesquisar os manuais online em
+ http://www.PostgreSQL.org/docs.
H� dois livros sobre PostgreSQL dispon�veis online em
- http://www.PostgreSQL.org/docs/awbook.html e
+ http://www.postgresql.org/docs/books/awbook.html e
http://www.commandprompt.com/ppbook/. H� uma lista de livros sobre
- PostgreSQL dispon�veis para compra em
- http://techdocs.PostgreSQL.org/techdocs/bookreviews.php. H� tamb�m uma
- cole��o de artigos t�cnicos sobre PostgreSQL em
- http://techdocs.PostgreSQL.org/.
+ PostgreSQL dispon�veis para compra. Um dos mais populares � o do Korry
+ Douglas. Uma lista de an�lise sobre os livros pode ser encontrada em
+ http://techdocs.PostgreSQL.org/techdocs/bookreviews.php.
O programa cliente de linha de comando psql tem alguns comandos \d
- para mostrar informa��o sobre tipos, operadores, fun��es, agrega��es,
- etc. Use \? para mostrar os comandos dispon�veis.
-
- Nosso web site cont�m ainda mais documenta��o.
-
- 1.9) Como eu posso saber quais s�o os bugs conhecidos ou caracter�sticas
- ausentes?
-
- PostgreSQL suporta um subconjunto extendido do SQL-92. Veja a nossa
- lista de afazeres (TODO) para saber sobre bugs conhecidos,
- caracter�sticas ausentes e planos futuros.
-
- 1.10) Como eu posso aprender SQL?
-
- O livro "The PostgreSQL book" em
- http://www.PostgreSQL.org/docs/awbook.html ensina SQL. H� outro livro
- sobre PostgreSQL em http://www.commandprompt.com/ppbook. H� bons
- tutoriais em http://www.intermedia.net/support/sql/sqltut.shtm, ,
- http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM,
- e em http://sqlcourse.com.
-
- Outro � o "Teach Yourself SQL in 21 Days, Second Edition" em
- http://members.tripod.com/er4ebus/sql/index.htm
-
- Muitos dos nossos usu�rios gostam do The Practical SQL Handbook,
- Bowman, Judith S., et al., Addison-Wesley. Outros gostam do The
- Complete Reference SQL, Groff et al., McGraw-Hill.
-
- 1.11) O PostgreSQL est� livre do Bug do Mil�nio?
-
- Sim, n�s podemos manipular datas ap�s o ano 2000 AD e antes do ano
- 2000 BC.
-
- 1.12) Como posso me juntar a equipe de desenvolvimento?
-
- Primeiramente, fa�a o download do c�digo-fonte e leia a documenta��o
- para Desenvolvedores do PostgreSQL no nosso website ou na
- distribui��o. Depois, se inscreva nas lista de discuss�o pgsql-hackers
- e pgsql-patches. Ent�o submeta patches de alta qualidade para
- pgsql-patches.
-
- H� algumas pessoas que tem privil�gios para fazer mudan�as (commit) na
- �rvore CVS do PostgreSQL. Cada um deles submeteram tantos patches de
- alta qualidade que foi imposs�vel para os committers continuarem a
- fazerem as mudan�as, e ent�o n�s confiamos que os patches que eles
- submetem s�o de alta qualidade.
-
- 1.13) Como eu informo a exist�ncia de um bug?
-
- Visite o formul�rio que reporta bugs do PostgreSQL em
- http://www.postgresql.org/support/submitbug.
-
- Verifique tamb�m o nosso ftp ftp://ftp.PostgreSQL.org/pub para ver se
- h� uma vers�o mais recente do PostgreSQL ou patches.
-
- 1.14) Como � o PostgreSQL comparado a outros SGBDs?
-
- H� v�rias maneiras de se medir um software: caracter�sticas,
+ para mostrar informa��es sobre tipos, operadores, fun��es, agrega��es,
+ etc. - utilize \? para mostrar os comandos dispon�veis.
+
+ Nosso s�tio web cont�m ainda mais documenta��o.
+
+ 1.11) Como eu posso aprender SQL?
+
+ Primeiro, considere os livros espec�ficos sobre PostgreSQL mencionados
+ acima. Outro � o "Teach Yourself SQL in 21 Days, Second Edition" e
+ http://members.tripod.com/er4ebus/sql/index.htm. Muitos de nossos
+ usu�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�m bons tutoriais dispon�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��o (patch) ou me juntar a equipe de
+ desenvolvimento?
+
+ Veja a FAQ do Desenvolvedor.
+
+ 1.13) Como � o PostgreSQL comparado a outros SGBDs?
+
+ H� v�rias maneiras de se medir um software: funcionalidades,
performance, confiabilidade, suporte e pre�o.
- Caracter�sticas
+ Funcionalidades
PostgreSQL tem muitas caracter�sticas presentes em muitos SGBDs
comerciais como transa��es, subconsultas, gatilhos, vis�es,
- integridade referencial de chave estrangeira e travamento
- (lock) sofisticado. N�s temos algumas caracter�sticas que eles
- n�o tem, como tipos definidos pelo usu�rio, heran�a, regras e
+ integridade referencial de chave estrangeira e bloqueio (lock)
+ sofisticado. N�s temos algumas funcionalidades que eles n�o
+ tem, como tipos definidos pelo usu�rio, heran�a, regras e
controle de concorr�ncia de m�ltiplas vers�es para reduzir
- travamentos (locks).
+ bloqueios (locks).
Performance
A performance do PostgreSQL � compar�vel a outros bancos de
dados comerciais e de c�digo livre. Ele � mais r�pido em
- algumas coisas, mais lento em outras. Comparado ao MySQL ou
- sistemas de bancos de dados "leves", n�s somos mais r�pidos com
- m�ltiplos usu�rios, consultas complexas e carga de consultas de
- leitura/escrita. MySQL � mais r�pido para consultas simples com
- SELECT feitas por poucos usu�rios. � claro que o MySQL n�o tem
- muitas das caracter�sticas mencionadas na se��o Caracter�sticas
- acima. N�s desenvolvemos buscando confiabilidade e
- caracter�sticas, e n�s continuamos a melhorar a performance a
- cada vers�o.
+ algumas coisas, mais lento em outras. Nossa performance �
+ geralmente +/- 10% comparada a de outros bancos de dados.
Confiabilidade
N�s sabemos que um SGBD deve ser confi�vel ou ele � in�til. N�s
@@ -387,320 +347,155 @@
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�veis para aqueles que precisam de um. (Veja
- se��o 1.6 da FAQ.)
+ se��o 1.7 da FAQ.)
Pre�o
N�s somos livres para uso dele tanto comercial quanto n�o
comercial. Voc� pode adicionar nosso c�digo ao seu produto sem
- limita��es, exceto aquelas descritas na nossa licen�a
- compat�vel com a licen�a BSD mencionada acima.
-
- 1.15) Como eu posso ajudar financeiramente o projeto PostgreSQL?
-
- PostgreSQL teve sua primeira infra-estrutura em 1996 quando iniciamos.
- Somos todos gratos ao Marc Fournier, que criou e gerenciou esta
- infra-estrutura ao longo dos anos.
-
- Infra-estrutura de qualidade � muito importante em um projeto de
- c�digo aberto. Ela previne descontinuidades que podem facilmente
- descontinuar o andamento do projeto.
-
- � claro, que a infra-estrutura n�o � barata. H� v�rios custos iniciais
- e mensais que s�o necess�rios para mant�-la. Se voc� ou sua empresa
- tem dinheiro que pode ser doado para ajudar a financiar esse esfor�o,
- acesse http://store.pgsql.com/shopping/ e fa�a uma doa��o.
-
- Embora a p�gina mencione PostgreSQL, Inc, a "contribui��o" � somente
- para apoiar o projeto PostgreSQL e n�o financia nenhuma empresa
- espec�fica. Se voc� preferir, voc� pode enviar um cheque para o
- endere�o de contato.
-
- Se voc� tiver uma hist�ria de sucesso sobre o PostgreSQL, envie-a para
- nossa lista advocacy em [email protected].
+ limita��es, exceto aquelas descritas na nossa licen�a BSD
+ mencionada acima.
_________________________________________________________________
Perguntas sobre Clientes
- 2.1) H� drivers ODBC para PostgreSQL?
-
- H� dois drivers ODBC dispon�veis, PsqlODBC e o OpenLink ODBC.
-
- Voc� pode fazer o download do PsqlODBC em
- http://gborg.postgresql.org/project/psqlodbc/projdisplay.php.
-
- OpenLink ODBC pode ser conseguido em http://www.openlinksw.com. Ele
- trabalha com cliente ODBC padr�o, ent�o voc� poder� ter o ODBC para
- PostgreSQL dispon�vel em toda plataforma que eles suportam (Win, Mac,
- Unix, VMS).
-
- Eles provavelmente vender�o seu produto para pessoas que precisam de
- um suporte de qualidade, mas uma vers�o gratuita estar� sempre
- dispon�vel. Por favor envie perguntas para [email protected].
-
- 2.2) Quais ferramentas est�o dispon�veis para utilizar o PostgreSQL com
- p�ginas Web?
-
+ 2.1) Quais interfaces est�o dispon�veis para PostgreSQL?
+
+ A instala��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�prias datas de lan�amento e time de desenvolvedores.
+
+ Algumas linguagens de programa��o como PHP incluem uma interface para
+ PostgreSQL. Interfaces para linguagens como Perl, TCL, Python e muitas
+ outras est�o dispon�veis em http://gborg.postgresql.org na se��o de
+ Drivers/Interfaces ou via busca na Internet.
+
+ 2.2) Quais ferramentas est�o dispon�veis para utilizar o PostgreSQL com
+ p�ginas Web?
+
Uma boa introdu��o para p�ginas web que utilizam bancos de dados pode
ser vista em: http://www.webreview.com
- Para integra��o na Web, PHP � uma excelente interface. Ele est� em
- http://www.php.net.
-
- Para casos complexos, muitos usam a Interface Perl e CGI.pm ou
- mod_perl.
-
- 2.3) O PostgreSQL tem interfaces gr�ficas para iteragir com o usu�rio?
-
- Sim, h� v�rias interfaces gr�ficas para PostgreSQL dispon�veis. Entre
- elas o PgAccess http://www.pgaccess.org), pgAdmin III
- (http://www.pgadmin.org, RHDB Admin (http://sources.redhat.com/rhdb/
- ), TORA (http://www.globecom.net/tora/, parcialmente comercial) e o
- Rekall ( http://www.thekompany.com/products/rekall/, propriet�ria). H�
- tamb�m o PhpPgAdmin ( http://phppgadmin.sourceforge.net/ ), uma
- interface web para PostgreSQL.
-
- Veja http://techdocs.postgresql.org/guides/GUITools para uma lista
- mais detalhada.
-
- 2.4) Quais linguagens est�o dispon�veis para comunicar-se com PostgreSQL?
-
- Muitas linguagens de programa��o populares cont�m uma interface para
- PostgreSQL. Verifique a lista de extens�es (m�dulos) da sua linguagem
- de programa��o.
-
- As seguintes interfaces est�o inclu�das na distribui��o do PostgreSQL:
- * C (libpq)
- * Embedded C (ecpg)
- * Java (jdbc)
- * Python (PyGreSQL)
- * TCL (libpgtcl)
-
- Interfaces adicionais est�o dispon�veis em http://gborg.postgresql.org
- na se��o de Drivers/Interfaces.
+ Para integra��o na Web, PHP (http://www.php.net) � 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�ficas para iteragir com o usu�rio?
+
+ H� um vasto n�mero de Ferramentas Gr�ficas (GUI), que est�o
+ dispon�veis para o PostgreSQL, comerciais e de desenvolvedores de
+ c�digo aberto. Uma lista detalhada pode ser encontrada em Documenta��o
+ da Comunidade PostgreSQL
_________________________________________________________________
Perguntas Administrativas
- 3.1) Como eu instalo o PostgreSQL em um local diferente de
- /usr/local/pgsql?
-
+ 3.1) Como eu instalo o PostgreSQL em um local diferente de /usr/local/pgsql?
+
Especifique a op��o --prefix quando executar o configure.
- 3.2) Quando eu inicio o postmaster, eu recebo a mensagem Bad System Call ou
- uma descarga de mem�ria (core dump). Por que?
-
- Isto pode ser v�rios problemas, mas primeiro verifique se voc� tem
- extens�es do System V instaladas no seu kernel. PostgreSQL requer
- suporte no kernel a mem�ria compartilhada e sem�foros.
-
- 3.3) Quando eu tento iniciar o postmaster, eu recebo erros IpcMemoryCreate.
- Por que?
-
- Voc� n�o configurou a mem�ria compartilhada corretamente no seu kernel
- ou voc� precisa aumentar a mem�ria compartilhada dispon�vel no seu
- kernel. A quantidade exata que voc� precisa vai depender da
- arquitetura e de quantos buffers e processos do servidor voc�
- configurou para o postmaster. Muitos sistemas, com o n�mero padr�o de
- buffers e processos, precisam de aproximadamente 1 MB. Veja a se��o
- PostgreSQL Administrator's Guide/Server Run-time Environment/Managing
- Kernel Resources para mais informa��o sobre mem�ria compartilhada e
- sem�foros.
-
- 3.4) Quando eu tento iniciar o postmaster, eu recebo erros
- IpcSemaphoreCreate. Por que?
-
- Se a mensagem de erro � IpcSemaphoreCreate: semget failed (No space
- left on device) ent�o o seu kernel n�o est� configurado com o n�mero
- de sem�foros suficientes. O Postgres precisa de um sem�foro por
- processo do servidor. Uma solu��o tempor�ria � iniciar o postmaster
- com um limite pequeno de processos do servidor. Utilize -N com o
- par�metro menor do que o padr�o (32). Uma solu��o permanente seria
- aumentar os par�metros do kernel SEMMNS e SEMMNI.
-
- Sem�foros inoperantes podem tamb�m causar danos durante intenso acesso
- ao banco de dados.
-
- Se a mensagem � outra coisa, voc� possivelmente n�o tem suporte a
- sem�foro configurado no seu kernel. Veja o Guia do Administrador para
- mais informa��o sobre mem�ria compartilhada e sem�foros.
-
- 3.5) Como eu controlo conex�es de outras m�quinas?
-
+ 3.2) Como eu controlo conex�es de outras m�quinas?
+
Por padr�o, o PostgreSQL s� permite conex�es da m�quina local
utilizando soquetes de dom�nio Unix ou conex�es TCP/IP. Outras
m�quinas n�o poder�o conectar-se a menos que voc� modifique
- listen_addresses no postgresql.conf, e habilite a autentica��o por
- m�quina modificando o arquivo $PGDATA/pg_hba.conf.
-
- 3.6) Como eu ajusto o servidor de banco de dados para obter uma performance
- melhor?
-
- Certamente, �ndices podem acelerar consultas. O comando EXPLAIN
- ANALYZE permite que voc� veja como o PostgreSQL est� interpretando a
- consulta, e quais os �ndices s�o utilizados.
-
- Se voc� est� fazendo muitos INSERTs, considere faz�-los em lote
- utilizando o comando COPY. Isso � mais r�pido do que INSERTs
- individuais. Segundo, senten�as que n�o est�o em um bloco de transa��o
- BEGIN WORK/COMMIT s�o consideradas com se estivessem em sua pr�pria
- transa��o. Considere executar v�rias senten�as em um mesmo bloco de
- transa��o. Isso reduz a quantidade de transa��es. Tamb�m, considere
- remover e criar �ndices novamente quando estiver fazendo muitas
- mudan�as nos dados.
-
- H� v�rias op��es de ajuste em Administration Guide/Server Run-time
- Environment/Run-time Configuration. Voc� pode desabilitar o fsync()
- utilizando a op��o fsync. Isso ir� impedir que fsync()s enviem os
- dados para disco ap�s cada transa��o.
-
- Voc� pode utilizar a op��o shared_buffers para aumentar o n�mero de
- buffers de mem�ria compartilhada utilizados pelos processos do
- servidor. Se voc� definiu este par�metro com um valor muito alto, o
- postmaster pode n�o iniciar porque voc� excedeu o limite de espa�o de
- mem�ria compartilhada do kernel. Cada buffer � de 8K e o padr�o � de
- 1000 buffers.
-
- Voc� tamb�m pode utilizar a op��o sort_mem (no PostgreSQL 8.0:
- work_mem) para aumentar a m�xima quantidade de mem�ria utilizada pelo
- processo servidor para cada ordena��o tempor�ria. O valor padr�o �
- 1024 (ou seja 1MB).
-
- Voc� tamb�m pode utilizar o comando CLUSTER para agrupar dados em
- tabelas para combinar um �ndice. Veja o manual sobre CLUSTER para mais
- informa��o.
-
- 3.7) Quais caracter�sticas de depura��o est�o dispon�veis?
-
- PostgreSQL tem v�rias caracter�sticas que relatam informa��es que
- podem ser valiosas para fins de depura��o.
-
- Primeiro, execute o configure com a op��o --enable-cassert, muitos
- assert()s monitoram o progresso do n�cleo (backend) e finalizam o
- programa quando alguma coisa inesperada acontece.
-
- O postmaster e o postgres tem v�rias op��es de depura��o dispon�veis.
- Primeiro, quando iniciar o postmaster, tenha certeza que voc� enviou a
- saida padr�o e a sa�da de erro padr�o para um arquivo de log, como em:
- cd /usr/local/pgsql
- ./bin/postmaster >server.log 2>&1 &
-
- Isso ir� criar um arquivo server.log no diret�rio raiz do PostgreSQL.
- Este arquivo conter� informa��es �teis sobre problemas ou erros
- encontrados pelo servidor. O Postmaster tem uma op��o -d que permite
- que informa��es mais detalhadas sejam relatadas. A op��o -d �
- acompanhada por um n�mero que indica o n�vel de depura��o. Esteja
- alerta de que alto n�vel de depura��o gera grandes arquivos de log.
-
- Se o postmaster n�o est� sendo executado, voc� pode executar o n�cleo
- do postgres a partir da linha de comando, e digitar a sua senten�a SQL
- diretamente. Isso � recomendado somente para fins de depura��o. Note
- que uma nova linha termina a consulta, e n�o um ponto-e-v�rgula. Se
- voc� compilou com s�mbolos de depura��o, voc� pode utilizar um
- depurador para ver o que est� acontecendo. Como o n�cleo (backend) n�o
- foi iniciado a partir do postmaster, ele n�o est� executando em um
- ambiente id�ntico e problemas de itera��o com o n�cleo/travamento n�o
- podem ser reproduzidos.
-
- Se o postmaster est� sendo executado, inicie o psql em uma janela, e
- ent�o encontre o PID do processo postgres utilizado pelo psql
- utilizando SELECT pg_backend_pid(). Utilize um depurador para anexar
- ao PID do postgres. Voc� pode definir pontos de parada (breakpoints)
- no depurador e digitar consultas no psql. Se voc� est� depurando a
- inicializa��o do postgres, voc� pode definir PGOPTIONS="-W n" e ent�o
- iniciar o psql. Isto retardar� a inicializa��o por n segundos ent�o
- voc� pode anexar o depurador ao processo, definir quaisquer pontos de
- parada e continuar pela sequ�ncia de inicializa��o.
-
- H� v�rias vari�veis de configura��o do servidor log_* que habilitam a
- exibi��o de estat�sticas que podem ser muito �teis para depura��o e
- medidas de performance.
-
- Voc� tamb�m pode compilar com perfil para ver que fun��es est�o
- demandando tempo de execu��o. Os arquivo de perfil do n�cleo (backend)
- ser�o colocados no diret�rio pgsql/data/base/dbname. O arquivo de
- perfil do cliente ser� colocado no diret�rio atual do cliente. O Linux
- requer uma compila��o com -DLINUX_PROFILE para cria��o dos perfis.
-
- 3.8) Por que eu recebo "Sorry, too many clients" quando eu tento conectar?
-
- Voc� precisa aumentar o limite do postmaster de quantos processos do
- servidor concorrentes ele pode iniciar.
-
- O limite padr�o � de 32 processos. Voc� pode aument�-lo reiniciando o
- postmaster com o valor conveniente de -N ou modificar o
- postgresql.conf.
-
- Note que se voc� definir o -N com um valor maior do que 32, voc�
- tamb�m deve aumentar -B cujo padr�o � 64; -B deve ser pelo menos duas
- vezes -N, e provavelmente deve ser mais do que isso para uma melhor
- performance. Para um grande n�mero de processos do servidor, voc�
- tamb�m precisa aumentar v�rios par�metros de configura��o do kernel do
- Unix. Coisas para serem observadas incluem o tamanho m�ximo de blocos
- de mem�ria compartilhada, SHMMAX; o n�mero m�ximo de sem�foros, SEMMNS
- e SEMMNI; o n�mero m�ximo de processos, NPROC; o n�mero m�ximo de
- processos por usu�rio, MAXUPRC; e o n�mero m�ximo de arquivos abertos,
- NFILE e NINODE. A raz�o na qual o PostgreSQL tem um limite de n�mero
- de processos do servidor permitidos � para que o seu sistema n�o fique
- sem recursos dispon�veis.
-
- 3.9) O que est� no diret�rio pgsql_tmp?
-
- Este diret�rio cont�m arquivos tempor�rios gerados pelo executor de
- uma consulta. Por exemplo, se uma ordena��o � necess�ria para
- satisfazer um ORDER BY e a ordena��o requer mais espa�o do que o
- par�metro -S do servidor permite, ent�o arquivos tempor�rios s�o
- criados para abrigar os dados extras.
-
- Os arquivos tempor�rios geralmente s�o apagados automaticamente, mas
- podem persistir caso o servidor termine anormalmente durante a
- ordena��o. Uma parada e um rein�cio do postmaster remover� os arquivos
- destes diret�rios.
-
- 3.10) O que eu preciso fazer para exportar e importar durante a atualiza��o
- entre vers�es do PostgreSQL?
-
+ listen_addresses no postgresql.conf, habilite a autentica��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�s grandes �reas para melhorar a performance em potencial:
+
+ Mudan�a de Consultas
+ Isto involve modificar consultas para obter melhor performance:
+
+ + Cria��o de �ndices, incluir express�es e �ndices parciais
+ + Utiliza��o o COPY ao inv�s de m�ltiplos comandos INSERTs
+ + Agrupamento de m�ltiplos comandos em uma �nica transa��o para
+ diminuir a despesa com efetiva��es (commit)
+ + Utiliza��o do CLUSTER quando recuperar v�rios registros de um
+ �ndice
+ + Utiliza��o do LIMIT para retornar um subconjunto da sa�da da
+ consulta
+ + Utiliza��o de Consultas preparadas
+ + Utiliza��o de ANALYZE para manter as estat�sticas do
+ otimizador corretas
+ + Utiliza��o regular do VACUUM ou pg_autovacuum
+ + Remo��o de �ndices durante grande mudan�a de dados
+
+ Configura��o do Servidor
+ Um grande n�mero de configura��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�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��o do Hardware
+ O efeito do hardware na performance � detalhado em
+ http://www.powerpostgresql.com/PerfList/ e
+ http://momjian.us/main/writings/pgsql/hw_performance/index.html
+ .
+
+ 3.4) Quais caracter�sticas de depura��o est�o dispon�veis?
+
+ H� muitas vari�veis de configura��o do servidor log_* que habilitam a
+ exibi��o de consultas e estat�sticas que podem ser muito �teis para
+ depura��o e medidas de performance.
+
+ 3.5) Por que eu recebo "Sorry, too many clients" quando eu tento conectar?
+
+ Voc� atingiu o limite padr�o que � de 100 sess�es. Voc� 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 � o processo de atualiza��o do PostgreSQL?
+
O time do PostgreSQL faz somente pequenas mudan�as entre vers�es
- menores, ent�o atualizar da vers�o 7.2 para 7.2.1 n�o requer uma
- exporta��o e uma importa��o. Contudo, vers�es maiores (i.e. da 7.2
- para 7.3) geralmente muda-se o formato interno das tabelas de sistema
- e dos arquivo de dados. Essas mudan�as geralmente s�o complexas, ent�o
- n�s n�o mantemos compatibilidade para os arquivos de dados. Uma
- exporta��o em um formato gen�rico que pode ser importada utilizando o
- novo formato interno.
-
- Em vers�es onde o formato em disco n�o muda, o script pg_upgrade pode
- ser utilizado para atualizar sem precisar de um dump/restore. As notas
- da vers�o mencionam se pg_upgrade est� dispon�vel para a vers�o.
-
- 3.11) Que tipo de hardware eu devo usar?
-
+ corretivas, ent�o atualizar da vers�o 7.4.8 para 7.4.9 n�o requer uma
+ exporta��o e uma importa��o; basta para o servidor de banco de dados,
+ instalar os bin�rios atualizados e reiniciar o servidor.
+
+ Todos os usu�rios devem atualizar para as vers�es corretivas mais
+ recentes assim que elas estiverem dispon�veis. Enquanto cada
+ atualiza��o tem algum risco, vers�es corretivas do PostgreSQL s�o
+ projetadas para corrigir somente bugs comuns com um risco m�nimo. A
+ comunidade considera n�o atualizar mais perigoso do que atualizar.
+
+ Vers�es novas (i.e. da 7.3 para 7.4) geralmente muda-se o formato
+ interno das tabelas de sistema e dos arquivo de dados. Essas mudan�as
+ geralmente s�o complexas, ent�o n�s n�o mantemos compatibilidade para
+ os arquivos de dados. Uma exporta��o/importa��o de um banco de dados �
+ necess�ria para atualiza��es entre vers�es.
+
+ 3.7) Que tipo de hardware eu devo usar?
+
Por causa do hardware de PC ser em sua maioria compat�vel, pessoas
- tendem a acreditar que todos os hardwares de PC satilde;o de mesma
- qualidade. Natilde;o � verdade. ECC RAM, SCSI e placas m�e de
- qualidade s�o mais confi�veis e t�m uma melhor performance do que
- hardwares mais baratos. O PostgreSQL executar� em quase todo hardware,
- mas se a confiabilidade e a performance forem importantes � prudente
- pesquisar sobre as op��es de hardware. Nossas listas de discuss�o
- podem ser usadas para discutir op��es de hardware e dilemas.
+ tendem a acreditar que todos os hardwares de PC s�o de mesma
+ qualidade. N�o � verdade. ECC RAM, SCSI e placas m�e de qualidade s�o
+ mais confi�veis e t�m uma melhor performance do que hardwares mais
+ baratos. O PostgreSQL executar� em quase todo hardware, mas se a
+ confiabilidade e a performance forem importantes � prudente pesquisar
+ sobre as op��es de hardware. Nossas listas de discuss�o podem ser
+ usadas para discutir op��es de hardware e dilemas.
_________________________________________________________________
Perguntas Operacionais
- 4.1) Qual � a diferen�a entre cursores bin�rios e normais?
-
- Veja o comando DECLARE no manual para uma descri��o.
-
- 4.2) Como eu fa�o um SELECT somente dos primeiros registros de uma
- consulta? Um registro rand�mico?
-
- Veja o manual do FETCH, ou utilize SELECT ... LIMIT....
-
- Toda a consulta tem que ser avaliada, mesmo se voc� s� quer os
- primeiros registros. Considere utilizar uma consulta que tenha um
- ORDER BY. Se h� um �ndice que combina com o ORDER BY, o PostgreSQL
- pode ser capaz de avaliar somente os primeiros registros requisitados,
- ou toda consulta tem que ser avaliada at� que os registros desejados
- tenham sido gerados.
+ 4.1) Como eu fa�o um SELECT somente dos primeiros registros de uma consulta?
+ Um registro rand�mico?
+
+ Para obter somente alguns registros, se voc� sabe o n�mero de
+ registros necess�rios ao executar o SELECT utilize o LIMIT. Se um
+ �ndice corresponde no ORDER BY � poss�vel que a consulta toda n�o
+ tenha que ser executada. Se voc� n�o sabe o n�mero de registros ao
+ executar o SELECT, utilize um cursor e o FETCH.
Para obter um registro rand�mico, utilize:
SELECT col
@@ -708,54 +503,58 @@
ORDER BY random()
LIMIT 1;
- 4.3) Como eu obtenho a lista de tabelas ou outras coisas que eu posso ver
- no psql?
-
+ 4.2) Como eu descubro quais tabelas, �ndices, bancos de dados e usu�rios
+ est�o definidos? Como eu vejo as consultas utilizadas pelo psql para
+ mostr�-los?
+
Utilize o comando \dt para ver tabelas no psql. Para obter uma lista
- completa de comandos no psql voc� pode utilizar \?. Alternativamente
+ completa dos comandos no psql voc� pode utilizar \?. Alternativamente,
voc� pode ler o c�digo-fonte do psql no arquivo
- pgsql/src/bin/psql/describe.c. Ele cont�m comandos SQL que geram a
- sa�da para os comandos do psql. Voc� tamb�m pode iniciar o psql com a
- op��o -E ent�o ser�o mostradas as consultas utilizadas para executar
- os comandos que voc� digitou. PostgreSQL tamb�m fornece uma interface
- para o INFORMATION SCHEMA SQLi na qual voc� pode consultar informa��es
- sobre o banco de dados.
-
- 4.4) Como eu removo uma coluna de uma tabela ou mudo o seu tipo de dados?
-
- A funcionalidade DROP COLUMN foi adicionada a vers�o 7.3 com comando
- ALTER TABLE DROP COLUMN. Em vers�es anteriores, voc� pode fazer isto:
- BEGIN;
- LOCK TABLE old_table;
- SELECT ... -- selecione todas colunas mas n�o aquela que voc� quer remover
- INTO TABLE new_table
- FROM old_table;
- DROP TABLE old_table;
- ALTER TABLE new_table RENAME TO old_table;
- COMMIT;
-
- Para alterar o tipo de dados de uma coluna, fa�a isto:
+ pgsql/src/bin/psql/describe.c, ele cont�m os comandos SQL que geram a
+ sa�da para os comandos de contrabarra do psql. Voc� tamb�m pode
+ iniciar o psql com a op��o -E para que as consultas utilizadas para
+ executar os comandos que voc� informou seja exibida. O PostgreSQL
+ tamb�m fornece uma inteface compat�vel com SQL do INFORMATION SCHEMA
+ que voc� pode consultar para obter informa��o sobre o banco de dados.
+
+ H� tamb�m tabelas do sistema que come�am com pg_ que os descrevem
+ tamb�m.
+
+ Utilizando o psql -l listar� todos os bancos de dados.
+
+ Veja tamb�m o arquivo pgsql/src/tutorial/syscat.source. Ele ilustra
+ muitos dos comandos SELECTs necess�rios para obter informa��o das
+ tabelas de sistema do banco de dados.
+
+ 4.3) Como voc� muda o tipo de dado de uma coluna?
+
+ Mudar o tipo de dado de uma coluna pode ser feito facilmente na vers�o
+ 8.0 ou superior com ALTER TABLE ALTER COLUMN TYPE.
+
+ Em vers�es anteriores, fa�a isso:
BEGIN;
- ALTER TABLE tab ADD COLUMN new_col new_data_type;
- UPDATE tab SET new_col = CAST(old_col AS new_data_type);
- ALTER TABLE tab DROP COLUMN old_col;
+ 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� pode querer executar o comando VACUUM FULL tab para recuperar o
+ Voc� pode ent�o querer fazer um VACUUM FULL tab para recuperar o
espa�o em disco utilizado pelos registros expirados.
- 4.5) Qual � o tamanho m�ximo de um registro, uma tabela e um banco de
- dados?
-
+ 4.4) Qual � o tamanho m�ximo de um registro, uma tabela e um banco de dados?
+
Estes s�o os limites:
-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? 1.6TB
-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 �ndices em uma tabela? ilimitado
-
+
+ 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 �ndices em uma tabela? ilimitado
+
� claro, que eles n�o s�o ilimitados, mas limitados ao espa�o em disco
dispon�vel e espa�o em mem�ria/swap. A Performance ser� penalizada
quando estes valores se tornarem grandes.
@@ -765,37 +564,45 @@ N�mero m�ximo de �ndices em uma tabela? ilimitado
m�ltiplos arquivos de 1 GB ent�o o limite do sistema de arquivos n�o �
importante.
- O tamanho m�ximo de uma tabela e o n�mero m�ximo de colunas pode ser
- quadruplicadas aumentando-se o tamanho dos blocos para 32k.
+ O tamanho m�ximo de uma tabela, o tamanho de um registro e o n�mero
+ m�ximo de colunas podem ser quadruplicados aumentando-se o tamanho
+ padr�o do bloco para 32k. O tamanho m�ximo de uma tabela pode tamb�m
+ ser aumentado utilizando particionamento de tabela.
+
+ Uma limita��o � que �ndices n�o podem ser criados em colunas maiores
+ do que 2.000 caracteres. Felizmente, tais �ndices s�o raramente
+ necess�rios. Unicidade � melhor garantida por um �ndice de uma fun��o
+ de um hash MD5 de uma coluna longa, e indexa��o de texto longo permite
+ a busca de palavras dentro da coluna.
- 4.6) Quanto espa�o em disco � necess�rio para armazenar dados de um arquivo
- texto?
-
+ 4.5) Quanto espa�o em disco � necess�rio para armazenar dados de um arquivo
+ texto?
+
Um banco de dados PostgreSQL ir� requerer at� cinco vezes a quantidade
de espa�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��o em cada linha. Suponha que o tamanho m�dio da
- descri��o � de vinte bytes. O arquivo ter� 2.8 MB. O tamanho do
+ descri��o � de vinte bytes. O arquivo ter� 2,8 MB. O tamanho do
arquivo do banco de dados PostgreSQL que cont�m esses dados pode ser
- estimado em 6.4 MB:
- 32 bytes: cada cabe�alho de registro (aproximadamente)
+ estimado em 5,6 MB:
+ 28 bytes: cada cabe�alho de registro (aproximadamente)
24 bytes: um campo int e um campo texto
+ 4 bytes: ponteiro na p�gina para a tupla
-------------------------------------------
- 60 bytes por registro
+ 56 bytes por registro
O tamanho de uma p�gina de dados no PostgreSQL � 8192 bytes (8 KB), ent�o:
8192 bytes por p�gina
- ------------------------ = 136 registros por p�gina do banco de dados (arredondado para baixo)
- 60 bytes por registro
+ ------------------------ = 146 registros por p�gina do banco de dados (arredondado para baixo)
+ 56 bytes por registro
100000 registros de dados
- ---------------------------- = 735 p�ginas do banco de dados (arredondadopara cima)
- 128 registros por p�gina
+ ---------------------------- = 685 p�ginas do banco de dados (arredondadopara cima)
+ 146 registros por p�gina
-735 p�ginas do banco de dados * 8192 bytes por p�gina = 6,021,120 bytes (6 MB)
+685 p�ginas do banco de dados * 8192 bytes por p�gina = 5.611.520 bytes (5,6MB)
�ndices n�o requerem muito espa�o, mas cont�m dados que foram
indexados, ent�o eles podem ocupar algum espa�o.
@@ -803,117 +610,65 @@ N�mero m�ximo de �ndices em uma tabela? ilimitado
NULLs s�o armazenados como bitmaps, ent�o eles utilizam muito pouco
espa�o.
- 4.7) Como eu descrubo quais tabelas, �ndices, bancos de dados e usu�rios
- est�o definidos?
-
- psql tem uma variadade de comandos com barra invertida que mostram
- tais informa��es. Utilize \? para v�-los. H� tamb�m tabelas do sistema
- que come�am com pg_ e que os descrevem tamb�m. Tamb�m, psql -l listar�
- todos os bancos de dados.
-
- Veja tamb�m o arquivo pgsql/src/tutorial/syscat.source. Ele ilustra
- muitos SELECTs necess�rios para obter informa��o das tabelas do
- sistema de banco de dados.
-
- 4.8) Minhas consultas est�o lentas ou n�o est�o utilizando �ndices. Por
- que?
-
- �ndices n�o s�o automaticamente utilizados por toda consulta. �ndices
- s� s�o utilizados se uma tabela � maior do que o tamanho m�nimo e uma
- consulta seleciona somente uma porcentagem pequena de registros de uma
- tabela. Isto porque o acesso rand�mico ao disco causado por uma busca
- por �ndice pode ser mais lento do que uma leitura ao longo da tabela
- ou uma busca sequencial.
-
- Para determinar se um �ndice pode ser utilizado, o PostgreSQL deve ter
- estat�sticas sobre a tabela. Estas estat�sticas s�o coletadas
- utilizando VACUUM ANALYZE ou simplesmente ANALYZE. Utilizando
- estat�sticas, o otimizador saber quantos registros h� na tabela e pode
- determinar melhor se um �ndice deve ser utilizado. Estat�sticas tamb�m
- s�o �teis para determinar a ordem de jun��o �tima e m�todos de jun��o.
- Cole��o de estat�sticas deve ser feita periodicamente a medida que o
- conte�do da tabela muda.
+ 4.6) Por que minhas consultas est�o lentas? Por que elas n�o est�o utilizando
+ meus �ndices?
+
+ �ndices n�o s�o utilizados por toda consulta. �ndices s�o utilizados
+ somente se a tabela � maior do que um tamanho m�nimo, e a consulta
+ seleciona somente uma pequena porcentagem dos registros da tabela.
+ Isto porque o acesso rand�mico ao disco causado pela busca indexada
+ pode ser mais lento do que uma leitura ao longo da tabela ou busca
+ sequencial.
+
+ Para determinar se um �ndice deveria ser utilizado, o PostgreSQL deve
+ ter estat�sticas sobre a tabela. Estas estat�sticas s�o coletadas
+ utilizando o VACUUM ANALYZE ou simplesmente o ANALYZE. Utilizando
+ estat�sticas, o otimizador sbae quantos registros est�o na tabela, e
+ pode melhor determinar se �ndices deveriam ser utilizados.
+ Estat�sticas tamb�m s�o �teis para determinar a ordem de jun��o �tima
+ e m�todos de jun��o. Cole��o de estat�sticas deveriam ser feitas
+ periodicamente a medida que o conte�do da tabela muda.
�ndices n�o s�o normalmente utilizados para ORDER BY ou para fazer
- jun��es. Uma busca sequencial seguida por uma ordena��o expl�cita �
- usualmente mais r�pida do que uma busca por �ndice em uma tabela
- grande.
- Contudo, LIMIT combinado com ORDER BY frequentemente utilizar� um
- �ndice porque somente uma pequena por��o da tabela � retornada. De
- fato, embora MAX() e MIN() n�o utilizem �ndices, � poss�vel obter tais
- valores utilizando um �ndice com ORDER BY e LIMIT:
- SELECT col
- FROM tab
- ORDER BY col [ DESC ]
- LIMIT 1;
-
+ jun��es. Uma busca sequencial seguido por uma ordena��o expl�cita �
+ geralmente mais r�pida do que uma busca indexada em uma tabela grande.
+ Contudo, LIMIT combinado com ORDER BY frequentemente utilizar� �ndice
+ porque somente uma pequena por��o da tabela ser� retornada.
+
Se voc� acredita que o otimizador est� incorreto ao escolher uma busca
- sequencial, utilize SET enable_seqscan TO 'off' e execute testes para
- ver se uma busca por �ndice � de fato � mais r�pida.
-
- Quando � utilizado operadores com curingas tais como LIKE ou ~,
- �ndices s� podem ser utilizados em certas circunst�ncias:
- * O �n�cio de uma string de busca deve ser o in�cio da string, i.e.
- + modelos no LIKE n�o devem come�ar com %.
- + modelos no ~ (express�o regular) n�o devem come�ar com ^.
- * A string de busca n�o pode iniciar com uma classe de caracteres,
- i.e. [a-e].
- * Buscas que n�o diferenciam mai�sculas de min�sculas tais como
- ILIKE e ~* n�o utilizam �ndices. Ao inv�s, utilize �ndices
- funcionais, que s�o descritos na se��o 4.12.
- * A localidade padr�o C deve ser utilizada durante o initdb porque
- n�o � poss�vel saber o pr�ximo/maior caracter em uma localidade
- que n�o seja a C. Voc� pode criar um �ndice especial
- text_pattern_ops para tais casos que funcionam somente para
- indexa��o utilizando LIKE.
+ sequencial, utilize SET enable_seqscan TO 'off' e execute a consulta
+ novamente para ver se uma busca indexada � realmente mais r�pida.
+
+ Ao utilizar operadores curinga tais como LIKE ou ~, �ndices podem ser
+ utilizados somente em algumas condi��es:
+ * O in�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�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�sculas de min�sculas tais como ILIKE
+ e ~* n�o utilizam �ndices. Em vez disso, utilize �ndice de
+ express�o, que � descrito na se��o 4.8.
+ * O idioma padr��o C deve ser usando durante o initdb porque n�o �
+ poss�vel saber o pr�ximo caracter em idiomas que n�o sejam o C.
+ Voc� pode criar um �ndice especial text_pattern_ops para tais
+ casos que funcionam somente para indexa��o com LIKE.
- Em vers�es anteriores a 8.0, �ndices frequentemente n�o podiam ser
- usados a menos que os tipos de dados correspodessem aos tipos da
- coluna do �ndice. Isto � particularmente verdadeiro para �ndices de
+ Em vers�es anteriores a 8.0, �ndices frequentemente n�o podem ser
+ utilizados a menos que os tipos de dados correspondam aos tipos de
+ coluna do �ndice. Isto era particularmente verdadeiro para �ndices de
coluna int2, int8 e numeric.
- 4.9) Como eu vejo como o otimizador de consulta est� avaliando a minha
- consulta?
-
+ 4.7) Como eu vejo como o otimizador de consulta est� avaliando a minha
+ consulta?
+
Veja o comando EXPLAIN no manual.
- 4.10) O que � um �ndice de �rvore R?
-
- Um �ndice de �rvore B � utilizado para indexa��o de dados espaciais.
- Um �ndice do tipo hash n�o pode manipular buscas em intervalos. Um
- �ndice de �rvore B manipula somente buscas em intervalos em uma
- dimens�o. Um �ndice de �rvore R pode manipular dados
- multidimensionais. Por exemplo, se um �ndice de �rvore R pode ser
- contruido em um atributo do tipo point, o sistema pode responder mais
- eficientemente consultas tais como "busque todos os pontos dentro dos
- limites do ret�ngulo."
-
- A pesquisa can�nica que descreve o modelo original da �rvore R est�
- em:
-
- Guttman, A. "R-trees: A Dynamic Index Structure for Spatial
- Searching." Proceedings of the 1984 ACM SIGMOD Int'l Conf on Mgmt of
- Data, 45-57.
-
- Voc� tamb�m pode encontrar esse documento em "Readings in Database
- Systems" do Stonebraker
-
- �rvores R podem manipular pol�gonos e caixas. Na teoria, �rvores R
- podem ser extendidos para manipular um grande n�mero de dimens�es. Na
- pr�tica, extendendo �rvores R requer um pouco de trabalho e n�s n�o
- temos atualmente nenhuma documenta��o de como faz�-lo.
-
- 4.11) O que � um Otimizador Gen�tico de Consultas?
-
- O m�dulo GEQO acelera a otimiza��o de consultas quando se faz uma
- jun��o de v�rias tabelas utilizando o conceito de Algoritmo Gen�tico
- (AG). Isso permite a manipula��o de consultas com muitas jun��es
- utilizando buscas n�o exaustivas.
-
- 4.12) Como eu fa�o buscas com express�es regulares e buscas com express�es
- regulares sem diferenciar mai�sculas de min�sculas? Como eu utilizo um
- �ndice para buscas que n�o diferenciam mai�sculas de min�sculas?
-
+ 4.8) Como eu fa�o buscas com express�es regulares e buscas com express�es
+ regulares sem diferenciar mai�sculas de min�sculas? Como eu utilizo um �ndice
+ para buscas que n�o diferenciam mai�sculas de min�sculas?
+
O operador ~ faz avalia��o de express�es regulares, e ~* faz avalia��o
n�o sens�vel a mai�sculas de express�es regulares. A variante n�o
sens�vel a mai�sculas do LIKE � chamada de ILIKE.
@@ -925,46 +680,66 @@ N�mero m�ximo de �ndices em uma tabela? ilimitado
WHERE lower(col) = 'abc';
Isso n�o ir� utilizar o �ndice padr�o. Contudo, se voc� criar um
- �ndice funcional, ele ser� utilizado:
+ �ndice de express�o, ele ser� utilizado:
CREATE INDEX tabindex ON tab (lower(col));
- 4.13) Em uma consulta, como eu detecto se um campo � NULL?
-
- Voc� pode testar a coluna com IS NULL e IS NOT NULL.
-
- 4.14) Qual � a difenren�a entre os v�rios tipos de dados de caracteres?
-
-Tipo Nome Interno Notas
---------------------------------------------------
-VARCHAR(n) varchar tamanho especifica o comprimento m�ximo, sem preenchimento
-CHAR(n) bpchar preenchimento em branco para comprimento fixo espec�fico
-TEXT text nenhum limite superior espec�fico no comprimento
-BYTEA bytea vetor de bytes de comprimento vari�vel (null-byte safe)
-"char" char um caracter
-
+ Se o �ndice acima � criado como UNIQUE, embora a coluna possa
+ armazenar caracteres mai�sculos e min�sculos, ele n�o pode ter valores
+ id�nticos que diferem apenas em letras mai�sculas e min�sculas. Para
+ for�ar uma letra mai�scula ou min�scula a ser armazenada na coluna,
+ utilize uma restri��o CHECK ou um gatilho.
+
+ 4.9) Em uma consulta, como eu detecto se um campo � NULL? Como eu posso
+ ordenar por um campo que � NULL ou n�o?
+
+ Voc� 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�usula ORDER BY. Coisas que s�o verdadeiro ser�o
+ ordenadas acima das coisas que s�o falso, ent�o a consulta a seguir
+ ir� colocar entradas NULL no in�cio da lista de resultados:
+ SELECT *
+ FROM tab
+ ORDER BY (col IS NOT NULL)
+
+ 4.10) Qual � a diferen�a entre os v�rios tipos de dado de caracteres?
+
+ Tipo Nome Interno Observa��o
+ VARCHAR(n) varchar tamanho especifica o tamanho m�ximo, sem
+ preenchimento
+ CHAR(n) bpchar preenchimento em branco para comprimento fixo
+ espec�fico
+ TEXT text nenhum limite superior espec�fico no comprimento
+ BYTEA bytea vetor de bytes de comprimento vari�vel (seguro a byte
+ nulo)
+ "char" char um caracter
+
Voc� ver� o nome interno quando examinar o cat�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�o atual utilizado � ligeiramente maior
- do que o tamanho declarado. Contudo, esses tipos de dados tamb�m s�o
- sujeitos a compress�o ou a serem armazenados fora do padr�o utilizando
- o TOAST, ent�o o espa�o em disco pode tamb�m ser bem menor do que o
- esperado.
+ do que o tamanho declarado. Contudo, valores longos s�o tamb�m
+ sujeitos a compress�o, ent�o o espa�o em disco pode tamb�m ser bem
+ menor do que o esperado.
VARCHAR(n) � melhor quando est� armazenando cadeias de caracteres de
comprimento vari�vel e h� um limite de tamanho desta cadeia. TEXT �
para cadeias de caracteres de comprimento ilimitado, com o m�ximo de
um gigabyte.
- CHAR(n) preenche com espa�os em branco at� o tamanho especificado,
- enquanto o VARCHAR(n) armazena somente os caracteres fornecidos. BYTEA
- � para armazenar dados bin�rios, particularmente valores que incluem
- bytes NULL. Todos os tipos descritos aqui tem caracter�sticas de
- performance similares.
+ CHAR(n) � para armazenar cadeias de caracteres que s�o todas do mesmo
+ tamanho. CHAR(n) preenche com espa�os em branco at� o tamanho
+ especificado, enquanto o VARCHAR(n) armazena somente os caracteres
+ fornecidos. BYTEA � para armazenar dados bin�rios, particularmente
+ valores que incluem bytes NULL. Todos os tipos descritos aqui tem
+ caracter�sticas de performance similares.
- 4.15.1) Como eu crio um campo serial/auto incremento?
-
+ 4.11.1) Como eu crio um campo serial/auto incremento?
+
PostgreSQL suporta o tipo de dados SERIAL. Ele cria automaticamente
uma sequ�ncia. Por exemplo:
CREATE TABLE pessoa (
@@ -979,17 +754,14 @@ BYTEA bytea vetor de bytes de comprimento vari�vel (null-byt
nome TEXT
);
- Veja a p�gina sobre create_sequence no manual para mais informa��o
- sobre sequ�ncias. Voc� tamb�m pode utilizar o campo OID para cada
- registro como um valor �nico. Contudo, se voc� precisar exportar e
- importar o banco de dados, voc� precisa utilizar a op��o -o do pg_dump
- ou a op��o COPY WITH OIDS para preservar os OIDs.
-
- 4.15.2) Como eu consigo o valor de um campo SERIAL?
-
+ Veja a p�gina sobre create_sequence no manual para obter informa��es
+ adicionais sobre sequ�ncias.
+
+ 4.11.2) Como eu consigo o valor de um campo SERIAL?
+
Uma abordagem � obter o pr�ximo valor SERIAL de uma sequ�ncia com a
fun��o nextval() antes de inserir e ent�o inserir com o valor
- explicitamente. Utilizando o exemplo da tabela em 4.15.1, um exemplo
+ 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')");
@@ -1005,144 +777,65 @@ BYTEA bytea vetor de bytes de comprimento vari�vel (null-byt
execute("INSERT INTO pessoa (nome) VALUES ('Blaise Pascal')");
novo_id = execute("SELECT currval('pessoa_id_seq')");
- Finalmente, voc� poderia utilizar o OID retornado da senten�a INSERT
- para obter o valor padr�o, embora este seja a abordagem menos
- port�vel, pois o valor do oid n�o ultrapassa 4 bilh�es. Em Perl,
- utilizando DBI com o m�dulo DBD::Pg, o valor do oid est� dispon�vel
- via $sth->{pg_oid_status} depois de $sth->execute().
-
- 4.15.3) currval() n�o lida com condi��o de corrida com outros usu�rios?
-
- N�o. currval() retorna o valor atual atribuido pelo seu n�cleo
- (backend), e n�o por todos os usu�rios.
-
- 4.15.4) Por que os n�meros da minha sequ�ncia n�o s�o reutilizados quando
- uma transa��o � abortada? Por que h� intervalos nos n�meros da minha
- sequ�ncia/coluna SERIAL?
-
+ 4.11.3) currval() n�o lida com condi��o de corrida com outros usu�rios?
+
+ N�o. currval() retorna o valor atual atribuido pela sua sess�o, e n�o
+ por todas as sess�es.
+
+ 4.11.4) Por que os n�meros da minha sequ�ncia n�o s�o reutilizados quando uma
+ transa��o � abortada? Por que h� intervalos nos n�meros da minha
+ sequ�ncia/coluna SERIAL?
+
Para melhorar a concorr�ncia, valores da sequ�ncia s�o atribu�dos a
transa��es correntes e n�o s�o travados at� que a transa��o seja
finalizada. Isso causa intervalos na numera��o por causa de transa��es
abortadas.
- 4.16) O que � um OID? O que � um TID?
-
- OIDs s�o a resposta do PostgreSQL a ids �nicos de registros. Cada
- registro que � criado no PostgreSQL recebe um OID �nico. Todos OIDs
- produzidos durante o initdb s�o menores do que 16384 (de
- include/access/transam.h). Todos os OIDs criados pelo usu�rio s�o
- iguais ou maiores do que este valor. Por padr�o, todos estes OIDs s�o
- �nicos n�o somente na tabela ou no banco de dados, mas na instala��o
- do PostgreSQL.
-
- PostgreSQL utiliza OIDs nas tabelas internas do sistema para ligar
- registros entre tabelas. Estes OIDs podem ser utilizados para
- identificar registros de usu�rios espec�ficos e podem ser utilizados
- em jun��es. � recomendado que voc� utilize o tipo de coluna OID para
- armazenar valores OID. Voc� pode criar um �ndice no campo OID para
- acesso r�pido.
-
- OIDs s�o atribu�dos para todas os registros novos de uma �rea central
- que � utilizada por todos os bancos de dados. Se voc� quer mudar o OID
- de alguma coisa, ou se voc� quer fazer uma c�pia da tabela, com os
- OIDs, n�o h� raz�o para que voc� n�o possa faz�-la:
- CREATE TABLE nova_tabela(minha_coluna int);
- SELECT oid as oid_antigo, minha_coluna INTO tabela_tmp FROM tabela_antiga;
- COPY tabela_tmp TO '/tmp/pgtable';
- DROP TABLE tabela_tmp;
- COPY nova_tabela WITH OIDS FROM '/tmp/pgtable';
-
- OIDs s�o armazenados como inteiros de 4 bytes, e n�o ultrapassam 4
- bilh�es. Ningu�m nunca reportou que isso tenha ocorrido, e n�s
- planejamos remover o limite antes que alg�em o alcan�e.
-
- TIDs s�o utilizados para identificar registros f�sicos espec�ficos com
- valores de bloco e deslocamento. TIDs mudam ap�s registros serem
+ 4.16) O que � um OID? O que � um CTID?
+
+ Cada registro que � criado no PostgreSQL recebe um OID �nico a menos
+ que seja criado com WITHOUT OIDS. OIDs s�o automaticamente atribu�dos
+ como inteiros de 4 bytes que s�o �nicos ao longo de toda instala��o.
+ Contudo, eles s�o limitados em 4 bilh�es, e ent�o os OIDs come�am a
+ ser duplicados. O PostgreSQL utiliza OIDs para ligar as tabelas do
+ sistema.
+
+ Para numerar registros nas tabelas do usu�rios, � melhor utilizar
+ SERIAL ao inv�s de OIDs porque sequ�ncias SERIAL s�o �nicas somente em
+ uma tabela; e s�o menos prop�cias a atingir o limite. SERIAL8 est�
+ dispon�vel para armazenar valores de sequ�ncias com oito bytes.
+
+ CTIDs s�o utilizados para identificar registros f�sicos espec�ficos
+ com valores de block e deslocamento. CTIDs mudam ap�s registros serem
modificados ou recarregados. Eles s�o utilizados por �ndices para
- apontar para registros f�sicos.
-
- 4.17) Qual � o significado de alguns termos utilizados no PostgreSQL?
-
- O c�digo-fonte e documenta��o antiga utiliza termos de uso comum. Aqui
- est�o alguns deles:
- * tabela, rela��o, classe
- * linha, registro, tupla
- * coluna, campo, atributo
- * recupera, seleciona
- * altera, atualiza
- * incrementa, insere
- * OID, valor serial
- * portal, cursor
- * intervalo vari�vel, nome da tabela, alias de tabela
-
- Uma lista de termos gerais de bancos de dados pode ser encontrada em:
- http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary
- /glossary.html
-
- 4.18) Por que eu recebo o erro "ERROR: Memory exhausted in
- AllocSetAlloc()"?
-
- Voc� provavelmente est� sem mem�ria virtual no sistema, ou o seu
+ apontar registros f�sicos.
+
+ 4.13) Por que eu recebo o erro "ERROR: Memory exhausted in AllocSetAlloc()"?
+
+ Voc� provavelmente est� sem mem�ria virtual no seu sistema, ou o seu
n�cleo (kernel) tem um limite baixo para certos recursos. Tente isto
antes de iniciar o postmaster:
- ulimit -d 262144
- limit datasize 256m
-
+ ulimit -d 262144
+ limit datasize 256m
Dependendo da sua shell, somente um desses comando ter� sucesso, mas
ele definir� o segmento de dados do seu processo com um limite maior e
talvez permita que a consulta seja feita. Este comando � aplicado ao
processo atual e todos os subprocessos criados depois do comando ser
- executado. Se voc� tiver problemas com o cliente SQL porque o n�cleo
- (backend) retornou muitos dados, tente-o antes de iniciar o cliente.
+ executado. Se voc� tiver problemas com o cliente SQL porque o processo
+ servidor retornou muitos dados, tente-o antes de iniciar o cliente.
- 4.19) Como eu informo qual vers�o do PostgreSQL eu estou utilizando?
-
+ 4.14) Como eu informo qual vers�o do PostgreSQL eu estou utilizando?
+
No psql, digite SELECT version();
- 4.20) Por que minhas opera��es com objetos grandes retorna "invalid large
- obj descriptor"?
-
- Voc� precisa colocar BEGIN WORK e COMMIT ao redor de qualquer uso de
- opera��es com objetos grandes, isto �, ao redor de lo_open ...
- lo_close.
-
- Atualmente PostgreSQL obriga o fechamento de manipula��o de um objeto
- grande quando uma transa��o � submetida (commit). Ent�o a primeira
- tentativa de fazer qualquer coisa com o manipulador ir� retornar
- invalid large obj descriptor. Ent�o o c�digo que funcionava (ao menos
- a algum tempo atr�s) agora ir� retornar uma mensagem de erro se voc�
- n�o utilizar uma transa��o.
-
- 4.21) Como eu crio uma coluna que conter� por padr�o a hora atual?
-
+ 4.15) Como eu crio uma coluna que conter� por padr�o a hora atual?
+
Utilize CURRENT_TIMESTAMP:
-CREATE TABLE teste (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
-
- 4.22) Por que as minhas subconsultas que utilizam IN est�o t�o lentas?
-
- Em vers�es anteriores a 7.4, subconsultas eram agrupadas em consultas
- externas utilizando uma busca sequencial no resultado da subconsulta
- de cada registro da consulta externa. Se uma subconsulta retorna
- somente alguns registros e a consulta externa retorna muitos
- registros, IN � mais r�pido. Para acelerar consultas externas,
- substitua IN por EXISTS:
- SELECT *
- FROM tab
- WHERE col IN (SELECT subcol FROM subtab);
+ CREATE TABLE teste (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP);
- por:
- SELECT *
- FROM tab
- WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col);
-
- Para isto ser r�pido, subcol deve ser uma coluna indexada.
-
- A partir da vers�o 7.4, IN utiliza a mesma t�cnica de agrupamento do
- que consultas normais, e � recomendado utilizar EXISTS.
-
- 4.23) Como eu fa�o uma jun��o externa (outer join)?
-
+ 4.23) Como eu fa�o uma jun��o externa (outer join)?
+
PostgreSQL suporta jun��es externas utilizando a sintaxe padr�o do
SQL. Aqui temos dois exemplos:
SELECT *
@@ -1161,20 +854,8 @@ CREATE TABLE teste (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
jun��es LEFT, RIGHT e FULL. Jun��es ordin�rias s�o chamadas jun��es
naturais (INNER).
- Em vers�es anteriores, jun��es externas podiam ser simuladas
- utilizando UNION e NOT IN. Por exemplo, quando juntar tab1 e tab2, a
- consulta a seguir faz uma jun��o externa de duas tabelas:
- SELECT tab1.col1, tab2.col2
- FROM tab1, tab2
- WHERE tab1.col1 = tab2.col1
- UNION ALL
- SELECT tab1.col1, NULL
- FROM tab1
- WHERE tab1.col1 NOT IN (SELECT tab2.col1 FROM tab2)
- ORDER BY col1
-
- 4.24) Como eu fa�o consultas utilizando m�ltiplos bancos de dados?
-
+ 4.17) Como eu fa�o consultas utilizando m�ltiplos bancos de dados?
+
N�o h� outra maneira de consultar um banco de dados caso ele n�o seja
o atual. Porque o PostgreSQL carrega cat�logos do sistema espec�ficos
do banco de dados, � incerto como uma consulta em banco de dados
@@ -1185,15 +866,14 @@ CREATE TABLE teste (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
conex�es simult�neas em bancos de dados diferentes e juntar os
resultados no cliente.
- 4.25) Como eu retorno m�ltiplos registros ou colunas de uma fun��o?
-
- No 7.3, voc� pode facilmente retornar m�ltiplos registros ou colunas
- de uma fun��o,
+ 4.18) Como eu retorno m�ltiplos registros ou colunas de uma fun��o?
+
+ � f�cil utilizando fun��es que retornam conjunto,
http://techdocs.postgresql.org/guides/SetReturningFunctions.
- 4.26) Por que eu n�o posso confiar na cria��o/remo��o de tabelas
- tempor�rias em fun��es PL/PgSQL?
-
+ 4.19) Por que eu obtenho erros "relation with OID ###### does not exist" ao
+ acessar tabelas tempor�rias em fun��es PL/PgSQL?
+
PL/PgSQL armazena o conte�do da fun��o, e o efeito indesejado � que se
uma fun��o PL/PgSQL acessa uma tabela tempor�ria, e aquela tabela �
removida e criada novamente, e a fun��o � chamada novamente, a fun��o
@@ -1202,49 +882,35 @@ CREATE TABLE teste (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
a tabelas tempor�rias no PL/PgSQL. Isto ir� fazer com que a consulta
seja avaliada toda vez.
- 4.27) Que op��es para encripta��o est�o dispon�veis?
-
- * No contrib/pgcrypto cont�m muitas fun��es de encripta��o para
- serem utilizados em consultas SQL.
- * Para encriptar a transmiss�o do cliente ao servidor, o servidor
- deve ter a op��o ssl definida como true no postgresql.conf, e um
- registro host ou hostssl deve existir no pg_hba.conf, e o sslmode
- no cliente n�o deve estar disable. (Note que tamb�m � poss�vel
- utilizar outros esquemas de transporte encriptado, tais como
- stunnel ou ssh, ao inv�s da conex�o SSL nativa do PostgreSQL.)
- * Senhas dos usu�rios do banco de dados s�o automaticamente
- encriptadas quando armazenadas na vers�o 7.3. Em vers�es
- anteriores, voc� deve habilitar a op��o PASSWORD_ENCRYPTION no
- postgresql.conf.
- * O servidor pode executar utilizando um sistema de arquivos
- encriptado.
- _________________________________________________________________
-
- Extendendo o PostgreSQL
-
- 5.1) Eu escrevi uma fun��o. Quando eu executo-a no psql, por que ela
- finaliza o programa com descarga de mem�ria (core dump)?
-
- O problema pode ser v�rias coisas. Tente testar sua fun��o em um
- programa independente.
-
- 5.2) Como eu posso contribuir com alguns tipos e fun��es novas para o
- PostgreSQL?
-
- Envie as suas extens�es para a lista de discuss�o pgsql-hackers, e
- elas eventualmente ser�o colocadas no subdiret�rio contrib/.
-
- 5.3) Como eu escrevo uma fun��o em C que retorna uma tupla?
-
- Em vers�es do PostgreSQL a partir da 7.3, fun��es que retornam tuplas
- s�o suportadas em C, PL/PgSQL e SQL. Veja o Guia do Programador para
- mais informa��o. Um exemplo de uma fun��o escrita em C e que retorna
- tuplas pode ser encontrada em contrib/tablefunc.
-
- 5.4) Eu alterei um arquivo do c�digo-fonte. Por que a recompila��o n�o
- surtiu efeito?
-
- Os arquivos Makefiles n�o tem as depend�ncias corretas para incluir
- arquivos. Voc� deve executar um make clean e ent�o o make. Se voc�
- est� utilizando o GCC voc� pode utilizar a op��o --enable-depend do
- configure para o compilador computar as depend�ncias automaticamente.
+ 4.20) Quais solu��es de replica��o est�o dispon�veis?
+
+ Embora "replica��o" seja um termo simples, h� v�rias tecnologias para
+ fazer replica��o, com vantagens e desvantagens para cada um.
+
+ Replica��o mestre/escravo permite que um mestre receba consultas de
+ leitura e escrita, enquanto os escravos s� podem aceitar
+ leitura/consultas SELECT. A solu��o mais popular de replica��o
+ mestre-escravo para PostgreSQL dispon�vel livremente � Slony-I.
+
+ Replica��o com m�ltiplos mestres permite que consultas leitura/escrita
+ sejam enviadas para m�ltiplos computadores replicadores. Esta
+ capacidade tamb�m tem um s�rio impacto na performance por causa da
+ necessidade de sincronizar as mudan�as entre os servidores. Pgcluster
+ � a solu��o mais popular dispon�vel livremente para PostgreSQL.
+
+ H� tamb�m solu��es de replica��o comerciais e baseadas em hardware
+ dispon�veis que suportam uma variedade de modelos de replica��o.
+
+ 4.21) Por que os nomes de minhas tabelas e colunas n�o s�o reconhecidos em
+ minha consulta?
+
+ O caso mais comum � o uso de aspas ao redor dos nomes da tabela ou
+ coluna durante a cria��o da tabela. Ao utilizar aspas, nomes de tabela
+ e coluna (chamados de identificadores) s�o armazenados como
+ especificado, significando que voc� deve utilizar aspas quando se
+ referir aos nomes na consulta. Algumas interfaces, como pgAdmin,
+ automaticamente coloca aspas nos identificadores durante a cria��o da
+ tabela. Ent�o, para identificadores serem reconhecidos, voc� deve:
+ * Evitar colocar aspas no identificador ao criar tabelas
+ * Utilizar somente caracteres min�sculos em identificadores
+ * Colocar aspas em identificadores ao referenci�-los nas consultas
diff --git a/doc/src/FAQ/FAQ_brazilian.html b/doc/src/FAQ/FAQ_brazilian.html
index 214eec34078..8f5094b8eed 100644
--- a/doc/src/FAQ/FAQ_brazilian.html
+++ b/doc/src/FAQ/FAQ_brazilian.html
@@ -2,7 +2,7 @@
<HTML>
<HEAD>
<META name="generator" content="HTML Tidy, see www.w3.org">
- <META http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+ <META http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<TITLE>FAQ do PostgreSQL</TITLE>
</HEAD>
@@ -10,14 +10,14 @@
alink="#0000ff">
<H1>Perguntas Frequentes (FAQ) sobre PostgreSQL</H1>
- <P>&Uacute;ltima atualiza&ccedil;&atilde;o: Dom Jan 9 14:44:04 EDT 2005</P>
+ <P>&Uacute;ltima atualiza&ccedil;&atilde;o: S&aacute;b Out 14 19:08:19 EDT 2006</P>
<P>Mantenedor atual: Bruce Momjian (<A href=
</P>
<P>Traduzido por: Euler Taveira de Oliveira (<A href=
<P>A vers&atilde;o mais recente desse documento pode ser vista em <A href=
"http://www.postgresql.org/files/documentation/faqs/FAQ.html">
@@ -30,324 +30,317 @@
<HR>
<H2 align="center">Perguntas Gerais</H2>
- <A href="#1.1">1.1</A>) O que &eacute; PostgreSQL? Como ele &eacute; pronunciado?<BR>
- <A href="#1.2">1.2</A>) Qual &eacute; a licen&ccedil;a do PostgreSQL?<BR>
- <A href="#1.3">1.3</A>) Quais plataformas Unix o PostgreSQL pode ser executado?<BR>
- <A href="#1.4">1.4</A>) Quais portabilidades n&atilde;o-Unix est&atilde;o dispon&iacute;veis?<BR>
- <A href="#1.5">1.5</A>) Onde eu posso conseguir o PostgreSQL?<BR>
- <A href="#1.6">1.6</A>) Onde eu posso conseguir suporte?<BR>
- <A href="#1.7">1.7</A>) Qual &eacute; a &uacute;ltima vers&atilde;o?<BR>
- <A href="#1.8">1.8</A>) Que documenta&ccedil;&atilde;o est&aacute; dispon&iacute;vel?<BR>
- <A href="#1.9">1.9</A>) Como eu posso saber quais s&atilde;o os bugs conhecidos ou caracter&iacute;sticas ausentes?<BR>
- <A href="#1.10">1.10</A>) Como eu posso aprender <SMALL>SQL</SMALL>?<BR>
- <A href="#1.11">1.11</A>) O PostgreSQL est&aacute; livre do Bug do Mil&ecirc;nio?<BR>
- <A href="#1.12">1.12</A>) Como posso me juntar a equipe de desenvolvimento?<BR>
- <A href="#1.13">1.13</A>) Como eu informo a exist&ecirc;ncia de um bug?<BR>
- <A href="#1.14">1.14</A>) Como &eacute; o PostgreSQL comparado a outros <SMALL>SGBD</SMALL>s?<BR>
- <A href="#1.15">1.15</A>) Como eu posso ajudar financeiramente o projeto PostgreSQL?<BR>
+ <A href="#item1.1">1.1</A>) O que &eacute; PostgreSQL? Como ele &eacute; pronunciado?<BR>
+ <A href="#item1.2">1.2</A>) Quem controla o PostgreSQL?<BR>
+ <A href="#item1.3">1.3</A>) Qual &eacute; a licen&ccedil;a do PostgreSQL?<BR>
+ <A href="#item1.4">1.4</A>) Quais plataformas o PostgreSQL pode ser executado?<BR>
+ <A href="#item1.5">1.5</A>) Onde eu posso conseguir o PostgreSQL?<BR>
+ <A href="#item1.6">1.6</A>) Qual &eacute; a &uacute;ltima vers&atilde;o?<BR>
+ <A href="#item1.7">1.7</A>) Onde eu posso conseguir suporte?<BR>
+ <A href="#item1.8">1.8</A>) Como eu posso submeter um relato de um bug?<BR>
+ <A href="#item1.9">1.9</A>) Como eu posso saber quais s&atilde;o os bugs conhecidos ou caracter&iacute;sticas ausentes?<BR>
+ <A href="#item1.10">1.10</A>) Que documenta&ccedil;&atilde;o est&aacute; dispon&iacute;vel?<BR>
+ <A href="#item1.11">1.11</A>) Como eu posso aprender <SMALL>SQL</SMALL>?<BR>
+ <A href="#item1.12">1.12</A>) Como posso submeter uma corre&ccedil;&atilde;o (patch) ou me juntar a equipe de desenvolvimento?<BR>
+ <A href="#item1.13">1.13</A>) Como &eacute; o PostgreSQL comparado a outros <SMALL>SGBD</SMALL>s?<BR>
<H2 align="center">Perguntas sobre Clientes</H2>
- <A href="#2.1">2.1</A>) H&aacute; drivers <SMALL>ODBC</SMALL> para PostgreSQL?<BR>
- <A href="#2.2">2.2</A>) Quais ferramentas est&atilde;o dispon&iacute;veis para utilizar o PostgreSQL com p&aacute;ginas Web?<BR>
- <A href="#2.3">2.3</A>) O PostgreSQL tem interfaces gr&aacute;ficas para interagir com usu&aacute;rio?<BR>
- <A href="#2.4">2.4</A>) Quais linguagens est&atilde;o dispon&iacute;veis para comunicar-se com o PostgreSQL?<BR>
+ <A href="#item2.1">2.1</A>) Quais interfaces est&atilde;o dispon&iacute;veis para PostgreSQL?<BR>
+ <A href="#item2.2">2.2</A>) Quais ferramentas est&atilde;o dispon&iacute;veis para utilizar o PostgreSQL com p&aacute;ginas Web?<BR>
+ <A href="#item2.3">2.3</A>) O PostgreSQL tem interfaces gr&aacute;ficas para interagir com usu&aacute;rio?<BR>
<H2 align="center">Perguntas Administrativas</H2>
- <A href="#3.1">3.1</A>) Como eu instalo o PostgreSQL em um local diferente de <I>/usr/local/pgsql</I>?<BR>
- <A href="#3.2">3.2</A>) Quando eu inicio o <I>postmaster</I>, eu recebo a mensagem
- <I>Bad System Call</I> ou uma descarga de mem&oacute;ria (core dump). Por que?<BR>
- <A href="#3.3">3.3</A>) Quando eu tento iniciar o <I>postmaster</I>, eu recebo erros <I>IpcMemoryCreate</I>. Por que?
- <A href="#3.4">3.4</A>) Quando eu tento iniciar o <I>postmaster</I>, eu recebo erros <I>IpcSemaphoreCreate</I>. Por que?
- <A href="#3.5">3.5</A>) Como eu controlo conex&otilde;es de outras m&aacute;quinas?<BR>
- <A href="#3.6">3.6</A>) Como eu ajusto o servidor de banco de dados para obter uma performance melhor?<BR>
- <A href="#3.7">3.7</A>) Quais caracter&iacute;sticas de depura&ccedil;&atilde;o est&atilde;o dispon&iacute;veis?<BR>
- <A href="#3.8">3.8</A>) Por que eu recebo <I>"Sorry, too many clients"</I> quando eu tento conectar?<BR>
- <A href="#3.9">3.9</A>) O que est&aacute; no diret&oacute;rio <I>pgsql_tmp</I>?<BR>
- <A href="#3.10">3.10</A>) O que eu preciso fazer para exportar e importar durante a atualiza&ccedil;&atilde;o de vers&otilde;es do PostgreSQL?<BR>
- <A href="#3.11">3.11</A>) Que tipo de hardware eu devo usar?<BR>
+ <A href="#item3.1">3.1</A>) Como eu instalo o PostgreSQL em um local diferente de <I>/usr/local/pgsql</I>?<BR>
+ <A href="#item3.2">3.2</A>) Como eu controlo conex&otilde;es de outras m&aacute;quinas?<BR>
+ <A href="#item3.3">3.3</A>) Como eu ajusto o servidor de banco de dados para obter uma performance melhor?<BR>
+ <A href="#item3.4">3.4</A>) Quais caracter&iacute;sticas de depura&ccedil;&atilde;o est&atilde;o dispon&iacute;veis?<BR>
+ <A href="#item3.5">3.5</A>) Por que eu recebo <I>"Sorry, too many clients"</I> quando eu tento conectar?<BR>
+ <A href="#item3.6">3.6</A>) Qual &eacute; o processo de atualiza&ccedil;&atilde;o do PostgreSQL?</H3>
+ <A href="#item3.7">3.7</A>) Que tipo de hardware eu devo usar?<BR>
<H2 align="center">Perguntas Operacionais</H2>
- <A href="#4.1">4.1</A>) Qual &eacute; a diferen&ccedil;a entre cursores bin&aacute;rios e normais?<BR>
- <A href="#4.2">4.2</A>) Como eu fa&ccedil;o um <SMALL>SELECT</SMALL> somente dos primeiros registros de uma consulta? Um registro rand&ocirc;mico?<BR>
- <A href="#4.3">4.3</A>) Como eu obtenho a lista de tabelas ou outras coisas que eu posso ver no <I>psql</I>?<BR>
- <A href="#4.4">4.4</A>) Como eu removo uma coluna de uma tabela ou mudo o seu tipo de dados?<BR>
- <A href="#4.5">4.5</A>) Qual &eacute; o tamanho m&aacute;ximo de um registro, uma tabela e um banco de dados?<BR>
- <A href="#4.6">4.6</A>) Quanto espa&ccedil;o em disco &eacute; necess&aacute;rio para armazenar dados de um arquivo texto?<BR>
- <A href="#4.7">4.7</A>) Como eu descubro quais tabelas, &iacute;ndices, bancos de dados e usu&aacute;rios est&atilde;o definidos?<BR>
- <A href="#4.8">4.8</A>) Minhas consultas est&atilde;o lentas ou n&atilde;o est&atilde;o utilizando &iacute;ndices. Por que?<BR>
- <A href="#4.9">4.9</A>) Como eu vejo como o otimizador de consultas est&aacute; avaliando minha consulta?<BR>
- <A href="#4.10">4.10</A>) O que &eacute; um &iacute;ndice de &aacute;rvore R (R-tree)?<BR>
- <A href="#4.11">4.11</A>) O que &eacute; um Otimizador Gen&eacute;tico de Consultas?<BR>
- <A href="#4.12">4.12</A>) Como eu fa&ccedil;o buscas com express&otilde;es regulares
- e buscas com express&otilde;es regulares sem diferenciar mai&uacute;sculas de min&uacute;sculas? Como eu utilizo um &iacute;ndice para
- buscas que n&atilde;o diferenciam mai&uacute;sculas de min&uacute;sculas?<BR>
- <A href="#4.13">4.13</A>) Em uma consulta, como eu detecto se um campo &eacute; <SMALL>NULL</SMALL>?<BR>
- <A href="#4.14">4.14</A>) Qual &eacute; a diferen&ccedil;a entre os v&aacute;rios tipos de dados de caracteres?<BR>
- <A href="#4.15.1">4.15.1</A>) Como eu crio um campo serial/auto incremento?<BR>
- <A href="#4.15.2">4.15.2</A>) Como eu consigo o valor de um campo
+ <A href="#item4.1">4.1</A>) Como eu fa&ccedil;o um <SMALL>SELECT</SMALL> somente dos primeiros registros de uma consulta? Um registro rand&ocirc;mico?<BR>
+ <A href="#item4.2">4.2</A>) Como eu descubro quais tabelas, &iacute;ndices, bancos de dados e usu&aacute;rios est&atilde;o definidos? Como eu vejo as consultas utilizadas pelo <I>psql</I> para mostr&aacute;-los?<BR>
+ <A href="#item4.3">4.3</A>) Como voc&ecirc; muda o tipo de dado de uma coluna?<BR>
+ <A href="#item4.4">4.4</A>) Qual &eacute; o tamanho m&aacute;ximo de um registro, uma tabela e um banco de dados?<BR>
+ <A href="#item4.5">4.5</A>) Quanto espa&ccedil;o em disco &eacute; necess&aacute;rio para armazenar dados de um arquivo texto?<BR>
+ <A href="#item4.6">4.6</A>) Por que minhas consultas est&atilde;o lentas? Por que elas n&atilde;o est&atilde;o utilizando meus &iacute;ndices?<BR>
+ <A href="#item4.7">4.7</A>) Como eu vejo como o otimizador de consultas est&aacute; avaliando minha consulta?<BR>
+ <A href="#item4.8">4.8</A>) Como eu fa&ccedil;o buscas com express&otilde;es regulares e buscas com express&otilde;es regulares sem diferenciar mau&uacute;sculas de min&uacute;sculas? Como eu utilizo um &iacute;ndice para buscas sem distinguir mai&uacute;sculas de min&uacute;sculas?<BR>
+ <A href="#item4.9">4.9</A>) Em uma consulta, como eu detecto se um campo &eacute; <SMALL>NULL</SMALL>? Como eu posso ordenar por um campo que &eacute; <SMALL>NULL</SMALL> ou n&atilde;o?<BR>
+ <A href="#item4.10">4.10</A>) Qual &eacute; a diferen&ccedil;a entre os v&aacute;rios tipos de dado de caracteres?<BR>
+ <A href="#item4.11.1">4.11.1</A>) Como eu crio um campo serial/auto incremento?<BR>
+ <A href="#item4.11.2">4.11.2</A>) Como eu consigo o valor de um campo
<SMALL>SERIAL</SMALL>?<BR>
- <A href="#4.15.3">4.15.3</A>) <I>currval()</I> n&atilde;o lida com condi&ccedil;&atilde;o de corrida com outros usu&aacute;rios?<BR>
- <A href="#4.15.4">4.15.4</A>) Por que os n&uacute;meros da minha sequ&ecirc;ncia n&atilde;o s&atilde;o reutilizados quando uma transa&ccedil;&atilde;o &eacute; abortada? Por que h&aacute; intervalos nos n&uacute;meros da minha sequ&ecirc;ncia/coluna SERIAL?<BR>
- <A href="#4.16">4.16</A>) O que &eacute; um <SMALL>OID</SMALL>? O que &eacute; um <SMALL>TID</SMALL>?<BR>
- <A href="#4.17">4.17</A>) Qual &eacute; o significado de alguns termos utilizados no PostgreSQL?<BR>
- <A href="#4.18">4.18</A>) Por que eu recebo o erro <I>"ERROR: Memory exhausted in AllocSetAlloc()"</I>?<BR>
- <A href="#4.19">4.19</A>) Como eu informo qual vers&atilde;o do PostgreSQL eu estou utilizando?<BR>
- <A href="#4.20">4.20</A>) Por que minhas opera&ccedil;&otilde;es com objetos grandes retorna <I>"invalid large obj descriptor"</I>?<BR>
- <A href="#4.21">4.21</A>) Como eu crio uma coluna que conter&aacute; por padr&atilde;o a hora atual?<BR>
- <A href="#4.22">4.22</A>) Por que as minhas subconsultas que utilizam <code><SMALL>IN</SMALL></code> est&atilde;o t&atilde;o lentas?<BR>
- <A href="#4.23">4.23</A>) Como eu fa&ccedil;o uma jun&ccedil;&atilde;o externa (outer join)?<BR>
- <A href="#4.24">4.24</A>) Como eu fa&ccedil;o consultas utilizando m&uacute;ltiplos bancos de dados?<BR>
- <A href="#4.25">4.25</A>) Como eu retorno m&uacute;ltiplos registros ou colunas de uma fun&ccedil;&atilde;o?<BR>
- <A href="#4.26">4.26</A>) Por que eu n&atilde;o posso confiar na cria&ccedil;&atilde;o/remo&ccedil;&atilde;o de tabelas tempor&aacute;rias em fun&ccedil;&otilde;es PL/PgSQL?<BR>
- <A href="#4.27">4.27</A>) Que op&ccedil;&otilde;es para encripta&ccedil;&atilde;o est&atilde;o dispon&iacute;veis?<BR>
+ <A href="#item4.11.3">4.11.3</A>) <I>currval()</I> n&atilde;o lida com condi&ccedil;&atilde;o de corrida com outros usu&aacute;rios?<BR>
+ <A href="#item4.11.4">4.11.4</A>) Por que os n&uacute;meros da minha sequ&ecirc;ncia n&atilde;o s&atilde;o reutilizados quando uma transa&ccedil;&atilde;o &eacute; abortada? Por que h&aacute; intervalos nos n&uacute;meros da minha sequ&ecirc;ncia/coluna SERIAL?<BR>
+ <A href="#item4.12">4.12</A>) O que &eacute; um <SMALL>OID</SMALL>? O que &eacute; um <SMALL>CTID</SMALL>?<BR>
+ <A href="#item4.13">4.13</A>) Por que eu recebo o erro <I>"ERROR: Memory exhausted in AllocSetAlloc()"</I>?<BR>
+ <A href="#item4.14">4.14</A>) Como eu informo qual vers&atilde;o do PostgreSQL eu estou utilizando?<BR>
+ <A href="#item4.15">4.15</A>) Como eu crio uma coluna que conter&aacute; por padr&atilde;o a hora atual?<BR>
+ <A href="#item4.16">4.16</A>) Como eu fa&ccedil;o uma jun&ccedil;&atilde;o externa (outer join)?<BR>
+ <A href="#item4.17">4.17</A>) Como eu fa&ccedil;o consultas utilizando m&uacute;ltiplos bancos de dados?<BR>
+ <A href="#item4.18">4.18</A>) Como eu retorno m&uacute;ltiplos registros ou colunas de uma fun&ccedil;&atilde;o?<BR>
+ <A href="#item4.19">4.19</A>) Por que eu obtenho erros "relation with OID ######
+ does not exist" ao acessar tabelas tempor&aacute;rias em fun&ccedil;&otilde;es PL/PgSQL?<BR>
+ <A href="#item4.20">4.20</A>) Quais solu&ccedil;&otilde;es de replica&ccedil;&atilde;o est&atilde;o dispon&iacute;veis?<BR>
+ <A href="#item4.21">4.21</A>) Por que os nomes de minhas tabelas e colunas n&atilde;o
+ s&atilde;o reconhecidos em minha consulta?<BR>
- <H2 align="center">Extendendo o PostgreSQL</H2>
- <A href="#5.1">5.1</A>) Eu escrevi uma fun&ccedil;&atilde;o. Quando eu executo-a
- no <I>psql</I>, por que ela finaliza o programa com descarga de mem&oacute;ria (core dump)?<BR>
- <A href="#5.2">5.2</A>) Como eu posso contribuir com alguns tipos e fun&ccedil;&otilde;es novas para o PostgreSQL?<BR>
- <A href="#5.3">5.3</A>) Como eu escrevo uma fun&ccedil;&atilde;o em C que retorna uma tupla?<BR>
- <A href="#5.4">5.4</A>) Eu alterei um arquivo do c&oacute;digo-fonte. Por que a recompila&ccedil;&atilde;o n&atilde;o surtiu efeito?<BR>
-
<HR>
<H2 align="center">Perguntas Gerais</H2>
- <H4><A name="1.1">1.1</A>) O que &eacute; PostgreSQL? Como ele &eacute; pronunciado?</H4>
-
- <P>PostgreSQL &eacute; pronunciado <I>Post-Gres-Q-L</I>.</P>
-
- <P>PostgreSQL &eacute; um melhoramento do sistema de ger&ecirc;ncia
- de banco de dados POSTGRES (e tamb&eacute;m &eacute;, &agrave;s vezes, chamado simplesmente de "Postgres"),
- um prot&oacute;tipo de pesquisa de um <SMALL>SGBD</SMALL> de
- &uacute;ltima gera&ccedil;&atilde;o. Enquanto o PostgreSQL ret&eacute;m a
- modelagem de dados poderosa e a grande quantidade de tipos de dados do POSTGRES, ele
- substituiu a linguagem de consulta PostQuel com um subconjunto extendido do
- <SMALL>SQL</SMALL>. PostgreSQL &eacute; livre e o c&oacute;digo-fonte completo
- est&aacute; dispon&iacute;vel.</P>
-
- <P>O desenvolvimento do PostgreSQL &eacute; feito por um grupo de
- desenvolvedores que est&atilde;o inscritos na lista de e-mails de
- desenvolvimento do PostgreSQL. O coordenador atual &eacute; Marc
- G. Fournier (<A href="mailto:[email protected]">[email protected]</A>).
- (Veja a se&ccedil;&atilde;o <A href="#1.6">1.6</A> para saber como
- se juntar ao grupo). O grupo &eacute; respons&aacute;vel
- por todo o desenvolvimento do PostgreSQL. &Eacute; um projeto da
- comunidade e n&atilde;o &eacute; controlado por nenhuma empresa.
- Para se juntar ao grupo, veja a FAQ do desenvolvedor em
- <A href="http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html">
- http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html</A></P>
-
- <P>Os autores do PostgreSQL 1.01 foram Andrew Yu e Jolly Chen.
- Muitos outros contribuiram para portar, testar, depurar e
- melhorar o c&oacute;digo. O c&oacute;digo original do Postgres,
- do qual o PostgreSQL foi derivado, foi um esfor&ccedil;o de muitos
- estudantes de gradua&ccedil;&atilde;o e p&oacute;s-gradua&ccedil;&atilde;o
- e uma equipe de programadores trabalhando sobre a dire&ccedil;&atilde;o do
- Professor Michael Stonebraker na Universidade da Calif&oacute;nia
- em Berkeley.</P>
- <P>O nome original do software em Berkeley era Postgres. Quando
- o <SMALL>SQL</SMALL> foi adicionado em 1995, seu nome foi
- mudado para Postgres95. O nome foi mudado no fim de 1996 para
- PostgreSQL.</P>
-
- <H4><A name="1.2">1.2</A>) Qual &eacute; a licen&ccedil;a do PostgreSQL?</h4>
-
+ <H3 id="item1.1">1.1) O que &eacute; PostgreSQL? Como ele &eacute; pronunciado?</H3>
+
+ <P>PostgreSQL &eacute; pronunciado <I>Post-Gres-Q-L</I>, e &eacute;, &agrave;s vezes, referido apenas como
+ <I>Postgres</I>. Um arquivo de &aacute;udio est&aacute; dispon&iacute;vel em
+ <a href="http://www.postgresql.org/files/postgresql.mp3">formato MP3</a> para
+ aqueles que gostariam de ouvir a pron&uacute;ncia.</P>
+
+ <P>O PostgreSQL &eacute; um sistema de banco de dados objeto-relacional que tem as
+ caracter&iacute;sticas de sistemas de bancos de dados comerciais tradicionais com
+ melhoramentos encontrados nos sistemas <SMALL>SGBD</SMALL>s de pr&oacute;xima gera&ccedil;&atilde;o.
+ PostgreSQL &eacute; livre e o c&oacute;digo-fonte completo est&aacute; dispon&iacute;vel.</P>
+
+ <P>O desenvolvimento do PostgreSQL &eacute; feito por um grupo de desenvolvedores
+ volunt&aacute;rios (na sua maioria) espalhados pelo mundo e que se comunicam via
+ Internet. &Eacute; um projeto da comunidade e n&atilde;o &eacute; controlado por nenhuma
+ empresa. Para se envolver, veja a FAQ do desenvolvedor em <A href=
+ "http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html">
+ http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html</A>
+ </P>
+
+ <H3 id="item1.2">1.2) Quem controla o PostgreSQL?<BR></H3>
+
+ <P>Se voc&ecirc; est&aacute; procurando por um mantenedor, comit&ecirc; central ou empresa
+ controladora do PostgreSQL, desista --- n&atilde;o h&aacute; um(a). N&oacute;s temos um
+ comit&ecirc; core e committers CVS, mas estes grupos s&atilde;o mais para quest&otilde;es
+ administrativas do que controle. O projeto &eacute; direcionado pela comunidade
+ de desenvolvedores e usu&aacute;rios, que qualquer um pode se juntar. Tudo o que
+ voc&ecirc; precisa &eacute; se inscrever nas listas de discuss&atilde;o e participar das
+ discuss&otilde;es. Veja a <a href="http://www.postgresql.org/docs/faqs.FAQ_DEV.html">
+ FAQ do desenvolvedor</A> para obter informa&ccedil;&otilde;es como se envolver com o
+ desenvolvimento do PostgreSQL.</P>
+
+ <H3 id="item1.3">1.3) Qual &eacute; a licen&ccedil;a do PostgreSQL?</H3>
+
+ <P>O PostgreSQL &eacute; distribu&iacute;do sob a licen&ccedil;a BSD cl&aacute;ssica. Basicamente,
+ ela permite que usu&aacute;rios fa&ccedil;am qualquer coisa com o c&oacute;digo, incluindo
+ revender os bin&aacute;rios sem o c&oacute;digo-fonte. A &uacute;nica restri&ccedil;&atilde;o &eacute; que voc&ecirc;
+ n&atilde;o nos responsabilize legalmente por problemas com o programa de computador.
+ H&aacute; tamb&eacute;m a exig&ecirc;ncia de que esta licen&ccedil;a apare&ccedil;a em todas as c&oacute;pias
+ do programa de computador. Aqui est&aacute; a licen&ccedil;a BSD que usamos atualmente:</P>
<P>PostgreSQL est&aacute; sujeito a seguinte licen&ccedil;a:</P>
- <P>PostgreSQL Sistema de Ger&ecirc;ncia de Banco de Dados</P>
+ <P>PostgreSQL Data Base Management System</P>
<P>Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group
- Portions Copyright (c) 1994-6 Regents of the University of California</P>
-
- <P>Permiss&atilde;o de uso, c&oacute;pia, modifica&ccedil;&atilde;o
- e distribui&ccedil;&atilde;o desse software e sua documenta&ccedil;&atilde;o
- para qualquer prop&oacute;sito, sem taxa, e sem um acordo escrito
- est&aacute; concedida por esse meio, contanto que a nota da licen&ccedil;a
- acima, esse par&aacute;grafo e os dois par&aacute;grafos seguintes
- apare&ccedil;am em todas as c&oacute;pias.</P>
-
- <P>EM NENHUM EVENTO A UNIVERSIDADE DA CALIF&Oacute;RNIA SER&Aacute;
- RESPONS&Aacute;VEL POR QUALQUER PARTIDO EM DANOS DIRETOS, INDIRETOS,
- ESPECIAIS, INCIDENTAIS OU CONSEQUENTES, INCLUINDO PERDA DE LUCROS,
- SURGIDOS A PARTIR DO USO DO SOFTWARE E DE SUA DOCUMENTA&Ccedil;&Atilde;O,
- MESMO SE A UNIVERSIDADE DA CALIF&Oacute;RNIA ESTIVER SIDO AVISADA DA
- POSSIBILIDADE DE TAL DANO.</P>
-
- <P>A UNIVERSIDADE DA CALIF&Oacute;RNIA ESPECIFICADAMENTE N&Atilde;O D&Aacute;
- NENHUMA GARANTIA, INCLUINDO, MAS N&Atilde;O LIMITADO A, GARANTIAS
- IMPL&Iacute;CITAS DE COMERCIALIZA&Ccedil;&Atilde;O E ATENDIMENTO
- DE PROP&Oacute;SITO PARTICULAR. O SOFTWARE &Eacute; FORNECIDO ABAIXO
- "COMO &Eacute;", E A UNIVERSIDADE DA CALIF&Oacute;RNIA
- N&Atilde;O TEM OBRIGA&Ccedil;&Atilde;O DE FORNECER MANUTEN&Ccedil;&Atilde;O,
- SUPORTE, ATUALIZA&Ccedil;&Otilde;ES, MELHORIAS OU MODIFICA&Ccedil;&Otilde;ES.</P>
-
- <P>O que est&aacute; descrito acima &eacute; a licen&ccedil;a BSD, uma
- licen&ccedil;a de c&oacute;digo aberto cl&aacute;ssica. Ela n&atilde;o
- tem restri&ccedil;&otilde;es de como o c&oacute;digo pode ser utilizado.
- N&oacute;s gostamos dela e n&atilde;o temos inten&ccedil;&otilde;es de
- mud&aacute;-la.</P>
-
- <H4><A name="1.3">1.3</A>) Quais plataformas Unix o PostgreSQL pode ser executado?</H4>
+ Portions Copyright (c) 1994-1996 Regents of the University of California</P>
- <P>Em geral, qualquer plataforma moderna compat&iacute;vel com Unix deve ser capaz de executar o PostgreSQL. As plataformas que foram testadas antes do lan&ccedil;amento de uma vers&atilde;o s&atilde;o listadas nas instru&ccedil;&otilde;es de instala&ccedil;&atilde;o.</P>
+ <P>Permission to use, copy, modify, and distribute this software
+ and its documentation for any purpose, without fee, and without a
+ written agreement is hereby granted, provided that the above
+ copyright notice and this paragraph and the following two
+ paragraphs appear in all copies.</P>
- <H4><A name="1.4">1.4</A>) Quais portabilidades n&atilde;o-Unix est&atilde;o dispon&iacute;veis?</H4>
+ <P>IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY
+ PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL
+ DAMAGES, INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS
+ SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
+ CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</P>
- <P>Iniciando com a vers&atilde;o 8.0, o PostgreSQL agora pode ser
- executado nativamente nos sistemas operacionais Microsoft Windows
- baseados no NT tais como Win2000, WinXP e Win2003. Um instalador
- est&aacute; dispon&iacute;vel em <a href=
- "http://pgfoundry.org/projects/pginstaller">
- http://pgfoundry.org/projects/pginstaller</a> Vers&otilde;es do Windows
- baseados no MSDOS (Win95, Win98, WinMe) podem executar o PostgreSQL utilizando o Cygwin.</P>
+ <P>THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY
+ WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE
+ SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE
+ UNIVERSITY OF CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE,
+ SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.</P>
- <P>H&aacute; tamb&eacute;m um porte para Novell Netware 6 em
- <A href="http://forge.novell.com">http://forge.novell.com</A>
- e uma vers&atilde;o para OS/2 (eComStation) em <a href=
- "http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&amp;button=Search&amp;key=postgreSQL&amp;stype=all&amp;sort=type&amp;dir=%2F">
- http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&amp;button=Search&amp;key=postgreSQL&amp;stype=all&amp;sort=type&amp;dir=%2F</a>.</P>
+ <H3 id="item1.4">1.4) Quais plataformas o PostgreSQL pode ser executado?</H3>
- <H4><A name="1.5">1.5</A>) Onde eu posso conseguir o PostgreSQL?</H4>
+ <P>Em geral, qualquer plataforma moderna compat&iacute;vel com Unix deve ser capaz de executar o PostgreSQL. As plataformas que foram testadas antes do lan&ccedil;amento de uma vers&atilde;o s&atilde;o listadas nas instru&ccedil;&otilde;es de instala&ccedil;&atilde;o.</P>
- <P>O servidor ftp principal do PostgreSQL &eacute; <A href=
- "ftp://ftp.PostgreSQL.org/pub">ftp://ftp.PostgreSQL.org/pub</A>.
- Para obter a rela&ccedil;&atilde;o de servidores espelhos (mirrors), consulte nosso website.</P>
+ <P>O PostgreSQL tamb&eacute;m executa nativamente nos sistemas operacionais Microsoft Windows
+ baseados no NT tais como Win200 SP4, WinXP e Win2003. Um instalador pr&eacute;-empacotado est&aacute;
+ dispon&iacute;vel em <a href= "http://pgfoundry.org/projects/pginstaller">
+ http://pgfoundry.org/projects/pginstaller</a>. Vers&otilde;es do Windows baseadas no MS-DOS
+ (Win95, Win98, WinMe) podem executar o PostgreSQL utilizando o Cygwin.</P>
- <H4><A name="1.6">1.6</A>) Onde eu posso conseguir suporte?</H4>
+ <p>H&aacute; tamb&eacute;m uma vers&atilde;o para o Novell Netware 6 em
+ <a href="http://forge.novell.com">http://forge.novell.com</a>
+ e uma vers&atilde;o para OS/2 (eComStation) em <a href=
+ "http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&amp;button=Search&amp;key=postgreSQL&amp;stype=all&amp;sort=type&amp;dir=%2F">
+ http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&amp;button=Search&amp;key=postgreSQL&amp;stype=all&amp;sort=type&amp;dir=%2F</a>.</p>
- <P>A lista de discuss&atilde;o principal &eacute;: <A href=
- Ela est&aacute; dispon&iacute;vel para discuss&otilde;es relacionadas ao PostgreSQL. Para se inscrever, envie um e-mail com as seguintes linhas no corpo (n&atilde;o envie no assunto):</P>
-<PRE>
- subscribe
- end
-</PRE>
+ <H3 id="item1.5">1.5) Onde eu posso conseguir o PostgreSQL?</H3>
- <P>para <A href=
+ <P>Via navegador web, utilize <a href="http://www.postgresql.org/ftp/">
+ http://www.postgresql.org/ftp/</a> e via ftp, utilize
+ <A href="ftp://ftp.PostgreSQL.org/pub/">
+ ftp://ftp.PostgreSQL.org/pub/</A>.</P>
- <P>H&aacute; tamb&eacute;m uma lista s&iacute;ntese (digest) dispon&iacute;vel. Para se inscrever, envie um e-mail para: <A href="mailto:[email protected]">[email protected]</A> com o seguinte corpo:</P>
-<PRE>
- subscribe
- end
-</PRE>
- S&iacute;nteses (Digests) s&atilde;o enviadas aos membros dessa lista quando a lista receber cerca de 30k em mensagens.
+ <H3 id="item1.6">1.6) Qual &eacute; a &uacute;ltima vers&atilde;o?</H3>
- <P>A lista de discuss&atilde;o sobre bugs est&aacute; dispon&iacute;vel. Para se inscrever, envie um e-mail para <A href="mailto:[email protected]">[email protected]</A> com o seguinte corpo:</P>
-<PRE>
- subscribe
- end
-</PRE>
+ <P>A &uacute;ltima vers&atilde;o do PostgreSQL &eacute; a vers&atilde;o 8.1.5.</P>
-H&aacute; tamb&eacute;m uma lista de discuss&atilde;o dos desenvolvedores dispon&iacute;vel. Para se inscrever, envie um e-mail para <A href="mailto:[email protected]">[email protected]</A> com o seguinte corpo:
-<PRE>
- subscribe
- end
-</PRE>
+ <P>N&oacute;s planejamos lan&ccedil;ar vers&otilde;es novas a cada ano com vers&otilde;es
+ corretivas em alguns meses.</P>
-<P>Outras listas de discuss&otilde;es e informa&ccedil;&otilde;es sobre o PostgreSQL podem ser encontradas na homepage do PostgreSQL em:</P>
+ <H3 id="item1.7">1.7) Onde eu posso conseguir suporte?</H3>
- <BLOCKQUOTE>
- <P><A href="http://www.PostgreSQL.org">http://www.PostgreSQL.org</A></P>
- </BLOCKQUOTE>
+ <P>A comunidade do PostgreSQL fornece assist&ecirc;ncia a muitos de seus
+ usu&aacute;rios via e-mail. O principal s&iacute;tio web para inscri&ccedil;&atilde;o nas listas
+ de e-mail &eacute; <a href="http://www.postgresql.org/community/lists/">
+ http://www.postgresql.org/community/lists/</a>. As listas <I>general</I>
+ e <I>bugs</I> s&atilde;o um bom lugar para in&iacute;cio.</P>
<P>O principal canal de IRC &eacute; o <I>#postgresql</I> na Freenode (<I>irc.freenode.net</I>). Para se conectar voc&ecirc; pode utilizar o comando Unix <code>irc -c '#postgresql' "$USER" irc.freenode.net</code> ou utilizar qualquer outro cliente de IRC. Um canal hisp&acirc;nico (<I>#postgresql-es</I>) e um franc&ecirc;s (<I>#postgresqlfr</I>) tamb&eacute;m existem na mesma rede. H&aacute; tamb&eacute;m um canal PostgreSQL na EFNet.</P>
<P>Uma lista de empresas que prestam suporte comercial est&aacute; dispon&iacute;vel em <A href=
- "http://techdocs.postgresql.org/companies.php">http://techdocs.postgresql.org/companies.php</A>.</P>
-
- <H4><A name="1.7">1.7</A>) Qual &eacute; a &uacute;ltima vers&atilde;o?</H4>
-
- <P>A &uacute;ltima vers&atilde;o do PostgreSQL &eacute; a vers&atilde;o 7.4.6.</P>
-
- <P>N&oacute;s planejamos lan&ccedil;ar vers&otilde;es novas a cada seis ou oito meses.</P>
-
- <H4><A name="1.8">1.8</A>) Que documenta&ccedil;&atilde;o est&aacute; dispon&iacute;vel?</H4>
-
- <P>V&aacute;rios manuais, p&aacute;ginas de manuais (man pages) e alguns exemplos para teste est&atilde;o inclu&iacute;dos na distribui&ccedil;&atilde;o. Veja o diret&oacute;rio <I>/doc</I>. Voc&ecirc; pode acessar os manuais online em <A href="http://www.PostgreSQL.org/docs">http://www.PostgreSQL.org/docs</A>.</P>
-
- <P>H&aacute; dois livros sobre PostgreSQL dispon&iacute;veis online em <A href=
- "http://www.PostgreSQL.org/docs/awbook.html">http://www.PostgreSQL.org/docs/awbook.html</A>
- e <A href=
- "http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook/</A>.
- H&aacute; uma lista de livros sobre PostgreSQL dispon&iacute;veis para compra em <A
- href=
- "http://techdocs.postgresql.org/techdocs/bookreviews.php">http://techdocs.PostgreSQL.org/techdocs/bookreviews.php</A>.
- H&aacute; tamb&eacute;m uma cole&ccedil;&atilde;o de artigos t&eacute;cnicos sobre PostgreSQL em <A
- href=
- "http://techdocs.PostgreSQL.org/">http://techdocs.PostgreSQL.org/</A>.</P>
-
- <P>O programa cliente de linha de comando <I>psql</I> tem alguns comandos \d para mostrar informa&ccedil;&atilde;o sobre tipos, operadores, fun&ccedil;&otilde;es, agrega&ccedil;&otilde;es, etc. Use \? para mostrar os comandos dispon&iacute;veis.</P>
-
- <P>Nosso web site cont&eacute;m ainda mais documenta&ccedil;&atilde;o.</P>
-
- <H4><A name="1.9">1.9</A>) Como eu posso saber quais s&atilde;o os bugs conhecidos ou caracter&iacute;sticas ausentes?</H4>
+ "http://www.postgresql.org/support/professional_support">
+ http://www.postgresql.org/support/professional_support</A>.</P>
- <P>PostgreSQL suporta um subconjunto extendido do <SMALL>SQL</SMALL>-92.
- Veja a nossa lista de afazeres (<A href="http://www.postgresql.org/docs/faqs.TODO.html">TODO</A>) para saber sobre bugs conhecidos, caracter&iacute;sticas ausentes e planos futuros.</P>
-
- <H4><A name="1.10">1.10</A>) Como eu posso aprender <SMALL>SQL</SMALL>?</H4>
-
- <P>O livro "The PostgreSQL book" em <A href=
- "http://www.PostgreSQL.org/docs/awbook.html">http://www.PostgreSQL.org/docs/awbook.html</A>
- ensina <SMALL>SQL</SMALL>. H&aacute; outro livro sobre PostgreSQL em <A
- href=
- "http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook.</A>
- H&aacute; bons tutoriais em <A href=
- "http://www.intermedia.net/support/sql/sqltut.shtm">http://www.intermedia.net/support/sql/sqltut.shtm,</A>
- , <A href=
- "http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM">
- http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM,</A>
- e em <A href=
- "http://sqlcourse.com/">http://sqlcourse.com.</A></P>
-
- <P>Outro &eacute; o "Teach Yourself SQL in 21 Days, Second Edition"
- em <A href=
- "http://members.tripod.com/er4ebus/sql/index.htm">http://members.tripod.com/er4ebus/sql/index.htm</A></P>
-
- <P>Muitos dos nossos usu&aacute;rios gostam do <I>The Practical SQL Handbook</I>,
- Bowman, Judith S., et al., Addison-Wesley. Outros gostam do <I>The
- Complete Reference SQL</I>, Groff et al., McGraw-Hill.</P>
-
- <H4><A name="1.11">1.11</A>) O PostgreSQL est&aacute; livre do Bug do Mil&ecirc;nio?</H4>
-
- <P>Sim, n&oacute;s podemos manipular datas ap&oacute;s o ano 2000 AD e antes do ano 2000 BC.</P>
-
- <H4><A name="1.12">1.12</A>) Como posso me juntar a equipe de desenvolvimento?</H4>
-
- <P>Primeiramente, fa&ccedil;a o download do c&oacute;digo-fonte e leia a documenta&ccedil;&atilde;o para Desenvolvedores do PostgreSQL no nosso website ou na distribui&ccedil;&atilde;o. Depois, se inscreva nas lista de discuss&atilde;o <I>pgsql-hackers</I> e <I>pgsql-patches</I>. Ent&atilde;o submeta patches de alta qualidade para pgsql-patches.</P>
-
- <P>H&aacute; algumas pessoas que tem privil&eacute;gios para fazer mudan&ccedil;as (commit) na &aacute;rvore <SMALL>CVS</SMALL> do PostgreSQL. Cada um deles submeteram tantos patches de alta qualidade que foi imposs&iacute;vel para os committers continuarem a fazerem as mudan&ccedil;as, e ent&atilde;o n&oacute;s confiamos que os patches que eles submetem s&atilde;o de alta qualidade.</P>
-
- <H4><A name="1.13">1.13</A>) Como eu informo a exist&ecirc;ncia de um bug?</H4>
+ <H3 id="item1.8">1.8) Como eu informo a exist&ecirc;ncia de um bug?</H3>
<P>Visite o formul&aacute;rio que reporta bugs do PostgreSQL em <A href=
"http://www.postgresql.org/support/submitbug">http://www.postgresql.org/support/submitbug</A>.</P>
-
<P>Verifique tamb&eacute;m o nosso ftp <A href=
"ftp://ftp.PostgreSQL.org/pub">ftp://ftp.PostgreSQL.org/pub</A> para
- ver se h&aacute; uma vers&atilde;o mais recente do PostgreSQL ou patches.</P>
+ ver se h&aacute; uma vers&atilde;o mais recente do PostgreSQL.</P>
+
+ <P>Bugs submetidos utilizando o formul&aacute;rio ou informado a qualquer
+ lista de discuss&atilde;o do PostgreSQL tipicamente gera uma das seguintes
+ respostas:</P>
+ <ul>
+ <li>N&atilde;o &eacute; um bug e o porqu&ecirc;</li>
+ <li>&Eacute; um bug conhecido e j&aacute; est&aacute; na lista de
+ <A href="http://www.postgresql.org/docs/faqs.TODO.html">AFAZERES (TODO)</A></li>
+ <li>O bug foi corrigido na vers&atilde;o atual</li>
+ <li>O bug foi corrigido mas n&atilde;o foi empacotado em um vers&atilde;o oficial</li>
+ <li>Um pedido foi feito para obter informa&ccedil;&otilde;es detalhadas:
+ <ul>
+ <li>Sistema Operacional</li>
+ <li>Vers&atilde;o do PostgreSQL</li>
+ <li>Exemplo de teste que reproduz o bug</li>
+ <li>Informa&ccedil;&otilde;es sobre depura&ccedil;&atilde;o</li>
+ <li>Sa&iacute;da reconstituidora de vest&iacute;gios (backtrace) do depurador</li>
+ </ul>
+ </li>
+ <li>O bug &eacute; novo. O seguinte pode ocorrer:
+ <ul>
+ <li>Uma corre&ccedil;&atilde;o &eacute; criada e ser&aacute; inclu&iacute;da na pr&oacute;xima vers&atilde;o</li>
+ <li>O bug n&atilde;o pode ser corrigido imediatamente e &eacute; adicionado
+ a lista de <A href="http://www.postgresql.org/docs/faqs.TODO.html">AFAZERES (TODO)</A></li>
+ </ul>
+ </li>
+ </ul>
+
+ <H3 id="item1.9">1.9) Como eu posso saber quais s&atilde;o os bugs conhecidos
+ ou funcionalidades ausentes?</H3>
+
+ <P>O PostgreSQL suporta um subconjunto extendido do <SMALL>SQL:2003</SMALL>.
+ Veja nossa lista de <A href="http://www.postgresql.org/docs/faqs.TODO.html">AFAZERES (TODO)</A>
+ que cont&eacute;m bugs conhecidos, funcionalidades ausentes e planos futuros.</P>
+
+ <P>Uma solicita&ccedil;&atilde;o de funcionalidade geralmente resulta em uma das
+ seguintes respostas:</P>
+ <ul>
+ <li>A funcionalidade j&aacute; est&aacute; na lista de <A href="http://www.postgresql.org/docs/faqs.TODO.html">AFAZERES (TODO)</A></li>
+ <li>A funcionalidade n&atilde;o &eacute; desej&aacute;vel porque:
+ <ul>
+ <li>Ela duplica uma funcionalidade existente que j&aacute; segue o
+ padr&atilde;o SQL</li>
+ <li>A funcionalidade aumentar&aacute; a complexidade do c&oacute;digo mas
+ adicionar&aacute; pouco benef&iacute;cio</li>
+ <li>A funcionalidade ser&aacute; insegura ou n&atilde;o-confi&aacute;vel</li>
+ </ul>
+ </li>
+ <li>A nova funcionalidade &eacute; adicionada a lista de
+ <A href="http://www.postgresql.org/docs/faqs.TODO.html">AFAZERES (TODO)</A></li>
+ </ul>
+
+ <P>O PostgreSQL n&atilde;o utiliza sistema de acompanhamento de bugs porque
+ n&oacute;s achamos mais eficiente responder diretamente o e-mail e manter a
+ lista de <A href="http://www.postgresql.org/docs/faqs.TODO.html">AFAZERES (TODO)</A>
+ atualizada. Na pr&aacute;tica, bugs n&atilde;o duram muito no programa; e bugs que afetam
+ uma grande quantidade de usu&aacute;rios s&atilde;o corrigidos rapidamente. O &uacute;nico lugar
+ para encontrar todas as mudan&ccedil;as, melhorias e corre&ccedil;&otilde;es em uma vers&atilde;o do
+ PostgreSQL &eacute; ler as mensagens de log do
+ <a href="http://www.postgresql.org/developer/sourcecode/">CVS</a>. At&eacute; mesmo
+ as notas de lan&ccedil;amento n&atilde;o listam todas as mudan&ccedil;as feitas no programa.</P>
+
+ <H3 id="item1.10">1.10) Que documenta&ccedil;&atilde;o est&aacute; dispon&iacute;vel?</H3>
+
+ <P>O PostgreSQL inclui vasta documenta&ccedil;&atilde;o, incluindo um manual extenso,
+ p&aacute;ginas de manuais (man pages) e alguns exemplos teste. Veja o diret&oacute;rio
+ <I>/doc</I>. Voc&ecirc; tamb&eacute;m pode pesquisar os manuais online em <A href=
+ "http://www.PostgreSQL.org/docs">http://www.PostgreSQL.org/docs</A>.
+ </P>
+
+ <P>H&aacute; dois livros sobre PostgreSQL dispon&iacute;veis online em <A href=
+ "http://www.postgresql.org/docs/books/awbook.html">http://www.postgresql.org/docs/books/awbook.html</A>
+ e <A href=
+ "http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook/</A>.
+ H&aacute; uma lista de livros sobre PostgreSQL dispon&iacute;veis para compra. Um dos mais
+ populares &eacute; o do Korry Douglas. Uma lista de an&aacute;lise sobre os livros pode ser
+ encontrada em <A href=
+ "http://techdocs.postgresql.org/techdocs/bookreviews.php">http://techdocs.PostgreSQL.org/techdocs/bookreviews.php</A>.
+
+ <P>O programa cliente de linha de comando <I>psql</I> tem alguns comandos \d para
+ mostrar informa&ccedil;&otilde;es sobre tipos, operadores, fun&ccedil;&otilde;es, agrega&ccedil;&otilde;es, etc. - utilize \?
+ para mostrar os comandos dispon&iacute;veis.</P>
+
+ <P>Nosso s&iacute;tio web cont&eacute;m ainda mais documenta&ccedil;&atilde;o.</P>
+
+ <H3 id="item1.11">1.11) Como eu posso aprender <SMALL>SQL</SMALL>?</H3>
+
+ <P>Primeiro, considere os livros espec&iacute;ficos sobre PostgreSQL mencionados
+ acima. Outro &eacute; o "Teach Yourself SQL in 21 Days, Second Edition" e <A href=
+ "http://members.tripod.com/er4ebus/sql/index.htm">http://members.tripod.com/er4ebus/sql/index.htm</A>.
+ Muitos de nossos usu&aacute;rios gostam do <I>The Practical SQL Handbook</I>,
+ Bowman, Judith S., et al., Addison-Wesley. Outros do <I>The
+ Complete Reference SQL</I>, Groff et al., McGraw-Hill.</P>
+
+ <P>H&aacute; tamb&eacute;m bons tutoriais dispon&iacute;veis online:
+ <UL>
+ <LI> <A href="http://www.intermedia.net/support/sql/sqltut.shtm">http://www.intermedia.net/support/sql/sqltut.shtm</A>
+ </LI>
+ <LI>
+ <A href="http://sqlcourse.com/">http://sqlcourse.com</A>
+ </LI>
+ <LI>
+ <A href="http://www.w3schools.com/sql/default.asp">http://www.w3schools.com/sql/default.asp</A>
+ </LI>
+ <LI><A href=
+ "http://mysite.verizon.net/Graeme_Birchall/id1.html">http://mysite.verizon.net/Graeme_Birchall/id1.html</A>
+ </LI>
+ </UL>
- <H4><A name="1.14">1.14</A>) Como &eacute; o PostgreSQL comparado a outros <SMALL>SGBD</SMALL>s?</H4>
+ <H3 id="item1.12">1.12) Como posso submeter uma corre&ccedil;&atilde;o (patch) ou me juntar a equipe de desenvolvimento?</H3>
- <P>H&aacute; v&aacute;rias maneiras de se medir um software: caracter&iacute;sticas, performance, confiabilidade, suporte e pre&ccedil;o.</P>
+ <P>Veja a <a href="http://www.postgresql.org/docs/faqs.FAQ_DEV.html">
+ FAQ do Desenvolvedor</A>.</P>
+
+ <H3 id="item1.13">1.13) Como &eacute; o PostgreSQL comparado a outros <SMALL>SGBD</SMALL>s?</H3>
+
+ <P>H&aacute; v&aacute;rias maneiras de se medir um software: funcionalidades, performance, confiabilidade, suporte e pre&ccedil;o.</P>
<DL>
- <DT><B>Caracter&iacute;sticas</B></DT>
+ <DT><B>Funcionalidades</B></DT>
- <DD>PostgreSQL tem muitas caracter&iacute;sticas presentes em muitos <SMALL>SGBD</SMALL>s comerciais como transa&ccedil;&otilde;es, subconsultas, gatilhos, vis&otilde;es, integridade referencial de chave estrangeira e travamento (lock) sofisticado. N&oacute;s temos algumas caracter&iacute;sticas que eles n&atilde;o tem, como tipos definidos pelo usu&aacute;rio, heran&ccedil;a, regras e controle de concorr&ecirc;ncia de m&uacute;ltiplas vers&otilde;es para reduzir travamentos (locks).<BR>
+ <DD>PostgreSQL tem muitas caracter&iacute;sticas presentes em muitos <SMALL>SGBD</SMALL>s comerciais como transa&ccedil;&otilde;es, subconsultas, gatilhos, vis&otilde;es, integridade referencial de chave estrangeira e bloqueio (lock) sofisticado. N&oacute;s temos algumas funcionalidades que eles n&atilde;o tem, como tipos definidos pelo usu&aacute;rio, heran&ccedil;a, regras e controle de concorr&ecirc;ncia de m&uacute;ltiplas vers&otilde;es para reduzir bloqueios (locks).<BR>
<BR>
</DD>
<DT><B>Performance</B></DT>
- <DD>A performance do PostgreSQL &eacute; compar&aacute;vel a outros bancos de dados comerciais e de c&oacute;digo livre. Ele &eacute; mais r&aacute;pido em algumas coisas, mais lento em outras. Comparado ao MySQL ou sistemas de bancos de dados "leves", n&oacute;s somos mais r&aacute;pidos com m&uacute;ltiplos usu&aacute;rios, consultas complexas e carga de consultas de leitura/escrita. MySQL &eacute; mais r&aacute;pido para consultas simples com SELECT feitas por poucos usu&aacute;rios. &Eacute; claro que o MySQL n&atilde;o tem muitas das caracter&iacute;sticas mencionadas na se&ccedil;&atilde;o <I>Caracter&iacute;sticas</I> acima. N&oacute;s desenvolvemos buscando confiabilidade e caracter&iacute;sticas, e n&oacute;s continuamos a melhorar a performance a cada vers&atilde;o.<BR>
-
+ <DD>A performance do PostgreSQL &eacute; compar&aacute;vel a outros bancos de dados comerciais e de c&oacute;digo livre. Ele &eacute; mais r&aacute;pido em algumas coisas, mais lento em outras. Nossa performance &eacute; geralmente +/- 10% comparada a de outros bancos de dados.
<BR>
</DD>
@@ -359,191 +352,164 @@ H&aacute; tamb&eacute;m uma lista de discuss&atilde;o dos desenvolvedores dispon
<DT><B>Suporte</B></DT>
- <DD>Nossas listas de discuss&atilde;o fornecem contato com um grupo de desenvolvedores e usu&aacute;rios para ajudar a resolver muitos problemas encontrados. Enquanto n&oacute;s n&atilde;o podemos garantir o conserto, <SMALL>SGBD</SMALL>s comerciais nem sempre fornecem tamb&eacute;m. Com acesso direto aos desenvolvedores, a comunidade de usu&aacute;rios, manuais e o c&oacute;digo fonte faz com que o suporte do PostgreSQL seja superior ao de outros <SMALL>SGBD</SMALL>s. H&aacute; suporte comercial por incidente dispon&iacute;veis para aqueles que precisam de um. (Veja <A href="#1.6">se&ccedil;&atilde;o 1.6 da FAQ</A>.)<BR>
+ <DD>Nossas listas de discuss&atilde;o fornecem contato com um grupo de desenvolvedores e usu&aacute;rios para ajudar a resolver muitos problemas encontrados. Enquanto n&oacute;s n&atilde;o podemos garantir o conserto, <SMALL>SGBD</SMALL>s comerciais nem sempre fornecem tamb&eacute;m. Com acesso direto aos desenvolvedores, a comunidade de usu&aacute;rios, manuais e o c&oacute;digo fonte faz com que o suporte do PostgreSQL seja superior ao de outros <SMALL>SGBD</SMALL>s. H&aacute; suporte comercial por incidente dispon&iacute;veis para aqueles que precisam de um. (Veja <A href="#item1.7">se&ccedil;&atilde;o 1.7 da FAQ</A>.)<BR>
<BR>
</DD>
<DT><B>Pre&ccedil;o</B></DT>
- <DD>N&oacute;s somos livres para uso dele tanto comercial quanto n&atilde;o comercial. Voc&ecirc; pode adicionar nosso c&oacute;digo ao seu produto sem limita&ccedil;&otilde;es, exceto aquelas descritas na nossa licen&ccedil;a compat&iacute;vel com a licen&ccedil;a BSD mencionada acima.<BR>
+ <DD>N&oacute;s somos livres para uso dele tanto comercial quanto n&atilde;o comercial. Voc&ecirc; pode adicionar nosso c&oacute;digo ao seu produto sem limita&ccedil;&otilde;es, exceto aquelas descritas na nossa licen&ccedil;a BSD mencionada acima.<BR>
<BR>
</DD>
</DL>
- <H4><A name="1.15">1.15</A>) Como eu posso ajudar financeiramente o projeto PostgreSQL?</H4>
-
- <P>PostgreSQL teve sua primeira infra-estrutura em 1996 quando iniciamos. Somos todos gratos ao Marc Fournier, que criou e gerenciou esta infra-estrutura ao longo dos anos.</P>
- <P>Infra-estrutura de qualidade &eacute; muito importante em um projeto de c&oacute;digo aberto. Ela previne descontinuidades que podem facilmente descontinuar o andamento do projeto.</P>
- <P>&Eacute; claro, que a infra-estrutura n&atilde;o &eacute; barata. H&aacute; v&aacute;rios custos iniciais e mensais que s&atilde;o necess&aacute;rios para mant&eacute;-la. Se voc&ecirc; ou sua empresa tem dinheiro que pode ser doado para ajudar a financiar esse esfor&ccedil;o, acesse <A href="http://store.pgsql.com/shopping/">http://store.pgsql.com/shopping/</A> e fa&ccedil;a uma doa&ccedil;&atilde;o.</P>
- <P>Embora a p&aacute;gina mencione PostgreSQL, Inc, a "contribui&ccedil;&atilde;o" &eacute; somente para apoiar o projeto PostgreSQL e n&atilde;o financia nenhuma empresa espec&iacute;fica. Se voc&ecirc; preferir, voc&ecirc; pode enviar um cheque para o endere&ccedil;o de contato.</P>
-
- <P>Se voc&ecirc; tiver uma hist&oacute;ria de sucesso sobre o PostgreSQL, envie-a para nossa lista <i>advocacy</i> em <a href="mailto:[email protected]">[email protected]</a>.</P>
-
<HR>
<H2 align="center">Perguntas sobre Clientes</H2>
- <H4><A name="2.1">2.1</A>) H&aacute; drivers <SMALL>ODBC</SMALL> para PostgreSQL?</H4>
+ <H3 id="item2.1">2.1) Quais interfaces est&atilde;o dispon&iacute;veis para PostgreSQL?</H3>
- <P>H&aacute; dois drivers <SMALL>ODBC</SMALL> dispon&iacute;veis, PsqlODBC e o OpenLink <SMALL>ODBC</SMALL>.</P>
- <P>Voc&ecirc; pode fazer o download do PsqlODBC em <A href="http://gborg.postgresql.org/project/psqlodbc/projdisplay.php">http://gborg.postgresql.org/project/psqlodbc/projdisplay.php</A>.</P>
+ <p>A instala&ccedil;&atilde;o do PostgreSQL inclui somente as interfaces <SMALL>C</SMALL> e
+ <SMALL>C</SMALL> embutida. Todas as outras interfaces s&atilde;o projetos independentes
+ que podem ser obtidos separadamente; sendo separados permitem que eles tenham
+ suas pr&oacute;prias datas de lan&ccedil;amento e time de desenvolvedores.</P>
- <P>OpenLink <SMALL>ODBC</SMALL> pode ser conseguido em <A href="http://www.openlinksw.com/">http://www.openlinksw.com</A>. Ele trabalha com cliente <SMALL>ODBC</SMALL> padr&atilde;o, ent&atilde;o voc&ecirc; poder&aacute; ter o <SMALL>ODBC</SMALL> para PostgreSQL dispon&iacute;vel em toda plataforma que eles suportam (Win, Mac, Unix, VMS).</P>
- <P>Eles provavelmente vender&atilde;o seu produto para pessoas que precisam de um suporte de qualidade, mas uma vers&atilde;o gratuita estar&aacute; sempre dispon&iacute;vel. Por favor envie perguntas para <A href="mailto:[email protected]">[email protected]</A>.</P>
+ <P>Algumas linguagens de programa&ccedil;&atilde;o como <SMALL>PHP</SMALL> incluem uma
+ interface para PostgreSQL. Interfaces para linguagens como Perl,
+ <SMALL>TCL</SMALL>, Python e muitas outras est&atilde;o dispon&iacute;veis em
+ <a href="http://gborg.postgresql.org">http://gborg.postgresql.org</A>
+ na se&ccedil;&atilde;o de <I>Drivers/Interfaces</I> ou via busca na Internet.
+ </P>
- <H4><A name="2.2">2.2</A>) Quais ferramentas est&atilde;o dispon&iacute;veis para utilizar o PostgreSQL com p&aacute;ginas Web?</H4>
+ <H3 id="item2.2">2.2) Quais ferramentas est&atilde;o dispon&iacute;veis para utilizar o PostgreSQL com p&aacute;ginas Web?</H3>
<P>Uma boa introdu&ccedil;&atilde;o para p&aacute;ginas web que utilizam bancos de dados pode ser vista em:
<A href="http://www.webreview.com">http://www.webreview.com</A></P>
- <P>Para integra&ccedil;&atilde;o na Web, PHP &eacute; uma excelente interface. Ele est&aacute; em <A
- href="http://www.php.net">http://www.php.net</A>.</P>
-
- <P>Para casos complexos, muitos usam a Interface Perl e CGI.pm ou mod_perl.</P>
-
- <H4><A name="2.3">2.3</A>) O PostgreSQL tem interfaces gr&aacute;ficas para iteragir com o usu&aacute;rio?</H4>
-
- <P>Sim, h&aacute; v&aacute;rias interfaces gr&aacute;ficas para PostgreSQL dispon&iacute;veis.
- Entre elas o PgAccess <A href="http://www.pgaccess.org">
- http://www.pgaccess.org</A>), pgAdmin III (<A
- href="http://www.pgadmin.org">http://www.pgadmin.org</A>, RHDB Admin (<A
- href="http://sources.redhat.com/rhdb/">http://sources.redhat.com/rhdb/
- </A>), TORA (<a href="http://www.globecom.net/tora/">http://www.globecom.net/tora/</a>,
- parcialmente comercial) e o Rekall (<A href="http://www.thekompany.com/products/rekall/">
- http://www.thekompany.com/products/rekall/</A>, propriet&aacute;ria). H&aacute;
- tamb&eacute;m o PhpPgAdmin (<A href="http://phppgadmin.sourceforge.net/">
- http://phppgadmin.sourceforge.net/ </A>), uma interface web para
- PostgreSQL.</P>
-
- <P>Veja <A href="http://techdocs.postgresql.org/guides/GUITools">http://techdocs.postgresql.org/guides/GUITools</A> para uma lista mais detalhada.</P>
-
- <H4><A name="2.4">2.4</A>) Quais linguagens est&atilde;o dispon&iacute;veis para comunicar-se com PostgreSQL?</H4>
+ <P>Para integra&ccedil;&atilde;o na Web, PHP (<A
+ href="http://www.php.net">http://www.php.net</A>)
+ &eacute; uma excelente interface.</P>
- <P>Muitas linguagens de programa&ccedil;&atilde;o populares cont&eacute;m uma interface para PostgreSQL. Verifique a lista de extens&otilde;es (m&oacute;dulos) da sua linguagem de programa&ccedil;&atilde;o.</P>
+ <P>Para casos complexos, muitos usam a Interface Perl e DBD::Pg com CGI.pm
+ ou mod_perl.</P>
- <P>As seguintes interfaces est&atilde;o inclu&iacute;das na distribui&ccedil;&atilde;o do PostgreSQL:</P>
+ <H3 id="item2.3">2.3) O PostgreSQL tem interfaces gr&aacute;ficas para iteragir com o usu&aacute;rio?</H3>
- <UL>
- <LI>C (libpq)</LI>
+ <P>H&aacute; um vasto n&uacute;mero de Ferramentas Gr&aacute;ficas (GUI), que est&atilde;o dispon&iacute;veis
+ para o PostgreSQL, comerciais e de desenvolvedores de c&oacute;digo aberto. Uma
+ lista detalhada pode ser encontrada em <A href="http://www.postgresql.org/docs/techdocs.54">
+ Documenta&ccedil;&atilde;o da Comunidade PostgreSQL</A></P>
- <LI>Embedded C (ecpg)</LI>
-
- <LI>Java (jdbc)</LI>
-
- <LI>Python (PyGreSQL)</LI>
-
- <LI>TCL (libpgtcl)</LI>
-
- </UL>
- <P>Interfaces adicionais est&atilde;o dispon&iacute;veis em
- <A href="http://gborg.postgresql.org">http://gborg.postgresql.org</A>
- na se&ccedil;&atilde;o de <I>Drivers/Interfaces</I>.
- </P>
<HR>
<H2 align="center">Perguntas Administrativas</H2>
- <H4><A name="3.1">3.1</A>) Como eu instalo o PostgreSQL em um local diferente de <I>/usr/local/pgsql</I>?</H4>
+ <H3 id="item3.1">3.1) Como eu instalo o PostgreSQL em um local diferente de <I>/usr/local/pgsql</I>?</H3>
<P>Especifique a op&ccedil;&atilde;o <I>--prefix</I> quando executar o <I>configure</I>.</P>
- <H4><A name="3.2">3.2</A>) Quando eu inicio o <I>postmaster</I>, eu recebo a mensagem
- <I>Bad System Call</I> ou uma descarga de mem&oacute;ria (core dump). Por que?</H4>
-
- <P>Isto pode ser v&aacute;rios problemas, mas primeiro verifique se voc&ecirc; tem extens&otilde;es do System V instaladas no seu kernel. PostgreSQL requer suporte no kernel a mem&oacute;ria compartilhada e sem&aacute;foros.</P>
-
- <H4><A name="3.3">3.3</A>) Quando eu tento iniciar o <I>postmaster</I>, eu recebo erros <I>IpcMemoryCreate</I>. Por que?</H4>
-
- <P>Voc&ecirc; n&atilde;o configurou a mem&oacute;ria compartilhada corretamente no seu kernel ou voc&ecirc; precisa aumentar a mem&oacute;ria compartilhada dispon&iacute;vel no seu kernel. A quantidade exata que voc&ecirc; precisa vai depender da arquitetura e de quantos buffers e processos do servidor voc&ecirc; configurou para o <I>postmaster</I>. Muitos sistemas, com o n&uacute;mero padr&atilde;o de buffers e processos, precisam de aproximadamente 1 MB. Veja a se&ccedil;&atilde;o <A href="http://www.postgresql.org/docs/current/static/kernel-resources.html">PostgreSQL Administrator's Guide/Server Run-time Environment/Managing Kernel Resources</A> para mais informa&ccedil;&atilde;o sobre mem&oacute;ria compartilhada e sem&aacute;foros.</P>
-
- <H4><A name="3.4">3.4</A>) Quando eu tento iniciar o <I>postmaster</I>, eu recebo erros <I>IpcSemaphoreCreate</I>. Por que?</H4>
-
- <P>Se a mensagem de erro &eacute; <I>IpcSemaphoreCreate: semget failed (No space left on device)</I> ent&atilde;o o seu kernel n&atilde;o est&aacute; configurado com o n&uacute;mero de sem&aacute;foros suficientes. O Postgres precisa de um sem&aacute;foro por processo do servidor. Uma solu&ccedil;&atilde;o tempor&aacute;ria &eacute; iniciar o <I>postmaster</I> com um limite pequeno de processos do servidor. Utilize <I>-N</I> com o par&acirc;metro menor do que o padr&atilde;o (32). Uma solu&ccedil;&atilde;o permanente seria aumentar os par&acirc;metros do kernel <SMALL>SEMMNS</SMALL> e <SMALL>SEMMNI</SMALL>.</P>
-
- <P>Sem&aacute;foros inoperantes podem tamb&eacute;m causar danos durante intenso acesso ao banco de dados.</P>
-
- <P>Se a mensagem &eacute; outra coisa, voc&ecirc; possivelmente n&atilde;o tem suporte a sem&aacute;foro configurado no seu kernel. Veja o Guia do Administrador para mais informa&ccedil;&atilde;o sobre mem&oacute;ria compartilhada e sem&aacute;foros.</P>
-
- <H4><A name="3.5">3.5</A>) Como eu controlo conex&otilde;es de outras m&aacute;quinas?</H4>
-
- <P>Por padr&atilde;o, o PostgreSQL s&oacute; permite conex&otilde;es da m&aacute;quina local utilizando soquetes de dom&iacute;nio Unix ou conex&otilde;es TCP/IP. Outras m&aacute;quinas n&atilde;o poder&atilde;o conectar-se a menos que voc&ecirc; modifique listen_addresses no postgresql.conf, <B>e</B> habilite a autentica&ccedil;&atilde;o por m&aacute;quina modificando o arquivo <I>$PGDATA/pg_hba.conf</I>.</P>
-
- <H4><A name="3.6">3.6</A>) Como eu ajusto o servidor de banco de dados para obter uma performance melhor?</H4>
-
- <P>Certamente, &iacute;ndices podem acelerar consultas. O comando <SMALL>EXPLAIN ANALYZE</SMALL> permite que voc&ecirc; veja como o PostgreSQL est&aacute; interpretando a consulta, e quais os &iacute;ndices s&atilde;o utilizados.</P>
-
- <P>Se voc&ecirc; est&aacute; fazendo muitos <SMALL>INSERTs</SMALL>, considere faz&ecirc;-los em lote utilizando o comando <SMALL>COPY</SMALL>. Isso &eacute; mais r&aacute;pido do que <SMALL>INSERTs</SMALL> individuais. Segundo, senten&ccedil;as que n&atilde;o est&atilde;o em um bloco de transa&ccedil;&atilde;o <SMALL>BEGIN WORK/COMMIT</SMALL> s&atilde;o consideradas com se estivessem em sua pr&oacute;pria transa&ccedil;&atilde;o. Considere executar v&aacute;rias senten&ccedil;as em um mesmo bloco de transa&ccedil;&atilde;o. Isso reduz a quantidade de transa&ccedil;&otilde;es. Tamb&eacute;m, considere remover e criar &iacute;ndices novamente quando estiver fazendo muitas mudan&ccedil;as nos dados.</P>
-
- <P>H&aacute; v&aacute;rias op&ccedil;&otilde;es de ajuste em <a href="http://www.postgresql.org/docs/current/static/runtime.html">Administration Guide/Server Run-time Environment/Run-time Configuration</a>. Voc&ecirc; pode desabilitar o <I>fsync()</I> utilizando a op&ccedil;&atilde;o <i>fsync</i>. Isso ir&aacute; impedir que <I>fsync()</I>s enviem os dados para disco ap&oacute;s cada transa&ccedil;&atilde;o.</P>
-
- <P>Voc&ecirc; pode utilizar a op&ccedil;&atilde;o <I>shared_buffers</I> para aumentar o n&uacute;mero de buffers de mem&oacute;ria compartilhada utilizados pelos processos do servidor. Se voc&ecirc; definiu este par&acirc;metro com um valor muito alto, o <I>postmaster</I> pode n&atilde;o iniciar porque voc&ecirc; excedeu o limite de espa&ccedil;o de mem&oacute;ria compartilhada do kernel. Cada buffer &eacute; de 8K e o padr&atilde;o &eacute; de 1000 buffers.</P>
-
- <P>Voc&ecirc; tamb&eacute;m pode utilizar a op&ccedil;&atilde;o <I>sort_mem</I> (no PostgreSQL 8.0: <I>work_mem</I>) para aumentar a m&aacute;xima quantidade de mem&oacute;ria utilizada pelo processo servidor para cada ordena&ccedil;&atilde;o tempor&aacute;ria. O valor padr&atilde;o &eacute; 1024 (ou seja 1MB).</P>
-
- <P>Voc&ecirc; tamb&eacute;m pode utilizar o comando <SMALL>CLUSTER</SMALL> para agrupar dados em tabelas para combinar um &iacute;ndice. Veja o manual sobre <SMALL>CLUSTER</SMALL> para mais informa&ccedil;&atilde;o.</P>
-
-
- <H4><A name="3.7">3.7</A>) Quais caracter&iacute;sticas de depura&ccedil;&atilde;o est&atilde;o dispon&iacute;veis?</H4>
-
- <P>PostgreSQL tem v&aacute;rias caracter&iacute;sticas que relatam informa&ccedil;&otilde;es que podem ser valiosas para fins de depura&ccedil;&atilde;o.</P>
-
- <P>Primeiro, execute o <I>configure</I> com a op&ccedil;&atilde;o --enable-cassert, muitos <I>assert()</I>s monitoram o progresso do n&uacute;cleo (backend) e finalizam o programa quando alguma coisa inesperada acontece.</P>
-
- <P>O <I>postmaster</I> e o <I>postgres</I> tem v&aacute;rias op&ccedil;&otilde;es de depura&ccedil;&atilde;o dispon&iacute;veis. Primeiro, quando iniciar o <I>postmaster</I>, tenha certeza que voc&ecirc; enviou a saida padr&atilde;o e a sa&iacute;da de erro padr&atilde;o para um arquivo de log, como em:</P>
-<PRE>
- cd /usr/local/pgsql
- ./bin/postmaster &gt;server.log 2&gt;&amp;1 &amp;
-</PRE>
-
-<P>Isso ir&aacute; criar um arquivo server.log no diret&oacute;rio raiz do PostgreSQL. Este arquivo conter&aacute; informa&ccedil;&otilde;es &uacute;teis sobre problemas ou erros encontrados pelo servidor. O <I>Postmaster</I> tem uma op&ccedil;&atilde;o <I>-d</I> que permite que informa&ccedil;&otilde;es mais detalhadas sejam relatadas. A op&ccedil;&atilde;o <I>-d</I> &eacute; acompanhada por um n&uacute;mero que indica o n&iacute;vel de depura&ccedil;&atilde;o. Esteja alerta de que alto n&iacute;vel de depura&ccedil;&atilde;o gera grandes arquivos de log.</P>
-
-<P>Se o <I>postmaster</I> n&atilde;o est&aacute; sendo executado, voc&ecirc; pode executar o n&uacute;cleo do <I>postgres</I> a partir da linha de comando, e digitar a sua senten&ccedil;a <SMALL>SQL</SMALL> diretamente. Isso &eacute; recomendado <B>somente</B> para fins de depura&ccedil;&atilde;o. Note que uma nova linha termina a consulta, e n&atilde;o um ponto-e-v&iacute;rgula. Se voc&ecirc; compilou com s&iacute;mbolos de depura&ccedil;&atilde;o, voc&ecirc; pode utilizar um depurador para ver o que est&aacute; acontecendo. Como o n&uacute;cleo (backend) n&atilde;o foi iniciado a partir do <I>postmaster</I>, ele n&atilde;o est&aacute; executando em um ambiente id&ecirc;ntico e problemas de itera&ccedil;&atilde;o com o n&uacute;cleo/travamento n&atilde;o podem ser reproduzidos.</P>
-
-<P>Se o <i>postmaster</i> est&aacute; sendo executado, inicie o <i>psql</i> em uma janela, e ent&atilde;o encontre o <small>PID</small> do processo <i>postgres</i> utilizado pelo <i>psql</i> utilizando <code>SELECT pg_backend_pid()</code>. Utilize um depurador para anexar ao <small>PID</small> do <i>postgres</i>. Voc&ecirc; pode definir pontos de parada (<i>breakpoints</i>) no depurador e digitar consultas no <i>psql</i>. Se voc&ecirc; est&aacute; depurando a inicializa&ccedil;&atilde;o do <i>postgres</i>, voc&ecirc; pode definir PGOPTIONS="-W n" e ent&atilde;o iniciar o <i>psql</i>. Isto retardar&aacute; a inicializa&ccedil;&atilde;o por <i>n</i> segundos ent&atilde;o voc&ecirc; pode anexar o depurador ao processo, definir quaisquer pontos de parada e continuar pela sequ&ecirc;ncia de inicializa&ccedil;&atilde;o.</p>
-
-<P>H&aacute; v&aacute;rias vari&aacute;veis de configura&ccedil;&atilde;o do servidor <code>log_*</code> que habilitam a exibi&ccedil;&atilde;o de estat&iacute;sticas que podem ser muito &uacute;teis para depura&ccedil;&atilde;o e medidas de performance.</P>
-
-<P>Voc&ecirc; tamb&eacute;m pode compilar com perfil para ver que fun&ccedil;&otilde;es est&atilde;o demandando tempo de execu&ccedil;&atilde;o. Os arquivo de perfil do n&uacute;cleo (backend) ser&atilde;o colocados no diret&oacute;rio <I>pgsql/data/base/dbname</I>. O arquivo de perfil do cliente ser&aacute; colocado no diret&oacute;rio atual do cliente. O Linux requer uma compila&ccedil;&atilde;o com <I>-DLINUX_PROFILE</I> para cria&ccedil;&atilde;o dos perfis.</P>
-
- <H4><A name="3.8">3.8</A>) Por que eu recebo <I>"Sorry, too many clients"</I> quando eu tento conectar?</H4>
+ <H3 id="item3.2">3.2) Como eu controlo conex&otilde;es de outras m&aacute;quinas?</H3>
+
+ <P>Por padr&atilde;o, o PostgreSQL s&oacute; permite conex&otilde;es da m&aacute;quina local utilizando soquetes de dom&iacute;nio Unix ou conex&otilde;es TCP/IP. Outras m&aacute;quinas n&atilde;o poder&atilde;o conectar-se a menos que voc&ecirc; modifique <I>listen_addresses</I> no <I>postgresql.conf</I>, habilite a autentica&ccedil;&atilde;o por m&aacute;quina modificando o arquivo <I>$PGDATA/pg_hba.conf</I> e reinicie o servidor PostgreSQL.</P>
+
+ <H3 id="item3.3">3.3) Como eu ajusto o servidor de banco de dados para obter uma performance melhor?</H3>
+
+ <P>H&aacute; tr&ecirc;s grandes &aacute;reas para melhorar a performance em potencial:</P>
+
+ <DL>
+ <DT><B>Mudan&ccedil;a de Consultas</B></DT>
+
+ <DD>Isto involve modificar consultas para obter melhor performance:
+ <ul>
+ <li>Cria&ccedil;&atilde;o de &iacute;ndices, incluir express&otilde;es e &iacute;ndices parciais</li>
+ <li>Utiliza&ccedil;&atilde;o o COPY ao inv&eacute;s de m&uacute;ltiplos comandos <SMALL>INSERT</SMALL>s</li>
+ <li>Agrupamento de m&uacute;ltiplos comandos em uma &uacute;nica transa&ccedil;&atilde;o para diminuir
+ a despesa com efetiva&ccedil;&otilde;es (commit)</li>
+ <li>Utiliza&ccedil;&atilde;o do <SMALL>CLUSTER</SMALL> quando recuperar v&aacute;rios registros de
+ um &iacute;ndice</li>
+ <li>Utiliza&ccedil;&atilde;o do <SMALL>LIMIT</SMALL> para retornar um subconjunto da sa&iacute;da
+ da consulta</li>
+ <li>Utiliza&ccedil;&atilde;o de Consultas preparadas</li>
+ <li>Utiliza&ccedil;&atilde;o de <SMALL>ANALYZE</SMALL> para manter as estat&iacute;sticas do
+ otimizador corretas</li>
+ <li>Utiliza&ccedil;&atilde;o regular do <SMALL>VACUUM</SMALL> ou <I>pg_autovacuum</I></li>
+ <li>Remo&ccedil;&atilde;o de &iacute;ndices durante grande mudan&ccedil;a de dados</li>
+ </ul><BR>
+ <BR>
+ </DD>
+
+ <DT><B>Configura&ccedil;&atilde;o do Servidor</B></DT>
+
+ <DD>Um grande n&uacute;mero de configura&ccedil;&otilde;es que afetam a performance.
+ Para obter detalhes adicionais, veja <a href=
+ "http://www.postgresql.org/docs/current/static/runtime.html">
+ Administration Guide/Server Run-time Environment/Run-time
+ Configuration</a> para listagem completa, e para
+ coment&aacute;rios veja <a href=
+ "http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html">
+ http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html</a>
+ e <a href="http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html">
+ http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html</a>.
+ <BR>
+ <BR>
+ </DD>
+
+ <DT><B>Sele&ccedil;&atilde;o do Hardware</B></DT>
+
+ <DD>O efeito do hardware na performance &eacute; detalhado em
+ <a href="http://www.powerpostgresql.com/PerfList/">
+ http://www.powerpostgresql.com/PerfList/</a> e <a
+ href="http://momjian.us/main/writings/pgsql/hw_performance/index.html">
+ http://momjian.us/main/writings/pgsql/hw_performance/index.html</a>.
+ <BR>
+ <BR>
+ </DD>
+ </DL>
- <P>Voc&ecirc; precisa aumentar o limite do <I>postmaster</I> de quantos processos do servidor concorrentes ele pode iniciar.</P>
+ <H3 id="item3.4">3.4) Quais caracter&iacute;sticas de depura&ccedil;&atilde;o est&atilde;o dispon&iacute;veis?</H3>
- <P>O limite padr&atilde;o &eacute; de 32 processos. Voc&ecirc; pode aument&aacute;-lo reiniciando o <I>postmaster</I> com o valor conveniente de <I>-N</I> ou modificar o <I>postgresql.conf</I>.</P>
+ <P>H&aacute; muitas vari&aacute;veis de configura&ccedil;&atilde;o do servidor <CODE>log_*</CODE>
+ que habilitam a exibi&ccedil;&atilde;o de consultas e estat&iacute;sticas que podem ser
+ muito &uacute;teis para depura&ccedil;&atilde;o e medidas de performance.</P>
- <P>Note que se voc&ecirc; definir o <I>-N</I> com um valor maior do que 32, voc&ecirc; tamb&eacute;m deve aumentar <I>-B</I> cujo padr&atilde;o &eacute; 64; <I>-B</I> deve ser pelo menos duas vezes <I>-N</I>, e provavelmente deve ser mais do que isso para uma melhor performance. Para um grande n&uacute;mero de processos do servidor, voc&ecirc; tamb&eacute;m precisa aumentar v&aacute;rios par&acirc;metros de configura&ccedil;&atilde;o do kernel do Unix. Coisas para serem observadas incluem o tamanho m&aacute;ximo de blocos de mem&oacute;ria compartilhada, <SMALL>SHMMAX;</SMALL> o n&uacute;mero m&aacute;ximo de sem&aacute;foros, <SMALL>SEMMNS</SMALL> e <SMALL>SEMMNI;</SMALL> o n&uacute;mero m&aacute;ximo de processos, <SMALL>NPROC;</SMALL> o n&uacute;mero m&aacute;ximo de processos por usu&aacute;rio, <SMALL>MAXUPRC;</SMALL> e o n&uacute;mero m&aacute;ximo de arquivos abertos, <SMALL>NFILE</SMALL> e <SMALL>NINODE</SMALL>. A raz&atilde;o na qual o PostgreSQL tem um limite de n&uacute;mero de processos do servidor permitidos &eacute; para que o seu sistema n&atilde;o fique sem recursos dispon&iacute;veis.</P>
+ <H3 id="item3.5">3.5) Por que eu recebo <I>"Sorry, too many clients"</I> quando eu tento conectar?</H3>
- <H4><A name="3.9">3.9</A>) O que est&aacute; no diret&oacute;rio <I>pgsql_tmp</I>?</H4>
+ <P>Voc&ecirc; atingiu o limite padr&atilde;o que &eacute; de 100 sess&otilde;es. Voc&ecirc;
+ precisa aumentar o limite do <I>postmaster</I>, que diz
+ quantos processos servidor concorrentes ele pode iniciar, alterando
+ o valor <I>max_connections</I> no <I>postgresql.conf</I> e
+ reiniciando o <I>postmaster</I>.</P>
- <P>Este diret&oacute;rio cont&eacute;m arquivos tempor&aacute;rios gerados pelo executor de uma consulta. Por exemplo, se uma ordena&ccedil;&atilde;o &eacute; necess&aacute;ria para satisfazer um <SMALL>ORDER BY</SMALL> e a ordena&ccedil;&atilde;o requer mais espa&ccedil;o do que o par&acirc;metro <I>-S</I> do servidor permite, ent&atilde;o arquivos tempor&aacute;rios s&atilde;o criados para abrigar os dados extras.</P>
- <P>Os arquivos tempor&aacute;rios geralmente s&atilde;o apagados automaticamente, mas podem persistir caso o servidor termine anormalmente durante a ordena&ccedil;&atilde;o. Uma parada e um rein&iacute;cio do <I>postmaster</I> remover&aacute; os arquivos destes diret&oacute;rios.</P>
+ <H3 id="item3.6">3.6) Qual &eacute; o processo de atualiza&ccedil;&atilde;o do PostgreSQL?</H3>
- <H4><A name="3.10">3.10</A>) O que eu preciso fazer para exportar e importar durante a atualiza&ccedil;&atilde;o entre vers&otilde;es do PostgreSQL?</H4>
+ <P>O time do PostgreSQL faz somente pequenas mudan&ccedil;as entre vers&otilde;es corretivas, ent&atilde;o atualizar da vers&atilde;o 7.4.8 para 7.4.9 n&atilde;o requer uma exporta&ccedil;&atilde;o e uma importa&ccedil;&atilde;o; basta para o servidor de banco de dados, instalar os bin&aacute;rios atualizados e reiniciar o servidor.</P>
- <P>O time do PostgreSQL faz somente pequenas mudan&ccedil;as entre vers&otilde;es menores, ent&atilde;o atualizar da vers&atilde;o 7.2 para 7.2.1 n&atilde;o requer uma exporta&ccedil;&atilde;o e uma importa&ccedil;&atilde;o. Contudo, vers&otilde;es maiores (i.e. da 7.2 para 7.3) geralmente muda-se o formato interno das tabelas de sistema e dos arquivo de dados. Essas mudan&ccedil;as geralmente s&atilde;o complexas, ent&atilde;o n&oacute;s n&atilde;o mantemos compatibilidade para os arquivos de dados. Uma exporta&ccedil;&atilde;o em um formato gen&eacute;rico que pode ser importada utilizando o novo formato interno.</P>
+ <P>Todos os usu&aacute;rios devem atualizar para as vers&otilde;es corretivas mais recentes
+ assim que elas estiverem dispon&iacute;veis. Enquanto cada atualiza&ccedil;&atilde;o tem algum risco,
+ vers&otilde;es corretivas do PostgreSQL s&atilde;o projetadas para corrigir somente bugs comuns
+ com um risco m&iacute;nimo. A comunidade considera <i>n&atilde;o</i> atualizar mais
+ perigoso do que atualizar.</P>
- <P>Em vers&otilde;es onde o formato em disco n&atilde;o muda, o script <I>pg_upgrade</I> pode ser utilizado para atualizar sem precisar de um dump/restore. As notas da vers&atilde;o mencionam se <I>pg_upgrade</I> est&aacute; dispon&iacute;vel para a vers&atilde;o.</P>
+ <P>Vers&otilde;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&ccedil;as geralmente s&atilde;o complexas, ent&atilde;o n&oacute;s n&atilde;o mantemos compatibilidade para os arquivos de dados. Uma exporta&ccedil;&atilde;o/importa&ccedil;&atilde;o de um banco de dados &eacute; necess&aacute;ria para atualiza&ccedil;&otilde;es entre vers&otilde;es.</P>
- <H4><A name="3.11">3.11</A>) Que tipo de hardware eu devo usar?</H4>
+ <H3 id="item3.7">3.7) Que tipo de hardware eu devo usar?</H3>
- <P>Por causa do hardware de PC ser em sua maioria compat&iacute;vel, pessoas tendem a acreditar que todos os hardwares de PC satilde;o de mesma qualidade. Natilde;o &eacute; verdade. ECC RAM, SCSI e placas m&atilde;e de qualidade s&atilde;o mais confi&aacute;veis e t&ecirc;m uma melhor performance do que hardwares mais baratos. O PostgreSQL executar&aacute; em quase todo hardware, mas se a confiabilidade e a performance forem importantes &eacute; prudente pesquisar sobre as op&ccedil;&otilde;es de hardware. Nossas listas de discuss&atilde;o podem ser usadas para discutir op&ccedil;&otilde;es de hardware e dilemas.</P>
+ <P>Por causa do hardware de PC ser em sua maioria compat&iacute;vel, pessoas tendem a acreditar que todos os hardwares de PC s&atilde;o de mesma qualidade. N&atilde;o &eacute; verdade. ECC RAM, SCSI e placas m&atilde;e de qualidade s&atilde;o mais confi&aacute;veis e t&ecirc;m uma melhor performance do que hardwares mais baratos. O PostgreSQL executar&aacute; em quase todo hardware, mas se a confiabilidade e a performance forem importantes &eacute; prudente pesquisar sobre as op&ccedil;&otilde;es de hardware. Nossas listas de discuss&atilde;o podem ser usadas para discutir op&ccedil;&otilde;es de hardware e dilemas.</P>
<HR>
<H2 align="center">Perguntas Operacionais</H2>
- <H4><A name="4.1">4.1</A>) Qual &eacute; a diferen&ccedil;a entre cursores bin&aacute;rios e normais?</H4>
-
- <P>Veja o comando <SMALL>DECLARE</SMALL> no manual para uma descri&ccedil;&atilde;o.</P>
-
- <H4><A name="4.2">4.2</A>) Como eu fa&ccedil;o um <SMALL>SELECT</SMALL> somente dos primeiros registros de uma consulta? Um registro rand&ocirc;mico?</H4>
+ <H3 id="item4.1">4.1) Como eu fa&ccedil;o um <SMALL>SELECT</SMALL> somente dos primeiros registros de uma consulta? Um registro rand&ocirc;mico?</H3>
- <P>Veja o manual do <SMALL>FETCH</SMALL>, ou utilize
- <SMALL>SELECT</SMALL> ... <SMALL>LIMIT</SMALL>....</P>
-
- <P>Toda a consulta tem que ser avaliada, mesmo se voc&ecirc; s&oacute; quer os primeiros registros. Considere utilizar uma consulta que tenha um <SMALL>ORDER BY</SMALL>. Se h&aacute; um &iacute;ndice que combina com o <SMALL>ORDER BY</SMALL>, o PostgreSQL pode ser capaz de avaliar somente os primeiros registros requisitados, ou toda consulta tem que ser avaliada at&eacute; que os registros desejados tenham sido gerados.</P>
-
- <P>Para obter um registro rand&ocirc;mico, utilize:</P>
+ <P>Para obter somente alguns registros, se voc&ecirc; sabe o n&uacute;mero de
+ registros necess&aacute;rios ao executar o <SMALL>SELECT</SMALL> utilize
+ o <SMALL>LIMIT</SMALL>. Se um &iacute;ndice corresponde no <SMALL>ORDER
+ BY</SMALL> &eacute; poss&iacute;vel que a consulta toda n&atilde;o tenha que ser
+ executada. Se voc&ecirc; n&atilde;o sabe o n&uacute;mero de registros ao executar o
+ <SMALL>SELECT</SMALL>, utilize um cursor e o <SMALL>FETCH</SMALL>.</P>
+
+ <P>Para <SMALL>obter</SMALL> um registro rand&ocirc;mico, utilize:</P>
<PRE>
SELECT col
FROM tab
@@ -551,214 +517,243 @@ H&aacute; tamb&eacute;m uma lista de discuss&atilde;o dos desenvolvedores dispon
LIMIT 1;
</PRE>
-<H4><A name="4.3">4.3</A>) Como eu obtenho a lista de tabelas ou outras coisas que eu posso ver no <I>psql</I>?</h4>
+ <H3 id="item4.2">4.2) Como eu descubro quais tabelas, &iacute;ndices, bancos de dados e usu&aacute;rios est&atilde;o definidos? Como eu vejo as consultas utilizadas pelo <I>psql</I> para mostr&aacute;-los?</H3>
-<P>Utilize o comando \dt para ver tabelas no <I>psql</I>. Para obter uma lista completa de
-comandos no psql voc&ecirc; pode utilizar \?. Alternativamente
-voc&ecirc; pode ler o c&oacute;digo-fonte do <I>psql</I> no arquivo <I>pgsql/src/bin/psql/describe.c</I>. Ele cont&eacute;m comandos <SMALL>SQL</SMALL> que geram a sa&iacute;da para os comandos do psql. Voc&ecirc; tamb&eacute;m pode iniciar o <I>psql</I> com a op&ccedil;&atilde;o <I>-E</I> ent&atilde;o ser&atilde;o mostradas as consultas utilizadas para executar os comandos que voc&ecirc; digitou. PostgreSQL tamb&eacute;m fornece uma interface para o INFORMATION SCHEMA <SMALL>SQLi</SMALL> na qual voc&ecirc; pode consultar informa&ccedil;&otilde;es sobre o banco de dados.</P>
+ <P>Utilize o comando \dt para ver tabelas no <I>psql</I>. Para obter
+ uma lista completa dos comandos no psql voc&ecirc; pode utilizar \?.
+ Alternativamente, voc&ecirc; pode ler o c&oacute;digo-fonte do <I>psql</I> no arquivo
+ <I>pgsql/src/bin/psql/describe.c</I>, ele cont&eacute;m os comandos <SMALL>SQL</SMALL>
+ que geram a sa&iacute;da para os comandos de contrabarra do <I>psql</I>. Voc&ecirc;
+ tamb&eacute;m pode iniciar o <I>psql</I> com a op&ccedil;&atilde;o <I>-E</I> para que as consultas
+ utilizadas para executar os comandos que voc&ecirc; informou seja exibida.
+ O PostgreSQL tamb&eacute;m fornece uma inteface compat&iacute;vel com <SMALL>SQL</SMALL> do
+ INFORMATION SCHEMA que voc&ecirc; pode consultar para obter informa&ccedil;&atilde;o sobre o
+ banco de dados.</P>
- <H4><A name="4.4">4.4</A>) Como eu removo uma coluna de uma tabela ou mudo o seu tipo de dados?</H4>
+ <P>H&aacute; tamb&eacute;m tabelas do sistema que come&ccedil;am com <I>pg_</I> que os descrevem
+ tamb&eacute;m.</P>
- <P>A funcionalidade <SMALL>DROP COLUMN</SMALL> foi adicionada a vers&atilde;o 7.3 com comando
- <SMALL>ALTER TABLE DROP COLUMN</SMALL>. Em vers&otilde;es anteriores, voc&ecirc; pode fazer isto:</P>
-<PRE>
- BEGIN;
- LOCK TABLE old_table;
- SELECT ... -- selecione todas colunas mas n&atilde;o aquela que voc&ecirc; quer remover
- INTO TABLE new_table
- FROM old_table;
- DROP TABLE old_table;
- ALTER TABLE new_table RENAME TO old_table;
- COMMIT;
-</PRE>
+ <P>Utilizando o <I>psql -l</I> listar&aacute; todos os bancos de dados.</P>
-<P>Para alterar o tipo de dados de uma coluna, fa&ccedil;a isto:</P>
+ <P>Veja tamb&eacute;m o arquivo <I>pgsql/src/tutorial/syscat.source</I>. Ele
+ ilustra muitos dos comandos <SMALL>SELECT</SMALL>s necess&aacute;rios para obter
+ informa&ccedil;&atilde;o das tabelas de sistema do banco de dados.</P>
+
+ <H3 id="item4.3">4.3) Como voc&ecirc; muda o tipo de dado de uma coluna?</H3>
+
+ <P>Mudar o tipo de dado de uma coluna pode ser feito facilmente na vers&atilde;o 8.0
+ ou superior com <SMALL>ALTER TABLE ALTER COLUMN TYPE</SMALL>.</P>
+
+ <P>Em vers&otilde;es anteriores, fa&ccedil;a isso:</P>
<PRE>
BEGIN;
- ALTER TABLE tab ADD COLUMN new_col <I>new_data_type</I>;
- UPDATE tab SET new_col = CAST(old_col AS <I>new_data_type</I>);
- ALTER TABLE tab DROP COLUMN old_col;
+ ALTER TABLE tab ADD COLUMN col_nova <i>novo_tipo_dado</i>;
+ UPDATE tab SET col_nova = CAST(col_antiga AS <i>novo_tipo_dado</i>);
+ ALTER TABLE tab DROP COLUMN col_antiga;
COMMIT;
</PRE>
-<P>Voc&ecirc; pode querer executar o comando <I>VACUUM FULL tab</I> para recuperar o espa&ccedil;o em disco utilizado pelos registros expirados.</P>
-
- <H4><A name="4.5">4.5</A>) Qual &eacute; o tamanho m&aacute;ximo de um registro, uma tabela e um banco de dados?</H4>
+ <P>Voc&ecirc; pode ent&atilde;o querer fazer um <I>VACUUM FULL tab</I> para recuperar
+ o espa&ccedil;o em disco utilizado pelos registros expirados.</P>
- <P>Estes s&atilde;o os limites:</P>
-<PRE>
-Tamanho m&aacute;ximo de um banco de dados? ilimitado (existem bancos de dados de 32 TB)
-Tamanho m&aacute;ximo de uma tabela? 32 TB
-Tamanho m&aacute;ximo de um registro? 1.6TB
-Tamanho m&aacute;ximo de um campo? 1 GB
-N&uacute;mero m&aacute;ximo de registros em uma tabela? ilimitado
-N&uacute;mero m&aacute;ximo de colunas em uma tabela? 250-1600 dependendo dos tipos das colunas
-N&uacute;mero m&aacute;ximo de &iacute;ndices em uma tabela? ilimitado
-</PRE>
-
-&Eacute; claro, que eles n&atilde;o s&atilde;o ilimitados, mas limitados ao espa&ccedil;o em disco dispon&iacute;vel e espa&ccedil;o em mem&oacute;ria/swap. A Performance ser&aacute; penalizada quando estes valores se tornarem grandes.
-<P>O tamanho m&aacute;ximo de uma tabela com 32 TB n&atilde;o requer suporte a arquivos grandes do sistema operacional. Tabelas grandes s&atilde;o armazenadas como m&uacute;ltiplos arquivos de 1 GB ent&atilde;o o limite do sistema de arquivos n&atilde;o &eacute; importante.</P>
-<P>O tamanho m&aacute;ximo de uma tabela e o n&uacute;mero m&aacute;ximo de colunas pode ser quadruplicadas aumentando-se o tamanho dos blocos para 32k.</P>
+ <H3 id="item4.4">4.4) Qual &eacute; o tamanho m&aacute;ximo de um registro, uma tabela e um banco de dados?</H3>
- <H4><A name="4.6">4.6</A>) Quanto espa&ccedil;o em disco &eacute; necess&aacute;rio para armazenar dados de um arquivo texto?</H4>
+ <P>Estes s&atilde;o os limites:</P>
+<BLOCKQUOTE>
+<TABLE>
+<TR><TD>Tamanho m&aacute;ximo de um banco de dados?</TD><TD>ilimitado (existem bancos de dados de 32 TB)</TD></TR>
+<TR><TD>Tamanho m&aacute;ximo de uma tabela?</TD><TD>32 TB</TD></TR>
+<TR><TD>Tamanho m&aacute;ximo de um registro?</TD><TD>400 GB</TD></TR>
+<TR><TD>Tamanho m&aacute;ximo de um campo?</TD><TD>1 GB</TD></TR>
+<TR><TD>N&uacute;mero m&aacute;ximo de registros em uma tabela?</TD><TD>ilimitado</TD></TR>
+<TR><TD>N&uacute;mero m&aacute;ximo de colunas em uma tabela?</TD><TD>250-1600 dependendo dos tipos das colunas</TD></TR>
+<TR><TD>N&uacute;mero m&aacute;ximo de &iacute;ndices em uma tabela?</TD><TD>ilimitado</TD></TR>
+</TABLE>
+</BLOCKQUOTE>
+
+ <P>&Eacute; claro, que eles n&atilde;o s&atilde;o ilimitados, mas limitados
+ ao espa&ccedil;o em disco dispon&iacute;vel e espa&ccedil;o em mem&oacute;ria/swap.
+ A Performance ser&aacute; penalizada quando estes valores se tornarem grandes.</P>
+
+ <P>O tamanho m&aacute;ximo de uma tabela com 32 TB n&atilde;o requer suporte a
+ arquivos grandes do sistema operacional. Tabelas grandes s&atilde;o armazenadas
+ como m&uacute;ltiplos arquivos de 1 GB ent&atilde;o o limite do sistema de
+ arquivos n&atilde;o &eacute; importante.</P>
+
+ <P>O tamanho m&aacute;ximo de uma tabela, o tamanho de um registro e o n&uacute;mero
+ m&aacute;ximo de colunas podem ser quadruplicados aumentando-se o tamanho padr&atilde;o
+ do bloco para 32k. O tamanho m&aacute;ximo de uma tabela pode tamb&eacute;m ser aumentado utilizando
+ particionamento de tabela.</P>
+
+ <P>Uma limita&ccedil;&atilde;o &eacute; que &iacute;ndices n&atilde;o podem ser criados em colunas maiores do que
+ 2.000 caracteres. Felizmente, tais &iacute;ndices s&atilde;o raramente necess&aacute;rios. Unicidade &eacute;
+ melhor garantida por um &iacute;ndice de uma fun&ccedil;&atilde;o de um hash MD5 de uma coluna longa, e
+ indexa&ccedil;&atilde;o de texto longo permite a busca de palavras dentro da coluna.</P>
+
+ <H3 name="item4.5">4.5) Quanto espa&ccedil;o em disco &eacute; necess&aacute;rio para armazenar dados de um arquivo texto?</H3>
<P>Um banco de dados PostgreSQL ir&aacute; requerer at&eacute; cinco vezes a quantidade de espa&ccedil;o requerida para armazenar dados em um arquivo texto.</P>
- <P>Como um exemplo, considere um arquivo com 100.000 linhas contendo um inteiro e uma descri&ccedil;&atilde;o em cada linha. Suponha que o tamanho m&eacute;dio da descri&ccedil;&atilde;o &eacute; de vinte bytes. O arquivo ter&aacute; 2.8 MB. O tamanho do arquivo do banco de dados PostgreSQL que cont&eacute;m esses dados pode ser estimado em 6.4 MB:</P>
+ <P>Como um exemplo, considere um arquivo com 100.000 linhas contendo um inteiro e uma descri&ccedil;&atilde;o em cada linha. Suponha que o tamanho m&eacute;dio da descri&ccedil;&atilde;o &eacute; de vinte bytes. O arquivo ter&aacute; 2,8 MB. O tamanho do arquivo do banco de dados PostgreSQL que cont&eacute;m esses dados pode ser estimado em 5,6 MB:</P>
<PRE>
- 32 bytes: cada cabe&ccedil;alho de registro (aproximadamente)
+ 28 bytes: cada cabe&ccedil;alho de registro (aproximadamente)
24 bytes: um campo int e um campo texto
+ 4 bytes: ponteiro na p&aacute;gina para a tupla
-------------------------------------------
- 60 bytes por registro
+ 56 bytes por registro
O tamanho de uma p&aacute;gina de dados no PostgreSQL &eacute; 8192 bytes (8 KB), ent&atilde;o:
8192 bytes por p&aacute;gina
- ------------------------ = 136 registros por p&aacute;gina do banco de dados (arredondado para baixo)
- 60 bytes por registro
+ ------------------------ = 146 registros por p&aacute;gina do banco de dados (arredondado para baixo)
+ 56 bytes por registro
100000 registros de dados
- ---------------------------- = 735 p&aacute;ginas do banco de dados (arredondado para cima)
- 128 registros por p&aacute;gina
-
-735 p&aacute;ginas do banco de dados * 8192 bytes por p&aacute;gina = 6,021,120 bytes (6 MB)
-</PRE>
-<P>&Iacute;ndices n&atilde;o requerem muito espa&ccedil;o, mas cont&eacute;m dados que foram indexados, ent&atilde;o eles podem ocupar algum espa&ccedil;o.</P>
-
-<P><SMALL>NULL</SMALL>s s&atilde;o armazenados como bitmaps, ent&atilde;o eles utilizam muito pouco espa&ccedil;o.</P>
-
- <H4><A name="4.7">4.7</A>) Como eu descrubo quais tabelas, &iacute;ndices, bancos de dados e usu&aacute;rios est&atilde;o definidos?</H4>
-
- <P><I>psql</I> tem uma variadade de comandos com barra invertida que mostram tais informa&ccedil;&otilde;es. Utilize \? para v&ecirc;-los. H&aacute; tamb&eacute;m tabelas do sistema que come&ccedil;am com <I>pg_</I> e que os descrevem tamb&eacute;m. Tamb&eacute;m, <I>psql -l</I> listar&aacute; todos os bancos de dados.</P>
-
- <P>Veja tamb&eacute;m o arquivo <I>pgsql/src/tutorial/syscat.source</I>. Ele ilustra muitos <SMALL>SELECT</SMALL>s necess&aacute;rios para obter informa&ccedil;&atilde;o das tabelas do sistema de banco de dados.</P>
-
- <H4><A name="4.8">4.8</A>) Minhas consultas est&atilde;o lentas ou n&atilde;o est&atilde;o utilizando &iacute;ndices. Por que?</H4>
+ ---------------------------- = 685 p&aacute;ginas do banco de dados (arredondado para cima)
+ 146 registros por p&aacute;gina
- <p>&Iacute;ndices n&atilde;o s&atilde;o automaticamente utilizados por toda consulta. &Iacute;ndices s&oacute; s&atilde;o
- utilizados se uma tabela &eacute; maior do que o tamanho m&iacute;nimo e uma consulta
- seleciona somente uma porcentagem pequena de registros de uma tabela. Isto porque
- o acesso rand&ocirc;mico ao disco causado por uma busca por &iacute;ndice pode ser
- mais lento do que uma leitura ao longo da tabela ou uma busca sequencial.</p>
-
- <P>Para determinar se um &iacute;ndice pode ser utilizado, o PostgreSQL deve ter
- estat&iacute;sticas sobre a tabela. Estas estat&iacute;sticas s&atilde;o coletadas utilizando
- <SMALL>VACUUM ANALYZE</SMALL> ou simplesmente <SMALL>ANALYZE</SMALL>.
- Utilizando estat&iacute;sticas, o otimizador saber quantos registros h&aacute; na tabela
- e pode determinar melhor se um &iacute;ndice deve ser utilizado.
- Estat&iacute;sticas tamb&eacute;m s&atilde;o &uacute;teis para determinar a ordem de jun&ccedil;&atilde;o &oacute;tima e
- m&eacute;todos de jun&ccedil;&atilde;o. Cole&ccedil;&atilde;o de estat&iacute;sticas deve ser feita periodicamente
- a medida que o conte&uacute;do da tabela muda.</P>
-
- <P>&Iacute;ndices n&atilde;o s&atilde;o normalmente utilizados para <SMALL>ORDER BY</SMALL> ou
- para fazer jun&ccedil;&otilde;es. Uma busca sequencial seguida por uma ordena&ccedil;&atilde;o expl&iacute;cita &eacute;
- usualmente mais r&aacute;pida do que uma busca por &iacute;ndice em uma tabela grande.</P>
- Contudo, <SMALL>LIMIT</SMALL> combinado com <SMALL>ORDER BY</SMALL>
- frequentemente utilizar&aacute; um &iacute;ndice porque somente uma pequena por&ccedil;&atilde;o da tabela
- &eacute; retornada. De fato, embora MAX() e MIN() n&atilde;o utilizem &iacute;ndices,
- &eacute; poss&iacute;vel obter tais valores utilizando um &iacute;ndice com ORDER BY e LIMIT:
-
-<PRE>
- SELECT col
- FROM tab
- ORDER BY col [ DESC ]
- LIMIT 1;
+685 p&aacute;ginas do banco de dados * 8192 bytes por p&aacute;gina = 5.611.520 bytes (5,6 MB)
</PRE>
- <P>Se voc&ecirc; acredita que o otimizador est&aacute; incorreto ao escolher uma
- busca sequencial, utilize <CODE>SET enable_seqscan TO 'off'</CODE> e
- execute testes para ver se uma busca por &iacute;ndice &eacute; de fato &eacute; mais r&aacute;pida.</P>
-
- <P>Quando &eacute; utilizado operadores com curingas tais como <SMALL>LIKE</SMALL> ou
- <I>~</I>, &iacute;ndices s&oacute; podem ser utilizados em certas circunst&acirc;ncias:</P>
- <UL>
- <LI>O &iacute;n&iacute;cio de uma string de busca deve ser o in&iacute;cio da string, i.e.
- <UL>
- <LI>modelos no <SMALL>LIKE</SMALL> n&atilde;o devem come&ccedil;ar com <I>%</I>.</LI>
- <LI>modelos no <I>~</I> (express&atilde;o regular) n&atilde;o devem come&ccedil;ar com
- <I>^</I>.</LI>
- </UL></LI>
- <LI>A string de busca n&atilde;o pode iniciar com uma classe de caracteres,
- i.e. [a-e].</LI>
- <LI>Buscas que n&atilde;o diferenciam mai&uacute;sculas de min&uacute;sculas tais como <SMALL>ILIKE</SMALL> e
- <I>~*</I> n&atilde;o utilizam &iacute;ndices. Ao inv&eacute;s, utilize &iacute;ndices
- funcionais, que s&atilde;o descritos na se&ccedil;&atilde;o <A href="#4.12">4.12</A>.</LI>
- <LI>A localidade padr&atilde;o <I>C</I> deve ser utilizada durante o
- <i>initdb</i> porque n&atilde;o &eacute; poss&iacute;vel saber o pr&oacute;ximo/maior caracter
- em uma localidade que n&atilde;o seja a C. Voc&ecirc; pode criar um &iacute;ndice
- especial <tt>text_pattern_ops</tt> para tais casos que funcionam somente para
- indexa&ccedil;&atilde;o utilizando <tt>LIKE</tt>.
- </LI>
- </UL>
-
- <P>Em vers&otilde;es anteriores a 8.0, &iacute;ndices frequentemente n&atilde;o podiam ser usados a menos que os tipos de dados correspodessem aos tipos da coluna do &iacute;ndice. Isto &eacute; particularmente verdadeiro para &iacute;ndices de coluna int2, int8 e numeric.</P>
-
- <H4><A name="4.9">4.9</A>) Como eu vejo como o otimizador de consulta est&aacute; avaliando a minha consulta?</H4>
+ <P>&Iacute;ndices n&atilde;o requerem muito espa&ccedil;o, mas cont&eacute;m
+ dados que foram indexados, ent&atilde;o eles podem ocupar algum espa&ccedil;o.</P>
+
+ <P><SMALL>NULL</SMALL>s s&atilde;o armazenados como bitmaps, ent&atilde;o eles
+ utilizam muito pouco espa&ccedil;o.</P>
+
+ <H3 id="item4.6">4.6) Por que minhas consultas est&atilde;o lentas? Por que elas n&atilde;o est&atilde;o utilizando meus &iacute;ndices?</H3>
+
+ <P>&Iacute;ndices n&atilde;o s&atilde;o utilizados por toda consulta. &Iacute;ndices s&atilde;o utilizados somente
+ se a tabela &eacute; maior do que um tamanho m&iacute;nimo, e a consulta seleciona somente uma
+ pequena porcentagem dos registros da tabela. Isto porque o acesso rand&ocirc;mico ao
+ disco causado pela busca indexada pode ser mais lento do que uma leitura ao longo
+ da tabela ou busca sequencial.</P>
+
+ <P>Para determinar se um &iacute;ndice deveria ser utilizado, o PostgreSQL deve ter
+ estat&iacute;sticas sobre a tabela. Estas estat&iacute;sticas s&atilde;o coletadas utilizando o
+ <SMALL>VACUUM ANALYZE</SMALL> ou simplesmente o <SMALL>ANALYZE</SMALL>.
+ Utilizando estat&iacute;sticas, o otimizador sbae quantos registros est&atilde;o na tabela,
+ e pode melhor determinar se &iacute;ndices deveriam ser utilizados.
+ Estat&iacute;sticas tamb&eacute;m s&atilde;o &uacute;teis para determinar a ordem de jun&ccedil;&atilde;o &oacute;tima e m&eacute;todos
+ de jun&ccedil;&atilde;o. Cole&ccedil;&atilde;o de estat&iacute;sticas deveriam ser feitas periodicamente a
+ medida que o conte&uacute;do da tabela muda.</P>
+
+ <P>&Iacute;ndices n&atilde;o s&atilde;o normalmente utilizados para <SMALL>ORDER BY</SMALL> ou para
+ fazer jun&ccedil;&otilde;es. Uma busca sequencial seguido por uma ordena&ccedil;&atilde;o expl&iacute;cita &eacute;
+ geralmente mais r&aacute;pida do que uma busca indexada em uma tabela grande.
+ Contudo, <SMALL>LIMIT</SMALL> combinado com <SMALL>ORDER BY</SMALL>
+ frequentemente utilizar&aacute; &iacute;ndice porque somente uma pequena por&ccedil;&atilde;o da tabela
+ ser&aacute; retornada.</P>
+
+ <P>Se voc&ecirc; acredita que o otimizador est&aacute; incorreto ao escolher uma busca
+ sequencial, utilize <CODE>SET enable_seqscan TO 'off'</CODE> e execute a
+ consulta novamente para ver se uma busca indexada &eacute; realmente mais r&aacute;pida.</P>
+
+ <P>Ao utilizar operadores curinga tais como <SMALL>LIKE</SMALL> ou <I>~</I>,
+ &iacute;ndices podem ser utilizados somente em algumas condi&ccedil;&otilde;es:</P>
+ <UL>
+ <LI>O in&iacute;cio da cadeia de caracteres da busca deve ser iniciar com uma
+ cadeia de caracteres, i.e.
+ <UL>
+ <LI>modelos <SMALL>LIKE</SMALL> n&atilde;o devem iniciar com <I>%</I>.</LI>
+ <LI>modelos <I>~</I> (express&otilde;es regulares) devem iniciar com <I>^</I>.</LI>
+ </UL></LI>
+ <LI>A cadeia de caracteres utilizada na busca n&atilde;o pode iniciar com a classe de
+ caracteres e.g. [a-e].</LI>
+ <LI>Busca que n&atilde;o diferenciam mai&uacute;sculas de min&uacute;sculas tais como <SMALL>ILIKE</SMALL> e
+ <I>~*</I> n&atilde;o utilizam &iacute;ndices. Em vez disso, utilize &iacute;ndice de express&atilde;o, que
+ &eacute; descrito na se&ccedil;&atilde;o <a href="#item4.8">4.8</a>.</LI>
+ <LI>O idioma padr&ccedil;&atilde;o <I>C</I> deve ser usando durante o <i>initdb</i>
+ porque n&atilde;o &eacute; poss&iacute;vel saber o pr&oacute;ximo caracter em idiomas que n&atilde;o sejam o C.
+ Voc&ecirc; pode criar um &iacute;ndice especial <CODE>text_pattern_ops</CODE> para tais casos
+ que funcionam somente para indexa&ccedil;&atilde;o com <SMALL>LIKE</SMALL>.
+ </LI>
+ </UL>
+
+ <P>Em vers&otilde;es anteriores a 8.0, &iacute;ndices frequentemente n&atilde;o podem ser utilizados
+ a menos que os tipos de dados correspondam aos tipos de coluna do &iacute;ndice. Isto era
+ particularmente verdadeiro para &iacute;ndices de coluna int2, int8 e numeric.</P>
+
+ <H3 id="item4.7">4.7) Como eu vejo como o otimizador de consulta est&aacute; avaliando a minha consulta?</H3>
<P>Veja o comando <SMALL>EXPLAIN</SMALL> no manual.</P>
- <H4><A name="4.10">4.10</A>) O que &eacute; um &iacute;ndice de &aacute;rvore R?</H4>
-
- <P>Um &iacute;ndice de &aacute;rvore B &eacute; utilizado para indexa&ccedil;&atilde;o de dados espaciais. Um &iacute;ndice do tipo hash n&atilde;o pode manipular buscas em intervalos. Um &iacute;ndice de &aacute;rvore B manipula somente buscas em intervalos em uma dimens&atilde;o. Um &iacute;ndice de &aacute;rvore R pode manipular dados multidimensionais. Por exemplo, se um &iacute;ndice de &aacute;rvore R pode ser contruido em um atributo do tipo <I>point</I>, o sistema pode responder mais eficientemente consultas tais como "busque todos os pontos dentro dos limites do ret&acirc;ngulo."</P>
-
- <P>A pesquisa can&ocirc;nica que descreve o modelo original da &aacute;rvore R est&aacute; em:</P>
-
- <P>Guttman, A. "R-trees: A Dynamic Index Structure for Spatial
- Searching." Proceedings of the 1984 ACM SIGMOD Int'l Conf on Mgmt
- of Data, 45-57.</P>
-
- <P>Voc&ecirc; tamb&eacute;m pode encontrar esse documento em "Readings in Database Systems" do Stonebraker</P>
-
- <P>&Aacute;rvores R podem manipular pol&iacute;gonos e caixas. Na teoria, &aacute;rvores R podem ser extendidos para manipular um grande n&uacute;mero de dimens&otilde;es. Na pr&aacute;tica, extendendo &aacute;rvores R requer um pouco de trabalho e n&oacute;s n&atilde;o temos atualmente nenhuma documenta&ccedil;&atilde;o de como faz&eacute;-lo.</P>
-
- <H4><A name="4.11">4.11</A>) O que &eacute; um Otimizador Gen&eacute;tico de Consultas?</H4>
-
- <P>O m&oacute;dulo <SMALL>GEQO</SMALL> acelera a otimiza&ccedil;&atilde;o de consultas quando se faz uma jun&ccedil;&atilde;o de v&aacute;rias tabelas utilizando o conceito de Algoritmo Gen&eacute;tico (AG). Isso permite a manipula&ccedil;&atilde;o de consultas com muitas jun&ccedil;&otilde;es utilizando buscas n&atilde;o exaustivas.</P>
-
- <H4><A name="4.12">4.12</A>) Como eu fa&ccedil;o buscas com express&otilde;es regulares
+ <H3 id="item4.8">4.8) Como eu fa&ccedil;o buscas com express&otilde;es regulares
e buscas com express&otilde;es regulares sem diferenciar mai&uacute;sculas de min&uacute;sculas? Como eu
- utilizo um &iacute;ndice para buscas que n&atilde;o diferenciam mai&uacute;sculas de min&uacute;sculas?</H4>
+ utilizo um &iacute;ndice para buscas que n&atilde;o diferenciam mai&uacute;sculas de min&uacute;sculas?</H3>
-<P>O operador <I>~</I> faz avalia&ccedil;&atilde;o de express&otilde;es regulares, e <I>~*</I> faz avalia&ccedil;&atilde;o n&atilde;o sens&iacute;vel a mai&uacute;sculas de express&otilde;es regulares. A variante n&atilde;o sens&iacute;vel a mai&uacute;sculas do <SMALL>LIKE</SMALL> &eacute; chamada de <SMALL>ILIKE</SMALL>.</P>
+ <P>O operador <I>~</I> faz avalia&ccedil;&atilde;o de express&otilde;es regulares,
+ e <I>~*</I> faz avalia&ccedil;&atilde;o n&atilde;o sens&iacute;vel a mai&uacute;sculas
+ de express&otilde;es regulares. A variante n&atilde;o sens&iacute;vel a mai&uacute;sculas
+ do <SMALL>LIKE</SMALL> &eacute; chamada de <SMALL>ILIKE</SMALL>.</P>
-<P>Compara&ccedil;&otilde;es de igualdade n&atilde;o sens&iacute;veis a mai&uacute;sculas s&atilde;o normalmente expressadas como:</P>
+ <P>Compara&ccedil;&otilde;es de igualdade n&atilde;o sens&iacute;veis a mai&uacute;sculas
+ s&atilde;o normalmente expressadas como:</P>
<PRE>
SELECT *
FROM tab
WHERE lower(col) = 'abc';
</PRE>
-
-Isso n&atilde;o ir&aacute; utilizar o &iacute;ndice padr&atilde;o. Contudo, se voc&ecirc; criar um &iacute;ndice funcional, ele ser&aacute; utilizado:
+ Isso n&atilde;o ir&aacute; utilizar o &iacute;ndice padr&atilde;o. Contudo, se
+ voc&ecirc; criar um &iacute;ndice de express&atilde;o, ele ser&aacute; utilizado:
<PRE>
CREATE INDEX tabindex ON tab (lower(col));
</PRE>
+ <P>Se o &iacute;ndice acima &eacute; criado como <SMALL>UNIQUE</SMALL>, embora a
+ coluna possa armazenar caracteres mai&uacute;sculos e min&uacute;sculos, ele n&atilde;o
+ pode ter valores id&ecirc;nticos que diferem apenas em letras mai&uacute;sculas e min&uacute;sculas.
+ Para for&ccedil;ar uma letra mai&uacute;scula ou min&uacute;scula a ser armazenada na coluna, utilize
+ uma restri&ccedil;&atilde;o <SMALL>CHECK</SMALL> ou um gatilho.</P>
-<H4><A name="4.13">4.13</A>) Em uma consulta, como eu detecto se um campo &eacute; <SMALL>NULL</SMALL>?</H4>
+ <H3 id="item4.9">4.9) Em uma consulta, como eu detecto se um campo &eacute; <SMALL>NULL</SMALL>? Como eu posso ordenar por um campo que &eacute; <SMALL>NULL</SMALL> ou n&atilde;o?</H3>
- <P>Voc&ecirc; pode testar a coluna com <SMALL>IS NULL</SMALL> e <SMALL>IS
- NOT NULL</SMALL>.</P>
+ <P>Voc&ecirc; testa a coluna com <SMALL>IS NULL</SMALL> e <SMALL>IS
+ NOT NULL</SMALL>, como a seguir:</P>
- <H4><A name="4.14">4.14</A>) Qual &eacute; a difenren&ccedil;a entre os v&aacute;rios tipos de dados de caracteres?</H4>
<PRE>
-Tipo Nome Interno Notas
---------------------------------------------------
-VARCHAR(n) varchar tamanho especifica o comprimento m&aacute;ximo, sem preenchimento
-CHAR(n) bpchar preenchimento em branco para comprimento fixo espec&iacute;fico
-TEXT text nenhum limite superior espec&iacute;fico no comprimento
-BYTEA bytea vetor de bytes de comprimento vari&aacute;vel (null-byte safe)
-"char" char um caracter
+ SELECT *
+ FROM tab
+ WHERE col IS NULL;
</PRE>
-<P>Voc&ecirc; ver&aacute; o nome interno quando examinar o cat&aacute;logo do sistema e em algumas mensagens de erro.</P>
-
-<P>Os primeiros quatro tipos acima s&atilde;o do tipo "varlena" (i.e., os primeiros quatro bytes no disco s&atilde;o o comprimento seguido pelos dados). Consequentemente o espa&ccedil;o atual utilizado &eacute; ligeiramente maior do que o tamanho declarado. Contudo, esses tipos de dados tamb&eacute;m s&atilde;o sujeitos a compress&atilde;o ou a serem armazenados fora do padr&atilde;o utilizando o <SMALL>TOAST</SMALL>, ent&atilde;o o espa&ccedil;o em disco pode tamb&eacute;m ser bem menor do que o esperado.</P>
+ <P>Para ordenar pelo status <SMALL>NULL</SMALL>, utilize os modificadores
+ <SMALL>IS NULL</SMALL> e <SMALL>IS NOT NULL</SMALL> na sua cl&aacute;usula
+ <SMALL>ORDER BY</SMALL>. Coisas que s&atilde;o <I>verdadeiro</I> ser&atilde;o ordenadas acima
+ das coisas que s&atilde;o <I>falso</I>, ent&atilde;o a consulta a seguir ir&aacute; colocar
+ entradas NULL no in&iacute;cio da lista de resultados:</P>
-<SMALL>VARCHAR(n)</SMALL> &eacute; melhor quando est&aacute; armazenando cadeias de caracteres de comprimento vari&aacute;vel e h&aacute; um limite de tamanho desta cadeia. <SMALL>TEXT</SMALL> &eacute; para cadeias de caracteres de comprimento ilimitado, com o m&aacute;ximo de um gigabyte.
-<P><SMALL>CHAR(n)</SMALL> preenche com espa&ccedil;os em branco at&eacute; o tamanho especificado, enquanto o <SMALL>VARCHAR(n)</SMALL> armazena somente os caracteres fornecidos. <SMALL>BYTEA</SMALL> &eacute; para armazenar dados bin&aacute;rios, particularmente valores que incluem bytes <SMALL>NULL</SMALL>. Todos os tipos descritos aqui tem caracter&iacute;sticas de performance similares.</P>
-
- <H4><A name="4.15.1">4.15.1</A>) Como eu crio um campo serial/auto incremento?</H4>
+<PRE>
+ SELECT *
+ FROM tab
+ ORDER BY (col IS NOT NULL)
+</PRE>
- <P>PostgreSQL suporta o tipo de dados <SMALL>SERIAL</SMALL>. Ele cria automaticamente uma sequ&ecirc;ncia. Por exemplo:</P>
+ <H3 id="item4.10">4.10) Qual &eacute; a diferen&ccedil;a entre os v&aacute;rios tipos de dado de caracteres?</H3>
+<BLOCKQUOTE>
+<TABLE>
+<TR><TH>Tipo</TH><TH>Nome Interno</TH><TH>Observa&ccedil;&atilde;o</TH></TR>
+<TR><TD>VARCHAR(n)</TD><TD>varchar</TD><TD>tamanho especifica o tamanho
+m&aacute;ximo, sem preenchimento</TD></TR>
+<TR><TD>CHAR(n)</TD><TD>bpchar</TD><TD>preenchimento em branco para
+comprimento fixo espec&iacute;fico</TD></TR>
+<TR><TD>TEXT</TD><TD>text</TD><TD>nenhum limite superior espec&iacute;fico no
+comprimento</TD></TR>
+<TR><TD>BYTEA</TD><TD>bytea</TD><TD>vetor de bytes de comprimento vari&aacute;vel
+(seguro a byte nulo)</TD></TR>
+<TR><TD>"char"</TD><TD>char</TD><TD>um caracter</TD></TR>
+</TABLE>
+</BLOCKQUOTE>
+
+ <P>Voc&ecirc; ver&aacute; o nome interno quando examinar o cat&aacute;logo do sistema e em algumas mensagens de erro.</P>
+
+ <P>Os primeiros quatro tipos acima s&atilde;o do tipo "varlena" (i.e., os primeiros quatro bytes no disco s&atilde;o o comprimento seguido pelos dados). Consequentemente o espa&ccedil;o atual utilizado &eacute; ligeiramente maior do que o tamanho declarado. Contudo, valores longos s&atilde;o tamb&eacute;m sujeitos a compress&atilde;o, ent&atilde;o o espa&ccedil;o em disco pode tamb&eacute;m ser bem menor do que o esperado.</P>
+
+ <SMALL>VARCHAR(n)</SMALL> &eacute; melhor quando est&aacute; armazenando cadeias de caracteres de comprimento vari&aacute;vel e h&aacute; um limite de tamanho desta cadeia. <SMALL>TEXT</SMALL> &eacute; para cadeias de caracteres de comprimento ilimitado, com o m&aacute;ximo de um gigabyte.
+ <P><SMALL>CHAR(n)</SMALL> &eacute; para armazenar cadeias de caracteres que s&atilde;o todas do mesmo tamanho. <SMALL>CHAR(n)</SMALL> preenche com espa&ccedil;os em branco at&eacute; o tamanho especificado, enquanto o <SMALL>VARCHAR(n)</SMALL> armazena somente os caracteres fornecidos. <SMALL>BYTEA</SMALL> &eacute; para armazenar dados bin&aacute;rios, particularmente valores que incluem bytes <SMALL>NULL</SMALL>. Todos os tipos descritos aqui tem caracter&iacute;sticas de performance similares.</P>
+
+ <H3 id="item4.11.1">4.11.1) Como eu crio um campo serial/auto incremento?</H3>
+
+ <P>PostgreSQL suporta o tipo de dados <SMALL>SERIAL</SMALL>. Ele cria
+ automaticamente uma sequ&ecirc;ncia. Por exemplo:</P>
<PRE>
CREATE TABLE pessoa (
id SERIAL,
@@ -766,7 +761,7 @@ BYTEA bytea vetor de bytes de comprimento vari&aacute;vel (n
);
</PRE>
-&eacute; automaticamente traduzido em:
+ &eacute; automaticamente traduzido em:
<PRE>
CREATE SEQUENCE pessoa_id_seq;
CREATE TABLE pessoa (
@@ -775,15 +770,16 @@ BYTEA bytea vetor de bytes de comprimento vari&aacute;vel (n
);
</PRE>
-Veja a p&aacute;gina sobre <I>create_sequence</I> no manual para mais informa&ccedil;&atilde;o sobre sequ&ecirc;ncias. Voc&ecirc; tamb&eacute;m pode utilizar o campo <I>OID</I> para cada registro como um valor &uacute;nico. Contudo, se voc&ecirc; precisar exportar e importar o banco de dados, voc&ecirc; precisa utilizar a op&ccedil;&atilde;o <I>-o</I> do <I>pg_dump</I> ou a op&ccedil;&atilde;o <SMALL>COPY WITH OIDS</SMALL> para preservar os <I>OID</I>s.
+ Veja a p&aacute;gina sobre <I>create_sequence</I> no manual para
+ obter informa&ccedil;&otilde;es adicionais sobre sequ&ecirc;ncias.
- <H4><A name="4.15.2">4.15.2</A>) Como eu consigo o valor de um campo
- <SMALL>SERIAL</SMALL>?</H4>
+ <H3 id="item4.11.2">4.11.2) Como eu consigo o valor de um campo
+ <SMALL>SERIAL</SMALL>?</H3>
<P>Uma abordagem &eacute; obter o pr&oacute;ximo valor <SMALL>SERIAL</SMALL>
de uma sequ&ecirc;ncia com a fun&ccedil;&atilde;o <I>nextval()</I>
<I>antes</I> de inserir e ent&atilde;o inserir com o valor explicitamente. Utilizando o
- exemplo da tabela em <A href="#4.15.1">4.15.1</A>, um exemplo em
+ exemplo da tabela em <A href="#item4.11.1">4.11.1</A>, um exemplo em
pseudo-linguagem se pareceria com isto:</P>
<PRE>
novo_id = execute("SELECT nextval('pessoa_id_seq')");
@@ -806,131 +802,57 @@ Veja a p&aacute;gina sobre <I>create_sequence</I> no manual para mais informa&cc
novo_id = execute("SELECT currval('pessoa_id_seq')");
</PRE>
- <p>Finalmente, voc&ecirc; poderia utilizar o <A href="#4.16"><SMALL>OID</SMALL></A>
- retornado da senten&ccedil;a <SMALL>INSERT</SMALL> para obter o valor padr&atilde;o,
- embora este seja a abordagem menos port&aacute;vel,
- pois o valor do oid n&atilde;o ultrapassa 4 bilh&otilde;es.
- Em Perl, utilizando DBI com o m&oacute;dulo DBD::Pg, o valor
- do oid est&aacute; dispon&iacute;vel via <I>$sth-&gt;{pg_oid_status}</I> depois de
- <I>$sth-&gt;execute()</I>.</p>
+ <H3 name="4.11.3">4.11.3) <I>currval()</I> n&atilde;o lida com condi&ccedil;&atilde;o de corrida com outros usu&aacute;rios?</H3>
- <H4><A name="4.15.3">4.15.3</A>) <I>currval()</I> n&atilde;o lida com condi&ccedil;&atilde;o de corrida com outros usu&aacute;rios?</H4>
+ <P>N&atilde;o. <I>currval()</I> retorna o valor atual atribuido pela sua sess&atilde;o, e n&atilde;o por todas as sess&otilde;es.</P>
- <P>N&atilde;o. <I>currval()</I> retorna o valor atual atribuido pelo seu n&uacute;cleo (backend), e n&atilde;o por todos os usu&aacute;rios.</P>
-
- <H4><A name="4.15.4">4.15.4</A>) Por que os n&uacute;meros da minha sequ&ecirc;ncia n&atilde;o s&atilde;o reutilizados quando uma transa&ccedil;&atilde;o &eacute; abortada? Por que h&aacute; intervalos nos n&uacute;meros da minha sequ&ecirc;ncia/coluna SERIAL?</H4>
+ <H3 id="item4.11.4">4.11.4) Por que os n&uacute;meros da minha sequ&ecirc;ncia n&atilde;o s&atilde;o reutilizados quando uma transa&ccedil;&atilde;o &eacute; abortada? Por que h&aacute; intervalos nos n&uacute;meros da minha sequ&ecirc;ncia/coluna SERIAL?</H3>
<P>Para melhorar a concorr&ecirc;ncia, valores da sequ&ecirc;ncia s&atilde;o atribu&iacute;dos a transa&ccedil;&otilde;es correntes e n&atilde;o s&atilde;o travados at&eacute; que a transa&ccedil;&atilde;o seja finalizada. Isso causa intervalos na numera&ccedil;&atilde;o por causa de transa&ccedil;&otilde;es abortadas.</P>
- <H4><A name="4.16">4.16</A>) O que &eacute; um <SMALL>OID</SMALL>? O que &eacute; um <SMALL>TID</SMALL>?</H4>
-
- <P><SMALL>OID</SMALL>s s&atilde;o a resposta do PostgreSQL a ids &uacute;nicos de registros.
- Cada registro que &eacute; criado no PostgreSQL recebe um <SMALL>OID</SMALL> &uacute;nico.
- Todos <SMALL>OID</SMALL>s produzidos durante o <I>initdb</I> s&atilde;o menores do
- que 16384 (de <I>include/access/transam.h</I>). Todos os <SMALL>OID</SMALL>s
- criados pelo usu&aacute;rio s&atilde;o iguais ou maiores do que este valor. Por padr&atilde;o,
- todos estes <SMALL>OID</SMALL>s s&atilde;o &uacute;nicos n&atilde;o somente na tabela ou no
- banco de dados, mas na instala&ccedil;&atilde;o do PostgreSQL.</P>
-
- <P>PostgreSQL utiliza <SMALL>OID</SMALL>s nas tabelas internas do sistema
- para ligar registros entre tabelas. Estes <SMALL>OID</SMALL>s podem
- ser utilizados para identificar registros de usu&aacute;rios espec&iacute;ficos e podem ser
- utilizados em jun&ccedil;&otilde;es. &Eacute; recomendado que voc&ecirc; utilize o tipo de coluna
- <SMALL>OID</SMALL> para armazenar valores <SMALL>OID</SMALL>.
- Voc&ecirc; pode criar um &iacute;ndice no campo <SMALL>OID</SMALL> para acesso r&aacute;pido.</P>
-
- <P><SMALL>OID</SMALL>s s&atilde;o atribu&iacute;dos para todas os registros novos de uma
- &aacute;rea central que &eacute; utilizada por todos os bancos de dados. Se voc&ecirc; quer mudar
- o <SMALL>OID</SMALL> de alguma coisa, ou se voc&ecirc; quer fazer uma c&oacute;pia da tabela,
- com os <SMALL>OID</SMALL>s, n&atilde;o h&aacute; raz&atilde;o para que voc&ecirc; n&atilde;o possa faz&ecirc;-la:</P>
-<PRE>
- CREATE TABLE nova_tabela(minha_coluna int);
- SELECT oid as oid_antigo, minha_coluna INTO tabela_tmp FROM tabela_antiga;
- COPY tabela_tmp TO '/tmp/pgtable';
- DROP TABLE tabela_tmp;
- COPY nova_tabela WITH OIDS FROM '/tmp/pgtable';
-</PRE>
- <P><SMALL>OID</SMALL>s s&atilde;o armazenados como inteiros de 4 bytes, e
- n&atilde;o ultrapassam 4 bilh&otilde;es. Ningu&eacute;m nunca reportou que isso tenha ocorrido,
- e n&oacute;s planejamos remover o limite antes que alg&uacute;em o alcan&ccedil;e.</P>
-
- <P><SMALL>TID</SMALL>s s&atilde;o utilizados para identificar registros f&iacute;sicos
- espec&iacute;ficos com valores de bloco e deslocamento. <SMALL>TID</SMALL>s mudam
- ap&oacute;s registros serem modificados ou recarregados. Eles s&atilde;o utilizados por
- &iacute;ndices para apontar para registros f&iacute;sicos.</P>
-
- <H4><A name="4.17">4.17</A>) Qual &eacute; o significado de alguns termos utilizados no PostgreSQL?</H4>
-
- <P>O c&oacute;digo-fonte e documenta&ccedil;&atilde;o antiga utiliza termos de uso comum. Aqui est&atilde;o alguns deles:</P>
-
- <UL>
- <LI>tabela, rela&ccedil;&atilde;o, classe</LI>
-
- <LI>linha, registro, tupla</LI>
+ <H3 id="4.16">4.16) O que &eacute; um <SMALL>OID</SMALL>? O que &eacute; um <SMALL>CTID</SMALL>?</H3>
- <LI>coluna, campo, atributo</LI>
+ <P>Cada registro que &eacute; criado no PostgreSQL recebe um <SMALL>OID</SMALL> &uacute;nico
+ a menos que seja criado com <SMALL>WITHOUT OIDS</SMALL>.
+ O<SMALL>ID</SMALL>s s&atilde;o automaticamente atribu&iacute;dos como inteiros de 4 bytes
+ que s&atilde;o &uacute;nicos ao longo de toda instala&ccedil;&atilde;o. Contudo, eles s&atilde;o limitados em
+ 4 bilh&otilde;es, e ent&atilde;o os O<SMALL>ID</SMALL>s come&ccedil;am a ser duplicados. O PostgreSQL
+ utiliza <SMALL>OID</SMALL>s para ligar as tabelas do sistema.</P>
- <LI>recupera, seleciona</LI>
+ <P>Para numerar registros nas tabelas do usu&aacute;rios, &eacute; melhor utilizar
+ <SMALL>SERIAL</SMALL> ao inv&eacute;s de O<SMALL>ID</SMALL>s porque
+ sequ&ecirc;ncias <SMALL>SERIAL</SMALL> s&atilde;o &uacute;nicas somente em uma tabela; e
+ s&atilde;o menos prop&iacute;cias a atingir o limite.
+ <SMALL>SERIAL8</SMALL> est&aacute; dispon&iacute;vel para armazenar valores de sequ&ecirc;ncias
+ com oito bytes.</P>
- <LI>altera, atualiza</LI>
+ <P>C<SMALL>TID</SMALL>s s&atilde;o utilizados para identificar registros f&iacute;sicos
+ espec&iacute;ficos com valores de block e deslocamento. C<SMALL>TID</SMALL>s mudam
+ ap&oacute;s registros serem modificados ou recarregados. Eles s&atilde;o utilizados por
+ &iacute;ndices para apontar registros f&iacute;sicos.</P>
- <LI>incrementa, insere</LI>
+ <H3 id="item4.13">4.13) Por que eu recebo o erro <I>"ERROR: Memory exhausted in AllocSetAlloc()"</I>?</H3>
- <LI><SMALL>OID</SMALL>, valor serial</LI>
-
- <LI>portal, cursor</LI>
-
- <LI>intervalo vari&aacute;vel, nome da tabela, alias de tabela</LI>
- </UL>
-
- <P>Uma lista de termos gerais de bancos de dados pode ser encontrada em: <A href=
- "http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.html">http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.html</A></P>
-
- <H4><A name="4.18">4.18</A>) Por que eu recebo o erro <I>"ERROR: Memory exhausted in AllocSetAlloc()"</I>?</H4>
-
- <P>Voc&ecirc; provavelmente est&aacute; sem mem&oacute;ria virtual no sistema, ou o seu n&uacute;cleo (kernel) tem um limite baixo para certos recursos. Tente isto antes de iniciar o <I>postmaster</I>:</P>
- <PRE>
- ulimit -d 262144
- limit datasize 256m
- </PRE>
+ <P>Voc&ecirc; provavelmente est&aacute; sem mem&oacute;ria virtual no seu sistema, ou o seu n&uacute;cleo (kernel) tem um limite baixo para certos recursos. Tente isto antes de iniciar o <I>postmaster</I>:</P>
+<PRE>
+ ulimit -d 262144
+ limit datasize 256m
+</PRE>
- Dependendo da sua shell, somente um desses comando ter&aacute; sucesso, mas ele definir&aacute; o segmento de dados do seu processo com um limite maior e talvez permita que a consulta seja feita. Este comando &eacute; aplicado ao processo atual e todos os subprocessos criados depois do comando ser executado. Se voc&ecirc; tiver problemas com o cliente <SMALL>SQL</SMALL> porque o n&uacute;cleo (backend) retornou muitos dados, tente-o antes de iniciar o cliente.
+ Dependendo da sua shell, somente um desses comando ter&aacute; sucesso, mas ele definir&aacute; o segmento de dados do seu processo com um limite maior e talvez permita que a consulta seja feita. Este comando &eacute; aplicado ao processo atual e todos os subprocessos criados depois do comando ser executado. Se voc&ecirc; tiver problemas com o cliente <SMALL>SQL</SMALL> porque o processo servidor retornou muitos dados, tente-o antes de iniciar o cliente.
- <H4><A name="4.19">4.19</A>) Como eu informo qual vers&atilde;o do PostgreSQL eu estou utilizando?</H4>
+ <H3 id="item4.14">4.14) Como eu informo qual vers&atilde;o do PostgreSQL eu estou utilizando?</H3>
<P>No <I>psql</I>, digite <CODE>SELECT version();</CODE></P>
- <H4><A name="4.20">4.20</A>) Por que minhas opera&ccedil;&otilde;es com objetos grandes retorna <I>"invalid large obj descriptor"</I>?</H4>
-
- <P>Voc&ecirc; precisa colocar <CODE>BEGIN WORK</CODE> e <CODE>COMMIT</CODE> ao redor de qualquer uso de opera&ccedil;&otilde;es com objetos grandes, isto &eacute;, ao redor de <CODE>lo_open</CODE> ... <CODE>lo_close.</CODE></P>
-
- <P>Atualmente PostgreSQL obriga o fechamento de manipula&ccedil;&atilde;o de um objeto grande quando uma transa&ccedil;&atilde;o &eacute; submetida (commit). Ent&atilde;o a primeira tentativa de fazer qualquer coisa com o manipulador ir&aacute; retornar <I>invalid large obj descriptor</I>. Ent&atilde;o o c&oacute;digo que funcionava (ao menos a algum tempo atr&aacute;s) agora ir&aacute; retornar uma mensagem de erro se voc&ecirc; n&atilde;o utilizar uma transa&ccedil;&atilde;o.</P>
-
- <H4><A name="4.21">4.21</A>) Como eu crio uma coluna que conter&aacute; por padr&atilde;o a hora atual?</H4>
+ <H3 id="item4.15">4.15) Como eu crio uma coluna que conter&aacute; por padr&atilde;o a hora atual?</H3>
<P>Utilize <I>CURRENT_TIMESTAMP</I>:</P>
<PRE>
-<CODE>CREATE TABLE teste (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
-</CODE>
+ CREATE TABLE teste (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
</PRE>
-<H4><A name="4.22">4.22</A>) Por que as minhas subconsultas que utilizam <code><SMALL>IN</SMALL></code> est&atilde;o t&atilde;o lentas?</H4>
-
-<P>Em vers&otilde;es anteriores a 7.4, subconsultas eram agrupadas em consultas externas utilizando uma busca sequencial no resultado da subconsulta de cada registro da consulta externa. Se uma subconsulta retorna somente alguns registros e a consulta externa retorna muitos registros, <CODE><SMALL>IN</SMALL></CODE> &eacute; mais r&aacute;pido. Para acelerar consultas externas, substitua <CODE>IN</CODE> por <CODE>EXISTS</CODE>:</P>
-<PRE> SELECT *
- FROM tab
- WHERE col IN (SELECT subcol FROM subtab);
-</PRE>
-<p>por:</p>
-<PRE> SELECT *
- FROM tab
- WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col);
-</PRE>
-<p>
-Para isto ser r&aacute;pido, <CODE>subcol</CODE> deve ser uma coluna indexada.</P>
-<P>A partir da vers&atilde;o 7.4, <CODE>IN</CODE> utiliza a mesma t&eacute;cnica de agrupamento do que consultas normais, e &eacute; recomendado utilizar <CODE>EXISTS</CODE>.
-</p>
- <H4><A name="4.23">4.23</A>) Como eu fa&ccedil;o uma jun&ccedil;&atilde;o externa (outer join)?</H4>
+ <H3 id="item4.23">4.23) Como eu fa&ccedil;o uma jun&ccedil;&atilde;o externa (outer join)?</H3>
<P>PostgreSQL suporta jun&ccedil;&otilde;es externas utilizando a sintaxe padr&atilde;o do SQL. Aqui temos dois exemplos:</P>
<PRE>
@@ -943,60 +865,75 @@ Para isto ser r&aacute;pido, <CODE>subcol</CODE> deve ser uma coluna indexada.</
FROM t1 LEFT OUTER JOIN t2 USING (col);
</PRE>
-<P>Essas duas consultas ind&ecirc;nticas juntam t1.col com t2.col, e tamb&eacute;m retornam qualquer registro que n&atilde;o foi juntado em t1 (aqueles que n&atilde;o combinaram com t2). Uma jun&ccedil;&atilde;o a direita <SMALL>RIGHT</SMALL> adicionaria registros que n&atilde;o foram juntados da tabela t2. Uma jun&ccedil;&atilde;o completa (<SMALL>FULL</SMALL>) retornaria os registros combinados mais todos os registros n&atilde;o combinados de t1 e t2. A palavra <SMALL>OUTER</SMALL> &eacute; opcional e &eacute; assumida nas jun&ccedil;&otilde;es <SMALL>LEFT</SMALL>, <SMALL>RIGHT</SMALL> e <SMALL>FULL</SMALL>. Jun&ccedil;&otilde;es ordin&aacute;rias s&atilde;o chamadas jun&ccedil;&otilde;es naturais (<SMALL>INNER</SMALL>).</P>
+ <P>Essas duas consultas ind&ecirc;nticas juntam t1.col com t2.col, e tamb&eacute;m
+ retornam qualquer registro que n&atilde;o foi juntado em t1 (aqueles que n&atilde;o
+ combinaram com t2). Uma jun&ccedil;&atilde;o a direita <SMALL>RIGHT</SMALL>
+ adicionaria registros que n&atilde;o foram juntados da tabela t2.
+ Uma jun&ccedil;&atilde;o completa (<SMALL>FULL</SMALL>) retornaria os registros
+ combinados mais todos os registros n&atilde;o combinados de t1 e t2.
+ A palavra <SMALL>OUTER</SMALL> &eacute; opcional e &eacute; assumida nas
+ jun&ccedil;&otilde;es <SMALL>LEFT</SMALL>, <SMALL>RIGHT</SMALL> e <SMALL>FULL</SMALL>.
+ Jun&ccedil;&otilde;es ordin&aacute;rias s&atilde;o chamadas jun&ccedil;&otilde;es
+ naturais (<SMALL>INNER</SMALL>).</P>
-<P>Em vers&otilde;es anteriores, jun&ccedil;&otilde;es externas podiam ser simuladas utilizando <SMALL>UNION</SMALL> e <SMALL>NOT IN</SMALL>. Por exemplo, quando juntar <I>tab1</I> e <I>tab2</I>, a consulta a seguir faz uma jun&ccedil;&atilde;o <I>externa</I> de duas tabelas:<BR>
-<BR></P>
-<PRE>
- SELECT tab1.col1, tab2.col2
- FROM tab1, tab2
- WHERE tab1.col1 = tab2.col1
- UNION ALL
- SELECT tab1.col1, NULL
- FROM tab1
- WHERE tab1.col1 NOT IN (SELECT tab2.col1 FROM tab2)
- ORDER BY col1
-</PRE>
+ <H3 id="item4.17">4.17) Como eu fa&ccedil;o consultas utilizando m&uacute;ltiplos bancos de dados?</H3>
-<H4><A name="4.24">4.24</A>) Como eu fa&ccedil;o consultas utilizando m&uacute;ltiplos bancos de dados?</H4>
+ <P>N&atilde;o h&aacute; outra maneira de consultar um banco de dados caso ele
+ n&atilde;o seja o atual. Porque o PostgreSQL carrega cat&aacute;logos do sistema
+ espec&iacute;ficos do banco de dados, &eacute; incerto como uma consulta em banco
+ de dados distintos pode se comportar.</P>
-<P>N&atilde;o h&aacute; outra maneira de consultar um banco de dados caso ele n&atilde;o seja o atual. Porque o PostgreSQL carrega cat&aacute;logos do sistema espec&iacute;ficos do banco de dados, &eacute; incerto como uma consulta em banco de dados distintos pode se comportar.</P>
-<P><I>contrib/dblink</I> permite consultas em bancos de dados distintos utilizando chamadas de fun&ccedil;&otilde;es. &Eacute; claro, que um cliente pode fazer conex&otilde;es simult&acirc;neas em bancos de dados diferentes e juntar os resultados no cliente.</P>
+ <P><I>contrib/dblink</I> permite consultas em bancos de dados distintos utilizando
+ chamadas de fun&ccedil;&otilde;es. &Eacute; claro, que um cliente pode fazer
+ conex&otilde;es simult&acirc;neas em bancos de dados diferentes e juntar os
+ resultados no cliente.</P>
- <H4><A name="4.25">4.25</A>) Como eu retorno m&uacute;ltiplos registros ou colunas de uma fun&ccedil;&atilde;o?</H4>
+ <H3 id="item4.18">4.18) Como eu retorno m&uacute;ltiplos registros ou colunas de uma fun&ccedil;&atilde;o?</H3>
- <P>No 7.3, voc&ecirc; pode facilmente retornar m&uacute;ltiplos registros ou colunas de uma fun&ccedil;&atilde;o, <A href="http://techdocs.postgresql.org/guides/SetReturningFunctions">http://techdocs.postgresql.org/guides/SetReturningFunctions</A>.</P>
+ <P>&Eacute; f&aacute;cil utilizando fun&ccedil;&otilde;es que retornam conjunto,
+ <a href="http://techdocs.postgresql.org/guides/SetReturningFunctions">
+ http://techdocs.postgresql.org/guides/SetReturningFunctions</a>.</P>
- <H4><A name="4.26">4.26</A>) Por que eu n&atilde;o posso confiar na cria&ccedil;&atilde;o/remo&ccedil;&atilde;o de tabelas tempor&aacute;rias em fun&ccedil;&otilde;es PL/PgSQL?</H4>
- <P>PL/PgSQL armazena o conte&uacute;do da fun&ccedil;&atilde;o, e o efeito indesejado &eacute; que se uma fun&ccedil;&atilde;o PL/PgSQL acessa uma tabela tempor&aacute;ria, e aquela tabela &eacute; removida e criada novamente, e a fun&ccedil;&atilde;o &eacute; chamada novamente, a fun&ccedil;&atilde;o ir&aacute; falhar porque o conte&uacute;do armazenado da fun&ccedil;&atilde;o ainda apontar&aacute; para a tabela tempor&aacute;ria antiga. A solu&ccedil;&atilde;o &eacute; utilizar o <SMALL>EXECUTE</SMALL> para acesso a tabelas tempor&aacute;rias no PL/PgSQL. Isto ir&aacute; fazer com que a consulta seja avaliada toda vez.</P>
-
- <H4><A name="4.27">4.27</A>) Que op&ccedil;&otilde;es para encripta&ccedil;&atilde;o est&atilde;o dispon&iacute;veis?</H4>
- <UL>
- <LI>No <I>contrib/pgcrypto</I> cont&eacute;m muitas fun&ccedil;&otilde;es de encripta&ccedil;&atilde;o para serem utilizados em consultas <SMALL>SQL</SMALL>.</li>
- <LI>Para encriptar a transmiss&atilde;o do cliente ao servidor, o servidor deve ter a op&ccedil;&atilde;o <I>ssl</I> definida como <I>true</I> no <I>postgresql.conf</I>, e um registro <I>host</I> ou <I>hostssl</I> deve existir no <I>pg_hba.conf</I>, e o <I>sslmode</I> no cliente n&atilde;o deve estar <I>disable</I>. (Note que tamb&eacute;m &eacute; poss&iacute;vel utilizar outros esquemas de transporte encriptado, tais como stunnel ou ssh, ao inv&eacute;s da conex&atilde;o SSL nativa do PostgreSQL.)</LI>
- <LI>Senhas dos usu&aacute;rios do banco de dados s&atilde;o automaticamente encriptadas quando armazenadas na vers&atilde;o 7.3. Em vers&otilde;es anteriores, voc&ecirc; deve habilitar a op&ccedil;&atilde;o <I>PASSWORD_ENCRYPTION</I> no <I>postgresql.conf</I>.</li>
- <li>O servidor pode executar utilizando um sistema de arquivos encriptado.</li>
- </UL>
+ <H3 id="item4.19">4.19) Por que eu obtenho erros "relation with OID ######
+ does not exist" ao acessar tabelas tempor&aacute;rias em fun&ccedil;&otilde;es PL/PgSQL?</H3>
- <HR>
-
- <H2 align="center">Extendendo o PostgreSQL</H2>
-
- <H4><A name="5.1">5.1</A>) Eu escrevi uma fun&ccedil;&atilde;o. Quando eu executo-a no <I>psql</I>, por que ela finaliza o programa com descarga de mem&oacute;ria (core dump)?</H4>
-
- <P>O problema pode ser v&aacute;rias coisas. Tente testar sua fun&ccedil;&atilde;o em um programa independente.</P>
-
- <H4><A name="5.2">5.2</A>) Como eu posso contribuir com alguns tipos e fun&ccedil;&otilde;es novas para o PostgreSQL?</H4>
-
- <P>Envie as suas extens&otilde;es para a lista de discuss&atilde;o <I>pgsql-hackers</I>, e elas eventualmente ser&atilde;o colocadas no subdiret&oacute;rio <I>contrib/</I>.</P>
-
- <H4><A name="5.3">5.3</A>) Como eu escrevo uma fun&ccedil;&atilde;o em C que retorna uma tupla?</H4>
-
- <P>Em vers&otilde;es do PostgreSQL a partir da 7.3, fun&ccedil;&otilde;es que retornam tuplas s&atilde;o suportadas em C, PL/PgSQL e SQL. Veja o Guia do Programador para mais informa&ccedil;&atilde;o. Um exemplo de uma fun&ccedil;&atilde;o escrita em C e que retorna tuplas pode ser encontrada em <I>contrib/tablefunc</I>.</P>
-
- <H4><A name="5.4">5.4</A>) Eu alterei um arquivo do c&oacute;digo-fonte. Por que a recompila&ccedil;&atilde;o n&atilde;o surtiu efeito?</H4>
+ <P>PL/PgSQL armazena o conte&uacute;do da fun&ccedil;&atilde;o, e o efeito indesejado &eacute; que se uma fun&ccedil;&atilde;o PL/PgSQL acessa uma tabela tempor&aacute;ria, e aquela tabela &eacute; removida e criada novamente, e a fun&ccedil;&atilde;o &eacute; chamada novamente, a fun&ccedil;&atilde;o ir&aacute; falhar porque o conte&uacute;do armazenado da fun&ccedil;&atilde;o ainda apontar&aacute; para a tabela tempor&aacute;ria antiga. A solu&ccedil;&atilde;o &eacute; utilizar o <SMALL>EXECUTE</SMALL> para acesso a tabelas tempor&aacute;rias no PL/PgSQL. Isto ir&aacute; fazer com que a consulta seja avaliada toda vez.</P>
- <P>Os arquivos <I>Makefiles</I> n&atilde;o tem as depend&ecirc;ncias corretas para incluir arquivos. Voc&ecirc; deve executar um <I>make clean</I> e ent&atilde;o o <I>make</I>. Se voc&ecirc; est&aacute; utilizando o <SMALL>GCC</SMALL> voc&ecirc; pode utilizar a op&ccedil;&atilde;o <I>--enable-depend</I> do <I>configure</I> para o compilador computar as depend&ecirc;ncias automaticamente.</P>
+ <H3 id="item4.20">4.20) Quais solu&ccedil;&otilde;es de replica&ccedil;&atilde;o est&atilde;o dispon&iacute;veis?</H3>
+
+ <P>Embora "replica&ccedil;&atilde;o" seja um termo simples, h&aacute; v&aacute;rias tecnologias para fazer
+ replica&ccedil;&atilde;o, com vantagens e desvantagens para cada um.</P>
+
+ <P>Replica&ccedil;&atilde;o mestre/escravo permite que um mestre receba consultas de leitura e
+ escrita, enquanto os escravos s&oacute; podem aceitar leitura/consultas <SMALL>SELECT</SMALL>.
+ A solu&ccedil;&atilde;o mais popular de replica&ccedil;&atilde;o mestre-escravo para PostgreSQL dispon&iacute;vel livremente
+ &eacute; <A href="http://gborg.postgresql.org/project/slony1/projdisplay.php">Slony-I</A>.</P>
+
+ <P>Replica&ccedil;&atilde;o com m&uacute;ltiplos mestres permite que consultas leitura/escrita sejam
+ enviadas para m&uacute;ltiplos computadores replicadores. Esta capacidade tamb&eacute;m tem
+ um s&eacute;rio impacto na performance por causa da necessidade de sincronizar as mudan&ccedil;as
+ entre os servidores. <A href="http://pgfoundry.org/projects/pgcluster/">Pgcluster</a>
+ &eacute; a solu&ccedil;&atilde;o mais popular dispon&iacute;vel livremente para PostgreSQL.</P>
+
+ <P>H&aacute; tamb&eacute;m solu&ccedil;&otilde;es de replica&ccedil;&atilde;o comerciais e baseadas em hardware dispon&iacute;veis
+ que suportam uma variedade de modelos de replica&ccedil;&atilde;o.</P>
+
+ <H3 id="item4.21">4.21) Por que os nomes de minhas tabelas e colunas n&atilde;o
+ s&atilde;o reconhecidos em minha consulta?</H3>
+
+ <P>O caso mais comum &eacute; o uso de aspas ao redor dos nomes da tabela ou coluna
+ durante a cria&ccedil;&atilde;o da tabela. Ao utilizar aspas, nomes de tabela e coluna
+ (chamados de identificadores) s&atilde;o armazenados <a
+ href="http://www.postgresql.org/docs/8.0/static/sql-syntax.html#SQL-SYNTAX-IDENTIFIERS">
+ como especificado</a>, significando que voc&ecirc; deve utilizar aspas quando se
+ referir aos nomes na consulta. Algumas interfaces, como pgAdmin,
+ automaticamente coloca aspas nos identificadores durante a cria&ccedil;&atilde;o da tabela.
+ Ent&atilde;o, para identificadores serem reconhecidos, voc&ecirc; deve:
+ <UL>
+ <LI>Evitar colocar aspas no identificador ao criar tabelas</LI>
+ <LI>Utilizar somente caracteres min&uacute;sculos em identificadores</LI>
+ <LI>Colocar aspas em identificadores ao referenci&aacute;-los nas consultas</LI>
+ </UL>
</BODY>
</HTML>