summaryrefslogtreecommitdiff
path: root/doc/FAQ_brazilian
diff options
context:
space:
mode:
Diffstat (limited to 'doc/FAQ_brazilian')
-rw-r--r--doc/FAQ_brazilian1252
1 files changed, 1252 insertions, 0 deletions
diff --git a/doc/FAQ_brazilian b/doc/FAQ_brazilian
new file mode 100644
index 00000000000..5766e7e09df
--- /dev/null
+++ b/doc/FAQ_brazilian
@@ -0,0 +1,1252 @@
+
+ Perguntas Frequentes (FAQ) sobre PostgreSQL
+
+ Última atualização: Sex Jun 4 00:09:16 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?
+
+ 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 replicação estão disponíveis?
+ 4.28) 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?
+
+ Cliente
+
+ É possível compilar a biblioteca libpq, o psql e outras interfaces e
+ aplicações clientes para executar em plataformas MS Windows. Neste
+ caso, o cliente está sendo executado no MS Windows e comunica via
+ TCP/IP com um servidor executando em uma das plataformas Unix
+ suportadas. O arquivo win32.mak está presente na distribuição para que
+ seja possível compilar a biblioteca libpq e o psql para Win32. O
+ PostgreSQL também se comunica com clientes ODBC.
+
+ Servidor
+
+ O Servidor de banco de dados pode ser executado em Windows NT e Win2k
+ utilizando o Cygwin, uma biblioteca de portabilidade Unix/NT da
+ Cygnus. Veja pgsql/doc/FAQ_MSWIN na distribuição ou a FAQ do MS
+ Windows em http://www.PostgreSQL.org/docs/faqs/text/FAQ_MSWIN.
+
+ Um porte nativo para MS Win NT/2000/XP está sendo desenvolvido. Para
+ maiores detalhes sobre o status do PostgreSQL no Windows veja
+ http://techdocs.postgresql.org/guides/Windows e
+ http://momjian.postgresql.org/main/writings/pgsql/win32.html.
+
+ 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 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.2.
+
+ 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. Outras máquinas não poderão
+ conectar-se a menos que você habilite tcpip_sockets no
+ postgresql.conf, e habilite a autenticação por máquina modificando o
+ arquivo $PGDATA/pg_hba.conf. Isso irá permitir conexões TCP/IP.
+
+ 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.
+ _________________________________________________________________
+
+ 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:
+ 36 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
+ -------------------------------------------
+ 64 bytes por registro
+
+ O tamanho de uma página de dados no PostgreSQL é 8192 bytes (8 KB), então:
+
+ 8192 bytes por página
+ ------------------------ = 128 registros por página do banco de dados (ar
+redondado para baixo)
+ 64 bytes por registro
+
+ 100000 registros de dados
+ ---------------------------- = 782 páginas do banco de dados (arredondado
+para cima)
+ 128 registros por página
+
+782 páginas do banco de dados * 8192 bytes por página = 6,406,144 bytes (6.4
+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.
+
+ 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á <tabela>_<coluna>_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 replicação estão disponíveis?
+
+ Há várias opções de replicação mestre/escravo disponíveis. Isto
+ permite somente que o mestre faça mudanças no banco de dados e o
+ escravo só pode ler o banco de dados. Abaixo em
+ http://gborg.PostgreSQL.org/genpage?replication_research lista-os. Uma
+ solução de replicação de múltiplos mestres está sendo desenvolvida em
+ http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php.
+
+ 4.28) 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.