diff options
Diffstat (limited to 'doc/FAQ_brazilian')
-rw-r--r-- | doc/FAQ_brazilian | 922 |
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 |