Perguntas Frequentes (FAQ) sobre PostgreSQL �ltima atualiza��o: Sat Nov 20 17:28:23 EDT 2004 Mantenedor atual: Bruce Momjian (pgman@candle.pha.pa.us) Traduzido por: Euler Taveira de Oliveira (euler@ufgnet.ufg.br) A vers�o mais recente desse documento pode ser vista em http://www.PostgreSQL.org/docs/faqs/FAQ.html (EN). http://www.PostgreSQL.org/docs/faqs/FAQ_brazilian.html (pt_BR). Perguntas sobre plataformas espec�ficas s�o respondidas em http://www.PostgreSQL.org/docs/index.html. _________________________________________________________________ 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.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.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? Perguntas sobre Clientes 2.1) H� drivers ODBC 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 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 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? 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 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 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 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 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() e nextval() n�o lidam 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 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 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? _________________________________________________________________ Perguntas Gerais 1.1) O que � PostgreSQL? Como ele � pronunciado? PostgreSQL � pronunciado Post-Gres-Qui-El. Um arquivo de �udio est� dispon�vel em http://www.postgresql.org/postgresql.mp3 para aqueles que gostariam de ouvir a pron�ncia. 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. 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 http://www.PostgreSQL.org/docs/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) Qual � a licen�a do PostgreSQL? PostgreSQL est� sujeito a seguinte licen�a: PostgreSQL Sistema de Ger�ncia de Banco de Dados Portions copyright (c) 1996-2004, 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? 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. H� tamb�m um porte para Novell Netware 6 em http://forge.novell.com. 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. 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: http://www.PostgreSQL.org H� tamb�m um canal de IRC na Freenode e EFNet, canal PostgreSQL. Voc� pode utilizar o comando Unix irc -c '#PostgreSQL' "$USER" irc.phoenix.net. ou irc -c '#PostgreSQL' "$USER" irc.freenode.net. 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.5. N�s planejamos lan�ar vers�es novas a cada seis ou oito meses. 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. H� dois livros sobre PostgreSQL dispon�veis online em http://www.PostgreSQL.org/docs/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/. psql tem alguns comandos \d para mostrar informa��o sobre tipos, operadores, fun��es, agrega��es, etc. 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? Por favor visite a p�gina da ferramenta que reporta bugs em http://www.PostgreSQL.org/bugs/bugs.php, que ir� lher dar as instru��es e dire��es de como submeter um bug. 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, performance, confiabilidade, suporte e pre�o. Caracter�sticas 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 controle de concorr�ncia de m�ltiplas vers�es para reduzir travamentos (locks). Performance PostgreSQL tem a performance similar 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. H� uma p�gina interessante comparando o PostgreSQL com o MySQL em http://openacs.org/philosophy/why-not-mysql.html. MySQL � uma empresa que distribui seu produto via c�digo livre, e requer uma licen�a comercial para software de c�digo fechado, e n�o uma comunidade de desenvolvimento de c�digo livre como o PostgreSQL. Confiabilidade N�s sabemos que um SGBD deve ser confi�vel ou ele � in�til. N�s empenhamos em lan�ar vers�es bem testadas, de c�digo est�vel e que tenha o m�nimo de bugs. Cada vers�o tem no m�nimo um m�s de teste em vers�o beta, e nosso hist�rico de vers�es mostra que n�s podemos fornecer vers�es est�veis e s�lidas que est�o prontas para uso em produ��o. N�s acreditamos que somos comparados a nosso favor com outros sistemas de bancos de dados nessa �rea. Suporte 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, SGBDs 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 SGBDs. H� suporte comercial por incidente dispon�veis para aqueles que precisam de um. (Veja se��o 1.6 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 nosso website em http://advocacy.postgresql.org. 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? 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/ ) 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. _________________________________________________________________ Perguntas Administrativas 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 o Guia do Administrador do PostgreSQL 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? 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. Voc� pode desabilitar o fsync() iniciando o postmaster com a op��o -o -F. Isso ir� impedir que fsync()s enviem os dados para disco ap�s cada transa��o. Voc� tamb�m pode utilizar a op��o -B do postmaster 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 64 buffers. Voc� tamb�m pode utilizar a op��o -S do backend para aumentar a m�xima quantidade de mem�ria utilizada pelo processo servidor para ordena��es tempor�rias. O valor de -S � medido em kilobytes e o padr�o � de 512 (ou seja 512K). 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. O programa postgres possue as op��es -s, -A, e -t 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? 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? 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. _________________________________________________________________ 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. Para obter um registro rand�mico, utilize: SELECT col FROM tab ORDER BY random() LIMIT 1; 4.3) Como eu obtenho a lista de tabelas ou outras coisas que eu posso ver no psql? Utilize o comando \dt para ver tabelas no psql. Para obter uma lista completa de 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: 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; COMMIT; Voc� pode querer executar o comando 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? Estes s�o os limites: Tamanho m�ximo de um banco de dados? ilimitado (existem bancos de dad os 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 da s 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. 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. 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. 4.6) 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 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) 24 bytes: um campo int e um campo texto + 4 bytes: ponteiro na p�gina para a tupla ------------------------------------------- 60 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 (ar redondado para baixo) 60 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 ) �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. �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; 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. 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. 4.9) 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? 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. Compara��es de igualdade n�o sens�veis a mai�sculas s�o normalmente expressadas como: SELECT * FROM tab WHERE lower(col) = 'abc'; Isso n�o ir� utilizar o �ndice padr�o. Contudo, se voc� criar um �ndice funcional, 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 pr eenchimento CHAR(n) bpchar preenchimento em branco para comprimento fixo e spec�fico TEXT text nenhum limite superior espec�fico no compriment o BYTEA bytea vetor de bytes de comprimento vari�vel (null-by te safe) "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. 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. 4.15.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 ( id SERIAL, nome TEXT ); � automaticamente traduzido em: CREATE SEQUENCE pessoa_id_seq; CREATE TABLE pessoa ( id INT4 NOT NULL DEFAULT nextval('pessoa_id_seq'), nome TEXT ); Veja a p�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? 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 em pseudo-linguagem se pareceria com isto: novo_id = execute("SELECT nextval('pessoa_id_seq')"); execute("INSERT INTO pessoa (id, nome) VALUES (novo_id, 'Blaise Pascal')"); Voc� poderia ent�o ter tamb�m o novo valor armazenado em novo_id para utilizar em outras consultas (i.e., como uma chave estrangeira da tabela pessoa). Note que o nome da SEQUENCE criada automaticamente ser� __seq, onde tabela e coluna s�o os nomes da tabela e da coluna SERIAL, respectivamente. Alternativamente, voc� poderia obter o valor SERIAL atribu�do com a fun��o currval() depois de t�-lo inserido por padr�o, i.e., 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 de Edmund Mergl, o valor do oid est� dispon�vel via $sth->{pg_oid_status} depois de $sth->execute(). 4.15.3) currval() e nextval() n�o lidam 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? 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_anti ga; 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 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 n�cleo (kernel) tem um limite baixo para certos recursos. Tente isto antes de iniciar o postmaster: ulimit -d 262144 limit datasize 256m Dependendo da sua shell, somente um desses comando ter� 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. 4.19) 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? 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); 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)? PostgreSQL suporta jun��es externas utilizando a sintaxe padr�o do SQL. Aqui temos dois exemplos: SELECT * FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col); or SELECT * FROM t1 LEFT OUTER JOIN t2 USING (col); Essas duas consultas ind�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 RIGHT adicionaria registros que n�o foram juntados da tabela t2. Uma jun��o completa (FULL) retornaria os registros combinados mais todos os registros n�o combinados de t1 e t2. A palavra OUTER � opcional e � assumida nas 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? 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. contrib/dblink 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. 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, 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? 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 EXECUTE para acesso 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.