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 (pgman@candle.pha.pa.us)
+ Mantenedor atual: Bruce Momjian (bruce@momjian.us)
- Traduzido por: Euler Taveira de Oliveira (eulerto@yahoo.com.br)
+ Traduzido por: Euler Taveira de Oliveira (euler@timbira.com)
A versรฃo mais recente desse documento pode ser vista em
http://www.postgresql.org/files/documentation/faqs/FAQ.html (EN).
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
- (scrappy@PostgreSQL.org). (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 รฉ: pgsql-general@PostgreSQL.org. 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
-
- para pgsql-general-request@PostgreSQL.org.
+ 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: pgsql-general-digest-request@PostgreSQL.org 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 pgsql-bugs-request@PostgreSQL.org 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
- pgsql-hackers-request@PostgreSQL.org 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
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
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 pgsql-advocacy@postgresql.org.
+ 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 postgres95@openlink.co.uk.
-
- 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
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.
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.
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.
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 (
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')");
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 *
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
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
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
<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>
alink="#0000ff">
<H1>Perguntas Frequentes (FAQ) sobre PostgreSQL</H1>
- <P>Última atualização: Dom Jan 9 14:44:04 EDT 2005</P>
+ <P>Última atualização: Sáb Out 14 19:08:19 EDT 2006</P>
<P>Mantenedor atual: Bruce Momjian (<A href=
- "mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</A>)<BR>
+ "mailto:bruce@momjian.us">bruce@momjian.us</A>)
</P>
<P>Traduzido por: Euler Taveira de Oliveira (<A href=
- "mailto:eulerto@yahoo.com.br">eulerto@yahoo.com.br</A>)</P>
+ "mailto:euler@timbira.com">euler@timbira.com</A>)</P>
<P>A versão mais recente desse documento pode ser vista em <A href=
"http://www.postgresql.org/files/documentation/faqs/FAQ.html">
<HR>
<H2 align="center">Perguntas Gerais</H2>
- <A href="#1.1">1.1</A>) O que é PostgreSQL? Como ele é pronunciado?<BR>
- <A href="#1.2">1.2</A>) Qual é a licenç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ão-Unix estão disponí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 é a última versão?<BR>
- <A href="#1.8">1.8</A>) Que documentação está disponível?<BR>
- <A href="#1.9">1.9</A>) Como eu posso saber quais são os bugs conhecidos ou caracterí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á livre do Bug do Milê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ência de um bug?<BR>
- <A href="#1.14">1.14</A>) Como é 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 é PostgreSQL? Como ele é pronunciado?<BR>
+ <A href="#item1.2">1.2</A>) Quem controla o PostgreSQL?<BR>
+ <A href="#item1.3">1.3</A>) Qual é a licença do PostgreSQL?<BR>
+ <A href="#item1.4">1.4</A>) Quais plataformas o PostgreSQL pode ser executado?<BR>
+ <A href="#item1.5">1.5</A>) Onde eu posso conseguir o PostgreSQL?<BR>
+ <A href="#item1.6">1.6</A>) Qual é a última versão?<BR>
+ <A href="#item1.7">1.7</A>) Onde eu posso conseguir suporte?<BR>
+ <A href="#item1.8">1.8</A>) Como eu posso submeter um relato de um bug?<BR>
+ <A href="#item1.9">1.9</A>) Como eu posso saber quais são os bugs conhecidos ou características ausentes?<BR>
+ <A href="#item1.10">1.10</A>) Que documentação está disponível?<BR>
+ <A href="#item1.11">1.11</A>) Como eu posso aprender <SMALL>SQL</SMALL>?<BR>
+ <A href="#item1.12">1.12</A>) Como posso submeter uma correção (patch) ou me juntar a equipe de desenvolvimento?<BR>
+ <A href="#item1.13">1.13</A>) Como é o PostgreSQL comparado a outros <SMALL>SGBD</SMALL>s?<BR>
<H2 align="center">Perguntas sobre Clientes</H2>
- <A href="#2.1">2.1</A>) Há drivers <SMALL>ODBC</SMALL> para PostgreSQL?<BR>
- <A href="#2.2">2.2</A>) Quais ferramentas estão disponíveis para utilizar o PostgreSQL com páginas Web?<BR>
- <A href="#2.3">2.3</A>) O PostgreSQL tem interfaces gráficas para interagir com usuário?<BR>
- <A href="#2.4">2.4</A>) Quais linguagens estão disponíveis para comunicar-se com o PostgreSQL?<BR>
+ <A href="#item2.1">2.1</A>) Quais interfaces estão disponíveis para PostgreSQL?<BR>
+ <A href="#item2.2">2.2</A>) Quais ferramentas estão disponíveis para utilizar o PostgreSQL com páginas Web?<BR>
+ <A href="#item2.3">2.3</A>) O PostgreSQL tem interfaces gráficas para interagir com usuário?<BR>
<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ó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ões de outras má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ísticas de depuração estão disponí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á no diretó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ção de versõ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ões de outras máquinas?<BR>
+ <A href="#item3.3">3.3</A>) Como eu ajusto o servidor de banco de dados para obter uma performance melhor?<BR>
+ <A href="#item3.4">3.4</A>) Quais características de depuração estão disponíveis?<BR>
+ <A href="#item3.5">3.5</A>) Por que eu recebo <I>"Sorry, too many clients"</I> quando eu tento conectar?<BR>
+ <A href="#item3.6">3.6</A>) Qual é o processo de atualização do PostgreSQL?</H3>
+ <A href="#item3.7">3.7</A>) Que tipo de hardware eu devo usar?<BR>
<H2 align="center">Perguntas Operacionais</H2>
- <A href="#4.1">4.1</A>) Qual é a diferença entre cursores binários e normais?<BR>
- <A href="#4.2">4.2</A>) Como eu faço um <SMALL>SELECT</SMALL> somente dos primeiros registros de uma consulta? Um registro randô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 é o tamanho máximo de um registro, uma tabela e um banco de dados?<BR>
- <A href="#4.6">4.6</A>) Quanto espaço em disco é necessário para armazenar dados de um arquivo texto?<BR>
- <A href="#4.7">4.7</A>) Como eu descubro quais tabelas, índices, bancos de dados e usuários estão definidos?<BR>
- <A href="#4.8">4.8</A>) Minhas consultas estão lentas ou não estão utilizando índices. Por que?<BR>
- <A href="#4.9">4.9</A>) Como eu vejo como o otimizador de consultas está avaliando minha consulta?<BR>
- <A href="#4.10">4.10</A>) O que é um índice de árvore R (R-tree)?<BR>
- <A href="#4.11">4.11</A>) O que é um Otimizador Genético de Consultas?<BR>
- <A href="#4.12">4.12</A>) 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?<BR>
- <A href="#4.13">4.13</A>) Em uma consulta, como eu detecto se um campo é <SMALL>NULL</SMALL>?<BR>
- <A href="#4.14">4.14</A>) Qual é a diferença entre os vá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ço um <SMALL>SELECT</SMALL> somente dos primeiros registros de uma consulta? Um registro randômico?<BR>
+ <A href="#item4.2">4.2</A>) Como eu descubro quais tabelas, índices, bancos de dados e usuários estão definidos? Como eu vejo as consultas utilizadas pelo <I>psql</I> para mostrá-los?<BR>
+ <A href="#item4.3">4.3</A>) Como você muda o tipo de dado de uma coluna?<BR>
+ <A href="#item4.4">4.4</A>) Qual é o tamanho máximo de um registro, uma tabela e um banco de dados?<BR>
+ <A href="#item4.5">4.5</A>) Quanto espaço em disco é necessário para armazenar dados de um arquivo texto?<BR>
+ <A href="#item4.6">4.6</A>) Por que minhas consultas estão lentas? Por que elas não estão utilizando meus índices?<BR>
+ <A href="#item4.7">4.7</A>) Como eu vejo como o otimizador de consultas está avaliando minha consulta?<BR>
+ <A href="#item4.8">4.8</A>) Como eu faço buscas com expressões regulares e buscas com expressões regulares sem diferenciar mauúsculas de minúsculas? Como eu utilizo um índice para buscas sem distinguir maiúsculas de minúsculas?<BR>
+ <A href="#item4.9">4.9</A>) Em uma consulta, como eu detecto se um campo é <SMALL>NULL</SMALL>? Como eu posso ordenar por um campo que é <SMALL>NULL</SMALL> ou não?<BR>
+ <A href="#item4.10">4.10</A>) Qual é a diferença entre os vários tipos de dado de caracteres?<BR>
+ <A href="#item4.11.1">4.11.1</A>) Como eu crio um campo serial/auto incremento?<BR>
+ <A href="#item4.11.2">4.11.2</A>) Como eu consigo o valor de um campo
<SMALL>SERIAL</SMALL>?<BR>
- <A href="#4.15.3">4.15.3</A>) <I>currval()</I> não lida com condição de corrida com outros usuários?<BR>
- <A href="#4.15.4">4.15.4</A>) Por que os números da minha sequência não são reutilizados quando uma transação é abortada? Por que há intervalos nos números da minha sequência/coluna SERIAL?<BR>
- <A href="#4.16">4.16</A>) O que é um <SMALL>OID</SMALL>? O que é um <SMALL>TID</SMALL>?<BR>
- <A href="#4.17">4.17</A>) Qual é 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ão do PostgreSQL eu estou utilizando?<BR>
- <A href="#4.20">4.20</A>) Por que minhas operaçõ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á por padrã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ão tão lentas?<BR>
- <A href="#4.23">4.23</A>) Como eu faço uma junção externa (outer join)?<BR>
- <A href="#4.24">4.24</A>) Como eu faço consultas utilizando múltiplos bancos de dados?<BR>
- <A href="#4.25">4.25</A>) Como eu retorno múltiplos registros ou colunas de uma função?<BR>
- <A href="#4.26">4.26</A>) Por que eu não posso confiar na criação/remoção de tabelas temporárias em funções PL/PgSQL?<BR>
- <A href="#4.27">4.27</A>) Que opções para encriptação estão disponíveis?<BR>
+ <A href="#item4.11.3">4.11.3</A>) <I>currval()</I> não lida com condição de corrida com outros usuários?<BR>
+ <A href="#item4.11.4">4.11.4</A>) Por que os números da minha sequência não são reutilizados quando uma transação é abortada? Por que há intervalos nos números da minha sequência/coluna SERIAL?<BR>
+ <A href="#item4.12">4.12</A>) O que é um <SMALL>OID</SMALL>? O que é um <SMALL>CTID</SMALL>?<BR>
+ <A href="#item4.13">4.13</A>) Por que eu recebo o erro <I>"ERROR: Memory exhausted in AllocSetAlloc()"</I>?<BR>
+ <A href="#item4.14">4.14</A>) Como eu informo qual versão do PostgreSQL eu estou utilizando?<BR>
+ <A href="#item4.15">4.15</A>) Como eu crio uma coluna que conterá por padrão a hora atual?<BR>
+ <A href="#item4.16">4.16</A>) Como eu faço uma junção externa (outer join)?<BR>
+ <A href="#item4.17">4.17</A>) Como eu faço consultas utilizando múltiplos bancos de dados?<BR>
+ <A href="#item4.18">4.18</A>) Como eu retorno múltiplos registros ou colunas de uma função?<BR>
+ <A href="#item4.19">4.19</A>) Por que eu obtenho erros "relation with OID ######
+ does not exist" ao acessar tabelas temporárias em funções PL/PgSQL?<BR>
+ <A href="#item4.20">4.20</A>) Quais soluções de replicação estão disponíveis?<BR>
+ <A href="#item4.21">4.21</A>) Por que os nomes de minhas tabelas e colunas não
+ são reconhecidos em minha consulta?<BR>
- <H2 align="center">Extendendo o PostgreSQL</H2>
- <A href="#5.1">5.1</A>) Eu escrevi uma função. Quando eu executo-a
- no <I>psql</I>, por que ela finaliza o programa com descarga de memória (core dump)?<BR>
- <A href="#5.2">5.2</A>) Como eu posso contribuir com alguns tipos e funções novas para o PostgreSQL?<BR>
- <A href="#5.3">5.3</A>) Como eu escrevo uma função em C que retorna uma tupla?<BR>
- <A href="#5.4">5.4</A>) Eu alterei um arquivo do código-fonte. Por que a recompilação não surtiu efeito?<BR>
-
<HR>
<H2 align="center">Perguntas Gerais</H2>
- <H4><A name="1.1">1.1</A>) O que é PostgreSQL? Como ele é pronunciado?</H4>
-
- <P>PostgreSQL é pronunciado <I>Post-Gres-Q-L</I>.</P>
-
- <P>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 <SMALL>SGBD</SMALL> 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
- <SMALL>SQL</SMALL>. PostgreSQL é livre e o código-fonte completo
- está disponível.</P>
-
- <P>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 (<A href="mailto:scrappy@postgresql.org">scrappy@PostgreSQL.org</A>).
- (Veja a seção <A href="#1.6">1.6</A> 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
- <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ó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.</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 é a licença do PostgreSQL?</h4>
-
+ <H3 id="item1.1">1.1) O que é PostgreSQL? Como ele é pronunciado?</H3>
+
+ <P>PostgreSQL é pronunciado <I>Post-Gres-Q-L</I>, e é, às vezes, referido apenas como
+ <I>Postgres</I>. Um arquivo de áudio está disponível em
+ <a href="http://www.postgresql.org/files/postgresql.mp3">formato MP3</a> para
+ aqueles que gostariam de ouvir a pronúncia.</P>
+
+ <P>O PostgreSQL é um sistema de banco de dados objeto-relacional que tem as
+ características de sistemas de bancos de dados comerciais tradicionais com
+ melhoramentos encontrados nos sistemas <SMALL>SGBD</SMALL>s de próxima geração.
+ PostgreSQL é livre e o código-fonte completo está disponível.</P>
+
+ <P>O desenvolvimento do PostgreSQL é feito por um grupo de desenvolvedores
+ voluntários (na sua maioria) espalhados pelo mundo e que se comunicam via
+ Internet. É um projeto da comunidade e não é controlado por nenhuma
+ empresa. Para se envolver, veja a FAQ do desenvolvedor em <A href=
+ "http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html">
+ http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html</A>
+ </P>
+
+ <H3 id="item1.2">1.2) Quem controla o PostgreSQL?<BR></H3>
+
+ <P>Se você está procurando por um mantenedor, comitê central ou empresa
+ controladora do PostgreSQL, desista --- não há um(a). Nós temos um
+ comitê core e committers CVS, mas estes grupos são mais para questões
+ administrativas do que controle. O projeto é direcionado pela comunidade
+ de desenvolvedores e usuários, que qualquer um pode se juntar. Tudo o que
+ você precisa é se inscrever nas listas de discussão e participar das
+ discussões. Veja a <a href="http://www.postgresql.org/docs/faqs.FAQ_DEV.html">
+ FAQ do desenvolvedor</A> para obter informações como se envolver com o
+ desenvolvimento do PostgreSQL.</P>
+
+ <H3 id="item1.3">1.3) Qual é a licença do PostgreSQL?</H3>
+
+ <P>O PostgreSQL é distribuído sob a licença BSD clássica. Basicamente,
+ ela permite que usuários façam qualquer coisa com o código, incluindo
+ revender os binários sem o código-fonte. A única restrição é que você
+ não nos responsabilize legalmente por problemas com o programa de computador.
+ Há também a exigência de que esta licença apareça em todas as cópias
+ do programa de computador. Aqui está a licença BSD que usamos atualmente:</P>
<P>PostgreSQL está sujeito a seguinte licença:</P>
- <P>PostgreSQL Sistema de Gerê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ã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.</P>
-
- <P>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.</P>
-
- <P>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.</P>
-
- <P>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.</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ível com Unix deve ser capaz de executar o PostgreSQL. As plataformas que foram testadas antes do lançamento de uma versão são listadas nas instruções de instalação.</P>
+ <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ão-Unix estão disponí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ã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 <a href=
- "http://pgfoundry.org/projects/pginstaller">
- http://pgfoundry.org/projects/pginstaller</a> Versõ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á também um porte para Novell Netware 6 em
- <A href="http://forge.novell.com">http://forge.novell.com</A>
- e uma versão para OS/2 (eComStation) em <a href=
- "http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2F">
- http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2F</a>.</P>
+ <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ível com Unix deve ser capaz de executar o PostgreSQL. As plataformas que foram testadas antes do lançamento de uma versão são listadas nas instruções de instalação.</P>
- <P>O servidor ftp principal do PostgreSQL é <A href=
- "ftp://ftp.PostgreSQL.org/pub">ftp://ftp.PostgreSQL.org/pub</A>.
- Para obter a relação de servidores espelhos (mirrors), consulte nosso website.</P>
+ <P>O PostgreSQL também executa nativamente nos sistemas operacionais Microsoft Windows
+ baseados no NT tais como Win200 SP4, WinXP e Win2003. Um instalador pré-empacotado está
+ disponível em <a href= "http://pgfoundry.org/projects/pginstaller">
+ http://pgfoundry.org/projects/pginstaller</a>. Versões do Windows baseadas no MS-DOS
+ (Win95, Win98, WinMe) podem executar o PostgreSQL utilizando o Cygwin.</P>
- <H4><A name="1.6">1.6</A>) Onde eu posso conseguir suporte?</H4>
+ <p>Há também uma versão para o Novell Netware 6 em
+ <a href="http://forge.novell.com">http://forge.novell.com</a>
+ e uma versão para OS/2 (eComStation) em <a href=
+ "http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2F">
+ http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2F</a>.</p>
- <P>A lista de discussão principal é: <A href=
- "mailto:pgsql-general@PostgreSQL.org">pgsql-general@PostgreSQL.org</A>.
- 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):</P>
-<PRE>
- subscribe
- end
-</PRE>
+ <H3 id="item1.5">1.5) Onde eu posso conseguir o PostgreSQL?</H3>
- <P>para <A href=
- "mailto:pgsql-general-request@PostgreSQL.org">pgsql-general-request@PostgreSQL.org</A>.</P>
+ <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á também uma lista síntese (digest) disponível. Para se inscrever, envie um e-mail para: <A href="mailto:pgsql-general-digest-request@PostgreSQL.org">pgsql-general-digest-request@PostgreSQL.org</A> com o seguinte corpo:</P>
-<PRE>
- subscribe
- end
-</PRE>
- Sínteses (Digests) são enviadas aos membros dessa lista quando a lista receber cerca de 30k em mensagens.
+ <H3 id="item1.6">1.6) Qual é a última versão?</H3>
- <P>A lista de discussão sobre bugs está disponível. Para se inscrever, envie um e-mail para <A href="mailto:pgsql-bugs-request@PostgreSQL.org">pgsql-bugs-request@PostgreSQL.org</A> com o seguinte corpo:</P>
-<PRE>
- subscribe
- end
-</PRE>
+ <P>A última versão do PostgreSQL é a versão 8.1.5.</P>
-Há também uma lista de discussão dos desenvolvedores disponível. Para se inscrever, envie um e-mail para <A href="mailto:pgsql-hackers-request@PostgreSQL.org">pgsql-hackers-request@PostgreSQL.org</A> com o seguinte corpo:
-<PRE>
- subscribe
- end
-</PRE>
+ <P>Nós planejamos lançar versões novas a cada ano com versões
+ corretivas em alguns meses.</P>
-<P>Outras listas de discussões e informaçõ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ência a muitos de seus
+ usuários via e-mail. O principal sítio web para inscrição nas listas
+ de e-mail é <a href="http://www.postgresql.org/community/lists/">
+ http://www.postgresql.org/community/lists/</a>. As listas <I>general</I>
+ e <I>bugs</I> são um bom lugar para início.</P>
<P>O principal canal de IRC é o <I>#postgresql</I> na Freenode (<I>irc.freenode.net</I>). Para se conectar você pode utilizar o comando Unix <code>irc -c '#postgresql' "$USER" irc.freenode.net</code> ou utilizar qualquer outro cliente de IRC. Um canal hispânico (<I>#postgresql-es</I>) e um francês (<I>#postgresqlfr</I>) também existem na mesma rede. Há também um canal PostgreSQL na EFNet.</P>
<P>Uma lista de empresas que prestam suporte comercial está disponí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 é a última versão?</H4>
-
- <P>A última versão do PostgreSQL é a versão 7.4.6.</P>
-
- <P>Nós planejamos lançar versões novas a cada seis ou oito meses.</P>
-
- <H4><A name="1.8">1.8</A>) Que documentação está disponível?</H4>
-
- <P>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 <I>/doc</I>. Você pode acessar os manuais online em <A href="http://www.PostgreSQL.org/docs">http://www.PostgreSQL.org/docs</A>.</P>
-
- <P>Há dois livros sobre PostgreSQL disponíveis online em <A href=
- "http://www.PostgreSQL.org/docs/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á uma lista de livros sobre PostgreSQL disponíveis para compra em <A
- href=
- "http://techdocs.postgresql.org/techdocs/bookreviews.php">http://techdocs.PostgreSQL.org/techdocs/bookreviews.php</A>.
- Há também uma coleção de artigos té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ção sobre tipos, operadores, funções, agregações, etc. Use \? para mostrar os comandos disponíveis.</P>
-
- <P>Nosso web site contém ainda mais documentação.</P>
-
- <H4><A name="1.9">1.9</A>) Como eu posso saber quais são os bugs conhecidos ou caracterí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í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á outro livro sobre PostgreSQL em <A
- href=
- "http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook.</A>
- Há 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 é 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á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á livre do Bug do Milênio?</H4>
-
- <P>Sim, nós podemos manipular datas apó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ç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 <I>pgsql-hackers</I> e <I>pgsql-patches</I>. Então submeta patches de alta qualidade para pgsql-patches.</P>
-
- <P>Há algumas pessoas que tem privilégios para fazer mudanças (commit) na árvore <SMALL>CVS</SMALL> 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.</P>
-
- <H4><A name="1.13">1.13</A>) Como eu informo a existência de um bug?</H4>
+ <H3 id="item1.8">1.8) Como eu informo a existência de um bug?</H3>
<P>Visite o formulário que reporta bugs do PostgreSQL em <A href=
"http://www.postgresql.org/support/submitbug">http://www.postgresql.org/support/submitbug</A>.</P>
-
<P>Verifique também o nosso ftp <A href=
"ftp://ftp.PostgreSQL.org/pub">ftp://ftp.PostgreSQL.org/pub</A> para
- ver se há uma versão mais recente do PostgreSQL ou patches.</P>
+ ver se há uma versão mais recente do PostgreSQL.</P>
+
+ <P>Bugs submetidos utilizando o formulário ou informado a qualquer
+ lista de discussão do PostgreSQL tipicamente gera uma das seguintes
+ respostas:</P>
+ <ul>
+ <li>Não é um bug e o porquê</li>
+ <li>É um bug conhecido e já está na lista de
+ <A href="http://www.postgresql.org/docs/faqs.TODO.html">AFAZERES (TODO)</A></li>
+ <li>O bug foi corrigido na versão atual</li>
+ <li>O bug foi corrigido mas não foi empacotado em um versão oficial</li>
+ <li>Um pedido foi feito para obter informações detalhadas:
+ <ul>
+ <li>Sistema Operacional</li>
+ <li>Versão do PostgreSQL</li>
+ <li>Exemplo de teste que reproduz o bug</li>
+ <li>Informações sobre depuração</li>
+ <li>Saída reconstituidora de vestígios (backtrace) do depurador</li>
+ </ul>
+ </li>
+ <li>O bug é novo. O seguinte pode ocorrer:
+ <ul>
+ <li>Uma correção é criada e será incluída na próxima versão</li>
+ <li>O bug não pode ser corrigido imediatamente e é adicionado
+ a lista de <A href="http://www.postgresql.org/docs/faqs.TODO.html">AFAZERES (TODO)</A></li>
+ </ul>
+ </li>
+ </ul>
+
+ <H3 id="item1.9">1.9) Como eu posso saber quais são os bugs conhecidos
+ ou funcionalidades ausentes?</H3>
+
+ <P>O PostgreSQL suporta um subconjunto extendido do <SMALL>SQL:2003</SMALL>.
+ Veja nossa lista de <A href="http://www.postgresql.org/docs/faqs.TODO.html">AFAZERES (TODO)</A>
+ que contém bugs conhecidos, funcionalidades ausentes e planos futuros.</P>
+
+ <P>Uma solicitação de funcionalidade geralmente resulta em uma das
+ seguintes respostas:</P>
+ <ul>
+ <li>A funcionalidade já está na lista de <A href="http://www.postgresql.org/docs/faqs.TODO.html">AFAZERES (TODO)</A></li>
+ <li>A funcionalidade não é desejável porque:
+ <ul>
+ <li>Ela duplica uma funcionalidade existente que já segue o
+ padrão SQL</li>
+ <li>A funcionalidade aumentará a complexidade do código mas
+ adicionará pouco benefício</li>
+ <li>A funcionalidade será insegura ou não-confiável</li>
+ </ul>
+ </li>
+ <li>A nova funcionalidade é adicionada a lista de
+ <A href="http://www.postgresql.org/docs/faqs.TODO.html">AFAZERES (TODO)</A></li>
+ </ul>
+
+ <P>O PostgreSQL não utiliza sistema de acompanhamento de bugs porque
+ nós achamos mais eficiente responder diretamente o e-mail e manter a
+ lista de <A href="http://www.postgresql.org/docs/faqs.TODO.html">AFAZERES (TODO)</A>
+ atualizada. Na prática, bugs não duram muito no programa; e bugs que afetam
+ uma grande quantidade de usuários são corrigidos rapidamente. O único lugar
+ para encontrar todas as mudanças, melhorias e correções em uma versão do
+ PostgreSQL é ler as mensagens de log do
+ <a href="http://www.postgresql.org/developer/sourcecode/">CVS</a>. Até mesmo
+ as notas de lançamento não listam todas as mudanças feitas no programa.</P>
+
+ <H3 id="item1.10">1.10) Que documentação está disponível?</H3>
+
+ <P>O PostgreSQL inclui vasta documentação, incluindo um manual extenso,
+ páginas de manuais (man pages) e alguns exemplos teste. Veja o diretório
+ <I>/doc</I>. Você também pode pesquisar os manuais online em <A href=
+ "http://www.PostgreSQL.org/docs">http://www.PostgreSQL.org/docs</A>.
+ </P>
+
+ <P>Há dois livros sobre PostgreSQL disponíveis online em <A href=
+ "http://www.postgresql.org/docs/books/awbook.html">http://www.postgresql.org/docs/books/awbook.html</A>
+ e <A href=
+ "http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook/</A>.
+ Há uma lista de livros sobre PostgreSQL disponíveis para compra. Um dos mais
+ populares é o do Korry Douglas. Uma lista de análise sobre os livros pode ser
+ encontrada em <A href=
+ "http://techdocs.postgresql.org/techdocs/bookreviews.php">http://techdocs.PostgreSQL.org/techdocs/bookreviews.php</A>.
+
+ <P>O programa cliente de linha de comando <I>psql</I> tem alguns comandos \d para
+ mostrar informações sobre tipos, operadores, funções, agregações, etc. - utilize \?
+ para mostrar os comandos disponíveis.</P>
+
+ <P>Nosso sítio web contém ainda mais documentação.</P>
+
+ <H3 id="item1.11">1.11) Como eu posso aprender <SMALL>SQL</SMALL>?</H3>
+
+ <P>Primeiro, considere os livros específicos sobre PostgreSQL mencionados
+ acima. Outro é o "Teach Yourself SQL in 21 Days, Second Edition" e <A href=
+ "http://members.tripod.com/er4ebus/sql/index.htm">http://members.tripod.com/er4ebus/sql/index.htm</A>.
+ Muitos de nossos usuários gostam do <I>The Practical SQL Handbook</I>,
+ Bowman, Judith S., et al., Addison-Wesley. Outros do <I>The
+ Complete Reference SQL</I>, Groff et al., McGraw-Hill.</P>
+
+ <P>Há também bons tutoriais disponíveis online:
+ <UL>
+ <LI> <A href="http://www.intermedia.net/support/sql/sqltut.shtm">http://www.intermedia.net/support/sql/sqltut.shtm</A>
+ </LI>
+ <LI>
+ <A href="http://sqlcourse.com/">http://sqlcourse.com</A>
+ </LI>
+ <LI>
+ <A href="http://www.w3schools.com/sql/default.asp">http://www.w3schools.com/sql/default.asp</A>
+ </LI>
+ <LI><A href=
+ "http://mysite.verizon.net/Graeme_Birchall/id1.html">http://mysite.verizon.net/Graeme_Birchall/id1.html</A>
+ </LI>
+ </UL>
- <H4><A name="1.14">1.14</A>) Como é o PostgreSQL comparado a outros <SMALL>SGBD</SMALL>s?</H4>
+ <H3 id="item1.12">1.12) Como posso submeter uma correção (patch) ou me juntar a equipe de desenvolvimento?</H3>
- <P>Há várias maneiras de se medir um software: características, performance, confiabilidade, suporte e preç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 é o PostgreSQL comparado a outros <SMALL>SGBD</SMALL>s?</H3>
+
+ <P>Há várias maneiras de se medir um software: funcionalidades, performance, confiabilidade, suporte e preço.</P>
<DL>
- <DT><B>Características</B></DT>
+ <DT><B>Funcionalidades</B></DT>
- <DD>PostgreSQL tem muitas características presentes em muitos <SMALL>SGBD</SMALL>s comerciais como transações, subconsultas, gatilhos, visões, integridade referencial de chave estrangeira e travamento (lock) sofisticado. Nós temos algumas características 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).<BR>
+ <DD>PostgreSQL tem muitas características presentes em muitos <SMALL>SGBD</SMALL>s comerciais como transações, subconsultas, gatilhos, visões, integridade referencial de chave estrangeira e bloqueio (lock) sofisticado. Nós temos algumas funcionalidades que eles não tem, como tipos definidos pelo usuário, herança, regras e controle de concorrência de múltiplas versões para reduzir bloqueios (locks).<BR>
<BR>
</DD>
<DT><B>Performance</B></DT>
- <DD>A performance do PostgreSQL é comparável a outros bancos de dados comerciais e de código livre. Ele é mais rápido em algumas coisas, mais lento em outras. 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 <I>Características</I> acima. Nós desenvolvemos buscando confiabilidade e características, e nós continuamos a melhorar a performance a cada versão.<BR>
-
+ <DD>A performance do PostgreSQL é comparável a outros bancos de dados comerciais e de código livre. Ele é mais rápido em algumas coisas, mais lento em outras. Nossa performance é geralmente +/- 10% comparada a de outros bancos de dados.
<BR>
</DD>
<DT><B>Suporte</B></DT>
- <DD>Nossas listas de discussão fornecem contato com um grupo de desenvolvedores e usuários para ajudar a resolver muitos problemas encontrados. Enquanto nós não podemos garantir o conserto, <SMALL>SGBD</SMALL>s comerciais nem sempre fornecem também. Com acesso direto aos desenvolvedores, a comunidade de usuários, manuais e o código fonte faz com que o suporte do PostgreSQL seja superior ao de outros <SMALL>SGBD</SMALL>s. Há suporte comercial por incidente disponíveis para aqueles que precisam de um. (Veja <A href="#1.6">seção 1.6 da FAQ</A>.)<BR>
+ <DD>Nossas listas de discussão fornecem contato com um grupo de desenvolvedores e usuários para ajudar a resolver muitos problemas encontrados. Enquanto nós não podemos garantir o conserto, <SMALL>SGBD</SMALL>s comerciais nem sempre fornecem também. Com acesso direto aos desenvolvedores, a comunidade de usuários, manuais e o código fonte faz com que o suporte do PostgreSQL seja superior ao de outros <SMALL>SGBD</SMALL>s. Há suporte comercial por incidente disponíveis para aqueles que precisam de um. (Veja <A href="#item1.7">seção 1.7 da FAQ</A>.)<BR>
<BR>
</DD>
<DT><B>Preço</B></DT>
- <DD>Nós somos livres para uso dele tanto comercial quanto não comercial. Você pode adicionar nosso código ao seu produto sem limitações, exceto aquelas descritas na nossa licença compatível com a licença BSD mencionada acima.<BR>
+ <DD>Nós somos livres para uso dele tanto comercial quanto não comercial. Você pode adicionar nosso código ao seu produto sem limitações, exceto aquelas descritas na nossa licença BSD mencionada acima.<BR>
<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 é muito importante em um projeto de código aberto. Ela previne descontinuidades que podem facilmente descontinuar o andamento do projeto.</P>
- <P>É 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 <A href="http://store.pgsql.com/shopping/">http://store.pgsql.com/shopping/</A> e faça uma doação.</P>
- <P>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.</P>
-
- <P>Se você tiver uma história de sucesso sobre o PostgreSQL, envie-a para nossa lista <i>advocacy</i> em <a href="mailto:pgsql-advocacy@postgresql.org">pgsql-advocacy@postgresql.org</a>.</P>
-
<HR>
<H2 align="center">Perguntas sobre Clientes</H2>
- <H4><A name="2.1">2.1</A>) Há drivers <SMALL>ODBC</SMALL> para PostgreSQL?</H4>
+ <H3 id="item2.1">2.1) Quais interfaces estão disponíveis para PostgreSQL?</H3>
- <P>Há dois drivers <SMALL>ODBC</SMALL> disponíveis, PsqlODBC e o OpenLink <SMALL>ODBC</SMALL>.</P>
- <P>Você 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ção do PostgreSQL inclui somente as interfaces <SMALL>C</SMALL> e
+ <SMALL>C</SMALL> embutida. Todas as outras interfaces são projetos independentes
+ que podem ser obtidos separadamente; sendo separados permitem que eles tenham
+ suas próprias datas de lançamento e time de desenvolvedores.</P>
- <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ão, então você poderá ter o <SMALL>ODBC</SMALL> para PostgreSQL disponível em toda plataforma que eles suportam (Win, Mac, Unix, VMS).</P>
- <P>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 <A href="mailto:postgres95@openlink.co.uk">postgres95@openlink.co.uk</A>.</P>
+ <P>Algumas linguagens de programação como <SMALL>PHP</SMALL> incluem uma
+ interface para PostgreSQL. Interfaces para linguagens como Perl,
+ <SMALL>TCL</SMALL>, Python e muitas outras estão disponíveis em
+ <a href="http://gborg.postgresql.org">http://gborg.postgresql.org</A>
+ na seção de <I>Drivers/Interfaces</I> ou via busca na Internet.
+ </P>
- <H4><A name="2.2">2.2</A>) Quais ferramentas estão disponíveis para utilizar o PostgreSQL com páginas Web?</H4>
+ <H3 id="item2.2">2.2) Quais ferramentas estão disponíveis para utilizar o PostgreSQL com páginas Web?</H3>
<P>Uma boa introdução para páginas web que utilizam bancos de dados pode ser vista em:
<A href="http://www.webreview.com">http://www.webreview.com</A></P>
- <P>Para integração na Web, PHP é uma excelente interface. Ele está 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áficas para iteragir com o usuário?</H4>
-
- <P>Sim, há várias interfaces gráficas para PostgreSQL disponí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ária). Há
- també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ão disponíveis para comunicar-se com PostgreSQL?</H4>
+ <P>Para integração na Web, PHP (<A
+ href="http://www.php.net">http://www.php.net</A>)
+ é uma excelente interface.</P>
- <P>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.</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ão incluídas na distribuição do PostgreSQL:</P>
+ <H3 id="item2.3">2.3) O PostgreSQL tem interfaces gráficas para iteragir com o usuário?</H3>
- <UL>
- <LI>C (libpq)</LI>
+ <P>Há um vasto número de Ferramentas Gráficas (GUI), que estão disponíveis
+ para o PostgreSQL, comerciais e de desenvolvedores de código aberto. Uma
+ lista detalhada pode ser encontrada em <A href="http://www.postgresql.org/docs/techdocs.54">
+ Documentação da Comunidade PostgreSQL</A></P>
- <LI>Embedded C (ecpg)</LI>
-
- <LI>Java (jdbc)</LI>
-
- <LI>Python (PyGreSQL)</LI>
-
- <LI>TCL (libpgtcl)</LI>
-
- </UL>
- <P>Interfaces adicionais estão disponíveis em
- <A href="http://gborg.postgresql.org">http://gborg.postgresql.org</A>
- na seçã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çã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ória (core dump). Por que?</H4>
-
- <P>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.</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ê 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 <I>postmaster</I>. Muitos sistemas, com o número padrão de buffers e processos, precisam de aproximadamente 1 MB. Veja a seçã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ção sobre memória compartilhada e semá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 é <I>IpcSemaphoreCreate: semget failed (No space left on device)</I> 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 <I>postmaster</I> com um limite pequeno de processos do servidor. Utilize <I>-N</I> com o parâmetro menor do que o padrão (32). Uma solução permanente seria aumentar os parâmetros do kernel <SMALL>SEMMNS</SMALL> e <SMALL>SEMMNI</SMALL>.</P>
-
- <P>Semáforos inoperantes podem também causar danos durante intenso acesso ao banco de dados.</P>
-
- <P>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.</P>
-
- <H4><A name="3.5">3.5</A>) Como eu controlo conexões de outras máquinas?</H4>
-
- <P>Por padrão, o PostgreSQL só permite conexões da máquina local utilizando soquetes de domínio Unix ou conexões TCP/IP. Outras máquinas não poderão conectar-se a menos que você modifique listen_addresses no postgresql.conf, <B>e</B> habilite a autenticação por má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, índices podem acelerar consultas. O comando <SMALL>EXPLAIN ANALYZE</SMALL> permite que você veja como o PostgreSQL está interpretando a consulta, e quais os índices são utilizados.</P>
-
- <P>Se você está fazendo muitos <SMALL>INSERTs</SMALL>, considere fazê-los em lote utilizando o comando <SMALL>COPY</SMALL>. Isso é mais rápido do que <SMALL>INSERTs</SMALL> individuais. Segundo, sentenças que não estão em um bloco de transação <SMALL>BEGIN WORK/COMMIT</SMALL> 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.</P>
-
- <P>Há várias opçõ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ê pode desabilitar o <I>fsync()</I> utilizando a opção <i>fsync</i>. Isso irá impedir que <I>fsync()</I>s enviem os dados para disco após cada transação.</P>
-
- <P>Você pode utilizar a opção <I>shared_buffers</I> 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 <I>postmaster</I> 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.</P>
-
- <P>Você também pode utilizar a opção <I>sort_mem</I> (no PostgreSQL 8.0: <I>work_mem</I>) 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).</P>
-
- <P>Você também pode utilizar o comando <SMALL>CLUSTER</SMALL> para agrupar dados em tabelas para combinar um índice. Veja o manual sobre <SMALL>CLUSTER</SMALL> para mais informação.</P>
-
-
- <H4><A name="3.7">3.7</A>) Quais características de depuração estão disponíveis?</H4>
-
- <P>PostgreSQL tem várias características que relatam informações que podem ser valiosas para fins de depuração.</P>
-
- <P>Primeiro, execute o <I>configure</I> com a opção --enable-cassert, muitos <I>assert()</I>s monitoram o progresso do núcleo (backend) e finalizam o programa quando alguma coisa inesperada acontece.</P>
-
- <P>O <I>postmaster</I> e o <I>postgres</I> tem várias opções de depuração disponíveis. Primeiro, quando iniciar o <I>postmaster</I>, tenha certeza que você enviou a saida padrão e a saída de erro padrão para um arquivo de log, como em:</P>
-<PRE>
- cd /usr/local/pgsql
- ./bin/postmaster >server.log 2>&1 &
-</PRE>
-
-<P>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 <I>Postmaster</I> tem uma opção <I>-d</I> que permite que informações mais detalhadas sejam relatadas. A opção <I>-d</I> é 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.</P>
-
-<P>Se o <I>postmaster</I> não está sendo executado, você pode executar o núcleo do <I>postgres</I> a partir da linha de comando, e digitar a sua sentença <SMALL>SQL</SMALL> diretamente. Isso é recomendado <B>somente</B> 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 <I>postmaster</I>, 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.</P>
-
-<P>Se o <i>postmaster</i> está sendo executado, inicie o <i>psql</i> em uma janela, e entã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ê pode definir pontos de parada (<i>breakpoints</i>) no depurador e digitar consultas no <i>psql</i>. Se você está depurando a inicialização do <i>postgres</i>, você pode definir PGOPTIONS="-W n" e então iniciar o <i>psql</i>. Isto retardará a inicialização por <i>n</i> segundos então você pode anexar o depurador ao processo, definir quaisquer pontos de parada e continuar pela sequência de inicialização.</p>
-
-<P>Há várias variáveis de configuração do servidor <code>log_*</code> que habilitam a exibição de estatísticas que podem ser muito úteis para depuração e medidas de performance.</P>
-
-<P>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 <I>pgsql/data/base/dbname</I>. O arquivo de perfil do cliente será colocado no diretório atual do cliente. O Linux requer uma compilação com <I>-DLINUX_PROFILE</I> para criaçã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ões de outras máquinas?</H3>
+
+ <P>Por padrão, o PostgreSQL só permite conexões da máquina local utilizando soquetes de domínio Unix ou conexões TCP/IP. Outras máquinas não poderão conectar-se a menos que você modifique <I>listen_addresses</I> no <I>postgresql.conf</I>, habilite a autenticação por máquina modificando o arquivo <I>$PGDATA/pg_hba.conf</I> e reinicie o servidor PostgreSQL.</P>
+
+ <H3 id="item3.3">3.3) Como eu ajusto o servidor de banco de dados para obter uma performance melhor?</H3>
+
+ <P>Há três grandes áreas para melhorar a performance em potencial:</P>
+
+ <DL>
+ <DT><B>Mudança de Consultas</B></DT>
+
+ <DD>Isto involve modificar consultas para obter melhor performance:
+ <ul>
+ <li>Criação de índices, incluir expressões e índices parciais</li>
+ <li>Utilização o COPY ao invés de múltiplos comandos <SMALL>INSERT</SMALL>s</li>
+ <li>Agrupamento de múltiplos comandos em uma única transação para diminuir
+ a despesa com efetivações (commit)</li>
+ <li>Utilização do <SMALL>CLUSTER</SMALL> quando recuperar vários registros de
+ um índice</li>
+ <li>Utilização do <SMALL>LIMIT</SMALL> para retornar um subconjunto da saída
+ da consulta</li>
+ <li>Utilização de Consultas preparadas</li>
+ <li>Utilização de <SMALL>ANALYZE</SMALL> para manter as estatísticas do
+ otimizador corretas</li>
+ <li>Utilização regular do <SMALL>VACUUM</SMALL> ou <I>pg_autovacuum</I></li>
+ <li>Remoção de índices durante grande mudança de dados</li>
+ </ul><BR>
+ <BR>
+ </DD>
+
+ <DT><B>Configuração do Servidor</B></DT>
+
+ <DD>Um grande número de configurações que afetam a performance.
+ Para obter detalhes adicionais, veja <a href=
+ "http://www.postgresql.org/docs/current/static/runtime.html">
+ Administration Guide/Server Run-time Environment/Run-time
+ Configuration</a> para listagem completa, e para
+ comentários veja <a href=
+ "http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html">
+ http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html</a>
+ e <a href="http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html">
+ http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html</a>.
+ <BR>
+ <BR>
+ </DD>
+
+ <DT><B>Seleção do Hardware</B></DT>
+
+ <DD>O efeito do hardware na performance é detalhado em
+ <a href="http://www.powerpostgresql.com/PerfList/">
+ http://www.powerpostgresql.com/PerfList/</a> e <a
+ href="http://momjian.us/main/writings/pgsql/hw_performance/index.html">
+ http://momjian.us/main/writings/pgsql/hw_performance/index.html</a>.
+ <BR>
+ <BR>
+ </DD>
+ </DL>
- <P>Você 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ísticas de depuração estão disponíveis?</H3>
- <P>O limite padrão é de 32 processos. Você pode aumentá-lo reiniciando o <I>postmaster</I> com o valor conveniente de <I>-N</I> ou modificar o <I>postgresql.conf</I>.</P>
+ <P>Há muitas variáveis de configuração do servidor <CODE>log_*</CODE>
+ que habilitam a exibição de consultas e estatísticas que podem ser
+ muito úteis para depuração e medidas de performance.</P>
- <P>Note que se você definir o <I>-N</I> com um valor maior do que 32, você também deve aumentar <I>-B</I> cujo padrão é 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ú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, <SMALL>SHMMAX;</SMALL> o número máximo de semáforos, <SMALL>SEMMNS</SMALL> e <SMALL>SEMMNI;</SMALL> o número máximo de processos, <SMALL>NPROC;</SMALL> o número máximo de processos por usuário, <SMALL>MAXUPRC;</SMALL> e o número máximo de arquivos abertos, <SMALL>NFILE</SMALL> e <SMALL>NINODE</SMALL>. 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.</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á no diretório <I>pgsql_tmp</I>?</H4>
+ <P>Você atingiu o limite padrão que é de 100 sessões. Você
+ precisa aumentar o limite do <I>postmaster</I>, que diz
+ quantos processos servidor concorrentes ele pode iniciar, alterando
+ o valor <I>max_connections</I> no <I>postgresql.conf</I> e
+ reiniciando o <I>postmaster</I>.</P>
- <P>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 <SMALL>ORDER BY</SMALL> e a ordenação requer mais espaço do que o parâmetro <I>-S</I> do servidor permite, então arquivos temporários são criados para abrigar os dados extras.</P>
- <P>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 <I>postmaster</I> removerá os arquivos destes diretórios.</P>
+ <H3 id="item3.6">3.6) Qual é o processo de atualização do PostgreSQL?</H3>
- <H4><A name="3.10">3.10</A>) O que eu preciso fazer para exportar e importar durante a atualização entre versões do PostgreSQL?</H4>
+ <P>O time do PostgreSQL faz somente pequenas mudanças entre versões corretivas, então atualizar da versão 7.4.8 para 7.4.9 não requer uma exportação e uma importação; basta para o servidor de banco de dados, instalar os binários atualizados e reiniciar o servidor.</P>
- <P>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.</P>
+ <P>Todos os usuários devem atualizar para as versões corretivas mais recentes
+ assim que elas estiverem disponíveis. Enquanto cada atualização tem algum risco,
+ versões corretivas do PostgreSQL são projetadas para corrigir somente bugs comuns
+ com um risco mínimo. A comunidade considera <i>não</i> atualizar mais
+ perigoso do que atualizar.</P>
- <P>Em versões onde o formato em disco não muda, o script <I>pg_upgrade</I> pode ser utilizado para atualizar sem precisar de um dump/restore. As notas da versão mencionam se <I>pg_upgrade</I> está disponível para a versão.</P>
+ <P>Versões novas (i.e. da 7.3 para 7.4) geralmente muda-se o formato interno das tabelas de sistema e dos arquivo de dados. Essas mudanças geralmente são complexas, então nós não mantemos compatibilidade para os arquivos de dados. Uma exportação/importação de um banco de dados é necessária para atualizações entre versões.</P>
- <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í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.</P>
+ <P>Por causa do hardware de PC ser em sua maioria compatível, pessoas tendem a acreditar que todos os hardwares de PC são de mesma qualidade. Não é verdade. ECC RAM, SCSI e placas mãe de qualidade são mais confiáveis e têm uma melhor performance do que hardwares mais baratos. O PostgreSQL executará em quase todo hardware, mas se a confiabilidade e a performance forem importantes é prudente pesquisar sobre as opções de hardware. Nossas listas de discussão podem ser usadas para discutir opções de hardware e dilemas.</P>
<HR>
<H2 align="center">Perguntas Operacionais</H2>
- <H4><A name="4.1">4.1</A>) Qual é a diferença entre cursores binários e normais?</H4>
-
- <P>Veja o comando <SMALL>DECLARE</SMALL> no manual para uma descrição.</P>
-
- <H4><A name="4.2">4.2</A>) Como eu faço um <SMALL>SELECT</SMALL> somente dos primeiros registros de uma consulta? Um registro randômico?</H4>
+ <H3 id="item4.1">4.1) Como eu faço um <SMALL>SELECT</SMALL> somente dos primeiros registros de uma consulta? Um registro randômico?</H3>
- <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ê só quer os primeiros registros. Considere utilizar uma consulta que tenha um <SMALL>ORDER BY</SMALL>. Se há um í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é que os registros desejados tenham sido gerados.</P>
-
- <P>Para obter um registro randômico, utilize:</P>
+ <P>Para obter somente alguns registros, se você sabe o número de
+ registros necessários ao executar o <SMALL>SELECT</SMALL> utilize
+ o <SMALL>LIMIT</SMALL>. Se um índice corresponde no <SMALL>ORDER
+ BY</SMALL> é possível que a consulta toda não tenha que ser
+ executada. Se você não sabe o número de registros ao executar o
+ <SMALL>SELECT</SMALL>, utilize um cursor e o <SMALL>FETCH</SMALL>.</P>
+
+ <P>Para <SMALL>obter</SMALL> um registro randômico, utilize:</P>
<PRE>
SELECT col
FROM tab
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, índices, bancos de dados e usuários estão definidos? Como eu vejo as consultas utilizadas pelo <I>psql</I> para mostrá-los?</H3>
-<P>Utilize o comando \dt para ver tabelas no <I>psql</I>. Para obter uma lista completa de
-comandos no psql você pode utilizar \?. Alternativamente
-você pode ler o código-fonte do <I>psql</I> no arquivo <I>pgsql/src/bin/psql/describe.c</I>. Ele contém comandos <SMALL>SQL</SMALL> que geram a saída para os comandos do psql. Você também pode iniciar o <I>psql</I> com a opção <I>-E</I> 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 <SMALL>SQLi</SMALL> na qual você pode consultar informaçõ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ê pode utilizar \?.
+ Alternativamente, você pode ler o código-fonte do <I>psql</I> no arquivo
+ <I>pgsql/src/bin/psql/describe.c</I>, ele contém os comandos <SMALL>SQL</SMALL>
+ que geram a saída para os comandos de contrabarra do <I>psql</I>. Você
+ também pode iniciar o <I>psql</I> com a opção <I>-E</I> para que as consultas
+ utilizadas para executar os comandos que você informou seja exibida.
+ O PostgreSQL também fornece uma inteface compatível com <SMALL>SQL</SMALL> do
+ INFORMATION SCHEMA que você pode consultar para obter informação sobre o
+ banco de dados.</P>
- <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á também tabelas do sistema que começam com <I>pg_</I> que os descrevem
+ também.</P>
- <P>A funcionalidade <SMALL>DROP COLUMN</SMALL> foi adicionada a versão 7.3 com comando
- <SMALL>ALTER TABLE DROP COLUMN</SMALL>. Em versões anteriores, você pode fazer isto:</P>
-<PRE>
- 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;
-</PRE>
+ <P>Utilizando o <I>psql -l</I> listará todos os bancos de dados.</P>
-<P>Para alterar o tipo de dados de uma coluna, faça isto:</P>
+ <P>Veja também o arquivo <I>pgsql/src/tutorial/syscat.source</I>. Ele
+ ilustra muitos dos comandos <SMALL>SELECT</SMALL>s necessários para obter
+ informação das tabelas de sistema do banco de dados.</P>
+
+ <H3 id="item4.3">4.3) Como você muda o tipo de dado de uma coluna?</H3>
+
+ <P>Mudar o tipo de dado de uma coluna pode ser feito facilmente na versão 8.0
+ ou superior com <SMALL>ALTER TABLE ALTER COLUMN TYPE</SMALL>.</P>
+
+ <P>Em versões anteriores, faça isso:</P>
<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ê pode querer executar o comando <I>VACUUM FULL tab</I> para recuperar o espaço em disco utilizado pelos registros expirados.</P>
-
- <H4><A name="4.5">4.5</A>) Qual é o tamanho máximo de um registro, uma tabela e um banco de dados?</H4>
+ <P>Você pode então querer fazer um <I>VACUUM FULL tab</I> para recuperar
+ o espaço em disco utilizado pelos registros expirados.</P>
- <P>Estes são os limites:</P>
-<PRE>
-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
-</PRE>
-
-É claro, que eles não são ilimitados, mas limitados ao espaço em disco disponível e espaço em memória/swap. A Performance será penalizada quando estes valores se tornarem grandes.
-<P>O tamanho máximo de uma tabela com 32 TB não requer suporte a arquivos grandes do sistema operacional. Tabelas grandes são armazenadas como múltiplos arquivos de 1 GB então o limite do sistema de arquivos não é importante.</P>
-<P>O tamanho máximo de uma tabela e o número máximo de colunas pode ser quadruplicadas aumentando-se o tamanho dos blocos para 32k.</P>
+ <H3 id="item4.4">4.4) Qual é o tamanho máximo de um registro, uma tabela e um banco de dados?</H3>
- <H4><A name="4.6">4.6</A>) Quanto espaço em disco é necessário para armazenar dados de um arquivo texto?</H4>
+ <P>Estes são os limites:</P>
+<BLOCKQUOTE>
+<TABLE>
+<TR><TD>Tamanho máximo de um banco de dados?</TD><TD>ilimitado (existem bancos de dados de 32 TB)</TD></TR>
+<TR><TD>Tamanho máximo de uma tabela?</TD><TD>32 TB</TD></TR>
+<TR><TD>Tamanho máximo de um registro?</TD><TD>400 GB</TD></TR>
+<TR><TD>Tamanho máximo de um campo?</TD><TD>1 GB</TD></TR>
+<TR><TD>Número máximo de registros em uma tabela?</TD><TD>ilimitado</TD></TR>
+<TR><TD>Número máximo de colunas em uma tabela?</TD><TD>250-1600 dependendo dos tipos das colunas</TD></TR>
+<TR><TD>Número máximo de índices em uma tabela?</TD><TD>ilimitado</TD></TR>
+</TABLE>
+</BLOCKQUOTE>
+
+ <P>É claro, que eles não são ilimitados, mas limitados
+ ao espaço em disco disponível e espaço em memória/swap.
+ A Performance será penalizada quando estes valores se tornarem grandes.</P>
+
+ <P>O tamanho máximo de uma tabela com 32 TB não requer suporte a
+ arquivos grandes do sistema operacional. Tabelas grandes são armazenadas
+ como múltiplos arquivos de 1 GB então o limite do sistema de
+ arquivos não é importante.</P>
+
+ <P>O tamanho máximo de uma tabela, o tamanho de um registro e o número
+ máximo de colunas podem ser quadruplicados aumentando-se o tamanho padrão
+ do bloco para 32k. O tamanho máximo de uma tabela pode também ser aumentado utilizando
+ particionamento de tabela.</P>
+
+ <P>Uma limitação é que índices não podem ser criados em colunas maiores do que
+ 2.000 caracteres. Felizmente, tais índices são raramente necessários. Unicidade é
+ melhor garantida por um índice de uma função de um hash MD5 de uma coluna longa, e
+ indexação de texto longo permite a busca de palavras dentro da coluna.</P>
+
+ <H3 name="item4.5">4.5) Quanto espaço em disco é necessário para armazenar dados de um arquivo texto?</H3>
<P>Um banco de dados PostgreSQL irá requerer até cinco vezes a quantidade de espaço requerida para armazenar dados em um arquivo texto.</P>
- <P>Como um exemplo, considere um arquivo com 100.000 linhas contendo um inteiro e uma descrição em cada linha. Suponha que o tamanho médio da descrição é de vinte bytes. O arquivo terá 2.8 MB. O tamanho do arquivo do banco de dados PostgreSQL que contém esses dados pode ser estimado em 6.4 MB:</P>
+ <P>Como um exemplo, considere um arquivo com 100.000 linhas contendo um inteiro e uma descrição em cada linha. Suponha que o tamanho médio da descrição é de vinte bytes. O arquivo terá 2,8 MB. O tamanho do arquivo do banco de dados PostgreSQL que contém esses dados pode ser estimado em 5,6 MB:</P>
<PRE>
- 32 bytes: cada cabeçalho de registro (aproximadamente)
+ 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 (arredondado para cima)
- 128 registros por página
-
-735 páginas do banco de dados * 8192 bytes por página = 6,021,120 bytes (6 MB)
-</PRE>
-<P>Índices não requerem muito espaço, mas contém dados que foram indexados, então eles podem ocupar algum espaço.</P>
-
-<P><SMALL>NULL</SMALL>s são armazenados como bitmaps, então eles utilizam muito pouco espaço.</P>
-
- <H4><A name="4.7">4.7</A>) Como eu descrubo quais tabelas, índices, bancos de dados e usuários estão definidos?</H4>
-
- <P><I>psql</I> 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 <I>pg_</I> e que os descrevem também. Também, <I>psql -l</I> listará todos os bancos de dados.</P>
-
- <P>Veja também o arquivo <I>pgsql/src/tutorial/syscat.source</I>. Ele ilustra muitos <SMALL>SELECT</SMALL>s necessários para obter informação das tabelas do sistema de banco de dados.</P>
-
- <H4><A name="4.8">4.8</A>) Minhas consultas estão lentas ou não estão utilizando índices. Por que?</H4>
+ ---------------------------- = 685 páginas do banco de dados (arredondado para cima)
+ 146 registros por página
- <p>Í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.</p>
-
- <P>Para determinar se um índice pode ser utilizado, o PostgreSQL deve ter
- estatísticas sobre a tabela. Estas estatísticas são coletadas utilizando
- <SMALL>VACUUM ANALYZE</SMALL> ou simplesmente <SMALL>ANALYZE</SMALL>.
- 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.</P>
-
- <P>Índices não são normalmente utilizados para <SMALL>ORDER BY</SMALL> 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.</P>
- Contudo, <SMALL>LIMIT</SMALL> combinado com <SMALL>ORDER BY</SMALL>
- 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:
-
-<PRE>
- SELECT col
- FROM tab
- ORDER BY col [ DESC ]
- LIMIT 1;
+685 páginas do banco de dados * 8192 bytes por página = 5.611.520 bytes (5,6 MB)
</PRE>
- <P>Se você acredita que o otimizador está incorreto ao escolher uma
- busca sequencial, utilize <CODE>SET enable_seqscan TO 'off'</CODE> e
- execute testes para ver se uma busca por índice é de fato é mais rápida.</P>
-
- <P>Quando é utilizado operadores com curingas tais como <SMALL>LIKE</SMALL> ou
- <I>~</I>, índices só podem ser utilizados em certas circunstâncias:</P>
- <UL>
- <LI>O ínício de uma string de busca deve ser o início da string, i.e.
- <UL>
- <LI>modelos no <SMALL>LIKE</SMALL> não devem começar com <I>%</I>.</LI>
- <LI>modelos no <I>~</I> (expressão regular) não devem começar com
- <I>^</I>.</LI>
- </UL></LI>
- <LI>A string de busca não pode iniciar com uma classe de caracteres,
- i.e. [a-e].</LI>
- <LI>Buscas que não diferenciam maiúsculas de minúsculas tais como <SMALL>ILIKE</SMALL> e
- <I>~*</I> não utilizam índices. Ao invés, utilize índices
- funcionais, que são descritos na seção <A href="#4.12">4.12</A>.</LI>
- <LI>A localidade padrão <I>C</I> deve ser utilizada durante o
- <i>initdb</i> 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 <tt>text_pattern_ops</tt> para tais casos que funcionam somente para
- indexação utilizando <tt>LIKE</tt>.
- </LI>
- </UL>
-
- <P>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 coluna int2, int8 e numeric.</P>
-
- <H4><A name="4.9">4.9</A>) Como eu vejo como o otimizador de consulta está avaliando a minha consulta?</H4>
+ <P>Índices não requerem muito espaço, mas contém
+ dados que foram indexados, então eles podem ocupar algum espaço.</P>
+
+ <P><SMALL>NULL</SMALL>s são armazenados como bitmaps, então eles
+ utilizam muito pouco espaço.</P>
+
+ <H3 id="item4.6">4.6) Por que minhas consultas estão lentas? Por que elas não estão utilizando meus índices?</H3>
+
+ <P>Índices não são utilizados por toda consulta. Índices são utilizados somente
+ se a tabela é maior do que um tamanho mínimo, e a consulta seleciona somente uma
+ pequena porcentagem dos registros da tabela. Isto porque o acesso randômico ao
+ disco causado pela busca indexada pode ser mais lento do que uma leitura ao longo
+ da tabela ou busca sequencial.</P>
+
+ <P>Para determinar se um índice deveria ser utilizado, o PostgreSQL deve ter
+ estatísticas sobre a tabela. Estas estatísticas são coletadas utilizando o
+ <SMALL>VACUUM ANALYZE</SMALL> ou simplesmente o <SMALL>ANALYZE</SMALL>.
+ Utilizando estatísticas, o otimizador sbae quantos registros estão na tabela,
+ e pode melhor determinar se índices deveriam ser utilizados.
+ Estatísticas também são úteis para determinar a ordem de junção ótima e métodos
+ de junção. Coleção de estatísticas deveriam ser feitas periodicamente a
+ medida que o conteúdo da tabela muda.</P>
+
+ <P>Índices não são normalmente utilizados para <SMALL>ORDER BY</SMALL> ou para
+ fazer junções. Uma busca sequencial seguido por uma ordenação explícita é
+ geralmente mais rápida do que uma busca indexada em uma tabela grande.
+ Contudo, <SMALL>LIMIT</SMALL> combinado com <SMALL>ORDER BY</SMALL>
+ frequentemente utilizará índice porque somente uma pequena porção da tabela
+ será retornada.</P>
+
+ <P>Se você acredita que o otimizador está incorreto ao escolher uma busca
+ sequencial, utilize <CODE>SET enable_seqscan TO 'off'</CODE> e execute a
+ consulta novamente para ver se uma busca indexada é realmente mais rápida.</P>
+
+ <P>Ao utilizar operadores curinga tais como <SMALL>LIKE</SMALL> ou <I>~</I>,
+ índices podem ser utilizados somente em algumas condições:</P>
+ <UL>
+ <LI>O início da cadeia de caracteres da busca deve ser iniciar com uma
+ cadeia de caracteres, i.e.
+ <UL>
+ <LI>modelos <SMALL>LIKE</SMALL> não devem iniciar com <I>%</I>.</LI>
+ <LI>modelos <I>~</I> (expressões regulares) devem iniciar com <I>^</I>.</LI>
+ </UL></LI>
+ <LI>A cadeia de caracteres utilizada na busca não pode iniciar com a classe de
+ caracteres e.g. [a-e].</LI>
+ <LI>Busca que não diferenciam maiúsculas de minúsculas tais como <SMALL>ILIKE</SMALL> e
+ <I>~*</I> não utilizam índices. Em vez disso, utilize índice de expressão, que
+ é descrito na seção <a href="#item4.8">4.8</a>.</LI>
+ <LI>O idioma padrção <I>C</I> deve ser usando durante o <i>initdb</i>
+ porque não é possível saber o próximo caracter em idiomas que não sejam o C.
+ Você pode criar um índice especial <CODE>text_pattern_ops</CODE> para tais casos
+ que funcionam somente para indexação com <SMALL>LIKE</SMALL>.
+ </LI>
+ </UL>
+
+ <P>Em versões anteriores a 8.0, índices frequentemente não podem ser utilizados
+ a menos que os tipos de dados correspondam aos tipos de coluna do índice. Isto era
+ particularmente verdadeiro para índices de coluna int2, int8 e numeric.</P>
+
+ <H3 id="item4.7">4.7) Como eu vejo como o otimizador de consulta está avaliando a minha consulta?</H3>
<P>Veja o comando <SMALL>EXPLAIN</SMALL> no manual.</P>
- <H4><A name="4.10">4.10</A>) O que é um índice de árvore R?</H4>
-
- <P>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 <I>point</I>, o sistema pode responder mais eficientemente consultas tais como "busque todos os pontos dentro dos limites do retângulo."</P>
-
- <P>A pesquisa canônica que descreve o modelo original da árvore R está 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ê também pode encontrar esse documento em "Readings in Database Systems" do Stonebraker</P>
-
- <P>Á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.</P>
-
- <H4><A name="4.11">4.11</A>) O que é um Otimizador Genético de Consultas?</H4>
-
- <P>O módulo <SMALL>GEQO</SMALL> 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.</P>
-
- <H4><A name="4.12">4.12</A>) Como eu faço buscas com expressões regulares
+ <H3 id="item4.8">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?</H4>
+ utilizo um índice para buscas que não diferenciam maiúsculas de minúsculas?</H3>
-<P>O operador <I>~</I> faz avaliação de expressões regulares, e <I>~*</I> faz avaliação não sensível a maiúsculas de expressões regulares. A variante não sensível a maiúsculas do <SMALL>LIKE</SMALL> é chamada de <SMALL>ILIKE</SMALL>.</P>
+ <P>O operador <I>~</I> faz avaliação de expressões regulares,
+ e <I>~*</I> faz avaliação não sensível a maiúsculas
+ de expressões regulares. A variante não sensível a maiúsculas
+ do <SMALL>LIKE</SMALL> é chamada de <SMALL>ILIKE</SMALL>.</P>
-<P>Comparações de igualdade não sensíveis a maiúsculas são normalmente expressadas como:</P>
+ <P>Comparações de igualdade não sensíveis a maiúsculas
+ são normalmente expressadas como:</P>
<PRE>
SELECT *
FROM tab
WHERE lower(col) = 'abc';
</PRE>
-
-Isso não irá utilizar o índice padrão. Contudo, se você criar um índice funcional, ele será utilizado:
+ Isso não irá utilizar o índice padrão. Contudo, se
+ você criar um índice de expressão, ele será utilizado:
<PRE>
CREATE INDEX tabindex ON tab (lower(col));
</PRE>
+ <P>Se o índice acima é criado como <SMALL>UNIQUE</SMALL>, embora a
+ coluna possa armazenar caracteres maiúsculos e minúsculos, ele não
+ pode ter valores idênticos que diferem apenas em letras maiúsculas e minúsculas.
+ Para forçar uma letra maiúscula ou minúscula a ser armazenada na coluna, utilize
+ uma restrição <SMALL>CHECK</SMALL> ou um gatilho.</P>
-<H4><A name="4.13">4.13</A>) Em uma consulta, como eu detecto se um campo é <SMALL>NULL</SMALL>?</H4>
+ <H3 id="item4.9">4.9) Em uma consulta, como eu detecto se um campo é <SMALL>NULL</SMALL>? Como eu posso ordenar por um campo que é <SMALL>NULL</SMALL> ou não?</H3>
- <P>Você pode testar a coluna com <SMALL>IS NULL</SMALL> e <SMALL>IS
- NOT NULL</SMALL>.</P>
+ <P>Você 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 é a difenrença entre os vários tipos de dados de caracteres?</H4>
<PRE>
-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
+ SELECT *
+ FROM tab
+ WHERE col IS NULL;
</PRE>
-<P>Você verá o nome interno quando examinar o catálogo do sistema e em algumas mensagens de erro.</P>
-
-<P>Os primeiros quatro tipos acima são do tipo "varlena" (i.e., os primeiros quatro bytes no disco são o comprimento seguido pelos dados). Consequentemente o espaço atual utilizado é ligeiramente maior do que o tamanho declarado. Contudo, esses tipos de dados também são sujeitos a compressão ou a serem armazenados fora do padrão utilizando o <SMALL>TOAST</SMALL>, então o espaço em disco pode també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áusula
+ <SMALL>ORDER BY</SMALL>. Coisas que são <I>verdadeiro</I> serão ordenadas acima
+ das coisas que são <I>falso</I>, então a consulta a seguir irá colocar
+ entradas NULL no início da lista de resultados:</P>
-<SMALL>VARCHAR(n)</SMALL> é melhor quando está armazenando cadeias de caracteres de comprimento variável e há um limite de tamanho desta cadeia. <SMALL>TEXT</SMALL> é para cadeias de caracteres de comprimento ilimitado, com o máximo de um gigabyte.
-<P><SMALL>CHAR(n)</SMALL> preenche com espaços em branco até o tamanho especificado, enquanto o <SMALL>VARCHAR(n)</SMALL> armazena somente os caracteres fornecidos. <SMALL>BYTEA</SMALL> é para armazenar dados binários, particularmente valores que incluem bytes <SMALL>NULL</SMALL>. Todos os tipos descritos aqui tem características de performance similares.</P>
-
- <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ência. Por exemplo:</P>
+ <H3 id="item4.10">4.10) Qual é a diferença entre os vários tipos de dado de caracteres?</H3>
+<BLOCKQUOTE>
+<TABLE>
+<TR><TH>Tipo</TH><TH>Nome Interno</TH><TH>Observação</TH></TR>
+<TR><TD>VARCHAR(n)</TD><TD>varchar</TD><TD>tamanho especifica o tamanho
+máximo, sem preenchimento</TD></TR>
+<TR><TD>CHAR(n)</TD><TD>bpchar</TD><TD>preenchimento em branco para
+comprimento fixo específico</TD></TR>
+<TR><TD>TEXT</TD><TD>text</TD><TD>nenhum limite superior específico no
+comprimento</TD></TR>
+<TR><TD>BYTEA</TD><TD>bytea</TD><TD>vetor de bytes de comprimento variável
+(seguro a byte nulo)</TD></TR>
+<TR><TD>"char"</TD><TD>char</TD><TD>um caracter</TD></TR>
+</TABLE>
+</BLOCKQUOTE>
+
+ <P>Você verá o nome interno quando examinar o catálogo do sistema e em algumas mensagens de erro.</P>
+
+ <P>Os primeiros quatro tipos acima são do tipo "varlena" (i.e., os primeiros quatro bytes no disco são o comprimento seguido pelos dados). Consequentemente o espaço atual utilizado é ligeiramente maior do que o tamanho declarado. Contudo, valores longos são também sujeitos a compressão, então o espaço em disco pode também ser bem menor do que o esperado.</P>
+
+ <SMALL>VARCHAR(n)</SMALL> é melhor quando está armazenando cadeias de caracteres de comprimento variável e há um limite de tamanho desta cadeia. <SMALL>TEXT</SMALL> é para cadeias de caracteres de comprimento ilimitado, com o máximo de um gigabyte.
+ <P><SMALL>CHAR(n)</SMALL> é para armazenar cadeias de caracteres que são todas do mesmo tamanho. <SMALL>CHAR(n)</SMALL> preenche com espaços em branco até o tamanho especificado, enquanto o <SMALL>VARCHAR(n)</SMALL> armazena somente os caracteres fornecidos. <SMALL>BYTEA</SMALL> é para armazenar dados binários, particularmente valores que incluem bytes <SMALL>NULL</SMALL>. Todos os tipos descritos aqui tem características de performance similares.</P>
+
+ <H3 id="item4.11.1">4.11.1) Como eu crio um campo serial/auto incremento?</H3>
+
+ <P>PostgreSQL suporta o tipo de dados <SMALL>SERIAL</SMALL>. Ele cria
+ automaticamente uma sequência. Por exemplo:</P>
<PRE>
CREATE TABLE pessoa (
id SERIAL,
);
</PRE>
-é automaticamente traduzido em:
+ é automaticamente traduzido em:
<PRE>
CREATE SEQUENCE pessoa_id_seq;
CREATE TABLE pessoa (
);
</PRE>
-Veja a página sobre <I>create_sequence</I> no manual para mais informação sobre sequências. Você também pode utilizar o campo <I>OID</I> para cada registro como um valor único. Contudo, se você precisar exportar e importar o banco de dados, você precisa utilizar a opção <I>-o</I> do <I>pg_dump</I> ou a opção <SMALL>COPY WITH OIDS</SMALL> para preservar os <I>OID</I>s.
+ Veja a página sobre <I>create_sequence</I> no manual para
+ obter informações adicionais sobre sequê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 é obter o próximo valor <SMALL>SERIAL</SMALL>
de uma sequência com a função <I>nextval()</I>
<I>antes</I> de inserir e então inserir com o valor explicitamente. Utilizando o
- 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')");
novo_id = execute("SELECT currval('pessoa_id_seq')");
</PRE>
- <p>Finalmente, você poderia utilizar o <A href="#4.16"><SMALL>OID</SMALL></A>
- retornado da sentença <SMALL>INSERT</SMALL> 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 <I>$sth->{pg_oid_status}</I> depois de
- <I>$sth->execute()</I>.</p>
+ <H3 name="4.11.3">4.11.3) <I>currval()</I> não lida com condição de corrida com outros usuários?</H3>
- <H4><A name="4.15.3">4.15.3</A>) <I>currval()</I> não lida com condição de corrida com outros usuários?</H4>
+ <P>Não. <I>currval()</I> retorna o valor atual atribuido pela sua sessão, e não por todas as sessões.</P>
- <P>Não. <I>currval()</I> retorna o valor atual atribuido pelo seu núcleo (backend), e não por todos os usuários.</P>
-
- <H4><A name="4.15.4">4.15.4</A>) Por que os números da minha sequência não são reutilizados quando uma transação é abortada? Por que há intervalos nos números da minha sequência/coluna SERIAL?</H4>
+ <H3 id="item4.11.4">4.11.4) Por que os números da minha sequência não são reutilizados quando uma transação é abortada? Por que há intervalos nos números da minha sequência/coluna SERIAL?</H3>
<P>Para melhorar a concorrência, valores da sequência são atribuídos a transações correntes e não são travados até que a transação seja finalizada. Isso causa intervalos na numeração por causa de transações abortadas.</P>
- <H4><A name="4.16">4.16</A>) O que é um <SMALL>OID</SMALL>? O que é um <SMALL>TID</SMALL>?</H4>
-
- <P><SMALL>OID</SMALL>s são a resposta do PostgreSQL a ids únicos de registros.
- Cada registro que é criado no PostgreSQL recebe um <SMALL>OID</SMALL> único.
- Todos <SMALL>OID</SMALL>s produzidos durante o <I>initdb</I> são menores do
- que 16384 (de <I>include/access/transam.h</I>). Todos os <SMALL>OID</SMALL>s
- criados pelo usuário são iguais ou maiores do que este valor. Por padrão,
- todos estes <SMALL>OID</SMALL>s são únicos não somente na tabela ou no
- banco de dados, mas na instalaçã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ários específicos e podem ser
- utilizados em junções. É recomendado que você utilize o tipo de coluna
- <SMALL>OID</SMALL> para armazenar valores <SMALL>OID</SMALL>.
- Você pode criar um índice no campo <SMALL>OID</SMALL> para acesso rápido.</P>
-
- <P><SMALL>OID</SMALL>s 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 <SMALL>OID</SMALL> de alguma coisa, ou se você quer fazer uma cópia da tabela,
- com os <SMALL>OID</SMALL>s, não há razão para que você não possa fazê-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ã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.</P>
-
- <P><SMALL>TID</SMALL>s são utilizados para identificar registros físicos
- específicos com valores de bloco e deslocamento. <SMALL>TID</SMALL>s mudam
- após registros serem modificados ou recarregados. Eles são utilizados por
- índices para apontar para registros físicos.</P>
-
- <H4><A name="4.17">4.17</A>) Qual é o significado de alguns termos utilizados no PostgreSQL?</H4>
-
- <P>O código-fonte e documentação antiga utiliza termos de uso comum. Aqui estão alguns deles:</P>
-
- <UL>
- <LI>tabela, relação, classe</LI>
-
- <LI>linha, registro, tupla</LI>
+ <H3 id="4.16">4.16) O que é um <SMALL>OID</SMALL>? O que é um <SMALL>CTID</SMALL>?</H3>
- <LI>coluna, campo, atributo</LI>
+ <P>Cada registro que é criado no PostgreSQL recebe um <SMALL>OID</SMALL> único
+ a menos que seja criado com <SMALL>WITHOUT OIDS</SMALL>.
+ O<SMALL>ID</SMALL>s são automaticamente atribuídos como inteiros de 4 bytes
+ que são únicos ao longo de toda instalação. Contudo, eles são limitados em
+ 4 bilhões, e então os O<SMALL>ID</SMALL>s começam a ser duplicados. O PostgreSQL
+ utiliza <SMALL>OID</SMALL>s para ligar as tabelas do sistema.</P>
- <LI>recupera, seleciona</LI>
+ <P>Para numerar registros nas tabelas do usuários, é melhor utilizar
+ <SMALL>SERIAL</SMALL> ao invés de O<SMALL>ID</SMALL>s porque
+ sequências <SMALL>SERIAL</SMALL> são únicas somente em uma tabela; e
+ são menos propícias a atingir o limite.
+ <SMALL>SERIAL8</SMALL> está disponível para armazenar valores de sequências
+ com oito bytes.</P>
- <LI>altera, atualiza</LI>
+ <P>C<SMALL>TID</SMALL>s são utilizados para identificar registros físicos
+ específicos com valores de block e deslocamento. C<SMALL>TID</SMALL>s mudam
+ após registros serem modificados ou recarregados. Eles são utilizados por
+ índices para apontar registros físicos.</P>
- <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á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ê provavelmente está sem memória virtual no sistema, ou o seu núcleo (kernel) tem um limite baixo para certos recursos. Tente isto antes de iniciar o <I>postmaster</I>:</P>
- <PRE>
- ulimit -d 262144
- limit datasize 256m
- </PRE>
+ <P>Você provavelmente está sem memória virtual no seu sistema, ou o seu núcleo (kernel) tem um limite baixo para certos recursos. Tente isto antes de iniciar o <I>postmaster</I>:</P>
+<PRE>
+ ulimit -d 262144
+ limit datasize 256m
+</PRE>
- Dependendo da sua shell, somente um desses comando terá sucesso, mas ele definirá o segmento de dados do seu processo com um limite maior e talvez permita que a consulta seja feita. Este comando é aplicado ao processo atual e todos os subprocessos criados depois do comando ser executado. Se você tiver problemas com o cliente <SMALL>SQL</SMALL> porque o núcleo (backend) retornou muitos dados, tente-o antes de iniciar o cliente.
+ Dependendo da sua shell, somente um desses comando terá sucesso, mas ele definirá o segmento de dados do seu processo com um limite maior e talvez permita que a consulta seja feita. Este comando é aplicado ao processo atual e todos os subprocessos criados depois do comando ser executado. Se você tiver problemas com o cliente <SMALL>SQL</SMALL> porque o processo servidor retornou muitos dados, tente-o antes de iniciar o cliente.
- <H4><A name="4.19">4.19</A>) Como eu informo qual versão do PostgreSQL eu estou utilizando?</H4>
+ <H3 id="item4.14">4.14) Como eu informo qual versã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ções com objetos grandes retorna <I>"invalid large obj descriptor"</I>?</H4>
-
- <P>Você precisa colocar <CODE>BEGIN WORK</CODE> e <CODE>COMMIT</CODE> ao redor de qualquer uso de operações com objetos grandes, isto é, ao redor de <CODE>lo_open</CODE> ... <CODE>lo_close.</CODE></P>
-
- <P>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 <I>invalid large obj descriptor</I>. 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.</P>
-
- <H4><A name="4.21">4.21</A>) Como eu crio uma coluna que conterá por padrão a hora atual?</H4>
+ <H3 id="item4.15">4.15) Como eu crio uma coluna que conterá por padrã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ão tão lentas?</H4>
-
-<P>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, <CODE><SMALL>IN</SMALL></CODE> é mais rá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ápido, <CODE>subcol</CODE> deve ser uma coluna indexada.</P>
-<P>A partir da versão 7.4, <CODE>IN</CODE> utiliza a mesma técnica de agrupamento do que consultas normais, e é recomendado utilizar <CODE>EXISTS</CODE>.
-</p>
- <H4><A name="4.23">4.23</A>) Como eu faço uma junção externa (outer join)?</H4>
+ <H3 id="item4.23">4.23) Como eu faço uma junção externa (outer join)?</H3>
<P>PostgreSQL suporta junções externas utilizando a sintaxe padrão do SQL. Aqui temos dois exemplos:</P>
<PRE>
FROM t1 LEFT OUTER JOIN t2 USING (col);
</PRE>
-<P>Essas duas consultas indênticas juntam t1.col com t2.col, e também retornam qualquer registro que não foi juntado em t1 (aqueles que não combinaram com t2). Uma junção a direita <SMALL>RIGHT</SMALL> adicionaria registros que não foram juntados da tabela t2. Uma junção completa (<SMALL>FULL</SMALL>) retornaria os registros combinados mais todos os registros não combinados de t1 e t2. A palavra <SMALL>OUTER</SMALL> é opcional e é assumida nas junções <SMALL>LEFT</SMALL>, <SMALL>RIGHT</SMALL> e <SMALL>FULL</SMALL>. Junções ordinárias são chamadas junções naturais (<SMALL>INNER</SMALL>).</P>
+ <P>Essas duas consultas indênticas juntam t1.col com t2.col, e também
+ retornam qualquer registro que não foi juntado em t1 (aqueles que não
+ combinaram com t2). Uma junção a direita <SMALL>RIGHT</SMALL>
+ adicionaria registros que não foram juntados da tabela t2.
+ Uma junção completa (<SMALL>FULL</SMALL>) retornaria os registros
+ combinados mais todos os registros não combinados de t1 e t2.
+ A palavra <SMALL>OUTER</SMALL> é opcional e é assumida nas
+ junções <SMALL>LEFT</SMALL>, <SMALL>RIGHT</SMALL> e <SMALL>FULL</SMALL>.
+ Junções ordinárias são chamadas junções
+ naturais (<SMALL>INNER</SMALL>).</P>
-<P>Em versões anteriores, junçõ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çã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ço consultas utilizando múltiplos bancos de dados?</H3>
-<H4><A name="4.24">4.24</A>) Como eu faço consultas utilizando múltiplos bancos de dados?</H4>
+ <P>Não há outra maneira de consultar um banco de dados caso ele
+ não seja o atual. Porque o PostgreSQL carrega catálogos do sistema
+ específicos do banco de dados, é incerto como uma consulta em banco
+ de dados distintos pode se comportar.</P>
-<P>Não há outra maneira de consultar um banco de dados caso ele não seja o atual. Porque o PostgreSQL carrega catálogos do sistema específicos do banco de dados, é incerto como uma consulta em banco de dados distintos pode se comportar.</P>
-<P><I>contrib/dblink</I> permite consultas em bancos de dados distintos utilizando chamadas de funções. É claro, que um cliente pode fazer conexões simultâneas em bancos de dados diferentes e juntar os resultados no cliente.</P>
+ <P><I>contrib/dblink</I> permite consultas em bancos de dados distintos utilizando
+ chamadas de funções. É claro, que um cliente pode fazer
+ conexões simultâneas em bancos de dados diferentes e juntar os
+ resultados no cliente.</P>
- <H4><A name="4.25">4.25</A>) Como eu retorno múltiplos registros ou colunas de uma função?</H4>
+ <H3 id="item4.18">4.18) Como eu retorno múltiplos registros ou colunas de uma função?</H3>
- <P>No 7.3, você pode facilmente retornar múltiplos registros ou colunas de uma função, <A href="http://techdocs.postgresql.org/guides/SetReturningFunctions">http://techdocs.postgresql.org/guides/SetReturningFunctions</A>.</P>
+ <P>É fácil utilizando funções que retornam conjunto,
+ <a href="http://techdocs.postgresql.org/guides/SetReturningFunctions">
+ http://techdocs.postgresql.org/guides/SetReturningFunctions</a>.</P>
- <H4><A name="4.26">4.26</A>) Por que eu não posso confiar na criação/remoção de tabelas temporárias em funções PL/PgSQL?</H4>
- <P>PL/PgSQL armazena o conteúdo da função, e o efeito indesejado é que se uma função PL/PgSQL acessa uma tabela temporária, e aquela tabela é removida e criada novamente, e a função é chamada novamente, a função irá falhar porque o conteúdo armazenado da função ainda apontará para a tabela temporária antiga. A solução é utilizar o <SMALL>EXECUTE</SMALL> para acesso a tabelas temporárias no PL/PgSQL. Isto irá fazer com que a consulta seja avaliada toda vez.</P>
-
- <H4><A name="4.27">4.27</A>) Que opções para encriptação estão disponíveis?</H4>
- <UL>
- <LI>No <I>contrib/pgcrypto</I> contém muitas funções de encriptação para serem utilizados em consultas <SMALL>SQL</SMALL>.</li>
- <LI>Para encriptar a transmissão do cliente ao servidor, o servidor deve ter a opçã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ão deve estar <I>disable</I>. (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.)</LI>
- <LI>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 <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árias em funções PL/PgSQL?</H3>
- <HR>
-
- <H2 align="center">Extendendo o PostgreSQL</H2>
-
- <H4><A name="5.1">5.1</A>) Eu escrevi uma função. Quando eu executo-a no <I>psql</I>, por que ela finaliza o programa com descarga de memória (core dump)?</H4>
-
- <P>O problema pode ser várias coisas. Tente testar sua função em um programa independente.</P>
-
- <H4><A name="5.2">5.2</A>) Como eu posso contribuir com alguns tipos e funções novas para o PostgreSQL?</H4>
-
- <P>Envie as suas extensões para a lista de discussão <I>pgsql-hackers</I>, e elas eventualmente serão colocadas no subdiretório <I>contrib/</I>.</P>
-
- <H4><A name="5.3">5.3</A>) Como eu escrevo uma função em C que retorna uma tupla?</H4>
-
- <P>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 <I>contrib/tablefunc</I>.</P>
-
- <H4><A name="5.4">5.4</A>) Eu alterei um arquivo do código-fonte. Por que a recompilação não surtiu efeito?</H4>
+ <P>PL/PgSQL armazena o conteúdo da função, e o efeito indesejado é que se uma função PL/PgSQL acessa uma tabela temporária, e aquela tabela é removida e criada novamente, e a função é chamada novamente, a função irá falhar porque o conteúdo armazenado da função ainda apontará para a tabela temporária antiga. A solução é utilizar o <SMALL>EXECUTE</SMALL> para acesso a tabelas temporárias no PL/PgSQL. Isto irá fazer com que a consulta seja avaliada toda vez.</P>
- <P>Os arquivos <I>Makefiles</I> não tem as dependências corretas para incluir arquivos. Você deve executar um <I>make clean</I> e então o <I>make</I>. Se você está utilizando o <SMALL>GCC</SMALL> você pode utilizar a opção <I>--enable-depend</I> do <I>configure</I> para o compilador computar as dependências automaticamente.</P>
+ <H3 id="item4.20">4.20) Quais soluções de replicação estão disponíveis?</H3>
+
+ <P>Embora "replicação" seja um termo simples, há várias tecnologias para fazer
+ replicação, com vantagens e desvantagens para cada um.</P>
+
+ <P>Replicação mestre/escravo permite que um mestre receba consultas de leitura e
+ escrita, enquanto os escravos só podem aceitar leitura/consultas <SMALL>SELECT</SMALL>.
+ A solução mais popular de replicação mestre-escravo para PostgreSQL disponível livremente
+ é <A href="http://gborg.postgresql.org/project/slony1/projdisplay.php">Slony-I</A>.</P>
+
+ <P>Replicação com múltiplos mestres permite que consultas leitura/escrita sejam
+ enviadas para múltiplos computadores replicadores. Esta capacidade também tem
+ um sério impacto na performance por causa da necessidade de sincronizar as mudanças
+ entre os servidores. <A href="http://pgfoundry.org/projects/pgcluster/">Pgcluster</a>
+ é a solução mais popular disponível livremente para PostgreSQL.</P>
+
+ <P>Há também soluções de replicação comerciais e baseadas em hardware disponíveis
+ que suportam uma variedade de modelos de replicação.</P>
+
+ <H3 id="item4.21">4.21) Por que os nomes de minhas tabelas e colunas não
+ são reconhecidos em minha consulta?</H3>
+
+ <P>O caso mais comum é o uso de aspas ao redor dos nomes da tabela ou coluna
+ durante a criação da tabela. Ao utilizar aspas, nomes de tabela e coluna
+ (chamados de identificadores) são armazenados <a
+ href="http://www.postgresql.org/docs/8.0/static/sql-syntax.html#SQL-SYNTAX-IDENTIFIERS">
+ como especificado</a>, significando que você deve utilizar aspas quando se
+ referir aos nomes na consulta. Algumas interfaces, como pgAdmin,
+ automaticamente coloca aspas nos identificadores durante a criação da tabela.
+ Então, para identificadores serem reconhecidos, você deve:
+ <UL>
+ <LI>Evitar colocar aspas no identificador ao criar tabelas</LI>
+ <LI>Utilizar somente caracteres minúsculos em identificadores</LI>
+ <LI>Colocar aspas em identificadores ao referenciá-los nas consultas</LI>
+ </UL>
</BODY>
</HTML>