summaryrefslogtreecommitdiff
path: root/doc/FAQ_brazilian
diff options
context:
space:
mode:
Diffstat (limited to 'doc/FAQ_brazilian')
-rw-r--r--doc/FAQ_brazilian922
1 files changed, 0 insertions, 922 deletions
diff --git a/doc/FAQ_brazilian b/doc/FAQ_brazilian
deleted file mode 100644
index 16d47428b3c..00000000000
--- a/doc/FAQ_brazilian
+++ /dev/null
@@ -1,922 +0,0 @@
-
- Perguntas Frequentes (FAQ) sobre PostgreSQL
-
- Última atualização: Sex Nov 16 10:53:50 EST 2007
-
- Mantenedor atual: Bruce Momjian (bruce@momjian.us)
-
- Traduzido por: Euler Taveira de Oliveira (euler@timbira.com)
-
- A versão mais recente desse documento pode ser vista em
- http://www.postgresql.org/files/documentation/faqs/FAQ.html (EN).
- http://www.postgresql.org/files/documentation/faqs/FAQ_brazilian.html
- (pt_BR).
-
- Perguntas sobre plataformas específicas são respondidas em
- http://www.postgresql.org/docs/faq/.
- _________________________________________________________________
-
- Perguntas Gerais
-
- 1.1) O que é PostgreSQL? Como ele é pronunciado? O que é Postgres?
- 1.2) Quem controla o PostgreSQL?
- 1.3) Qual é a licença do PostgreSQL?
- 1.4) Quais plataformas o PostgreSQL pode ser executado?
- 1.5) Onde eu posso conseguir o PostgreSQL?
- 1.6) Qual é a última versão?
- 1.7) Onde eu posso conseguir suporte?
- 1.8) Como eu posso submeter um relato de um bug?
- 1.9) Como eu posso saber quais são os bugs conhecidos ou
- características ausentes?
- 1.10) Que documentação está disponível?
- 1.11) Como eu posso aprender SQL?
- 1.12) Como posso submeter uma correção (patch) ou me juntar a equipe
- de desenvolvimento?
- 1.13) Como é o PostgreSQL comparado a outros SGBDs?
- 1.14) O PostgreSQL gerenciará as mudanças de horário devido ao horário
- de verão em vários países?
-
- Perguntas sobre Clientes
-
- 2.1) Quais interfaces estão disponíveis para PostgreSQL?
- 2.2) Quais ferramentas estão disponíveis para utilizar o PostgreSQL
- com páginas Web?
- 2.3) O PostgreSQL tem interfaces gráficas para interagir com usuário?
-
- Perguntas Administrativas
-
- 3.1) Como eu instalo o PostgreSQL em um local diferente de
- /usr/local/pgsql?
- 3.2) Como eu controlo conexões de outras máquinas?
- 3.3) Como eu ajusto o servidor de banco de dados para obter uma
- performance melhor?
- 3.4) Quais características de depuração estão disponíveis?
- 3.5) Por que eu recebo "Sorry, too many clients" quando eu tento
- conectar?
- 3.6) Qual é o processo de atualização do PostgreSQL?
- 3.7) Que tipo de hardware eu devo usar?
-
- Perguntas Operacionais
-
- 4.1) Como eu faço um SELECT somente dos primeiros registros de uma
- consulta? Um registro randômico?
- 4.2) Como eu descubro quais tabelas, índices, bancos de dados e
- usuários estão definidos? Como eu vejo as consultas utilizadas pelo
- psql para mostrá-los?
- 4.3) Como você muda o tipo de dado de uma coluna?
- 4.4) Qual é o tamanho máximo de um registro, uma tabela e um banco de
- dados?
- 4.5) Quanto espaço em disco é necessário para armazenar dados de um
- arquivo texto?
- 4.6) Por que minhas consultas estão lentas? Por que elas não estão
- utilizando meus índices?
- 4.7) Como eu vejo como o otimizador de consultas está avaliando minha
- consulta?
- 4.8) Como eu faço buscas com expressões regulares e buscas com
- expressões regulares sem diferenciar mauúsculas de minúsculas? Como eu
- utilizo um índice para buscas sem distinguir maiúsculas de minúsculas?
- 4.9) Em uma consulta, como eu detecto se um campo é NULL? Como eu
- posso concatenar possíveis NULLs? Como eu posso ordenar por um campo
- que é NULL ou não?
- 4.10) Qual é a diferença entre os vários tipos de dado de caracteres?
- 4.11.1) Como eu crio um campo serial/auto incremento?
- 4.11.2) Como eu consigo o valor de um campo SERIAL?
- 4.11.3) currval() não lida com condição de corrida com outros
- usuários?
- 4.11.4) Por que os números da minha sequência não são reutilizados
- quando uma transação é abortada? Por que há intervalos nos números da
- minha sequência/coluna SERIAL?
- 4.12) O que é um OID? O que é um CTID?
- 4.13) Por que eu recebo o erro "ERROR: Memory exhausted in
- AllocSetAlloc()"?
- 4.14) Como eu informo qual versão do PostgreSQL eu estou utilizando?
- 4.15) Como eu crio uma coluna que conterá por padrão a hora atual?
- 4.16) Como eu faço uma junção externa (outer join)?
- 4.17) Como eu faço consultas utilizando múltiplos bancos de dados?
- 4.18) Como eu retorno múltiplos registros ou colunas de uma função?
- 4.19) Por que eu obtenho erros "relation with OID ###### does not
- exist" ao acessar tabelas temporárias em funções PL/PgSQL?
- 4.20) Quais soluções de replicação estão disponíveis?
- 4.21) Por que os nomes de minhas tabelas e colunas não são
- reconhecidos em minha consulta? Por que as maiúsculas não são
- preservadas?
- _________________________________________________________________
-
- Perguntas Gerais
-
- 1.1) O que é PostgreSQL? Como ele é pronunciado? O que é Postgres?
-
- PostgreSQL é pronunciado Post-Gres-Q-L. (Para os curiosos que querem
- saber como se diz "PostgreSQL", um arquivo de áudio está disponível).
-
- O PostgreSQL é um sistema de banco de dados objeto-relacional que tem
- as características de sistemas de bancos de dados comerciais
- tradicionais com melhoramentos encontrados nos sistemas SGBDs de
- próxima geração. PostgreSQL é livre e o código-fonte completo está
- disponível.
-
- O desenvolvimento do PostgreSQL é feito por um grupo de
- desenvolvedores voluntários (na sua maioria) espalhados pelo mundo e
- que se comunicam via Internet. É um projeto da comunidade e não é
- controlado por nenhuma empresa. Para se envolver, veja a FAQ do
- desenvolvedor em http://www.postgresql.org/docs/faqs.FAQ_DEV.html
-
- Postgres é um apelido para o PostgreSQL amplamente utilizado. Era o
- nome original do projeto em Berkeley e dentre os outros apelidos é o
- preferido. Se você acha 'PostgreSQL' difícil de pronunciar, diga
- apenas 'Postgres'.
-
- 1.2) Quem controla o PostgreSQL?
-
- Se você está procurando por um mantenedor, comitê central ou empresa
- controladora do PostgreSQL, desista --- não há um(a). Nós temos um
- comitê core e committers CVS, mas estes grupos são mais para questões
- administrativas do que controle. O projeto é direcionado pela
- comunidade de desenvolvedores e usuários, que qualquer um pode se
- juntar. Tudo o que você precisa é se inscrever nas listas de discussão
- e participar das discussões. Veja a FAQ do desenvolvedor para obter
- informações como se envolver com o desenvolvimento do PostgreSQL.
-
- 1.3) Qual é a licença do PostgreSQL?
-
- O PostgreSQL é distribuído sob a licença BSD clássica. Basicamente,
- ela permite que usuários façam qualquer coisa com o código, incluindo
- revender os binários sem o código-fonte. A única restrição é que você
- não nos responsabilize legalmente por problemas com o programa de
- computador. Há também a exigência de que esta licença apareça em todas
- as cópias do programa de computador. Aqui está a licença BSD que
- usamos atualmente:
-
- PostgreSQL está sujeito a seguinte licença:
-
- PostgreSQL Data Base Management System
-
- Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group
- Portions Copyright (c) 1994-1996 Regents of the University of
- California
-
- Permission to use, copy, modify, and distribute this software and its
- documentation for any purpose, without fee, and without a written
- agreement is hereby granted, provided that the above copyright notice
- and this paragraph and the following two paragraphs appear in all
- copies.
-
- IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
- FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES,
- INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND
- ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN
- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
- THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE
- PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF
- CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT,
- UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
-
- 1.4) Quais plataformas o PostgreSQL pode ser executado?
-
- Em geral, qualquer plataforma moderna compatí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.
-
- O PostgreSQL também executa nativamente nos sistemas operacionais
- Microsoft Windows baseados no NT tais como Win200 SP4, WinXP e
- Win2003. Um instalador pré-empacotado está disponível em
- http://pgfoundry.org/projects/pginstaller. Versões do Windows baseadas
- no MS-DOS (Win95, Win98, WinMe) podem executar o PostgreSQL utilizando
- o Cygwin.
-
- Há também uma versão para o Novell Netware 6 em
- http://forge.novell.com e uma versão para OS/2 (eComStation) em
- http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgre
- SQL&stype=all&sort=type&dir=%2F.
-
- 1.5) Onde eu posso conseguir o PostgreSQL?
-
- Via navegador web, utilize http://www.postgresql.org/ftp/ e via ftp,
- utilize ftp://ftp.postgresql.org/pub/.
-
- 1.6) Qual é a última versão?
-
- A última versão do PostgreSQL é a versão 8.2.5.
-
- Nós planejamos lançar versões novas a cada ano com versões corretivas
- em alguns meses.
-
- 1.7) Onde eu posso conseguir suporte?
-
- A comunidade do PostgreSQL fornece assistência a muitos de seus
- usuários via e-mail. O principal sítio web para inscrição nas listas
- de e-mail é http://www.postgresql.org/community/lists/. As listas
- general e bugs são um bom lugar para início.
-
- O principal canal de IRC é o #postgresql na Freenode
- (irc.freenode.net). Para se conectar você pode utilizar o comando Unix
- irc -c '#postgresql' "$USER" irc.freenode.net ou utilizar qualquer
- outro cliente de IRC. Um canal hispânico (#postgresql-es) e um francês
- (#postgresqlfr) também existem na mesma rede. Há também um canal
- PostgreSQL na EFNet.
-
- Uma lista de empresas que prestam suporte comercial está disponível em
- http://www.postgresql.org/support/professional_support.
-
- 1.8) Como eu informo a existência de um bug?
-
- Visite o formulário que reporta bugs do PostgreSQL em
- http://www.postgresql.org/support/submitbug.
-
- Verifique também o nosso ftp ftp://ftp.postgresql.org/pub para ver se
- há uma versão mais recente do PostgreSQL.
-
- Bugs submetidos utilizando o formulário ou informado a qualquer lista
- de discussão do PostgreSQL tipicamente gera uma das seguintes
- respostas:
- * Não é um bug e o porquê
- * É um bug conhecido e já está na lista de AFAZERES
- * O bug foi corrigido na versão atual
- * O bug foi corrigido mas não foi empacotado em um versão oficial
- * Um pedido foi feito para obter informações detalhadas:
- + Sistema Operacional
- + Versão do PostgreSQL
- + Exemplo de teste que reproduz o bug
- + Informações sobre depuração
- + Saída reconstituidora de vestígios (backtrace) do depurador
- * O bug é novo. O seguinte pode ocorrer:
- + Uma correção é criada e será incluída na próxima versão
- + O bug não pode ser corrigido imediatamente e é adicionado a
- lista de AFAZERES
-
- 1.9) Como eu posso saber quais são os bugs conhecidos ou funcionalidades
- ausentes?
-
- O PostgreSQL suporta um subconjunto extendido do SQL:2003. Veja nossa
- lista de AFAZERES que contém bugs conhecidos, funcionalidades ausentes
- e planos futuros.
-
- Uma solicitação de funcionalidade geralmente resulta em uma das
- seguintes respostas:
- * A funcionalidade já está na lista de AFAZERES
- * A funcionalidade não é desejável porque:
- + Ela duplica uma funcionalidade existente que já segue o
- padrão SQL
- + A funcionalidade aumentará a complexidade do código mas
- adicionará pouco benefício
- + A funcionalidade será insegura ou não-confiável
- * A nova funcionalidade é adicionada a lista de AFAZERES
-
- O PostgreSQL não utiliza sistema de acompanhamento de bugs porque nós
- achamos mais eficiente responder diretamente o e-mail e manter a lista
- de AFAZERES atualizada. Na prática, bugs não duram muito no programa;
- e bugs que afetam uma grande quantidade de usuários são corrigidos
- rapidamente. O único lugar para encontrar todas as mudanças, melhorias
- e correções em uma versão do PostgreSQL é ler as mensagens de log do
- CVS. Até mesmo as notas de lançamento não listam todas as mudanças
- feitas no programa.
-
- 1.10) Que documentação está disponível?
-
- O PostgreSQL inclui vasta documentação, incluindo um manual extenso,
- páginas de manuais (man pages) e alguns exemplos teste. Veja o
- diretório /doc. Você também pode pesquisar os manuais online em
- http://www.postgresql.org/docs.
-
- Há dois livros sobre PostgreSQL disponíveis online em
- http://www.postgresql.org/docs/books/awbook.html e
- http://www.commandprompt.com/ppbook/. Há uma lista de livros sobre
- PostgreSQL disponíveis para compra. Um dos mais populares é o do Korry
- Douglas. Uma lista de análise sobre os livros pode ser encontrada em
- http://www.postgresql.org/docs/books/. Há também uma coleção de
- artigos técnicos sbore PostgreSQL em
- http://www.postgresql.org/docs/techdocs/.
-
- O programa cliente de linha de comando psql tem alguns comandos \d
- para mostrar informações sobre tipos, operadores, funções, agregações,
- etc. - utilize \? para mostrar os comandos disponíveis.
-
- Nosso sítio web contém ainda mais documentação.
-
- 1.11) Como eu posso aprender SQL?
-
- Primeiro, considere os livros específicos sobre PostgreSQL mencionados
- acima. Muitos de nossos usuários gostam do The Practical SQL Handbook,
- Bowman, Judith S., et al., Addison-Wesley. Outros do The Complete
- Reference SQL, Groff et al., McGraw-Hill.
-
- Há também bons tutoriais disponíveis online:
- * http://www.intermedia.net/support/sql/sqltut.shtm
- * http://sqlcourse.com
- * http://www.w3schools.com/sql/default.asp
- * http://mysite.verizon.net/Graeme_Birchall/id1.html
-
- 1.12) Como posso submeter uma correção (patch) ou me juntar a equipe de
- desenvolvimento?
-
- Veja a FAQ do Desenvolvedor.
-
- 1.13) Como é o PostgreSQL comparado a outros SGBDs?
-
- Há várias maneiras de se medir um software: funcionalidades,
- performance, confiabilidade, suporte e preço.
-
- Funcionalidades
- PostgreSQL tem muitas características presentes em muitos SGBDs
- comerciais como transações, subconsultas, gatilhos, visões,
- integridade referencial de chave estrangeira e bloqueio (lock)
- sofisticado. Nós temos algumas funcionalidades que eles não
- tem, como tipos definidos pelo usuário, herança, regras e
- controle de concorrência de múltiplas versões para reduzir
- bloqueios (locks).
-
- Performance
- A performance do PostgreSQL é comparável a outros bancos de
- dados comerciais e de código livre. Ele é mais rápido em
- algumas coisas, mais lento em outras. Nossa performance é
- geralmente +/- 10% comparada a de outros bancos de dados.
-
- Confiabilidade
- Nós sabemos que um SGBD deve ser confiável ou ele é inútil. Nós
- 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.7 da FAQ).
-
- Preço
- Nós somos livres para uso dele tanto comercial quanto não
- comercial. Você pode adicionar nosso código ao seu produto sem
- limitações, exceto aquelas descritas na nossa licença BSD
- mencionada acima.
-
- 1.14) O PostgreSQL gerenciará mudanças no horário devido ao horário de verão
- em vários países?
-
- Mudanças no horário de verão dos USA foram incluídas nas versões 8.0
- .[4+] do PostgreSQL e em todas as versões grandes, i.e. 8.1. Mudanças
- no Canadá e Austrália Oeste foram incluídas na 8.0.[10+], 8.1.[6+] e
- em todas as versões grandes subsequentes. Versões do PostgreSQL
- anteriores a 8.0 utilizam o banco de dados de zona horária do sistema
- operacional para informações sobre horário de verão.
- _________________________________________________________________
-
- Perguntas sobre Clientes
-
- 2.1) Quais interfaces estão disponíveis para PostgreSQL?
-
- A instalação do PostgreSQL inclui somente as interfaces C e C
- embutida. Todas as outras interfaces são projetos independentes que
- podem ser obtidos separadamente; sendo separados permitem que eles
- tenham suas próprias datas de lançamento e time de desenvolvedores.
-
- Algumas linguagens de programação como PHP incluem uma interface para
- PostgreSQL. Interfaces para linguagens como Perl, TCL, Python e muitas
- outras estão disponíveis em http://www.pgfoundry.org.
-
- 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 (http://www.php.net) é uma excelente
- interface.
-
- Para casos complexos, muitos usam a Interface Perl e DBD::Pg com
- CGI.pm ou mod_perl.
-
- 2.3) O PostgreSQL tem interfaces gráficas para iteragir com o usuário?
-
- Há um vasto número de Ferramentas Gráficas (GUI), que estão
- disponíveis para o PostgreSQL, comerciais e de desenvolvedores de
- código aberto. Uma lista detalhada pode ser encontrada em Documentação
- da Comunidade PostgreSQL
- _________________________________________________________________
-
- Perguntas Administrativas
-
- 3.1) Como eu instalo o PostgreSQL em um local diferente de /usr/local/pgsql?
-
- Especifique a opção --prefix quando executar o configure.
-
- 3.2) Como eu controlo conexões de outras máquinas?
-
- Por padrão, o PostgreSQL só permite conexões da máquina local
- utilizando soquetes de domínio Unix ou conexões TCP/IP. Outras
- máquinas não poderão conectar-se a menos que você modifique
- listen_addresses no postgresql.conf, habilite a autenticação por
- máquina modificando o arquivo $PGDATA/pg_hba.conf e reinicie o
- servidor PostgreSQL.
-
- 3.3) Como eu ajusto o servidor de banco de dados para obter uma performance
- melhor?
-
- Há três grandes áreas para melhorar a performance em potencial:
-
- Mudança de Consultas
- Isto involve modificar consultas para obter melhor performance:
-
- + Criação de índices, incluir expressões e índices parciais
- + Utilização o COPY ao invés de múltiplos comandos INSERTs
- + Agrupamento de múltiplos comandos em uma única transação para
- diminuir a despesa com efetivações (commit)
- + Utilização do CLUSTER quando recuperar vários registros de um
- índice
- + Utilização do LIMIT para retornar um subconjunto da saída da
- consulta
- + Utilização de Consultas preparadas
- + Utilização de ANALYZE para manter as estatísticas do
- otimizador corretas
- + Utilização regular do VACUUM ou pg_autovacuum
- + Remoção de índices durante grande mudança de dados
-
- Configuração do Servidor
- Um grande número de configurações que afetam a performance.
- Para obter detalhes adicionais, veja Administration
- Guide/Server Run-time Environment/Run-time Configuration para
- listagem completa, e para comentários veja
- http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_co
- nf_e.html e
- http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html.
-
- Seleção do Hardware
- O efeito do hardware na performance é detalhado em
- http://www.powerpostgresql.com/PerfList/ e
- http://momjian.us/main/writings/pgsql/hw_performance/index.html
- .
-
- 3.4) Quais características de depuração estão disponíveis?
-
- Há muitas variáveis de configuração do servidor log_* que habilitam a
- exibição de consultas e estatísticas que podem ser muito úteis para
- depuração e medidas de performance.
-
- 3.5) Por que eu recebo "Sorry, too many clients" quando eu tento conectar?
-
- Você atingiu o limite padrão de 100 sessões. Você precisa aumentar o
- limite do servidor PostgreSQL, que diz quantos processos servidor
- concorrentes ele pode iniciar, alterando o valor max_connections no
- postgresql.conf e reiniciando o postmaster.
-
- 3.6) Qual é o processo de atualização do PostgreSQL?
-
- Veja http://www.postgresql.org/support/versioning para discussão geral
- sobre atualizações e
- http://www.postgresql.org/docs/current/static/install-upgrading.html
- para instruções específicas.
-
- 3.7) Que tipo de hardware eu devo usar?
-
- Por causa do hardware de PC ser em sua maioria compatível, pessoas
- tendem a acreditar que todos os hardwares de PC 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) Como eu faço um SELECT somente dos primeiros registros de uma consulta?
- Um registro randômico?
-
- Para obter somente alguns registros, se você sabe o número de
- registros necessários ao executar o SELECT utilize o LIMIT. Se um
- índice corresponde no ORDER BY é possível que a consulta toda não
- tenha que ser executada. Se você não sabe o número de registros ao
- executar o SELECT, utilize um cursor e o FETCH.
-
- Para obter um registro randômico, utilize:
- SELECT col
- FROM tab
- ORDER BY random()
- LIMIT 1;
-
- 4.2) Como eu descubro quais tabelas, índices, bancos de dados e usuários
- estão definidos? Como eu vejo as consultas utilizadas pelo psql para
- mostrá-los?
-
- Utilize o comando \dt para ver tabelas no psql. Para obter uma lista
- completa dos comandos no psql você pode utilizar \?. Alternativamente,
- você pode ler o código-fonte do psql no arquivo
- pgsql/src/bin/psql/describe.c, ele contém os comandos SQL que geram a
- saída para os comandos de contrabarra do psql. Você também pode
- iniciar o psql com a opção -E para que as consultas utilizadas para
- executar os comandos que você informou seja exibida. O PostgreSQL
- também fornece uma inteface compatível com SQL do INFORMATION SCHEMA
- que você pode consultar para obter informação sobre o banco de dados.
-
- Há também tabelas do sistema que começam com pg_ que os descrevem
- também.
-
- Utilizando o psql -l listará todos os bancos de dados.
-
- Veja também o arquivo pgsql/src/tutorial/syscat.source. Ele ilustra
- muitos dos comandos SELECTs necessários para obter informação das
- tabelas de sistema do banco de dados.
-
- 4.3) Como você muda o tipo de dado de uma coluna?
-
- Mudar o tipo de dado de uma coluna pode ser feito facilmente na versão
- 8.0 ou superior com ALTER TABLE ALTER COLUMN TYPE.
-
- Em versões anteriores, faça isso:
- BEGIN;
- ALTER TABLE tab ADD COLUMN col_nova novo_tipo_dado;
- UPDATE tab SET col_nova = CAST(col_antiga AS novo_tipo_dado);
- ALTER TABLE tab DROP COLUMN col_antiga;
- COMMIT;
-
- Você pode então querer fazer um VACUUM FULL tab para recuperar o
- espaço em disco utilizado pelos registros expirados.
-
- 4.4) Qual é o tamanho máximo de um registro, uma tabela e um banco de dados?
-
- Estes são os limites:
-
- Tamanho máximo de um banco de dados? ilimitado (existem bancos de
- dados de 32 TB)
- Tamanho máximo de uma tabela? 32 TB
- Tamanho máximo de um registro? 400 GB
- Tamanho máximo de um campo? 1 GB
- Número máximo de registros em uma tabela? ilimitado
- Número máximo de colunas em uma tabela? 250-1600 dependendo dos tipos
- das colunas
- Número máximo de índices em uma tabela? ilimitado
-
- É claro, que eles não são ilimitados, mas limitados ao espaço em disco
- disponível e espaço em memória/swap. A Performance será penalizada
- quando estes valores se tornarem grandes.
-
- 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, o tamanho de um registro e o número
- máximo de colunas podem ser quadruplicados aumentando-se o tamanho
- padrão do bloco para 32k. O tamanho máximo de uma tabela pode também
- ser aumentado utilizando particionamento de tabela.
-
- Uma limitação é que índices não podem ser criados em colunas maiores
- do que 2.000 caracteres. Felizmente, tais índices são raramente
- necessários. Unicidade é melhor garantida por um índice de uma função
- de um hash MD5 de uma coluna longa, e indexação de texto longo permite
- a busca de palavras dentro da coluna.
-
- 4.5) Quanto espaço em disco é necessário para armazenar dados de um arquivo
- texto?
-
- Um banco de dados PostgreSQL irá requerer até cinco vezes a quantidade
- de espaço requerida para armazenar dados em um arquivo texto.
-
- Como um exemplo, considere um arquivo com 100.000 linhas contendo um
- inteiro e uma descrição em cada linha. Suponha que o tamanho médio da
- descrição é de vinte bytes. O arquivo terá 2,8 MB. O tamanho do
- arquivo do banco de dados PostgreSQL que contém esses dados pode ser
- estimado em 5,2 MB:
- 24 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
- -------------------------------------------
- 52 bytes por registro
-
- O tamanho de uma página de dados no PostgreSQL é 8192 bytes (8 KB), então:
-
- 8192 bytes por página
- ------------------------ = 158 registros por página do banco de dados (arredondado para baixo)
- 52 bytes por registro
-
- 100000 registros de dados
- ---------------------------- = 633 páginas do banco de dados (arredondadopara cima)
- 158 registros por página
-
-633 páginas do banco de dados * 8192 bytes por página = 5.185.536 bytes (5,2MB)
-
- Í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.6) Por que minhas consultas estão lentas? Por que elas não estão utilizando
- meus índices?
-
- Índices não são utilizados por toda consulta. Índices são utilizados
- somente se a tabela é maior do que um tamanho mínimo, e a consulta
- seleciona somente uma pequena porcentagem dos registros da tabela.
- Isto porque o acesso randômico ao disco causado pela busca indexada
- pode ser mais lento do que uma leitura ao longo da tabela ou busca
- sequencial.
-
- Para determinar se um índice deveria ser utilizado, o PostgreSQL deve
- ter estatísticas sobre a tabela. Estas estatísticas são coletadas
- utilizando o VACUUM ANALYZE ou simplesmente o ANALYZE. Utilizando
- estatísticas, o otimizador sbae quantos registros estão na tabela, e
- pode melhor determinar se índices deveriam ser utilizados.
- Estatísticas também são úteis para determinar a ordem de junção ótima
- e métodos de junção. Coleção de estatísticas deveriam ser feitas
- periodicamente a medida que o conteúdo da tabela muda.
-
- Índices não são normalmente utilizados para ORDER BY ou para fazer
- junções. Uma busca sequencial seguido por uma ordenação explícita é
- geralmente mais rápida do que uma busca indexada em uma tabela grande.
- Contudo, LIMIT combinado com ORDER BY frequentemente utilizará índice
- porque somente uma pequena porção da tabela será retornada.
-
- Se você acredita que o otimizador está incorreto ao escolher uma busca
- sequencial, utilize SET enable_seqscan TO 'off' e execute a consulta
- novamente para ver se uma busca indexada é realmente mais rápida.
-
- Ao utilizar operadores curinga tais como LIKE ou ~, índices podem ser
- utilizados somente em algumas condições:
- * O início da cadeia de caracteres da busca deve ser iniciar com uma
- cadeia de caracteres, i.e.
- + modelos LIKE não devem iniciar com %.
- + modelos ~ (expressões regulares) devem iniciar com ^.
- * A cadeia de caracteres utilizada na busca não pode iniciar com a
- classe de caracteres e.g. [a-e].
- * Busca que não diferenciam maiúsculas de minúsculas tais como ILIKE
- e ~* não utilizam índices. Em vez disso, utilize índice de
- expressão, que é descrito na seção 4.8.
- * O idioma padrão C deve ser usando durante o initdb porque não é
- possível saber o próximo caracter em idiomas que não sejam o C.
- Você pode criar um índice especial text_pattern_ops para tais
- casos que funcionam somente para indexação com LIKE. Também é
- possível utilizar indexação de busca textual para buscas por
- palavras.
-
- Em versões anteriores a 8.0, índices frequentemente não podem ser
- utilizados a menos que os tipos de dados correspondam aos tipos de
- coluna do índice. Isto era particularmente verdadeiro para índices de
- coluna int2, int8 e numeric.
-
- 4.7) Como eu vejo como o otimizador de consulta está avaliando a minha
- consulta?
-
- Veja o comando EXPLAIN no manual.
-
- 4.8) Como eu faço buscas com expressões regulares e buscas com expressões
- regulares sem diferenciar maiúsculas de minúsculas? Como eu utilizo um índice
- para buscas que não diferenciam maiúsculas de minúsculas?
-
- O operador ~ faz avaliação de expressões regulares, e ~* faz avaliação
- não sensível a maiúsculas de expressões regulares. A variante não
- sensível a maiúsculas do LIKE é chamada de ILIKE.
-
- 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 de expressão, ele será utilizado:
- CREATE INDEX tabindex ON tab (lower(col));
-
- Se o índice acima é criado como UNIQUE, embora a coluna possa
- armazenar caracteres maiúsculos e minúsculos, ele não pode ter valores
- idênticos que diferem apenas em letras maiúsculas e minúsculas. Para
- forçar uma letra maiúscula ou minúscula a ser armazenada na coluna,
- utilize uma restrição CHECK ou um gatilho.
-
- 4.9) Em uma consulta, como eu detecto se um campo é NULL? Como eu posso
- concatenar possíveis NULLs? Como eu posso ordenar por um campo que é NULL ou
- não?
-
- Você testa a coluna com IS NULL e IS NOT NULL, como a seguir:
- SELECT *
- FROM tab
- WHERE col IS NULL;
-
- Para concatenar com possíveis NULLs, utilize COALESCE(), assim:
- SELECT COALESCE(col1, '') || COALESCE(col2, '')
- FROM tab
-
- Para ordenar pelo status NULL, utilize os modificadores IS NULL e IS
- NOT NULL na sua cláusula ORDER BY. Coisas que são verdadeiro serão
- ordenadas acima das coisas que são falso, então a consulta a seguir
- irá colocar entradas NULL no início da lista de resultados:
- SELECT *
- FROM tab
- ORDER BY (col IS NOT NULL)
-
- 4.10) Qual é a diferença entre os vários tipos de dado de caracteres?
-
- Tipo Nome Interno Observação
- VARCHAR(n) varchar tamanho especifica o tamanho máximo, sem
- preenchimento
- CHAR(n) bpchar preenchimento em branco para comprimento fixo
- específico
- TEXT text nenhum limite superior específico no comprimento
- BYTEA bytea vetor de bytes de comprimento variável (seguro a byte
- nulo)
- "char" char um caracter
-
- Você verá o nome interno quando examinar o catálogo do sistema e em
- algumas mensagens de erro.
-
- Os primeiros quatro tipos acima são do tipo "varlena" (i.e., os
- primeiros quatro bytes no disco são o comprimento seguido pelos
- dados). Consequentemente o espaço atual utilizado é ligeiramente maior
- do que o tamanho declarado. Contudo, valores longos são também
- sujeitos a compressão, então o espaço em disco pode também ser bem
- menor do que o esperado.
- VARCHAR(n) é melhor quando está armazenando cadeias de caracteres de
- comprimento variável e há um limite de tamanho desta cadeia. TEXT é
- para cadeias de caracteres de comprimento ilimitado, com o máximo de
- um gigabyte.
-
- CHAR(n) é para armazenar cadeias de caracteres que são todas do mesmo
- tamanho. CHAR(n) preenche com espaços em branco até o tamanho
- especificado, enquanto o VARCHAR(n) armazena somente os caracteres
- fornecidos. BYTEA é para armazenar dados binários, particularmente
- valores que incluem bytes NULL. Todos os tipos descritos aqui tem
- características de performance similares.
-
- 4.11.1) Como eu crio um campo serial/auto incremento?
-
- PostgreSQL suporta o tipo de dados SERIAL. Ele cria automaticamente
- uma sequência. Por exemplo:
- CREATE TABLE pessoa (
- 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
- );
-
- Sequências automaticamente criadas são nomeadas como
- <tabela>_<colunaserial>_seq, onde tabela e colunaserial são os nomes
- da tabela e da coluna serial, respectivamente. Veja a página sobre
- create_sequence no manual para obter informações adicionais sobre
- sequências.
-
- 4.11.2) Como eu consigo o valor de um campo SERIAL?
-
- A maneira mais simples de obter o próximo valor SERIAL de uma
- sequência é com RETURNING. Utilizando o exemplo da tabela em 4.11.1,
- ele ficaria assim:
- INSERT INTO pessoa (nome) VALUES ('Blaise Pascal') RETURNING id;
-
- Você também pode chamar nextval() e utilizar o valor no INSERT ou
- chamar currval() após o INSERT.
-
- 4.11.3) currval() não lida com condição de corrida com outros usuários?
-
- Não. currval() retorna o valor atual atribuido pela sua sessão, e não
- por todas as sessões.
-
- 4.11.4) Por que os números da minha sequência não são reutilizados quando uma
- transação é abortada? Por que há intervalos nos números da minha
- sequência/coluna SERIAL?
-
- Para melhorar a concorrência, valores da sequência são atribuídos a
- transações correntes e não são travados até que a transação seja
- finalizada. Isso causa intervalos na numeração por causa de transações
- abortadas.
-
- 4.12) O que é um OID? O que é um CTID?
-
- Se uma tabela é criada com WITH OIDS, cada registro recebe um OID
- único. OIDs são automaticamente atribuídos como inteiros de 4 bytes
- que são únicos ao longo de toda instalação. Contudo, eles são
- limitados em 4 bilhões e, então, os OIDs começam a ser duplicados. O
- PostgreSQL utiliza OIDs para ligar as tabelas do sistema.
-
- Para numerar registros nas tabelas do usuários, é melhor utilizar
- SERIAL ao invés de OIDs porque sequências SERIAL são únicas somente em
- uma tabela; e são menos propícias a atingir o limite. SERIAL8 está
- disponível para armazenar valores de sequências com oito bytes.
-
- CTIDs são utilizados para identificar registros físicos específicos
- com valores de block e deslocamento. CTIDs mudam após registros serem
- modificados ou recarregados. Eles são utilizados por índices para
- apontar registros físicos.
-
- 4.13) Por que eu recebo o erro "ERROR: Memory exhausted in AllocSetAlloc()"?
-
- Você provavelmente está sem memória virtual no seu sistema, ou o seu
- núcleo (kernel) tem um limite baixo para certos recursos. Tente isto
- antes de iniciar o servidor PostgreSQL:
- 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 processo
- servidor retornou muitos dados, tente-o antes de iniciar o cliente.
-
- 4.14) Como eu informo qual versão do PostgreSQL eu estou utilizando?
-
- No psql, digite SELECT version();
-
- 4.15) Como eu crio uma coluna que conterá por padrão a hora atual?
-
- Utilize CURRENT_TIMESTAMP:
- CREATE TABLE teste (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP);
-
- 4.16) 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
- internas (INNER).
-
- 4.17) Como eu faço consultas utilizando múltiplos bancos de dados?
-
- Não há outra maneira de consultar um banco de dados caso ele não seja
- o atual. Porque o PostgreSQL carrega catálogos do sistema específicos
- do banco de dados, é incerto como uma consulta em banco de dados
- 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.18) Como eu retorno múltiplos registros ou colunas de uma função?
-
- É fácil utilizando funções que retornam conjunto,
- http://www.postgresql.org/docs/techdocs.17.
-
- 4.19) Por que eu obtenho erros "relation with OID ###### does not exist" ao
- acessar tabelas temporárias em funções PL/PgSQL?
-
- Em versões do PostgreSQL < 8.3, 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.
-
- Este problema não ocorre no PostgreSQL 8.3 ou superior.
-
- 4.20) Quais soluções de replicação estão disponíveis?
-
- Embora "replicação" seja um termo simples, há várias tecnologias para
- fazer replicação, com vantagens e desvantagens para cada um.
-
- Replicação mestre/escravo permite que um mestre receba consultas de
- leitura e escrita, enquanto os escravos só podem aceitar
- leitura/consultas SELECT. A solução mais popular de replicação
- mestre-escravo para PostgreSQL disponível livremente é Slony-I.
-
- Replicação com múltiplos mestres permite que consultas leitura/escrita
- sejam enviadas para múltiplos computadores replicadores. Esta
- capacidade também tem um sério impacto na performance por causa da
- necessidade de sincronizar as mudanças entre os servidores. PGCluster
- é a solução mais popular disponível livremente para PostgreSQL.
-
- Há também soluções de replicação comerciais e baseadas em hardware
- disponíveis que suportam uma variedade de modelos de replicação.
-
- 4.21) Por que os nomes de minhas tabelas e colunas não são reconhecidos em
- minha consulta? Por que as maiúsculas não são preservadas?
-
- A causa mais comum de nomes desconhecidos é o uso de aspas ao redor
- dos nomes da tabela ou coluna durante a criação da tabela. Ao utilizar
- aspas, nomes de tabela e coluna (chamados de identificadores) são
- armazenados como especificado, significando que você deve utilizar
- aspas quando se referir aos nomes na consulta. Algumas interfaces,
- como pgAdmin, automaticamente colocam aspas nos identificadores
- durante a criação da tabela. Então, para identificadores serem
- reconhecidos, você deve:
- * Evitar colocar aspas no identificador ao criar tabelas
- * Utilizar somente caracteres minúsculos em identificadores
- * Colocar aspas em identificadores ao referenciá-los nas consultas