From: Peter Eisentraut Date: Tue, 21 Jul 2009 19:20:33 +0000 (+0000) Subject: Remove translated FAQs X-Git-Tag: REL8_5_ALPHA1~124 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f3f45c87d23b800913fb8ea88fe2d713f6b9dd74;p=postgresql Remove translated FAQs The English FAQ has been moved to the wiki, so the translated versions should have been removed at that point as well. The FAQ_MINGW.html should have been removed when the platform FAQs were integrated into the documentation (or earlier). applied to both 8.4 and 8.5 --- diff --git a/doc/FAQ_brazilian b/doc/FAQ_brazilian deleted file mode 100644 index 16d47428b3..0000000000 --- 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 - __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 diff --git a/doc/FAQ_chinese_simp b/doc/FAQ_chinese_simp deleted file mode 100644 index fde161fa10..0000000000 --- a/doc/FAQ_chinese_simp +++ /dev/null @@ -1,801 +0,0 @@ - - PostgreSQL 常è§é®é¢ï¼FAQï¼ - - æè¿æ´æ°ï¼2007 å¹´ 1 æ 30 æ¥ ææäº 17:37:01 EST - ä¸æçæè¿æ´æ°ï¼2007 å¹´ 2 æ 1 æ¥ ææå 12:55:04 CST - - ç®åç»´æ¤äººåï¼Bruce Momjian (pgman@candle.pha.pa.us) - ä¸æçç»´æ¤äººåï¼Daojing.Zhouï¼doudou586@gmail.comï¼ - - æ¬ææ¡£çææ°çæ¬å¯ä»¥å¨ - http://www.postgresql.org/files/documentation/faqs/FAQ.htmlæ¥çã - - ä¸æä½ç³»ç»å¹³å°ç¸å³çé®é¢å¯å¨http://www.postgresql.org/docs/faq/éæ¾å°ç­ - æ¡ã - _________________________________________________________________ - -常è§é®é¢ - - 1.1)PostgreSQL æ¯ä»ä¹ï¼è¯¥æä¹åé³ï¼ - 1.2)è°æ§å¶å管çPostgreSQL ï¼ - 1.3)PostgreSQLççææ¯ä»ä¹ï¼ - 1.4)PostgreSQLå¯ä»¥è¿è¡å¨åªäºæä½ç³»ç»å¹³å°ä¸ï¼ - 1.5)æä»åªéè½å¾å°PostgreSQLï¼ - 1.6)ææ°ççPostgreSQL æ¯ä»ä¹ï¼ - 1.7)æä»åªéè½å¾å°å¯¹PostgreSQL çæ¯æï¼ - 1.8)æå¦ä½æ交ä¸ä¸ªBUGæ¥åï¼ - 1.9)æå¦ä½äºè§£å·²ç¥ç BUG ææ缺çåè½ï¼ - 1.10)è½å¤è·åçææ°ææ¡£æåªäºï¼ - 1.11)æåºè¯¥ææ ·å¦ä¹ SQL ï¼ - 1.12)å¦ä½æ交补ä¸ææ¯å å¥å¼åéä¼ï¼ - 1.13)PostgreSQL åå¶ä»æ°æ®åºç³»ç»æ¯èµ·æ¥å¦ä½ï¼ - 1.14)PostgreSQL å¯ä»¥å¤çæè¿å个å½å®¶å¤æ¶å¶çåååï¼ - -ç¨æ·å®¢æ·ç«¯é®é¢ - - 2.1)æ们å¯ä»¥ç¨ä»ä¹è¯è¨åPostgreSQL æ交éï¼ - 2.2)æä»ä¹å·¥å·å¯ä»¥æPostgreSQL ç¨äº Web 页é¢ï¼ - 2.3)PostgreSQL æ¥æå¾å½¢ç¨æ·çé¢åï¼ - -ç³»ç»ç®¡çé®é¢ - - 3.1)æææ ·æè½æPostgreSQL è£å¨ /usr/local/pgsql 以å¤çå°æ¹ï¼ - 3.2)æå¦ä½æ§å¶æ¥èªå¶ä»çµèçè¿æ¥ï¼ - 3.3)æææ ·è°æ´æ°æ®åºæå¡å¨ä»¥è·å¾æ´å¥½çæ§è½ï¼ - 3.4)PostgreSQL éå¯ä»¥è·å¾ä»ä¹æ ·çè°è¯ç¹æ§ï¼ - 3.5)为ä»ä¹å¨è¯å¾è¿æ¥ç»å½æ¶æ¶å°âSorry, too many clientsâ æ¶æ¯ï¼ - 3.6)PostgreSQLçå级è¿ç¨æåªäºåå®¹ï¼ - 3.7)(使ç¨PostgreSQL)æéè¦ä½¿ç¨ä»ä¹è®¡ç®æºç¡¬ä»¶ ï¼ - -æä½é®é¢ - - 4.1) å¦ä½åªéæ©ä¸ä¸ªæ¥è¯¢ç»æç头å è¡ï¼ææ¯éæºçä¸è¡ï¼ - 4.2) - å¦ä½æ¥ç表ãç´¢å¼ãæ°æ®åºä»¥åç¨æ·çå®ä¹ï¼å¦ä½æ¥çpsqléç¨å°çæ¥è¯¢æ令并æ¾ç - ¤ºå®ä»¬ï¼ - 4.3) å¦ä½æ´æ¹ä¸ä¸ªå段çæ°æ®ç±»åï¼ - 4.4) åæ¡è®°å½ï¼å个表ï¼ä¸ä¸ªæ°æ®åºçæ大éå¶æ¯å¤å°ï¼ - 4.5) åå¨ä¸ä¸ªå¸åçææ¬æ件éçæ°æ®éè¦å¤å°ç£ç空é´ï¼ - 4.6) 为ä»ä¹æçæ¥è¯¢å¾æ¢ï¼ä¸ºä»ä¹è¿äºæ¥è¯¢æ²¡æå©ç¨ç´¢å¼ï¼ - 4.7) æå¦ä½æè½çå°æ¥è¯¢ä¼åå¨æ¯ææ ·è¯ä¼°å¤çæçæ¥è¯¢çï¼ - 4.8) æææ ·åæ£å表达å¼æç´¢å大å°åæ å³çæ­ - £å表达å¼æ¥æ¾ï¼ææ ·å©ç¨ç´¢å¼è¿è¡å¤§å°åæ å³æ¥æ¾ï¼ - 4.9) å¨ä¸ä¸ªæ¥è¯¢éï¼æææ ·æ£æµä¸ä¸ªå段æ¯å¦ä¸º - NULLï¼æå¦ä½æè½åç¡®æåºèä¸è®ºæå段æ¯å¦å«NULLå¼ï¼ - 4.10) åç§å符类åä¹é´æä»ä¹ä¸åï¼ - 4.11.1) æææ ·å建ä¸ä¸ªåºåå·åææ¯èªå¨éå¢çåæ®µï¼ - 4.11.2) æå¦ä½è·å¾ä¸ä¸ªæå¥çåºåå·çå¼ï¼ - 4.11.3) åæ¶ä½¿ç¨ currval() ä¼å¯¼è´åå¶ä»ç¨æ·çå²çªæåµåï¼ - 4.11.4) 为ä»ä¹ä¸å¨äºå¡å¼å¸¸ä¸æ¢åéç¨åºåå·å¢ï¼ä¸ºä»ä¹å¨åºåå·å段çåå¼ä¸­ - åå¨é´æå¢ï¼ - 4.12) ä»ä¹æ¯ OIDï¼ä»ä¹æ¯ CTID ï¼ - 4.13) 为ä»ä¹ææ¶å°é误信æ¯âERROR: Memory exhausted in - AllocSetAlloc()âï¼ - 4.14) æå¦ä½æè½ç¥éæè¿è¡ç PostgreSQL ççæ¬ï¼ - 4.15) æå¦ä½å建ä¸ä¸ªç¼ºçå¼æ¯å½åæ¶é´çåæ®µï¼ - 4.16) å¦ä½æ§è¡å¤è¿æ¥ï¼outer joinï¼æ¥è¯¢ï¼ - 4.17) å¦ä½æ§è¡æ¶åå¤ä¸ªæ°æ®åºçæ¥è¯¢ï¼ - 4.18) å¦ä½è®©å½æ°è¿åå¤è¡æå¤åæ°æ®ï¼ - 4.19) 为ä»ä¹æå¨ä½¿ç¨PL/PgSQLå½æ°åå临æ¶è¡¨æ¶ä¼æ¶å°é误信æ¯ârelation - with OID ##### does not existâï¼ - 4.20) ç®åæåªäºæ°æ®å¤å¶æ¹æ¡å¯ç¨ï¼ - 4.21) 为ä½æ¥è¯¢ç»ææ¾ç¤ºç表åæååä¸æçæ¥è¯¢è¯å¥ä¸­ - çä¸åï¼ä¸ºä½å¤§åç¶æä¸è½ä¿çï¼ - _________________________________________________________________ - -常è§é®é¢ - - 1.1)PostgreSQL æ¯ä»ä¹ï¼è¯¥æä¹åé³ï¼ - - PostgreSQL è¯»ä½ Post-Gres-Q-Lï¼ææ¶åä¹ç®ç§°ä¸ºPostgres - ãæ³å¬ä¸ä¸å¶åé³ç人åå¯ä»è¿éä¸è½½å£°é³æä»¶ï¼ MP3 æ ¼å¼ ã - - PostgreSQL - æ¯é¢åç®æ çå³ç³»æ°æ®åºç³»ç»ï¼å®å·æä¼ ç»åä¸æ°æ®åºç³»ç»çææåè½ï¼åæ¶åå«æå°å - ¨ä¸ä¸ä»£ DBMS ç³»ç»ç使ç¨çå¢å¼ºç¹æ§ãPostgreSQL - æ¯èªç±åè´¹çï¼å¹¶ä¸æææºä»£ç é½å¯ä»¥è·å¾ã - - PostgreSQL - çå¼åéä¼ä¸»è¦ä¸ºå¿æ¿èï¼ä»ä»¬éå¸ä¸çåå°å¹¶éè¿äºèç½è¿è¡èç³»ï¼è¿æ¯ä¸ä¸ªç¤¾å - ºå¼å项ç®ï¼å®ä¸è¢«ä»»ä½å¬å¸æ§å¶ã - å¦æ³å å¥å¼åéä¼ï¼è¯·åè§å¼å人å常è§é®é¢ï¼FAQï¼ - http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html - - 1.2) è°æ§å¶PostgreSQL ï¼ - - å¦æä½ å¨å¯»æ¾PostgreSQLçæé¨äººï¼ææ¯ä»ä¹ä¸­ - 央å§åä¼ï¼ææ¯ä»ä¹æå±å¬å¸ï¼ä½ åªè½æ¾å¼äº---å 为ä¸ä¸ªä¹ä¸å­ - å¨ï¼ä½æ们çç¡®æä¸ä¸ª - æ ¸å¿å§åä¼åCVS管çç»ï¼ä½è¿äºå·¥ä½ç»ç设ç«ä¸»è¦æ¯ä¸ºäºè¿è¡ç®¡çå·¥ä½èä¸æ - ¯å¯¹PostgreSQLè¿è¡ç¬å å¼æ§å¶ï¼PostgreSQL项ç®æ¯ç±ä»»ä½äººå - å¯åå çå¼å人å社åºåææç¨æ·æ§å¶çï¼ä½ æéè¦åçå°±æ¯è®¢éé®ä»¶å表ï¼åä¸è®¨è®º - å³å¯ï¼è¦åä¸PostgreSQLçå¼åè¯¦è§ å¼å人å常é®é¢ (Developer's FAQ) - è·åä¿¡æ¯ï¼ã - - 1.3)PostgreSQLççææ¯ä»ä¹? - - PostgreSQLçåå¸éµä»ç»å¸çBSDçæãå®å许ç¨æ·ä¸éç®çå°ä½¿ç¨PostgreSQLï¼çè³ä½ - å¯ä»¥éå®PostgreSQLèä¸å«æºä»£ç ä¹å¯ä»¥ï¼å¯ä¸çéå¶å°±æ¯ä½ ä¸è½å 软件èªè - º«é®é¢èåæ们追è¯æ³å¾è´£ä»»ï¼å¦å¤å°±æ¯è¦æ±ææç软件æ·è´ä¸­ - é¡»åæ¬ä»¥ä¸çæ声æãä¸é¢å°±æ¯æ们æ使ç¨çBSDçæ声æåå®¹ï¼ - - PostgreSQLæ°æ®åºç®¡çç³»ç» - - é¨åçæï¼cï¼1996-2005ï¼PostgreSQL å¨çå¼åå°ç»ï¼é¨åçæï¼cï¼1994-1996 - å å·å¤§å¦è£äº - - ï¼Portions copyright (c) 1996-2005,PostgreSQL Global Development Group - Portions Copyright (c) 1994-6 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)PostgreSQL å¯ä»¥è¿è¡å¨åªäºæä½ç³»ç»å¹³å°ä¸ï¼ - - ä¸è¬è¯´æ¥ï¼ä»»ä½ç°å¨å¯¹ UNIX å¼å®¹çæä½ç³»ç»ä¹ä¸é½è½è¿è¡PostgreSQL - ãå¨å®è£æåéååºäºåå¸æ¶ç»è¿æç¡®æµè¯çå¹³å°ã - - PostgreSQlä¹å¯ä»¥ç´æ¥è¿è¡å¨åºäºå¾®è½¯Windows-NTçæä½ç³»ç»ï¼å¦Win2000 - SP4ï¼WinXP å Win2003ï¼å·²å¶ä½å®æçå®è£åå¯ä» - http://pgfoundry.org/projects/pginstallerä¸è½½ï¼åºäºMSDOSçWindowsæä½ç³ - »ç» ï¼Win95ï¼Win98ï¼WinMeï¼éè¦éè¿Cygwin模æç¯å¢è¿è¡PostgreSQLã - - åæ¶ä¹æä¸ä¸ªä¸ºNovell Netware 6å¼åççæ¬å¯ä» - http://forge.novell.comè·åï¼ä¸ºOS/2(eComStation)å¼åççæ¬å¯ä» - http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgre - SQL&stype=all&sort=type&dir=%2F ä¸è½½ã - - 1.5) æä»åªéè½å¾å°PostgreSQLï¼ - - éè¿æµè§å¨å¯ä»http://www.postgresql.org/ftp/ä¸è½½ï¼ä¹å¯éè¿FTPï¼ä» - ftp://ftp.PostgreSQL.org/pub/ç«ç¹ä¸è½½ã - - 1.6) ææ°ççPostgreSQLæ¯ä»ä¹ï¼ - - PostgreSQL ææ°ççæ¬æ¯çæ¬ 8.2.1 ã - - æ们计åæ¯å¹´åå¸ä¸ä¸ªä¸»è¦å级çæ¬ï¼æ¯å 个æåå¸ä¸ä¸ªå°çæ¬ã - - 1.7) æä»åªéè½å¾å°å¯¹PostgreSQLçæ¯æï¼ - - PostgreSQL社åºéè¿é®ä»¶å表为å¶å¤§å¤æ°ç¨æ·æä¾å¸®å©ï¼è®¢éé®ä»¶å表ç主 - ç«ç¹æ¯ - http://www.postgresql.org/community/lists/ï¼ä¸è¬æåµä¸ï¼åå å¥General æ - Bugé®ä»¶å表æ¯ä¸ä¸ªè¾å¥½çå¼å§ã - - 主è¦çIRCé¢éæ¯å¨FreeNode(irc.freenode.net)ç#postgresqlï¼ä¸ºäºè¿ä¸æ­ - ¤é¢éï¼å¯ä»¥ä½¿ç¨UNIXç¨åºircï¼å¶æä»¤æ ¼å¼ï¼ irc -c '#postgresql' - "$USER" irc.freenode.net ï¼æè使ç¨å¶ä»IRC客æ·ç«¯ç¨åºãå¨æ¤ç½ç»ä¸è¿å­ - å¨ä¸ä¸ªPostgreSQLç西ççé¢é(#postgersql-es)åæ³è¯é¢é - (#postgresql-fr)ãåæ ·å°ï¼å¨EFNETä¸ä¹æä¸ä¸ªPostgreSQLç交æµé¢éã - - å¯æä¾åä¸æ¯æçå¬å¸å表å¯å¨http://techdocs.postgresql.org/companies.phpæµ - è§ã - - 1.8) æå¦ä½æ交ä¸ä¸ªBUGæ¥åï¼ - - å¯è®¿é® - http://www.postgresql.org/support/submitbugï¼å¡«åBugä¸æ¥è¡¨æ ¼å³å¯ï¼åæ - ·ä¹å¯è®¿é®ftpç«ç¹ftp://ftp.PostgreSQL.org/pub/ - æ£æ¥ææ æ´æ°çPostgreSQLçæ¬æè¡¥ä¸ã - - éè¿ä½¿ç¨Bugæäº¤è¡¨æ ¼ææ¯åå¾PostgreSQLé®ä»¶å表çBugé常ä¼æ以ä¸ä¹ä¸åå¤ï - ¼ - * ææ交å容ä¸æ¯ä¸ä¸ªBugåå¶ä¸æ¯Bugçåå ã - * ææ交å容æ¯ä¸ä¸ªå·²ç¥çBug并ä¸å·²ç»å å¥TODOå¾å¤çä»»å¡å表ã - * ææ交çBugå·²å¨å½åçæ¬ä¸è¢«ä¿®æ£ã - * ææ交çBug已修æ£ä½å°æªå°è¡¥ä¸å å¥ç°å¨çåå¸è½¯ä»¶åã - * 请æ±æ交èæä¾æ´è¯¦ç»çä¿¡æ¯ï¼ - + æä½ç³»ç» - + PostgreSQLçæ¬ - + å¯éç°Bugçæµè¯æ¡ä¾ - + è°è¯ä¿¡æ¯ - + è°è¯è·è¸ªè¾åº - * ææ交å容æ¯ä¸ä¸ªæ°Bugï¼å°æ§è¡ä»¥ä¸å·¥ä½ï¼ - + å建ä¸ä¸ªæ°è¡¥ä¸å¹¶å°å¶å å¥ä¸ä¸ä¸ªä¸»è¦çæ¬ææ¯å°çæ¹è¿çæ¬ä¸ã - + æ¤Bugææ¶ä¸è½ä¿®æ£ï¼å°è¢«å è³TODOå¾å¤çä»»å¡å表ã - - 1.9) æå¦ä½äºè§£å·²ç¥ç BUG ææ缺çåè½ï¼ - - PostgreSQL æ¯æä¸ä¸ªæ©å±ç SQL:2003 çåéãåéæ们çTODO - å表ï¼äºè§£å·²ç¥Bugå表ãæ缺çåè½åå°æ¥çå¼å计åã - - è¦æ±å¢å æ°åè½çç³è¯·é常ä¼æ¶å°ä»¥ä¸ä¹ä¸çåå¤ï¼ - * 该åè½å·²å å¥TODOå¾å¤çä»»å¡å表ã - * 该åè½ä¸æ¯å¿é¡»çï¼å ä¸ºï¼ - + å®æ¯ç°æçä¸ç¬¦åSQLæ åçæåè½çéå¤ã - + 该åè½æ§ä¼å¤§å¤§å¢å 代ç çå¤æç¨åºï¼è带æ¥ç好å¤æ¯å¾®ä¸è¶³éçã - + 该åè½æ¯ä¸å®å¨ææ¯ä¸å¯é çã - * 该åè½å°è¢«å å¥TODOå¾å¤çä»»å¡å表ã - - PostgreSQLä¸ä½¿ç¨Bugè·è¸ªç³»ç»ï¼å 为æ们åç°å¨é®ä»¶å表中 - ç´æ¥åå¤ä»¥åä¿è¯TODOä»»å¡å表æ»æ¯å¤äºææ°ç¶æçæ¹å¼å·¥ä½æçä¼æ´é«ä¸äºãäºå®ä - ¸ï¼Bugä¸ä¼å¨æ们ç软件ä¸åå¨å¾é¿æ¶é´ï¼ - 对影åå¾å¤ç¨æ·çBugä¹æ»æ¯å¾å¿«ä¼è¢«ä¿®æ£ãå¯ä¸è½æ¾å°æææ¹è¿ãæé«åä¿®æ­ - £çå°æ¹æ¯CVSçæ¥å¿ä¿¡æ¯ï¼å³ä½¿æ¯å¨è½¯ä»¶æ°çæ¬çåå¸ä¿¡æ¯ä¸­ - ä¹ä¸ä¼ååºæ¯ä¸å¤ç软件æ´æ°ã - - 1.10) è½å¤è·åçææ°ææ¡£æåªäºï¼ - - PostgreSQLåå«å¤§éçææ¡£ï¼ä¸»è¦æ详ç»çåèæåï¼æå页åä¸äºçæµè¯ä¾åãåè§ /doc - ç®å½ï¼è¯æ³¨ï¼åºä¸º $PGHOME/docï¼ã - ä½ è¿å¯ä»¥å¨çº¿æµè§PostgreSQLçæåï¼å¶ç½åæ¯ï¼http://www.PostgreSQL.org/d - ocsã - - æ两æ¬å³äºPostgreSQLç书å¨çº¿æä¾ï¼å¨ - http://www.PostgreSQL.org/docs/awbook.html å - http://www.commandprompt.com/ppbook/ ã ä¹æ大éçPostgreSQL书ç±å¯ä¾è´­ - ä¹°ï¼å¶ä¸æ为æµè¡çä¸æ¬æ¯ç±Korry Douglasç¼åçãå¨ - http://techdocs.PostgreSQL.org/techdocs/bookreviews.phpä¸ - ä¸æ大éæå³PostgreSQL书ç±çç®ä»ã å¨ - http://techdocs.PostgreSQL.org/ä¸æ¶éäºæå³PostgreSQLç大éææ¯æç« ã - - 客æ·ç«¯çå½ä»¤è¡ç¨åºpsqlæä¸äºä»¥ \d - å¼å¤´çå½ä»¤ï¼å¯æ¾ç¤ºå³äºç±»åï¼æä½ç¬¦ï¼å½æ°ï¼èåçä¿¡æ¯ï¼ä½¿ç¨ \? - å¯ä»¥æ¾ç¤ºææå¯ç¨çå½ä»¤ã - - æ们ç web ç«ç¹åå«æ´å¤çææ¡£ã - - 1.11) æåºè¯¥ææ ·å¦ä¹ SQL ï¼ - - é¦åèèä¸è¿°æå°çä¸PostgreSQLç¸å³ç书ç±ï¼å¦å¤ä¸æ¬æ¯Teach Yourself SQL in - 21 Days, Second Editionï¼å¶è¯¦ç»ä»ç»çç½åæ¯ - http://members.tripod.com/er4ebus/sql/index.htmï¼ - æ们ç许å¤ç¨æ·å欢The Practical SQL Handbookï¼ Bowman, Judith S. - ç¼åï¼Addison-Wesleyå¬å¸åºçï¼å¶ä»çåå欢 The Complete Reference SQL, - Groff ç¼åï¼McGraw-Hillå¬å¸åºçã - - å¨ä¸åç½åä¸ä¹æå¾å¥½çæç¨ï¼ä»ä»¬æ¯ - * 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)å¦ä½æ交补ä¸ææ¯å å¥å¼åéä¼ï¼ - - è¯¦è§ å¼å人å常è§é®é¢ (Developer's FAQ) ã - - 1.13)PostgreSQLåå¶ä»æ°æ®åºç³»ç»æ¯èµ·æ¥å¦ä½ï¼ - - è¯ä»·è½¯ä»¶æ好å ç§æ¹æ³ï¼åè½ï¼æ§è½ï¼å¯é æ§ï¼æ¯æåä»·æ ¼ã - - åè½ - PostgreSQL æ¥æ大ååç¨æ°æ®åºæå¤çåè½ï¼ä¾å¦ï¼äºå¡ï¼å­ - æ¥è¯¢ï¼è§¦åå¨ï¼è§å¾ï¼å¤é®åèå®æ´æ§åå¤æçéå®çã - æ们è¿æä¸äºå®ä»¬æ²¡æçç¹æ§ï¼å¦ç¨æ·å®ä¹ç±»åï¼ç»§æ¿ï¼è§ååå¤çæ¬å¹¶è - ¡æ§å¶ä»¥åå°éçäºç¨çã - - æ§è½ - PostgreSQLåå¶ä»åç¨åå¼æºçæ°æ®åºå·æ类似çæ§è½ã对æäºå¤çå®æ¯è¾å¿« - ï¼å¯¹å¶ä»ä¸äºå¤çå®æ¯è¾æ¢ã ä¸å¶ä»æ°æ®åºç¸æ¯ï¼æ们çæ§è½ä¼å£éå¸¸å¨ - +/- 10%ä¹é´ã - - å¯é æ§ - æ们é½ç¥éæ°æ®åºå¿é¡»æ¯å¯é çï¼å¦åå®å°±ä¸ç¹ç¨é½æ²¡æãæ们åªååå°åå¸ - ç»è¿è®¤çæµè¯çï¼ç¼ºé·æå°ç稳å®ä»£ç ãæ¯ä¸ªçæ¬è³å°æä¸ä¸ªæç beta - æµè¯æ¶é´ï¼å¹¶ä¸æ们çåå¸åå²æ¾ç¤ºæ们å¯ä»¥æä¾ç¨³å®çï¼ç¢åºçï¼å¯ç¨ä - ºç产使ç¨ççæ¬ãæ们ç¸ä¿¡å¨è¿æ¹é¢æ们ä¸å¶ä»çæ°æ®åºè½¯ä»¶æ¯ç¸å½çã - - æ¯æ - æ们çé®ä»¶å表æä¾ä¸ä¸ªé常大çå¼å人ååç¨æ·çç»ä»¥å¸®å©è§£å³æ碰å - °çä»»ä½é®é¢ãæ们ä¸è½ä¿è¯æ»æ¯è½è§£å³é®é¢ï¼ç¸æ¯ä¹ä¸ï¼åç¨æ°æ®åºè½¯ - 件ä¹å¹¶ä¸æ¯æ»è½å¤æä¾è§£å³æ¹æ³ã - ç´æ¥ä¸å¼å人åï¼ç¨æ·ç¾¤ï¼æååæºç¨åºæ¥è§¦ä½¿PostgreSQLçæ¯ææ¯å¶ä»æ° - æ®åºè¿è¦å¥½ãè¿æä¸äºåä¸æ§çå¨é¢ææ¯æ¯æï¼å¯ä»¥ç»æä¾ç»é£äºéè¦ç人ãï¼ - åé1.7 å°èï¼ - - ä»·æ ¼ - æ们对任ä½ç¨éé½åè´¹ï¼åæ¬åç¨åéåç¨ç®çã - ä½ å¯ä»¥ä¸å éå¶å°åä½ ç产åéå å¥æ们ç代ç ï¼é¤äºé£äºæ们å¨ä¸é¢çç - æ声æé声æç BSDçæä¹å¤çå容ã - - 1.14) PostgreSQLå¯ä»¥å¤çæè¿å个å½å®¶å¤æ¶å¶çååå? - - PostgreSQL 8.0ä¹åççæ¬æ¯ä½¿ç¨æä½ç³»ç»ä¸­ - çæ¶åºæ°æ®åºæ¥å¤çå¤æ¶å¶çä¿¡æ¯ï¼èª8.0çå以åççæ¬PostgreSQLä¼èªèº«å«æææ°çæ - ¶åºä¿¡æ¯ã - _________________________________________________________________ - -ç¨æ·å®¢æ·ç«¯é®é¢ - - 2.1) æ们å¯ä»¥ç¨ä»ä¹è¯è¨åPostgreSQLæ交éï¼ - - PostgreSQL(缺çæåµ)åªå®è£æCåååµå¼Cçæ¥å£ï¼å¶ä»çæ¥å£é½æ¯ç¬ç«ç项ç®ï¼è½å¤ - åå«ä¸è½½ï¼è¿äºæ¥å£é¡¹ç®ç¬ç«çå¥½å¤ - æ¯ä»ä»¬å¯ä»¥æåèªçåå¸è®¡åååèªç¬ç«çå¼åç»ã - - ä¸äºç¼ç¨è¯­ - è¨å¦PHPé½æ访é®PostgreSQLçæ¥å£ï¼PerlãTCLãPython以åå¾å¤å¶ä»è¯è¨çæ¥å£å¨ - http://gborg.postgresql.orgç½ç«ä¸çDrivers/Interfaceså°èå¯æ¾å°ï¼ - 并ä¸éè¿Internetå¾å®¹ææç´¢å°ã - - 2.2) æä»ä¹å·¥å·å¯ä»¥æPostgreSQLç¨äº Web 页é¢ï¼ - - ä¸ä¸ªä»ç»ä»¥æ°æ®åºä¸ºåå°çæºä¸éçç«ç¹æ¯ï¼http://www.webreview.comã - - å¯¹äº Web éæï¼PHP æ¯ä¸ä¸ªæ好çæ¥å£ãå®å¨http://www.php.net/ã - - 对äºå¤æçä»»å¡ï¼å¾å¤äººéç¨ Perl æ¥å£å 使ç¨CGI.pmçDBD::Pg æ mod_perl ã - - 2.3)PostgreSQLæ¥æå¾å½¢ç¨æ·çé¢åï¼ - - åä¸ç¨æ·ææ¯å¼æºå¼å人åè½æ¾å°å¾å¤çæå³PostgreSQLçGUIå¾å½¢å·¥å·è½¯ä»¶ï¼å¨ - PostgreSQL社åºææ¡£æä¸ä¸ªè¯¦ç»çå表ã - _________________________________________________________________ - -ç³»ç»ç®¡çé®é¢ - - 3.1)æææ ·è½æPostgreSQLè£å¨ /usr/local/pgsql 以å¤çå°æ¹ï¼ - - å¨è¿è¡ configure æ¶å ä¸ --prefix é项ã - - 3.2) æå¦ä½æ§å¶æ¥èªå¶ä»çµèçè¿æ¥ï¼ - - 缺çæåµä¸ï¼PostgreSQLåªå许æ¥èªæ¬æºä¸éè¿ unix åå¥æ¥åæTCP/IPæ¹å¼çè¿æ¥ã - ä½ åªæå¨ä¿®æ¹äºéç½®æ件postgresql.conf中 - çlisten_addressesï¼ä¸ä¹å¨éç½®æ件$PGDATA/pg_hba.confä¸æå¼äº - åºäºè¿ç¨çµèï¼ host-based - ï¼ç身份认è¯ï¼å¹¶éæ°å¯å¨PostgreSQLï¼å¦åå¶ä»çµèæ¯ä¸è½ä¸ä½ çPostgreSQL - æå¡å¨è¿è¡è¿æ¥çã - - 3.3) æææ ·è°æ´æ°æ®åºå¼æ以è·å¾æ´å¥½çæ§è½ï¼ - - æä¸ä¸ªä¸»è¦æ¹é¢å¯ä»¥æåPostgreSQLçæ½è½ã - - æ¥è¯¢æ¹å¼çåå - è¿ä¸»è¦æ¶åä¿®æ¹æ¥è¯¢æ¹å¼ä»¥è·åæ´å¥½çæ§è½: - - + å建索å¼ï¼åæ¬è¡¨è¾¾å¼åé¨åç´¢å¼ï¼ - + 使ç¨COPYè¯å¥ä»£æ¿å¤ä¸ªInsertè¯å¥ï¼ - + å°å¤ä¸ªSQLè¯å¥ç»æä¸ä¸ªäºå¡ä»¥åå°æ交äºå¡çå¼éï¼ - + ä»ä¸ä¸ªç´¢å¼ä¸æåå¤æ¡è®°å½æ¶ä½¿ç¨CLUSTERï¼ - + ä»ä¸ä¸ªæ¥è¯¢ç»æä¸ååºé¨åè®°å½æ¶ä½¿ç¨LIMITï¼ - + 使ç¨é¢ç¼è¯å¼æ¥è¯¢ï¼Prepared Query)ï¼ - + 使ç¨ANALYZE以ä¿æ精确çä¼åç»è®¡ï¼ - + å®æä½¿ç¨ VACUUM æ pg_autovacuum - + è¿è¡å¤§éæ°æ®æ´æ¹æ¶åå é¤ç´¢å¼ï¼ç¶åé建索å¼ï¼ - - æå¡å¨çéç½® - éç½®æ件postgres.conf中 - çå¾å¤è®¾ç½®é½ä¼å½±åæ§è½ï¼ææåæ°çå表å¯è§ï¼ - 管çåæå/æ°æ®åºæå¡å¨è¿è¡ç¯å¢/æ°æ®åºæå¡å¨è¿è¡éç½®ï¼ - æå³åæ°ç解éå¯è§ï¼http://www.varlena.com/varlena/GeneralBits/Tid - bits/annotated_conf_e.html å - http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.htmlã - - 硬件çéæ© - 计ç®æºç¡¬ä»¶å¯¹æ§è½çå½±åå¯æµè§ - http://candle.pha.pa.us/main/writings/pgsql/hw_performance/inde - x.html å http://www.powerpostgresql.com/PerfList/ã - - 3.4)PostgreSQLéå¯ä»¥è·å¾ä»ä¹æ ·çè°è¯ç¹æ§ï¼ - - PostgreSQL æå¾å¤ç±»ä¼¼ log_* - çæå¡å¨éç½®åéå¯ç¨äºæ¥è¯¢çæå°åè¿ç¨ç»è®¡ï¼èè¿äºå·¥ä½å¯¹è°è¯åæ§è½æµè¯å¾æå¸ - ®å©ã - - 3.5) 为ä»ä¹å¨è¯å¾è¿æ¥æ¶æ¶å°âSorry, too many - clientsï¼å·²æ太å¤ç¨æ·è¿æ¥ï¼âæ¶æ¯ï¼ - - è¿è¡¨ç¤ºä½ 已达å°ç¼ºç100个并ååå°è¿ç¨æ°çéå¶ï¼ä½ éè¦éè¿ä¿®æ¹postgres - ql.confæ件ä¸çmax_connectionså¼æ¥ - å¢å postmasterçåå°å¹¶åå¤çæ°ï¼ä¿®æ¹åééæ°å¯å¨postmasterã - - 3.6)PostgreSQLçå级è¿ç¨æåªäºå容 ï¼ - - PostgreSQL å¼åç»å¯¹æ¯æ¬¡å°çæ¬çå级主è¦åªåäºä¸äºBugä¿®æ£å·¥ä½ï¼å æ¤ä» - 7.4.8 åçº§å° 7.4.9 ä¸éè¦ dump å restoreï¼ä»éè¦åæ­ - ¢æ°æ®åºæå¡å¨ï¼å®è£æ´æ°åç软件åï¼ç¶åéå¯æå¡å¨å³å¯ã - - ææPostgreSQLçç¨æ·åºè¯¥å¨ææ¥è¿ï¼ä½ æ使ç¨ç主çæ¬ï¼çå°æ¹è¿çæ¬åå¸å°½å¿«åç - º§ã尽管æ¯æ¬¡å级å¯è½é½æä¸ç¹é£é©ï¼PostgreSQLçå°æ¹è¿çä»ä»æ¯è®¾è®¡ç¨æ¥ä - ¿®æ­ - £ä¸äºBugçï¼ä»£ç æ¹å¨è¾å°ï¼æ以é£é©è¿æ¯å¾å°çãPostgreSQL社åºè®¤ä¸ºä¸è¬æ - åµä¸ä¸å级çé£é©è¿æ¯å¤äºå级çã - - 主çæ¬çå级ï¼ä¾å¦ä» 7.3 å° 7.4ï¼é常ä¼ä¿®æ¹ç³»ç»è¡¨åæ°æ®è¡¨çåé¨æ ¼å¼ã - è¿äºæ¹åä¸è¬æ¯è¾å¤æï¼å æ¤æ们ä¸ç»´ææ°æ®æ件çååå¼å®¹æ§ãå æ¤ä»èçæ¬ä¸­ - è¿è¡æ°æ®å¯¼åºï¼dumpï¼/ç¶åå¨æ°çæ¬ä¸­ - è¿è¡æ°æ®å¯¼å¥ï¼reloadï¼å¯¹ä¸»çæ¬çå级æ¯å¿é¡»çã - - 3.7)(使ç¨PostgreSQL)æéè¦ä½¿ç¨ä»ä¹è®¡ç®æºç¡¬ä»¶ ï¼ - - ç±äºè®¡ç®æºç¡¬ä»¶å¤§å¤æ°æ¯å¼å®¹çï¼äººä»¬æ»æ¯å¾åäºç¸ä¿¡ææ计ç®æºç¡¬ä»¶è - ´¨éä¹æ¯ç¸åçãäºå®ä¸ä¸æ¯ï¼ ECC RAMï¼å¸¦å¥å¶æ ¡éªçååï¼ï¼SCSI - ï¼ç¡¬çï¼åä¼è´¨ç主æ¿æ¯ä¸äºä¾¿å®è´§è¦æ´å å¯é ä¸å·ææ´å¥½çæ§è½ãPostgreSQL - å ä¹å¯ä»¥è¿è¡å¨ä»»ä½ç¡¬ä»¶ä¸ï¼ - ä½å¦æå¯é æ§åæ§è½å¯¹ä½ çç³»ç»å¾éè¦ï¼ä½ å°±éè¦å¨é¢çç 究ä¸ä¸ä½ ç硬件éç - ½®äºãå¨æ们çé®ä»¶å表ä¸ä¹æå³äº 硬件éç½®åæ§ä»·æ¯ç讨论ã - _________________________________________________________________ - -æä½é®é¢ - - 4.1) å¦ä½åªéæ©ä¸ä¸ªæ¥è¯¢ç»æç头å è¡ï¼ææ¯éæºçä¸è¡ï¼ - - å¦æä½ åªæ¯è¦æåå è¡æ°æ®ï¼å¹¶ä¸ä½ å¨æ§è¡æ¥è¯¢ä¸­ - ç¥éç¡®åçè¡æ°ï¼ä½ å¯ä»¥ä½¿ç¨LIMITåè½ã å¦ææä¸ä¸ªç´¢å¼ä¸ ORDER BY中 - çæ¡ä»¶å¹éï¼PostgreSQL å¯è½å°±åªå¤çè¦æ±ç头å æ¡è®°å½ï¼ - ï¼å¦åå°å¯¹æ´ä¸ªæ¥è¯¢è¿è¡å¤çç´å°çæéè¦çè¡ï¼ãå¦æå¨æ§è¡æ¥è¯¢åè½æ¶ä¸ç¥éç¡®å - çè®°å½æ°ï¼ å¯ä½¿ç¨æ¸¸æ (cursor)åFETCHåè½ã - - å¯ä½¿ç¨ä»¥ä¸æ¹æ³æåä¸è¡éæºè®°å½çï¼ - SELECT cols - FROM tab - ORDER BY random() - LIMIT 1 ; - - 4.2) - å¦ä½æ¥ç表ãç´¢å¼ãæ°æ®åºä»¥åç¨æ·çå®ä¹ï¼å¦ä½æ¥çpsqléç¨å°çæ¥è¯¢æ令并æ¾ç¤ºå®ä»¬ - ï¼ - - å¨psqlä¸ä½¿ç¨ \dt å½ä»¤æ¥æ¾ç¤ºæ°æ®è¡¨çå®ä¹ï¼è¦äºè§£psql中 - çå®æ´å½ä»¤å表å¯ä½¿ç¨\? ï¼å¦å¤ï¼ä½ ä¹å¯ä»¥é读 psql çæºä»£ç - æ件pgsql/src/bin/psql/describe.cï¼å®åæ¬ä¸ºçæpsqlåææ å½ä»¤çè¾åºçææ SQL - å½ä»¤ãä½ è¿å¯ä»¥å¸¦ -E é项å¯å¨ psqlï¼ è¿æ ·å®å°æå°åºä½ å¨psql中 - æç»åºçå½ä»¤æ§è¡æ¶çåé¨å®é使ç¨çSQLæ¥è¯¢è¯­ - å¥ãPostgreSQLä¹æä¾äºä¸ä¸ªå¼å®¹SQLçINFORMATION SCHEMAæ¥å£ï¼ - ä½ å¯ä»¥ä»è¿éè·åå³äºæ°æ®åºçä¿¡æ¯ã - - å¨ç³»ç»ä¸ä¹æä¸äºä»¥pg_ æ头çç³»ç»è¡¨ä¹æè¿°äºè¡¨çå®ä¹ã - - ä½¿ç¨ psql -l æ令å¯ä»¥ååºææçæ°æ®åºã - - ä¹å¯ä»¥æµè§ä¸ä¸ - pgsql/src/tutorial/syscat.sourceæ件ï¼å®å举äºå¾å¤å¯ä»æ°æ®åºç³»ç»è¡¨ä¸ - è·åä¿¡æ¯çSELECTè¯æ³ã - - 4.3) å¦ä½æ´æ¹ä¸ä¸ªå段çæ°æ®ç±»åï¼ - - å¨8.0çæ¬éæ´æ¹ä¸ä¸ªå段çæ°æ®ç±»åå¾å®¹æï¼å¯ä½¿ç¨ ALTER TABLE ALTER - COLUMN TYPE ã - - å¨ä»¥åççæ¬ä¸ï¼å¯ä»¥è¿æ ·åï¼ - 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; - - ä½ ç¶åå¯ä»¥ä½¿ç¨VACUUM FULL tab æ令æ¥ä½¿ç³»ç»æ¶åæ ææ°æ®æå ç¨ç空é´ã - - 4.4) åæ¡è®°å½ï¼å个表ï¼å个æ°æ®åºçæ大éå¶æ¯å¤å°ï¼ - - ä¸é¢æ¯ä¸äºéå¶ï¼ - - å个æ°æ®åºæå¤§å°ºå¯¸ï¼ æ éå¶ï¼å·²åå¨æ 32TB çæ°æ®åºï¼ - å个表çæå¤§å°ºå¯¸ï¼ 32 TB - ä¸è¡è®°å½çæå¤§å°ºå¯¸ï¼ 1.6 TB - ä¸ä¸ªå段çæ大尺寸? 1 GB - ä¸ä¸ªè¡¨éæ大è¡æ°ï¼ æ éå¶ - ä¸ä¸ªè¡¨éæ大åæ°ï¼ 250-1600 ï¼ä¸åç±»åæå³ï¼ - ä¸ä¸ªè¡¨éçæ大索å¼æ°éï¼ æ éå¶ - - å½ç¶ï¼å®éä¸æ²¡æçæ£çæ éå¶ï¼è¿æ¯è¦åå¯ç¨ç£ç空é´ãå¯ç¨åå/交æ¢åºçå¶çº¦ã - äºå®ä¸ï¼å½ä¸è¿°è¿äºæ°å¼åå¾å¼å¸¸å°å¤§æ¶ï¼ç³»ç»æ§è½ä¹ä¼åå¾å¤§å½±åã - - å表çæå¤§å¤§å° 32 TB - ä¸éè¦æä½ç³»ç»å¯¹å个æ件ä¹éè¿ä¹å¤§çæ¯æã大表ç¨å¤ä¸ª 1 GB çæä»¶å­ - å¨ï¼å æ¤æ件系ç»å¤§å°çéå¶æ¯ä¸éè¦çã - - å¦æ缺ççå大å°å¢é¿å° 32K ï¼æ大çå表大å°åæ大åæ°è¿å¯ä»¥å¢å å°ååã - - æä¸ä¸ªéå¶å°±æ¯ä¸è½å¯¹å¤§å°å¤äº2000å­ - èçåå建索å¼ã幸è¿å°æ¯è¿æ ·çç´¢å¼å¾å°ç¨å°ãéè¿å¯¹å¤å­ - èåçå容è¿è¡MD5åç¨è¿ç®ç»æè¿è¡å½æ°ç´¢å¼å¯å¯¹åçå¯ä¸æ§å¾å°ä¿è¯ï¼ - 并ä¸å¨ææ£ç´¢å许对åä¸çåè¯è¿è¡æç´¢ã - - 4.5) åå¨ä¸ä¸ªå¸åçææ¬æ件éçæ°æ®éè¦å¤å°ç£ç空é´ï¼ - - ä¸ä¸ª Postgres æ°æ®åºï¼å­ - å¨ä¸ä¸ªææ¬æ件ï¼æå ç¨ç空é´æå¤å¯è½éè¦ç¸å½äºè¿ä¸ªææ¬æ件èªèº«å¤§å°5åçç£ - ç空é´ã - - ä¾å¦ï¼å设æä¸ä¸ª 100,000 è¡çæ件ï¼æ¯è¡æä¸ä¸ªæ´æ°åä¸ä¸ªææ¬æè¿°ã - å设ææ¬ä¸²çå¹³åé¿åº¦ä¸º20åèãææ¬æ件å ç¨ 2.8 MBãå­ - æ¾è¿äºæ°æ®çPostgreSQLæ°æ®åºæä»¶å¤§çº¦æ¯ 6.4 MB: - 28 åè: æ¯è¡ç头ï¼å¤§çº¦å¼ï¼ - 24 åè: ä¸ä¸ªæ´æ°åå段åä¸ä¸ªææ¬åå段 - + 4 åè: 页é¢åæååç»çæé - ---------------------------------------- - 56 åèæ¯è¡ - - PostgreSQL æ°æ®é¡µç大å°æ¯ 8192 åè (8 KB)ï¼åï¼ - - 8192 åèæ¯é¡µ - ------------------- = 146 è¡/æ°æ®é¡µï¼åä¸åæ´ï¼ - 56 åèæ¯è¡ - - 100000 æ°æ®è¡ - -------------------- = 685 æ°æ®é¡µï¼åä¸åæ´ï¼ - 146 è¡/æ°æ®é¡µ - - 685 æ°æ®é¡µ * 8192 åè/页 = 5,611,520 åèï¼5.6 MBï¼ - - ç´¢å¼ä¸éè¦è¿ä¹å¤çé¢å¤æ¶èï¼ä½ä¹ç¡®å®åæ¬è¢«ç´¢å¼çæ°æ®ï¼å æ­ - ¤å®ä»¬ä¹å¯è½å¾å¤§ã - - 空å¼NULLåæ¾å¨ä½å¾ä¸ï¼å æ¤å ç¨å¾å°ç空é´ã - - 4.6) 为ä»ä¹æçæ¥è¯¢å¾æ¢ï¼ä¸ºä»ä¹è¿äºæ¥è¯¢æ²¡æå©ç¨ç´¢å¼ï¼ - - 并éæ¯ä¸ªæ¥è¯¢é½ä¼èªå¨ä½¿ç¨ç´¢å¼ãåªæå¨è¡¨ç大å°è¶è¿ä¸ä¸ªæå°å¼ï¼å¹¶ä¸æ¥ - 询åªä¼éä¸è¡¨ä¸è¾å°æ¯ä¾çè®°å½æ¶æä¼éç¨ç´¢å¼ã - è¿æ¯å 为索å¼æ«æå¼èµ·çéå³ç£çååå¯è½æ¯ç´æ¥å°è¯»å表ï¼é¡ºåºæ«æï¼æ´æ¢ã - - 为äºå¤æ­ - æ¯å¦ä½¿ç¨ç´¢å¼ï¼PostgreSQLå¿é¡»è·å¾æå³è¡¨çç»è®¡å¼ãè¿äºç»è®¡å¼å¯ä»¥ä½¿ç - ¨ VACUUM ANALYZEï¼æ ANALYZE è·å¾ã 使ç¨ç»è®¡å¼ï¼ä¼åå¨ç¥é表中 - æå¤å°è¡ï¼å°±è½å¤æ´å¥½å°å¤ææ¯å¦å©ç¨ç´¢å¼ã - ç»è®¡å¼å¯¹ç¡®å®ä¼åçè¿æ¥é¡ºåºåè¿æ¥æ¹æ³ä¹å¾æç¨ãå¨è¡¨çå容åçååæ¶ï¼åºå®æè¿ - è¡ç»è®¡å¼çæ´æ°æ¶éã - - ç´¢å¼é常ä¸ç¨äº ORDER BY - ææ§è¡è¿æ¥ã对ä¸ä¸ªå¤§è¡¨çä¸æ¬¡é¡ºåºæ«æååä¸æ¬¡æåºé常æ¯ç´¢å¼æ«æè¦å¿«ãç¶ - èï¼å¦æå° LIMIT å ORDER BY - ç»åå¨ä¸èµ·ä½¿ç¨çè¯ï¼é常å°ä¼ä½¿ç¨ç´¢å¼ï¼å 为è¿æ¶ä»è¿å表中 - çä¸å°é¨åè®°å½ã - - å¦æä½ ç¡®ä¿¡PostgreSQLçä¼åå¨ä½¿ç¨é¡ºåºæ«ææ¯ä¸æ£ç¡®çï¼ä½ å¯ä»¥ä½¿ç¨SET - enable_seqscan TO 'off'æ令æ¥å³é顺åºæ«æï¼ - ç¶åå次è¿è¡æ¥è¯¢ï¼ä½ å°±å¯ä»¥çåºä½¿ç¨ä¸ä¸ªç´¢å¼æ«ææ¯å¦ç¡®å®è¦å¿«ä¸äºã - - å½ä½¿ç¨éé符æä½ï¼ä¾å¦ LIKE æ ~ æ¶ï¼ç´¢å¼åªè½å¨ç¹å®çæåµä¸ä½¿ç¨ï¼ - * å符串çå¼å§é¨åå¿é¡»æ¯æ®éå符串ï¼ä¹å°±æ¯è¯´ï¼ - + LIKE 模å¼ä¸è½ä»¥ % æ头ã - + ~ ï¼æ£å表达å¼ï¼æ¨¡å¼å¿é¡»ä»¥ ^ æ头ã - * å符串ä¸è½ä»¥å¹éå¤ä¸ªå符ç模å¼ç±»æ头ï¼ä¾å¦ [a-e]ã - * 大å°åæ å³çæ¥æ¾ï¼å¦ ILIKE å ~* çä¸ä½¿ç¨ç´¢å¼ï¼ä½å¯ä»¥ç¨ 4.8 - èæè¿°ç表达å¼ç´¢å¼ã - * å¨å initdb æ¶å¿é¡»éç¨ç¼ºççæ¬å°è®¾ç½® C - localeï¼å 为系ç»ä¸å¯è½ç¥éå¨éC localeæåµæ¶ä¸ä¸ä¸ªæ大å符æ¯ä»ä¹ã - å¨è¿ç§æåµä¸ï¼ä½ å¯ä»¥å建ä¸ä¸ªç¹æ®çtext_pattern_opsç´¢å¼æ¥ç¨äºLIKE - çç´¢å¼ã - - å¨8.0ä¹åççæ¬ä¸­ - ï¼é¤éè¦æ¥è¯¢çæ°æ®ç±»ååç´¢å¼çæ°æ®ç±»åç¸å¹éï¼å¦åç´¢å¼ç»å¸¸æ¯æªè¢«ç¨å°ï¼ç - ¹å«æ¯å¯¹int2,int8åæ°å¼åçç´¢å¼ã - - 4.7) æå¦ä½æè½çå°æ¥è¯¢ä¼åå¨æ¯ææ ·è¯ä¼°å¤çæçæ¥è¯¢ï¼ - - åè EXPLAIN æå页ã - - 4.8) æææ ·åæ£å表达å¼æç´¢å大å°åæ å³çæ­ - £å表达å¼æ¥æ¾ï¼ææ ·å©ç¨ç´¢å¼è¿è¡å¤§å°åæ å³æ¥æ¾ï¼ - - æä½ç¬¦ ~ å¤çæ£å表达å¼å¹éï¼è ~* å¤ç大å°åæ å³çæ­ - £å表达å¼å¹éã大å°åæ å³ç LIKE åç§æ为 ILIKEã - - 大å°åæ å³ççå¼æ¯è¾é常ååï¼ - SELECT * - FROM tab - WHERE lower(col) = 'abc'; - - è¿æ ·å°ä¸ä¼ä½¿ç¨æ åçç´¢å¼ãä½æ¯å¯ä»¥å建ä¸ä¸ªå¨è¿ç§æåµä¸ä½¿ç¨ç表达å¼ç - ´¢å¼: - CREATE INDEX tabindex ON tab (lower(col)); - - å¦æä¸è¿°ç´¢å¼å¨å建æ¶å å¥UNIQUE约æï¼è½ç¶ç´¢å¼å段èªèº«å容å¯ä»¥å­ - å¨å¤§å°åä¸éçå容ï¼ä½å¦ææUNIQUE约æåï¼è¿äºå容ä¸è½ä»ä»æ¯å¤§å°åä¸åï¼å¦åä - ¼é æå²çªï¼ã为äºä¿è¯ä¸åçè¿ç§æåµï¼å¯ä»¥ä½¿ç¨CHECK约ææ¡ä»¶ææ¯è§¦åå¨å¨å½ - å¥æ¶è¿è¡éå¶ã - - 4.9) å¨ä¸ä¸ªæ¥è¯¢éï¼æææ ·æ£æµä¸ä¸ªå段æ¯å¦ä¸º NULL ï¼æå¦ä½æè½åç¡®æåºèä¸è®ºæå­ - 段æ¯å¦å« NULL å¼ï¼ - - ç¨ IS NULL å IS NOT NULL æµè¯è¿ä¸ªå段ï¼å·ä½æ¹æ³å¦ä¸ï¼ - SELECT * - FROM tab - WHERE col IS NULL; - - 为äºè½å¯¹å« NULLå段æåºï¼å¯å¨ ORDER BY æ¡ä»¶ä¸ä½¿ç¨ IS NULLå IS NOT - NULL 修饰符ï¼æ¡ä»¶ä¸ºç true å°æ¯æ¡ä»¶ä¸ºåfalse æå¨åé¢ï¼ä¸é¢çä¾å­ - å°±ä¼å°å« NULL çè®°å½æå¨ç»æçä¸é¢é¨åï¼ - SELECT * - FROM tab - ORDER BY (col IS NOT NULL) - - 4.10) åç§å符类åä¹é´æä»ä¹ä¸åï¼ - - ç±»å åé¨å称 说æ - VARCHAR(n) varchar æå®äºæ大é¿åº¦ï¼åé¿å­ - 符串ï¼ä¸è¶³å®ä¹é¿åº¦çé¨åä¸è¡¥é½ - CHAR(n) bpchar å®é¿å符串ï¼å®éæ°æ®ä¸è¶³å®ä¹é¿åº¦æ¶ï¼ä»¥ç©ºæ ¼è¡¥é½ - TEXT text 没æç¹å«çä¸ééå¶ï¼ä»åè¡çæ大é¿åº¦éå¶ï¼ - BYTEA bytea åé¿åèåºåï¼ä½¿ç¨NULLå符ä¹æ¯å许çï¼ - "char" char å个å符 - - å¨ç³»ç»è¡¨åå¨ä¸äºé误信æ¯éä½ å°çå°åé¨å称ã - - ä¸é¢æåçååç§ç±»åæ¯"varlena"ï¼åé¿ï¼ç±»åï¼ä¹å°±æ¯è¯´ï¼å¼å¤´çåä¸ªå­ - èæ¯é¿åº¦ï¼åé¢ææ¯æ°æ®ï¼ã äºæ¯å®éå ç¨ç空é´æ¯å£°æç大å°è¦å¤ä¸äºã - ç¶èè¿äºç±»åå¦å®ä¹å¾é¿æ¶é½å¯ä»¥è¢«å缩åå¨ï¼å æ­ - ¤ç£ç空é´ä¹å¯è½æ¯é¢æ³çè¦å°ã - - VARCHAR(n) å¨åå¨éå¶äºæ大é¿åº¦çåé¿å符串æ¯æ好çã TEXT éç¨äºå­ - å¨æ大å¯è¾¾ 1Gå·¦å³ä½æªå®ä¹éå¶é¿åº¦çå符串ã - - CHAR(n) æéåäºåå¨é¿åº¦ç¸åçå符串ã CHAR(n)ä¼æ ¹æ®æç»å®çå­ - 段é¿åº¦ä»¥ç©ºæ ¼è¡¥è¶³ï¼ä¸è¶³çå段å容ï¼ï¼ è VARCHAR(n) åªå­ - å¨æç»å®çæ°æ®å容ã BYTEA ç¨äºåå¨äºè¿å¶æ°æ®ï¼å°¤å¶æ¯åå« NULL å­ - èçå¼ãè¿äºç±»åå·æå·®ä¸å¤çæ§è½ã - - 4.11.1) æææ ·å建ä¸ä¸ªåºåå·ææ¯èªå¨éå¢çåæ®µï¼ - - PostgreSQL æ¯æ SERIAL æ°æ®ç±»åãï¼å­ - 段å®ä¹ä¸ºSERIALåï¼å°èªå¨å建ä¸ä¸ªåºåçæå¨ï¼ä¾å¦ï¼ - CREATE TABLE person ( - id SERIAL, - name TEXT - ); - - ä¼èªå¨è½¬æ¢ä¸ºä»¥ä¸SQLè¯å¥ï¼ - CREATE SEQUENCE person_id_seq; - CREATE TABLE person ( - id INT4 NOT NULL DEFAULT nextval('person_id_seq'), - name TEXT - ); - - åè create_sequence æå页è·åå³äºåºåçæå¨çæ´å¤ä¿¡æ¯ã - - 4.11.2) æå¦ä½è·å¾ä¸ä¸ªæå¥çåºåå·çå¼ï¼ - - ä¸ç§æ¹æ³æ¯å¨æå¥ä¹ååç¨å½æ° nextval() ä»åºå对象éæ£ç´¢åºä¸ä¸ä¸ª SERIAL - å¼ï¼ç¶ååç¨æ¤å¼ç²¾ç¡®å°æå¥ãä½¿ç¨ 4.11.1 éçä¾è¡¨ï¼å¯ç¨ä¼ªç è¿æ ·æè¿°ï¼ - new_id = execute("SELECT nextval('person_id_seq')"); - execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')"); - - è¿æ ·è¿è½å¨å¶ä»æ¥è¯¢ä¸ä½¿ç¨åæ¾å¨ new_id éçæ°å¼ï¼ä¾å¦ï¼ä½ä¸ºåç§ person - 表çå¤é®ï¼ã 注æèªå¨å建ç SEQUENCE 对象çå称å°ä¼æ¯ - __seqï¼ è¿é table å serialcolumn - åå«æ¯ä½ ç表çå称åä½ ç SERIAL å段çå称ã - - 类似çï¼å¨ SERIAL 对象缺çæå¥åä½ å¯ä»¥ç¨å½æ° currval() æ£ç´¢åèµå¼ç - SERIAL å¼ï¼ä¾å¦ï¼ - execute("INSERT INTO person (name) VALUES ('Blaise Pascal')"); - new_id = execute("SELECT currval('person_id_seq')"); - - 4.11.3) åæ¶ä½¿ç¨ currval() ä¼å¯¼è´åå¶ä»ç¨æ·çå²çªæåµåï¼ - - ä¸ä¼ãcurrval() è¿åçæ¯ä½ æ¬æ¬¡ä¼è¯è¿ç¨æèµçå¼èä¸æ¯ææç¨æ·çå½åå¼ã - - 4.11.4) 为ä»ä¹ä¸å¨äºå¡å¼å¸¸ä¸æ¢åéç¨åºåå·å¢ï¼ä¸ºä»ä¹å¨åºåå·å段çåå¼ä¸åå¨é´æ­ - å¢ï¼ - - 为äºæé«å¹¶åæ§ï¼åºåå·å¨éè¦çæ¶åèµäºæ­ - £å¨è¿è¡çäºå¡ï¼å¹¶ä¸å¨äºå¡ç»æä¹åä¸è¿è¡éå®ï¼ è¿å°±ä¼å¯¼è´å¼å¸¸ä¸­ - æ¢çäºå¡åï¼åºåå·ä¼åºç°é´éã - - 4.12) ä»ä¹æ¯ OID ï¼ä»ä¹æ¯ CTID ï¼ - - PostgreSQL - éå建çæ¯ä¸è¡è®°å½é½ä¼è·å¾ä¸ä¸ªå¯ä¸çOIDï¼é¤éå¨å建表æ¶ä½¿ç¨WITHOUT - OIDSé项ã OIDå建æ¶ä¼èªå¨çæä¸ä¸ª4åèçæ´æ°ï¼ææ OID - å¨ç¸åºPostgreSQLæå¡å¨ä¸åæ¯å¯ä¸çã ç¶èï¼å®å¨è¶è¿40亿æ¶å°æº¢åºï¼ OIDæ­ - ¤åä¼åºç°éå¤ãPostgreSQL å¨å®çåé¨ç³»ç»è¡¨éä½¿ç¨ OID å¨è¡¨ä¹é´å»ºç«èç³»ã - - å¨ç¨æ·çæ°æ®è¡¨ä¸ï¼æ好æ¯ä½¿ç¨SERIAlæ¥ä»£æ¿OID - å 为SERIALåªè¦ä¿è¯å¨å个表中 - çæ°å¼æ¯å¯ä¸çå°±å¯ä»¥äºï¼è¿æ ·å®æº¢åºçå¯è½æ§å°±é常å°äºï¼ - SERIAL8å¯ç¨æ¥ä¿å8åèçåºåæ°å¼ã - - CTID ç¨äºæ è¯å¸¦çæ°æ®åï¼å°åï¼åï¼ååï¼å移çç¹å®çç©çè¡ã CTID - å¨è®°å½è¢«æ´æ¹æéè½½ååçæ¹åãç´¢å¼æ°æ®ä½¿ç¨å®ä»¬æåç©çè¡ã - - 4.13) 为ä»ä¹ææ¶å°é误信æ¯âERROR: Memory exhausted in AllocSetAlloc()âï¼ - - è¿å¾å¯è½æ¯ç³»ç»çèæååç¨åäºï¼æèåæ ¸å¯¹æäºèµæºæè¾ä½çéå¶å¼ãå¨å¯å¨ - postmaster ä¹åè¯è¯ä¸é¢çå½ä»¤ï¼ - ulimit -d 262144 - limit datasize 256m - - åå³äºä½ ç¨ç - shellï¼ä¸é¢å½ä»¤åªæä¸æ¡è½æåï¼ä½æ¯å®å°æä½ çè¿ç¨æ°æ®æ®µéå¶è®¾å¾æ¯è¾é«ï¼ - å èä¹è®¸è½è®©æ¥è¯¢å®æãè¿æ¡å½ä»¤åºç¨äºå½åè¿ç¨ï¼ä»¥åææå¨è¿æ¡å½ä»¤è¿è¡ååå - »ºçåè¿ç¨ã - å¦æä½ æ¯å¨è¿è¡SQL客æ·ç«¯æ¶å 为åå°è¿åäºå¤ªå¤çæ°æ®èåºç°é®é¢ï¼è¯·å¨è¿è¡ - 客æ·ç«¯ä¹åæ§è¡ä¸è¿°å½ä»¤ã - - 4.14) æå¦ä½æè½ç¥éæè¿è¡çPostgreSQLççæ¬ï¼ - - ä» psql éï¼è¾å¥ SELECT version();æ令ã - - 4.15) æå¦ä½å建ä¸ä¸ªç¼ºçå¼æ¯å½åæ¶é´çåæ®µï¼ - - ä½¿ç¨ CURRENT_TIMESTAMPï¼ - CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); - - 4.16) æææ ·è¿è¡ outer join ï¼å¤è¿æ¥ï¼ï¼ - - PostgreSQL éç¨æ åç SQL è¯æ³æ¯æå¤è¿æ¥ãè¿éæ¯ä¸¤ä¸ªä¾åï¼ - SELECT * - FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col); - - ææ¯ - SELECT * - FROM t1 LEFT OUTER JOIN t2 USING (col); - - è¿ä¸¤ä¸ªçä»·çæ¥è¯¢å¨ t1.col å t2.col ä¸åè¿æ¥ï¼å¹¶ä¸è¿å t1 中 - æææªè¿æ¥çè¡ï¼é£äºå¨ t2 ä¸æ²¡æå¹éçè¡ï¼ã å³[å¤]è¿æ¥ï¼RIGHT OUTER - JOINï¼å°è¿å t2 ä¸æªè¿æ¥çè¡ã å®å¨å¤è¿æ¥ï¼FULL OUTER JOINï¼å°è¿å t1 å t2 - ä¸æªè¿æ¥çè¡ã å³é®å OUTER å¨å·¦[å¤]è¿æ¥ãå³[å¤]è¿æ¥åå®å¨[å¤]è¿æ¥ä¸­ - æ¯å¯éçï¼æ®éè¿æ¥è¢«ç§°ä¸ºåè¿æ¥ï¼INNER JOINï¼ã - - 4.17) å¦ä½ä½¿ç¨æ¶åå¤ä¸ªæ°æ®åºçæ¥è¯¢ï¼ - - 没æåæ³æ¥è¯¢å½åæ°æ®åºä¹å¤çæ°æ®åºã - å 为PostgreSQLè¦å è½½ä¸æ°æ®åºç¸å³çç³»ç»ç®å½ï¼ç³»ç»è¡¨ï¼ï¼å æ­ - ¤è·¨æ°æ®åºçæ¥è¯¢å¦ä½æ§è¡æ¯ä¸å®çã - - éå å¢å¼æ¨¡åcontrib/dblinkå许éç¨å½æ°è°ç¨å®ç°è·¨åºæ¥è¯¢ãå½ç¶ç¨æ·ä¹å¯ä»¥ - åæ¶è¿æ¥å°ä¸åçæ°æ®åºæ§è¡æ¥è¯¢ç¶åå¨å®¢æ·ç«¯å并ç»æã - - 4.18) å¦ä½è®©å½æ°è¿åå¤è¡æå¤åæ°æ®ï¼ - - å¨å½æ°ä¸è¿åæ°æ®è®°å½éçåè½æ¯å¾å®¹æ使ç¨çï¼è¯¦æåè§ï¼ - http://techdocs.postgresql.org/guides/SetReturningFunctions - - 4.19) 为ä»ä¹æå¨ä½¿ç¨PL/PgSQLå½æ°åå临æ¶è¡¨æ¶ä¼æ¶å°é误信æ¯ârelation with - OID ##### does not existâï¼ - - PL/PgSQLä¼ç¼åå½æ°çèæ¬å容ï¼ç±æ¤å¸¦æ¥çä¸ä¸ªä¸å¥½çå¯ä½ç¨æ¯è¥ä¸ä¸ª - PL/PgSQL - å½æ°è®¿é®äºä¸ä¸ªä¸´æ¶è¡¨ï¼ç¶å该表被å é¤å¹¶é建äºï¼åå次è°ç¨è¯¥å½æ°å - °å¤±è´¥ï¼ å 为ç¼åçå½æ°å容ä»ç¶æåæ§ç临æ¶è¡¨ã解å³çæ¹æ³æ¯å¨ PL/PgSQL - ä¸ç¨EXECUTE - 对临æ¶è¡¨è¿è¡è®¿é®ãè¿æ ·ä¼ä¿è¯æ¥è¯¢å¨æ§è¡åæ»ä¼è¢«éæ°è§£æã - - 4.20) ç®åæåªäºæ°æ®å¤å¶æ¹æ¡å¯ç¨ï¼ - - âå¤å¶âåªæ¯ä¸ä¸ªæ¯è¯ï¼æ好å ç§å¤å¶ææ¯å¯ç¨ï¼æ¯ç§é½æä¼ç¹å缺ç¹ï¼ - - 主/ä»å¤å¶æ¹å¼æ¯å许ä¸ä¸ªä¸»æå¡å¨æ¥å读/åçç³è¯·ï¼èå¤ä¸ªä»æå¡å¨åªè½æ¥åè - ¯»/SELECTæ¥è¯¢çç³è¯·ï¼ ç®åææµè¡ä¸åè´¹ç主/ä»PostgreSQLå¤å¶æ¹æ¡æ¯ - Slony-I ã - - å¤ä¸ªä¸»æå¡å¨çå¤å¶æ¹å¼å许å°è¯»/åçç³è¯·åéç»å¤å°ç计ç®æºï¼è¿ç§æ¹å¼ç±äºé - è¦å¨å¤å°æå¡å¨ä¹é´åæ¥æ°æ®åå¨ - å¯è½ä¼å¸¦æ¥è¾ä¸¥éçæ§è½æ失ï¼Pgclusteræ¯ç®åè¿ç§æ¹æ¡ 中 - æ好çï¼èä¸è¿å¯ä»¥åè´¹ä¸è½½ã - - ä¹æä¸äºåä¸éä»è´¹ååºäºç¡¬ä»¶çæ°æ®å¤å¶æ¹æ¡ï¼æ¯æä¸è¿°åç§å¤å¶æ¨¡åã - - 4.21) 为ä½æ¥è¯¢ç»ææ¾ç¤ºç表åæååä¸æçæ¥è¯¢è¯å¥ä¸çä¸åï¼ä¸ºä½å¤§åç¶æä¸è½ä¿çï¼ - - æ常è§çåå æ¯å¨å建表æ¶å¯¹è¡¨åææ¯åå使ç¨äºåå¼å·ââï¼å½ä½¿ç¨äºåå¼å·åï¼è¡ - ¨åæååï¼ç§°ä¸ºæ è¯ç¬¦ï¼åå¨æ¶æ¯åºå 大å°åçï¼ - è¿æè°çä½ å¨æ¥è¯¢æ¶è¡¨åæååä¹åºä½¿ç¨åå¼å·ï¼ä¸äºå·¥å·è½¯ä»¶ï¼åpgAdminä¼å¨ - ååºå建表çæ令æ¶èªå¨å°å¨æ¯ä¸ªæ è¯ç¬¦ä¸å åå¼å·ã å æ­ - ¤ï¼ä¸ºäºæ è¯ç¬¦çç»ä¸ï¼ä½ åºè¯¥ï¼ - * å¨å建表æ¶é¿åå°æ è¯ç¬¦ä½¿ç¨åå¼å·å¼èµ·æ¥ã - * å¨æ è¯ç¬¦ä¸åªä½¿ç¨å°ååæ¯ã - * ï¼ä¸ºäºä¸å·²åå¨çæ è¯ç¬¦ç¸åï¼å¨æ¥è¯¢ä¸ä½¿ç¨åå¼å·å°æ è¯ç¬¦å¼èµ·æ¥ã diff --git a/doc/FAQ_chinese_trad b/doc/FAQ_chinese_trad deleted file mode 100644 index b190853577..0000000000 --- a/doc/FAQ_chinese_trad +++ /dev/null @@ -1,793 +0,0 @@ - - PostgreSQL 常è¦åé¡ï¼FAQï¼ - - æè¿æ´æ°ï¼2007 å¹´ 2 æ 8 æ¥ ææäº 22:43:13 EST - ä¸æçæè¿æ´æ°ï¼2007 å¹´ 2 æ 12 æ¥ ææä¸ 12:00:04 CST - - ç¶åç¶è·äººå¡ï¼Bruce Momjian (pgman@candle.pha.pa.us) - æ£é«ä¸æçç¶è·äººå¡ï¼éæç(ChaoYi, Kuo)ï¼kuo.chaoyi@gmail.comï¼ - - æ¬ææªçææ°çæ¬å¯ä»¥å¨ - http://www.postgresql.org/files/documentation/faqs/FAQ.html æ¥çã - - èä½æ¥ç³»çµ±å¹³å°ç¸éçåé¡å¯å¨ http://www.postgresql.org/docs/faq/ - 裡æ¾å°çæ¡ã - _________________________________________________________________ - -常è¦åé¡ - - 1.1)PostgreSQL æ¯ä»éº¼ï¼è©²æ麼ç¼é³ï¼ - 1.2)誰æ§å¶å管çPostgreSQL ï¼ - 1.3)PostgreSQLççæ¬æ¯ä»éº¼ï¼ - 1.4)PostgreSQLå¯ä»¥éè¡å¨åªäºä½æ¥ç³»çµ±å¹³å°ä¸ï¼ - 1.5)æå¾åªè£¡è½å¾å°PostgreSQLï¼ - 1.6)ææ°çç PostgreSQL æ¯ä»éº¼ï¼ - 1.7)æå¾åªè£¡è½å¾å°å° PostgreSQL çæ¯æï¼ - 1.8)æå¦ä½æ交ä¸å BUG å ±åï¼ - 1.9)æå¦ä½ç解已ç¥ç BUG ææ«ç¼ºçåè½ï¼ - 1.10)è½å¤ ç²åçææ°ææªæåªäºï¼ - 1.11)ææ該æ樣å¸ç¿ SQL ï¼ - 1.12)å¦ä½æ交è£ä¸ææ¯å å¥éç¼éä¼ï¼ - 1.13)PostgreSQL åå¶ä»è³æ庫系統æ¯èµ·ä¾å¦ä½ï¼ - 1.14)PostgreSQL å¯ä»¥èçæè¿ååå家å¤æå¶çè®ååï¼ - -ç¨æ¶å®¢æ¶ç«¯åé¡ - - 2.1)æåå¯ä»¥ç¨ä»éº¼èªè¨å PostgreSQL é²è¡æºéï¼ - 2.2)æä»éº¼å·¥å·å¯ä»¥æ PostgreSQL ç¨æ¼ Web é é¢ï¼ - 2.3)PostgreSQL ææåå½¢ç¨æ¶çé¢(GUI)åï¼ - -系統管çåé¡ - - 3.1)ææ樣æè½æ PostgreSQL è£å¨ /usr/local/pgsql 以å¤çå°æ¹ï¼ - 3.2)æå¦ä½æ§å¶ä¾èªå¶ä»é»è¦çé£æ¥ï¼ - 3.3)ææ樣調æ´è³æ庫伺æå¨ä»¥ç²å¾æ´å¥½çæ§è½ï¼ - 3.4)PostgreSQL 裡å¯ä»¥ç²å¾ä»éº¼æ¨£ç調試ç¹æ§ï¼ - 3.5)çºä»éº¼å¨è©¦åé£æ¥ç»éææ¶å°ãSorry, too many clientsã è¨æ¯ï¼ - 3.6)PostgreSQL çåç´éç¨æåªäºå§å®¹ï¼ - 3.7)(ä½¿ç¨ PostgreSQL )æéè¦ä½¿ç¨ä»éº¼é»è¦ç¡¬é«ï¼ - -æä½åé¡ - - 4.1) å¦ä½åªé¸æä¸åæ¥è©¢çµæçé å¹¾è¡ï¼ææ¯é¨æ©çä¸è¡ï¼ - 4.2) å¦ä½æ¥ç表ãç´¢å¼ãè³æ庫以åç¨æ¶çå®ç¾©ï¼å¦ä½æ¥ç psql - 裡ç¨å°çæ¥è©¢æ令並顯示å®åï¼ - 4.3) å¦ä½æ´æ¹ä¸åæ¬ä½çè³æé¡åï¼ - 4.4) å®çè¨éï¼å®ä¸è¡¨ï¼ä¸åè³æ庫çæ大éå¶æ¯å¤å°ï¼ - 4.5) åå²ä¸åå¸åçææ¬æ件裡çè³æéè¦å¤å°ç£ç¢ç©ºéï¼ - 4.6) çºä»éº¼æçæ¥è©¢å¾æ¢ï¼çºä»éº¼éäºæ¥è©¢æ²æå©ç¨ç´¢å¼ï¼ - 4.7) æå¦ä½æè½çå°æ¥è©¢åªåå¨æ¯æ樣è©ä¼°èçæçæ¥è©¢çï¼ - 4.8) ææ樣åæ£å表éå¼æç´¢å大å°å¯«ç¡éçæ­ - £å表éå¼æ¥æ¾ï¼æ樣å©ç¨ç´¢å¼é²è¡å¤§å°å¯«ç¡éæ¥æ¾ï¼ - 4.9) å¨ä¸åæ¥è©¢è£¡ï¼ææ樣檢測ä¸åæ¬ä½æ¯å¦çº - NULLï¼æå¦ä½æè½æºç¢ºæåºèä¸è«ææ¬ä½æ¯å¦å«NULLå¼ï¼ - 4.10) å種å符é¡åä¹éæä»éº¼ä¸åï¼ - 4.11.1) ææ樣åµå»ºä¸ååºåèåææ¯èªåéå¢çæ¬ä½ï¼ - 4.11.2) æå¦ä½ç²å¾ä¸åæå¥çåºåèçå¼ï¼ - 4.11.3) åæä½¿ç¨ currval() æå°è´åå¶ä»ç¨æ¶çè¡çªææ³åï¼ - 4.11.4) çºä»éº¼ä¸å¨äºåç°å¸¸ä¸æ¢å¾éç¨åºåèå¢ï¼çºä»éº¼å¨åºåèæ¬ä½çåå¼ä¸­ - åå¨éæ·å¢ï¼ - 4.12) ä»éº¼æ¯ OIDï¼ä»éº¼æ¯ CTID ï¼ - 4.13) çºä»éº¼ææ¶å°é¯èª¤è³è¨ãERROR: Memory exhausted in - AllocSetAlloc()ãï¼ - 4.14) æå¦ä½æè½ç¥éæéè¡ç PostgreSQL ççæ¬ï¼ - 4.15) æå¦ä½åµå»ºä¸åé è¨å¼æ¯ç¶åæéçæ¬ä½ï¼ - 4.16) å¦ä½å·è¡å¤é£æ¥ï¼outer joinï¼æ¥è©¢ï¼ - 4.17) å¦ä½å·è¡æ¶åå¤åè³æ庫çæ¥è©¢ï¼ - 4.18) å¦ä½è®å½æ¸è¿åå¤è¡æå¤åè³æï¼ - 4.19) çºä»éº¼æå¨ä½¿ç¨ PL/PgSQL å½æ¸ååè¨æ表æææ¶å°é¯èª¤è³è¨ãrelation - with OID ##### does not existãï¼ - 4.20) ç®åæåªäºè³æè¤å¯«(replication)æ¹æ¡å¯ç¨ï¼ - 4.21) çºä½æ¥è©¢çµæ顯示ç表åææ¬åèæçæ¥è©¢èªå¥ä¸­ - çä¸åï¼çºä½å¤§å¯«çæä¸è½ä¿çï¼ - _________________________________________________________________ - -常è¦åé¡ - - 1.1) PostgreSQL æ¯ä»éº¼ï¼è©²æ麼ç¼é³ï¼ - - PostgreSQL è®ä½ Post-Gres-Q-Lï¼ææåä¹ç°¡ç¨±çºPostgres - ãæ³è½ä¸ä¸å¶ç¼é³ç人å¡å¯å¾é裡ä¸è¼è²é³æä»¶ï¼ MP3 æ ¼å¼ ã - - PostgreSQL æ¯é¢åç®æ¨çéä¿è³æ庫系統ï¼å®å·æå³çµ±å業 - è³æ庫系統çææåè½ï¼åæåå«æå°å¨ä¸ä¸ä»£ DBMS - 系統ç使ç¨çå¢å¼·ç¹æ§ãPostgreSQL - æ¯èªç±åè²»çï¼ä¸¦ä¸æææºä»£ç¢¼é½å¯ä»¥ç²å¾ã - - PostgreSQL - çéç¼éä¼ä¸»è¦çºå¿é¡èï¼ä»åéä½ä¸çåå°ä¸¦ééäºè¯ç¶²é²è¡è¯ç¹«ï¼éæ¯ä¸å社åéç¼é - ç®ï¼å®ä¸è¢«ä»»ä½å¬å¸æ§å¶ã - å¦æ³å å¥éç¼éä¼ï¼è«åè¦éç¼äººå¡å¸¸è¦åé¡ï¼FAQï¼ - http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html - - 1.2) 誰æ§å¶ PostgreSQL ï¼ - - å¦æä½ å¨å°æ¾PostgreSQLçæé人ï¼ææ¯ä»éº¼ä¸­ - 央å§å¡æï¼ææ¯ä»éº¼æ屬å¬å¸ï¼ä½ åªè½æ¾æ£äº---å çºä¸åä¹ä¸å­ - å¨ï¼ä½æåç確æä¸å æ ¸å¿å§å¡æåCVS管ççµï¼ä½éäºå·¥ä½çµç設 - ç«ä¸»è¦æ¯çºäºé²è¡ç®¡çå·¥ä½èä¸æ¯å°PostgreSQLé²è¡ç¨ä½å¼æ§å¶ï¼PostgreSQLé - ç®æ¯ç±ä»»ä½äººå - å¯åå çéç¼äººå¡ç¤¾ååææç¨æ¶æ§å¶çï¼ä½ æéè¦åçå°±æ¯è¨é±éµä»¶å表ï¼åèè¨è«å³å - ¯ï¼è¦åèPostgreSQLçéç¼è©³è¦ éç¼äººå¡å¸¸åé¡ (Developer's FAQ) ç²åè³è¨ï¼ã - - 1.3) PostgreSQL ççæ¬æ¯ä»éº¼? - - PostgreSQLçç¼å¸éµå¾ç¶å¸ç BSD çæ¬ãå®å許ç¨æ¶ä¸éç®çå°ä½¿ç¨ - PostgreSQLï¼çè³ä½ å¯ä»¥é·å® PostgreSQL - èä¸å«æºä»£ç¢¼ä¹å¯ä»¥ï¼å¯ä¸çéå¶å°±æ¯ä½ ä¸è½å è»é«èªèº«åé¡èåæå追訴æ³å¾ - 責任ï¼å¦å¤å°±æ¯è¦æ±ææçè»é«æ·è²ä¸é åæ¬ä»¥ä¸çæ¬è²æã - ä¸é¢å°±æ¯æåæ使ç¨çBSDçæ¬è²æå§å®¹ï¼ - - PostgreSQL è³æ庫管ç系統 - - é¨åçæ¬ï¼cï¼1996-2005ï¼PostgreSQL å¨çéç¼å°çµï¼é¨åçæ¬ï¼cï¼1994-1996 - å å·å¤§å¸è£äº - - ï¼Portions copyright (c) 1996-2005,PostgreSQL Global Development Group - Portions Copyright (c) 1994-6 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) PostgreSQL å¯ä»¥éè¡å¨åªäºä½æ¥ç³»çµ±å¹³å°ä¸ï¼ - - ä¸è¬èªªä¾ï¼ä»»ä½ç¾å¨å° UNIX ç¸å®¹çä½æ¥ç³»çµ±ä¹ä¸é½è½éè¡ PostgreSQL - ãå¨å®è£æå裡ååºäºç¼ä½æç¶éæ確測試çå¹³å°ã - - PostgreSQL ä¹å¯ä»¥ç´æ¥éè¡å¨åºæ¼å¾®è» Windows-NT çä½æ¥ç³»çµ±ï¼å¦ - Win2000 SP4ï¼WinXP å Win2003ï¼å·²è£½ä½å®æçå®è£åå¯å¾ - http://pgfoundry.org/projects/pginstallerä¸è¼ï¼åºæ¼MSDOSçWindowsä½æ¥­ - 系統 ï¼Win95ï¼Win98ï¼WinMeï¼éè¦ééCygwin模æ¬ç°å¢éè¡PostgreSQLã - - åæä¹æä¸åçº Novell Netware 6 éç¼ççæ¬å¯å¾ http://forge.novell.com - ç²åï¼çºOS/2(eComStation)éç¼ççæ¬å¯å¾ - http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgre - SQL&stype=all&sort=type&dir=%2F ä¸è¼ã - - 1.5) æå¾åªè£¡è½å¾å° PostgreSQLï¼ - - ééç覽å¨å¯å¾ http://www.postgresql.org/ftp/ ä¸è¼ï¼ä¹å¯ééFTPï¼å¾ - ftp://ftp.PostgreSQL.org/pub/ ç«é»ä¸è¼ã - - 1.6) ææ°çç PostgreSQL æ¯ä»éº¼ï¼ - - PostgreSQL ææ°ççæ¬æ¯çæ¬ 8.2.3 ã - - æåè¨åæ¯å¹´ç¼ä½ä¸å主è¦åç´çæ¬ï¼æ¯å¹¾åæç¼ä½ä¸åå°çæ¬ã - - 1.7) æå¾åªè£¡è½å¾å°å° PostgreSQL çæ¯æï¼ - - PostgreSQL社åéééµä»¶å表çºå¶å¤§å¤æ¸ç¨æ¶æä¾å¹«å©ï¼è¨é±éµä»¶å表ç主ç«é - »æ¯ - http://www.postgresql.org/community/lists/ï¼ä¸è¬ææ³ä¸ï¼åå å¥General æ - Bugéµä»¶å表æ¯ä¸åè¼å¥½çéå§ã - - 主è¦çIRCé »éæ¯å¨FreeNode(irc.freenode.net)ç#postgresqlï¼çºäºé£ä¸æ­ - ¤é »éï¼å¯ä»¥ä½¿ç¨ UNIX ç¨åº ircï¼å¶æä»¤æ ¼å¼ï¼ irc -c '#postgresql' - "$USER" irc.freenode.net ï¼æè使ç¨å¶ä»IRC客æ¶ç«¯ç¨åºãå¨æ¤ç¶²çµ¡ä¸éå­ - å¨ä¸å PostgreSQL ç西ççé »é(#postgersql-es)åæ³èªé »é - (#postgresql-fr)ãå樣å°ï¼å¨ EFNET ä¸ä¹æä¸å PostgreSQL ç交æµé »éã - - å¯æä¾åæ¥æ¯æçå¬å¸å表å¯å¨ http://techdocs.postgresql.org/companies.php - ç覽ã - - 1.8) æå¦ä½æ交ä¸å BUG å ±åï¼ - - å¯è¨ªå http://www.postgresql.org/support/submitbugï¼å¡«å¯« Bug - ä¸å ±è¡¨æ ¼å³å¯ï¼å樣ä¹å¯è¨ªå ftp ç«é» ftp://ftp.PostgreSQL.org/pub/ - 檢æ¥æç¡æ´æ°çPostgreSQL çæ¬æè£ä¸ã - - ééä½¿ç¨ Bug æäº¤è¡¨æ ¼ææ¯ç¼å¾ PostgreSQL éµä»¶å表ç Bug - é常ææ以ä¸ä¹ä¸åè¦ï¼ - * ææ交å§å®¹ä¸æ¯ä¸å Bug åå¶ä¸æ¯ Bug çåå ã - * ææ交å§å®¹æ¯ä¸åå·²ç¥ç Bug 並ä¸å·²ç¶å å¥ TODO å¾èçä»»åå表ã - * ææ交ç Bug å·²å¨ç¶åçæ¬ä¸è¢«ä¿®æ£ã - * ææ交ç Bug 已修æ£ä½å°æªå°è£ä¸å å¥ç¾å¨çç¼å¸è»é«åã - * è«æ±æ交èæä¾æ´è©³ç´°çè³è¨ï¼ - + ä½æ¥ç³»çµ± - + PostgreSQL çæ¬ - + å¯éç¾ Bug ç測試æ¡ä¾ - + 調試è³è¨ - + 調試è·è¹¤è¼¸åº - * ææ交å§å®¹æ¯ä¸åæ° Bugï¼å°å·è¡ä»¥ä¸å·¥ä½ï¼ - + åµå»ºä¸åæ°è£ä¸ä¸¦å°å¶å å¥ä¸ä¸å主è¦çæ¬ææ¯å°çæ¹é²çæ¬ä¸ã - + æ¤ Bug æ«æä¸è½ä¿®æ£ï¼å°è¢«å è³ TODO å¾èçä»»åå表ã - - 1.9) æå¦ä½ç解已ç¥ç BUG ææ«ç¼ºçåè½ï¼ - - PostgreSQL æ¯æä¸åæ´å±ç SQL:2003 çåéãåé±æåç TODO å表ï¼çè§£å·²ç¥ Bug - å表ãæ«ç¼ºçåè½åå°ä¾çéç¼è¨åã - - è¦æ±å¢å æ°åè½çç³è«é常ææ¶å°ä»¥ä¸ä¹ä¸çåè¦ï¼ - * 該åè½å·²å å¥ TODO å¾èçä»»åå表ã - * 該åè½ä¸æ¯å¿é çï¼å çºï¼ - + å®æ¯ç¾æçä¸ç¬¦å SQL æ¨æºçæåè½çéè¤ã - + 該åè½æ§æ大大å¢å 代碼çè¤éç¨åºï¼è帶ä¾ç好èæ¯å¾®ä¸è¶³éçã - + 該åè½æ¯ä¸å®å¨ææ¯ä¸å¯é çã - * 該åè½å°è¢«å å¥ TODO å¾èçä»»åå表ã - - PostgreSQL ä¸ä½¿ç¨ Bug è·è¹¤ç³»çµ±ï¼å çºæåç¼ç¾å¨éµä»¶å表中 - ç´æ¥åè¦ä»¥åä¿è TODO - ä»»åå表總æ¯èæ¼ææ°çæçæ¹å¼å·¥ä½æçææ´é«ä¸äºãäºå¯¦ä¸ï¼Bugä¸æå¨æåçè»é«ä¸­ - åå¨å¾é·æéï¼ å°å½±é¿å¾å¤ç¨æ¶çBugä¹ç¸½æ¯å¾å¿«æè¢«ä¿®æ­ - £ãå¯ä¸è½æ¾å°æææ¹é²ãæé«åä¿®æ£çå°æ¹æ¯ CVS - çæ¥èªè³è¨ï¼å³ä½¿æ¯å¨è»é«æ°çæ¬çç¼å¸è³è¨ä¸ä¹ä¸æååºæ¯ä¸èçè»é«æ´æ°ã - - 1.10) è½å¤ ç²åçææ°ææªæåªäºï¼ - - PostgreSQL åå«å¤§éçææªï¼ä¸»è¦æ詳細çåèæåï¼æåé åä¸äºç測試ä¾åãåè¦ - /doc ç®éï¼è¯è¨»ï¼æçº $PGHOME/docï¼ã ä½ éå¯ä»¥å¨ç·ç覽 PostgreSQL - çæåï¼å¶ç¶²åæ¯ï¼http://www.PostgreSQL.org/docsã - - æå©æ¬éæ¼PostgreSQLçæ¸å¨ç·æä¾ï¼å¨ - http://www.postgresql.org/docs/books/awbook.html å - http://www.commandprompt.com/ppbook/ ã ä¹æ大éç PostgreSQL - æ¸ç±å¯ä¾è³¼è²·ï¼å¶ä¸æçºæµè¡çä¸æ¬æ¯ç± Korry Douglas 編寫çãå¨ - http://techdocs.PostgreSQL.org/techdocs/bookreviews.phpä¸ ä¸æ大éæé - PostgreSQL æ¸ç±çç°¡ä»ã å¨ http://techdocs.PostgreSQL.org/ ä¸æ¶éäºæé - PostgreSQL ç大éæè¡æç« ã - - 客æ¶ç«¯çå½ä»¤è¡ç¨åºpsqlæä¸äºä»¥ \d éé ­ - çå½ä»¤ï¼å¯é¡¯ç¤ºéæ¼é¡åï¼æä½ç¬¦ï¼å½æ¸ï¼èåçè³è¨ï¼ä½¿ç¨ \? - å¯ä»¥é¡¯ç¤ºææå¯ç¨çå½ä»¤ã - - æåç web ç«é»åå«æ´å¤çææªã - - 1.11) ææ該æ樣å¸ç¿ SQL ï¼ - - é¦åèæ®ä¸è¿°æå°çèPostgreSQLç¸éçæ¸ç±ï¼å¦å¤ä¸æ¬æ¯ Teach Yourself SQL in - 21 Days, Second Editionï¼å¶è©³ç´°ä»ç´¹ç網åæ¯ - http://members.tripod.com/er4ebus/sql/index.htmï¼ æåç許å¤ç¨æ¶åæ¡The - Practical SQL Handbookï¼ Bowman, Judith S. - 編寫ï¼Addison-Wesleyå¬å¸åºçï¼å¶ä»çååæ¡ The Complete Reference SQL, - Groff 編寫ï¼McGraw-Hill å¬å¸åºçã - - å¨ä¸å網åä¸ä¹æå¾å¥½çæç¨ï¼ä»åæ¯ - * 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)å¦ä½æ交è£ä¸ææ¯å å¥éç¼éä¼ï¼ - - è©³è¦ éç¼äººå¡å¸¸è¦åé¡ (Developer's FAQ) ã - - 1.13) PostgreSQL åå¶ä»è³æ庫系統æ¯èµ·ä¾å¦ä½ï¼ - - è©å¹è»é«æ好幾種æ¹æ³ï¼åè½ï¼æ§è½ï¼å¯é æ§ï¼æ¯æåå¹æ ¼ã - - åè½ - PostgreSQL ææ大ååç¨è³æ庫æå¤çåè½ï¼ä¾å¦ï¼äºåï¼å­ - æ¥è©¢ï¼è§¸ç¼å¨ï¼è¦åï¼å¤éµåèå®æ´æ§åè¤éçéå®çã - æåéæä¸äºå®åæ²æçç¹æ§ï¼å¦ç¨æ¶å®ç¾©é¡åï¼ç¹¼æ¿ï¼è¦ååå¤çæ¬ä¸¦è¡æ§å¶ä - »¥æ¸å°éççç¨çã - - æ§è½ - PostgreSQLåå¶ä»åç¨åéæºçè³æ庫å·æé¡ä¼¼çæ§è½ãå°æäºèçå®æ¯è¼å¿«ï¼å° - å¶ä»ä¸äºèçå®æ¯è¼æ¢ã èå¶ä»è³æ庫ç¸æ¯ï¼æåçæ§è½åªå£éå¸¸å¨ +/- - 10%ä¹éã - - å¯é æ§ - æåé½ç¥éè³æ庫å¿é æ¯å¯é çï¼å¦åå®å°±ä¸é»ç¨é½æ²æãæååªååå°ç¼ä½ç¶éèª - ç測試çï¼ç¼ºé·æå°çç©©å®ä»£ç¢¼ãæ¯åçæ¬è³å°æä¸åæç beta - 測試æéï¼ä¸¦ä¸æåçç¼å¸æ­ - ·å²é¡¯ç¤ºæåå¯ä»¥æä¾ç©©å®çï¼ç¢åºçï¼å¯ç¨æ¼çç¢ä½¿ç¨ççæ¬ãæåç¸ä¿¡å¨é - æ¹é¢æåèå¶ä»çè³æ庫è»é«æ¯ç¸ç¶çã - - æ¯æ - æåçéµä»¶å表æä¾ä¸åé常大çéç¼äººå¡åç¨æ¶ççµä»¥å¹«å©è§£æ±ºæ碰å°ç - ä»»ä½åé¡ãæåä¸è½ä¿è­ - 總æ¯è½è§£æ±ºåé¡ï¼ç¸æ¯ä¹ä¸ï¼åç¨è³æ庫è»é«ä¹ä¸¦ä¸æ¯ç¸½è½å¤ æä¾è§ - £æ±ºæ¹æ³ã - ç´æ¥èéç¼äººå¡ï¼ç¨æ¶ç¾¤ï¼æååæºç¨åºæ¥è§¸ä½¿PostgreSQLçæ¯ææ¯å¶ä»è³ - æ庫éè¦å¥½ãéæä¸äºå業 - æ§çå¨é¢æè¡æ¯æï¼å¯ä»¥çµ¦æä¾çµ¦é£äºéè¦ç人ãï¼åé±1.7 å°ç¯ï¼ - - å¹æ ¼ - æåå°ä»»ä½ç¨éé½åè²»ï¼åæ¬åç¨åéåç¨ç®çã - ä½ å¯ä»¥ä¸å éå¶å°åä½ çç¢å裡å å¥æåç代碼ï¼é¤äºé£äºæåå¨ä¸é¢ççæ¬ - è²æ裡è²æç BSDçæ¬ä¹å¤çå§å®¹ã - - 1.14) PostgreSQL å¯ä»¥èçæè¿ååå家å¤æå¶çè®åå? - - PostgreSQL 8.0ä¹åççæ¬æ¯ä½¿ç¨ä½æ¥ç³»çµ±ä¸çæåè³æ庫ä¾èçå¤æå¶çè³è¨ï¼èª - 8.0 çå以å¾ççæ¬ PostgreSQL æèªèº«å«æææ°çæåè³è¨ã - _________________________________________________________________ - -ç¨æ¶å®¢æ¶ç«¯åé¡ - - 2.1) æåå¯ä»¥ç¨ä»éº¼èªè¨å PostgreSQL é²è¡æºéï¼ - - PostgreSQL (é è¨ææ³)åªå®è£æ C åå§åµå¼ C - çæ¥å£ï¼å¶ä»çæ¥å£é½æ¯ç¨ç«çé ç®ï¼è½å¤ åå¥ä¸è¼ï¼éäºæ¥å£é ç®ç¨ç«ç好è - æ¯ä»åå¯ä»¥æåèªçç¼å¸è¨åååèªç¨ç«çéç¼çµã - - ä¸äºç·¨ç¨èªè¨å¦ PHP é½æ訪å PostgreSQL çæ¥å£ï¼PerlãTCLãPython - 以åå¾å¤å¶ä»èªè¨çæ¥å£å¨ http://gborg.postgresql.org 網ç«ä¸ç - Drivers/Interfaces å°ç¯å¯æ¾å°ï¼ 並ä¸éé Internet å¾å®¹ææç´¢å°ã - - 2.2) æä»éº¼å·¥å·å¯ä»¥æ PostgreSQL ç¨æ¼ Web é é¢ï¼ - - ä¸åä»ç´¹ä»¥è³æ庫çºå¾å°çæºä¸é¯çç«é»æ¯ï¼http://www.webreview.comã - - å°æ¼ Web éæï¼PHP æ¯ä¸å極好çæ¥å£ãå®å¨ http://www.php.net/ã - - å°æ¼è¤éçä»»åï¼å¾å¤äººæ¡ç¨ Perl æ¥å£å ä½¿ç¨ CGI.pm ç DBD::Pg æ mod_perl - ã - - 2.3)PostgreSQL ææåå½¢ç¨æ¶çé¢åï¼ - - åæ¥ç¨æ¶ææ¯éæºéç¼äººå¡è½æ¾å°å¾å¤çæé PostgreSQLçGUI å形工å·è»é«ï¼å¨ - PostgreSQL社åææª æä¸å詳細çå表ã - _________________________________________________________________ - -系統管çåé¡ - - 3.1)ææ樣è½æ PostgreSQL è£å¨ /usr/local/pgsql 以å¤çå°æ¹ï¼ - - å¨éè¡ configure æå ä¸ --prefix é¸é ã - - 3.2) æå¦ä½æ§å¶ä¾èªå¶ä»é»è¦çé£æ¥ï¼ - - é è¨ææ³ä¸ï¼PostgreSQL åªå許ä¾èªæ¬æ©ä¸éé unix åå¥æ¥åæ TCP/IP - æ¹å¼çé£æ¥ã ä½ åªæå¨ä¿®æ¹äºéç½®æ件 postgresql.conf ä¸ç - listen_addressesï¼ä¸ä¹å¨éç½®æ件 $PGDATA/pg_hba.conf ä¸æéäº - åºæ¼é ç¨é»è¦ï¼ host-based ï¼ç身份èªèï¼ä¸¦éæ°åå - PostgreSQLï¼å¦åå¶ä»é»è¦æ¯ä¸è½èä½ ç PostgreSQL 伺æå¨é²è¡é£æ¥çã - - 3.3) ææ樣調æ´è³æ庫å¼æ以ç²å¾æ´å¥½çæ§è½ï¼ - - æä¸å主è¦æ¹é¢å¯ä»¥æå PostgreSQL çæ½è½ã - - æ¥è©¢æ¹å¼çè®å - é主è¦æ¶åä¿®æ¹æ¥è©¢æ¹å¼ä»¥ç²åæ´å¥½çæ§è½: - - + åµå»ºç´¢å¼ï¼åæ¬è¡¨éå¼åé¨åç´¢å¼ï¼ - + ä½¿ç¨ COPY èªå¥ä»£æ¿å¤å Insert èªå¥ï¼ - + å°å¤åSQLèªå¥çµæä¸åäºå以æ¸å°æ交äºåçéé·ï¼ - + å¾ä¸åç´¢å¼ä¸æåå¤æ¢è¨éæä½¿ç¨ CLUSTERï¼ - + å¾ä¸åæ¥è©¢çµæä¸ååºé¨åè¨éæä½¿ç¨ LIMITï¼ - + 使ç¨é ç·¨è¯å¼æ¥è©¢ï¼Prepared Query)ï¼ - + ä½¿ç¨ ANALYZE 以ä¿æ精確çåªåçµ±è¨ï¼ - + å®æä½¿ç¨ VACUUM æ pg_autovacuum - + é²è¡å¤§éè³ææ´æ¹æååªé¤ç´¢å¼ï¼ç¶å¾é建索å¼ï¼ - - 伺æå¨çéç½® - éç½®æ件 postgres.conf ä¸çå¾å¤è¨­ - ç½®é½æå½±é¿æ§è½ï¼ææåæ¸çå表å¯è¦ï¼ - 管çå¡æå/è³æ庫伺æå¨éè¡ç°å¢/è³æ庫伺æå¨éè¡éç½®ï¼ - æéåæ¸ç解éå¯è¦ï¼http://www.varlena.com/varlena/GeneralBits/Tidb - its/annotated_conf_e.html å - http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.htmlã - - 硬é«çé¸æ - é»è¦ç¡¬é«å°æ§è½çå½±é¿å¯ç覽 - http://candle.pha.pa.us/main/writings/pgsql/hw_performance/inde - x.html å http://www.powerpostgresql.com/PerfList/ã - - 3.4)PostgreSQL 裡å¯ä»¥ç²å¾ä»éº¼æ¨£ç調試ç¹æ§ï¼ - - PostgreSQL æå¾å¤é¡ä¼¼ log_* - ç伺æå¨éç½®è®éå¯ç¨æ¼æ¥è©¢çåå°åé²ç¨çµ±è¨ï¼èéäºå·¥ä½å°èª¿è©¦åæ§è½æ¸¬è©¦å - ¾æ幫å©ã - - 3.5) çºä»éº¼å¨è©¦åé£æ¥ææ¶å°ãSorry, too many - clientsï¼å·²æ太å¤ç¨æ¶é£æ¥ï¼ãæ¶æ¯ï¼ - - éè¡¨ç¤ºä½ å·²éå°é è¨ 100 å並ç¼(åä½)å¾å°é²ç¨æ¸çéå¶ï¼ä½ éè¦ééä¿®æ¹ - postgresql.conf æ件ä¸ç max_connections å¼ä¾ å¢å postmaster - çå¾å°ä½µç¼èçæ¸ï¼ä¿®æ¹å¾ééæ°åå postmasterã - - 3.6)PostgreSQL çåç´éç¨æåªäºå§å®¹ ï¼ - - PostgreSQL éç¼çµå°æ¯æ¬¡å°çæ¬çåç´ä¸»è¦åªåäºä¸äº Bug ä¿®æ£å·¥ä½ï¼å æ¤å¾ - 7.4.8 åç´å° 7.4.9 ä¸éè¦ dump å restoreï¼åéè¦åæ­ - ¢è³æ庫伺æå¨ï¼å®è£æ´æ°å¾çè»é«åï¼ç¶å¾éå伺æå¨å³å¯ã - - ææPostgreSQLçç¨æ¶æ該å¨ææ¥è¿ï¼ä½ æ使ç¨ç主çæ¬ï¼çå°æ¹é²çæ¬ç¼ä½ç¡å¿«åç´ - ãå管æ¯æ¬¡åç´å¯è½é½æä¸é»é¢¨éªï¼PostgreSQLçå°æ¹ é²çååæ¯è¨è¨ç¨ä¾ä¿®æ­ - £ä¸äº Bug - çï¼ç¨å¼ç¢¼æ¹åè¼å°ï¼æ以風éªéæ¯å¾å°çãPostgreSQL社åèªçºä¸è¬ææ³ä¸ä¸åç´ç - 風éªéæ¯å¤æ¼åç´çã - - 主çæ¬çåç´ï¼ä¾å¦å¾ 7.3 å° 7.4ï¼é常æä¿®æ¹ç³»çµ±è¡¨åè³æ表çå§é¨æ ¼å¼ã - éäºæ¹è®ä¸è¬æ¯è¼è¤éï¼å æ¤æåä¸ç¶æè³ææ件çåå¾å¼å®¹æ§ãå æ¤å¾èçæ¬ä¸­ - é²è¡è³æå°åºï¼dumpï¼/ç¶å¾å¨æ°çæ¬ä¸­ - é²è¡è³æå°å¥ï¼reloadï¼å°ä¸»çæ¬çåç´æ¯å¿é çã - - 3.7)(ä½¿ç¨ PostgreSQL )æéè¦ä½¿ç¨ä»éº¼é»è¦ç¡¬é« ï¼ - - ç±æ¼é»è¦ç¡¬é«å¤§å¤æ¸æ¯ç¸å®¹çï¼äººå總æ¯å¾åæ¼ç¸ä¿¡ææé»è¦ç¡¬é«è³ªéä¹æ¯ç¸ - åçãäºå¯¦ä¸ä¸æ¯ï¼ ECC RAMï¼å¸¶å¥å¶æ ¡é©çè¨æ¶é«ï¼ï¼SCSI - ï¼ç¡¬ç¢ï¼ååªè³ªç主æ©æ¿æ¯ä¸äºä¾¿å®è²¨è¦æ´å å¯é ä¸å·ææ´å¥½çæ§è½ã - PostgreSQL å¹¾ä¹å¯ä»¥éè¡å¨ä»»ä½ç¡¬é«ä¸ï¼ - ä½å¦æå¯é æ§åæ§è½å°ä½ ç系統å¾éè¦ï¼ä½ å°±éè¦å¨é¢çç 究ä¸ä¸ä½ ç硬é«çµæ - äºãå¨æåçéµä»¶å表ä¸ä¹æéæ¼ ç¡¬é«éç½®åæ§å¹æ¯çè¨è«ã - _________________________________________________________________ - -æä½åé¡ - - 4.1) å¦ä½åªé¸æä¸åæ¥è©¢çµæçé å¹¾è¡ï¼ææ¯é¨æ©çä¸è¡ï¼ - - å¦æä½ åªæ¯è¦æåå¹¾è¡è³æï¼ä¸¦ä¸ä½ å¨å·è¡æ¥è©¢ä¸­ - ç¥é確åçè¡æ¸ï¼ä½ å¯ä»¥ä½¿ç¨ LIMIT åè½ã å¦ææä¸åç´¢å¼è ORDER BY 中 - çæ¢ä»¶å¹éï¼PostgreSQL å¯è½å°±åªèçè¦æ±çé å¹¾æ¢è¨éï¼ - ï¼å¦åå°å°æ´åæ¥è©¢é²è¡èçç´å°çæéè¦çè¡ï¼ãå¦æå¨å·è¡æ¥è©¢åè½æä¸ç¥é確åçè¨éæ - ¸ï¼ å¯ä½¿ç¨æ¸¸æ¨(cursor)åFETCHåè½ã - - å¯ä½¿ç¨ä»¥ä¸æ¹æ³æåä¸è¡é¨æ©è¨éçï¼ - SELECT cols - FROM tab - ORDER BY random() - LIMIT 1 ; - - 4.2) - å¦ä½æ¥ç表ãç´¢å¼ãè³æ庫以åç¨æ¶çå®ç¾©ï¼å¦ä½æ¥çpsql裡ç¨å°çæ¥è©¢æ令並顯示å - ®åï¼ - - å¨psqlä¸ä½¿ç¨ \dt å½ä»¤ä¾é¡¯ç¤ºè³æ表çå®ç¾©ï¼è¦ç解 psql 中 - çå®æ´å½ä»¤å表å¯ä½¿ç¨ \? ï¼å¦å¤ï¼ä½ ä¹å¯ä»¥é±è® psql çæºä»£ç¢¼ æ件 - pgsql/src/bin/psql/describe.cï¼å®åæ¬çºçæ psql åææ§å½ä»¤ç輸åºçææ SQL - å½ä»¤ãä½ éå¯ä»¥å¸¶ -E é¸é åå psqlï¼ é樣å®å°åå°åºä½ å¨ psql 中 - æ給åºçå½ä»¤å·è¡æçå§é¨å¯¦é使ç¨ç SQL - æ¥è©¢èªå¥ãPostgreSQLä¹æä¾äºä¸åå¼å®¹ SQLç INFORMATION SCHEMA æ¥å£ï¼ - ä½ å¯ä»¥å¾é裡ç²åéæ¼è³æ庫çè³è¨ã - - å¨ç³»çµ±ä¸ä¹æä¸äºä»¥ pg_ æé ç系統表ä¹æè¿°äºè¡¨çå®ç¾©ã - - ä½¿ç¨ psql -l æ令å¯ä»¥ååºææçè³æ庫ã - - ä¹å¯ä»¥ç覽ä¸ä¸ pgsql/src/tutorial/syscat.source - æ件ï¼å®åèäºå¾å¤å¯å¾è³æ庫系統表ä¸ç²åè³è¨çSELECTèªæ³ã - - 4.3) å¦ä½æ´æ¹ä¸åæ¬ä½çè³æé¡åï¼ - - å¨8.0çæ¬è£¡æ´æ¹ä¸åæ¬ä½çè³æé¡åå¾å®¹æï¼å¯ä½¿ç¨ ALTER TABLE ALTER COLUMN - TYPE ã - - å¨ä»¥åççæ¬ä¸ï¼å¯ä»¥é樣åï¼ - 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; - - ä½ ç¶å¾å¯ä»¥ä½¿ç¨ VACUUM FULL tab æ令ä¾ä½¿ç³»çµ±æ¶åç¡æè³ææä½ç¨ç空éã - - 4.4) å®æ¢è¨éï¼å®å表ï¼å®åè³æ庫çæ大éå¶æ¯å¤å°ï¼ - - ä¸é¢æ¯ä¸äºéå¶ï¼ - - å®åè³æ庫æå¤§å°ºå¯¸ï¼ ç¡éå¶ï¼å·²åå¨æ 32TB çè³æåº«ï¼ - å®å表çæå¤§å°ºå¯¸ï¼ 32 TB - ä¸è¡è¨éçæå¤§å°ºå¯¸ï¼ 1.6 TB - ä¸åæ¬ä½çæ大尺寸? 1 GB - ä¸å表裡æ大åæ¸ï¼ ç¡éå¶ - ä¸å表裡æ大æ¬ä½æ¸ï¼ 250-1600 ï¼èåé¡åæéï¼ - ä¸å表裡çæ大索å¼æ¸éï¼ ç¡éå¶ - - ç¶ç¶ï¼å¯¦éä¸æ²æçæ£çç¡éå¶ï¼éæ¯è¦åå¯ç¨ç£ç¤ç©ºéãå¯ç¨è¨æ¶é«/交æåçå¶ç´ã - äºå¯¦ä¸ï¼ç¶ä¸è¿°éäºæ¸å¼è®å¾ç°å¸¸å°å¤§æï¼ç³»çµ±æ§è½ä¹æåå¾å¤§å½±é¿ã - - å®è¡¨çæå¤§å¤§å° 32 TB ä¸éè¦ä½æ¥­ - 系統å°å®åæ件ä¹éé麼大çæ¯æã大表ç¨å¤å 1 GB çæ件åå²ï¼å æ­ - ¤æ件系統大å°çéå¶æ¯ä¸éè¦çã - - å¦æé è¨çå¡å¤§å°å¢é·å° 32K ï¼æ大çå®è¡¨å¤§å°åæ大åæ¸éå¯ä»¥å¢å å°ååã - - æä¸åéå¶å°±æ¯ä¸è½å°å¤§å°å¤æ¼2000å­ - ç¯çååµå»ºç´¢å¼ã幸éå°æ¯é樣çç´¢å¼å¾å°ç¨å°ãééå°å¤å­ - ç¯åçå§å®¹é²è¡MD5åç¨éç®çµæé²è¡å½æ¸ç´¢å¼å¯å°åçå¯ä¸æ§å¾å°ä¿èï¼ - 並ä¸å¨æ檢索å許å°åä¸çå®è©é²è¡æç´¢ã - - 4.5) åå²ä¸åå¸åçææ¬æ件裡çè³æéè¦å¤å°ç£ç¤ç©ºéï¼ - - ä¸å Postgres è³æ庫ï¼å­ - å²ä¸åææ¬æ件ï¼æä½ç¨ç空éæå¤å¯è½éè¦ç¸ç¶æ¼éåææ¬æ件èªèº«å¤§å°5åçç£ç¤ç©ºé - ã - - ä¾å¦ï¼åè¨æä¸å 100,000 è¡çæ件ï¼æ¯è¡æä¸åæ´æ¸åä¸åææ¬æè¿°ã å設 - ææ¬ä¸²çå¹³åé·åº¦çº20ä½åçµ(Byte)ãææ¬æ件ä½ç¨ 2.8 MBãå­ - æ¾éäºè³æçPostgreSQLè³æ庫æ件大ç´æ¯ 5.2 MB: - 24 ååçµ: æ¯è¡çé ï¼å¤§ç´å¼ï¼ - 24 ååçµç¯: ä¸åæ´æ¸åæ¬ä½åä¸åææ¬åæ¬ä½ - + 4 ååçµç¯: é é¢å§æååçµçæé - ---------------------------------------- - 52 ååçµæ¯è¡ - - PostgreSQL è³æé ç大å°æ¯ 8192 ä½åçµ (8 KB)ï¼åï¼ - - 8192 ååçµæ¯é - ------------------- = 158 è¡/è³æé ï¼åä¸åæ´ï¼ - 52 ååçµæ¯è¡ - - 100000 è³æè¡ - -------------------- = 633 è³æé ï¼åä¸åæ´ï¼ - 146 è¡/è³æé - - 633 è³æé * 8192 åç¯/é = 5,185,536 åç¯ï¼5.2 MBï¼ - - ç´¢å¼ä¸éè¦é麼å¤çé¡å¤æ¶èï¼ä½ä¹ç¢ºå¯¦åæ¬è¢«ç´¢å¼çè³æï¼å æ­ - ¤å®åä¹å¯è½å¾å¤§ã - - ç©ºå¼ NULL åæ¾å¨ä½åä¸ï¼å æ¤ä½ç¨å¾å°ç空éã - - 4.6) çºä»éº¼æçæ¥è©¢å¾æ¢ï¼çºä»éº¼éäºæ¥è©¢æ²æå©ç¨ç´¢å¼ï¼ - - 並éæ¯åæ¥è©¢é½æèªå使ç¨ç´¢å¼ãåªæå¨è¡¨ç大å°è¶éä¸åæå°å¼ï¼ä¸¦ä¸æ¥è©¢åªæé - ¸ä¸è¡¨ä¸è¼å°æ¯ä¾çè¨éææææ¡ç¨ç´¢å¼ã éæ¯å çºç´¢å¼æçå¼èµ·çé¨å³ç£ç¤å­ - åå¯è½æ¯ç´æ¥å°è®å表ï¼é åºæçï¼æ´æ¢ã - - çºäºå¤æ·æ¯å¦ä½¿ç¨ç´¢å¼ï¼PostgreSQL - å¿é ç²å¾æé表ççµ±è¨å¼ãéäºçµ±è¨å¼å¯ä»¥ä½¿ç¨ VACUUM ANALYZEï¼æ ANALYZE - ç²å¾ã 使ç¨çµ±è¨å¼ï¼åªåå¨ç¥é表中 - æå¤å°è¡ï¼å°±è½å¤ æ´å¥½å°å¤æ·æ¯å¦å©ç¨ç´¢å¼ã - çµ±è¨å¼å°ç¢ºå®åªåçé£æ¥é åºåé£æ¥æ¹æ³ä¹å¾æç¨ãå¨è¡¨çå§å®¹ç¼çè®åæï¼æå®æé²è - ¡çµ±è¨å¼çæ´æ°æ¶éã - - ç´¢å¼é常ä¸ç¨æ¼ ORDER BY - æå·è¡é£æ¥ãå°ä¸å大表çä¸æ¬¡é åºæçååä¸æ¬¡æåºé常æ¯ç´¢å¼æçè¦å¿«ãç¶èï¼å¦æ - å° LIMIT å ORDER BY - çµåå¨ä¸èµ·ä½¿ç¨ç話ï¼é常å°æ使ç¨ç´¢å¼ï¼å çºéæåè¿å表ä¸çä¸å°é¨åè¨éã - - å¦æä½ ç¢ºä¿¡PostgreSQLçåªåå¨ä½¿ç¨é åºæçæ¯ä¸æ£ç¢ºçï¼ä½ å¯ä»¥ä½¿ç¨SET - enable_seqscan TO 'off'æ令ä¾ééé åºæçï¼ - ç¶å¾å次éè¡æ¥è©¢ï¼ä½ å°±å¯ä»¥çåºä½¿ç¨ä¸åç´¢å¼æçæ¯å¦ç¢ºå¯¦è¦å¿«ä¸äºã - - ç¶ä½¿ç¨éé符æä½ï¼ä¾å¦ LIKE æ ~ æï¼ç´¢å¼åªè½å¨ç¹å®çææ³ä¸ä½¿ç¨ï¼ - * å符串çéå§é¨åå¿é æ¯æ®éå符串ï¼ä¹å°±æ¯èªªï¼ - + LIKE 模å¼ä¸è½ä»¥ % æé ã - + ~ ï¼æ£å表éå¼ï¼æ¨¡å¼å¿é 以 ^ æé ã - * å符串ä¸è½ä»¥å¹éå¤åå符ç模å¼é¡æé ï¼ä¾å¦ [a-e]ã - * 大å°å¯«ç¡éçæ¥æ¾ï¼å¦ ILIKE å ~* çä¸ä½¿ç¨ç´¢å¼ï¼ä½å¯ä»¥ç¨ 4.8 - ç¯æè¿°ç表éå¼ç´¢å¼ã - * å¨å initdb æå¿é æ¡ç¨é è¨çæ¬å°è¨ç½® C - localeï¼å çºç³»çµ±ä¸å¯è½ç¥éå¨é C locale ææ³æä¸ä¸åæ大å符æ¯ä»éº¼ã - å¨é種ææ³ä¸ï¼ä½ å¯ä»¥åµå»ºä¸åç¹æ®ç text_pattern_ops ç´¢å¼ä¾ç¨æ¼ - LIKE çç´¢å¼ã - - å¨ 8.0 ä¹åççæ¬ä¸­ - ï¼é¤éè¦æ¥è©¢çè³æé¡ååç´¢å¼çè³æé¡åç¸å¹éï¼å¦åç´¢å¼ç¶å¸¸æ¯æªè¢«ç¨å°ï¼ç¹å¥æ - ¯å° int2, int8 åæ¸å¼åçç´¢å¼ã - - 4.7) æå¦ä½æè½çå°æ¥è©¢åªåå¨æ¯æ樣è©ä¼°èçæçæ¥è©¢ï¼ - - åè EXPLAIN æåé ã - - 4.8) ææ樣åæ£å表éå¼æç´¢å大å°å¯«ç¡éçæ­ - £å表éå¼æ¥æ¾ï¼æ樣å©ç¨ç´¢å¼é²è¡å¤§å°å¯«ç¡éæ¥æ¾ï¼ - - æä½ç¬¦ ~ èçæ£å表éå¼å¹éï¼è ~* èç大å°å¯«ç¡éçæ£å表éå¼å¹éã大å°å¯«ç¡éç - LIKE è®ç¨®æçº ILIKEã - - 大å°å¯«ç¡éççå¼æ¯è¼é常寫åï¼ - SELECT * - FROM tab - WHERE lower(col) = 'abc'; - - é樣å°ä¸æ使ç¨æ¨æºçç´¢å¼ãä½æ¯å¯ä»¥åµå»ºä¸åå¨é種ææ³ä¸ä½¿ç¨ç表éå¼ç´¢å¼ - : - CREATE INDEX tabindex ON tab (lower(col)); - - å¦æä¸è¿°ç´¢å¼å¨åµå»ºæå å¥ UNIQUE ç´æï¼éç¶ç´¢å¼æ¬ä½èªèº«å§å®¹å¯ä»¥å­ - å²å¤§å°å¯«ä¸éçå§å®¹ï¼ä½å¦ææ UNIQUE - ç´æå¾ï¼éäºå§å®¹ä¸è½ååæ¯å¤§å°å¯«ä¸åï¼å¦åæé æè¡çªï¼ãçºäºä¿è­ - ä¸ç¼çé種ææ³ï¼å¯ä»¥ä½¿ç¨ CHECK ç´ææ¢ä»¶ææ¯è§¸ç¼å¨å¨éå¥æé²è¡éå¶ã - - 4.9) å¨ä¸åæ¥è©¢è£¡ï¼ææ樣檢測ä¸åæ¬ä½æ¯å¦çº NULL - ï¼æå¦ä½æè½æºç¢ºæåºèä¸è«ææ¬ä½æ¯å¦å« NULL å¼ï¼ - - ç¨ IS NULL å IS NOT NULL 測試éåæ¬ä½ï¼å·é«æ¹æ³å¦ä¸ï¼ - SELECT * - FROM tab - WHERE col IS NULL; - - çºäºè½å°å« NULL æ¬ä½æåºï¼å¯å¨ ORDER BY æ¢ä»¶ä¸ä½¿ç¨ IS NULL å IS NOT - NULL 修飾符ï¼æ¢ä»¶çºç true å°æ¯æ¢ä»¶çºå false æå¨åé¢ï¼ä¸é¢çä¾å­ - å°±æå°å« NULL çè¨éæå¨çµæçä¸é¢é¨åï¼ - SELECT * - FROM tab - ORDER BY (col IS NOT NULL) - - 4.10) å種å符é¡åä¹éæä»éº¼ä¸åï¼ - - é¡å å§é¨å稱 說æ - VARCHAR(n) varchar æå®äºæ大é·åº¦ï¼è®é·å­ - 符串ï¼ä¸è¶³å®ç¾©é·åº¦çé¨åä¸è£é½ - CHAR(n) bpchar å®é·å符串ï¼å¯¦éè³æä¸è¶³å®ç¾©é·åº¦æï¼ä»¥ç©ºæ ¼è£é½ - TEXT text æ²æç¹å¥çä¸ééå¶ï¼ååè¡çæ大é·åº¦éå¶ï¼ - BYTEA bytea è®é·åç¯åºåï¼ä½¿ç¨NULLå符ä¹æ¯å許çï¼ - "char" char å®åå符 - - å¨ç³»çµ±è¡¨åå¨ä¸äºé¯èª¤è³è¨è£¡ä½ å°çå°å§é¨å稱ã - - ä¸é¢æåçåå種é¡åæ¯ "varlena"ï¼è®é·ï¼é¡åï¼ä¹å°±æ¯èªªï¼éé çååå­ - ç¯æ¯é·åº¦ï¼å¾é¢ææ¯è³æï¼ã æ¼æ¯å¯¦éä½ç¨ç空éæ¯è²æç大å°è¦å¤ä¸äºã - ç¶èéäºé¡åå¦å®ç¾©å¾é·æé½å¯ä»¥è¢«å£ç¸®åå²ï¼å æ­ - ¤ç£ç¤ç©ºéä¹å¯è½æ¯é æ³çè¦å°ã - - VARCHAR(n) å¨åå²éå¶äºæ大é·åº¦çè®é·å符串æ¯æ好çã TEXT é©ç¨æ¼å­ - å²æ大å¯é 1G å·¦å³ä½æªå®ç¾©éå¶é·åº¦çå符串ã - - CHAR(n) æé©åæ¼åå²é·åº¦ç¸åçå符串ã - CHAR(n)ææ ¹ææ給å®çæ¬ä½é·åº¦ä»¥ç©ºæ ¼è£è¶³ï¼ä¸è¶³çæ¬ä½å§å®¹ï¼ï¼ è - VARCHAR(n) åªåå²æ給å®çè³æå§å®¹ã BYTEA ç¨æ¼åå²äºé²å¶è³æï¼å°¤å¶æ¯åå« - NULL åç¯çå¼ãéäºé¡åå·æå·®ä¸å¤çæ§è½ã - - 4.11.1) ææ樣åµå»ºä¸ååºåèææ¯èªåéå¢çæ¬ä½ï¼ - - PostgreSQL æ¯æ SERIAL - è³æé¡åãï¼æ¬ä½å®ç¾©çºSERIALå¾ï¼å°èªååµå»ºä¸ååºåçæå¨ï¼ä¾å¦ï¼ - CREATE TABLE person ( - id SERIAL, - name TEXT - ); - - æèªåè½æçºä»¥ä¸SQLèªå¥ï¼ - CREATE SEQUENCE person_id_seq; - CREATE TABLE person ( - id INT4 NOT NULL DEFAULT nextval('person_id_seq'), - name TEXT - ); - - åè create_sequence æåé ç²åéæ¼åºåçæå¨çæ´å¤è³è¨ã - - 4.11.2) æå¦ä½ç²å¾ä¸åæå¥çåºåèçå¼ï¼ - - ä¸ç¨®æ¹æ³æ¯å¨æå¥ä¹ååç¨å½æ¸ nextval() å¾åºåå°è±¡è£¡æª¢ç´¢åºä¸ä¸å SERIAL - å¼ï¼ç¶å¾åç¨æ¤å¼ç²¾ç¢ºå°æå¥ãä½¿ç¨ 4.11.1 裡çä¾è¡¨ï¼å¯ç¨å½ç¢¼é樣æè¿°ï¼ - new_id = execute("SELECT nextval('person_id_seq')"); - execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')"); - - é樣éè½å¨å¶ä»æ¥è©¢ä¸ä½¿ç¨åæ¾å¨ new_id 裡çæ°å¼ï¼ä¾å¦ï¼ä½çºåç§ person - 表çå¤éµï¼ã 注æèªååµå»ºç SEQUENCE å°è±¡çå稱å°ææ¯ -
__seqï¼ é裡 table å serialcolumn - åå¥æ¯ä½ ç表çå稱åä½ ç SERIAL æ¬ä½çå稱ã - - é¡ä¼¼çï¼å¨ SERIAL å°è±¡é è¨æå¥å¾ä½ å¯ä»¥ç¨å½æ¸ currval() 檢索å賦å¼ç - SERIAL å¼ï¼ä¾å¦ï¼ - execute("INSERT INTO person (name) VALUES ('Blaise Pascal')"); - new_id = execute("SELECT currval('person_id_seq')"); - - 4.11.3) åæä½¿ç¨ currval() æå°è´åå¶ä»ç¨æ¶çè¡çªææ³åï¼ - - ä¸æãcurrval() è¿åçæ¯ä½ æ¬æ¬¡æ話é²ç¨æ賦çå¼èä¸æ¯ææç¨æ¶çç¶åå¼ã - - 4.11.4) çºä»éº¼ä¸å¨äºåç°å¸¸ä¸æ¢å¾éç¨åºåèå¢ï¼çºä»éº¼å¨åºåèæ¬ä½çåå¼ä¸åå¨éæ·å¢ï¼ - - çºäºæé«ä½µç¼æ§ï¼åºåèå¨éè¦çæå賦äºæ­ - £å¨éè¡çäºåï¼ä¸¦ä¸å¨äºåçµæä¹åä¸é²è¡éå®ï¼ éå°±æå°è´ç°å¸¸ä¸­ - æ¢çäºåå¾ï¼åºåèæåºç¾ééã - - 4.12) ä»éº¼æ¯ OID ï¼ä»éº¼æ¯ CTID ï¼ - - PostgreSQL 裡åµå»ºçæ¯ä¸è¡è¨éé½æç²å¾ä¸åå¯ä¸ç OIDï¼é¤éå¨åµå»ºè¡¨æä½¿ç¨ - WITHOUT OIDS é¸é ã OID åµå»ºææèªåçæä¸å 4ä½åçµçæ´æ¸ï¼ææ OID å¨ç¸æ - PostgreSQL 伺æå¨ä¸åæ¯å¯ä¸çã ç¶èï¼å®å¨è¶é 40åæå°æº¢åºï¼ OID æ­ - ¤å¾æåºç¾éè¤ãPostgreSQL å¨å®çå§é¨ç³»çµ±è¡¨è£¡ä½¿ç¨ OID - å¨è¡¨ä¹é建ç«è¯ç¹«ã - - å¨ç¨æ¶çè³æ表ä¸ï¼æ好æ¯ä½¿ç¨ SERIAl ä¾ä»£æ¿ OID å çº SERIAL åªè¦ä¿è­ - å¨å®å表ä¸çæ¸å¼æ¯å¯ä¸çå°±å¯ä»¥äºï¼é樣å®æº¢åºçå¯è½æ§å°±é常å°äºï¼ - SERIAL8 å¯ç¨ä¾ä¿å8ååçµçåºåæ¸å¼ã - - CTID ç¨æ¼æ¨è帶èè³æå¡ï¼å°åï¼åï¼å¡å§ï¼å移çç¹å®çç©çè¡ã CTID - å¨è¨é被æ´æ¹æéè¼å¾ç¼çæ¹è®ãç´¢å¼è³æ使ç¨å®åæåç©çè¡ã - - 4.13) çºä»éº¼ææ¶å°é¯èª¤è³è¨ãERROR: Memory exhausted in AllocSetAlloc()ãï¼ - - éå¾å¯è½æ¯ç³»çµ±çèæ¬å§åç¨åäºï¼æèå§æ ¸å°æäºè³æºæè¼ä½çéå¶å¼ãå¨åå - postmaster ä¹å試試ä¸é¢çå½ä»¤ï¼ - ulimit -d 262144 - limit datasize 256m - - å決æ¼ä½ ç¨ç - shellï¼ä¸é¢å½ä»¤åªæä¸æ¢è½æåï¼ä½æ¯å®å°æä½ çé²ç¨è³æ段éå¶è¨å¾æ¯è¼é«ï¼ - å èä¹è¨±è½è®æ¥è©¢å®æãéæ¢å½ä»¤æç¨æ¼ç¶åé²ç¨ï¼ä»¥åææå¨éæ¢å½ä»¤éè¡å¾åµå»ºç - åé²ç¨ã - å¦æä½ æ¯å¨éè¡SQL客æ¶ç«¯æå çºå¾å°è¿åäºå¤ªå¤çè³æèåºç¾åé¡ï¼è«å¨éè¡å®¢æ¶ç - «¯ä¹åå·è¡ä¸è¿°å½ä»¤ã - - 4.14) æå¦ä½æè½ç¥éæéè¡çPostgreSQLççæ¬ï¼ - - å¾ psql 裡ï¼è¼¸å¥ SELECT version();æ令ã - - 4.15) æå¦ä½åµå»ºä¸åé è¨å¼æ¯ç¶åæéçæ¬ä½ï¼ - - ä½¿ç¨ CURRENT_TIMESTAMPï¼ - CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); - - 4.16) ææ樣é²è¡ outer join ï¼å¤é£æ¥ï¼ï¼ - - PostgreSQL æ¡ç¨æ¨æºç SQL èªæ³æ¯æå¤é£æ¥ãé裡æ¯å©åä¾åï¼ - SELECT * - FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col); - - ææ¯ - SELECT * - FROM t1 LEFT OUTER JOIN t2 USING (col); - - éå©åçå¹çæ¥è©¢å¨ t1.col å t2.col ä¸åé£æ¥ï¼ä¸¦ä¸è¿å t1 中 - æææªé£æ¥çè¡ï¼é£äºå¨ t2 ä¸æ²æå¹éçè¡ï¼ã å³[å¤]é£æ¥ï¼RIGHT OUTER - JOINï¼å°è¿å t2 ä¸æªé£æ¥çè¡ã å®å¨å¤é£æ¥ï¼FULL OUTER JOINï¼å°è¿å t1 å t2 - ä¸æªé£æ¥çè¡ã ééµå OUTER å¨å·¦[å¤]é£æ¥ãå³[å¤]é£æ¥åå®å¨[å¤]é£æ¥ä¸­ - æ¯å¯é¸çï¼æ®éé£æ¥è¢«ç¨±çºå§é£æ¥ï¼INNER JOINï¼ã - - 4.17) å¦ä½ä½¿ç¨æ¶åå¤åè³æ庫çæ¥è©¢ï¼ - - æ²æ辦æ³æ¥è©¢ç¶åè³æ庫ä¹å¤çè³æ庫ã - å çºPostgreSQLè¦å è¼èè³æ庫ç¸éç系統ç®éï¼ç³»çµ±è¡¨ï¼ï¼å æ­ - ¤è·¨è³æ庫çæ¥è©¢å¦ä½å·è¡æ¯ä¸å®çã - - éå å¢å¼æ¨¡å¡ contrib/dblink - å許æ¡ç¨å½æ¸èª¿ç¨å¯¦ç¾è·¨åº«æ¥è©¢ãç¶ç¶ç¨æ¶ä¹å¯ä»¥åæé£æ¥å°ä¸åçè³æ庫å·è - ¡æ¥è©¢ç¶å¾å¨å®¢æ¶ç«¯åä½µçµæã - - 4.18) å¦ä½è®å½æ¸è¿åå¤è¡æå¤åè³æï¼ - - å¨å½æ¸ä¸è¿åè³æè¨ééçåè½æ¯å¾å®¹æ使ç¨çï¼è©³æåè¦ï¼ - http://techdocs.postgresql.org/guides/SetReturningFunctions - - 4.19) çºä»éº¼æå¨ä½¿ç¨ PL/PgSQL å½æ¸ååè¨æ表æææ¶å°é¯èª¤è³è¨ãrelation with OID - ##### does not existãï¼ - - PL/PgSQL æç·©åå½æ¸çè³æ¬å§å®¹ï¼ç±æ¤å¸¶ä¾çä¸åä¸å¥½çå¯ä½ç¨æ¯è¥ä¸å - PL/PgSQL - å½æ¸è¨ªåäºä¸åè¨æ表ï¼ç¶å¾è©²è¡¨è¢«åªé¤ä¸¦é建äºï¼åå次調ç¨è©²å½æ¸å°å¤ - ±æï¼ å çºç·©åçå½æ¸å§å®¹ä»ç¶æåèçè¨æ表ã解決çæ¹æ³æ¯å¨ PL/PgSQL 中 - ç¨EXECUTE å°è¨æ表é²è¡è¨ªåãé樣æä¿èæ¥è©¢å¨å·è¡å總æ被éæ°è§£æã - - 4.20) ç®åæåªäºè³æè¤å¯«(replication)æ¹æ¡å¯ç¨ï¼ - - ãè¤å¯«ãåªæ¯ä¸åè¡èªï¼æ好幾種è¤å¯«æè¡å¯ç¨ï¼æ¯ç¨®é½æåªé»å缺é»ï¼ - - 主/å¾å¼è¤å¯«æ¹å¼æ¯å許ä¸å主伺æå¨æ¥åè®/寫çç³è«ï¼èå¤åå¾ä¼ºæå¨åªè½æ¥å - è®/SELECTæ¥è©¢çç³è«ï¼ ç®åææµè¡ä¸åè²»ç主/å¾PostgreSQLè¤å¯«æ¹æ¡æ¯ - Slony-I ã - - å¤å主伺æå¨çè¤å¯«æ¹å¼å許å°è®/寫çç³è«ç¼é給å¤å°ç主æ©ï¼é種æ¹å¼ç±æ¼é - è¦å¨å¤å°ä¼ºæå¨ä¹éåæ¥è³æè®å å¯è½æ帶ä¾è¼å´éçæ§è½æ失ï¼Pgcluster - æ¯ç®åé種æ¹æ¡ä¸æ好çï¼ä¸¦ä¸éå¯ä»¥åè²»ä¸è¼ã - - ä¹æä¸äºåæ¥éä»è²»ååºæ¼ç¡¬é«çè³æè¤å¯«æ¹æ¡ï¼æ¯æä¸è¿°å種è¤å¯«æ¨¡åã - - 4.21) çºä½æ¥è©¢çµæ顯示ç表åææ¬åèæçæ¥è©¢èªå¥ä¸çä¸åï¼çºä½å¤§å¯«çæä¸è½ä¿çï¼ - - æ常è¦çåå æ¯å¨åµå»ºè¡¨æå°è¡¨åææ¯æ¬å使ç¨äºéå¼è( ' ' - )ï¼ç¶ä½¿ç¨äºéå¼èå¾ï¼è¡¨åææ¬åï¼ç¨±çºæ¨è符ï¼åå²ææ¯åå 大å°å¯«çï¼ - éæè¬èä½ å¨æ¥è©¢æ表åææ¬åä¹æ使ç¨éå¼èï¼ä¸äºå·¥å·è»é«ï¼å pgAdmin - æå¨ç¼åºåµå»ºè¡¨çæ令æèªåå°å¨æ¯åæ¨è符ä¸å éå¼èã å æ¤ï¼çºäºæ¨è­ - 符ççµ±ä¸ï¼ä½ æè©²ï¼ - * å¨åµå»ºè¡¨æé¿åå°æ¨è符使ç¨éå¼èå¼èµ·ä¾ã - * å¨æ¨è符ä¸åªä½¿ç¨å°å¯«åæ¯ã - * ï¼çºäºèå·²åå¨çæ¨è符ç¸åï¼å¨æ¥è©¢ä¸ä½¿ç¨éå¼èå°æ¨è符å¼èµ·ä¾ã diff --git a/doc/FAQ_czech b/doc/FAQ_czech deleted file mode 100644 index 99120e6060..0000000000 --- a/doc/FAQ_czech +++ /dev/null @@ -1,849 +0,0 @@ - - Frequently Asked Questions - - Casto kladené dotazy (FAQ) PostgreSQL - - Poslední aktualizace: 29. ríjna 2007 (aktualizováno pro PostgreSQL - 8.3) - - Soucasný správce: Bruce Momjian (bruce@momjian.us) - - Prelozil: Pavel Stehule (pavel.stehule@gmail.com) - - Nejaktuálnejsí verzi tohoto dokumentu naleznete na adrese - http://www.postgresql.org/files/documentation/faqs/FAQ.html - - Odpovedi na otázky vázané na konkrétní platformy naleznete na adrese - http://www.postgresql.org/docs/faq/. - _________________________________________________________________ - - Obecné otázky - - 1.1) Co je to PostgreSQL? Jaká je správná výslovnost slova PostgreSQL? - 1.2) Kdo rídí vývoj PostgreSQL? - 1.3) Pod jakou licencí je PostgreSQL? - 1.4) Na kterých platformách lze provozovat PostgreSQL? - 1.5) Kde mohu získat PostgreSQL? - 1.6) Jaká je poslední verze? - 1.7) Kde mohu získat podporu? - 1.8) Jak a kam hlásit chyby? - 1.9) Kde najdu informace o známých chybách nebo nepodporovaných - vlastnostech? - 1.10) Jaká je dostupná dokumentace? - 1.11) Jak se mohu naucit SQL? - 1.12) Jak se mohu pripojit k týmu vývojáru? - 1.13) Jak je na tom PostgreSQL v porovnání s jinými databázemi? - 1.14) Je PostgreSQL pripraven na aktuální zavádení letního casu v - nekterých zemích? - - Dotazy na klientská rozhraní - - 2.1) Která rozhraní jsou pouzitelná pro PostgreSQL? - 2.2) Jaké nástroje lze pouzít pro PostgreSQL a web? - 2.3) Existuje grafické rozhraní pro PostgreSQL? - - Administrativní dotazy - - 3.1) Jak nainstalovat PostgreSQL jinam nez do /usr/local/pgsql? - 3.2) Jak nastavit pravidla pro prístup z jiných stanic? - 3.3) Jak vyladit databázi na vyssí výkon? - 3.4) Jaké mám ladící prostredky? - 3.5) Co znamená "Sorry, too many clients", kdyz se zkousím pripojit? - 3.6) Proc je nutný dump a obnovení (load) databáze pri upgradu - PostgreSQL? - 3.7) Jaký hardware bych mel pouzívat? - - Provozní dotazy - - 4.1) Jak získat pouze první rádek dotazu? Náhodný rádek? - 4.2) Jak získám seznam tabulek, indexu, databází, a definovaných - uzivatelu. Mohu videt dotazy, které pouzívá psql pro zobrazení techto - informací? - 4.3) Jak zmenit datový typ sloupce? - 4.4) Jaká je maximální velikost rádku, tabulky a databáze? - 4.5) Kolik diskového prostoru je potreba k ulození dat z normálního - textového souboru? - 4.6) Muj dotaz je pomalý a nepouzívá vytvorené indexy. Proc? - 4.7) Jak zjistím, jak se vyhodnocuje muj dotaz? - 4.8) Jak pouzít case-(in)sensitive regulární výraz? Jak pouzít index - pro case insensitive hledání? - 4.9) Jak v dotazu detekovat, ze polozka je NULL? Jak bezpecne spojit - dva retezce, pokud mohou obsahovat NULL? Lze trídit podle toho, jestli - je polozka NULL nebo ne? - 4.10) Jaké jsou rozdíly mezi ruznými znakovými typy? - 4.11.1) Jak vytvorit serial/auto-increment polozku? - 4.11.2) Jak získat hodnotu SERIAL po vlození rádku? - 4.11.3) Nezpusobí currval() a nextval() problémy ve více uzivatelském - prostredí? - 4.11.4) Proc není vygenerované císlo pouzito pri prerusení - transakce?Proc vznikají díry v císlování prostrednictvím sekvence nebo - typu SERIAL? - 4.12) Co to je OID? Co je to CTID? - 4.13) Co znamená chybové hlásení "ERROR: Memory exhausted in - AllocSetAlloc()"? - 4.14) Jak zjistím, kterou verzi PostgreSQL pouzívám? - 4.15) Jak vytvorit sloupec, který bude implicitne obsahovat aktuální - cas? - 4.16) Jak provést vnejsí spojení (outer join)? - 4.17) Jak provést dotaz napríc nekolika databázemi? - 4.18) Muze funkce vrátit více rádku nebo sloupcu? - 4.19) Co je prícinou chyby "relation with OID xxxxx does not exist"? - 4.20) Jaké jsou moznosti replikace databází? - 4.21) Proc v dotazu nejsou rozpoznány názvy mých tabulek nebo funkcí? - Proc jsou velká písmena v názvech automaticky prevedena na malá - písmena? - _________________________________________________________________ - - Obecné otázky - - 1.1) Co je to PostgreSQL? Jaká je správná výslovnost slova PostgreSQL? - - Výslovnost PostgreSQL je Post-Gres-Q-L , nebo zjednodusene Postgres . - V rade jazyku je slovo PostgreSQL obtízne vyslovitelný, proto se v - hovoru casto pouzívá zjednodusená forma názvu. Pro ty, kterí by si - rádi poslechli výslovnost, je k dispozici audiozáznam v MP3 formátu. - - PostgreSQL je relacní databáze s nekterými objektovými rysy, která má - moznosti tradicních komercních databázových systému s nekolika - rozsíreními, které lze najít v DBMS systémech prístí generace. - Pouzívání PostgreSQL není omezené a veskeré zdrojové kódy jsou volne - dostupné. - - Za vývojem PostgreSQL je mezinárodní skupina nezávislých vývojáru - navzájem komunikujících prostrednictvím internetu. Tento projekt není - rízen zádnou obchodní organizací. Pokud se chcete pridat k projektu, - prectete si vývojárské FAQ na adrese - http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html . - - 1.2) Kdo rídí vývoj PostgreSQL? - - Pokud budete hledat organizaci rídící vývoj PostgreSQL, budete - zklamáni. Nic takového neexistuje. Existují pouze "core" a CVS skupiny - uzivatelu, ale ty existují více z administrátorských duvodu nez z - organizacních. Projekt je smerován komunitou vývojáru a uzivatelu, ke - které se kdokoliv muze pripojit. Jediné co potrebuje, je prihlásit se - do elektronické konference. Více ve vývojárském FAQ. - - 1.3) Pod jakou licencí je PostgreSQL? - - PostgreSQL je predmetem následujících autorských práv: - - Dílcí Copyright (c) 1996-2009, PostgreSQL Global Development Group - Dílcí Copyright (c) 1994-6, Regents of the University of California - - Udeluje se oprávnení k uzití, rozmnozování, provádení úprav a - rozsirování tohoto softwaru a dokumentace k nemu, pro jakékoli úcely, - bez licencního poplatku a bez písemné licencní smlouvy, za podmínky, - ze na vsech jeho kopiích je uvedeno oznámení o výse uvedených právech, - jakoz i obsah tohoto a dvou následujících odstavcu. - - THE UNIVERSITY OF CALIFORNIA ("KALIFORNSKÁ UNIVERZITA") NENÍ V ZÁDNÉM - PRÍPADE ODPOVEDNA ZÁDNÉ TRETÍ OSOBE ZA PRÍMOU, NEPRÍMOU, ZVLÁSTNÍ, - NAHODILOU NEBO VÝSLEDNOU SKODU, VCETNE USLÉHO ZISKU, ZPUSOBENOU UZITÍM - TOHOTO SOFTWARU A DOKUMENTACE K NEMU, A TO I V PRÍPADE, ZE THE - UNIVERSITY OF CALIFORNIA BYLA INFORMOVÁNA O MOZNOSTI VZNIKU TAKOVÉ - SKODY. - - THE UNIVERSITY OF CALIFORNIA ZEJMÉNA NEPOSKYTUJE JAKÉKOLI ZÁRUKY, A TO - NEJEN ZÁRUKY OBCHODOVATELNOSTI A VHODNOSTI TOHOTO VÝROBKU KE - SPECIFICKÝM ÚCELUM. NÍZE UVEDENÝ SOFTWARE JE POSKYTNUT "JAK STOJÍ A - LEZÍ" A THE UNIVERSITY OF CALIFORNIA NENÍ POVINNA ZAJISTIT JEHO - ÚDRZBU, PODPORU, AKTUALIZACI, VYLEPSENÍ NEBO MODIFIKACI. - - Výse uvedené je BSD licence, bezná licence otevreného zdroje. Není zde - zádné omezení ohledne uzití kódu zdroje. Jsme s tím spokojeni a nemáme - v úmyslu na této skutecnosti cokoli menit. - - 1.4) Na kterých platformách lze provozovat PostgreSQL? - - Strucne receno, PostgreSQL bezí na vsech moderních unixových - systémech. Seznam tech, u kterých probehlo testování, naleznete v - instalacních instrukcích. - - PostreSQL také bezí nativne na vsech Microsof Windows systémech - odvozených z Microsoft Windows NT jako jsou Windows 2000SP4, WindowsXP - a Windows2003. Instalacní balícek naleznete na adrese - http://pgfoundry.org/projects/pginstaller. Na starsích systémech s - jeste MS-DOS jádrem lze spustit PostgreSQL s emulacním programem - Cygwin. - - Dále existuje port pro Novell Netware 6 port na adrese - http://forge.novell.com, a pro OS/2 verze (eComStation) na adrese - http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgre - SQL&stype=all&sort=type&dir=%2F . - - 1.5) Kde mohu získat PostgreSQL? - - Pomocí webového klienta z adresy http://www.postgresql.org/ftp/ nebo - klienta ftp z adresy ftp://ftp.postgresql.org/pub/. - - 1.6) Jaká je poslední verze? - - Nejnovejsí verzí PostgreSQL je verze 8.2.5 - - V plánu je uvolnovat kazdorocne jednu velkou verzi a kazdých nekolik - mesícu malé verze. - - 1.7) Kde mohu získat podporu? - - Nejcastejsí forma podpory uzivatelum PostgreSQL komunitou je - prostrednictvím e-mailu. Na nasem webovém serveru naleznete odkaz na - stránky,kde se muzete prihlásit do elektronické konference. Pro - zacátek jsou doporucené konference general nebo bugs. - - Dalsí cestou je IRC kanál #postgresql na Freenode (irc.freenode.net). - K pripojení pouzijte Unixový príkaz irc -x '#postgresql' "$USER" - irc.freenode.net nebo jakékoholiv jiného IRC klienta. V této síti - existuje jeste spanelská (#postgresql-es) a francouzská - (#postgresqlfr) verze. Dalsí PostgreSQL kanál naleznete na EFNet. - - Seznam spolecností poskytující komercní podporu naleznete na adrese - http://techdocs.postgresql.org/companies.php. - - 1.8) Jak a kam hlásit chyby? - - Vyplnte formulár na adrese - http://www.postgresql.org/support/submitbug. Na nasem ftp serveru - ftp://ftp.postgresql.org/pub/ si overte, ze pouzíváte aktuální verzi - PostreSQL. - - Chyby reportované prostrednictvím chybového formuláre nebo zasláním - mailu do PostgreSQL konference obvykle generuje následující odezvu: - * Nejedná se o chybu, a proc - * Jedná se o známou chybu, která je jiz v seznamu úkolu TODO - * Tato chyba byla opravena v aktuální verzi - * Tato chyba byla jiz opravena ve verzi, která zatím nebyla - oficiálne uvolnena - * Pozadavek na dalsí doplnující informace: - + Operacní systém - + Verze PostgreSQL - + Test reprodukující chybu - + Ladící informace - + Backtrace výstup debuggeru - * Jedná se o zatím nezjistenou chybu, pak muzete cekat - + Záplatu odstranující chybu, která bude vlozena do dalsí velké - nebo malé verze - + Informaci, ze se jedná o chybu, kterou nelze okamzite resit a - je proto pridána do TODO - - 1.9) Kde najdu informace o známých chybách nebo nepodporovaných vlastnostech? - - PostgreSQL podporuje rozsírenou podmnozinu SQL:2003. V nasem TODO - naleznete seznam známých chyb, chybejících vlastností, a plány do - budoucna. - - Odezva na pozadavek na novou vlastnost PostgreSQL je obvykle: - * Pozadavek je jiz v TODO - * Pozadovaná funkce není chtená protoze - + Duplikuje jiz existující funkci, která respektuje SQL - standard - + Implementací funkce by se prílis zkomplikoval kód bez - relevantního prínosu - + Funkce by mohla být nebezpecná nebo nespolehlivá - * Pozadavek je pridán do TODO - - PostgreSQL nepozívá systém pro sledování chyb, protoze jsme zjistili, - ze je efektivnejsí prímo reagovat na maily a udrzovat aktuální TODO. V - praxi je snaha o co nejrychlejsí resení chyb, a chyby, které by se - mohly projevit u mnoha uzivatelu jsou opravovány velice rychle. Jediné - místo, kde lze dohledat vsechny zmeny, rozsírení a opravy v PostgreSQL - je CVS log. Poznámky k verzi "Release notes" nezachycují vsechny - zmeny, k nemz doslo. - - 1.10) Jaká je dostupná dokumentace? - - PostgreSQL obsahuje vynikající dokumentaci zahrnující manuál, - manuálové stránky a testovací príklady. Podívejte se do adresáre /doc. - Manuál je prístupný online na http://www.postgresql.org/docs. - - K dispozici jsou zdarma dve online knihy na adresách - http://www.postgresql.org/docs/books/awbook.html a - http://www.commandprompt.com/ppbook/. Dalsí literaturu lze zakoupit. - Nejpopulárnejsí je od Kerryho Douglase. Seznam dostupné literatury je - na http://techdocs.postgresql.org/techdocs/bookreviews.php. Jeste je - kolekce technicky orientovaných clánku tematicky spojených s - PostgreSQL na adrese http://techdocs.postgresql.org/. - - Rádkový klient psql má \d príkazy pro zobrazení informací o typech, - operátorech, funkcích, agregacních funkcí, atd. Pouzijte \? pro - zobrazení dostupných príkazu. - - Dalsí dokumentaci najdete na nasem webu. - - 1.11) Jak se mohu naucit SQL? - - Podívejte se do výse uvedené dokumentace. Dalsí online knihou je - "Teach Yourself SQL in 21 Days, Second Edition" na adrese - http://members.tripod.com/er4ebus/sql/index.htm. Mnoho nasich - uzivatelu doporucuje knihu The Practical SQL Handbook, Bowman, Judith - S., et al., Addison-Wesley. Dalsí The Complete Reference SQL, Groff et - al., McGraw-Hill. - - Dalsí online tutoriály jsou dostupné na adresách: - * 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) Jak se mohu pripojit k týmu vývojáru? - - Prostudujte si Developer's FAQ. - - 1.13) Jak je na tom PostgreSQL v porovnání s jinými databázemi? - - Software muzeme porovnávat z nekolika ruzných pohledu: vlastnosti, - výkon, spolehlivost, podpora a cena. - - Vlastnosti - - PostgreSQL nabízí vetsinu funkcí funkcionality velkých komercních DBMS - systému jako jsou: transakce, vnorené dotazy, spouste, referencní - integrita a sofistikovaný systém zamykání. Poskytujeme urcité funkce, - které ostatní systémy bezne nepodporují. Napr. uzivatelem definované - typy, dedicnost, pravidla (rules), a MVCC architekturu. - - Výkon - - Výkon PostgreSQL je srovnatelný s ostatními komercními nebo Open - Source databázemi. V nekterých prípadech je rychlejsí, jindy - pomalejsí. Nás výkon je obvykle +/-10% vuci ostatním databázím. - - Spolehlivost - - Uvedomujeme si, ze databáze musí být stoprocentne spolehlivá, jinak je - nepouzitelná. Snazíme se, aby kazdá verze byla dobre otestována a - obsahovala minimum chyb. Kazdá verze je minimálne nekolik mesícu v - beta testovacím rezimu. Do produkcního rezimu se dostane, az kdyz - nedochází k dalsím zmenám nebo opravám. Veríme, ze jsem více nez - srovnatelní s ostatními databázemi v této oblasti. - - Podpora - - Na nasich internetových konferencích se setkává velká skupina vývojáru - a uzivatelu pri resení vyskytujících se problému. Nase internetové - konference umoznují kontakt velké skupiny vývojáru a uzivatelu. - Nemuzeme garantovat opravu chyby, ale komercní DBMSs také vzdy - negarantují resení problému. Veríme ale, ze díky prímému kontaktu na - vývojáre, nasi uzivatelskou komunitu, manuálum, a dostupným zdrojovým - kódum máme lepsí podporu nez ostatní DBMSs. Pro ty, kterí preferují - komercní "per-incident" podporu, existuje spolecností, kterí ji - nabízejí (FAQ sekce 1.7.) - - Cena - - PostgreSQL lze pouzívat bezplatne (a to i pro komercní pouzití). Také - muzete neomezene pouzívat nás kód ve svých produktech s výjimkami - specifikovanými v nasí licenci (prebíráme BSD licenci). - - 1.14) Je PostgreSQL pripraven na aktuální zavádení letního casu v nekterých - zemích? - - Pocínaje verzí 8.0.[4+] podporuje PostgreSQL letní cas také pro USA. - Podpora letního casu (daylight saving time) pro Kanadu a Západní - Austrálii je obsazena ve verzích 8.0.[10+] a 8.1.[6+] a vsech - následujících verzích. Starsí verze pouzívaly systémovou databázi - casových zón obsahující, krome jiného, informaci o tom, zda se pro - danou casovou zónu rozlisuje mezi letním a zimním casem. - _________________________________________________________________ - - Dotazy na klientská rozhraní - - 2.1) Která rozhraní jsou pouzitelná pro PostgreSQL? - - PostgreSQL se distribuuje pouze s rozhraním pro jazyk C a embedded C. - Vsechna dalsí rozhraní predstavují nezávislé projekty, které je treba - stáhnout z internetu samostatne. Osamostatnení techto projektu - umoznuje nezávislost vývojových týmu a moznost vydávat nové verze bez - ohledu na vydání nové verze PostgreSQL. - - Nekteré programovací jazyky jako je napr. PHP obsahují rozhraní pro - PostgreSQL. Rozhraní pro jazyky jako je Perl, Tcl, Python a mnoho - dalsích jsou dostupné na adrese: http://gborg.postgresql.org v sekci - Drivers/Interfaces. - - 2.2) Jaké nástroje lze pouzít pro PostgreSQL a web? - - Dobrým úvodem do problematiky databází v prostredí webových stránek - muze být web http://www.webreview.com. - - PHP (http://www.php.net) je vynikajícím rozhraním pro tvorbu webu. - - Pro slozitejsí úlohy se casto pouzívá Perl a jeho BDB:Pg rozhraní s - podporou CGI - CGI.pm nebo mod_perl(u). - - 2.3) Existuje grafické rozhraní pro PostgreSQL? - - K dispozici je rada grafických nástroju podporujících PostgreSQL a to - od komercních nebo open source vývojáru. Podrobný seznam naleznete na - adrese http://www.postgresql.org/docs/techdocs.54. - _________________________________________________________________ - - Administrativní dotazy - - 3.1) Jak nainstalovat PostgreSQL jinam nez do /usr/local/pgsql? - - Pri spoustení configure nastavte parametr --prefix - - 3.2) Jak nastavit pravidla pro prístup z jiných stanic? - - Ve výchozí konfiguraci, PostgreSQL umoznuje pouze pripojení z - lokálního uzivatele prostrednictvím Unix domain sockets nebo TCP/IP - spojení. Bez modifikace listen_addresses v souboru postgresql.conf, a - povolení adresy v souboru $PGDATA/pg_hba.conf se nelze pripojit k - PostgreSQL z ostatních stanic. Zmena výse zmínených parametru vyzaduje - restart databázového serveru. - - 3.3) Jak vyladit databázi na vyssí výkon? - - Výkon systému muzete ovlivnit ve trech oblastech: - - Zmeny dotazu - - * Pouzitím indexu vcetne cástecných a funkcionálních - * Pouzitím COPY místo opakovaných INSERTu - * Sloucením mnoha SQL príkazu do jedné transakce snízením rezie na - commit - * Pouzíváním CLUSTERU, pokud nacítáte vetsí pocet rádek podle indexu - * Pouzitím klauzule LIMIT v poddotazech - * Pouzitím predpripravených dotazu - * Pouzíváním ANALYZE. Tento príkaz aktualizuje statistiky, které se - pouzívají pri optimalizaci dotazu - * Pravidelné pouzití VACUUM nebo pouzívání pg_autovacuum - * Odstranením indexu pred rozsáhlými zmenami v datech - - Konfigurace serveru - - Urcité parametry v souboru postgresql.conf mají vliv na výkon serveru. - Detaily naleznete v prírucce Administrátora v Server Run-time - Environment/Run-time Configuration. Dalsí komentáre naleznete v - http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.ht - ml a http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html. - - Výber hardware - - Vliv hardware na výkon serveru je popsán v dokumentech - http://candle.pha.pa.us/main/writings/pgsql/hw_performance/index.html - a http://www.powerpostgresql.com/PerfList/. - - 3.4) Jaké mám ladící prostredky? - - Nastavením log_* promenných v konfiguraci serveru si vynutíte logování - dotazu a procesních statistik, které Vám mohou pomoci pri ladení a - optimalizaci výkonu. - - 3.5) Co znamená "Sorry, too many clients", kdyz se zkousím pripojit? - - Prekrocil jste výchozí limit, který je 100 soucasne pripojených - uzivatelu. V konfiguraci serveru v postgresql.conf tuto hodnotu muzete - zvetsit zmenou hodnoty max_connection. Nezapomente restartovat server. - - 3.6) Proc je nutný dump a obnovení (load) databáze pri upgradu PostgreSQL? - - Zpusob císlování je popsán v dokumentaci na - http://www.postgresql.org/support/versioning. Instrukce k provedení - migrace na vyssí verzi jsou taktéz v dokumentaci na adrese - http://www.postgresql.org/docs/current/static/install-upgrading.html. - - 3.7) Jaký hardware bych mel pouzívat? - - Jelikoz PC jsou vetsinou kompatibilní, lidé mají tendence verit, ze - vsechna PC jsou stejne kvalitní. Coz není pravda. Pameti ECC, SCSI a - kvalitní základní desky jsou mnohem spolehlivejsí a výkonnejsí nez - lacinejsí hardware. PostgreSQL pobezí na vetsine hardwaru, nicméne - pokud je pro Vás spolehlivost a výkon systému dulezitá, je dobré - venovat cas nalezení vhodné hardwarové konfigurace. Na nasich - elektronických konferencích muzete diskutovat o vhodných konfiguracích - a znackách. - _________________________________________________________________ - - Provozní dotazy - - 4.1) Jak získat pouze první rádek dotazu? Náhodný rádek? - - Pokud potrebujete pouze nekolik rádku a pokud víte kolik, pouzijte - SELECT LIMIT. Pokud bude mozné pouzít index shodující se s ORDER BY, - je mozné, ze se nebude provádet celý dotaz. Pokud neznáte pocet - záznamu, pouzijte kurzor a príkaz FETCH. - - Pro výber náhodného rádku pouzijte príkaz ve tvaru: -SELECT col -FROM tab -ORDER BY random() -LIMIT 1; - - 4.2) Jak získám seznam tabulek, indexu, databází, a definovaných uzivatelu. - Mohu videt dotazy, které pouzívá psql pro zobrazení techto informací? - - V psql príkazem \dt získáte seznam tabulek. Úplný seznam príkazu psql - získáte príkazem \?. Alternativne si muzete prostudovat zdrojový kód - psql - soubor pgsql/src/bin/psql/describe.c, který obsahuje SQL - príkazy, které jsou generovány pro získání výstupu psql "backslash" - príkazu. Také muzete nastartovat psql s parametrem -E, který zpusobí - zobrazení vsech SQL príkazu, které se odesílají na server. PostgreSQL - také podporuje SQL standard INFORMACNÍ SCHÉMATA (standardní systémové - tabulky). Klasickým dotazem do systémových tabulek získáte pozadované - informace o strukture databáze. - - Systémové tabulky PostgreSQL (mimo rámec SQL standardu) pouzívají - prefix pg_. Pro zjistení struktury databáze je muzete pouzít také, i - kdyz preferovány jsou dotazy do informacního schématu. - - Seznam vsech databází získáte príkazem psql -l - - Dalsí inspiraci najdete v souboru pgsql/src/tutorial/syscat.source. - Obsahuje ilustracní SELECTy potrebné k získání informací z systémových - tabulek databáze. - - 4.3) Jak zmenit datový typ sloupce? - - Ve verzích 8.0 a pozdejsích jednoduse: -ALTER TABLE ALTER COLUMN TYPE - - V starsích verzích: -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; - - Po zmene spustte príkaz VACUUM FULL, aby doslo k uvolnení diskového - prostoru pouzitého v tu chvíli jiz neplatnými záznamy. - - 4.4) Jaká je maximální velikost rádku, tabulky a databáze? - - PostgreSQL má tato omezení: - - Maximální velikost databáze: neomezena (existují 32TB db) - Maximální velikost tabulky: 32 TB - Maximální velikost rádky: 480GB - Maximální velikost polozky 1 GB - Maximální pocet rádku v tabulce: neomezeno - Maximální pocet sloupcu v tabulce: 250-1600 podle typu - Maximální pocet indexu na tabulce: neomezeno - - Ve skutecnosti nic není neomezeno, limitem bývá vzdy dostupná disková - pamet nebo velikost operacní pameti. Pokud máte nekterou z techto - hodnot neobvykle velkou, muze dojít ke snízení výkonu. - - Maximální velikost tabulky je 32 TB a nevyzaduje podporu velkých - souboru operacním systémem. Velké tabulky se ukládají do nekolika 1 GB - souboru takze limity souborového systému nejsou podstatné. - - Maximální velikost tabulky a maximální pocet sloupcu muzeme - zectyrnásobit nastavením velikosti bloku na 32K. - - Indexy jsou povolené pouze na sloupcích jejichz délka je mensí nez - 2000 znaku. Pokud tuto délku prekrocíme a index potrebujeme pro - zajistení jednoznacnosti, je vhodnejsí pouzít funkcionální index nad - MD5 funkcí nebo fulltextový index. - - 4.5) Kolik diskového prostoru je potreba k ulození dat z normálního textového - souboru? - - PostgreSQL vyzaduje az petinásobek diskového prostoru k ulození dat z - textového souboru. - - Napríklad, uvazujme soubor se 100 tisíci rádky obsahující na kazdé - rádce celé císlo a textový popis. Text je v prumerne dvacet bytu - dlouhý. Textový soubor bude 2.8 MB dlouhý. Velikost databáze - obsahující odpovídající data bude zhruba 5.2 MB. - 24 bytu: hlavicka rádku (priblizne) - 24 bytu: jedna celocíselná polozka a jedna textová - + 4 byty: ukazatel na stránku k entici - ------------------------------------------------------ - 52 bytu na rádek - - Velikost datové stránky PostgreSQL je 8192 bytu (8KB) - 8192 bytu na stránce ----------------------- = 158 rádek na stránku - 52 bytu za rádek - -100000 rádek ------------------------ = 633 stránek (zaokrouhleno nahoru) - 158 rádek na stránce - -633 datových stránek * 8192 bytu na kazdou stránku = 5,185,536 bytu (5.2 MB) - - Indexy nemají tak velkou rezii, ale mohou být také velké, protoze - obsahují indexovaná data. - - Hodnoty NULL jsou ulozeny v bitmapách, takze zabírají jen velmi málo - diskového prostoru. - - 4.6) Muj dotaz je pomalý a nepouzívá vytvorené indexy. Proc? - - Kazdý dotaz nemusí nutne pouzít existující indexy. Index se pouzije - tehdy, kdyz je tabulka vetsí nez urcitá minimální velikost, a dotaz - vybírá pouze procentuálne malou cást rádku tabulky. To proto, ze - náhodný prístup k disku daný ctením indexu muze být pomalejsí nez - lineární ctení tabulky nebo sekvencní ctení. - - PostgreSQL rozhoduje o pouzití indexu na základe statistiky prístupu k - tabulce. Tyto statistiky se shromazdují príkazy VACUUM ANALYZE nebo - ANALYZE. Díky statistikám má optimizer informaci o poctu rádek v - tabulce a muze lépe rozhodnout o pouzití indexu. Statistiky se uplatní - pri urcení optimálního poradí a metody spojení tabulek. Statistiky by - se meli aktualizovat opakovane, tak jak se mení obsah tabulek. - - Indexy nejsou obycejne pouzity pro setrídení nebo spojení tabulek. - Sekvencní zpracování následované explicitním trídením je obycejne - rychlejsí nez pouzití indexu na velké tabulce. - - Jinak je tomu v prípade pouzití LIMIT a ORDER BY, pri kterém se - vetsinou index pouzije, jelikoz je výsledkem pouze malá cást tabulky. - - Pokud si myslíte, ze optimizer mylne zvolil sekvencní prohledávání - tabulky, pouzijte príkaz SET enable_seqscan TO 'off' a zkuste zda je - prohledávání s indexem rychlejsí. - - Pri vyhledávání na základe vzoru jako je napr. operátor LIKE nebo ~ se - indexy pouzijí pouze za urcitých skutecností: - * zacátek hledaného vzoru musí být ukotven k zacátku, tj. - + vzor LIKE nesmí zacínat % - + ~ regulární výraz musí zacínat ^ - * vzor nesmí zacínat intervalem, napr. [a-e] - * vyhledávaní, které není Case sensitiv jako je ILIKE nebo ~* - nepouzívá indexy. Muzete ale pouzít funkcionální indexy, které - jsou popsány v sekci 4.8 - * pri inicializaci databáze (initdb) musí být pouzito C locale nebo - vytvorte speciální text_pattern_index, který umozní, pri - respektování zmínených podmínek pouzití indexu operací LIKE. Pro - vyhledávání celých slov je mozné a výhodné pouzít fulltext. - - 4.7) Jak zjistím, jak se vyhodnocuje muj dotaz? - - Podívejte se do nápovedy k príkazu EXPLAIN. - - 4.8) Jak pouzít case-(in)sensitive regulární výraz? Jak pouzít index pro case - insensitive hledání? - - Vyhledávání prostrednictvím regulárních vzoru zajistuje operátor ~, - který je case-sensitive. Jeho case-insensitive varianta je operátor - ~*. Case-insensitive variací operátoru LIKE je operátor ILIKE. - - Case-insensitive vyhledání se resí: -SELECT * -FROM tab -WHERE lower(col) = 'abc'; - - Tento dotaz nepouzije standardní index. Musíte pouzít tzv. - funkcionální index: -CREATE INDEX tabindex ON tab (lower(col)); - - Pokud index vytvoríme jako unikátní, tak muzeme ukládat retezce - obsahující malá i velká písmena, ale nikoliv retezce, které se od sebe - odlisují jen v malých a velkých písmenech. K zajistení zápisu retezce - obsahující pouze malá nebo pouze velká písmena pouzijte CHECK kontroly - nebo triggery. - - 4.9) Jak v dotazu detekovat, ze polozka je NULL? Jak bezpecne spojit dva - retezce, pokud mohou obsahovat NULL? Lze trídit podle toho, jestli je polozka - NULL nebo ne? - - Pokud chcete testovat hodnotu NULL pouzijte operátor IS: - SELECT * - FROM tab - WHERE col IS NULL; - - K spojení retezcu, které mohou obsahovat hodnotu NULL, pouzívejte - funkci COALESCE(), napr.: - SELECT COALESCE(col1, '') || COALESCE(col2, '') - FROM tab - - Pokud chcete trídit podle hodnoty NULL, pouzijte výraz IS NULL nebo IS - NOT NULL v klauzuli ORDER. Hodnota pravda má prednost pred hodnotou - false a tedy pokud pouzijete: - SELECT * - FROM tab - ORDER BY (col IS NOT NULL) - - tak záznamy s NULL budou na zacátku setrídených dat. - - 4.10) Jaké jsou rozdíly mezi ruznými znakovými typy? - - Typ Interní název Poznámky - VARCHAR(n) varchar n urcuje maximální délku - CHAR(n) bpchar retezec je do dané délky rozsíren mezerami - TEXT text bez omezení délky - BYTEA bytea pole bytu nespecifikované délky - "char" char jeden znak - - Na interní názvy muzete narazit v systémovém katalogu nebo v nekterých - chybových hláseních. - - Ctyri první typy jsou tzv. varlena typy (první ctyri byty na disku - jsou obsahují délku, ostatní obsahují vlastní data). Skutecne obsazený - prostor je tedy o neco málo vetsí nez deklarovaná velikost. Na druhou - stranu, delsí retezce jsou komprimovány, takze obsazený prostor na - disku muze být mensí nez se ceká. - - VARCHAR(n) je vhodný pro ukládání ruzne dlouhých retezcu u kterých - známe délkové omezení, TEXT pro retezce bez omezení délky (maximum je - jeden gigabyte). - - CHAR(n) se pouzívá pro ulození stejne dlouhých retezcu. CHAR(n) doplní - mezerami na specifikovanou délku, VARCHAR(n) hodnoty se ukládají tak - jak jsou. BYTEA je pro ukládání binárních dat - non ASCII hodnot. - Vsechny zmínené typy mají podobné výkonové charakteristiky. - - 4.11.1) Jak vytvorit serial/auto-increment polozku? - - V PostgreSQL muzete pouzít datový typ SERIAL. Jeho pouzitím se - automaticky vytvorí sekvence. Napríklad: -CREATE TABLE person ( - id SERIAL, - name TEXT -); - - je automaticky transformováno na: -CREATE SEQUENCE person_id_seq; -CREATE TABLE person ( - id INT4 NOT NULL DEFAULT nextval('person_id_seq'), - name TEXT -); - - Podrobnejsí informace najdete v manuálu v popisu príkazu - create_sequence. - - 4.11.2) Jak získat hodnotu SERIAL po vlození rádku? - - Nejjednodussím zpusob, jak získat vygenerovanou hodnotu typu SERIAL, - je vyuzít klauzuli RETURNING. Pro tabulku z 4.11.1 vypadá takto: -INSERT INTO person (name) VALUES ('Blaise Pascal') RETURNING id; - - Také muzete pouzít funkci nextvall() a její výsledek pouzít v príkazu - INSERT, nebo zavolat currval() po provedení príkazu INSERT. - - 4.11.3) Nezpusobí currval() a nextval() problémy ve více uzivatelském - prostredí? - - Ne, currval vrací vzdy hodnotu, která byla vygenerována pro vás. - - 4.11.4) Proc není vygenerované císlo pouzito pri prerusení transakce?Proc - vznikají díry v císlování prostrednictvím sekvence nebo typu SERIAL? - - Poté co sekvence vygeneruje nové císlo, tak se nedochází k zamcení - sekvence a neceká se na úspesné nebo neúspesné dokoncení transakce. - Odvoláním transakce, která si vyzádala císla sekvence se tato císla - nenávratne ztratí. - - 4.12) Co to je OID? Co je to CTID? - - V prípade, ze tabulku nezalozíme s atributem WITHOUT OIDS, tak má - kazdý rádek unikátní identifikacní císlo OID. Toto císlo je 4 bajtové - celé císlo, které je jedinecné v celé instalaci. Pretece po 4 - miliardách rádku. PostgreSQL pouzívá OIDs jako interní linky v - interních systémových tabulkách. - - K získání unikátního císla v nesystémových tabulkách je vhodnejsí - pouzití typu SERIAL nez OID, jelikoz sekvence SERIAL se pouzívá pouze - pro jednu tabulku a je tudíz méne náchylná na pretecení. Pokud byste - se toho obávali, pouzijte typ SERIAL8. - - CTID se pouzívá k identifikaci konkrétního fyzického rádku. CTID se - mení pokud je rádek modifikován nebo znovu nacten. Pouzívají ho indexy - jako adresaci fyzických rádku. - - 4.13) Co znamená chybové hlásení "ERROR: Memory exhausted in - AllocSetAlloc()"? - - Pravdepodobne jste vycerpal dostupnou virtuální pamet, nebo tvuj - kernel má prílis nízké limity u urcitých zdroju. Pred startem - PostgreSQL vyzkousejte: -ulimit -d 262144 -limit datasize 256m - - Mozná, ze se projde pouze jeden príkaz - zálezí to na vasem shellu. - Mel by zvednout limity datových segmentu vasich procesu na dostatecne - velkou hodnotu a snad umoznit dokoncení dotazu. Zmena limitu se bude - aplikovat pouze na aktuální proces a na vsechny nove vytvorené - procesy. Jestlize máte problém s SQL klientem, protoze vám server - vrátil prílis dat, zkuste to pred startem klienta. - - 4.14) Jak zjistím, kterou verzi PostgreSQL pouzívám? - - V psql napiste: -SELECT version(); - - 4.15) Jak vytvorit sloupec, který bude implicitne obsahovat aktuální cas? - - Pouzijte CURRENT_TIMESTAMP: -CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); - - 4.16) Jak provést vnejsí spojení (outer join)? - - PostgreSQL podporuje standardní SQL syntaxi pro vnejsí spojení. Zde - jsou dva príklady: -SELECT * -FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col); - - nebo -SELECT * -FROM t1 LEFT OUTER JOIN t2 USING (col); - - Tyto identické dotazy spojí sloupec t1.col k sloupci t2.col, a jeste - vrátí vsechny nespárované rádky t2 (ty, které nedohledá v t2). RIGHT - JOIN by pripojil vsechny nespárované rádky z t2. FULL JOIN vrátí - vsechny spárované rádky i vsechny zbývající rádky z obou tabulek. - Klícové slovo OUTER je volitelné. Bezná operace JOIN se také oznacuje - jako vnitrní spojení. - - 4.17) Jak provést dotaz napríc nekolika databázemi? - - Neexistuje zádný zpusob, jak se v dotazu odkazovat na tabulky z jiné - nez aktuální databáze. A to protoze má systémové tabulky ulozené - nezávisle v kazdé databázi a není tak úplne zrejmé, jak by se dotaz - provedený napríc databázemi mel chovat. - - Jeden z doplnku dblink umoznuje dotaz nad nekolika tabulkami pomocí - funkcí. Druhý zpusob je simultální pripojení klienta ke vsem - relevantním databázím a sloucení výsledku na strane klienta. - - 4.18) Muze funkce vrátit více rádku nebo sloupcu? - - Jde to jednoduse pomocí set-returning funkce. Více na - http://www.postgresql.org/docs/techdocs.17. - - 4.19) Co je prícinou chyby "relation with OID xxxxx does not exist"? - - Nechteným vedlejsím efektem kesování SQL dotazu v PL/pgSQL funkci je - problém s neplatnými odkazy na docasné tabulky, které byly od prvního - spustení funkce zruseny a znovu vytvoreny pred dalsím spustením - PL/pgSQL funkce. Resením je pouzít príkaz EXECUTE a to proto, ze - provádecí plán SQL príkazu spousteného príkazem EXECUTE se vytvárí - pokazdé znovu (neukládá se do cache). - - Tento problém by se nemel vyskytovat u PostgreSQL verze 8.3 a vyssích - verzích. - - 4.20) Jaké jsou moznosti replikace databází? - - Replikaci databáze umoznuje nekolik technoligií. Kazdá má urcité - výhody a nevýhody. - - Master/Slave replikaci podporuje jeden hlavní server, který prijímá - pozadavky na zápis a ctení, a nekolik podrízených serveru, které - umoznují pouze ctení (SELECT). Nejrozsírenejsím volne dostupným - resením tohoto typu je Slony-I. - - Replikace typu Multi-master podporuje existenci nekolika serveru s - povoleným zápisem na více replikovaných serverech. Toto resení zvysuje - zátez serveru, protoze je nutná synchronizace serveru. - Nejrozsírenejsím volne dostupným resením je PGCluster. - - Jeste existuje nekolik komercních a hardware resení replikací - podporujících ruzné modely replikace. - - 4.21) Proc v dotazu nejsou rozpoznány názvy mých tabulek nebo funkcí? Proc - jsou velká písmena v názvech automaticky prevedena na malá písmena? - - Nejcastejsím duvodem nerozpoznání názvu objektu bylo pouzití vlození - názvu sloupce nebo tabulky mezi uvozovky pri zakládání tabulky. Pokud - se název zapíse mezi uvozovky, pak je case sensitive, a v dusledku - toho je nutné názvy techto sloupcu nebo tabulek v SQL príkazech také - vkládat mezi uvozovky (pokud obsahují velká písmena). Nekteré - programy, jako je napríklad pgAdmin, automaticky pouzívají uvozovky. - Takze pokud chcete, aby systém identifikoval identifikátor, musíte: - * nepouzívat uvozovky v príkazu CREATE TABLE - * v identifikátoru pouzít pouze malá písmena - * v dotazech vkládat identifikátory do uvozovek diff --git a/doc/FAQ_farsi b/doc/FAQ_farsi deleted file mode 100644 index 95b28bb9b6..0000000000 --- a/doc/FAQ_farsi +++ /dev/null @@ -1,1256 +0,0 @@ -PostgreSQL FAQسوالاتي كه اغلب در مورد PostgreSQL‌ -پرسيده مي شوند -تاريخ آخرين اصلاح اين فايل: 28 شهریور 1383 هجری -شمسی -نگهدارنده اصلي فايل (زبان انگليسي)در حال -حاضر : Bruce Momjian pgman@candle.pha.pa.us -نگهدارنده فايل به زبان فارسي: m.taghizadeh@imenafzar.net - محمود تقي‌زاده مهرجردی - -آخرين نسخه اين فايل را مي‌توانيد از اين -آدرس بگيريد http://www.PostgreSQL.org/docs/faqs/FAQ.html -سوالاتي كه در مورد يك سکوی(پلتفرم) خاص است در -اين آدرس جواب داده شده اند -http://www.PostgreSQL.org/docs/index.html - - - -سوالات عمومي -1.1) PostgreSQL چيست Ùˆ چگونه بايد آن را تلفظ كرد؟ -1.2) قانون كپي رايت‌ (حقوق معنوي) در مورد -PostgreSQL به Ú†Ù‡ صورت است؟ -1.3) PostgreSQL‌ روي Ú†Ù‡ نوع يونيكسهايي اجرا -مي‌شود؟ -1.4) روي Ú†Ù‡ محيطهاي غير يونيكسي مي‌توان آن را -اجرا كرد؟ -1.5) PostgreSQL را از كجا مي‌توانم بگيرم؟ -1.6) از كجا خدمات پشتيباني بگيرم؟ -1.7) آخرين نسخه اعلام شده چيست؟ -1.8) Ú†Ù‡ مستندات Ùˆ راهنمائيهايي وجود دارند؟ -1.9) چگونه مي‌توانم ازاشكالات شناخته شده Ùˆ يا -امكاناتي كه در اين پايگاه داده وجود ندارد -مطلع شوم؟ -1.10) چگونه مي‌توانم زبان SQL را ياد بگيرم؟ -1.11) آيا PostgreSQL مشكل Y2K‌ دارد يا خير؟ -1.12) چگونه مي‌توانم به تيم برنامه نويس PostgreSQL -ملحق شوم؟ -1.13) چگونه مي‌توانم يك اشكال را به گروه -برنامه نويس اعلام كنم؟ -1.14) وضعيت PostgreSQL‌ در مقايسه با ساير DBMSها به -Ú†Ù‡ صورت است؟ -1.15) من چگونه مي‌توانم از نظر مالي به PostgreSQL -كمك كنم؟ - -سوالات مربوط به استفاده از پايگاه داده -2.1) آيا هيچ درايور ODBC‌ براي PostgreSQL وجود دارد؟ -2.2) Ú†Ù‡ ابزارهايي براي استفاده از PostgreSQL‌ با -صفحات وب وجود دارد؟ -2.3) آيا PostgreSQL‌ يك واسط كاربري گرافيكي دارد؟ -2.4) با Ú†Ù‡ زبانهاي برنامه‌نويسي مي‌توان با -PostgreSQL‌ ارتباط برقرار كرد؟ - -سوالات مربوط به راهبري -3.1) چگونه مي‌توانم PostgreSQL‌ را در شاخه‌اي غير -از /usr/local/pgsql/ نصب كنم؟ -3.2) چرا موقعي كه من برنامه postmaster‌ را اجرا مي -كنم پيام Bad system call‌ Ùˆ يا core dump ‌مي‌گيرم؟ -3.3) چرا موقعي كه من سعي مي‌كنم برنامه postmaster‌ -را اجرا كنم خطاي IpcMemoryCreate مي‌گيرم؟ -3.4) چرا موقعي كه من سعي مي‌كنم برنامه postmaster‌ -را اجرا كنم خطاي IpcSemaphoreCreate مي‌گيرم؟ -3.5) چگونه مي‌توانم اتصالات ساير ماشينها را -كنترل كنم؟ -3.6) براي كارايي بالاتر Ùˆ بهتر پايگاه داده من -Ú†Ù‡ تنظيماتي را بايد انجام دهم؟ -3.7) Ú†Ù‡ امكاناتي براي پيدا كردن اشكال‌ وجود -دارد؟ -3.8) چرا موقعي كه من مي‌خواهم به پايگاه داده -وصل شوم پيام "Sorry, too many clients" ‌مي‌گيرم؟ -3.9) در شاخه pgsql_tmp Ú†Ù‡ چيزي قرار دارد؟ -3.10) چرا براي به روز كردن نسخه پايگاه داده من -بايد كل داده ها را dump‌ Ùˆ مجدداً restore كنم؟ -3.11) از Ú†Ù‡ سخت افزاري بايد استفاده كنم؟ - -سوالات عملياتي -4.1) تفاوت بين binary cursors Ùˆ Normal cursors چيست؟ -4.2) من چگونه مي‌توانم فقط روي چند رديف اول يا -يك رديف تصادفي درخواست SELECT‌ بزنم؟ -4.3) من چگونه مي‌توانم ليستي از جداول يا ساير -چيزهايي كه در psql‌ وجود دارد را ببينم؟ -4.4) چگونه يك ستون جدول را حذف مي‌كنيد؟ چگونه -نوع داده آن را عوض كنيم؟ -4.5) حداكثر اندازه يك رديف،‌ جدول Ùˆ خود -پايگاه داده چقدر است؟ -4.6) چقدر فضاي ديسك سخت براي ذخيره كردن -داده‌‌هاي يك فايل متني مورد نياز است؟ -4.7) چگونه مي‌توانم بفهمم كه Ú†Ù‡ كاربران،‌ -پايگاه داده،‌ نمايه Ùˆ جداولي در سيستم تعريف -شده است؟ -4.8) چرا درخواستهاي من كند اجرا مي‌شوند يا -چرا از نمايه ها استفاده نمي‌كنند؟ -4.9) چگونه مي‌توانم نحوه بررسي درخواست را -توسط بهينه‌ساز درخواستها مشاهده كنم؟ -4.10) نمايه R-tree‌ چيست؟ -4.11) بهينه ساز تكويني درخواست چيست؟ (Genetic Query -Optimizer) -4.12) چگونه از عبارات منظم براي جستجو استفاده -كنم؟ چگونه جستجويي انجام دهم كه حساس به متن -نباشد؟ چگونه براي يك جستجوي غير حساس به متن -از نمايه استفاده كنم؟ -4.13) چگونه مي‌توانم در يك درخواست تشخيص دهم -كه يك فيلد NULL‌ است؟ -4.14) تفاوت بين گونه‌هاي مختلف character چيست؟ -4.15.1) چگونه مي‌توانم يك فيلد سريال يا -افزايشي ايجاد كنم؟ -4.15.2) چگونه مي‌توانم مقدار يك درج سريالي را -بدانم؟ -4.15.3) آیا توابع ()nextval Ùˆ ()currval منجر به ایجاد -شرایط race برای سایر کاربران Ù…ÛŒ شوند؟ -4.15.4) چرا اعداد سریالی مربوط به تراکنشهای abort -شده مجدداً استفاده نمی شود؟ چرا بین اعداد -سریالی یک فاصله خالی ایجاد Ù…ÛŒ شود؟ -4.16) OID Ùˆ TID Ú†Ù‡ هستند؟ -4.17) معني بعضي از ترمها Ùˆ كلماتي كه در PostgreSQL‌ -استفاده مي‌شود چيست؟ -4.18) چرا من خطاي "ERROR: Memory exhausted in AllocSetAlloc" -مي‌گيرم؟ -4.19) از كجا تشخيص دهم كه ويرايش يا نسخه -PostgreSQLيي كه من استفاده مي‌كنم چيست؟ -4.20) چرا در حین اجرای عملیات روی large-objectها -خطای "invalid large obj descriptor"به وجود Ù…ÛŒ آید؟ -4.21) چگونه يك ستون ايجاد كنم كه مقدار زمان -جاري را به عنوان مقدار پيش‌فرض داشته باشد؟ -4.22) چرا زير درخواستهايي كه از IN استفاده -مي‌كنند كند هستند؟ -4.23) چگونه مي‌توانم يك الحاق خارجي (outer join) -انجام دهم؟ -4.24) چگونه مي‌توان درخواستهايي از چند پايگاه -داده توليد كرد؟ -4.25) چگونه خروجي يك تابع مي‌تواند چند رديف -يا ستون باشد؟ -4.26) در توابع PL/PgSQL چرا نمي‌توان با اطمينان -جداول موقت را ايجاد يا حذف كرد؟ -4.27) Ú†Ù‡ گزينه‌هايي براي تكرار (replication) وجود -دارد؟ -4.28) Ú†Ù‡ گزينه‌هايي براي رمزنگاري وجود دارد؟ - -توسعه PostgreSQL -5.1) من يك تابع نوشته‌ام. چگونه آن را در psql -اجرا كنم؟ چرا با اجراي آن core dump مي‌گيرم؟ -5.2) چگونه مي‌توانم در توليد نوع‌ها Ùˆ توابع -جديد Ùˆ جالب براي PostgreSQL‌ همكاري Ùˆ مشاركت -داشته باشم. -5.3) چگونه مي‌توانم يك تابع به زبان C بنويسم -كه خروجي آن يك ‌tuple (چند تايي) باشد؟ -5.4) من يك فايل منبع را عوض كرده ام چرا در -عمليات كامپيل مجدد آن تغيير ديده نمي‌شود؟ - - - - -سوالات عمومي -1.1) PostgreSQL چيست Ùˆ چگونه آن را بايد تلفظ كرد؟ -PostgreSQL به صورت Post-Gres-Q-L‌ تلفظ مي‌شود. يك فايل -صوتي در آدرس http://www.postfresql.org/postgresql.mp3‌ براي -كساني كه مايلند تلفظ صحيح را بشنوند وجود -دارد. -PostgreSQL از روي سيستم مديريت پايگاه داده POSTGRES -توسعه داده شده است (هنوز هم بعضي مواقع براي -سادگي به آن Postgres گفته مي‌شود) كه يك نمونه -تحقيقاتي از پايگاه داده‌هاي نسل بعد است. -PostgreSQL همان الگوي داده قوي Ùˆ انواع داده را -حفظ كرده است ولي زبان PostQuel را با يك -زيرمجموعه پيشرفته از SQL جايگزين كرده است. -PostgreSQL متن باز بوده Ùˆ متن كامل آن در دسترس -است. -PostgreSQL توسط يك تيم برنامه‌نويس كه همگي در -گروه پست الكترونيك برنامه‌نويسان PostgreSQL -عضو هستند، انجام مي‌شود. هماهنگ كننده اصلي -در حال حاضر Marc G. Fournier‌ به آدرس scrappy@PostgreSQL.org -مي‌باشد. (براي ديدن نحوه ملحق شدن به اين تيم -قسمت 1.6 را ببينيد). اين تيم در حاضر مسئوليت -تمام مسائل مربوط به برنامه‌نويسي PostgreSQL را -بر عهده دارد. اين يك پروژه گروهي است Ùˆ تحت -كنترل هيچ شركتي نيست. براي اطلاعات بيشتر در -مورد اين تيم به آدرس -http://www.PostgreSQL.org/docs/faqs/FAQ_DEV.html مراجعه كنيد. -اولين نسخه PostgreSQL‌ توسط Andrew Yu and Jolly Chen به -وجود آمد. افراد بسياري در توسعه Ùˆ رفع اشكال Ùˆ -انتقال آن شركت كرده‌اند. متن اصلي Postgres كه -PostgreSQL از روي آن نوشته شده است، توسط تعداد -زيادي دانشجوي كارشناسي ارشدو دانشجوي -كارشناسي Ùˆ تيم برنامه‌نويسي كه تحت نظر -پروفسور Michael Stonebrake در دانشگاه -بركلي،‌كاليفرنيا كار مي‌كرده‌اند نوشته -شده است. -نام اصلي نرم افزار در دانشگاه بركلي Postgres‌ -بود. در سال 1995 بعد از اضافه شدن SQL نام آن به -Postgres95 تغيير داده شد. در سال 1996 نام آن به -PostgreSQL تغيير داده شد. -1.2) قوانين كپي رايت در مورد PostgreSQL به Ú†Ù‡ صورت -است؟ -PostgreSQL تحت قانون كپي رايت زير قرار دارد: -PostgreSQL Data Base Management System -Portions copyright (c) 1996-2004, PostgreSQL Global Development Group Portions -Copyright (c) 1994-6 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. -قانون بالا ليسانس BSD كه يك ليسانس كلاسيك -براي متن‌هاي باز است مي‌باشد. هيچ محدوديتي -در مورد نحوه استفاده از متن در آن ديده -نمي‌شود. ما آن را دوست داريم Ùˆ هيچ قصدي براي -تغيير آن نداريم. -1.3) PostgreSQL‌ روي Ú†Ù‡ نوع يونيكسهايي اجرا -مي‌شود؟ -در حالت كلي PostgreSQL روي هر پلتفرم (سكوي) سازگار -با يونيكس اجرا مي‌شود. ليست پلتفرمهايي كه -تاكنون PostgreSQL‌ روي آنها نصب Ùˆ تست شده است -درقسمت دستورالعملهاي نصب آمده است. -1.4) روي Ú†Ù‡ محيطهاي غير يونيكسي مي‌توان آن را -اجرا كرد؟ -Client -مي‌توان psql, كتابخانه libpq Ùˆ ساير واسطها Ùˆ -برنامه‌هاي كاربردي را طوري كامپيل كرد كه -روي محيطهاي ويندوز نيز اجرا شوند. در اين -حالت Client روي ويندوز اجرا مي‌شود Ùˆ از طربق -شبكه Ùˆ پروتكل TCP/IP با يك سرور كه روي يك پلتفرم -لينوكس در حال اجراست ارتباط برقرار -مي‌كند.يك فايل win32.mak همراه با كدهاي PostgreSQL -وجود دارد كه براي كامپيل كردن كتابخانه libpq Ùˆ -برنامه psql مي‌باشد. P‌ostgreSQL‌ همچنين امكان -ارتباط به صورت ODBC‌ را نيز دارد. -Server -با استفاده از Cygwin‌ Ùˆ كتابخانه Cygnus مي‌توان -پايگاه داده را روي ويندوز NT Ùˆ يا Win2K اجرا -كرد.براي ديدن اطلاعات بيشتر فايل pgsql/doc/FAQ_MSWIN -‌را كه بهمراه توزبع‌هاي PostgreSQL آمده است -ببينيد Ùˆ يا اينكه به اين صفحه -http://www.PostgreSQL.org/docs/faqs/text/FAQ_MSWIN مراجعه كنيد. -در حال حاضر يك عمليات انتقال PostgreSQL به روي -سكوهاي Win NT/2000/XP در جريان است. براي ديدن وضعيت -اين پروژه به سايت‌هاي -http://momjian.postgresql.org/main/writings/pgsql/win32.htm Ùˆ -http://techdocs.postgresql.org/guides/Windows مراجعه كنيد. -همچنين يك عمليات انتقال بر روي Novell Netware 6 نيز -در حال انجام است كه در سايت http://forge.novell.com -مي‌توانيد اطلاعات بيشتر را ببينيد. -1.5) PostgreSQL را از كجا مي‌توانم بگيرم؟ -PostgreSQL‌ را از سايت اصلي آن ftp://ftp.PostgreSQL.org/pub -مي‌توانيد بگيريد. در صفحه اصلي سايت ليست -ساير آدرسهايي كه مي‌توانيد PostgreSQL‌ را از -آنها بگيريد آمده است. -1.6) از كجا خدمات پشتيباني بگيرم؟ -گروه پستي اصلي pgsql-general@PostgreSQL.org مي‌باشد. اين -گروه براي بحث در مورد موضوعات مختلف در زمينه -PostgreSQL است. براي عضو شدن در اين گروه پستي يك -نامه الكترونيكي به آدرس گروه با محتوياتی كه -در ادامه آمده است ارسال كنيد. در قسمت Subject -چيزي ننويسيد. - subscribe - end -آدرس گروه: pgsql-general-request@PostgreSQL.org -همچنين يك گروه پستي هم به صورت ارسال چكيده -پيامها وجود دارد. براي عضو شدن در اين گروه يك -نامه با محتويات زير به این آدرس ارسال كنيد. -pgsql-general-digest-request@PostgreSQL.org - subscribe - end -در اين گروه هر موقع حجم نامه‌ها به 30 -كيلوبايت رسيد براي تمام اعضاء ارسال مي‌شود. -گروه پستي بررسي اِشكالات هم وجود دارد. براي -عضو شدن در اين گروه يك نامه با محتويات زير به -pgsql-bugs-request@PostgreSQL.org ارسال كنيد. - subscribe - end -گروه پستي مخصوص توسعه دهندگان -(برنامه‌نويسان) نيز وجوددارد. براي عضويت در -اين گروه يك نامه به آدرس زير با محتويات مشخص -شده ارسال كنيد. pgsql-hackers-request@PostgreSQL.org - subscribe - end -گروههاي پستي ديگري نيز در زمينه PostgreSQL‌ وجود -دارد كه مي‌توانيد در سايت http://www.postgresql.org -ببينيد. -همچنين يك كانال IRC روي Freenode Ùˆ EFNet بنام PostgreSQL# -وجود دارد. شما مي‌توانيد از فرمان يونيكسي irc --c '#PostgreSQL' "$USER" irc.phoenix.net. يا irc -c '#PostgreSQL' "$USER" -irc.freenode.net استفاده كنيد. -ليست شركتهايي كه از طريق آنها مي‌توانيد -خدمات پشتيباني تجاري در زمينه PostgreSQL دريافت -كنيد در اين آدرس http://techdocs.postgresql.org/companies.php -موجود است. -1.7) آخرين نسخه اعلام شده چيست؟ -آخرين نسخه PostgreSQL‌ كه وجود دارد 7.4.3 است. -هدف ما آن است كه هر 6 ماه تا 8 ماه يك نسخه جديد -ارائه شود. -1.8) Ú†Ù‡ مستندات Ùˆ راهنمائيهايي وجود دارند؟ -چندين كتابچه Ùˆ صفحات راهنما Ùˆ مثالهاي كوچك -همراه با متن اصلي PostgreSQL‌ در شاخه doc وجود -دارد. براي ديدن صفحات راهنما مي‌توانيد به -سايت http://www.PostgreSQL.org/docs نيز مراجعه نماييد. -دو كتاب در زمينه PostgreSQL‌ در آدرس‌هاي -http://www.PostgreSQL.org/docs/awbook.htm Ùˆ http://www.commandprompt.com/ppbook -وجود دارد. ليستي از كتابهايي كه قابل خريد -است در آدرس http://techdocs.PostgreSQL.org/techdocs/bookreviews.php -وجود دارد. همچنين ليستي از مقالات فني در -مورد PostgreSQL در آدرس http://techdocs.PostgreSQL.org وجود -دارد. -برنامه psql يك دستور d\ دارد كه اطلاعاتي در -مورد انواع داده‌هاي قابل تعريف Ùˆ عملگر‌ها -Ùˆ توابع Ùˆ ... به ما نشان مي‌دهد. در سايت اصلي -ما اطلاعات بيشتري را مي‌توانيد پيدا كنيد. -1.9) چگونه مي‌توانم ازاشكالات شناخته شده Ùˆ يا -امكاناتي كه در اين پايگاه داده وجود ندارد -مطلع شوم؟ -PostgreSQL يك زير مجموعه پيشرفته از SQL-92 را -پشتيباني مي‌كند. در ليست TODO اِشكالات -شناخته شده يا امكاناتي كه وجود ندارد Ùˆ يا -برنامه‌‌هاي آينده آمده است. -1.10) چگونه مي‌توانم زبان SQL را ياد بگيرم؟ -كتاب PostgreSQL در آدرس SQL http://www.PostgreSQL.org/docs/awbook.html -‌را آموزش مي‌دهد. همچنين يك كتاب در آدرس -http://www.commandprompt.com/ppbook وجود دارد. يك راهنماي -خيلي خوب هم در سايت‌هاي -http://www.intermedia.net/support/sql/sqltut.shtm Ùˆ -http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM Ùˆ -http://sqlcourse.com در مورد SQL وجود دارد. -كتاب ديگري كه مي‌توان براي يادگيري SQL از آن -استفاده كرد كتاب "SQL را در 21 روز ياد بگيريد،‌ -ويرايش دوم" در سايت -http://members.tripod.com/er4ebus/sql/index.htm مي‌باشد. -تعداد زيادي از كاربران كتاب The Practical SQL را -ترجيح مي‌دهند. كتاب ديگر The Complete Refrence SQL -انتشارات McGraw-Hill مي‌باشد. -1.11) آيا PostgreSQL مشكل Y2K‌ دارد يا خير؟ -خير،‌PostgreSQL‌ با تاريخ‌هاي قبل Ùˆ بعد از 2000 -مشكلي ندارد. -1.12) چگونه مي‌توانم به تيم برنامه نويس PostgreSQL -ملحق شوم؟ -ابتدا،‌آخرين سورس را دونلود كرده Ùˆ مستندات -مربوط به برنامه‌نويسي PostgreSQL را در سايت -مطالعه كنيد. سپس به گروههاي پستي ‌ pgsql-patches Ùˆ -pgsql-hackers عضو شويد. در مرحله آخر وصله‌هاي با -كيفيت بالا را به pgsql-patches ارسال كنيد. -تعداد زيادي از برنامه‌نويسان وجود دارند كه -امتياز انجام تغييرات در cvs‌ را دارند. هر -كدام از آنها تعداد زيادي وصله‌‌ با كيفيت -بالا به گروه ارسال كرده‌اند كه اعتماد -گردانندگان PostgreSQL را به دست آورده‌اند. -1.13) چگونه مي‌توانم يك اِشكال را به گروه -برنامه نويس اعلام كنم؟ -لطفاً صفحه مربوط به اِشكالات PostgreSQL را در -سايت http://www.PostgreSQL.org/bugs/bugs.php مشاهده‌ كنيد. در -اين سايت نحوه گزارش Ùˆ ارسال يك اشكال توضيح -داده شده است. - همچنين براي ديدن نسخه‌هاي جديدتر PostgreSQL Ùˆ -يا وجود يك وصله جديد از سايت ftp://ftp.PostgreSQL.org/pub -بازديد كنيد. -1.14) وضعيت PostgreSQL‌ در مقايسه با ساير DBMSها به -Ú†Ù‡ صورت است؟ -راههاي مختلفي براي اندازه‌گيري Ùˆ مقايسه -نرم‌افزارها وجود دارد كه عبارتند از -امكانات، كارايي، قابليت اعتماد، پشتيباني Ùˆ -قيمت - امكانات - PostgreSQL بيشتر امكانات موجود در سيستم‌هاي - پايگاه داده تجاري بزرگ نظير transactions, subselets, - triggers, views, foreign key referential integrity Ùˆ sophisticated - locking‌ را دارد. در PostgreSQL‌‌ امكاناتي وجود - دارد كه پايگاههاي داده ديگر آن را ندارند - نظير user-defined types‌و Inheritance‌و rules‌و multi-version - concurrency control - - كارايي - كارايي PostgreSQL در حد بقيه سيستم‌هاي - تجاري Ùˆ متن باز است. در بعضي موارد سريعتر Ùˆ - در بعضي موارد از آنها كندتر است. در مقايسه - با MySQL براي كاربران بيشتر Ùˆ درخواست‌هاي - پيچيده Ùˆ بار زياد خواندن/نوشتن سريعتر است. - در درخواست‌هاي ساده SELECT‌ از MySQL كندتر است. - البته MySQL خيلي از امكانات PostgreSQL كه در بالا - به آن اشاره شد را ندارد. هدف اصلي ما امكانات - Ùˆ قابليت اعتماد بالاست در ضمن آنكه تلاش - مي‌كنيم تا كارايي آن نيز بهبود يابد. در - آدرس http://openacs.org/philosophy/why-not-mysql.html يك مقايسه - جالب بين MySQL Ùˆ PostgreSQL وجود دارد. از طرف ديگر - MySQL‌ يك شركت است كه محصول خود را به صورت متن - باز ارائه مي‌كند ولي براي نرم‌افزار غير - متن باز خود احتياج به ليسانس تجاري دارد بر - خلاف PostgreSQL كه يك گروه كاملاً متن باز هستند. - - قابليت اطمينان - ما فكر مي‌كنيم كه يك سيستم پايگاه - داده‌اي كه مطمئن نباشد ارزشي ندارد. ما - تمام تلاشمان را براي ارائه كدهاي پايداري - كه به خوبي تست شده باشند Ùˆ كمترين اِشكالات - را داشته باشند مي‌كنيم. هر نسخه جديدي كه - ارائه مي‌شود حداقل يك ماه را در مرحله تست - بتا مي‌گذراند. ما بر اين باور هستيم كه - قابليت اطمينان PostgreSQL‌ در مقايسه با ساير - سيستم‌هاي پايگاه داده قابل توجه است Ùˆ - نسخه‌هايي كه تاكنون ارائه شده است نشان - مي‌دهد كه ما توانايي ارائه يك سيستم قوي Ùˆ - محكم Ùˆ مطمئن را كه آماده بهره‌برداري است - داريم. - پشتيباني - گروههاي پستي ما امكان ارتباط Ùˆ تماس به - گروه بزرگي از برنامه نويسان Ùˆ كاربران را - مي‌دهد كه مي‌توانند در حل مشكلات به - ديگران كمك كنند. دسترسي مستقيم به - برنامه‌نويسان Ùˆ گروههاي كاربران Ùˆ - راهنماها Ùˆ كداصلي باعث مي‌شود كه - پشتيباني PostgreSQL نسبت به ساير پايگاههاي - داده به نحو بهتري انجام شود. همچنين امكان - ارائه خدمات پشتيباني به صورت تجاري نيز - وجود دارد. براي ديدن اطلاعات بيشتر به FAQ - section 1.6 مراجعه كنيد. - قيمت - هم براي استفاده تجاري Ùˆ هم غير تجاري هيچ - هزينه‌اي نبايد پرداخت شود. هيچ محدوديتي - براي انجام تغييرات در PostgreSQL توسط استفاده - كنندگان وجود ندارد به جز مواردي كه در - ليسانس BSD به آن اشاره شده است. -1.15) من چگونه مي‌توانم از نظر مالي به PostgreSQL -كمك كنم؟ -PostgreSQL داراي يك ساختار تشكيلاتي درجه اول است -كه آن را مديون Marc Fournier‌ است كه اين ساختار را -ايجاد كرده است. -كيفيت يك ساختار براي يك پروژه متن باز بسيار -اهميت دارد. يك ساختار خوب مي‌تواند مانع از -حوادثي شود كه در حركت روبه‌جلوي پروژه خللي -وارد مي‌كنند. -البته اين ساختار تشكيلاتي ارزان نيست. -هزينه‌هاي ثابت ماهانه Ùˆ روزمره براي -نگهداري Ùˆ حفظ اين ساختار مورد نياز است. اگر -شما يا شركت شما مايل است كه از نظر مالي به -اين حركت كمك كند لطفاً به سايت -http://store.pgsql.com/shopping مراجعه كرده Ùˆ كمك خود را -اهدا كنيد. -هر چند در صفحه اصلي عبارت PostgreSQL,Inc‌ ذكر شده -است ولي مشاركت عمدتاً براي پشتيباني از -پروژه PostgreSQL‌ مي باشد Ùˆ نه براي يك شركت مشخص. -اگر ترجيح مي‌دهيد مي‌توانيد يك Ú†Ùƒ به آدرس -مشخص شده ارسال كنيد. -اگر يك استفاده موفق از PostgreSQL سراغ داريد -لطفاً آن را به سايت http://advocacy.postgresql.org گزارش -دهيد. - - - -سوالات مربوط به استفاده از پايگاه داده -2.1) آيا هيچ درايور ODBC‌ براي PostgreSQL وجود دارد؟ -دو درايور ODBC بنامهاي psqlODBC‌ Ùˆ OpenLink براي -PostgreSQL‌ وجود دارد. -براي گرفتن psqlODBC به سايت -http://gborg.postgresql.org/project/psqlodbc/projdisplay.php مراجعه -كنيد. -OpenLlink را از اين سايت http://www.openlinksw.com -مي‌توانيد بگيريد. اين درايور با -نرم‌افزارهاي مختلف ODBC كار مي‌كند بنابراين -شما قادر خواهيد بود با استفاده از OpenLink روي -اكثر سكو‌هايي كه نرم‌افزارODBC‌دارند بدون -مشكل به PostgreSQL نيز متصل شويد. -اين محصول به كساني كه احتياج به خدمات -پشتيباني تجاري دارند فروخته مي‌شود. ولي -نسخه آزاد اين نرم‌افزار هميشه در درسترس -مي‌باشد. براي كسب اطلاعات بيشتر سوالات خود -را به آدرس postgres95@openlink.co.uk ‌ارسال نماييد. -2.2) Ú†Ù‡ ابزارهايي براي استفاده از PostgreSQL‌ با -صفحات وب وجود دارد؟ -در سايت http://www.webreview.com براي استفاده از -PostgreSQL‌ در صفحات وب راهنماييهاي خوبي وجود -دارد. -براي تركيب Ùˆ استفاده در صفحات وب زبان PHP‌ يك -واسط بسيار مناسب است. اطلاعات بيشتر راجع به -PHP‌در سايت http://www.php.net وجود دارد. -مثالهايي نيز با استفاده از Perl‌ Ùˆ CGI.pm Ùˆ mod_perl -وجود دارد. -2.3) آيا PostgreSQL‌ يك واسط كاربري گرافيكي دارد؟ -چند نرم افزار گرافيكي براي PostgreSQL‌ وجود دارد -كه شامل pgAccess درسايت http://www.pgaccess.org Ùˆ pgAdmin III در -سايت http://www.pgadmin.org Ùˆ RHDB Admin در سايت -http://sources.redhat.com/rhdb Ùˆ Rekall در سايت -http://www.thekompany.com/products/rekall مي‌باشد. همچنين يك -phpPgAdmin هم در سايت http://phppgadmin.sourceforge.net وجود -دارد كه يك واسط وبي براي مديريت PostgreSQL -مي‌باشد. -براي ديدن اطلاعات بيشتر راجع به -نرم‌افزارهاي گرافيكي براي PostgreSQL به آدرس -http://techdocs.postgresql.org/guides/GUITools مراجعه كنيد. -2.4) با Ú†Ù‡ زبانهاي برنامه‌نويسي مي‌توان با -PostgreSQL‌ ارتباط برقرار كرد؟ -بيشتر زبانهاي برنامه‌نويسي مي‌توانند با -PostgreSQL‌ ارتباط برقرار كنند. به همراه سورس -PostgreSQL تعدادي از واسطهاي مورد نياز براي -ارتباط با پايگاه داده از طريق زبانهاي مختلف -آمده است كه در زير ليست آنها را مشاهده -مي‌كنيد. - C (libpq) - Embedded C (ecpg) - Java (jdbc) - Python (PyGreSQL) - TCL (libpgtcl) -واسطهاي ديگر در سايت http://gborg.postgresql.org در قسمت -Drivers/Interfaces وجود دارد. - - - -سوالات مديريتي -3.1) چگونه مي‌توانم PostgreSQL‌ را در شاخه‌اي غير -از /usr/local/pgsql/ نصب كنم؟ -موقع اجراي دستور configure از گزينه prefix-- استفاده -كنيد. -3.2) چرا موقعي كه من برنامه postmaster‌ را اجرا مي -كنم پيام Bad system call‌ Ùˆ يا core dump ‌مي‌گيرم؟ -به دلايل مختلف ممكن است اين اتفاق بيفتد. اما -در قدم اول شما مطمئن شويد كه كه امكانات -اضافه System V‌ در كرنل شما نصب شده باشد. PostgreSQL -براي اجرا شدن نياز به استفاده از امكانات -حافظه مشترك Ùˆ سمافورها دارد. -3.3) چرا موقعي كه من سعي مي‌كنم برنامه postmaster‌ -را اجرا كنم خطاي IpcMemoryCreate مي‌گيرم؟ -احتمالاً‌ قسمت ايجاد حافظه مشترك در كرنل به -درستي تنظيم نشده است Ùˆ يا اينكه بايد فضاي -حافظه اشتراكي در كرنل را زياد كرد. ميزان -دقيق حافظه مشترك مورد نياز بسته به معماري Ùˆ -نحوه استفاده از بافرها توسط برنامه postmaster -دارد. براي بيشتر سيستم‌ها كه با تنظيمات -پيش‌فرض كار مي‌كنند مقدار اين حافظه حدود 1 -مگابايت است. براي ديدن اطلاعات بيشتر راجع به -حافظه مشترك Ùˆ سمافور به PostgreSQL Administrator's Guide -مراجعه كنيد. -3.4) چرا موقعي كه من سعي مي‌كنم برنامه postmaster‌ -را اجرا كنم خطاي IpcSemaphoreCreate مي‌گيرم؟ -اگر پيغام خطا (‌pcSemaphoreCreate: semget failed (No space left on -device باشد به اين معني است كه تعداد سمافورهاي -تنظيم شده در كرنل كافي نيست. PostgreSQL‌ براي هر -فرايندي كه در backend اجرا مي‌شود به يك سمافور -نياز دارد. يك راه حل موقت براي اين مسئله آن -است كه postmaster را با اعمال محدوديت روي تعداد -فرايندهايي كه مي‌تواند ايجاد كند اجرا كنيم. -براي اينكار از گزينه N- Ùˆ يك عدد كمتر از 32 -استفاده كنيد. راه حل دائمي اين مشكل آن است كه -پارامترهاي SEMMNS, SEMMNI كرنل را افزايش دهيم. -در زمان دسترسي خيلي زياد به پايگاه داده، ‌ -سمافورهاي نامعتبر مي‌توانند باعث crash‌ كردن -سيستم شوند. -اگر پيغام خطا چيز ديگري باشد احتمالاً به -دليل آن است كه كرنل از سمافورها پشتيباني -نمي‌كند. براي ديدن اطلاعات بيشتر راهنماي -مديريتي PostgreSQL را مطالعه كنيد. -3.5) چگونه مي‌توانم اتصالات ساير ماشينها را -كنترل كنم؟ -به صورت پيش فرض فقط از ماشيني كه PostgreSQL روي آن -در حال اجراست مي‌توان با استفاده از -سوكت‌هاي يونيكسي به آن متصل شد. ساير -ماشين‌ها قادر نيستند به PostgreSQL متصل شوند مگر -آنكه گزينه tcp_sockets در فايل postgresql.conf فعال شده Ùˆ -همچنين با اصلاح فايل PGDATA/ph_hba.conf هويت‌شناسي -مبتني بر ميزبان نيز فعال شود. با اين كار -مي‌توان اتصالات TCP/IP به PostgreSQL‌ ايجاد كرد. -3.6) براي كارايي بالاتر Ùˆ بهتر پايگاه داده من -Ú†Ù‡ تنظيماتي را بايد انجام دهم؟ -به طور حتم استفاده از انديس‌ها باعث بالا -رفتن سرعت پاسخ‌گويي به درخواست‌ها خواهد -شد. دستور EXPLAIN ANALYZE به شما امكان ديدن نحوه -پردازش يك دستور توسط PostgreSQL را مي‌دهد. -اگر شما تعداد زيادي INSERT‌ داريد سعي كنيد -آنها را با قرار دادن در يك فايل با دستور COPY‌ -اجرا كنيد. اين دستور به مراتب از INSERT سريعتر -است. حتي‌الامكان سعي كنيد از تراكنشها -استفاده نكنيد. تراكنشها مجموعه دستوراتي -هستند كه بيند BEGIN Ùˆ ‍COMMIT مي‌آيند. اگر يك -دستور به صورت عادي اجرا شود PostgreSQL خود آن -دستور را به صورت يك تراكنش مستقل نگاه كرده Ùˆ -اجرا مي‌كند. موقعی كه تغييرات زيادي در -پايگاه داده انجام مي‌شود انديسهاي قبلي را -حذف Ùˆ مجدداً‌ ايجاد كنيد. -استفاده از گزينه o -F- در فرمان postmaster باعث غير -فعال كردن ()fsync مي‌شود. اين دستور بعد از هر -تراكنش اطلاعات را روي هاردديسك منتقل -مي‌كند. -براي افزايش تعداد بافرهاي حافظه اشتراكي از -گزينه B- به همراه فرمان postmaster استفاده كنيد. -توجه كنيد كه اگر اين عدد خيلي بزرگ باشد ممكن -است postmaster اصلاً‌ اجرا نشود. هر بافر 8 كيلو -بايت حافظه نياز دارد Ùˆ تعداد بافرها به طور -پيش فرض 64 است. -همچنين مي‌توان با گزينه S- ميزان حافظه‌اي -كه براي مرتب‌سازي‌هاي موقت توسط PostgreSQL -استفاده مي‌شود را افزايش داد. مقدار پيش فرض -512 كيلو بايت است. -استفاده از دستور CLUSTER نيز براي بالا بردن -كارايي موثر ا ست. دستور راهنماي CLUSTER اطلاعات -بيشتري در اين زمينه به شما مي‌دهد. -3.7) Ú†Ù‡ امكاناتي براي پيدا كردن اشكال‌ وجود -دارد؟ -PostgerSQL‌ امكانات مختلفي براي گزارش دادن -وضعيت خود دارد كه براي اشكال زدايي مي‌توان -از آنها استفاده كرد. -با استفاده از گزينه enable-assert-- تعداد زيادي -()assert براي مونيتور كردن Ùˆ توقف برنامه در صورت -بروز خطاهاي ناخواسته فعال مي‌شود. -هم Postmaster Ùˆ هم postgres گزينه‌هاي زيادي براي -اشكال زدايي دارند. موقعي كه postmaster را اجرا -مي‌كنيد خروجي استاندارد Ùˆ خطا را سمت فايل log -ارسال كنيد. - cd /usr/local/pgsql - ./bin/postmaster >server.log 2>&1 & -اين كار يك فايل log در بالاترين شاخه PostgreSQL‌ -ايجاد مي‌كند. اين فايل حاوي اطلاعات مفيدي -در مورد مسائل Ùˆ خطاهايي است كه براي سرور -اتفاق افتاده است. براي ديدن جزئيات بيشتر -مي‌توان از d- به همراه فرمان postmaster‌ استفاده -كرد. گزينه d- همچنين يك عدد مي‌گيرد كه نشان -دهنده سطح جزئياتي است كه در Log‌فايل نوشته -مي‌شود. با بالابردن اين عدد حجم اطلاعات -توليد شده در Logفايل نيز افزايش مي‌يابد. -اگر postmaster در حال اجرا نباشد، مي‌توانيم postgres -را به طور مستقيم از خط فرمان اجرا كرده Ùˆ -دستورات SQL را به آن بدهيم. اين كار فقط براي -اشكال‌يابي توصيه مي‌شود. توجه كنيد كه در -اين حالت يك دستور با كاراكتر newline خاتمه پيدا -مي‌كند Ùˆ نه با ;. اگر postmaster را با امكانات -اشكال‌يابي كامپيل كرده باشيد مي‌توانيد با -استفاده از يك برنامه اشكال‌ياب اجراي -برنامه را مونيتور كنيد. -اگر postmaster در حال اجرا باشد با دستور psql -مي‌توان به postgres متصل شد. با پيدا كردن PID -فرايند postgres كه psql به آن متصل شده است مي‌توان -آن را مونيتور كرد. براي اينكار بايد يك -برنامه اشكال‌ياب را به آن pid متصل كرد. اگر -بخواهيم بالا آمدن postgres را مونيتور كنيم كافي -است "PGOPTIONS="-W n Ùˆ psql را اجرا كنيم. اين كار باعث -مي‌شود كه postgres با n ثانيه تاخير اجرا شود Ùˆ در -اين فاصله شما مي‌توانيد برنامه اشكال‌ياب -را به آن متصل كرده Ùˆ با قرار دادن يك نقطه -توقف روند اجراي آن را مونيتور كنيد. -postgres گزينه‌هاي s-‌ Ùˆ A- Ùˆ t-‌ دارد كه براي -پيدا كردن اشكالات بسيار مناسب هستند. -شما مي‌توانيد postgreSQL را با امكانات profiling -كامپيل كنيد. اين كار باعث مي‌شود كه زمان -اجراي دقيق هر تابع در برنامه مشخص شود. -خروجي‌هاي توليد شده در اين حالت در فايل -DLINUX_PROFILE. ريخته مي‌شود. -3.8) چرا موقعي كه من مي‌خواهم به پايگاه داده -وصل شوم پيام "Sorry, too many clients" ‌مي‌گيرم؟ -شما بايد حداكثر تعداد فرايندهاي همزمان -postmaster را افزايش دهيد. مقدار پيش فرض 32 است. -براي افزايش آن مي‌توان از گزينه N- استفاده -كرد Ùˆ يا فايل postgresql.conf را اصلاح نمود -توجه كنيد كه اگر N- مقداري بيشتر از 32 داشته -باشد بايد مقدار B- را نيز افزايش دهيم. اين -مقدار بايد حداقل دو برابر مقدار N-‌ باشد. -براي اعداد خيلي بالا بايد بعضي از -پارامترهاي كرنل را نيز اصلاح كرد. -پارامترهايي نظير حداكثر اندازه حافظه -اشتراكي SHMMAX ØŒ حداكثر تعداد سمافورها SEMMNI‌ Ùˆ -SEMMNS ØŒ حداكثر تعداد فرايندها NPROCØŒ حداكثر -فرايندهاي يك كاربر MAXUPRC Ùˆ حداكثر فايلهاي باز -NFILE Ùˆ NINODE. يكي از دلايلي كه تعداد اتصالات -همزمان postgreSQL محدود است آن است كه نيازهاي -PostgreSQL بيش از منابع موجود سيستم نباشد. -3.9) در شاخه pgsql_tmp Ú†Ù‡ چيزي قرار دارد؟ -دراين شاخه فايلهاي موقتي قرار دارد كه با -اجراي درخواستها به وجود آمده است. به عنوان -مثال اگر براي اجراي دستور order by نياز به انجام -مرتب سازي باشد Ùˆ در صورتي كه حافظه مشخص شده -با گزينه S- براي اينكار كافي نباشد سيستم يك -فايل موقت در اين شاخه ايجاد مي‌كند تا عمل -مرتب سازي را انجام دهد. -فايلهاي موقت معمولاً به صورت اتوماتيك پاك -مي‌شود اما اگر postgreSQL در حين مرتب سازي crash‌ -كند آن فايلها باقي مي‌مانند. با stop Ùˆ start كردن -برنامه postmaster اين فايلها پاك مي‌شوند. -3.10) چرا براي به روز كردن نسخه پايگاه داده من -بايد كل داده ها را dump‌ Ùˆ مجدداً restore كنم؟ -تيم برنامه نويس postgreSQL در نسخه‌هاي ارائه شده -كه فقط minor آنها متفاوت است فقط تغييرات كوچكي -اعمال مي‌كنند؛ بنابراين براي به روز كردن از -نسخه 7.2‌به 7.2.1 نيازي به dump Ùˆ restore نيست. اما در -نسخه‌هايي كه major آنها تغيير مي‌كند غالباً -ساختار داخلي جداول Ùˆ فايلهاي داده تغيير -مي‌كند. اين تغييرات معمولاً‌ پيچيده هستند. -براي انتقال داده‌هاي موجود در پايگاه داده -در اين حالت بايد ‌از dump Ùˆ restore استفاده كرد. -در نسخه‌هايي كه ساختار روي ديسك تغييري -نمي‌كند مي توان از برنامه pg_upgrade براي به روز -كردن پايگاه داده استفاده كرد بدون اينكه -نيازي به استفاده از dump Ùˆ restore باشد. در -يادداشتي كه به همراه هر توزيع مي‌آيد ذكر -شده است كه آيا برنامه pg_upgrade براي اين توزيع -وجود دارد يا خير. -3.11) از Ú†Ù‡ سخت افزاري بايد استفاده كنم؟ - -چون اكثر سخت‌افزارهاي PC سازگار هستند مردم -فكر مي‌كنند كه كيفيت آنها نيز يكسان است. در -حاليكه اينطور نيست. استفاده از هاردهاي SCSI Ùˆ -حافظه‌هاي ECC Ùˆ مادربردهاي با كيفيت بالا -نسبت به سخت افزارهاي ارزانتر نتايج بهتري از -نظر كارايي Ùˆ پايداري سيستم بهمراه خواهد -داشت. PostgreSQL روي بيشتر سخت افزارها اجرا -مي‌شود اما اگر كارايي Ùˆ اطمينان فاكتورهاي -مهمي هستند بايد سخت افزار مناسب استفاده شود. -در گروههاي پستي در مورد سخت افزار مناسب Ùˆ -انتخاب آن بحث شده است. - - - -سوالات عملياتي -4.1) تفاوت بين binary cursors Ùˆ Normal cursors چيست؟ -راهنماي دستور DECLARE‌ را مطالعه كنيد. -4.2) من چگونه مي‌توانم فقط روي چند رديف اول يا -يك رديف تصادفي درخواست SELECT‌ بزنم؟ -راهنماي دستور FETCH يا SELECT...LIMIT را ببينيد. -در واقع كل درخواست بايد بررسي Ùˆ ارزيابي شود -حتي اگر شما فقط چند رديف اول را بخواهيد. براي -مثال درخواست ORDER BY را در نظر بگيريد. اگر -انديس يا نمايه‌اي براي ORDER BY وجود داشته -باشد،‌postgreSQL‌ ممكن است بتواند فقط چند سطر -اول درخواستي را ارزيابي كند Ùˆ يا اينكه كل -درخواست پردازش شود تا تعداد رديف‌هاي -درخواستي توليد شود. -براي انتخاب يك سطر تصادفي به روش زير عمل -مي‌كنيم: - SELECT col - FROM tab - ORDER BY random() - LIMIT 1; -4.3) من چگونه مي‌توانم ليستي از جداول يا ساير -چيزهايي كه در psql‌ وجود دارد را ببينم؟ -براي ديدن ليست جداول دستور dt\ را در برنامه -psql‌ استفاده كنيد. براي ديدن ليست كامل -فرمانها ?\ را اجرا كنيد. راه ديگر خواندن متن -برنامه psql‌ است كه در شاخه pgsql/src/bin/psql/describe.c -‌قرار دارد. اين فايل حاوي فرامين SQLيي است كه -خروجي را براي دستوراتي كه با \‌در psql شروع -مي‌شوند توليد مي‌كنند. راه ديگر اجراي psql با -گزينه E-‌است. اينكار باعث مي‌شود كه psql قبل -از اجرا هر دستور SQL‌متناظر آن را نشان دهد. -PostgreSQL‌همچنين يك برنامه SQLi دارد كه مي‌توان -با استفاده از آن اطلاعات داخلي پايگاه داده -را استخراج كرد. -4.4) چگونه يك ستون جدول را حذف مي‌كنيد؟ چگونه -نوع داده آن را عوض كنيم؟ -حذف يك ستون در توزيع 7.3 با استفاده از دستور -ALTER TABLE DROP COLUMN اضافه شده است. در نسخه‌هاي -قبلي به روش زير عمل كنيد: - BEGIN; - LOCK TABLE old_table; - SELECT ... -- تمام ستونها غير از ستوني كه مي‌خواهيد آن را حذف كنيد را در اينجا بياوريد - INTO TABLE new_table - FROM old_table; - DROP TABLE old_table; - ALTER TABLE new_table RENAME TO old_table; - COMMIT; -براي عوض كردن نوع داده يك ستون به روش زير عمل -كنيد: - 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; -4.5) حداكثر اندازه يك رديف،‌ جدول Ùˆ خود -پايگاه داده چقدر است؟ -محدوديتها عبارتند از: - حداكثر اندازه پايگاه داده نامحدود (تا 32 ترابايت وجود دارد) - حداكثر اندازه يك جدول 32 ترابايت - حداكثر ا ندازه يك رديف 1.6 ترابايت - حداكثر اندازه يك فيلد 1 گيگا بايت - حداكثر اندازه رديفهاي يك جدول نا محدود - حداكثر ستونهاي يك جدول بسته به نوع جدول بين 250 تا 6000 - حداكثر انديسهاي يك جدول نا محدود -البته در حالت نامحدود نيز ما محدود به حجم -هاردديسك Ùˆ فضاي حافظه خواهيم بود. در صورتي -Ú©Ù‡ مقادير مشخص شده به عنوان نامحدود به صورت -غير معمولي بزرك شوند كارايي سيستم كاهش -خواهد يافت. -براي ذخيره كردن جداول با اندازه خيلي بزرگ -نيازي نيست كه سيستم عامل امكان ايجاد -فايلهاي بزرگ را داشته باشد. بلكه جداول خيلي -بزرگ به صورت فايلهايي به حجم يك گيگا بايت -نگاهداري مي‌شوند. -اگر اندازه بلوكهاي داده را برابر 32 كيلو بايت -قرار دهيم حداكثر اندازه جدول Ùˆ حداكثر تعداد -ستونها 4 برابر خواهد شد. -4.6) چقدر فضاي ديسك سخت براي ذخيره كردن -داده‌‌هاي يك فايل متني مورد نياز است؟ -يك پايگاه داده PostgreSQL‌ تا 5 برابر فضايي روي -هاردديسك براي نگاهداري يك فايل متني نياز -دارد. -به عنوان مثال يك فايل با 100000 خط را در نظر -بگيريد كه در هر خط يك عدد صحيح Ùˆ يك توضيح -متني آمده است. فرض كنيد كه رشته متني به طور -متوسط 20 بايت باشد. اندازه فايل برابر 2.8 مگا -بايت خواهد بود ولي PostgreSQL براي نگاهداري اين -فايل به 6.4 مگا بايت اطلاعات نياز خواهد داشت. - 32 bytes: اندازه سرايند هر خط به طور تقريبي - 24 bytes: يك عدد صحيح Ùˆ يك رشته 24 بايتي - + 4 bytes: اشاره گر روي صفحه به يك چندتايي - ---------------------------------------- - 60 bytes در هر رديف - -اندازه صفحات داده در PostgreSQL برابر با 8 كيلو بايت است - 8192 تعداد بايت‌ها در هر صفحه - ------------------- = 136 تعداد رديف‌ها در يك صفحه پايگاه داده - 60 تعداد بايت‌هاي هر رديف - - 100000 تعداد رديفها - -------------------- = تعدادصفحات پايگاه داده - 128 تعداد رديفها در هر صفحه - -735 تعداد صفحات * 8192 تعداد بايت‌هاي هر صفحه = 6,021,120 مگا بايت -سربار انديسها يا نمايه‌ها از اين مقدار كمتر -است ولي چون شامل خود داده‌ها هم هست ممکن است -اندازه آنها هم بزرگ شود. -NULLها به صورت bitmap ذخيره مي‌شوند Ùˆ از اينرو -فضاي بسيار كمي را اشغال مي‌كنند. -4.7) چگونه مي‌توانم بفهمم كه Ú†Ù‡ كاربران،‌ -پايگاه داده،‌ نمايه Ùˆ جداولي در سيستم تعريف -شده است؟ -psql تعداد زيادي دستور دارد كه با \ شروع -مي‌شوند Ùˆ اين اطلاعات را در اختيار ما قرار -مي‌دهند. براي ديدن آنها دستور ?\ را اجرا -كنيد. همچنين جداول سيستمي كه با نام آنها pg_ -‌شروع مي‌شود نيز اين اطلاعات را در خود -دارند. اجراي برنامه psql با گزينه l- نيز باعث -نشان دادن ليست تمام پايگاههاي داده مي‌شود. -همچنين فايل pgsql/src/tutorial/syscat.source نيز فرمانهاي -SELECT كه با استفاده از آن مي‌توان اطلاعات -پايگاه داده را استخراج كرد شرح داده است. -4.8) چرا درخواستهاي من كند اجرا مي‌شوند يا -چرا از نمايه ها استفاده نمي‌كنند؟ -به طور معمول براي درخواستها از نمايه‌ها -استفاده نمي‌شود. تنها در صورتي از نمايه‌ها -استفاده مي‌شود كه اندازه جدول از يك اندازه -حداقل بزرگتر باشد Ùˆ درخواست هم فقط قسمتي از -رديف‌هاي جدول را انتخاب كرده باشد. دليل اين -كار آن است كه دسترسي‌هاي تصادفي به هاردديسك -كه به خاطر نمايه‌ها ايجاد مي‌شود ممكن است -از خواندن مستقيم جدول يا خواندن ترتيبي -ركوردها كندتر باشد. -براي تعيين اينكه از نمايه استفاده شود يا -خير، PostgreSQL بايد اطلاعات آماري را در مورد يك -جدول بداند. اين اطلاعات توسط دستور ANALYZE Ùˆ VACUUM -ANALYZE به دست مي‌آيد. با استفاده از اين -اطلاعات،‌ بهينه ساز از تعداد رديف‌هاي يك -جدول اطلاع پيدا مي‌كند Ùˆ بهتر مي‌تواند -تعيين كند كه آيا از نمايه استفاده شود يا خير. -اطلاعات آماري همچنين براي تعيين ترتيب الحاق -Ùˆ روشهاي الحاق به صورت بهينه نيز كاربر دارد. -جمع آوري اطلاعات آماري بايد به صورت دوره‌اي -همزمان با تغيير داده‌هاي جدول انجام شود. -نمايه‌ها به طور معمول همراه با دستور ORDER BY -به كار برده نمي‌شوند. براي يك جدول بزرگ يك -پيمايش ترتيبي همراه با دستور مرتب سازي از به -كار بردن نمايه‌ها سريعتر خواهد بود. -اما اگر همراه با ORDER BY‌ از LIMIT استفاده شود -اغلب از نمايه‌ها استفاده مي‌شود چون فقط -قسمتي از جدول استفاده مي‌شود. در حقيقت هر -چند توابع ()MIN‌ Ùˆ ()MAX از نمايه‌ها استفاده -نمي‌كنند ولي مي‌توانيم با استفاده از دستور -زير با استفاده از نمايه‌ها Ùˆ دستور ORDER BY Ùˆ -LIMIT‌ آنها را به دست آوريم. - SELECT col - FROM tab - ORDER BY col [ DESC ] - LIMIT 1; -اگر شما فكر مي‌كنيد كه بهينه ساز سيستم در -انتخاب پيمايش ترتيبي اشتباه كرده است با -دستور 'SET enable_seqscan TO 'off' مي‌توانيد ببينيد آيا -استفاده از نمايه‌ها باعث افزايش سرعت -درخواست‌ها خواهد شد. -استفاده از نمايه‌ها هنگامي كه از علائم ويژه -نظير LIKE Ùˆ ~ استفاده مي‌كنيد فقط در بعضي -شرايط خاصي كه در اينجا ذكر شده است ممكن است: - ابتداي رشته جستجو بايد به طور صريح مشخص - باشد براي مثال: - دستورات LIKE نبايد با علامت % شروع شوند - الگوهاي منظمي كه با ~ مي‌ايد حتماً بايد با - علامت ^ شروع شود - رشته جستجو نبايد با يك مجموعه از - كاراكتر‌ها مثل [a-e] شروع شود - جستجوهاي غيرحساس به متن مثل ILIKE‌ Ùˆ *~ از - نمايه‌ها استفاده نمي‌كنند. در عوض از - توابع نمايه‌اي كه در قسمت 4.12 توضيح داده شد - استفاده مي‌كنند. - مقدار پيش فرض locale‌ بايد در initdb استفاده شود. - -4.9) چگونه مي‌توانم نحوه بررسي درخواست را -توسط بهينه‌ساز درخواستها مشاهده كنم؟ -راهنماي دستور EXPLAIN را نگاه كنيد. -4.10) نمايه R-tree‌ چيست؟ -از نمايه R-Tree براي انديس كردن داده‌هاي -فاصله‌اي استفاده مي‌شود. يك نمايه hash -نمي‌توانند جستجوهاي محدوده‌اي را انجام -دهد. نمايه "B-tree" نيز براي انجام جستجوي -محدوده‌اي در يك جهت قابل استفاده است. اما -R-Tree مي‌تواند داده‌هاي چند بعدي را نيز -پشتيباني كند. براي مثال استفاده اگر از نمايه -R-tree‌ براي گونه Point استفاده شود سرعت -درخواست‌هايي نظير "select all points within a bounding -rectangle" به مراتب افزايش مي‌يابد. -مقاله‌اي كه طراحي R-tree را توضيح داده است -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. -R-tree‌ مي‌تواند چندضلعيها Ùˆ چند وجهي را -پشتيباني كند. در تئوري R-tree مي‌تواند تعداد -بعدهاي بالاتر ري نيز پشتيباني كند. در عمل -توسعه R-tree‌ نياز به كار بيشتري دارد. -4.11) بهينه ساز تكويني درخواست چيست؟ (Genetic Query -Optimizer) -استفاده از GEQO سرعت بهينه سازي درخواست را -هنگاميكه تعداد زيادي جدول را با استفاده از -الگوريتم ژنتيك الحاق مي‌كنيم افزايش -مي‌دهد. -4.12) چگونه از عبارات منظم براي جستجو استفاده -كنم؟ چگونه جستجويي انجام دهم كه حساس به متن -نباشد؟ چگونه براي يك جستجوي غير حساس به متن -از نمايه استفاده كنم؟ -براي جستجوي عبارت منظم از عملگر ~‌ استفاده -مي‌كنيم. براي جستجوي غير حساس به متن از -عملگر *~ Ùˆ يا ILIKE‌ استفاده مي‌كنيم. -روش ديگر انجام جستجوي غير حساس به متن در زير -نشان داده شده است. - SELECT * - FROM tab - WHERE lower(col) = 'abc'; -اين از نمايه‌هاي استاندارد استفاده -نمي‌كند. ولي شما مي توانيد با دستور زير يك -نمايه ايجاد كنيد Ùˆ از آن استفاده كنيد. - CREATE INDEX tabindex ON tab (lower(col)); -4.13) Iچگونه مي‌توانم در يك درخواست تشخيص دهم -كه يك فيلد NULL‌ است؟ -با استفاده از توابع IS NULL Ùˆ IS NOT NULL مي‌توانيم -NULL بودن يك فيلد را تست كنيم. -4.14) تفاوت بين گونه‌هاي مختلف character چيست؟ -Type Internal Name Notes --------------------------------------------------- -VARCHAR(n) varchar اندازه، حداكثر طول را نشان مي دهد بدون اضافه شدن كاراكتر اضافه -CHAR(n) bpchar كاراكترهاي بلانك براي پر شدن طول مشخص شده استفاده مي‌شود -TEXT text حداكثر طول را مشخص نمي‌كند -BYTEA bytea آرايه‌اي از بايت با طول متغير -"char" char يك كاراكتر -نام داخلي گونه‌ها را در system catalogue ‌و بعضي از -پيغامهاي خطا مي‌توان ديد. -چهار گونه اول همگي از نوع varlena هستند (4 بايت -اول روي ديسك طول را مشخص مي‌كند كه به دنبال -آن داده‌ها قرار دارند.)‌بنابراين فضاي -واقعي استفاده شده روي ديسك از اندازه تعريف -شده بيشتر است. اما اين گونه‌ها را مي‌توان -فشرده كرد كه اينكار باعث مي‌شود فضاي كمتري -روي ديسك اشغال كنند. -براي ذخيره رشته‌هاي با طول متغير(VARCHAR(n‌ -بهترين انتخاب است. در اين گونه حداكثر طول -رشته محدود است بر خلاف text كه هيچ محدوديتي -روي حداكثر اندازه رشته نمي‌گذارد.(در اين -گونه حداكثر طول يك رشته يك گيگا بايت خواهد -بود) -گونه (CHAR(n براي ذخيره داده‌هاي با طول يكسان -است.يك گونه‌ي (CHAR(n با كاراكترهاي بلانك -(خالي) پر مي‌شود تا به طول مشخص شده برسد در -حاليكه گونه VARCHAR كاراكترها را به همان صورت -كه هستند ذخيره مي‌كند. گونه BYTEA براي ذخيره -داده‌هاي باينري است به خصوص داده‌هاي -باينتري كه شامل بايت‌هاي NULL هستند. از نظر -كارايي تمام اين گونه‌ها يكسان هستند. -4.15.1) چگونه مي‌توانم يك فيلد سريال يا -افزايشي ايجاد كنم؟ -PostgreSQL از داده‌هاي سريال پشتيباني مي‌كند. -براي ايجاد يك فيلد سريال (براي داشتن يك فيلد -منحصر به فرد براي هر رديف )به روش زير عمل -كنيد: - CREATE TABLE person ( - id SERIAL, - name TEXT - ); -دستور بالا به طور اتوماتيک به دستور زير -تبديل مي‌شود: - CREATE SEQUENCE person_id_seq; - CREATE TABLE person ( - id INT4 NOT NULL DEFAULT nextval('person_id_seq'), - name TEXT - ); -براي ديدن اطلاعات بيشتر به راهنماي دستور -create_sequence مراجعه كنيد. همچنين مي‌توان از -OID‌هر رديف به عنوان يك مقدار منحصر به فرد -استفاده كرد. اما در اين حالت براي dump كردن Ùˆ -reload‌كردن پايگاه داده بايد دستور pg_dumps‌ را -با گزينه o-‌ اجرا كنيد. -4.15.2) چگونه مي‌توانم مقدار يك درج سريالي را -بدانم؟ -يك روش براي گرفتن مقدار بعدي يك فيلد سريال -استفاده از تابع ()nextval است. در شبه كُدي كه در -ادامه آمده است روش انجام اين كار نشان داده -شده است: - new_id = execute("SELECT nextval('person_id_seq')"); - execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')"); -با اجرا دستور فوق مقدار جديد را در متغير new_id -نيز خواهيدداشت كه مي‌توانيد آن را در بقيه -درخواست‌هاي نيز استفاده كنيد. توجه داشته -باشيد كه نام SEQUENCEيي كه به طور اتوماتيك ايجاد -شده است به صورت table_serialcolumn_seq‌ خواهد بود. كه -در آن table‌ نام جدول Ùˆ serialcolumn نام فيلد سريال -جدول مي‌باشد. -براي ديدن مقدار نسبت داده شده به فيلد سريال -نيز مي‌توان از تابع () currval به صورت زير -استفاده كرد. - execute("INSERT INTO person (name) VALUES ('Blaise Pascal')"); - new_id = execute("SELECT currval('person_id_seq')"); -Ùˆ سرانجام شما مي‌توانيد از مقدار OID كه خروجي -دستور INSERT است براي ديدن مقدار پيش فرض -استفاده كنيد. هر چند اين روش در همه پلتفرمها -قابل استفاده نيست Ùˆ ضمن اينكه فيلد oid‌ بعد -از عدد 4 ميليارد دوباره صفر مي‌شود. در زبان -perl با استفاده از DBI Ùˆ DBD::Pg مقدار oid‌را -مي‌توانيد به شكل زير استخراج كنيد: بعد از -اجراي ()st->execute$ مقدار oid‌ در متغير sth->pg_oid_status$ -ذخيره خواهد شد. -4.15.3) آیا توابع ()nextval Ùˆ ()currval منجر به ایجاد -شرایط race برای سایر کاربران Ù…ÛŒ شوند؟ -خیر، استفاده از این توابع شرایط race را به -وجود نمی آورد. -4.15.4) چرا اعداد سریالی مربوط به تراکنشهای abort -شده مجدداً استفاده نمی شود؟ چرا بین اعداد -سریالی یک فاصله خالی ایجاد Ù…ÛŒ شود؟ -برای بالا بردن امکان اجرای همزمان تراکنشها، -اعداد سریالی به محض اجرای تراکنش به آنها -تخصیص Ù…ÛŒ یابد در این حالت اگر بعضی از -تراکنشها abort شوند بین اعداد سریالی استفاده -شده یک فاصله خالی به وجود Ù…ÛŒ آید. -4.16) OID Ùˆ TID Ú†Ù‡ هستند؟ -OID راه حل PostgreSQL برای داشتن یک شناسه منحصر به -فرد برای هر ردیف است. هر ردیف جدیدی Ú©Ù‡ ایجاد -Ù…ÛŒ شود یک OID منحصر به فرد به آن اختصاص Ù…ÛŒ -یابد. تمام OIDهایی Ú©Ù‡ در حین initdb ایجاد Ù…ÛŒ شوند -از 16384 کمتر هستند Ùˆ OIDهایی بعداً تولید Ù…ÛŒ شود -از این عدد بزرگتر خواهد بود. نکته مهم آن است -Ú©Ù‡ OIDها نه تنها در یک جدول شبیه نیستند بلکه -در Ú©Ù„ پایگاه داده هیچ دو ردیفی دارای OID یکسان -نخواهد بود. -PostgreSQL از OID در سیستم داخلی خود برای ایجاد -ارتباط بین ردیفهای جداول مختلف استفاده Ù…ÛŒ -کند. توصیه Ù…ÛŒ شود Ú©Ù‡ یک ستون از نوع OID برای -ذخیره این فیلد در جدول ایجاد کنید. ساختن یک -نمایه برای این فیلد باعث دسترسی سریعتر به آن -خواهد شد. -تمام پایگاههای داده در PostgreSQL برای گرفتن OID -جدید از یک ناحیه مرکزی استفاده Ù…ÛŒ کند. ولی -اگر بخواهیم OID را به روش دیگری بگیریم Ùˆ یا -اینکه در حین Ú©Ù¾ÛŒ کردن یک جدول بخواهیم OIDهای -اصلی آن تغییر نکند به روش زیر Ù…ÛŒ توانیم عمل -کنیم: - - CREATE TABLE new_table(mycol int); - SELECT oid AS old_oid, mycol INTO tmp_table FROM old_table; - COPY tmp_table TO '/tmp/pgtable'; - COPY new_table WITH OIDS FROM '/tmp/pgtable'; - DROP TABLE tmp_table; -OID یک عدد صحیح 4 بایتی است Ùˆ بنابراین حداکثر -مقدار آن 4 میلیارد خواهد بود Ùˆ بعد از آن -مقدار آن سرریز خواهد شد. البته تا کنون برای -کسی این اتفاق نیفتاده است Ùˆ تصمیم گرداندگان -PostgreSQL آن است Ú©Ù‡ قبل از آنکه این اتفاق رخ دهد -این مشکل را برطرف کنند. -TIDها برای شناسایی محل فیزیکی یک ردیف بر اساس -بلوک Ùˆ آفست Ù…ÛŒ باشد. TIDها بعد از تغییر پیدا -کردن یک ردیف Ùˆ یا بازخوانی آن عوض Ù…ÛŒ شوند. -TIDها توسط نمایه ها استفاده Ù…ÛŒ شوند. -4.17) معني بعضي از ترمها Ùˆ كلماتي كه در PostgreSQL‌ -استفاده مي‌شود چيست؟ -لیست برخی از ترمها Ùˆ کلماتی Ú©Ù‡ استفاده Ù…ÛŒ -شوند: - table, relation, class :کلاس، رابطه، جدول - row, record, tuple چندتایی، رکورد، ردیف - column, field, attribute صفت، فیلد، ستون - retrieve, select انتخاب، خواندن - replace, updateبه روز کردن، جایگزینی - append, insert درج، اضافه کردن - OID, serial value مقدار سریال - portal, cursor - range variable, table name, table alias -یک لیست عمومی از ترمهای مورد استفاده در -پایگاه داده در آدرس -http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.htm -وجود دارد. -4.18) چرا من خطاي "ERROR: Memory exhausted in AllocSetAlloc" -مي‌گيرم؟ -این خطا احتمالاً یا به خاطر تمام شدن حافظه -مجازی سیستم شماست Ùˆ یا اینکه کرنل برای -برنامه ها در مورد میزان استفاده از حافظه -مجازی محدودیت اعمال کرده است. قبل از اجرای -برنامه اصلی یکی از دستورات زیر را اجرا کنید. - ulimit -d 262144 - limit datasize 256m -بسته به نوع شل یکی از این دستورات ممکن است با -موفقیت اجرا شود. با اجرای آن دستور محدودیت -حافظه مجازی برای برنامه ها برداشته شده Ùˆ با -این کار احتمالاً درخواستی Ú©Ù‡ قبلاً خطا Ù…ÛŒ -داده است اجرا خواهد شد. -4.19) از كجا تشخيص دهم كه ويرايش يا نسخه -PostgreSQLيي كه من استفاده مي‌كنم چيست؟ -با اجرای دستور ()SELECT version -4.20) چرا در حین اجرای عملیات روی large-objectها -خطای "invalid large obj descriptor"به وجود Ù…ÛŒ آید؟ -شما باید قبل از شروع دستوراتی Ú©Ù‡ با large-objectها -کار Ù…ÛŒ کنند از BEGIN Ùˆ بعد از آنها هم یک END -بگذارید. در حال حاضر PostgreSQL هندل large-objectها را -در زمان نهایی شدن تراکنش (commitشدن) Ù…ÛŒ بندد. به -همین دلیل اولین تلاش برای انجام هر کاری با -هندل منجر به خطای invalid large obj descriptor خواهد شد. -برای جلوگیری از این خطا حتماً باید از یک -تراکنش استفاده کنید. این کار همانطور Ú©Ù‡ -قبلاً گفته شد با استفاده از قرار دادن BEGIN Ùˆ END -در ابتدا Ùˆ انتهای دستورات انجام Ù…ÛŒ شود. -اگر این خطا را در حین استفاده از یک درایور ODBC -دریافت کردید احتمالاً باید این دستور را -اجرا کنید: set auto-commit off -4.21) چگونه يك ستون ايجاد كنم كه مقدار زمان -جاري را به عنوان مقدار پيش‌فرض داشته باشد؟ -از CURRENT_TIMESTAMP استفاده کنید در مثال زیر نحوه -انجام این کار نشان داده شده است: -CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP ); - -4.22) چرا "زير درخواستهايي" كه از IN استفاده -مي‌كنند كند هستند؟ -در نسخه های قبل از 7.4 عمل الحاق زیر درخواست Ùˆ -درخواست اصلی به این صورت انجام Ù…ÛŒ شود Ú©Ù‡ -نتایج به دست آمده از زیر درخواست به صورت -ترتیبی برای هر ردیف اعمال Ù…ÛŒ شود. اگر -زیردرخواست ردیف های Ú©Ù…ÛŒ را به عنوان خروجی -برگرداند Ùˆ درخواست بیرونی ردیف های زیادی را -شامل شود استفاده از IN بهترین روش است در غیر -اینصورت بهتر است از EXISTS استفاده شود - SELECT * - FROM tab - WHERE col IN (SELECT subcol FROM subtab); -به: - SELECT * - FROM tab - WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col); -برای اجرای سریع این درخواست باید برای ستون -subcol نمایه ایجاد شده باشد. -در نسخه های بعد از 7.4 IN برای الحاق از همان -تکنیک پیچیده مورد استفاده در دستورات معمولی -استفاده Ù…ÛŒ کند Ùˆ بنابراین استفاده از آن نسبت -به EXISTS ارجحیت دارد. -4.23) چگونه مي‌توانم يك الحاق خارجي (outer join) -انجام دهم؟ -برای انجام الحاق خارجی به روش زیر عمل کنید: - SELECT * - FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col); -یا - SELECT * - FROM t1 LEFT OUTER JOIN t2 USING (col); -درخواستهای بالا t1.col , t2.col را به هم الحاق Ù…ÛŒ -کند Ùˆ همچنین ردیفهای t1 Ú©Ù‡ نظیر آنها در t2 -نبوده است را نیز برمی گرداند. اگر از RIGHT -استفاده شود نتیجه بر عکس است. یعنی ردیفهای t2 -Ú©Ù‡ نظیر آنها در t1 نباشد را نشان Ù…ÛŒ دهد Ùˆ اگر -از FULL استفاده شود نتیجه هم شامل ردیفهای t1 -است Ùˆ هم شامل ردیفهای t2. استفاده از کلمه OUTER -اختیاری است چرا Ú©Ù‡ این کلمه به طور ضمنی -دستورهای LEFT, RIGHT, FULL وجود دارد. -در نسخه های قبلی پایگاه داده Ù…ÛŒ توانیم الحاق -خارجی را به Ú©Ù…Ú© دستورهای UNION, NOT IN شبیه سازی -کنیم. این کار در مثال زیر نشان داده شده است: - - 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) چگونه مي‌توان درخواستهايي از چند پايگاه -داده توليد كرد؟ -در حال حاضر این کار امکان پذیر نیست. PostgreSQL -فقط امکان درخواست از پایگاه داده ای را Ù…ÛŒ -دهد Ú©Ù‡ در حال حاضر به آن متصل باشید Ùˆ نمی -توان به طور همزمان از دو پایگاه داده استفاده -کرد. البته یک برنامه کاربردی خود Ù…ÛŒ تواند به -طور همزمان دو پایگاه داده را مورد استفاده -قرار داده Ùˆ نتایج را با هم ترکیب کند ولی نمی -تواند در یک درخواست به هر دو پایگاه داده -رجوع کند. -4.25) چگونه خروجي يك تابع مي‌تواند چند رديف -يا ستون باشد؟ -در نسخه 7.3 خروجی یک تابع Ù…ÛŒ تواند چند ردیف یا -چند ستون باشد. برای دیدن اطلاعات بیشتر به -سایت زیر مراجعه -کنید:http://techdocs.postgresql.org/guides/SetReturningFunctions -4.26) در توابع PL/PgSQL چرا نمي‌توان با اطمينان -جداول موقت را ايجاد يا حذف كرد؟ -PL/PgSQL محتوای توابع را ذخیره (cache) Ù…ÛŒ کند. یک -اثر بد جانبی این کار آن است Ú©Ù‡ اگر در تابع از -یک جدول موقت استفاده شود Ùˆ بعداً آن جدول حذف -Ùˆ یک جدول جدید به جای آن ایجاد شود، در -فراخوانی مجدد آن تابع، محتوای ذخیره شده -تابع هنوز به جدول قدیمی اشاره Ù…ÛŒ کند Ùˆ -بنابراین اجرای تابع با اشکال مواجه Ù…ÛŒ شود. -راه حل این مشکل آن است Ú©Ù‡ برای جداول موقت از -دستور EXECUTE استفاده شود Ú©Ù‡ این کار سبب Ù…ÛŒ شود -Ú©Ù‡ درخواست برای هر بار اجرا مجدداً پیمایش Ùˆ -تفسیر شود. -4.27) Ú†Ù‡ گزينه‌هايي براي تكرار (replication) وجود -دارد؟ -There are several master/slave replication options available. These allow only -the master to make database changes and the slave can only do database reads. -The bottom of http://gborg.PostgreSQL.org/genpage?replication_research lists -them. A multi-master replication solution is being worked on at -http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php. -4.28) Ú†Ù‡ گزينه‌هايي براي رمزنگاري وجود دارد؟ - contrib/pgcrypto شامل توابع رمزنگاری زیادی است Ú©Ù‡ - Ù…ÛŒ توان از آنها در دستورات SQL استفاده کرد. - برای رمز کردن ارتباط بین client Ùˆ server ØŒ پایگاه - داده حتماً گزینه SSL را بر روی پایگاه داده - فعال کنیم. - در نسخه 7.3 به بعد کلمات عبور کاربران به طور - اتوماتیک به صورت رمز شده ذخیره Ù…ÛŒ شود ولی - در نسخه های قبلی باید گزینه PASSWORD_ENCRYPTION در - فایلpostgresql.conf فعال کنیم. - Ù…ÛŒ توان پایگاههای داده را روی یک فایل سیستم - رمزشده نگاهداری کرد - - - -Extending PostgreSQL -5.1) من يك تابع نوشته‌ام. چگونه آن را در psql -اجرا كنم؟ چرا با اجراي آن core dump مي‌گيرم؟ -دلایل مختلفی Ù…ÛŒ تواند باعث بروز این مشکل -شود. اما قبل از همه تابع خود را به صورت جدا -تست کنید. -5.2) چگونه مي‌توانم در توليد نوع‌ها Ùˆ توابع -جديد Ùˆ جالب براي PostgreSQL‌ همكاري Ùˆ مشاركت -داشته باشم؟ -کد خود را به گروه پستی pgsql-hackers ارسال کنید. -5.3) چگونه مي‌توانم يك تابع به زبان C بنويسم -كه خروجي آن يك ‌tuple (چند تايي) باشد؟ -در نسخه های 7.3 به بعد یک تابع Ù…ÛŒ تواند یک جدول -را به عنوان خروجی برگرداند. این ویژگی در -توابعی Ú©Ù‡ به زبانهای C Ùˆ PL/PgSQL نوشته Ù…ÛŒ شوند -به طور کامل وجود دارد. راهنما برنامه نویسان -را مطالعه کنید. یک مثال از نحوه برگرداندن یک -جدول به عنوان خروجی در contrib/tablefunc آمده است. -5.4) من يك فايل منبع را عوض كرده ام چرا در -عمليات كامپيل مجدد آن تغيير ديده نمي‌شود؟ -Makefile برای فایلهای include شده وابستگیها را به -درستی نشان نمی دهد. برای اطمینان از اینکه -فایلی Ú©Ù‡ عوض کرده اید حتماً دوباره کامپیل Ù…ÛŒ -شود دستور make clean را اجرا کنید. اگر از کامپیلر -gcc استفاده Ù…ÛŒ کنید Ù…ÛŒ توانید از گزینه -enable-depend-- در موقع اجرای برنامه configure استفاده -کنید این گزینه باعث Ù…ÛŒ شود Ú©Ù‡ وابستگیها به -طور اتوماتیک تولید شود. \ No newline at end of file diff --git a/doc/FAQ_french b/doc/FAQ_french deleted file mode 100644 index 71f19f0095..0000000000 --- a/doc/FAQ_french +++ /dev/null @@ -1,1289 +0,0 @@ - - Foire Aux Questions (FAQ) pour PostgreSQL - - Dernière mise à jour : vendredi 14 novembre 2004 16:32:47 - - Mainteneur actuel : Bruce Momjian (pgman@candle.pha.pa.us) - - La plus récente version de ce document est disponible sur - http://www.PostgreSQL.org/docs/faqs/FAQ.html. - - Les questions spécifiques à la plateforme sont répondues sur - http://www.PostgreSQL.org/docs/index.html. - _________________________________________________________________ - - Questions générales - - 1.1) Qu'est ce que PostgreSQL ? Comment le prononcer ? - 1.2) Quelle est la licence de PostgreSQL ? - 1.3) Sous quels environnements Unix PostgreSQL tourne-t-il ? - 1.4) Sous quels environnements non-Unix PostgreSQL tourne-t-il ? - 1.5) Où puis-je me procurer PostgreSQL ? - 1.6) Où puis-je obtenir du support ? - 1.7) Quelle est la dernière version ? - 1.8) Quelle documentation est disponible ? - 1.9) Comment savoir quels sont les bogues connus ou les - fonctionnalités manquantes ? - 1.10) Comment puis-je apprendre le SQL ? - 1.11) PostgreSQL est-il compatible an 2000 ? - 1.12) Comment puis-je rejoindre l'équipe de développement ? - 1.13) Comment dois-je soumettre un rapport de bogue ? - 1.14) Comment PostgreSQL se compare-t'il à d'autres SGBD ? - 1.15) Comment puis-je aider financièrement PostgreSQL ? - - Questions sur le client utilisateur - - 2.1) Y a-t-il des pilotes ODBC pour PostgreSQL ? - 2.2) Quels outils sont disponibles pour utiliser PostgreSQL avec des - pages Web ? - 2.3) PostgreSQL a-t-il une interface graphique ? - 2.4) Quels langages sont disponibles pour communiquer avec - PostgreSQL ? - - Questions administratives - - 3.1) Comment installer PostgreSQL ailleurs que sous /usr/local/pgsql ? - 3.2) Quand je lance postmaster, j'obtiens un Bad System Call ou un - message core dumped. Pourquoi ? - 3.3) Quand je lance postmaster, j'obtiens des erreurs IpcMemoryCreate. - Pourquoi ? - 3.4) Quand je lance postmaster, j'obtiens des erreurs - IpcSemaphoreCreate. Pourquoi ? - 3.5) Comment contrôler les connexions d'autres machines ? - 3.6) Comment règler le moteur de la base de données pour de meilleures - performances ? - 3.7) Quelles fonctionalités de déboguage sont disponibles ? - 3.8) Pourquoi est-ce que j'obtiens des messages Sorry, too many - clients quand je me connecte ? - 3.9) Que contient le répertoire pgsql_tmp ? - 3.10) Pourquoi ai-je besoin de faire une sauvegarde des bases et de - restaurer pour mettre a jour les versions de PostgreSQL ? - 3.11) Quels matériels dois-je utiliser ? - - Questions fonctionnelles - - 4.1) Quelle est la différence entre curseur binaire et curseur - normal ? - 4.2) Comment faire un SELECT seulement sur les premières lignes d'une - requête ? Sur une ligne aléatoire ? - 4.3) Comment obtenir une liste des tables ou d'autres choses que je - vois dans psql ? - 4.4) Comment supprime-t-on une colonne d'une table, ou comment - change-t-on son type de données ? - 4.5) Quelle est la taille maximale pour une ligne, une table et une - base de données ? - 4.6) Combien d'espace disque faut-il pour stocker les données d'un - fichier texte typique ? - 4.7) Comment puis-je savoir quels index, tables, bases de données et - utilisateurs sont définis ? - 4.8) Mes requêtes sont lentes ou ne font pas usage des index. - Pourquoi ? - 4.9) Comment puis-je savoir si l'optimiseur évalue mes requêtes ? - 4.10) Qu'est-ce qu'un index R-tree ? - 4.11) Qu'est-ce que l'optimiseur génétique de requêtes ? - 4.12) Comment puis-je réaliser des recherches par des expressions - rationnelles ainsi que des recherches non sensibles à la casse ? - Comment puis-je utiliser un index lors de recherches non sensibles à - la casse ? - 4.13) Comment puis-je détecter si un champ est NULL dans une requête ? - 4.14) Quelle sont les différences entre les nombreux types de - caractères ? - 4.15.1) Comment puis-je créer un champ série, c'est-à-dire - s'incrémentant automatiquement ? - 4.15.2) Comment puis-je obtenir la valeur d'un SERIAL suite à une - insertion ? - 4.15.3) Est-ce que currval() et nextval() n'amènent pas des problèmes - lorsque plusieurs utilisateurs les lancent en même temps ? - 4.15.4) Pourquoi mes numéros de séquences ne sont pas ré-utilisés lors - d'une annulation de transaction ? Pourquoi existe-t'il des trous dans - la numérotation de ma colonne séquentielle (SERIAL) ? - 4.16) Qu'est-ce qu'un OID? Qu'est-ce qu'un TID ? - 4.17) A quoi correspond certains termes utilisés avec PostgreSQL ? - 4.18) Pourquoi ai-je l'erreur ERROR: Memory exhausted in - AllocSetAlloc() ? - 4.19) Comment puis-je connaître la version de PostgreSQL que - j'utilise ? - 4.20) Pourquoi ai-je invalid large obj descriptor lors d'opérations - avec des gros objets ? - 4.21) Comment puis-je créer une colonne qui aura par défaut l'heure - actuelle comme valeur ? - 4.22) Pourquoi mes sous-requêtes utilisant IN sont-elles si lentes ? - 4.23) Comment puis-je réaliser une jointure externe ? - 4.24) Comment puis-je lancer des requêtes utilisant plusieurs bases de - données ?? - 4.25) Comment puis-je renvoyer plusieurs lignes ou colonnes à partir - d'une fonction ? - 4.26) Pourquoi ne puis-je pas créer/supprimer des tables temporaires - dans les fonctions PL/PgSQL de façon stable ? - 4.27) Quelles options de cryptage sont disponibles ? - - Etendre PostgreSQL - - 5.1) J'ai écrit une fonction utilisateur. Lorsque je l'exécute avec - psql, pourquoi cela finit-il avec un "dump core" ? - 5.2) Comment puis-je contribuer avec de nouveaux types et fonctions - pour PostgreSQL ? - 5.3) Comment puis-je écrire une fonction C pour récupérer une ligne ? - 5.4) J'ai modifié un fichier source. Pourquoi la modification - n'est-elle pas visible après la recompilation ? - _________________________________________________________________ - - Questions générales - - 1.1) Qu'est ce que PostgreSQL ? Comment le prononcer ? - - PostgreSQL se prononce Post-Gres-Q-L. Un fichier audio est disponible - sur http://www.postgresql.org/postgresql.mp3 pour ceux souhaitant - entendre la prononciation. - - PostgreSQL est une amélioration du système de gestion de bases de - données POSTGRES (et est toujours quelque fois appelé "Postgres"), un - prototype de recherche de SGBD de prochaine génération. PostgreSQL - garde le puissant modèle de données et les types de données riches de - POSTGRES, mais remplace le langage de requêtes PostQuel par un - sous-ensemble étendu de SQL. PostgreSQL est gratuit et les sources - complets sont disponibles. - - PostgreSQL est écrit par une équipe de développeurs qui sont tous - inscrits à la liste de diffusion de développement de PostgreSQL. Le - coordinateur actuel est Marc G. Fournier (scrappy@PostgreSQL.org et - voir la section 1.6 pour contacter les développeurs). Cette équipe est - responsable de tout le développement de PostgreSQL. C'est un projet - soutenu par une communauté sans être contrôlé par une société. Pour y - contribuer, voir la FAQ des développeurs sur - http://www.postgresql.org/docs/faqs/FAQ_DEV.html. - - Les auteurs de PostgreSQL 1.01 étaient Andrew Yu et Jolly Chen. - Beaucoup d'autres personnes ont contribué au portage, aux tests, au - déboguage et à l'amélioration du code. Le code de Postgres original, - duquel PostgreSQL est dérivé, était le fruit de l'effort de nombreux - étudiants diplômés et non diplômés, et de programmeurs travaillant - sous la direction du Professeur Michael Stonebraker à l'université de - Californie, Berkeley. - - Le nom original du logiciel à Berkeley était Postgres. Quand le SQL - fut ajouté en 1995, le nom a dû être changé en Postgres95. Fin 1996, - le nom fut changé en PostgreSQL. - - 1.2) Quelle est la licence de PostgreSQL ? - - PostgreSQL est distribué sous la licence suivante : - - PostgreSQL Data Base Management System - - Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group - Portions Copyright (c) 1994-6 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. - - La licence ci-dessus est la licence BSD, une licence open-source - classique. - - 1.3) Sous quels environnements Unix PostgreSQL tourne-t-il ? - - En général, tout environnement compatible Unix moderne devrait pouvoir - faire fonctionner PostgreSQL. Les environnements qui ont été testés - explicitement sont listés dans les instructions d'installation. - - 1.4) Sous quels environnements non Unix PostgreSQL fonctionne-t'il ? - - À partir de la version 8.0, PostgreSQL fonctionne nativement sur les - systèmes d'exploitation Microsoft Windows à base NT comme Win2000, - WinXP et Win2003. Un installeur est disponible sur - http://pgfoundry.org/projects/pginstaller. - - Il existe aussi un port sur Novell Netware sur - http://forge.novell.com. - - 1.5) Où puis-je me procurer PostgreSQL ? - - Le site FTP anonyme principal de PostgreSQL est - ftp://ftp.PostgreSQL.org/pub. Pour les sites miroirs, voir notre site - web principal. - - 1.6) Où puis-je obtenir du support ? - - La liste de diffusion principale est pgsql-general@PostgreSQL.org. - Elle est disponible pour discuter de sujets en rapport avec - PostgreSQL. Pour s'y inscrire, il faut envoyer un courriel avec les - lignes suivantes dans le corps du message (pas dans la ligne du - sujet) : - subscribe - end - - à pgsql-general-request@PostgreSQL.org. - - Il existe aussi un recueil de la liste. Pour s'y inscrire, envoyez un - courriel à pgsql-general-digest-request@PostgreSQL.org avec dans le - corps : - subscribe - end - - Les recueils sont envoyés aux membres de cette liste dès que la liste - principale a reçu 30 Ko de messages. - - Une liste de diffusion de bogues est disponible. Pour s'y inscrire, - envoyer un courriel à pgsql-bugs-request@PostgreSQL.org avec dans le - corps : - subscribe - end - - Une liste de diffusion pour les développeurs est aussi disponible. - Pour s'y inscrire, envoyez un courriel à - pgsql-hackers-request@PostgreSQL.org avec dans le corps : - subscribe - end - - Vous pouvez trouver d'autres listes et informations sur PostgreSQL sur - le site web de PostgreSQL : - - http://www.PostgreSQL.org - - Il y a aussi un canal IRC sur Freenode et EFNet, le canal #PostgreSQL. - Vous pouvez utiliser la commande Unix irc -c '#PostgreSQL' "$USER" - irc.phoenix.net ou irc -c '#PostgreSQL' "$USER" irc.freenode.net. - - Une liste de sociétés pouvant fournir un support commercial est - disponible sur http://techdocs.postgresql.org/companies.php. - - 1.7) Quelle est la dernière version ? - - La dernière version de PostgreSQL est la version 7.4.5. - - Nous projetons de sortir une version majeure tous les six à huit mois. - - 1.8) Quelle documentation est disponible ? - - Plusieurs manuels, pages de manuel ainsi que des petits exemples de - test sont inclus dans la distribution. Voir le répertoire /doc. Vous - pouvez aussi accéder aux manuels en ligne sur - http://www.PostgreSQL.org/docs. - - Deux livres sur PostgreSQL sont disponibles en ligne sur - http://www.PostgreSQL.org/docs/awbook.html et - http://www.commandprompt.com/ppbook/. Il y a une liste de livres sur - PostgreSQL pouvant être achetés sur - http://techdocs.PostgreSQL.org/techdocs/bookreviews.php. Il y a aussi - une collection d'articles techniques sur PostgreSQL sur - http://techdocs.PostgreSQL.org/. - - psql possède des commandes \d pratiques montrant des informations sur - les types, opérateurs, fonctions, aggrégats, etc. - - Notre site web contient encore plus de documentations. - - 1.9) Comment savoir quels sont les bogues connus ou les fonctionnalités - manquantes ? - - PostgreSQL supporte un sous-ensemble étendu de SQL-92. Voir notre - liste TODO pour les bogues connus, les fonctionnalités manquantes et - les plans pour le futur. - - 1.10) Comment puis-je apprendre le SQL ? - - Le livre PostgreSQL sur http://www.PostgreSQL.org/docs/awbook.html - enseigne le SQL. Il existe un autre livre PostgreSQL sur - http://www.commandprompt.com/ppbook. Il existe de bons tutoriels sur - http://www.intermedia.net/support/sql/sqltut.shtm, - http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM - et http://sqlcourse.com. - - Un autre (en anglais uniquement) "Teach Yourself SQL in 21 Days, - Second Edition" se trouve sur - http://members.tripod.com/er4ebus/sql/index.htm - - Nombre de nos utilisateurs aiment The Practical SQL Handbook, Bowman, - Judith S., et al., Addison-Wesley. D'autres aiment The Complete - Reference SQL, Groff et al., McGraw-Hill. - - 1.11) PostgreSQL est-il compatible an 2000 ? - - Oui, nous manipulons facilement les dates après et avant l'an 2000. - - 1.12) Comment puis-je rejoindre l'équipe de développement ? - - Tout d'abord, téléchargez les derniers sources et lisez la - documentation pour les développeurs sur notre site web ou bien dans la - distribution. Ensuite, inscrivez-vous aux listes de diffusion - pgsql-hackers et pgsql-patches. Et pour finir, soumettez des - correctifs de grande qualité sur pgsql-patches. - - Environ une douzaine de personnes ont des droits de modification sur - l'archive CVS de PostgreSQL. Ils ont chacun soumis tellement de - correctifs de qualité qu'il était devenu impossible aux développeurs - de tenir la cadence et nous avions confiance dans le qualité des - correctifs qu'ils soumettaient. - - 1.13) Comment dois-je soumettre un rapport de bogue ? - - Merci de visiter la page PostgreSQL BugTool sur - http://www.PostgreSQL.org/bugs/bugs.php, qui donne des indications sur - la façon de soumettre un rapport de bogue. - - De même, vérifiez notre site ftp ftp://ftp.PostgreSQL.org/pub pour - voir s'il existe une version PostgreSQL plus récente ou des - correctifs. - - 1.14) Comment PostgreSQL se compare-til à d'autres SGBD ? - - Il y a plusieurs manières de mesurer un logiciel : les - fonctionnalités, les performances, la fiabilité, le support, et le - prix. - - Fonctionnalités - PostgreSQL possède la plupart des fonctionnalités présentes - dans les SGBD commerciaux, comme les transactions, les requêtes - imbriquées, les déclencheurs, les vues, l'intégrité - référentielle par clés étrangères, et le verrouillage - sophistiqué. Nous avons des fonctionnalités qu'ils n'ont pas, - comme les types définis par l'utilisateur, l'héritage, les - règles, et le contrôle de concurrence par multi-versionnage - pour réduire les contentions de verrouillage. - - Performances - PostgreSQL a des performances similaires aux autres bases de - données commerciales et open source. Il est plus rapide pour - certaines opérations, plus lent pour d'autres. Par rapport à - MySQL ou d'autres SGBD plus léger, nous sommes plus rapides - pour de nombreux utilisateurs, des requêtes complexes et une - charge pour les requêtes de lecture/écriture. MySQL est plus - rapide pour des requêtes SELECT simples effectuées par quelques - utilisateurs. Bien sûr, MySQL ne possède aucune des - fonctionnalités de la section Fonctionnalités ci-dessus. - PostgreSQL est construit pour la fiabilité et les - fonctionnalités et nous continuons à améliorer les performances - à chaque version. Il y a une page web intéressante qui compare - PostgreSQL à MySQL sur - http://openacs.org/philosophy/why-not-mysql.html. De plus, - MySQL est une société qui distribue son produit via l'open - source et requiert une licence commerciale pour les logiciels - propriétaires, donc pas une communauté de développement open - source comme PostgreSQL. - - Fiabilité - Nous somme conscients qu'un SGBD doit être fiable ou bien il - est inutile. Nous faisons le maximum pour sortir des versions - bien testées, du code stable ne contenant qu'un minimum de - bogues. Chaque version a au moins un mois de tests, et notre - historique de versions montre que nous pouvons fournir des - versions stables et robustes, prêtes pour une utilisation en - environnement de production. Nous pensons que nous nous - comparons favorablement aux autres bases de données dans ce - domaine. - - Support - Nos listes de diffusion offrent un contact avec un large groupe - de développeurs et d'utilisateurs afin d'aider à la résolution - des problèmes rencontrés. Nous ne pouvons garantir un correctif - mais les SGBD commerciaux ne le garantissent pas toujours non - plus. L'accès direct aux développeurs, à la communauté - d'utilisateurs, aux manuels, et au code source, fait du support - pour PostgreSQL un support supérieur aux autres SGBD. Un - support commercial par incident est disponible pour ceux qui en - ont le besoin (voir la section 1.6 de la FAQ). - - Prix - Nous sommes gratuits pour tous les usages, commerciaux et non - commerciaux. Vous pouvez inclure notre code dans vos produits - sans limitation, exceptées celles citées dans notre licence de - type BSD donnée plus haut. - - 1.15) Comment puis-je aider financièrement PostgreSQL ? - - PostgreSQL possède une infrastructure de première classe depuis le - début en 1996. Ceci grâce à Marc Fournier, qui a créé et géré cette - infrastructure des années durant. - - Une infrastructure de qualité est importante pour un projet - open-source. Cela permet d'empêcher l'éparpillement qui ralentirait - beaucoup l'avancement du projet. - - Bien sûr, cette infrastructure n'est pas donnée. Elle requiert un - certain nombre de dépenses mensuelles ou ponctuelles. Si vous ou votre - société peut donner de l'argent pour soutenir cet effort, merci de - consulter la page web http://store.pgsql.com/shopping/ et de faire une - donation. - - Bien que la page web mentionne PostgreSQL, Inc, les contributions sont - exclusivement utilisées pour soutenir le projet PostgreSQL et ne - soutiennent aucune société que ce soit. Si vous le préférez, vous - pouvez aussi envoyer un chèque à l'adresse de contact. - _________________________________________________________________ - - De plus, si vous avez une histoire de succès avec PostgreSQL, merci de - la soumettre à notre site d'évangélisation sur - http://advocacy.postgresql.org. - - Questions sur le client utilisateur - - 2.1) Existe-t'il des pilotes ODBC pour PostgreSQL ? - - Il y a deux pilotes ODBC disponibles, PsqlODBC et OpenLink ODBC. - - Vous pouvez télécharger PsqlOBDC depuis - http://gborg.postgresql.org/project/psqlodbc/projdisplay.php. - - OpenLink ODBC peut être obtenu depuis http://www.openlinksw.com. Il - fonctionne avec leur logiciel client ODBC standard, vous aurez donc - PostgreSQL ODBC sur toutes les plateformes client qu'ils supportent - (Win, Mac, Unix, VMS). - - Ils vendront probablement ce produit aux gens qui recherchent une - qualité de support professionnelle mais une version freeware sera - toujours disponible. Merci d'envoyer vos questions à - postgres95@openlink.co.uk. - - 2.2) Quels outils sont disponibles pour utiliser PostgreSQL avec des pages - Web ? - - Une bonne introduction aux pages Web adossés à une base de données se - trouve à http://www.webreview.com - - Pour l'intégration Web, PHP est une excellente interface. Elle se - trouve à http://www.php.net. - - Pour les cas complexes, beaucoup utilisent l'interface Perl et CGI.pm - ou mod_perl. - - 2.3) PostgreSQL a-t-il une interface graphique ? - - Oui, il y a plusieurs interfaces graphiques disponibles pour - PostgreSQL, dont PgAccess http://www.pgaccess.org), PgAdmin III - (http://www.pgadmin.org), RHDB Admin (http://sources.redhat.com/rhdb/ - et Rekall ( http://www.thekompany.com/products/rekall/, propriétaire). - Il y a aussi PhpPgAdmin ( http://phppgadmin.sourceforge.net/ ), une - interface Web pour PostgreSQL. - - Voir http://techdocs.postgresql.org/guides/GUITools pour une liste - plus détaillée. - - 2.4) Quels langages sont disponibles pour communiquer avec PostgreSQL ? - - La plupart des langages de programmation couramment utilisés ont une - interface pour PostgreSQL. Vérifiez la liste des modules de votre - langage. - - Les interfaces ci-dessous sont incluses dans la distribution : - * C (libpq) - * Embedded C (ecpg) - * Java (jdbc) - * Python (PyGreSQL) - * TCL (libpgtcl) - - Interfaces supplémentaires disponibles sur http://gborg.postgresql.org - dans la section Drivers/Interfaces - _________________________________________________________________ - - Questions Administratives - - 3.1) Comment installer PostgreSQL ailleurs que sous /usr/local/pgsql ? - - Il faut spécifier l'option --prefix lors du lancement de configure. - - 3.2) Quand je lance postmaster, j'obtiens un Bad System Call ou un message - core dumped . Pourquoi ? - - Cela peut être dû à une variété de problèmes mais vérifiez d'abord que - vous avez les extensions System V installées pour votre noyau. - PostgreSQL nécessite le support noyau pour la mémoire partagée et les - sémaphores. - - 3.3) Quand je lance postmaster, j'obtiens des erreurs IpcMemoryCreate. - Pourquoi ? - - Soit vous n'avez pas configuré correctement la mémoire partagée dans - votre noyau, soit vous devez augmenter la mémoire partagée disponible - dans le noyau. Le montant exact dont vous avez besoin dépend de votre - architecture et du nombre de tampons et de processus que vous avez - configuré pour postmaster. Pour la plupart des systèmes avec un nombre - par défaut de tampons et de processus, vous aurez besoin d'un minimum - d'environ 1 Mo. Voir le chapitre Administration du manuel PostgreSQL - pour des informations plus détaillées sur la mémoire partagée et les - sémaphores. - - 3.4) Quand je lance postmaster, j'obtiens des erreurs IpcSemaphoreCreate. - Pourquoi ? - - Si le message d'erreur est IpcSemaphoreCreate: semget failed (No space - left on device) alors votre noyau n'est pas configuré avec - suffisamment de sémaphores. PostgreSQL a besoin d'un sémaphore par - processus serveur potentiel. Une solution provisoire est de lancer - postmaster avec une plus petite limite sur le nombre de processus - serveur. Utilisez l'option -N avec un paramètre inférieur au choix par - défaut de 32. Une solution permanente est d'augmenter les paramètres - SEMMNS et SEMMNI de votre noyau. - - Des sémaphores inopérantes peuvent aussi provoquer des plantages - pendant de gros accès à la base de données. - - Si le message d'erreur est autre chose, vous n'avez peut-être pas du - tout le support des sémaphores dans votre noyau. Voir le chapitre - Administration du manuel PostgreSQL pour des informations plus - détaillées sur la mémoire partagée et les sémaphores. - - 3.5) Comment contrôler les connexions d'autres machines ? - - Par défaut, PostgreSQL autorise seulement les connexions de la machine - locale en utilisant les sockets de domaine Unix ou les connexions - TCP/IP. D'autres machines ne seront pas capables de se connecter sauf - si vous modifiez listen_addresses dans postgresql.conf et activez une - authentification basée sur l'hôte en modifiant le fichier - $PGDATA/pg_hba.conf en accord. - - 3.6) Comment régler le moteur de la base de données pour de meilleures - performances ? - - Des index accéléreront les requêtes. La commande EXPLAIN ANALYZE vous - permet de voir comment PostgreSQL traite votre requête et quels index - sont utilisés. - - Si vous faites beaucoup d'insertions (instruction INSERT), envisagez - de les faire en une fois en utilisant la commande COPY. Ceci est plus - rapide que des commandes INSERTS individuelles. Deuxièment, les - requêtes qui ne sont pas dans des blocs de transaction BEGIN - WORK/COMMIT sont considérés comme étant dans leur propre transaction. - Envisagez de faire plusieurs instructions dans un seul bloc de - transaction. Ceci réduira la surcharge apportée par les transactions. - Aussi, envisagez d'abandonner et de recréer des index lors de grosses - modifications de données. - - Il y a plusieurs options d'optimisations. Vous pouvez désactiver - fsync() en lançant postmaster avec l'option -o -F. Ceci empêchera les - fsync()s d'écrire sur disque après toute transaction. - - Vous pouvez utiliser l'option -B de postmaster pour augmenter le - nombre de tampons de mémoire partagée utilisés par les processus - serveurs. Si vous fixez ce paramètre trop haut, postmaster ne se - lancera pas car vous avez dépassé la limite de votre noyau sur la - quantité de mémoire partagée. Chaque tampon fait 8 Ko et le choix par - défaut est de 64 tampons. - - Vous pouvez utiliser l'option serveur -S pour augmenter la quantité - maximale de mémoire utilisée par les processus serveurs pour des tris - temporaires. La valeur de -S est mesuré en kilooctets et le choix par - défaut est de 512 (c'est-à-dire 512 Ko). - - Vous pouvez utiliser la commande CLUSTER pour regrouper vos données en - tables pour correspondre à un index. Voir la page de manual CLUSTER - pour plus de détails. - - 3.7) Quelles fonctionalités de déboguage sont disponibles ? - - PostgreSQL a plusieurs fonctionalités qui permettent de recueillir des - informations de statut qui peuvent être utile pour des intentions de - déboguage. - - D'abord, en lançant configure avec l'option --enable-cassert, beaucoup - d'assert()s surveillent le serveur et arrêtent le programme quand - quelque chose d'inattendu arrive. - - Postmaster et postgres ont tous deux plusieurs options de déboguage de - disponible. D'abord, quand vous lancez postmaster, vérifiez que vous - envoyez les sorties standard et d'erreur dans un fichier de traces - comme : - cd /usr/local/pgsql - ./bin/postmaster >server.log 2>&1 & - - Ceci va créer un fichier server.log dans le répertoire racine de - PostgreSQL. Ce fichier contient des informations utiles sur les - problèmes ou erreurs rencontrés par le serveur. Postmaster dispose - d'une option -d qui permet de rapporter des informations encore plus - détaillées d'être rapportées. L'option -d prend un numéro qui spécifie - le niveau de déboguage. Faites attention au fait que des valeurs - élévées de niveau de déboguage génerent des fichiers de traces - volumineux. - - Si postmaster ne tourne pas, vous pouvez lancer le serveur postgres de - la ligne de commande et taper votre requête SQL directement. Ceci est - recommandé seulement pour des fonctions de déboguage. Notez qu'un - retour chariot termine la requête, pas un point-virgule. Si vous - compilez avec les symboles de déboguage, vous pouvez utiliser un - débogueur pour voir ce qui se passe. Parce que le serveur n'a pas été - lancé par postmaster, il ne tourne pas dans un environnement identique - et les problèmes d'interaction de verrouillage/serveur ne peuvent être - dupliqués. - - Si postmaster est en train de tourner, lancez psql dans une fenêtre - puis trouvez le PID du processus postgres utilisé par psql. Utilisez - un débogueur pour l'attacher au PID postgres. Vous pouvez mettre un - point d'arrêt dans le débogueur et envoyez des requêtes de psql. Si - vous déboguez le démarrage de postgres, vous pouvez mettre - PGOPTIONS="-W n", puis lancez psql. Ceci va retarder le démarrage de n - secondes pour que vous puissiez attacher un débogueur au processus, - fixer des points d'arrêt et continuer la séquence de démarrage. - - Le programme postgres a les options -s, -A et -t qui peuvent être - utile pour des mesures de déboguage et de performance. - - Vous pouvez compiler avec les options de performance pour voir quelles - fonctions prennent du temps d'exécution. Les fichiers de gestion du - serveur seront déposés dans le répertoire pgsql/data/base/nom_db. Les - fichiers de gestion clients seront mis dans le répertoire actuel du - client. Linux requiert une compilation avec -DLINUX_PROFILE pour une - meilleure gestion. - - 3.8) Pourquoi est-ce que j'obtiens des messages Sorry, too many clients - quand je me connecte ? - - Vous pouvez augmenter la limite de postmaster sur le nombre de - processus serveur concurrents qu'il peut lancer. - - La limite par défaut est de 32 processus. Vous pouvez l'augmenter en - relançant postmaster avec une valeur -N appropriée ou en modifiant - postgresql.conf. - - Tenez compte du fait que si vous fixez -N plus grand que 32, vous - devez aussi augmenter -B au-dela de sa valeur par défaut 64 ; -B doit - valoir au moins deux fois -N et probablement plus pour une meilleure - performance. Pour de grand nombres de processus serveurs vous aurez - probablement aussi augmenter plusieurs parametres de configuration du - noyau Unix. Les choses a vérifier incluent la taille maximale des - blocs de mémoire partagée, SHMMAX ; le nombre maximal de sémaphores, - SEMMNS et SEMMNI ; le nombre maximal de processus, NPROC ; le nombre - maximal de processus par utilisateur, MAXUPRC ; et le nombre maximal - de fichiers ouverts, NFILE et NINODE. La raison pour laquelle - PostgreSQL a une limite sur le nombre de processus serveurs autorisés - est pour que votre système ne tombe pas à court de ressources. - - 3.9) Que contient le répertoire pgsql_tmp ? - - Ce répertoire contient des fichiers temporaires générés par le moteur - de requête. Par exemple, si un tri doit être fait pour satisfaire un - ORDER BY et que ce tri requiert plus de place que le paramètre -S du - serveur n'autorise, alors des fichiers temporaires seront créés pour - contenir les données nécessaires. - - Les fichiers temporaires sont d'habitude effacés automatiquement mais - peuvent rester si un serveur s'arrête brutalement pendant un tri. Un - arrêt et un redémarrage de postmaster effacera les fichiers dans ces - répertoires. - - 3.10) Pourquoi est-ce que j'ai besoin de faire une sauvegarde des bases et - de restaurer pour mettre a jour les versions de PostgreSQL ? - - L'équipe PostgreSQL ne fait que des changements mineurs entre des - versions mineurs, donc mettre à jour de 7.2 vers 7.2.1 ne nécessitera - pas de sauvegarde et de restauration. Par contre, les sorties majeures - (c'est-à-dire de 7.2 vers 7.3) changent souvent le format interne des - tables systèmes et des fichiers de données. Ces modifications sont - souvent complexes alors nous ne gardons pas de compatibilité - descendante pour les fichiers de données. Une sauvegarde exportera les - données dans un format générique qui peut ensuite être chargé dans le - nouveau format interne. - - Dans les sorties où le format sur disque ne change pas, le script - pg_upgrade peut être utilisé pour mettre à jour sans - sauvegarde/restauration. Les notes de sorties précisent si pg_upgrade - est disponible pour la sortie. - - 3.11) Quels matériels dois-je utiliser ? - - Comme le matériel PC est compatible en grosse partie, les gens ont - tendance à croire que tous les matériels PC sont de même qualité. Ce - n'est pas le cas. La RAM ECC, le SCSI et les cartes-mère de qualité - sont plus fiables et ont de meilleurs performances qu'un matériel - moins coûteux. PostgreSQL fonctionnera sur à peu près tout matériel - mais si la fiabilité et la performance sont importantes pour vous, il - est rusé de bien considérer les options matérielles. Nos listes de - diffusion peuvent être utilisées pour discuter des options matériels. - _________________________________________________________________ - - Questions fonctionnelles - - 4.1) Quelle est la différence entre curseur binaire et curseur normal ? - - Voir la page DECLARE du manuel pour une description. - - 4.2) Comment faire un SELECT seulement sur les premières lignes d'une - requête ? Sur une ligne aléatoire ? - - Voir la page FETCH du manuel ou utiliser SELECT ... LIMIT.... - - Il se peut que l'intégralité de la requête doive être évaluée, même si - vous voulez seulement les premières lignes. Envisagez d'utiliser une - requête avec une clause ORDER BY. S'il existe un index correspondant à - l'ORDER BY, PostgreSQL peut n'évaluer que les premières lignes, sinon - l'intégralité de la requête peut être évaluée, jusqu'à générer les - lignes désirées. - - Pour faire un SELECT sur une ligne aléatoire : - SELECT colonne - FROM table - ORDER BY random() - LIMIT 1; - - 4.3) Comment obtenir une liste des tables ou d'autres objets que je vois - dans psql ? - - Utilisez la commande \dt pour voir les tables dans psql. Pour une - liste complète de commandes à l'intérieur de psql, vous pouvez - utiliser \?. Autrement, vous pouvez lire le code source de psql dans - le fichier pgsql/src/bin/psql/describe.c. Il contient des commandes - SQL qui génèrent le contenu des commandes anti-slash de psql. Vous - pouvez aussi lancer psql avec l'option -E, afin qu'il imprime les - requêtes qu'il utilise pour exécuter les commandes que vous lui - passez. PostgreSQL fournit aussi une interface d'informations sur le - schéma compatible avec SQLi que vous pouvez interroger des - informations sur la base de données. - - 4.4) Comment supprime-t-on une colonne d'une table, ou comment change-t-on - son type de données ? - - La fonction DROP COLUMN a été ajoutée dans la version 7.3 avec ALTER - TABLE DROP COLUMN. Pour les versions précédentes, vous pouvez faire : - BEGIN; - LOCK TABLE ancienne_table; - SELECT ... -- sélectionnez toutes les colonnes sauf celle à supprimer - INTO TABLE nouvelle_table - FROM ancienne_table; - DROP TABLE ancienne_table; - ALTER TABLE nouvelle_table RENAME TO ancienne_table; - COMMIT; - - Pour changer le type de données d'une colonne, faites : - BEGIN; - ALTER TABLE table ADD COLUMN nouvelle_colonne nouveau_type_de_donnees; - UPDATE table SET nouvelle_colonne = CAST(ancienne_colonne AS nouveau_type_de_donnees); - ALTER TABLE table DROP COLUMN ancienne_colonne; - COMMIT; - - Après, vous pouvez faire VACUUM FULL tab pour récupérer l'espace - disque utilisé par les lignes expirées. - - 4.5) Quelle est la taille maximale pour une ligne, une table, une base de - données ? - - Les limites sont : - Taille maximum pour une base de données illimitée (il existe des basesde 32 To) - Taille maximum pour une table 32 To - Taille maximum pour une ligne 1,6 To - Taille maximum pour un champ 1 Go - Nombre maximum de lignes dans une table illimité - Nombre maximum de colonnes dans une table 250-1600, selon le type de colonnes - Nombre maximum d'index sur une table illimité - - Bien sûr, ces valeurs ne sont pas vraiment illimitée, elles sont - limitées par l'espace disque disponible, ainsi que par l'espace de - mémoire et de swap. Les performances peuvent se dégrader si ces - valeurs sont inhabituellement grandes. - - La taille maximum des tables (32 To) ne nécessite pas que le système - d'exploitation supporte les grands fichiers. Les grandes tables sont - stockées sous forme de fichiers multiples de 1 Go, donc les limites de - taille du système de fichier ne sont pas importantes. - - La taille maximum des tables et le nombre maximum de colonnes peuvent - être quadriplés, si la taille des blocs par défaut est augmentée à - 32 Ko. - - 4.6) Combien d'espace disque faut-il pour stocker les données d'un fichier - texte typique ? - - Une base de données PostgreSQL peut utiliser jusqu'à cinq fois - l'espace nécessaire pour stocker les données d'un fichier texte. - - A titre d'exemple, considérez un fichier de 100 000 lignes, comportant - un entier et une chaîne de description sur chaque ligne. Supposons que - la chaîne soit longue en moyenne de 20 octets. Le fichier texte serait - de 2,8 Mo. La taille du fichier d'une base de données PostgreSQL peut - être estimée à 6,4 Mo : - 32 octets: chaque ligne (approximation) - 24 octets: un champ 'entier' et un champ 'texte' - + 4 octets: pointeur vers le tuple sur la page - ---------------------------------------- - 60 octets par ligne - - La taille des pages de données dans PostgreSQL est de 8192 octets (8 KO), donc : - - 8192 octets par page - ---------------------- = 136 lignes par page de base de données (arrondi à l'entier inférieur) - 60 octets par ligne - - 100000 lignes de données - ------------------------- = 735 pages de base de données (arrondi à l'entier supérieur) - 128 lignes par page - -735 pages de base de données * 8192 octets par page = 6 021 120 octets (6,4 Mo) - - Les index utilisent moins d'espace, mais ils contiennent les données - indexées, ils peuvent donc également être grands. - - Les NULL sont stockés sous forme de bitmap, aussi utilisent-ils très - peu d'espace. - - 4.7) Comment puis-je savoir quels index, tables, bases de données et - utilisateurs sont définis ? - - psql dispose de plusieurs commandes commençant par un anti-slash pour - retrouver ces informations. Utilisez \? pour les connaître. Il existe - aussi des tables systèmes, qui commencent par pg_ et qui les décrivent - également. Aussi, psql -l liste toutes les bases de données. - - Essayez également le fichier pgsql/src/tutorial/syscat.source. Il - illustre un grand nombre de commandes SELECT nécessaires pour - récupérer l'information des tables système de la base de données. - - 4.8) Mes requêtes sont lentes ou ne font pas usage des index. Pourquoi ? - - Les index ne sont pas automatiquement utilisés par chaque requête. Ils - sont utilisés uniquement si la table est plus grande qu'une certaine - taille, et si la requête sélectionne seulement un faible pourcentage - des lignes de la table. Ceci est dû au fait qu'un accès disque - aléatoire causé par un parcours d'index peut être plus lent qu'une - simple lecture de la table, ou parcours séquentiel - - Pour déterminer si un index devrait être utilisé, PostgreSQL a besoin - des statistiques de la table. Ces statistiques sont collectées en - lançant VACUUM ANALYZE ou simplement ANALYZE. Avec les statistiques, - l'optimiseur sait combien de lignes se trouvent dans la table et peut - mieux déterminer s'il faut utiliser l'index. Les statistiques sont - également utiles pour déterminer l'ordre optimal des opérations de - jointure. La collecte des statistiques devrait être effectuée - régulièrement lorsque le contenu de la table change. - - Les index ne sont normalement pas utilisés pour les clauses ORDER BY - ou pour les jointures. Un parcours séquentiel suivi d'un tri explicite - est habituellement plus rapide qu'un parcours d'index pour une table - importante. Toutefois, LIMIT combiné avec ORDER BY utilisera souvent - un index parce que seulement une petite partie de la table est - renvoyée. En fait, bien que MAX() et MIN() n'utilisent pas les index, - il est possible de retrouver ces valeurs en utilisant un index avec - ORDER BY et LIMIT : - SELECT colonne - FROM table - ORDER BY colonne [ DESC ] - LIMIT 1; - - Si vous pensez que l'optimiseur choisit par erreur un parcours - sequentiel, utilisez SET enable_seqscan TO 'off' et lancez des tests - pour voir si le parcours d'index est effectivement plus rapide. - - Lorsque vous utilisez des caractères joker tels que LIKE ou ~, les - index peuvent seulement être utilisés dans certaines circonstances : - * Le début de la chaîne de recherche doit être ancré au départ de la - chaîne, c'est-à-dire - + Les modèles pour LIKE ne doivent pas commencer par %. - + Les modèles d'expression régulière pour ~ doivent commencer - par ^. - * La chaîne de recherche ne peut pas commencer par une classe de - caractères, c'est-à-dire [a-e]. - * Les recherches sans casse comme ILIKE et ~* n'utilisent pas les - index. Utilisez plutôt les index fonctionnels, décrit dans la - section 4.12. - * La locale C par défaut doit être utilisée lors de initdb. - - Dans les versions antérieures à la 8.0, les indexs ne peuvent souvent - pas être utilisés sauf si les types de données correspondent - exactement au type de la colonne de l'index. Ceci est particulièrement - vrai pour les index de colonnes de type int2, int8 et numeric. - - 4.9) Comment puis-je savoir si l'optimiseur évalue mes requêtes ? - - Voir la page EXPLAIN du manuel. - - 4.10) Qu'est-ce qu'un index R-tree ? - - Un index R-tree est utilisé pour l'indexation des données spatiales. - Un index de hachage ne permet pas les recherches par plage. Un index - B-tree peut seulement faire des recherches sur une dimension. Les - index R-tree peuvent traiter des données multi-dimensionnelles. Par - exemple, si un index R-tree peut être construit sur un attribut de - type point, le système peut plus efficacement gérer les requêtes du - type "Sélection de tous les points d'un rectangle". - - L'article de référence qui décrit le système R-tree original est : - - 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. - - Vous pouvez également trouver ce papier dans le livre de Stonebraker - "Readings in Database Systems". - - Les index R-tree intégrés peuvent prendre en charge les polygônes et - les boîtes. En théorie, les R-trees peuvent être étendus à un plus - grand nombre de dimensions. En pratique, l'extension des R-trees - requiert pas mal de travail et nous n'avons pour le moment aucune - documentation sur la façon de procéder. - - 4.11) Qu'est-ce que l'optimiseur génétique de requêtes ? - - Le module GEQO (acronyme de GEnetic Query Optimizer) accélère - l'optimisation des requêtes lors de jointures de nombreuses tables par - un algorithme génétique (GA). Il permet la gestion des grosses - requêtes de jointures en utilisant une recherche non exhaustive. - - 4.12) Comment puis-je réaliser des recherches sur des expressions - rationnelles ainsi que des recherches non sensibles à la casse ? Comment - puis-je utiliser un index lors de recherches non sensibles à la casse ? - - L'opérateur ~ réalise des recherches d'expressions rationnelles et ~* - le fait sans tenir compte de la casse. La variante de LIKE non - sensible à la casse est ILIKE. - - Des comparaisons d'égalité non sensibles à la casse sont - habituellement exprimées de cette façon : - SELECT * - FROM table - WHERE lower(colonne) = 'abc'; - - Ceci n'utilisera pas un index standard. Néanmoins, si vous créez un - index fonctionnel, celui-ci sera utilisé : - CREATE INDEX tableindex ON table (lower(colonne)); - - 4.13) Comment puis-je détecter si un champ est NULL dans une requête ? - - Il vous suffit de tester la colonne avec IS NULL ou IS NOT NULL. - - 4.14) Quelle sont les différences entre les nombreux types de caractères ? - -Type Nom interne Notes --------------------------------------------------- -VARCHAR(n) varchar n spécifie la taille maximum, sans remplissage -CHAR(n) bpchar des espaces sont ajoutés pour obtenir la - longueur fixe spécifiée -TEXT text pas de limite supérieure pour la taille -BYTEA bytea tableau d'octets (accepte les octets nuls) -"char" char un caractère - - Vous verrez le nom interne en examinant les catalogues système et dans - quelques messages d'erreur. - - Les quatres premiers types du dessus sont des types "varlena" - (c'est-à-dire que les quatre premiers octets correspondent à la - taille, suivi des données). Donc, l'espace réellement utilisé est - légèrement plus grand que la taille déclarée. Néanmoins, ces types de - données sont aussi sujet à la compression ou à un enregistrement en - dehors de la table avec TOAST, donc l'espace occupé sur disque - pourrait aussi être moindre que ce qu'on pourrait attendre. - - VARCHAR(n) est bien mieux pour enregistrer des chaînes de longueurs - variables tout en limitant la taille de cette chaîne. TEXT est utile - pour les chaînes de longueur illimitée, avec malgré tout un maximum de - 1 Go. - - CHAR(n) est intéressant pour stocker des chaînes de taille identique. - CHAR(n) complète avec des espaces pour arriver à la taille spécifiée - alors que VARCHAR(n) n'enregistre que les caractères donnés. BYTEA - sert à stocker des données binaires, particulièrement les données - incluant des octets NULL. Tous les types décrits ici ont des - performances similaires. - - 4.15.1) Comment puis-je créer un champ série, c'est-à-dire s'incrémentant - automatiquement ? - - PostgreSQL supporte un type de données SERIAL. Il crée automatiquement - une séquence. Par exemple, ceci : - CREATE TABLE personne ( - id SERIAL, - nom TEXT - ); - - est automatiquement traduit en ceci : - CREATE SEQUENCE personne_id_seq; - CREATE TABLE personne ( - id INT4 NOT NULL DEFAULT nextval('personne_id_seq'), - nom TEXT - ); - - Voir la page man de create_sequence pour plus d'informations sur les - séquences. Vous pouvez aussi utiliser le champ OID de chaque ligne - comme valeur unique. Néanmoins, si vous avez besoin de sauvegarder - puis recharger la base de données, vous devrez utiliser l'option -o ou - l'option COPY WITH OIDS de pg_dump pour conserver les OIDs. - - 4.15.2) Comment puis-je obtenir la valeur d'un SERIAL suite à une - insertion ? - - Une approche pour récupérer la prochaine valeur SERIAL à partir de - l'objet séquence est d'utiliser la fonction nextval() avant - l'insertion et de l'insérer ensuite explicitement. En utilisant la - table d'exemple de la section 4.15.1, un exemple dans un - pseudo-langage ressemblerait à ceci : - nouvelle_id = execute("SELECT nextval('personne_id_seq')"); - execute("INSERT INTO personne (id, nom) VALUES (nouvelle_id, 'Blaise Pascal')"); - - Vous pourriez ensuite utiliser la nouvelle valeur stockée dans - nouvelle_id avec d'autres requêtes (c'est-à-dire en tant que clé - étrangère de la table personne). Notez que le nom de la SEQUENCE - automatiquement créée sera
__seq, où table et - colonneserial sont les noms respectifs de votre table et de votre - colonne SERIAL. - - Autrement, vous pouvez récupérer la valeur SERIAL affectée avec la - fonction currval() après qu'elle ait été insérée par défaut, - c'est-à-dire, - execute("INSERT INTO personne (nom) VALUES ('Blaise Pascal')"); - nouvelle_id = execute("SELECT currval('personne_id_seq')"); - - Enfin, vous pouvez utiliser l'OID renvoyé par l'instruction INSERT - pour récupérer la valeur par défaut bien que cela soit l'appoche la - moins portable et la valeur de l'OID se réinitialisera aux environs de - quatre milliards. En Perl, avec DBI et le module DBD:Pg d'Edmund - Mergl, l'ancienne valeur est disponible via $sth->{pg_oid_status} - après un $sth->execute(). - - 4.15.3) Est-ce que currval() et nextval() n'amènent pas des problèmes - lorsque plusieurs utilisateurs les lancent en même temps ? - - Non. currval() renvoie la valeur actuelle affectée par votre - processus, et non pas par tous les utilisateurs. - - 4.15.4) Pourquoi mes numéros de séquences ne sont pas ré-utilisés lors - d'une annulation de transaction ? Pourquoi existe-t'il des trous dans la - numérotation de ma colonne séquentielle (SERIAL) ? - - Pour améliorer les accès concurrents, les valeurs de séquences sont - données aux transactions qui en ont besoin et ne sont pas bloquées - jusqu'à la fin de la transaction. Ceci crée des trous dans le - numérotage pour les transactions annulées. - - 4.16) Qu'est-ce qu'un OID ? Qu'est-ce qu'un TID ? - - Les OID sont la réponse de PostgreSQL aux identifiants de lignes - uniques. Chaque ligne créée dans PostgreSQL obtient un OID unique. - Tous les OID générés pendant initdb sont inférieurs à 16384 (voir - include/access/transam.h). Tous les OID créés par un utilisateur sont - supérieurs ou égaux à ceci. Par défaut, tous ces OID sont uniques non - seulement dans une table ou une base mais unique à l'intérieur d'une - installation PostgreSQL entière. - - PostgreSQL utilise les OID dans ses tables système interne pour lier - les lignes entre tables. Ces OID peuvent être utilisés pour identifier - des lignes utilisateurs spécifiques et utilisés dans des jointures. Il - est recommandé que vous utilisiez le type de colonne OID pour stocker - des valeurs OID. Vous pouvez créer un index sur le champ OID pour un - accès plus rapide. - - Les OID sont attribués pour toute ligne d'un endroit central qui est - utilisé par toutes les bases de données. Si vous voulez changer l'OID - en quelque chose d'autre ou si vous voulez faire une copie de la table - avec les OID originaux, il n'y a pas de raisons pour ne pas le faire : - CREATE TABLE nouvelle_table (macolonne int); - SELECT oid AS ancienne_oid, macolonne INTO table_temporaire FROM ancienne_table; - COPY table_temporaire FROM '/tmp/tablepg'; - COPY nouvelle_table WITH OIDS FROM '/tmp/tablepg'; - DROP TABLE table_temporaire; - - Les OID sont stockés en tant qu'entiers de quatre octets et - déborderont à quatre milliards. Personne n'a jamais rapporté un tel - cas et nous avons prévu de retirer la limite avant que cela ne se - produise. - - Les TIDs sont utilisés pour identifier des lignes physiques - spécifiques avec des valeurs de bloc et décalage. Les TID changent - après que les lignes aient été modifiés ou rechargés. Ils sont - utilisés par des entrées d'index pour pointer vers des lignes - physiques. - - 4.17) A quoi correspond certains termes utilisés avec PostgreSQL ? - - Une partie du code source et de l'ancienne documentation utilisent des - termes dont l'usage est plus commun. Voici quelques exemples : - * table, relation, classe - * ligne (row), enregistrement (record), tuple - * colonne (column), champ (field), attribut - * récupère, sélectionne (select) - * remplace (replace), met à jour (update) - * ajoute (append), insère (insert) - * OID, valeur séquentielle (serial value) - * portal, curseur - * range variable, table name, table alias - - Une liste des termes généraux pour le domaine des bases de données est - disponible sur : - http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary - /glossary.html - - 4.18) Pourquoi ai-je l'erreur ERROR: Memory exhausted in AllocSetAlloc() ? - - Vous manquez probablement de mémoire virtuelle sur votre système ou - votre noyau a une limite assez basse pour certaines ressources. - Essayez ceci avant de lancer postmaster : - ulimit -d 262144 - limit datasize 256m - - Suivant votre shell, seul un d'eux pourrait réussir mais cela - configurera d'une façon plus importante la taille du segment de - données de votre processus. Cette commande s'applique au processus - actuel et à tous les processus lancé par celui-ci. Si vous avez des - problèmes avec le client SQL parce que le processus serveur renvoie - trop de données, essayez ça avant de lancer le client. - - 4.19) Comment puis-je connaître la version de PostgreSQL que j'utilise ? - - A partir de psql, tapez SELECT version(); - - 4.20) Pourquoi ai-je invalid large obj descriptor lors d'opérations sur des - gros objects ? - - Vous avez besoin de placer BEGIN WORK et COMMIT autour de chaque - utilisateur de gros objets, c'est-à-dire pour entourer lo_open ... - lo_close. - - Actuellement, PostgreSQL force cette règle en fermant les gros objets - lors de la transaction. Donc, le premier essai d'opérations sur ces - objets, fonctionnant habituellement (au moins la plupart du temps) - aura un invalid large obj descriptor. Donc le code, auparavant - fonctionnel (au moins la plupart du temps), génèrera maintenant un - message d'erreur si vous n'utilisez pas de transaction. - - Si vous utilisez une interface client interface comme ODBC, vous aurez - peut-être besoin de lancer auto-commit off. - - 4.21) Comment puis-je créer une colonne qui aura par défaut l'heure - actuelle comme valeur ? - - Utilisez CURRENT_TIMESTAMP: -CREATE TABLE test (x int, heuremodif timestamp DEFAULT CURRENT_TIMESTAMP ); - - 4.22) Pourquoi mes sous-requêtes utilisant IN sont-elles si lentes ? - - Dans les versions précédant la 7.4, les sous-requêtes ont été jointes - avec des jointures externes en parcourant séquentiellement le résultat - de la sous-requête pour chaque ligne de la requête externe. Si la - sous-requête renvoit quelques lignes et que la requête externe en - renvoit plein, IN sera plus rapide. Pour accélérer les autres - requêtes, remplacez IN avec EXISTS : - SELECT * - FROM table - WHERE colonne IN (SELECT souscolonne FROM soustable); - - to: - SELECT * - FROM table - WHERE EXISTS (SELECT souscolonne FROM soustable WHERE souscolonne = colonne); - - Pour que ceci soit rapide, souscolonne doit être une colonne indexée. - - A partir de la version 7.4, IN utilise actuellement les mêmes - techniques sophistiquées de jointures comme des requêtes normales et - est préféré à l'utilisation de EXISTS. - - 4.23) Comment puis-je réaliser une jointure externe ? - - PostgreSQL supporte les jointures externes en utilisant la syntaxe SQL - standard. Voici deux exemples : - SELECT * - FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col); - - or - SELECT * - FROM t1 LEFT OUTER JOIN t2 USING (col); - - Ces requêtes identiques joignent t1.col à t2.col et renvoient toute - colonne non jointe de t1 (celles sans correspondance dans t2). Une - jointure droite (RIGHT join) ajoutera les lignes non jointes de t2. - Une jointure complète (FULL join) renverra les lignes correspondantes - ainsi que les lignes non jointes de t1 et t2. Le mot clé OUTER est - optionnelle et assumé dans le cas de jointure LEFT, RIGHT et FULL. Les - jointures ordinaires sont appelées des jointures INNER. - - Lors des précédentes versions, les jointures externes peuvent être - simulées en utilisant UNION et NOT IN. Par exemple, lors d'une - jointure de tab1 et tab2, la requête suivante réalise une jointure - externe, outer, des deux tables : - 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) Comment puis-je lancer des requêtes utilisant plusieurs bases de - données ? - - Il n'existe pas de moyens de lancer des requêtes sur une autre base - que la courante. Comme PostgreSQL charge des catalogues systèmes - spécifiques à la base de données, sa réaction aux requêtes inter-base - de données est incertaine. - - contrib/dblink permet les requêtes entre bases de données en utilisant - des fonctions. Bien sûr un client peut réaliser des connexions - simultanées à plusieurs bases de données et joindre les résultats du - côté client. - - 4.25) Comment puis-je renvoyer plusieurs lignes ou colonnes à partir d'une - fonction? - - A partir de la 7.3, vous pouvez facilement renvoyer plusieurs lignes - ou colonnes à partir d'une fonction, - http://techdocs.postgresql.org/guides/SetReturningFunctions. - - 4.26) Pourquoi ne puis-je pas créer/supprimer des tables temporaires dans - les fonctions PL/PgSQL de façon stable ? - - PL/PgSQL cache le contenu des fonctions et un effet de bord malheureux - est que si une fonction PL/PgSQL accède à une table temporaire, que - cette table est ensuite supprimée et recréée, et que la fonction est - appelée de nouveau, la fonction échouera car le contenu de la fonction - cachée pointera toujours vers l'ancienne table temporaire. La solution - revient à utiliser EXECUTE pour l'accès aux tables temporaires avec - PL/PgSQL. Ceci obligera l'analyse de la requête à chaque fois. - - 4.27) Quelles options de cryptage sont disponibles ? - - * contrib/pgcrypto contient de nombreuses fonctions de cryptage, à - utiliser dans des requêtes SQL. - * Pour crypter une transmission entre le client et le serveur, le - serveur doit avoir positionné l'option ssl à true dans - postgresql.conf, et un enregistrement applicable host ou hostssl - doit exister dans pg_hba.conf, et le sslmode du client ne doit pas - être désactivée. Notez qu'il est aussi possible d'utiliser un - transport crypté d'une troisième partie, tel que stunnel ou ssh, - plutôt que les connexions SSL natives de PostgreSQL. - * Les mots de passe des utilisateurs sont automatiquement cryptés - depuis la version 7.3. Pour les versions précédentes, vous devez - activer l'option PASSWORD_ENCRYPTION dans postgresql.conf. - * Le serveur peut fonctionner avec un système de fichiers cryptés. - _________________________________________________________________ - - Etendre PostgreSQL - - 5.1) J'ai écrit une fonction utilisateur. Lorsque je l'exécute avec psql, - pourquoi cela finit-il avec un dump core ? - - Il peut y avoir plusieurs raisons. Essayez tout d'abord votre fonction - utilisateur dans un programme de test. - - 5.2) Comment puis-je ajouter de bons nouveaux types ou fonctions à - PostgreSQL ? - - Envoyez vos extensions à la liste de diffusion pgsql-hackers, elles - atterriront éventuellement dans le sous-répertoire contrib/. - - 5.3) Comment faire pour écrire une fonction C qui renvoie un tuple ? - - Dans les versions de PostgreSQL à partir de 7.3, les fonctions qui - renvoient une table sont totalement supportées en C, PL/PgSQL, et SQL. - Voir le Guide du Programmeur pour plus d'information. Un exemple de - fonction renvoyant une table définie en C se trouve à - contrib/tablefunc. - - 5.4) J'ai modifié un fichier source. Pourquoi ma recompilation ne voit-elle - pas les modifications ? - - Les Makefiles n'ont pas les dépendances adéquates pour les fichiers - d'en-tête. Il vous faut faire make clean puis un autre make. Si vous - utilisez GCC, vous pouvez utiliser l'option --enable-depend de - configure pour que le compilateur calcule les dépendances - automatiquement. diff --git a/doc/FAQ_german b/doc/FAQ_german deleted file mode 100644 index 1459e5a08c..0000000000 --- a/doc/FAQ_german +++ /dev/null @@ -1,978 +0,0 @@ - - Häufig gestellte Fragen (FAQ) zu PostgreSQL - - Current maintainer: Bruce Momjian (bruce@momjian.us). - - Deutsche Übersetzung von Ian Barwick (barwick@gmail.com). - - Letzte Aktualisierung der deutschen Übersetzung: Fr., den 19.10.2007, - 17:00 MEZ - - Die aktuellste Version dieses Dokuments liegt auf der - PostgreSQL-Website: - * http://www.postgresql.org/docs/faqs.FAQ.html (engl.) - * http://www.postgresql.org/docs/faqs.FAQ_german.html (dt.) - - Übersetzungen dieses Dokuments in anderen Sprachen sowie plattform- - spezifische FAQs können unter http://www.postgresql.org/docs/faq/ - eingesehen werden. - _________________________________________________________________ - - Allgemeine Fragen - - 1.1) Was ist PostgreSQL? Wie wird es ausgesprochen? - 1.2) Wer kontrolliert PostgreSQL? - 1.3) Welchem Copyright unterliegt PostgreSQL? - 1.4) Auf welchen Plattformen läuft PostgreSQL? - 1.5) Woher bekomme ich PostgreSQL? - 1.6) Was ist die neueste Version von PostgreSQL? - 1.7) Wo bekomme ich Support für PostgreSQL? - 1.8) Wie kann ich einen Fehlerbericht abgeben? - 1.9) Wie erfahre ich von bekannten Bugs oder fehlenden Features? - 1.10) Welche Dokumentation ist für PostgreSQL verfügbar? - 1.11) Wie kann ich SQL lernen? - 1.12) Wie kann ich im Entwicklerteam mitarbeiten? - 1.13) Wie läuft PostgreSQL im Vergleich zu anderen Datenbanksystemen? - 1.14) Kommt PostgreSQL mit den Anpassungen der Sommerzeit in - verschiedenen Ländern klar? - - Fragen zu Benutzerprogrammen - - 2.1) Welche Schnittstellen gibt es für PostgreSQL? - 2.2) Wie kann man PostgreSQL mit einer Website nutzen? - 2.3) Hat PostgreSQL eine grafische Benutzerschnittstelle? - - Administrative Fragen - - 3.1) Wie installiere ich PostgreSQL woanders als in /usr/local/pgsql? - 3.2) Wie regle ich Zugriffe von anderen Rechnern? - 3.3) Wie kann ich eine bessere Performanz erreichen? - 3.4) Welche Debugging-Funktionen sind für PostgreSQL verfügbar? - 3.5) Ich bekomme die Meldung "Sorry, too many clients", wenn ich eine - Verbindung aufzubauen versuche. Warum? - 3.6) Wie wird PostgreSQL aktualisiert? - 3.7) Welche Hardware eignet sich für den Betrieb mit PostgreSQL? - - Fragen zum Betrieb - - 4.1) Wie wähle ich per SELECT-Anweisung nur die ersten paar Zeilen - bzw. eine beliebige Zeile in einer Abfrage aus? - 4.2) Wie finde ich heraus, welche Tabellen, Indexe, Datenbanken oder - Benutzer in der Datenbank definiert sind? Wie bekomme ich die von psql - verwendeten Abfragen? - 4.3) Wie ändere ich den Datentyp einer Spalte? - 4.4) Was ist die Maximalgröße für eine Zeile, eine Tabelle, eine - Datenbank? - 4.5) Wieviel Plattenplatz wird benötigt, um die Daten aus einer - typischen Textdatei abzuspeichern? - 4.6) Meine Abfragen sind langsam oder benutzen die Indexe nicht. - Warum? - 4.7) Auf welche Weise kann ich sehen, wie der Abfrage-Optimierer meine - Abfrage auswertet? - 4.8) Wie verfahre ich bei der Suche mit regulären Ausdrücken und bei - einer Suche, bei der Groß- und Kleinschreibweisen ignoriert werden? - Wie verwende ich einen Index bei solchen Suchabfragen? - 4.9) Wie ermittle ich in einer Abfrage, ob ein Feld NULL ist? - 4.10) Was ist der Unterschied zwischen den verschiedenen CHAR-Typen? - 4.11.1) Wie erzeuge ich ein serielles Feld mit automatischer Erhöhung - des Wertes? - 4.11.2) Wie bekomme ich den Wert einer SERIAL-Sequenz? - 4.11.3) Führt currval() zu einer Race-Condition mit anderen Nutzern? - 4.11.4) Warum werden die Sequenzwerte nach einem Transaktionsabbruch - nicht zurückgesetzt? Warum gibt es Lücken in der Nummerierung meiner - Sequenz-/SERIAL-Spalte? - 4.12) Was ist ein OID? Was ist ein CTID? - 4.13) Wieso bekomme ich den Fehler: "FATAL: Memory exhausted in - AllocSetAlloc()"? - 4.14) Wie kann ich feststellen, welche PostgreSQL-Version bei mir - läuft? - 4.15) Wie kann ich eine Spalte erstellen, deren Default-Wert immer die - aktuelle Uhrzeit enthalten soll? - 4.16) Wie führe ich eine OUTER JOIN durch? - 4.17) Wie kann ich Abfragen über mehrere Datenbanken hinweg ausführen? - 4.18) Wie kann ich mehrere Zeilen bzw. Spalten von einer Funktion - zurückgeben lassen? - 4.19) Warum bekomme ich eine Fehlermeldung wie - "relation with OID ##### does not exist" wenn ich temporäre Tabellen - in - PL/PgSQL-Funktionen benutze? - 4.20) Welche Replikationslösungen gibt es? - 4.21) Warum werden die Tabellen- und Spaltennamen in meiner Abfrage - nicht erkannt? Warum werden Großbuchstaben umgewandelt? - _________________________________________________________________ - - Allgemeine Fragen - - 1.1) Was ist PostgreSQL? Wie wird es ausgesprochen? - - Die (englische) Aussprache ist "Post-Gres-Q-L". Im allgemeinen - Sprachgebrauch hat sich die Kurzform "Postgres" auch durchgesetzt. - (Für diejenigen, die es interessiert: eine MP3-Datei mit der - amerikanischen Aussprache befindet sich hier: - http://www.postgresql.org/files/postgresql.mp3 - - PostgreSQL ist ein objektrelationales Datenbanksystem, das die Vorzüge - von kommerziellen Datenbanksystemen mit zukunftsweisenden Innovationen - kombiniert. PostgreSQL ist freie Software und dessen kompletter - Quellcode ist öffentlich verfügbar. - - Die PostgreSQL-Entwicklung wird von einem Team von meist freiwilligen - Entwicklern durchgeführt. Dieses Team ist für die Gesamtentwicklung - von PostgreSQL verantwortlich. Es handelt sich um ein - Gemeinschaftsprojekt, das nicht von einer bestimmten Firma - kontrolliert wird. Lesen Sie die Entwickler-FAQ: - http://www.postgresql.org/docs/faqs.FAQ_DEV.html wenn Sie an einer - Mitarbeit interessiert sind. - - 1.2) Wer kontrolliert PostgreSQL? - - Falls Sie nach dem Namen eines etwaigen Inhabers bzw. nach einem - allmächtigen Zentralkommittee suchen - sparen Sie sich die Mühe, sowas - existiert gar nicht. Es gibt zwar das "Core Committee" sowie - Entwickler, die CVS-Schreibberechtigung haben, jedoch haben diese - Gruppen eher nur eine administrative Rolle. Das Projekt wird durch die - Community gesteuert, die aus den Entwicklern sowie natürlich auch den - Nutzern besteht - jeder kann daran teilnehmen. (Lesen Sie die - Entwickler-FAQ: http://www.postgresql.org/docs/faqs.FAQ_DEV.html wenn - Sie an der PostgreSQL-Entwicklung teilnehmen möchten). - - 1.3) Welchem Copyright unterliegt PostgreSQL? - - PostgreSQL wird unter der klassischen BSD-Lizenz herausgegeben. Im - Grunde genommen erlaubt diese den Nutzern, beliebig mit dem Code - umzugehen, auch der Weiterverkauf von Binärversionen ohne Quellcode - ist erlaubt. Die einzige Einschränkung besteht darin, dass PostgreSQL - auf keinen Fall für etwaige Probleme mit der Software haftet. Außerdem - muß der Copyright- Text in allen Kopien der Software enthalten sein. - Dies ist der Originaltext der BSD-Lizenz: - - PostgreSQL Data Base Management System - - Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group - Portions Copyright (c) 1994-6 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. - - Es gilt die Copyright-Klausel im Original! - - 1.4) Auf welchen Plattformen läuft PostgreSQL? - - Normalerweise kann PostgreSQL auf jeder modernen UNIX-kompatiblen - Plattform eingesetzt werden. Diejenigen Plattformen, die bei der - jeweiligen Versionsfreigabe getestet wurden, sind in den - Installationsanleitungen aufgelistet. - - PostgreSQL läuft auch auf Microsoft NT-basierten Betriebssystemen wie - Windows 2000 SP4, XP und Server 2003. Ein vorgefertigtes - Installationspaket kann von http://pgfoundry.org/projects/pginstaller - heruntergeladen werden. DOS-basierte Windows-Versionen (Win95, Win98, - WinMe) können PostgreSQL nur mit Hilfe der Cygwin-Umgebung ausführen. - - Eine Portierung für Novell Netware 6 gibt es unter - http://forge.novell.com sowie eine OS/2 (eComStation) version unter - http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgre - SQL&stype=all&sort=type&dir=%2F. - - 1.5) Woher bekomme ich PostgreSQL? - - Per Web-Browser hier: http://www.postgresql.org/ftp/ und per FTP hier: - ftp://ftp.postgresql.org/pub/. - - 1.6) Was ist die neueste Version von PostgreSQL? - - Die neueste Version von PostgreSQL ist 8.2.5. - - Die Freigabe einer neuen Hauptversion erfolgt in der Regel jährlich, - kleinere Korrekturversionen alle paar Monaten. - - 1.7) Wo bekomme ich Support für PostgreSQL? - - Die PostgreSQL-Community bietet Unterstützung per Mailing-Liste. Die - Web-Seite http://www.postgresql.org/community/lists/ bietet einen - Überblick. Die Listen general und bugs bieten einen guten Einstieg. - - Eine deutschsprachige Mailing-Liste gibt es hier: - http://archives.postgresql.org/pgsql-de-allgemein/. - - Der wichtigsten IRC-Channel ist #postgresql auf Freenode - (irc.freenode.net). Unter UNIX/Linux können Sie mit z.B. irc -c - '#postgresql' "$USER" irc.freenode.net. daran teilnehmen. Auf Freenode - gibt es einen spanischsprachigen Channel #postgresql-es, einen - französischen, #postgresqlfr sowie einen brasilianischen, - #postgresql-br . Es gibt außerdem einen PostgreSQL-Channel bei EFNet. - - Eine Liste von Unternehmen, die Support für PostgreSQL auf - kommerzieller Basis leisten, kann unter - http://www.postgresql.org/support/professional_support eingesehen - werden. - - 1.8) Wie kann ich einen Fehlerbericht abgeben? - - Nutzen Sie das Formular unter - http://www.postgresql.org/support/submitbug. Schauen Sie aber vorher - unter ftp://ftp.postgresql.org/pub/ nach, ob es mittlerweile eine - neuere PostgreSQL-Version gibt, in der der Fehler behoben wurde. - - Bugs, die über das Formular bzw. eine der Mailing-Listen - bekanntgegeben wurden, erhalten typischerweise einer der folgenden - Reaktionen: - * es ist kein Bug, der Grund wird benannt - * es ist ein bereits bekannter Bug, der bereits auf der TODO-Liste - aufgenommen wurde - * der Bug wurde in der aktuellen Version behoben - * der Bug wurde bereits behoben, befindet sich aber noch nicht in - einer offiziell veröffentlichten Version - * es wird um eingehendere Informationen gebeten, z.B.: - + Betriebssystem - + PostgreSQL-Version - + reproduzierbarer Fallbeispiel - + Debugging-Information - + Debugger-Backtrace-Ausgabe - * der Bug ist neu. Folgendes könnte passieren: - + ein Patch wird erstellt und in der nächsten Version - eingebaut; - + oder der Bug kann nicht sofort behoben werden und wird auf - die TODO-Liste gesetzt - - 1.9) Wie erfahre ich von bekannten Bugs oder fehlenden Features? - - PostgreSQL unterstützt eine erweiterte Teilmenge von SQL:2003. Siehe - unsere TODO-Liste unter http://www.postgresql.org/docs/faqs.TODO.html - für eine Auflistung der bekannten Bugs, fehlenden Features und - zukünftigen Pläne. - - Eine Anfrage nach einem neuen Feature führt normalerweise zu einer der - folgenden Antworten: - * das Feature ist bereits auf der TODO-Liste - * das Feature ist nicht wünschenswert, weil: - + es vorhandene Funktionalität dupliziert, welche bereits dem - SQL-Standard folgt - + es würde die Komplexität der Code-Basis erhöhen, ohne - nennenswerte Vorteile zu bringen - + es wäre unsicher bzw. unzuverlässig - * das neue Feature wird der TODO-Liste hinzugefügt - - PostgreSQL verwendet kein Bugtracking-System, da es sich als - effizienter erwiesen hat, E-Mails direkt zu beantworten und die - TODO-Liste aktuell zu halten. In der Praxis werden Bugs sehr schnell - beseitigt, und diejenigen Bugs, die Auswirkungen auf eine große Anzahl - von Nutzern haben, werden meist kurzfristig korrigiert. Der einzige - Überblick über alle Änderungen, Verbesserungen und Korrekturen in - einer PostgreSQL-Version befindet sich in den CVS-Log-Meldungen. Auch - die Release-Notes listen nicht jede Änderung in der Software auf. - - 1.10) Welche Dokumentation ist für PostgreSQL verfügbar? - - PostgreSQL bietet umfangreiche Dokumentation, darunter ein großes - Handbuch, man-Pages und einige kleine Testprogramme. Siehe das /doc- - Verzeichnis. Ausserdem sind alle Handbücher online unter - http://www.postgresql.org/docs/ verfügbar. - - Zwei Bücher zu PostgreSQL sind online verfügbar unter - http://www.postgresql.org/docs/books/awbook.html und - http://www.commandprompt.com/ppbook/ . - - Eine Liste lieferbarer PostgreSQL-Bücher befindet sich unter - http://www.postgresql.org/docs/books Diverse technische Artikel - befinden sich unter http://www.postgresql.org/docs/techdocs . - - psql hat einige nützliche \d-Befehle, um Informationen über Typen, - Operatoren, Funktionen, Aggregate, usw. zu zeigen. - - Die PostgreSQL-Website enthält noch mehr Dokumentation. - - 1.11) Wie kann ich SQL lernen? - - Die oben erwähnten PostgreSQL-spezifische Bücher bieten einen guten - Einstieg. Viele PostgreSQL-Anwender mögen "The Practical SQL Handbook" - (Bowman et al., Addison Wesley). Andere dagegen mögen "The Complete - Reference SQL" (Groff et al., McGraw-Hill). - - Es gibt ausserdem einige nützliche Online-Tutorials: - * 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) Wie kann ich im Entwicklerteam mitarbeiten? - - Lesen Sie in der Entwickler-FAQ unter - http://www.postgresql.org/docs/faqs.FAQ_DEV.html nach. - - 1.13) Wie läuft PostgreSQL im Vergleich zu anderen Datenbanksystemen? - - Es gibt verschiedene Methoden, Software zu messen: Eigenschaften, - Performanz, Zuverlässigkeit, Support und Preis. - - Eigenschaften - PostgreSQL besitzt die meisten Eigenschaften - wie - Transaktionen, Unterabfragen (Subqueries), Trigger, Views, - referenzielle Integrität bei Fremdschlüsseln und verfeinertes - Locking - die bei großen kommerziellen DBMS vorhanden sind. Es - bietet außerdem einige anderen Eigenschaften, die diese nicht - immer haben, wie benutzerbestimmte Typen, Vererbung, Regeln, - und die Multi-Versionen-Steuerung zum Verringern - konkurrierender Locks. - - Performanz - Die Performanz von PostgreSQL ist mit der von kommerziellen und - anderen Open-Source-Datenbanken vergleichbar. In manchen - Bereichen ist es schneller, in anderen langsamer. In der Regel - beträgt der Unterschied +/-10%. - - Zuverlässigkeit - Es ist selbstredend, dass ein DBMS wertlos ist, wenn es nicht - zuverlässig arbeitet. Daher bemühen wir uns, nur streng - geprüften und beständigen Code freizugeben, der nur ein Minimum - an Programmfehlern aufweist. Jede Freigabe hat mindestens einen - Monat Betatest-Phase hinter sich, und unsere Freigabehistorie - beweist, dass wir stabile und solide Versionen freigeben, die - im Produktionsbetrieb genutzt werden können. Wir glauben, dass - wir im Vergleich mit anderer Datenbanksoftware vorteilhaft - dastehen. - - Support - Unsere Mailinglisten bieten die Möglichkeit, gemeinsam mit - einer großen Gruppe von Entwicklern und Benutzern mögliche - Probleme zu lösen. Wir können nicht immer eine Fehlerbehebung - garantieren, kommerzielle DBMS tun dies aber auch nicht. Der - direkte Kontakt zur Entwickler- und Benutzergemeinschaft und - der Zugriff auf die Handbücher und den Quellcode ermöglicht - einen im Vergleich zu anderen DBMS höherwertigeren Support. Es - gibt jedoch auch Anbieter von kommerziellen Support-Leistungen - (siehe FAQ-Punkt 1.7). - - Preis - PostgreSQL ist frei verfügbar, sowohl für die kommerzielle wie - auch für die nicht-kommerzielle Nutzung. Sie können den - PostgreSQL-Code ohne Einschränkungen (außer denjenigen, die in - der oben angegebene BSD-artigen Lizenz erwähnt werden) in Ihr - Produkt integrieren. - - 1.14) Kommt PostgreSQL mit den Anpassungen der Sommerzeit in verschiedenen - Ländern klar? - - Änderungen bei der US-Sommerzeit sind ab PostgreSQL Version 8.0.4 - berücksichtigt. Änderungen in Canada und Western Australia sind ab - 8.0.10 bzw. 8.1.6 berücksichtigt. PostgreSQL-Versionen vor 8.0 nutzen - die Zeitzonendatenbank des Betriebssystems, um die Sommerzeit zu - berechnen. - - Fragen zu Benutzerprogrammen - - 2.1) Welche Schnittstellen gibt es für PostgreSQL? - - Die PostgreSQL-Installation stellt nur Schnittstellen für C und - Embedded C bereit. Alle weitere Schnittstellen sind unabhängige - Projekte, die einzeln heruntergeladen werden werden müssen. Diese - Trennung ermöglicht individuelle Entwickler-Teams und - Entwicklungszyklen für die jeweiligen Projekte. - - Einige Programmiersprachen wie PHP haben eine PostgreSQL- - Schnittstelle bereits eingebaut. Schnittstellen für Sprachen wie Perl, - TCL, Python und viele anderen sind unter http://gborg.postgresql.org - im Bereich Drivers/Interfaces verfügbar sowie per Internet-Suche. - - 2.2) Wie kann man PostgreSQL in einer Website nutzen? - - Eine nette Einführung zu datenbank-gestützten Webseiten kann unter - http://www.webreview.com (engl.) eingesehen werden. - - Für die Web-Integration ist PHP eine ausgezeichnete Schnittstelle. PHP - gibt es bei http://www.php.net - - Für komplexere Aufgaben bietet sich die Perl-Schnittstelle mit CGI.pm - oder mod_perl. - - 2.3) Hat PostgreSQL eine grafische Benutzerschnittstelle? - - Es gibt eine große Anzahl von GUI-Programmen für PostgreSQL - sowohl - kommerziell als auch Open-Source. Eine ausführliche Liste befindet - sich unter http://www.postgresql.org/docs/techdocs.54 . - _________________________________________________________________ - - Administrative Fragen - - 3.1) Wie installiere ich PostgreSQL woanders als in /usr/local/pgsql? - - Bei der Ausführung von configure die Option --prefix mit dem - Zielverzeichnis angeben. - - 3.2) Wie regle ich Zugriffe von anderen Rechnern? - - PostgreSQL ist standardmäßig so eingestellt, dass Verbindungen nur vom - lokalen Rechner über Unix Domain Sockets bzw. TCP/IP möglich sind. - Verbindungen von anderen Rechnern werden erst dann ermöglicht, wenn - Sie in der Datei postgresql.conf die Einstellung listen_addresses - anpassen, in der Datei $PGDATA/pg_hba.conf host-basierte - Authentifizierung einschalten und den Server neu starten. - - 3.3) Wie kann ich eine bessere Performanz erreichen? - - Es gibt drei große Bereiche, in denen Performanzverbesserungen erzielt - werden können: - - Abfrageoptimierung - Die Modifizierung von Abfragen kann eine bessere Performanz - erzielen: - - + Erstellung von Indexen, einschliesslich partieller Indexe - sowie Expressionsindexe - + Einsatz von COPY anstelle multipler INSERT-Anweisungen - + Gruppierung von mehreren Abfragen innerhalb einer - Transaktion, um Aufwand beim Abschluss von Transaktionen - einzusparen - + Einsatz von CLUSTER beim Holen von einer großen Anzahl von - Datenreihen aus einem Index - + Einsatz von LIMIT, um eine Untermenge der Abfragen- - ergebnisse zurückzuliefern - + Einsatz von vorbereiteten Befehlen (prepared queries) - + Einsatz von ANALYZE, um die Datenbankstatistik für den - Abfragenplaner aktuell zu halten - + Regelmäßiger Einsatz von VACUUM bzw. pg_autovacuum - + Bei großen Datenveränderungen die Löschung von Indexen - - Server-Konfiguration - Einige Einstellungen in der Datei postgresql.conf wirken auf - die Performanz aus. Das Handbuch enthält unter - http://www.postgresql.org/docs/current/static/runtime-config.ht - ml eine komplette Auflistung. Kommentare zu den jeweiligen - Einstellungen gibt es unter - http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_co - nf_e.html und - http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html. - - Hardware-Auswahl - Die Auswirkung von Hardware auf Performanz wird unter - http://momjian.us/main/writings/pgsql/hw_performance/index.html - und http://www.powerpostgresql.com/PerfList/ erläutert. - - 3.4) Welche Debugging-Funktionen sind für PostgreSQL verfügbar? - - Unter den Optionen für die Server-Konfigurierung gibt es zahlreiche - log_*-Variablen, die die Ausgabe von Abfrage- und Prozessstatistiken - ermöglichen. Diese können für Debugging-Zwecke sowie Performanz-Tests - sehr nützlich sein. - - 3.5) Ich bekomme die Meldung "Sorry, too many clients", wenn ich eine - Verbindung aufzubauen versuche. Warum? - - Ihr System hat die maximal zulässige Anzahl von Datenbankverbindungen - erreicht (Voreinstellung 100). Sie müssen die maximale Anzahl der - gleichzeitig ausführbaren Backend-Prozesse hochsetzen, indem Sie in - postgresql.conf den Wert max_connections ändern und den Server - neustarten. - - 3.6) Wie wird PostgreSQL aktualisiert? - - Allgemeine Informationen zur Aktualisierung von PostgreSQL gibt es auf - der Seite http://www.postgresql.org/support/versioning. Detaillierte - technische Informationen gibt es auf der Seite - http://www.postgresql.org/docs/current/static/install-upgrading.html - - 3.7) Welche Hardware eignet sich für den Betrieb mit PostgreSQL? - - PostgreSQL läuft auf fast jeder Hardware-Kombination. Im PC-Bereich - gibt es allerdings sehr große Abweichungen in der Qualität. Für einen - Arbeitsplatz- oder Entwicklungsrechner mag dies nicht so bedeutend - sein, im Server-Betrieb jedoch lohnt sich auf jeden Fall die - Investition in teurere Bestandteile (Stichwörter ECC-Speicher, SCSI, - Hauptplatinen und Netzteile von namhaften Herstellern). Nutzen Sie - unsere Mailing-Listen, um Hardware-Optionen zu diskutieren. - _________________________________________________________________ - - Fragen zum Betrieb - - 4.1) Wie wähle ich per SELECT-Anweisung nur die ersten paar Zeilen bzw. eine - beliebige Zeile in einer Abfrage aus? - - Wenn Sie bei der Ausführung der Abfrage die Anzahl der anzufordenden - Reihen bereits kennen, nutzen Sie LIMIT. Wenn die ORDER BY- Anweisung - mit einem Index verwendet wird, ist es möglich, dass die gesamte - Abfrage nicht ausgeführt werden muss. Wenn Sie die Anzahl der der - anzufordenden Reihen nicht kennen, verwenden Sie einen Cursor und - FETCH. - - Um eine beliebige Zeile auszuwählen, nutzen Sie ORDER BY random(): - SELECT spalte - FROM tabelle - ORDER BY random() - LIMIT 1 - - - 4.2) Wie finde ich heraus, welche Tabellen, Indexe, Datenbanken oder Benutzer - in der Datenbank definiert sind? Wie bekomme ich die von psql verwendeten - Abfragen? - - In psql zeigt der Befehl \dt eine Liste der Datenbanktabellen. Weitere - psql-Befehle lassen sich mit \? anzeigen. Sie können sich die Datei - pgsql/src/bin/psql/describe.c mit dem Quellcode für psql ansehen. Sie - enthält die SQL-Abfragen, die die Backslash-Kommandos (\) ausführen. - Sie können psql auch mit der -E Option starten. Danach gibt psql die - Abfragen aus, die es bei der Ausführung der Befehle benutzt. Außerdem - biete PostgreSQL ein SQL-kompatibles INFORMATION SCHEMA, das - Metainformation über die Datenbank zur Verfügung stellt. - - Mit psql -l können Sie alle Datenbanken anzeigen lassen. - - Die Datei pgsql/src/tutorial/syscat.source enthält außerdem viele - SELECT- Abfragen, mit deren Hilfe man Information über die - Systemtabellen erhalten kann. - - 4.3) Wie ändere ich den Datentyp einer Spalte? - - Ab Version 8.0 kann der Datentyp einer Spalte mit ALTER TABLE ALTER - COLUMN TYPE geändert werden, sofern der neue Datentyp die Werte des - alten Datentype aufnehmen kann. - - Bei früheren Versionen gehen Sie wie folgt vor: - BEGIN; - ALTER TABLE tabelle ADD COLUMN neue_spalte neuer_datentyp; - UPDATE tabelle SET neue_spalte = CAST(alte_spalte AS neuer_datentyp); - ALTER TABLE tabelle DROP COLUMN alte_spalte; - COMMIT; - - - Um den Speicherplatz freizugeben, der von der gelöschten Spalte - verwendet wurde, führen Sie VACUUM FULL aus. - - 4.4) Was ist die Maximalgröße für eine Zeile, eine Tabelle, eine Datenbank? - - Es bestehen folgende Obergrenzen: - Maximale Größe eine Datenbank? unbeschränkt (es existieren - Datenbanken mit 32 TB) - Maximale Größe einer Tabelle? 32 TB - Maximale Größe einer Zeile? 400 GB - Maximale Größe einer Spalte? 1 GB - Maximale Anzahl von Zeilen in einer Tabelle? - unbeschränkt - Maximale Anzahl von Spalten in einer Tabelle? - 250-1600 je nach Spaltentyp - Maximale Anzahl von Indexen für eine Tabelle? - unbeschränkt - - Selbstverständlich sind dies theoretische Werte, die oft durch die - verfügbaren Platten- und Speicherressourcen beschränkt werden. Extreme - Größen können zu Leistungseinbußen führen. - - Die maximale Tabellengröße von 32 TB benötigt keine - Large-File-Unterstützung im Betriebssystem. Große Tabellen werden in - Dateien mit einer Größe von je 1 GB aufgeteilt, wodurch etwaige - dateisystem-bedingte Beschränkungen nicht relevant sind. - - Die maximale Tabellengröße und die maximale Anzahl von Spalten können - vervierfacht werden, indem man die Default-Blockgröße auf 32 KB - heraufsetzt. Die Tabellengröße kann auch durch Tabellenpartitionierung - vergrößert werden. - - Eine Einschränkung ist, dass Indexe nur auf Spalten erstellt werden - können, die bis etwa 2.000 Zeichen groß sind. Um auf größere Spalten - eine UNIQUE-Constraint setzen zu können, nutzen Sie einen funktionalen - Index mit dem MD5-Hash-Wert der Spalte. Um innerhalb einer großen, mit - Text belegten Spalte suchen zu können, verwenden Sie einen - Volltext-Index. - - 4.5) Wieviel Plattenplatz wird benötigt, um die Daten aus einer typischen - Textdatei abzuspeichern? - - Eine PostgreSQL-Datenbank kann beim Abspeichern einer einfachen - Textdatei bis zu fünfmal mehr Platz gegenüber der eigentlichen Größe - der Datei beanspruchen. - - Betrachten wir eine Datei mit 100.000 Zeilen mit einem Integer und - einer Textbeschreibung pro Zeile. Gehen wir davon aus, dass die - durchschnittliche Länge der Textbeschreibung 20 Byte beträgt. Die - einfache Datei würde 2,8 MB groß sein. Die Größe der - PostgreSQL-Datenbankdatei, die diese Daten enthält, liegt ungefähr bei - 5,2 MB: - 24 Bytes: jeder Zeilenkopf (ungefähr) - +24 Bytes: ein Integer-Feld und ein Textfeld - + 4 Bytes: Zeiger auf der Datenseite auf den Tupel - ----------------------------------------------- - 52 Bytes pro Zeile - - Die Größe einer Datenseite in PostgreSQL beträgt 8192 Bytes (8 KB), - also: - 8192 Bytes pro Seite - --------------------- = 146 Zeilen pro Seite (abgerundet) - 52 Bytes pro Zeile - - 100.000 Datenzeilen - ------------------------ = 685 Datenbankseiten (aufgerundet) - 158 Zeilen pro Seite - - 633 Datenbankseiten * 8192 Bytes pro Seite = 5,185,536 bytes (5,2 MB) - - Indexe beanspruchen nicht so viel Platz. Da sie jedoch die Daten - beinhalten, die sie indizieren, können auch sie sehr groß werden. - - NULL-Werte werden als Bitmaps gespeichert, wodurch sie sehr wenig - Platz in Anspruch nehmen. - - 4.6) Meine Abfragen sind langsam oder benutzen die Indexe nicht. Warum? - - Indexe werden nicht automatisch bei jeder Abfrage verwendet. Indexe - werden nur dann verwendet, wenn die abzufragende Tabelle eine - bestimmte Größe übersteigt, und die Abfrage nur eine kleine - Prozentzahl der Tabellenzeilen abfragt. Der Grund hierfür ist der, - dass die durch einen Index verursachten Festplattenzugriffe manchmal - länger dauern würden als ein einfaches Auslesen aller Tabellenzeilen - (sequentieller Scan). - - Um festzustellen, ob ein Index verwendet werden soll, braucht - PostgreSQL Statistiken über die Tabelle. Diese Statistiken werden - durch die Anweisungen VACUUM ANALYZE bzw. ANALYZE berechnet. Anhand - der Statistiken kennt der Abfragenoptimierer die Anzahl der - Tabellenzeilen und kann besser entscheiden, ob Indexe verwendet werden - sollen. Statistiken sind auch bei der Ermittlung der optimalen - JOIN-Reihenfolgen und -Methoden wertvoll. Daher sollten diese - regelmässig durchgeführt werden, da sich der Inhalt einer Tabelle ja - auch verändert. - - Indexe werden normalerweise nicht in ORDER BY-Abfrage oder in JOINs - verwendet. Ein sequentieller Scan mit anschließendem explizitem - Sortiervorgang ist normalerweise schneller als ein Index-Scan einer - großen Tabelle. Jedoch wird bei einer Abfrage, in der LIMIT zusammen - mit ORDER BY verwendet wird, oftmals ein Index verwendet, da nur ein - kleiner Abschnitt der Tabelle zurückgeliefert wird. - - Sollte es danach aussehen, also ob der Optimierer irrtümlich einen - sequentiellen Scan ausführt, führen Sie SET enable_seqscan TO 'off' - aus und prüfen Sie, ob die Indexabfrage dadurch scheller geworden ist. - - Bei der Nutzung von Wildcard-Operatoren wie LIKE oder ~, können Indexe - nur unter bestimmten Umständen verwendet werden: - * Das Suchmuster muss sich an Anfang des Strings befinden, d.h.: - + LIKE-Suchmuster dürfen nicht mit % anfangen; - + ~ (reguläre Ausdrücke) müssen mit ^ anfangen. - * Das Suchmuster darf nicht mit einer Zeichenklasse (z.B. [a-e]) - beginnen. - * Suchmuster, die Gross- und Kleinschreibung nicht berücksichtigen - (z.B. ILIKE bzw. ~*), verwenden keine Indexe. Stattdessen können - funktionale Indexe verwendet werden, die im Punkt 4.8 beschrieben - werden. - * Die Standard-Locale "C" muss während der Datenbank-Initialisierung - mit initdb verwendet worden sein, da andere locales den - nächstgrößten Wert nicht ermitteln können. Es ist allerdings - möglich, einen besonderen text_pattern_ops-Index für solche Fälle - zu erstellen. - - In Versionen vor 8.0 werden Indexe oft nicht benutzt, wenn die - jeweiligen Datentypen nicht genau übereinstimmen. Dies gilt besonders - für Indexe auf Spalten mit den Datentypen INT2, INT8 und NUMERIC - - 4.7) Auf welche Weise kann ich sehen, wie der Abfrage-Optimierer meine - Abfrage auswertet? - - Vgl. die EXPLAIN Man-Page. - - 4.8) Wie verfahre ich bei der Suche mit regulären Ausdrücken und bei einer - Suche, bei der Groß- und Kleinschreibweisen ignoriert werden? Wie verwende - ich einen Index bei solchen Suchabfragen? - - Der Operator ~ wendet einen regulären Ausdruck an und ~* wendet ihn - an, ohne die Groß- und Kleinschreibung zu beachten. Ebenso beachtet - LIKE die Groß- und Kleinschreibung, und ILIKE nicht. - - Gleichheitsvergleiche, die Groß- und Kleinschreibung ignorieren, - werden in der Regel so ausgedruckt: - SELECT * - FROM tabelle - WHERE LOWER(spalte) = 'abc' - - Hier wird kein normaler Index benutzt. Legt man hingegen einen - funktionalen Index an, so wird er auf jeden Fall verwendet: - CREATE INDEX tabelle_index ON tabelle (LOWER(spalte)) - - Falls der obige Index als einen UNIQUE-Index angelegt wird, können - keine Werte in die Spalte eingefügt werden, die sich nur durch ihre - Groß- und Kleinschreibung unterscheiden. Um Fehler zu vermeiden muß - ein CHECK-Constraint oder ein Trigger eingesetzt werden. - - 4.9) Wie ermittle ich in einer Abfrage, ob ein Feld NULL ist? Kann nach der - NULL-Belegung sortiert werden? - - Testen Sie die Spalte mit IS NULL bzw. IS NOT NULL. - SELECT * - FROM tabelle - WHERE spalte IS NULL - - Um die Spalte danach zu sortieren, ob sie mit NULL belegt ist oder - nicht, verwenden Sie die Bedingungen IS NULL bzw. IS NOT NULL in der - ORDER BY-Klausel. Da Bedingungen, die wahr sind, höher als das - Gegenteil sortiert werden, bewirkt die folgende Abfrage, dass die - NULL-Spalten zuerst gelistet werden: - SELECT * - FROM tabelle - ORDER BY (spalte IS NOT NULL) - - 4.10) Was ist der Unterschied zwischen den verschiedenen CHAR-Typen? - -Typ interner Name Bemerkungen -------------------------------------------------- -VARCHAR(n) varchar die Größe legt die Maximallänge fest; kein - Auffüllen mit Leerzeichen -CHAR(n) bpchar mit Leerzeichen gefüllt bis zur angegebenen Länge -TEXT text keine obere Schranke für die Länge -BYTEA bytea Bytearray mit variabler Länge (auch für - '\0'-Bytes geeignet) -"char" char 1 Zeichen - - Der interne Name kommt vor allem in den Systemkatalogen und in manchen - Fehlermeldungen vor. - - Die ersten vier Typen sind "varlena"-Typen (d.h. die ersten vier Bytes - geben die Länge an, gefolgt von den Daten). Daher ist der tatsächlich - belegte Platz immer etwas mehr als die deklarierte Feldgröße. - Allerdings wird unter Umständen auf diese Datentypen Datenkompression - durch das TOAST- Verfahren angewendet, womit der tatsächlich belegte - Platz auch geringer als erwartet ausfallen kann. - - Für die Speicherung von Zeichenketten variabler Länge empfiehlt sich - VARCHAR(n). Die maximale Länge eines VARCHAR(n)-Felds wird bei der - Tabellendefinition festgelegt. TEXT setzt keine Längengrenze, - allerdings gibt es eine systembedingte Obergrenze von 1 GB. - - CHAR(n) ist geeignet für die Speicherung von Zeichenketten, die alle - die gleiche Länge haben. Bitte beachten Sie, dass CHAR(n) automatisch - Zeichenketten bis zur definierten Feldlänge mit Leerzeichen ausfüllt, - während bei VARCHAR(n) nur die tatsächlich eingegebene Zeichenkette - gespeichert wird. - - BYTEA ist für binäre Daten, besonders für Werte, die NULL-Bytes haben. - - Alle der hier erwähnten Typen weisen ähnliche Performanzeigenschaften - auf. - - 4.11.1) Wie erzeuge ich ein serielles Feld mit automatischer Erhöhung des - Wert? - - PostgreSQL bietet einen SERIAL-Datentyp. Dieser erzeugt automatisch - eine Sequenz auf die angegebene Spalte. Zum Beispiel: - CREATE TABLE person ( - id SERIAL, - name TEXT - ) - - wird automatisch in: - CREATE SEQUENCE person_id_seq; - CREATE TABLE person ( - id INT4 NOT NULL DEFAULT nextval('person_id_seq'), - name TEXT - ); - - umgewandelt. - - Die create_sequence Man-Page liefert weitere Informationen über - Sequenzen. - - 4.11.2) Wie bekomme ich den Wert einer SERIAL-Sequenz? - - Eine Möglichkeit wäre, mit der nextval()-Funktion den nächsten - SERIAL-Wert von dem Sequenzobjekt vor der Auszuführung einer - INSERT-Anweisung anzufordern und ihn dann explizit in die - INSERT-Anweisung einzubinden. Anhand der Beispieltabelle in 4.11.1 - könnte dieser Vorgang in einer Pseudosprache so aussehen: - new_id = output of execute("SELECT nextval('person_id_seq')"); - execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')"); - - Danach stünde der neue Wert in der Variablen new_id für die Verwendung - in weiteren Abfragen zur Verfügung, zum Beispiel als Fremdschlüssel - zur Tabelle 'person'). Bitte beachten Sie, dass der Name des - automatisch erstellten SEQUENCE-Objektes folgenden Name hat: - «table»_«serialcolumn»_seq wobei 'table' und 'serialcolumn' die Namen - der jeweils betreffenden Tabelle / Spalte darstellen. - - Als weitere Möglichkeit können Sie nach einer INSERT-Anweisung den - automatisch eingefügten SERIAL-Wert mit der currval()-Funktion - zurückgeben lassen: - execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')"); - new_id = output of execute("SELECT currval('person_id_seq')"); - - 4.11.3) Führt currval() zu einer Race-Condition mit anderen Nutzern? - - Nein. currval() liefert einen Wert zurück, der von Ihrer - Datenbank-Session bestimmt wird, und der anderen Sessionen nicht zur - Verfügung steht. - - 4.11.4) Warum werden die Sequenzwerte nach einem Transaktionsabbruch nicht - zurückgesetzt? Warum gibt es Lücken in der Nummerierung meiner - Sequenz-/SERIAL-Spalte? - - Um die gleichzeitige Abarbeitung von Transaktionen zu verbessern, - werden Sequenzen gerade nicht für andere Transaktionen gesperrt, - sondern die Sequenznummern werden den laufenden Transaktionen sofort - zugeteilt. Lücken in der Sequenznummerierung werden durch abgebrochene - Transaktionen verursacht. - - 4.12) Was ist ein OID? Was ist ein CTID? - - Jede Zeile, die in PostgreSQL erzeugt wird, bekommt eine eindeutige - OID, sofern die Tabelle nicht mit der Option WITHOUT OIDS angelegt - wurde. OIDs sind automatisch zugewiesene 4-Byte-Integer, die innerhalb - der gesamten Datenbank einmalig sind. Allerdings laufen sie bei einem - Wert von ungefähr 4 Milliarden über. PostgreSQL verwendet OIDs, um - seine interne Systemtabellen zu verbinden. - - Um einmalige Idenfikatoren in Datentabellen zu erstellen, wird - allerdings empfohlen, statt OIDs Werte zu verwenden, die vonSERIAL- - Sequenzen erzeugt werden. SERIAL-Sequenzen sind innerhalb einer - Tabelle einmalig und daher weniger anfällig für Überläufe. Außerdem - können 8-Byte-Sequenzwerte mit SERIAL8 erzeugt werden. - - CTIDs werden benutzt, um bestimmte physikalische Zeilen durch Block - und Offset Werte zu identifizieren. CTIDs verändern sich, sobald - Zeilen verändert oder zurückgeladen werden. Sie werden in - Indexeinträgen benutzt um auf die physikalischen Zeilen zu zeigen. - - 4.13) Wieso bekomme ich einen Fehler: "ERROR: Memory exhausted in - AllocSetAlloc()"? - - Wahrscheinlich gibt es keinen virtuellen Speicher mehr in Ihrem System - oder Ihr Kernel hat niedrige Höchstgrenzen für bestimmte Ressourcen. - Probieren Sie vor dem Start von postmaster folgendes: - ulimit -d 262144 - limit datasize 256m - - Je nach benutzter Shell wird nur einer dieser Befehle erfolgreich - ausgeführt werden. Auf jedem Fall wird die Grenze des Datensegments - für Prozesse erhöht werden und eventuell die erfolgreiche Ausführung - der Abfrage ermöglichen. Falls Sie ein Problem mit dem SQL-CLient - haben, weil das Backend zu viele Daten zurückliefert, versuchen Sie - dies vor dem Start des SQL-Clients. - - 4.14) Wie kann ich feststellen, welche PostgreSQL-Version bei mir läuft? - - Geben Sie in psql SELECT VERSION(); ein. - - 4.15) Wie kann ich eine Spalte erstellen, deren Default-Wert immer die - aktuelle Uhrzeit enthalten soll? - - Dazu verwenden Sie CURRENT_TIMESTAMP: - CREATE TABLE test (x INT, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); - - 4.16) Wie führe ich eine OUTER JOIN durch? - - PostgreSQL unterstützt OUTER JOINs nach dem SQL- Standardsyntax. Hier - zwei Beispiele: - SELECT * - FROM tabelle_1 t1 - LEFT OUTER JOIN tabelle_2 t2 ON (t1.spalte = t2.spalte) - - bzw.: - SELECT * - FROM tabelle_1 t1 - LEFT OUTER JOIN tabelle_2 t2 USING (spalte) - - Diese identischen Abfragen verknüpfen tabelle_1 mit tabelle_2 über die - Spalte 'spalte' und geben außerdem alle unverknüpften Zeilen in - tabelle_1 (diejenigen, die keine Entsprechung in tabelle_2 haben) - zurück. Ein RIGHT JOIN würde hingegen alle unverknüpften Zeilen in - tabelle_2 hinzufügen und ein FULL JOIN würde alle verknüpften Zeilen - sowie jeweils alle unverknüpften Zeilen aus den beiden Tabellen - zurückliefern. Die Angabe von OUTER ist nicht zwingend und kann in - LEFT, RIGHT und FULL-Verknüpfungen weggelassen werden. Normale - Verknüpfungen sind INNER JOINs. - - 4.17) Wie kann ich Abfragen über mehrere Datenbanken hinweg ausführen? - - Es gibt keinen Weg, innerhalb einer Abfrage auf mehr als eine - Datenbank zuzugreifen. Da PostgreSQL datenbank-spezifische - Systemkataloge lädt, ist eine datenbankübergreifende Abfrage nicht - möglich. - - contrib/dblink ist eine Erweiterung, die datenbankübergreifende - Abfragen über Funktionsaufrufe ermöglicht. - - 4.18) Wie kann ich mehrere Zeilen bzw. Spalten von einer Funktion zurückgeben - lassen? - - Funktionen können mehrere Zeilen und Spalten zurückgeben, vgl.: - http://www.postgresql.org/docs/techdocs.17. - - 4.19) Warum bekomme ich eine Fehlermeldung wie "relation with OID ##### does - not exist" wenn ich temporäre Tabellen in PL/PgSQL-Funktionen benutze? - - In PostgreSQL-Versionen vor 8.3 verarbeitet PL/PgSQL Funktionen in - einer Cache. Dies hat eine unangenehme Nebenwirkung, nämlich dass wenn - eine PL/PgSQL-Funktion auf eine temporäre Tabelle zugreift, und diese - Tabelle anschließend gelöscht bzw. neu erstellt wird, die Funktion - fehlschlagen wird, da die gecachten Funktionsinhalte noch auf die alte - temporäre Tabelle zeigen. Die Lösung für diese Probleme besteht darin, - in der PL/PgSQL- Funktion mittels EXECUTE auf temporäre Tabellen - zuzugreifen. Dies bewirkt, dass bei jedem Funktionsruf die betreffende - Abfrage neu geparst wird. - - Dieses Problem taucht in PostgreSQL 8.3 und späteren Versionen nicht - mehr auf. - - 4.20) Welche Replikationslösungen gibt es? - - Der Begriff "replikation" umfasst mehrere verschiedene Technologien, - jede mit eigenen Vor- und Nachteilen. - - Mit "Master/slave"-Replikation werden Änderungen in einer - Hauptdatenbank durchgeführt und an "Sklaven" verteilt, die im - Nur-Lese-Modus arbeiten. Die populärste Lösung für PostgreSQL ist - Slony-I. - - "Multi-master replication" ermöglicht sowohl lesende als auch - schreibende Zugriffe über mehrere Datenbank-Server hinweg. Allerdings - hat diese Art von Replikation eine negative Auswirkung auf die - Performanz durch die Notwendigkeit, Änderungen zwischen Servern zu - synchronisieren. Pgcluster ist die populärste freie Lösung für - PostgreSQL. - - Es gibt auch einige kommerzielle und hardware-basierte - Replikationslösungen für verschiedene Arten der Replikation. - - 4.21) Warum werden die Tabellen- und Spaltennamen in meiner Abfrage nicht - erkannt? Warum werden Großbuchstaben umgewandelt? - - Die häufigste Ursache ist die Verwendung von Gänsefüßchen bei der - Anlegung von Tabellen, z.B.: - CREATE TABLE "Tabelle" - ("SPALTE1" INT) - - Dadurch werden Tabellen- und Spaltennamen (sog. Identifikatoren) in - genau der Schreibweise gespeichert (vgl. Dokumentation), was dazu - führt, dass man sie danach immer in Gänsefüßchen angeben muss. Im - obigen Beispiel muss man also immer etwa SELECT * FROM "Tabelle" - verwenden. Um dieses Problem zu vermeiden, müssen Sie immer eines der - folgenden Punkte beachten: - * bei der Tabellenanlegung keine Gänsefüßchen verwenden; - * in Identifikatoren nur Kleinschreibung verwenden; - * immer Identifikatoren mit Gänsefüßchen versehen - _________________________________________________________________ - - Anmerkungen des Übersetzers - - Die englische Vorlage dieser FAQ wird ständig überarbeitet. Daher - liegt die Übersetzung nicht immer auf dem aktuellsten Stand. - - Die aktuellste Version der deutschen Übersetzung befindet sich immer - unter http://sql-info.de/de/postgresql/FAQ_german.html. Diese - "Arbeitsversion" enthält eventuell Änderungen, die noch nicht auf der - PostgreSQL-Website eingebunden worden sind. - - Über Verbesserungshinweise und Korrekturvorschläge sowie - Verständnisfragen zum Inhalt der FAQ freue ich mich. Ich nehme auch - allgemeine Fragen zu PostgreSQL gerne entgegen, verweise jedoch auf - die Mailing-Listen als schnelle und zuverlässige Anlaufstellen. diff --git a/doc/FAQ_hungarian b/doc/FAQ_hungarian deleted file mode 100644 index 99f5ba4c63..0000000000 --- a/doc/FAQ_hungarian +++ /dev/null @@ -1,1234 +0,0 @@ - PostgreSQL GyIK - - Utolso modosítás dátuma: 2005 május 9. - - Fordítás aktualizálása: 2005 június - - A GyIK karbantartoja: Bruce Momjian (pgman@candle.pha.pa.us) - - Fordíto: Hornyák Lászlo - (laszlo.hornyak.nospam@gmail.com) - - A legfrissebb verzio itt érhetõ el (angol): - - http://www.PostgreSQL.org/docs/faq-english.html. - - Legfrissebb magyar nyelvû verzio: - - http://hackers.forgeahead.hu/space/PostgreSQL/GYIK - - Platform specifikus kérdések: - - http://www.PostgreSQL.org/users-lounge/docs/faq.html. - - ---------------------------------------------------------------------- - -Általános kérdések - - 1.1 Mi a PostgreSQL? Hogy kell kimondani? - 1.2 Mik a PostgreSQL felhasználási feltételei? - 1.3 Milyen UNIX operácios rendszereken fut PostgreSQL? - 1.4 Milyen nem UNIX operácios rendszerek elérhetõek? - 1.5 Hogyan tudok PostgreSQL-t szerezni? - 1.6 Hogyan kapok terméktámogatást? - 1.7 Melyik a legfrissebb kiadás? - 1.8 Milyen dokumentácio áll rendelkezésre? - 1.9 Hogyan találok informáciot hibákrol vagy hiányzo funkcionalításrol? - 1.10 Hogy tanuljam meg az SQL nyelvet? - 1.11 A PostgreSQL 2000. év kompatibilis? - 1.12 Hogyan lehet csatlakozni a fejlesztõ csapathoz? - 1.13 Hogyan küldjek hibajelentést? - 1.14 Milyen a PostgreSQL más DBMS-ekkel összehasonlítva? - 1.15 Hogyan tudom üzletileg segiteni a PostgreSQL-t? - 1.16 Ki irányítja a PostgreSQL-t? - -Felhasználoi kliens kérdések - - 2.1 Van ODBC meghajto PostgreSQL-hez? - 2.2 Milyen eszközök állnak rendelkezésre PostgreSQL Web fejlesztésekhez? - 2.3 Van a PostgreSQL-hez grafikus felhasználoi felület ? Riport generátor? - Beágyazott lekérdezõ nyelv felület? - 2.4 Milyen programozási nyelvekkel lehet elérni a PostgreSQL szervert? - -Adminisztrácios kérdések - - 3.1 Hogyan tudom a PostgreSQL-t /usr/local/pgsql -tõl eltérõ helyre - installálni? - 3.2 AMikor elindítom a postmaster-t, egy "Bad System Call"-t vagy core - dump-ot kapok. Miért? - 3.3 Amikor megprobálom inditani a postmaster-t, "IpcMemoryCreate" hibákat - kapok. Miért? - 3.4 Amikor megprobálom inditani a postmaster-t, "IpcSemaphoreCreate" - hibákat kapok. Miért? - 3.5 Hogyan tudom kontrollálni a más gépekrõl érkezõ kapcsolat kéréseket? - 3.6 Hogyan tudom nagyobb teljesítményre hangolni az adatbázisomat? - 3.7 Milyen hibakeresõ lehetõségek érhetõek el? - 3.8 Miért kapok "Sorry, too many clients" hibát csatlakozásnál? - 3.9 Mi van pgsql_tmp könyvtárban? - 3.10 Miért kell dumpolni és újratölteni PostgreSQL kiadás váltásánál? - -Mûködtetési kérdések - - 4.1 Mi a különbség a bináris és a normál kurzorok között? - 4.2 Hogyan tudom select-elni a lekérdezés elsõ pár sorát? - 4.3 Hogy tudom kilistázni a táblákat vagy más dolgokat a PostgreSQL-ben? - 4.4 Hogyan tudok eltávolítani egy oszlopot egy táblábol? - 4.5 Mi a maximális mérete egy sornak, egy táblának vagy egy adatbázisnak? - 4.6 Mekkora adatbázis lemez terület szükséges egy tipikus szöveg állomány - tárolásához? - 4.7 Hogy tudhatom meg milyen táblák, indexek, adatbázisok vagy - felhasználok vannak definiálva? - 4.8 A lekérdezéseim lassúak, vagy nem használják az indexeket. Miért? - 4.9 Hogy tudom ellenõrizni, hogy optimalizálta a lekérdezés optimalizálo a - lekérdezésem? - 4.10 Mi az R-tree index? - 4.11 Mi a Genetic Query Optimizer? - 4.12 Hogyan tudok regexp keresést és case-insensitive regexp keresést - használni? Hogyan tudok indexet használni case-insensitive kereséshez? - 4.13 Hogyan tudom észlelni egy lekérdezésban, ha egy mezõ NULL? - 4.14 Mi a különbség a különbözõ karaktertípusok között? - 4.15.1 Hogyan tudok létrehozni automatikusan növekvõ értékû mezõt? - 4.15.2 Hogyan kaphatom meg egy SERIAL beszúrás értékét? - 4.15.3 A currval() és a nextval() nem teremt holtpont veszélyes helyzetet - a felhasználok között? - 4.15.4 Miért nem használodnak fel újra a sequence számok tranzakcio abort - esetén? Miért vannak problémák a serial oszlopok számozásával? - 4.16 Mi a OID? Mi a TID? - 4.17 Mi a PostgreSQL-ben használt kifejezések jelentése? - 4.18 Miért kapom ezt a hibát: "ERROR: Memory exhausted in - AllocSetAlloc()"? - 4.19 Hogyan tudhatom meg PostgreSQL, milyen verziot futtatok? - 4.20 Miért kapok "invalid large obj descriptor" hibát nagy objektumok - kezelésénél? - 4.21 Hogy hozhatok létre olyan oszlopot, aminek alapértelmezett érétke a - jelenlegi idõ? - 4.22 Miért olyan lassúak az al-lekérdezéseim IN-nel? - 4.23 Hogyan tudok outer join-t végrehajtani? - 4.24 Hogyan tudok több adatbázison végrehajtani lekérdezést? - 4.25 Hogy tudok több soros vagy oszlopos eredményt visszaadni egy - funkciobol? - 4.26 Miért nem tudom megbizhatoan létrehozni és törölni az átmeneti - táblákat a PL/pgSQL funkciokban? - 4.27 Milyen replikácios lehetõségek vannak? - 4.28 Milyen kodolási lehetõségek vannak? - -A PostgreSQL kiterjesztése - - 5.1) Írtam egy felhasználoi funkciot. Miért core dumpol az adatbázis - amikor használom? - 5.2) Hogyan lehet új adattípusokat és funkciokat hozzáadni a PostgreSQL - disztribúciohoz? - 5.3) Hogyan lehet olyan C funkciot írni, ami Tuple-t ad vissza? (több - soros több oszlopos eredmények) - 5.4) Megváltoztattam egy forrás állományt. Miért nem változik a bináris - újrafordítás után? - - ---------------------------------------------------------------------- - -Általános kérdések - - 1.1 Mi a PostgreSQL? Hogy kell kimondani? - - Így ejstd ki: Post-Gres-Q-L. - - (Vagy talán inkább töltsd le a kis mp3-at a PostgreSQL homepage-rõl) - - A PostgreSQL a POSTGRES adatbázis management rendszer egy kiegészítése, - ami egy következõ generácios DBMS kutatási prototípus. Megtartja a - POSTGRES adatmodellét és gazdag adattípus választékát, de a PostQuel - lekérdezõ nyelvet az SQL egy kiterjesztett verziojával helyettesíti. A - PostgreSQL szabad és a teljes forráskod hozzáférhetõ. - - A PostgreSQL fejlesztését egy csapat végzi, amelynek minden tagja - megtalálhato a PostgreSQL fejlesztõi levelezési listán. A jelenlegi - koordinátor Marc G. Fournier (scrappyp@PostgreSQL.org). Ez a csapat - felelõs minden fejlesztésért. <>A PostgreSQL 1.01 alkotoi Andrew Yu és - Jolly Chen voltak. Sokan járultak hozzá portolással, teszteléssel, - hibakereséssel és fejlesztéssel. Az eredeti Postgres kod, amibõl a - PostgreSQL származik Michael Stonebraker professzor irányítása alatt - fejlesztettek az egyetem programozoi, tanuloi és végzett tanuloi. <> - - A szoftver eredeti neve Postgres volt. Amikor SQL funkcionalítással - egészítették ki 1995-ben, a nevét Postgres95-re változtatták. 1996 végén - kapta mai nevét. - - 1.2 Mik a PostgreSQL felhasználási feltételei? - - Az eredeti angol copyright szöveg: - - -------------------- - - PostgreSQL is subject to the following COPYRIGHT: - - PostgreSQL Data Base Management System - - Portions copyright (c) 1996-2002, PostgreSQL Global Development Group - - Portions Copyright (c) 1994-6 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. - - -------------------- - - Ami nagyon leegyszerûsítve azt jelenti, hogy jogod van használni a - szoftvert mindenféle ellenszolgáltatás (pénz, stb) nélkül, a forrás kodot - modosíthatod, és továbbadhatod, DE semmilyen, a szoftver használatábol - következõ károsodásért nem vállal garanciát a fejlesztõ. A fenti a BSD - licensz, egy klasszikus nyilt-forráskod licensz. Nem tartalmaz - megszorításokat arra, hogy a forráskodot hogyan használod fel. - - Kedveljük ezt a licensz formát és nem áll szándékunkban megváltoztatni. - - 1.3 Milyen UNIX operácios rendszereken fut PostgreSQL? - - Általában minden UNIX-kompatibilis operácios rendszer képes arra hogy - futtassa a PostgreSQL-t. Azokat a platformokat, amiken tesztelték a - kiadást megtalálhatod a installácios utasítások között. - - 1.4 Milyen nem UNIX operácios rendszerek elérhetõek? - - Kliens - - A libpq C függvénykönyvtárat, a psql-t és más felületeket le lehet úgy - fordítani, hogy fussanak MS Windows operácios rendszereken. Ebben az - esetben a kliens MS Windows-on fut és TCP/IP segítségével kommunikál a - Unixon futo szerverrel. A "win32.mak" állomány a kiadás része, ennek - segítségével lehet Win32 platformokra lefordítani a libpq-t és a psql-t. A - PostgreSQL ODBC kliensekkel is képes kommunikálni. - - Szerver - - <>Az adatbázis szerver Cygwin segítségével fut Windows NT és Win2k - rendszereken. További informácio találhato a pgsql/doc/FAQ_MSWIN - állományban és a MS Windows FAQ-ban a következõ helyen: - http://www.PostgreSQL.org/docs/faq-mswin.html. Natív MS Windows - NT/2000/XP portok jelenleg fejlesztés alatt állnak. - - 1.5 Hogyan tudok PostgreSQL-t szerezni? - - Az elsõdleges anonim ftp oldal: ftp://ftp.PostgreSQL.org/pub. - - A tükör oldalak listája megtalálhato a fõ weboldalunkon. - - 1.6 Hogyan kapok terméktámogatást? - - Az elsõdleges lista a pgsql-general@postgresql.org. Ez használhato a - PostgreSQL-lel kapcsolatos párbeszédekre. Ha fel szeretnél íratkozni, - küldj egy levelet a következõ tartalommal (nem tárggyal) a - pgsql-general-request@postgresql.org címre: - - subscribe - - end - - Van egy hibákkal kapcsolatos levelezési lista is: - pgsql-bugs-request@PostgreSQL.org a következõ tartalommal: - - subscribe - - end - - A fejleszto"i levelezési lista: pgsql-hackers-request@PostgreSQL.org a - következõ tartalommal: - - subscribe - - end - - Egyéb levelezési listák találhatoak a weboldalunkon: - http://www.PostgreSQL.org - - Van egy IRC csatorna is #PostgreSQL néven ahol felteheted kérédseid. A - következõ unix paranccsal csatlakozhatsz: - - irc -c '#PostgreSQL' "$USER" irc.phoenix.net. - - A kereskedelmi terméktámogatást nyújto cégek listája elérhetö itt: - http://www.PostgreSQL.org/users-lounge/commercial-support.html - - Magyar nyelvu" levelezési lista nincs, de ha tudok segiteni a fenit e-mail - cimemen elérheto" vagyok. - - 1.7 Melyik a legfrissebb kiadás? - - A legfrissebb PostgreSQL kiadás a 8.0. - - A tervek szerint minden évben lesz egy nagyobb fejlesztéseket tartalmazo - kiadás, míg a kisebb fejlesztéseket néhány havonta adjuk ki. - - 1.8 Milyen dokumentácio áll rendelkezésre? - - Számos kézikönyv, man oldalak és kis teszt példák találhatoak a kiadásban - a doc/ könyvtár alatt. Az interneten is olvashatod a dokumentáciot a - következõ címen: - - http://www.PostgreSQL.org/users-lounge/docs/. - - Két PostgreSQL könyv érhetõ el az interneten a - http://www.PostgreSQL.org/docs/awbook.html és a - http://www.commandprompt.com/ppbook/ címeken. A megvásárolhato könyvek - listája itt találhato: http://www.ca.PostgreSQL.org/books/. A - PostgreSQL-lel kapcsolatos technikai jellegû cikkek gyûjteménye: - http://techdocs.PostgreSQL.org/. - - A psql parancs rendelkezik néhány \d utasítással, amellyekkel listázhatoak - az operátorok, a funkciok, stb. - - A website is tartalmaz további dokumentáciokat. - - 1.9 Hogyan találok informáciot hibákrol vagy hiányzo funkcionalításrol? - - A PostgreSQLaz SQL-92 szabvány egy kiegészítése. Nézd meg a TODO listákat - ha érdekelnek az ismert hibák. - - 1.10 Hogy tanuljam meg az SQL nyelvet? - - A PostgreSQL könyv a http://www.PostgreSQL.org/docs/awbook.html címen - tartalmaz SQL alapokat. Elérhetõ egy másik SQL könyv is a - http://www.commandprompt.com/ppbook címen. Egy szép oktato anyag találhato - a http://www.intermedia.net/support/sql/sqltut.shtm, a - http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM és a - http://sqlcourse.com oldalakon. - - Egy másik lehetõség a "Tanítsd magad 21 nap alatt SQL-re, második kiadás" - a http://members.tripod.com/er4ebus/sql/index.htm. - - Sok felhasználonak tetszett a gyakorlati SQL könyv ("The Practical SQL - Handbook"). - - 1.11 A PostgreSQL 2000. év kompatibilis? - - Igen, könnyedén kezeli a 2000 utáni és idõszámításunk elött 2000 elötti - dátumokat is. - - 1.12 Hogyan lehet csatlakozni a fejlesztõ csapathoz? - - Elösször is töltsd le a forráskodot, és olvasd el a PostgreSQL - fejlesztõi dokumnetáciot a web oldalunkon vagy a kiadásban. Ezután - íratkozz fel a pgsql-hackers és a pgsql-patches levelezési listákra. - Végül pedig küldj be magas szinvonalú patch-eket a pgsql-patches listára. - - Van egy pár ember, akiknek commit privilégiumuk a PostgreSQL CVS fán. - Õk olyan sok magas szinvonalú patch-et küldtek be, hogy az addigi - csapat már nem tudta követni, és nem volt kétségünk arrol, hogy a - patch-ek amiket õk küldenek jo minõségû. - - 1.13 Hogyan küldjek hibajelentést? - - Látogass el a BugTool oldalra: - http://www.PostgreSQL.org/bugs/bugs.php - Itt megtalálod követendõ utasításokat. - - Ellenõrizd az ftp oldalunkon is, hogy nincs-e újabb verzio vagy folt. - ftp://ftp.PostgreSQL.org/pub - - 1.14 Milyen a PostgreSQL más DBMS-ekkel összehasonlítva? - - Számos nézõpontbol lehet vizsgálni a szoftvert: képességek, teljesítmény - megbízhatoság, támogatottság és ár. - - Képességek: A PostgreSQL rendelkezik a nagy, kereskedelmi DBMS-ek - képességeivel: tranzakciok, al-lekérdezések, triggerek, nézetek, külsõ - kulcsok, integrítás és kifinoult zármechanizmusok. Van néhány képessége, - ami a kereskedelmi adatbázisokbol hiányzik, mint például a felhasználo - által definiált típusok, öröklõdés, szabályok és verzio kontroll a - zárolási viták redukálásáért. - - Teljesítmény: A PostgreSQL teljesítménye hasonlít a kereskedelmi és más - nyílt adatbázis szerverekéhez. Lehet bizonyos esetekben lassabb, másokban - gyorsabb. A MySQL nevû tanulo RDBMS például gyorsabban hajt végre - insert/update mûveleteket, mivel a tranzakciokat elsumákolja. Persze a - MySQL nem rendelkezik a képességek részben felsoroltak nagy részével. Mi a - megbízhatoságra és a képességekre építünk, bár a teljesítmény is nõ minden - kiadással. Van egy érdekes oldal a MySQL és a PostgreSQL - összehasonlításával a http://openacs.org/philosophy/why-not-mysql.html - címen. - - Megbízhatoság: Tudjuk hogy ha egy DBMS nem megbízhato, akkor teljesen - haszontalan. Igyekszünk jol tesztelt, stabil kodot kiadni, amiben a lehetõ - legkevesebb hiba van. Minden kiadás elött eltellik legalább 1 honap béta - teszt, és a kiadási történet is azt mutatja, hogy stabil kodot adunk ki, - ami készen áll a produktív felhasználásra. Úgy gondoljuk, felülmúlunk más - adatbázis szoftvereket ezen a téren. - - Támogatás: A levelezési listáink kapcsolatot teremtenek a fejlesztõk és - felhasználok csoportjával , akik segítenek a problémák megoldásában. Bár - nem tudjuk garantálni hogy ki tudjuk javítani a hibát, más, kereskedelmi - adatbázis cégek sem tudják. A fejlesztõ csoport közvetlen elérési - lehetõsége, a közösség, a dokumentácio és a forráskod gyakran támogatást - biztosít, mint más adatbázisoknál. Van kereskedelmi, alkalmi támogatás - azoknak, akiknek szüksége van rá (lásd: 1.6). - - Ár: A PostgreSQL szabad bármilyen felhasználásra, akár kereskedelmire is. - A termékhez hozzáadhatod a saját forráskodjaidat korlátozás nélkül. - - 1.15 Hogyan tudom üzletileg segiteni a PostgreSQL-t? - - A PostgreSQL elsõ osztályú infrastruktúrával rendelkezik, amit 1996-ban - indítottunk el. Mindent Marc Fourniernek köszönhetünk, aki létrehozta és - karbantartja a rendszert. - - A minõségi infrastruktúra nagyon fontos egy nyilt forrású szoftver - esetében. Megvéd az olyan fennakadásoktol, amelyek komoly késéseket - okoznak a fejlesztésekben. Természetesen ez az infrastruktúra nem olcso. - Számos havi és állando kiadásunk van. Ha a cégednek van pénze, amivel - támogatná erõfeszítéseinket, kérlek látogass el a - http://store.pgsql.com/shopping/ oldalra. - - Bár a weboldal "PostgreSQL, Inc"-ként említi, a hozzájárulások kizárolag a - PostgreSQL fejlesztésre értendoek, és nem egy meghatározott cégnek. Ha - jobban tetszik, küldhetsz csekket is a kapcsolati címek bármelyikére. - - 1.16 Ki irányítja a PostgreSQL-t? - - Ha központi bizottságot, ellenörzo" céget keresel a PostgreSQL mögött, add - fel, nincs ilyesmi. Létezik egy mag és CVS commiter csoport, de ez inkáb - adminisztrativ mint ellenörzo" célú. A projectet fejleszto"k és - felhasználok közössége irányítja, amihez bárki csatlakozhat. Csupán annyit - kell tenned hogy felíratkozol a levelezo"listékra és részt veszel a - beszélgetésekben. - - ---------------------------------------------------------------------- - -Felhasználoi kliens kérdések - - 2.1 Van ODBC meghajto PostgreSQL-hez? - - Két ODBC meghajto érhetõ el: PsqlODBC és a OpenLink ODBC. - - A PsqlODBC a PostgreSQL kiadás része. További informácio találhato a - ftp://ftp.PostgreSQL.org/pub/odbc/ oldalon. - - Az OpenLink ODBC-t a http://www.openlinksw.com címrõl töltheted le. Ez az - õ szabványos ODBC kliens szoftverükkel mûködik, így minden - - általuk támogatott platformon (Win, Mac, Unix, VMS) elérhetõ lesz a - PostgreSQL szerver. - - Talán olyan vevõknek fogják eladni, akik kereskedelmi minõségû terméket - szeretnének kapni, de a freeware verzio mindig elérhetõ lesz. Kérdéseidet - a termékkel kapcsolatban a postgres95@openlink.co.uk címen teheted fel. - - Olvasd el az ODBC fejezetet is a programozok kézikönyvében! - - 2.2 Milyen eszközök állnak rendelkezésre PostgreSQL Web fejlesztésekhez? - - Egy szép bemutato olvashato az adatbázissal támogatott web oldalanrol a - http://www.webreview.com weboldalon. - - A web integráciohoz a PHP egy kivállo szoftver. Letölthetõ a - http://www.php.net címrõl. - - Komplexebb esetekre sokan használják a Perl felületet és a CGI.pm vagy a - mod_perl-t. - - 2.3 Van a PostgreSQL-hez grafikus felhasználoi felület? - - Van egy szép PgAccess nevû grafikus felületünk, ami riport generátorként - is használhato. A weboldalát megtalálod a http://www.pgaccess.org/ címen. - - A http://techdocs.postgresql.org/guides/GUITools oldalon találhatsz egy - pontos és részltes listát. - - 2.4 Milyen programozási nyelvekkel lehet elérni a PostgreSQL szervert? - - A következök: - - * C (libpq) - * C++ (libpq++) - * Embedded C (ecpg) - * Java (jdbc) - * Perl (DBD::Pg and perl5) - * ODBC (odbc) - * Python (PyGreSQL) - * TCL (libpgtcl) - * C Easy API (libpgeasy) - * PHP ('pg_' functions, Pear::DB) - További programozási felületek érhetõek el a - http://www.PostgreSQL.org/interfaces.html és a - http://gborg.PostgreSQL.org oldalakon. - - ---------------------------------------------------------------------- - -Adminisztrácios kérdések - - 3.1 Hogyan tudom a PostgreSQL-t /usr/local/pgsql -tõl eltérõ helyre - installálni? - - A configure script --prefix paraméterének használatával. - - 3.2 AMikor elindítom a postmaster-t, egy "Bad System Call"-t vagy core - dump-ot kapok. Miért? - - Számos probléma lehet, de legelösször ellenõrizd le, hogy a kerneled - System V kiegészítésekkel rendelkezik-e. A PostgreSQL használja a kernel - osztott memoria és szemafor API-ját. - - 3.3 Amikor megprobálom inditani a postmaster-t, "IpcMemoryCreate" hibákat - kapok. Miért? - - Vagy nincs megfelelõen konfigurálva a kerneled osztott memoria támogatása - vagy meg kell nagyobbítanod a maximális osztott memoria méretet. - - A pontos méret szükséglet függ az architektúrádtol és attol hogy hány - buffert és processzt konfigurálsz a postmasternek. Legalább 1 MB területre - szükséged van. A PostgreSQL Adminisztrácio kézikönyvben olvashatsz - részletesebb informáciokat az osztott memoriárol és a szemaforokrol. - - 3.4) Amikor megprobálom inditani a postmaster-t, "IpcSemaphoreCreate" - hibákat kapok. Miért? - - Ha a hibaüzenet ez: " IpcSemaphoreCreate: semget failed (No space left on - device)", akkor a kerneled konfigurácioja nem tesz lehetõvé elegendõ - szemafort. A PostgreSQL szerver processzenként 1 szemafort igényel. Egy - átmeneti megoldás lehet az hogy a postmastert kevesebb maximális processz - számmal inditod el. Használd a -D paramétert. Egy sokkal megfelelõbb - megoldás az ha növeled a kerneled SEMMNS és SEMMNI paramétereit. - - A hibás szemaforok is adatázis lerobbanásához is vezethet nagy terhelés - esetén.Ha a hibaüzenet valami más, lehet hogy nincs szemaforok támogatás - - forditva a kerneledbe. Olvasd el a PostgreSQL adminisztrátorok - kézikönyvében az osztott memoriárol és a szemaforokrol szolo fejezetet. - - 3.5) Hogyan tudom kontrollálni a más gépekrõl érkezõ kapcsolat kéréseket? - - Alapértelmezésben a PostgreSQL a helyi kapcsolatokat Unix socketekkel - valosítja meg. Más gépek nem lesznek képesek csatlakozni, ha nem - engedélyezed azt -i opcioval a postmasternek, és nem állítod be host a - alapú azonosítást a pg_hba.conf állományban. Ezzel válnak lehetõvé a - TCP/IP kapcsolatok. - - 3.6) Hogyan tudom nagyobb teljesítményre hangolni az adatbázisomat? - - Az indexelés feltétlenül gyorsítja a lekérdezéseket. Az EXPLAIN parancs - lehetõvé teszi hogy lásd, hogy a PostgreSQL miként interpretálja a - lekérdezést és melyik indexet használja. - - Ha sok INSERT mûveletet hajtassz végre, csináld nagy kötegekben a COPY - paranccsal. Ez sokkal gyorsabb mint az egyedi INSERT parancsok. Másodszor: - Azok a mûveletek, amelyek nincsenek tranzakcio blokkon belül, azok saját - tranzakciot indítanak. Sok mûveletet érdemes egy tranzakcion belül - végrehajtani. Ez csökkenti a tranzakcio kezelés többletidejét. Az - indexeket javasolt a nagy adatváltozások elött eltávolítani, majd újra - létrehozni. - - Számos teljesítmény javíto lehetõség van. Kikapcsolhatod az fsync() - mûveletet a postmaster -o -F opciokval valo indításakor. Így nem fog az - amugy lassú fsync() függvény meghívodni minden tranzakcio végén. - - Használhatod a postmaster -B opcioját is az osztott memoria szegmens - méretének növeléséhez. Ha az értéket túl magasra állítod, lehet hogy a - postmaster nem indul el, mert túllépted az operácios rendszer által - megengedett méretet. Minden buffer 8K méretû és alapértelmezésban 64 - buffer van. - - A -S opcioval növelheted a szerver átmeneti rendezésekre fenntartott - memoria területét. Az értéket kilobyteban add meg. Az alapértelmezett - érték 512K. - - Használhatod a CLUSTER utasítást is, hogy a táblákat egy indexnek - megfelelõen csoportosítsd. Olvasd el a CLUSTER kézikönyv oldalt további - részletekért. - - Hardver kiválasztásában segíthet: - http://candle.pha.pa.us/main/writings/pgsql/hw_performance/index.html és - http://www.powerpostgresql.com/PerfList/. - - A postgresql.conf beállitásaival kapcsolatos tudnivalok: - http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html - és http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html. - - 3.7) Milyen hibakeresõ lehetõségek érhetõek el? - - A PostgreSQL számos lehetöséggel rendelkezik ami értékes lehet a - hibakeresésnél. - - Elösször is, futtathatod a configure scriptet --enable-cassert opcioval, - sok assert() funkciohivás ellenörzi a program futását és megállitja ha - valami vératlan hiba történik. - - Mind a postmaster és a postgres számos hibakeresö lehetüséggel - rendelkezik. Mindig amikor elinditod a postmastert, gyözödj meg rola, hogy - a kimenetet log állományba küldöd. Igy: - - cd /usr/local/pgsql - - ./bin/postmaster >server.log 2>&1 & - - Ez egy server.log állományt hoz létre a felsö PostgreSQL könyvtárban. Ez - az állomány tartlamaz majd számos hasznos informáciot a szerverrel - kapcsolatos problémákrol és hibákrol. A postmaster -d opciojával lehet - részletesebb hibakeresö informáciot kapni. A -d opciohoz meg kell - határozni egy hiba szintet. Vigyázz, a magas hibakeresö szint nagy log - állományt okozhat. - - Ha a postmaster nem fut, akkor futtathatod a postgres szervert - parancssorbol is, és az SQL kifejezést közvetlenül ennek adhatod át. Ez - csak hibakeresés esetében javasolt. Az új sor a kifejezés végét jelenti, - nem a pontosvesszö. Ha hibakeresö opciokkal forditottad a szervert, - használhatsz egy debuggert is hogy lásd hogy mi történik. Mivel igy a - szervert nem a postmaster inditotta, nem többfelhasználos környezetként - fut, igy a zárolási és a szerverek közötti kommunikácios hiba jelenségek - nem jelentkeznek. - - Ha már fut a postmaster, indits egy psql-t, és nézd meg a szerver processz - PID-jét! Egy debuggert használhatsz a processzhez csatlakozáshoz. - Beállithatsz töréspontokat és elindithatsz lekérdezéseket. Ha a postgres - inditásban keresel hibát, a PGOPTIONS környezeti változot állitsd be "-W - n" értékre. Ez n másodperc várakozást idéz elö, igy tudsz csatlakozni a - processzhez, el tdsz hejezni töréspontokat, majd folytathatod a indítást. - - A postgres program -s, -A és -t opcioi is nagyon hasznosak lehetnek - hibakeresésnél és teljesítmény mérésnél. - - Profiling lehtöséggel is fordithatod a szervert, hogy lásd melyik funkciok - foglalják el a futási idõt. A szerver profile állományai a - pgsql/data/base/dbname könzvtárba kerülnek, a kliens profile állományok az - aktuális könyvtárba. Linuxon ehhez szükséges a -DLINUX_PROFILE fordítási - direktiva. - - 3.8) Miért kapok "Sorry, too many clients" (Túl sok kliens) - hibát csatlakozásnál? - - Növelned kell a postmaster egyidejûleg futtatott szerver processz szám - korlátját. - - Az alapértelmezett korlát 32 processz. Ezt növelhetjed úgy, hogy - újrainditod a postmastert és -N opcioval meghatárotod az új értéket, vagy - modositod a postgresql.conf-ot. - - Ne felejtsd el, hogy ha növeled a szerver processzek maximális számát, - akkor bufferek számát is növelned kell, legalább a processzek számának - kétszeresére. Nagy processz számokesetében valoszinüleg a Unix - konfigurácios paramétereken is növelni kell. Ellenörizd a SHMMAX (az - osztott memoria szegmensek maximális mérete), a SEMMNS és a SEMMNI (a - szemaforok maximális száma), az NPROC (a processzek maximális száma), a - MAXUPRC (felhasználonkénti maximális processz szám) és a NFILE és NINODE - (a megnzitott állománzok maximális száma) paramétereket. A PostgreSQL - azért korlátozza külön a processz számot, hogy a rendszeredet ne - terhelhesse meg túlságosan. - - A PostgreSQL 6.5 verzioban a maximális szerver processz szám 64 volt és a - modositáshoz bele kellett irni a include/storage/sinvaladt.h állományba és - újra kellett forditani a servert. - - 3.9) Mi van pgsql_tmp könyvtárban? - - Ez a könyvtár a lekérdezés végrehajto által létrehezott átmeneti - állományokat tartalmazza. Például ha egy rendezést kell végrehajtani egy - ORDER BY kifejezés miatt és a m?velet több memoriát vesz igénybe, mint - amennyit a -S paraméter megenged, akkor az átmeneti könyvtárban hoz létre - egy állományt a fennmarado adat tárolására. - - Az átmeneti állományok többnyire törl?dnek, de meg is maradhat ha például - váratlan hibával leáll a szerver egy rendezés közben. Inditáskor és - leállitáskor ezeket az állományokat törli a postmaster. - - 3.10) Miért kell dumpolni és újratölteni PostgreSQL kiadás váltásánál? - - A PostgreSQL csapat csak aprobb változtatásokat hajt végre a kisebb - kiadások között, igy ha 7.2 verziorol állsz át 7.2.1 verziora, akkor nem - szükséges kidumplonod az adatbázist. A nagy kiadások esetében (például - verziorol 7.3-ra áttérésnél) változik a belsiõ adatstruktúrák és - adatállományok formátuma. Ezek a változások gyakran nagyon összetettek, - ezért inkáb nem tartunk fenn visszafelé kompatibilitást. A dump az adatot - általános formátumban irja ki, majd az új formátumban lehet azt - visszatöleni. - - Azokban a kiadásokban, amelyek között az adat formátum nem változik, a - pg_upgrade program használhato dumpolás és helyreállitás nélkül. - - ---------------------------------------------------------------------- - -Mûködtetési kérdések - - 4.1) Mi a különbség a bináris és a normál kurzorok között? - - Nézd meg a DECLARE dokumentácioját. - - 4.2) Hogyan tudom select-elni a lekérdezés elsõ pár sorát? - - Olvasd el a FETCH dokumentácioját, vagy használd a SELECT LIMIT-et. - - Az egész lekérdezést végre kell hajtani, még akkor is, ha csak az elsõ pár - sort akarod megkapni. Gondolj arra, hogy a lekérdezésben lehet ORDER BY - is. Ha van olyan index, ami megfelel az ORDER BY kifejezésednek, a - PostgreSQL képes lehet az elsö néhány rekord visszaadására, vagy a teljes - lekérdezésnek le kell futnia, amig a kért rekordok le nem generálodnak. - - 4.3) Hogy tudom kilistázni a táblákat vagy más dolgokat a PostgreSQL-ben? - - Elolvashatod a psql forrás kodjában a pgsql/src/bin/psql/describe.c - állományban. Ez SQL parancsokat tartalmaz, amelyek azokat a kimeneteket - állitják elö, amiket a per jellel kezdödö parancsok adnak vissza. - - 4.4) Hogyan tudok eltávolítani egy oszlopot egy táblábol? - - Ez a funkcionalitás a 7.3 verziotül kezdve érhetö el az ALTER TABLE DROP - COLUMN -nal. A régebbi vertiokban igy lehet végrehajtani: - - BEGIN; - - LOCK TABLE old_table; - - SELECT ... -- minden oszlopot, kivétel amit törölni szeretnél - - INTO TABLE new_table - - FROM old_table; - - DROP TABLE old_table; - - ALTER TABLE new_table RENAME TO old_table; - - COMMIT; - - 4.5) Mi a maximális mérete egy sornak, egy táblának vagy egy adatbázisnak? - - A korlátok: - - * adatbázis: korlátlan (1 TB az általunk ismert lagnagyobb) - - * tábla: 16 TB - - * rekord/sor 1.6TB - - * mezö 1 GB - - * a tábla sorainak száma: korlátlan - - * a tábla oszlopainak száma: 250-1600 az oszlop nevektõl függöen - - * A tábla indexeinek száma: korlátlan - - Természetesen nem igazán korlátlan, de a tárterület, memoria és egyéb - külsö tényezök korlátozzák. A teljesitmény romolhat, ha ezek az értékek - szokatlanul nagyok. - - A 16 TB-os legnagyobb tábla méret nem igényel nagy állomány támogatást. A - nagy táblák több 1 GB méretü állományba kerölnek, igy az állomány rendszer - korlátai nem lényegesek. - - A maximális tábla méret és az oszlopok maximális oszlop szám növelhetö, ha - az alapértelmezett blokkméretet 32k-ra növeled. - - 4.6) Mekkora adatbázis lemez terület szükséges egy tipikus szöveg állomány - tárolásához? - - A PostgreSQL akár a szöveg állomány helyigényének ötszörösét is - elfoglalhatja. - - Képzelj el például, egy 100.000 soros szöveget, aminek minde sora egy - számbol és egy szövegbõl áll. Tegyük el, hogy átlagosan 20 byte hosszú - szövegek. Ez a szövegállomány körülbelül 2.8 MB helyet foglalna el. A - tábla ami a fenti adatszerkezetet eltárolná, körülbelül 6.4 MB-os lenne. - Ezt a következöképpen számolhatjuk ki: - - 36 byte: sor fejléc - - 24 byte: egy int mezö + egy szöveg mezö - - 4 byte: mutato - - --------------------------------------- - - 64 byte soronkent. - - Az adat oldal mérete a PostgreSQL-ben 8192 byte, igy 8192 / 64 = 128 - rekord adatbázis oldalanként (lefelé kerekitve). - - 100000 rekord / 128 rekord oldalanként = 782 adat oldal - (felelé kerekitve). - - 782 adatbázis oldal * 8192 byte olalanként = 6,406,144 - byte (6.4 MB) - - Az indexek nem foglalnak túl sokat, de tartalmazzák az indexelt adatot, - igy ezek is lehetnek nagyok. - - A NULL értékek bittérképben vannak tárolva, igy kevés helyet foglanak. - - 4.7) Hogy tudhatom meg milyen táblák, indexek, adatbázisok vagy - felhasználok - - vannak definiálva? - - A psql-ben találsz számos '\' karakterrel kezdödö utasítást az ilyen - informáciok listázására. A '\?' segitségével tudot kilistázni ezeketa - parancsokat. Ezen kivül vannak rendszer táblák, amelyek nevei 'pg_'-vel - kezdödnek. - - Probáld ki a pgsql/src/tutorial/syscat.source állományt is. Ez sok példát - tartalmaz az rendszertáblákon végrehajtott SELECT-ekröl. - - 4.8) A lekérdezéseim lassúak, vagy nem használják az indexeket. Miért? - - Az indexeket nem használja a szerver minden lekérdezésnél automatikusan. - Csak akkor használ indexet, ha a tábla mérete egy megadott also határ - felett van, és a lekérdezés csak a sorok egy kis részét érinti. Ez azért - van, mert a véletlen hozzáférés még mindig lassabb lehet mint az tábla - szekvenciális olvasása. - - Hogy a PostgreSQL meg tudja határozni hogy kell-e indexet használni, - léteznie kell egy statisztikának a táblárol. Ez a statisztikai adatok a - VAACUM ANALYZE vagy az egyszerû ANALYZE mûveletek során jönnek létre. A - statisztikai adatok felhasználásával az optimalizálo meg tudja határozni, - hogy hány sor van a táblában, és el tudja dönteni, hogy használjon-e - indexet. A statisztiaki adatgyüjtést idõnként végre kell hajtani, ahogy a - tábla adatai változnak. - - Az indexeket normális esetben nem használja az ORDER BY vagy az OUTER - JOIN. A szekvenciális olvasás általában gyorsabb, mint az index keresés - egy nagy táblában. Bár a LIMIT az ORDER BY-val kombinálva használhat - indexet, mert a tábla csak kis része érintett. Bár a MIN és MAX SQL - funkciok sem használják az indexeket, ezeket az értékeket egy ORDER BY + - LIMIT lekérdezéssel is le lehet kérdezni: - - SELECT col - - FROM tab - - ORDER BY col [ DESC ] - - LIMIT 1; - - Amikor helyettesítõ jel operátorokat használsz, mint a LIKE kulcsszo vagy - a ~, az indexeket csak bizonyos körülmények között lehet használni: - - A keresõ string kezdete a keresési minta elején kell hogy legyen. Például: - - * A LIKE minták nem kezdõdhetnek % jellel. - * ~ (regexp) kifejezések nem kezdõdhetnek ^ jellel. - * A keresési kifejezés nem kezdõdhet karakter osztállyal. - * A case-insensitive keresés (ILIKE, ~*) nem használnak indexet ehelyett - funkcionális indexet használnak, amit a 4.12 pontban találhatsz. - * Az alapértelmezett C hellyel kell futtatni az initdb-t. - 4.9) Hogy tudom ellenõrizni, hogy optimalizálta a lekérdezés optimalizálo - a lekérdezésem? - - Olvasd el a dokumentácio EXPLAIN-rol szolo részét. - - 4.10) Mi az R-tree index? - - Az R-tree index a térbeli adat indexelésére alkalmas. Egy hash index nem - képes tartomány keresésekre. A B-tree index csak egy dimenzion kezeli a - tartomány kereséseket. Például ha az indexet egy pont (point adattípus) - típusú mez.re építjük, gyorsabban kezeli az olyan jellegü lekérdezéseket, - mint egy adott körben - - találhato pontok. - - Az R-tree tervezési mintát eredetileg leíro szöveg: 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. - - Ezt olvashatod Stonebraker "Readings in Database Systems" c. könyvében. - - A beépített R-tree kezelni tudják a sokszögeket (polygon adattípus) és a - dobozokat (box). Elméletileg, az R-tree kiterjeszthetõ további dimenziokra - is. Gyakorlatilag ezen dolgoznod kell egy kicsit, és még nincs - dokumentácionk arrol hogy az hogyan mûködik. - - 4.11) Mi a Genetic Query Optimizer? - - A GEQO modul a lekérdezés optimalizácio sebességét növeli nagy mennyiségû - tábla összekapcsolása esetén. Lehetõvé teszi a nagy lekérdezések - végrehajtását nem teljes kereséssel. - - 4.12) Hogyan tudok regexp keresést és case-insensitive regexp keresést - használni? Hogyan tudok indexet használni case-insensitive kereséshez? - - A ~ operátor hajt végre reguláris kifejezés (regexp) értelmezést, a ~* - ennek case-insensitive változata. A LIKE case-insensitive változata az - ILIKE. - - A case-insensitive egyenlõség mûveleteket általában igy hajtjuk végre: - - SELECT * - - FROM tab - - WHERE lower(col) = 'abc'; - - Ez nem fog indexet használni, bár létrehozhatsz egy funkcio indexet: - - CREATE INDEX tabindex ON tab (lower(col)); - - 4.13) Hogyan tudom észlelni egy lekérdezésben, ha egy mezõ NULL? - - Használd "IS NULL"-t és az "IS NOT NULL"-t. - - 4.14) Mi a különbség a különbözõ karaktertípusok között? - - * "char" egy karakter hosszú string - * CHAR(n) bpchar üres hellyel a megadott n hosszúságig - * VARCHAR(n) varchar méret maximális hossz meghatározásával, a lefogllat - terület is változo hosszú lesz - * TEXT nincs meghatározott felso" korlát - * BYTEA változo hosszúságú byte-tömb - - Látni fogod a belsõ elnevezésüket, ha tanulmányozod a rendszertáblákatés - néhány hibaüzenetet. - - Az utobbi négy a "varlena" típusok, ami a tárolásuk modjára utal: az elsõ - 4 byte a lemezen a hosszúság, a többi az adat. A valodi méret tehát - nagyobb mint a deklarált hosszúság.Ezek azadatok tömöritve tárolodnak el, - igy kevesebb helyet foglalnek el az elöre számitottnál. - - A CHAR(n) a legjobb megoldás, ha stabil hosszúságú stringet tárolsz. A - VARCHAR(n) jo arra az esetekre, ha a hosszúság változik, de van felsõ - korlátja. A TEXT típus korlátlan hosszúságú (1 GB-ig) szövegek tárolására - alklamas. A BYTEA bináris adatok tárolására van. A teljesitmény mutatoi - hasonloak ezenek a típusoknak. - - 4.15.1) Hogyan tudok létrehozni automatikusan növekvõ értékû mezõt? - - A PostgreSQL rendelkezik egy SERIAL adattípussal. Ez egy szekvenciát és - egy indexet hoz létre az oszlopon. Például ez: - - CREATE TABLE person ( - - id SERIAL, - - name TEXT - - ); - - ugyanezt jelenti: - - CREATE SEQUENCE person_id_seq; - - CREATE TABLE person ( - - id INT4 NOT NULL DEFAULT nextval('person_id_seq'), - - name TEXT - - ); - - CREATE UNIQUE INDEX person_id_key ON person ( id ); - - A szekvenciákkal kapcsolatban olvasd el a create_sequence man oldalt. A - sor OID-jét is használhatod egyedi azonositoként, bár ebben az esetben - figyelj a pg_gump használatánál a -o opciora (COPY WITH OIDS, másolás - OID-dal), hogy meg?rizd az értékeket. - - 4.15.2) Hogyan kaphatom meg egy SERIAL beszúrás értékét? - - Egy megoldás erre az, ha a nextval() funkcioval megszerzed az értéket még - mielött beszúrnád az adatot a táblába. Erre itt láthatsz egy példát: - - new_id = execute("SELECT nextval('person_id_seq')"); - - execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise - Pascal')"); - - Esetleg lekérdezheted a szekvencia állapotát a sor beszúrása után. - - execute("INSERT INTO person (name) VALUES ('Blaise Pascal')"); - - new_id = execute("SELECT currval('person_id_seq')"); - - Végül pedig, használhatod a visszaadott OID értéket is, bár ez a lehetõ - legkevésbé portolhato. Perl DBI-ben, Edmund Mergl DBD::Pg moduljában az - OID érték használhato a $sth->execute() után ($sth->{pg_oid_status}). - - 4.15.3) A currval() és a nextval() nem teremt holtpont veszélyes helyzetet - a felhasználok között? - - Nem. A currval() funkcio a szerver processzed által adott értéket adja - vissza, nem pedig a többi szerver processz által adottat. - - 4.15.4) Miért nem használodnak fel újra a sequence számok tranzakcio abort - esetén? - - Miért vannak problémák a serial oszlopok számozásával? - - A párhuzamosság fejlesztése érdekében a sorozat számokat kérésre adja ki a - szerver futo tranzakcioknak, és azokat nem zárja, amig a tranzakcio véget - nem ér. Ez jukakat okoz a számozásokban a visszaforditott tranzakciok - miatt. - - 4.16) Mi a OID? Mi a TID? - - Az OID a PostgreSQL egyedi sor azonositoja. Minden sor, ami létrejön a - szerveren, kap egy OID-t. Minden OID, amit az initdb alatt jön létre 16384 - alatt van (lásd include/access/transam.h). Minden, felhasználo által - létrehozott OID legalább ennyi. Alapértelmezésben, az OID nem csak a - táblában vagy az adatbázisban egyedi, hanem a teljes PostgreSQL adatbázis - rendszerben. - - A PostgreSQL az OID-okat a belsö tábláiban használja a sorok táblák között - összekapcsolásához. Ezek az OID-k használhatoak a rekordok azonositására - is amikor táblákat csatol össze a szerver (JOIN). Az OID-ot használhatod - mezö típusként is, és indexelheted is. - - Az OID érték egy központi területröl származik, amit minden szerver - processz használ. Ha az OID-ot valami másra szeretnéd cserélni: - - CREATE TABLE new_table(old_oid oid, mycol int); - - SELECT old_oid, mycol INTO new FROM old; - - COPY new TO '/tmp/pgtable'; - - DELETE FROM new; - - COPY new WITH OIDS FROM '/tmp/pgtable'; - - Az OID 4 byte-os integer értékként tárolodik, igy 4 milliárdnál - túlcsordul. Még soha senki nem jelezte hogy ez történt volna, és ezt a - korlátot igyekszünk eltávolitani, még mielött bárki észrevenné. - - A TID a fizikai sorok blokk és offszet címmel valo azonositására szolgál. - A TID változik minden rekord modositás és törlés alkalmával. Ezeket az - indexek használják hogy a fizikai sort gyorsan megtalálják. - - 4.17) Mi a PostgreSQL-ben használt kifejezések jelentése? - - Néhol a forrás kodban és a dokumnetácioban találhatoak kifejezések, - amelyek általánosabb jelentéssel bírnak. Itt van néhány: - - * tábla (table), relácio (relation), osztály (class) - * sor (row), rekord (record), tuple (nincs magyar jelentés) - * oszlop (column), mezö (field), attributum (attribute) - * retrieve, select - * helyettesit (replace), modosit (update) - * hozzáfûz (append), beszúr (insert) - * OID, sorozat érték (serial value) - * portal, cursor - * range variable, tábla név, tábla alias - Az általános adatbázis kifejezések összefoglaloját itt olvashato: - - http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.html - - 4.18) Miért kapom ezt a hibát: "ERROR: Memory exhausted in - AllocSetAlloc()"? - - Lehet hogy elfogyott a virtuális memoriád, vagy a kerneled erõforrás - korlátai alacsonyak. Probáld ki ezt mielött elinditanád a postmastert: - - ulimit -d 262144 - - limit datasize 256m - - A shelltõl függõen ezek közül csak az egyik fut majd le, de a processzek - adatszegmensét sokkal magasabbra állitja, ami talán elég lesz a lekérdezés - végrehajtásához. Ez az utasítás a jelenlegi processzre (a shelled) - érvényes, és minden általa létrehozott processzre. Ha problémád van az SQL - klienssel, mert a szerver túl nagy adatot küld vissza, probáld meg e - klienssel is ugyanezt. - - 4.19) Hogyan tudhatom meg PostgreSQL, milyen verziot futtatok? - - A psql programban select version(); - - 4.20) Miért kapok "invalid large obj descriptor" hibát nagy objektumok - kezelésénél? - - A nagy objektumok kezelését egy tranzakcios blokkban helyezd el. (BEGIN és - COMMIT között) - - Jelenleg a PostgreSQL ezt a szabályt azzal teszi kötelezõvé, hogy a - tranzakcio végén a nagy objektumokat lezárja, igy a tranzakcio után az - elsõ mûvelet amit az objektumon végrahajtanál hibás lesz. - - Ha olyan programozási felületet használsz mint az ODBC vagy a JDBC akkor - valoszinûleg ki kell kapcsolnod az auto-commit-ot. - - 4.21) Hogy hozhatok létre olyan oszlopot, aminek alapértelmezett érétke a - jelenlegi idõ? - - Használd a CURRENT_TIMESTAMP -ot: - - CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP ); - - 4.22) Miért olyan lassúak az al-lekérdezéseim IN-nel? - - Jelenleg az al-lekérdezéseket a külsõ lekérdezéshez csatoljuk. Ha az - allekérdezés csak kevés sort eredményez és a külsõ lekérdezés sokat, akkor - az IN is gyors. Az EXISTS kulcsszo használatával gyorsithatod a - lekérdezéseket. - - SELECT * - - FROM tab - - WHERE col IN (SELECT subcol FROM subtab); - - EXISTS használatával: - - SELECT * - - FROM tab - - WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col); - - Ahhoz hogy ez gyorsan fusson le, a subcol indexelt oszlopnak kell hogy - legyen. Reméljük ezt a korlátot sikerül hamarosan legyõznünk. - - 4.23) Hogyan tudok outer join-t végrehajtani? - - A PostgreSQL a szabványos SQL szintaktikát követi. Itt van két példa: - - SELECT * - - FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col); - - vagy - - SELECT * - - FROM t1 LEFT OUTER JOIN t2 USING (col); - - Ezek az identikus lekérdezések összekapcsolják a t1.col és a t2.col - mezõket, és a t1 bármelyik kapcsolatlan sorát is visszadják. A RIGHT JOIN - a t2 kapcsolatlan sorait adta volna vissza, a FULL JOIN pedig a kapcsolt, - és mindkét tábla kapcsolatlan sorait adja. Az OUTER kulcsszo opcionális, a - LEFT, RIGHT és FULL JOIN szintaktikailag helyes. Az átlagos - összekapcsolásokat INNER JOIN-nak nevezzük. - - Az elõzõ kiadásokban a OUTER JOIN lekérdezéseket UNION és NOT IN - kulcsszavakkal lehetett szimulálni. Például a tab1 és a tab2 - összekapcsolása: - - 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) Hogyan tudok több adatbázison végrehajtani lekérdezést? - - Arra nincs lehetõség, hogy más adatbázisbol kérdezz le adatot.Mivel a - PostgreSQL adatbázis specifikus rendszer táblákat töltbe, bizonytalan hogy - egy adatbázisok közötti lekérdezésnek hogyankellene viselkednie. - - A contrib/dblink könyvtárban találsz egy megoldást erre, ami funkcio - hivások segitségével mûködik. Persze, a kliens hozhat létreszimultán - kapcsolatot több adatbázissal, és összefésülheti az eredményeket. - - 4.25) Hogy tudok több soros vagy oszlopos eredményt visszaadni egy - funkciobol? - - A PL/pgSQL tárolt eljárás nyelvvel refcursor használatával. Részletesen - itt: - - http://www.PostgreSQL.org/idocs/index.php?plpgsql-cursors.html - - 4.26) Miért nem tudom megbizhatoan létrehozni és törölni az átmeneti - táblákat a PL/pgSQL funkciokban? - - A PL/pgSQL cacheli a funkciok tartalmát, aminek az a szerencsétlen - mellékhatása, hogy ha egy PL/pgSQL funkcio használ egy átmeneti táblát, - ami késo"bb törlõdik majd ujra létrejön, akkor az újra lefuto funkcio nem - fogja megtalálni a táblát, mert a cache változat a régi táblára tartalmaz - mutatot. A megoldás erre az EXECUTE használata az átmeneti táblák - kezelésére PL/pgSQL-ben. Ez a lekérdezés újrafordítását fogja elõidézni - minden alkalommal. - - 4.27) Milyen replikácios lehetõségek vannak? - - Bár a replikácio egyetlen terület, több technologia létezik replikáciora, - természetesen mindnek meg vannak a maga elo"nyei és hátrányai. - - A master/slave replikácios megoldással a master adatbázison hajthatunk - végre modosításokat, míg a slave adatbázisokon csak lekérdezéseket. A - PostgreSQL legnépszeru"bb master/slave replikácios megoldása a Solny-I. - - Számos más master/slave replikácios lehetõség létezik.Egy Listát - olvashatsz ezekrõl itt: - - http://gborg.PostgreSQL.org/genpage?replication_research - - A multi-master replikácio leheto"vé teszi több master adatbázis - használatát, bár ez a technologia drasztikusan csökkenti az adatbázis - teljesítményét a sok szinkornizácio miatt. A PGCluster a legelterjedtebb - ilyen megoldás. - - Egy többfelhasználos replikácios rendszer készül itt: - - http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php. - - 4.28) Milyen kodolási lehetõségek vannak? - - * A contrib/pgcrypto tartlamaz számos SQL lekérdezésben használhato - kodolást. - * A kliens-szerver kommunikácio rejtjelezésére a hostssl használhato. - Ezt a pg_hba.conf-ben engedélyeztheted. - * Az adatbázis felhsználok jelszavait tároláskor kodolja a rendszer. - * Régebbi verziokban a PASSWORD_ENCRYPTION opcioval lehetett - bekapcsolni. - * A szerveren használhatsz kodolt fájrendszert. - - ---------------------------------------------------------------------- - -A PostgreSQL kiterjesztése - - 5.1) Írtam egy felhasználoi funkciot. Miért core dumpol az adatbázis - amikor használom? - - Számos probléma lehet. Elöbb probáld ki a funkciodat egy különállo - alkalmazásban. - - 5.2) Hogyan lehet új adattípusokat és funkciokat hozzáadni a PostgreSQL - disztribúciohoz? - - Küldd el a kiegészítéseid a pgsql-hackers levelezési listára és a - forráskodjaid végül a contrib-ban kötnek ki. - - 5.3) Hogyan lehet olyan C funkciot írni, ami Tuple-t ad vissza? - - A 7.3 verziotol kezdve a PostgreSQL támogatja a táblázatokat viszzaado - funkciokat C, PL/pgSQL és SQL nyelveken. Bõvebb dokumentáciot a Programozo - kézikönyvben találsz. Egy C példa funkcio találhato a contrib/tablefunc - könyvtárban. - - 5.4) Megváltoztattam egy forrás állományt. Miért nem változik a bináris - újrafordítás után? - - A Makefile-ok nem ismerik a include állományok megfelelõ függõségeit. - Végre kell hajtanod egy make clean-t, majd újra egy make-t. Ha GCC-t - használsz felhasználhatod a configure script --enable-depend opcioját, így - a compiler maga fogja ellenõrizni a függõségeket. diff --git a/doc/FAQ_japanese b/doc/FAQ_japanese deleted file mode 100644 index ca2618f8ba..0000000000 --- a/doc/FAQ_japanese +++ /dev/null @@ -1,1126 +0,0 @@ -PostgreSQL(¥Ý¥¹¥È¥°¥ì¥¹¡¦¥­¥å¡¼¡¦¥¨¥ë)¤Ë¤Ä¤¤¤Æ¤è¤¯¤¢¤ë¼ÁÌä¤È¤½¤Î²òÅú(FAQ) - -¸¶Ê¸ºÇ½ª¹¹¿·Æü: Thu Jan 01 14:01:00 EDT 2009 - -¸½ºß¤Î°Ý»ý´ÉÍý¼Ô: Bruce Momjian (bruce@momjian.us) -Maintainer of Japanese Translation: Jun Kuwamura (juk at postgresql.jp) - -¤³¤Îʸ½ñ¤ÎºÇ¿·ÈÇ¤Ï http://www.postgresql.org/docs/faqs.FAQ.html ¤Ç¸«¤ë¤³¤È¤¬¤Ç -¤­¤Þ¤¹¡£ - -¥×¥é¥Ã¥È¥Û¡¼¥à¤ËÆÃÍ­¤Î¼ÁÌä¤Ë¤Ä¤¤¤Æ¤Ï: http://www.postgresql.org/docs/faq/ -¤Ë²òÅú¤¬¤¢¤ê¤Þ¤¹¡£ - -(°Ê²¼¡¢Ìõ¼Ô¤Ë¤è¤ëÃí¼á¤ò [ÌõÃí¡§ ¤È ] ¤È¤Ç°Ï¤ó¤Çµ­¤·¤Þ¤¹¡£) -[ÌõÃí¡§ - ÆüËܸìÈǤÎFAQ¤Ï¡¢ - http://www.postgresql.org/docs/faqs.FAQ_japanese.html - ¤Ë¤¢¤ê¤Þ¤¹¡£ - ºÇ¿·¤ÎÆüËܸìÈǤˤĤ¤¤Æ¤Ï¡¢¤³¤Îʸ½ñ¤ÎºÇ¸å¤Ë¤¢¤ë¡ÖÆüËܸìÈǤˤĤ¤¤Æ¡×¤ò¤´¤é¤ó¤¯¤À¤µ¤¤¡£ - -] - -¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬ - - °ìÈÌŪ¤Ê¼ÁÌä - -1.1) PostgreSQL¤È¤Ï²¿¤Ç¤¹¤«¡©¤½¤Î¸Æ¤ÓÊý¤Ï¡© Postgres¤È¤Ï¡© -1.2) 郎 PostgreSQL ¤ò¥³¥ó¥È¥í¡¼¥ë¤·¤Æ¤¤¤Þ¤¹¤«¡© -1.3) PostgreSQL¤ÎÃøºî¸¢¤Ï¤É¤¦¤Ê¤Ã¤Æ¤Þ¤¹¤«¡© -1.4) PostgreSQL¤ò¥µ¥Ý¡¼¥È¤¹¤ë¥×¥é¥Ã¥È¥Û¡¼¥à¤Ï¡© -1.5) PostgreSQL¤Ï¤É¤³¤«¤éÆþ¼ê¤Ç¤­¤Þ¤¹¤«¡© -1.6) ºÇ¿·¤Î¥ê¥ê¡¼¥¹¤Ï¤É¤ì¤Ç¤¹¤«¡© -1.7) ¥µ¥Ý¡¼¥È¤Ï¤É¤³¤Ç¼õ¤±¤é¤ì¤Þ¤¹¤«¡© -1.8) ¥Ð¥°¥ì¥Ý¡¼¥È¤Ï¤É¤Î¤è¤¦¤Ëȯ¿®¤·¤Þ¤¹¤«¡© -1.9) ´ûÃΤΥХ°¤ä̤¤À̵¤¤µ¡Ç½¤Ï¤É¤¦¤ä¤Ã¤Æ¸«¤Ä¤±¤Þ¤¹¤«¡© -1.10) ¤É¤Î¤è¤¦¤Êʸ½ñ¤¬¤¢¤ê¤Þ¤¹¤«¡© -1.11) SQL¤Ï¤É¤¦¤¹¤ì¤Ð³Ø¤Ù¤Þ¤¹¤«¡© -1.12) ¥Ñ¥Ã¥Á¤òÄ󶡤·¤¿¤ê¡¢³«È¯¥Á¡¼¥à»²²Ã¤¹¤ë¤Ë¤Ï¤É¤¦¤¹¤ì¤Ð¤è¤¤¤Ç¤¹¤«¡© -1.13) ¾¤ÎDBMS¤ÈÈæ¤Ù¤ÆPostgreSQL ¤Ï¤É¤¦¤Ê¤Î¤Ç¤¹¤«¡© PostgreSQL¤òÁȤ߹þ¤ß¤Ë»È¤¨ -¤Þ¤¹¤«¡© -1.14) PostgreSQL¤Ï¹ñËè¤ÎºÇ¿·¤Î²Æ»þ´Ö¤ÎÊѹ¹¤ò°·¤¤¤Þ¤¹¤«¡© -1.15) PostgreSQL¤Î¥á¡¼¥ê¥ó¥°¥ê¥¹¥È¤Î¹ØÆɤò¤ä¤á¤ë¤Ë¤Ï¤É¤¦¤¹¤ì¤Ð¤è¤¤¤Ç¤¹¤«¡©¤Þ¤¿ -¡¢ÅŻҥ᡼¥ë¤ò½ÅÊ£¤·¤Æ¼õ¤±¼è¤é¤Ê¤¤¤è¤¦¤Ë¤¹¤ë¤Ë¤Ï¤É¤¦¤·¤Þ¤¹¤«¡© - - ¥æ¡¼¥¶¡¦¥¯¥é¥¤¥¢¥ó¥È¤Î¼ÁÌä - -2.1) PostgreSQL ¤Ë¤Ï¤É¤ó¤Ê¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤¬»È¤¨¤Þ¤¹¤«¡© -2.2) PostgreSQL ¤ò Web ¥Ú¡¼¥¸¤ÈÏ¢·È¤µ¤»¤ë¤Ë¤Ï¤É¤ó¤Ê¥Ä¡¼¥ë¤¬¤¢¤ê¤Þ¤¹¤«¡© -2.3) PostgreSQL ¤Ë¥°¥é¥Õ¥£¥«¥ë¡¦¥æ¡¼¥¶¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Ï¤¢¤ê¤Þ¤¹¤«¡© - - ´ÉÍý¾å¤Î¼ÁÌä - -3.1) ¤É¤¦¤¹¤ì¤Ð¡¢PostgreSQL¤ò/usr/local/pgsql °Ê³°¤Î¾ì½ê¤Ë¥¤¥ó¥¹¥È¡¼¥ë¤Ç¤­¤Þ¤¹ -¤«¡© -3.2) ¾¤Î¥Û¥¹¥È¤«¤é¤ÎÀܳ¤Ï¤É¤Î¤è¤¦¤ËÀ©¸æ¤·¤Þ¤¹¤«¡© -3.3) ¤è¤êÎɤ¤À­Ç½¤òÆÀ¤ë¤¿¤á¤Ë¤Ï¡¢¥Ç¡¼¥¿¥Ù¡¼¥¹¡¦¥¨¥ó¥¸¥ó¤ò¤É¤Î¤è¤¦¤ËÄ´À°¤·¤Þ¤¹¤« -¡© -3.4) ¤É¤Î¤è¤¦¤Ê¥Ç¥Ð¥°µ¡Ç½¤¬»È¤¨¤Þ¤¹¤«¡© -3.5) Àܳ¤·¤è¤¦¤È¤¹¤ë¤È¤­¤Ë 'Sorry, too many clients' ¤¬½Ð¤ë¤Î¤Ï¤Ê¤¼¤Ç¤¹¤«¡© -3.6) PostgreSQL¤Î¥¢¥Ã¥×¥°¥ì¡¼¥É¤Î¼ê½ç¤Ï¤É¤¦¤Ê¤ê¤Þ¤¹¤«¡© -3.7) ¥Ï¡¼¥É¥¦¥§¥¢¤Ë¤Ï¤É¤Î¤è¤¦¤Ê¥³¥ó¥Ô¥å¡¼¥¿¤ò»È¤¨¤Ð¤è¤¤¤Ç¤¹¤«¡© - - Áàºî¾å¤Î¼ÁÌä - -4.1) ºÇ½é¤Î¤¤¤¯¤Ä¤«¤Î¥í¥¦¤Î¤ß¤ò select ¤¹¤ë¤Ë¤Ï¤É¤¦¤·¤Þ¤¹¤«¡©¥é¥ó¥À¥à¤Ê¥í¥¦¡© -4.2) ÄêµÁ¤µ¤ì¤¿¥Æ¡¼¥Ö¥ë¡¢¥¤¥ó¥Ç¥Ã¥¯¥¹¡¢¥Ç¡¼¥¿¥Ù¡¼¥¹¡¢¤ª¤è¤Ó¡¢¥æ¡¼¥¶¤ò¤É¤Î¤è¤¦¤Ë -¤·¤Æ¸«¤Ä¤±½Ð¤·¤Þ¤¹¤«¡© -4.3) ¥«¥é¥à¤Î¥Ç¡¼¥¿¥¿¥¤¥×¤òÊѹ¹¤¹¤ë¤Ë¤Ï¤É¤¦¤·¤Þ¤¹¤«¡© -4.4) ¥í¥¦¡¢¥Æ¡¼¥Ö¥ë¡¢¥Ç¡¼¥¿¥Ù¡¼¥¹¤ÎºÇÂ祵¥¤¥º¤Ï¡© -4.5) °ìÈÌŪ¤Ê¥Æ¥­¥¹¥È¥Õ¥¡¥¤¥ë¤Î¥Ç¡¼¥¿¤òÊݸ¤¹¤ë¤Ë¤Ï¡¢¥Ç¡¼¥¿¥Ù¡¼¥¹¤Î¥Ç¥£¥¹¥¯ÍÆÎÌ -¤Ï¤É¤Î¤¯¤é¤¤É¬ÍפǤ¹¤«¡© -4.6) ¥¯¥¨¥ê¤¬ÃÙ¤¤¤Î¤Ï¤Ê¤¼¤Ç¤·¤ç¤¦¡©¤Ê¤¼¡¢¥¤¥ó¥Ç¥Ã¥¯¥¹¤¬»È¤ï¤ì¤Ê¤¤¤Î¤Ç¤·¤ç¤¦¤«¡© -4.7) ¥¯¥¨¥ê¥ª¥×¥Æ¥£¥Þ¥¤¥¶¤¬¡¢¤É¤Î¤è¤¦¤Ë¥¯¥¨¥ê¤òɾ²Á¤·¤Æ¤¤¤«¤ò¡¢¸«¤ë¤Ë¤Ï¤É¤¦¤·¤Þ -¤¹¤«¡© -4.8) Àµµ¬É½¸½¤Ç¤Î¸¡º÷¤äÂçʸ»ú¤È¾®Ê¸»ú¤È¤ò¶èÊ̤·¤Ê¤¤Àµµ¬É½¸½¸¡º÷¤Ï¤É¤Î¤è¤¦¤Ë¼Â¸½ -¤·¤Þ¤¹¤«¡©Âçʸ»ú¤È¾®Ê¸»ú¤È¤ò¶èÊ̤·¤Ê¤¤¸¡º÷¤Î¤¿¤á¤Î¥¤¥ó¥Ç¥Ã¥¯¥¹¤Ï¤É¤Î¤è¤¦¤Ë»È¤¤ -¤Þ¤¹¤«¡© -4.9) ¥¯¥¨¥ê¤ÎÃæ¤Ç¡¢¥Õ¥£¡¼¥ë¥É¤¬ NULL ¤Ç¤¢¤ë¤³¤È¤ò¸¡½Ð¤¹¤ë¤Ë¤Ï¤É¤¦¤·¤Þ¤¹¤«¡© -NULL¤Î²ÄǽÀ­¤Î¤¢¤ë¤â¤Î¤ò¤É¤Î¤è¤¦¤¹¤ì¤ÐÏ¢·ë¤Ç¤­¤Þ¤¹¤«? ¥Õ¥£¡¼¥ë¥É¤¬NULL¤«¤É¤¦¤« -¤Ç¤É¤Î¤è¤¦¤Ë¥½¡¼¥È¤¬¤Ç¤­¤Þ¤¹¤«¡© -4.10) ¤¤¤í¤¤¤í¤Êʸ»ú·¿¤Î¤½¤ì¤¾¤ì¤Î°ã¤¤¤Ï²¿¤Ç¤¹¤«¡© -4.11.1) ÄÌÈÖ(serial)¡¿¼«Æ°Áýʬ¥Õ¥£¡¼¥ë¥É¤Ï¤É¤Î¤è¤¦¤Ë¤Ä¤¯¤ê¤Þ¤¹¤«¡© -4.11.2) SERIAL¥Ç¡¼¥¿·¿¤ËÁÞÆþ¤µ¤ì¤ëÃͤϡ¢¤É¤¦¤¹¤ì¤ÐÆÀ¤é¤ì¤Þ¤¹¤«¡© -4.11.3) currval() ¤Ï¾¤Î¥æ¡¼¥¶¤È¤Î¶¥¹ç¾õÂ֤˴٤뤳¤È¤Ï¤Ê¤¤¤Ç¤¹¤«¡© -4.11.4) ¥È¥é¥ó¥¶¥¯¥·¥ç¥ó¤¬ÃæÃǤ·¤¿¤È¤­¤Ë¤â¤¦¤¤¤Á¤É¥·¡¼¥±¥ó¥¹Èֹ椬»È¤ï¤ì¤Ê¤¤¤Î -¤Ï¤Ê¤¼¤Ç¤¹¤«¡©¥·¡¼¥±¥ó¥¹¡¿SERIAL¥«¥é¥à¤Ë¶õ¤­¤¬¤¢¤ë¤Î¤Ï¤Ê¤¼¤Ç¤¹¤«¡© -4.12) OID ¤È¤Ï²¿¤Ç¤¹¤«¡© TID ¤È¤Ï²¿¤Ç¤¹¤«¡© -4.13) ¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸ "ERROR: Memory exhausted in AllocSetAlloc()"¤¬½Ð¤ë¤Î¤Ï¤Ê -¤¼¤Ç¤¹¤«¡© -4.14) ¤É¤Î¥Ð¡¼¥¸¥ç¥ó¤Î PostgreSQL ¤òÁö¤é¤»¤Æ¤¤¤ë¤Î¤«¤òÄ´¤Ù¤ë¤Ë¤Ï¤É¤¦¤·¤Þ¤¹¤«¡© -4.15) ¸½ºß¤Î»þ¹ï¤¬¥Ç¥Õ¥©¥ë¥È¤È¤Ê¤ë¤è¤¦¤Ê¥«¥é¥à¤Ï¤É¤Î¤è¤¦¤Ë¤Ä¤¯¤ê¤Þ¤¹¤«¡© -4.16) ³°Éô·ë¹ç(outer join)¤Ï¤É¤Î¤è¤¦¤Ë¼Â¸½¤·¤Þ¤¹¤«? -4.17) Ê£¿ô¤Î¥Ç¡¼¥¿¥Ù¡¼¥¹¤ò»È¤¦Ì䤤¹ç¤ï¤»¤Ï¤É¤Î¤è¤¦¤Ë¤¹¤ì¤Ð¤Ç¤­¤Þ¤¹¤«¡© -4.18) ´Ø¿ô¤«¤éÊ£¿ô¤Î¥í¥¦¤Þ¤¿¤Ï¥«¥é¥à¤òÊÖ¤¹¤Ë¤Ï¤É¤¦¤·¤Þ¤¹¤«¡© -4.19) PL/PgSQL ¤Î´Ø¿ô¤ÎÃæ¤Ç°ì»þ¥Æ¡¼¥Ö¥ë¤Ë¥¢¥¯¥»¥¹¤¹¤ë¤È¤­¡¢¤É¤¦¤·¤Æ "relation -with OID ##### does not exist" ¤È¤¤¤¦¥¨¥é¡¼¤ò¼õ¤±¼è¤ë¤Î¤Ç¤·¤ç¤¦¤«¡© -4.20) ¤É¤Î¤è¤¦¤Ê¥ì¥×¥ê¥±¡¼¥·¥ç¥ó¤Î¥½¥ê¥å¡¼¥·¥ç¥ó¤¬¤¢¤ê¤Þ¤¹¤«¡© -4.21) ¥Æ¡¼¥Ö¥ë¤È¥«¥é¥à¤Î̾Á°¤¬¥¯¥¨¥ê¡¼¤ÎÃæ¤Çǧ¼±¤µ¤ì¤Ê¤¤¤Î¤Ï¤Ê¤¼¤Ç¤¹¤«¡©¤Ê¤¼Âç -ʸ»ú²½(¥­¥ã¥Ô¥¿¥é¥¤¥º)¤Ï²¹Â¸¤µ¤ì¤Ê¤¤¤Î¤Ç¤¹¤«? - - ÆüËܸì¤Ë´Ø¤¹¤ë¼ÁÌä - -5.1) ÆüËܸ줬¤¦¤Þ¤¯°·¤¨¤Ê¤¤¤Î¤Ï¤Ê¤¼¤Ç¤¹¤«¡© -5.2) psql ¤ÇWindows¤«¤é¥¢¥¯¥»¥¹¤·¤¿¤È¤­¤Ë¡¢ÆüËܸ줬ʸ»ú²½¤±¤¹¤ë¤Î¤Ç¤¹¤¬¡© -5.3) PostgreSQL¤ÇÆüËܸì¤ÎÁ´Ê¸¸¡º÷¤Ï¤Ç¤­¤Þ¤¹¤«¡© -¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬ - - °ìÈÌŪ¤Ê¼ÁÌä - -1.1) PostgreSQL¤È¤Ï²¿¤Ç¤¹¤«¡©¤½¤Î¸Æ¤ÓÊý¤Ï¡© Postgres¤È¤Ï¡© - -PostgreSQL¤ÏPost-Gres-Q-L(¥Ý¥¹¥È¡¦¥°¥ì¥¹¡¦¥­¥å¡¼¡¦¥¨¥ë) ¤Èȯ²»¤·¤Þ¤¹¤¬¡¢²ñÏäΠ-Ãæ¤Ç¤Ïñ½ã¤Ë Postgres ¤È¸Æ¤Ð¤ì¤ë¤³¤È¤â¤¢¤ê¤Þ¤¹¡£¡Ê"PostgreSQL"¤ò¤É¤¦È¯²»¤¹¤ë¤« -µ¤¤Ë¤Ê¤ë¿Í¤Î¤¿¤á¤Ë¡¢²»À¼¥Õ¥¡¥¤¥ë¤òÍÑ°Õ¤·¤Æ¤¢¤ê¤Þ¤¹¡£ - -PostgreSQL ¤Ï¥ª¥Ö¥¸¥§¥¯¥È-¥ê¥ì¡¼¥·¥ç¥Ê¥ë¥Ç¡¼¥¿¥Ù¡¼¥¹¥·¥¹¥Æ¥à¤Ç¡¢ÅÁÅýŪ¤Ê¾¦ÍÑ¥Ç -¡¼¥¿¥Ù¡¼¥¹¥·¥¹¥Æ¥à¤Ë¡¢¼¡À¤ÂåDBMS¥·¥¹¥Æ¥à¤Ë¸«¤é¤ì¤ë¤è¤¦¤Ê²þÎɤ¬»Ü¤µ¤ì¤¿ÆÃħ¤òÍ­ -¤·¤Þ¤¹¡£PostgreSQL¤Ï¡¢ÌµÎÁ¤Ç´°Á´¤Ê¥½¡¼¥¹¥³¡¼¥É¤ò¼ê¤ËÆþ¤ì¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ - -PostgreSQL ¤Î³«È¯¤Ï¡¢¤Û¤È¤ó¤É¤¬¡¢À¤³¦Ãæ¤Ë¤Ò¤í¤¬¤Ã¤¿¥Ü¥é¥ó¥Æ¥£¥¢¤Î³«È¯¼Ô¤Ë¤è¤Ã¤Æ -¡¢¥¤¥ó¥¿¡¼¥Í¥Ã¥È¤òÄ̤·¤¿¥³¥ß¥å¥Ë¥±¡¼¥·¥ç¥ó¤Ë¤è¤Ã¤Æ¹Ô¤ï¤ì¤Æ¤¤¤Þ¤¹¡£¥³¥ß¥å¥Ë¥Æ¥£ -¤Ë¤è¤ë¥×¥í¥¸¥§¥¯¥È¤Ç¤¢¤ë¤¿¤á¡¢¤É¤Î´ë¶È¤ÎÀ©¸æ¤â¤¦¤±¤Þ¤»¤ó¡£³«È¯¤Ë»²²Ã¤·¤¿¤±¤ì¤Ð -¡¢ http://www.postgresql.org/docs/faqs.FAQ_DEV.html ¤Ë¤¢¤ë³«È¯¼Ô¤ÎFAQ¤ò¸«¤Æ¤¯¤À -¤µ¤¤¡£ - -Postgres¤ÏPostgreSQL¤Î¹­¤¯»È¤ï¤ì¤Æ¤¤¤ë°¦¾Î¤Ç¤¹¡£¤Þ¤¿¡¢¥Ð¡¼¥¯¥ì¡¼¤Ç¤Î¥×¥í¥¸¥§¥¯ -¥È¤Ç¤â¤È¤â¤È»È¤ï¤ì¤Æ¤¤¤¿Ì¾Á°¤Ç¡¢¤Û¤«¤Î¤¤¤º¤ì¤Î°¦¾Î¤ËÈæ¤Ù¤Æ¤âÍÚ¤«¤Ë¹¥¤Þ¤·¤¤¤Ç¤¹ -¡£'PostgreSQL' ¤Îȯ²»¤¬Æñ¤·¤¤¤È»×¤¦¤Î¤Ç¤¢¤ì¤Ð¡¢¤½¤Î¤«¤ï¤ê¤Ë 'Postgres' ¤È¸Æ¤Ö¤è -¤¦¤Ë¤·¤Þ¤·¤ç¤¦¡£ - -1.2) 郎 PostgreSQL ¤ò¥³¥ó¥È¥í¡¼¥ë¤·¤Æ¤¤¤Þ¤¹¤«¡© - -PostgreSQL¤ÎÌçÈÖ¡¢Ãæ±û°Ñ°÷²ñ¡¢¤¢¤ë¤¤¤Ï¡¢¥³¥ó¥È¥í¡¼¥ë¤ò¤¹¤ë²ñ¼Ò¤òõ¤½¤¦¤È¤·¤Æ¤â -¡¢Äü¤á¤¶¤ë¤ò¤¨¤º ---- ¸ºß¤·¤Ê¤¤¤Î¤Ç¤¹¡£²æ¡¹¤Ï¡¢Ãæ¿´¤È¤Ê¤ë¥³¥ß¥Ã¥Æ¥£¤ÈCVS¥³¥ß¥Ã -¥¿¤ò»ý¤Á¤Þ¤¹¤¬¡¢¤³¤ì¤é¤Î¥°¥ë¡¼¥×¤Ï¥³¥ó¥È¥í¡¼¥ë¤¹¤ë¤¿¤á¤È¤¤¤¦¤è¤ê¤â¡¢´ÉÍý¾å¤Î¤â -¤Î¤Ç¤¹¡£¤³¤³¤Ç¤Ï¡¢¥×¥í¥¸¥§¥¯¥È¤Ï¡¢¤À¤ì¤Ç¤â»²²Ã¤¬¤Ç¤­¤ë³«È¯¼Ô¤È¥æ¡¼¥¶¤Î¥³¥ß¥å¥Ë -¥Æ¥£¤Ë¤è¤êÊý¸þÉÕ¤±¤é¤ì¤Þ¤¹¡£ÆɼԤ¬¤ä¤é¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¤³¤È¤Ï¡¢¥á¡¼¥ê¥ó¥°¥ê¥¹¥È -¤ò¥µ¥Ö¥¹¥¯¥é¥¤¥Ö¤·¤Æ¡¢µÄÏÀ¤Ë»²²Ã¤¹¤ë¤³¤È¤Ç¤¹¡£¡ÊDeveloper's FAQ¤Ë¤Ï¡¢PostgreSQL -³«È¯¤Ë²Ã¤ï¤êÊý¤Ë¤Ä¤¤¤Æ¤Î¾ðÊ󤬤¢¤ê¤Þ¤¹¡£¡Ë - -1.3) PostgreSQL ¤ÎÃøºî¸¢¤Ï¤É¤¦¤Ê¤Ã¤Æ¤Þ¤¹¤«¡© - -PostgreSQL ¤Ï²¼µ­¤ÎÃøºî¸¢¤Ë½¾¤¤¤Þ¤¹¡£ - -PostgreSQL¤Ï¸Å¤¯¤«¤é¤ÎBSD¥é¥¤¥»¥ó¥¹¤Î²¼¤ÇÇÛÉÛ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£¤½¤ì¤Ï´ðËÜŪ¤Ë¤Ï¡¢Íø -ÍѼԤ¬¤½¤Î¥³¡¼¥É¤ò¹¥¤­¾¡¼ê¤ËÍøÍѤ¹¤ë¤³¤È¤¬µö¤µ¤ì¤Æ¤¤¤Þ¤¹¡£À©¸Â¤¬¤¢¤ë¤È¤¹¤ì¤Ð¡¢ -¤³¤Î¥½¥Õ¥È¥¦¥§¥¢¤Ëȼ¤¦¤¤¤«¤Ê¤ëÌäÂê¤Ë¤ª¤¤¤Æ¤âˡŪ¤ËÀÕǤ¤ò²æ¡¹¤ËÉé¤ï¤»¤ë¤³¤È¤¬¤Ç -¤­¤Ê¤¤¤È¤¤¤¦¤³¤È¤Ç¤¹¡£¤Þ¤¿¡¢¤³¤ÎÃøºî¸¢É½¼¨¤¬¤³¤Î¥½¥Õ¥È¥¦¥§¥¢¤Î¤¹¤Ù¤Æ¤ÎÊ£À½¤Ëɽ -¼¨¤¹¤ë¤³¤È¤âɬÍפǤ¹¡£°Ê²¼¤Ë¡¢²æ¡¹¤¬¼ÂºÝ¤Ë»È¤Ã¤Æ¤¤¤ëBSD»ÈÍѵöÂú½ñ¤ò¼¨¤·¤Þ¤¹¡§ - - [ÌõÃí¡§ - ÀµÊ¸¤Ï±Ñ¸ì¤Ç¤¹¡£»²¹Í¤È¤·¤Æ¡¢Ìõʸ¤òÊ»µ­·ÇºÜ¤·¤Þ¤¹¡£ - ] - - -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. - - POSTGRESQL ¥Ç¡¼¥¿¥Ù¡¼¥¹´ÉÍý¥·¥¹¥Æ¥à - - ÉôʬŪÃøºî¸¢ (c) 1996-2009, PostgreSQL¹ñºÝ³«È¯¥°¥ë¡¼¥× - ÉôʬŪÃøºî¸¢ (c) 1994-1996 ¥«¥ê¥Õ¥©¥ë¥Ë¥¢Âç³ØËܹ» - - - ËÜ¥½¥Õ¥È¥¦¥§¥¢¤ª¤è¤Ó¤½¤Îʸ½ñ°ì¼°¤Ï¾åµ­¤ÎÃøºî¸¢É½¼¨¤È¡¢¤³¤Îʸ¾Ï - ¤ª¤è¤Ó¤³¤ì¤Ë³¤¯Æó¤Ä¤ÎÃÊÍÁ´¤Æ¤ÎÊ£À½¤ËźÉÕ¤µ¤ì¤Æ¤¤¤ë¸Â¤ê¤Ë¤ª¤¤ - ¤Æ¡¢»ÈÍÑ¡¢Ê£À½¡¢½¤Àµ¤ª¤è¤ÓÇÛÉդεö²Ä¤ò¡¢¤¤¤«¤Ê¤ëÌÜŪ¤Ç¤¢¤Ã¤Æ¤â¡¢ - ̵½þ¤Ç¤«¤ÄƱ°Õ½ñ̵¤·¤Ë¹Ô¤Ê¤¨¤ë¤³¤È¤ò¤³¤³¤Ëǧ¤á¤Þ¤¹¡£ - - ¥«¥ê¥Õ¥©¥ë¥Ë¥¢Âç³Ø¤Ï¡¢¤¤¤«¤Ê¤ëÅö»ö¼Ô¤Ë¤¿¤¤¤·¤Æ¤â¡¢Íø±×¤Î²õ¼º¤ò - ´Þ¤à¡¢Ä¾ÀÜŪ¡¢´ÖÀÜŪ¡¢ÆÃÊÌ¡¢¶öÁ³¤¢¤ë¤¤¤ÏɬÁ³Åª¤Ë¤«¤«¤ï¤é¤ºÀ¸¤¸¤¿ - »³²¤Ë¤Ä¤¤¤Æ¡¢¤¿¤È¤¨¥«¥ê¥Õ¥©¥ë¥Ë¥¢Âç³Ø¤¬¤³¤ì¤é¤Î»³²¤Ë¤Ä¤¤¤ÆÁÊÄÉ - ¤ò¼õ¤±¤Æ¤¤¤¿¤È¤·¤Æ¤â¡¢°ìÀÚ¤ÎÀÕǤ¤òÉ餤¤Þ¤»¤ó¡£ - - ¥«¥ê¥Õ¥©¥ë¥Ë¥¢Âç³Ø¤Ï¡¢¾¦ÍÑÌÜŪ¤Ë¤ª¤±¤ë°ÅÌÛ¤ÎÊݾڤȡ¢ÆÃÄêÌÜŪ¤Ç - ¤ÎŬ¹çÀ­¤Ë´Ø¤·¤Æ¤Ï¤â¤È¤è¤ê¡¢¤³¤ì¤é¤Ë¸Â¤é¤º¡¢¤¤¤«¤Ê¤ëÊݾڤâÊü´þ¤¹ - ¤ë¤³¤È¤òÌÀ¸À¤·¤Þ¤¹¡£°Ê²¼¤ËÍÑ°Õ¤µ¤ì¤¿¥½¥Õ¥È¥¦¥§¥¢¤Ï¡Ö¤½¤Î¤Þ¤Þ¡×¤ò - ´ðËܸ¶Íý¤È¤·¡¢¥«¥ê¥Õ¥©¥ë¥Ë¥¢Âç³Ø¤Ï¤½¤ì¤ò°Ý»ý¡¢»Ù±ç¡¢¹¹¿·¡¢²þÎɤ¢ - ¤ë¤¤¤Ï½¤Àµ¤¹¤ëµÁ̳¤òÉ餤¤Þ¤»¤ó¡£ - - [ÌõÃí¡§ - Ãøºî¸¢¤Ë´Ø¤¹¤ëÀµÊ¸¤Ï¾åµ­¤Î±Ñ¸ì¤Ë¤è¤ëɽµ­¤Ç¤¹¡£ÆüËܸìÌõ¤Ï¤¢¤¯¤Þ¤Ç - »²¹ÍÄøÅ٤Ȥ·¤Æ¤¯¤À¤µ¤¤¡£ - ] - - -1.4) PostgreSQL¤ò¥µ¥Ý¡¼¥È¤¹¤ë¥×¥é¥Ã¥È¥Û¡¼¥à¤Ï¡© - -°ìÈÌŪ¤Ë¡¢ºÇ¶á¤ÎUnix¸ß´¹¥×¥é¥Ã¥È¥Û¡¼¥à¤Ç¤¢¤ì¤ÐPostgreSQL¤ò²ÔƯ¤µ¤»¤é¤ì¤ë¤Ï¤º¤Ç -¤¹¡£¥ê¥ê¡¼¥¹¤Î»þÅÀ¤Ç¼ÂºÝ¤Ë¥Æ¥¹¥È¤ò¹Ô¤Ê¤Ã¤¿¤³¤È¤ÎÊó¹ð¤¬¤Ê¤µ¤ì¤¿¥×¥é¥Ã¥È¥Û¡¼¥à¤Ë -¤Ä¤¤¤Æ¤Ï¥¤¥ó¥¹¥È¡¼¥ë¼ê°ú½ñ¤ËÎóµó¤·¤Æ¤¢¤ê¤Þ¤¹¡£ - -PostgreSQL ¤Ï¡¢Win2000 SP4, WinXP, ¤½¤·¤Æ¡¢Win2003 ¤Ê¤É Microsoft Windows NT¥Ù -¡¼¥¹¤Î¥ª¥Ú¥ì¡¼¥Æ¥£¥ó¥°¥·¥¹¥Æ¥à¤Ç¡¢¥Í¥¤¥Æ¥£¥Ö¤ËÁö¤ê¤Þ¤¹¡£¤¢¤é¤«¤¸¤á¥Ñ¥Ã¥±¡¼¥¸¤Ë -¤µ¤ì¤¿¥¤¥ó¥¹¥È¡¼¥é¤¬ http://www.postgresql.org/download/windows ¤«¤é¥À¥¦¥ó¥í¡¼ -¥É¤Ç¤­¤Þ¤¹¡£ MSDOS¥Ù¡¼¥¹¤ÎWindows¤Î¥Ð¡¼¥¸¥ç¥ó(Win95, Win98, WinMe)¤Ç¤Ï¡¢Cygwin -¤ò»È¤Ã¤Æ PostgreSQL ¤òÁö¤é¤»¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ - - [ÌõÃí - ÆüËܸì¤Ç¤Î¾ðÊó¤Ï¡¢¼¡¤Î WindowsÈǤ˴ؤ¹¤ëFAQ¤ÎÏÂÌõ¤ò¤´¤é¤ó¤¯¤À¤µ - ¤¤¡Ê¤ä¤ä¸Å¤¤¤Ç¤¹¡Ë¡£ - http://old.postgresql.jp/wg/jpugdoc/FAQ_windows.ja.html - ] - - -¼¡¤Î¥µ¥¤¥È¤Ë Novell Netware 6 ¤Ø¤Î°Ü¿¢ÈǤ⤢¤ê¤Þ¤¹¡£ http:// -developer.novell.com/wiki/index.php/Postgresql ¤Þ¤¿¡¢OS/2 (eComStation) ¥Ð¡¼¥¸ -¥ç¥ó¤Ï¡¢ http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key= -postgreSQL&stype=all&sort=type&dir=%2F¤Ë¤¢¤ê¤Þ¤¹¡£ - - -1.5) PostgreSQL ¤Ï¤É¤³¤«¤éÆþ¼ê¤Ç¤­¤Þ¤¹¤«¡© - -Web¥Ö¥é¥¦¥¶·Ðͳ¤À¤È¡¢ http://www.postgresql.org/ftp/¡¢¤½¤ì¤«¤é¡¢ftp·Ðͳ¤À¤È¡¢ -ftp://ftp.postgresql.org/pub/ ¤ò»È¤¤¤Þ¤¹¡£ - -1.6) ºÇ¿·¤Î¥ê¥ê¡¼¥¹¤Ï¤É¤ì¤Ç¤¹¤«¡© - -PostgreSQL ¤ÎºÇ¿·ÈǤϥС¼¥¸¥ç¥ó 8.3.5 ¤Ç¤¹¡£ - -²æ¡¹¤Ï¡¢1ǯËè¤Ë¥á¥¸¥ã¡¼¥ê¥ê¡¼¥¹¤ò¡¢¿ô¥õ·î¤´¤È¤Î¥Þ¥¤¥Ê¡¼¥ê¥ê¡¼¥¹¤ò¹Ô¤Ê¤¦¤³¤È¤ò·× -²è¤·¤Æ¤¤¤Þ¤¹¡£ - - [ÌõÃí - ¥Ð¡¼¥¸¥ç¥óÈÖ¹æ¤Î x.y.z ¤ÎºÇ½é¤Î x.y ¤¬¥á¥¸¥ã¡¼¥ê¥ê¡¼¥¹¤ÎÈÖ¹æ¤ËÁê - Åö¤·¡¢ºÇ¸å¤Î z ¤¬¥Þ¥¤¥Ê¡¼¥ê¥ê¡¼¥¹¤ÎÈÖ¹æ¤Ë¤Ê¤ê¤Þ¤¹¡£¥á¥¸¥ã¡¼¥ê¥ê¡¼ - ¥¹¤ÎÈֹ椬Ʊ¤¸¤Ç¤¢¤ì¤Ð¡¢¥Ç¡¼¥¿¥Ù¡¼¥¹¡¦¥¯¥é¥¹¥¿¤Ë¸ß´¹À­¤¬¤¢¤ê¤Þ¤¹¡£ - ] - - -1.7) ¥µ¥Ý¡¼¥È¤Ï¤É¤³¤Ç¼õ¤±¤é¤ì¤Þ¤¹¤«¡© - -PostgreSQL ¥³¥ß¥å¥Ë¥Æ¥£¤Ï¿¤¯¤Î¥æ¡¼¥¶¤Î¤¿¤á¤Ë¡¢ÅŻҥ᡼¥ë·Ðͳ¤Î»Ù±ç¤òÄ󶡤·¤Æ¤¤ -¤Þ¤¹¡£ÅŻҥ᡼¥ë¥ê¥¹¥È¤ò¥µ¥Ö¥¹¥¯¥é¥¤¥Ö¤¹¤ë¤¿¤á¤Î¥á¥¤¥ó¤È¤Ê¤ë¥¦¥§¥Ö¥µ¥¤¥È¤Ï -http://www.postgresql.org/community/lists/¤Ç¤¹¡£¤³¤ì¤«¤é¡¢»Ï¤á¤ë¤Î¤Ç¤¢¤ì¤Ð -general ¤Þ¤¿¤Ï¡¢bugs ¤È¤¤¤Ã¤¿¥ê¥¹¥È¤¬¤è¤¤¤Ç¤·¤ç¤¦¡£ - -¥á¥¸¥ã¡¼¤ÊIRC ¥Á¥ã¥ó¥Í¥ë¤Ï¡¢Freenode (irc.freenode.net)¤Î #postgresql ¤È¤¤¤¦¥Á -¥ã¥ó¥Í¥ë¤Ç¤¹¡£UNIX ¥³¥Þ¥ó¥É¤Ç¤Ï¡¢ irc -c '#PostgreSQL' "$USER" irc.freenode.net -¤ò»È¤Ã¤Æ»²²Ã¤Ç¤­¤Þ¤¹¡£Æ±¤¸¥Í¥Ã¥È¥ï¡¼¥¯¤Ë¡¢¥¹¥Ú¥¤¥ó¸ì¤Î¥Á¥ã¥ó¥Í¥ë (# -postgresql-es)¡¢¥Õ¥é¥ó¥¹¸ì¤Î¥Á¥ã¥ó¥Í¥ë (#postgresqlfr)¡¢¥Ö¥é¥¸¥ë¸ì¥Á¥ã¥ó¥Í¥ë (# -postgresql-br) ¤â¤¢¤ê¤Þ¤¹¡£¤Þ¤¿¡¢EFNet¤Ë¤âPostgreSQL¥Á¥ã¥ó¥Í¥ë¤¬¤¢¤ê¤Þ¤¹¡£ - - [ÌõÃí: - 1999ǯ7·î23Æü¡¢ÆüËܥݥ¹¥È¥°¥ì¥¹¥æ¡¼¥¶¡¼²ñ¡¢Î¬¾ÎJPUG¤¬ÀßΩ¤µ¤ì¤Þ¤·¤¿¡£ - JPUG ¤ÏÈó±ÄÍøÁÈ¿¥¤Ç¡¢PostgreSQL¤òÍøÍѤ¹¤ë¿Íã¤ÎÁê¸ß¶¨ÎϤξì¤È¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£ - (2006ǯ ÆÃÄêÈó±ÄÍø³èÆ°(NPO)Ë¡¿ÍÆüËÜPostgreSQL¥æ¡¼¥¶²ñ¤Ë¤Ê¤ê¤Þ¤·¤¿¡£ - Web²ñ°÷¤ÈÀµ²ñ°÷¤Î²ñÈñ¤Ï̵ÎÁ¤Ç¤¹¤¬¡¢¶¨»¿²ñ°÷¤Î²ñÈñ¤È²ñ°÷¤Î¹×¸¥¤Ç - ²ñ¤Ï±¿±Ä¤µ¤ì¤Æ¤¤¤Þ¤¹¡£) - ¾Ü¤·¤¯¤Ï¡¢JPUG ¤ÎWeb ¥µ¥¤¥È: - http://www.postgresql.jp/ - ¤ò¤´¤é¤ó¤¯¤À¤µ¤¤¡£ - - ÆüËܸì¤ÎIRC¥Á¥ã¥ó¥Í¥ë '#PostgreSQL:*.jp' ¤â¸ºß¤·¤Þ¤¹¡£ - ] - - -¾¦ÍÑ¥µ¥Ý¡¼¥È²ñ¼Ò¤Î¥ê¥¹¥È¤Ï http://www.postgresql.org/support/ -professional_support¤Ë¤¢¤ê¤Þ¤¹¡£ - -1.8) ¥Ð¥°¥ì¥Ý¡¼¥È¤Ï¤É¤Î¤è¤¦¤Ëȯ¿®¤·¤Þ¤¹¤«¡© - -http://www.postgresql.org/support/submitbug ¤ÎPostgreSQL ¥Ð¥°¥Õ¥©¡¼¥à¤òˬ¤ì¤Æ¤¯ -¤À¤µ¤¤¡£¥Ð¥°¥ì¥Ý¡¼¥È¤òÄó½Ð¤¹¤ë»ÅÊý¤Ë¤Ä¤¤¤Æ¤Î¼ê°ú¤È»Ø¿Ë¤¬¤¢¤ê¤Þ¤¹¡£ - -¤½¤ì¤ÈƱ»þ¤Ë ftp ¥µ¥¤¥È ftp://ftp.postgresql.org/pub/ ¤Ç¡¢ºÇ¿·¥Ð¡¼¥¸¥ç¥ó¤Î -PostgreSQL ¤òõ¤·¤Æ¤ß¤Æ¤¯¤À¤µ¤¤¡£ - -1.9) ´ûÃΤΥХ°¤ä̤¤À̵¤¤µ¡Ç½¤Ï¤É¤¦¤ä¤Ã¤Æ¸«¤Ä¤±¤Þ¤¹¤«¡© - -PostgreSQL¤Ï³ÈÄ¥¤µ¤ì¤¿SQL:2003¤Î¥µ¥Ö¥»¥Ã¥È¤ò¥µ¥Ý¡¼¥È¤·¤Þ¤¹¡£²æ¡¹¤Î¥Ú¡¼¥¸¤Î TODO -¥ê¥¹¥È¤Ë¡¢´ûÃΤΥХ°¤ä·çÍǽ¤ä¾­Íè·×²è¤Ë¤Ä¤¤¤Æ¤Îµ­½Ò¤¬¤¢¤ê¤Þ¤¹¡£ - -ÆÃħ¤ÎÍ×µá¤ÏÉáÄ̼¡¤Î¤¤¤º¤ì¤«¤Î²òÅú¤ÎÃæ¤Ë¤¢¤ê¤Þ¤¹¡§ - - ¡¦ ´û¤Ë¤³¤³¤Ë¤¢¤ëµ¡Ç½¤Ï¡¢ TODO ¥ê¥¹¥È¤Ç¤¹ - ¡¦ ¼¡¤Î¤è¤¦¤Êµ¡Ç½¤ÏÌÜÏÀ¤Þ¤ì¤Æ¤¤¤Þ¤»¤ó¡£¤½¤ì¤Ï¡§ - ¢¢ SQLµ¬³Ê¤Ë½à¤º¤ë´û¸¤Îµ¡Ç½¤È½ÅÊ£¤¹¤ë¤â¤Î - ¢¢ ¥³¡¼¥É¤ÎÊ£»¨À­¤Ð¤«¤ê¤ò¹â¤á¤Æ¡¢ÆÀ¤ë¤â¤Î¤¬¾¯¤Ê¤¤µ¡Ç½ - ¢¢ °ÂÁ´À­¤¬³Î¤á¤é¤ì¤Ê¤¤µ¡Ç½ - ¡¦ ¿·¤·¤¤µ¡Ç½¤Ï¡¢ TODO ¤Î¥ê¥¹¥È¤Ë²Ã¤¨¤é¤ì¤é¤ì¤Þ¤¹¡£ - -²æ¡¹¤Ï¡¢PostgreSQL ¤Ë´Ø¤·¤Æ¡¢ÅŻҥ᡼¥ë¤ÇľÀÜÂбþ¤·¤Æ TODO ¥ê¥¹¥È¤òºÇ¿·¤Ë¹¹¿·¤· -¤Æ¤æ¤¯¤Û¤¦¤¬¤è¤ê¸ú²ÌŪ¤Ç¤¢¤ë¤³¤È¤òÃΤäƤ¤¤Þ¤¹¤Î¤Ç¡¢¥Ð¥°ÄÉÀ×¥·¥¹¥Æ¥à¤Ï»È¤¤¤Þ¤» -¤ó¡£¸½¼Â¤Ë¡¢¤³¤Î¥½¥Õ¥È¥¦¥§¥¢¤ÎÃæ¤Ç¥Ð¥°¤Ï¤½¤ì¤Û¤ÉŤ¯¤Ï¤¤Â³¤±¤Þ¤»¤ó¤·¡¢Â¿¤¯¤Î¥æ -¡¼¥¶¤Ë±Æ¶Á¤¹¤ë¥Ð¥°¤ÏÁáµÞ¤Ë½¤Àµ¤µ¤ì¤Þ¤¹¡£PostgreSQL¤Î¥ê¥ê¡¼¥¹¤Ç¡¢¤¹¤Ù¤Æ¤ÎÊѹ¹ÅÀ -¡¢²þÎÉÅÀ¡¢¤½¤·¤Æ¡¢½¤ÀµÅÀ¤òÃΤꤿ¤±¤ì¤Ð¡¢ CVS ¤Î¥í¥°¥á¥Ã¥»¡¼¥¸¤ò¸«¤Æ¤¯¤À¤µ¤¤¡£¥ê -¥ê¡¼¥¹¥Î¡¼¥È¤Ë¤µ¤¨¡¢¤³¤Î¥½¥Õ¥È¥¦¥§¥¢¤Ë²Ã¤¨¤é¤ì¤¿¤¹¤Ù¤Æ¤ÎÊѹ¹ÅÀ¤ÏÌÖÍ夵¤ì¤Æ¤¤¤Þ -¤»¤ó¡£ - -1.10) ¤É¤Î¤è¤¦¤Êʸ½ñ¤¬¤¢¤ê¤Þ¤¹¤«¡© - -ÇÛÉÕ¤ÎÃæ¤Ë¡¢¤¤¤¯¤Ä¤«¤Î¥Þ¥Ë¥å¥¢¥ë¤È¥ª¥ó¥é¥¤¥ó¡¦¥Þ¥Ë¥å¥¢¥ë(¥Þ¥Ë¥å¥¢¥ë¡¦¥Ú¡¼¥¸)¤ª -¤è¤Ó¤¤¤¯¤Ä¤«¤Î¾®¤µ¤Ê¥Æ¥¹¥ÈÎãÂ꤬´Þ¤Þ¤ì¤Þ¤¹¡£ /doc¥Ç¥£¥ì¥¯¥È¥ê¤ò¤´¤é¤ó¤¯¤À¤µ¤¤¡£ -¤Þ¤¿¡¢¥Þ¥Ë¥å¥¢¥ë¤Ï¡¢ http://www.postgresql.org/docs/¤Ç¥ª¥ó¥é¥¤¥ó¤Ç¤â±ÜÍ÷¤Ç¤­¤Þ -¤¹¡£ - - [ÌõÃí: - JPUG ʸ½ñ¡¦½ñÀÒ´ØϢʬ²Ê²ñ¤ÇËÝÌõ¤µ¤ì¤¿¥Þ¥Ë¥å¥¢¥ë¤â¤¢¤ê¤Þ¤¹¡£ - - http://www.postgresql.jp/document/pg830doc/ - ¥¤¥ó¥×¥ì¥¹¤«¤é¡¢ - - PostgreSQL¥ª¥Õ¥£¥·¥ã¥ë¥Þ¥Ë¥å¥¢¥ë¤È¤·¤Æ½ÐÈǤµ¤ì¤Æ¤¤¤Þ¤¹¡£ - ] - - -¥ª¥ó¥é¥¤¥ó¤Ç»²¾È¤Ç¤­¤ë PostgreSQL ¤ÎËܤâ2ºý¤¢¤ê¤Þ¤¹¡£ http://www.postgresql.org -/docs/books/awbook.html - - [ÌõÃí: - ¤³¤ÎËܤϡ¢JPUG¡ÖPostgreSQL BookËÝÌõʬ²Ê²ñ¡× - ¤ÇËÝÌõ¤µ¤ì¡¢¥Ô¥¢¥½¥ó¤«¤é - ¡Ö¤Ï¤¸¤á¤Æ¤ÎPostgreSQL¡×¤È¤·¤Æ½ÐÈǤµ¤ì¤Æ¤¤¤Þ¤¹¡£ - ] - - -¤ª¤è¤Ó¡¢ http://www.commandprompt.com/ppbook/¤Ç¤¹¡£ - - [ÌõÃí: - Ë®Ìõ¤Ï¡Ö¼ÂÁ© PostgreSQL¡× - ¤¬¥ª¥é¥¤¥ê¡¼¤«¤é½ÐÈǤµ¤ì¤Æ¤¤¤Þ¤¹¡£ - ] - - -¹ØÆþ²Äǽ¤Ê½ñÀÒ¤ÎÌÜÏ¿¤Ï¡¢http://www.postgresql.org/docs/books/ ¤Ë¤¢¤ê¤Þ¤¹¡£ -PostgreSQL µ»½Ñ¾ðÊóµ­»ö¤â¡¢http://wiki.postgresql.org/wiki/ -Community_Generated_Articles%2C_Guides%2C_and_Documentation ¤Ë¤¢¤ê¤Þ¤¹¡£ - - [ÌõÃí: - ÆüËܸì¤Î½ñÀÒÅù¤Ë¤Ä¤¤¤Æ¤Ï¡¢ÆüËÜPostgreSQL¥æ¡¼¥¶²ñ¤Î¡¢http://www.postgresql.jp/PostgreSQL/references.html - ¤â¤´¤é¤ó¤¯¤À¤µ¤¤¡£ - ] - - -¥³¥Þ¥ó¥É¥é¥¤¥ó¤Î¥¯¥é¥¤¥¢¥ó¥È¥×¥í¥°¥é¥àpsql ¤Ë¤â¡¢·¿¡¢±é»»»Ò¡¢´Ø¿ô¡¢½¸Ì󡢤½¤Î¾ -¤Î¾ðÊó¤òÄ´¤Ù¤ë¤¿¤á¤Ë¡¢ÁÇÀ²¤é¤·¤¤ \d ¥³¥Þ¥ó¥É¤¬¤¤¤¯¤Ä¤«¤¢¤ê¤Þ¤¹¡£ \? ¤òÆþÎϤ¹¤ë -¤ÈÍøÍѲÄǽ¤Ê¥³¥Þ¥ó¥É¤¬É½¼¨¤µ¤ì¤Þ¤¹¡£ - -²æ¡¹¤Î Web ¥µ¥¤¥È¤Ë¤Ï¡¢¤µ¤é¤ËÂô»³¤Îʸ½ñ¤¬¤¢¤ê¤Þ¤¹¡£ - - [ÌõÃí: - 2008ǯ11·î18Æü¡¢PostgreSQLÉáµÚ¤Î¤¿¤á¤Ë°ìÈ̸þ¤±¤Î¾ðÊó¤ò°·¤¦ - ¡ÖLet's Postgres¡×¤È¤¤¤¦¥Ý¡¼¥¿¥ë¥µ¥¤¥È¤¬¥ª¡¼¥×¥ó¤·¤Þ¤·¤¿¡£http://lets.postgresql.jp/ - ] - - -1.11) SQL ¤Ï¤É¤¦¤¹¤ì¤Ð³Ø¤Ù¤Þ¤¹¤«¡© - -¤Þ¤º¡¢¾åµ­¤Ç½Ò¤Ù¤¿ PostgreSQL ¤Ë¤Ä¤¤¤Æ¤ÎËܤòÆɤळ¤È¤ò¸¡Æ¤¤·¤Æ¤¯¤À¤µ¤¤¡£ The -Practical SQL Handbook, Bowman Judith S. et al., Addison-Wesley ¤â¿¤¯¤Î¥æ¡¼¥¶ -¤Ë¹¥É¾¤Ç¤¹¡£¤Û¤«¤Ç¤Ï¡¢The Complete Reference SQL, Groff et al., McGraw-Hill ¤â -¹¥É¾¤Ç¤¹¡£ - -ÁÇÀ²¤é¤·¤¤¼ê°ú½ñ¤Ï¡¢ - -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 -http://sqlzoo.net ¤Ë¤¢¤ê¤Þ¤¹¡£ - - [ÌõÃí: - ÆüËÜPostgreSQL¥æ¡¼¥¶²ñ¤ÎÆüËܸì¤Î»²¹Íʸ¸¥¤Î¾Ò²ð¥Ú¡¼¥¸ - -http://www.postgresql.jp/PostgreSQL/references.html - ¤¬¤¢¤ê¤Þ¤¹¡£ - ËÙÅÄÎѱѻá¤Î¡ÖPostgreSQLÆüËܸì¥Þ¥Ë¥å¥¢¥ë¡× - http://www.net-newbie.com/ - ¤Ç¤Ï¥ª¥ó¥é¥¤¥ó¥Þ¥Ë¥å¥¢¥ë¤Î¸¡º÷¤¬¤Ç¤­¤Þ¤¹¡£ - ´Ý»³ÉÔÆóÉ×»á¤ÎUNIX ¥Ç¡¼¥¿¥Ù¡¼¥¹ÆþÌç - http://www.wakhok.ac.jp/DB/DB.html - ¤â¥ª¥ó¥é¥¤¥ó¤ÇÆɤळ¤È¤¬¤Ç¤­¤Þ¤¹¡£ - Nikkei BP IT Pro ¤Ë¤¢¤ëÀаæãÉ×»á¤Î PostgreSQL ¥¦¥©¥Ã¥Á - ¤Ç¤ÏËè²ó¿·¤·¤¤¾ðÊó¤ò¤È¤ê¤¢¤²¤Æ¤¤¤Þ¤¹¡£ - ] - - -1.12) ¥Ñ¥Ã¥Á¤òÄ󶡤·¤¿¤ê¡¢³«È¯¥Á¡¼¥à»²²Ã¤¹¤ë¤Ë¤Ï¤É¤¦¤¹¤ì¤Ð¤è¤¤¤Ç¤¹¤«¡© - -¡Ê³«È¯¼Ô¸þ¤±¤Î¡ËDeveloper's FAQ¤ò¤´¤é¤ó¤¯¤À¤µ¤¤¡£ - -1.13) ¾¤ÎDBMS¤ÈÈæ¤ÙPostgreSQL¤Ï¤É¤¦¤Ê¤Î¤Ç¤¹¤«¡© PostgreSQL¤òÁȤ߹þ¤ß¤Ë»È¤¨¤Þ¤¹ -¤«¡© - -¥½¥Õ¥È¥¦¥§¥¢¤òɾ²Á¤¹¤ëÊýË¡¤Ë¤Ï¤¤¤¯¤Ä¤«¤¢¤ê¤Þ¤¹¡£µ¡Ç½¤ÈÀ­Ç½¤È¿®ÍêÀ­¤È¥µ¥Ý¡¼¥È¤È -²Á³Ê¤Ç¤¹¡£ - -µ¡Ç½(Features) - PostgreSQL¤Ï¡¢¥È¥é¥ó¥¶¥¯¥·¥ç¥ó¡¢¥µ¥Ö¥¯¥¨¥ê¡¢¥È¥ê¥¬¡¼¡¢¥Ó¥å¡¼¡¢³°Éô¥­¡¼À°¹ç - À­»²¾È¡¢¤ª¤è¤Ó¡¢ÀöÎý¤µ¤ì¤¿¥í¥Ã¥¯µ¡¹½¤Ê¤É¡¢Â絬ÌϾ¦ÍÑ DBMS¤¬»ý¤Äµ¡Ç½¤ò¤Û¤È¤ó - ¤É»ý¤Ã¤Æ¤¤¤Þ¤¹¡£¤µ¤é¤Ë PostgreSQL¤Ï¡¢¥æ¡¼¥¶ÄêµÁ·¿¡¢·Ñ¾µ¡¢¥ë¡¼¥ë¡¢¤½¤ì¤«¤é¡¢ - ¥í¥Ã¥¯¶¥¹ç¤ò½Ì¾®¤¹¤ë¥Þ¥ë¥Á¥Ð¡¼¥¸¥ç¥óƱ»þÀ­À©¸æ¤Ê¤É¡¢¾¦ÍÑDBMS¤â»ý¤Á¹ç¤ï¤»¤Ê - ¤¤¤è¤¦¤Êµ¡Ç½¤ò¤¤¤¯¤Ä¤«»ý¤Á¹ç¤ï¤»¤Æ¤¤¤Þ¤¹¡£ -À­Ç½(Performance) - PostgreSQL¤Ï¾¤Î¾¦ÍѤ¢¤ë¤¤¤Ï¥ª¡¼¥×¥ó¥½¡¼¥¹¤Î¥Ç¡¼¥¿¥Ù¡¼¥¹¤È¸ß³Ñ¤ÎÀ­Ç½¤â»ý¤Á - ¤Þ¤¹¡£¤¢¤ëÌ̤ǤϤè¤êÁᤫ¤Ã¤¿¤ê¡¢¤Û¤«¤ÎÌ̤ǤϤè¤êÃÙ¤«¤Ã¤¿¤ê¤·¤Þ¤¹¡£Â¾¤Î¥Ç¡¼ - ¥¿¥Ù¡¼¥¹¤ËÈæ¤Ù¤¿À­Ç½¤Ï¡¢¤Õ¤Ä¤¦ +/-10% ¤¯¤é¤¤¤Ç¤·¤ç¤¦¡£ -¿®ÍêÀ­(Reliability) - ²æ¡¹¤Ï¡¢DBMS¤Î¿®ÍêÀ­¤¬¹â¤¯¤Ê¤¯¤Æ¤Ï¤½¤Î²ÁÃͤ¬Ìµ¤¤¤³¤È¤òÍý²ò¤·¤Æ¤Þ¤¹¡£½½Ê¬¥Æ - ¥¹¥È¤·¤Æ¡¢°ÂÄꤷ¤¿¥³¡¼¥É¤ò¥Ð¥°¤òºÇ¾®¤Ë¤·¤Æ¤«¤é¥ê¥ê¡¼¥¹¤¹¤ë¤è¤¦¤ËÅؤá¤Æ¤Þ¤¹ - ¡£¤½¤ì¤¾¤ì¤Î¥ê¥ê¡¼¥¹¤Ï¾¯¤Ê¤¯¤È¤â1 ¥«·î°Ê¾å¤Î¥Ù¡¼¥¿¡¦¥Æ¥¹¥È¤ò¹Ô¤Ê¤¤¡¢¤³¤ì¤Þ - ¤Ç¤Î¥ê¥ê¡¼¥¹¤ÎÍúÎò¤¬¡¢À½ÉÊÈǤȤ·¤Æ°ÂÄꤷ¤¿·ø¸Ç¤Ê¥ê¥ê¡¼¥¹¤Ç¤¢¤ë¤³¤È¤òʪ¸ì¤Ã - ¤Æ¤¤¤Þ¤¹¡£¤³¤ÎʬÌî¤Ç¤Ï¡¢Â¾¤Î¥Ç¡¼¥¿¥Ù¡¼¥¹¤ÈÈæ¤Ù¤Æ¤â½¿§¤¬¤Ê¤¤¤³¤È¤Ë¼«¿®¤ò»ý - ¤Ã¤Æ¤¤¤Þ¤¹¡£ -¥µ¥Ý¡¼¥È(Support) - ²æ¡¹¤Î¥á¡¼¥ê¥ó¥°¥ê¥¹¥È¤Ï¡¢Áø¶ø¤¹¤ë¤¤¤«¤Ê¤ëÌäÂê¤Ë¤Ä¤¤¤Æ¤â²ò·è¤Ø¤Î¼ê½õ¤±¤ò¤· - ¤Æ¤¯¤ì¤ë¡¢³«È¯¼Ô¤ä¥æ¡¼¥¶¤ÎÂ礭¤Ê½¸¤Þ¤ê¤Ø¤ÎÀÜÅÀ¤òÄ󶡤·¤Æ¤¤¤Þ¤¹¡£²æ¡¹¤ÏÌäÂê - ¤Î²ò·è¤òÊݾڤ¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¤¬¡¢¾¦Íѥǡ¼¥¿¥Ù¡¼¥¹¤Ç¤¢¤Ã¤Æ¤â¾ï¤Ë²ò·è¤µ¤ì - ¤ë¤ï¤±¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£³«È¯¼Ô¤ä¡¢¥æ¡¼¥¶¡¦¥³¥ß¥å¥Ë¥Æ¥£¡¢¥Þ¥Ë¥å¥¢¥ëÎà¡¢¤½¤ì¤Ë - ¡¢¥½¡¼¥¹¥³¡¼¥É¤Ê¤É¤ØľÀÜ¥¢¥¯¥»¥¹¤Ç¤­¤ë¤³¤È¤Ë¤è¤Ã¤Æ¡¢PostgreSQL¤Î¥µ¥Ý¡¼¥È¤Ï - ¡¢Â¾¤ÎDBMS ¥µ¥Ý¡¼¥È¤è¤ê¤âÍ¥¤ì¤¿¤â¤Î¤È¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£¸æÍ×˾¤ËÅú¤¨¤Æ¡¢»öÊÁËè¤Î - ¾¦ÍÑ¥µ¥Ý¡¼¥È¤Ê¤É¤â¤¢¤ê¤Þ¤¹¡ÊFAQ1.7Àá¤ò¤´¤é¤ó¤¯¤À¤µ¤¤¡Ë¡£ -²Á³Ê(Price) - PostgreSQL¤ÎÍøÍѤϡ¢¾¦ÍѤǤâÈó¾¦ÍѤǤ⡢¤¹¤Ù¤Æ̵ÎÁ¤Ç¤¹¡£¾åµ­¤Ë¼¨¤·¤Æ¤¢¤ëBSD - ¥¹¥¿¥¤¥ë¤Î»ÈÍѵöÂú¤Ë³°¤ì¤Ê¤¤¸Â¤ê¡¢PostgreSQL¤Î¥³¡¼¥É¤òÀ©¸Â̵¤·¤Ç¾¦ÉʤËÁÈ¤ß - ¹þ¤à¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ - -PostgreSQL¤Ï¥¯¥é¥¤¥¢¥ó¥È¡¿¥µ¡¼¥Ð¡¦¥¢¡¼¥­¥Æ¥¯¥Á¥ã¤ÇÀ߷פµ¤ì¤Æ¤¤¤Æ¡¢¥¯¥é¥¤¥¢¥ó¥È -¤È¥µ¡¼¥Ð¤ª¤è¤Ó¤½¤ì¤òÊä½õ¤¹¤ë¤¤¤í¤¤¤í¤Ê¥×¥í¥»¥¹¤¬ÊÌ¡¹¤ËÁö¤ë¤³¤È¤¬Í׵ᤵ¤ì¤Þ¤¹¡£ -¿¤¯¤ÎÁȤ߹þ¤ß¥¢¡¼¥­¥Æ¥¯¥Á¥ã¤Ï¤³¤Î¤è¤¦¤ÊÍ×µá¤ò¥µ¥Ý¡¼¥È²Äǽ¤Ç¤¹¡£¤·¤«¤·¡¢¤ª»È¤¤ -¤Ë¤Ê¤Ã¤Æ¤¤¤ëÁȤ߹þ¤ß¥¢¡¼¥­¥Æ¥¯¥Á¥ã¤Ë¤è¤Ã¤Æ¤Ï¡¢¥Ç¡¼¥¿¥Ù¡¼¥¹¥µ¡¼¥Ð¤¬¥¢¥×¥ê¥±¡¼¥· -¥ç¥ó¡¦¥×¥í¥»¥¹¤ÎÃæ¤ÇÁö¤ë¤³¤È¤òÍ׵ᤵ¤ì¤ë¾ì¹ç¤¬¤¢¤ê¡¢Postgres¤ò»È¤¦¤³¤È¤Ï¤Ç¤­¤Ê -¤¤¤Î¤Ç¡¢·ÚÎ̤Υǡ¼¥¿¥Ù¡¼¥¹¥½¥ê¥å¡¼¥·¥ç¥ó¤òÁªÂò¤¹¤Ù¤­¤Ç¤¹¡£ - -1.14) PostgreSQL¤Ï¹ñËè¤ÎºÇ¿·¤Î²Æ»þ´Ö¤ÎÊѹ¹¤ò°·¤¤¤Þ¤¹¤«¡© - -¹ç½£¹ñ¤Î²Æ»þ´Ö¤ÎÊѹ¹¤Ï¡¢PostgreSQL¤Î¥ê¥ê¡¼¥¹8.0.4°Ê¹ß[4+]¤È¡¢¤½¤Î¸å¤Î¥á¥¸¥ã¡¼¥ê -¥ê¡¼¥¹¡¢¤¿¤È¤¨¤Ð 8.1 ¤Ë¤Ï´Þ¤Þ¤ì¤Æ¤¤¤Þ¤¹¡£¥«¥Ê¥À¤È¥ª¡¼À¾Éô¥¹¥È¥é¥ê¥¢¤ÎÊѹ¹¤Ï¡¢ -8.0.[10+], 8.1.[6+] ¤ª¤è¤Ó¡¢¤½¤Î¸å¤Î¥á¥¸¥ã¡¼¥ê¥ê¡¼¥¹¤Î¤¹¤Ù¤Æ¤Ë´Þ¤Þ¤ì¤Þ¤¹¡£8.0¤è -¤êÁ°¤ÎPosrgreSQL¤Ç¤Ï¥ª¥Ú¥ì¡¼¥Æ¥£¥ó¥°¥·¥¹¥Æ¥à¤Î¥¿¥¤¥à¥¾¡¼¥ó¥Ç¡¼¥¿¥Ù¡¼¥¹¤ò²Æ»þ´Ö -¾ðÊó¤Î¤¿¤á¤Ë»È¤Ã¤Æ¤¤¤Þ¤¹¡£ - -¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬ - -1.15) PostgreSQL¤Î¥á¡¼¥ê¥ó¥°¥ê¥¹¥È¤Î¹ØÆɤò¤ä¤á¤ë¤Ë¤Ï¤É¤¦¤¹¤ì¤Ð¤è¤¤¤Ç¤¹¤«¡©¤Þ¤¿ -¡¢ÅŻҥ᡼¥ë¤ò½ÅÊ£¤·¤Æ¼õ¤±¼è¤é¤Ê¤¤¤è¤¦¤Ë¤¹¤ë¤Ë¤Ï¤É¤¦¤·¤Þ¤¹¤«¡© - -PostgreSQL¤ÎMajordomo ¥Ú¡¼¥¸¤«¤é¡¢PostgreSQL¤Ë´Ø¤¹¤ëÊ£¿ô¤Î¥á¡¼¥ê¥ó¥°¥ê¥¹¥È¤Î¹Ø -Æɤγ«»Ï¤ÈÃæ»ß¤¬¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£¡Ê¥í¥°¥¤¥ó¤¹¤ë¤¿¤á¤Ë¤ÏMajaordomo¤«¤é -Á÷¤é¤ì¤ë¸æËܿͤΥѥ¹¥ï¡¼¥É¤¬É¬Íפˤʤê¤Þ¤¹¡£¡Ë - -PostgreSQLno¤¹¤Ù¤Æ¤Î¥á¡¼¥ê¥ó¥°¥ê¥¹¥È¤Ç¤Ï¡¢ÊÖ¿®¤Ï¥á¡¼¥ê¥ó¥°¥ê¥¹¥È¤È¤«¤Ä¸µ¤Î¥á¡¼ -¥ë¤ÎÅê¹Æ¼Ô¤ØÁ÷¤é¤ì¤ë¤è¤¦¤Ë¹½À®¤·¤Æ¤¢¤ê¤Þ¤¹¡£¤³¤ì¤Ë¤êÍøÍѼԤϡ¢¤â¤Ã¤È¤â¿×®¤Ë¥á -¡¼¥ë¤Ø¤ÎÊÖ¿®¤ò¼õ¤±¤é¤ì¤ë¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£´û¤ËľÀܼõ¤±¼è¤Ã¤Æ¤¤¤ë¥á¡¼¥ë¤ò¡¢¥ê -¥¹¥È¤«¤é½ÅÊ£¤·¤Æ¼õ¤±¼è¤ê¤¿¤¯¤Ê¤¤¾ì¹ç¤Ï¡¢Majordomo ¤ÎChange Settings¥Ú¡¼¥¸¤«¤é¡¢ -eliminatecc¤ò¥Á¥§¥Ã¥¯¤·¤Þ¤¹¡£¤Þ¤¿¡¢selfcopy¤Î¥Á¥§¥Ã¥¯¤ò¤Ï¤º¤¹¤³¤È¤Ç¡¢¼«Ê¬¤ÎÁ÷¤Ã -¤¿¥á¡¼¥ë¤Î¥³¥Ô¡¼¤ò¼õ¤±¼è¤é¤Ê¤¤¤è¤¦¤Ë¤â¤Ç¤­¤Þ¤¹¡£ - - ¥æ¡¼¥¶¡¦¥¯¥é¥¤¥¢¥ó¥È¤Î¼ÁÌä - -2.1) PostgreSQL ¤Ë¤Ï¤É¤ó¤Ê¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤¬»È¤¨¤Þ¤¹¤«¡© - -PostgreSQL ¤Î¥¤¥ó¥¹¥È¡¼¥ë¤Ë´Þ¤Þ¤ì¤ëʪ¤ÏC¤ÈÁȹþ¤ß C¤Î¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤À¤±¤Ç¤¹¡£ -¤½¤Î¾¤Î¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ÏÆÈΩ¤·¤¿¥×¥í¥¸¥§¥¯¥È¤Ç¡¢ÊÌ¡¹¤Ë¥À¥¦¥ó¥í¡¼¥É¤µ¤ì¤Þ¤¹¡£ -ʬ¤«¤ì¤ë¤³¤È¤Ç¡¢¤½¤ì¤¾¤ì¤Î³«È¯¥Á¡¼¥à¤¬Æȼ«¤Î¥ê¥ê¡¼¥¹¥¹¥±¥¸¥å¡¼¥ë¤ò»ý¤Ä¤³¤È¤¬µö -¤µ¤ì¤Þ¤¹¡£ - -PHP ¤Î¤è¤¦¤Ê¤¤¤¯¤Ä¤«¤Î¥×¥í¥°¥é¥ß¥ó¥°¸À¸ì¤Ï¡¢ PostgreSQL¤Î¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ò´Þ¤ó -¤Ç¤¤¤Þ¤¹¡£Perl, TCL, Python, ¤½¤·¤Æ¡¢¤½¤Î¤Û¤«¤ÎÍøÍѲÄǽ¤Ê¸À¸ì¤Î¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹ -¤Ï¡¢http://pgfoundry.org ¤Î Drivers/Interfaces ¤ÎÀá¤ÎÃæ¤È¥¤¥ó¥¿¡¼¥Í¥Ã¥È¤Î¸¡º÷¤Ç -¤ß¤Ä¤±¤é¤ì¤Þ¤¹¡£ - -2.2) PostgreSQL ¤ò Web ¥Ú¡¼¥¸¤ÈÏ¢·È¤µ¤»¤ë¤Ë¤Ï¤É¤ó¤Ê¥Ä¡¼¥ë¤¬¤¢¤ê¤Þ¤¹¤«¡© - -¥Ç¡¼¥¿¥Ù¡¼¥¹¤ò΢¤Ë»ý¤Ä Web ¥Ú¡¼¥¸¤Ë¤Ä¤¤¤Æ¤ÎÁÇÀ²¤é¤·¤¤¾Ò²ð¤¬¡¢ -http://www.webreview.com¤Ë¤¢¤ê¤Þ¤¹¡£ - -Web ¤Ø¤Î³ÈÄ¥¤Î¤¿¤á¤Ë¤Ï¡¢PHP(http://www.php.net/) ¤¬Âî±Û¤·¤¿¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤È¤Ê -¤Ã¤Æ¤¤¤Þ¤¹¡£ - - [ÌõÃí: - PHP¤Ë´Ø¤¹¤ëÆüËܸì¤Î¾ðÊó¤Ï¡¢2000ǯ4·î19Æü¤Ëȯ­¤·¤¿ÆüËÜPHP¥æ¡¼¥¶²ñ¤Î¥µ¥¤¥È - http://www.php.gr.jp/ - ¤¢¤ë¤¤¤Ï¡¢×¢Àî Îव¤ó¤Î¥µ¥¤¥È - http://www.geocities.jp/rui_hirokawa/php/ - ¤Ë¤«¤Ê¤ê¤Þ¤È¤á¤é¤ì¤Æ¤¤¤Þ¤¹¡£ - ] - - -½èÍý¤¬Ê£»¨¤Ê¾ì¹ç¡¢Â¿¤¯¤Î¿Í¤Ï Perl ¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤È CGI.pm ¤« mod_perl ¤ò»È¤¤ -¤Þ¤¹¡£ - -2.3) PostgreSQL ¤Ë¥°¥é¥Õ¥£¥«¥ë¡¦¥æ¡¼¥¶¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Ï¤¢¤ê¤Þ¤¹¤«¡© - -¾¦ÍѤȥª¡¼¥×¥ó¥½¡¼¥¹³«È¯¼Ô¤Ë¤è¤ë¤â¤ÎξÊý¤Ç¡¢PostgreSQL¤Ë¤Ï¿¤¯¤ÎGUI¥Ä¡¼¥ë¤¬ÍøÍÑ -²Äǽ¤Ç¡¢¾ÜºÙ¤Ê¥ê¥¹¥È¤Ï¡¢ PostgreSQL GUI ¥Ä¡¼¥ë¤Ë¤Ä¤¤¤Æ¤Î¥³¥ß¥å¥Ë¥Æ¥£¥¬¥¤¥É¤Ë¤Æ -¤´¤é¤ó¤¯¤À¤µ¤¤¡£ - - [ÌõÃí: - pgAdmin3 ¤ÏPostgreSQLɸ½àGUI´ÉÍý¥Ä¡¼¥ë¤Ç¡¢WindowsÈÇ(PostgreSQL - for Windows) ¤ËƱº­¤µ¤ì¤Æ¤¤¤Þ¤¹¡£¾Ü¤·¤¤¾ðÊó¤Ï¡¢ - http://www.pgadmin.org/¤Ë¤¢¤ê¤Þ¤¹¡£ - ] - - -¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬ - - ´ÉÍý¾å¤Î¼ÁÌä - -3.1) ¤É¤Î¤è¤¦¤Ë¤¹¤ì¤Ð /usr/local/pgsql °Ê³°¤Î¾ì½ê¤Ë¥¤¥ó¥¹¥È¡¼¥ë¤Ç¤­¤Þ¤¹¤«¡© - -´Êñ¤ÊÊýË¡¤Ï¡¢ configure ¤òÁö¤é¤»¤ë¤È¤­¤Ë --prefix ¥ª¥×¥·¥ç¥ó¤ò»ØÄꤹ¤ë¤³¤È¤Ç¤¹ -¡£ - -3.2) ¾¤Î¥Û¥¹¥È¤«¤é¤ÎÀܳ¤Ï¤É¤Î¤è¤¦¤ËÀ©¸æ¤·¤Þ¤¹¤«¡© - -´ûÄêÃͤǤϡ¢PostgreSQL ¤Ï Unix ¥É¥á¥¤¥ó¥½¥±¥Ã¥È¡¢¤Þ¤¿¤Ï¡¢TCP/IPÀܳ¤Î¥í¡¼¥«¥ë¥Þ -¥·¥ó¤«¤é¤ÎÀܳ¤·¤«µö¤·¤Þ¤»¤ó¡£postgresql.conf ¤ÎÃæ¤Î listen_addresses ¤ò½¤Àµ¤· -¡¢¤«¤Ä¡¢$PGDATA/pg_hba.conf ¥Õ¥¡¥¤¥ë¤òŬÀڤ˾¤·¡¢¥Ç¡¼¥¿¥Ù¡¼¥¹¥µ¡¼¥Ð¤òºÆµ¯Æ°¤· -¤Æ¡¢¥Û¥¹¥È¥Ù¡¼¥¹¤Îǧ¾Ú¤òÍ­¸ú¤Ë¤·¤Ê¤¤¤«¤®¤ê¤Ï¡¢Â¾¤Î¥Þ¥·¥ó¤«¤é¤ÏÀܳ¤Ç¤­¤Ê¤¤¤Ç¤· -¤ç¤¦¡£ - -3.3) ¤è¤êÎɤ¤À­Ç½¤òÆÀ¤ë¤¿¤á¤Ë¤Ï¡¢¥Ç¡¼¥¿¥Ù¡¼¥¹¡¦¥¨¥ó¥¸¥ó¤ò¤É¤Î¤è¤¦¤ËÄ´À°¤·¤Þ¤¹¤« -¡© - -À­Ç½²þÁ±¤Î²ÄǽÀ­¤Î¤¢¤ê¤½¤¦¤Ê¼ç¤ÊÎΰ褬3¤Ä¤¢¤ê¤Þ¤¹¡§ - -¥¯¥¨¥ê¤ÎÊѹ¹ - ¥¯¥¨¥ê¤ò½¤Àµ¤·¤Æ¤è¤êÎɤ¤À­Ç½¤òÆÀ¤ë¤³¤È¤ò´Þ¤ß¤Þ¤¹¡§ - ¢¢ ¼°¤ª¤è¤ÓÉôʬ¥¤¥ó¥Ç¥Ã¥¯¥¹¤ò´Þ¤à¡¢¥¤¥ó¥Ç¥Ã¥¯¥¹¤òºîÀ® - ¢¢ Ê£¿ô¤ÎINSERT¤Î¤«¤ï¤ê¤ËCOPY¤ò»ÈÍÑ - ¢¢ Ê£¿ô¤Îʸ¤ò¥°¥ë¡¼¥×²½¤·¡¢1¤Ä¤Î¥È¥é¥ó¥¶¥¯¥·¥ç¥ó¤Ë¤·¤Æ¥³¥ß¥Ã¥È¤Î¥ª¡¼¥Ð¥Ø¥Ã - ¥É¤òºï¸º - ¢¢ ¥¤¥ó¥Ç¥Ã¥¯¥¹¤«¤é¤«¤éÂô»³¤Î¥í¥¦¤ò¼è¤ê½Ð¤¹¤È¤­¤ÏCLUSTER¤ò»ÈÍÑ - ¢¢ ¥¯¥¨¥ê¤Î½ÐÎϤΥµ¥Ö¥»¥Ã¥È¤òÊÖ¤¹¤¿¤á¤ËLIMIT¤ò»ÈÍÑ - ¢¢ ½àÈ÷¤µ¤ì¤Æ¤¤¤ë¥¯¥¨¥ê¤ò»ÈÍÑ - ¢¢ ¥ª¥×¥Æ¥£¥Þ¥¤¥¶¤ÎÀµ³Î¤ÊÅý·×¤ò°Ý»ý¤¹¤ë¤¿¤á¤ËANALYZE¤ò»ÈÍÑ - ¢¢ VACUUM ¤Þ¤¿¤Ï pg_autovacuum ¤Î¾ïÍÑ - ¢¢ Â礭¤Ê¥Ç¡¼¥¿Êѹ¹¤Î¤¢¤ë¤È¤­¤Ï¥¤¥ó¥Ç¥Ã¥¯¥¹¤òºï½ü - - -¥µ¡¼¥Ð¹½À® - postgresql.conf¤ÎÀßÄê¤Î¤¤¤¯¤Ä¤«¤ÏÀ­Ç½¤Ë±Æ¶Á¤·¤Þ¤¹¡£¾Ü¤·¤¯¤Ï¡¢ - Administration Guide/Server Run-time Environment/Run-time Configuration ¤Î - Á´·ï¥ê¥¹¥È¤ò¤´¤é¤ó¤¯¤À¤µ¤¤( JPUG¥µ¥¤¥È¤ÎÆüËܸìÈÇ¡¢¥µ¡¼¥Ð¤Î¹½À®)¡£¤½¤·¤Æ¡¢²ò - Àâ¤È¤·¤Æ¡¢ http://www.varlena.com/varlena/GeneralBits/Tidbits/ - annotated_conf_e.html ¤ª¤è¤Ó¡¢ http://www.varlena.com/varlena/GeneralBits/ - Tidbits/perf.html ¤ò¤´¤é¤ó¤¯¤À¤µ¤¤¡£ - -¥Ï¡¼¥É¥¦¥§¥¢¤ÎÁªÄê - À­Ç½¤Ë¤ª¤±¤ë¥Ï¡¼¥É¥¦¥§¥¢¤Î±Æ¶Á¤Ï http://www.powerpostgresql.com/PerfList/ - ¤È¡¢ http://momjian.us/main/writings/pgsql/hw_performance/index.html (JPUG - ¥µ¥¤¥È¤ÎÆüËܸìÈÇ) ¤Ë½Ò¤Ù¤é¤ì¤Æ¤¤¤Þ¤¹¡£ - - - [ÌõÃí: - JPUGÍý»öŤÎÊÒ²¬ÍµÀ¸»á¤Ë¤è¤ë¡¢¡Öº£¤¹¤°¤Ç¤­¤ëPostgreSQL¥Á¥å¡¼¥Ë¥ó¥°¡× - ¤È¤¤¤¦¥³¡¼¥Ê¡¼¤¬ ThinkIT ¥µ¥¤¥È¤Ë¤¢¤ê¡¢¼Âºî¶È¤Î»²¹Í¤Ë¤Ê¤ê¤Þ¤¹¡£ - http://www.thinkit.co.jp/free/tech/10/1/1.html - ] - - -3.4) ¤É¤Î¤è¤¦¤Ê¥Ç¥Ð¥°µ¡Ç½¤¬»È¤¨¤Þ¤¹¤«¡© - -¥µ¡¼¥Ð¹½À®ÊÑ¿ô¤Ë¤Ä¤¤¤Æ¤Ï¡¢ href="http://www.postgresql.org/docs/current/ -interactive/runtime-config-logging.html">http://www.postgresql.org/docs/current -/interactive/runtime-config-logging.html ¤Ë¼¨¤µ¤ì¤ë¤è¤¦¤Ë¿¤¯¤Î log_* ¤¬¤¢¤ê¡¢ -¥¯¥¨¥ê¤È¥×¥í¥»¥¹¤ÎÅý·×¾ðÊó¤ò½ÐÎϤ¹¤ë¤³¤È¤¬¤Ç¤­¡¢¥Ç¥Ð¥°¤äÀ­Ç½Â¬Äê¤Ë¤Ï¤È¤Æ¤âÊØÍø -¤Ç¤¹¡£ - -3.5) Àܳ¤·¤è¤¦¤È¤¹¤ë¤È¤­¤Ë 'Sorry, too many clients' ¤¬½Ð¤ë¤Î¤Ï¤Ê¤¼¤Ç¤¹¤«¡© - -´ûÄê¤Ç¤ÎÀ©¸Â¤Ç¤¢¤ë 100 ¤Î¥Ç¡¼¥¿¥Ù¡¼¥¹¥»¥Ã¥·¥ç¥ó¤Ë㤷¤Æ¤·¤Þ¤Ã¤Æ¤¤¤Þ¤¹¡£¥µ¡¼¥Ð¡¼ -¤ÎƱ»þÀܳ¤Ç¤­¤ë¥Ð¥Ã¥¯¥¨¥ó¥É¥×¥í¥»¥¹¤ÎÀ©¸ÂÃͤòÁý¤ä¤¹É¬Íפ¬¤¢¤ê¤Þ¤¹¡£ -postgresql.conf ¤ÎÃæ¤Îmax_connections ¤ÎÃͤòÊѹ¹¤·¤Æ¥µ¡¼¥Ð¤òºÆµ¯Æ°¤¹¤ë¤³¤È¤Ç²Ä -ǽ¤Ë¤Ê¤ê¤Þ¤¹¡£ - -3.6) PostgreSQL¤Î¥¢¥Ã¥×¥°¥ì¡¼¥É¤Î¼ê½ç¤Ï¤É¤¦¤Ê¤ê¤Þ¤¹¤«¡© - -¥Ð¡¼¥¸¥ç¥óÈÖ¹æÉÕ¤±¤ÎÊý¿Ë¤Ë¤Ä¤¤¤Æ¡¢¹¹¿·Á´È̤ˤĤ¤¤Æ¤Î²òÀâ¤Ïhttp:// -www.postgresql.org/support/versioning ¤ò¡¢¤½¤·¤Æ¡¢¥¢¥Ã¥×¥°¥ì¡¼¥É¤Ë¤Ä¤¤¤Æ¤Î°ìÈÌ -Ū¤ÊÀâÌÀ¤Ï http://www.postgresql.org/docs/current/static/install-upgrading.html -¤ò¤´Í÷¤¯¤À¤µ¤¤¡£ - -[ÌõÃí¡§ - ¥¢¥Ã¥×¥°¥ì¡¼¥É¤Ë¤Ä¤¤¤Æ¤ÎÏÂÌõÈǤϲ¼µ­¤Ë¤¢¤ê¤Þ¤¹¡£ - http://www.postgresql.jp/document/current/html/install-upgrading.html -] - -[ÌõÃí¡§ - ¸¶Ê¸¤Ç¤Ï¡¢²¼µ­¤ÎÆâÍƤÏÆÈΩ¤·¤¿¥Ú¡¼¥¸¤Ë°Ü¤µ¤ì¡¢ºï½ü¤µ¤ì¤Æ¤¤¤Þ¤¹¡£ - -¿·¤·¤¤µ¡Ç½¤òÀ¹¤ê¹þ¤àPostgreSQL¤Î¥á¥¸¥ã¡¼¥ê¥ê¡¼¥¹¤Ï¤À¤¤¤¿¤¤Ç¯¤Ë1²óÄøÅٹԤʤ¤¤Þ¤¹ -¡£¥á¥¸¥ã¡¼¥ê¥ê¡¼¥¹¤Ï¡¢¤¿¤È¤¨¤Ð¡¢8.1¤«¤é8.2¤Ø¤Î¤è¤¦¤Ë¡¢¥Ð¡¼¥¸¥ç¥óÈÖ¹æ¤Î1ÈÖÌܤ«2 -ÈÖÌܤÎÉôʬ¤òÁý¤ä¤·¤Æ¤æ¤­¤Þ¤¹¡£ - -PostgreSQL¤Î¥á¥¸¥ã¡¼¥ê¥ê¡¼¥¹¤ÏÄ̾¥·¥¹¥Æ¥à¥Æ¡¼¥Ö¥ë¤È¥Ç¡¼¥¿¤ÎÆâÉô¥Õ¥©¡¼¥Þ¥Ã¥È -¤òÊѹ¹¤·¤Þ¤¹¡£¤³¤ì¤é¤ÎÊѹ¹¤Ï¤¿¤¤¤Æ¤¤¤ÏÊ£»¨¤Ê¤Î¤Ç¤Ç¡¢¥Ç¡¼¥¿¥Õ¥¡¥¤¥ë¤Î¸åÊý¸ß´¹À­ -¤ò°Ý»ý¤·¤¿¤ê¤Ï¤·¤Þ¤»¤ó¡£¥á¥¸¥ã¡¼¥¢¥Ã¥×¥°¥ì¡¼¥É¤Î¤¿¤á¤Ë¤Ï¡¢¥Ç¡¼¥¿¥Ù¡¼¥¹¤Î¥À¥ó¥×/ -¥ê¥í¡¼¥É¤¬É¬Íפˤʤê¤Þ¤¹¡£ - -¥Þ¥¤¥Ê¡¼¥ê¥ê¡¼¥¹¤Ï¡¢¤¿¤È¤¨¤Ð¡¢8.1.5 ¤«¤é8.1.6¤Ø¤Î¤è¤¦¤Ë¡¢¥Ð¡¼¥¸¥ç¥óÈÖ¹æ¤Î3ÈÖÌÜ -¤ÎÃͤòÁý¤ä¤·¤Þ¤¹¡£PostgreSQL¥Á¡¼¥à¤Ï¡¢¥Þ¥¤¥Ê¡¼¥ê¥ê¡¼¥¹¤ËÂФ·¤Æ¤Ï¡¢¥Ð¥°¥Õ¥£¥¯¥¹ -¤·¤«¹Ô¤Ê¤¤¤Þ¤»¤ó¡£¤¹¤Ù¤Æ¤Î¥æ¡¼¥¶¤Ï¡¢¤Ç¤­¤ë¤À¤±ºÇ¿·¤Î¥Þ¥¤¥Ê¡¼¥ê¥ê¡¼¥¹¤Ë¹¹¿·¤¹¤Ù -¤­¤Ç¤¹¡£¥¢¥Ã¥×¥°¥ì¡¼¥É¤Ë¤Ï¡¢¾ï¤Ë¥ê¥¹¥¯¤¬¤Ä¤­¤â¤Î¤Ç¤¹¤«¤é¡¢PostgreSQL¤Î¥Þ¥¤¥Ê¡¼ -½¤Àµ¥ê¥ê¡¼¥¹¤Ç¤Ï¡¢ÉÑÈˤËȯÀ¸¤·¤¿¤ê¡¢¥»¥­¥å¥ê¥Æ¥£¤Ë´Ø·¸¤·¤¿¤ê¡¢¥Ç¡¼¥¿¤¬¤Ä¤Ö¤ì¤ë -¥Ð¥°¤À¤±¤ò½¤Àµ¤·¡¢¥¢¥Ã¥×¥°¥ì¡¼¥É¤Î¥ê¥¹¥¯¤òºÇ¾®¸Â¤Ë¤È¤É¤á¤Þ¤¹¡£²æ¡¹¤Î¥³¥ß¥å¥Ë¥Æ -¥£¤Ç¤Ï¡¢¥¢¥Ã¥×¥°¥ì¡¼¥É¤¹¤ë¥ê¥¹¥¯¤è¤ê¤â¡¢¥¢¥Ã¥×¥°¥ì¡¼¥É¤·¤Ê¤¤¥ê¥¹¥¯¤Î¤Û¤¦¤¬¹â¤¤ -¤È¹Í¤¨¤Æ¤¤¤Þ¤¹¡£ - -¥Þ¥¤¥Ê¡¼¥ê¥ê¡¼¥¹¤Î¥¢¥Ã¥×¥°¥ì¡¼¥É¤Ë¤Ï¥À¥ó¥×¤È¥ê¥¹¥È¥¢¤ÎɬÍפϤʤ¯¡¢¥Ç¡¼¥¿¥Ù¡¼¥¹ -¥µ¡¼¥Ð¤òÄä»ß¤·¤Æ¡¢¥¢¥Ã¥×¥Ç¡¼¥È¤µ¤ì¤¿¥Ð¥¤¥Ê¥ê¤ò¥¤¥ó¥¹¥È¡¼¥ë¤·¡¢¥µ¡¼¥Ð¤ò¥ê¥¹¥¿¡¼ -¥È¤·¤Þ¤¹¡£ - -] - -3.7) ¥Ï¡¼¥É¥¦¥§¥¢¤Ë¤Ï¤É¤Î¤è¤¦¤Ê¥³¥ó¥Ô¥å¡¼¥¿¤ò»È¤¨¤Ð¤è¤¤¤Ç¤¹¤«¡© - -PC¥Ï¡¼¥É¥¦¥§¥¢¤Ï¤Û¤È¤ó¤É¸ß´¹À­¤¬¤¢¤ê¤Þ¤¹¤Î¤Ç¡¢¤Û¤È¤ó¤É¤Î¿Í¤Ï¡¢¤¹¤Ù¤Æ¤ÎPC¥Ï¡¼¥É -¥¦¥§¥¢¤¬Æ±¤¸ÉʼÁ¤À¤È»×¤¤¹þ¤à·¹¸þ¤¬¤¢¤ê¤Þ¤¹¡£¤·¤«¤·¡¢¤½¤ì¤Ï´Ö°ã¤¤¤Ç¤¹¡£ECC RAM¡¢ -SCSI¡¢¤ª¤è¤Ó¡¢¹âÉʼÁ¥Þ¥¶¡¼¥Ü¡¼¥É¤Ï¡¢°Â¤¤¥Ï¡¼¥É¥¦¥§¥¢¤ËÈæ¤Ù¤ë¤È¡¢¤è¤ê¿®ÍêÀ­¤¬¹â -¤¯¡¢¤è¤êÀ­Ç½¤âÎɤ¤¤Î¤Ç¤¹¡£ PostgreSQL ¤Ï¤Û¤È¤ó¤É¤Î¥Ï¡¼¥É¥¦¥§¥¢¤Ç²ÔƯ¤·¤Þ¤¹¤¬¡¢ -¿®ÍêÀ­¤äÀ­Ç½¤¬½ÅÍפʾì¹ç¤Ï¡¢»ÈÍÑÃæ¤Î¥Ï¡¼¥É¥¦¥§¥¢¤Î¥ª¥×¥·¥ç¥ó¤Ë¤Ä¤¤¤ÆÄ´ºº¤¹¤ë¤³ -¤È¤¬¸­ÌÀ¤Ç¤¹¡£¥Ð¥Ã¥Æ¥ê¡¼¥Ð¥Ã¥¯¥¢¥Ã¥×ÉÕ¤­¤Î¥­¥ã¥Ã¥·¥å¤ò»ý¤Ä¥Ç¥£¥¹¥¯¥³¥ó¥È¥í¡¼¥é -¤âÌò¤ËΩ¤Á¤Þ¤¹¡£²æ¡¹¤Î¥á¡¼¥ê¥ó¥°¥ê¥¹¥È¾å¤Ç¤â¥Ï¡¼¥É¥¦¥§¥¢¥ª¥×¥·¥ç¥ó¤Î¥È¥ì¡¼¥É¥ª -¥Õ¤Ë¤Ä¤¤¤ÆµÄÏÀ¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ - -¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬ - - Áàºî¾å¤Î¼ÁÌä - -4.1) ºÇ½é¤Î¿ô¥í¥¦¤Î¤ß¤ò SELECT¤¹¤ë¤Ë¤Ï¤É¤¦¤·¤Þ¤¹¤«¡©¥é¥ó¥À¥à¤Ê¥í¥¦¡© - -¼èÆÀ¤·¤¿¤¤¥í¥¦¤¬¤Û¤ó¤Î¿ô¹Ô¤Ç¡¢SELECT ¤Î¼Â¹Ô»þ¤Ë¼èÆÀ¤¹¤ë¥í¥¦¤Î¿ô¤¬Ê¬¤«¤Ã¤Æ¤¤¤ì¤Ð -LIMIT ¤ò»È¤¤¤Þ¤·¤ç¤¦¡£¥¤¥ó¥Ç¥Ã¥¯¥¹¤¬ ORDER BY ¤È¥Þ¥Ã¥Á¤¹¤ì¤Ð¡¢¥¯¥¨¥êÁ´ÂΤò(´Ý¤´ -¤È)¼Â¹Ô¤·¤Ê¤¯¤Æ¤âºÑ¤à¾ì¹ç¤â¤¢¤ê¤Þ¤¹¡£SELECT ¤¹¤ë»þÅÀ¤Ç¥í¥¦¤Î¿ô¤¬ÉÔÌÀ¤Ê¤é¡¢¥«¡¼ -¥½¥ë¤ò»È¤Ã¤Æ FETCH ¤·¤Þ¤·¤ç¤¦¡£ - -¥é¥ó¥À¥à¤Ë¥í¥¦¤òSELECT¤¹¤ë¤Ë¤Ï¡¢¼¡¤Îʸ¤ò»È¤¤¤Þ¤¹¡§ - - SELECT col - FROM tab - ORDER BY random() - LIMIT 1; - -4.2) ÄêµÁ¤µ¤ì¤¿¥Æ¡¼¥Ö¥ë¡¢¥¤¥ó¥Ç¥Ã¥¯¥¹¡¢¥Ç¡¼¥¿¥Ù¡¼¥¹¡¢¤ª¤è¤Ó¡¢¥æ¡¼¥¶¤ò¤É¤Î¤è¤¦¤Ë -¤·¤Æ¸«¤Ä¤±½Ð¤·¤Þ¤¹¤«¡©psql¤Ç»È¤ï¤ì¤Æ¤¤¤ë¥¯¥¨¥ê¤òɽ¼¨¤¹¤ë¤Ë¤Ï¤É¤¦¤·¤Þ¤¹¤«¡© - -psql ¤ÎÃæ¤Ç \dt¥³¥Þ¥ó¥É¤ò»È¤Ã¤Æ¥Æ¡¼¥Ö¥ë¤ò¸«¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£psql¤ÎÃæ¤Ç \? ¤ò»È -¤Ã¤Æ¡¢¥³¥Þ¥ó¥É¤ÎÁ´¥ê¥¹¥È¤òÄ´¤Ù¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£°ìÊý¤Ç¡¢psql ¤Î¥½¡¼¥¹¥³¡¼¥É¤Ç¡¢ -¥Ð¥Ã¥¯¥¹¥é¥Ã¥·¥å¥³¥Þ¥ó¥É¤ò½ÐÎϤ¹¤ë pgsql/src/bin/psql/describe.c ¥Õ¥¡¥¤¥ë¤òÆɤà -¤³¤È¤â¤Ç¤­¤Þ¤¹¡£¤½¤ÎÃæ¤Ë¤Ï¡¢ SQL ¥³¥Þ¥ó¥É¤òÀ¸À®¤¹¤ëÉôʬ¤â´Þ¤Þ¤ì¤Þ¤¹¡£¤Þ¤¿¡¢ -E -¥ª¥×¥·¥ç¥ó¤òÉÕ¤±¤Æ psql ¤ò³«»Ï¤¹¤ë¤È¡¢ÆþÎϤµ¤ì¤¿¥³¥Þ¥ó¥É¤ò¼Â¹Ô¤¹¤ë¤¿¤á¤Î¥¯¥¨¥ê -¤ò°õ»ú½ÐÎϤ¹¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£ PostgreSQL¤Ï SQL ½àµò¤Î INFORMATION SCHEMA ¥¤¥ó -¥¿¡¼¥Õ¥§¡¼¥¹¤òÄ󶡤·¤Þ¤¹¤Î¤Ç¡¢¥Ç¡¼¥¿¥Ù¡¼¥¹¤Ë¤Ä¤¤¤Æ¤Î¾ðÊó¤òÌ䤤¹ç¤ï¤»¤ë¤³¤È¤â¤Ç -¤­¤Þ¤¹¡£ - -pg_ ¤Ç»Ï¤Þ¤ë¥·¥¹¥Æ¥à¥Æ¡¼¥Ö¥ë¤Ç¤â¤³¤ì¤é¤òµ­½Ò¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ - -psql -l¤ò»È¤¦¤ÈÁ´¤Æ¤Î¥Ç¡¼¥¿¥Ù¡¼¥¹¤ò¥ê¥¹¥È¤·¤Þ¤¹¡£ - -¤½¤ì¤È¡¢pgsql/src/tutorial/syscat.source ¤ò»î¤·¤Æ¤ß¤Æ¤¯¤À¤µ¤¤¡£¤½¤³¤Ë¤Ï¡¢¥Ç¡¼¥¿ -¥Ù¡¼¥¹¤Î¥·¥¹¥Æ¥à¥Æ¡¼¥Ö¥ë¤«¤é¾ðÊó¤òÆÀ¤ë¤¿¤á¤ËɬÍ×¤Ê SELECT ʸ¤¬Âô»³¤¢¤ê¤Þ¤¹¡£ - -4.3) ¥«¥é¥à¤Î¥Ç¡¼¥¿·¿¤òÊѹ¹¤¹¤ë¤Ë¤Ï¤É¤¦¤·¤Þ¤¹¤«¡© - -¥«¥é¥à¤Î¥Ç¡¼¥¿·¿¤ÎÊѹ¹¤Ï 8.0 °Ê¹ß¤Ç¤Ï¡¢ ALTER TABLE ALTER COLUMN TYPE ¤ò»È¤¦¤³ -¤È¤Ë¤è¤ê´Öñ¤Ë¤Ê¤ê¤Þ¤·¤¿¡£ - -¤½¤ì¤è¤êÁ°¤Î¥Ð¡¼¥¸¥ç¥ó¤Ç¤Ï¡¢°Ê²¼¤Î¤è¤¦¤Ë¤·¤Þ¤¹: - - 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; - -¤³¤ì¤ò¹Ô¤Ê¤Ã¤¿¤È¤­¤Ï¡¢Ëõ¾Ã¤µ¤ì¤¿¹Ô¤¬»È¤Ã¤Æ¤¤¤ë¥Ç¥£¥¹¥¯¶õ´Ö¤ò²ó¼ý¤¹¤ë¤¿¤á¤Ë -VACUUM FULL tab¤ò¤·¤¿¤Û¤¦¤¬Îɤ¤¤«¤â¤·¤ì¤Þ¤»¤ó¡£ - -4.4) ¥í¥¦¡¢¥Æ¡¼¥Ö¥ë¡¢¥Ç¡¼¥¿¥Ù¡¼¥¹¤ÎºÇÂ祵¥¤¥º¤Ï¡© - -À©¸Â¤Ï°Ê²¼¤Î¤È¤ª¤ê¤Ç¤¹: - - ¥Ç¡¼¥¿¥Ù¡¼¥¹¤ÎºÇÂ祵¥¤¥º? À©¸Â̵¤· (32 TB ¤Î¥Ç¡¼¥¿¥Ù¡¼¥¹¤â¸ºß¤·¤Þ - ¤¹) - ¥Æ¡¼¥Ö¥ë¤ÎºÇÂ祵¥¤¥º? 32 TB - ¥í¥¦¤ÎºÇÂ祵¥¤¥º? 400 GB - ¥Õ¥£¡¼¥ë¥É¤ÎºÇÂ祵¥¤¥º? 1 GB - ¥Æ¡¼¥Ö¥ëÆâ¤Ç¤ÎºÇÂç¥í¥¦¿ô? À©¸Â̵¤· - ¥Æ¡¼¥Ö¥ëÆâ¤Ç¤ÎºÇÂ祫¥é¥à¿ô? ¥«¥é¥à¤Î·¿¤Ë¤è¤Ã¤Æ 250-1600 - ¥Æ¡¼¥Ö¥ëÆâ¤Ç¤ÎºÇÂ祤¥ó¥Ç¥Ã¥¯¥¹ À©¸Â̵¤· - ¿ô? - -¤â¤Á¤í¤ó¡¢¤³¤ì¤é¤Ï¼ÂºÝ¤Ï̵À©¸Â¤Ç¤Ï¤Ê¤¯¡¢¥Ç¥£¥¹¥¯ÍÆÎ̤ȥá¥â¥ê¡¼¤ä¥¹¥ï¥Ã¥×¥¹¥Ú¡¼ -¥¹¤ÎÂ礭¤µ¤Ë¤è¤êÀ©¸Â¤µ¤ì¤Þ¤¹¡£À­Ç½¤Ï¤³¤ì¤é¤ÎÃͤ¬¤³¤È¤Î¤Û¤«Â礭¤Ê»þ¤ËÀú¤ê¤ò¼õ¤± -¤Þ¤¹¡£ - -ºÇÂç¥Æ¡¼¥Ö¥ë¥µ¥¤¥º¤Î32TB¤Ï¥ª¥Ú¥ì¡¼¥Æ¥£¥ó¥°¥·¥¹¥Æ¥à¤Ë¤è¤ëµðÂç¥Õ¥¡¥¤¥ë¤Î¥µ¥Ý¡¼¥È -¤ÏɬÍפȤ·¤Þ¤»¤ó¡£µðÂç¤Ê¥Æ¡¼¥Ö¥ë¤ÏÊ£¿ô¤Î1GB¤Î¥Õ¥¡¥¤¥ë¤Ëʬ¤±¤ÆÊݸ¤µ¤ì¤Þ¤¹¤Î¤Ç¡¢ -¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤ÎÀ©¸Â¤Ï½ÅÍפǤϤ¢¤ê¤Þ¤»¤ó¡£ - -¥Ç¥Õ¥©¥ë¥È¤Î¥Ö¥í¥Ã¥¯¥µ¥¤¥º¤ò32k¤ËÁý²Ã¤¹¤ë¤³¤È¤Ç¡¢ºÇÂç¥Æ¡¼¥Ö¥ë¥µ¥¤¥º¤È¹Ô¥µ¥¤¥º¤È -ºÇÂ祫¥é¥à¿ô¤È¤ò4Çܤˤ¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤Þ¤¿¡¢ºÇÂç¥Æ¡¼¥Ö¥ë¥µ¥¤¥º¤Ï¥Æ¡¼¥Ö¥ë¥Ñ¡¼ -¥Æ¥£¥·¥ç¥ó¤ò»È¤Ã¤ÆÁý¤ä¤¹¤³¤È¤â¤Ç¤­¤Þ¤¹¡£ - -¤Ò¤È¤Ä¤ÎÀ©¸Â¤Ï¡¢Ìó2,000ʸ»ú°Ê¾å¤ÎŤµ¤Î¥«¥é¥à¤Ë¥¤¥ó¥Ç¥Ã¥¯¥¹¤òÉÕ¤±¤ë¤³¤È¤¬¤Ç¤­¤Ê -¤¤¤³¤È¤Ç¤¹¡£¹¬¤¤¤Ë¤â¡¢¤½¤Î¤è¤¦¤Ê¥¤¥ó¥Ç¥Ã¥¯¥¹¤Ï¼ÂºÝ¤ÏɬÍפ¢¤ê¤Þ¤»¤ó¡£Ä¹¤¤¥«¥é¥à -¤ÎMD5¥Ï¥Ã¥·¥å¤Î´Ø¿ô¥¤¥ó¥Ç¥Ã¥¯¥¹¤Ï°ì°ÕÀ­¤¬¤Ê¤Ë¤è¤ê¤ÎÊݸ±¤Ç¡¢¤Þ¤¿¡¢¥Õ¥ë¥Æ¥­¥¹¥È¤Î -¥¤¥ó¥Ç¥Ã¥¯¥¹¤Ç¤Ï¥«¥é¥àÆâ¤Îñ¸ì¤ò¸¡º÷¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ - -4.5) °ìÈÌŪ¤Ê¥Æ¥­¥¹¥È¥Õ¥¡¥¤¥ë¤Î¥Ç¡¼¥¿¤òÊݸ¤¹¤ë¤Ë¤Ï¡¢¥Ç¡¼¥¿¥Ù¡¼¥¹¤Î¥Ç¥£¥¹¥¯ÍÆÎÌ -¤Ï¤É¤Î¤¯¤é¤¤É¬ÍפǤ¹¡© - -ÉáÄ̤Υƥ­¥¹¥È¥Õ¥¡¥¤¥ë¤ò PostgreSQL ¤Î¥Ç¡¼¥¿¥Ù¡¼¥¹¤ËÊݸ¤¹¤ë¤Ë¤Ï¡¢ºÇÂç¤ÇÌó5ÇܤΠ-¥Ç¥£¥¹¥¯ÍÆÎ̤òɬÍפȤ·¤Þ¤¹¡£ - -ÎãÂê¤È¤·¤Æ¡¢³Æ¹Ô¤ËÀ°¿ô¤È¥Æ¥­¥¹¥Èµ­½Ò¤ò»ý¤Ä 100,000¹Ô¤Î¥Õ¥¡¥¤¥ë¤ò¹Í¤¨¤Æ¤ß¤Þ¤·¤ç -¤¦¡£¥Æ¥­¥¹¥È¤Îʸ»úÎó¤ÎÊ¿¶ÑŤµ¤ò20¥Ð¥¤¥È¤È²¾Äꤹ¤ë¤È¡¢¥Õ¥é¥Ã¥È¥Õ¥¡¥¤¥ë¤ÎÂ礭¤µ -¤ÏÌó2.8MB ¤Ç¤¹¡£¤³¤Î¥Ç¡¼¥¿¤ò´Þ¤à PostgreSQL ¥Ç¡¼¥¿¥Ù¡¼¥¹¥Õ¥¡¥¤¥ë¤ÎÂ礭¤µ¤Ï¼¡¤Î -¤è¤¦¤ËÌó5.2MB¤È¸«ÀѤâ¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡§ - - 24 bytes: ³Æ¥í¥¦¤Î¥Ø¥Ã¥À(³µ»») - 24 bytes: À°¿ô(int)¥Õ¥£¡¼¥ë¥É¤È¥Æ¥­¥¹¥È(text)¥Õ¥£¡¼¥ë¥É - + 4 bytes: ¥Ú¡¼¥¸¾å¤Î¥¿¥Ã¥×¥ë¤Ø¤Î¥Ý¥¤¥ó¥¿ - ---------------------------------------- - 52 bytes per row - - PostgreSQL ¤Î¥Ç¡¼¥¿¥Ú¡¼¥¸¥µ¥¤¥º¤Ï 8192¥Ð¥¤¥È(8KB)¤Ê¤Î¤Ç: - - 8192 bytes per page - ------------------- = 146 rows per database page (ÀÚ¤ê¼Î¤Æ) - 52 bytes per row - - 100000 data rows - -------------------- = 633 database pages (ÀÚ¤ê¾å¤²) - 158 rows per page - - 633 database pages * 8192 bytes per page = 5,185,536 bytes (5.2 MB) - -¥¤¥ó¥Ç¥Ã¥¯¥¹¤Ï¡¢¤³¤ì¤Û¤É¤Î¥ª¡¼¥Ð¥Ø¥Ã¥É¤ÏÍ׵ᤷ¤Þ¤»¤ó¤¬¡¢¥¤¥ó¥Ç¥Ã¥¯¥¹ÉÕ¤±¤µ¤ì¤ë -¥Ç¡¼¥¿¤ò´Þ¤à°Ê¾å¡¢¤½¤ì¤Ê¤ê¤ËÂ礭¤¯¤Ê¤ê¤Þ¤¹¡£ - -NULL¤Ï¥Ó¥Ã¥È¥Þ¥Ã¥×¤È¤·¤ÆÊݸ¤µ¤ì¤Æ¤¤¤Æ¡¢¤½¤ì¤é¤¬¤ï¤º¤«¤Ë¥¹¥Ú¡¼¥¹¤ò»È¤¤¤Þ¤¹¡£ - -4.6) ¥¯¥¨¥ê¤¬ÃÙ¤¤¤Î¤Ï¤Ê¤¼¤Ç¤·¤ç¤¦¡©¤Ê¤¼¡¢¥¤¥ó¥Ç¥Ã¥¯¥¹¤¬»È¤ï¤ì¤Ê¤¤¤Î¤Ç¤·¤ç¤¦¤«¡© - -¥¤¥ó¥Ç¥Ã¥¯¥¹¤Ï¡¢¤¹¤Ù¤Æ¤Î¥¯¥¨¥ê¤Ç»È¤ï¤ì¤ë¤ï¤±¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£¥Æ¡¼¥Ö¥ë¤¬ºÇ¾®¥µ¥¤ -¥º¤è¤êÂ礭¤¯¡¢¥¯¥¨¥ê¤Ç¤½¤Î¤ï¤º¤«¤Ê¥Ñ¡¼¥»¥ó¥Æ¡¼¥¸¤Î¥í¥¦¤òÁªÂò¤¹¤ë»þ¤À¤±¡¢¥¤¥ó¥Ç -¥Ã¥¯¥¹¤Ï»È¤ï¤ì¤Þ¤¹¡£¤³¤ì¤Ï¥¤¥ó¥Ç¥Ã¥¯¥¹¥¹¥­¥ã¥ó¤Ë¤è¤êµ¯¤³¤µ¤ì¤ë¥é¥ó¥À¥à¤Ê¥Ç¥£¥¹ -¥¯¥¢¥¯¥»¥¹¤Ï¡¢¥Æ¡¼¥Ö¥ë¤ò¥¹¥È¥ì¡¼¥È¤ËÆɤà½ç¼¡Áöºº¤è¤ê¤âÃÙ¤¯¤Ê¤ë¤³¤È¤¬¤¢¤ë¤«¤é¤Ç -¤¹¡£ - -¥¤¥ó¥Ç¥Ã¥¯¥¹¤ò»È¤¦¤«¤ò·èÄꤹ¤ë¤¿¤á¤Ë¡¢PostgreSQL ¤Ï¥Æ¡¼¥Ö¥ë¤Ë¤Ä¤¤¤Æ¤ÎÅý·×¾ðÊó¤ò -»ý¤¿¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£¤³¤ÎÅý·×¾ðÊó¤Ï¡¢ VACUUM ANALYZE¤Þ¤¿¤Ï¡¢Ã±¤Ë ANALYZE ¤ò -»È¤Ã¤Æ¼ý½¸¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£Åý·×¾ðÊó¤ò»È¤Ã¤Æ¥ª¥×¥Æ¥£¥Þ¥¤¥¶¤Ï¥Æ¡¼¥Ö¥ë¤ÎÃæ¤Ë¤¢ -¤ë¥í¥¦¿ô¤òÃΤꡢ¥¤¥ó¥Ç¥Ã¥¯¥¹¤ò»È¤¦¤Ù¤­¤«¤Î·èÄê¤ò¤è¤êÀµ¤·¤¯¤Ç¤­¤Þ¤¹¡£Åý·×¾ðÊó¤Ï -ºÇŬ¤Ê·ë¹ç½ç¤ä·ë¹çÊýË¡¤ò·è¤á¤ë¾å¤Ç¤âµ®½Å¤Ê¤â¤Î¤â¤¢¤ê¤Þ¤¹¡£Åý·×¾ðÊó¤Î¼ý½¸¤Ï¡¢¥Æ -¡¼¥Ö¥ë¤ÎÆâÍƤ¬ÊѤï¤ëËè¤Ë·«ÊÖ¤·¤Ê¤µ¤ì¤ë¤Ù¤­¤Ç¤¹¡£ - -¥¤¥ó¥Ç¥Ã¥¯¥¹¤Ï¡¢Ä̾ï ORDER BY ¤ä·ë¹ç¤ò¹Ô¤Ê¤¦¤¿¤á¤Ë¤Ï»È¤ï¤ì¤Þ¤»¤ó¡£½ç¼¡¥¹¥­¥ã¥ó -¤Ë³¤¯ÌÀ¼¨Åª¥½¡¼¥È¤Ï¡¢µðÂç¤Ê¥Æ¡¼¥Ö¥ë¤Î¥¤¥ó¥Ç¥Ã¥¯¥¹¥¹¥­¥ã¥ó¤è¤ê¤âÉáÄ̤Ϲ⮤Ǥ¹ -¡£ - -¤·¤«¤·¡¢ORDER BY¤ÈÁȤ߹ç¤ï¤µ¤ì¤¿LIMIT ¤Ï¡¢¥Æ¡¼¥Ö¥ë¤Î¾®¤µ¤ÊÉôʬ¤òÊÖ¤¹¤¿¤á¤Ë¤¿¤Ó -¤¿¤Ó¥¤¥ó¥Ç¥Ã¥¯¥¹¤ò»È¤¦¤Ç¤·¤ç¤¦¡£ - -¤â¤·¡¢¥ª¥×¥Æ¥£¥Þ¥¤¥¶¤¬´Ö°ã¤Ã¤Æ¥·¡¼¥±¥ó¥·¥ã¥ë¥¹¥­¥ã¥ó¤òÁªÂò¤·¤¿¤³¤È¤Ëµ¿¤¤¤¬¤Ê¤± -¤ì¤Ð¡¢SET enable_seqscan TO 'off'¤ËÀßÄꤷ¤Æ¡¢¥¯¥¨¥ê¤ò¤â¤¦°ìÅټ¹Ԥ·¡¢¥¤¥ó¥Ç¥Ã¥¯ -¥¹¥¹¥­¥ã¥ó¤¬¤Þ¤Á¤¬¤¤¤Ê¤¯Â®¤¯¤Ê¤Ã¤Æ¤¤¤ë¤«¤É¤¦¤«¤ò¤ß¤Æ¤¯¤À¤µ¤¤¡£ - -LIKE ¤¢¤ë¤¤¤Ï ~ ¤Î¤è¤¦¤Ê¥ï¥¤¥ë¥É¥«¡¼¥É±é»»»Ò¤ÏÆÃÊ̤ʴĶ­¤Ç¤·¤«»È¤¨¤Þ¤»¤ó¡§ - - ¡¦ ¸¡º÷ʸ»úÎó¤¬Ê¸»úÎó¤ÎºÇ½é¤Ë¤­¤­¤Þ¤¹¡£¤¿¤È¤¨¤Ð¡§ - ¢¢ LIKE ¥Ñ¥¿¡¼¥ó¤¬%¤Ç»Ï¤Þ¤é¤Ê¤¤ - ¢¢ ~ (Àµµ¬É½¸½) ¥Ñ¥¿¡¼¥ó¤Ï^¤Ç»Ï¤Þ¤é¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤ - ¡¦ ¸¡º÷ʸ»úÎó¤òʸ»ú¥¯¥é¥¹¤«¤é»Ï¤á¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£¤¿¤È¤¨¤Ð¡¢[a-e]¡£ - ¡¦ ILIKE ¤ä ~* ¤Î¤è¤¦¤ÊÂçʸ»ú¤È¾®Ê¸»ú¤ò¶èÊ̤·¤Ê¤¤¸¡º÷¤Ï»È¤¨¤Þ¤»¤ó¡£¤½¤Î¤«¤ï¤ê - ¡¢¤³¤ÎFAQ¤Î4.8Àá¤ÇÀâÌÀ¤¹¤ë¼°¥¤¥ó¥Ç¥Ã¥¯¥¹¤¬»È¤¨¤Þ¤¹¡£ - ¡¦ initdb ¤Ë¤ª¤¤¤Æ¤Ï¡¢¥Ç¥Õ¥©¥ë¥È¤ÇC¥í¥±¡¼¥ë¤¬»È¤ï¤ì¤Ê¤¯¤Æ¤Ï¤Ê¤ê¤Þ¤»¤ó¡£¤½¤ÎÍý - ͳ¤Ï¡¢C¥í¥±¡¼¥ë°Ê³°¤Ç¤Ï¼¡¤ËÂ礭¤Êʸ»ú¤òÃΤ뤳¤È¤¬¤Ç¤­¤Ê¤¤¤«¤é¤Ç¤¹¡£¤³¤Î¤è¤¦ - ¤Ê¾ì¹ç¡¢ - - LIKE - - ¥¤¥ó¥Ç¥¯¥·¥ó¥°¤Ë¤À¤±Æ¯¤¯¤è¤¦¤Ê¡¢ÆÃÊÌ¤Ê - - text_pattern_ops - - ¥¤¥ó¥Ç¥Ã¥¯¥¹¤òºîÀ®¤¹¤ë¤³¤È¤â¤Ç¤­¤Þ¤¹¡£¤Þ¤¿¡¢¤½¤ì¤òÁ´Ê¸¸¡º÷¤Î¥Õ¥ë¥Æ¥­¥¹¥È¤Î - ¥¤¥ó¥Ç¥Ã¥¯¥¹ºîÀ®¤Ë»È¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ - -4.7) Ì䤤¹ç¤ï¤»¥ª¥×¥Æ¥£¥Þ¥¤¥¶¤¬¤É¤Î¤è¤¦¤ËÌ䤤¹ç¤ï¤»¤òɾ²Á¤¹¤ë¤Î¤«¤ò¸«¤ë¤Ë¤Ï¤É¤¦ -¤·¤Þ¤¹¤«¡© - -¥ª¥ó¥é¥¤¥ó¥Þ¥Ë¥å¥¢¥ë¤Ç EXPLAIN ¤ò¸«¤Æ¤¯¤À¤µ¤¤¡£ - -4.8) Àµµ¬É½¸½¤Ç¤Î¸¡º÷¤äÂçʸ»ú¤È¾®Ê¸»ú¤È¤ò¶èÊ̤·¤Ê¤¤Àµµ¬É½¸½¸¡º÷¤Ï¤É¤Î¤è¤¦¤Ë¼Â¸½ -¤·¤Þ¤¹¤«¡©Âçʸ»ú¤È¾®Ê¸»ú¤È¤ò¶èÊ̤·¤Ê¤¤¸¡º÷¤Î¤¿¤á¤Î¥¤¥ó¥Ç¥Ã¥¯¥¹¤Ï¤É¤Î¤è¤¦¤Ë»È¤¤ -¤Þ¤¹¤«¡© - -~±é»»»Ò¤ÏÀµµ¬É½¸½¾È¹ç¤ò¹Ô¤Ê¤¤¡¢~* ¤ÏÂçʸ»ú¤È¾®Ê¸»ú¤ò¶èÊ̤·¤Ê¤¤ -(case-insensitive)Àµµ¬É½¸½¾È¹ç¤ò¹Ô¤¤¤Þ¤¹¡£Âçʸ»ú¤È¾®Ê¸»ú¤ò¶èÊ̤·¤Ê¤¤ LIKE ±é»» -»Ò¤ò ILIKE ¤È¤¤¤¤¤Þ¤¹¡£ - -Âçʸ»ú¤È¾®Ê¸»ú¤ò¶èÊ̤·¤Ê¤¤ÅùÃÍÈæ³Ó¤Ï¼¡¤Î¤è¤¦¤Ëɽ¸½¤Ç¤­¤ë¡§ - - SELECT * - FROM tab - WHERE lower(col) = 'abc'; - -ɸ½à¥¤¥ó¥Ç¥Ã¥¯¥¹¤Ç¤Ï»È¤ï¤ì¤º¡¢¤·¤«¤·¤Ê¤¬¤é¡¢¤â¤·¡¢¼°¥¤¥ó¥Ç¥Ã¥¯¥¹¤òºî¤Ã¤¿¤Ê¤é¤½ -¤ì¤¬»È¤ï¤ì¤ë¤Ç¤·¤ç¤¦¡£ - - CREATE INDEX tabindex ON tab (lower(col)); - -¾åµ­¤Î¥¤¥ó¥Ç¥Ã¥¯¥¹¤¬UNIQUE¤ÇºîÀ®¤µ¤ì¤¿¾ì¹ç¡¢¥«¥é¥à¤ÏÂçʸ»ú¤È¾®Ê¸»ú¤ò³ÊǼ¤Ç¤­¤Þ -¤¹¤¬¡¢¤½¤Î°ã¤¤¤¬Ê¸»ú¥±¡¼¥¹¤À¤±¤Ç¤¢¤Ã¤Æ¤âƱ°ì¤Ë¤Ï¤Ê¤ê¤Þ¤»¤ó¡£¤¢¤¨¤ÆÆÃÄê¤Îʸ»ú¥± -¡¼¥¹¤ò¥«¥é¥à¤Ë³ÊǼ¤¹¤ë¤Ë¤Ï CHECKÀ©Ì󤫡¢¥È¥ê¥¬¡¼¤ò»È¤Ã¤Æ¤¯¤À¤µ¤¤¡£ - -4.9) ¥¯¥¨¥ê¤ÎÃæ¤Ç¡¢¥Õ¥£¡¼¥ë¥É¤¬NULL ¤Ç¤¢¤ë¤³¤È¤ò¸¡½Ð¤¹¤ë¤Ë¤Ï¤É¤¦¤·¤Þ¤¹¤«¡© NULL -¤Ç¤¢¤ë¤³¤È¤ò¸¡½Ð¤¹¤ë¤Ë¤Ï¤É¤¦¤·¤Þ¤¹¤«¡©¥Õ¥£¡¼¥ë¥É¤¬NULL¤«¤É¤¦¤«¤Ç¤É¤Î¤è¤¦¤Ë¥½¡¼ -¥È¤¬¤Ç¤­¤Þ¤¹¤«¡© - -°Ê²¼¤Î¤è¤¦¤Ë¡¢IS NULL ¤È IS NOT NULL¤Ç¡¢¤½¤Î¥«¥é¥à¤ò¥Æ¥¹¥È¤·¤Æ¤ß¤Þ¤¹¡§ - - SELECT * - FROM tab - WHERE col IS NULL; - -NULL¤Î²ÄǽÀ­¤Î¤¢¤ë¤â¤Î¤òÏ¢·ë¤¹¤ë¤Ë¤Ï¡¢COALESCE()¤ò¼¡¤Î¤è¤¦¤Ë»È¤¤¤Þ¤¹¡£ - - SELECT COALESCE(col1, '') || COALESCE(col2, '') - FROM tab - -NULL¾õÂ֤ǥ½¡¼¥È¤¹¤ë¤Ë¤Ï¡¢IS NULL ¤È IS NOT NULL ¤Î½¤¾þ»Ò¤ò ORDER BY ¶ç¤ÎÃæ¤Ç»È -¤Ã¤Æ¤ß¤Þ¤¹¡£true ¤Î¤â¤Î¤Ï false ¤Î¤â¤Î¤è¤ê¤â¹â¤¤ÃͤȤ·¤Æʤ٤é¤ì¤Þ¤¹¤Î¤Ç¡¢¼¡¤Î -Îã¤Ç¤Ï NULL ¤Îµ­ºÜ¤¬·ë²Ì¥ê¥¹¥È¤Î¾åÉô¤ËÃÖ¤«¤ì¤Þ¤¹¡£ - - SELECT * - FROM tab - ORDER BY (col IS NOT NULL) - -4.10) ¤¤¤í¤¤¤í¤Êʸ»ú·¿¤Î¤½¤ì¤¾¤ì¤Î°ã¤¤¤Ï²¿¤Ç¤¹¤«¡© - - ·¿ ÆâÉô̾ È÷¹Í - VARCHAR(n) varchar ºÇÂçĹ¤Î¥µ¥¤¥º¤ò»ØÄꤹ¤ë¡¢µÍ¤áʪ̵¤· - CHAR(n) bpchar »ØÄꤵ¤ì¤¿¸ÇÄêĹ¤È¤Ê¤ë¤è¤¦¤Ë¶õÇò¤¬µÍ¤á¤é¤ì¤ë - TEXT text Ťµ¤ËÆÃÊ̤ʾå¸Â¤Ï̵¤· - BYTEA bytea ²ÄÊÑĹ¤Î¥Ð¥¤¥ÈÇÛÎó(null-byte safe) - "char" char 1ʸ»ú - -ÆâÉô̾¤Ë¤ªÌܤˤ«¤«¤ë¤Î¤Ï¡¢¥·¥¹¥Æ¥à¡¦¥«¥¿¥í¥°¤òÄ´¤Ù¤ë¤È¤­¤ä¡¢¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸¤ò -¼õ¤±¼è¤ë¤È¤­¤Ç¤¹¡£ - -¾åµ­¤Î·¿¤Î¤¦¤ÁºÇ½é¤Î£´¤Ä¤Î·¿¤Ï "varlena" ·¿¤Ç¤¹(¤¹¤Ê¤ï¤Á¡¢¥Ç¥£¥¹¥¯¤ÎºÇ½é¤Î£´¥Ð -¥¤¥È¤¬¥Ç¡¼¥¿Ä¹¤Ç¡¢¤½¤ì¤Î¸å¤Ë¼ÂºÝ¤Î¥Ç¡¼¥¿¤¬Â³¤­¤Þ¤¹)¡£¤³¤Î¤è¤¦¤Ë¼ÂºÝ¤Î¶õ´Ö¤ÏÀë¸À -¤µ¤ì¤¿Â礭¤µ¤è¤ê¤â¾¯¤·Â礭¤¯¤Ê¤ê¤Þ¤¹¡£¤·¤«¤·¡¢Ä¹¤¤Ãͤϰµ½Ì¤µ¤ì¤ë¤Î¤Ç¡¢¥Ç¥£¥¹¥¯ -¾å¤Î¶õ´Ö¤Ï»×¤Ã¤¿¤è¤ê¤â¾®¤µ¤¯¤Ê¤ê¤Þ¤¹¡£ - -VARCHAR(n) ¤Ï²ÄÊÑŤÎʸ»úÎó¤òÊݸ¤¹¤ë¤Î¤ËºÇŬ¤Ç¤¹¤¬¡¢Êݸ¤Ç¤­¤ëʸ»úÎó¤ÎŤµ¤ËÀ© -¸Â¤¬¤¢¤ê¤Þ¤¹¡£TEXT ¤ÏŤµ¤ËÀ©¸Â¤Î̵¤¤Ê¸»úÎó¤ÎÊݸ¤Î¤¿¤á¤Î¤â¤Î¤Ç¡¢ºÇÂç¤Ç 1¥®¥¬¥Ð -¥¤¥È¤Ç¤¹¡£ CHAR(n)¤Ï¡¢VARCHAR(n)¤¬Í¿¤¨¤é¤ì¤¿Ê¸»ú¤À¤±¤òÊݸ¤¹¤ë¤Î¤ËÂФ·¡¢¥Ö¥é¥ó -¥¯¤òµÍ¤á¹þ¤ó¤Ç¤¤¤Ä¤âƱ¤¸Ä¹¤µ¤Çʸ»úÎó¤òÊݸ¤¹¤ë¤Î¤ËºÇŬ¤Ç¤¹¡£BYTEA¤Ï¡¢ÉôʬŪ¤Ë -NULL ¤Î¥Ð¥¤¥È¤ò´Þ¤à¥Ð¥¤¥Ê¥ê¥Ç¡¼¥¿¤òÊݸ¤¹¤ë¤¿¤á¤Î¤â¤Î¤Ç¤¹¡£¤³¤ì¤é¤Î¥¿¥¤¥×¤ÏƱ¤¸ -¤¯¤é¤¤¤ÎÀ­Ç½ÆÃÀ­¤ò¤â¤Á¤Þ¤¹¡£ - -4.11.1) ÄÌÈÖ(serial)¡¿¼«Æ°Áýʬ¥Õ¥£¡¼¥ë¥É¤Ï¤É¤Î¤è¤¦¤Ë¤Ä¤¯¤ê¤Þ¤¹¤«¡© - -PostgreSQL ¤Ï SERIAL ¥Ç¡¼¥¿·¿¤ò¥µ¥Ý¡¼¥È¤·¤Þ¤¹¡£¥«¥é¥à¾å¤Ë¥·¡¼¥±¥ó¥¹¤ò¼«Æ°ºîÀ®¤· -¤Þ¤¹¡£¤¿¤È¤¨¤Ð¡¢ - - CREATE TABLE person ( - id SERIAL, - name TEXT - ); - -¤Ï¼«Æ°Åª¤Ë¼¡¤Î¤è¤¦¤ËËÝÌõ¤µ¤ì¤Þ¤¹: - - CREATE SEQUENCE person_id_seq; - CREATE TABLE person ( - id INT4 NOT NULL DEFAULT nextval('person_id_seq'), - name TEXT - ); - - [ÌõÃí¡§ - CREATE UNIQUE INDEX person_id_key ON person ( id ); - ¤Ï¡¢ 7.3 °Ê¹ß¤Ï¼«Æ°Åª¤Ë¤Ï¹Ô¤Ê¤ï¤ì¤Ê¤¯¤Ê¤ê¤Þ¤·¤¿¡£ - ] - - -¼«Æ°Åª¤Ë¤Ä¤¯¤é¤ì¤ëÄÌÈ֤ϡ¢
__seq ¤È̾ÉÕ¤±¤é¤ì¤Æ¤¤¤Æ¡¢table -¤È serialcolumn ¤Ï¡¢¤½¤ì¤¾¤ì¥Æ¡¼¥Ö¥ë¤È SERIAL ¥«¥é¥à¤Î̾Á°¤Ç¤¹¡£ÄÌÈ֤ˤĤ¤¤Æ¤Ï -¡¢¥ª¥ó¥é¥¤¥ó¥Þ¥Ë¥å¥¢¥ë¤Çcreate_sequence ¤ò¤´¤é¤ó¤¯¤À¤µ¤¤¡£ - -4.11.2) SERIAL¥Ç¡¼¥¿·¿¤ËÁÞÆþ¤µ¤ì¤ëÃͤϡ¢¤É¤¦¤¹¤ì¤ÐÆÀ¤é¤ì¤Þ¤¹¤«¡© - -ºÇ¤â´Êñ¤ÊÊýË¡¤Ï¡¢³ä¤êÅö¤Æ¤é¤ì¤¿SERIALÃͤò RETURNING¤È¤·¤Æ¼èÆÀ¤¹¤ë¤³¤È¤Ç¤¹¡£ -4.11.1¤ÎÎãÂê¥Æ¡¼¥Ö¥ë¤ò»È¤¦¤È¼¡¤Î¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£ - - INSERT INTO person (name) VALUES ('Blaise Pascal') RETURNING id; - -4.11.3) currval() ¤Ï¾¤Î¥æ¡¼¥¶¤È¤Î¶¥¹ç¾õÂ֤˴٤뤳¤È¤Ï¤Ê¤¤¤Ç¤¹¤«¡© - -¤½¤ì¤Ï¤¢¤ê¤Þ¤»¤ó¡£currval() ¤Ï¡¢¤¹¤Ù¤Æ¤Î¥æ¡¼¥¶¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¤¬¡¢ÆɼԤΥ»¥Ã¥·¥ç -¥ó¤ËÍ¿¤¨¤é¤ì¤¿¸½ºß¤ÎÃͤòÊÖ¤·¤Þ¤¹¡£ - -4.11.4) ¥È¥é¥ó¥¶¥¯¥·¥ç¥ó¤¬ÃæÃǤ·¤¿¤È¤­¤Ë¤â¤¦¤¤¤Á¤É¥·¡¼¥±¥ó¥¹Èֹ椬»È¤ï¤ì¤Ê¤¤¤Î -¤Ï¤Ê¤¼¤Ç¤¹¤«¡©¥·¡¼¥±¥ó¥¹¡¿SERIAL¥«¥é¥à¤Ë¶õ¤­¤¬¤¢¤ë¤Î¤Ï¤Ê¤¼¤Ç¤¹¤«¡© - -Ʊ»þÀ­¤ò²þÁ±¤¹¤ë¤¿¤á¤Ë¡¢¼Â¹ÔÃæ¤Î¥È¥é¥ó¥¶¥¯¥·¥ç¥ó¤Ë¡¢É¬Íפ˱þ¤¸¤Æ¥È¥é¥ó¥¶¥¯¥·¥ç -¥ó¤¬½ªÎ»¤¹¤ë¤Þ¤Ç¥í¥Ã¥¯¤µ¤ì¤Ê¤¤¤è¤¦¥·¡¼¥±¥ó¥¹ÃͤòÍ¿¤¨¤Æ¤¤¤Þ¤¹¡£¤³¤Î¤¿¤á¥È¥é¥ó¥¶ -¥¯¥·¥ç¥ó¤¬ÃæÃǤµ¤ì¤ë¤ÈÈÖ¹æ³ä¤êÅö¤Æ¤Ë¥®¥ã¥Ã¥×¤òÀ¸¤¸¤Þ¤¹¡£ - -4.12) OID ¤È¤Ï²¿¤Ç¤¹¤«¡© CTID ¤È¤Ï²¿¤Ç¤¹¤«¡© - -¥Æ¡¼¥Ö¥ë¤¬WITH OIDS¤Ç¤Ä¤¯¤é¤ì¤¿¾ì¹ç¤Ï¡¢¤½¤ì¤¾¤ì¤Î¥í¥¦¤Ë°ì°Õ¤ÊOID¤¬¼è¤é¤ì¤Þ¤¹¡£ -OID¤Ï¼«Æ°Åª¤Ë4¥Ð¥¤¥È¤ÎÀ°¿ô¤ÇÍ¿¤¨¤é¤ì¡¢¤½¤ì¤Ï¡¢Á´¥¤¥ó¥¹¥È¥ì¡¼¥·¥ç¥ó¤òÄ̤·¤Æ°ì°Õ -¤ÊÃͤȤʤê¤Þ¤¹¡£¤·¤«¤·¡¢Ìó40²¯¤Ç¥ª¡¼¥Ð¡¼¥Õ¥í¡¼¤·¡¢¤½¤·¤Æ¡¢OID¤Ï½ÅÊ£¤ò¤·¤Ï¤¸¤á¤Þ -¤¹¡£PostgreSQL¤ÏÆâÉô¥·¥¹¥Æ¥à¥Æ¡¼¥Ö¥ë¤ò°ì½ï¤Ë¥ê¥ó¥¯¤¹¤ë¤¿¤á¤ËOID ¤ò»È¤¤¤Þ¤¹¡£ - -¥æ¡¼¥¶¤Î¥Æ¡¼¥Ö¥ë¤Î¥«¥é¥à¤Ë°ì°Õ¤ÎÈÖ¹æ¤òÉÕ¤±¤ë¤¿¤á¤Ë¤Ï¡¢ OID ¤Ç¤Ï¤Ê¤¯ SERIAL ¤ò»È -¤¦¤Î¤¬ºÇ¤â¤è¤¤¤Ç¤·¤ç¤¦¡£SERIAL¤ÎÏ¢ÈÖ¤Ï1¤Ä¤Î¥Æ¡¼¥Ö¥ëÆâ¤Ç¤Î¤ß°ì°Õ¤Ë¤Ê¤ë¤«¤é¤Ç¡¢¥ª -¡¼¥Ð¡¼¥Õ¥í¡¼¤òµ¯¤³¤·¤Ë¤¯¤¤¤È¹Í¤¨¤é¤ì¤Þ¤¹¡£ 8¥Ð¥¤¥È¤Î¥·¡¼¥±¥ó¥¹ÃͤòÊݸ¤¹¤ë¤¿¤á -¤Ë¡¢SERIAL8¤¬¤¢¤ê¤Þ¤¹¡£ - -CTID ¤Ï¡¢ÆÃÄê¤ÎʪÍý¥í¥¦¤ò¥Ö¥í¥Ã¥¯¤È¥ª¥Õ¥»¥Ã¥È¤ÎÃͤǼ±Ê̤¹¤ë¤¿¤á¤Ë»È¤ï¤ì¤Þ¤¹¡£ -CTID¤Ï¡¢¥í¥¦¤¬½¤Àµ¤µ¤ì¤¿¤êºÆÆɹþ¤ß¤µ¤ì¤¿¤È¤­¤ËÊѤï¤ê¤Þ¤¹¡£¤Þ¤¿¡¢ÊªÍý¥í¥¦¤òº¹¤¹ -¤¿¤á¤Ë¥¤¥ó¥Ç¥Ã¥¯¥¹¤Îµ­ºÜ¤Ë»È¤ï¤ì¤Þ¤¹¡£ - -4.13) ¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸ "ERROR: Memory exhausted in AllocSetAlloc()"¤¬½Ð¤ë¤Î¤Ï¤Ê -¤¼¤Ç¤¹¤«¡© - -¤ª¤½¤é¤¯¡¢¥·¥¹¥Æ¥à¤Î²¾ÁÛ¥á¥â¥ê¡¼¤òÁ´¤Æ»È¤¤²Ì¤¿¤·¤Æ¤·¤Þ¤Ã¤Æ¤¤¤ë²ÄǽÀ­¤¬¤¢¤ë¤«¡¢ -¥«¡¼¥Í¥ë¤¬¤¢¤ë¥ê¥½¡¼¥¹¤Ë¤Ä¤¤¤Æ¤â¤ÄÀ©¸ÂÃͤ¬Ä㤹¤®¤ë²ÄǽÀ­¤¬¤¢¤ê¤Þ¤¹¡£¥µ¡¼¥Ð¤ò»Ï -Æ°¤¹¤ëÁ°¤Ë¤³¤ì¤ò»î¤·¤Æ¤ß¤Æ¤¯¤À¤µ¤¤¡§ - - ulimit -d 262144 - limit datasize 256m - -¥·¥§¥ë¤Ë¤è¤Ã¤Æ¡¢¤É¤Á¤é¤«¤Ò¤È¤Ä¤¬À®¸ù¤¹¤ë¤Ç¤·¤ç¤¦¤¬¡¢¤³¤ì¤Ï¥×¥í¥»¥¹¤Î¥Ç¡¼¥¿¥»¥° -¥á¥ó¥ÈÀ©¸Â¤ò¤è¤ê¹â¤¯ÀßÄꤷ¡¢¤¿¤Ö¤ó¥¯¥¨¥ê¤¬´°·ë¤¹¤ë¤è¤¦¤Ë¤Ê¤ë¤Ç¤·¤ç¤¦¡£¤³¤Î¥³¥Þ -¥ó¥É¤Ï¸½¹Ô¤Î¥×¥í¥»¥¹¤È¡¢¤³¤Î¥³¥Þ¥ó¥É¤òÁö¤é¤»¤¿¸å¤Ëºî¤é¤ì¤ëÁ´¤Æ¤Î¥µ¥Ö¥×¥í¥»¥¹¤Ë -¤Ä¤¤¤ÆŬÍѤµ¤ì¤Þ¤¹¡£¥Ð¥Ã¥¯¥¨¥ó¥É¤¬¤È¤Æ¤â¿¤¯¤Î¥Ç¡¼¥¿¤òÊÖ¤¹¤¿¤á¤ËSQL ¥¯¥é¥¤¥¢¥ó -¥È¤ÇÌäÂ꤬³¤¤¤Æ¤¤¤ë¤Î¤Ç¤¢¤ì¤Ð¡¢¥¯¥é¥¤¥¢¥ó¥È¤ò³«»Ï¤¹¤ëÁ°¤Ë¤³¤ì¤ò»î¤·¤Æ¤ß¤Æ¤¯¤À -¤µ¤¤¡£ - -4.14) ¤É¤Î¥Ð¡¼¥¸¥ç¥ó¤Î PostgreSQL ¤òÁö¤é¤»¤Æ¤¤¤ë¤«¤òÄ´¤Ù¤ë¤Ë¤Ï¤É¤¦¤·¤Þ¤¹¤«¡© - -psql ¤«¤é SELECT version(); ¤ò¥¿¥¤¥×¤·¤Þ¤¹¡£ - -4.15) ¸½ºß¤Î»þ¹ï¤¬¥Ç¥Õ¥©¥ë¥È¤È¤Ê¤ë¤è¤¦¤Ê¥«¥é¥à¤Ï¤É¤Î¤è¤¦¤Ë¤Ä¤¯¤ê¤Þ¤¹¤«¡© - -CURRENT_TIMESTAMP¤ò»È¤¤¤Þ¤¹: - - CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); - -4.16) ³°Éô·ë¹ç(outer join)¤Ï¤É¤Î¤è¤¦¤Ë¼Â¸½¤·¤Þ¤¹¤«? - -PostgreSQL ¤Ï SQL ɸ½à¹½Ê¸¤ò»È¤¦³°Éô·ë¹ç(¥¢¥¦¥¿¡¼¥¸¥ç¥¤¥ó)¤ò¥µ¥Ý¡¼¥È¤·¤Þ¤¹¡£¤³ -¤³¤Ë 2¤Ä¤ÎÎãÂ꤬¤¢¤ê¤Þ¤¹¡£ - - SELECT * - FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col); - -¤¢¤ë¤¤¤Ï - - SELECT * - FROM t1 LEFT OUTER JOIN t2 USING (col); - -¤³¤ì¤é¤Î¾ÝħŪ¤Ê¥¯¥¨¥ê¤Ç¤Ï t1.col ¤ò t2.col ¤È·ë¹ç¤·¤Æ¡¢t1 ¤Î·ë¹ç¤µ¤ì¤Ê¤«¤Ã¤¿¥í -¥¦(t2 ¤È°ìÃפ·¤Ê¤«¤Ã¤¿¥í¥¦)¤âÊÖ¤·¤Æ¤¤¤Þ¤¹¡£RIGHT ·ë¹ç¤Ï t2 ¤Î·ë¹ç¤µ¤ì¤Ê¤«¤Ã¤¿¥í -¥¦¤ò²Ã¤¨¤ë¤Ç¤·¤ç¤¦¡£FULL ·ë¹ç¤Ï¡¢°ìÃפ·¤¿¥í¥¦¤Ë t1 ¤È t2 ¤«¤é¤Ï·ë¹ç¤µ¤ì¤Ê¤«¤Ã¤¿ -¥í¥¦¤òÊÖ¤¹¤Ç¤·¤ç¤¦¡£OUTER ¤È¤¤¤¦¸ÀÍդϥª¥×¥·¥ç¥ó¤Ç LEFT, RIGHT, ¤Þ¤¿¤Ï FULL ¤Ê -¤É¤Î·ë¹ç¤ò²¾Äꤵ¤ì¤Æ¤¤¤Þ¤¹¡£Ä̾·ë¹ç¤ÏINNER·ë¹ç¤È¸Æ¤Ð¤ì¤Þ¤¹¡£ - -4.17) Ê£¿ô¤Î¥Ç¡¼¥¿¥Ù¡¼¥¹¤ò»È¤¦Ì䤤¹ç¤ï¤»¤Ï¤É¤Î¤è¤¦¤Ë¤¹¤ì¤Ð¤Ç¤­¤Þ¤¹¤«¡© - -¸½¹Ô¤Î¥Ç¡¼¥¿¥Ù¡¼¥¹°Ê³°¤Ø¤ÎÌ䤤¹ç¤ï¤»¤ÎÊýË¡¤Ï¤¢¤ê¤Þ¤»¤ó¡£¤È¤¤¤¦¤Î¤âPostgreSQL¤¬ -¥Ç¡¼¥¿¥Ù¡¼¥¹»ÅÍͤΥ·¥¹¥Æ¥à¥«¥¿¥í¥°¤òÆɤ߹þ¤à¤¿¤á¤Ç¡¢¤½¤³¤Ë¤Ï¡¢¤¿¤È¤¨¤½¤Î¤Õ¤ê¤ò -¤¹¤ë¤À¤±¤Ë¤·¤í¡¢¥Ç¡¼¥¿¥Ù¡¼¥¹¤ò±Û¤¨¤ÆÌ䤤¹ç¤ï¤»¤ò¤¹¤ë¤¹¤Ù¤¬¤¢¤ê¤Þ¤»¤ó¡£ - -contrib/dblink ¤Ï¥Ç¡¼¥¿¥Ù¡¼¥¹´Ö(cross-database)¤ÎÌ䤤¹ç¤ï¤»¤ò´Ø¿ô¸Æ½Ð¤·¤Ë¤è¤êµö -¤·¤Þ¤¹¡£¤â¤Á¤í¤ó¡¢¥¯¥é¥¤¥¢¥ó¥È¤ÏƱ»þ¤ËÀܳ¤òÊ̤Υǡ¼¥¿¥Ù¡¼¥¹¤Ø¤âÄ¥¤é¤Ê¤¯¤Æ¤Ï¤Ê -¤é¤º¡¢·ë²Ì¤ò¥¯¥é¥¤¥¢¥ó¥È¦¤Ç¥Þ¡¼¥¸¤·¤Ê¤¯¤Æ¤Ï¤Ê¤ê¤Þ¤»¤ó¡£ - -4.18) ´Ø¿ô¤«¤éÊ£¿ô¤Î¥í¥¦¤Þ¤¿¤Ï¥«¥é¥à¤òÊÖ¤¹¤Ë¤Ï¤É¤¦¤·¤Þ¤¹¤«¡© - -½¸¹ç¤òÊÖ¤¹´Ø¿ô(Set Returning Functions): http://wiki.postgresql.org/wiki/ -Return_more_than_one_row_of_data_from_PL/pgSQL_functions ¤ò»È¤¦¤È´Êñ¤Ç¤¹ - -¡£ - -4.19) PL/PgSQL ¤Î´Ø¿ô¤ÎÃæ¤Ç°ì»þ¥Æ¡¼¥Ö¥ë¤Ë¥¢¥¯¥»¥¹¤¹¤ë¤È¤­¡¢¤É¤¦¤·¤Æ "relation -with OID ##### does not exist" ¤È¤¤¤¦¥¨¥é¡¼¤ò¼õ¤±¼è¤ë¤Î¤Ç¤·¤ç¤¦¤«¡© - -¥Ð¡¼¥¸¥ç¥ó8.3¤è¤êÁ°¤Î PostgreSQL ¤Ç¤Ï¡¢PL/PgSQL ¤Ï´Ø¿ô¥¹¥¯¥ê¥×¥È¤ò¥­¥ã¥Ã¥·¥å¤· -¤¿¤¿¤á¡¢±¿°­¤¯¤½¤ÎÉûºîÍѤ¬¤¢¤ê¤Þ¤·¤¿¡£PL/PgSQL ´Ø¿ô¤¬°ì»þ¥Æ¡¼¥Ö¥ë¤Ë¥¢¥¯¥»¥¹¤·¤Æ -¸å¤Ç¤½¤Î¥Æ¡¼¥Ö¥ë¤ò¾Ã¤·¤Æºî¤ê¤·¤¿¾ì¹ç¤Ë¡¢´Ø¿ô¤¬¤â¤¦°ìÅٸƤӽФµ¤ì¤¿¤È¤­¤Ï¡¢¤½¤Î -´Ø¿ô¤Î¥­¥ã¥Ã¥·¥å¤·¤Æ¤¤¤¿ÆâÍƤ¬¤Þ¤À¸Å¤¤°ì»þ¥Æ¡¼¥Ö¥ë¤ò»Ø¤·¼¨¤·¤¿¤Þ¤Þ¤À¤Ã¤¿¤«¤é¤Ç -¤¹¡£¤³¤Î¡¢²ò·èºö¤È¤·¤Æ¡¢PL/PgSQL¤ÎÃæ¤Ç EXECUTE ¤ò°ì»þ¥Æ¡¼¥Ö¥ë¤Ø¤Î¥¢¥¯¥»¥¹¤Î¤¿¤á -¤Ë»È¤¤¤Þ¤¹¡£¤½¤¦¤¹¤ë¤È¡¢¥¯¥¨¥ê¤ÏËè²ó¥Ñ¡¼¥¹¤ò¤ä¤êľ¤·¤µ¤ì¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£ - -¤³¤ÎÌäÂê¤Ï¡¢ PostgreSQL ¥Ð¡¼¥¸¥ç¥ó8.3 °Ê¹ß¤Ç¤Ïµ¯¤­¤Þ¤»¤ó¡£ - -4.20) ¤É¤Î¤è¤¦¤Ê¥ì¥×¥ê¥±¡¼¥·¥ç¥ó¤Î¥½¥ê¥å¡¼¥·¥ç¥ó¤¬¤¢¤ê¤Þ¤¹¤«¡© - -¡Ö¥ì¥×¥ê¥±¡¼¥·¥ç¥ó¡×¤È°ì¸À¤Ç¤¤¤¤¤Þ¤¹¤¬¡¢¥ì¥×¥ê¥±¡¼¥·¥ç¥ó¤ò¤¹¤ë¤¿¤á¤Îµ»½Ñ¤Ï¤¤¤¯ -¤Ä¤«¤¢¤ê¡¢¤½¤ì¤¾¤ì¡¢ÍøÅÀ¤È·çÅÀ¤¬¤¢¤ê¤Þ¤¹¡£ - -¥Þ¥¹¥¿¡¿¥¹¥ì¡¼¥Ö¤Î¥ì¥×¥ê¥±¡¼¥·¥ç¥ó¤Ï¡¢Æɤߡ¿½ñ¤­¤Î¥¯¥¨¥ê¤ò¼õ¤±¼è¤ë¥·¥ó¥°¥ë¥Þ¥¹ -¥¿¤¬²Äǽ¤Ç¡¢¥¹¥ì¡¼¥Ö¤Ç¤ÏÆɤߡ¿SELECT¤ÎÌ䤤¹ç¤ï¤»¤À¤±¤ò¼õ¤±ÉÕ¤±¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹ -¡£ºÇ¤â¿Íµ¤¤¬¤¢¤ë¡¢¥Õ¥ê¡¼¤ÇÍøÍѤǤ­¤ë¡¢¥Þ¥¹¥¿¡Ý¥¹¥ì¡¼¥Ö¤ÎPostgreSQL¥ì¥×¥ê¥±¡¼¥· -¥ç¥ó¥½¥ê¥å¡¼¥·¥ç¥ó¤Ï¡¢ Slony-I ¤Ç¤¹¡£ - -¥Þ¥ë¥Á¡Ý¥Þ¥¹¥¿¤Î¥ì¥×¥ê¥±¡¼¥·¥ç¥ó¤Ï¡¢Æɤߡ¿½ñ¤­¤Î¥¯¥¨¥ê¤ò¼õ¤±¤È¤ê¡¢Ê£¿ô¤Î¥ì¥×¥ê -¥±¡¼¥È¤µ¤»¤ë¥³¥ó¥Ô¥å¡¼¥¿¤ËÁ÷¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤³¤Îµ¡Ç½¤Ï¡¢¥µ¡¼¥Ð´Ö¤ÎÊѹ¹¤ÎƱ´ü -¤¬É¬Íפʤ¿¤á¡¢À­Ç½¤Ë½ÅÂç¤Ê¾×·â¤òÍ¿¤¨¤Þ¤¹¡£ PGCluster ¤Ï¡¢¤³¤Î¤è¤¦¤Ê¥½¥ê¥å¡¼¥·¥ç -¥ó¤È¤·¤ÆPostgreSQL¤Î¤¿¤á¤Ë¥Õ¥ê¡¼¤ÇÍøÍѤǤ­¤ë¤â¤Î¤È¤·¤Æ¡¢ºÇ¤â¿Íµ¤¤¬¤¢¤ê¤Þ¤¹¡£ - -¤³¤Î¾¤Ë¤â¡¢¾¦ÍѤä¥Ï¡¼¥É¥¦¥§¥¢¡Ý¥Ù¡¼¥¹¤Î¥ì¥×¥ê¥±¡¼¥·¥ç¥ó¥½¥ê¥å¡¼¥·¥ç¥ó¤¬¤¤¤í¤¤ -¤í¤Ê¥ì¥×¥ê¥±¡¼¥·¥ç¥ó¥â¥Ç¥ë¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Þ¤¹¡£ - -4.21)¥Æ¡¼¥Ö¥ë¤È¥«¥é¥à¤Î̾Á°¤¬¥¯¥¨¥ê¡¼¤ÎÃæ¤Çǧ¼±¤µ¤ì¤Ê¤¤¤Î¤Ï¤Ê¤¼¤Ç¤¹¤«¡©¤Ê¤¼Âçʸ -»ú²½(¥­¥ã¥Ô¥¿¥é¥¤¥º)¤Ï²¹Â¸¤µ¤ì¤Ê¤¤¤Î¤Ç¤¹¤«? - -̾Á°¤¬Ç§¼±¤µ¤ì¤Ê¤¤¡¢ºÇ¤â°ìÈÌŪ¤Ê¸¶°ø¤Ï¡¢¥Æ¡¼¥Ö¥ë¤òºîÀ®¤¹¤ëºÝ¤Ë¡¢¥Æ¡¼¥Ö¥ë¤ä¥«¥é -¥à¤ò°Ï¤¦Æó½Å°úÍÑÉä¤Î»ÈÍѤǤ¹¡£Æó½Å°úÍÑÉä¤ò»È¤¦¤È¡¢¥Æ¡¼¥Ö¥ë¤È¥«¥é¥à¤Î̾Á°¡Ê¼±ÊÌ -»Ò¤È¤¤¤¤¤Þ¤¹¡Ë¤ÏÂçʸ»ú¤È¾®Ê¸»ú¤Î¶èÊ̤ò¤·¤Æ³ÊǼ¤µ¤ì¤Þ¤¹¡£¤·¤¿¤¬¤Ã¤Æ¡¢pgAdmin¤Î¤è -¤¦¤Ë¥Æ¡¼¥Ö¥ëºîÀ®¤Î¤È¤­¤Ë¼«Æ°Åª¤ËÆó½Å°úÍÑÉä¤ò»È¤¦¤â¤Î¤Ï¥¯¥¨¥ê¤ÎÃæ¤Ç¤½¤ì¤é¤Î̾Á° -¤ò»È¤¦¤È¤­¤ËÆó½Å°úÍÑÉä¤òÉÕ¤±¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¤³¤È¤ò°ÕÌ£¤·¤Þ¤¹¡£¤³¤Î¤¿¤á¡¢¼±ÊÌ»Ò -¤òǧ¼±¤µ¤»¤ë¤¿¤á¤Ë¤Ï°Ê²¼¤Î¤¤¤º¤ì¤«¤ò¿´¤¬¤±¤Þ¤¹¡£ - - ¡¦ ¥Æ¡¼¥Ö¥ë¤òºîÀ®¤¹¤ë¤È¤­¤ËÆó½Å°úÍÑÉä¤Ç¼±Ê̻Ҥò°Ï¤¦¤³¤È¤òÈò¤±¤ë - ¡¦ ¼±Ê̻ҤˤϾ®Ê¸»ú¤À¤±¤ò»È¤¦ - ¡¦ ¥¯¥¨¥ê¤ÎÃæ¤Ç»²¾È¤¹¤ë¤È¤­¤ÏÆó½Å°úÍÑÉä¤Ç¼±Ê̻Ҥò°Ï¤¦ - -¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬ - - ÆüËܸì¤Ë´Ø¤¹¤ë¼ÁÌä - -5.1)ÆüËܸ줬¤¦¤Þ¤¯°·¤¨¤Ê¤¤¤Î¤Ï¤Ê¤¼¤Ç¤¹¤«¡© - -createdb -E¥³¥Þ¥ó¥É¥ª¥×¥·¥ç¥ó¤Ë UTF8 ¤¢¤ë¤¤¤Ï EUC_JP ¤Î¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤ò»ØÄꤷ -¤Æ¥Ç¡¼¥¿¥Ù¡¼¥¹¤òºîÀ®¤¹¤ë¤«¡¢¼¡¤Î¤è¤¦¤Ë¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤ò»ØÄꤷ¤Æ¥Ç¡¼¥¿¥Ù¡¼¥¹¤ò -ºîÀ®¤·¤Æ¤¯¤À¤µ¤¤¡£ - - CREATE DATABASE dbname WITH ENCODING 'UTF8'; - ¤â¤·¤¯¤Ï¡¢ - CREATE DATABASE dbname WITH ENCODING 'EUC_JP'; - -5.2) psql ¤ÇWindows¤«¤é¥¢¥¯¥»¥¹¤·¤¿¤È¤­¤Ë¡¢ÆüËܸ줬ʸ»ú²½¤±¤¹¤ë¤Î¤Ç¤¹¤¬¡© - -psql¤ÎÃæ¤Ç¥¯¥é¥¤¥¢¥ó¥È¤Î¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤ò»ØÄꤷ¤Æ¤¯¤À¤µ¤¤¡£ - - SET client_encoding TO 'SJIS' - -PostgreSQL¥Ç¡¼¥¿¥Ù¡¼¥¹¤Î¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤Ë»È¤¨¤ëÆüËܸìʸ»ú¥³¡¼¥É¤Ï EUC_JP ¤« -UTF-8(UNICODE) ¤Ç¤¢¤ë¤¿¤á¡¢Shift-JISɽ¼¨¤Î¥³¥Þ¥ó¥É¥×¥í¥ó¥×¥È¤«¤é¤Ï¡¢ -client_encoding¤òÀßÄꤷ¤Æ¤ª¤«¤Ê¤¤¤È¡¢ÆüËܸì¤òɽ¼¨¤¹¤ëºÝ¤Ëʸ»ú²½¤±¤¬¤ª¤­¤Þ¤¹¡£ - -5.3) PostgreSQL¤ÇÆüËܸì¤ÎÁ´Ê¸¸¡º÷¤Ï¤Ç¤­¤Þ¤¹¤«¡© - -¥Ð¡¼¥¸¥ç¥ó8.3¤Ç¤Ï¡¢TSearch2Á´Ê¸¸¡º÷µ¡Ç½¤¬ËÜÂΤËÁȤ߹þ¤Þ¤ì¤Þ¤·¤¿¤¬¡¢¤½¤Î¤Þ¤Þ¤Ç¤Ï -ÆüËܸì¤Î¥¤¥ó¥Ç¥Ã¥¯¥¹¤òºî¤ë»ö¤¬Æñ¤·¤¤¾õ¶·¤Ç¤¹¡£¤³¤ì¤ò²ò·è¤¹¤ë¤¿¤á¤Ë¡¢Takahiro -Itagaki»á¤Ë¤è¤Ã¤Æ¡¢Mecab¤È¤¤¤¦·ÁÂÖÁDzòÀÏ¥×¥í¥°¥é¥à¤òÍøÍѤ¹¤ëÆüËܸìÁ´Ê¸¸¡º÷¥â¥¸ -¥å¡¼¥ë textsearch_ja ¤¬³«È¯¤µ¤ì¤Þ¤·¤¿¡£TSearch2Âбþ¤ÎÀ½Éʤò¤ï¤º¤«¤Ë²þ½¤¤¹¤ë¤³¤È -¤ÇÆüËܸìÂбþ¤Ë¤­¤Þ¤¹¡£ - -¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬¨¬ - -¡ÖÆüËܸìÈǤˤĤ¤¤Æ¡× - -[ÌõÃí¡§ - ÆüËܸìÈǤÎÀ½ºî¤Ë¤Ä¤¤¤Æ¤Ï°Ê²¼¤ÎÄ̤ê¤Ç¤¹¡£ - - ºÇ½ª¹¹¿·Æü: 2008ǯ10·î8Æü - ËÝÌõ¼Ô: ·¬Â¼ ½á (Jun KUWAMURA ) - - ¤³¤ÎFAQ¤ÎÏÂÌõ¤ÎºîÀ®¤Ë¤¢¤¿¤ê¶¨ÎϤò¤·¤Æ¤¯¤À¤µ¤Ã¤¿Êý¡¹(·É¾Î¤Ïά¤µ¤»¤Æ¤¤¤¿¤À¤­¤Þ¤¹): - - ÅÄÃç Ì­(Minoru TANAKA ) - Àаæ ãÉ×(Tatsuo ISHII ) - óîÆ£ ÃοÍ(Tomohito SAITOH ) - ÇϾì È¥(Hajime BABA ) - ²¬ËÜ °ì¹¬(Kazuyuki OKAMOTO ) - ¾®¿û ¾¼°ì(Shoichi Kosuge ) - »³²¼ µÁÇ·(Yoshiyuki YAMASHITA ) - ¶­ ¿¿ÂÀϺ(Sintaro SAKAI ) - À¸±Û ¾»¸Ê(Masami OGOSHI ) - ÀÐÀî ½Ó¹Ô(Toshiyuki ISHIKAWA ) - ËÜÅÄ Ìй­(Shigehiro HONDA ) - ¤»¤» ¤¸¤å¤ó(Jun SESE ) - ¿Àë ±Ñ¹§(Hidetaka KAMIYA ) - ¿û¸¶ ÆØ(Atsushi SUGAWARA ) - °ðÍÕ ¹áÍý(Kaori Inaba ) - ˧²ì Ì÷»Ë(Yasufumi Haga ) - - ¤ò¤Ï¤¸¤á¡¢¥Ý¥¹¥È¥°¥ì¥¹¤Ë´Ø¤¹¤ëÏÃÂêË­ÉÙ¤ÊÆüËܸìPostgreSQL¥á¡¼¥ê¥ó¥°¥ê¥¹¥È¡¢ - ÏÂÌõ¤Î¤­¤Ã¤«¤±¤òºî¤Ã¤Æ¤¯¤ì¤¿¤ê¡¢¤¤¤Ä¤â¥Á¥§¥Ã¥¯¤ò¤·¤Æ¤¯¤ì¤ë - JF(Linux Japanese FAQ)¥×¥í¥¸¥§¥¯¥È¡¢FreeBSD ¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó¥×¥í¥¸¥§¥¯¥È - ¤ÎÊý¡¹¡¢¤½¤ì¤«¤é¡¢Ä¾Àܤ¢¤ë¤¤¤Ï´ÖÀÜŪ¤Ë¤«¤«¤ï¤Ã¤Æ¤¯¤À¤µ¤ë¤¹¤Ù¤Æ¤Î¥ª¡¼¥×¥ó¥½¡¼¥¹ - ¥³¥ß¥å¥Ë¥Æ¥£¤Î¤ß¤Ê¤µ¤Þ¤Ë´¶¼Õ¤¤¤¿¤·¤Þ¤¹¡£ - - - ¤³¤ÎËÝÌõʸ½ñ¤Ï ËÜ²È "Frequently Asked Questions" ¤Î¥Ú¡¼¥¸¤Ë "Japanese FAQ" - ¤È¤¤¤¦¹àÌܤǤ¢¤ê¤Þ¤¹¡£ - - ¤Þ¤¿¡¢ºÇ¿·ÈǤϰʲ¼¤Î¥µ¥¤¥È¤Ë¤¢¤ê¤Þ¤¹¡£ - http://www.postgresql.jp/wg/jpugdoc/ ¡ÖJPUGʸ½ñ¡¦½ñÀÒ´ØϢʬ²Ê²ñ¡× - http://www.linux.or.jp/JF/JFdocs/INDEX-database.html ¡ÖLinux JF¥×¥í¥¸¥§¥¯¥È¡× http://www.linet.gr.jp/~juk/pgsql/ ¡ÖPostgreSQL Notes for Japanese¡×¡ÊËÝÌõ¼Ô¥Ú¡¼¥¸¡Ë - - ¤Ê¤ª¡¢¤³¤ÎÏÂÌõ¤Ë´Ø¤¹¤ë¤´°Õ¸«¡¦¤´¼ÁÌä¤Ï(juk at postgresql.jp)¤Þ¤Ç¤ª´ó¤»¤¯¤À¤µ¤¤¡£ - ¡Ê¢¨ ¥á¡¼¥ë¥¢¥É¥ì¥¹¤Î " at " ¤ÏŬÀڤ˾¤·¤Æ¤¯¤À¤µ¤¤¡£È¾³Ñ¤Î "@" ¤Ç¤¹¡£¡Ë -] - diff --git a/doc/FAQ_polish b/doc/FAQ_polish deleted file mode 100644 index ff50ec26e3..0000000000 --- a/doc/FAQ_polish +++ /dev/null @@ -1,1279 +0,0 @@ - - Frequently Asked Questions (FAQ) o PostgreSQL - - Ostatnia aktualizacja: Sobota Luty 7 22:16:21 EST 2004 - - Ostatnia aktualizacja tl/umaczenia: Piatek Marzec 5 19:31:12 EST 2004 - - Obecny maintainer: Bruce Momjian (pgman@candle.pha.pa.us) - - Tl/umaczenie: Marcin Mazurek (m.mazurek@netsync.pl) - - Najbardziej aktualna wersje tego dokumentu mozna znalezc pod adresem: - http://www.PostgreSQL.org/docs/faqs/FAQ.html. - - Odpowiedzi na pytania dotyczace konkretnych systemów operacyjnych - mozna znalezc pod adresem: http://www.PostgreSQL.org/docs/index.html. - _________________________________________________________________ - - Pytania ogólne - - 1.1) Co to jest PostgreSQL? Jak to wymawiac? - 1.2) Jaka licencja chroniony jest PostgreSQL? - 1.3) Na jakich systemach Unixowych dzial/a PostreSQL? - 1.4) Na jakich nie-Unixowych systemach dzial/a PostgreSQL? - 1.5) Skad moge sciagnac PostgreSQL? - 1.6) Gdzie mozna szukac wsparcia technicznego? - 1.7) Jaka jest ostatnia dostepna wersja? - 1.8) Jaka dokumentacja jest dostepna? - 1.9) Gdzie moge znalezc informacje o znanych bl/edach czy brakujacych - rozwiazanich? - 1.10) Jak moge sie nauczyc SQL? - 1.11) Czy PostgreSQL ma rozwiazany problem Y2K? - 1.12) Jak moge sie przyl/aczyc do grupy osób bezposrednio pracujacych - nad rozwojem PostgreSQL? - 1.13) Jak moge zgl/aszac bl/edy? - 1.14) Jak mozna porównac PostgreSQL w stosunku do innych DBMS? - 1.15) W jaki sposób moge wesprzec finansowo PostgreSQL? - - Pytania uzytkowników - - 2.1) Czy sa jakies driwery ODBC dla PostgreSQL? - 2.2) Jakie istnieja narzedzia pozwalajace na dostep do PostgreSQL - przez www? - 2.3) Czy istnieje jakies GUI dla PostgreSQL? - 2.4) Za pomoca jakich jezyków programowania mozna sie komunikowac z - PostgreSQL? - - Pytania dotyczace administracji - - 3.1) Jak moge zainstalowac PostgreSQL w innej lokalizacji niz - /usr/local/pgsql? - 3.2) Podczas startu postmaster'a, otrzymuje komunikat: Bad System Call - lub "core dumped". Dlaczego? - 3.3) Podczas startu postmaster'a, otrzymuje komunikat o bl/edzie: - IpcMemoryCreate. Dlaczego? - 3.4) Podczas startu postmaster'a, otrzymuje komunikat o bl/edzie: - IpcSemaphoreCreate. Dlaczego? - 3.5) W jaki sposób moge kontrolowac pol/aczenia z innych hostów? - 3.6) Jak powinienem skonfigurowac system baz danych aby uzyskac lepsza - wydajnosc? - 3.7) Jakie sa mozliwosci wyszukiwania bl/edów? - 3.8) Skad sie bierze komunikat: "Sorry, too many clients" podczas - próby pol/aczenia sie z baza danych? - 3.9) Jakie pliki znajduja sie w pg_temp? - 3.10) Dlaczego konieczne jest przy upgradzie PostgreSQL korzystanie ze - skryptów dump i restore? - - Pytania dotyczace uzytkowania - - 4.1) Jaka jest róznica pomiedzy kursorami binarnymi (binary cursors) i - zwykl/ymi kursorami (normal cursors)? - 4.2) Jak moge pobrac za pomoca SELECT jedynie kilka pierwszych wyników - zapytania? - 4.3) Jak moge uzyskac liste wszystkich tabel czy innych rzeczy pod - psql? - 4.4) Jak usunac kolumne z tabeli lub zmienic jej typ? - 4.5) Jaki jest maksymalny rozmiar dla rzedu, tabeli i bazy danych? - 4.6) Jak duzo miejsca w bazie danych jest potrzebne aby przechowac - dane ze zwyczajnego pliku tekstowego? - 4.7) Jak moge sprawdzic jakie tabele, klucze, bazy danych i - uzytkownicy sa utworzeni? - 4.8) Moje zapytania sa wolne lub nie uzywaja kluczy. Dlaczego? - 4.9) Jak moge sprawdzic w jakis sposób "query optimizer" wykonuje moje - zapytanie? - 4.10) Co to jest "R-tree index"? - 4.11) Co to jest "Genetic Query Optimizer"? - 4.12) Jak moge uzywac wyrazen regularnych w zapytaniach i zapytan - case-insensitive w wyrazeniach regularnych? Jak korzystac z indeksów - dla zapytan case-insensitive? - 4.13) Jak sprawdzic w zapytaniu czy pole ma wartosc NULL? - 4.14) Jaka jest róznica pomiedzy róznymi typami tekstowymi (character - types)? - 4.15.1) Jak moge utworzyc pole typu int, które samo zwieksza swoja - wartosc? - 4.15.2) Jak pobrac wartosc pola typu SERIAL po wykonaniu insert'u? - 4.15.3) Czy uzycie currval() i nextval() nie doprowadzi do "race - condition" z innymi uzytkownikami? - 4.15.4) Dlaczego numery sekwencji nie sa ponownie uzywane przy - przerwaniu transakcji? Skad sie biora luki w numerowaniu kolumny - tabeli sekwencjami/SERIALem? - 4.16) Co to jest OID? Co to jest TID? - 4.17) Jakie jest znaczenie niektórych terminów w PostgreSQL? - 4.18) Skad bierze sie ten bl/ad: "ERROR: Memory exhausted in - AllocSetAlloc()"? - 4.19) Jak sprawdzic jakiej wersji PostgreSQL uzywam? - 4.20) Dlaczego operacje, które wykonuje na duzych obiektach - "large-object" zwracaja komunikat: "invalid large obj descriptor"? - 4.21) Jak stworzyc kolumne której domyslna wartoscia bedzie biezacy - czas? - 4.22) Dlaczego zapytania uzywajace IN sa takie wolne? - 4.23) Jak wykonac "outer join"? - 4.24) Jak wykonywac zapytanie uzywajace kilku baz danych jednoczesnie? - 4.25) Jak zwrócic w funkcji wiele rzedów lub kolumn? - 4.26) Dlaczego nie moge w sposób pewny tworzyc/usuwac tabel - tymczasowych w funkcjach PL/PgSQL? - 4.27) Jakie sa mozliwosci replikacji w PostgreSQL? - 4.28) Jakie mozliwosci szyfrowania oferuje PostgreSQL? - - Rozwijanie PostgreSQL - - 5.1) Napisal/em wl/asna funkcje. Kiedy uzyje jej w psql, program - zrzuca pamiec (dump core)? - 5.2) Jak moge dodac/zgl/osic nowe typy czy funkcje do PostgreSQL? - 5.3) Jak napisac funkcje C zwracajaca krotke (tuple)? - 5.4) Zmienil/em plik zródl/owy. Dlaczego po rekompilacji nie widac - zmiany? - _________________________________________________________________ - - Pytania ogólne - - 1.1) Co to jest PostgreSQL? Jak to wymawiac? - - PostgreSQL wymawia sie Post-Gres-kju-el. Czesto podczas rozmów uzywany - jest termin "Postgres" - - PostgreSQL jest rozszerzeniem systemu zarzadzania bazami danych - - POSTGRES, kolejna generacja rozwojowego prototypu DBMS. Mimo, ze - PostgreSQL zachowal/ bardzo dobrze zbudowany model danych (data model) - i bogaty zestaw typów danych POSTGRES'a, zastapil/ PostQuel'owy jezyk - zapytan z rozbudowanym podzbiorem jezyka SQL. PostgreSQL jest - oprogramowaniem darmowym z dostepnymi cal/ymi zródl/ami. - - Rozwój PostgreSQL jest prowadzony przez grupe ludzi z Internetu, - komunikujacych sie poprzez mailowe listy dyskusyjne PostgreSQL. - Obecnym koordynatorem jest Marc G. Fournier (scrappy@PostgreSQL.org). - (Zobacz pytanie 1.6 jak sie przyl/aczyc). Ta grupa ludzi jest - odpowiedzialna za cal/y rozwój PostgreSQL. PostgreSQL jest projektem - nie kontrolowanym przez zadna firme, aby wziac udzial/ w jego rozwoju - sprawdz, http://www.PostgreSQL.org/docs/faqs/FAQ_DEV.html - - Autorami PostgreSQL 1.01 byli Andrew Yu and Jolly Chen. Wiele innych - osób pomogl/o przy portowaniu, testowaniu, debugowaniu i rozwijaniu - kodu. Oryginalny kod Postgresa, na którym zostal/ oparty PostgreSQL, - byl/ wysil/kiem studentów oraz pracowników pracujacych pod - kierownictwem profesora Michael'a Stonebraker'a z University of - California w Berkeley. - - Oryginalna nazwa oprogramowania w Berkeley byl/ Postgres. Po dodaniu - obsl/ugi SQL w 1995, nazwa zostal/a zmieniona na Postgres95. Pod - koniec roku 1996 nazwa zostal/a zmieniona na PostgreSQL. - - 1.2) Jaka licencja chroniony jest PostgreSQL? - - PostgreSQL objety jest nastepujaca licencja: - - PostgreSQL Data Base Management System - - Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group - Portions Copyright (c) 1994-6 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. - - Tekst powyzej, jest klasyczna licencja BSD. Nie posiada ona zadnych - restrykcji co do uzywania kodu zródl/owego. Podoba nam sie i nie - zamierzamy jej zmieniac. - - 1.3) Na jakich systemach Unixowych dzial/a PostreSQL? - - PostgreSQL powinien dzial/ac na wszystkich nowych Unix-podobnych - systemach. Platformy, które zostal/y szczegól/owo przetestowane - podczas publikowania PostgreSQL sa wymienione w dokumentacji - opisujacej instalacje. - - 1.4) Na jakich nie-Unixowych systemach dzial/a PostgreSQL? - - Klient - - Mozliwa jest kompilacja bibliteki C libpq, psql oraz innych - interfejsów i uruchamianie ich na platformie MS Windows. W tym wypadku - klient jest uruchamiany na MS Windows a z serwerem komunikuje sie - poprzez TCP/IP. Serwer moze dzial/ac na dowolnej wspieranej platformie - Unixowej. Plik win32.mak jest dol/aczony do zródel/, aby mozna byl/o - stworzyc biblioteke libpq oraz program psql dzial/ajace w srodowisku - Win32. PostgreSQL moze sie takze komunikowac z klientami ODBC. - - Serwer - - Serwer moze byc uruchamiany na Windows NT i Win2k uzywajac bibliotek - Cygwin, Cygnus Unix/NT. W pliku pgsql/doc/FAQ_MSWIN znajdujacym sie w - zródl/ach lub pod adresem: - http://www.PostgreSQL.org/docs/faqs/text/FAQ_MSWIN na naszych - stronach. - - Obecnie prowadzone sa prace nad stworzeniem wersji dla MS Win - NT/200/XP. Jesli chcesz sie dowiedziec o obecnym statusie tych prac - zobacz http://techdocs.postgresql.org/guides/Windows and - http://momjian.postgresql.org/main/writings/pgsql/win32.html. - - Istnieje takze port pod Novell Netware 6 dostepny pod adresem - http://forge.novell.com. - - 1.5) Skad mozna sciagnac PostgreSQL? - - Gl/ówny serwer ftp z dostepem "anonymous" dla PostgreSQL znajduje sie - ftp://ftp.PostgreSQL.org/pub. jesli szukasz mirrorów sprawdz nasza - gl/ówna strone www. - - 1.6) Gdzie mozna szukac wsparcia technicznego? - - Adres gl/ównej listy mailowej: pgsql-general@PostgreSQL.org. Jest ona - przeznaczona dyskusjom dotyczacym spraw zwiazanych z PostgreSQL. Zeby - zapisac sie na liste, wyslij email z nastepujacymi liniami w tresci - maila (nie w temacie): - subscribe - end - - na adres: pgsql-general-request@PostgreSQL.org. - - Dostepna jest takze lista wysyl/ajaca digesty. Aby zapisac sie na nia, - wyslij email na adres: pgsql-general-digest-request@PostgreSQL.org z - trescia maila zawierajaca: - subscribe - end - - Digesty sa wysyl/ane do czl/onków listy, kiedy na gl/ówna liste dotrze - ok 30k wiadomosci. - - Dostepna jest takze lista poswiecona bl/edom znalezionym w PostgreSQL. - Aby zapisac sie na nia wyslij email na adres: - pgsql-bugs-request@PostgreSQL.org z trescia maila zawierajaca: - subscribe - end - - Lista poswiecona dyskusjom developerów jest dostepna pod adresem: - pgsql-hackers-request@PostgreSQL.org Aby sie na nia zapisac wyslij na - jej adres mail z trescia: - subscribe - end - - Dodatkowe informacje o listach mailowych dotyczacych PostgreSQL mozna - znalezc na stronach WWW PostgreSQL pod adresem: - - http://www.PostgreSQL.org - - W sieci EFNet istnieje kanal/ IRC #PostgreSQL. Ja, do pol/aczenia sie - z kanal/em uzywam Unixowego polecenia irc -c '#PostgreSQL' "$USER" - irc.phoenix.net. - - Lista firm oferujacych wsparcie na zasadach komercyjnych znajduje sie - pod adresem: http://techdocs.postgresql.org/companies.php. - - 1.7) Jaka jest ostatnia dostepna wersja? - - Ostatnia dostepna wersja PostgreSQL to 7.4.1. - - Planujemy publikowanie kolejnych wersji co szesc do osmiu miesiecy. - - 1.8) Jaka dokumentacja jest dostepna? - - Kilka manuali, stron podecznika man, oraz kilka przykl/adów do - testowania sa zal/aczone w samej dystrybucji. Znajduja sie one w - katalogu /doc. Manual moze byc takze przegladany poprzez strony www - pod adresem http://www.PostgreSQL.org/docs. - - Istnieja takze dwie ksiazki dostepne online pod adresami - http://www.PostgreSQL.org/docs/awbook.html i - http://www.commandprompt.com/ppbook/. Lista ksiazek o PostgreSQL, - które mozna kupic znajduje sie pod adresem - http://techdocs.PostgreSQL.org/techdocs/bookreviews.php. Zbiór - technicznych artykul/ów o PostgreSQL znajduje sie pod adresem - http://techdocs.postgresql.org/. - - psql posiada kilka wbudowanych polecen \d, za pomoca których mozna - sprawdzic informacje dotyczace typów, operatorów, funkcji, agregatów - itd. - - Na naszej stronie mozna znalezc duzo wiecej dokumentacji. - - 1.9) Gdzie mozna znalezc informacje o znanych bl/edach czy brakujacych - rozwiazanich? - - PostgreSQL wspiera rozszerzony podzbiór standardu SQL-92. Sprawdz - nasza liste TODO aby znalezc informacje o znanych problemach, - brakujacych rozwiazaniach czy przyszl/ych planach. - - 1.10) Jak moge sie nauczyc SQL? - - Ksiazka o PostgreSQL http://www.PostgreSQL.org/docs/awbook.html uczy - SQL. Jest jeszcze inna ksiazka o PostgreSQL dostepna pod adresem: - http://www.commandprompt.com/ppbook. Dobry tutorial mozesz znalezc pod - adresem: http://www.intermedia.net/support/sql/sqltut.shtm, oraz - http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM, - i http://sqlcourse.com. - - Jeszcze inny to "Teach Yourself SQL in 21 Days, Second Edition" pod - adresem: http://members.tripod.com/er4ebus/sql/index.htm - - Wielu z naszych uzytkowników poleca The Practical SQL Handbook, - Bowman, Judith S., et al., Addison-Wesley. Inni polecaja The Complete - Reference SQL, Groff et al., McGraw-Hill. - - 1.11) Czy PostgreSQL ma rozwiazany problem Y2K? - - Tak, bez problemu radzimy sobie z datami po roku 2000 AD, oraz przed - rokiem 2000 BC. - - 1.12) Jak moge sie przyl/aczyc do grupy osób bezposrednio pracujacych nad - rozwojem PostgreSQL? - - Przede wszystkim sciagnij ostatnie dostepne zródl/a i przeczytaj - dokumentacje przeznaczona dla developerów na naszej stronie www lub - dostepna takze w zródl/ach PostgreSQL. Nastepnie zapisz sie na listy - mailowe pgsql-hackers i pgsql-patches. I na koniec, wysyl/aj nam - wysokiej jakosci patch'e na liste pgsql-patches. - - Jest okol/o 12 osób, które maja uprawnienia do commit'owania w CVS - PostgreSQL'a. Kazdy z nich submitowal/ tak wiele wysokiej jakosci - patchy, ze stal/o sie niemozliwe dla obecnych commiterów byc z nimi na - biezaco, wiec musielismy im ufac i miec pewnosc, ze ich poprawki sa - wysokiej jakosci. - - 1.13) Jak moge zgl/aszac bl/edy? - - Zajrzyj na strone PostgreSQL BugTool, na której opisane sa wskazówki - jak zgl/aszac informacje o bl/edach. - - Zajrzyj takze na nasz ftp ftp://ftp.PostgreSQL.org/pub, aby sprawdzic - czy nie ma nowszych wersji PostgreSQL czy patchy. - - 1.14) Jak mozna porównac PostgreSQL w stosunku do innych DBMS? - - Jest kilka sposobów oceny softwaru: mozliwosci, wydajnosc, stabilnosc, - wsparcie i cena. - - Mozliwosci - PostgreSQL posiada mozliwosci dostepne w duzych, komercyjnych - systemach DBMS, takie jak transakcje, podzapytania - (subselects), triggery, widoki, klucze obce, referential - integrity, oraz wyrafinowany system blokowania. Mamy takze - wl/asciowsci których inni nie posiadaja, jak typy definiowane - przez uzytkownika, dziedziczenie, rules, multi-version - concurrency control, która redukuje problemy z blokowaniem - (lock contention). - - Wydajnosc - Wydajnosc PostgreSQL jest podobna do innych komercyjnych i open - source baz danych. W niektórych sytuacjach jest szybszy w - niektórych wolniejszy. W porównianiu do MySQL lub mniejszych - baz danych jestesmy szybsi przy wielu uzytkownikach, - skomplikowaych zapytaniach i duzym obciazeniu podczas. MySQL - jest szybszy dla prostych SELECTów wykonywanych przez niewielu - uzytkowników. Spowodowane jest to narzutem, który sie pojawia - przy transakcjach. Oczywiscie MySQL nie ma wiekszosci z - rozwiazan opisanych powyzej w sekcji Mozliwosci . PostgreSQL - zostal/ stworzony z mysla o stabilnosci, oraz szerokiej gamie - mozliwosci, ale mimo to staramy sie w kazdej wersji poprawiac - jego wydajnosc. Ciekawe porównanie PostgreSQL i MySQL mozna - znalezc pod adresem - http://openacs.org/philosophy/why-not-mysql.html Dodatkowo, - MySQL jest firma, która dystrybuuje jej produkty poprzez zasade - Open Source i wymaga wykupienia licencji w przypadku tworzenia - close-source software, co ie ma miejsca w przypadku PostgreSQL. - - Stabilnosc - Zdajemy sobie sprawe, ze DBMS musi byc stabilny, w przeciwnym - wypadku jest bez wartosci. Staramy sie publikowac kod stabilny, - dobrze przetestowany, z minimum mozliwych bl/edów. Kazde - wydanie poprzedza co najmniej miesiac testów wersji beta. - Patrzac na historie wydan PostgreSQL widac, ze dostarczamy - stabilne, dobrze sprawdzone wersje, które sa gotowe do uzycia w - srodowisku produkcyjnym. Myslimy, ze proces publikowania - kolejnych wersji opracowany przez nas jest jednym z lepszych - wsród innych twórców oprogramowania bazodanowego. - - Wsparcie - Dzieki naszym listom mailowym masz dostep do duzej liczby - programistów i uzytkowników, którzy pomagaja rozwiazac kazdy - napotkany problem. Chociaz nie mozemy gwarantowac znalezienia - rozwiazania danego problemu, nie róznimy sie w tym od innych - komercyjnych systemów DBMS. Bezposredni kontakt z - programistami, uzytkownikami, dokumentacja i kodem zródl/owym - sprawiaja, ze wsparcie oferowane PostgreSQL niejednokrotnie - jest lepsze niz w innych systemach DBMS. Istnieje takze - mozliwosc skorzystania z komercyjnego wsparcia dla tych, - których takiego rozwiazania potrzebuja. (Sprawdz ten punkt - FAQ.) - - Cena - Korzystanie z PostgreSQL jest darmowe, zarówno w przypadku - komercyjnym jak i niekomercyjnym. Mozesz korzystac z naszego - kodu zródl/owego w Twoim produkcie bez zadnych ograniczen, poza - tymi wymienionymi w licencji BSD przytoczonej powyzej. - - 1.15) W jaki sposób moge wesprzec finansowo PostgreSQL? - - PostgreSQL korzysta z najlepszej infrastruktury od samego poczatku - istnienia projektu, czyli roku 1996 kiedy rozpoczelismy prace. - Wszystko to zawdzieczamy Marc'owi Fournier'owi, który stworzyl/ ta - infrastrukture i zarzadza nia od lat. - - Wysokiej jakosci infrastruktura jest bardzo wazna dla kazdego projektu - open-source. Zapobiega przerwom w rozwoju projektu i jakimkolwiek - przestojom. - - Oczywiscie korzystanie z wysokiej jakosci infrastruktury nie jest - tanie. Istnieje wiele róznych miesiecznych, czy jednorazowych - wydatków, które trzeba ponosic aby wszystko dzial/al/o jak nalezy. - Jesli Ty, badz Twoja firma moze wspomóc finansowo rozwój PostgreSQL - odwiedz adres: http://store.pgsql.com/shopping/ gdzie opisane jest jak - to zrobic. - - Chociaz na stronie wspomniana jest nazwa PostgreSQL Inc, "datki" sa - przeznaczone jedynie na rozwój projektu PostgreSQL i nie sa - przeznaczane na finansowanie jakiejkolwiek firmy. Jesli wolisz, mozesz - wysl/ac czek na adres kontaktowy. - _________________________________________________________________ - - Jesli mozesz sie pochwalic udanymi wdrozeniami PostgreSQL, prosimy - abys zgl/osil/ nam to na stronie: http://advocacy.postgresql.org. - - User Client Questions - - 2.1) Czy sa jakies driwery ODBC dla PostgreSQL? - - Dostepne sa dwa driwery ODBC: PsqlODBC i OpenLink ODBC. - - Mozesz pobrac PsqlODBC z adresu - http://gborg.postgresql.org/project/psqlodbc/projdisplay.php - - OpenLink ODBC moze byc pobrany z adresu: http://www.openlinksw.com. - Wspól/pracuje ze standardowym oprogramowaniem klienckim ODBC wiec w - ten sposób mozesz korzystac z PostgreSQL ODBC dostepnego na kazdej - pltaformie która wspiera (Win, Mac, Unix, VMS). - - Autorzy beda prawdopodobnie sprzedawac ten produkt osobom które - wymagaja komercyjnego wsparcia, ale wersja darmowa bedzie zawsze - dostepna. Wszystkie pytania mozesz wysyl/ac na adres: - postgres95@openlink.co.uk. - - 2.2) Jakie istnieja narzedzia pozwalajace na dostep do PostgreSQL przez - www? - - Dobry podrecznik dla poczatkujacych o dostepie do bazy danych przez - www mozesz znalezc pod adresem: http://www.webreview.com - - Do integracji z www, swietnym rozwiazaniem jest PHP. Mozesz znalezc - wiecej informacji na ten temat pod adresem http://www.php.net. - - Wiele osób w przypadku skomplikowanych rozwiazan uzywa Perl'a i - modul/u CGI.pl lub mod_perl. - - 2.3) Czy istnieje jakies GUI dla PostgreSQL? - - Tak, istnieje kilka interfejsów graficznych dla PostgreSQL. Wsród nich - PgAccess ( http://www.pgaccess.org), PgAdmin III - (http://www.pgadmin.org), RHDB Admin (http://sources.redhat.com/rhdb/ - ) oraz Rekall ( http://www.thekompany.com/products/rekall/, - komercyjny). Istnieje takze PHPPgAdmin ( - http://phppgadmin.sourceforge.net/ ), webowy interfejs dla PostgreSQL. - - Wiecej informacji na ten temat znajduje sie pod adresem See - http://techdocs.postgresql.org/guides/GUITools. - - 2.4) Za pomoca jakich jezyków programowania mozna sie komunikowac z - PostgreSQL? - - Najbardziej popularne jezyki posiiadaja wl/asny interfejs dla - PostgreSQL. Sprawdz liste rozszerzen dla intersujacego Ciebie jezyka - programowania. - - Ze zródl/ami PostreSQL dystrubuowane sa interfejsy dla nastepujacych - jezyków programowania: - * C (libpq) - * Embedded C (ecpg) - * Java (jdbc) - * Python (PyGreSQL) - * TCL (libpgtcl) - - Inne interfejsy sa dostepne pod adresem: http://gborg.postgresql.org w - sekcji Drivers/Interfaces. - _________________________________________________________________ - - Pytania dotyczace administracji - - 3.1) Jak moge zainstalowac PostgreSQL w innej lokalizacji niz - /usr/local/pgsql? - - Uzyj opcji --prefix podczas uruchamiania skryptu configure. - - 3.2) Podczas startu postmaster'a, otrzymuje komunikat o bl/edzie: Bad - System Call lub "core dumped". Dlaczego? - - Ten bl/ad moze byc wynikiem wielu problemów, ale na poczatek sprawdz - czy masz zainstalowane rozszerzenia systemu V w jadrze systemu. - PostgreSQL wymaga do pracy zainstalowanej obsl/ugi pamieci dzielonej i - semaforów. - - 3.3) Podczas startu postmaster'a, otrzymuje komunikat o bl/edzie: - IpcMemoryCreate. Dlaczego? - - Albo nie masz poprawnie skonfigurowanej obsl/ugi pamieci dzielonej w - jadrze systemu, albo musisz zwiekszyc jej dostepny rozmiar. Dokl/adna - ilosc jaka potrzebujesz jest zalezna od architektury systemu na jakim - pracujesz, jak duzo buforów oraz jak duzo procesów backendu - skonfigurowal/es dla postmaster'a. Dla wiekszosci systemów, z domyslna - liczba buforów i procesów potrzebujesz minimum w przyblizeniu 1MB. - Zobacz PostgreSQL Administrator's Guide gdzie szczegól/owo zostal/o - opisane wykorzystanie pamieci dzielonej i semaforów. - - 3.4) Podczas startu postmaster'a, otrzymuje komunikat o bl/edzie: - IpcSemaphoreCreate. Dlaczego? - - Jesli tresc bl/edu brzmi: IpcSemaphoreCreate: semget failed (No space - left on device) oznacza to, ze jadro systemu nie jest skonfigurowane - do obsl/ugi wystarczajacej liczby semaforów. Postgres wymaga jednego - semafor'a na potencjalny jeden proces backend. Tymczasowym - rozwiazaniem jest uruchomienie programu postmaster z mniejsza - maksymalna liczba procesów backend. Uzyj opcji -N z parameterem - mniejszym od domyslnego - 32. Bardziej trwal/ym rozwiazaniem jest - zwiekszenie parametrów SEMMNS i SEMMNI jadra twojego systemu. - - Niedzial/ajace semafory moga spowodowac niepoprawne zamkniecie systemu - w czasie intensywnego korzystania z bazy. - - Jesli tresc bl/edu jest inna, moze to oznaczac, ze obsl/uga semaforów - nie zostal/a wl/aczona do jadra wcale. Zobacz PostgreSQL - Administrator's Guide po bardziej szczegól/owe informacje o pamieci - dzielonej i semaforach. - - 3.5) W jaki sposób moge kontrolowac pol/aczenia z innych hostów? - - Domyslnie PostgreSQL pozwala jedynie na pol/aczenia za pomoca socketów - Unixowych z lokalnego hosta. Inne hosty nie beda mogl/y sie pol/aczyc - z serwerem dopóki nie zostanie dodana opcja -i do postmaster'a, oraz - nie umozliwi sie autoryzacji na podstawie adresu hostów modyfikujac - odpowiednio plik $PGDATA/pg_hba.conf. To zmiany pozwola na pol/aczenia - TCP/IP. - - 3.6) Jak powinienem skonfigurowac system baz danych aby uzyskac lepsza - wydajnosc? - - Indeksy bez watpienia moga przyspieszyc wykonywanie zapytan. Polecenie - EXPLAIN pozwala zobaczyc jak PostgreSQL interpretuje Twoje zapytanie i - które indeksy sa uzywane. - - Jesli wykonujesz bardzo duzo INSERTów, moze warto je wykonac za pomoca - jednego duzego pliku uzywajac polecenia COPY. Jest to duzo szybsze niz - pojedyncze INSERTy. Po drugie polecenia SQL nie zawarte w bloku - okreslajacym transakcje - BEGIN WORK/COMMIT, sa traktowane jako - pojedyncza transakcja. Rozwaz wykonanie kilku polecen/zdan SQL w - jednym bloku transakcji. To redukuje narzut nakl/adany przez - transakcje. Przy duzych zmianach w danych, warto usunac i stworzyc na - nowo indeksy. - - Jest kilka opcji pozwalajacych na poprawienie wydajnosci. Mozesz - wyl/aczyc fsync() poprzez uruchomienie postmaster'a z opcjami -o -F. - To spowoduje, ze fsync() nie bedzie zrzucal/ danych na dysk po kazdej - transakcji. - - Mozesz takze uruchomic postmaster'a z opcja -B aby zwiekszyc wielkosc - pamieci dzielonej uzywanej przez procesy backendów. Jesli ustawisz ta - wartosc zbyt wysoko i przekroczysz limity ustawione przez kernel na - pamiec dzielona, postmaster moze sie nie uruchomic. Kazdy bufor - zajmuje 8K a domyslna ilosc buforów to 64. - - Mozesz takze uzyc opcji -S dla backendu aby zwiekszyc maksymalna - wartosc pamieci uzywana przez proces backendu podczas sortowania. - Opcja -S jest ustawiana wartoscia podawana w kilobajtach, domyslna - wartosc to 512K. - - Mozesz takze uzyc polecenia CLUSTER aby pogrupowac dane w tabelach wg - indeksu. Zobacz opis polecenia CLUSTER w manualu zeby dowiedziec sie - wiecej. - - 3.7) Jakie sa mozliwosci wyszukiwania bl/edów? - - PostgreSQL ma kilka mozliwosci na raportowanie informacji o jego - statusie, które moga byc przydatne przy debugowaniu procesu. - - Przede wszystkim uruchom skrypt configure z opcja --enable-cassert, - wiele funkcji assert() monitoruja postep procesu backend i zatrzymuja - program kiedy wydarzy sie cos nieoczekiwanego. - - Zarówno postmaster jak i postgres maja kilka opcji do debugowania. Za - kazdym razem kiedy uruchamiasz postmaster'a, upewnij sie, ze wysyl/asz - standardowe wyjscie i error do pliku z logami, np. w ten sposób: - cd /usr/local/pgsql - ./bin/postmaster >server.log 2>&1 & - - To utworzy plik server.log w gl/ównym katalogu PostgreSQL. Ten plik - zawiera pozyteczne informacje o problemach i bl/edach, które - wydarzyl/y sie podczas pracy serwera. Postmaster posiada opcje -d, - która pozwala na raportowanie bardzo szczególowych informacji. Do - opcji -d podajemy liczbe, która okresla szczegól/owosc wysyl/anych - informacji. Musisz miec swiadomosc, ze wysoki poziom logowania bedzie - powodowal/ tworzenie bardzo duzych plików z logami. - - Jesli postmaster nie zostal/ uruchomiony, mozesz uruchomic - postgres'owy backend z linii polecen, i uruchomic Twoje polecenie SQL - bezposrednio na nim. Taki sposób jest polecany jedynie w przypadku - debugowania. Zwróc uwage, ze w tym wypadku zapytanie konczy znak nowej - linii a nie srednik. Jesli skompilowal/es z opcjami debugowania mozesz - uzyc debuggera aby sprawdzic co sie dzieje. Poniewz backend nie - zostal/ uruchomiony przez postmaster'a, nie dzial/a w identycznym - srodowisku, co oznacza ze powtórzenie warunków w jakich wystapil/y - problemy moze byc problemem. - - Jesli postmaster dzial/a, uruchom psql w jednym z okien, nastepnie - znajdz PID procesu postgres uzywanego przez psql. Uzyj debuggera aby - do PID'u postgres'a. Mozesz ustawiac pul/apki (breakpoints) w - debuggerze i wykonywac zapytania z psql. Jesli debugujesz uruchamianie - postgres'a, mozesz ustawic zmienna PGOPTIONS="-W n", nastepnie - uruchomic psql. Opcja ta pozwoli spowolnic uruchomienie na n sekund - abys mógl/ sie pol/aczyc z procesem za pomoca debugera, ustawic - jakiekolwiek pul/apki i kontynuowac proces uruchamiania. - - postgres moze byc uruchamiany z opcjami -s, -A i -t, które moga byc - bardzo przydatne przy debuggowaniu i ocenie wydajnosci. - - Mozesz takze skompilowac z profilingiem aby zobaczyc jakie funkcje ile - czasu wykonuja sie. Pliki profilowane dla backendu zostana umieszczone - w katalogu pgsql/data/base/dbname. Pliki profilu klienta zostana - umieszczone w biezacym katalogu klienta. Linux wymaga aby kompilowac z - opcja -DLINUX_PROFILE aby profilowanie odbywal/o sie poprawnie. - - 3.8) Skad sie bierze komunikat: "Sorry, too many clients" podczas próby - pol/aczenia sie z baza danych? - - Musisz zwiekszyc limit ilosci jednoczesnych procesów bacekendu dla - procesu postmaster'a. - - Domyslny limit to 32 procesy. Mozesz go zwiekszyc przez restart - postmaster z odpowiednia wartoscia ustawiana opcje -N w pliku - postgresql.conf. - - Wez pod uwage, ze jesli zwiekszysz wartosc podana w opcji -N na wiecej - niz 32 musisz takze zwiekszyc wartosc w opcji -B ponad jej domyslna - wartosc 64; wartosc -B musi byc co najmniej dwa razy wieksza od - wartosci podanej w opcji -N, a prawdopodobnie powinna byc w - rzeczywistosci jeszcze wieksza dla optymalnej wydajnosci. Dla duzej - liczby procesów backendu na pewno zauwazysz, ze trzeba zwiekszyc rózne - parametry jadra Unixa. Rzeczy, które pownienes sprawdzic to maksymalna - liczba bloków pamieci dzielonej, SHMMAX; maksymalna liczba semaforów, - SEMMNS oraz SEMMNI; maksymalna liczba procesów, NPROC; maksymalna - liczba procesów na jednego uzytkownika, MAXUPRC; i maksymalna liczba - otwartych plików, NFILE oraz NINODE. Powód dla którego PostgreSQL ma - limit na maksymalna liczbe procesów backendu to obawa o wyczerpanie - zasobów systemu. - - 3.9) Jakie pliki znajduja sie w pg_temp? - - Katalog ten zawiera tymczasowe pliki utworzone przez executor. Dla - przykl/adu, jesli jakas operacja sortowania jest wymagana do wykonania - ORDER BY, a samo sortowanie wymaga wiecej miejsca niz parametr - backendu -S ustawil/ do wykorzystania, wtedy tymczasowe pliki sa - uzywane do przechowywania tych danych. - - Pliki tymczasowe powinny byc usuniete automatycznie, ale mogl/o sie to - nie stac jesli proces backendu w miedzyczasie nie zakonczyl/ sie - poprawnie podczas operacji sortowania. Jesli w danym momencie nie - dzial/aja zadne procesy backendów mozesz spokojnie usunac pliki - pg_tempNNN.NN. - - 3.9) Dlaczego konieczne jest przy upgradzie PostgreSQL korzystanie ze - skryptów dump i restore? - - Twórcy PostgreSQL dokonuja jedynie mal/ych zmian pomiedzy mal/ymi - upgradami wersji, np z 7.2 do 7.2.1, wtedy upgrade nie wymaga - korzystania z dump i restore. Przy wiekszych zmianach, np. z wersji - 7.2 do 7.3, czesto zmianymaja wpl/yw na format przechowywanych danych. - Zmiany te sa na tyle skomplikowane, ze nie utrzymujemy zgodosci z - poprzednimi wersjami PostgreSQL. dump pozwala na wydostanie danych w - takiej postaci, w której l/atwe jest ich zaimportowanie do nowszych - wersji bez kl/opotu. - - W wydaniach gdzie zmiany nie dotycza formatu danych na dysku, mozna - wykorzystac skryptu pg_upgrade, do upgradu bez uzycia dump/restore. - Dokumentacja do danego wydania zawiera informacje czy mozliwe jest - uzycie pg_upgrade. - _________________________________________________________________ - - Pytania dotyczace uzywania - - 4.1) Jaka jest róznica pomiedzy kursorami binarnymi (binary cursors) i - zwykl/ymi kursorami (normal cursors)? - - Zobacz w manualu opis polecenia DECLARE. - - 4.2) Jak moge pobrac za pomoca SELECT jedynie kilka pierwszych wyników - zapytania? - - Zobacz w manualu opis polecenia FETCH lub uzyj polecenia SELECT ... - LIMIT.... - - Nawet jesli chesz pobrac kilka pierwszych rzedów z wyniku zapytania, - cal/e zapytanie musi zostac wykonane. Byc moze powinienes skorzystac z - polecenia ORDER BY. Jesli istnieje indeks który odpowiada polom - okreslonym przez ORDER BY, PostgreSQL moze wykorzystac jedynie kilka - pierwszych rzedów, byc moze bedzie koniecznosc wykonania zapytania do - momentu az zostana znalezione pozadane wyniki. - - Aby otrzymac losowy rzad, uzyj: - SELECT col - FROM tab - ORDER BY random() - LIMIT 1; - - - 4.3) Jak moge uzyskac liste wszystkich tabel czy innych rzeczy pod psql? - - Mozesz sprawdzic zawartosc zródel/ psql, a konkretnie plik - pgsql/src/bin/psql/describe.c. Zawiera on polecenia SQL które generuja - wyniki komend z backslashem. Mozesz takze uruchomic psql z opcja -E - wtedy po wykonaniu polecenia z backslashem wyswietlane bedzie - zapytanie, które w rzeczywistosci jest wykonywane. - - 4.4) Jak usunac kolumne z tabeli lub zmienic jej typ? - - DROP COLUMNT zostal/o dodane w wersji 7.3 przy poleceniu ALTER TABLE - DROP COLUMN. We wczesniejszych wersjach mozesz zrobic tak: - BEGIN; - LOCAL TABLE old_table; - SELECT ... -- wybierz wszystkie kolumny poza ta jedna której chcesz sie pozbyc - INTO TABLE new_table - FROM old_table; - DROP TABLE old_table; - ALTER TABLE new_table RENAME TO old_table; - - Aby zmienic typ danych kolumny mozesz zrobic tak: - 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; - - 4.5) Jaki jest maksymalny rozmiar dla rzedu, tabeli i bazy danych? - - Oto wszystkie ograniczenia: - Maksymalny rozmiar dla bazdy danych? nieograniczony ( istnieja - bazy danych o wielkosci 32 TB databases ) - Maksymalny rozmiar dla tabeli? 32 TB - Maksymalny rozmiar dla rzedu? 1.6 TB - Maksymalny rozmiar pola? 1 GB - Maksymalna liczba rzedów w tabeli? nieograniczona - Maksymalna liczba kolumn w tabeli? 250-1600 w zalezonosci od typów kolumn - Makasymalna liczba indeksów na tabeli? nieograniczona - - Oczywiscie "nieograniczony" nie jest prawda tak do konca, istnieja - ograniczenia wynikajace z dostepnego miejsca na dysku, pamieci/swapa. - Kiedy wielkosci te beda bardzo duze moze odbic sie to na wydajnosci. - - Maksymalny rozmiar tabeli, czyli 32 TB nie wymaga od systemu - operacyjnego wsparcia dla duzych plików. Duze tabele sa przechowywane - jako pliki o rozmiarze 1 GB, wiec ograniczenia co do wielkosci plików - narzucone przez system plików nie sa istotne. - - Masymalny rozmiar tabeli i maksymalna liczba kolumn moze byc - zwiekszona jesli zwiekszymy domyslny rozmiar bloku (block size) do - 32k. - - 4.6) Jak duzo miejsca w bazie danych jest konieczne aby przechowywac dane - ze zwyczajnego pliku tekstowego? - - Baza danych PostgreSQL moze potrzebowac do pieciu razy wiecej miejsca - na przechowywanie danych z plików tekstowych niz ich objetosc. - - Jako przykl/ad mozemy rozwazyc plik skl/adajacy sie z 100,000 linii - zbudowanych z liczby cal/kowitej oraz opisu tekstowego w kazdej. - Zal/ózmy, ze srednio kazdy l/ancuch tekstu w linii zajmuje 20 bajtów. - Cal/y plik powinien zajmowac ok. 2.8 MB. Rozmiar pliku bazy danych w - PostgreSQL zawierajacego te dane mozna oszacowac na okol/o 6.4MB: - 36 bajtów: nagl/ówek kazdego rzedu w przyblizeniu) - 24 bajty: jedno pole int i jedno pole typu text - + 4 bajty: wkaznik na stronie do krotki - -------------------------------------------------- - 64 bajty w jednym rzedzie - - Strona danych w PostgreSQL zajmuje 8192 bajtów (8 KB), wiec: - - 8192 bajtów na strone - --------------------- = 128 rzedów na jedna strone w bazie (zaokraglone w dól/) - 64 bajtów na rzad - - 100000 rzedów danych - ----------------------- = 782 stron w bazie danych (zaokraglone w góre) - 128 rzedów na strone - -782 stron w bazie * 8192 bajtów na strone = 6,406,144 bajtów (6.4 MB) - - Indeksy nie powoduja duzego narzutu na zajmowane miejsce, ale - zawieraja pewne dane, wiec w pewnych przypadkach moga byc cal/kiem - duze. - - NULLe sa przechowywane jako mapy bitowe, wiec uzywaja bardzo mal/o - miejsca. - - 4.7) Jak moge sprawdzic jakie tabele, klucze, bazy danych i uzytkownicy sa - utworzeni? - - psql ma cal/kiem duza ilosc polecen z backslashem aby wydobyc takie - informacje. Wprowadz \? aby zobaczyc ich spis. Istnieja takze tablice - systemowe rozpoczynajace sie od pg_, zawierajace interesujace Ciebie - informacje. Wykonanie psql -l pokaze spis wszystkich baz danych. - - Obejrzyj takze plik pgsql/src/tutorial/syscat.source. Zawiera on wiele - z zapytan typu SELECT, które sa potrzebne aby wydobyc informacje z - tablic systemowych. - - 4.8) Moje zapytania sa wolne lub nie uzywaja kluczy. Dlaczego? - - Indeksy nie sa uzywane automatycznie przez kazde z zapytan. Ideksy sa - uzywane jedynie gdy tabela jest odpowiedniego rozmiaru, wiekszego niz - wymagany minimalny, a zapytanie wybiera jedynie mal/y procent - zawartosci tabeli. Wynika to z tego, ze losowy dostep do dysku - powodowany przez ideksowane poszukiwanie jest czasami wolniejsze niz - poszukiwanie sekwencyjne bez uzycia kluczy. - - Zeby zdecydowac czy indeks powinien byc uzywany, PostgreSQL musi miec - statystyki dotyczace danej tabeli. Sa one gromadzone przez uzycie - polecenia VACUUM ANALYZE, lub poprostu ANALYZE. uzywajac statystyk, - optymalizator wie ile rzedów jest w tabeli i moze lepiej okreslic czy - indeksy powinny byc uzyte. Statystyki moga byc takze pomocne w - okresleniu najlepszej kolejnosci wykonania zl/aczenia (join) i jego - sposobu. Gromadzenie statystyk powinno sie odbywac w okreslonych - interwal/ach czasu poniewaz dane w tabelach zmieniaja sie. - - Indeksy nie sa zazwyczaj uzywane przez ORDER BY lub przy wykonywaniu - zl/aczen (join). Sekwencyjne przeszukiwanie po którym nastepuje - sortowanie jest zazwyczaj szybsze nie wyszukiwanie za pomoca indeksu - na duzej tabeli. - - Jakkolwiek LIMIT w pol/aczeniu z ORDER BY czesto bedzie wykorzystywal/ - indeksy poniewaz jedynie mal/a czesc z tabeli jest zwracana. W - rzeczywistosci, chociaz MAX() i MIN() nie uzywaja indeksów, mozliwe - jest aby zwrócic te wartosci uzywajac indeksów poprzez uzycie ORDER BY - i LIMIT. - SELECT col - FROM tab - ORDER BY col [ DESC ] - LIMIT 1; - - Jesli uwazasz, ze optimizer myli sie wybierajac sequential scan, uzyj - SET enable_seqscan TO 'off' i uruchom testy aby sprawdzic czy wtym - wypadku zapytanie bedzie szybciej wykonywane. - - Kiedy uzywa sie operatorów dopasujacych takich jak LIKE lub ~, indeksy - beda uzywane jedynie w pewnych wypadkach: - * Poczatek wyszukiwania jest oparty na poczatku l/ancucha tekstu. - + wzorce LIKE nie moga sie zaczynac % - + dopasowania operatorem ~ (dopasowania regularne) musza sie - zaczynac znakiem specjalnym ^. - * Poczatek wyszukiwania nie moze sie zaczynac od klas znaków, np. - [a-e]. - * Case-insensitive searches such as ILIKE and ~* do not utilise - indexes. Instead, use functional indexes, which are described in - section 4.12. - * Standardowe locale C musi byc uzyte przy wykonywaniu initdb - - 4.9) Jak moge sprawdzic w jakis sposób "query optimizer" wykonuje moje - zapytanie? - - Zobacz manual dla polecenia EXPLAIN. - - 4.10) Co to jest "R-tree index"? - - Indeks R-tree jest uzywany do indeksowania danych przestrzennych. - Indeks hasuujacy nie nadaje sie do wyszukiwania odlegl/osci. Natomiast - indeks typu B-tree moze wyszukiwac odleglosci jedynie w - jednowymiarowych przestrzeniach. R-tree indeks radzi sobie z - przestrzeniami wielo-wymiarowymi. Dla przykl/adu, jesli zostanie - zal/ozony indeks typu R-tree na polu typu point, system moze bardziej - wydajnie odpowiadac na zapytania typu "select all points within a - bounding rectangle." - - Zródl/owym dokumentem opisujacym oryginalnie projektowanie R-tree - indeksów jest: - - 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. - - Ten dokument mozesz znalezc takze w pracy Stonebraker'a "Readings in - Database Systems". - - Wbudowane indeksy R-trees radza sobie w wielobokami i boxes. - Teoretycznie, indeksy R-tree moga byc rozszerzone o mozliwosci - indeksowania w wiecej wymiarowych przestrzeniach. W praktyce, - rozbudowa indeksów R-tree wymaga troche pracy, a w tej chwili nie - dysponujemy jakakolwiek dokumentacja jak to zrobic. - - 4.11) Co to jest "Genetic Query Optimizer"? - - Modul/ GEQO ma za zadanie przyspieszenie optymalizacji zapytan l/aczac - wiele tabel za pomoca algorytmów genetycznych (Genetic Algorithm - (GA)). Pozwala na uzywanie duzych zapytan l/aczacych tabele (join - queries) bez wykorzystywania zasobozernego wyszukiwania. - - 4.12) Jak moge uzywac wyrazen regularnych w zapytaniach i zapytan - case-insensitive w wyrazeniach regularnych? Jak korzystac z indeksów dla - zapytan case-insensitive? - - Operator ~ moze byc wykorzystywany do wyszukiwania za pomoca wyrazen - regularnych, a ~* do wyszukiwania case-insensitive z wyrazeniami - regularnymi. Wariant case-insensitive dla LIKE zostal/ nazwany ILIKE. - - Porównania case-insensitive sa zazwyczaj wykonywane w nastepujacy - sposób: - SELECT * - FROM tab - WHERE lower(col) = 'abc' - - W tym wypadku standardowe indeksy nie beda uzywane. Mozesz utworzyc - indeks funkcyjny, poprzez: - CREATE INDEX tabindex on tab (lower(col)); - - 4.13) Jak sprawdzic w zapytaniu czy pole ma wartosc NULL? - - Mozesz to sprawdzic, testujac wartosc kolumny warunkiem IS NULL albo - IS NOT NULL. - - 4.14) Jaka jest róznica pomiedzy róznymi typami tekstowymi (character - types)? - -Type Nazwa wewnetrzna Uwagi --------------------------------------------------- -VARCHAR(n) varchar rozmiar okresla maksymalna dl/ugosc, nie matutaj wypel/niania -CHAR(n) bpchar wypel/niane pustymi znakami do podanej dl/ugosci -TEXT text bez limitu na dl/ugosc l/ancucha -BYTEA bytea zmiennej dl/ugosci tablica bajtów (null-byte safe) -"char" char 1 znak - - Jesli bedziesz przegladac katalogi systemowe lub komunikaty o bl/edach - czesto spotkasz sie z podanymi powyzej nazwami wewnetrznymi. - - Pierwsze cztery typy powyzej to tzw typy "varlena" (np. pierwsze - cztery bajty na dysku to dl/ugosc, po których jest data). Dlatego - faktyczna dl/ugosc takiego l/ancucha jest troche wieksza niz - zadeklarowany rozmiar. Te typy takze podlegaja kompresji lub moga byc - przechowywane out-of-line jako TOAST, wiec faktyczne zuzycie miejsca - na dysku moze byc mniejsze niz oczekiwane. - - VARCHAR(n) jest najodpowiedniejszy do przechowywania l/ancuchów o - róznej dl/ugosci ale okresla on maksymalna jego dl/ugosc. TEXT jest - najlepszy dla l/ancuchów o dowolnej dl/ugosci, nie przekraczajacej - 1GB. - - CHAR(n) jast najlepszym typem do przechowywania l/ancuchów o tej samej - dl/ugosci. CHAR(n) wypel/nia dane do zadanej dl/ugosci, podczas gdy - VARCHAR(n) przechowuje jedynie dane dostarczone. BYTEA sl/uzy do - przechowywania danych binarnych, w szczególnosci dla danych - zawierajacych NULL bajty. Wszystkie typy opisane tutaj maja podobne - charakterystyki jesli chodzi o wydajnosc. - - 4.15.1) Jak moge utworzyc pole które samo zwieksza swoja wartosc? - - PostgreSQL ma zaimplementowany typ SERIAL. Automatycznie tworzy - sekwencje i indeks na tej kolumnie. Dla przykladu: - CREATE TABLE person ( - id SERIAL, - name TEXT - ); - - zostanie automatycznie prztl/umaczone na: - CREATE SEQUENCE person_id_seq; - CREATE TABLE person ( - id INT4 NOT NULL DEFAULT nextval('person_id_seq'), - name TEXT - ); - CREATE UNIQUE INDEX person_id_key ON person ( id ); - - Wiecej informacji o sekwencjach znajdziesz w manualu o - create_sequence. Mozesz takze uzyc pola OID jako unikalnej wartosci - dla kazdego rzedu danych. Jesli bedziesz potrzebowal/ z backupowac - dane robiac dump bazy i odtworzyc ja, musisz uzyc pg_dump z opcja -o - lub polecenia COPY WITH OIDS aby zachowac OIDy. - - 4.15.2) Jak pobrac wartosc pola typu SERIAL po wykonaniu insert'u? - - Jednym z podejsc jest pobranie kolejnej wartosci typu SERIAL z - sekwencji za pomoca funkcji nextval() zanim zostanie wstawiona, a - pózniej nalezy jej uzyc. Uzywajac przykl/adu z tabeli z punktu 4.15.1, - moze to wygladac w Perlu na przykl/ad w ten sposób: - new_id = output of "SELECT nextval('person_id_seq')" - INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal'); - - Bedziesz mial/ wtedy ta wartosc przechowana w zmiennej new_id do - uzytku w innych zapytaniach (np. jako klucz obcy do tabeli person). - Warto zwrócic uwage, ze nazwa automatycznie utworzonej sekwencji - SEQUENCE bedzie nastepujaca: __seq, gdzie - tabela i kolumnatypuserial sa nazwami Twojej tabeli i Twojej kolumny - typu SERIAL. - - Inne rozwiazanie to uzycie funkcji currval() na pola typu SERIAL po - dodaniu nowej wartosci do rzedu zawierajacego kolumne typu SERIAL z - wstawiona domyslnie wartoscia, np. - INSERT INTO person (name) VALUES ('Blaise Pascal'); - new_id = output of "SELECT currval('person_id_seq')"; - - Ostatecznie mozesz uzyc OID zwracanej po wykonaniu INSERT, chociaz to - jest najmniej przenosne rozwiazanie. W Perlu, wykorzystujac biblioteke - DBI z modul/em Edmunda Mergla DBD::Pg, oid jest dostepny poprzez - $sth->{pg_oid_status} po wykonaniu $sth->execute(). - - 4.15.3) Czy uzycie currval() i nextval() nie doprowadzi do race condition z - innymi uzytkownikami? - - Nie. currval() zwraca biezaca wartosc przypisana przez Twój backend, a - nie przez wszystkich uzytkowników. - - 4.15.4) Dlaczego numery sekwencji nie sa ponownie uzywane przy przerwaniu - transakcji? Skad sie biora luki w numerowaniu kolumny tabeli - sekwancjami/SERIALem? - - Aby poprawic zbieznosc (concurrency), wartosci sekwencji sa podawane - dzial/ajacym transakcjom kiedy tego potrzebuja i nie sa blokowane - dopóki transakcja sie nie zakonczy. To spowoduje przerwy w numerowaniu - z przerwanych transakcji. - - 4.16) Co to jest OID? Co to jest TID? - - OID sa PostgreSQL'owym rozwiazaniem problemu unikalnych numerów - rzedów. Kazdy rzad tworzony przez PostgreSQL otrzymuje unikalny OID. - Wszystkie OIDy generowane podczas procesu uruchamianego przez skrypt - initdb maja mniejsza wartosc niz 16384 (na podstawie pliku - backend/access/transam.h). Wszystkie OIDy tworzone przez uzytkownika - sa równe lub wieksze podanej wczesniej wartosci. Domyslnie wszystkie - OIDy sa unikalne nie tylko w pojedynczej tabeli czy bazie danych ale w - cal/ej instalacji PostgreSQL. - - PostgreSQL uzywa OIDów w swoim wewnetrznym systemie tabel, aby mozna - byl/o je l/aczyc. Te OIDy moga byc uzywane aby identyfikowac rzedy w - tabelach i wykorzystywac je w zl/aczeniach tych tabel. Zaleca sie abys - uzywal/ typu OID aby przechowywac wartosci OID. Mozesz utworzyc indeks - na polu OID aby dostep do niego byl/ szybszy. - - OID sa przypisane do wszystkich rzedów z jednego gl/ównego miejsca i - uzywane sa przez wszystkie bazy danych. Jesli chcial/bys zmienic OID - na cos innego, lub jesli chcial/bys zrobic kopie tabeli, z orginalnymi - OIDami nie ma zadnego przeciwwskazania abys to zrobil/: - CREATE TABLE new_table(old_oid oid, mycol int); - SELECT old_oid, mycol INTO new FROM old; - COPY new TO '/tmp/pgtable'; - DELETE FROM new; - COPY new WITH OIDS FROM '/tmp/pgtable'; - - OIDy sa przechowywane jako cztero-bajtowe liczby cal/kowite i skoncza - sie po osiagnieciu czterech miliardów. Nikt jak dotad nie zgl/osil/ - aby cos takiego sie stalo, ale mamy zamiar pozbyc sie tego - ograniczenia zanim ktos to zgl/osi. - - TID sa uzywane aby zidentyfikowac konkretne rzedy z blokami i - wartoscia ofsetów. TIDy zmieniaja sie wraz ze zmianami rzedów. Sa - uzywane przez indeksy, aby wskazywac do fizycznych rzedów. - - 4.17) Jakie jest znaczenie niektórych terminów w PostgreSQL? - - W czesci kodu zródl/owego i starszej dokumentacji uzywamy terminów, - które maja bardziej ogólne znaczenie. Oto niektóre z nich: - * table, relation, class - * row, record, tuple - * column, field, attribute - * retrieve, select - * replace, update - * append, insert - * OID, serial value - * portal, cursor - * range variable, table name, table alias - - Liste terminów zwiazanych z bazami danych mozesz znalezc pod tym - adresem:http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/ - glossary/glossary.html. - - 4.18) Skad bierze sie ten bl/ad "ERROR: Memory exhausted in - AllocSetAlloc()"? - - Prawdopodobnie wyczerpal/a Ci sie pamiec wirtualna (virtual memory) w - systemie lub Twój kernel ma zbyt nisko ustawione limity dla pewnych - zasobów. Spróbuj wykonac nastepujace polecenia zanim uruchomisz - postmaster'a: - ulimit -d 262144 - limit datasize 256m - - W zaleznosci od shell'a jakiego uzywasz jedno z tych polecen moze nie - zadzial/ac, ale to ustawienie pozwoli ustawic segment danych dla - procesu znacznie wiekszy i byc moze pozwoli wykonac zapytanie. To - polecenie zadzial/a dla biezacego procesu oraz wszytkich podprocesów - utworzonych po wykonaniu polecenia. Jesli ten problem wystepuje z - klientem SQL, poniewaz backend zwraca zbyt duzo danych, spróbuj - wykonac to polecenie przed uruchomieniem klienta. - - 4.19) Jak sprawdzic jakiej wersji PostgreSQL uzywam? - - W psql, wpisz select version(); - - 4.20) Dlaczego operacje, które wykonuje na duzych obiektach "large-object" - zwracaja komunikat: "invalid large obj descriptor"? - - Musisz uzyc BEGIN WORK i COMMIT przed i po uzyciu uchwytu do duzego - obiektu, tzn. musisz nimi otoczyc funkcje lo_open ... lo_close. - - Obecnie PostgreSQL uzywjac "rule" zamyka uchwyt do duzego obiektu przy - kazdym wywol/aniu "commit". Wiec pierwsze próba zrobienia czegokolwiek - z uchwytem spowoduje wypisanie: invalid large obj descriptor. Kod, - który do tej pory dzial/al/ (przynajmniej wiekszosc razy) bedzie teraz - generowal/ informacje o bl/edzie jesli nie bedziesz korzystal/ z - transakcji. - - Jesli uzywasz interfejsu klienta jak ODBC byc moze bedziesz musial/ - ustawic auto-commit off. - - 4.21) Jak stworzyc kolumne której domyslna wartoscia bedzie biezacy czas? - - Uzyj CURRENT_TIMESTAMP: -CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP ); - - 4.22) Dlaczego zapytania uzywajace IN sa takie wolne? - - W wersjach wczesniejszych niz 7.4 l/aczymy podzapytania w outer - queries poprzez sekwencyjne przeszukiwanie wyników podzapytania dla - kazdego rzedu z outer query. Jesli podzapytanie zwraca jedynie kilka - rzedów a zewnetrzne zapytanie zwraca ich wiele, IN jest najszybsze. - Aby przyspieszyc inne zapytania mozna zastapic IN przez EXISTS: -SELECT * - FROM tab - WHERE col IN (SELECT subcol FROM subtab) - - na: -SELECT * - FROM tab - WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col) - - Aby to rozwiazanie byl/o szybkie, subcol powinna byc kolumna - indeksowana. - - W wersji 7.4 i pózniejszych, IN w rzeczywistosci uzywa tej samej - wyrafinowanej techniki l/aczenia jak normalne zapytania i jest - preferowane nad uzywaniem EXISTS. - - 4.23) Jak wykonac "outer join"? - - PostgreSQL ma zaimplementowane outer join wykorzystujac standardowa - skl/adnie SQL. Ponizej dwa przykl/ady: - SELECT * - FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col); - - or - SELECT * - FROM t1 LEFT OUTER JOIN t2 USING (col); - - Te dwa identyczne zapytania l/acza kolumne t1.col z kolumna t2.col, - ale takze zwróca niepol/aczone rzedy w t1 (te, które nie pasuja w t2). - RIGHT join dodal/by niepol/aczone rzedy z tabeli t2. FULL join - zwrócil/by rzedy plus dodatkowo wszystkie rzedy z tabel t1 i t2. - Sl/owo OUTER jest opcjonalne i jest dodawane domyslnie przy LEFT, - RIGHT, i FULL join'ach. Zwykl/e join'y sa nazywane INNER joins. - - W poprzednich wersjach "outer joins" moga byc zasymulowane poprzez - uzycie slowa kluczowego UNION i NOT IN. Dla przykl/adu, l/aczac tabele - tab1 i tab2, nastepujace zapytanie wykonuje outer join: - 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) Jak wykonywac zapytanie uzywajace kilku baz danych jednoczesnie? - - Nie ma takiej mozliwosci aby w zapytaniu odpytawac inna baze danych - poza biezaca. Poniewaz PostgreSQL l/aduje specyficzne dla bazy danych - katalogi systemowe, nie jest do konca jasne jak zapytanie pomiedzy - róznymi bazami danych powinno sie zachowywac. - - contrib/dblink pozwala na wykonywanie zapytan poprzez rózne bazy - danych wywol/ujac odpowiednie funkcje. Oczywiscie klient moze l/aczyc - sie z róznymi bazami danych i l/aczyc informacje w ten sposób uzyskana - po stronie klienta. - - 4.25) Jak zwrócic w funkcji wiele rzedów lub kolumn? - - Mozesz w l/atwy sposób zwracac wiele rzedów lub kolumn uzywajac - funkcji z: - http://techdocs.postgresql.org/guides/SetReturningFunctions. - - 4.26) Dlaczego nie moge w sposób pewny tworzyc/usuwac tabel tymczasowych w - funkcjach PL/PgSQL? - - PL/PgSQL przechowuje w cache zawartosc funkcji, niepozadanym efektem - tego jest to, ze gdy taka funkcja korzysta z tabel tymczasowych, które - sa pózniej kasowane i odtwarzane, a funkcja wywol/ywana jest - ponownie,jej wywol/anie nie powiedzie sie poniewaz cachowana funkcja - wciaz bedzie wskazywac na stara tablice tymczasowa. Rozwiazaniem tego - problemu jest uzywanie EXECUTE aby korzystac z tabel tymczasowych w - PL/PgSQL. To spowoduje, ze zapytanie bedzie parsowane przy kazdym - wywol/aniu funkcji. - - 4.27) Jakie sa mozliwosci replikacji w PostgreSQL? - - Jest kilka opcji aby stosowac replikacje typu master/slave. Ten typ - pozwala jedynie masterowi na dokonywanie zmian w bazie danych, a slave - moze jedynie te zmiany odczytywac. Na stronie - http://gborg.PostgreSQL.org/genpage?replication_research znajduje sie - ich lista. Replikacja typu multi-master jest w trakcie prac, opis - projektu znajduje sie pod adresem: - http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php. - - 4.28) Jakie mozliwosci szyfrowania oferuje PostgreSQL? - - * contrib/pgcrypto zawiera wiele funkcji za pomoca, których mozemy - uzywac kryptografii w zapytaniach SQL. - * Aby szyfrowac transmisje od klienta do serwera, ten musi miec - ustawiona opcje ssl na true w pliku postgresql.conf, odpowiedni - wpis host lub hostssl musi wystepowac w pliku pg_hba.conf, oraz - sslmode nie moze byc wyl/aczone w kliencie. (Warto zwrócic uwage, - ze mozliwe jest takze uzywanie transportów szyfrujaców przez - strony trzecie, takie jak stunnel lub ssh, poza natywnym wsparciem - dla SSL przez PostgreSQL). - * Hasl/a uzytkowników bazy danych sa automatycznie szyfrowane od - wersji 7.3. W poprzednich wersjach, nalezy ta funkcjonalnosc - poprzez wl/aczenie opcji PASSWORD_ENCRYPTION w postgresql.conf. - * Serwer moze dzial/ac uzywajac szyfrowanego systemu plików. - - Rozwijanie PostgreSQL - - 5.1) Napisal/em wl/asna funkcje. Kiedy uzyje jej w psql, program zrzuca - pamiec (dump core)? - - Problem moze byc spowodowany przez bardzo wiele rzeczy. Spróbuj - najpierw przetestowac Twoja funkcje w samodzielnie dzial/ajacym - programie. - - 5.2) Jak moge dodac/zgl/osic nowe typy czy funkcje do PostgreSQL? - - Wyslij Twoje propozycje na liste mailowa pgsql-hackers, wtedy - prawdopodobnie Twój kod znajdzie sie w katalogu contrib/. - - 5.3) Jak napisac funkcje C zwracajaca krotke (tuple)? - - W wersjach PostgreSQL od numeru 7.3, funckje zwracajace tabele sa w - pelni wspierane w C, PL/PgSQL i SQL. Sprawdz w Programmer's Guide aby - uzyskac wiecej informacji. Przykl/ad funkcji napisanej w C zwracajacej - tabele zostal/ umieszczony w contrib/tablefunc. - - 5.4) Zmienil/em plik zródl/owy. Dlaczego po rekompilacji nie widac zmiany? - - Pliki Makefiles nie maja dorzuconych odpowiednich zaleznosci dla - plików nagl/ówkowych (include files). Wykonaj najpierw make clean, a - nastepnie ponownie make. Jesli uzywasz GCC mozesz uzyc opcji - --enable-depend przy wykonywaniu configure aby kompilator mógl/ - okreslic zaleznosci samodzielnie. diff --git a/doc/FAQ_russian b/doc/FAQ_russian deleted file mode 100644 index a361767ccc..0000000000 --- a/doc/FAQ_russian +++ /dev/null @@ -1,988 +0,0 @@ - - Otvety na chasto zadavaemye voprosy po PostgreSQL - - Data poslednego obnovleniya: Sreda 25 iyunya 23:54:14 EDT 2008 - - Anglijskij variant soprovozhdaet: Bryus Mom'yan (Bruce Momjian) - (bruce@monjian.us) - - Pereviol na russkij: Viktor Vislobokov (admin@postgresql.ru.net) - - Samuyu svezhuyu anglijskuyu versiyu dokumenta mozhno najti na - http://www.postgresql.org/files/documentation/faqs/FAQ.html. - - Samuyu svezhuyu russkuyu versiyu dokumenta mozhno najti na - http://postgresql.ru.net/docs/FAQ_russian.html. - - Otvety na voprosy specifichnye dlya konkretnyh platform mozhno najti - na http://www.postgresql.org/docs/faq/. - _________________________________________________________________ - - Obschie voprosy - - 1.1) CHto takoe PostgreSQL? Kak proiznositsya `eto nazvanie? CHto - takoe Postgres? - 1.2) Kto upravlyaet PostgreSQL? - 1.3) Kakovy avtorskie prava na PostgreSQL? - 1.4) Na kakih platformah rabotaet PostgreSQL? - 1.5) Gde mozhno vzyat' PostgreSQL? - 1.6) Kakaya versiya naibolee svezhaya? - 1.7) Gde poluchit' podderzhku? - 1.8) Kak mne soobschit' ob oshibke? - 1.9) Kak najti informaciyu ob izvestnyh oshibkah ili otsutstvuyuschih - vozmozhnostyah? - 1.10) Kakaya dokumentaciya imeetsya v nalichii? - 1.11) Kak nauchit'sya SQL? - 1.12) Kak mne otpravit' ispravlenie ili prisoedinitsya k komande - razrabotchikov? - 1.13) Kak sravnit' PostgreSQL s drugimi SUBD? Mozhet li PostgreSQL - byt' vstroennoj? - 1.14) Budet li PostgreSQL rabotat' s poslednimi izmeneniyami, v raznyh - stranyh, kasayuschimisya dnevnogo vremeni? - 1.15) Kak mne otpisat'sya ot spiskov rassylki PostgreSQL? Kak - izbezhat' polucheniya dubliruyuschihsya soobschenij? - - Voprosy pol'zovatelej po klientskoj chasti - - 2.1) Kakie interfejsy est' dlya PostgreSQL? - 2.2) Kakie instrumenty suschestvuyut dlya ispol'zovaniya PostgreSQL - cherez Web? - 2.3) Est' li u PostgreSQL graficheskij interfejs pol'zovatelya? - - Voprosy administrirovaniya - - 3.1) Kak mne ustanovit' PostgreSQL v mesto otlichnoe ot - /usr/local/pgsql? - 3.2) Kak mne upravlyat' soedineniyami ot drugih komp'yuterov? - 3.3) Kakie nastrojki mne nuzhno sdelat' dlya uluchsheniya - proizvoditel'nosti? - 3.4) Kakie vozmozhnosti dlya otladki est' v nalichii? - 3.5) Pochemu ya poluchayu soobschenie "Sorry, too many clients" kogda - pytayus' podklyuchit'sya k baze? - 3.6) Kak vypolnit' obnovlenie PostgreSQL? - 3.7) Kakoe komp'yuternoe "zhelezo" ya dolzhen ispol'zovat'? - - Voprosy `ekspluatacii - - 4.1) Kak vypolnit' SELECT tol'ko dlya neskol'kih pervyh strochek - zaprosa? Dlya proizvol'noj stroki? - 4.2) Kak mne najti kakie tablicy, indeksy, bazy dannyh i pol'zovateli - suschestvuyut? Kak mne uvidet' zaprosy, kotorye ispol'zuet psql dlya - polucheniya `etoj informacii? - 4.3) Kak izmenit' tip dannyh kolonki? - 4.4) Kakovy maksimal'nye razmery dlya strok v tablice, tablic i bazy - dannyh? - 4.5) Kak mnogo diskovogo prostranstva v baze dannyh nuzhno dlya - sohraneniya dannyh iz obychnogo tekstovogo fajla? - 4.6) Pochemu moi zaprosy rabotayut medleno? Pochemu oni ne ispol'zuyut - moi indeksy? - 4.7) Kak posmotret' na to, kak optimizator vypolnyaet moj zapros? - 4.8) Kak mne vypolnit' poisk regulyarnogo vyrazheniya i poisk - nezavisimyj ot registra bukv poisk regulyarnogo vyrazheniya? Kak mne - ispol'zovat' indeks dlya poiska nezavisimogo ot registra bukv? - 4.9) Kak mne opredelit', chto znachenie polya v kakom-libo zaprose - ravno NULL? Kak mne soedinit' vozmozhnye NULL? Mogu ya sortirovat' - polya NULL ili net? - 4.10) Kakovy otlichiya mezhdu raznymi simvol'nymi tipami? - 4.11.1) Kak mne sozdat' pole serial/s-avto-uvelicheniem? - 4.11.2) Kak mne poluchit' znachenie pri vstavke SERIAL? - 4.11.3) Ne mozhet li poluchit'sya tak, chto ispol'zovanie currval() i - nextval() privedet k zaciklirovaniyu s drugimi pol'zovatelyami? - 4.11.4) Pochemu chisla iz moej posledovatel'nosti ne ispol'zuyutsya - snova pri otmene tranzakcii? Pochemu sozdayutsya razryvy pri numeracii - v kolonke, gde ya ispol'zuyu posledovatel'nost'/SERIAL? - 4.12) CHto takoe OID? CHto takoe CTID? - 4.13) Pochemu ya poluchayu oshibku "ERROR: Memory exhausted in - AllocSetAlloc()"? - 4.14) Kak mne uznat', kakaya versiya PostgreSQL zapuschena? - 4.15) Kak mne sozdat' kolonku kotoraya po umolchaniyu budet soderzhat' - tekuschee vremya? - 4.16) Kak vypolnit' vneshnee svyazyvanie? - 4.17) Kak vypolnyat' zaprosy, ispol'zuyuschie neskol'ko baz dannyh? - 4.18) Kak mne vernut' iz funkcii neskol'ko strok tablicy? - 4.19) Pochemu ya poluchayu oshibku "relation with OID #### ne - suschestvuet", kogda obraschayuts' k vremennym tablicam v funkciyah - PL/PgSQL? - 4.20) Kakie est' resheniya dlya replikacii? - 4.21) Pochemu imena tablicy i kolonok ne raspoznayutsya v v moiom - zaprose? Pochemu ne sohranyayutsya zaglavnye bukvy? - _________________________________________________________________ - - Obschie voprosy - - 1.1) CHto takoe PostgreSQL? Kak proiznositsya `eto nazvanie? CHto takoe - Postgres? - - PostgreSQL proiznositsya Post-Gres-Q-L (Post-Gres-K'yu-`El). (Dlya - osobo lyubopytstvuyuschih kak proiznosit' "PostgreSQL", suschestvuet - audio-fajl). - - PostgreSQL - `eto ob"ektno-relyacionnaya sistema upravleniya bazami - dannyh (SUBD), kotoraya imeet tradicionnye vozmozhnosti kommercheskih - SUBD s rasshireniyami, kotorye est' v SUBD novogo pokoleniya. - PostgreSQL - `eto svobodnoe i polnost'yu otkrytoe programmnoe - obespechenie. - - Razrabotku PostgreSQL vypolnyaet komanda razrabotchikov, razbrosannaya - po vsemu miru i svyazannaya cherez Internet. Razrabotka yavlyaetsya - obschestvennym proektom i ne upravlyaetsya kakoj-libo kompaniej. - Podrobnosti smotrite v FAQ dlya razrabotchikov, - http://www.postgresql.org/docs/faqs.FAQ_DEV.html - - Postgres -- `eto shiroko ispol'zuemoe sokraschenie dlya PostgreSQL. - Pervonachal'nym imenem proekta v Berkli bylo Postgres i `etot nik - teper' naibolee populyaren v razgovorah o PostgreSQL po sravneniyu s - drugimi. Esli vam trudno polnost'yu progovarivat' 'PostgreSQL', mozhno - prosto govorit' 'Postgres'. - - 1.2) Kto upravlyaet PostgreSQL? - - Esli vy ischite kakogo-to osobennogo cheloveka, central'nyj komitet - ili upravlyayuschuyu kompaniyu, to naprasno --- ih net. U nas est' - yadro komiteta i razrabotchikov, rabotayuschih s CVS, no `eti gruppy - sluzhat bol'she dlya administrativnyh celej, chem dlya upravleniya. - Proekt napryamuyu funkcioniruet s pomosch'yu soobschestva - razrabotchikov i pol'zovatelej, k kotoromu mozhet prisoedinitsya - kazhdyj. Vsio chto nuzhno -- `eto podpisat'sya na spiski rassylki i - uchastvovat' v diskussiyah. (Podrobnosti o tom kak vklyuchit'sya v - razrabotku PostgreSQL smotrite v FAQ dlya razrabotchikov.) - - 1.3) Kakovy avtorskie prava na PostgreSQL? - - PostgreSQL rasprostranyaetsya po klassicheskoj licenzii BSD. `Eta - licenziya ne soderzhit ogranichenij na to, kak budet ispol'zovat'sya - ishodnyj kod. Nam nravitsya `eta licenziya i u nas net namerenij eio - menyat'. Vot `eta licenziya BSD, kotoruyu my ispol'zuem: - - Sistema Upravleniya Bazami Dannyh PostgreSQL - - Portions copyright (c) 1996-2008, PostgreSQL Global Development Group - Portions Copyright (c) 1994-1996 Regents of the University of - California - - Predostavlyayutsya prava na ispol'zovanie, kopirovanie, izmenenie i - rasprostranenie dannogo programmnogo obespecheniya i ego dokumentacii - dlya lyubyh celej, besplatno i bez podpisaniya kakogo-libo - soglasheniya, pri uslovii chto dlya kazhdoj kopii budut predostavleny - dannoe vyshe zamechanie ob avtorskih pravah, tekuschij paragraf i dva - sleduyuschih paragrafa. - - KALIFORNIJSKIJ UNIVERSITET NE NESET NIKAKOJ OTVETSTVENNOSTI ZA LYUBYE - POVREZHDENIYA, VKLYUCHAYA POTERYU DOHODA, NANESENNYE PRYAMYM ILI - NEPRYAMYM, SPECIAL'NYM ILI SLUCHAJNYM ISPOL'ZOVANIEM DANNOGO - PROGRAMMNOGO OBESPECHENIYA ILI EGO DOKUMENTACII, DAZHE ESLI - KALIFORNIJSKIJ UNIVERSITET BYL IZVESCHEN O VOZMOZHNOSTI TAKIH - POVREZHDENIJ. - - KALIFORNIJSKIJ UNIVERSITET SPECIAL'NO OTKAZYVAZYVAETSYA PREDOSTAVLYAT' - LYUBYE GARANTII, VKLYUCHAYA, NO NE OGRANICHIVAYAS' TOL'KO `ETIMI - GARANTIYAMI: NEYAVNYE GARANTII PRIGODNOSTI TOVARA ILI PRIGODNOSTI DLYA - OTDEL'NOJ CELI. DANNOE PROGRAMMNOE OBESPECHENIE PREDOSTAVLYAETSYA NA - OSNOVE PRICIPA "KAK EST'" I KALIFORNIJSKIJ UNIVERSITET NE OBYAZAN - PREDOSTAVLYAT' SOPROVOZHDENIE, PODDERZHKU, OBNOVLENIYA, RASSHIRENIYA - ILI IZMENENIYA. - - 1.4) Na kakih platformah rabotaet PostgreSQL? - - Obychno, PostgreSQL mozhet rabotat' na lyuboj sovremennoj platforme - sovmestimoj s Unix. V instrukcii po ustanovke, vy najdete spisok teh - platform, na kotoryh byli provedeny testovye zapuski PostgreSQL k - momentu vyhoda dannoj versii. - - PostgreSQL takzhe rabotaet na operacionnyh sistemah Microsoft Windows, - osnovannyh na NT, takih kak Win2000 SP4, WinXP i Win2003. Paket - installyatora dostupen po adresu - http://www.postgresql.org/download/windows. Versii Windows, osnovannye - na MS-DOS (Win95, Win98, WinMe) mogut zapuskat' PostgreSQL s - pomosch'yu Cygwin. - - Takzhe suschestvuet versiya sportirovannaya pod Novell Netware 6 na - http://developer.novell.com/wiki/index.php/Postgresql, i versiya dlya - OS/2 (eComStation) na - http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgre - SQL&stype=all&sort=type&dir=%2F. - - 1.5) Gde mozhno vzyat' PostgreSQL? - - CHerez brauzer, ispol'zuya http://www.postgresql.org/ftp/ i cherez - ftp, ispol'zuya ftp://ftp.postgresql.org/pub/. - - 1.6) Kakaya versiya naibolee svezhaya? - - Poslednij vypusk PostgreSQL - `eto versiya 8.3.3 - - My planiruem vypuskat' novye starshie versii kazhdyj god, a mladshie - versii kazhdye neskol'ko mesyacev. - - 1.7) Gde poluchit' podderzhku? - - Soobschestvo PostgreSQL predostavlyaet pomosch' mnozhestvu - pol'zovatelej cherez E-mail. Osnovnoj web-sajt dlya podpiski na spiski - rassylki po E-mail `eto: http://www.postgresql.org/community/lists/. - Horoshim mestom dlya togo, chtoby nachat' zadavat' voprosy - yavlyayutsya spiski general (obschie voprosy) ili bugs (oshibki). - - Glavnym IRC kanalom yavlyaetsya #postgreql, raspolozhennyj na servere - Freenode (irc.freenode.net). CHtoby podklyuchit'sya, vy mozhete - ispol'zovat' v Unix vyzov programmy irc -c '#postgresql' "$USER" - irc.freenode.net ili lyuboj drugoj IRC klient. Na `etom zhe servere - suschestvuyut kanaly na ispanskom (#postgresql-es), francuzskom - (#postgresqlfr) i brazil'skom (#postgresql-br) yazykah. Takzhe - suschestvuet kanal po PostgreSQL na servere EFNet. - - Spisok kommercheskoj podderzhki kompanij dostupen na - http://www.postgresql.org/support/professional_support. - - 1.8) Kak mne soobschit' ob oshibke? - - Posetite stranichku so special'noj formoj otchiota ob oshibke v - PostgreSQL po adresu: http://www.postgresql.org/support/submitbug. - Takzhe prover'te nalichie bolee svezhej versii PostgreSQL na nashem - FTP sajte ftp://ftp.postgresql.org/pub/. - - Na oshibki, uvedomlenie o kotoryh byli sdelany cherez special'nuyu - formu ili otpravlennye v kakoj-libo spisok rassylki PostgreSQL, - obychno generiruetsya odin iz sleduyuschih otvetov: - * `Eto ne oshibka i pochemu - * `Eto izvestnaya oshibka i ona uzhe est' v spiske TODO - * Dannaya oshibka byla ispravlena v tekuschem vypuske - * Dannaya oshibka byla ispravlena, no ispravlenie poka ne popalo v - oficial'nyj vypusk - * Zaprashivaetsya bolee detal'naya informaciya: - + Operacionnaya sistema - + Versiya PostgreSQL - + Test, vosproizvodyaschij oshibku - + Otladochnaya informaciya - + Vyvod backtrace otladchika - * `Eto novaya oshibka. Mozhet proizojti sleduyuschee: - + Budet sozdano ispravlenie, kotoroe budet vklyucheno v - sleduyuschij vypusk - + Oshibka ne mozhet byt' ispravlena nemedlenno i budet - dobavlena v spisok TODO - - 1.9) Kak najti informaciyu ob izvestnyh oshibkah ili otsutstvuyuschih - vozmozhnostyah? - - PostgreSQL podderzhivaet rasshirennyj podklass SQL:2003. Smotrite nash - spisok TODO na predmet izvestnyh oshibok, otsutstvuyuschih - vozmozhnostej i buduschih planov. - - Na zapros kakoj-libo vozmozhnosti obychno prihodyat sleduyuschie - otvety: - * Dannaya vozmozhnost' uzhe est' v spiske TODO - * Dannaya vozmozhnost' nezhelatel'na potomu chto: - + Ona dubliruet suschestvuyuschuyu funkcional'nost', kotoraya - sleduet standartu SQL - + Dannaya vozmozhnost' sil'no uslozhnila by kod, no dala by - malen'kuyu vygodu - + Dannaya vozmozhnost' nebezopasna ili nenadiozhna - * Dannaya novaya vozmozhnost' dobavlena v spisok TODO - - PostgreSQL ne ispol'zuet kakuyu-libo sistemu otslezhivaniya oshibok, - potomu chto my obnaruzhili, chto ispol'zovanie pryamogo obrascheniya - po `elektronnoj pochte i obnovlyaemogo spiska TODO yavlyaetsya bolee - `effektivnym. Na praktike, oshibki v programmnom obespechenii - sohranyayutsya ochen' nedolgo, a oshibki, kotorye vazhny bol'shomu - kolichestvu pol'zovatelej ispravlyayutsya momental'no. Est' tol'ko - odno mesto, gde mozhno najti vse izmeneniya, uluchsheniya i - ispravleniya, sdelannye v vypuske PostgreSQL - `eto zhurnaly - soobschenij sistemy kontrolya versij CVS. Dazhe zamechaniya k vypuskam - ne soderzhat vse izmeneniya, sdelannye v programmnom obespechenii. - - 1.10) Kakaya dokumentaciya imeetsya v nalichii? - - PostgreSQL soderzhit mnogo dokumentacii, vklyuchaya bol'shoe - rukovodstvo, stranicy `elektronnogo rukovodstva man i nekotorye - malen'kie testovye primery. Smotrite v katalog /doc. Vy takzhe mozhete - prosmatrivat' dokumentaciyu v Internet po adresu - http://www.postgresql.org/docs. - - Suschestvuet dve knigi po PostgreSQL dostupnye po adresam - http://www.PostgreSQL.org/docs/books/awbook.html i - http://www.commandprompt.com/ppbook/. Est' neskol'ko knig po - PostgreSQL, kotorye mozhno kupit'. Odnu iz naibolee populyarnyh - napisal Korri Duglas (Korry Douglas). Spisok obzorov po `etim knigam - dostupen po adresu http://www.postgresql.org/docs/books/. Krome togo, - po adresu - http://wiki.postgresql.org/wiki/Community_Generated_Articles%2C_Guides - %2C_and_Documentation vy mozhete najti kollekciyu tehnicheskih statej, - posveschennyh PostgreSQL. - - Klient komandnoj stroki psql imeet neskol'ko komand \d dlya - otobrazheniya informacii po tipam, operatoram, funkciyam, agregatam i - t.d. - ispol'zujte \? dlya polucheniya spiska dostupnyh komand. - - Nash sajt soderzhit esche bol'she informacii. - - 1.11) Kak mne nauchit'sya SQL? - - Vo-pervyh, voz'mite odnu iz knig po PostgreSQL, o kotoryh govorilos' - vyshe. Mnogim iz nashih pol'zovatelej takzhe nravitsya kniga The - Practical SQL Handbook, Bowman, Judith S., et al., Addison-Wesley. - Drugim nravitsya The Complete Reference SQL, Groff et al., - McGraw-Hill. - - Suschestvuet takzhe mnozhestvo prekrasnyh uchebnikov dostupnyh v - online: - * http://www.intermedia.net/support/sql/sqltut.shtm, - * http://sqlcourse.com. - * http://www.w3school.com/sql/default.asp - * http://mysite.verizon.net/Graeme_Birchall/id1.html - - 1.12) Kak mne prislat' ispravlenie ili prisoedinitsya k komande - razrabotchikov? - - Smotrite FAQ dlya razrabotchikov. - - 1.13) Kak sravnit' PostgreSQL s drugimi SUBD? Mozhet li PostgreSQL byt' - vstroennym? - - Suschestvuet neskol'ko metodov sravneniya programmnogo obespecheniya: - vozmozhnosti, proizvoditel'nost', nadezhnost', podderzhka i cena. - - Vozmozhnosti - PostgreSQL imeet bol'shinstvo vozmozhnostej predstavlennyh v - bol'shih kommercheskih SUBD, takie kak: tranzakcii, podzaprosy, - triggery, predstavleniya, ssylochnoj celostnosti vtorichnogo - klyucha i raznye blokirovki. U nas est' nekotorye vozmozhnosti, - kotoryh net u nih: tipy, opredelyaemye pol'zovatelem, mehanizm - nasledovaniya, pravila i konkuretnoe mnogoversionnoe upravlenie - dlya raboty s soderzhimym blokirovok. - - Proizvoditel'nost' - Proizvoditel'nost' PostgreSQL shodna s drugimi kommercheskimi - SUBD i s SUBD s otkrytym ishodnym kodom. V kakih-to veschah my - bystree, v kakih-to medlennee. Nasha proizvoditel'nosti obychno - +/-10% po sravneniyu s drugimi SUBD. - - Nadezhnost' - My ponimali, chto nasha SUBD dolzhna byt' nadezhnoj ili ona - nichego ne budet stoit'. My staraemsya vypuskat' horosho - proverennyj, stabil'nyj kod, kotoryj soderzhit minimum oshibok. - Kazhdyj vypusk prohodit stadiyu beta-testirovaniya po krajnej - mere v techenii odnogo mesyaca i nasha istoriya vypuskov - pokazyvaet chto my mozhem predostavlyat' stabil'nye, monolitnye - vypuski, kotorye gotovy k produktivnomu ispol'zovaniyu. My - verim, chto my proizvodim proverku ne huzhe, chem u drugih - SUBD. - - Podderzhka - Nash spisok rassylki predostavlyaet vozmozhmozhnost' obscheniya - s bol'shoj gruppoj razrabotchikov i pol'zovatelej, kotorye - mogut pomoch' reshit' lyubye voznikshie problemy. V to zhe - vremya, my ne garantiruem kakie-libo ispravleniya, no i - razrabotchiki kommercheskih SUBD ne vsegda delayut - ispravleniya. Pryamoj dostup k razrabotchikam, soobschestvu - pol'zovatelej, rukovodstvam i ishodnym tekstam chasto delayut - podderzhku PostgreSQL prevoshodyaschej drugie SUBD. - Suschestvuet kommercheskaya podderzhka po rezul'tam voznikshih - incidentov, kotoraya dostupna dlya teh komu ona nuzhna. - (Smotrite Sekciyu 1.7.) - - Cena - Nash produkt besplaten kak dlya kommercheskogo tak, i ne dlya - kommercheskogo ispol'zovaniya. Vy mozhete dobavlyat' svoj kod v - nash produkt bez ogranichenij, za isklyucheniem teh, chto - opisyvayutsya v nashej licenzii stilya BSD, kotoraya privedena - vyshe. - - PostgreSQL razrabatyvaetsya po arhitekture klient/server, kotoraya - trebuet otdel'nyh processov dlya kazhdogo klienta i servera, a takzhe - neskol'ko vspomogatel'nyh processov. Mnogie vstraivaemye arhitektury - mogut sootvetstvovat' takim trebovaniyam. Odnako, esli vasha - vstraivaemaya arhitektura trebuet server baz dannyh dlya zapuska - vnutri prikladnogo processa, vy ne mozhete ispol'zovat' Postgres i vam - luchshe by vybrat' dlya bazy dannyh kakoe-libo drugoe oblegchennoe - reshenie. - - 1.14) Budet li PostgreSQL rabotat' s poslednimi izmeneniyami, v raznyh - stranyh, kasayuschimisya dnevnogo vremeni? - - Izmeneniya v sohranenii dnevnogo vremeni v SSHA vklyucheny v - PostgreSQL versii 8.0.[4+] i vo vse sleduyuschie vypuski, naprimer v - 8.1. Izmeneniya po Kanade i Zapadnoj Avstralii vklyucheny v 8.0.[10+], - 8.1.[6+] i vse sleduyuschie vypuski. Vypuski PostgreSQL do 8.0 - ispol'zuyut informaciyu o sohranenii dnevnogo vremeni iz bazy dannyh - vremennyh zon v operacionnoj sisteme. - _________________________________________________________________ - - 1.15) Kak mne otpisat'sya ot spiskov rassylki PostgreSQL? Kak izbezhat' - polucheniya dubliruyuschih soobschenij? - - Stranica Majordomo na sajte PostgreSQL pozvolyaet podpisat'sya ili - otpisat'sya ot lyubogo iz spiskov rassylki PostgreSQL. (Vam mozhet - ponadobitsya vash parol' dlya Majordomo, kotoryj otpravlyaetsya na - vash E-mail, chtoby vojti v upravlenie vashimi podpiskami.) - - Vse spiski rassylki PostgreSQL nastarivayutsya tak, chtoby gruppovoj - otvet uhodil na adres spiska i na adres avtora soobscheniya. Tak - sdelano, chtoby pol'zovateli poluchali otvety na E-mail kak mozhno - bystree. Esli vy ne hotite poluchat' dubliruyuschie E-mail - soobscheniya iz spiska, v sluchayah kogda vy uzhe poluchili `eti - soobscheniya napryamuyu, ustanovite flazhok eliminatecc na stranice - Change Settings v Majordomo. Vy takzhe mozhete izbezhat' polucheniya - kopij svoih soobschenij dlya samogo sebya, esli snimite flazhok - selfcopy. - _________________________________________________________________ - - Voprosy pol'zovatelej po klientskoj chasti - - 2.1) Kakie interfejsy est' dlya PostgreSQL? - - Ustanovka PostgreSQL vklyuchaet tol'ko C i vstroennyj (embedded) C - interfejsy. Vse drugie interfejsy yavlyayutsya nezavisimymi proektami - i zagruzhayutsya otdel'no; samostoyatel'nost' proektov pozvolyaet im - organizovat' sobstvennoe raspisanie vypuskov novyh versij i imet' - sobstvennuyu komandu razrabotchikov. - - Nekotorye yazyki programmirovaniya, takie kak PHP vklyuchayut v sebya - interfejs k PostgreSQL. Interfejsy dlya takih yazykov kak Perl, TCL, - Python i mnogih drugih, dostupny na http://pgfoundry.org. - - 2.2) Kakie instrumenty suschestvuyut dlya ispol'zovaniya PostgreSQL cherez - Web? - - Prekrasnoe vvedenie vo vzaimodejstvie baz dannyh i Web mozhno najti - na: http://www.webreview.com - - Dlya integracii s Web, PHP http://www.php.net yavlyaetsya neplohim - interfejsom. - - V slozhnyh sluchayah, mnogie pol'zuyutsya Perl i DBD::Pg s CGI.pm ili - mod_perl. - - 2.3) Est' li u PostgreSQL graficheskij interfejs pol'zovatelya? - - Dlya PostgreSQL suschestvuet bol'shoe kolichestvo instrumentov s - graficheskim interfejsom kak kommercheskih, tak i otkrytyh. - Podrobnosti mozhno najti v Dokumentacii soobschestva dlya GUI - istrumentov PostgreSQL - _________________________________________________________________ - - Voprosy administrirovaniya - - 3.1) Kak mne ustanovit' PostgreSQL v mesto otlichnoe ot /usr/local/pgsql? - - Zadajte opciyu --prefix kogda zapuskaete configure. - - 3.2) Kak mne upravlyat' soedineniyami ot drugih komp'yuterov? - - Po umolchaniyu, PostgreSQL razreshaet tol'ko soedineniya na lokal'noj - mashine cherez sokety domena Unix ili TCP/IP soedineniya. Dlya togo, - chtoby drugie mashiny smogli podklyuchit'sya k baze vy dolzhny - izmenit' listen_addresses v postgresql.conf, razreshit' - host-avtorizaciya v fajle $PGDATA/pg_hba.conf i perestartovat' server - SUBD. - - 3.3) Kakie nastrojki mne nuzhno sdelat' dlya uluchsheniya proizvoditel'nosti? - - Suschestvuet tri glavnyh oblasti, kotorye potencial'no mogut - uvelichit' proizvoditel'nost': - - Izmenenie zaprosa - `Eto oznachaet modifikaciyu zaprosov dlya polucheniya luchshej - proizvoditel'nosti: - - + Sozdanie indeksov, vklyuchaya indeksy vyrazhenij i - chastichnye indeksy - + Ispol'zovanie COPY vmesto mnozhestva INSERT - + Gruppirovka neskol'kih operatorov v edinuyu tranzakciyu dlya - umen'sheniya nagruzki pri vypolnenii zaversheniya tranzakcii - + Ispol'zovanie CLUSTER, kogda iz indeksa beriotsya mnozhestvo - strok - + Ispol'zovanie LIMIT dlya togo, chtoby vozvraschalas' tol'ko - chast' vyvoda ot zaprosa - + Ispol'zovanie Podgotovlennyh (Prepared) zaprosov - + Ispol'zovanie ANALYZE dlya obsluzhivaniya statistiki - optimizatora - + Regulyarnoe ispol'zovanie VACUUM ili pg_autovacuum - + Udalenie indeksov vo vremya bol'shih izmenenij dannyh - - Nastrojka servera - Nekotorye ustanovki v postgresql.conf vliyayut na - proizvoditel'nost'. Podrobnyj polnyj spisok ustanovok sm. v - Administration Guide/Server Run-time Environment/Run-time - Configuration, a kommentarii sm. v - http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_co - nf_e.html i - http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html. - - Vybor "zheleza" - apparatnogo obespecheniya - Vliyanie "zheleza" na proizvoditel'nost' podrobno opisano v - http://www.powerpostgresql.com/PerfList/ i - http://momjian.us/main/writings/pgsql/hw_performance/index.html - . - - 3.4) Kakie vozmozhnosti dlya otladki est' v nalichii? - - Est' mnozhestvo ustanovok v nastrojkah servera, nachinayuschihsya na - log_* na - http://www.postgresql.org/docs/current/interactive/runtime-config-logg - ing.html, pozvolyayuschih protokolirovat' zaprosy i statistiku raboty - processa, kotoraya ochen' polezna dlya otladki i izmereniya - proizvoditel'nosti. - - 3.5) Pochemu ya poluchayu soobschenie "Sorry, too many clients" kogda - pytayus' podklyuchit'sya k baze? - - Vy dostigli ustanovlennogo po umolchaniyu ogranicheniya v 100 sessij - podklyucheniya k baze dannyh. Vam neobhodimo uvelichit' limit na - kolichestvo konkurentnyh backend processov dlya vashego servera BD, - izmeniv znachenie max_connections v fajle postgresql.conf i - perestartovat' server BD. - - 3.6) Kak vypolnit' obnovlenie PostgreSQL? - - Sm. informaciyu ob obnovlenii v - http://www.postgresql.org/support/versioning i special'nye instrukcii - v - http://www.postgresql.org/docs/current/static/install-upgrading.html. - - 3.7) Kakoe komp'yuternoe "zhelezo" ya dolzhen ispol'zovat'? - - Poskol'ku "zhelezo" personal'nyh komp'yuterov yavlyaetsya naibolee - sovmestimym, lyudi sklonny verit', chto takoe "zhelezo" imeet - odinakovoe kachestvo. `Eto ne tak. Pamyat' ECC, SCSI i kachestvennye - materinskie platy yavlyayutsya bolee nadiozhnymi i imeyut bolee - luchshuyu proizvoditel'nost', chem menee dorogoe "zhelezo". PostgreSQL - budet rabotat' na lyubom "zheleze", no esli dlya vas vazhny - nadiozhnost' i proizvoditel'nost', to s vashej storony budet mudro - postavit' sootvetstvuyuschee "zhelezo". Obsudit' raznoe "zhelezo" - mozhno v nashih spiskah rassylki. - _________________________________________________________________ - - Voprosy `ekspluatacii - - 4.1) Kak vypolnit' SELECT tol'ko dlya neskol'kih pervyh strochek zaprosa? - Proizvol'noj stroki? - - Dlya polucheniya tol'ko neskol'kih strok, esli vy znaete ih - kolichestvo na moment vypolneniya SELECT ispol'zujte LIMIT. - Esli est' kakoj-libo indeks, kotoryj sovpadaet s ORDER BY, to - vozmozhno, chto ves' zapros vypolnen i ne budet. Esli vy ne znaete - kolichestva neobhodimyh strok na moment vypolneniya SELECT, - ispol'zujte kursor i FETCH. - - To SELECT a random row, use: - SELECT col - FROM tab - ORDER BY random() - LIMIT 1; - - 4.2) Kak mne najti kakie tablicy, indeksy, bazy dannyh i pol'zovateli - suschestvuyut? Kak mne uvidet' zaprosy, kotorye ispol'zuet psql dlya - polucheniya `etoj informacii? - - CHtoby prosmatrivat' tablicy v psql, ispol'zujte komandu \dt. Polnyj - spisok komand v psql vy mozhete poluchit', ispol'zuya \?. Krome togo, - vy mozhete posmotret' ishodnyj kod psql v fajle - pgsql/src/bin/psql/describe.c. On soderzhit komandy SQL kotorye - generiruyutsya pri vvode v psql komand, nachinayuschihsya s obratnoj - kosoj cherty. Vy takzhe mozhete zapustit' psql s opciej -E tak, chtoby - `eta programma vydavala zaprosy, kotorye ona ispol'zuet dlya - vypolneniya zadannyh vami komand. PostgreSQL takzhe predostavlyaet SQL - sovmestimyj s INFORMATION SCHEMA interfejs, s pomosch'yu kotorogo, vy - mozhete sformirovat' zapros na poluchenie informacii o baze dannyh. - - Takzhe suschestvuyut sistemnye tablicy, nachinayuschiesya s pg_. - - Ispol'zujte psql -l dlya polucheniya spiska vseh baz dannyh. - - Takzhe posmotrite fajl pgsql/src/tutorial/syscat.source. On pokazyvaet - mnogie iz operatorov SELECT neobhodimyh dlya polucheniya informacii iz - sistemnyh tablic bazy dannyh. - - 4.3) Kak izmenit' tip dannyh kolonki? - - V 8.0 i bolee pozdnih versiyah, izmenenie tipa kolonki vypolnyaetsya - ochen' legko cherez ALTER TABLE ALTER COLUMN TYPE. - - V bolee rannih versiyah sdelajte tak: - 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; - - 4.4) Kakovy maksimal'nye razmery dlya strok v tablice, tablic i bazy dannyh? - - Suschestvuyut sleduyuschie ogranicheniya: - - Maksimal'nyj razmer bazy? neogranichen (suschestvuyut bazy na 32 TB) - Maksimal'nyj razmer tablicy? 32 TB - Maksimal'nyj razmer stroki? 400 Gb - Maksimal'nyj razmer polya? 1 GB - Maksimal'noe kolichestvo strok v tablice? neogranicheno - Maksimal'noe kolichestvo kolonok v tablice? 250-1600 v zavisimosti ot - tipa - Maksimal'noe kolichestvo indeksov v tablice? neogranicheno - - Razumeetsya, ponyatie "neogranicheno" na samom dele ogranichivaetsya - dostupnym diskovym prostranistvom i razmerami pamyati/svoppinga. Kogda - znacheniya perechislennye vyshe neopravdano bol'shie, mozhet - postradat' proizvoditel'nost'. - - Maksimal'nyj razmer tablicy v 32 TB ne trebuet chtoby operacionnaya - sistema podderzhivala fajly bol'shih razmerov. Bol'shie tablicy - hranyatsya kak mnozhestvo fajlov razmerom v 1 GB, tak chto - ogranicheniya, kotorye nakladyvaet fajlovaya sistema ne vazhny. - - Maksimal'nyj razmer tablicy i maksimal'noe kolichestvo kolonok mogut - byt' uvelicheny v chetyre raza, esli razmer bloka po umolchaniyu budet - uvelichen do 32k. - - Suschestvuet ogranichenie, po kotoromu indeksy ne mogut sozdavat'sya - dlya kolonok dlinnee chem 2,000 simvolov. K schast'yu takie indeksy - vryad li dejstvitel'no komu-to nuzhny. Unikal'nost' garantiruetsya - nailuchim obrazom, s pomosch'yu funkcional'nogo indeksa iz h`esha MD5 - dlinnoj kolonki, a polnotekstovoe indeksirovanie pozvolyaet iskat' - slova vnutri kolonki. - - 4.5) Kak mnogo diskovogo prostranstva v baze dannyh nuzhno dlya sohraneniya - dannyh iz obychnogo tekstovogo fajla? - - SUBD PostgreSQL mozhet potrebovat'sya diskovogo prostranstva do 5 raz - bol'she dlya sohraneniya dannyh iz prostogo tekstovogo fajla. - - V kachestve primera, rassmotrim fajl v 100,000 strok v kazhdoj, iz - kotoryh celoe chislo i tekstovoe opisanie. Pri `etom dlina teksta, v - srednem, sostavlyaet 20 bajt. Razmer prostogo fajla sostavit 2.8 MB. - Razmer bazy PostgreSQL, soderzhaschej `eti zhe dannye sostavit - priblizitel'no 5.2 MB iz kotoryh: - 24 bajt: na kazhdyj zagolovok stroki v tablice (priblizitel'no) - + 24 bajta: odno pole s celochislennym tipom i odno tekstovoe pole - + 4 bajta: ukazatel' na stranice dlya vsej tablichnoj stroki - ---------------------------------------- - 56 bajt na stroku v tablice - - Razmer stranicy dannyh v PostgreSQL sostavlyaet 8192 bajt (8 KB), tak chto: - - 8192 bajt na stranicu - --------------------- = 158 strok v tablice na stranicu BD (okruglionno) - 52 bajt na stroku v tablice - - 100000 strok dannyh - ----------------------- = 633 stranic v BD (okruglionno) - 158 strok v tablice na stranicu - - 633 stranic BD * 8192 bajt na stranicu = 5,185,536 bajt (5.2 MB) - - Indeksy ne trebuyut tak mnogo, no poskol'ku oni sozdayutsya dlya - bol'shogo kolichestva dannyh, oni takzhe mogut byt' veliki. - - Znacheniya NULL hranyatsya kak bitovye karty i po`etomu oni zanimayut - ochen' malo mesta. - - 4.6) Pochemu moi zaprosy rabotayut medleno? Pochemu oni ne ispol'zuyut moi - indeksy? - - Indeksy ne ispol'zuyutsya dlya kazhdogo zaprosa. Oni ispol'zuyutsya - tol'ko esli tablica bol'she minimal'nogo razmera i zapros vybiraet - tol'ko malen'kij procent strok v tablice. Tak ustroeno, potomu chto - dostup k disku s primeneniem randomizacii pri skanirovanii indeksov - mozhet byt' medlennee, chem prostoe chtenie tablicy ili ee - posledovatel'noe skanirovanie. - - CHtoby opredelit' neobhodimost' ispol'zovaniya indeksa dlya kakoj-libo - tablicy, PostgreSQL dolzhen imet' statistiku po `etoj tablice. `Eta - statistika sobiraetsya pri ispol'zovanii VACUUM ANALYZE ili prosto - ANALYZE. Ispol'zuya statistiku, optimizator uznaet o tom kak mnogo - strok v tablice i esli on dolzhen ispol'zovat' indeksy, to on mozhet - prinimat' luchshie resheniya. Statistika takzhe vliyaet na opredelenie - optimal'nogo poryadka svyazyvaniya i metoda svyazyvaniya. Pri - izmenenii soderzhimogo tablicy dolzhen periodicheski vypolnyatsya sbor - statistiki. - - Obychno indeksy ne ispol'zuyutsya dlya ORDER BY ili dlya vypolneniya - svyazyvanij. Posledovatel'nyj perebor sleduyuschij za yavnoj - sortirovkoj obychno bystree, chem poisk po indeksam v bol'shoj - tablice. Odnako, ORDER BY chasto kombiniruetsya s LIMIT i v `etom - sluchae indeks budet ispol'zovat'sya, poskol'ku pri vypolnenii budet - vozvraschat'sya nebol'shaya chast' tablicy. - - Esli vam kazhetsya, chto optimizator nekorrektno vybiraet - posledovatel'nyj perebor, ispol'zujte SET enable_seqscan TO 'off' i - zapustite zapros snova, chtoby uvidet', dejstvitel'no li skanirovanie - indeksov bystree. - - Kogda ispol'zuyutsya operacii s shablonami, naprimer LIKE ili ~, - indeksy mogut byt' ispol'zovany v sleduyuschih sluchayah: - * Nachalo stroki poiska dolzhno sovpadat' s nachalom iskomoj stroki, - t.e.: - + LIKE shablony ne dolzhny nachinat'sya s %.. - + ~ shablony regulyarnyh vyrazhenij dolzhna nachinat'sya na ^. - * Stroka poiska ne dolzhna nachinat'sya s simvola klassa, t.e. - [a-e]. - * Poisk nezavisimyj ot registra, takoj kak ILIKE i ~* ne ispol'zuet - indeksy. Vmesto nego, ispol'zujte indeksy vyrazhenij, kotorye - opisyvayutsya v sekcii 4.8. - * Vo vremya initdb dolzhna ispol'zovat'sya lokal' po umolchaniyu C, - potomu chto ne suschestvuet vozmozhnosti uznat' sleduyuschij - naibol'shij simvol dlya ne-C lokali. Vy mozhete dlya takih - sluchaev sozdat' special'nyj indeks text_pattern_ops kotoryj - rabotaet tol'ko dlya LIKE indeksirovaniya. Dlya poiska slov takzhe - mozhno ispol'zovat' polnotekstovyj indeks. - - 4.7) Kak posmotret' na to, kak optimizator vypolnyaet moj zapros? - - Smotrite stranicu rukovodstva posvyaschennuyu EXPLAIN. - - 4.8) Kak mne vypolnit' poisk regulyarnogo vyrazheniya i poisk nezavisimyj ot - registra bukv poisk regulyarnogo vyrazheniya? Kak mne ispol'zovat' indeks - dlya poiska nezavisimogo ot registra bukv? - - Operator ~ proizvodit poisk regulyarnogo vyrazheniya, a operator ~* - proizvodit nezavisimyj ot registra bukv poisk regulyarnogo - vyrazheniya. Nezavisimyj ot registra variant LIKE nazyvaetsya ILIKE. - - Nezavisimoe ot registra sravnenie obychno vyrazhaetsya tak: - SELECT * - FROM tab - WHERE lower(col) = 'abc'; - - `Eta konstrukciya ne budet ispol'zovat' standartnyj indeks. Odnako, - esli vy sozdadite indeks vyrazheniya, on budet ispol'zovan: - CREATE INDEX tabindex ON tab (lower(col)); - - Esli vysheukazannyj indeks sozdaiotsya kak UNIQUE, to kolonka, dlya - kotoroj on sozdaiotsya mozhet hranit' simvoly i v verhnem, i v nizhnem - registre, indes ne mozhet imet' identichnyh znachenij, kotorye - otlichayutsya tol'ko registrom. CHtoby v kolonke mozhno bylo hranit' - simvoly tol'ko v opredelionnom registre, ispol'zujte ogranichenie - CHECK ili proverku cherez trigger. - - 4.9) Kak mne opredelit', chto znachenie polya v kakom-libo zaprose ravno - NULL? Kak mne soedinit' vozmozhnye NULL? Mogu ya sortirovat' polya NULL ili - net? - - Vy prosto sravnivaete znachenie s IS NULL i IS NOT NULL, kak zdes': - SELECT * - FROM tab - WHERE col IS NULL; - - CHtoby soedinit' s vozmozhnymi znacheniyami NULL, ispol'zujte - COALESCE() kak zdes': - SELECT COALESCE(col1, '') || COALESCE(col2, '') - FROM tab - - CHtoby otsortirovat' dannye po znacheniyu ispol'zujte modifikatory IS - NULL i IS NOT NULL v vyrazhenii ORDER BY. Kogda oni budut generirovat' - znacheniya istina, to pri sortirovke oni budut vyshe, chem znacheniya - lozh', tak chto zapisi s NULL budut v otsortirovannom spiske sverhu: - SELECT * - FROM tab - ORDER BY (col IS NOT NULL); - - 4.10) Kakovy otlichiya mezhdu raznymi simvol'nymi tipami? - - Tip Vnutrennee imya Zamechaniya - VARCHAR(n) varchar razmer zadaet maksimal'nuyu dlinu, net zapolneniya - CHAR(n) bpchar zapolnyaetsya pustotoj do fiksirovannoj dliny - TEXT text net zadavaemogo verhnego ogranicheniya ili dliny - BYTEA bytea massiv bajt peremennoj dliny (mozhno ispol'zovat' - null-bajt bez opaski) - "char" char odin simvol - - Vnutrennee imya vy mozhete uvidet', kogda smotrite sistemnye katalogi - i v nekotoryh soobscheniyah ob oshibkah. - - Pervye chetyre tipa yavlyayutsya "varlena" tipami (t.e., pervye - chetyre bajta na diske yavlyayutsya dlinnoj, za kotoroj sleduyut - dannye). Takim obrazom, fakticheski ispol'zuemoe prostranstvo bol'she, - chem oboznachennyj razmer. Odnako, dlinnye znacheniya takzhe - szhimayutsya, tak chto zanimaemoe diskovoe prostranstvo mozhet takzhe - byt' i men'she, chem ozhidalos'. - VARCHAR(n) - `eto luchshee reshenie, kogda nuzhno hranit' stroki - peremennoj dliny, ne prevyshayuschie opredelennogo razmera. TEXT - - `eto luchshee reshenie dlya strok neogranichennoj dliny, s maksimal'no - dopustimoj dlinoj v 1 gigabajt. - - CHAR(n) - `eto luchshee reshenie dlya hraneniya strok, kotorye obychno - imeyut odinakovuyu dlinu. CHAR(n) zapolnyaetsya pustotoj do zadannoj - dliny, v to vremya kak VARCHAR(n) hranit tol'ko simvoly, iz kotoryh - sostoit stroka. BYTEA ispol'zuetsya dlya hraneniya binarnyh dannyh, - znacheniya kotoryh mogut vklyuchat' NULL bajty. Vse tipy opisannye - zdes', imeyut shodnye harakteristiki proizvoditel'nosti. - - 4.11.1) Kak mne sozdat' pole serial/s-avto-uvelicheniem? - - PostgreSQL podderzhivaet tip dannyh SERIAL. On avtomaticheski sozdaet - posledovatel'nost'. Naprimer: - CREATE TABLE person ( - id SERIAL, - name TEXT - ); - - avtomaticheski transliruetsya v: - CREATE SEQUENCE person_id_seq; - CREATE TABLE person ( - id INT4 NOT NULL DEFAULT nextval('person_id_seq'), - name TEXT - ); - - Avtomaticheski sozdannaya posledovatel'nost' imeet imya vida - __seq, gde tablica i kolonka_serial - `eto - sootvetstvenno imena tablicy i kolonki s tipom SERIAL. Smotrite - podrobnosti o posledovatel'nostyah na stranice rukovodstva - posvyaschennoj create_sequence. - - 4.11.2) Kak mne poluchit' znachenie pri vstavke SERIAL? - - Prostejshij sposob poluchit' naznachennoe znachenie SERIAL `eto - ispol'zovat' RETURNING. Ispol'zuya dlya primera tablicu v 4.11.1, `eto - mozhet vyglyadet' tak: - INSERT INTO person (name) VALUES ('Blaise Pascal') RETURNING id; - - Vy takzhe mozhete vyzvat' nextval() i ispol'zovat' `eto znachenie v - INSERT ili vyzvat' currval() posle INSERT. - - 4.11.3) Ne mozhet li poluchit'sya tak, chto ispol'zovanie currval() i - nextval() privedet k zaciklirovaniyu s drugimi pol'zovatelyami? - - Net. currval() vozvraschaet tekuschee znachenie, naznachennoe vashej - sessiej, a ne drugimi sessiyami. - - 4.11.4) Pochemu chisla iz moej posledovatel'nosti ne ispol'zuyutsya snova pri - otmene tranzakcii? Pochemu sozdayutsya razryvy pri numeracii v kolonke, gde - ya ispol'zuyu posledovatel'nost'/SERIAL? - - Dlya realizacii konkuretnosti, znacheniya posledovatel'nostej, pri - neobhodimosti vydayutsya vo vremya zapuska tranzakcij i ne - blokiruyutsya do polnogo vypolneniya tranzakcij. `Eto mozhet vyzyvat' - razryvy v numeracii pri otmene tranzakcij. - - 4.12) CHto takoe OID? CHto takoe CTID? - - Esli tablica sozdana s WITH OIDS, to kazhdaya stroka poluchaet - unikal'nyj indentifikator OID. OID - `eto avtomaticheski naznachaemoe - unikal'noe 4-h bajtovoe celoe chislo, kotoroe unikal'no dlya vsej - ustanovlennoj SUBD. Odnako, posle togo kak ego znachenie prevysit 4 - milliarda, znacheniya OID nachinayut dublirovat'sya. PostgreSQL - ispol'zuet OID dlya svyazyvaniya svoih vnutrennih tablic. - - Dlya unikal'nogo znacheniya v strokah tablicy pol'zovatelya, luchshim - sposobom yavlyaetsya ispol'zovanie SERIAL vmesto OID, potomu chto - posledovatel'nosti SERIAL unikal'ny tol'ko vnutri tablicy i takim - obrazom men'she podverzheny perepolneniyu. Dlya hraneniya znachenij - 8-mi bajtnoj posledovatel'nosti dostupen tip SERIAL8. - - CTID ispol'zuetsya dlya identifikacii special'nyh fizicheskih zapisej - s blochnymi i offset znacheniyami. CTID izmenyaetsya posle togo kak - stroki v tablice byli izmeneny ili peregruzheny. - - TID ispol'zuetsya indeksnymi zapisyami v kachestve ukazatelya na - fizicheskie zapisi. - - 4.13) Pochemu ya poluchayu oshibku "ERROR: Memory exhausted in - AllocSetAlloc()"? - - Predpolozhitel'no u vas zakonchilas' virtual'naya pamyat' ili chto - vashe yadro imeet malen'kij limit na opredelennye resursy. Popytajtes' - pered zapuskom servera BD vypolnit' sleduyuschie komandy: - ulimit -d 262144 - limit datasize 256m - - V zavisimosti ot komandnogo interpretatora shell, tol'ko odna iz - dannyh komand vypolnitsya uspeshno, no ona pozvolit vam ustanovit' - bol'shij segment dannyh processa i vozmozhno reshit problemu. `Eta - komanda izmenyaet parametry tekuschego processa i vseh ego potomkov, - sozdannyh posle eio zapuska. Esli u vas voznikla problema s SQL - klientom, potomu chto backend vozvraschaet slishkom bol'shoj ob"em - dannyh, popytajtes' vypolnit' `etu komandu pered zapuskom klienta. - - 4.14) Kak mne uznat', kakaya versiya PostgreSQL zapuschena? - - Iz psql, naberite SELECT version(); - - 4.15) Kak mne sozdat' kolonku kotoraya po umolchaniyu budet soderzhat' - tekuschee vremya? - - Ispol'zujte CURRENT_TIMESTAMP: -CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); - - 4.16) Kak mne vypolnit' vneshnee svyazyvanie? - - PostgreSQL podderzhivaet vneshnee svyazyvanie, ispol'zuya standartnyj - sintaksis SQL. Vot dva primera: - SELECT * - FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col); - - ili - SELECT * - FROM t1 LEFT OUTER JOIN t2 USING (col); - - `Eto identichnye zaprosy svyazyvaniya t1.col i t2.col, takzhe - vozvraschayut lyubye nesvyazannye stroki v t1 (kotorye ne sovpadayut s - t2). RIGHT svyazyvanie dolzhno dobavit' nesvyazannye stroki t2. FULL - svyazyvanie dolzhno vozvratit' sovpavshie stroki plyus vse - nesvyazannye stroki iz t1 i t2. Slovo OUTER yavlyaetsya - neobyazatel'nym i naznachaetsya v LEFT, RIGHT i FULL svyazyvaniyah. - Obychnye svyazyvaniya nazyvayutsya INNER svyazyvaniya. - - 4.17) Kak vypolnyat' zaprosy, ispol'zuyuschie neskol'ko baz dannyh? - - Ne suschestvuet sposoba sozdat' zapros k bazam dannyh otlichnym ot - tekuschej. Poskol'ku PostgreSQL zagruzhaet sistemnye katalogi - specifichnye dlya bazy dannyh, neponyatno dazhe, kak dolzhen sebya - vesti takoj mezhbazovyj zapros. - - contrib/dblink pozvolyaet zaprosy mezhdu bazami, ispol'zuya vyzovy - funkcij. Razumeetsya, klient mozhet odnovremenno takzhe ustanavlivat' - soedieneniya s razlichnymi bazami dannyh i takih obrazom ob"edinyat' - informaciyu iz nih. - - 4.18) Kak mne vernut' iz funkcii neskol'ko strok tablicy? - - Vy mozhete legko ispol'zovat' funkcii, vozvraschayuschie spisok, - http://wiki.postgresql.org/wiki/Return_more_than_one_row_of_data_from_ - PL/pgSQL_functions. - - 4.19) Pochemu ya poluchayu oshibku "relation with OID #### ne suschestvuet", - kogda obraschayuts' k vremennym tablicam v funkciyah PL/PgSQL? - - V PostgreSQL do versii 8.3, PL/PgSQL k`eshiruet scenarii funkcii i - odin iz negativnyh `effektov `etogo sostoit v tom, chto esli funkciya - PL/PgSQL obraschaetsya k vremennoj tablice i `eta tablica pozdnee - udalyaetsya i peresozdaetsya, a funkciya zatem vyzyvaetsya snova, to - ee vyzov privedet k oshibke, potomu chto sk`eshirovannoe soderzhimoe - funkcii soderzhit ukazatel' na staruyu vremennuyu tablicu. CHtoby - reshit' `etu problemu, ispol'zujte EXECUTE dlya dostupa k vremennym - tablicam v PL/PgSQL. Ispol'zovanie `etogo operatora zastavit zapros - peregenerirovat'sya kazhdyj raz. - - V PostgreSQL 8.3 i pozdnee, `etoj problemy net. - - 4.20) Kakie est' resheniya dlya replikacii? - - Hotya "replikaciya" -- `eto edinyj termin, est' neskol'ko raznyh - tehnologij dlya vypolneniya replikacij s raznymi osobennostyami dlya - kazhdoj. - - Replikaciya Master/slave pozvolyaet imet' odin glavnyj (master) server - dlya vypolneniya zaprosov chteniya/zapisi, v to vremya kak - podchinionnye (slave) servera mogut proizvodit' tol'ko zaprosy - chteniya/SELECT. Naibolee populyarnym resheniem dlya replikacii - master-slave v PostgreSQL yavlyaetsya Slony-I. - - Replikaciya Multi-master pozvolyaet vypolnyat' zaprosy chteniya/zapisi - na neskol'kih, repliciruemyh drug s drugom komp'yuetrah. `Eta - osobennost' takzhe privodit k potere proizvoditel'nosti, potomu chto - neobhodima sinhronizaciya izmenenij mezhdu neskol'kimi serverami. - Naibolee populyarnym resheniem dlya takoj replikacii v PostgreSQL - yavlyaetsya PGcluster. - - 4.21) Pochemu imena tablicy i kolonok ne raspoznayutsya v v moiom zaprose? - Pochemu ne sohranyayutsya zaglavnye bukvy? - - Naibolee chasto imena neraspoznayutsya iz-za ispol'zovaniya dvojnyh - kavychek v imeni tablicy ili kolonki pri sozdanii tablicy. Pri - ispol'zovanii dvojnyh kavychek, imya tablicy i kolonki (kotorye - nazyvayut identifikatorami) sohranyayutsya v registro-zavisimom vide; - `eto oznachaet, chto vy dolzhny ispol'zovat' dvojnye kavychki, kogda - ukazyvaete `eti imena v zaprose. Nekotorye interfejsy, takie kak - pgAdmin, vo vremya sozdaniya tablicy dobavlyayut dvojnye kavychki - avtomaticheski. Takim obrazom, chtoby identifikatory raspoznavalis' vy - dolzhny sledovat' odnomu iz sleduyuschih pravil: - * Izbegat' ispol'zovaniya dvojnyh kavychek pri sozdanii tablic - * Ispol'zovat' v identifikatorah tol'ko simvoly nizhnego registra - * Ispol'zovat' dvojnye kavychki dlya identifikatorov v zaprosah diff --git a/doc/FAQ_turkish b/doc/FAQ_turkish deleted file mode 100644 index d1c886d2a9..0000000000 --- a/doc/FAQ_turkish +++ /dev/null @@ -1,1192 +0,0 @@ - - PostgreSQL için Sýkça Sorulan Sorular (SSS) - - Son güncelleme : 15 Kasým 2004 Pazartesi - 15:03:23 - - Current maintainer: Bruce Momjian (pgman@candle.pha.pa.us) - - Çevirenler : Devrim Gündüz (devrim@tdmsoft.com) - Nicolai Tufar (ntufar@tdmsoft.com) - Volkan YAZICI (volkany@phreaker.net) - - Bu belgenin en güncel hali, - http://www.PostgreSQL.org/docs/faqs/FAQ_turkish.html ve - http://www.gunduz.org/seminer/pg/FAQ_turkish.html adreslerinde - görülebilir. - - Platforma özel sorularýnýz, http://www.PostgreSQL.org/docs/index.html - adresinde yanýtlanýr. - _________________________________________________________________ - - Genel Sorular - - 1.1) PostgreSQL nedir? Nasýl okunur? - 1.2) PostgreSQL'in haklarý nedir? - 1.3) PostgreSQL, hangi Unix platformlarýnda çalýþýr? - 1.4) Hangi Unix olmayan uyarlamalarý bulunmaktadýr? - 1.5) PostgreSQL'i nereden indirebilirim? - 1.6) Desteði nereden alabilirim? - 1.7) En son sürümü nedir? - 1.8) Hangi belgelere ulaþabilirim? - 1.9) Bilinen hatalar ya da eksik özelliklere nereden ulasabilirim? - 1.10) Nasýl SQL öðrenebilirim? - 1.11) PostgreSQL 2000 yýlýna uyumlu mudur? - 1.12) Geliþtirme takýmýna nasýl katýlabilirim?? - 1.13) Bir hata raporunu nasýl gönderebilirim? - 1.14) PostgreSQL, diðer VTYS(DBMS) lerle nasýl karþýlaþtýrýlabilir? - 1.15) PostgreSQL'e maddi açýdan nasýl destek olabilirim? - - Kullanýcý/istemci Sorularý - - 2.1) PostgreSQL için ODBC sürücüleri var mý? - 2.2) PostgreSQL'i web sayfalarýnda kullanabilmek için hangi araçlar - bulunmaktadýr? - 2.3) PostgreSQL'in grafik kullanýcý arabirimi var mýdýr? - 2.4) PostgreSQL ile iletiþimi kurabilmek için hangi dilleri - kullanabilirim? - - Yönetimsel Sorular - - 3.1) PostgreSQL'i /usr/local/pgsql dizininden baþka dizinlere nasýl - kurabilirim? - 3.2) Postmaster'ý baþlattýðýmda Bad System Call ya da core dumped - mesajý alýyorum. Neden? - 3.3) Postmaster'ý baþlattýðýmda, IpcMemoryCreate hatasý alýyorum. - Neden? - 3.4) Postmaster'ý, baþlattýðýmda, IpcSemaphoreCreate hatasý alýyorum. - Neden? - 3.5) Diðer bilgisayarlarýn benim PostgreSQL veritabaný sunucuma - baðlantýlarýný nasýl kontrol edebilirim? - 3.6) Veritabaný motorunu daha iyi baþarým icin nasýl ayarlayabilirim? - 3.7) Hangi hata ayýklama özellikleri bulunmaktadýr? - 3.8) Baðlanmaya çalýþýrken, neden "Sorry, too many clients" hatasýný - alýyorum. Neden? - 3.9) pgsql_tmpdizinin içindeki dosyalar nelerdir? - 3.10) PostgreSQL sürümlerini yükseltmek için neden bir dump/reload - iþlemi gerçekleþtirmek zorundayým? - 3.11) Nasýl bir donaným kullanmalýyým?br> - - Ýþletimsel Sorular - - 4.1) Binary cursor ve normal cursor arasýndaki fark nedýr? - 4.2) Sorgunun sadece ilk birkaç satýrýný nasýl SELECT edebilirim? - 4.3) psql'in içinde gördügüm tablolarýn ya da diðer þeylerin listesini - nasýl alabilirim? - 4.4) Bir tablodan bir kolonu nasýl kaldýrabilirim? - 4.5) Bir satýr, tablo ve veritabaný için en fazla büyüklük nedir? - 4.6) Tipik bir metin dosyasýndaki veriyi saklamak için ne kadar disk - alaný gereklidir? - 4.7) Veritabanýnda hangi tablo ya da index'lerin tanýmlandýðýný nasýl - görebilirim? - 4.8) Sorgularým cok yavaþ, ya da index'lerimi kullanmýyorlar. Neden? - 4.9) Query-optimizer'ýn sorgularýmý nasýl deðerlendirdiðini, iþleme - soktuðunu nasýl görebilirim? - 4.10) R-tree index nedir? - 4.11) Genetic Query Optimizer nedir? - 4.12) Düzenli ifade (Regular Expression) aramalarýný ve büyük/küçük - harfe duyarsýz aramalarý nasýl yapabilirim? Bu büyük/küçük harfe - duyarlý aramalar için index'i nasýl kullanabilirim? - 4.13) Bir sorguda, bir alanýn NULL olduðunu nasýl ortaya - çýkarabilirim? - 4.14) Çesitli karakter tipleri arasýndaki farklar nelerdir? - 4.15.1) Nasýl serial/otomatik artan (auto-incrementing) bir alan - yaratabilirim? - 4.15.2) Serial giriþinin deðerini nasýl alabilirim? - 4.15.3) currval() ve nextval() diðer kullanýcýlara sorun yaratmaz mý? - 4.15.4) Neden sequence sayýlarýn transaction iþleminin iptalinden - sonra yeniden kullanýlýyor? Neden sequence/SERIAL kolonumdaki - sayýlarda atlamalar oluyor? - 4.16) OID nedir? TID nedir? - 4.17) PostgreSQL' de kullanýlan bazý terimlerin anlamlarý nelerdir? - 4.18) Neden "ERROR: Memory exhausted in AllocSetAlloc()" hatasýný - alýyorum? - 4.19) Hangi PostgreSQL sürümünü çalýstýrdýðýmý nasýl görebilirim? - 4.20) Neden large-object iþlemlerim, "invalid large obj descriptor" - hatasýný veriyor? - 4.21) Þu andaki zamaný öntanýmlý deðer olarak kabul eden kolonu nasýl - yaratýrým? - 4.22) Neden IN kullanan subquery'lerim çok yavaþ? - 4.23) Outer join iþlemini nasýl yapabilirim? - 4.24) Ayný anda birden fazla veritabanýnda nasýl iþlem yapabilirim? - 4.25) Bir fonksiyondan nasýl çoklu satýr ya da kolon döndürebilirim? - 4.26) Neden Pl/PgSQL fonksiyonlarý içinden güvenli bir þekilde tablo - yaratma/kaldýrma iþlemlerini yapamýyoruz? - 4.27) Hangi þifreleme seçenekleri bulunmaktadýr? - - PostgreSQL Özelliklerini Geniþletmek - - 5.1) Kullanýcý-tanýmlý bir fonksiyon yazdým. psql'de çalýþtýrdýðým - zaman neden core dump ediyor? - 5.2) PostgreSQL'e nasýl yeni veri tipleri/fonksiyonlar ekleyebilirim? - 5.3) Bir tuple döndürmek için bir C fonksiyonunu nasýl yazarým? - 5.4) Bir kaynak dosyasýnda deðiþiklik yaptým. Yeniden derlememe raðmen - deðiþiklik geçerli olmuyor. Neden? - _________________________________________________________________ - - Genel Sorular - - 1.1) PostgreSQL nedir? Nasýl okunur? - - PostgreSQL, Post-Gres-Q-L. olarak okunur - - PostgreSQL, yeni-nesil VTYS araþtýrma prototipi olan POSTGRES - veritabaný yönetim sisteminin geliþtirilmesidir. POSTGRES'in zengin - veri tiplerini ve güçlü veri modelini tutarken, SQL'in geliþtirilmiþ - alt kümesi olan PostQuel dilini kullanýr. PostgreSQL ücretsizdir ve - kaynak kodu açýk daðýtýlýr. - - PostgreSQL, PostgreSQL geliþtirme listesine üye olan bir Internet - geliþtirici takýmý tarafýndan geliþtirilir. Þu andaki koordinatör, - Marc G. Fournier (scrappy@PostgreSQL.org). (Bu takýma nasýl - katýlacagýnýzý öðrenmek için 1.6 numaralý maddeyi okuyunuz.) Bu takým, - tüm PostgreSQL geliþiminden sorumludur. - - PostgreSQL 1.01 sürümünün yazarlarý Andrew Yu ve Jolly Chen idi. - Bunlarýn dýþýnda bir kaç kisi de uyarlama, hata ayýklama ve kodun - geliþtirilmesi için çalýsmýþtý. PostgreSQL'in türediði orijinal - Postgres kodu, lisans, lisansüstü ve akademisyenler tarafýndan, - Professor Michael Stonebraker (University of California, Berkeley) - koordinatörlügünde yazýlmýþtýr. - - Berkley'deki yazýlýmýn adý Postgres idi. SQL uyumluluðu 1995'te - eklenince, adý Postgres 95 oldu. 1996 yýlýnýn sonlarýnda adý - PostgreSQL olarak deðiþtirildi. - - 1.2) PostgreSQL'in haklarý nedir? - - PostgreSQL Data Base Management System - - Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group - Portions Copyright (c) 1994-6 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. - - Üstteki metin klasik açýk-kod lisansý olan BSD lisansýdýr. Kaynak - kodun nasýl kullanýlabileceðine dair sýnýrlamalarý yoktur. Bu lisansý - seviyoruz. Deðiþtirme niyetimiz bulunmamaktadýr. - - 1.3) PostgreSQL, hangi Unix platforlarýnda çalýþýr? - - Genel olarak, modern bir Unix-uyumlu platform PostgreSQL'i - çalýþtýracaktýr. Ayrýntýlý bilgi için kurulum belgelerine - bakabilirsiniz. - - 1.4) Hangi Unix olmayan uyarlamalarý bulunmaktadýr? - - PostgreSQL 8.0 sürümü ile , PostgreSQL artýk Win2000, WinXP ve Win2003 - gibi Microsoft Windows NT tabanlý iþletim sistemlerinde doðal olarak - çalýþmaya baþlamýþtýr. Paketlenmiþ bir kurulum programý, - http://pgfoundry.org/projects/pginstaller. adresinden indirilebilir. - - Ayrýca, http://forge.novell.com adresinde Novell Netware 6 portu - bulunmaktadýr. - - 1.5) PostgreSQL'i nereden indirebilirim? - - PostgreSQL için ana anonim ftp sitesi ftp://ftp.PostgreSQL.org/pub - adresidir. Yansýlar için, ana web sayfamýza bakabilirsiniz. - - 1.6) Nereden destek alabilirim? - - Ana e-posta listesi : pgsql-general@PostgreSQL.org. PostgreSQL - konusundaki tartýþmalara açýktýr. Üye olmak için, aþaðýdaki satýrlarý - e-postanýzýn body kýsmýna (konu kýsmýna deðil) yazýp, - pgsql-general-request@PostgreSQL.org adresine gönderin: -subscribe -end - - Ayný zamanda, bir digest listesi bulunmaktadýr. Bu listeye üye olmak - için, pgsql-general-digest-request@PostgreSQL.org adresine, body - kýsmýnda -subscribe -end - - yazan bir e-posta atmanýz yeterli olacaktýr. - - Digest postalar, ana liste 30k civarýnda e-postaya ulaþtýðýnda üyelere - gönderilmektedir. - - Bug'lar için bir e-posta listesi bulunmaktadýr. Bu listeye üye olmak - için, pgsql-bugs-request@PostgreSQL.org adresine, body kýsmýnda -subscribe -end - - yazan bir e-posta atmanýz yeterli olacaktýr. - - Ayný zamanda, geliþtiriciler için tartýþma listesi bulunmaktadýr. Bu - listeye üye olmak için, pgsql-hackers-request@PostgreSQL.org adresine, - body kýsmýnda -subscribe -end - - yazan bir e-posta atmanýz yeterli olacaktýr. - - Bunun dýþýndaki e-posta listelerine ve PostgreSQL hakkýnda bilgiye, - PostgreSQL WWW ana sayfasýndan ulasabilirsiniz: - http://www.PostgreSQL.org - - Ayný zamanda, EFNet üzerinde, #PostgreSQL adlý bir IRC kanalý - bulunmaktadýr. Bunun için, irc -c '#PostgreSQL' "$USER" - irc.phoenix.net Unix komutunu kullanabilirsiniz. - - Ticari destek veren firmalarýn listesine - - http://www.postgresql.org/users-lounge/commercial-support.html - - adresinden ulaþbilirsiniz. - - 1.7) En son sürüm nedir? - - PostgreSQL'in son sürümü 7.4.6'dýr. - - Her 6-8 ayda ana sürüm çýkarýlmasý planlanmaktadýr. - - 1.8) Hangi belgelere ulaþabilirim? - - Daðýtýmýn içinde, kitapçýklar, kitapçýk sayfalarý ve bazý küçük - örnekler verilmektedir. /doc dizinine bakýnýz. Ayrýca, bu el - kitapçýklarýný online olarak http://www.PostgreSQL.org/docs/ - adresinden inceleyebilirsiniz. - - http://www.PostgreSQL.org/docs/awbook.html ve - http://www.commandprompt.com/ppbook adreslerinde PostgreSQL kitaplarý - bulunmaktadýr. PostgreSQL kitablarýnýn listesine, - http://www.ca.PostgreSQL.org/books/ adresinden ulaþaiblirsiniz. - Ayrýca, PostgreSQL konusundaki teknik makalelere de - http://techdocs.PostgreSQL.org/ adresinden ulaþabilirsiniz. - - psql'in, \d ile baslayan veri tipler, operatorler, fonksiyonlar, - aggregate'ler, vb. ile ilgili güzel komutlarý vardýr. - - Web sitemiz daha fazla belgeyi içermektedir. - - 1.9) Bilinen hatalar ya da eksik özelliklere nereden ulaþabilirim? - - PostgreSQL SQL-92 uyumluluðu içindedir, standartlardan fazla da - özellikleri bulunmaktadýr. Bilinen hatalar, eksik özellikler ve - gelecek ile ilgili planlar için TODO listesine bakýnýz. - - 1.10) Nasýl SQL öðrenebilirim? - - http:/www.PostgreSQL.org/docs/awbook.html adresindeki kitap SQL - ögretecektir. http://www.commandprompt.com/ppbook adresinde de bir - baska PostgreSQL kitabý bulunmaktadýr. - - http://www.intermedia.net/support/sql/sqltut.shtm, - http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM - http://sqlcourse.com ve http://sqlcourse2.com adreslerinde de güzel - belgeler bulunmaktadýr. - - Bir baþkasý da, http://members.tripod.com/er4ebus/sql/index.htm - adresinde bulunan "Teach Yourself SQL in 21 Days, Second Edition" - kitabýdýr. - - Bazý kullanýcýlarýmýz da þu kitabý önermektedirler: "The Practical SQL - Handbook, Bowman, Judith S., et al.,Addison-Wesley". Bazýlarý ise "The - Complete Reference SQL, Groff et al., McGraw-Hill" kitabýný - önermektedirler. - - 1.11) PostgreSQL 2000 yýlýna uyumlu mudur? - - Evet. - - 1.12) Geliþtirme takýmýna nasýl katýlabilirim? - - Öncelikle, en son kaynak kodunu indirin ve web sitemizdeki ya da - daðýtýmýn içindeki PostgreSQL Developer belgesini okuyun. Ardýndan, - pgsql-hackers ve pgsql-patches listelerine üye olun. Üçüncü olarak da, - pgsql-pacthes listesine yüksek kalitede yamalar gönderin. - - PostgreSQL CVS arþivine eriþim izni olan, 10 kadar geliþtirici - bulunmaktadýr. Hepsi defalarca, diðer kiþilerin yaptýðýndan çok daha - yüksek-kaliteli yamalar göndermiþlerdir. Ayrýca biz de bu - geliþtiricilerin ekledikleri yamalarýn yüksek kalitede olduðuna - güveniyoruz. - - 1.13) Bir hata raporunu nasýl gönderebilirim? - - PostgreSQL BugTool sayfasýna gidiniz. O sayfada bir bug bildirmek için - neleri yapmanýz gerektiði anlatýlmýþtýr. - - Ayrýca, ftp://ftp.PostgreSQL.org/pub ftp adresimizde, yeni bir - PostgreSQL sürümü ya da yamasý olup olmadýðýni kontrol ediniz. - - 1.14) PostgreSQL, diger DBMS'lerle nasýl karþýlastýrýlabilir? - - Bir yazýlýmýn gücünü ölçmek için çeþitli yollar vardýr: Yazýlýmýn - özellikleri, baþarýmý, güvenilirliði, desteði ve ücreti. - - Özellikler: - - PostgreSQL mevcut büyük ticari veritabanlarýnýn, transaction, - subselect, trigger, view, foreign key referential integrity ve - sophisticated locking gibi (user-defined types), rules, inheritance ve - lock cakýþmalarýný düþürmek için multi-version uyumluluk özellikleri - bulunmaktadýr. - - Performans (Baþarým): - - PostgreSQL, diðer ticari ve açýk kaynak kodlu veritabanlarýyla yakýn - baþarýmý saðlar. Bazý açýlardan daha hýzlýdýr, diðer açýlardan da - yavaþtýr. MySQL ya da daha zayýf veritabanlarý ile - karþýlaþtýrýldýðýnda, INSERT/UPDATE iþlemlerinde, transaction bazlý - çalýstýðýmýz için daha yavaþýz. MySQL, yukarýdaki "özellikler" - kýsmýnda belirtilenlerden hiç birine sahip deðildir. Biz, baþarýmýmýzý - her sürümde arttýrsak da, esneklik ve geliþmiþ özellikler için - yapýlanmýþ durumdayýz. PostgreSQL'i MySQL ile karþýlaþtýran þu web - sitesine bakabilirsiniz: http://openacs.org/why-not-mysql.html - - Güvenilirlik: - - DBMS'lerin güvenilir olmasý gerketiði, yoksa deðerleri olmayacaðýný - düþünüyoruz. Çok iyi test edilmiþ, dengeli çalýsan minimum sayýda hata - içeren kod sunmaya çalýþýyoruz. Her bir sürüm en az 1 aylýk beta - testlerinden geçirilmektedir. Sürüm geçmiþine bakarsanýz, üretime - hazýr, dengeli ve kararlý kodlar sunduðumuzu görebilirsiniz. Bu - alanda, diðer veritabaný yazýlýmlarýna üstünlüðümüz olduðuna - inanmaktayýz. - - Destek: - - E-posta listemiz, oluþan herhangi bir sorunu çözebilecek büyük sayýda - kullanýcý ve geliþtirici grubunu içerir. Sorununuz için, en az bir - ticari veritabaný kadar rahat çözüm bulabilirsiniz. Gelistiricilere, - kullanýcý grubuna, belgelere ve kaynak koda direk olarak eriþebilme, - PostgreSQL desteðini, diðer DBMS'lere göre daha önemli kýlar. - Gereksinimi olanlara, ticari destek verilebilir. (Destek için 1.6 - bölümüne bakýnýz.) - - Fiyat: - - Ticari ve ticari olmayan tüm kullanýmlarýnýz için PostgreSQL - ücretsizdir. Kodumuzu, yukarýda belirtilen BSD-stili lisanstaki - sýnýrlamalar hariç, ürününüzün içine ekleyebilirsiniz. - - 1.15) PostgreSQL'e maddi açýdan nasýl destek olabilirim? - - PostgreSQL, 1996 yýlýndan beri 1. sýnýf altyapýya sahiptir. Bunun - için, yýllar boyu çalýþýp bu altyapýyý oluþturup yöneten Marc - Fournier'e teþekkürler. - - Bir açýk kaynak kodlu proje için, kaliteli altyapý çok önemlidir. Bu - altyapý, projenin kesilmesini önler ve projenin ilerlemesini - hýzlandýrýr. - - Tabii ki bu altyapý ucuz deðildir. Ýþlerin yürümesi için çeþitli yýlýk - ve anlýk harcamalarýmýz olmaktadýr. Eðer siz ya da þirketinizin bu - çabamýza baðýþta bulunabilecek parasý varsa, lütfen - http://store.pgsql.com/ adresine gidiniz ve baðýþta, hibede bulununuz. - - Web sayfasýnýn 'PostgreSQL Inc.' den bahsetmesine raðmen, "katkýda - bulunanlar" (contributors) maddesi sadece PostgreSQL projesini - desteklemek içindir ve belirli bir þirketin para kaynaðý deðildir. - isterseniz, baðlantý adresine bir çek gönderebilirsiniz. - _________________________________________________________________ - - Kullanýcý/Ýstemci Sorularý - - 2.1) PostgreSQL icin ODBC sürücüleri var mý? - - iki tane ODBC sürücüsü bulunmaktadýr: PsqlODBC ve OpenLink ODBC. - - PsqlODBC'i - http://gborg.postgresql.org/project/psqlodbc/projdisplay.php - adresinden indirebilirsiniz. - - OpenLink ODBC http://www.openlinksw.com adresinden alýnabilir.Bu - sürücü, kendi standart ODBC istemci yazýlýmý ile çalýstýðýndan, - destekledikleri her platformda (Win, Mac, Unix, VMS) PostgreSQL ODBC - bulunmalidir. - - Ücretsiz sürümü olmakla beraber, ticari kalitede destek almak - isteyenlere satmak isteyeceklerdir. Sorularýnýzý lütfen - postgres95@openlink.co.uk adresine gönderiniz. - - 2.2) PostgreSQL'i web sayfalarýnda kullanabilmek için hangi araçlar - bulunmaktadýr? - - http://www.webreview.com/ adresinde, arka planda veritabaný çalýstýran - Web sayfalarý için giriþ seviyesinde bilgi bulunmaktadýr. - - Web ile bütünleþme için, PHP () mükemmel bir arabirim sunar. - - Karmaþýk sorunlar için, çoðu kisi Perl arabirimini ve CGI.pm ya da - mod_perl kullanýr. - - 2.3) PostgreSQL'in grafik kullanýcý arabirimi var mýdýr? - - Çeþitli grafik arabirimlerimiz bulunmaktadýr. Bunlarýn arasýnda, - PgAccess (http://www.pgaccess.org/), PgAdmin II - (http://www.pgadmin.org/, sadece Win32 için), RHDB Admin - (http://sources.redhat.com/rhdb/) ve Rekall - (http://www.thekompany.com/products/rekall/) bulunmaktadýr. Ayrýca, - PostgreSQL için web tabanlý bir arabirim olan PHPPgAdmin - (http://phppgadmin.sourceforge.net/) bulunmaktadýr. - - Daha ayrýntýlý liste için - http://techdocs.postgresql.org/guides/GUITools adresine - bakabilirsiniz. - - 2.4) PostgreSQL ile iletiþimi kurabilmek için hangi dilleri kullanabilirim? - - * C (libpq) - * Embedded C (ecpg) - * Java (jdbc) - * Python (PyGreSQL) - * TCL (libpgtcl) - - Diðerleri için, http://gborg.postgresql.org adresindeki - Drivers/Interfaces bölümüne bakabilirsiniz. - _________________________________________________________________ - - Yönetimsel Sorular - - 3.1) PostgreSQL'i, /usr/local/pgsql dizininden baþka dizinlere nasýl - kurabilirim? - - configure betiðini çalýstýrýrken, --prefix seçeneðini veriniz. - - 3.2) postmaster'i baslattýgýmda, a Bad System Call ya da core dumped mesajý - alýyorum. Neden? - - Bunun birçok nedeni olabilir. Ancak ilk kontrol edilmesi gereken sey, - çekirdeginize System V uzantýlarýnýn kurulu olup olmadýgýný kontrol - etmek olabilir. PostgreSQL shared memory ve semaphores için çekirdek - destegine gereksinim duyar. - - 3.3) postmaster'i baþlattýðýmda, ýpcMemoryCreate hatasý alýyorum. Neden? - - Ya çekirdeðinizde shared memory desteðiniz düzgünce - yapýlandýrýlmamýþtýr, ya da çekirdeðinizdeki mevcut shared memory - miktarýný büyütmeniz gerekecektir. Gereksinim duyacaðýnýz miktar, - mimarinize ve postmaster için ayarladýgýnýz tampon ile backend iþlemi - sayýsýna baðlýdýr. Tüm sistemler için, tamponlar ve iþlemlerde - öntanýmlý sayýlarla, ~ 1MB kadar yere gereksinmeniz olacaktýr. - PostgreSQL 7.3.2 Sistem Yöneticileri Rehberi'ne, shared memory ve - semaphorelar hakkýndaki ayrýntýlý bilgi için bakabilirsiniz. - - 3.4) postmaster'ý baþlattýðýmda, ýpcSemaphoreCreate hatasý alýyorum. Neden? - - Eðer hata, "ýpcSemaphoreCreate: semget failed (No space left on - device)" ise, çekirdeðiniz yeterli semaphore ile yapýlandýrýlmamýþ - demektir. Postgres, her bir potansiyel backend için bir semaphore - gereksinimi duyar. Geçici bir çözüm, postmasterý backend iþlemleri - için daha az miktarda sýnýrla baþlatmak olabilir. -N'i varsayýlan - deðer olan 32'den küçük bir deðerle baþlatýnýz. Daha kalýcý bir çözüm, - çekirdeðinizin SEMMNS ve SEMMNI parametrelerini yükseltmek olacaktýr. - - Çalýþmayan semaphore'lar aðýr veritabaný iþlemlerinde çökme - yaratabilirler. - - Eðer hata mesajýnýz baþka bir þey ise, çekirdeðinizde semaphore - desteðini yapýlandýrmamýþ olabilirsiniz. Shared memory ve - semaphore'lar hakkýndaki daha ayrýntýlý bilgi için PostgreSQL 7.3.2 - Sistem Yöneticileri Rehberi'ne bakabilirsiniz. - - 3.5) Diger bilgisayarlarýn benim PostgreSQL veritabaný sunucuma - baðlantýlarýný nasýl kontrol edebilirim? - - Ön tanýmlý olarak, PostgreSQL sadece yerel makineden Unix domain - sockets kullanarak baðlanýlmasýna izin verir. Diger makineler, - postmaster'a -i etiketini geçirmezseniz ve $PGDATA/pg_hba.conf - dosyasýný düzenleyerek host-based authentication'a olanak vermezseniz, - baðlantý yapamayacaklardýr. - - 3.6) Veritabani motorunu daha iyi baþarým için nasýl ayarlayabilirim? - - Index'ler sorgularý hýzlandýrabilir. EXPLAIN komutu, PostgreSQL'in - sorgunuzu nasýl yorumladýðýný ve hangi index'leri kullandýðýný - görmenize izin verir. - - Eðer cok fazla INSERT iþlemi yapýyorsanýz, bunlarý büyük bir toplu - iþlem dosyasýkullanýp COPY komutu ile veritabanýna girmeyi deneyiniz. - Bu, tekil INSERT'lerden daha hýzlýdýr. Ýkinci olarak, BEGIN - WORK/COMMIT transaction bloðu içinde olmayan ifadeler kendi - transaction'larýndaymýþ gibi düþünülür. Çoklu ifadeleri tek bir - transaction bloðu içinde yapabilirsiniz. Bu, transaction overhead'ini - düþürecektir. Tek bir transaction bloðu içinde birden çok ifadeyi - çalýþtýrmayý deneyebilirsiniz. Bu da ayný þekilde, transaction - overhead'ini düþürür. - - Çeþitli ayarlama seçenekleri mevcuttur. fsync() iþlemini, postmaster'ý - -o -F seçeneði ile baþlatarak devre dýþý býrakabilirsiniz. Bu iþlem, - fsync()'lerin her transactiondan sonra diski flush etmesini - engelleyecektir. - - Ayný zamanda, postmaster'i -B seçeneði ile baþlatýp, backend iþlemleri - tarafýndan kullanýlan shared memory buffers sayýlarýný - arttýrabilirsiniz. Eðer bu parametreyi çok yüksek tutarsanýz, - çekirdeðinizin shared memory bölgesindeki limiti aþma olasýlýðýnýz - yüzünden postmaster baþlayamayabilir. Her bir tampon (buffer) 8K'dýr. - Öntanýmlý sayý ise 64 tampondur. - - Ayný þekilde, backend'in -S seçeneðini geçici sýralamalar için backend - süreçleri tarafýndan kullanýlacak hafýzayý arttýrmak amacýyla - kullanabilirsiniz. -S seçeneði kilobayt cinsinden deðer alýr ve ön - tanýmlý deðeri 512'dir (512 K) - - Tablolardaki veriyi bir index'e eþlemek amacýyla gruplama için CLUSTER - komutunu kullanabilirsiniz. Ayrýntýlý bilgi için CLUSTER komutunun - yardým sayfasýna bakabilirsiniz. - - 3.7) Hangi hata ayýklama özellikleri bulunmaktadýr? - - PostgreSQL, hata ayýklama amacýyla kullanýlabilecek durum bilgisi - rapor eden çeþitli özeliklere sahiptir. - - Öncelikle, configure betiðini --enable-cassert seçeneðiyle - çalýþtýrýrsanýz, bir çok assert() backend calýþmasýný gözlemler ve - beklenmeyen bir durumda programý durdurur. - - Postmaster ve postgres çeþitli hata ayýklama seçeneklerine sahiptir. - Öncelikle, postmaster'ý baþlattýðýnýzda, standart çýktýyý ve hatalarý - bir log dosyasýna yönlendirdiðinize emin olun: -cd /usr/local/pgsql -./bin/postmaster >server.log 2>&1 & - - Bu iþlem PostgreSQL ana dizinine server.log dosyasý yerleþtirecektir. - Bu dosya sunucunun yaþadýðý sorunlar ya da hatalar hakkýnda yararlý - bilgiler içerir. -d seçeneði, hata ayýklama seviyesini belirten bir - rakam ile kullanýlýr. Yüksek hata ayýklama seviyelerinin büyük log - dosyalarý oluþturacaðýný unutmayýnýz. - - Eðer postmaster çalýþmýyorsa, postgres backend'ini komut satýrýndan - çalýþtýrabilir ve SQL ifadenizi direk olarak yazabilirsiniz. Bu sadece - hata ayýklama amacýyla önerilir. Burada, noktalý virgülün deðil de - yeni bir satýrýn sorguyu sonlandýrdýðýný unutmayýnýz. Eðer hata - ayýklama sembolleri ile derlediyseniz, ne olduðunu görmek için bir - hata ayýklayýcý kullanabilirsiniz. backend postmaster'dan - baþlatýlmadýðýndan, eþdeðer bir ortamda çalýþmamaktadýr ve - locking/backend etkileþim sorunlarý artabilir. - - Eðer postmaster çalýþýyorsa, bir pencerede psql'i çalýþtýrýn ve psql - tarafýndan kullanýlan postgres sürecinin süreç numarasýný (PID) bulun. - Postgres süreci ile iliþkilendirmek için bir hata ayýklarýcý kullanýn. - Sorgularý psql aracýlýðý ile çalýþtýrabilirsiniz. Eðer postgres - baþlangýcýnda hata ayýklamak istiyorsanýz, PGOPTIONS="-W n" seçeneðini - ayarlayabilir ve psql'i baþlatabilirsiniz. Bu iþlem, baþlangýcýn n - saniye kadar gecikmesini saðlayacaktýr; böylece hata ayýklayýcýyý - sürece iliþkilendirdikten sonra baþlangýç sürecinin devam etmesini - saðlayabilirsiniz. - - postgres programý hata ayýklama ve baþarým ölçümleri için -s, -A ve -t - seçeneklerine sahiptir. - - 3.8) Baðlanmaya çalýþýrken, neden "Sorry, too many clients" hatasýný - alýyorum? - - Postmaster'ýn eþzamanlý olarak baþlatabileceði backend süreçleri - sýnýrlarýný arttýrmanýz gerekmektedir. - - Ön tanýmlý deðer 32 süreçtir. Bunu, postmaster'ý uygun -N deðeri ile - ya da postgresql.conf dosyasýný düzenleyerek yeniden baþlatmakla - arttýrabilirsiniz. - - Eðer -N deðerini 32'den büyük yapacaksanýz, ayný zamanda -B deðerini - de deðiþtirmeniz gerektiðini unutmayýn. -B, -N'nin en az 2 katý kadar - olmalýdýr; daha iyi baþarým için bu sayýyý daha da arttýrmalýsýnýz. - Yüksek sayýdaki backend süreçleri için, çeþitli çekirdek yapýlandýrma - parametrelerini arttýrmanýz gerekecektir. Yapýlmasý gerekenler, - SHMMAX, SEMMNS, SEMMNI, NPROC, MAXUPRC ve açýlabilecek dosyalarýn - maksimum sayýsý olan NFILE ve NINODE deðerlerini karýþtýrmaktýr. Bunun - nedeni, PostgreSQL'in izin verilen backend süreçlerinin sayýsý - üzerinde bir sýnýrý olmasýdýr. Böylelikle sistem kaynaklarýnýn dýþýna - çýkýlmayacaktýr. - - PostgreSQL'in 6.5 sürümüne kadar, en fazla backend sayýsý 64 idi ve - bunu deðiþtirmek için include/storage/sinvaladt.h dosyasý içindeki - MaxBAckendid sabitini deðiþtirdek sonra yazýlýmý yeniden derlemek - gerekiyordu. - - 3.9) pgsql_tmp dizinin içindeki dosyalar nelerdir? - - Sorgu çalýstýrýcý (query executer) tarafýndan yaratýlan geçici - dosyalardýr. Örnegin, bir sýralama ORDER BY ile yapýlacaksa ve - sýralama backend'in -s parametresinin izin verdiðinden daha fazla - alana gereksinim duyuyorsa, ekstra veriyi tutmak için geçici dosyalar - yaratýlýr. - - Geçici dosyalar, eðer sýralama sýrasýnda backend göçmezse otomatik - olarak silinecektir. Eðer çalýþan durumda bir backend'iniz yoksa, - pg_tempNNN.NN dosyalarýný silmeniz güvenlidir. - - 3.10) PostgreSQL sürümlerini yükseltmek için neden bir dump/reload iþlemi - gerçekleþtirmek zorundayým? - - PostgreSQL takýmý ara sürümlerde sadece küçük deðiþiklikler - yapmaktadýr; bu yüzden 7.2 sürümünden 7.2.1'e yükseltmek dump/restore - iþlemi gerekmemektedir. Ancak, esas sürümlerde (örnek: 7.2'den 7.3'e) - çoðunlukla sistem tablolarýnýn ve veri dosyalarýnýn iç yapýsý - deðiþtirilir. Bu deðiþiklikler çoðunlukla karmaþýktýr; dolayýsýyla - veri dosyalarýnýn geriye dönük uyumluluðu iþlemlerini yapmýyoruz. Dump - iþlemi, veriyi genel biçimde alacaðýndan yeniden yükleme esnasýnda - veri, yeni iç biçime uygun þekilde yerleþtirilecektir. - - Disk biçiminin deðiþmediði sürümlerde, pg_upgrade betiði güncellemenin - bir dump/restore gerektirmeden yapýlmasýný saðlayacaktýr. pg_upgrade - betiðinin o sürüm için bulunup bulunmadýðýný sürüm notlarý içinde - bulabilirsiniz. - - 3.11) Nasýl bir donaným kullanmalýyým? - - PC donanýmý tamamen uyumlu olduðu için, insanlar tüm PC donanýmlarýnýn - ayný kalitede olduðunu düþünürler. Oysa böyle deðildir. ECC RAM, SCSI - ve kaliteli anakartlar daha ucuz donanýmlara göre daha çok - güvenilirlerdir ve baþarýmlarý daha yüksektir. PostgreSQL hemen hemen - tüm donanýmda çalýþabilmektedir, ancak güvenilirlik ve baþarým önemli - ise donaným seçeneklerini çok iyi araþtýrmak gereklidir. E-posta - listelerimi donanýmlarla ilgili sorular ve de ticaret için - kullanýlabilir. - _________________________________________________________________ - - Ýþletimsel Sorular - - 4.1) Binary cursor ve normal cursor arasýndaki fark nedir? - - DECLARE yardým sayfasýna bakýnýz. - - 4.2) Sorgunun sadece ilk birkaç satýrýný nasýl SELECT edebilirim? - - FETCH yardým sayfasýna bakýnýz, ya da SELECT ... LIMIT ... kullanýnýz. - - Ýlk birkaç satýrý almak isteseniz bile, tüm sorgu deðerlendirilmek - durumunda kalýnabilir. ORDER BY içeren bir sorgu düþünün. Eðer ORDER - BY iþe eþleþen bir index varsa, PostgreSQL istenen ilk birkaç satýrý - iþleyebilir, ya da tüm sorgu istenen satýrlar üretilene kadar - iþlenebilir. - - 4.3) psql'in içinde gördügüm tablolarýn ya da diðer þeylerin listesini - nasýl alabilirim? - - pgsql/src/bin/psql/describe.c içindeki psql kaynak kodunu - okuyabilirsiniz. Bu kod, psql'in \ ile baþlayan komutlarýnýn çýktýsýný - olusturan SQL komutlarýný içerir. Ayný zamanda, psql'i -E seçeneði ile - baþlatýp, verdiðiniz komutlarý çalýþtýrmak için yaptýðý sorgularýn - çýktýlarýný görebilirsiniz. - - 4.4) Bir tablodan bir kolonu nasýl kaldýrabilirim? - - Bu özellik (ALTER TABLE DROP COLUMN) 7.3 sürümü ile gelmiþtir. Eski - sürümlerde aþaðýdakileri uygulamalýsýnýz: -BEGIN; -LOCK TABLE old_table; -SELECT ... -- select all columns but the one you want to remove -INTO TABLE new_table -FROM old_table; -DROP TABLE old_table; -ALTER TABLE new_table RENAME TO old_table; -COMMIT; - - 4.5) Bir satýr, tablo ve veritabaný için en fazla büyüklük nedir? - - Sýnýrlar: - - Veritabaný için en fazla büyüklük nedir? - Sýnýrsýz (32 TB'lýk veritabaný bulunmaktadýr) - Bir tablo için en fazla büyüklük nedir? - 32 TB - Bir satýr için en fazla büyüklük nedir? - 1.6 TB - Bir alan için en fazla büyüklük nedir? - 1 GB - Tabloda en fazla satýr sayýsý kaçtýr? - Sýnýrsýz - Bir tabloda olabilecek en fazla kolon sayýsý kaçtýr? - Kolon tiplerine baðlý olarak 250-1600 - Bir tabloda olabilecek en fazla index sayýsý kaçtýr? - Sýnýrsýz - - Tabii ki bunlar aslýnda sýnýrsýz degildir. Burada belirtilen sýnýrlar, - fiziksel sýnýrlarýn haricindeki sýnýrlardýr. Boþ disk alaný, - hafýza/takas alaný na baðlý sýnýrlamalar vardýr. Baþarým, sýnýr - deðerlere yaklaþtýkça, ya da deðerler çok büyük olduðunda düþebilir. - - Bir tablo için büyüklük sýnýrý olan 32 TB, iþletim sisteminin büyük - dosya desteði olup olmamasýndan baðýmsýzdýr. Büyük tablolar, 1 GB'lik - dosyalarda saklandýðý için, dosya sistemi sýnýrlarýnin bir önemi - yoktur. - - Tablo ve kolon sayýsý büyüklükleri, ön tanýmlý blok büyüklüðü 32k ya - çýkarýlarak arttýrýlabilir. - - 4.6) Tipik bir metin dosyasýndaki veriyi saklamak için ne kadar disk alaný - gereklidir? - - Bir PostgreSQL veritabaný, veriyi "flat" metin dosyasýnda saklamak - için gereken alanýn 5 kat fazla disk alanýna gereksinim duyabilir. - - Her satýrýnda bir tamsayý ve metin (text) içeren, 100.000 satýrlýk bir - dosya düþünün. Her satýrýn ortalama 20 byte olduðunu farzedelim. Metin - dosyasý 2.8 MB olacaktýr. Bu veriyi tutan PostgreSQL veritabaný - yaklaþýk 6.4 MB yer kaplayacaktýr. - 36 byte: Her bir satýr baþlýðý (yaklaþýk) -+ 24 byte: Bir tamsayý (int) alaný ve bir metin (text) alaný -+ 4 byte: Sayfada tuple a pointer ----------------------------------------- - 64 byte -> kayýt baþýna - - PostgreSQL'de veri sayfasý (data page) büyüklüðü 8192 byte (8k)dýr, - dolayýsýyla: -8192 byte -> page baþýna -------------------------- = Her bir veritabaný page'ý baþýna 128 satýr (yaklaþýk) - Satýr baþýna 64 byte - -100000 veri satýrý --------------------- = 782 veritabaný sayfasý - 128 satýr - - 782 veritabaný sayfasý * sayfa baþýna 8192 byte = 6,406,144 bytes (6.4 - MB) - - Index'ler çok fazla yere gereksinim duymazlar, ama index'lenmiþ veriyi - tutacaklarýndan büyük olabilirler. - - NULL deðerler bitmapler içinde tutulur; dolayýsýyla çok az yer - kaplarlar. - - 4.7) Veritabanýnda hangi tablo ya da index'lerin tanýmlandýðýný nasýl - görebilirim? - - psql, bu tür bilgileri göstermek için, \ ile baþlayan bir çok komut - sunmaktadýr. \? komutu ile bu komutlarý görebilirsiniz. Ayrýca, - bunlarý açýklayan ve pg_ ile baþlayan çok sayýda sistem tablosu - bulunmaktadýr. Ayný zamanda, psql -l ile tüm veritabanlarýný - listeyelebirsiniz. - - Ayrýca, pgsql/src/tutorial/syscat.source kodunu inceleyebilirsiniz. Bu - dosya, veritabaný sistem dosyalarýndan bilgiyi almak için gereksinim - duyulan bir çok SELECT'leri gösterir. - - 4.8) Sorgularým cok yavaþ, ya da index'lerimi kullanmýyorlar. Neden? - - Indexler her sorgu tarafýndan otomatik olarak kullanýlmazlar. Indexler - eðer bir tablonun büyüklüðü minimum bir büyüklükten fazla ise ve sorgu - tablodaki satýrlarýn sadece küçük bir yüzdesini seçiyorsa kullanýlýr. - Bunun nedeni, index eriþiminin neden olduðu raslansal disk eriþimi nin - diskin ya da tablonun sýralý okunmasýndan daha yavas olabilmesidir. - - Bir index'in kullanýlýp kullanýlmayacaðýný belirlemek için, PostgreSQL - tablo hakkýndaki istatistiklere gereksinmesi vardýr. Bu istatistikler, - VACUUM ANALYZE kullanýlarak toplanýrlar. Optimizer, istatistikleri - kullanarak, tabloda kaç satýr olduðunu ve bilir ve indexin kullanýlýp - kullanýlmayacaðýna daha iyi karar verir. Istatistikler, ayný zamanda - en uygun join sýrasýný ve yöntemini belirlemekte çok önemlidir. - Ýstatistik toplanmasý, tablo içerikleri deðiþtikçe periyodik olarak - yapýlmalýdýr. - - Indexler normalde ORDER BY sorgularý ya da join iþlemlerini - gerçekleþtirmek için kullanýlmazlar. Açýk bir sýralamayý takip eden - sýralý bir arama (sequential scan), büyük bir tabloda index aramasý - yapmaktan genelde daha hýzlýdýr. - Ancak, ORDER BY ile birleþmiþ LIMIT genellikle bir index - kullanacaktýr; çünkü tablonun sadece belirli bir miktarý - döndürülecektir. Aslýnda, MAX() ve MIN() fonksiyonlarýnýn index - kullanmamalarýndan dolayý, bu gibi deðerleri ORDER BY ve LIMIT - kullanarak da almak olasýdýr: - SELECT col - FROM tab - ORDER BY col [ DESC ] - LIMIT 1; - - Eðer optimizer'ýn sýralý arama yapmasýnýn yanlýþ olduðuna - inanýyorsanýz, SET enable_seqscan TO 'off' kullanýn ve index kullanan - aramalarýn hala daha hýzlý olup olmadýðýný görün. - - LIKE ya da ~ gibi operatörler kullanýyorsanýz, index'ler sadece - aþaðýdaki koþullarda kullanýlabilir: - * Arama dizininin baþý, dizinin baþý ile baðlanmalýdýr. Yani, - + LIKE sorgularý % ile baþlamamalýdýr. - + Düzenli ifade sorgularý ^ iþe baþlamamalýdýr. - * Arama metni bir karakter sýnýfý ile baþlayamaz. Örnek: [a-e] - * ILIKE ve ~* gibi büyük/küçük harfe duyarsýz aramalar index'lerden - yararlanmazlar. Onun yerine, bölüm 4.12'de anlatýlan fonksiyonel - index'leri kullanabilirsiniz. - * initdb sýrasýnda öntanýmlý C locale'i kullanýlmalýdýr. - - 4.9) query-optimizer'ýn sorgularýmý nasýl deðerlendirdiðini, iþleme - soktuðunu nasýl görebilirim? - - EXPLAIN yardým sayfasýna bakýnýz. - - 4.10) R-tree index nedir? - - R-tree index, uzaysal (spatial) verileri indexlemek için kullanýlýr. - Bir hash index, dizi aramalarýnda (range search) kullanýlamaz. B-tree - index dizi aramalarýnda sadece tek boyutlu çalýþmaktadýr. R-tree, çok - boyutlu veriyi destekler. Örneðin, eðer bir R-tree index point veri - tipi üzerinde inþa edililebilirse, sistem "select all points within a - bounding rectangle" gibi sorgulara daha verimli yanýtlar verecektir. - - Orijinal R-tree tasarýmýný açýklayan belge: - - 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. - - Bu belgeyi, Stonebraker'ýn "Readings in Database Systems" kitabýnda - bulabilirsiniz. - - Gömülü R-tree indexleri poligon ve boxlarý kullanabilir. Teorik - olarak, R-tree indexlerin özelliklerini geniþletmek bir miktar çaba - gerektirir ve bunun nasýl yapýlacaðýna dair bir belgemiz henüz - bulunmamaktadýr. - - 4.11) Genetic Query Optimizer nedir? - - GEQO modülü, Genetic Algorithm(GA) kullanýlarak tablolar - birleþtirildiðinde sorgu optimizasyonunu hýzlandýrýr. - - 4.12) Düzenli ifade (Regular Expression) aramalarýný ve büyük/küçük harfe - duyarsýz aramalarý nasýl yapabilirim? Bu büyük(küçük harfe duyarlý aramalar - için index'i nasýl kullanabilirim? - - ~ operatörü düzenli ifade eþleþmesi ve ~* büyük/küçük harfe duyarsýz - düzenli ifade eþleþmesi yapar. Büyük/küçük harfe duyarlý olan LIKE'ýn - büyük/küçük harfe duyarsýz olan biçimi ILIKE'týr ve PostgreSQL 7.1 - sürümü ile birlikte gelmiþtir. - - Büyük-küçük harfe duyarsýz eþitlik karþýlaþtýrmalarý aþaðýdaki gibi - ifade edilir: -SELECT * -FROM tab -WHERE lower(col) = 'abc' - - Bu standart bir index yaratmayacaktýr. Ancak eðer fonksiyonel bir - index yaratýrsanýz; o kullanýlacaktýr: -CREATE INDEX tabindex on tab (lower(col)); - - 4.13) Bir sorguda, bir alanin "NULL" olduðunu nasýl ortaya çýkarabilirim? - - Kolonu, IS NULL ve IS NOT NULL ile test edebilirsiniz. - - 4.14) Çesitli karakter tipleri arasýndaki farklar nelerdir? - -Veri Tipi Ýç Adý Not --------------------------------------------------- -VARCHAR(n) varchar boyut en büyük uzunluðu verir; sadece verilen kadar veri tutulur. -CHAR(n) bpchar belirtilen uzunluða kadar sonuna boþluk eklenir. -TEXT text uzunlukta herhangi bir üst sýnýr yoktur. -BYTEA bytea variable-length byte array (null-byte safe) -"char" char bir karakter - - Ýç adlarý (internal name) sistem kataloglarýný ve bazý hata - mesajlarýný incelerken göreceksiniz. - - Ýlk dört veri tipi "varlena" tipidir (yani, diskteki ilk 4 bayt - uzunluktur; devamý da veridir.) Dolayýsýyla, kullanýlan gerçek alan, - belirtilen alandan biraz daha büyüktür. Ancak, bu veri tipleri, - sýkýþtýrýlmaya tabi tutulabilir; dolayýsýyla disk alaný beklenilenden - küçük olabilir. VARCHAR(n) büyüklüðü artabilen ama en büyük uzunluðu - sýnýrlý olan verileri saklamak için en uygun yöntemdir. TEXT, 1 GB - büyüklüðe kadar olan verileri tutmak için kullanýlýr. - - CHAR(n), ayný uzunluktaki dizilerin saklanmasý için kullanýmýr. - CHAR(n) belirtilen uzunluða kadar boþluk ile doldurur; ancak - VARCHAR(n) sadece verilen karakterleri saklar. BYTEA binary veri - saklamak içindir; ayrýca "NULL" bayt içeren deðerleri de saklar. - Burada anlatýlan üç veri tipi de benzer baþarým karakteristiklere - sahiptir. - - 4.15.1) Nasýl serial/otomatik artan (auto-incrementing) bir alan - yaratabilirim? - - PostgreSQL'de SERIAL veri tipi vardýr. Bu veri tipi bir sequence ve - kolon üzerinde bir index yaratýr. - - Örnek, aþaðýdaki sorgu: -CREATE TABLE person ( - id SERIAL, - name TEXT -); - - buna çevrilir: -CREATE SEQUENCE person_id_seq; -CREATE TABLE person ( - id INT4 NOT NULL DEFAULT nextval('person_id_seq'), - name TEXT -); -CREATE UNIQUE INDEX person_id_key ON person ( id ); - - Sequenceler hakkýnda daha fazla bilgi için create_sequence yardým - sayfasýna bakabilirsiniz. Her satýrýn OID alanýný tekil bir sayý - olarak alabilirsiniz. Ancak, veritabanýnýzýn dump'ýný alýp yeniden - yüklerseniz, OID deðerlerini koruyabilmek için pg_dump'ýn -o - parametresini ya da "COPY WITH OIDS" seçeneðini kullanmanýz - gerekecektir. - - 4.15.2) SERIAL giriþinin degerini nasýl alabilirim? - - Bir yaklaþým, sequence nesnesindeki SERIAL deðerini, veriyi girmeden - önce nextval() ile alýp, aldýðýnýz deðeri kendinizin girmesidir. - 4.15.1'deki örnek tabloyu kullanarak bir örnek verelim: -new_id = execute("SELECT nextval('person_id_seq')"); - - execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')"); - - Diðer sorgular için new_id'de yeni deðerin saklanmasý gerekir. - Otomatik olarak yaratýlan SEQUENE nesnesinin adý, __seq þeklinde olacaktýr (< > iþaretleri olmadan). - - Alternatif olarak, atanmýþ SERIAL deðerini, deðer girildikten sonra - currval() fonksiyonu ile alabilirsiniz: - execute("INSERT INTO person (name) VALUES ('Blaise Pascal')"); - new_id = execute("SELECT currval('person_id_seq')"); - - Son olarak, ön tanýmlý deðeri bulmak için INSERT ifadesinden dönen OID - deðerini kullanabilirsiniz; ancak bu en az taþýnabilir çözüm - olacaktýr. Perl'de, Edmund Mergl'in DBD:Pg mödülü ile birlikte DBI - kullanarak, OID deðeri $sth->execute() çalýþtýrýldýktan sonra - $sth->(pg_oid_status) ile alýnabilir. - - 4.15.3) currval() ve nextval() diðer kullanýcýlara sorun yaratmaz mý? - - Hayýr. curval(), tüm kullanýcýlar deðil, backend tarafýndan atanan - geçerli deðeri döndürür. - - 4.15.4) Neden sequence sayýlarý transaction iþleminin iptalinden sonra - yeniden kullanýlýyor? Neden sequence/SERIAL kolonumdaki sayýlarda atlamalar - oluyor? - - Uyumluluðu arttýrmak için, sequence deðerleri çalýþan transaction'lara - gerektiði þekilde aktarýlýr ve transaction bitene kadar o deðer - kilitlenmez. Bu, iptal edilen transaction iþlemleri nedeniyle - boþluklara neden olur. - - 4.16) OID nedir? TID nedir? - - OIDler, tekil satýr numaralarýna PostgreSQL'in yanýtýdýr. - PostgreSQL'de yaratýlan her sayý, tekil bir OID alýr. initdb iþlemi - sýrasýnda yaratýlan tüm OID'ler 16384'ten küçüktür - (backend/access/transam.h). Kullanýcýlar tarafýndan yaratýlan tüm - OID'ler bu sayýya eþit ya da bu sayýdan büyüktür. Varsayýlan durumda, - tüm bu OIDler sadece bir tablo ya da veritabanýnda deðil, tüm - PostgreSQL kurulumunda tekildir. - - PostgreSQL OIDleri, tablolar arasýnda satýrlarý iliþkilendirmek için - kendi iç tablolarýnda kullanýr. Bu OIDler belirli kullanýcý - satýrlarýný belirtmek için kullanabilir ve join iþlemlerinde - kullanýlýr. OID deðerlerini saklamak için OID kolon tipini kullanmanýz - önerinir. Daha hýzlý bir eriþim için, OID alanýnda bir index - yaratabilirsiniz. - - OID'ler yeni satýrlara, tüm veritabanlarý tarafýnda kullanýlan ortak - bir alandan atanýrlar. Eðer OID'i baþka bir deðere eþitlemek - isterseniz ya da tablonun bir kopyasýný orijinal OIDler ile çýkarmak - isterseniz, bu mümkündür: - CREATE TABLE new_table(old_oid oid, mycol int); - SELECT old_oid, mycol INTO new FROM old; - COPY new TO '/tmp/pgtable'; - DELETE FROM new; - COPY new WITH OIDS FROM '/tmp/pgtable'; - - OIDler 4-bit tamsayý olarak saklanýrlar ve 4 milyarda overflow - olacaktýr. Kimse bu sayýya ulaþtýðýna dair bir bilgi iletmedi ve bu - sýnýrý kimse bu sýnýra ulaþmadan kaldýracaðýz. - - TIDler, belirli fiziksel satýrlar block ve offset deðerleri ile - belirtmekte kullanýlýr. TIDler, satýrlar deðiþtiðinde ya da yeniden - yüklendiðinde deðiþirler. Index girdileri tarafýndan fiziksel - satýrlarý göstermek için kullanýlýrlar. - - 4.17) PostgreSQL'de kullanýlan bazý terimlerin anlamlarý nelerdir? - - Kaynak kodun bir kýsmý ve eski belgeler, daha geniþ kullaným alaný - olan terimleri kullanýrlar. Bunlarýn bazýlarý: - * table, relation, class - * row, record, tuple - * column, field, attribute - * retrieve, select - * replace, update - * append, insert - * OID, serial value - * portal, cursor - * range variable, table name, table alias - - Genel veritabaný terimleri, - http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary - /glossary.html adresinde bulunabilir. - - 4.18) Neden "ERROR: Memory exhausted in AllocSetAlloc()" hatasýný alýyorum? - - Sisteminizde sanal belleðinizi tüketmiþ olabilirsiniz, ya da - çekirdeðiniz belli kaynaklar icin düþük bir sýnýra sahip olabilir. - postmaster'ý baþlatmadan önce aþaðýdakileri deneyebilirsiniz: -ulimit -d 262144 -limit datasize 256m - - Kabuðunuza baðlý olarak, bunlardan sadece biri olumlu sonuç - verecektir, ama bu iþlem veri segment sýnýrýnýzý arttýracak, ve belki - de sorgunuzun tamamlanmasýný saðlayacaktýr. Bu komut, varolan iþleme - (current process) ve komut çalýþtýrýldýktan sonraki tüm alt iþlemlere - uygulanýr. Eðer SQL istemcinizle, backend'in çok fazla veri döndürmesi - nedeniyle bir sorun yaþýyorsanýz, bunu istemciyi baþlatmadan önce - deneyiniz. - - 4.19) Hangi PostgreSQL sürümünü çalýþtýrdýðýmý nasýl görebilirim? - - psql arabiriminde, select version(); yazýnýz. - - 4.20) Neden large-object iþlemlerim, "invalid large obj descriptor" - hatasýný veriyor? - - Large object iþlemlerinizin uçlarýna, yani lo_open ... lo_close - komutlarýnýn çevresine, BEGIN WORK ve COMMIT koymanýz gerekmektedir; - - Þu anda, PostgreSQL kurallarý large objectleri transaction commit - edildiðinde kapatarak uygulamaktadýr. Dolayýsýyla handle ile yapýlacak - ilk þey invalid large obj descriptor hatasý ile - sonuçlanacaktýr.Dolayýsýyla çalýþan kodunuz eðer transaction - kullanmazsanýz hata mesajlarý üretecektir. - - Eðer ODBC gibi bir istemci arabirimi kullanýyorsanýz, auto-commit'i - kapatmanýz gerekebilir. - - 4.21) Þu andaki zamaný öntanýmlý deðer olarak kabul eden How do I create a - column that will default to the current time? - - Alttakini kullanabilirsiniz: -CURRENT_TIMESTAMP: -CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP ); - - 4.22) Neden IN kullanan subquery'lerim çok yavas? - - 7.4 sürümünden önce, subqueryler. Eðer subquery sadece birkaç satýr ve - outer query bol sayýda satýr döndürüyorsa, IN en hýzlýsýdýr. Sorgularý - hýzlandýrmak için IN yerine EXISTS kullanýn: -SELECT * - FROM tab - WHERE col1 IN (SELECT col2 FROM TAB2) - - sorgusunu, aþaðýdaki ile deðiþtirin: -SELECT * - FROM tab - WHERE EXISTS (SELECT col2 FROM TAB2 WHERE col1 = col2) - - Bu iþlemin hýzlý olmasý için, subcol'un indexlenmiþ bir kolon olmasý - gerekmektedir. - - 7.4 sürümü ve sonrasýnda, IN aslýnda normal sorgularla ayný karmaþýk - join tekniklerini kullanýr ve EXISTS'e tercih edilir. - - 4.23) Outer join iþlemini nasýl yapabilirim? - - PostgreSQL outer joins islemlerini SQL standartlarýný kullanarak - gerçekleþtirmektedir. Aþaðýda 2 örnek bulunmaktadýr: -SELECT * -FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col); - - ya da -SELECT * -FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col); - - Bu özdeþ sorgular t1.col' i t2.col'ye join ederler ve ayný zamanda - t1'deki unjoined satýrlarý (t2'de eþlenmemiþ olanlarla) döndürürler. - RIGHT JOIN t2'nin unjoined satýrlarýný ekleyecektir. Bir FULL join, - eþleþmiþ bütün satýrlarý ve t1 ile t2'den tüm baðlanmamýþ (unjoined) - satýrlarý alýr. OUTER sözcüðü seçimseldir ve LEFT, RIGHT ve FULL join - iþlemlerinde olduðu kabul edilir. Sýradan join iþlemleri INNER JOIN - olarak adlandýrýlýr. - - Önceki sürümlerde, OUTER JOINler UNION ve NOT IN kullanýlarak simüle - edilebiliyordu. Örneðin, tab1 ve tab2'yi birleþtirirken, aþaðýdaki - sorgu iki tablonun dýþtan baðlanmasýný saðlar: -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) Ayný andan birden fazla veritabanýnda nasýl iþlem yapabilirim? - - Mevcut veritabanýnýz dýþýndaki baþka bir veritabanýnýzý sorgulamanýzýn - bir yolu bulunmamaktadýr. Bunun nedeni, PostgreSQL'in veritabanýna - özel sistem kataloglarý yüklemesidir. Bu nedenle, cross-database bir - sorgunun nasýl davranacaðýný kestirmek zordur. - - contrib/dblink fonksiyon çaðrýlarýný kullanarak cross-database - sorgulara izin verir. Tabii ki, bir istemci deðiþik veritabanlarýna - ayný anda eriþim saðlayabilir ve bilgiyi bu þekilde birleþtirebilir. - - 4.25) Bir fonksiyondan nasýl çoklu satýr ya da kolon döndürebilirim? - - 7.3 sürümünde, bir fonksiyondan kolaylýkla çoklu satýr ya da sütun - döndürebilirsiniz. - (http://techdocs.postgresql.org/guides/SetReturningFunctions) - - 4.26) Neden Pl/PgSQL fonksiyonlarý içinden güvenli bir þekilde tablo - yaratma/kaldýrma iþlemlerini yapamýyoruz? - - PL/PgSQL fonksiyon içerikleri cache'ler. Bunun istenmeyen bir tarafý, - eðer bir PL/PgSQL fonksiyonu geçici bir tabloya eriþiyorsa ve bu tablo - ileride kaldýrýlýp yeniden oluþturulduktan sonra fonksiyon yeniden - çaðrýlýrsa, fonksiyon çalýþmayacaktýr; çünkü cache'lenmiþ fonksiyon - hala eski geçici tabloyu gösteriyor olacaktýr. Çözüm, geçici tablo - eriþimleri için PL/PgSQL'de EXECUTE kullanmaktýr. Bu, sorgunun her - seferinde yeniden iþlenmesini saðlayacaktýr. - - 4.27) 4.28) Hangi þifreleme seçenekleri bulunmaktadýr? - - * contrib/pgcrypto SQL sorgularýnda kullanýlabilmesi için þifreleme - fonksiyonlarý içermektedir. - * Ýstemciden sunucuya iletiþimi þifrelemek için, sunucuda ssl - seçeneði postgresql.conf içinde açýk olmalýdýr. Ayrýca,pg_hba.conf - dosyasý içinde host ya da hostssl kaydý mutlaka olmalýdýr ve - istemci sslmode kapatýlmamalýdýr. (Ayný zamanda,PostgreSQL'in - doðal SSL baðlantýlarý dýþýnda ssh ya da ssl gibi 3.parti - þifrelenmiþ veri iletimi de mümkündür.) - * Veritabaný kullanýcý adý ve þifreleri 7.3 sürümü ile birlikte - otomatik olarak þifrelenirler. Önceki sürümlerde, postgresql.conf - içindeki PASSWORD_ENCRYPTION seçeneðini aktif hale getirmeniz - gerekmektedir. - * Sunucunun kendisini þifreli dosya sistemi üzerinde - çalýþtýrabilirsiniz. - _________________________________________________________________ - - PostgreSQL Özelliklerini Geniþletmek - - 5.1) Kullanýcý-tanýmlý bir fonksiyon yazdým. psql'de çalýþtýrdýðým zaman - neden core dump ediyor? - - Sorunun nedeni birden fazla þey olabilir. Kullanýcý-tanýmlý - fonksiyonunuzu stand-alone bir programda çalýþtýrmayý deneyiniz. - - 5.2) PostgreSQL'e nasýl yeni tipler/fonksiyonlar ekleyebilirim? - - Çalýþmalarýnýzý pgsql-hackers e-posta listesine gönderiniz. Kodunuz - incelendikten sonra contrib dizinine konacaktýr. - - 5.3) Bir tuple dondürmek icin bir C fonksiyonunu nasil yazarým? - - PostgreSQL 7.3 sürümü ile birlikte, C, PL/PgSQL ve SQL kullanýlarak - tablo-döndüren fonksiyonlar tamamen desteklenmektedir. Ayrýntýlý bilgi - için PostgreSQL 7.3.2 Kullanýcý Rehberi'ne bakabilrisiniz. Bir örneði - contrib/tablefunc içinde bulabilirsiniz. - - 5.4) Bir kaynak dosyasýnda deðiþiklik yaptým. Yeniden derlememe raðmen - deðiþiklik geçerli olmuyor. Neden? - - Makefile'lar include dosyalarý için tam bir baðýmlýlýk içermezler. - Öncelikle make clean, ardýndan da baska bir make iþlemi yapmanýz - gerekir. GCC kullanýyorsanýz, configure betiðinin --enable-depend - seçeneðini, derleyicinin baðýmlýlýklarý otomatik olarak hesaplamasý - için kullanabilirsiniz. diff --git a/doc/src/FAQ/FAQ_MINGW.html b/doc/src/FAQ/FAQ_MINGW.html deleted file mode 100644 index 159553873a..0000000000 --- a/doc/src/FAQ/FAQ_MINGW.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - - PostgreSQL Native Win32 Status Report - - -

Compiling PostgreSQL On Native Win32 FAQ
-

-

Last updated: Thu Oct 14 18:22:57 EDT 2004

-

Current maintainer: Bruce Momjian <bruce@momjian.us>
-

- -

The most recent version of this document can be viewed at -http://www.postgresql.org/docs/faqs.FAQ_MINGW.html.

- -

The FAQ Running & Installing PostgreSQL On Native Windows is at -http://pginstaller.projects.postgresql.org/faq/FAQ_windows.html.

- -

The native Win32 port is built from source using MinGW tools.  -There is also a precompiled binary installer called pginstaller which you can find at -from http://pgfoundry.org/projects/pginstaller.  -It is a fully native build and uses no additional software like MinGW. -The ready-made installer files are available on the main PostgreSQL ftp servers -in the binary/win32 directory. -
-

-

Tools for Building Binaries
-

-

The native Win32 port requires a 32-bit NT-based Microsoft -operating -system, like Windows NT 4, Windows 2000/2003, or Windows XP. (NT 4 -is no longer supported since version 8.2)  Earlier -operating systems do not have sufficient infrastructure. Building the -port also -requires MinGW and Msys, which can be downloaded from http://www.mingw.org/. MinGW is -a Unix-like build environment for Microsoft operating systems. -Msys is a collection of unix tools required to run shell scripts like configure.  -Neither is required to run the resulting binaries;  they are -needed only for creating the binaries.  Work is in progress to support -building using Visual C++ in a future version.
-

-

Steps For Building Binaries
-

-
    -
  • Download the nightly snapshot tarball from ftp://ftp.postgresql.org/pub/dev -or checkout via CVS (you will need bison, flex, and perl -installed to build from CVS)
    -
  • -
  • Run configure (you might need to add the --without-zlib -argument, depending on whether you have installed zlib - on MinGW)
  • -
  • Run make install
  • -
-Note:  it is suggested that you run psql under CMD.EXE., -as the Msys console has buffering issues.
-
-If you make a change that you want to contribute, make a context diff -and send -it to the mailing list.
-

Resources

-There are several resources that helped us complete this port:
- - - diff --git a/doc/src/FAQ/FAQ_brazilian.html b/doc/src/FAQ/FAQ_brazilian.html deleted file mode 100644 index 35e7c051e0..0000000000 --- a/doc/src/FAQ/FAQ_brazilian.html +++ /dev/null @@ -1,942 +0,0 @@ - - - - - - FAQ do PostgreSQL - - - -

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=postgreSQL&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: -

- -

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_conf_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 (arredondado para cima)
-      158 registros por página
-
-633 páginas do banco de dados * 8192 bytes por página  =  5.185.536 bytes (5,2 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.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?

-
- - - - - - - -
TipoNome InternoObservação
VARCHAR(n)varchartamanho especifica o tamanho -máximo, sem preenchimento
CHAR(n)bpcharpreenchimento em branco para -comprimento fixo específico
TEXTtextnenhum limite superior específico no -comprimento
BYTEAbyteavetor de bytes de comprimento variável -(seguro a byte nulo)
"char"charum 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
  • -
- - - - diff --git a/doc/src/FAQ/FAQ_chinese_simp.html b/doc/src/FAQ/FAQ_chinese_simp.html deleted file mode 100644 index db0a0c306a..0000000000 --- a/doc/src/FAQ/FAQ_chinese_simp.html +++ /dev/null @@ -1,1011 +0,0 @@ - - - - - - PostgreSQL 常见问题(FAQ) - - - - - - -

PostgreSQL 常见问题(FAQ)

- - -

最近更新:2007 年 1 月 30 日 星期二 17:37:01 EST
- 中文版最近更新:2007 年 2 月 1 日 星期四 12:55:04 CST -

-

目前维护人员:Bruce Momjian (pgman@candle.pha.pa.us)
- 中文版维护人员:Daojing.Zhou(doudou586@gmail.com) -

- -

- 本文档的最新版本可以在 - http://www.postgresql.org/files/documentation/faqs/FAQ.html查看。 -

-

- 与操作系统平台相关的问题可在http://www.postgresql.org/docs/faq/里找到答案。
-

-
- -

常见问题

- - -

-1.1)PostgreSQL 是什么?该怎么发音?
-1.2)谁控制和管理PostgreSQL ?
-1.3)PostgreSQL的版权是什么?
-1.4)PostgreSQL可以运行在哪些操作系统平台上?
-1.5)我从哪里能得到PostgreSQL?
- -1.6)最新版的PostgreSQL 是什么?
-1.7)我从哪里能得到对PostgreSQL 的支持?
-1.8)我如何提交一个BUG报告?
-1.9)我如何了解已知的 BUG 或暂缺的功能?
-1.10)能够获取的最新文档有哪些?
-1.11)我应该怎样学习 SQL ?
- -1.12)如何提交补丁或是加入开发队伍?
-1.13)PostgreSQL 和其他数据库系统比起来如何?
-1.14)PostgreSQL 可以处理最近各个国家夏时制的变化吗?
-

- -

用户客户端问题

-

-2.1)我们可以用什么语言和PostgreSQL 打交道?
-2.2)有什么工具可以把PostgreSQL 用于 Web 页面?
- -2.3)PostgreSQL 拥有图形用户界面吗?
-

- -

系统管理问题

-

-3.1)我怎样才能把PostgreSQL 装在 /usr/local/pgsql 以外的地方?
-3.2)我如何控制来自其他电脑的连接?
-3.3)我怎样调整数据库服务器以获得更好的性能?
- -3.4)PostgreSQL 里可以获得什么样的调试特性?
-3.5)为什么在试图连接登录时收到“Sorry, too many clients” 消息?
-3.6)PostgreSQL的升级过程有哪些内容?
-3.7)(使用PostgreSQL)我需要使用什么计算机硬件 ?
-

- -

操作问题

- -

-4.1) 如何只选择一个查询结果的头几行?或是随机的一行?
-4.2) 如何查看表、索引、数据库以及用户的定义?如何查看psql里用到的查询指令并显示它们?
-4.3) 如何更改一个字段的数据类型?
-4.4) 单条记录,单个表,一个数据库的最大限制是多少?
-4.5) 存储一个典型的文本文件里的数据需要多少磁盘空间?
- -4.6) 为什么我的查询很慢?为什么这些查询没有利用索引?
-4.7) 我如何才能看到查询优化器是怎样评估处理我的查询的?
-4.8) 我怎样做正则表达式搜索和大小写无关的正则表达式查找?怎样利用索引进行大小写无关查找?
-4.9) 在一个查询里,我怎样检测一个字段是否为 NULL?我如何才能准确排序而不论某字段是否含NULL值?
-4.10) 各种字符类型之间有什么不同?
-4.11.1) 我怎样创建一个序列号型或是自动递增的字段?
- -4.11.2) 我如何获得一个插入的序列号的值?
-4.11.3) 同时使用 currval() 会导致和其他用户的冲突情况吗?
-4.11.4) 为什么不在事务异常中止后重用序列号呢?为什么在序列号字段的取值中存在间断呢?
-4.12) 什么是 OID?什么是 CTID ?
-4.13) 为什么我收到错误信息“ERROR: Memory exhausted in AllocSetAlloc()”?
- -4.14) 我如何才能知道所运行的 PostgreSQL 的版本?
-4.15) 我如何创建一个缺省值是当前时间的字段?
-4.16) 如何执行外连接(outer join)查询?
-4.17) 如何执行涉及多个数据库的查询?
-4.18) 如何让函数返回多行或多列数据?
-4.19) 为什么我在使用PL/PgSQL函数存取临时表时会收到错误信息“relation with OID ##### does not exist”?
- -4.20) 目前有哪些数据复制方案可用?
-4.21) 为何查询结果显示的表名或列名与我的查询语句中的不同?为何大写状态不能保留?
-

- -
- -

常见问题

- -

1.1)PostgreSQL 是什么?该怎么发音?

- - -

PostgreSQL 读作 Post-Gres-Q-L,有时候也简称为Postgres 。想听一下其发音的人员可从这里下载声音文件: - MP3 格式 。 -

- -

PostgreSQL 是面向目标的关系数据库系统,它具有传统商业数据库系统的所有功能,同时又含有将在下一代 DBMS 系统的使用的增强特性。PostgreSQL 是自由免费的,并且所有源代码都可以获得。 -

- -

PostgreSQL 的开发队伍主要为志愿者,他们遍布世界各地并通过互联网进行联系,这是一个社区开发项目,它不被任何公司控制。 - 如想加入开发队伍,请参见开发人员常见问题(FAQ) - http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html - -

- -

1.2) 谁控制PostgreSQL ?

-

- 如果你在寻找PostgreSQL的掌门人,或是什么中央委员会,或是什么所属公司,你只能放弃了---因为一个也不存在,但我们的确有一个 - 核心委员会和CVS管理组,但这些工作组的设立主要是为了进行管理工作而不是对PostgreSQL进行独占式控制,PostgreSQL项目是由任何人均 - 可参加的开发人员社区和所有用户控制的,你所需要做的就是订阅邮件列表,参与讨论即可(要参与PostgreSQL的开发详见 - 开发人员常问题 (Developer's FAQ) 获取信息)。 -

- - -

1.3)PostgreSQL的版权是什么?

- - -

PostgreSQL的发布遵从经典的BSD版权。它允许用户不限目的地使用PostgreSQL,甚至你可以销售PostgreSQL而不含源代码也可以,唯一的限制就是你不能因软件自身问题而向我们追诉法律责任,另外就是要求所有的软件拷贝中须包括以下版权声明。下面就是我们所使用的BSD版权声明内容:

- -

PostgreSQL数据库管理系统

- -

部分版权(c)1996-2005,PostgreSQL 全球开发小组,部分版权(c)1994-1996 加州大学董事

- -

(Portions copyright (c) 1996-2005,PostgreSQL Global Development Group Portions Copyright (c) 1994-6 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)PostgreSQL 可以运行在哪些操作系统平台上?

- -

一般说来,任何现在对 UNIX 兼容的操作系统之上都能运行PostgreSQL 。在安装指南里列出了发布时经过明确测试的平台。

- - -

PostgreSQl也可以直接运行在基于微软Windows-NT的操作系统,如Win2000 SP4,WinXP 和 Win2003,已制作完成的安装包可从 - http://pgfoundry.org/projects/pginstaller下载,基于MSDOS的Windows操作系统 - (Win95,Win98,WinMe)需要通过Cygwin模拟环境运行PostgreSQL。 -

- -

- 同时也有一个为Novell Netware 6开发的版本可从 http://forge.novell.com获取,为OS/2(eComStation)开发的版本可从 - http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2F 下载。 - -

- -

1.5) 我从哪里能得到PostgreSQL?

- -

- 通过浏览器可从http://www.postgresql.org/ftp/下载,也可通过FTP,从 - ftp://ftp.PostgreSQL.org/pub/站点下载。 -

- -

1.6) 最新版的PostgreSQL是什么?

- - -

PostgreSQL 最新的版本是版本 8.2.1 。

- -

我们计划每年发布一个主要升级版本,每几个月发布一个小版本。

- - -

1.7) 我从哪里能得到对PostgreSQL的支持?

- -

PostgreSQL社区通过邮件列表为其大多数用户提供帮助,订阅邮件列表的主站点是 http://www.postgresql.org/community/lists/,一般情况下,先加入General 或 Bug邮件列表是一个较好的开始。 -

- -

- 主要的IRC频道是在FreeNode(irc.freenode.net)的#postgresql,为了连上此频道,可以使用UNIX程序irc,其指令格式: - irc -c '#postgresql' "$USER" irc.freenode.net ,或者使用其他IRC客户端程序。在此网络中还存在一个PostgreSQL的西班牙频道(#postgersql-es)和法语频道 - (#postgresql-fr)。同样地,在EFNET上也有一个PostgreSQL的交流频道。 -

- -

- 可提供商业支持的公司列表可在http://techdocs.postgresql.org/companies.php浏览。 - -

- - - -

1.8) 我如何提交一个BUG报告?

- -

- 可访问 http://www.postgresql.org/support/submitbug,填写Bug上报表格即可,同样也可访问ftp站点ftp://ftp.PostgreSQL.org/pub/ 检查有无更新的PostgreSQL版本或补丁。 -

- - -

-通过使用Bug提交表格或是发往PostgreSQL邮件列表的Bug通常会有以下之一回复: -

- -
    -
  • 所提交内容不是一个Bug及其不是Bug的原因。
  • -
  • 所提交内容是一个已知的Bug并且已经加入TODO待处理任务列表。
  • -
  • 所提交的Bug已在当前版本中被修正。
  • -
  • 所提交的Bug已修正但尚未将补丁加入现在的发布软件包。
  • -
  • 请求提交者提供更详细的信息: -
      -
    • 操作系统
    • - -
    • PostgreSQL版本
    • -
    • 可重现Bug的测试案例
    • -
    • 调试信息
    • -
    • 调试跟踪输出
    • -
    -
  • -
  • 所提交内容是一个新Bug,将执行以下工作: -
      - -
    • 创建一个新补丁并将其加入下一个主要版本或是小的改进版本中。
    • -
    • æ­¤Bug暂时不能修正,将被加至TODO待处理任务列表。
    • -
    -
  • -
- - -

1.9) 我如何了解已知的 BUG 或暂缺的功能?

-

PostgreSQL 支持一个扩展的 SQL:2003 的子集。参阅我们的TODO 列表,了解已知Bug列表、暂缺的功能和将来的开发计划。 - -

- -

要求增加新功能的申请通常会收到以下之一的回复:

- -
    -
  • 该功能已加入TODO待处理任务列表。
  • -
  • 该功能不是必须的,因为: -
      -
    • 它是现有的且符合SQL标准的某功能的重复。
    • -
    • 该功能性会大大增加代码的复杂程序,而带来的好处是微不足道的。
    • -
    • 该功能是不安全或是不可靠的。
    • - -
    -
  • -
  • 该功能将被加入TODO待处理任务列表。
  • -
- -

-PostgreSQL不使用Bug跟踪系统,因为我们发现在邮件列表中直接回复以及保证TODO任务列表总是处于最新状态的方式工作效率会更高一些。事实上,Bug不会在我们的软件中存在很长时间, -对影响很多用户的Bug也总是很快会被修正。唯一能找到所有改进、提高和修正的地方是CVS的日志信息,即使是在软件新版本的发布信息中也不会列出每一处的软件更新。 -

- - - -

1.10) 能够获取的最新文档有哪些?

- - -

PostgreSQL包含大量的文档,主要有详细的参考手册,手册页和一些的测试例子。参见 /doc 目录(译注:应为 $PGHOME/doc)。 - 你还可以在线浏览PostgreSQL的手册,其网址是:http://www.PostgreSQL.org/docs。 -

- -

- 有两本关于PostgreSQL的书在线提供,在 - http://www.PostgreSQL.org/docs/awbook.html - 和 http://www.commandprompt.com/ppbook/ 。 - 也有大量的PostgreSQL书籍可供购买,其中最为流行的一本是由Korry Douglas编写的。在 - http://techdocs.PostgreSQL.org/techdocs/bookreviews.php上 - 上有大量有关PostgreSQL书籍的简介。 - 在 http://techdocs.PostgreSQL.org/上收集了有关PostgreSQL的大量技术文章。 - -

- -

- 客户端的命令行程序psql有一些以 \d 开头的命令,可显示关于类型,操作符,函数,聚合等信息,使用 \? 可以显示所有可用的命令。 -

- -

- 我们的 web 站点包含更多的文档。 -

- - - -

1.11) 我应该怎样学习 SQL ?

- -

- 首先考虑上述提到的与PostgreSQL相关的书籍,另外一本是Teach Yourself SQL in 21 Days, Second Edition,其详细介绍的网址是 - http://members.tripod.com/er4ebus/sql/index.htm, - 我们的许多用户喜欢The Practical SQL Handbook, Bowman, Judith S. 编写,Addison-Wesley公司出版,其他的则喜欢 - The Complete Reference SQL, Groff 编写,McGraw-Hill公司出版。 -

- -

在下列网址上也有很好的教程,他们是

- - - - -

1.12)如何提交补丁或是加入开发队伍?

-

- 详见 开发人员常见问题 (Developer's FAQ) 。 - -

- - -

1.13)PostgreSQL和其他数据库系统比起来如何?

- -

-评价软件有好几种方法:功能,性能,可靠性,支持和价格。 -

- -
-
功能
-
PostgreSQL 拥有大型商用数据库最多的功能,例如:事务,子查询,触发器,视图,外键参考完整性和复杂的锁定等。 - 我们还有一些它们没有的特性,如用户定义类型,继承,规则和多版本并行控制以减少锁的争用等。
- -
- -
性能
-
PostgreSQL和其他商用和开源的数据库具有类似的性能。对某些处理它比较快,对其他一些处理它比较慢。 - 与其他数据库相比,我们的性能优劣通常在 +/- 10%之间。
-
- -
可靠性
-
- - 我们都知道数据库必须是可靠的,否则它就一点用都没有。我们努力做到发布经过认真测试的,缺陷最少的稳定代码。每个版本至少有一个月的 beta - 测试时间,并且我们的发布历史显示我们可以提供稳定的,牢固的,可用于生产使用的版本。我们相信在这方面我们与其他的数据库软件是相当的。
-
- -
支持
-
- 我们的邮件列表提供一个非常大的开发人员和用户的组以帮助解决所碰到的任何问题。我们不能保证总是能解决问题,相比之下,商用数据库软件也并不是总能够提供解决方法。 - 直接与开发人员,用户群,手册和源程序接触使PostgreSQL的支持比其他数据库还要好。还有一些商业性的全面技术支持,可以给提供给那些需要的人。(参阅1.7 小节)
-
- - -
ä»·æ ¼
-
- 我们对任何用途都免费,包括商用和非商用目的。 - 你可以不加限制地向你的产品里加入我们的代码,除了那些我们在上面的版权声明里声明的 BSD版权之外的内容。 -
- -
- - -

1.14) PostgreSQL可以处理最近各个国家夏时制的变化吗?

- -

PostgreSQL 8.0之前的版本是使用操作系统中的时区数据库来处理夏时制的信息,自8.0版及以后的版本PostgreSQL会自身含有最新的时区信息。

- - -
- - -

用户客户端问题

- - -

2.1) 我们可以用什么语言和PostgreSQL打交道?

- -

PostgreSQL(缺省情况)只安装有C和内嵌式C的接口,其他的接口都是独立的项目,能够分别下载,这些接口项目独立的好处 - 是他们可以有各自的发布计划和各自独立的开发组。 -

-

- 一些编程语言如PHP都有访问PostgreSQL的接口,Perl、TCL、Python以及很多其他语言的接口在 - http://gborg.postgresql.org网站上的Drivers/Interfaces小节可找到, - 并且通过Internet很容易搜索到。 -

- - - - -

2.2) 有什么工具可以把PostgreSQL用于 Web 页面?

-

- 一个介绍以数据库为后台的挺不错的站点是:http://www.webreview.com。 -

-

- 对于 Web 集成,PHP 是一个极好的接口。它在http://www.php.net/。 - -

-

- 对于复杂的任务,很多人采用 Perl 接口和 使用CGI.pm的DBD::Pg 或 mod_perl 。 -

- - -

2.3)PostgreSQL拥有图形用户界面吗?

-

- 商业用户或是开源开发人员能找到很多的有关PostgreSQL的GUI图形工具软件,在 PostgreSQL社区文档有一个详细的列表。 -

- - -
- - - -

系统管理问题

- -

3.1)我怎样能把PostgreSQL装在 /usr/local/pgsql 以外的地方?

-

- 在运行 configure 时加上 --prefix 选项。 -

- - - -

3.2) 我如何控制来自其他电脑的连接?

-

- 缺省情况下,PostgreSQL只允许来自本机且通过 unix 域套接字或TCP/IP方式的连接。 - 你只有在修改了配置文件postgresql.conf中的listen_addresses,且也在配置文件$PGDATA/pg_hba.conf中打开了 - 基于远程电脑( host-based )的身份认证,并重新启动PostgreSQL,否则其他电脑是不能与你的PostgreSQL服务器进行连接的。 -

- - -

3.3) 我怎样调整数据库引擎以获得更好的性能?

- - -

- 有三个主要方面可以提升PostgreSQL的潜能。 -

- -
-
查询方式的变化
-
- 这主要涉及修改查询方式以获取更好的性能: -
    -
  • 创建索引,包括表达式和部分索引;
  • - -
  • 使用COPY语句代替多个Insert语句;
  • -
  • 将多个SQL语句组成一个事务以减少提交事务的开销;
  • -
  • 从一个索引中提取多条记录时使用CLUSTER;
  • -
  • 从一个查询结果中取出部分记录时使用LIMIT;
  • -
  • 使用预编译式查询(Prepared Query);
  • -
  • 使用ANALYZE以保持精确的优化统计;
  • - -
  • 定期使用 VACUUM 或 pg_autovacuum
  • -
  • 进行大量数据更改时先删除索引(然后重建索引)
  • -
-
- -
服务器的配置
-
- - 配置文件postgres.conf中的很多设置都会影响性能,所有参数的列表可见: - 管理员指南/数据库服务器运行环境/数据库服务器运行配置, - 有关参数的解释可见:http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html 和 - http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html。 -
- -
硬件的选择
- -
- 计算机硬件对性能的影响可浏览 - http://candle.pha.pa.us/main/writings/pgsql/hw_performance/index.html 和 - http://www.powerpostgresql.com/PerfList/。 -
- -
- - -

3.4)PostgreSQL里可以获得什么样的调试特性?

- - -

PostgreSQL 有很多类似 log_* 的服务器配置变量可用于查询的打印和进程统计,而这些工作对调试和性能测试很有帮助。 -

- - - -

3.5) 为什么在试图连接时收到“Sorry, too many clients(已有太多用户连接)”消息?

-

- 这表示你已达到缺省100个并发后台进程数的限制,你需要通过修改postgresql.conf文件中的max_connections值来 - 增加postmaster的后台并发处理数,修改后需重新启动postmaster。 - -

- - -

3.6)PostgreSQL的升级过程有哪些内容 ?

-

- PostgreSQL 开发组对每次小版本的升级主要只做了一些Bug修正工作,因此从 7.4.8 升级到 7.4.9 不需要 dump 和 restore,仅需要停止数据库服务器,安装更新后的软件包,然后重启服务器即可。 -

-

- 所有PostgreSQL的用户应该在最接近(你所使用的主版本)的小改进版本发布尽快升级。尽管每次升级可能都有一点风险,PostgreSQL的小改进版仅仅是设计用来修正一些Bug的,代码改动较少,所以风险还是很小的。PostgreSQL社区认为一般情况下不升级的风险还是多于升级的。 -

-

- 主版本的升级(例如从 7.3 到 7.4)通常会修改系统表和数据表的内部格式。 - 这些改变一般比较复杂,因此我们不维持数据文件的向后兼容性。因此从老版本中进行数据导出(dump)/然后在新版本中进行数据导入(reload)对主版本的升级是必须的。 - -

- -

3.7)(使用PostgreSQL)我需要使用什么计算机硬件 ?

-

- 由于计算机硬件大多数是兼容的,人们总是倾向于相信所有计算机硬件质量也是相同的。事实上不是, - ECC RAM(带奇偶校验的内存),SCSI (硬盘)和优质的主板比一些便宜货要更加可靠且具有更好的性能。PostgreSQL几乎可以运行在任何硬件上, - 但如果可靠性和性能对你的系统很重要,你就需要全面的研究一下你的硬件配置了。在我们的邮件列表上也有关于 - 硬件配置和性价比的讨论。 -

- - -
- -

操作问题

- - - -

4.1) 如何只选择一个查询结果的头几行?或是随机的一行?

-

- 如果你只是要提取几行数据,并且你在执行查询中知道确切的行数,你可以使用LIMIT功能。 - 如果有一个索引与 ORDER BY中的条件匹配,PostgreSQL 可能就只处理要求的头几条记录, - (否则将对整个查询进行处理直到生成需要的行)。如果在执行查询功能时不知道确切的记录数, - 可使用游标(cursor)和FETCH功能。 -

-

- 可使用以下方法提取一行随机记录的: -

-
-      SELECT  cols
-      FROM tab
-      ORDER BY random()
-      LIMIT 1 ;
-
-
- - - -

4.2) 如何查看表、索引、数据库以及用户的定义?如何查看psql里用到的查询指令并显示它们?

-

- 在psql中使用 \dt 命令来显示数据表的定义,要了解psql中的完整命令列表可使用\? ,另外,你也可以阅读 psql 的源代码 - 文件pgsql/src/bin/psql/describe.c,它包括为生成psql反斜杠命令的输出的所有 SQL 命令。你还可以带 -E 选项启动 psql, - 这样它将打印出你在psql中所给出的命令执行时的内部实际使用的SQL查询语句。PostgreSQL也提供了一个兼容SQL的INFORMATION SCHEMA接口, - 你可以从这里获取关于数据库的信息。 - -

-

- 在系统中也有一些以pg_ 打头的系统表也描述了表的定义。 -

-

- 使用 psql -l 指令可以列出所有的数据库。 -

-

- 也可以浏览一下 pgsql/src/tutorial/syscat.source文件,它列举了很多可从数据库系统表中获取信息的SELECT语法。 - -

- - -

4.3) 如何更改一个字段的数据类型?

-

- 在8.0版本里更改一个字段的数据类型很容易,可使用 ALTER TABLE ALTER COLUMN TYPE 。 -

-

- 在以前的版本中,可以这样做: -

-
-   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;
-
-
-

- 你然后可以使用VACUUM FULL tab 指令来使系统收回无效数据所占用的空间。 -

- -

4.4) 单条记录,单个表,单个数据库的最大限制是多少?

-

- 下面是一些限制: -

-
- - - - - - - - - - - - -
单个数据库最大尺寸?无限制(已存在有 32TB 的数据库)
单个表的最大尺寸?32 TB
一行记录的最大尺寸?1.6 TB
一个字段的最大尺寸?1 GB
一个表里最大行数?无限制
一个表里最大列数?250-1600 (与列类型有关)
一个表里的最大索引数量?无限制
-
- - -

- 当然,实际上没有真正的无限制,还是要受可用磁盘空间、可用内存/交换区的制约。 - 事实上,当上述这些数值变得异常地大时,系统性能也会受很大影响。 -

- -

- 单表的最大大小 32 TB 不需要操作系统对单个文件也需这么大的支持。大表用多个 1 GB 的文件存储,因此文件系统大小的限制是不重要的。 -

-

- 如果缺省的块大小增长到 32K ,最大的单表大小和最大列数还可以增加到四倍。 -

-

- 有一个限制就是不能对大小多于2000字节的列创建索引。幸运地是这样的索引很少用到。通过对多字节列的内容进行MD5哈稀运算结果进行函数索引可对列的唯一性得到保证, - 并且全文检索允许对列中的单词进行搜索。 -

- - -

4.5) 存储一个典型的文本文件里的数据需要多少磁盘空间?

-

- 一个 Postgres 数据库(存储一个文本文件)所占用的空间最多可能需要相当于这个文本文件自身大小5倍的磁盘空间。 -

-

- 例如,假设有一个 100,000 行的文件,每行有一个整数和一个文本描述。 - 假设文本串的平均长度为20字节。文本文件占用 2.8 MB。存放这些数据的PostgreSQL数据库文件大约是 6.4 MB: -

-
-     28 字节: 每行的头(大约值)
-     24 字节: 一个整数型字段和一个文本型字段
-   +  4 字节: 页面内指向元组的指针
-   ----------------------------------------
-     56 字节每行
-
-   PostgreSQL 数据页的大小是 8192 字节 (8 KB),则:
-
-   8192 字节每页
-   -------------------   =  146 行/数据页(向下取整)
-     56 字节每行
-
-   100000 数据行
-   --------------------  =  685 数据页(向上取整)
-      146 行/数据页
-
-   685 数据页 * 8192 字节/页  = 5,611,520 字节(5.6 MB)
-
- - -

- 索引不需要这么多的额外消耗,但也确实包括被索引的数据,因此它们也可能很大。 -

-

- 空值NULL存放在位图中,因此占用很少的空间。 -

- -

4.6) 为什么我的查询很慢?为什么这些查询没有利用索引?

-

- 并非每个查询都会自动使用索引。只有在表的大小超过一个最小值,并且查询只会选中表中较小比例的记录时才会采用索引。 - 这是因为索引扫描引起的随即磁盘存取可能比直接地读取表(顺序扫描)更慢。 - -

-

- 为了判断是否使用索引,PostgreSQL必须获得有关表的统计值。这些统计值可以使用 VACUUM ANALYZE,或 ANALYZE 获得。 - 使用统计值,优化器知道表中有多少行,就能够更好地判断是否利用索引。 - 统计值对确定优化的连接顺序和连接方法也很有用。在表的内容发生变化时,应定期进行统计值的更新收集。 -

-

- 索引通常不用于 ORDER BY 或执行连接。对一个大表的一次顺序扫描再做一次排序通常比索引扫描要快。然而,如果将 LIMIT 和 ORDER BY - 结合在一起使用的话,通常将会使用索引,因为这时仅返回表中的一小部分记录。 -

-

- 如果你确信PostgreSQL的优化器使用顺序扫描是不正确的,你可以使用SET enable_seqscan TO 'off'指令来关闭顺序扫描, - 然后再次运行查询,你就可以看出使用一个索引扫描是否确实要快一些。 -

- -

- - 当使用通配符操作,例如 LIKE 或 ~ 时,索引只能在特定的情况下使用: -

-
    -
  • 字符串的开始部分必须是普通字符串,也就是说: -
      -
    • LIKE 模式不能以 % 打头。
    • - -
    • ~ (正则表达式)模式必须以 ^ 打头。
    • -
    -
  • -
  • 字符串不能以匹配多个字符的模式类打头,例如 [a-e]。
  • -
  • 大小写无关的查找,如 ILIKE 和 ~* 等不使用索引,但可以用 4.8 节描述的表达式索引。
  • - -
  • 在做 initdb 时必须采用缺省的本地设置 C locale,因为系统不可能知道在非C locale情况时下一个最大字符是什么。 - 在这种情况下,你可以创建一个特殊的text_pattern_ops索引来用于LIKE的索引。 -
  • -
-

- 在8.0之前的版本中,除非要查询的数据类型和索引的数据类型相匹配,否则索引经常是未被用到,特别是对int2,int8和数值型的索引。 -

- -

4.7) 我如何才能看到查询优化器是怎样评估处理我的查询?

- - -

参考 EXPLAIN 手册页。

- -

4.8) 我怎样做正则表达式搜索和大小写无关的正则表达式查找?怎样利用索引进行大小写无关查找?

-

- 操作符 ~ 处理正则表达式匹配,而 ~* 处理大小写无关的正则表达式匹配。大小写无关的 LIKE 变种成为 ILIKE。 - -

-

- 大小写无关的等式比较通常写做: -

-
-    SELECT *
-    FROM tab
-    WHERE lower(col) = 'abc';
-
- -

- 这样将不会使用标准的索引。但是可以创建一个在这种情况下使用的表达式索引: -

-
-    CREATE INDEX tabindex ON tab (lower(col));
-
-
-

- 如果上述索引在创建时加入UNIQUE约束,虽然索引字段自身内容可以存储大小写不限的内容,但如果有UNIQUE约束后,这些内容不能仅仅是大小写不同(否则会造成冲突)。为了保证不发生这种情况,可以使用CHECK约束条件或是触发器在录入时进行限制。 -

- - -

4.9) 在一个查询里,我怎样检测一个字段是否为 NULL ?我如何才能准确排序而不论某字段是否含 NULL 值?

-

- - 用 IS NULL 和 IS NOT NULL 测试这个字段,具体方法如下: -

-
   SELECT *
-   FROM tab
-   WHERE col IS NULL;
-
- -

为了能对含 NULL字段排序,可在 ORDER BY 条件中使用 IS NULL和 - IS NOT NULL 修饰符,条件为真 true 将比条件为假false 排在前面,下面的例子就会将含 - NULL 的记录排在结果的上面部分: - -

-
   SELECT *
-   FROM tab
-   ORDER BY (col IS NOT NULL)
-
- -

4.10) 各种字符类型之间有什么不同?

-
- - - - - - - - - - - -
类型内部名称说明
VARCHAR(n)varchar指定了最大长度,变长字符串,不足定义长度的部分不补齐
CHAR(n)bpchar定长字符串,实际数据不足定义长度时,以空格补齐
TEXTtext没有特别的上限限制(仅受行的最大长度限制)
BYTEAbytea变长字节序列(使用NULL字符也是允许的)
"char"char单个字符
-
- -

- 在系统表和在一些错误信息里你将看到内部名称。 -

-

- 上面所列的前四种类型是"varlena"(变长)类型(也就是说,开头的四个字节是长度,后面才是数据)。 - 于是实际占用的空间比声明的大小要多一些。 - 然而这些类型如定义很长时都可以被压缩存储,因此磁盘空间也可能比预想的要少。 - -

-

- VARCHAR(n) 在存储限制了最大长度的变长字符串是最好的。 - TEXT 适用于存储最大可达 1G左右但未定义限制长度的字符串。 -

-

- CHAR(n) 最适合于存储长度相同的字符串。 CHAR(n)会根据所给定的字段长度以空格补足(不足的字段内容), - 而 VARCHAR(n) 只存储所给定的数据内容。 - BYTEA 用于存储二进制数据,尤其是包含 NULL 字节的值。这些类型具有差不多的性能。 - -

- - - -

4.11.1) 我怎样创建一个序列号或是自动递增的字段?

-

PostgreSQL 支持 SERIAL 数据类型。(字段定义为SERIAL后)将自动创建一个序列生成器,例如: -

-
-   CREATE TABLE person ( 
-      id   SERIAL, 
-      name TEXT 
-   );
-
-

- 会自动转换为以下SQL语句: -

- -
-   CREATE SEQUENCE person_id_seq;
-   CREATE TABLE person ( 
-      id   INT4 NOT NULL DEFAULT nextval('person_id_seq'),
-      name TEXT
-   );
-
-

- 参考 create_sequence 手册页获取关于序列生成器的更多信息。 -

- - -

4.11.2) 我如何获得一个插入的序列号的值?

-

- 一种方法是在插入之前先用函数 nextval() 从序列对象里检索出下一个 SERIAL 值,然后再用此值精确地插入。使用 - 4.11.1 里的例表,可用伪码这样描述: - -

-
-   new_id = execute("SELECT nextval('person_id_seq')");
-   execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')");
-
-

- 这样还能在其他查询中使用存放在 new_id 里的新值(例如,作为参照 person 表的外键)。 - 注意自动创建的 SEQUENCE 对象的名称将会是 <table>_<serialcolumn>_seq, - 这里 table 和 serialcolumn 分别是你的表的名称和你的 SERIAL 字段的名称。 -

-

- 类似的,在 SERIAL 对象缺省插入后你可以用函数 currval() 检索刚赋值的 SERIAL 值,例如: - -

-
-   execute("INSERT INTO person (name) VALUES ('Blaise Pascal')");
-   new_id = execute("SELECT currval('person_id_seq')");
-
- -

4.11.3) 同时使用 currval() 会导致和其他用户的冲突情况吗?

-

- 不会。currval() 返回的是你本次会话进程所赋的值而不是所有用户的当前值。
- -

- -

4.11.4) 为什么不在事务异常中止后重用序列号呢?为什么在序列号字段的取值中存在间断呢?

-

- 为了提高并发性,序列号在需要的时候赋予正在运行的事务,并且在事务结束之前不进行锁定, - 这就会导致异常中止的事务后,序列号会出现间隔。 -

- -

4.12) 什么是 OID ?什么是 CTID ?

- - -

PostgreSQL 里创建的每一行记录都会获得一个唯一的OID,除非在创建表时使用WITHOUT OIDS选项。 - OID创建时会自动生成一个4字节的整数,所有 OID 在相应PostgreSQL服务器中均是唯一的。 然而,它在超过40亿时将溢出, - OID此后会出现重复。PostgreSQL 在它的内部系统表里使用 OID 在表之间建立联系。 -

-

- 在用户的数据表中,最好是使用SERIAl来代替OID - - 因为SERIAL只要保证在单个表中的数值是唯一的就可以了,这样它溢出的可能性就非常小了, - SERIAL8可用来保存8字节的序列数值。 -

- -

- CTID 用于标识带着数据块(地址)和(块内)偏移的特定的物理行。 - CTID 在记录被更改或重载后发生改变。索引数据使用它们指向物理行。 -

- - - -

4.13) 为什么我收到错误信息“ERROR: Memory exhausted in AllocSetAlloc()”?

-

- 这很可能是系统的虚拟内存用光了,或者内核对某些资源有较低的限制值。在启动 postmaster 之前试试下面的命令: -

-
-   ulimit -d 262144
-   limit datasize 256m
-
-

- 取决于你用的 shell,上面命令只有一条能成功,但是它将把你的进程数据段限制设得比较高, - 因而也许能让查询完成。这条命令应用于当前进程,以及所有在这条命令运行后创建的子进程。 - 如果你是在运行SQL客户端时因为后台返回了太多的数据而出现问题,请在运行客户端之前执行上述命令。 - -

- -

4.14) 我如何才能知道所运行的PostgreSQL的版本?

-

- 从 psql 里,输入 SELECT version();指令。 -

- -

4.15) 我如何创建一个缺省值是当前时间的字段?

-

- 使用 CURRENT_TIMESTAMP: - -

-
-   CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
-
- - -

4.16) 我怎样进行 outer join (外连接)?

-

PostgreSQL 采用标准的 SQL 语法支持外连接。这里是两个例子:

-
-   SELECT *
-   FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
-
-

或是

- -
-   SELECT *
-   FROM t1 LEFT OUTER JOIN t2 USING (col);
-
-

- 这两个等价的查询在 t1.col 和 t2.col 上做连接,并且返回 t1 中所有未连接的行(那些在 t2 中没有匹配的行)。 - 右[外]连接(RIGHT OUTER JOIN)将返回 t2 中未连接的行。 - 完全外连接(FULL OUTER JOIN)将返回 t1 和 t2 中未连接的行。 - 关键字 OUTER 在左[外]连接、右[外]连接和完全[外]连接中是可选的,普通连接被称为内连接(INNER JOIN)。 -

- - -

4.17) 如何使用涉及多个数据库的查询?

-

- 没有办法查询当前数据库之外的数据库。 - 因为PostgreSQL要加载与数据库相关的系统目录(系统表),因此跨数据库的查询如何执行是不定的。 -

- -

- 附加增值模块contrib/dblink允许采用函数调用实现跨库查询。当然用户也可以同时连接到不同的数据库执行查询然后在客户端合并结果。 -

- -

4.18) 如何让函数返回多行或多列数据?

-

- 在函数中返回数据记录集的功能是很容易使用的,详情参见: - http://techdocs.postgresql.org/guides/SetReturningFunctions -

- -

4.19) 为什么我在使用PL/PgSQL函数存取临时表时会收到错误信息“relation with OID ##### does not exist”?

- -

- PL/PgSQL会缓存函数的脚本内容,由此带来的一个不好的副作用是若一个 PL/PgSQL - 函数访问了一个临时表,然后该表被删除并重建了,则再次调用该函数将失败, - 因为缓存的函数内容仍然指向旧的临时表。解决的方法是在 PL/PgSQL 中用EXECUTE - 对临时表进行访问。这样会保证查询在执行前总会被重新解析。 -

- -

4.20) 目前有哪些数据复制方案可用?

-

- “复制”只是一个术语,有好几种复制技术可用,每种都有优点和缺点: -

-

- - 主/从复制方式是允许一个主服务器接受读/写的申请,而多个从服务器只能接受读/SELECT查询的申请, - 目前最流行且免费的主/从PostgreSQL复制方案是 - Slony-I 。 -

-

- 多个主服务器的复制方式允许将读/写的申请发送给多台的计算机,这种方式由于需要在多台服务器之间同步数据变动 - 可能会带来较严重的性能损失,Pgcluster是目前这种方案 - 中最好的,而且还可以免费下载。 -

-

- 也有一些商业需付费和基于硬件的数据复制方案,支持上述各种复制模型。 -

- - -

4.21) 为何查询结果显示的表名或列名与我的查询语句中的不同?为何大写状态不能保留?

- -

- 最常见的原因是在创建表时对表名或是列名使用了双引号“”,当使用了双引号后,表名或列名(称为标识符)存储时是区分 -大小写的, - 这意谓着你在查询时表名或列名也应使用双引号,一些工具软件,像pgAdmin会在发出创建表的指令时自动地在每个标识符上加双引号。 - 因此,为了标识符的统一,你应该: -

-
    -
  • 在创建表时避免将标识符使用双引号引起来。
  • -
  • 在标识符中只使用小写字母。
  • - -
  • (为了与已存在的标识符相同)在查询中使用双引号将标识符引起来。
  • -
- - - - \ No newline at end of file diff --git a/doc/src/FAQ/FAQ_chinese_trad.html b/doc/src/FAQ/FAQ_chinese_trad.html deleted file mode 100644 index 9a56180a08..0000000000 --- a/doc/src/FAQ/FAQ_chinese_trad.html +++ /dev/null @@ -1,1003 +0,0 @@ - - - - - PostgreSQL 常见问题(FAQ) - - - - - - -

PostgreSQL 常見問題(FAQ)

- - -

最近更新:2007 年 2 月 8 日 星期二 22:43:13 EST
- 中文版最近更新:2007 年 2 月 12 日 星期一 12:00:04 CST -

-

當前維護人員:Bruce Momjian (pgman@candle.pha.pa.us)
- 正體中文版維護人員:郭朝益(ChaoYi, Kuo)(kuo.chaoyi@gmail.com)

- -

- 本文檔的最新版本可以在 - http://www.postgresql.org/files/documentation/faqs/FAQ.html 查看。 -

-

- 與作業系統平台相關的問題可在 http://www.postgresql.org/docs/faq/ 裡找到答案。
-

-
- -

常見問題

- - -

-1.1)PostgreSQL 是什麼?該怎麼發音?
-1.2)誰控制和管理PostgreSQL ?
-1.3)PostgreSQL的版權是什麼?
-1.4)PostgreSQL可以運行在哪些作業系統平台上?
-1.5)我從哪裡能得到PostgreSQL?
- -1.6)最新版的 PostgreSQL 是什麼?
-1.7)我從哪裡能得到對 PostgreSQL 的支持?
-1.8)我如何提交一個 BUG 報告?
-1.9)我如何瞭解已知的 BUG 或暫缺的功能?
-1.10)能夠獲取的最新文檔有哪些?
-1.11)我應該怎樣學習 SQL ?
- -1.12)如何提交補丁或是加入開發隊伍?
-1.13)PostgreSQL 和其他資料庫系統比起來如何?
-1.14)PostgreSQL 可以處理最近各個國家夏時制的變化嗎?
-

- -

用戶客戶端問題

-

-2.1)我們可以用什麼語言和 PostgreSQL 進行溝通?
-2.2)有什麼工具可以把 PostgreSQL 用於 Web 頁面?
- -2.3)PostgreSQL 擁有圖形用戶界面(GUI)嗎?
-

- -

系統管理問題

-

-3.1)我怎樣才能把 PostgreSQL 裝在 /usr/local/pgsql 以外的地方?
-3.2)我如何控制來自其他電腦的連接?
-3.3)我怎樣調整資料庫伺服器以獲得更好的性能?
- -3.4)PostgreSQL 裡可以獲得什麼樣的調試特性?
-3.5)為什麼在試圖連接登錄時收到「Sorry, too many clients」 訊息?
-3.6)PostgreSQL 的升級過程有哪些內容?
-3.7)(使用 PostgreSQL )我需要使用什麼電腦硬體?
-

- -

操作問題

- -

-4.1) 如何只選擇一個查詢結果的頭幾行?或是隨機的一行?
-4.2) 如何查看表、索引、資料庫以及用戶的定義?如何查看 psql 裡用到的查詢指令並顯示它們?
-4.3) 如何更改一個欄位的資料類型?
-4.4) 單筆記錄,單一表,一個資料庫的最大限制是多少?
-4.5) 存儲一個典型的文本文件裡的資料需要多少磁碟空間?
- -4.6) 為什麼我的查詢很慢?為什麼這些查詢沒有利用索引?
-4.7) 我如何才能看到查詢優化器是怎樣評估處理我的查詢的?
-4.8) 我怎樣做正則表達式搜索和大小寫無關的正則表達式查找?怎樣利用索引進行大小寫無關查找?
-4.9) 在一個查詢裡,我怎樣檢測一個欄位是否為 NULL?我如何才能準確排序而不論某欄位是否含NULL值?
-4.10) 各種字符類型之間有什麼不同?
-4.11.1) 我怎樣創建一個序列號型或是自動遞增的欄位?
- -4.11.2) 我如何獲得一個插入的序列號的值?
-4.11.3) 同時使用 currval() 會導致和其他用戶的衝突情況嗎?
-4.11.4) 為什麼不在事務異常中止後重用序列號呢?為什麼在序列號欄位的取值中存在間斷呢?
-4.12) 什麼是 OID?什麼是 CTID ?
-4.13) 為什麼我收到錯誤資訊「ERROR: Memory exhausted in AllocSetAlloc()」?
- -4.14) 我如何才能知道所運行的 PostgreSQL 的版本?
-4.15) 我如何創建一個預設值是當前時間的欄位?
-4.16) 如何執行外連接(outer join)查詢?
-4.17) 如何執行涉及多個資料庫的查詢?
-4.18) 如何讓函數返回多行或多列資料?
-4.19) 為什麼我在使用 PL/PgSQL 函數存取臨時表時會收到錯誤資訊「relation with OID ##### does not exist」?
- -4.20) 目前有哪些資料複寫(replication)方案可用?
-4.21) 為何查詢結果顯示的表名或欄名與我的查詢語句中的不同?為何大寫狀態不能保留?
-

- -
- -

常見問題

- -

1.1) PostgreSQL 是什麼?該怎麼發音?

- - -

PostgreSQL 讀作 Post-Gres-Q-L,有時候也簡稱為Postgres 。想聽一下其發音的人員可從這裡下載聲音文件: - MP3 格式 。 -

- -

PostgreSQL 是面向目標的關係資料庫系統,它具有傳統商業資料庫系統的所有功能,同時又含有將在下一代 DBMS 系統的使用的增強特性。PostgreSQL 是自由免費的,並且所有源代碼都可以獲得。 -

- -

PostgreSQL 的開發隊伍主要為志願者,他們遍佈世界各地並通過互聯網進行聯繫,這是一個社區開發項目,它不被任何公司控制。 - 如想加入開發隊伍,請參見開發人員常見問題(FAQ) - http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html - -

- -

1.2) 誰控制 PostgreSQL ?

-

- 如果你在尋找PostgreSQL的掌門人,或是什麼中央委員會,或是什麼所屬公司,你只能放棄了---因為一個也不存在,但我們的確有一個 - 核心委員會和CVS管理組,但這些工作組的設立主要是為了進行管理工作而不是對PostgreSQL進行獨佔式控制,PostgreSQL項目是由任何人均 - 可參加的開發人員社區和所有用戶控制的,你所需要做的就是訂閱郵件列表,參與討論即可(要參與PostgreSQL的開發詳見 - 開發人員常問題 (Developer's FAQ) 獲取資訊)。 -

- - -

1.3) PostgreSQL 的版權是什麼?

- - -

PostgreSQL的發布遵從經典的 BSD 版權。它允許用戶不限目的地使用 PostgreSQL,甚至你可以銷售 -PostgreSQL 而不含源代碼也可以,唯一的限制就是你不能因軟體自身問題而向我們追訴法律責任,另外就是要求所有的軟體拷貝中須包括以下版權聲明。 -下面就是我們所使用的BSD版權聲明內容:

- -

PostgreSQL 資料庫管理系統

- -

部分版權(c)1996-2005,PostgreSQL 全球開發小組,部分版權(c)1994-1996 加州大學董事

- -

(Portions copyright (c) 1996-2005,PostgreSQL Global -Development Group Portions Copyright (c) 1994-6 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) PostgreSQL 可以運行在哪些作業系統平台上?

- -

一般說來,任何現在對 UNIX 相容的作業系統之上都能運行 PostgreSQL 。在安裝指南裡列出了發佈時經過明確測試的平台。

- - -

PostgreSQL 也可以直接運行在基於微軟 Windows-NT 的作業系統,如 Win2000 SP4,WinXP 和 Win2003,已製作完成的安裝包可從 - http://pgfoundry.org/projects/pginstaller下載,基於MSDOS的Windows作業系統 - (Win95,Win98,WinMe)需要通過Cygwin模擬環境運行PostgreSQL。 -

- -

- 同時也有一個為 Novell Netware 6 開發的版本可從 http://forge.novell.com 獲取,為OS/2(eComStation)開發的版本可從 - http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2F 下載。 - -

- -

1.5) 我從哪裡能得到 PostgreSQL?

- -

- 通過瀏覽器可從 http://www.postgresql.org/ftp/ 下載,也可通過FTP,從 - ftp://ftp.PostgreSQL.org/pub/ 站點下載。 -

- -

1.6) 最新版的 PostgreSQL 是什麼?

- - -

PostgreSQL 最新的版本是版本 8.2.3 。

- -

我們計劃每年發佈一個主要升級版本,每幾個月發佈一個小版本。

- - -

1.7) 我從哪裡能得到對 PostgreSQL 的支持?

- -

PostgreSQL社區通過郵件列表為其大多數用戶提供幫助,訂閱郵件列表的主站點是 http://www.postgresql.org/community/lists/,一般情況下,先加入General 或 Bug郵件列表是一個較好的開始。 -

- -

- 主要的IRC頻道是在FreeNode(irc.freenode.net)的#postgresql,為了連上此頻道,可以使用 UNIX 程序 irc,其指令格式: - irc -c '#postgresql' "$USER" irc.freenode.net ,或者使用其他IRC客戶端程序。在此網絡中還存在一個 PostgreSQL 的西班牙頻道(#postgersql-es)和法語頻道 - (#postgresql-fr)。同樣地,在 EFNET 上也有一個 PostgreSQL 的交流頻道。 -

- -

- 可提供商業支持的公司列表可在 http://techdocs.postgresql.org/companies.php 瀏覽。 - -

- - - -

1.8) 我如何提交一個 BUG 報告?

- -

- 可訪問 http://www.postgresql.org/support/submitbug,填寫 Bug 上報表格即可,同樣也可訪問 ftp 站點 ftp://ftp.PostgreSQL.org/pub/ 檢查有無更新的PostgreSQL 版本或補丁。 -

- - -

-通過使用 Bug 提交表格或是發往 PostgreSQL 郵件列表的 Bug 通常會有以下之一回覆: -

- -
    -
  • 所提交內容不是一個 Bug 及其不是 Bug 的原因。
  • -
  • 所提交內容是一個已知的 Bug 並且已經加入 TODO 待處理任務列表。
  • -
  • 所提交的 Bug 已在當前版本中被修正。
  • -
  • 所提交的 Bug 已修正但尚未將補丁加入現在的發布軟體包。
  • -
  • 請求提交者提供更詳細的資訊: -
      -
    • 作業系統
    • - -
    • PostgreSQL 版本
    • -
    • 可重現 Bug 的測試案例
    • -
    • 調試資訊
    • -
    • 調試跟蹤輸出
    • -
    -
  • -
  • 所提交內容是一個新 Bug,將執行以下工作: -
      - -
    • 創建一個新補丁並將其加入下一個主要版本或是小的改進版本中。
    • -
    • æ­¤ Bug 暫時不能修正,將被加至 TODO 待處理任務列表。
    • -
    -
  • -
- - -

1.9) 我如何瞭解已知的 BUG 或暫缺的功能?

-

PostgreSQL 支持一個擴展的 SQL:2003 的子集。參閱我們的 TODO 列表,瞭解已知 Bug 列表、暫缺的功能和將來的開發計劃。 - -

- -

要求增加新功能的申請通常會收到以下之一的回覆:

- -
    -
  • 該功能已加入 TODO 待處理任務列表。
  • -
  • 該功能不是必須的,因為: -
      -
    • 它是現有的且符合 SQL 標準的某功能的重複。
    • -
    • 該功能性會大大增加代碼的複雜程序,而帶來的好處是微不足道的。
    • -
    • 該功能是不安全或是不可靠的。
    • - -
    -
  • -
  • 該功能將被加入 TODO 待處理任務列表。
  • -
- -

-PostgreSQL 不使用 Bug 跟蹤系統,因為我們發現在郵件列表中直接回覆以及保證 TODO 任務列表總是處於最新狀態的方式工作效率會更高一些。事實上,Bug不會在我們的軟體中存在很長時間, -對影響很多用戶的Bug也總是很快會被修正。唯一能找到所有改進、提高和修正的地方是 CVS 的日誌資訊,即使是在軟體新版本的發布資訊中也不會列出每一處的軟體更新。 -

- - - -

1.10) 能夠獲取的最新文檔有哪些?

- - -

PostgreSQL 包含大量的文檔,主要有詳細的參考手冊,手冊頁和一些的測試例子。參見 /doc 目錄(譯註:應為 $PGHOME/doc)。 - 你還可以在線瀏覽 PostgreSQL 的手冊,其網址是:http://www.PostgreSQL.org/docs。 -

- -

- 有兩本關於PostgreSQL的書在線提供,在 - http://www.postgresql.org/docs/books/awbook.html - 和 http://www.commandprompt.com/ppbook/ 。 - 也有大量的 PostgreSQL 書籍可供購買,其中最為流行的一本是由 Korry Douglas 編寫的。在 - http://techdocs.PostgreSQL.org/techdocs/bookreviews.php上 - 上有大量有關 PostgreSQL 書籍的簡介。 - 在 http://techdocs.PostgreSQL.org/ 上收集了有關 PostgreSQL 的大量技術文章。

- -

- 客戶端的命令行程序psql有一些以 \d 開頭的命令,可顯示關於類型,操作符,函數,聚合等資訊,使用 \? 可以顯示所有可用的命令。 -

- -

- 我們的 web 站點包含更多的文檔。 -

- - - -

1.11) 我應該怎樣學習 SQL ?

- -

- 首先考慮上述提到的與PostgreSQL相關的書籍,另外一本是 Teach Yourself SQL in 21 Days, Second Edition,其詳細介紹的網址是 - http://members.tripod.com/er4ebus/sql/index.htm, - 我們的許多用戶喜歡The Practical SQL Handbook, Bowman, Judith S. 編寫,Addison-Wesley公司出版,其他的則喜歡 - The Complete Reference SQL, Groff 編寫,McGraw-Hill 公司出版。 -

- -

在下列網址上也有很好的教程,他們是

- - - - -

1.12)如何提交補丁或是加入開發隊伍?

-

- 詳見 開發人員常見問題 (Developer's FAQ) 。

- - -

1.13) PostgreSQL 和其他資料庫系統比起來如何?

- -

-評價軟體有好幾種方法:功能,性能,可靠性,支持和價格。 -

- -
-
功能
-
PostgreSQL 擁有大型商用資料庫最多的功能,例如:事務,子查詢,觸發器,視圖,外鍵參考完整性和複雜的鎖定等。 - 我們還有一些它們沒有的特性,如用戶定義類型,繼承,規則和多版本並行控制以減少鎖的爭用等。
- -
- -
性能
-
PostgreSQL和其他商用和開源的資料庫具有類似的性能。對某些處理它比較快,對其他一些處理它比較慢。 - 與其他資料庫相比,我們的性能優劣通常在 +/- 10%之間。
-
- -
可靠性
-
- - 我們都知道資料庫必須是可靠的,否則它就一點用都沒有。我們努力做到發佈經過認真測試的,缺陷最少的穩定代碼。每個版本至少有一個月的 beta - 測試時間,並且我們的發布歷史顯示我們可以提供穩定的,牢固的,可用於生產使用的版本。我們相信在這方面我們與其他的資料庫軟體是相當的。
-
- -
支持
-
- 我們的郵件列表提供一個非常大的開發人員和用戶的組以幫助解決所碰到的任何問題。我們不能保證總是能解決問題,相比之下,商用資料庫軟體也並不是總能夠提供解決方法。 - 直接與開發人員,用戶群,手冊和源程序接觸使PostgreSQL的支持比其他資料庫還要好。還有一些商業性的全面技術支持,可以給提供給那些需要的人。(參閱1.7 小節)
-
- - -
價格
-
- 我們對任何用途都免費,包括商用和非商用目的。 - 你可以不加限制地向你的產品裡加入我們的代碼,除了那些我們在上面的版權聲明裡聲明的 BSD版權之外的內容。 -
- -
- - -

1.14) PostgreSQL 可以處理最近各個國家夏時制的變化嗎?

- - -

PostgreSQL 8.0之前的版本是使用作業系統中的時區資料庫來處理夏時制的資訊,自 8.0 版及以後的版本 PostgreSQL 會自身含有最新的時區資訊。

- - -
- - -

用戶客戶端問題

- - -

2.1) 我們可以用什麼語言和 PostgreSQL 進行溝通?

- -

PostgreSQL (預設情況)只安裝有 C 和內嵌式 C 的接口,其他的接口都是獨立的項目,能夠分別下載,這些接口項目獨立的好處 - 是他們可以有各自的發布計劃和各自獨立的開發組。 -

-

- 一些編程語言如 PHP 都有訪問 PostgreSQL 的接口,Perl、TCL、Python 以及很多其他語言的接口在 - http://gborg.postgresql.org 網站上的 Drivers/Interfaces 小節可找到, - 並且通過 Internet 很容易搜索到。 -

- - - - -

2.2) 有什麼工具可以把 PostgreSQL 用於 Web 頁面?

-

- 一個介紹以資料庫為後台的挺不錯的站點是:http://www.webreview.com。 -

-

- 對於 Web 集成,PHP 是一個極好的接口。它在 http://www.php.net/。 - -

-

- 對於複雜的任務,很多人採用 Perl 接口和 使用 CGI.pm 的 DBD::Pg 或 mod_perl 。 -

- - -

2.3)PostgreSQL 擁有圖形用戶界面嗎?

-

- 商業用戶或是開源開發人員能找到很多的有關 PostgreSQL的GUI 圖形工具軟體,在 PostgreSQL社區文檔 有一個詳細的列表。 -

- - -
- - - -

系統管理問題

- -

3.1)我怎樣能把 PostgreSQL 裝在 /usr/local/pgsql 以外的地方?

-

- 在運行 configure 時加上 --prefix 選項。 -

- - - -

3.2) 我如何控制來自其他電腦的連接?

-

- 預設情況下,PostgreSQL 只允許來自本機且通過 unix 域套接字或 TCP/IP 方式的連接。 - 你只有在修改了配置文件 postgresql.conf 中的 listen_addresses,且也在配置文件 $PGDATA/pg_hba.conf 中打開了 - 基於遠程電腦( host-based )的身份認證,並重新啟動 PostgreSQL,否則其他電腦是不能與你的 PostgreSQL 伺服器進行連接的。 -

- - -

3.3) 我怎樣調整資料庫引擎以獲得更好的性能?

- - -

- 有三個主要方面可以提升 PostgreSQL 的潛能。 -

- -
-
查詢方式的變化
-
- 這主要涉及修改查詢方式以獲取更好的性能: -
    -
  • 創建索引,包括表達式和部分索引;
  • - -
  • 使用 COPY 語句代替多個 Insert 語句;
  • -
  • 將多個SQL語句組成一個事務以減少提交事務的開銷;
  • -
  • 從一個索引中提取多條記錄時使用 CLUSTER;
  • -
  • 從一個查詢結果中取出部分記錄時使用 LIMIT;
  • -
  • 使用預編譯式查詢(Prepared Query);
  • -
  • 使用 ANALYZE 以保持精確的優化統計;
  • - -
  • 定期使用 VACUUM 或 pg_autovacuum
  • -
  • 進行大量資料更改時先刪除索引(然後重建索引)
  • -
-
- -
伺服器的配置
-
- - 配置文件 postgres.conf 中的很多設置都會影響性能,所有參數的列表可見: -
-
管理員指南/資料庫伺服器運行環境/資料庫伺服器運行配置, - 有關參數的解釋可見:http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html 和 - http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html。 - - -
硬體的選擇
- -
- 電腦硬體對性能的影響可瀏覽 - http://candle.pha.pa.us/main/writings/pgsql/hw_performance/index.html 和 - http://www.powerpostgresql.com/PerfList/。 -
- -
- - -

3.4)PostgreSQL 裡可以獲得什麼樣的調試特性?

- - -

PostgreSQL 有很多類似 log_* 的伺服器配置變量可用於查詢的列印和進程統計,而這些工作對調試和性能測試很有幫助。 -

- - - -

3.5) 為什麼在試圖連接時收到「Sorry, too many clients(已有太多用戶連接)」消息?

-

- 這表示你已達到預設 100 個並發(同作)後台進程數的限制,你需要通過修改 postgresql.conf 文件中的 max_connections 值來 - 增加 postmaster 的後台併發處理數,修改後需重新啟動 postmaster。 - -

- - -

3.6)PostgreSQL 的升級過程有哪些內容 ?

-

- PostgreSQL 開發組對每次小版本的升級主要只做了一些 Bug 修正工作,因此從 7.4.8 升級到 7.4.9 不需要 dump 和 restore,僅需要停止資料庫伺服器,安裝更新後的軟體包,然後重啟伺服器即可。 -

-

- -所有PostgreSQL的用戶應該在最接近(你所使用的主版本)的小改進版本發佈盡快升級。儘管每次升級可能都有一點風險,PostgreSQL的小改 -進版僅僅是設計用來修正一些 Bug 的,程式碼改動較少,所以風險還是很小的。PostgreSQL社區認為一般情況下不升級的風險還是多於升級的。 -

-

- 主版本的升級(例如從 7.3 到 7.4)通常會修改系統表和資料表的內部格式。 - 這些改變一般比較複雜,因此我們不維持資料文件的向後兼容性。因此從老版本中進行資料導出(dump)/然後在新版本中進行資料導入(reload)對主版本的升級是必須的。 - -

- -

3.7)(使用 PostgreSQL )我需要使用什麼電腦硬體 ?

-

- 由於電腦硬體大多數是相容的,人們總是傾向於相信所有電腦硬體質量也是相同的。事實上不是, - ECC RAM(帶奇偶校驗的記憶體),SCSI (硬碟)和優質的主機板比一些便宜貨要更加可靠且具有更好的性能。 PostgreSQL 幾乎可以運行在任何硬體上, - 但如果可靠性和性能對你的系統很重要,你就需要全面的研究一下你的硬體組態了。在我們的郵件列表上也有關於 - 硬體配置和性價比的討論。 -

- - -
- -

操作問題

- - - -

4.1) 如何只選擇一個查詢結果的頭幾行?或是隨機的一行?

-

- 如果你只是要提取幾行資料,並且你在執行查詢中知道確切的行數,你可以使用 LIMIT 功能。 - 如果有一個索引與 ORDER BY 中的條件匹配,PostgreSQL 可能就只處理要求的頭幾條記錄, - (否則將對整個查詢進行處理直到生成需要的行)。如果在執行查詢功能時不知道確切的記錄數, - 可使用游標(cursor)和FETCH功能。 -

-

- 可使用以下方法提取一行隨機記錄的: -

-
       SELECT  cols
-      FROM tab
-      ORDER BY random()
-      LIMIT 1 ;
-
-
- - - -

4.2) 如何查看表、索引、資料庫以及用戶的定義?如何查看psql裡用到的查詢指令並顯示它們?

-

- 在psql中使用 \dt 命令來顯示資料表的定義,要瞭解 psql 中的完整命令列表可使用 \? ,另外,你也可以閱讀 psql 的源代碼 - 文件 pgsql/src/bin/psql/describe.c,它包括為生成 psql 反斜槓命令的輸出的所有 SQL 命令。你還可以帶 -E 選項啟動 psql, - 這樣它將列印出你在 psql 中所給出的命令執行時的內部實際使用的 SQL 查詢語句。PostgreSQL也提供了一個兼容 SQL的 INFORMATION SCHEMA 接口, - 你可以從這裡獲取關於資料庫的資訊。 - -

-

- 在系統中也有一些以 pg_ 打頭的系統表也描述了表的定義。 -

-

- 使用 psql -l 指令可以列出所有的資料庫。 -

-

- 也可以瀏覽一下 pgsql/src/tutorial/syscat.source 文件,它列舉了很多可從資料庫系統表中獲取資訊的SELECT語法。 - -

- - -

4.3) 如何更改一個欄位的資料類型?

-

- 在8.0版本裡更改一個欄位的資料類型很容易,可使用 ALTER TABLE ALTER COLUMN TYPE 。 -

-

- 在以前的版本中,可以這樣做: -

-
    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;
-
-
-

- 你然後可以使用 VACUUM FULL tab 指令來使系統收回無效資料所佔用的空間。 -

- -

4.4) 單條記錄,單個表,單個資料庫的最大限制是多少?

-

- 下面是一些限制: -

-
- - - - - - - - - - - - - - - - -
單個資料庫最大尺寸?無限制(已存在有 32TB 的資料庫)
單個表的最大尺寸?32 TB
一行記錄的最大尺寸?1.6 TB
一個欄位的最大尺寸?1 GB
一個表裡最大列數?無限制
一個表裡最大欄位數?250-1600 (與列類型有關)
一個表裡的最大索引數量?無限制
-
- - -

- 當然,實際上沒有真正的無限制,還是要受可用磁盤空間、可用記憶體/交換區的制約。 - 事實上,當上述這些數值變得異常地大時,系統性能也會受很大影響。 -

- -

- 單表的最大大小 32 TB 不需要作業系統對單個文件也需這麼大的支持。大表用多個 1 GB 的文件存儲,因此文件系統大小的限制是不重要的。 -

-

- 如果預設的塊大小增長到 32K ,最大的單表大小和最大列數還可以增加到四倍。 -

-

- 有一個限制就是不能對大小多於2000字節的列創建索引。幸運地是這樣的索引很少用到。通過對多字節列的內容進行MD5哈稀運算結果進行函數索引可對列的唯一性得到保證, - 並且全文檢索允許對列中的單詞進行搜索。 -

- - -

4.5) 存儲一個典型的文本文件裡的資料需要多少磁盤空間?

-

- 一個 Postgres 資料庫(存儲一個文本文件)所佔用的空間最多可能需要相當於這個文本文件自身大小5倍的磁盤空間。 -

-

- 例如,假設有一個 100,000 行的文件,每行有一個整數和一個文本描述。 - 假設文本串的平均長度為20位元組(Byte)。文本文件佔用 2.8 MB。存放這些資料的PostgreSQL資料庫文件大約是 5.2 MB: -

-
     24 字元組: 每行的頭(大約值)
-     24 字元組節: 一個整數型欄位和一個文本型欄位
-   +  4 字元組節: 頁面內指向元組的指針
-   ----------------------------------------
-     52 字元組每行
-
-   PostgreSQL 資料頁的大小是 8192 位元組 (8 KB),則:
-
-   8192 字元組每頁
-   -------------------   =  158 行/資料頁(向下取整)
-     52 字元組每行
-
-   100000 資料行
-   --------------------  =  633 資料頁(向上取整)
-      146 行/資料頁
-
-   633 資料頁 * 8192 字節/頁  = 5,185,536 字節(5.2 MB)
-
- - -

- 索引不需要這麼多的額外消耗,但也確實包括被索引的資料,因此它們也可能很大。 -

-

- 空值 NULL 存放在位圖中,因此佔用很少的空間。 -

- -

4.6) 為什麼我的查詢很慢?為什麼這些查詢沒有利用索引?

-

- 並非每個查詢都會自動使用索引。只有在表的大小超過一個最小值,並且查詢只會選中表中較小比例的記錄時才會採用索引。 - 這是因為索引掃瞄引起的隨即磁盤存取可能比直接地讀取表(順序掃瞄)更慢。 - -

-

- 為了判斷是否使用索引,PostgreSQL 必須獲得有關表的統計值。這些統計值可以使用 VACUUM ANALYZE,或 ANALYZE 獲得。 - 使用統計值,優化器知道表中有多少行,就能夠更好地判斷是否利用索引。 - 統計值對確定優化的連接順序和連接方法也很有用。在表的內容發生變化時,應定期進行統計值的更新收集。 -

-

- 索引通常不用於 ORDER BY 或執行連接。對一個大表的一次順序掃瞄再做一次排序通常比索引掃瞄要快。然而,如果將 LIMIT 和 ORDER BY - 結合在一起使用的話,通常將會使用索引,因為這時僅返回表中的一小部分記錄。 -

-

- 如果你確信PostgreSQL的優化器使用順序掃瞄是不正確的,你可以使用SET enable_seqscan TO 'off'指令來關閉順序掃瞄, - 然後再次運行查詢,你就可以看出使用一個索引掃瞄是否確實要快一些。 -

- -

- - 當使用通配符操作,例如 LIKE 或 ~ 時,索引只能在特定的情況下使用: -

- -

- 在 8.0 之前的版本中,除非要查詢的資料類型和索引的資料類型相匹配,否則索引經常是未被用到,特別是對 int2, int8 和數值型的索引。 -

- -

4.7) 我如何才能看到查詢優化器是怎樣評估處理我的查詢?

- - -

參考 EXPLAIN 手冊頁。

- -

4.8) 我怎樣做正則表達式搜索和大小寫無關的正則表達式查找?怎樣利用索引進行大小寫無關查找?

-

- 操作符 ~ 處理正則表達式匹配,而 ~* 處理大小寫無關的正則表達式匹配。大小寫無關的 LIKE 變種成為 ILIKE。 - -

-

- 大小寫無關的等式比較通常寫做: -

-
    SELECT *
-    FROM tab
-    WHERE lower(col) = 'abc';
-
- -

- 這樣將不會使用標準的索引。但是可以創建一個在這種情況下使用的表達式索引: -

-
    CREATE INDEX tabindex ON tab (lower(col));
-
-
-

- 如果上述索引在創建時加入 UNIQUE 約束,雖然索引欄位自身內容可以存儲大小寫不限的內容,但如果有 UNIQUE 約束後,這些內容不能僅僅是大小寫不同(否則會造成衝突)。為了保證不發生這種情況,可以使用 CHECK 約束條件或是觸發器在錄入時進行限制。 -

- - -

4.9) 在一個查詢裡,我怎樣檢測一個欄位是否為 NULL ?我如何才能準確排序而不論某欄位是否含 NULL 值?

-

- - 用 IS NULL 和 IS NOT NULL 測試這個欄位,具體方法如下: -

-
   SELECT *
-   FROM tab
-   WHERE col IS NULL;
-
- -

為了能對含 NULL 欄位排序,可在 ORDER BY 條件中使用 IS NULL 和 - IS NOT NULL 修飾符,條件為真 true 將比條件為假 false 排在前面,下面的例子就會將含 - NULL 的記錄排在結果的上面部分: - -

-
   SELECT *
-   FROM tab
-   ORDER BY (col IS NOT NULL)
-
- -

4.10) 各種字符類型之間有什麼不同?

-
- - - - - - - - - - - - - - -
類型內部名稱說明
VARCHAR(n)varchar指定了最大長度,變長字符串,不足定義長度的部分不補齊
CHAR(n)bpchar定長字符串,實際資料不足定義長度時,以空格補齊
TEXTtext沒有特別的上限限制(僅受行的最大長度限制)
BYTEAbytea變長字節序列(使用NULL字符也是允許的)
"char"char單個字符
-
- -

- 在系統表和在一些錯誤資訊裡你將看到內部名稱。 -

-

- 上面所列的前四種類型是 "varlena"(變長)類型(也就是說,開頭的四個字節是長度,後面才是資料)。 - 於是實際佔用的空間比聲明的大小要多一些。 - 然而這些類型如定義很長時都可以被壓縮存儲,因此磁盤空間也可能比預想的要少。 - -

-

- VARCHAR(n) 在存儲限制了最大長度的變長字符串是最好的。 - TEXT 適用於存儲最大可達 1G 左右但未定義限制長度的字符串。 -

-

- CHAR(n) 最適合於存儲長度相同的字符串。 CHAR(n)會根據所給定的欄位長度以空格補足(不足的欄位內容), - 而 VARCHAR(n) 只存儲所給定的資料內容。 - BYTEA 用於存儲二進制資料,尤其是包含 NULL 字節的值。這些類型具有差不多的性能。 - -

- - - -

4.11.1) 我怎樣創建一個序列號或是自動遞增的欄位?

-

PostgreSQL 支持 SERIAL 資料類型。(欄位定義為SERIAL後)將自動創建一個序列生成器,例如: -

-
   CREATE TABLE person ( 
-      id   SERIAL, 
-      name TEXT 
-   );
-
-

- 會自動轉換為以下SQL語句: -

- -
   CREATE SEQUENCE person_id_seq;
-   CREATE TABLE person ( 
-      id   INT4 NOT NULL DEFAULT nextval('person_id_seq'),
-      name TEXT
-   );
-
-

- 參考 create_sequence 手冊頁獲取關於序列生成器的更多資訊。 -

- - -

4.11.2) 我如何獲得一個插入的序列號的值?

-

- 一種方法是在插入之前先用函數 nextval() 從序列對象裡檢索出下一個 SERIAL 值,然後再用此值精確地插入。使用 - 4.11.1 裡的例表,可用偽碼這樣描述: - -

-
   new_id = execute("SELECT nextval('person_id_seq')");
-   execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')");
-
-

- 這樣還能在其他查詢中使用存放在 new_id 裡的新值(例如,作為參照 person 表的外鍵)。 - 注意自動創建的 SEQUENCE 對象的名稱將會是 <table>_<serialcolumn>_seq, - 這裡 table 和 serialcolumn 分別是你的表的名稱和你的 SERIAL 欄位的名稱。 -

-

- 類似的,在 SERIAL 對象預設插入後你可以用函數 currval() 檢索剛賦值的 SERIAL 值,例如: - -

-
   execute("INSERT INTO person (name) VALUES ('Blaise Pascal')");
-   new_id = execute("SELECT currval('person_id_seq')");
-
- -

4.11.3) 同時使用 currval() 會導致和其他用戶的衝突情況嗎?

-

- 不會。currval() 返回的是你本次會話進程所賦的值而不是所有用戶的當前值。
- -

- -

4.11.4) 為什麼不在事務異常中止後重用序列號呢?為什麼在序列號欄位的取值中存在間斷呢?

-

- 為了提高併發性,序列號在需要的時候賦予正在運行的事務,並且在事務結束之前不進行鎖定, - 這就會導致異常中止的事務後,序列號會出現間隔。 -

- -

4.12) 什麼是 OID ?什麼是 CTID ?

- - -

PostgreSQL 裡創建的每一行記錄都會獲得一個唯一的 OID,除非在創建表時使用 WITHOUT OIDS 選項。 - OID 創建時會自動生成一個 4位元組的整數,所有 OID 在相應 PostgreSQL 伺服器中均是唯一的。 然而,它在超過 40億時將溢出, - OID 此後會出現重複。PostgreSQL 在它的內部系統表裡使用 OID 在表之間建立聯繫。 -

-

- 在用戶的資料表中,最好是使用 SERIAl 來代替 OID - - 因為 SERIAL 只要保證在單個表中的數值是唯一的就可以了,這樣它溢出的可能性就非常小了, - SERIAL8 可用來保存8字元組的序列數值。 -

- -

- CTID 用於標識帶著資料塊(地址)和(塊內)偏移的特定的物理行。 - CTID 在記錄被更改或重載後發生改變。索引資料使用它們指向物理行。 -

- - - -

4.13) 為什麼我收到錯誤資訊「ERROR: Memory exhausted in AllocSetAlloc()」?

-

- 這很可能是系統的虛擬內存用光了,或者內核對某些資源有較低的限制值。在啟動 postmaster 之前試試下面的命令: -

-
   ulimit -d 262144
-   limit datasize 256m
-
-

- 取決於你用的 shell,上面命令只有一條能成功,但是它將把你的進程資料段限制設得比較高, - 因而也許能讓查詢完成。這條命令應用於當前進程,以及所有在這條命令運行後創建的子進程。 - 如果你是在運行SQL客戶端時因為後台返回了太多的資料而出現問題,請在運行客戶端之前執行上述命令。 - -

- -

4.14) 我如何才能知道所運行的PostgreSQL的版本?

-

- 從 psql 裡,輸入 SELECT version();指令。 -

- -

4.15) 我如何創建一個預設值是當前時間的欄位?

-

- 使用 CURRENT_TIMESTAMP: - -

-
   CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
-
- - -

4.16) 我怎樣進行 outer join (外連接)?

-

PostgreSQL 採用標準的 SQL 語法支持外連接。這裡是兩個例子:

-
   SELECT *
-   FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
-
-

或是

- -
   SELECT *
-   FROM t1 LEFT OUTER JOIN t2 USING (col);
-
-

- 這兩個等價的查詢在 t1.col 和 t2.col 上做連接,並且返回 t1 中所有未連接的行(那些在 t2 中沒有匹配的行)。 - 右[外]連接(RIGHT OUTER JOIN)將返回 t2 中未連接的行。 - 完全外連接(FULL OUTER JOIN)將返回 t1 和 t2 中未連接的行。 - 關鍵字 OUTER 在左[外]連接、右[外]連接和完全[外]連接中是可選的,普通連接被稱為內連接(INNER JOIN)。 -

- - -

4.17) 如何使用涉及多個資料庫的查詢?

-

- 沒有辦法查詢當前資料庫之外的資料庫。 - 因為PostgreSQL要加載與資料庫相關的系統目錄(系統表),因此跨資料庫的查詢如何執行是不定的。 -

- -

- 附加增值模塊 contrib/dblink 允許採用函數調用實現跨庫查詢。當然用戶也可以同時連接到不同的資料庫執行查詢然後在客戶端合併結果。 -

- -

4.18) 如何讓函數返回多行或多列資料?

-

- 在函數中返回資料記錄集的功能是很容易使用的,詳情參見: - http://techdocs.postgresql.org/guides/SetReturningFunctions -

- -

4.19) 為什麼我在使用 PL/PgSQL 函數存取臨時表時會收到錯誤資訊「relation with OID ##### does not exist」?

- -

- PL/PgSQL 會緩存函數的腳本內容,由此帶來的一個不好的副作用是若一個 PL/PgSQL - 函數訪問了一個臨時表,然後該表被刪除並重建了,則再次調用該函數將失敗, - 因為緩存的函數內容仍然指向舊的臨時表。解決的方法是在 PL/PgSQL 中用EXECUTE - 對臨時表進行訪問。這樣會保證查詢在執行前總會被重新解析。 -

- -

4.20) 目前有哪些資料複寫(replication)方案可用?

-

- 「複寫」只是一個術語,有好幾種複寫技術可用,每種都有優點和缺點: -

-

- - 主/從式複寫方式是允許一個主伺服器接受讀/寫的申請,而多個從伺服器只能接受讀/SELECT查詢的申請, - 目前最流行且免費的主/從PostgreSQL複寫方案是 - Slony-I 。 -

-

- 多個主伺服器的複寫方式允許將讀/寫的申請發送給多台的主機,這種方式由於需要在多台伺服器之間同步資料變動 - 可能會帶來較嚴重的性能損失,Pgcluster 是目前這種方案中最好的,並且還可以免費下載。 -

-

- 也有一些商業需付費和基於硬體的資料複寫方案,支持上述各種複寫模型。 -

- - -

4.21) 為何查詢結果顯示的表名或欄名與我的查詢語句中的不同?為何大寫狀態不能保留?

- -

- 最常見的原因是在創建表時對表名或是欄名使用了雙引號( ' ' ),當使用了雙引號後,表名或欄名(稱為標識符)存儲時是區分 -大小寫的, - 這意謂著你在查詢時表名或欄名也應使用雙引號,一些工具軟體,像 pgAdmin 會在發出創建表的指令時自動地在每個標識符上加雙引號。 - 因此,為了標識符的統一,你應該:

-
    -
  • 在創建表時避免將標識符使用雙引號引起來。
  • -
  • 在標識符中只使用小寫字母。
  • - -
  • (為了與已存在的標識符相同)在查詢中使用雙引號將標識符引起來。
  • -
- - - - \ No newline at end of file diff --git a/doc/src/FAQ/FAQ_czech.html b/doc/src/FAQ/FAQ_czech.html deleted file mode 100644 index 39c26974e5..0000000000 --- a/doc/src/FAQ/FAQ_czech.html +++ /dev/null @@ -1,645 +0,0 @@ - - - -PostgreSQL FAQ - - - - - - -

Frequently Asked Questions

-

Často kladené dotazy (FAQ) PostgreSQL -

-

Poslední aktualizace: 29. října 2007 (aktualizováno pro PostgreSQL 8.3) -

-

Současný správce: Bruce Momjian (bruce@momjian.us) -

-

Přeložil: Pavel Stěhule (pavel.stehule@gmail.com) -

-

Nejaktuálnější verzi tohoto dokumentu naleznete na adrese -http://www.postgresql.org/files/documentation/faqs/FAQ.html -

-

Odpovědi na otázky vázané na konkrétní platformy naleznete na -adrese http://www.postgresql.org/docs/faq/. -

-
-

Obecné otázky

-1.1) Co je to PostgreSQL? Jaká je správná výslovnost slova PostgreSQL?
-1.2) Kdo řídí vývoj PostgreSQL?
-1.3) Pod jakou licencí je PostgreSQL?
-1.4) Na kterých platformách lze provozovat PostgreSQL?
-1.5) Kde mohu získat PostgreSQL?
-1.6) Jaká je poslední verze?
-1.7) Kde mohu získat podporu?
-1.8) Jak a kam hlásit chyby?
-1.9) Kde najdu informace o známých chybách nebo nepodporovaných vlastnostech?
-1.10) Jaká je dostupná dokumentace?
-1.11) Jak se mohu naučit SQL?
-1.12) Jak se mohu připojit k týmu vývojářů?
-1.13) Jak je na tom PostgreSQL v porovnání s jinými databázemi?
-1.14) Je PostgreSQL připraven na aktuální zavádění letního času v některých zemích?
-

Dotazy na klientská rozhraní

-2.1) Která rozhraní jsou použitelná pro PostgreSQL?
-2.2) Jaké nástroje lze použít pro PostgreSQL a web?
-2.3) Existuje grafické rozhraní pro PostgreSQL?
-

Administrativní dotazy

-3.1) Jak nainstalovat PostgreSQL jinam než do /usr/local/pgsql?
-3.2) Jak nastavit pravidla pro přístup z jiných stanic?
-3.3) Jak vyladit databázi na vyšší výkon?
-3.4) Jaké mám ladící prostředky?
-3.5) Co znamená "Sorry, too many clients", když se zkouším připojit?
-3.6) Proč je nutný dump a obnovení (load) databáze při upgradu PostgreSQL?
-3.7) Jaký hardware bych měl používat?
-

Provozní dotazy

-4.1) Jak získat pouze první řádek dotazu? Náhodný řádek?
-4.2) Jak získám seznam tabulek, indexů, databází, a definovaných uživatelů. Mohu vidět dotazy, které používá psql pro zobrazení těchto informací?
-4.3) Jak změnit datový typ sloupce?
-4.4) Jaká je maximální velikost řádku, tabulky a databáze?
-4.5) Kolik diskového prostoru je potřeba k uložení dat z normálního textového souboru?
-4.6) Můj dotaz je pomalý a nepoužívá vytvořené indexy. Proč?
-4.7) Jak zjistím, jak se vyhodnocuje můj dotaz?
-4.8) Jak použít case-(in)sensitive regulární výraz? Jak použít index pro case insensitive hledání?
-4.9) Jak v dotazu detekovat, že položka je NULL? Jak bezpečně spojit dva řetězce, pokud mohou obsahovat NULL? Lze třídit podle toho, jestli je položka NULL nebo ne?
-4.10) Jaké jsou rozdíly mezi různými znakovými typy?
-4.11.1) Jak vytvořit serial/auto-increment položku?
-4.11.2) Jak získat hodnotu SERIAL po vložení řádku?
-4.11.3) Nezpůsobí currval() a nextval() problémy ve více uživatelském prostředí?
-4.11.4) Proč není vygenerované číslo použito při přerušení transakce?Proč vznikají díry v číslování prostřednictvím sekvence nebo typu SERIAL?
-4.12) Co to je OID? Co je to CTID?
-4.13) Co znamená chybové hlášení "ERROR: Memory exhausted in AllocSetAlloc()"?
-4.14) Jak zjistím, kterou verzi PostgreSQL používám?
-4.15) Jak vytvořit sloupec, který bude implicitně obsahovat aktuální čas?
-4.16) Jak provést vnější spojení (outer join)?
-4.17) Jak provést dotaz napříč několika databázemi?
-4.18) Může funkce vrátit více řádků nebo sloupců?
-4.19) Co je příčinou chyby "relation with OID xxxxx does not exist"?
-4.20) Jaké jsou možnosti replikace databází?
-4.21) Proč v dotazu nejsou rozpoznány názvy mých tabulek nebo funkcí? Proč jsou velká písmena v názvech automaticky převedena na malá písmena?
-
-

Obecné otázky

-

1.1) Co je to PostgreSQL? Jaká je správná výslovnost slova PostgreSQL?

-

Výslovnost PostgreSQL je Post-Gres-Q-L -, nebo zjednodušeně Postgres -. V řadě jazyků je slovo PostgreSQL obtížně vyslovitelný, proto se v hovoru často používá zjednodušená forma názvu. Pro ty, kteří by si rádi poslechli výslovnost, je k dispozici audiozáznam v MP3 formátu. -

-

PostgreSQL je relační databáze s některými objektovými rysy, která má možnosti tradičních -komerčních databázových systémů s několika rozšířeními, které lze najít v DBMS -systémech příští generace. Používání PostgreSQL není omezené a veškeré zdrojové kódy jsou -volně dostupné. -

-

Za vývojem PostgreSQL je mezinárodní skupina nezávislých vývojářů navzájem komunikujících -prostřednictvím internetu. Tento projekt není řízen žádnou obchodní organizací. Pokud se chcete -přidat k projektu, přečtěte si vývojářské FAQ na adrese http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html . -

-

1.2) Kdo řídí vývoj PostgreSQL?

-

Pokud budete hledat organizaci řídící vývoj PostgreSQL, budete zklamáni. Nic takového -neexistuje. Existují pouze "core" a CVS skupiny uživatelů, ale ty existují více z administrátorských -důvodů než z organizačních. Projekt je směrován komunitou vývojářů a uživatelů, ke které se -kdokoliv může připojit. Jediné co potřebuje, je přihlásit se do elektronické konference. Více ve -vývojářském FAQ. -

-

1.3) Pod jakou licencí je PostgreSQL?

-

PostgreSQL je předmětem následujících autorských práv: -

-

Dílčí Copyright (c) 1996-2009, PostgreSQL Global Development Group
-Dílčí Copyright (c) 1994-6, Regents of the University of California -

-

Uděluje se oprávnění k užití, rozmnožování, provádění úprav a -rozšiřování tohoto softwaru a dokumentace k němu, pro jakékoli účely, -bez licenčního poplatku a bez písemné licenční smlouvy, za podmínky, -že na všech jeho kopiích je uvedeno oznámení o výše uvedených právech, -jakož i obsah tohoto a dvou následujících odstavců. -

-

THE UNIVERSITY OF CALIFORNIA ("KALIFORNSKÁ UNIVERZITA") NENÍ V ŽÁDNÉM -PŘÍPADĚ ODPOVĚDNA ŽÁDNÉ TŘETÍ OSOBĚ ZA PŘÍMOU, NEPŘÍMOU, ZVLÁŠTNÍ, -NAHODILOU NEBO VÝSLEDNOU ŠKODU, VČETNĚ UŠLÉHO ZISKU, ZPŮSOBENOU UŽITÍM -TOHOTO SOFTWARU A DOKUMENTACE K NĚMU, A TO I V PŘÍPADĚ, ŽE THE -UNIVERSITY OF CALIFORNIA BYLA INFORMOVÁNA O MOŽNOSTI VZNIKU TAKOVÉ -ŠKODY. -

-

THE UNIVERSITY OF CALIFORNIA ZEJMÉNA NEPOSKYTUJE JAKÉKOLI ZÁRUKY, A TO -NEJEN ZÁRUKY OBCHODOVATELNOSTI A VHODNOSTI TOHOTO VÝROBKU KE -SPECIFICKÝM ÚČELŮM. NÍŽE UVEDENÝ SOFTWARE JE POSKYTNUT "JAK STOJÍ A -LEŽÍ" A THE UNIVERSITY OF CALIFORNIA NENÍ POVINNA ZAJISTIT JEHO -ÚDRŽBU, PODPORU, AKTUALIZACI, VYLEPŠENÍ NEBO MODIFIKACI. -

-

Výše uvedené je BSD licence, běžná licence otevřeného zdroje. Není zde -žádné omezení ohledně užití kódu zdroje. Jsme s tím spokojeni a nemáme -v úmyslu na této skutečnosti cokoli měnit. -

-

1.4) Na kterých platformách lze provozovat PostgreSQL?

-

Stručně řečeno, PostgreSQL běží na všech moderních unixových systémech. Seznam těch, u kterých proběhlo testování, naleznete v instalačních instrukcích. -

-

PostreSQL také běží nativně na všech Microsof Windows systémech odvozených z Microsoft Windows NT jako jsou Windows 2000SP4, WindowsXP a Windows2003. Instalační balíček naleznete na adrese http://pgfoundry.org/projects/pginstaller. Na starších systémech s ještě MS-DOS jádrem lze spustit PostgreSQL s emulačním programem Cygwin. -

-

Dále existuje port pro Novell Netware 6 port na adrese http://forge.novell.com, a pro OS/2 verze (eComStation) na adrese http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2F . -

-

1.5) Kde mohu získat PostgreSQL?

-

Pomocí webového klienta z adresy http://www.postgresql.org/ftp/ nebo klienta ftp z adresy ftp://ftp.postgresql.org/pub/. -

-

1.6) Jaká je poslední verze?

-

Nejnovější verzí PostgreSQL je verze 8.2.5 -

-

V plánu je uvolňovat každoročně jednu velkou verzi a každých několik měsíců malé verze. -

-

1.7) Kde mohu získat podporu?

-

Nejčastější forma podpory uživatelům PostgreSQL komunitou je prostřednictvím e-mailů. Na našem webovém serveru naleznete odkaz na stránky,kde se můžete přihlásit do elektronické konference. Pro začátek jsou doporučené konference general nebo bugs. -

-

Další cestou je IRC kanál #postgresql na Freenode (irc.freenode.net). K připojení použijte Unixový příkaz irc -x '#postgresql' "$USER" irc.freenode.net nebo jakékoholiv jiného IRC klienta. V této síti existuje ještě španělská (#postgresql-es) a francouzská (#postgresqlfr) verze. Další PostgreSQL kanál naleznete na EFNet. -

-

Seznam společností poskytující komerční podporu naleznete na adrese http://techdocs.postgresql.org/companies.php. -

-

1.8) Jak a kam hlásit chyby?

-

Vyplňte formulář na adrese http://www.postgresql.org/support/submitbug. Na našem ftp serveru ftp://ftp.postgresql.org/pub/ si ověřte, že používáte aktuální verzi PostreSQL. -

-

Chyby reportované prostřednictvím chybového formuláře nebo zasláním mailu do PostgreSQL konference obvykle generuje následující odezvu: -

-
  • Nejedná se o chybu, a proč -
  • -
  • Jedná se o známou chybu, která je již v seznamu úkolů TODO -
  • -
  • Tato chyba byla opravena v aktuální verzi -
  • -
  • Tato chyba byla již opravena ve verzi, která zatím nebyla oficiálně uvolněna -
  • -
  • Požadavek na další doplňující informace: -
    • Operační systém -
    • -
    • Verze PostgreSQL -
    • -
    • Test reprodukující chybu -
    • -
    • Ladící informace -
    • -
    • Backtrace výstup debuggeru -
    • -
    -
  • -
  • Jedná se o zatím nezjiÅ¡těnou chybu, pak můžete čekat -
    • Záplatu odstraňující chybu, která bude vložena do další velké nebo malé verze -
    • -
    • Informaci, že se jedná o chybu, kterou nelze okamžitě řeÅ¡it a je proto přidána do TODO -
    • -
    -
  • -
-

1.9) Kde najdu informace o známých chybách nebo nepodporovaných vlastnostech?

-

PostgreSQL podporuje rozšířenou podmnožinu SQL:2003. V našem TODO naleznete seznam známých chyb, chybějících vlastností, a plány do budoucna. -

-

Odezva na požadavek na novou vlastnost PostgreSQL je obvykle: -

-
  • Požadavek je již v TODO -
  • -
  • Požadovaná funkce není chtěná protože -
    • Duplikuje již existující funkci, která respektuje SQL standard -
    • -
    • Implementací funkce by se příliÅ¡ zkomplikoval kód bez relevantního přínosu -
    • -
    • Funkce by mohla být nebezpečná nebo nespolehlivá -
    • -
    -
  • -
  • Požadavek je přidán do TODO -
  • -
-

PostgreSQL nepožívá systém pro sledování chyb, protože jsme zjistili, že je efektivnější přímo reagovat na maily a udržovat aktuální TODO. V praxi je snaha o co nejrychlejší řešení chyb, a chyby, které by se mohly projevit u mnoha uživatelů jsou opravovány velice rychle. Jediné místo, kde lze dohledat všechny změny, rozšíření a opravy v PostgreSQL je CVS log. Poznámky k verzi "Release notes" nezachycují všechny změny, k němž došlo. -

-

1.10) Jaká je dostupná dokumentace?

-

PostgreSQL obsahuje vynikající dokumentaci zahrnující manuál, manuálové stránky a testovací příklady. Podívejte se do adresáře /doc. Manuál je přístupný online na http://www.postgresql.org/docs. -

-

K dispozici jsou zdarma dvě online knihy na adresách http://www.postgresql.org/docs/books/awbook.html a http://www.commandprompt.com/ppbook/. Další literaturu lze zakoupit. Nejpopulárnější je od Kerryho Douglase. Seznam dostupné literatury je na http://techdocs.postgresql.org/techdocs/bookreviews.php. Ještě je kolekce technicky orientovaných článků tematicky spojených s PostgreSQL na adrese http://techdocs.postgresql.org/. -

-

Řádkový klient psql má \d příkazy pro zobrazení informací o typech, operátorech, funkcích, agregačních funkcí, atd. Použijte \? pro zobrazení dostupných příkazů. -

-

Další dokumentaci najdete na našem webu. -

-

1.11) Jak se mohu naučit SQL?

-

Podívejte se do výše uvedené dokumentace. Další online knihou je "Teach Yourself SQL in 21 Days, Second Edition" na adrese http://members.tripod.com/er4ebus/sql/index.htm. Mnoho našich uživatelů doporučuje knihu The Practical SQL Handbook, Bowman, Judith S., et al., Addison-Wesley. Další The Complete Reference SQL, Groff et al., McGraw-Hill. -

-

Další online tutoriály jsou dostupné na adresách: -

- -

1.12) Jak se mohu připojit k týmu vývojářů?

-

Prostudujte si Developer's FAQ. -

-

1.13) Jak je na tom PostgreSQL v porovnání s jinými databázemi?

-

Software můžeme porovnávat z několika různých pohledů: vlastnosti, výkon, spolehlivost, podpora a cena. -

- -

Vlastnosti

-

PostgreSQL nabízí většinu funkcí funkcionality velkých komerčních DBMS systémů jako jsou: transakce, vnořené dotazy, spouště, referenční integrita a sofistikovaný systém zamykání. Poskytujeme určité funkce, které ostatní systémy běžně nepodporují. Např. uživatelem definované typy, dědičnost, pravidla (rules), a MVCC architekturu. -

-

Výkon

-

Výkon PostgreSQL je srovnatelný s ostatními komerčními nebo Open Source databázemi. V některých případech je rychlejší, jindy pomalejší. Náš výkon je obvykle +/-10% vůči ostatním databázím. -

-

Spolehlivost

-

Uvědomujeme si, že databáze musí být stoprocentně spolehlivá, jinak je nepoužitelná. Snažíme se, aby každá verze byla dobře otestována a obsahovala minimum chyb. Každá verze je minimálně několik měsíců v beta testovacím režimu. Do produkčního režimu se dostane, až když nedochází k dalším změnám nebo opravám. Věříme, že jsem více než srovnatelní s ostatními databázemi v této oblasti. -

-

Podpora

-

Na našich internetových konferencích se setkává velká skupina vývojářů a uživatelů při řešení vyskytujících se problémů. -Naše internetové konference umožňují kontakt velké skupiny vývojářů a uživatelů. Nemůžeme garantovat opravu chyby, ale komerční DBMSs také vždy negarantují řešení problémů. Věříme ale, že díky přímému kontaktu na vývojáře, naši uživatelskou komunitu, manuálům, a dostupným zdrojovým kódům máme lepší podporu než ostatní DBMSs. Pro ty, kteří preferují komerční "per-incident" podporu, existuje společností, kteří ji nabízejí (FAQ sekce 1.7.) -

-

Cena

-

PostgreSQL lze používat bezplatně (a to i pro komerční použití). Také můžete neomezeně používat náš kód ve svých produktech s výjimkami specifikovanými v naší licenci (přebíráme BSD licenci). -

-

1.14) Je PostgreSQL připraven na aktuální zavádění letního času v některých zemích?

-

Počínaje verzí 8.0.[4+] podporuje PostgreSQL letní čas také pro USA. Podpora letního času (daylight saving time) pro Kanadu a Západní Austrálii je obsažena ve verzích 8.0.[10+] a 8.1.[6+] a všech následujících verzích. Starší verze používaly systémovou databázi časových zón obsahující, kromě jiného, informaci o tom, zda se pro danou časovou zónu rozlišuje mezi letním a zimním časem. -

-
-

Dotazy na klientská rozhraní

-

2.1) Která rozhraní jsou použitelná pro PostgreSQL?

-

PostgreSQL se distribuuje pouze s rozhraním pro jazyk C a embedded C. Všechna další rozhraní představují nezávislé projekty, které je třeba stáhnout z internetu samostatně. Osamostatnění těchto projektů umožňuje nezávislost vývojových týmů a možnost vydávat nové verze bez ohledu na vydání nové verze PostgreSQL. -

-

Některé programovací jazyky jako je např. PHP obsahují rozhraní pro PostgreSQL. Rozhraní pro jazyky jako je Perl, Tcl, Python a mnoho dalších jsou dostupné na adrese: http://gborg.postgresql.org v sekci Drivers/Interfaces. -

-

2.2) Jaké nástroje lze použít pro PostgreSQL a web?

-

Dobrým úvodem do problematiky databází v prostředí webových stránek může být web http://www.webreview.com. -

-

PHP (http://www.php.net) je vynikajícím rozhraním pro tvorbu webů. -

-

Pro složitější úlohy se často používá Perl a jeho BDB:Pg rozhraní s podporou CGI - CGI.pm nebo mod_perl(u). -

-

2.3) Existuje grafické rozhraní pro PostgreSQL?

-

K dispozici je řada grafických nástrojů podporujících PostgreSQL a to od komerčních nebo open source vývojářů. Podrobný seznam naleznete na adrese -http://www.postgresql.org/docs/techdocs.54. -

-
-

Administrativní dotazy

-

3.1) Jak nainstalovat PostgreSQL jinam než do /usr/local/pgsql?

-

Při spouštění configure nastavte parametr --prefix -

-

3.2) Jak nastavit pravidla pro přístup z jiných stanic?

-

Ve výchozí konfiguraci, PostgreSQL umožňuje pouze připojení z lokálního uživatele prostřednictvím Unix domain sockets nebo TCP/IP spojení. Bez modifikace listen_addresses v souboru postgresql.conf, a povolení adresy v souboru $PGDATA/pg_hba.conf se nelze připojit k PostgreSQL z ostatních stanic. Změna výše zmíněných parametrů vyžaduje restart databázového serveru. -

-

3.3) Jak vyladit databázi na vyšší výkon?

-

Výkon systému můžete ovlivnit ve třech oblastech: -

-

Změny dotazu

-
  • Použitím indexů včetně částečných a funkcionálních -
  • -
  • Použitím COPY místo opakovaných INSERTů -
  • -
  • Sloučením mnoha SQL příkazů do jedné transakce snížením režie na commit -
  • -
  • Používáním CLUSTERU, pokud načítáte větší počet řádek podle indexu -
  • -
  • Použitím klauzule LIMIT v poddotazech -
  • -
  • Použitím předpřipravených dotazů -
  • -
  • Používáním ANALYZE. Tento příkaz aktualizuje statistiky, které se používají při optimalizaci dotazu -
  • -
  • Pravidelné použití VACUUM nebo používání pg_autovacuum -
  • -
  • Odstraněním indexů před rozsáhlými změnami v datech -
  • -
-

Konfigurace serveru

-

Určité parametry v souboru postgresql.conf mají vliv na výkon serveru. Detaily naleznete v příručce Administrátora v Server Run-time Environment/Run-time Configuration. Další komentáře naleznete v http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html a http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html. -

-

Výběr hardware

-

Vliv hardware na výkon serveru je popsán v dokumentech http://candle.pha.pa.us/main/writings/pgsql/hw_performance/index.html a http://www.powerpostgresql.com/PerfList/. -

-

3.4) Jaké mám ladící prostředky?

-

Nastavením log_* proměnných v konfiguraci serveru si vynutíte logování dotazů a procesních statistik, které Vám mohou pomoci při ladění a optimalizaci výkonu. -

-

3.5) Co znamená "Sorry, too many clients", když se zkouším připojit?

-

Překročil jste výchozí limit, který je 100 současně připojených uživatelů. V konfiguraci serveru v postgresql.conf tuto hodnotu můžete zvětšit změnou hodnoty max_connection. Nezapomeňte restartovat server. -

-

3.6) Proč je nutný dump a obnovení (load) databáze při upgradu PostgreSQL?

-

Způsob číslování je popsán v dokumentaci na http://www.postgresql.org/support/versioning. Instrukce k provedení migrace na vyšší verzi jsou taktéž v dokumentaci na adrese http://www.postgresql.org/docs/current/static/install-upgrading.html. -

-

3.7) Jaký hardware bych měl používat?

-

Jelikož PC jsou většinou kompatibilní, lidé mají tendence věřit, že všechna PC jsou stejně kvalitní. Což není pravda. Paměti ECC, SCSI a kvalitní základní desky jsou mnohem spolehlivější a výkonnější než lacinější hardware. PostgreSQL poběží na většině hardwaru, nicméně pokud je pro Vás spolehlivost a výkon systému důležitá, je dobré věnovat čas nalezení vhodné hardwarové konfigurace. Na našich elektronických konferencích můžete diskutovat o vhodných konfiguracích a značkách. -

-
-

Provozní dotazy

-

4.1) Jak získat pouze první řádek dotazu? Náhodný řádek?

-

Pokud potřebujete pouze několik řádků a pokud víte kolik, použijte -SELECT LIMIT. Pokud bude možné použít index shodující se s ORDER BY, -je možné, že se nebude provádět celý dotaz. Pokud neznáte počet záznamů, -použijte kurzor a příkaz FETCH. -

-

Pro výběr náhodného řádku použijte příkaz ve tvaru: -

-
-SELECT col
-FROM tab
-ORDER BY random()
-LIMIT 1;
-
-

4.2) Jak získám seznam tabulek, indexů, databází, a definovaných uživatelů. Mohu vidět dotazy, které používá psql pro zobrazení těchto informací?

-

V psql příkazem \dt získáte seznam tabulek. Úplný seznam příkazů psql získáte příkazem \?. Alternativně si můžete prostudovat zdrojový kód psql - soubor pgsql/src/bin/psql/describe.c, který obsahuje SQL příkazy, které jsou generovány pro získání výstupu psql "backslash" příkazů. Také můžete nastartovat psql s parametrem -E, který způsobí zobrazení všech SQL příkazů, které se odesílají na server. PostgreSQL také podporuje SQL standard INFORMAČNÍ SCHÉMATA (standardní systémové tabulky). Klasickým dotazem do systémových tabulek získáte požadované informace o struktuře databáze. -

-

Systémové tabulky PostgreSQL (mimo rámec SQL standardů) používají prefix pg_. Pro zjištění struktury databáze je můžete použít také, i když preferovány jsou dotazy do informačního schématu. -

-

Seznam všech databází získáte příkazem psql -l -

-

Další inspiraci najdete v souboru pgsql/src/tutorial/syscat.source. Obsahuje ilustrační SELECTy potřebné k získání informací z systémových tabulek databáze. -

-

4.3) Jak změnit datový typ sloupce?

-

Ve verzích 8.0 a pozdějších jednoduše: -

-
-ALTER TABLE ALTER COLUMN TYPE
-

V starších verzích: -

-
-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;
-

Po změně spusťte příkaz VACUUM FULL, aby došlo k uvolnění diskového prostoru použitého v tu chvíli již neplatnými záznamy. -

-

4.4) Jaká je maximální velikost řádku, tabulky a databáze?

-

PostgreSQL má tato omezení: -

- - - - - - - - -
Maximální velikost databáze: neomezena (existují 32TB db) -
Maximální velikost tabulky: 32 TB -
Maximální velikost řádky: 480GB -
Maximální velikost položky 1 GB -
Maximální počet řádků v tabulce: neomezeno -
Maximální počet sloupců v tabulce: 250-1600 podle typů -
Maximální počet indexů na tabulce: neomezeno -
-

Ve skutečnosti nic není neomezeno, limitem bývá vždy dostupná disková -paměť nebo velikost operační paměti. Pokud máte některou z těchto -hodnot neobvykle velkou, může dojít ke snížení výkonu. -

-

Maximální velikost tabulky je 32 TB a nevyžaduje podporu velkých -souborů operačním systémem. Velké tabulky se ukládají do několika 1 GB -souborů takže limity souborového systému nejsou podstatné. -

-

Maximální velikost tabulky a maximální počet sloupců můžeme -zečtyřnásobit nastavením velikosti bloku na 32K. -

-

Indexy jsou povolené pouze na sloupcích jejichž délka je menší než 2000 znaků. Pokud tuto délku překročíme a index potřebujeme pro zajištění jednoznačnosti, je vhodnější použít funkcionální index nad MD5 funkcí nebo fulltextový index. -

-

4.5) Kolik diskového prostoru je potřeba k uložení dat z normálního textového souboru?

-

PostgreSQL vyžaduje až pětinásobek diskového prostoru k uložení dat z -textového souboru. -

-

Například, uvažujme soubor se 100 tisíci řádky obsahující na každé -řádce celé číslo a textový popis. Text je v průměrně dvacet bytů -dlouhý. Textový soubor bude 2.8 MB dlouhý. Velikost databáze -obsahující odpovídající data bude zhruba 5.2 MB. -

-
-    24 bytů: hlavička řádku (přibližně)
-    24 bytů: jedna celočíselná položka a jedna textová
-   + 4 byty: ukazatel na stránku k entici
-   ------------------------------------------------------
-    52 bytů na řádek
-

Velikost datové stránky PostgreSQL je 8192 bytů (8KB) -

-
- 8192 bytů na stránce
----------------------- = 158 řádek na stránku
-  52 bytů za řádek
-
-100000 řádek
------------------------ = 633 stránek (zaokrouhleno nahoru)
-   158 řádek na stránce
-
-633 datových stránek * 8192 bytů na každou stránku = 5,185,536 bytů (5.2 MB)
-

Indexy nemají tak velkou režii, ale mohou být také velké, protože -obsahují indexovaná data. -

-

Hodnoty NULL jsou uloženy v bitmapách, takže zabírají jen velmi málo -diskového prostoru. -

-

4.6) Můj dotaz je pomalý a nepoužívá vytvořené indexy. Proč?

-

Každý dotaz nemusí nutně použít existující indexy. Index se použije -tehdy, když je tabulka větší než určitá minimální velikost, a dotaz -vybírá pouze procentuálně malou část řádků tabulky. To proto, že -náhodný přístup k disku daný čtením indexu může být pomalejší než -lineární čtení tabulky nebo sekvenční čtení. -

-

PostgreSQL rozhoduje o použití indexů na základě statistiky přístupů k -tabulce. Tyto statistiky se shromažďují příkazy VACUUM ANALYZE nebo -ANALYZE. Díky statistikám má optimizer informaci o počtu řádek v -tabulce a může lépe rozhodnout o použití indexů. Statistiky se uplatní -při určení optimálního pořadí a metody spojení tabulek. Statistiky by -se měli aktualizovat opakovaně, tak jak se mění obsah tabulek. -

-

Indexy nejsou obyčejně použity pro setřídění nebo spojení tabulek. -Sekvenční zpracování následované explicitním tříděním je obyčejně -rychlejší než použití indexu na velké tabulce. -

-

Jinak je tomu v případě použití LIMIT a ORDER BY, při kterém se -většinou index použije, jelikož je výsledkem pouze malá část tabulky. -

-

Pokud si myslíte, že optimizer mylně zvolil sekvenční prohledávání -tabulky, použijte příkaz SET enable_seqscan TO 'off' a zkuste zda je -prohledávání s indexem rychlejší. -

-

Při vyhledávání na základě vzoru jako je např. operátor LIKE nebo ~ se -indexy použijí pouze za určitých skutečností: -

-
  • začátek hledaného vzoru musí být ukotven k začátku, tj. -
    • vzor LIKE nesmí začínat % -
    • -
    • ~ regulární výraz musí začínat ^ -
    • -
    -
  • -
  • vzor nesmí začínat intervalem, např. [a-e] -
  • -
  • vyhledávaní, které není Case sensitiv jako je ILIKE nebo ~* nepoužívá indexy. Můžete ale použít funkcionální indexy, které jsou popsány v sekci 4.8 -
  • -
  • při inicializaci databáze (initdb) musí být použito C locale nebo vytvořte speciální text_pattern_index, který umožní, při respektování zmíněných podmínek použití indexu operací LIKE. Pro vyhledávání celých slov je možné a výhodné použít fulltext. -
  • -
-

4.7) Jak zjistím, jak se vyhodnocuje můj dotaz?

-

Podívejte se do nápovědy k příkazu EXPLAIN. -

-

4.8) Jak použít case-(in)sensitive regulární výraz? Jak použít index pro case insensitive hledání?

-

Vyhledávání prostřednictvím regulárních vzorů zajišťuje operátor ~, který je case-sensitive. Jeho case-insensitive varianta je operátor ~*. Case-insensitive variací operátoru LIKE je operátor ILIKE. -

-

Case-insensitive vyhledání se řeší: -

-
-SELECT *
-FROM tab
-WHERE lower(col) = 'abc';
-

Tento dotaz nepoužije standardní index. Musíte použít tzv. funkcionální index: -

-
-CREATE INDEX tabindex ON tab (lower(col));
-

Pokud index vytvoříme jako unikátní, tak můžeme ukládat řetězce obsahující malá i velká písmena, ale nikoliv řetězce, které se od sebe odlišují jen v malých a velkých písmenech. K zajištění zápisu řetězce obsahující pouze malá nebo pouze velká písmena použijte CHECK kontroly nebo triggery. -

-

4.9) Jak v dotazu detekovat, že položka je NULL? Jak bezpečně spojit dva řetězce, pokud mohou obsahovat NULL? Lze třídit podle toho, jestli je položka NULL nebo ne?

-

Pokud chcete testovat hodnotu NULL použijte operátor IS: -

-
-   SELECT *
-   FROM tab
-   WHERE col IS NULL;
-

K spojení řetězců, které mohou obsahovat hodnotu NULL, používejte funkci COALESCE(), např.: -

-
-   SELECT COALESCE(col1, '') || COALESCE(col2, '')
-   FROM tab
-

Pokud chcete třídit podle hodnoty NULL, použijte výraz IS NULL nebo IS NOT NULL v klauzuli ORDER. Hodnota pravda má přednost před hodnotou false a tedy pokud použijete: -

-
-   SELECT *
-   FROM tab
-   ORDER BY (col IS NOT NULL)
-

tak záznamy s NULL budou na začátku setříděných dat. -

-

4.10) Jaké jsou rozdíly mezi různými znakovými typy?

- - - - - - - -
Typ Interní název Poznámky -
VARCHAR(n) varchar n určuje maximální délku -
CHAR(n) bpchar řetězec je do dané délky rozšířen mezerami -
TEXT text bez omezení délky -
BYTEA bytea pole bytů nespecifikované délky -
"char" char jeden znak -
-

Na interní názvy můžete narazit v systémovém katalogu nebo v některých chybových hlášeních. -

-

Čtyři první typy jsou tzv. varlena typy (první čtyři byty na disku jsou obsahují délku, ostatní obsahují vlastní data). Skutečně obsazený prostor je tedy o něco málo větší než deklarovaná velikost. Na druhou stranu, delší řetězce jsou komprimovány, takže obsazený prostor na disku může být menší než se čeká. -

-

VARCHAR(n) je vhodný pro ukládání různě dlouhých řetězců u kterých známe délkové omezení, TEXT pro řetězce bez omezení délky (maximum je jeden gigabyte). -

-

CHAR(n) se používá pro uložení stejně dlouhých řetězců. CHAR(n) doplní mezerami na specifikovanou délku, VARCHAR(n) hodnoty se ukládají tak jak jsou. BYTEA je pro ukládání binárních dat - non ASCII hodnot. Všechny zmíněné typy mají podobné výkonové charakteristiky. -

-

4.11.1) Jak vytvořit serial/auto-increment položku?

-

V PostgreSQL můžete použít datový typ SERIAL. Jeho použitím se automaticky vytvoří sekvence. -Například: -

-
-CREATE TABLE person (
-  id   SERIAL,
-  name TEXT
-);
-

je automaticky transformováno na: -

-
-CREATE SEQUENCE person_id_seq;
-CREATE TABLE person (
-  id   INT4 NOT NULL DEFAULT nextval('person_id_seq'),
-  name TEXT
-);
-

Podrobnější informace najdete v manuálu v popisu příkazu create_sequence. -

-

4.11.2) Jak získat hodnotu SERIAL po vložení řádku?

-

Nejjednodušším způsob, jak získat vygenerovanou hodnotu typu SERIAL, je využít klauzuli RETURNING. Pro tabulku z 4.11.1 vypadá takto: -

-
-INSERT INTO person (name) VALUES ('Blaise Pascal') RETURNING id;
-

Také můžete použít funkci nextvall() a její výsledek použít v příkazu INSERT, nebo zavolat currval() po provedení příkazu INSERT. -

-

4.11.3) Nezpůsobí currval() a nextval() problémy ve více uživatelském prostředí?

-

Ne, currval vrací vždy hodnotu, která byla vygenerována pro vás. -

-

4.11.4) Proč není vygenerované číslo použito při přerušení transakce?Proč vznikají díry v číslování prostřednictvím sekvence nebo typu SERIAL?

-

Poté co sekvence vygeneruje nové číslo, tak se nedochází k zamčení sekvence a nečeká se na úspěšné nebo neúspěšné dokončení transakce. Odvoláním transakce, která si vyžádala čísla sekvence se tato čísla nenávratně ztratí. -

-

4.12) Co to je OID? Co je to CTID?

-

V případě, že tabulku nezaložíme s atributem WITHOUT OIDS, tak má každý řádek unikátní identifikační číslo OID. Toto číslo je 4 bajtové celé číslo, které je jedinečné v celé instalaci. Přeteče po 4 miliardách řádků. PostgreSQL používá OIDs jako interní linky v interních systémových tabulkách. -

-

K získání unikátního čísla v nesystémových tabulkách je vhodnější použití typu SERIAL než OID, jelikož sekvence SERIAL se používá pouze pro jednu tabulku a je tudíž méně náchylná na přetečení. Pokud byste se toho obávali, použijte typ SERIAL8. -

-

CTID se používá k identifikaci konkrétního fyzického řádku. CTID se mění pokud je řádek modifikován nebo znovu načten. Používají ho indexy jako adresaci fyzických řádků. -

-

4.13) Co znamená chybové hlášení "ERROR: Memory exhausted in AllocSetAlloc()"?

-

Pravděpodobně jste vyčerpal dostupnou virtuální paměť, nebo tvůj kernel -má příliš nízké limity u určitých zdrojů. Před startem PostgreSQL vyzkoušejte: -

-
-ulimit -d 262144
-limit datasize 256m
-

Možná, že se projde pouze jeden příkaz - záleží to na vašem shellu. -Měl by zvednout limity datových segmentů vašich procesů na dostatečně velkou -hodnotu a snad umožnit dokončení dotazu. Změna limitů se bude aplikovat -pouze na aktuální proces a na všechny nově vytvořené procesy. Jestliže máte -problém s SQL klientem, protože vám server vrátil příliš dat, zkuste to -před startem klienta. -

-

4.14) Jak zjistím, kterou verzi PostgreSQL používám?

-

V psql napište: -

-
-SELECT version();
-
-

4.15) Jak vytvořit sloupec, který bude implicitně obsahovat aktuální čas?

-

Použijte CURRENT_TIMESTAMP: -

-
-CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
-
-

4.16) Jak provést vnější spojení (outer join)?

-

PostgreSQL podporuje standardní SQL syntaxi pro vnější spojení. Zde jsou -dva příklady: -

-
-SELECT *
-FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
-

nebo -

-
-SELECT *
-FROM t1 LEFT OUTER JOIN t2 USING (col);
-

Tyto identické dotazy spojí sloupec t1.col k sloupci t2.col, a ještě vrátí všechny nespárované řádky t2 (ty, které nedohledá v t2). RIGHT JOIN by připojil všechny nespárované řádky z t2. FULL JOIN vrátí všechny spárované řádky i všechny zbývající řádky z obou tabulek. Klíčové slovo OUTER je volitelné. Běžná operace JOIN se také označuje jako vnitřní spojení. -

-

4.17) Jak provést dotaz napříč několika databázemi?

-

Neexistuje žádný způsob, jak se v dotazu odkazovat na tabulky z jiné než aktuální databáze. A to protože má systémové tabulky uložené nezávisle v každé databázi a není tak úplně zřejmé, jak by se dotaz provedený napříč databázemi měl chovat. -

-

Jeden z doplňků dblink umožňuje dotaz nad několika tabulkami pomocí funkcí. Druhý způsob je simultální připojení klienta ke všem relevantním databázím a sloučení výsledku na straně klienta. -

-

4.18) Může funkce vrátit více řádků nebo sloupců?

-

Jde to jednoduše pomocí set-returning funkce. Více na -http://www.postgresql.org/docs/techdocs.17. -

-

4.19) Co je příčinou chyby "relation with OID xxxxx does not exist"?

-

Nechtěným vedlejším efektem kešování SQL dotazů v PL/pgSQL funkci je problém s neplatnými odkazy na dočasné tabulky, které byly od prvního spuštění funkce zrušeny a znovu vytvořeny před dalším spuštěním PL/pgSQL funkce. Řešením je použít příkaz EXECUTE a to proto, že prováděcí plán SQL příkazu spouštěného příkazem EXECUTE se vytváří pokaždé znovu (neukládá se do cache). -

-

Tento problém by se neměl vyskytovat u PostgreSQL verze 8.3 a vyšších verzích. -

-

4.20) Jaké jsou možnosti replikace databází?

-

Replikaci databáze umožňuje několik technoligií. Každá má určité výhody a nevýhody. -

-

Master/Slave replikaci podporuje jeden hlavní server, který přijímá požadavky na zápis a čtení, a několik podřízených serverů, které umožňují pouze čtení (SELECT). Nejrozšířenějším volně dostupným řešením tohoto typu je Slony-I. -

-

Replikace typu Multi-master podporuje existenci několika serverů s povoleným zápisem na více replikovaných serverech. Toto řešení zvyšuje zátěž serverů, protože je nutná synchronizace serverů. Nejrozšířenějším volně dostupným řešením je PGCluster. -

-

Ještě existuje několik komerčních a hardware řešení replikací podporujících různé modely replikace. -

-

4.21) Proč v dotazu nejsou rozpoznány názvy mých tabulek nebo funkcí? Proč jsou velká písmena v názvech automaticky převedena na malá písmena?

-

Nejčastějším důvodem nerozpoznání názvu objektu bylo použití vložení názvu sloupce nebo tabulky mezi uvozovky při zakládání tabulky. Pokud se název zapíše mezi uvozovky, pak je case sensitive, a v důsledku toho je nutné názvy těchto sloupců nebo tabulek v SQL příkazech také vkládat mezi uvozovky (pokud obsahují velká písmena). Některé programy, jako je například pgAdmin, automaticky používají uvozovky. Takže pokud chcete, aby systém identifikoval identifikátor, musíte: -

-
  • nepoužívat uvozovky v příkazu CREATE TABLE -
  • -
  • v identifikátoru použít pouze malá písmena -
  • -
  • v dotazech vkládat identifikátory do uvozovek -
  • -
- - diff --git a/doc/src/FAQ/FAQ_farsi.html b/doc/src/FAQ/FAQ_farsi.html deleted file mode 100644 index b304095b75..0000000000 --- a/doc/src/FAQ/FAQ_farsi.html +++ /dev/null @@ -1,1533 +0,0 @@ - - -PostgreSQL FAQ - - - -

سوالاتي كه اغلب در مورد - -PostgreSQL‌ -پرسيده مي شوند

-

تاريخ آخرين اصلاح اين فايل: 28 -شهریور 1383 هجری شمسی

-

نگهدارنده اصلي فايل (زبان -انگليسي)در حال حاضر : Bruce Momjian -pgman@candle.pha.pa.us

-

نگهدارنده فايل به زبان فارسي: - -m.taghizadeh@imenafzar.net  Ù…حمود -تقي‌زاده مهرجردی

-

آخرين نسخه اين فايل را -مي‌توانيد از اين آدرس بگيريد  http://www.PostgreSQL.org/docs/faqs/FAQ.html

-

سوالاتي كه در مورد يك -سکوی(پلتفرم) خاص است در اين آدرس جواب داده شده اند http://www.PostgreSQL.org/docs/index.html

-
- -

سوالات عمومي

-

1.1) PostgreSQL -چيست و چگونه بايد آن را تلفظ كرد؟
1.2) -قانون كپي رايت‌ (حقوق معنوي) در مورد PostgreSQL - Ø¨Ù‡ چه صورت است؟
1.3) -PostgreSQL
‌ روي چه نوع -يونيكسهايي اجرا مي‌شود؟
1.4) -
روي چه محيطهاي غير يونيكسي مي‌توان آن -را اجرا كرد؟
1.5) PostgreSQL
-را از كجا مي‌توانم بگيرم؟
1.6) -
از كجا خدمات پشتيباني بگيرم؟
1.7)
-آخرين نسخه اعلام شده چيست؟
1.8) -
چه مستندات و راهنمائيهايي وجود دارند؟
1.9) -چگونه مي‌توانم ازاشكالات شناخته شده و يا امكاناتي كه در اين -پايگاه داده وجود ندارد  مطلع شوم؟
1.10) -
چگونه مي‌توانم زبان -SQL را ياد بگيرم؟
1.11)
-آيا PostgreSQL -مشكل Y2K‌ -دارد يا خير؟
1.12) -
چگونه مي‌توانم به تيم برنامه نويس -PostgreSQL -ملحق شوم؟
1.13) -چگونه مي‌توانم يك اشكال را به گروه برنامه نويس اعلام كنم؟
1.14) -
 ÙˆØ¶Ø¹ÙŠØª -PostgreSQL‌ در -مقايسه با ساير DBMSها به چه -صورت است؟
1.15) -من چگونه مي‌توانم از نظر مالي به PostgreSQL -كمك كنم؟
-

-

سوالات مربوط به -استفاده از پايگاه داده

-

2.1) -آيا هيچ درايور ODBC‌ -براي PostgreSQL -وجود دارد؟
2.2) -چه ابزارهايي براي استفاده از PostgreSQL‌ -با صفحات وب وجود دارد؟
2.3) -آيا PostgreSQL‌ يك واسط كاربري گرافيكي -دارد؟
2.4) -با چه زبانهاي برنامه‌نويسي مي‌توان با PostgreSQL‌ -ارتباط برقرار كرد؟
-

-

سوالات مربوط به -راهبري

-

3.1) -چگونه مي‌توانم PostgreSQL‌ را در شاخه‌اي -غير از /usr/local/pgsql/  نصب كنم؟
3.2) -چرا موقعي كه من برنامه postmaster‌ را -اجرا مي كنم پيام Bad system call‌ و يا core dump -‌مي‌گيرم؟
3.3) -چرا موقعي كه من سعي مي‌كنم برنامه postmaster‌ -را اجرا كنم خطاي IpcMemoryCreate  مي‌گيرم؟
3.4) -چرا موقعي كه من سعي مي‌كنم برنامه postmaster‌ -را اجرا كنم خطاي  IpcSemaphoreCreate -مي‌گيرم؟
3.5) -چگونه مي‌توانم اتصالات ساير ماشينها را كنترل كنم؟
3.6) -براي كارايي بالاتر و بهتر پايگاه داده من چه تنظيماتي را بايد -انجام دهم؟
3.7) -چه امكاناتي براي پيدا كردن اشكال‌ وجود دارد؟
3.8) -چرا موقعي كه من مي‌خواهم به پايگاه داده وصل شوم پيام -"Sorry, too many clients" -‌مي‌گيرم؟
3.9) -در شاخه  pgsql_tmp  Ú†Ù‡ چيزي قرار دارد؟
3.10) -چرا براي به روز كردن نسخه پايگاه داده من بايد كل داده ها را -dump‌ و مجدداً restore كنم؟
3.11) -از چه سخت افزاري بايد استفاده كنم؟
-

-

سوالات عملياتي

-

4.1) تفاوت بين binary cursors و -Normal cursors چيست؟
4.2) -من چگونه مي‌توانم فقط روي چند رديف اول يا يك رديف تصادفي درخواست -SELECT‌ بزنم؟
4.3) -من چگونه مي‌توانم ليستي از جداول يا ساير چيزهايي كه در -psql‌ وجود دارد را ببينم؟
4.4) -چگونه يك ستون جدول را حذف مي‌كنيد؟ چگونه نوع داده آن را عوض -كنيم؟
4.5) -حداكثر اندازه يك رديف،‌ جدول و خود پايگاه داده چقدر است؟
4.6) -چقدر فضاي ديسك سخت براي ذخيره كردن داده‌‌هاي يك فايل متني مورد -نياز است؟
4.7) -چگونه مي‌توانم بفهمم كه چه كاربران،‌ پايگاه داده،‌ نمايه و -جداولي در سيستم تعريف شده است؟
4.8) -چرا درخواستهاي من كند اجرا مي‌شوند يا چرا از نمايه ها استفاده -نمي‌كنند؟
4.9) -چگونه مي‌توانم نحوه بررسي درخواست را توسط بهينه‌ساز درخواستها -مشاهده كنم؟
4.10) -نمايه R-tree‌ چيست؟
4.11) -بهينه ساز تكويني درخواست چيست؟ (Genetic Query Optimizer)
4.12) -چگونه از عبارات منظم براي جستجو استفاده كنم؟ چگونه جستجويي انجام -دهم كه حساس به متن نباشد؟ چگونه براي يك جستجوي غير حساس به متن از نمايه استفاده -كنم؟
4.13) -چگونه مي‌توانم در يك درخواست تشخيص دهم كه يك فيلد NULL‌ -است؟
4.14) -تفاوت بين گونه‌هاي مختلف character چيست؟
4.15.1) -چگونه مي‌توانم يك فيلد سريال يا افزايشي ايجاد كنم؟
4.15.2) -چگونه مي‌توانم مقدار يك درج سريالي را بدانم؟
4.15.3) آیا توابع ()nextval -و ()currval منجر به ایجاد شرایط race -برای سایر کاربران می شوند؟
4.15.4) -چرا اعداد سریالی مربوط به تراکنشهای abort -شده مجدداً استفاده نمی شود؟ چرا بین اعداد سریالی یک فاصله خالی ایجاد می شود؟
4.16) OID و TID چه -هستند؟
4.17) -معني بعضي از ترمها و كلماتي كه در PostgreSQL‌ -استفاده مي‌شود چيست؟
4.18) -چرا من خطاي "ERROR: Memory exhausted in AllocSetAlloc" -مي‌گيرم؟
4.19) -از كجا تشخيص دهم كه ويرايش يا نسخه PostgreSQLيي -كه من استفاده مي‌كنم چيست؟
4.20) چرا در حین اجرای عملیات روی -large-objectها خطای "invalid large obj descriptor"به -وجود می آید؟
4.21) -چگونه يك ستون ايجاد كنم كه مقدار زمان جاري را به عنوان مقدار -پيش‌فرض داشته باشد؟
4.22) -چرا زير درخواستهايي كه از IN استفاده -مي‌كنند كند هستند؟
4.23) -چگونه مي‌توانم يك الحاق خارجي (outer join) -انجام دهم؟
4.24) -چگونه مي‌توان درخواستهايي از چند پايگاه داده توليد كرد؟
4.25) -چگونه خروجي يك تابع مي‌تواند  چند رديف يا ستون باشد؟
4.26)  -در توابع PL/PgSQL چرا نمي‌توان با اطمينان -جداول موقت را ايجاد يا حذف كرد؟
4.27) -چه گزينه‌هايي براي تكرار (replication) -وجود دارد؟
4.28) -چه گزينه‌هايي براي رمزنگاري وجود دارد؟
-

-

توسعه -PostgreSQL

-

5.1) -من يك تابع نوشته‌ام. چگونه آن را در psql -اجرا كنم؟ چرا با اجراي آن core dump مي‌گيرم؟
5.2) -چگونه مي‌توانم در توليد نوع‌ها و توابع جديد و جالب براي -PostgreSQL‌ همكاري و مشاركت داشته باشم.
5.3) -چگونه مي‌توانم يك تابع به زبان C بنويسم -كه خروجي آن يك ‌tuple  (چند -تايي) باشد؟
5.4) -من يك فايل منبع را عوض كرده ام چرا در عمليات كامپيل مجدد آن -تغيير ديده نمي‌شود؟
-

-
- -

سوالات عمومي

-

1.1) -PostgreSQL چيست و چگونه آن را بايد تلفظ كرد؟

-

PostgreSQL به صورت -Post-Gres-Q-L‌ تلفظ مي‌شود. يك فايل صوتي در آدرس - -http://www.postfresql.org/postgresql.mp3‌ براي كساني كه مايلند تلفظ -صحيح را بشنوند وجود دارد.

-

PostgreSQL از روي سيستم مديريت پايگاه -داده POSTGRES توسعه داده شده است (هنوز هم بعضي مواقع -براي سادگي به آن Postgres گفته مي‌شود) كه يك نمونه -تحقيقاتي از پايگاه داده‌هاي نسل بعد است. PostgreSQL -همان الگوي داده قوي و انواع داده  را حفظ كرده است ولي زبان -PostQuel را با يك زيرمجموعه پيشرفته از -SQL جايگزين كرده است. PostgreSQL -متن باز بوده و متن كامل آن در دسترس است.

-

PostgreSQL  ØªÙˆØ³Ø· يك -تيم برنامه‌نويس كه همگي در گروه پست الكترونيك برنامه‌نويسان -PostgreSQL  عضو هستند، انجام مي‌شود. هماهنگ كننده -اصلي در حال حاضر Marc G. Fournier‌ به آدرس - -scrappy@PostgreSQL.org  مي‌باشد. (براي ديدن نحوه ملحق شدن به اين -تيم قسمت 1.6 -را ببينيد). اين تيم در حاضر مسئوليت تمام مسائل مربوط به برنامه‌نويسي -PostgreSQL را بر عهده دارد. اين يك پروژه گروهي است و -تحت كنترل هيچ شركتي نيست. براي اطلاعات بيشتر در مورد اين تيم به آدرس - -http://www.PostgreSQL.org/docs/faqs/FAQ_DEV.html -مراجعه كنيد.

-

اولين نسخه PostgreSQL‌ -توسط Andrew Yu and Jolly Chen به وجود آمد. افراد بسياري در توسعه و رفع اشكال و -انتقال آن شركت كرده‌اند. متن اصلي Postgres كه -PostgreSQL از روي آن نوشته شده است، توسط تعداد زيادي -دانشجوي كارشناسي ارشدو دانشجوي كارشناسي و تيم برنامه‌نويسي كه تحت نظر پروفسور -Michael Stonebrake در دانشگاه بركلي،‌كاليفرنيا كار مي‌كرده‌اند نوشته شده است.

-

نام اصلي نرم افزار در دانشگاه بركلي -Postgres‌ بود. در سال 1995 بعد از اضافه شدن -SQL نام آن به Postgres95 -تغيير داده شد. در سال 1996 نام آن به -PostgreSQL تغيير داده شد.

-

1.2) قوانين كپي رايت در مورد -PostgreSQL به چه صورت است؟

-

PostgreSQL تحت قانون -كپي رايت زير قرار دارد:

-

PostgreSQL Data Base Management System

-

Portions copyright (c) 1996-2004, PostgreSQL -Global Development Group Portions Copyright (c) 1994-6 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.

-

قانون بالا ليسانس BSD -كه يك ليسانس كلاسيك براي متن‌هاي باز است مي‌باشد. هيچ محدوديتي در مورد نحوه -استفاده از متن در آن ديده نمي‌شود. ما آن را دوست داريم و هيچ قصدي براي تغيير آن -نداريم.

-

1.3) PostgreSQL‌ -روي چه نوع يونيكسهايي اجرا مي‌شود؟

-

در حالت كلي PostgreSQL -روي هر پلتفرم (سكوي) سازگار با يونيكس اجرا مي‌شود. ليست پلتفرمهايي كه تاكنون -PostgreSQL‌ روي آنها نصب و تست شده است درقسمت -دستورالعملهاي نصب آمده است.

-

1.4) -روي چه محيطهاي غير يونيكسي مي‌توان آن را اجرا كرد؟

-

Client

-

مي‌توان psql, -كتابخانه libpq و ساير واسطها و برنامه‌هاي كاربردي را -طوري كامپيل كرد كه روي محيطهاي ويندوز نيز اجرا شوند. در اين حالت -Client روي ويندوز اجرا مي‌شود و از طربق شبكه و پروتكل -TCP/IP با يك سرور كه روي يك پلتفرم لينوكس در حال -اجراست ارتباط برقرار مي‌كند.يك فايل win32.mak همراه با -كدهاي PostgreSQL وجود دارد كه براي كامپيل كردن -كتابخانه libpq و برنامه psql -مي‌باشد. P‌ostgreSQL‌ همچنين -امكان ارتباط به صورت ODBC‌  را نيز دارد.

-

Server

-

با استفاده از -Cygwin‌ و كتابخانه Cygnus -مي‌توان پايگاه داده را روي ويندوز NT و يا -Win2K اجرا كرد.براي ديدن اطلاعات بيشتر فايل - pgsql/doc/FAQ_MSWIN -‌را كه بهمراه توزبع‌هاي PostgreSQL آمده است -ببينيد و يا اينكه به اين صفحه -http://www.PostgreSQL.org/docs/faqs/text/FAQ_MSWIN -مراجعه كنيد.

-

در حال حاضر يك عمليات انتقال -PostgreSQL به روي سكوهاي Win NT/2000/XP در -جريان است. براي ديدن وضعيت اين پروژه به سايت‌هاي -http://momjian.postgresql.org/main/writings/pgsql/win32.htm و -http://techdocs.postgresql.org/guides/Windows -مراجعه كنيد.

-

همچنين يك عمليات انتقال بر روي -Novell Netware 6 نيز در حال انجام است كه در سايت http://forge.novell.com مي‌توانيد اطلاعات -بيشتر را ببينيد.

-

1.5) PostgreSQL -را از كجا مي‌توانم بگيرم؟

-

PostgreSQL‌ را از -سايت اصلي آن  ftp://ftp.PostgreSQL.org/pub مي‌توانيد -بگيريد. در صفحه اصلي سايت ليست ساير آدرسهايي كه مي‌توانيد -PostgreSQL‌ را از آنها بگيريد آمده است.

-

1.6) -از كجا خدمات پشتيباني بگيرم؟

-

گروه پستي اصلي pgsql-general@PostgreSQL.org -مي‌باشد. اين گروه براي بحث در مورد موضوعات مختلف در زمينه -PostgreSQL است. براي عضو شدن در اين گروه پستي يك نامه الكترونيكي به آدرس -گروه با محتوياتی كه در ادامه آمده است ارسال كنيد. در قسمت -Subject چيزي ننويسيد.

-
-
    subscribe
-    end
-
-
-

آدرس گروه: -pgsql-general-request@PostgreSQL.org

-

همچنين يك گروه پستي هم به صورت ارسال چكيده -پيامها وجود دارد. براي عضو شدن در اين گروه يك نامه با محتويات زير به این آدرس  -ارسال كنيد. -pgsql-general-digest-request@PostgreSQL.org -

-
-
    subscribe
-    end
-
-

در اين گروه هر موقع حجم نامه‌ها به 30 كيلوبايت -رسيد براي تمام اعضاء ارسال مي‌شود.

-

گروه پستي بررسي اِشكالات هم وجود دارد. براي عضو -شدن در اين گروه يك نامه با محتويات زير به - -pgsql-bugs-request@PostgreSQL.org -ارسال كنيد.

-
-
    subscribe
-    end
-
-

گروه پستي مخصوص توسعه دهندگان (برنامه‌نويسان) -نيز وجوددارد. براي عضويت در اين گروه يك نامه به آدرس زير با محتويات مشخص شده -ارسال كنيد.  -pgsql-hackers-request@PostgreSQL.org - 

-
-
    subscribe
-    end
-
-
-

گروههاي پستي ديگري نيز در زمينه -PostgreSQL‌ وجود دارد  كه مي‌توانيد در سايت http://www.postgresql.org ببينيد.

-

همچنين يك كانال IRC -روي Freenode و EFNet بنام -PostgreSQL# -وجود دارد. شما مي‌توانيد از فرمان يونيكسي -irc -c '#PostgreSQL' "$USER" irc.phoenix.net. -يا -irc -c '#PostgreSQL' "$USER" irc.freenode.net -استفاده كنيد.

-

ليست شركتهايي كه از طريق آنها مي‌توانيد خدمات -پشتيباني تجاري در زمينه PostgreSQL دريافت كنيد در اين -آدرس -http://techdocs.postgresql.org/companies.php -موجود است.

-

1.7) -آخرين نسخه اعلام شده چيست؟

-

آخرين نسخه PostgreSQL‌ - ÙƒÙ‡ وجود دارد 7.4.3 است.

-

هدف ما آن است كه هر 6 ماه تا 8 ماه يك نسخه جديد -ارائه شود.

-

1.8) -چه مستندات و راهنمائيهايي وجود دارند؟

-

چندين كتابچه و صفحات راهنما و مثالهاي كوچك -همراه با متن اصلي PostgreSQL‌ در شاخه -doc وجود دارد. براي ديدن صفحات راهنما مي‌توانيد به -سايت http://www.PostgreSQL.org/docs - Ù†ÙŠØ² مراجعه نماييد.

-

دو كتاب در زمينه PostgreSQL‌ - Ø¯Ø± آدرس‌هاي -http://www.PostgreSQL.org/docs/awbook.htm -و http://www.commandprompt.com/ppbook -وجود دارد. ليستي از كتابهايي كه قابل خريد است در آدرس -http://techdocs.PostgreSQL.org/techdocs/bookreviews.php -وجود دارد. همچنين ليستي از مقالات فني در مورد -PostgreSQL در آدرس http://techdocs.PostgreSQL.org -وجود دارد.

-

برنامه psql يك دستور -d\ دارد كه اطلاعاتي در مورد انواع داده‌هاي قابل تعريف -و عملگر‌ها و توابع و ... به ما نشان مي‌دهد. در سايت اصلي ما اطلاعات بيشتري را -مي‌توانيد پيدا كنيد.

-

1.9) -چگونه مي‌توانم ازاشكالات شناخته شده و يا امكاناتي كه در اين -پايگاه داده وجود ندارد  مطلع شوم؟

-

PostgreSQL يك زير -مجموعه پيشرفته از SQL-92 را پشتيباني مي‌كند. در ليست - TODO   اِشكالات -شناخته شده يا امكاناتي كه وجود ندارد و يا برنامه‌‌هاي آينده آمده است.

-

1.10) -چگونه مي‌توانم زبان -SQL را ياد بگيرم؟

-

كتاب PostgreSQL در -آدرس SQL -http://www.PostgreSQL.org/docs/awbook.html -‌را آموزش مي‌دهد. همچنين يك كتاب در آدرس http://www.commandprompt.com/ppbook -وجود دارد. يك راهنماي خيلي خوب هم در سايت‌هاي  -http://www.intermedia.net/support/sql/sqltut.shtm -و -http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM -و  http://sqlcourse.com در مورد -SQL وجود دارد.

-

كتاب ديگري كه مي‌توان براي يادگيري -SQL از آن استفاده كرد كتاب "SQL -را در 21 روز ياد بگيريد،‌ ويرايش دوم" در سايت -http://members.tripod.com/er4ebus/sql/index.htm -مي‌باشد.

-

تعداد زيادي از كاربران كتاب -The Practical SQL را ترجيح مي‌دهند. كتاب ديگر The -Complete Refrence SQL انتشارات McGraw-Hill -مي‌باشد.

-

1.11) -آيا PostgreSQL -مشكل Y2K‌ -دارد يا خير؟

-

خير،‌PostgreSQL‌ با -تاريخ‌هاي قبل و بعد از 2000 مشكلي ندارد.

-

1.12) -چگونه مي‌توانم به تيم برنامه نويس -PostgreSQL -ملحق شوم؟

-

ابتدا،‌آخرين سورس را دونلود كرده و مستندات -مربوط به برنامه‌نويسي PostgreSQL را در سايت مطالعه -كنيد. سپس به گروههاي پستي ‌ pgsql-patches -و pgsql-hackers - Ø¹Ø¶Ùˆ شويد. در مرحله آخر وصله‌هاي با كيفيت بالا را به -pgsql-patches ارسال كنيد.

-

تعداد زيادي از برنامه‌نويسان وجود دارند كه -امتياز انجام تغييرات در cvs‌ را دارند. هر كدام از آنها -تعداد زيادي وصله‌‌ با كيفيت بالا به گروه ارسال كرده‌اند كه اعتماد گردانندگان -PostgreSQL را به دست آورده‌اند.

-

1.13) -چگونه مي‌توانم يك اِشكال را به گروه برنامه نويس اعلام كنم؟

-

لطفاً صفحه مربوط به اِشكالات -PostgreSQL را در سايت -http://www.PostgreSQL.org/bugs/bugs.php -مشاهده‌ كنيد. در اين سايت نحوه گزارش و ارسال يك -اشكال توضيح داده شده است.

-

 Ù‡Ù…چنين براي ديدن -نسخه‌هاي جديدتر PostgreSQL و يا وجود يك وصله جديد از -سايت ftp://ftp.PostgreSQL.org/pub بازديد -كنيد.

-

1.14) -وضعيت -PostgreSQL‌ در -مقايسه با ساير DBMSها به چه -صورت است؟

-

راههاي مختلفي براي اندازه‌گيري و مقايسه -نرم‌افزارها وجود دارد كه عبارتند از امكانات، كارايي، قابليت اعتماد، پشتيباني و -قيمت

-
-
-
-
امكانات
-
PostgreSQL بيشتر امكانات - موجود در سيستم‌هاي پايگاه داده تجاري بزرگ نظير - transactions, subselets, triggers, views, foreign key referential integrity - و sophisticated locking‌ را دارد. در - PostgreSQL‌‌ امكاناتي وجود دارد كه پايگاههاي داده - ديگر آن را ندارند نظير user-defined types‌و - Inheritance‌و rules‌و - multi-version concurrency control
-
-
-
-

 

- كارايي

        - كارايي PostgreSQL در حد بقيه سيستم‌هاي تجاري و - متن باز است. در بعضي موارد سريعتر و در بعضي موارد از آنها كندتر است. در - مقايسه با MySQL براي كاربران بيشتر و درخواست‌هاي - پيچيده و بار زياد خواندن/نوشتن سريعتر است. در درخواست‌هاي ساده - SELECT‌ از MySQL كندتر است. البته - MySQL خيلي از امكانات - PostgreSQL كه در بالا به آن اشاره شد را ندارد. هدف اصلي ما امكانات و - قابليت اعتماد بالاست در ضمن آنكه تلاش مي‌كنيم تا كارايي آن نيز بهبود يابد. - در آدرس - http://openacs.org/philosophy/why-not-mysql.html - يك مقايسه جالب بين MySQL و - PostgreSQL وجود دارد. از طرف ديگر MySQL‌ يك - شركت است كه محصول خود را به صورت متن باز ارائه مي‌كند ولي براي نرم‌افزار غير - متن باز خود احتياج به ليسانس تجاري دارد بر خلاف - PostgreSQL كه يك گروه كاملاً متن باز هستند.

-
-

 

-
-
قابليت اطمينان
-
ما فكر مي‌كنيم كه يك سيستم پايگاه داده‌اي كه مطمئن - نباشد ارزشي ندارد. ما تمام تلاشمان را براي ارائه كدهاي پايداري كه به خوبي - تست شده باشند و كمترين اِشكالات را داشته باشند مي‌كنيم. هر نسخه جديدي كه - ارائه مي‌شود حداقل يك ماه را در مرحله تست بتا مي‌گذراند. ما بر اين باور - هستيم كه قابليت اطمينان PostgreSQL‌ در مقايسه با - ساير سيستم‌هاي پايگاه داده قابل توجه است و نسخه‌هايي كه تاكنون ارائه شده است - نشان مي‌دهد كه ما توانايي ارائه يك سيستم قوي و محكم و مطمئن را كه آماده - بهره‌برداري است داريم.
-
-
-
-
-
-
پشتيباني
-
گروههاي پستي ما امكان ارتباط و تماس به گروه بزرگي از - برنامه نويسان و كاربران را مي‌دهد كه مي‌توانند در حل مشكلات به ديگران كمك - كنند. دسترسي مستقيم به برنامه‌نويسان و گروههاي كاربران و راهنماها و كداصلي - باعث مي‌شود كه پشتيباني PostgreSQL نسبت به ساير - پايگاههاي داده به نحو بهتري انجام شود. همچنين امكان ارائه خدمات پشتيباني به - صورت تجاري نيز وجود دارد. براي ديدن اطلاعات بيشتر به FAQ section 1.6  مراجعه كنيد.
-
-
-
-
-
-
قيمت
-
هم براي استفاده تجاري و هم غير تجاري هيچ هزينه‌اي - نبايد پرداخت شود. هيچ محدوديتي براي انجام تغييرات در - PostgreSQL توسط استفاده كنندگان وجود ندارد به جز مواردي كه در ليسانس - BSD به آن اشاره شده است.
-
-
-
-

1.15) -من چگونه مي‌توانم از نظر مالي به PostgreSQL -كمك كنم؟

-

PostgreSQL  Ø¯Ø§Ø±Ø§ÙŠ يك -ساختار تشكيلاتي درجه اول است كه آن را مديون Marc Fournier‌ -است كه اين ساختار را ايجاد كرده است.

-

كيفيت يك ساختار براي يك پروژه متن باز بسيار -اهميت دارد. يك ساختار خوب مي‌تواند مانع از حوادثي شود كه در حركت روبه‌جلوي پروژه -خللي وارد مي‌كنند.

-

البته اين ساختار تشكيلاتي ارزان نيست. هزينه‌هاي -ثابت ماهانه و روزمره براي نگهداري و حفظ اين ساختار مورد نياز است. اگر شما يا -شركت شما مايل است كه از نظر مالي به اين حركت كمك كند لطفاً به سايت http://store.pgsql.com/shopping -مراجعه كرده و كمك خود را اهدا كنيد.

-

هر چند در صفحه اصلي عبارت -PostgreSQL,Inc‌ ذكر شده است ولي مشاركت عمدتاً براي پشتيباني از پروژه -PostgreSQL‌ مي باشد و نه براي يك شركت مشخص. اگر ترجيح -مي‌دهيد مي‌توانيد يك چك به آدرس مشخص شده ارسال كنيد.

-

اگر يك استفاده موفق از -PostgreSQL سراغ داريد لطفاً آن را به سايت http://advocacy.postgresql.org گزارش -دهيد.

-
- -

سوالات مربوط به -استفاده از پايگاه داده

-

2.1) -آيا هيچ درايور ODBC‌ -براي PostgreSQL -وجود دارد؟

-

دو درايور ODBC -بنامهاي psqlODBC‌ و OpenLink براي -PostgreSQL‌ وجود دارد.

-

براي گرفتن psqlODBC -به سايت -http://gborg.postgresql.org/project/psqlodbc/projdisplay.php -مراجعه كنيد.

-

OpenLlink را از اين -سايت http://www.openlinksw.com مي‌توانيد -بگيريد. اين درايور با نرم‌افزارهاي مختلف ODBC كار -مي‌كند بنابراين شما قادر خواهيد بود با استفاده از OpenLink -روي اكثر سكو‌هايي كه نرم‌افزارODBC‌دارند بدون مشكل به -PostgreSQL نيز متصل شويد.

-

اين محصول به كساني كه احتياج به خدمات پشتيباني -تجاري دارند فروخته مي‌شود. ولي نسخه آزاد اين نرم‌افزار هميشه در درسترس مي‌باشد. -براي كسب اطلاعات بيشتر سوالات خود را به آدرس postgres95@openlink.co.uk -‌ارسال نماييد.

-

2.2) -چه ابزارهايي براي استفاده از PostgreSQL‌ -با صفحات وب وجود دارد؟

-

در سايت http://www.webreview.com براي استفاده از -PostgreSQL‌ در صفحات وب راهنماييهاي خوبي وجود دارد.

-

براي تركيب و استفاده در صفحات وب زبان -PHP‌ يك واسط بسيار مناسب است. اطلاعات بيشتر راجع به -PHP‌در سايت http://www.php.net وجود -دارد.

-

مثالهايي نيز با استفاده از -Perl‌ و CGI.pm و mod_perl -وجود دارد.

-

2.3) -آيا PostgreSQL‌ يك واسط كاربري گرافيكي -دارد؟

-

چند نرم افزار گرافيكي براي -PostgreSQL‌ وجود دارد كه شامل pgAccess درسايت http://www.pgaccess.org -و pgAdmin III در سايت http://www.pgadmin.org -و RHDB Admin در سايت http://sources.redhat.com/rhdb -و Rekall در سايت -http://www.thekompany.com/products/rekall - Ù…ي‌باشد. همچنين يك phpPgAdmin هم در سايت -http://phppgadmin.sourceforge.net وجود دارد كه يك -واسط وبي براي مديريت PostgreSQL مي‌باشد.

-

براي ديدن اطلاعات بيشتر راجع به نرم‌افزارهاي -گرافيكي براي PostgreSQL به آدرس -http://techdocs.postgresql.org/guides/GUITools -مراجعه كنيد.

-

2.4) -با چه زبانهاي برنامه‌نويسي مي‌توان با PostgreSQL‌ -ارتباط برقرار كرد؟

-

بيشتر زبانهاي برنامه‌نويسي -مي‌توانند با PostgreSQL‌ ارتباط برقرار كنند. به همراه  -سورس PostgreSQL تعدادي از واسطهاي مورد نياز براي ارتباط -با پايگاه داده از طريق زبانهاي مختلف آمده است كه در زير ليست آنها را مشاهده -مي‌كنيد.

-
    -
  • -

    C (libpq)

  • -
  • -

    Embedded C (ecpg) -

  • -
  • -

    Java (jdbc)

  • -
  • -

    Python (PyGreSQL) -

  • -
  • -

    TCL (libpgtcl)

  • -
-

واسطهاي ديگر در -سايت http://gborg.postgresql.org -در قسمت Drivers/Interfaces وجود -دارد.

-
- -

سوالات مديريتي

-

3.1) -چگونه مي‌توانم PostgreSQL‌ را در شاخه‌اي -غير از /usr/local/pgsql/  نصب كنم؟

-

موقع اجراي دستور -configure از گزينه prefix-- استفاده كنيد.

-

3.2) -چرا موقعي كه من برنامه postmaster‌ را -اجرا مي كنم پيام Bad system call‌ و يا core dump -‌مي‌گيرم؟

-

به دلايل مختلف ممكن است اين اتفاق بيفتد. اما در -قدم اول شما مطمئن شويد كه كه امكانات اضافه System V‌ -در كرنل شما نصب شده باشد. PostgreSQL براي اجرا شدن -نياز به استفاده از امكانات حافظه مشترك و سمافورها دارد.

-

3.3) -چرا موقعي كه من سعي مي‌كنم برنامه postmaster‌ -را اجرا كنم خطاي IpcMemoryCreate  مي‌گيرم؟

-

احتمالاً‌ قسمت ايجاد حافظه مشترك در كرنل به -درستي تنظيم نشده است و يا اينكه بايد فضاي حافظه اشتراكي در كرنل را زياد كرد. -ميزان دقيق حافظه مشترك مورد نياز بسته به معماري و نحوه استفاده از بافرها توسط -برنامه postmaster دارد. براي بيشتر سيستم‌ها كه -با تنظيمات پيش‌فرض كار مي‌كنند مقدار اين حافظه حدود 1 -مگابايت است. براي ديدن اطلاعات بيشتر راجع به حافظه مشترك و سمافور به -PostgreSQL Administrator's Guide مراجعه كنيد.

-

3.4) چرا موقعي -كه من سعي مي‌كنم برنامه postmaster‌ را اجرا كنم خطاي IpcSemaphoreCreate -مي‌گيرم؟

-

اگر پيغام خطا -(‌pcSemaphoreCreate: semget failed (No space left on device - Ø¨Ø§Ø´Ø¯ به اين معني است كه تعداد سمافورهاي تنظيم شده در كرنل كافي نيست. -PostgreSQL‌ براي هر فرايندي كه در -backend اجرا مي‌شود به يك سمافور نياز دارد. يك راه حل -موقت براي اين مسئله آن است كه postmaster را با -اعمال محدوديت روي تعداد فرايندهايي كه مي‌تواند ايجاد كند اجرا كنيم. براي اينكار -از گزينه N- و يك عدد كمتر از 32 استفاده كنيد. راه حل -دائمي اين مشكل آن است كه پارامترهاي SEMMNS, SEMMNI -كرنل را افزايش دهيم.

-

در زمان دسترسي خيلي زياد به پايگاه داده، ‌ -سمافورهاي نامعتبر مي‌توانند باعث crash‌ كردن سيستم -شوند.

-

اگر پيغام خطا چيز ديگري باشد احتمالاً به دليل -آن است كه كرنل از سمافورها پشتيباني نمي‌كند. براي ديدن اطلاعات بيشتر راهنماي -مديريتي PostgreSQL را مطالعه كنيد.

-

3.5) -چگونه مي‌توانم اتصالات ساير ماشينها را كنترل كنم؟

-

به صورت پيش فرض فقط از ماشيني كه -PostgreSQL روي آن در حال اجراست مي‌توان با استفاده از -سوكت‌هاي يونيكسي به آن متصل شد. ساير ماشين‌ها قادر نيستند به -PostgreSQL متصل شوند مگر آنكه گزينه tcp_sockets -در فايل postgresql.conf فعال شده و همچنين با اصلاح -فايل PGDATA/ph_hba.conf هويت‌شناسي مبتني بر ميزبان نيز -فعال شود. با اين كار مي‌توان اتصالات TCP/IP به -PostgreSQL‌ ايجاد كرد.

-

3.6) -براي كارايي بالاتر و بهتر پايگاه داده من چه تنظيماتي را بايد -انجام دهم؟

-

به طور حتم استفاده از انديس‌ها باعث بالا رفتن -سرعت پاسخ‌گويي به درخواست‌ها خواهد شد. دستور EXPLAIN ANALYZE -به شما امكان ديدن نحوه پردازش يك دستور توسط PostgreSQL -را مي‌دهد.

-

اگر شما تعداد زيادي INSERT‌ -داريد سعي كنيد آنها را با قرار دادن در يك فايل با دستور COPY‌ -اجرا كنيد. اين دستور به مراتب از INSERT سريعتر است. -حتي‌الامكان سعي كنيد از تراكنشها استفاده نكنيد. تراكنشها مجموعه دستوراتي هستند -كه بيند BEGIN و ‍COMMIT -مي‌آيند. اگر يك دستور به صورت عادي اجرا شود PostgreSQL -خود آن دستور را به صورت يك تراكنش مستقل نگاه كرده و اجرا مي‌كند. موقعی كه -تغييرات زيادي در پايگاه داده انجام مي‌شود انديسهاي قبلي را حذف و مجدداً‌ ايجاد -كنيد.

-

استفاده از گزينه o -F- -در فرمان postmaster باعث غير فعال كردن -()fsync مي‌شود. اين دستور بعد از هر تراكنش اطلاعات را -روي هاردديسك منتقل مي‌كند.

-

براي افزايش تعداد بافرهاي حافظه اشتراكي از -گزينه B- به همراه فرمان -postmaster استفاده كنيد. توجه كنيد كه اگر اين عدد خيلي بزرگ باشد ممكن -است postmaster اصلاً‌ اجرا نشود. هر بافر 8 كيلو -بايت حافظه نياز دارد و تعداد بافرها به طور پيش فرض 64 است.

-

همچنين مي‌توان با گزينه S-  -ميزان حافظه‌اي كه براي مرتب‌سازي‌هاي موقت توسط PostgreSQL -استفاده مي‌شود را افزايش داد. مقدار پيش فرض 512 كيلو بايت است.

-

استفاده از دستور CLUSTER -نيز براي بالا بردن كارايي موثر ا ست. دستور راهنماي CLUSTER -اطلاعات بيشتري در اين زمينه به شما مي‌دهد.

-

3.7) -چه امكاناتي براي پيدا كردن اشكال‌ وجود دارد؟

-

PostgerSQL‌ امكانات -مختلفي براي گزارش دادن وضعيت خود دارد كه براي اشكال زدايي مي‌توان از آنها -استفاده كرد.

-

با استفاده از گزينه -enable-assert-- -تعداد زيادي ()assert براي مونيتور كردن و توقف برنامه -در صورت بروز خطاهاي ناخواسته فعال مي‌شود.

-

هم Postmaster -و هم postgres گزينه‌هاي زيادي براي اشكال زدايي -دارند. موقعي كه postmaster را اجرا مي‌كنيد -خروجي استاندارد و خطا را سمت فايل log ارسال كنيد.

-
-
    cd /usr/local/pgsql
-    ./bin/postmaster >server.log 2>&1 &
-
-
-

اين كار يك فايل -log -در بالاترين شاخه PostgreSQL‌ ايجاد مي‌كند. اين فايل -حاوي اطلاعات مفيدي در مورد مسائل و خطاهايي است كه براي سرور اتفاق افتاده است. -براي ديدن جزئيات بيشتر مي‌توان از d-  به همراه -فرمان postmaster‌ استفاده كرد. گزينه -d- همچنين يك عدد مي‌گيرد كه نشان دهنده سطح جزئياتي است -كه در Log‌فايل نوشته مي‌شود. با بالابردن اين عدد حجم -اطلاعات توليد شده در Logفايل نيز افزايش مي‌يابد.

-

اگر postmaster -در حال اجرا نباشد، مي‌توانيم postgres را به طور مستقيم -از خط فرمان اجرا كرده و  دستورات SQL را به آن -بدهيم. اين كار فقط براي اشكال‌يابي توصيه مي‌شود. توجه كنيد كه در اين حالت يك -دستور با كاراكتر newline خاتمه پيدا مي‌كند و نه با -;. اگر postmaster را با -امكانات اشكال‌يابي كامپيل كرده باشيد مي‌توانيد با استفاده از يك برنامه اشكال‌ياب -اجراي برنامه را مونيتور كنيد.

-

اگر postmaster -در حال اجرا باشد با دستور psql مي‌توان به -postgres متصل شد. با پيدا كردن PID -فرايند postgres كه psql به -آن متصل شده است مي‌توان آن را مونيتور كرد. براي اينكار بايد يك برنامه اشكال‌ياب -را به آن pid متصل كرد. اگر بخواهيم بالا آمدن -postgres را مونيتور كنيم كافي است -"PGOPTIONS="-W n و psql -را اجرا كنيم. اين كار باعث مي‌شود كه postgres با -n ثانيه تاخير اجرا شود و در اين فاصله شما مي‌توانيد -برنامه اشكال‌ياب را به آن متصل كرده و با قرار دادن يك نقطه توقف  روند اجراي -آن را مونيتور كنيد.

-

postgres -گزينه‌هاي s-‌ و A- و -t-‌ دارد كه براي پيدا كردن اشكالات بسيار مناسب هستند.

-

شما مي‌توانيد postgreSQL -را با امكانات profiling كامپيل كنيد. اين كار باعث -مي‌شود كه زمان اجراي دقيق هر تابع در برنامه مشخص شود. خروجي‌هاي توليد شده در اين -حالت در فايل DLINUX_PROFILE. ريخته مي‌شود.

-

3.8) -چرا موقعي كه من مي‌خواهم به پايگاه داده وصل شوم پيام -"Sorry, too many clients" -‌مي‌گيرم؟

-

شما بايد حداكثر تعداد فرايندهاي همزمان -postmaster را افزايش دهيد. مقدار پيش فرض 32 است. -براي افزايش آن مي‌توان از گزينه N- استفاده كرد و يا -فايل postgresql.conf را اصلاح نمود

-

توجه كنيد كه اگر N- -مقداري بيشتر از 32 داشته باشد بايد مقدار B- را نيز -افزايش دهيم. اين مقدار بايد حداقل دو برابر مقدار N-‌ -باشد. براي اعداد خيلي بالا بايد بعضي از پارامترهاي كرنل را نيز اصلاح كرد. -پارامترهايي نظير حداكثر اندازه حافظه اشتراكي SHMMAX ، -حداكثر تعداد سمافورها SEMMNI‌ و -SEMMNS ، حداكثر تعداد فرايندها NPROC، حداكثر -فرايندهاي يك كاربر MAXUPRC و حداكثر فايلهاي باز -NFILE و NINODE. يكي از -دلايلي كه تعداد اتصالات همزمان postgreSQL محدود است آن -است كه نيازهاي PostgreSQL بيش از منابع موجود سيستم -نباشد.

-

3.9) -در شاخه  pgsql_tmp  Ú†Ù‡ چيزي قرار دارد؟

-

دراين شاخه فايلهاي موقتي قرار دارد كه با اجراي -درخواستها به وجود آمده است. به عنوان مثال اگر براي اجراي دستور -order by نياز به انجام مرتب سازي باشد و در صورتي كه -حافظه مشخص شده با گزينه S- براي اينكار كافي نباشد -سيستم يك فايل موقت در اين شاخه ايجاد مي‌كند تا عمل مرتب سازي را انجام دهد.

-

فايلهاي موقت معمولاً به صورت اتوماتيك پاك -مي‌شود اما اگر postgreSQL در حين مرتب سازي -crash‌ كند آن فايلها باقي مي‌مانند. با -stop و start كردن برنامه -postmaster اين فايلها پاك مي‌شوند.

-

3.10) -چرا براي به روز كردن نسخه پايگاه داده من بايد كل داده ها را -dump‌ و مجدداً restore كنم؟

-

تيم برنامه نويس postgreSQL -در نسخه‌هاي ارائه شده كه فقط minor آنها متفاوت است فقط -تغييرات كوچكي اعمال مي‌كنند؛ بنابراين براي به روز كردن از نسخه -7.2‌به 7.2.1 نيازي به -dump و restore نيست. اما در -نسخه‌هايي كه major آنها تغيير مي‌كند غالباً ساختار -داخلي جداول و فايلهاي داده تغيير مي‌كند. اين تغييرات معمولاً‌ پيچيده هستند. براي -انتقال داده‌هاي موجود در پايگاه داده در اين حالت بايد ‌از -dump و restore استفاده كرد.

-

در نسخه‌هايي كه ساختار روي ديسك تغييري نمي‌كند -مي توان از برنامه pg_upgrade براي به روز كردن پايگاه -داده استفاده كرد بدون اينكه نيازي به استفاده از dump و -restore  Ø¨Ø§Ø´Ø¯. در يادداشتي كه به همراه هر توزيع مي‌آيد -ذكر شده است كه آيا برنامه pg_upgrade براي اين توزيع -وجود دارد يا خير.

-

3.11) -از چه سخت افزاري بايد استفاده كنم؟
-

-

چون اكثر سخت‌افزارهاي PC - Ø³Ø§Ø²Ú¯Ø§Ø± هستند مردم فكر مي‌كنند كه كيفيت آنها نيز يكسان است. در حاليكه -اينطور نيست. استفاده از هاردهاي SCSI و حافظه‌هاي -ECC و مادربردهاي با كيفيت بالا نسبت به سخت افزارهاي ارزانتر نتايج بهتري -از نظر كارايي و پايداري سيستم بهمراه خواهد داشت. -PostgreSQL روي بيشتر سخت افزارها اجرا مي‌شود اما اگر كارايي و اطمينان -فاكتورهاي مهمي هستند بايد سخت افزار مناسب استفاده شود. در گروههاي پستي در مورد -سخت افزار مناسب  و انتخاب آن بحث شده است.

-
- -

سوالات عملياتي

-

4.1) تفاوت بين -binary cursors و Normal cursors -چيست؟

-

راهنماي دستور DECLARE‌ -را مطالعه كنيد.

-

4.2) -من چگونه مي‌توانم فقط روي چند رديف اول يا يك رديف تصادفي درخواست -SELECT‌ بزنم؟

-

راهنماي دستور FETCH - ÙŠØ§ SELECT...LIMIT را ببينيد.

-

در واقع كل درخواست بايد بررسي و -ارزيابي شود حتي اگر شما فقط چند رديف اول را بخواهيد. براي مثال درخواست -ORDER BY را در نظر بگيريد. اگر انديس يا نمايه‌اي براي -ORDER BY وجود داشته باشد،‌postgreSQL‌ -ممكن است بتواند فقط چند سطر اول درخواستي را ارزيابي كند و يا اينكه كل درخواست -پردازش شود تا تعداد رديف‌هاي درخواستي توليد شود.

-

براي انتخاب يك سطر تصادفي به -روش زير عمل مي‌كنيم:

-
    SELECT col
-    FROM tab
-    ORDER BY random()
-    LIMIT 1;
-
-
-

4.3) -من چگونه مي‌توانم ليستي از جداول يا ساير چيزهايي كه در -psql‌ وجود دارد را ببينم؟

-

براي ديدن ليست جداول دستور  -dt\ را در برنامه psql‌ -استفاده كنيد. براي ديدن ليست كامل فرمانها ?\ را اجرا -كنيد. راه ديگر خواندن متن برنامه psql‌ است كه در شاخه - pgsql/src/bin/psql/describe.c ‌قرار -دارد. اين فايل حاوي فرامين SQLيي است كه خروجي را -براي  دستوراتي كه با \‌در psql -شروع مي‌شوند توليد مي‌كنند. راه ديگر اجراي psql با گزينه -E-‌است. اينكار باعث مي‌شود كه psql -قبل از اجرا هر دستور SQL‌متناظر آن را نشان دهد. -PostgreSQL‌همچنين يك برنامه SQLi دارد كه -مي‌توان با استفاده از آن  اطلاعات داخلي پايگاه داده را استخراج كرد.

-

4.4) -چگونه يك ستون جدول را حذف مي‌كنيد؟ چگونه نوع داده آن را عوض -كنيم؟

-

حذف يك ستون در توزيع 7.3 -با استفاده از دستور ALTER TABLE DROP COLUMN -اضافه شده است. در نسخه‌هاي قبلي به روش زير عمل كنيد:

-
-
    BEGIN;
-    LOCK TABLE old_table;
-    SELECT ...  -- تمام ستونها غير از ستوني كه مي‌خواهيد آن را حذف كنيد را در اينجا بياوريد
-    INTO TABLE new_table
-    FROM old_table;
-    DROP TABLE old_table;
-    ALTER TABLE new_table RENAME TO old_table;
-    COMMIT;
-
-
-

براي عوض كردن نوع داده يك ستون -به روش زير عمل كنيد:

-
-
    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;
-
-
-

4.5) -حداكثر اندازه يك رديف،‌ جدول و خود پايگاه داده چقدر است؟

-

محدوديتها عبارتند از:

-
-
    حداكثر اندازه پايگاه داده             نامحدود (تا 32 ترابايت وجود دارد)
-    حداكثر اندازه يك جدول               32 ترابايت
-    حداكثر ا ندازه يك رديف              1.6 ترابايت
-    حداكثر اندازه يك فيلد                1 گيگا بايت
-    حداكثر اندازه رديفهاي يك جدول  نا محدود
-    حداكثر ستونهاي يك جدول 	بسته به نوع جدول بين 250 تا 6000 
-    حداكثر انديسهاي يك جدول	نا محدود
-
-

البته در حالت نامحدود نيز ما -محدود به حجم هاردديسك و فضاي حافظه خواهيم بود. در صورتي که مقادير مشخص شده به -عنوان نامحدود به صورت غير معمولي بزرك شوند كارايي سيستم كاهش خواهد يافت.

-

براي ذخيره كردن جداول با اندازه -خيلي بزرگ نيازي نيست كه سيستم عامل امكان ايجاد فايلهاي بزرگ را داشته باشد. بلكه -جداول خيلي بزرگ به صورت فايلهايي به حجم يك گيگا بايت نگاهداري مي‌شوند.

-

اگر اندازه بلوكهاي داده را -برابر 32 كيلو بايت قرار دهيم حداكثر اندازه جدول و حداكثر تعداد ستونها 4 برابر -خواهد شد.

-

4.6) -چقدر فضاي ديسك سخت براي ذخيره كردن داده‌‌هاي يك فايل متني مورد -نياز است؟

-

يك پايگاه داده -PostgreSQL‌ تا 5 برابر فضايي روي هاردديسك براي نگاهداري يك فايل -متني نياز دارد.

-

به عنوان مثال يك فايل با 100000 -خط را در نظر بگيريد كه در هر خط يك عدد صحيح و يك توضيح متني آمده است. فرض كنيد -كه رشته متني به طور متوسط 20 بايت باشد. اندازه فايل برابر 2.8 مگا بايت خواهد بود -ولي PostgreSQL براي نگاهداري اين فايل به 6.4 مگا بايت -اطلاعات نياز خواهد داشت.

-
-
    32 bytes: اندازه سرايند هر خط به طور تقريبي
-    24 bytes: يك عدد صحيح و يك رشته 24 بايتي
-   + 4 bytes: اشاره گر روي صفحه به يك چندتايي
-   ----------------------------------------
-    60 bytes در هر رديف
-
-اندازه صفحات داده در PostgreSQL برابر با 8 كيلو بايت است
-   8192 تعداد بايت‌ها در هر صفحه
-   -------------------   =  136 تعداد رديف‌ها در يك صفحه پايگاه داده
-     60  تعداد بايت‌هاي هر رديف
-
-   100000  تعداد رديفها
-   --------------------  = تعدادصفحات پايگاه داده
-      128 تعداد رديفها در هر صفحه
-
-735 تعداد صفحات * 8192 تعداد بايت‌هاي هر صفحه  =  6,021,120 مگا بايت
-
-
-

سربار انديسها يا نمايه‌ها از -اين مقدار كمتر است ولي چون شامل خود داده‌ها هم هست -ممکن است اندازه آنها هم بزرگ شود.

-

NULLها به صورت bitmap -ذخيره مي‌شوند و از اينرو فضاي بسيار كمي را اشغال مي‌كنند.

-

4.7) -چگونه مي‌توانم بفهمم كه چه كاربران،‌ پايگاه داده،‌ نمايه و -جداولي در سيستم تعريف شده است؟

-

psql -تعداد زيادي دستور دارد كه با \ شروع -مي‌شوند و اين اطلاعات را در اختيار ما قرار مي‌دهند. براي ديدن آنها دستور -?\  Ø±Ø§ اجرا كنيد.  همچنين جداول سيستمي كه با نام آنها -pg_ ‌شروع مي‌شود نيز اين اطلاعات -را در خود دارند. اجراي برنامه psql با گزينه l- - Ù†ÙŠØ² باعث نشان دادن ليست تمام پايگاههاي داده مي‌شود.

-

همچنين فايل -pgsql/src/tutorial/syscat.source -نيز فرمانهاي SELECT كه با -استفاده از آن مي‌توان اطلاعات پايگاه داده را استخراج كرد شرح داده است.

-

4.8) -چرا درخواستهاي من كند اجرا مي‌شوند يا چرا از نمايه ها استفاده -نمي‌كنند؟

-

به طور معمول -براي درخواستها از نمايه‌ها استفاده نمي‌شود. -تنها در صورتي از نمايه‌ها استفاده مي‌شود كه اندازه جدول از يك اندازه حداقل -بزرگتر باشد و درخواست هم فقط قسمتي از رديف‌هاي جدول را انتخاب كرده باشد. دليل -اين كار آن است كه دسترسي‌هاي تصادفي به هاردديسك كه به خاطر نمايه‌ها ايجاد مي‌شود -ممكن است از خواندن مستقيم جدول يا خواندن ترتيبي ركوردها كندتر باشد.

-

براي تعيين اينكه از نمايه -استفاده شود يا خير، PostgreSQL بايد اطلاعات آماري را در -مورد يك جدول بداند. اين اطلاعات توسط دستور ANALYZE و -VACUUM ANALYZE به دست مي‌آيد. با استفاده از اين اطلاعات،‌ -بهينه ساز از تعداد رديف‌هاي يك جدول اطلاع پيدا مي‌كند و بهتر مي‌تواند تعيين كند -كه آيا از نمايه استفاده شود يا خير. اطلاعات آماري همچنين براي تعيين ترتيب الحاق -و روشهاي الحاق به صورت بهينه نيز كاربر دارد. جمع آوري اطلاعات آماري بايد به صورت -دوره‌اي همزمان با تغيير داده‌هاي جدول انجام شود.

-

نمايه‌ها به طور معمول همراه با -دستور ORDER BY به كار برده نمي‌شوند. براي يك جدول بزرگ يك -پيمايش ترتيبي همراه با دستور مرتب سازي از به كار بردن نمايه‌ها سريعتر خواهد بود.

-

اما اگر همراه با ORDER -BY‌ از LIMIT استفاده شود اغلب از نمايه‌ها -استفاده مي‌شود چون فقط قسمتي از جدول استفاده مي‌شود. در حقيقت هر چند -توابع ()MIN‌ و ()MAX -از نمايه‌ها استفاده نمي‌كنند ولي مي‌توانيم با استفاده از دستور -زير با استفاده از نمايه‌ها و دستور ORDER BY و -LIMIT‌ آنها را به دست آوريم.

-
-
    SELECT col
-    FROM tab
-    ORDER BY col [ DESC ]
-    LIMIT 1;
-
-
-

اگر شما فكر مي‌كنيد كه بهينه -ساز سيستم در انتخاب پيمايش ترتيبي اشتباه كرده است با دستور 'SET -enable_seqscan TO 'off'  -مي‌توانيد ببينيد آيا استفاده از نمايه‌ها باعث افزايش سرعت درخواست‌ها خواهد شد.

-

استفاده از نمايه‌ها هنگامي كه -از علائم ويژه نظير LIKE و ~ -استفاده مي‌كنيد فقط در بعضي شرايط خاصي كه در اينجا ذكر شده است ممكن است:

-
    -
  • -

    ابتداي رشته جستجو بايد به - طور صريح مشخص باشد براي مثال:

  • -
  • -

    دستورات - LIKE نبايد با علامت % شروع - شوند

  • -
  • -

    الگوهاي منظمي كه با - ~ مي‌ايد حتماً بايد با علامت ^ شروع - شود

  • -
  • -

    رشته جستجو نبايد با يك - مجموعه از كاراكتر‌ها  مثل [a-e] شروع شود

  • -
  • -

    جستجوهاي غيرحساس به متن مثل  - ILIKE‌ و *~ از نمايه‌ها - استفاده نمي‌كنند. در عوض از توابع نمايه‌اي كه در قسمت - 4.12 - توضيح داده شد استفاده مي‌كنند.

  • -
  • -

    مقدار پيش فرض locale‌ - بايد در initdb استفاده شود.

  • -
-

4.9) -چگونه مي‌توانم نحوه بررسي درخواست را توسط بهينه‌ساز درخواستها -مشاهده كنم؟

-

راهنماي دستور EXPLAIN -را نگاه كنيد.

-

4.10) -نمايه R-tree‌ چيست؟

-

از نمايه R-Tree - Ø¨Ø±Ø§ÙŠ انديس كردن داده‌هاي فاصله‌اي استفاده مي‌شود. يك نمايه -hash نمي‌توانند جستجوهاي محدوده‌اي را انجام دهد. نمايه -"B-tree" نيز براي انجام جستجوي محدوده‌اي در يك جهت قابل استفاده -است. اما R-Tree مي‌تواند داده‌هاي چند بعدي را نيز -پشتيباني كند. براي مثال استفاده اگر از نمايه R-tree‌ براي -گونه Point استفاده شود سرعت درخواست‌هايي نظير "select -all points within a bounding rectangle" به مراتب افزايش مي‌يابد.

-

مقاله‌اي كه طراحي R-tree -را توضيح داده است

-

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.

-

R-tree‌ مي‌تواند چندضلعيها و -چند وجهي را پشتيباني كند. در تئوري R-tree مي‌تواند تعداد -بعدهاي بالاتر ري نيز پشتيباني كند. در عمل توسعه R-tree‌ -نياز به كار بيشتري دارد.

-

4.11) -بهينه ساز تكويني درخواست چيست؟ (Genetic Query Optimizer)

-

استفاده از GEQO -سرعت بهينه سازي درخواست را هنگاميكه تعداد زيادي جدول را با استفاده از الگوريتم -ژنتيك الحاق مي‌كنيم افزايش مي‌دهد.

-

4.12) -چگونه از عبارات منظم براي جستجو استفاده كنم؟ چگونه جستجويي انجام -دهم كه حساس به متن نباشد؟ چگونه براي يك جستجوي غير حساس به متن از نمايه استفاده -كنم؟

-

براي جستجوي عبارت منظم از عملگر -~‌ استفاده مي‌كنيم. براي جستجوي غير حساس به متن از عملگر -*~ و يا ILIKE‌ استفاده مي‌كنيم.

-

روش ديگر انجام جستجوي غير حساس -به متن در زير نشان داده شده است.

-
    SELECT *
-    FROM tab
-    WHERE lower(col) = 'abc';
-
-

اين از نمايه‌هاي استاندارد -استفاده نمي‌كند. ولي شما مي توانيد با دستور زير يك نمايه ايجاد كنيد و از آن -استفاده كنيد.

-
    CREATE INDEX tabindex ON tab (lower(col));
-
-

4.13) Iچگونه -مي‌توانم در يك درخواست تشخيص دهم كه يك فيلد NULL‌ است؟

-

با استفاده از توابع IS -NULL و IS NOT NULL مي‌توانيم NULL -بودن يك فيلد را تست كنيم.

-

4.14) -تفاوت بين گونه‌هاي مختلف character چيست؟

-
Type            Internal Name   Notes
---------------------------------------------------
-VARCHAR(n)      varchar      اندازه، حداكثر طول را نشان مي دهد بدون اضافه شدن كاراكتر اضافه
-CHAR(n)            bpchar       كاراكترهاي بلانك براي پر شدن طول مشخص شده استفاده مي‌شود
-TEXT                text            حداكثر طول را مشخص نمي‌كند
-BYTEA               bytea         آرايه‌اي از بايت با طول متغير
-"char"               char           يك كاراكتر
-
-

نام داخلي گونه‌ها را در -system catalogue ‌و بعضي از پيغامهاي خطا مي‌توان ديد.

-

چهار گونه اول همگي از نوع -varlena هستند (4 بايت اول روي ديسك طول را مشخص مي‌كند كه -به دنبال آن داده‌ها قرار دارند.)‌بنابراين فضاي واقعي استفاده شده روي ديسك از -اندازه تعريف شده بيشتر است. اما اين گونه‌ها را مي‌توان فشرده كرد كه اينكار باعث -مي‌شود فضاي كمتري روي ديسك اشغال كنند.

-

براي ذخيره رشته‌هاي با طول -متغير(VARCHAR(n‌ -بهترين انتخاب است. در اين گونه حداكثر طول رشته محدود است بر خلاف -text كه هيچ محدوديتي روي حداكثر -اندازه رشته نمي‌گذارد.(در اين گونه حداكثر طول يك رشته يك گيگا بايت خواهد بود)

-

گونه (CHAR(n - Ø¨Ø±Ø§ÙŠ ذخيره داده‌هاي با طول يكسان است.يك گونه‌ي -(CHAR(n -با كاراكترهاي بلانك (خالي) پر مي‌شود تا به طول مشخص شده برسد در -حاليكه گونه VARCHAR -كاراكترها را به همان صورت كه هستند ذخيره مي‌كند. گونه BYTEA -براي ذخيره داده‌هاي باينري است به خصوص داده‌هاي باينتري كه شامل بايت‌هاي -NULL هستند. از نظر كارايي تمام اين گونه‌ها يكسان هستند.

-

4.15.1) -چگونه مي‌توانم يك فيلد سريال يا افزايشي ايجاد كنم؟

-

PostgreSQL از داده‌هاي سريال -پشتيباني مي‌كند. براي ايجاد يك فيلد سريال (براي داشتن يك فيلد منحصر به فرد براي -هر رديف )به روش زير عمل كنيد:

-
    CREATE TABLE person ( 
-        id   SERIAL, 
-        name TEXT 
-    );
-
-

دستور بالا به طور اتوماتيک به -دستور زير تبديل مي‌شود:

-
    CREATE SEQUENCE person_id_seq;
-    CREATE TABLE person ( 
-        id   INT4 NOT NULL DEFAULT nextval('person_id_seq'),
-        name TEXT 
-    );
-
-

براي ديدن اطلاعات بيشتر به -راهنماي دستور create_sequence  Ù…راجعه كنيد. -همچنين مي‌توان از OID‌هر رديف به عنوان يك مقدار منحصر به -فرد استفاده كرد. اما در اين حالت براي dump كردن و -reload‌كردن پايگاه داده بايد دستور pg_dumps‌ -را با گزينه o-‌ اجرا كنيد.

-

4.15.2) -چگونه مي‌توانم مقدار يك درج سريالي را بدانم؟

-

يك روش براي گرفتن مقدار بعدي يك -فيلد سريال استفاده از تابع ()nextval است. -در شبه كُدي كه در ادامه آمده است روش انجام اين كار نشان داده شده -است:

-
    new_id = execute("SELECT nextval('person_id_seq')");
-    execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')");
-
-

با اجرا دستور فوق مقدار جديد را -در متغير new_id نيز خواهيدداشت كه مي‌توانيد آن را در بقيه -درخواست‌هاي نيز استفاده كنيد. توجه داشته باشيد كه نام SEQUENCEيي -كه به طور اتوماتيك ايجاد شده است به صورت table_serialcolumn_seq‌ -خواهد بود. كه در آن -table‌ نام جدول و serialcolumn نام فيلد -سريال جدول مي‌باشد.

-

براي ديدن مقدار نسبت داده شده -به فيلد سريال نيز مي‌توان از تابع () currval -به صورت زير استفاده كرد.

-
    execute("INSERT INTO person (name) VALUES ('Blaise Pascal')");
-    new_id = execute("SELECT currval('person_id_seq')");
-
-

و سرانجام شما مي‌توانيد از -مقدار OID كه خروجي دستور INSERT - Ø§Ø³Øª براي ديدن مقدار پيش فرض استفاده كنيد. هر چند اين روش در همه پلتفرمها قابل -استفاده نيست و ضمن اينكه فيلد oid‌ بعد از عدد 4 ميليارد -دوباره صفر مي‌شود. در زبان perl با استفاده از DBI -و DBD::Pg مقدار oid‌را مي‌توانيد -به شكل زير استخراج كنيد: بعد از اجراي ()st->execute$ -مقدار oid‌ در متغير  sth->pg_oid_status$ -ذخيره خواهد شد.

-

4.15.3) آیا -توابع ()nextval و ()currval منجر -به ایجاد شرایط race برای سایر کاربران می شوند؟

-

خیر، استفاده از این توابع شرایط -race را به وجود نمی آورد.

-

4.15.4) -چرا اعداد سریالی مربوط به تراکنشهای abort شده مجدداً -استفاده نمی شود؟ چرا بین اعداد سریالی یک فاصله خالی ایجاد می شود؟

-

برای بالا بردن امکان اجرای -همزمان تراکنشها، اعداد سریالی به محض اجرای تراکنش به آنها تخصیص می یابد در این -حالت اگر بعضی از تراکنشها abort شوند بین اعداد سریالی -استفاده شده یک فاصله خالی به وجود می آید.

-

4.16) OID و -TID چه هستند؟

-

OID راه حل PostgreSQL -برای داشتن یک شناسه منحصر به فرد برای هر ردیف است. هر ردیف جدیدی که ایجاد می شود -یک OID منحصر به فرد به آن اختصاص می یابد. تمام OIDهایی -که در حین initdb ایجاد می شوند از 16384 کمتر هستند و -OIDهایی بعداً تولید می شود از این عدد بزرگتر خواهد بود. -نکته مهم آن است که OIDها نه تنها در یک جدول شبیه نیستند -بلکه در کل پایگاه داده هیچ دو ردیفی دارای OID یکسان -نخواهد بود.

-

PostgreSQL از OID -در سیستم داخلی خود برای ایجاد ارتباط بین ردیفهای جداول مختلف استفاده می کند. -توصیه می شود که یک ستون از نوع OID برای ذخیره این فیلد در -جدول ایجاد کنید. ساختن یک نمایه برای این فیلد باعث دسترسی سریعتر به آن خواهد شد.

-

تمام پایگاههای داده در -PostgreSQL برای گرفتن OID جدید از یک -ناحیه مرکزی استفاده می کند. ولی اگر بخواهیم OID را به روش -دیگری بگیریم و یا اینکه در حین کپی کردن یک جدول بخواهیم OIDهای -اصلی آن تغییر نکند به روش زیر می توانیم عمل کنیم:

-

 

-
-
        CREATE TABLE new_table(mycol int);
-        SELECT oid AS old_oid, mycol INTO tmp_table FROM old_table;
-        COPY tmp_table TO '/tmp/pgtable';
-        COPY new_table WITH OIDS FROM '/tmp/pgtable';
-        DROP TABLE tmp_table;
-
-
-

OID یک عدد صحیح 4 بایتی است و -بنابراین حداکثر مقدار آن 4 میلیارد خواهد بود و بعد از آن مقدار آن سرریز خواهد -شد.  البته تا کنون برای  کسی  این اتفاق نیفتاده است و تصمیم -گرداندگان PostgreSQL آن است که قبل از آنکه این اتفاق رخ -دهد این مشکل را برطرف کنند.

-

TIDها برای شناسایی محل فیزیکی -یک ردیف بر اساس بلوک و آفست می باشد. TIDها بعد از تغییر -پیدا کردن یک ردیف و یا بازخوانی آن عوض می شوند. TIDها -توسط نمایه ها استفاده می شوند.

-

4.17) -معني بعضي از ترمها و كلماتي كه در PostgreSQL‌ -استفاده مي‌شود چيست؟

-

لیست برخی از ترمها و کلماتی که -استفاده می شوند:

-
    -
  • -

    table, relation, class - :کلاس، رابطه، جدول

  • -

    row, record, tuple چندتایی، - رکورد، ردیف

  • -

    column, field, attribute - صفت، فیلد، ستون

  • -

    retrieve, select انتخاب، - خواندن

  • -

    replace, updateبه روز کردن، - جایگزینی - -

  • -

    append, insert درج، اضافه - کردن

  • -

    OID, serial value - مقدار سریال

  • -

    portal, cursor - -

  • -

    range variable, table name, table alias -

-

یک لیست عمومی از ترمهای مورد -استفاده در پایگاه داده در آدرس  -http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.htm -وجود دارد.

-

4.18) -چرا من خطاي "ERROR: Memory exhausted in AllocSetAlloc" -مي‌گيرم؟

-

این خطا احتمالاً یا به خاطر -تمام شدن حافظه مجازی سیستم شماست و یا اینکه کرنل برای برنامه ها در مورد میزان -استفاده از حافظه مجازی محدودیت اعمال کرده است. قبل از اجرای برنامه اصلی یکی از -دستورات زیر را اجرا کنید.

-
-
    ulimit -d 262144
-    limit datasize 256m
-
-

بسته به نوع شل یکی از این -دستورات ممکن است با موفقیت اجرا شود. با اجرای آن دستور محدودیت حافظه مجازی برای -برنامه ها برداشته شده و با این کار احتمالاً درخواستی که قبلاً خطا می داده است -اجرا خواهد شد.

-

4.19) از كجا -تشخيص دهم كه ويرايش يا نسخه PostgreSQLيي كه من استفاده -مي‌كنم چيست؟

-

با اجرای دستور -()SELECT version

-

4.20) چرا در -حین اجرای عملیات روی large-objectها خطای "invalid -large obj descriptor"به وجود می آید؟

-

شما باید قبل از -شروع دستوراتی که با large-objectها کار می کنند از -BEGIN  و بعد از آنها هم یک END -بگذارید. در حال حاضر PostgreSQL هندل large-objectها -را در زمان نهایی شدن تراکنش (commitشدن) -می بندد. به همین دلیل اولین تلاش برای انجام هر کاری با هندل منجر -به خطای invalid large obj descriptor خواهد شد. -برای جلوگیری از این خطا حتماً باید از یک تراکنش استفاده کنید. -این کار همانطور که قبلاً گفته شد با استفاده از قرار دادن BEGIN -و END در ابتدا و انتهای دستورات انجام می شود.

-

اگر این خطا را در حین استفاده -از یک درایور ODBC دریافت کردید احتمالاً باید این دستور را -اجرا کنید: set auto-commit off

-

4.21) -چگونه يك ستون ايجاد كنم كه مقدار زمان جاري را به عنوان مقدار -پيش‌فرض داشته باشد؟

-

از CURRENT_TIMESTAMP - Ø§Ø³ØªÙØ§Ø¯Ù‡ کنید در مثال زیر نحوه انجام -این کار نشان داده شده است:

-
-
CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
-
-
-
-

4.22) -چرا "زير درخواستهايي" كه از IN استفاده -مي‌كنند كند هستند؟

-

در نسخه های قبل از 7.4 عمل -الحاق زیر درخواست و درخواست اصلی به این صورت انجام می شود که نتایج به دست آمده -از زیر درخواست به صورت ترتیبی برای هر ردیف اعمال می شود. اگر زیردرخواست ردیف های -کمی را به عنوان خروجی برگرداند و درخواست بیرونی ردیف های زیادی را شامل شود -استفاده از IN بهترین روش است در غیر اینصورت بهتر است از -EXISTS استفاده شود

-
-
    SELECT *
-    FROM tab
-    WHERE col IN (SELECT subcol FROM subtab);
-
-

به:

-
-
    SELECT *
-    FROM tab
-    WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col);
-
-

برای اجرای سریع این درخواست -باید برای ستون subcol نمایه ایجاد شده باشد.

-

در نسخه های بعد از 7.4 -IN برای الحاق از همان تکنیک پیچیده مورد استفاده در دستورات -معمولی استفاده می کند و بنابراین استفاده از آن نسبت به EXISTS -ارجحیت دارد.

4.23) -چگونه مي‌توانم يك الحاق خارجي (outer join) انجام دهم؟

-

برای انجام الحاق خارجی به روش -زیر عمل کنید:

-
-
    SELECT *
-    FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
-
-

یا

-
-
    SELECT *
-    FROM t1 LEFT OUTER JOIN t2 USING (col);
-
-
-

درخواستهای بالا t1.col , -t2.col را به هم الحاق می کند و همچنین ردیفهای t1 -که نظیر آنها در t2 نبوده است را نیز برمی گرداند. اگر از -RIGHT استفاده شود نتیجه بر عکس است. یعنی ردیفهای -t2 که نظیر آنها در t1 نباشد را نشان می -دهد و اگر از FULL استفاده شود نتیجه هم شامل ردیفهای -t1 است  و هم شامل ردیفهای t2. -استفاده از کلمه OUTER اختیاری است چرا که این کلمه به طور -ضمنی دستورهای LEFT, RIGHT, FULL وجود دارد.

-

در نسخه های قبلی پایگاه داده می -توانیم الحاق خارجی را به کمک دستورهای UNION, NOT IN شبیه -سازی کنیم. این کار در مثال زیر نشان داده شده است:

-
-
    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) -چگونه مي‌توان درخواستهايي از چند پايگاه داده توليد كرد؟

-

در حال حاضر این کار امکان پذیر -نیست. PostgreSQL فقط امکان درخواست از پایگاه داده ای را -می دهد که در حال حاضر به آن متصل باشید و نمی توان به طور همزمان از دو پایگاه -داده استفاده کرد. البته یک برنامه کاربردی خود می تواند به طور همزمان دو  -پایگاه داده را مورد استفاده قرار داده و نتایج را با هم ترکیب کند ولی نمی تواند -در یک درخواست به هر  دو پایگاه داده رجوع کند.

-

4.25) -چگونه خروجي يك تابع مي‌تواند  چند رديف يا ستون باشد؟

-

در نسخه 7.3 خروجی یک تابع می -تواند چند ردیف یا چند ستون باشد. برای دیدن  اطلاعات بیشتر به سایت زیر -مراجعه کنید:http://techdocs.postgresql.org/guides/SetReturningFunctions - 

4.26) -در توابع PL/PgSQL چرا نمي‌توان با اطمينان -جداول موقت را ايجاد يا حذف كرد؟

-

PL/PgSQL محتوای توابع را ذخیره -(cache) می کند. یک اثر بد جانبی -این کار آن است که اگر در تابع از یک جدول موقت استفاده شود و بعداً آن جدول حذف و -یک جدول جدید به جای آن ایجاد شود، در فراخوانی مجدد  آن تابع، محتوای ذخیره -شده تابع  هنوز به جدول قدیمی اشاره می کند و بنابراین اجرای تابع با اشکال -مواجه می شود. راه حل این مشکل آن است که برای جداول موقت از دستور EXECUTE -استفاده شود که این کار سبب می شود که درخواست برای هر بار اجرا مجدداً پیمایش و -تفسیر شود.

-

4.27) -چه گزينه‌هايي براي تكرار (replication) -وجود دارد؟ -

-

There are several master/slave replication -options available. These allow only the master to make database changes and the -slave can only do database reads. The bottom of -http://gborg.PostgreSQL.org/genpage?replication_research -lists them. A multi-master replication solution is being worked on at -http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php.

-

4.28) -چه گزينه‌هايي براي رمزنگاري وجود دارد؟ -

-
    -
  • -

    contrib/pgcrypto - شامل توابع رمزنگاری زیادی است که می توان از آنها در دستورات SQL - استفاده کرد.

  • -

    برای رمز کردن ارتباط بین - client و server ، پایگاه داده - حتماً گزینه SSL را بر روی پایگاه داده فعال کنیم.

  • -

    در نسخه 7.3 به بعد کلمات - عبور کاربران به طور اتوماتیک به صورت رمز شده ذخیره می شود ولی در نسخه های - قبلی باید گزینه - PASSWORD_ENCRYPTION  Ø¯Ø± فایلpostgresql.conf - فعال کنیم. - -

  • -

    می توان پایگاههای داده را - روی یک فایل سیستم رمزشده نگاهداری کرد

-
- -

Extending PostgreSQL

-

5.1) -من يك تابع نوشته‌ام. چگونه آن را در psql -اجرا كنم؟ چرا با اجراي آن core dump مي‌گيرم؟

-

دلایل مختلفی می تواند باعث بروز -این مشکل شود. اما قبل از همه تابع خود را به صورت جدا تست کنید.

-

5.2) چگونه -مي‌توانم در توليد نوع‌ها و توابع جديد و جالب براي -PostgreSQL‌ همكاري و مشاركت داشته باشم؟

-

کد خود را به گروه پستی - pgsql-hackers  - Ø§Ø±Ø³Ø§Ù„ کنید.

-

5.3)  -چگونه مي‌توانم يك تابع به زبان C بنويسم -كه خروجي آن يك ‌tuple  (چند -تايي) باشد؟

-

در نسخه های 7.3 به بعد یک تابع -می تواند یک جدول را به عنوان خروجی برگرداند. این ویژگی در توابعی که به زبانهای -C و PL/PgSQL نوشته می شوند به طور -کامل وجود دارد. راهنما برنامه نویسان را مطالعه کنید. یک مثال از نحوه برگرداندن -یک جدول به عنوان خروجی در contrib/tablefunc آمده -است.

-

5.4) -من يك فايل منبع را عوض كرده ام چرا در عمليات كامپيل مجدد آن -تغيير ديده نمي‌شود؟

-

Makefile برای فایلهای -include شده وابستگیها را به درستی نشان نمی دهد. برای اطمینان از -اینکه فایلی که عوض کرده اید حتماً دوباره کامپیل می شود دستور make clean -را اجرا کنید. اگر از کامپیلر gcc استفاده می کنید می -توانید از گزینه enable-depend-- در موقع اجرای برنامه -configure استفاده کنید این گزینه باعث می شود که وابستگیها -به طور اتوماتیک تولید شود.

\ No newline at end of file diff --git a/doc/src/FAQ/FAQ_french.html b/doc/src/FAQ/FAQ_french.html deleted file mode 100644 index 12f33422e2..0000000000 --- a/doc/src/FAQ/FAQ_french.html +++ /dev/null @@ -1,1466 +0,0 @@ - - - - - - PostgreSQL FAQ - - - -

Foire Aux Questions (FAQ) pour PostgreSQL

- -

Dernière mise à jour : vendredi 14 novembre 2004 16:32:47

- -

Mainteneur actuel : Bruce Momjian (pgman@candle.pha.pa.us)
-

- -

La plus récente version de ce document est disponible sur http://www.PostgreSQL.org/docs/faqs/FAQ.html.

- -

Les questions spécifiques à la plateforme sont répondues sur http://www.PostgreSQL.org/docs/index.html.

-
- -

Questions générales

- 1.1) Qu'est ce que PostgreSQL ? Comment le prononcer ?
- 1.2) Quelle est la licence de PostgreSQL ?
- 1.3) Sous quels environnements Unix PostgreSQL tourne-t-il ?
- 1.4) Sous quels environnements non-Unix PostgreSQL tourne-t-il ?
- 1.5) Où puis-je me procurer PostgreSQL ?
- 1.6) Où puis-je obtenir du support ?
- 1.7) Quelle est la dernière version ?
- 1.8) Quelle documentation est disponible ?
- 1.9) Comment savoir quels sont les bogues connus ou les fonctionnalités manquantes ?
- 1.10) Comment puis-je apprendre le SQL ?
- 1.11) PostgreSQL est-il compatible an 2000 ?
- 1.12) Comment puis-je rejoindre l'équipe de développement ?
- 1.13) Comment dois-je soumettre un rapport de - bogue ?
- 1.14) Comment PostgreSQL se compare-t'il à d'autres - SGBD ?
- 1.15) Comment puis-je aider financièrement PostgreSQL ?
- - -

Questions sur le client utilisateur

- 2.1) Y a-t-il des pilotes ODBC pour - PostgreSQL ?
- 2.2) Quels outils sont disponibles pour utiliser - PostgreSQL avec des pages Web ?
- 2.3) PostgreSQL a-t-il une interface graphique ?
- 2.4) Quels langages sont disponibles pour - communiquer avec PostgreSQL ?
- - -

Questions administratives

- 3.1) Comment installer PostgreSQL ailleurs que sous /usr/local/pgsql ?
- 3.2) Quand je lance postmaster, j'obtiens un Bad System Call ou un message core dumped. Pourquoi ?
- 3.3) Quand je lance postmaster, j'obtiens des erreurs IpcMemoryCreate. Pourquoi ?
- 3.4) Quand je lance postmaster, j'obtiens des erreurs IpcSemaphoreCreate. Pourquoi ?
- 3.5) Comment contrôler les connexions d'autres machines ?
- 3.6) Comment règler le moteur de la base de données pour de meilleures performances ?
- 3.7) Quelles fonctionalités de déboguage sont disponibles ?
- 3.8) Pourquoi est-ce que j'obtiens des messages Sorry, too many clients quand je me connecte ?
- 3.9) Que contient le répertoire pgsql_tmp ?
- 3.10) Pourquoi ai-je besoin de faire une sauvegarde des bases et de restaurer pour mettre a jour les versions de PostgreSQL ?
- 3.11) Quels matériels dois-je utiliser ?
- - -

Questions fonctionnelles

- 4.1) Quelle est la différence entre curseur binaire - et curseur normal ?
- 4.2) Comment faire un SELECT seulement - sur les premières lignes d'une requête ? Sur une ligne aléatoire ?
- 4.3) Comment obtenir une liste des tables ou - d'autres choses que je vois dans psql ?
- 4.4) Comment supprime-t-on une colonne d'une table, - ou comment change-t-on son type de données ?
- 4.5) Quelle est la taille maximale pour une ligne, - une table et une base de données ?
- 4.6) Combien d'espace disque faut-il pour stocker - les données d'un fichier texte typique ?
- 4.7) Comment puis-je savoir quels index, tables, - bases de données et utilisateurs sont définis ?
- 4.8) Mes requêtes sont lentes ou ne font pas usage - des index. Pourquoi ?
- 4.9) Comment puis-je savoir si l'optimiseur évalue - mes requêtes ?
- 4.10) Qu'est-ce qu'un index R-tree ?
- 4.11) Qu'est-ce que l'optimiseur génétique de - requêtes ?
- 4.12) Comment puis-je réaliser des recherches par des - expressions rationnelles ainsi que des recherches non sensibles à la - casse ? Comment puis-je utiliser un index lors de recherches non - sensibles à la casse ?
- 4.13) Comment puis-je détecter si un champ est - NULL dans une requête ?
- 4.14) Quelle sont les différences entre les nombreux - types de caractères ?
- 4.15.1) Comment puis-je créer un champ série, - c'est-à-dire s'incrémentant automatiquement ?
- 4.15.2) Comment puis-je obtenir la valeur d'un - SERIAL suite à une insertion ?
- 4.15.3) Est-ce que currval() et - nextval() n'amènent pas des problèmes lorsque plusieurs utilisateurs - les lancent en même temps ?
- 4.15.4) Pourquoi mes numéros de séquences ne sont pas - ré-utilisés lors d'une annulation de transaction ? Pourquoi - existe-t'il des trous dans la numérotation de ma colonne séquentielle - (SERIAL) ?
- 4.16) Qu'est-ce qu'un OID? Qu'est-ce qu'un TID ?
- 4.17) A quoi correspond certains termes utilisés avec - PostgreSQL ?
- 4.18) Pourquoi ai-je l'erreur ERROR: - Memory exhausted in AllocSetAlloc() ?
- 4.19) Comment puis-je connaître la version de - PostgreSQL que j'utilise ?
- 4.20) Pourquoi ai-je invalid large obj - descriptor lors d'opérations avec des gros objets ?
- 4.21) Comment puis-je créer une colonne qui aura par - défaut l'heure actuelle comme valeur ?
- 4.22) Pourquoi mes sous-requêtes utilisant - IN sont-elles si lentes ?
- 4.23) Comment puis-je réaliser une jointure - externe ?
- 4.24) Comment puis-je lancer des requêtes utilisant - plusieurs bases de données ??
- 4.25) Comment puis-je renvoyer plusieurs lignes ou - colonnes à partir d'une fonction ?
- 4.26) Pourquoi ne puis-je pas créer/supprimer des - tables temporaires dans les fonctions PL/PgSQL de façon stable ?
- 4.27) Quelles options de cryptage sont - disponibles ?
- -

Etendre PostgreSQL

- 5.1) J'ai écrit une fonction utilisateur. Lorsque je l'exécute avec - psql, pourquoi cela finit-il avec un "dump core" ?
- 5.2) Comment puis-je contribuer avec de nouveaux types et fonctions - pour PostgreSQL ?
- 5.3) Comment puis-je écrire une fonction C pour récupérer une - ligne ?
- 5.4) J'ai modifié un fichier source. Pourquoi la modification - n'est-elle pas visible après la recompilation ?
- -
- -

Questions générales

- -

1.1) Qu'est ce que PostgreSQL ? Comment - le prononcer ?

- -

PostgreSQL se prononce Post-Gres-Q-L. Un fichier audio est - disponible sur http://www.postgresql.org/postgresql.mp3 - pour ceux souhaitant entendre la prononciation.

- -

PostgreSQL est une amélioration du système de gestion de bases - de données POSTGRES (et est toujours quelque fois appelé "Postgres"), - un prototype de recherche de - SGBD de prochaine génération. PostgreSQL garde le - puissant modèle de données et les types de données riches de - POSTGRES, mais remplace le langage de requêtes PostQuel par un - sous-ensemble étendu de SQL. PostgreSQL est gratuit - et les sources complets sont disponibles.

- -

PostgreSQL est écrit par une équipe de développeurs qui sont - tous inscrits à la liste de diffusion de développement de - PostgreSQL. Le coordinateur actuel est Marc G. Fournier (scrappy@PostgreSQL.org et voir - la section 1.6 pour contacter les - développeurs). Cette équipe est responsable de tout le - développement de PostgreSQL. C'est un projet soutenu par une - communauté sans être contrôlé par une société. Pour y contribuer, - voir la FAQ des développeurs sur http://www.postgresql.org/docs/faqs/FAQ_DEV.html.

- -

Les auteurs de PostgreSQL 1.01 étaient Andrew Yu et Jolly Chen. - Beaucoup d'autres personnes ont contribué au portage, aux tests, - au déboguage et à l'amélioration du code. Le code de Postgres - original, duquel PostgreSQL est dérivé, était le fruit de - l'effort de nombreux étudiants diplômés et non diplômés, et de - programmeurs travaillant sous la direction du Professeur Michael - Stonebraker à l'université de Californie, Berkeley.

- -

Le nom original du logiciel à Berkeley était Postgres. Quand le - SQL fut ajouté en 1995, le nom a dû être changé en - Postgres95. Fin 1996, le nom fut changé en PostgreSQL.

- -

1.2) Quelle est la licence de PostgreSQL ?

- -

PostgreSQL est distribué sous la licence suivante :

- -

PostgreSQL Data Base Management System

- -

Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group - Portions Copyright (c) 1994-6 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.

- -

La licence ci-dessus est la licence BSD, une licence open-source - classique.

- -

1.3) Sous quels environnements Unix PostgreSQL tourne-t-il ?

- -

En général, tout environnement compatible Unix moderne devrait - pouvoir faire fonctionner PostgreSQL. Les environnements qui ont été - testés explicitement sont listés dans les instructions - d'installation.

- -

1.4) Sous quels environnements non Unix PostgreSQL fonctionne-t'il ?

- - -

À partir de la version 8.0, PostgreSQL fonctionne nativement sur les - systèmes d'exploitation Microsoft Windows à base NT comme Win2000, WinXP et Win2003. - Un installeur est disponible sur - http://pgfoundry.org/projects/pginstaller.

- -

Il existe aussi un port sur Novell Netware sur - http://forge.novell.com.

- -

1.5) Où puis-je me procurer PostgreSQL ?

- -

Le site FTP anonyme principal de PostgreSQL est ftp://ftp.PostgreSQL.org/pub. - Pour les sites miroirs, voir notre site web principal.

- -

1.6) Où puis-je obtenir du support ?

- -

La liste de diffusion principale est pgsql-general@PostgreSQL.org. - Elle est disponible pour discuter de sujets en rapport avec - PostgreSQL. Pour s'y inscrire, il faut envoyer un courriel avec - les lignes suivantes dans le corps du message (pas dans la ligne - du sujet) :

-
-    subscribe
-    end
-
- -

à pgsql-general-request@PostgreSQL.org.

- -

Il existe aussi un recueil de la liste. Pour s'y inscrire, - envoyez un courriel à pgsql-general-digest-request@PostgreSQL.org - avec dans le corps :

-
-    subscribe
-    end
-
- - Les recueils sont envoyés aux membres de cette liste dès que la - liste principale a reçu 30 Ko de messages. - -

Une liste de diffusion de bogues est disponible. Pour s'y inscrire, - envoyer un courriel à pgsql-bugs-request@PostgreSQL.org - avec dans le corps :

-
-    subscribe
-    end
-
- - Une liste de diffusion pour les développeurs est aussi disponible. Pour s'y - inscrire, envoyez un courriel à pgsql-hackers-request@PostgreSQL.org - avec dans le corps : -
-    subscribe
-    end
-
- -

Vous pouvez trouver d'autres listes et informations sur - PostgreSQL sur le site web de PostgreSQL :

- -
-

http://www.PostgreSQL.org

-
- -

Il y a aussi un canal IRC sur Freenode et EFNet, le canal - #PostgreSQL. Vous pouvez utiliser la commande Unix - irc -c '#PostgreSQL' "$USER" irc.phoenix.net ou - irc -c '#PostgreSQL' "$USER" irc.freenode.net.

- -

Une liste de sociétés pouvant fournir un support commercial - est disponible sur http://techdocs.postgresql.org/companies.php.

- -

1.7) Quelle est la dernière version ?

- -

La dernière version de PostgreSQL est la version 7.4.5.

- -

Nous projetons de sortir une version majeure tous les six à huit - mois.

- -

1.8) Quelle documentation est disponible ?

- -

Plusieurs manuels, pages de manuel ainsi que des petits exemples de - test sont inclus dans la distribution. Voir le répertoire - /doc. Vous pouvez aussi accéder aux manuels en ligne sur http://www.PostgreSQL.org/docs.

- -

Deux livres sur PostgreSQL sont disponibles en ligne sur http://www.PostgreSQL.org/docs/awbook.html - et http://www.commandprompt.com/ppbook/. - Il y a une liste de livres sur PostgreSQL pouvant être achetés sur http://techdocs.PostgreSQL.org/techdocs/bookreviews.php. - Il y a aussi une collection d'articles techniques sur PostgreSQL sur http://techdocs.PostgreSQL.org/.

- -

psql possède des commandes \d pratiques montrant des - informations sur les types, opérateurs, fonctions, aggrégats, etc.

- -

Notre site web contient encore plus de documentations.

- -

1.9) Comment savoir quels sont les bogues connus ou les fonctionnalités manquantes ?

- -

PostgreSQL supporte un sous-ensemble étendu de SQL-92. - Voir notre liste TODO - pour les bogues connus, les fonctionnalités manquantes et les - plans pour le futur.

- -

1.10) Comment puis-je apprendre le SQL ?

- -

Le livre PostgreSQL sur http://www.PostgreSQL.org/docs/awbook.html - enseigne le SQL. Il existe un autre livre PostgreSQL sur http://www.commandprompt.com/ppbook. - Il existe de bons tutoriels sur http://www.intermedia.net/support/sql/sqltut.shtm, - - http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM - et http://sqlcourse.com.

- -

Un autre (en anglais uniquement) "Teach Yourself SQL in 21 Days, Second Edition" - se trouve sur http://members.tripod.com/er4ebus/sql/index.htm

- -

Nombre de nos utilisateurs aiment The Practical SQL Handbook, - Bowman, Judith S., et al., Addison-Wesley. D'autres aiment The - Complete Reference SQL, Groff et al., McGraw-Hill.

- -

1.11) PostgreSQL est-il compatible an 2000 ?

- -

Oui, nous manipulons facilement les dates après et avant l'an 2000.

- -

1.12) Comment puis-je rejoindre l'équipe de développement ?

- -

Tout d'abord, téléchargez les derniers sources et lisez la - documentation pour les développeurs sur notre site web ou bien - dans la distribution. Ensuite, inscrivez-vous aux listes de - diffusion pgsql-hackers et pgsql-patches. Et pour finir, - soumettez des correctifs de grande qualité sur pgsql-patches.

- -

Environ une douzaine de personnes ont des droits de modification - sur l'archive CVS de PostgreSQL. Ils ont chacun - soumis tellement de correctifs de qualité qu'il était devenu - impossible aux développeurs de tenir la cadence et nous avions - confiance dans le qualité des correctifs qu'ils soumettaient.

- -

1.13) Comment dois-je soumettre un rapport de - bogue ?

- -

Merci de visiter la page PostgreSQL BugTool sur http://www.PostgreSQL.org/bugs/bugs.php, - qui donne des indications sur la façon de soumettre un rapport de bogue.

- -

De même, vérifiez notre site ftp ftp://ftp.PostgreSQL.org/pub pour - voir s'il existe une version PostgreSQL plus récente ou des - correctifs.

- -

1.14) Comment PostgreSQL se compare-til à - d'autres SGBD ?

- -

Il y a plusieurs manières de mesurer un logiciel : les fonctionnalités, - les performances, la fiabilité, le support, et le prix.

- -
-
Fonctionnalités
- -
PostgreSQL possède la plupart des fonctionnalités présentes - dans les SGBD commerciaux, comme les - transactions, les requêtes imbriquées, les déclencheurs, - les vues, l'intégrité référentielle par clés étrangères, et le - verrouillage sophistiqué. Nous avons des fonctionnalités qu'ils - n'ont pas, comme les types définis par l'utilisateur, - l'héritage, les règles, et le contrôle de concurrence par - multi-versionnage pour réduire les contentions de verrouillage.
-
-
- -
Performances
- -
PostgreSQL a des performances similaires aux autres bases de - données commerciales et open source. Il est plus rapide pour - certaines opérations, plus lent pour d'autres. Par rapport à - MySQL ou d'autres SGBD plus léger, nous sommes - plus rapides pour de nombreux utilisateurs, des requêtes complexes et - une charge pour les requêtes de lecture/écriture. MySQL est plus rapide - pour des requêtes SELECT simples effectuées par quelques utilisateurs. - Bien sûr, MySQL ne possède aucune des fonctionnalités de la section - Fonctionnalités ci-dessus. PostgreSQL est construit pour la - fiabilité et les fonctionnalités et nous continuons à améliorer les - performances à chaque version. Il y a une page web intéressante - qui compare PostgreSQL à MySQL sur - http://openacs.org/philosophy/why-not-mysql.html. De plus, MySQL - est une société qui distribue son produit via l'open source et requiert - une licence commerciale pour les logiciels propriétaires, donc pas une - communauté de développement open source comme PostgreSQL.
- -
-
- -
Fiabilité
- -
Nous somme conscients qu'un SGBD doit être - fiable ou bien il est inutile. Nous faisons le maximum pour - sortir des versions bien testées, du code stable ne contenant qu'un - minimum de bogues. Chaque version a au moins un mois de tests, - et notre historique de versions montre que nous pouvons - fournir des versions stables et robustes, prêtes pour une - utilisation en environnement de production. Nous pensons que - nous nous comparons favorablement aux autres bases de données - dans ce domaine.
-
-
- -
Support
- -
Nos listes de diffusion offrent un contact avec un large - groupe de développeurs et d'utilisateurs afin d'aider à la - résolution des problèmes rencontrés. Nous ne pouvons garantir - un correctif mais les SGBD commerciaux ne le - garantissent pas toujours non plus. L'accès direct aux - développeurs, à la communauté d'utilisateurs, aux manuels, et - au code source, fait du support pour PostgreSQL un support - supérieur aux autres SGBD. Un support commercial par - incident est disponible pour ceux qui en ont le besoin (voir - la section 1.6 de la FAQ).
-
-
- -
Prix
- -
Nous sommes gratuits pour tous les usages, commerciaux et - non commerciaux. Vous pouvez inclure notre code dans vos - produits sans limitation, exceptées celles citées dans notre - licence de type BSD donnée plus haut.
-
-
-
- -

1.15) Comment puis-je aider financièrement - PostgreSQL ?

- -

PostgreSQL possède une infrastructure de première classe depuis - le début en 1996. Ceci grâce à Marc Fournier, qui a créé et géré - cette infrastructure des années durant.

- -

Une infrastructure de qualité est importante pour un projet - open-source. Cela permet d'empêcher l'éparpillement qui ralentirait - beaucoup l'avancement du projet.

- -

Bien sûr, cette infrastructure n'est pas donnée. Elle requiert - un certain nombre de dépenses mensuelles ou ponctuelles. Si vous - ou votre société peut donner de l'argent pour soutenir cet effort, - merci de consulter la page web http://store.pgsql.com/shopping/ - et de faire une donation.

- -

Bien que la page web mentionne PostgreSQL, Inc, les - contributions sont exclusivement utilisées pour soutenir le - projet PostgreSQL et ne soutiennent aucune société que ce soit. Si - vous le préférez, vous pouvez aussi envoyer un chèque à l'adresse - de contact.

-
- -

De plus, si vous avez une histoire de succès avec PostgreSQL, - merci de la soumettre à notre site d'évangélisation sur - http://advocacy.postgresql.org.

- - - -

Questions sur le client utilisateur

- -

2.1) Existe-t'il des pilotes ODBC pour - PostgreSQL ?

- -

Il y a deux pilotes ODBC disponibles, PsqlODBC - et OpenLink ODBC.

- -

Vous pouvez télécharger PsqlOBDC depuis - http://gborg.postgresql.org/project/psqlodbc/projdisplay.php.

- -

OpenLink ODBC peut être obtenu depuis http://www.openlinksw.com. Il fonctionne - avec leur logiciel client ODBC standard, vous aurez - donc PostgreSQL ODBC sur toutes les plateformes - client qu'ils supportent (Win, Mac, Unix, VMS).

- -

Ils vendront probablement ce produit aux gens qui recherchent - une qualité de support professionnelle mais une version freeware sera - toujours disponible. Merci d'envoyer vos questions à postgres95@openlink.co.uk.

- -

2.2) Quels outils sont disponibles pour utiliser - PostgreSQL avec des pages Web ?

- -

Une bonne introduction aux pages Web adossés à une base de données se - trouve à http://www.webreview.com

- -

Pour l'intégration Web, PHP est une excellente interface. Elle se trouve à http://www.php.net.

- -

Pour les cas complexes, beaucoup utilisent l'interface Perl et CGI.pm ou mod_perl.

- -

2.3) PostgreSQL a-t-il une interface graphique ?

- -

Oui, il y a plusieurs interfaces graphiques disponibles pour PostgreSQL, - dont PgAccess - http://www.pgaccess.org), PgAdmin III (http://www.pgadmin.org), - RHDB Admin (http://sources.redhat.com/rhdb/ - et Rekall ( - http://www.thekompany.com/products/rekall/, propriétaire). Il y a - aussi PhpPgAdmin ( - http://phppgadmin.sourceforge.net/ ), une interface Web pour - PostgreSQL.

- -

Voir http://techdocs.postgresql.org/guides/GUITools pour une liste plus détaillée.

- -

2.4) Quels langages sont disponibles pour - communiquer avec PostgreSQL ?

- -

La plupart des langages de programmation couramment utilisés ont - une interface pour PostgreSQL. Vérifiez la liste des modules de votre - langage.

- -

Les interfaces ci-dessous sont incluses dans la distribution :

- -
    -
  • C (libpq)
  • - -
  • Embedded C (ecpg)
  • - -
  • Java (jdbc)
  • - -
  • Python (PyGreSQL)
  • - -
  • TCL (libpgtcl)
  • - -
-

Interfaces supplémentaires disponibles sur - http://gborg.postgresql.org - dans la section Drivers/Interfaces -

-
- -

Questions Administratives

- -

3.1) Comment installer PostgreSQL ailleurs que sous /usr/local/pgsql ?

- -

Il faut spécifier l'option --prefix lors du lancement de configure.

- -

3.2) Quand je lance postmaster, j'obtiens un Bad System Call ou un message core dumped . Pourquoi ?

- -

Cela peut être dû à une variété de problèmes mais vérifiez d'abord que - vous avez les extensions System V installées pour votre noyau. PostgreSQL - nécessite le support noyau pour la mémoire partagée et les sémaphores.

- -

3.3) Quand je lance postmaster, j'obtiens des erreurs IpcMemoryCreate. Pourquoi ?

- -

Soit vous n'avez pas configuré correctement la mémoire partagée dans - votre noyau, soit vous devez augmenter la mémoire partagée disponible dans - le noyau. Le montant exact dont vous avez besoin dépend de votre - architecture et du nombre de tampons et de processus que vous avez - configuré pour postmaster. Pour la plupart des systèmes avec un - nombre par défaut de tampons et de processus, vous aurez besoin d'un minimum - d'environ 1 Mo. Voir le chapitre Administration - du manuel PostgreSQL pour des informations plus détaillées sur la mémoire partagée et les sémaphores.

- -

3.4) Quand je lance postmaster, j'obtiens des erreurs IpcSemaphoreCreate. Pourquoi ?

- -

Si le message d'erreur est IpcSemaphoreCreate: semget failed (No - space left on device) alors votre noyau n'est pas configuré avec - suffisamment de sémaphores. PostgreSQL a besoin d'un sémaphore par processus - serveur potentiel. Une solution provisoire est de lancer postmaster - avec une plus petite limite sur le nombre de processus serveur. Utilisez l'option - -N avec un paramètre inférieur au choix par défaut de 32. Une - solution permanente est d'augmenter les paramètres - SEMMNS et SEMMNI de votre noyau.

- -

Des sémaphores inopérantes peuvent aussi provoquer des plantages pendant de gros accès à la base de données.

- -

Si le message d'erreur est autre chose, vous n'avez peut-être pas du tout le support des - sémaphores dans votre noyau. Voir le - chapitre Administration - du manuel PostgreSQL pour des informations plus détaillées sur la mémoire partagée et les sémaphores.

- -

3.5) Comment contrôler les connexions d'autres machines ?

- -

Par défaut, PostgreSQL autorise seulement les connexions de la machine - locale en utilisant les sockets de domaine Unix ou les connexions TCP/IP. - D'autres machines ne seront pas capables de se connecter sauf si vous modifiez - listen_addresses dans postgresql.conf et activez une authentification basée - sur l'hôte en modifiant le fichier $PGDATA/pg_hba.conf en accord.

- -

3.6) Comment régler le moteur de la base de données pour de meilleures performances ?

- -

Des index accéléreront les requêtes. La commande - EXPLAIN ANALYZE vous permet de voir comment PostgreSQL traite - votre requête et quels index sont utilisés.

- -

Si vous faites beaucoup d'insertions (instruction INSERT), - envisagez de les faire en une fois en utilisant la commande COPY. Ceci - est plus rapide que des commandes INSERTS individuelles. Deuxièment, - les requêtes qui ne sont pas dans des blocs de transaction BEGIN WORK/COMMIT - sont considérés comme étant dans leur propre transaction. Envisagez de faire - plusieurs instructions dans un seul bloc de transaction. Ceci réduira la - surcharge apportée par les transactions. Aussi, envisagez d'abandonner et - de recréer des index lors de grosses modifications de données.

- -

Il y a plusieurs options d'optimisations. Vous pouvez désactiver - fsync() en lançant postmaster avec l'option -o -F. - Ceci empêchera les fsync()s d'écrire sur disque après toute - transaction.

- -

Vous pouvez utiliser l'option -B de postmaster pour - augmenter le nombre de tampons de mémoire partagée utilisés par les - processus serveurs. Si vous fixez ce paramètre trop haut, - postmaster ne se lancera pas car vous avez dépassé la limite de - votre noyau sur la quantité de mémoire partagée. Chaque tampon fait 8 Ko et - le choix par défaut est de 64 tampons.

- -

Vous pouvez utiliser l'option serveur -S pour augmenter la - quantité maximale de mémoire utilisée par les processus serveurs pour des - tris temporaires. La valeur de -S est mesuré en kilooctets et le - choix par défaut est de 512 (c'est-à-dire 512 Ko).

- -

Vous pouvez utiliser la commande CLUSTER pour regrouper - vos données en tables pour correspondre à un index. Voir la page de manual - CLUSTER pour plus de détails.

- -

3.7) Quelles fonctionalités de déboguage sont disponibles ?

- -

PostgreSQL a plusieurs fonctionalités qui permettent de recueillir des - informations de statut qui peuvent être utile pour des intentions de - déboguage.

- -

D'abord, en lançant configure avec l'option --enable-cassert, - beaucoup d'assert()s surveillent le serveur et arrêtent le programme - quand quelque chose d'inattendu arrive.

- -

Postmaster et postgres ont tous deux plusieurs options de - déboguage de disponible. D'abord, quand vous lancez postmaster, - vérifiez que vous envoyez les sorties standard et d'erreur dans un fichier - de traces comme :

-
-    cd /usr/local/pgsql
-    ./bin/postmaster >server.log 2>&1 &
-
- -

Ceci va créer un fichier server.log dans le répertoire racine de - PostgreSQL. Ce fichier contient des informations utiles sur les problèmes - ou erreurs rencontrés par le serveur. Postmaster dispose d'une - option -d qui permet de rapporter des informations encore plus - détaillées d'être rapportées. L'option -d prend un numéro qui - spécifie le niveau de déboguage. Faites attention au fait que des valeurs - élévées de niveau de déboguage génerent des fichiers de traces volumineux.

- -

Si postmaster ne tourne pas, vous pouvez lancer le serveur - postgres de la ligne de commande et taper votre requête - SQL directement. Ceci est recommandé seulement pour - des fonctions de déboguage. Notez qu'un retour chariot termine la requête, - pas un point-virgule. Si vous compilez avec les symboles de déboguage, vous - pouvez utiliser un débogueur pour voir ce qui se passe. Parce que le serveur - n'a pas été lancé par postmaster, il ne tourne pas dans un environnement - identique et les problèmes d'interaction de verrouillage/serveur ne peuvent - être dupliqués.

- -

Si postmaster est en train de tourner, lancez psql dans - une fenêtre puis trouvez le PID du processus postgres - utilisé par psql. Utilisez un débogueur pour l'attacher au - PID postgres. Vous pouvez mettre un point d'arrêt - dans le débogueur et envoyez des requêtes de psql. Si vous déboguez - le démarrage de postgres, vous pouvez mettre PGOPTIONS="-W n", puis - lancez psql. Ceci va retarder le démarrage de n secondes - pour que vous puissiez attacher un débogueur au processus, fixer des points - d'arrêt et continuer la séquence de démarrage.

- -

Le programme postgres a les options -s, -A et -t - qui peuvent être utile pour des mesures de déboguage et de performance.

- -

Vous pouvez compiler avec les options de performance pour voir quelles - fonctions prennent du temps d'exécution. Les fichiers de gestion du serveur - seront déposés dans le répertoire pgsql/data/base/nom_db. Les - fichiers de gestion clients seront mis dans le répertoire actuel du client. - Linux requiert une compilation avec -DLINUX_PROFILE pour une - meilleure gestion.

- -

3.8) Pourquoi est-ce que j'obtiens des messages Sorry, too many clients quand je me connecte ?

- -

Vous pouvez augmenter la limite de postmaster sur le nombre de - processus serveur concurrents qu'il peut lancer.

- -

La limite par défaut est de 32 processus. Vous pouvez l'augmenter en - relançant postmaster avec une valeur -N appropriée ou - en modifiant postgresql.conf.

- -

Tenez compte du fait que si vous fixez -N plus grand que 32, vous - devez aussi augmenter -B au-dela de sa valeur par défaut 64 ; - -B doit valoir au moins deux fois -N et probablement plus pour - une meilleure performance. Pour de grand nombres de processus serveurs vous - aurez probablement aussi augmenter plusieurs parametres de configuration du - noyau Unix. Les choses a vérifier incluent la taille maximale des blocs de - mémoire partagée, SHMMAX ; le nombre maximal de - sémaphores, SEMMNS et SEMMNI ; le - nombre maximal de processus, NPROC ; le nombre maximal - de processus par utilisateur, MAXUPRC ; et le nombre - maximal de fichiers ouverts, NFILE et NINODE. - La raison pour laquelle PostgreSQL a une limite sur le nombre de processus - serveurs autorisés est pour que votre système ne tombe pas à court de - ressources.

- -

3.9) Que contient le répertoire pgsql_tmp ?

- -

Ce répertoire contient des fichiers temporaires générés par le moteur de - requête. Par exemple, si un tri doit être fait pour satisfaire un - ORDER BY et que ce tri requiert plus de place que le paramètre - -S du serveur n'autorise, alors des fichiers temporaires seront créés - pour contenir les données nécessaires.

- -

Les fichiers temporaires sont d'habitude effacés automatiquement mais - peuvent rester si un serveur s'arrête brutalement pendant un tri. Un arrêt - et un redémarrage de postmaster effacera les fichiers dans ces - répertoires.

- -

3.10) Pourquoi est-ce que j'ai besoin de faire une - sauvegarde des bases et de restaurer pour mettre a jour les versions de - PostgreSQL ?

- -

L'équipe PostgreSQL ne fait que des changements mineurs entre des - versions mineurs, donc mettre à jour de 7.2 vers 7.2.1 ne nécessitera pas - de sauvegarde et de restauration. Par contre, les sorties majeures - (c'est-à-dire de 7.2 vers 7.3) changent souvent le format interne des tables - systèmes et des fichiers de données. Ces modifications sont souvent - complexes alors nous ne gardons pas de compatibilité descendante pour les - fichiers de données. Une sauvegarde exportera les données dans un format - générique qui peut ensuite être chargé dans le nouveau format interne.

- -

Dans les sorties où le format sur disque ne change pas, le script - pg_upgrade peut être utilisé pour mettre à jour sans - sauvegarde/restauration. Les notes de sorties précisent si pg_upgrade - est disponible pour la sortie.

- -

3.11) Quels matériels dois-je utiliser ?

- -

Comme le matériel PC est compatible en grosse partie, les gens ont - tendance à croire que tous les matériels PC sont de même qualité. Ce n'est - pas le cas. La RAM ECC, le SCSI et les cartes-mère de qualité sont plus - fiables et ont de meilleurs performances qu'un matériel moins coûteux. - PostgreSQL fonctionnera sur à peu près tout matériel mais si la fiabilité et - la performance sont importantes pour vous, il est rusé de bien considérer - les options matérielles. Nos listes de diffusion peuvent être utilisées pour - discuter des options matériels.

- -
- -

Questions fonctionnelles

- -

4.1) Quelle est la différence entre curseur binaire - et curseur normal ?

- -

Voir la page DECLARE du manuel pour une description.

- -

4.2) Comment faire un SELECT seulement - sur les premières lignes d'une requête ? Sur une ligne aléatoire ?

- -

Voir la page FETCH du manuel ou utiliser - SELECT ... LIMIT....

- -

Il se peut que l'intégralité de la requête doive être évaluée, - même si vous voulez seulement les premières lignes. Envisagez - d'utiliser une requête avec une clause ORDER - BY. S'il existe un index correspondant à l'ORDER - BY, PostgreSQL peut n'évaluer que les premières lignes, sinon - l'intégralité de la requête peut être évaluée, jusqu'à générer les lignes - désirées.

- -

Pour faire un SELECT sur une ligne aléatoire :

-
-    SELECT colonne
-    FROM table
-    ORDER BY random()
-    LIMIT 1;
-
- -

4.3) Comment obtenir une liste des tables ou - d'autres objets que je vois dans psql ?

- -

Utilisez la commande \dt pour voir les tables dans psql. Pour - une liste complète de commandes à l'intérieur de psql, vous pouvez utiliser - \?. Autrement, vous pouvez lire le code source de psql dans le fichier - pgsql/src/bin/psql/describe.c. Il contient des commandes - SQL qui génèrent le contenu des commandes anti-slash de - psql. Vous pouvez aussi lancer psql avec l'option - -E, afin qu'il imprime les requêtes qu'il utilise pour exécuter - les commandes que vous lui passez. PostgreSQL fournit aussi une interface - d'informations sur le schéma compatible avec SQLi que vous pouvez - interroger des informations sur la base de données.

- -

4.4) Comment supprime-t-on une colonne d'une table, - ou comment change-t-on son type de données ?

- -

La fonction DROP COLUMN a été ajoutée dans la version 7.3 - avec ALTER TABLE DROP COLUMN. Pour les versions précédentes, - vous pouvez faire :

-
-    BEGIN;
-    LOCK TABLE ancienne_table;
-    SELECT ...  -- sélectionnez toutes les colonnes sauf celle à supprimer
-    INTO TABLE nouvelle_table
-    FROM ancienne_table;
-    DROP TABLE ancienne_table;
-    ALTER TABLE nouvelle_table RENAME TO ancienne_table;
-    COMMIT;
-
- -

Pour changer le type de données d'une colonne, faites :

- -
-    BEGIN;
-    ALTER TABLE table ADD COLUMN nouvelle_colonne nouveau_type_de_donnees;
-    UPDATE table SET nouvelle_colonne = CAST(ancienne_colonne AS nouveau_type_de_donnees);
-    ALTER TABLE table DROP COLUMN ancienne_colonne;
-    COMMIT;
-
- -

Après, vous pouvez faire VACUUM FULL tab pour récupérer l'espace - disque utilisé par les lignes expirées.

- -

4.5) Quelle est la taille maximale pour une ligne, - une table, une base de données ?

- -

Les limites sont :

-
-    Taille maximum pour une base de données     illimitée (il existe des bases de 32 To)
-    Taille maximum pour une table               32 To
-    Taille maximum pour une ligne               1,6 To
-    Taille maximum pour un champ                1 Go
-    Nombre maximum de lignes dans une table     illimité
-    Nombre maximum de colonnes dans une table   250-1600, selon le type de colonnes
-    Nombre maximum d'index sur une table        illimité
-
- -

Bien sûr, ces valeurs ne sont pas vraiment illimitée, elles sont limitées - par l'espace disque disponible, ainsi que par l'espace de mémoire et de swap. - Les performances peuvent se dégrader si ces valeurs sont inhabituellement - grandes.

- -

La taille maximum des tables (32 To) ne nécessite pas que le système - d'exploitation supporte les grands fichiers. Les grandes tables sont stockées - sous forme de fichiers multiples de 1 Go, donc les limites de taille du - système de fichier ne sont pas importantes.

- -

La taille maximum des tables et le nombre maximum de colonnes peuvent - être quadriplés, si la taille des blocs par défaut est augmentée à 32 Ko.

- -

4.6) Combien d'espace disque faut-il pour stocker - les données d'un fichier texte typique ?

- -

Une base de données PostgreSQL peut utiliser jusqu'à cinq fois - l'espace nécessaire pour stocker les données d'un fichier texte.

- -

A titre d'exemple, considérez un fichier de 100 000 lignes, comportant - un entier et une chaîne de description sur chaque ligne. Supposons que la - chaîne soit longue en moyenne de 20 octets. Le fichier texte serait de 2,8 Mo. - La taille du fichier d'une base de données PostgreSQL peut être - estimée à 6,4 Mo :

-
-    32 octets: chaque ligne (approximation)
-    24 octets: un champ 'entier' et un champ 'texte'
-   + 4 octets: pointeur vers le tuple sur la page
-   ----------------------------------------
-    60 octets par ligne
-
-   La taille des pages de données dans PostgreSQL est de 8192 octets (8 KO), donc :
-
-   8192 octets par page
-   ----------------------   = 136 lignes par page de base de données (arrondi à l'entier inférieur)
-     60 octets par ligne
-
-   100000 lignes de données
-   -------------------------  =  735 pages de base de données (arrondi à l'entier supérieur)
-      128 lignes par page
-
-735 pages de base de données * 8192 octets par page  =  6 021 120 octets (6,4 Mo)
-
- -

Les index utilisent moins d'espace, mais ils contiennent les données indexées, - ils peuvent donc également être grands.

- -

Les NULL sont stockés sous forme de bitmap, aussi - utilisent-ils très peu d'espace.

- -

4.7) Comment puis-je savoir quels index, tables, - bases de données et utilisateurs sont définis ?

- -

psql dispose de plusieurs commandes commençant par un anti-slash - pour retrouver ces informations. Utilisez \? pour les connaître. Il existe - aussi des tables systèmes, qui commencent par pg_ et qui les - décrivent également. Aussi, psql -l liste toutes les bases de - données.

- -

Essayez également le fichier pgsql/src/tutorial/syscat.source. Il - illustre un grand nombre de commandes SELECT nécessaires pour - récupérer l'information des tables système de la base de données.

- -

4.8) Mes requêtes sont lentes ou ne font pas usage - des index. Pourquoi ?

- -

Les index ne sont pas automatiquement utilisés par chaque requête. Ils - sont utilisés uniquement si la table est plus grande qu'une certaine taille, - et si la requête sélectionne seulement un faible pourcentage des lignes de la - table. Ceci est dû au fait qu'un accès disque aléatoire causé par un parcours - d'index peut être plus lent qu'une simple lecture de la table, ou parcours - séquentiel

- -

Pour déterminer si un index devrait être utilisé, PostgreSQL a besoin - des statistiques de la table. Ces statistiques sont collectées en lançant - VACUUM ANALYZE ou simplement ANALYZE. - Avec les statistiques, l'optimiseur sait combien de lignes se trouvent - dans la table et peut mieux déterminer s'il faut utiliser l'index. - Les statistiques sont également utiles pour déterminer l'ordre optimal - des opérations de jointure. La collecte des statistiques devrait être - effectuée régulièrement lorsque le contenu de la table change.

- -

Les index ne sont normalement pas utilisés pour les clauses ORDER BY - ou pour les jointures. Un parcours séquentiel suivi d'un tri explicite est - habituellement plus rapide qu'un parcours d'index pour une table importante. - Toutefois, LIMIT combiné avec ORDER BY - utilisera souvent un index parce que seulement une petite partie de la table est - renvoyée. En fait, bien que MAX() et MIN() n'utilisent pas les index, - il est possible de retrouver ces valeurs en utilisant un index avec - ORDER BY et LIMIT :

- -
-    SELECT colonne
-    FROM table
-    ORDER BY colonne [ DESC ]
-    LIMIT 1;
-
- -

Si vous pensez que l'optimiseur choisit par erreur un parcours sequentiel, - utilisez SET enable_seqscan TO 'off' et - lancez des tests pour voir si le parcours d'index est effectivement plus rapide.

- -

Lorsque vous utilisez des caractères joker tels que LIKE ou - ~, les index peuvent seulement être utilisés dans certaines circonstances :

-
    -
  • Le début de la chaîne de recherche doit être ancré au départ de la chaîne, c'est-à-dire -
      -
    • Les modèles pour LIKE ne doivent pas commencer par %.
    • -
    • Les modèles d'expression régulière pour ~ doivent commencer par - ^.
    • -
  • -
  • La chaîne de recherche ne peut pas commencer par une classe de caractères, c'est-à-dire - [a-e].
  • -
  • Les recherches sans casse comme ILIKE et - ~* n'utilisent pas les index. Utilisez plutôt les index fonctionnels, - décrit dans la section 4.12.
  • -
  • La locale C par défaut doit être utilisée lors de - initdb.
  • -
- -

Dans les versions antérieures à la 8.0, les indexs ne peuvent souvent - pas être utilisés sauf si les types de données correspondent exactement au - type de la colonne de l'index. Ceci est particulièrement vrai pour les - index de colonnes de type int2, int8 et numeric.

- -

4.9) Comment puis-je savoir si l'optimiseur évalue - mes requêtes ?

- -

Voir la page EXPLAIN du manuel.

- -

4.10) Qu'est-ce qu'un index R-tree ?

- -

Un index R-tree est utilisé pour l'indexation des données spatiales. Un - index de hachage ne permet pas les recherches par plage. Un index B-tree peut - seulement faire des recherches sur une dimension. Les index R-tree - peuvent traiter des données multi-dimensionnelles. Par exemple, si un index - R-tree peut être construit sur un attribut de type point, - le système peut plus efficacement gérer les requêtes du type - "Sélection de tous les points d'un rectangle".

- -

L'article de référence qui décrit le système R-tree original est :

- -

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.

- -

Vous pouvez également trouver ce papier dans le livre de Stonebraker - "Readings in Database Systems".

- -

Les index R-tree intégrés peuvent prendre en charge les polygônes et les boîtes. - En théorie, les R-trees peuvent être étendus à un plus grand nombre de dimensions. - En pratique, l'extension des R-trees requiert pas mal de travail et nous - n'avons pour le moment aucune documentation sur la façon de procéder.

- -

4.11) Qu'est-ce que l'optimiseur génétique de - requêtes ?

- -

Le module GEQO (acronyme de GEnetic Query - Optimizer) accélère l'optimisation des requêtes lors de jointures de - nombreuses tables par un algorithme génétique (GA). Il permet la - gestion des grosses requêtes de jointures en utilisant une recherche non - exhaustive.

- -

4.12) Comment puis-je réaliser des recherches sur des - expressions rationnelles ainsi que des recherches non sensibles à la - casse ? Comment puis-je utiliser un index lors de recherches non - sensibles à la casse ?

- -

L'opérateur ~ réalise des recherches d'expressions rationnelles - et ~* le fait sans tenir compte de la casse. La variante de - LIKE non sensible à la casse est - ILIKE.

- -

Des comparaisons d'égalité non sensibles à la casse sont habituellement - exprimées de cette façon :

-
-    SELECT *
-    FROM table
-    WHERE lower(colonne) = 'abc';
-
- -

Ceci n'utilisera pas un index standard. Néanmoins, si vous créez un index - fonctionnel, celui-ci sera utilisé :

-
-    CREATE INDEX tableindex ON table (lower(colonne));
-
- -

4.13) Comment puis-je détecter si un champ est - NULL dans une requête ?

- -

Il vous suffit de tester la colonne avec IS NULL ou IS - NOT NULL.

- -

4.14) Quelle sont les différences entre les nombreux - types de caractères ?

-
-Type            Nom interne     Notes
---------------------------------------------------
-VARCHAR(n)      varchar         n spécifie la taille maximum, sans remplissage
-CHAR(n)         bpchar          des espaces sont ajoutés pour obtenir la
-                                longueur fixe spécifiée
-TEXT            text            pas de limite supérieure pour la taille
-BYTEA           bytea           tableau d'octets (accepte les octets nuls)
-"char"          char            un caractère
-
- -

Vous verrez le nom interne en examinant les catalogues système et dans - quelques messages d'erreur.

- -

Les quatres premiers types du dessus sont des types "varlena" - (c'est-à-dire que les quatre premiers octets correspondent à la taille, - suivi des données). Donc, l'espace réellement utilisé est légèrement plus - grand que la taille déclarée. Néanmoins, ces types de données sont aussi - sujet à la compression ou à un enregistrement en dehors de la table avec - TOAST, donc l'espace occupé sur disque pourrait aussi être - moindre que ce qu'on pourrait attendre.

- -

VARCHAR(n) est bien mieux pour enregistrer des chaînes de - longueurs variables tout en limitant la taille de cette chaîne. - TEXT est utile pour les chaînes de longueur illimitée, avec - malgré tout un maximum de 1 Go.

- -

CHAR(n) est intéressant pour stocker des chaînes de taille - identique. CHAR(n) complète avec des espaces pour arriver à - la taille spécifiée alors que VARCHAR(n) n'enregistre que les - caractères donnés. BYTEA sert à stocker des données binaires, - particulièrement les données incluant des octets NULL. Tous - les types décrits ici ont des performances similaires.

- -

4.15.1) Comment puis-je créer un champ série, - c'est-à-dire s'incrémentant automatiquement ?

- -

PostgreSQL supporte un type de données SERIAL. Il crée - automatiquement une séquence. Par exemple, - ceci :

-
-    CREATE TABLE personne ( 
-        id  SERIAL, 
-        nom TEXT 
-    );
-
- - est automatiquement traduit en ceci : -
-    CREATE SEQUENCE personne_id_seq;
-    CREATE TABLE personne ( 
-        id  INT4 NOT NULL DEFAULT nextval('personne_id_seq'),
-        nom TEXT 
-    );
-
- - Voir la page man de create_sequence pour plus d'informations - sur les séquences. Vous pouvez aussi utiliser le champ OID de chaque - ligne comme valeur unique. Néanmoins, si vous avez besoin de sauvegarder - puis recharger la base de données, vous devrez utiliser l'option - -o ou l'option COPY WITH OIDS de - pg_dump pour conserver les OIDs. - -

4.15.2) Comment puis-je obtenir la valeur d'un - SERIAL suite à une insertion ?

- -

Une approche pour récupérer la prochaine valeur SERIAL à - partir de l'objet séquence est d'utiliser la fonction nextval() - avant l'insertion et de l'insérer ensuite explicitement. En utilisant - la table d'exemple de la section 4.15.1, un exemple - dans un pseudo-langage ressemblerait à ceci :

-
-    nouvelle_id = execute("SELECT nextval('personne_id_seq')");
-    execute("INSERT INTO personne (id, nom) VALUES (nouvelle_id, 'Blaise Pascal')");
-
- - Vous pourriez ensuite utiliser la nouvelle valeur stockée dans - nouvelle_id avec d'autres requêtes (c'est-à-dire en tant que - clé étrangère de la table personne). Notez que le nom de la - SEQUENCE automatiquement créée sera - <table>_<colonneserial>_seq, où - table et colonneserial sont les noms respectifs de votre table - et de votre colonne SERIAL. - -

Autrement, vous pouvez récupérer la valeur SERIAL affectée - avec la fonction currval() après qu'elle ait été insérée par - défaut, c'est-à-dire,

-
-    execute("INSERT INTO personne (nom) VALUES ('Blaise Pascal')");
-    nouvelle_id = execute("SELECT currval('personne_id_seq')");
-
- - Enfin, vous pouvez utiliser l'OID renvoyé - par l'instruction INSERT pour récupérer la valeur par défaut - bien que cela soit l'appoche la moins portable et la valeur de l'OID se - réinitialisera aux environs de quatre milliards. En Perl, avec DBI et le - module DBD:Pg d'Edmund Mergl, l'ancienne valeur est disponible via - $sth->{pg_oid_status} après un $sth->execute(). - -

4.15.3) Est-ce que currval() et - nextval() n'amènent pas des problèmes lorsque plusieurs utilisateurs - les lancent en même temps ?

- -

Non. currval() renvoie la valeur actuelle affectée par votre - processus, et non pas par tous les utilisateurs.

- -

4.15.4) Pourquoi mes numéros de séquences ne sont pas - ré-utilisés lors d'une annulation de transaction ? Pourquoi - existe-t'il des trous dans la numérotation de ma colonne séquentielle - (SERIAL) ?

- -

Pour améliorer les accès concurrents, les valeurs de séquences sont - données aux transactions qui en ont besoin et ne sont pas bloquées jusqu'à - la fin de la transaction. Ceci crée des trous dans le numérotage pour les - transactions annulées.

- -

4.16) Qu'est-ce qu'un OID ? - Qu'est-ce qu'un TID ?

- -

Les OID sont la réponse de PostgreSQL aux identifiants de - lignes uniques. Chaque ligne créée dans PostgreSQL obtient un - OID unique. Tous les OID générés pendant - initdb sont inférieurs à 16384 (voir include/access/transam.h). - Tous les OID créés par un utilisateur sont supérieurs ou - égaux à ceci. Par défaut, tous ces OID sont uniques non - seulement dans une table ou une base mais unique à l'intérieur d'une - installation PostgreSQL entière.

- -

PostgreSQL utilise les OID dans ses tables système interne - pour lier les lignes entre tables. Ces OID peuvent être - utilisés pour identifier des lignes utilisateurs spécifiques et utilisés dans - des jointures. Il est recommandé que vous utilisiez le type de colonne - OID pour stocker des valeurs OID. - Vous pouvez créer un index sur le champ OID pour un accès - plus rapide.

- -

Les OID sont attribués pour toute ligne d'un endroit - central qui est utilisé par toutes les bases de données. Si vous voulez - changer l'OID en quelque chose d'autre ou si vous voulez - faire une copie de la table avec les OID originaux, il - n'y a pas de raisons pour ne pas le faire :

-
-    CREATE TABLE nouvelle_table (macolonne int);
-    SELECT oid AS ancienne_oid, macolonne INTO table_temporaire FROM ancienne_table;
-    COPY table_temporaire FROM '/tmp/tablepg';
-    COPY nouvelle_table WITH OIDS FROM '/tmp/tablepg';
-    DROP TABLE table_temporaire;
-
- -

Les OID sont stockés en tant qu'entiers de quatre octets - et déborderont à quatre milliards. Personne n'a jamais rapporté un tel cas - et nous avons prévu de retirer la limite avant que cela ne se produise.

- -

Les TIDs sont utilisés pour identifier des lignes - physiques spécifiques avec des valeurs de bloc et décalage. Les - TID changent après que les lignes aient été modifiés ou - rechargés. Ils sont utilisés par des entrées d'index pour pointer vers des - lignes physiques.

- -

4.17) A quoi correspond certains termes utilisés avec - PostgreSQL ?

- -

Une partie du code source et de l'ancienne documentation utilisent des - termes dont l'usage est plus commun. Voici quelques exemples :

- -
    -
  • table, relation, classe
  • -
  • ligne (row), enregistrement (record), tuple
  • -
  • colonne (column), champ (field), attribut
  • -
  • récupère, sélectionne (select)
  • -
  • remplace (replace), met à jour (update)
  • -
  • ajoute (append), insère (insert)
  • -
  • OID, valeur séquentielle (serial value)
  • -
  • portal, curseur
  • -
  • range variable, table name, table alias
  • -
- -

Une liste des termes généraux pour le domaine des bases de données est - disponible sur : http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.html

- -

4.18) Pourquoi ai-je l'erreur ERROR: - Memory exhausted in AllocSetAlloc() ?

- -

Vous manquez probablement de mémoire virtuelle sur votre système ou votre - noyau a une limite assez basse pour certaines ressources. Essayez ceci avant - de lancer postmaster :

-
-    ulimit -d 262144
-    limit datasize 256m
-
- - Suivant votre shell, seul un d'eux pourrait réussir mais cela configurera - d'une façon plus importante la taille du segment de données de votre - processus. Cette commande s'applique au processus actuel et à tous les - processus lancé par celui-ci. Si vous avez des problèmes avec le client - SQL parce que le processus serveur renvoie trop de données, - essayez ça avant de lancer le client. - -

4.19) Comment puis-je connaître la version de - PostgreSQL que j'utilise ?

- -

A partir de psql, tapez SELECT version();

- -

4.20) Pourquoi ai-je invalid large obj - descriptor lors d'opérations sur des gros objects ?

- -

Vous avez besoin de placer BEGIN WORK et COMMIT - autour de chaque utilisateur de gros objets, c'est-à-dire pour entourer - lo_open ... lo_close.

- -

Actuellement, PostgreSQL force cette règle en fermant les gros objets - lors de la transaction. Donc, le premier essai d'opérations sur ces objets, - fonctionnant habituellement (au moins la plupart du temps) aura un - invalid large obj descriptor. Donc le code, auparavant fonctionnel - (au moins la plupart du temps), génèrera maintenant un message d'erreur si - vous n'utilisez pas de transaction.

- -

Si vous utilisez une interface client interface comme - ODBC, vous aurez peut-être besoin de lancer - auto-commit off.

- -

4.21) Comment puis-je créer une colonne qui aura par - défaut l'heure actuelle comme valeur ?

- -

Utilisez CURRENT_TIMESTAMP:

-
-CREATE TABLE test (x int, heuremodif timestamp DEFAULT CURRENT_TIMESTAMP );
-
-
- -

4.22) Pourquoi mes sous-requêtes utilisant - IN sont-elles si lentes ?

- -

Dans les versions précédant la 7.4, les sous-requêtes ont été jointes avec - des jointures externes en parcourant séquentiellement le résultat de la - sous-requête pour chaque ligne de la requête externe. Si la sous-requête - renvoit quelques lignes et que la requête externe en renvoit plein, - IN sera plus rapide. Pour accélérer les autres - requêtes, remplacez IN avec EXISTS :

-
    SELECT *
-    FROM table
-    WHERE colonne IN (SELECT souscolonne FROM soustable);
-
- to: -
    SELECT *
-    FROM table
-    WHERE EXISTS (SELECT souscolonne FROM soustable WHERE souscolonne = colonne);
-
- - Pour que ceci soit rapide, souscolonne doit être une colonne - indexée. - -

A partir de la version 7.4, IN utilise actuellement les mêmes - techniques sophistiquées de jointures comme des requêtes normales et est - préféré à l'utilisation de EXISTS.

- -

4.23) Comment puis-je réaliser une jointure - externe ?

- -

PostgreSQL supporte les jointures externes en utilisant la syntaxe SQL - standard. Voici deux exemples :

-
-    SELECT *
-    FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
-
- or -
-    SELECT *
-    FROM t1 LEFT OUTER JOIN t2 USING (col);
-
- -

Ces requêtes identiques joignent t1.col à t2.col et renvoient toute - colonne non jointe de t1 (celles sans correspondance dans t2). Une jointure - droite (RIGHT join) ajoutera les lignes non jointes de t2. - Une jointure complète (FULL join) renverra les lignes - correspondantes ainsi que les lignes non jointes de t1 et t2. Le mot clé - OUTER est optionnelle et assumé dans le cas de jointure - LEFT, RIGHT et FULL. Les - jointures ordinaires sont appelées des jointures INNER.

- -

Lors des précédentes versions, les jointures externes peuvent être - simulées en utilisant UNION et NOT IN. Par - exemple, lors d'une jointure de tab1 et tab2, la requête - suivante réalise une jointure externe, outer, des deux tables :
-
-

-
-    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) Comment puis-je lancer des requêtes utilisant - plusieurs bases de données ?

- -

Il n'existe pas de moyens de lancer des requêtes sur une autre base que - la courante. Comme PostgreSQL charge des catalogues systèmes spécifiques à - la base de données, sa réaction aux requêtes inter-base de données est - incertaine.

- -

contrib/dblink permet les requêtes entre bases de données en - utilisant des fonctions. Bien sûr un client peut réaliser des connexions - simultanées à plusieurs bases de données et joindre les résultats du côté - client.

- -

4.25) Comment puis-je renvoyer plusieurs lignes ou - colonnes à partir d'une fonction?

- -

A partir de la 7.3, vous pouvez facilement renvoyer plusieurs lignes ou - colonnes à partir d'une fonction, - - http://techdocs.postgresql.org/guides/SetReturningFunctions.

- -

4.26) Pourquoi ne puis-je pas créer/supprimer des - tables temporaires dans les fonctions PL/PgSQL de façon stable ?

-

PL/PgSQL cache le contenu des fonctions et un effet de bord malheureux est - que si une fonction PL/PgSQL accède à une table temporaire, que cette table - est ensuite supprimée et recréée, et que la fonction est appelée de nouveau, - la fonction échouera car le contenu de la fonction cachée pointera toujours - vers l'ancienne table temporaire. La solution revient à utiliser - EXECUTE pour l'accès aux tables temporaires avec PL/PgSQL. - Ceci obligera l'analyse de la requête à chaque fois.

- -

4.27) Quelles options de cryptage sont - disponibles ? -

-
    -
  • contrib/pgcrypto contient de nombreuses fonctions de cryptage, à - utiliser dans des requêtes SQL.
  • -
  • Pour crypter une transmission entre le client et le serveur, le serveur - doit avoir positionné l'option ssl à true dans postgresql.conf, - et un enregistrement applicable host ou hostssl doit - exister dans pg_hba.conf, et le sslmode du client ne doit pas - être désactivée. Notez qu'il est aussi possible d'utiliser un - transport crypté d'une troisième partie, tel que stunnel ou ssh, plutôt que - les connexions SSL natives de PostgreSQL.
  • -
  • Les mots de passe des utilisateurs sont automatiquement cryptés depuis - la version 7.3. Pour les versions précédentes, vous devez activer l'option - PASSWORD_ENCRYPTION dans postgresql.conf.
  • -
  • Le serveur peut fonctionner avec un système de fichiers cryptés.
  • -
- -
- -

Etendre PostgreSQL

- -

5.1) J'ai écrit une fonction utilisateur. Lorsque je l'exécute avec - psql, pourquoi cela finit-il avec un dump core ?

- -

Il peut y avoir plusieurs raisons. Essayez tout d'abord votre fonction utilisateur - dans un programme de test.

- -

5.2) Comment puis-je ajouter de bons nouveaux - types ou fonctions à PostgreSQL ?

- -

Envoyez vos extensions à la liste de diffusion pgsql-hackers, - elles atterriront éventuellement dans le sous-répertoire contrib/.

- -

5.3) Comment faire pour écrire une fonction C - qui renvoie un tuple ?

- -

Dans les versions de PostgreSQL à partir de 7.3, les fonctions qui - renvoient une table sont totalement supportées en C, PL/PgSQL, et SQL. Voir - le Guide du Programmeur pour plus d'information. Un exemple de fonction - renvoyant une table définie en C se trouve à - contrib/tablefunc.

- -

5.4) J'ai modifié un fichier source. Pourquoi - ma recompilation ne voit-elle pas les modifications ?

- -

Les Makefiles n'ont pas les dépendances adéquates pour les - fichiers d'en-tête. Il vous faut faire make clean puis un autre - make. Si vous utilisez GCC, vous pouvez utiliser - l'option --enable-depend de configure pour que le - compilateur calcule les dépendances automatiquement.

- - - diff --git a/doc/src/FAQ/FAQ_german.html b/doc/src/FAQ/FAQ_german.html deleted file mode 100644 index bd3f868956..0000000000 --- a/doc/src/FAQ/FAQ_german.html +++ /dev/null @@ -1,1067 +0,0 @@ - - - - -PostgreSQL FAQ - - - -

Häufig gestellte Fragen (FAQ) zu PostgreSQL

- -

Current maintainer: Bruce Momjian (bruce@momjian.us).

- -

Deutsche Übersetzung von Ian Barwick (barwick@gmail.com).

- -

Letzte Aktualisierung der deutschen Übersetzung: Fr., den 19.10.2007, 17:00 MEZ

- -

Die aktuellste Version dieses Dokuments liegt auf der PostgreSQL-Website:

- -

Übersetzungen dieses Dokuments in anderen Sprachen sowie plattform- - spezifische FAQs können unter - http://www.postgresql.org/docs/faq/ - eingesehen werden.

- -
- -

Allgemeine Fragen

- -1.1) Was ist PostgreSQL? Wie wird es ausgesprochen?
-1.2) Wer kontrolliert PostgreSQL?
-1.3) Welchem Copyright unterliegt PostgreSQL?
-1.4) Auf welchen Plattformen läuft PostgreSQL?
-1.5) Woher bekomme ich PostgreSQL?
-1.6) Was ist die neueste Version von PostgreSQL?
-1.7) Wo bekomme ich Support für PostgreSQL?
-1.8) Wie kann ich einen Fehlerbericht abgeben?
-1.9) Wie erfahre ich von bekannten Bugs oder fehlenden Features?
-1.10) Welche Dokumentation ist für PostgreSQL verfügbar?
-1.11) Wie kann ich SQL lernen?
-1.12) Wie kann ich im Entwicklerteam mitarbeiten?
-1.13) Wie läuft PostgreSQL im Vergleich zu anderen Datenbanksystemen?
-1.14) Kommt PostgreSQL mit den Anpassungen der Sommerzeit in verschiedenen Ländern klar?
- -

Fragen zu Benutzerprogrammen

- -2.1) Welche Schnittstellen gibt es für PostgreSQL?
- -2.2) Wie kann man PostgreSQL mit einer Website nutzen?
-2.3) Hat PostgreSQL eine grafische Benutzerschnittstelle?
- -

Administrative Fragen

- -3.1) Wie installiere ich PostgreSQL woanders als in /usr/local/pgsql?
-3.2) Wie regle ich Zugriffe von anderen Rechnern?
-3.3) Wie kann ich eine bessere Performanz erreichen?
-3.4) Welche Debugging-Funktionen sind für PostgreSQL verfügbar?
-3.5) Ich bekomme die Meldung "Sorry, too many clients", wenn ich eine Verbindung aufzubauen versuche. Warum?
-3.6) Wie wird PostgreSQL aktualisiert?
-3.7) Welche Hardware eignet sich für den Betrieb mit PostgreSQL?
- -

Fragen zum Betrieb

- -4.1) Wie wähle ich per SELECT-Anweisung nur die ersten paar - Zeilen bzw. eine beliebige Zeile in einer Abfrage aus?
-4.2) Wie finde ich heraus, welche Tabellen, Indexe, Datenbanken oder - Benutzer in der Datenbank definiert sind? Wie bekomme ich die von psql verwendeten - Abfragen?
-4.3) Wie ändere ich den Datentyp einer Spalte?
-4.4) Was ist die Maximalgröße für eine Zeile, eine Tabelle, eine Datenbank?
-4.5) Wieviel Plattenplatz wird benötigt, um die Daten aus einer typischen - Textdatei abzuspeichern?
-4.6) Meine Abfragen sind langsam oder benutzen die Indexe nicht. Warum?
-4.7) Auf welche Weise kann ich sehen, wie der Abfrage-Optimierer meine - Abfrage auswertet?
-4.8) Wie verfahre ich bei der Suche mit regulären Ausdrücken und bei einer - Suche, bei der Groß- und Kleinschreibweisen ignoriert werden? Wie verwende - ich einen Index bei solchen Suchabfragen?
-4.9) Wie ermittle ich in einer Abfrage, ob ein Feld NULL ist?
-4.10) Was ist der Unterschied zwischen den verschiedenen CHAR-Typen?
- -4.11.1) Wie erzeuge ich ein serielles Feld mit automatischer Erhöhung des Wertes?
-4.11.2) Wie bekomme ich den Wert einer SERIAL-Sequenz?
-4.11.3) Führt currval() zu einer Race-Condition mit anderen Nutzern?
-4.11.4) Warum werden die Sequenzwerte nach einem Transaktionsabbruch nicht - zurückgesetzt? Warum gibt es Lücken in der Nummerierung meiner - Sequenz-/SERIAL-Spalte?
-4.12) Was ist ein OID? Was ist ein CTID?
-4.13) Wieso bekomme ich den Fehler: "FATAL: Memory exhausted in AllocSetAlloc()"?
-4.14) Wie kann ich feststellen, welche PostgreSQL-Version bei mir läuft?
-4.15) Wie kann ich eine Spalte erstellen, deren Default-Wert immer - die aktuelle Uhrzeit enthalten soll?
-4.16) Wie führe ich eine OUTER JOIN durch?
-4.17) Wie kann ich Abfragen über mehrere Datenbanken hinweg ausführen?
-4.18) Wie kann ich mehrere Zeilen bzw. Spalten von einer Funktion - zurückgeben lassen?
-4.19) Warum bekomme ich eine Fehlermeldung wie
- "relation with OID ##### does not exist" wenn ich temporäre Tabellen in
- PL/PgSQL-Funktionen benutze?
-4.20) Welche Replikationslösungen gibt es?
-4.21) Warum werden die Tabellen- und Spaltennamen in meiner - Abfrage nicht erkannt? Warum werden Großbuchstaben umgewandelt?
- -
- -

Allgemeine Fragen

-

1.1) Was ist PostgreSQL? Wie wird es ausgesprochen?

-

Die (englische) Aussprache ist "Post-Gres-Q-L". Im allgemeinen - Sprachgebrauch hat sich die Kurzform "Postgres" auch durchgesetzt. - (Für diejenigen, die es interessiert: eine MP3-Datei mit der amerikanischen - Aussprache befindet sich hier: - http://www.postgresql.org/files/postgresql.mp3 -

- -

PostgreSQL ist ein objektrelationales Datenbanksystem, das die - Vorzüge von kommerziellen Datenbanksystemen mit zukunftsweisenden - Innovationen kombiniert. PostgreSQL ist freie Software und dessen - kompletter Quellcode ist öffentlich verfügbar.

- -

Die PostgreSQL-Entwicklung wird von einem Team von meist freiwilligen - Entwicklern durchgeführt. - Dieses Team ist für die Gesamtentwicklung von PostgreSQL - verantwortlich. Es handelt sich um ein Gemeinschaftsprojekt, das nicht - von einer bestimmten Firma kontrolliert wird. Lesen Sie die Entwickler-FAQ: - http://www.postgresql.org/docs/faqs.FAQ_DEV.html - wenn Sie an einer Mitarbeit interessiert sind.

- - -

1.2) Wer kontrolliert PostgreSQL?

- -

Falls Sie nach dem Namen eines etwaigen Inhabers bzw. nach einem - allmächtigen Zentralkommittee suchen - sparen Sie sich die Mühe, sowas - existiert gar nicht. Es gibt zwar das "Core Committee" sowie Entwickler, - die CVS-Schreibberechtigung haben, jedoch haben diese Gruppen eher nur eine - administrative Rolle. Das Projekt wird durch die Community gesteuert, die - aus den Entwicklern sowie natürlich auch den Nutzern besteht - jeder - kann daran teilnehmen. (Lesen Sie die Entwickler-FAQ: - http://www.postgresql.org/docs/faqs.FAQ_DEV.html - wenn Sie an der PostgreSQL-Entwicklung teilnehmen möchten).

- -

1.3) Welchem Copyright unterliegt PostgreSQL?

- -

PostgreSQL wird unter der klassischen BSD-Lizenz herausgegeben. Im Grunde - genommen erlaubt diese den Nutzern, beliebig mit dem Code umzugehen, - auch der Weiterverkauf von Binärversionen ohne Quellcode ist erlaubt. - Die einzige Einschränkung besteht darin, dass PostgreSQL auf keinen Fall - für etwaige Probleme mit der Software haftet. Außerdem muß der Copyright- - Text in allen Kopien der Software enthalten sein. Dies ist der Originaltext - der BSD-Lizenz:

- -

PostgreSQL Data Base Management System

- -

Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group - Portions Copyright (c) 1994-6 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.

- -

Es gilt die Copyright-Klausel im Original!

- -

1.4) Auf welchen Plattformen läuft PostgreSQL?

- -

Normalerweise kann PostgreSQL auf jeder modernen UNIX-kompatiblen - Plattform eingesetzt werden. Diejenigen Plattformen, die bei der - jeweiligen Versionsfreigabe getestet wurden, sind in den - Installationsanleitungen aufgelistet.

- -

PostgreSQL läuft auch auf Microsoft NT-basierten Betriebssystemen - wie Windows 2000 SP4, XP und Server 2003. Ein vorgefertigtes Installationspaket - kann von http://pgfoundry.org/projects/pginstaller heruntergeladen werden. - DOS-basierte Windows-Versionen (Win95, Win98, WinMe) können PostgreSQL nur mit - Hilfe der Cygwin-Umgebung ausführen.

- -

Eine Portierung für Novell Netware 6 gibt es unter http://forge.novell.com sowie eine OS/2 (eComStation) version unter - http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2F.

- -

1.5) Woher bekomme ich PostgreSQL?

- -

Per Web-Browser hier: http://www.postgresql.org/ftp/ - und per FTP hier: ftp://ftp.postgresql.org/pub/.

- -

1.6) Was ist die neueste Version von PostgreSQL?

- -

Die neueste Version von PostgreSQL ist 8.2.5.

- -

Die Freigabe einer neuen Hauptversion erfolgt in der Regel jährlich, kleinere - Korrekturversionen alle paar Monaten.

- - -

1.7) Wo bekomme ich Support für PostgreSQL?

- -

Die PostgreSQL-Community bietet Unterstützung per Mailing-Liste. Die Web-Seite - http://www.postgresql.org/community/lists/ bietet einen Überblick. - Die Listen general und bugs bieten einen guten Einstieg.

- -

Eine deutschsprachige Mailing-Liste gibt es hier: - http://archives.postgresql.org/pgsql-de-allgemein/.

- -

Der wichtigsten IRC-Channel ist #postgresql auf Freenode - (irc.freenode.net). Unter UNIX/Linux können Sie mit z.B. - irc -c '#postgresql' "$USER" irc.freenode.net. - daran teilnehmen. Auf Freenode gibt es einen spanischsprachigen Channel - #postgresql-es, einen französischen, #postgresqlfr sowie einen brasilianischen, #postgresql-br . - Es gibt außerdem einen PostgreSQL-Channel bei EFNet.

- -

Eine Liste von Unternehmen, die Support für PostgreSQL auf kommerzieller - Basis leisten, kann unter - http://www.postgresql.org/support/professional_support - eingesehen werden.

- - -

1.8) Wie kann ich einen Fehlerbericht abgeben?

- -

Nutzen Sie das Formular unter http://www.postgresql.org/support/submitbug. - Schauen Sie aber vorher unter ftp://ftp.postgresql.org/pub/ nach, - ob es mittlerweile eine neuere PostgreSQL-Version gibt, in der der Fehler behoben wurde.

- -

Bugs, die über das Formular bzw. eine der Mailing-Listen bekanntgegeben wurden, - erhalten typischerweise einer der folgenden Reaktionen:

- -
    -
  • es ist kein Bug, der Grund wird benannt
  • -
  • es ist ein bereits bekannter Bug, der bereits auf der - TODO-Liste aufgenommen wurde
  • -
  • der Bug wurde in der aktuellen Version behoben
  • - -
  • der Bug wurde bereits behoben, befindet sich aber noch nicht in - einer offiziell veröffentlichten Version
  • -
  • es wird um eingehendere Informationen gebeten, z.B.: -
      -
    • Betriebssystem
    • -
    • PostgreSQL-Version
    • -
    • reproduzierbarer Fallbeispiel
    • -
    • Debugging-Information
    • -
    • Debugger-Backtrace-Ausgabe
    • -
    -
  • -
  • der Bug ist neu. Folgendes könnte passieren: -
      -
    • ein Patch wird erstellt und in der nächsten Version - eingebaut;
    • -
    • oder der Bug kann nicht sofort behoben werden und wird auf die - TODO-Liste gesetzt
    • -
    -
  • -
- -

1.9) Wie erfahre ich von bekannten Bugs oder fehlenden Features?

- -

PostgreSQL unterstützt eine erweiterte Teilmenge von SQL:2003. Siehe - unsere TODO-Liste unter http://www.postgresql.org/docs/faqs.TODO.html für eine Auflistung - der bekannten Bugs, fehlenden Features und zukünftigen Pläne.

- -

Eine Anfrage nach einem neuen Feature führt normalerweise zu einer der - folgenden Antworten:

-
    -
  • das Feature ist bereits auf der TODO-Liste
  • -
  • das Feature ist nicht wünschenswert, weil: -
      -
    • es vorhandene Funktionalität dupliziert, welche bereits dem - SQL-Standard folgt
    • -
    • es würde die Komplexität der Code-Basis erhöhen, ohne nennenswerte - Vorteile zu bringen
    • -
    • es wäre unsicher bzw. unzuverlässig
    • -
    -
  • -
  • das neue Feature wird der TODO-Liste hinzugefügt
  • - -
- -

PostgreSQL verwendet kein Bugtracking-System, da es sich als effizienter - erwiesen hat, E-Mails direkt zu beantworten und die TODO-Liste - aktuell zu halten. In der Praxis werden Bugs sehr schnell beseitigt, und - diejenigen Bugs, die Auswirkungen auf eine große Anzahl von Nutzern haben, - werden meist kurzfristig korrigiert. Der einzige Überblick über alle Änderungen, - Verbesserungen und Korrekturen in einer PostgreSQL-Version befindet sich in - den CVS-Log-Meldungen. - Auch die Release-Notes listen nicht jede Änderung in der Software auf.

- -

1.10) Welche Dokumentation ist für PostgreSQL verfügbar?

- -

PostgreSQL bietet umfangreiche Dokumentation, darunter ein großes - Handbuch, man-Pages und einige kleine Testprogramme. Siehe das /doc- - Verzeichnis. Ausserdem sind alle Handbücher online unter http://www.postgresql.org/docs/ - verfügbar.

- -

Zwei Bücher zu PostgreSQL sind online verfügbar unter - http://www.postgresql.org/docs/books/awbook.html und - http://www.commandprompt.com/ppbook/ .

- -

Eine Liste lieferbarer PostgreSQL-Bücher befindet sich unter - http://www.postgresql.org/docs/books - Diverse technische Artikel befinden sich unter - http://www.postgresql.org/docs/techdocs .

- -

psql hat einige nützliche \d-Befehle, um Informationen über Typen, - Operatoren, Funktionen, Aggregate, usw. zu zeigen.

- -

Die PostgreSQL-Website enthält noch mehr Dokumentation.

- - -

1.11) Wie kann ich SQL lernen?

- -

Die oben erwähnten PostgreSQL-spezifische Bücher bieten einen guten Einstieg. - Viele PostgreSQL-Anwender mögen "The Practical SQL Handbook" (Bowman - et al., Addison Wesley). Andere dagegen mögen "The Complete Reference SQL" - (Groff et al., McGraw-Hill).

- -

Es gibt ausserdem einige nützliche Online-Tutorials:

- - -

1.12) Wie kann ich im Entwicklerteam mitarbeiten?

- -

Lesen Sie in der Entwickler-FAQ unter http://www.postgresql.org/docs/faqs.FAQ_DEV.html nach. - -

1.13) Wie läuft PostgreSQL im Vergleich zu anderen Datenbanksystemen?

- -

Es gibt verschiedene Methoden, Software zu messen: Eigenschaften, - Performanz, Zuverlässigkeit, Support und Preis.

- -
-
Eigenschaften
-

PostgreSQL besitzt die meisten Eigenschaften - wie Transaktionen, - Unterabfragen (Subqueries), Trigger, Views, referenzielle Integrität bei Fremdschlüsseln und verfeinertes Locking - - die bei großen kommerziellen DBMS vorhanden sind. Es bietet außerdem - einige anderen Eigenschaften, die diese nicht immer haben, wie - benutzerbestimmte Typen, Vererbung, Regeln, und die - Multi-Versionen-Steuerung zum Verringern konkurrierender Locks.

-
- -
Performanz
- -

Die Performanz von PostgreSQL ist mit der von kommerziellen - und anderen Open-Source-Datenbanken vergleichbar. In manchen - Bereichen ist es schneller, in anderen langsamer. In der Regel - beträgt der Unterschied +/-10%.

-
- -
Zuverlässigkeit
-

Es ist selbstredend, dass ein DBMS wertlos ist, wenn es nicht - zuverlässig arbeitet. Daher bemühen wir uns, nur streng geprüften und - beständigen Code freizugeben, der nur ein Minimum an Programmfehlern - aufweist. Jede Freigabe hat mindestens einen Monat Betatest-Phase - hinter sich, und unsere Freigabehistorie beweist, dass wir stabile und - solide Versionen freigeben, die im Produktionsbetrieb genutzt werden - können. Wir glauben, dass wir im Vergleich mit anderer - Datenbanksoftware vorteilhaft dastehen.

-
- -
Support
- -

Unsere Mailinglisten bieten die Möglichkeit, gemeinsam mit einer - großen Gruppe von Entwicklern und Benutzern mögliche Probleme - zu lösen. Wir können nicht immer eine Fehlerbehebung - garantieren, kommerzielle DBMS tun dies aber auch nicht. - Der direkte Kontakt zur Entwickler- und Benutzergemeinschaft und der - Zugriff auf die Handbücher und den Quellcode ermöglicht einen - im Vergleich zu anderen DBMS höherwertigeren Support. Es gibt jedoch auch - Anbieter von kommerziellen Support-Leistungen (siehe FAQ-Punkt 1.7).

-
-
Preis
-

PostgreSQL ist frei verfügbar, sowohl für die kommerzielle wie - auch für die nicht-kommerzielle Nutzung. Sie können den PostgreSQL-Code - ohne Einschränkungen (außer denjenigen, die in der oben angegebene - BSD-artigen Lizenz erwähnt werden) in Ihr Produkt integrieren.

-
-
- -

1.14) Kommt PostgreSQL mit den Anpassungen der Sommerzeit in verschiedenen Ländern klar?

- -

Änderungen bei der US-Sommerzeit sind ab PostgreSQL Version 8.0.4 - berücksichtigt. Änderungen in Canada und Western Australia sind ab 8.0.10 - bzw. 8.1.6 berücksichtigt. PostgreSQL-Versionen vor 8.0 nutzen die - Zeitzonendatenbank des Betriebssystems, um die Sommerzeit zu berechnen.

- -

Fragen zu Benutzerprogrammen

- -

2.1) Welche Schnittstellen gibt es für PostgreSQL?

- -

Die PostgreSQL-Installation stellt nur Schnittstellen für C und - Embedded C bereit. Alle weitere Schnittstellen sind unabhängige - Projekte, die einzeln heruntergeladen werden werden müssen. Diese Trennung - ermöglicht individuelle Entwickler-Teams und Entwicklungszyklen für die - jeweiligen Projekte.

- -

Einige Programmiersprachen wie PHP haben eine PostgreSQL- - Schnittstelle bereits eingebaut. Schnittstellen für Sprachen wie Perl, TCL, - Python und viele anderen sind unter http://gborg.postgresql.org - im Bereich Drivers/Interfaces verfügbar sowie per Internet-Suche.

- - -

2.2) Wie kann man PostgreSQL in einer Website nutzen?

-

Eine nette Einführung zu datenbank-gestützten Webseiten kann unter - http://www.webreview.com (engl.) eingesehen werden.

- -

Für die Web-Integration ist PHP eine ausgezeichnete Schnittstelle. - PHP gibt es bei http://www.php.net

- -

Für komplexere Aufgaben bietet sich die Perl-Schnittstelle mit CGI.pm - oder mod_perl.

- -

2.3) Hat PostgreSQL eine grafische Benutzerschnittstelle?

- -

Es gibt eine große Anzahl von GUI-Programmen für PostgreSQL - - sowohl kommerziell als auch Open-Source. Eine ausführliche Liste - befindet sich unter http://www.postgresql.org/docs/techdocs.54 .

- -
- -

Administrative Fragen

- -

3.1) Wie installiere ich PostgreSQL woanders als in /usr/local/pgsql?

- -

Bei der Ausführung von configure die Option --prefix mit dem Zielverzeichnis - angeben.

- -

3.2) Wie regle ich Zugriffe von anderen Rechnern?

- -

PostgreSQL ist standardmäßig so eingestellt, dass Verbindungen nur vom - lokalen Rechner über Unix Domain Sockets bzw. TCP/IP möglich sind. - Verbindungen von anderen Rechnern werden erst dann ermöglicht, wenn Sie - in der Datei postgresql.conf die Einstellung listen_addresses - anpassen, in der Datei $PGDATA/pg_hba.conf host-basierte - Authentifizierung einschalten und den Server neu starten.

- -

3.3) Wie kann ich eine bessere Performanz erreichen?

- -

Es gibt drei große Bereiche, in denen Performanzverbesserungen - erzielt werden können:

- -
-
Abfrageoptimierung
- -
Die Modifizierung von Abfragen kann eine bessere Performanz - erzielen: -
    - -
  • Erstellung von Indexen, einschliesslich partieller Indexe - sowie Expressionsindexe
  • -
  • Einsatz von COPY anstelle multipler INSERT-Anweisungen
  • -
  • Gruppierung von mehreren Abfragen innerhalb einer Transaktion, - um Aufwand beim Abschluss von Transaktionen einzusparen
  • -
  • Einsatz von CLUSTER beim Holen von einer großen Anzahl - von Datenreihen aus einem Index
  • -
  • Einsatz von LIMIT, um eine Untermenge der Abfragen- - ergebnisse zurückzuliefern
  • -
  • Einsatz von vorbereiteten Befehlen (prepared queries)
  • -
  • Einsatz von ANALYZE, um die Datenbankstatistik für - den Abfragenplaner aktuell zu halten
  • -
  • Regelmäßiger Einsatz von VACUUM bzw. pg_autovacuum
  • -
  • Bei großen Datenveränderungen die Löschung von Indexen
  • -

- -
-
- -
Server-Konfiguration
- -
Einige Einstellungen in der Datei postgresql.conf - - wirken auf die Performanz aus. Das Handbuch enthält unter - http://www.postgresql.org/docs/current/static/runtime-config.html eine - komplette Auflistung. Kommentare zu den jeweiligen Einstellungen - gibt es unter - http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html - und http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html. -
-
-
- -
Hardware-Auswahl
- -
Die Auswirkung von Hardware auf Performanz wird unter - http://momjian.us/main/writings/pgsql/hw_performance/index.html und - http://www.powerpostgresql.com/PerfList/ erläutert. -
-
-
- -
- -

3.4) Welche Debugging-Funktionen sind für PostgreSQL verfügbar?

- -

Unter den Optionen für die Server-Konfigurierung gibt es zahlreiche - log_*-Variablen, die die Ausgabe von Abfrage- und Prozessstatistiken - ermöglichen. Diese können für Debugging-Zwecke sowie Performanz-Tests sehr - nützlich sein.

- -

3.5) Ich bekomme die Meldung "Sorry, too many clients", wenn ich eine - Verbindung aufzubauen versuche. Warum?

- -

Ihr System hat die maximal zulässige Anzahl von Datenbankverbindungen - erreicht (Voreinstellung 100). Sie müssen die maximale Anzahl der - gleichzeitig ausführbaren Backend-Prozesse hochsetzen, indem Sie in - postgresql.conf den Wert max_connections ändern und - den Server neustarten.

- - -

3.6) Wie wird PostgreSQL aktualisiert?

- -

Allgemeine Informationen zur Aktualisierung von PostgreSQL gibt es auf der - Seite http://www.postgresql.org/support/versioning. - Detaillierte technische Informationen gibt es auf der Seite - http://www.postgresql.org/docs/current/static/install-upgrading.html -

- - -

3.7) Welche Hardware eignet sich für den Betrieb mit PostgreSQL?

- -

PostgreSQL läuft auf fast jeder Hardware-Kombination. Im PC-Bereich - gibt es allerdings sehr große Abweichungen in der Qualität. Für einen - Arbeitsplatz- oder Entwicklungsrechner mag dies nicht so bedeutend sein, - im Server-Betrieb jedoch lohnt sich auf jeden Fall die Investition - in teurere Bestandteile (Stichwörter ECC-Speicher, SCSI, Hauptplatinen - und Netzteile von namhaften Herstellern). Nutzen Sie unsere Mailing-Listen, - um Hardware-Optionen zu diskutieren. -

- -
- -

Fragen zum Betrieb

- -

4.1) Wie wähle ich per SELECT-Anweisung nur die ersten paar - Zeilen bzw. eine beliebige Zeile in einer Abfrage aus?

- -

Wenn Sie bei der Ausführung der Abfrage die Anzahl der anzufordenden - Reihen bereits kennen, nutzen Sie LIMIT. Wenn die ORDER BY- - Anweisung mit einem Index verwendet wird, ist es möglich, dass die - gesamte Abfrage nicht ausgeführt werden muss. Wenn Sie die Anzahl der - der anzufordenden Reihen nicht kennen, verwenden Sie einen Cursor - und FETCH. - -

Um eine beliebige Zeile auszuwählen, nutzen Sie ORDER BY random():

-
-       SELECT spalte
-         FROM tabelle
-     ORDER BY random()
-        LIMIT 1
-    
- -

4.2) Wie finde ich heraus, welche Tabellen, Indexe, Datenbanken oder - Benutzer in der Datenbank definiert sind? Wie bekomme ich die von psql verwendeten Abfragen?

- -

In psql zeigt der Befehl \dt eine Liste der Datenbanktabellen. Weitere psql-Befehle - lassen sich mit \? anzeigen. Sie können sich die Datei pgsql/src/bin/psql/describe.c - mit dem Quellcode für psql ansehen. Sie enthält die SQL-Abfragen, die die - Backslash-Kommandos (\) ausführen. Sie können psql auch mit der -E - Option starten. Danach gibt psql die Abfragen aus, die es bei der Ausführung der Befehle - benutzt. Außerdem biete PostgreSQL ein SQL-kompatibles INFORMATION SCHEMA, - das Metainformation über die Datenbank zur Verfügung stellt.

- -

Mit psql -l können Sie alle Datenbanken anzeigen lassen.

- -

Die Datei pgsql/src/tutorial/syscat.source enthält außerdem viele SELECT- - Abfragen, mit deren Hilfe man Information über die Systemtabellen erhalten kann.

- -

4.3) Wie ändere ich den Datentyp einer Spalte?

- -

Ab Version 8.0 kann der Datentyp einer Spalte mit ALTER TABLE ALTER COLUMN TYPE - geändert werden, sofern der neue Datentyp die Werte des alten Datentype aufnehmen - kann.

- -

Bei früheren Versionen gehen Sie wie folgt vor:

- -
-       BEGIN;
-       ALTER TABLE tabelle ADD COLUMN neue_spalte neuer_datentyp;
-       UPDATE tabelle SET neue_spalte = CAST(alte_spalte AS neuer_datentyp);
-       ALTER TABLE tabelle DROP COLUMN alte_spalte;
-       COMMIT;
-    
- -

Um den Speicherplatz freizugeben, der von der gelöschten Spalte verwendet - wurde, führen Sie VACUUM FULL aus.

- -

4.4) Was ist die Maximalgröße für eine Zeile, eine Tabelle, eine Datenbank?

- -

Es bestehen folgende Obergrenzen:

-
-    Maximale Größe eine Datenbank?           unbeschränkt (es existieren
-                                               Datenbanken mit 32 TB)
-    Maximale Größe einer Tabelle?            32 TB
-    Maximale Größe einer Zeile?              400 GB
-    Maximale Größe einer Spalte?             1 GB
-    Maximale Anzahl von Zeilen in einer Tabelle?
-                                             unbeschränkt
-    Maximale Anzahl von Spalten in einer Tabelle?
-                                             250-1600 je nach Spaltentyp
-    Maximale Anzahl von Indexen für eine Tabelle?
-                                             unbeschränkt
-
-
-

Selbstverständlich sind dies theoretische Werte, die oft durch die - verfügbaren Platten- und Speicherressourcen beschränkt werden. - Extreme Größen können zu Leistungseinbußen führen.

- -

Die maximale Tabellengröße von 32 TB benötigt keine Large-File-Unterstützung - im Betriebssystem. Große Tabellen werden in Dateien mit einer Größe von - je 1 GB aufgeteilt, wodurch etwaige dateisystem-bedingte Beschränkungen nicht - relevant sind.

- -

Die maximale Tabellengröße und die maximale Anzahl von Spalten können - vervierfacht werden, indem man die Default-Blockgröße auf 32 KB heraufsetzt. - Die Tabellengröße kann auch durch Tabellenpartitionierung vergrößert - werden.

- -

Eine Einschränkung ist, dass Indexe nur auf Spalten erstellt werden - können, die bis etwa 2.000 Zeichen groß sind. Um auf größere Spalten - eine UNIQUE-Constraint setzen zu können, nutzen - Sie einen funktionalen Index mit dem MD5-Hash-Wert der Spalte. - Um innerhalb einer großen, mit Text belegten Spalte suchen zu können, - verwenden Sie einen Volltext-Index.

- -

4.5) Wieviel Plattenplatz wird benötigt, um die Daten aus einer typischen - Textdatei abzuspeichern?

- -

Eine PostgreSQL-Datenbank kann beim Abspeichern einer einfachen Textdatei - bis zu fünfmal mehr Platz gegenüber der eigentlichen Größe der Datei - beanspruchen.

- -

Betrachten wir eine Datei mit 100.000 Zeilen mit einem Integer und einer - Textbeschreibung pro Zeile. Gehen wir davon aus, dass die durchschnittliche - Länge der Textbeschreibung 20 Byte beträgt. Die einfache Datei würde 2,8 MB - groß sein. Die Größe der PostgreSQL-Datenbankdatei, die diese Daten enthält, - liegt ungefähr bei 5,2 MB:

-
-    24 Bytes: jeder Zeilenkopf (ungefähr)
-   +24 Bytes: ein Integer-Feld und ein Textfeld
-   + 4 Bytes: Zeiger auf der Datenseite auf den Tupel
-   -----------------------------------------------
-    52 Bytes pro Zeile
-
-

Die Größe einer Datenseite in PostgreSQL beträgt 8192 Bytes (8 KB), also:

- -
-   8192 Bytes pro Seite
-   ---------------------   =  146 Zeilen pro Seite (abgerundet)
-     52 Bytes pro Zeile
-
-   100.000 Datenzeilen
-   ------------------------  =  685 Datenbankseiten (aufgerundet)
-       158 Zeilen pro Seite
-
-   633 Datenbankseiten * 8192 Bytes pro Seite  =  5,185,536 bytes (5,2 MB)
-
-

Indexe beanspruchen nicht so viel Platz. Da sie jedoch die - Daten beinhalten, die sie indizieren, können auch sie sehr groß werden.

- -

NULL-Werte werden als Bitmaps gespeichert, wodurch sie sehr wenig - Platz in Anspruch nehmen.

- -

4.6) Meine Abfragen sind langsam oder benutzen die Indexe nicht. Warum?

- -

Indexe werden nicht automatisch bei jeder Abfrage verwendet. Indexe werden - nur dann verwendet, wenn die abzufragende Tabelle eine bestimmte Größe - übersteigt, und die Abfrage nur eine kleine Prozentzahl der Tabellenzeilen - abfragt. Der Grund hierfür ist der, dass die durch einen Index verursachten - Festplattenzugriffe manchmal länger dauern würden als ein einfaches Auslesen - aller Tabellenzeilen (sequentieller Scan).

- -

Um festzustellen, ob ein Index verwendet werden soll, braucht PostgreSQL - Statistiken über die Tabelle. Diese Statistiken werden durch die Anweisungen - VACUUM ANALYZE bzw. ANALYZE berechnet. Anhand der Statistiken kennt der - Abfragenoptimierer die Anzahl der Tabellenzeilen und kann besser - entscheiden, ob Indexe verwendet werden sollen. Statistiken sind auch - bei der Ermittlung der optimalen JOIN-Reihenfolgen und - -Methoden wertvoll. Daher sollten diese regelmässig durchgeführt werden, da - sich der Inhalt einer Tabelle ja auch verändert.

- -

Indexe werden normalerweise nicht in ORDER BY-Abfrage oder in JOINs - verwendet. Ein sequentieller Scan mit anschließendem explizitem - Sortiervorgang ist normalerweise schneller als ein Index-Scan einer - großen Tabelle. Jedoch wird bei einer Abfrage, in der LIMIT zusammen mit - ORDER BY verwendet wird, oftmals ein Index verwendet, da nur ein - kleiner Abschnitt der Tabelle zurückgeliefert wird.

- -

Sollte es danach aussehen, also ob der Optimierer irrtümlich einen sequentiellen - Scan ausführt, führen Sie SET enable_seqscan TO 'off' aus und prüfen - Sie, ob die Indexabfrage dadurch scheller geworden ist.

- -

Bei der Nutzung von Wildcard-Operatoren wie LIKE oder ~, können - Indexe nur unter bestimmten Umständen verwendet werden:

-
    - -
  • Das Suchmuster muss sich an Anfang des Strings befinden, d.h.: -
      -
    • LIKE-Suchmuster dürfen nicht mit % anfangen;
    • -
    • ~ (reguläre Ausdrücke) müssen mit ^ anfangen.
    • -
    -
  • -
  • Das Suchmuster darf nicht mit einer Zeichenklasse (z.B. [a-e]) - beginnen.
  • -
  • Suchmuster, die Gross- und Kleinschreibung nicht berücksichtigen (z.B. - ILIKE bzw. ~*), verwenden keine Indexe. Stattdessen können - funktionale Indexe verwendet werden, die im Punkt 4.8 beschrieben werden.
  • -
  • Die Standard-Locale "C" muss während der Datenbank-Initialisierung mit initdb - verwendet worden sein, da andere locales den nächstgrößten Wert nicht - ermitteln können. Es ist allerdings möglich, einen besonderen text_pattern_ops-Index - für solche Fälle zu erstellen.
  • -
-

In Versionen vor 8.0 werden Indexe oft nicht benutzt, wenn die - jeweiligen Datentypen nicht genau übereinstimmen. Dies gilt besonders für - Indexe auf Spalten mit den Datentypen INT2, INT8 und NUMERIC

- - -

4.7) Auf welche Weise kann ich sehen, wie der Abfrage-Optimierer meine - Abfrage auswertet?

- -

Vgl. die EXPLAIN Man-Page.

- -

4.8) Wie verfahre ich bei der Suche mit regulären Ausdrücken und bei einer - Suche, bei der Groß- und Kleinschreibweisen ignoriert werden? Wie verwende - ich einen Index bei solchen Suchabfragen?

- -

Der Operator ~ wendet einen regulären Ausdruck an und ~* wendet ihn an, ohne die Groß- und Kleinschreibung zu beachten. - Ebenso beachtet LIKE die Groß- und Kleinschreibung, und ILIKE nicht.

- -

Gleichheitsvergleiche, die Groß- und Kleinschreibung ignorieren, werden - in der Regel so ausgedruckt:

- -
-      SELECT *
-        FROM tabelle
-       WHERE LOWER(spalte) = 'abc'
-
-

Hier wird kein normaler Index benutzt. Legt man hingegen einen funktionalen - Index an, so wird er auf jeden Fall verwendet:

-
-      CREATE INDEX tabelle_index ON tabelle (LOWER(spalte))
-
-

Falls der obige Index als einen UNIQUE-Index angelegt - wird, können keine Werte in die Spalte eingefügt werden, die sich nur - durch ihre Groß- und Kleinschreibung unterscheiden. Um Fehler zu - vermeiden muß ein CHECK-Constraint oder ein Trigger - eingesetzt werden.

- -

4.9) Wie ermittle ich in einer Abfrage, ob ein Feld NULL ist? - Kann nach der NULL-Belegung sortiert werden?

- -

Testen Sie die Spalte mit IS NULL bzw. IS NOT NULL.

-
-      SELECT *
-        FROM tabelle
-       WHERE spalte IS NULL
-
-

Um die Spalte danach zu sortieren, ob sie mit NULL belegt ist oder nicht, - verwenden Sie die Bedingungen IS NULL bzw. IS NOT NULL - in der ORDER BY-Klausel. Da Bedingungen, die wahr sind, höher - als das Gegenteil sortiert werden, bewirkt die folgende Abfrage, dass die - NULL-Spalten zuerst gelistet werden:

-
-      SELECT *
-        FROM tabelle
-    ORDER BY (spalte IS NOT NULL)
-
-
- -

4.10) Was ist der Unterschied zwischen den verschiedenen CHAR-Typen?

-Typ           interner Name   Bemerkungen
--------------------------------------------------
-VARCHAR(n)    varchar         die Größe legt die Maximallänge fest; kein
-                              Auffüllen mit Leerzeichen
-CHAR(n)       bpchar          mit Leerzeichen gefüllt bis zur angegebenen Länge
-TEXT          text            keine obere Schranke für die Länge
-BYTEA         bytea           Bytearray mit variabler Länge (auch für
-                              '\0'-Bytes geeignet)
-"char"        char            1 Zeichen
-
-

Der interne Name kommt vor allem in den Systemkatalogen und in manchen - Fehlermeldungen vor.

- -

Die ersten vier Typen sind "varlena"-Typen (d.h. die ersten vier - Bytes geben die Länge an, gefolgt von den Daten). Daher ist der tatsächlich - belegte Platz immer etwas mehr als die deklarierte Feldgröße. Allerdings - wird unter Umständen auf diese Datentypen Datenkompression durch das TOAST- - Verfahren angewendet, womit der tatsächlich belegte Platz auch geringer - als erwartet ausfallen kann.

- -

Für die Speicherung von Zeichenketten variabler Länge empfiehlt sich VARCHAR(n). - Die maximale Länge eines VARCHAR(n)-Felds wird bei der Tabellendefinition - festgelegt. TEXT setzt keine Längengrenze, allerdings gibt es - eine systembedingte Obergrenze von 1 GB.

- -

CHAR(n) ist geeignet für die Speicherung von Zeichenketten, die alle - die gleiche Länge haben. Bitte beachten Sie, dass CHAR(n) automatisch Zeichenketten - bis zur definierten Feldlänge mit Leerzeichen ausfüllt, während bei VARCHAR(n) nur - die tatsächlich eingegebene Zeichenkette gespeichert wird.

- -

BYTEA ist für binäre Daten, besonders für Werte, die NULL-Bytes haben.

- -

Alle der hier erwähnten Typen weisen ähnliche Performanzeigenschaften auf.

- -

4.11.1) Wie erzeuge ich ein serielles Feld mit automatischer Erhöhung des - Wert?

- -

PostgreSQL bietet einen SERIAL-Datentyp. Dieser erzeugt automatisch - eine Sequenz auf die angegebene Spalte. Zum Beispiel:

-
-      CREATE TABLE person (
-          id   SERIAL,
-          name TEXT
-      )
- -

wird automatisch in:

-
-      CREATE SEQUENCE person_id_seq;
-      CREATE TABLE person (
-        id   INT4 NOT NULL DEFAULT nextval('person_id_seq'),
-        name TEXT
-      );
-

umgewandelt.

- -

Die create_sequence Man-Page liefert weitere Informationen über Sequenzen.

- -

4.11.2) Wie bekomme ich den Wert einer SERIAL-Sequenz?

- -

Eine Möglichkeit wäre, mit der nextval()-Funktion den nächsten SERIAL-Wert - von dem Sequenzobjekt vor der Auszuführung einer INSERT-Anweisung anzufordern und ihn - dann explizit in die INSERT-Anweisung einzubinden. Anhand der Beispieltabelle in - 4.11.1 könnte dieser Vorgang in einer Pseudosprache so aussehen:

- -
-    new_id = output of execute("SELECT nextval('person_id_seq')");
-    execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')");
-
-

Danach stünde der neue Wert in der Variablen new_id für die Verwendung in - weiteren Abfragen zur Verfügung, zum Beispiel als Fremdschlüssel zur - Tabelle 'person'). Bitte beachten Sie, dass der Name des automatisch - erstellten SEQUENCE-Objektes folgenden Name hat: - «table»_«serialcolumn»_seq - wobei 'table' und 'serialcolumn' die Namen der jeweils betreffenden - Tabelle / Spalte darstellen.

- -

Als weitere Möglichkeit können Sie nach einer INSERT-Anweisung den - automatisch eingefügten SERIAL-Wert mit der currval()-Funktion zurückgeben - lassen:

-
-    execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')");
-    new_id = output of execute("SELECT currval('person_id_seq')");
-
- -

4.11.3) Führt currval() zu einer Race-Condition mit anderen - Nutzern?

- -

Nein. currval() liefert einen Wert zurück, der von Ihrer - Datenbank-Session bestimmt wird, und der anderen Sessionen nicht zur Verfügung - steht.

- -

4.11.4) Warum werden die Sequenzwerte nach einem Transaktionsabbruch nicht - zurückgesetzt? Warum gibt es Lücken in der Nummerierung meiner - Sequenz-/SERIAL-Spalte?

- -

Um die gleichzeitige Abarbeitung von Transaktionen zu verbessern, werden - Sequenzen gerade nicht für andere Transaktionen gesperrt, sondern die - Sequenznummern werden den laufenden Transaktionen sofort zugeteilt. Lücken in - der Sequenznummerierung werden durch abgebrochene Transaktionen verursacht.

- -

4.12) Was ist ein OID? Was ist ein CTID?

- -

Jede Zeile, die in PostgreSQL erzeugt wird, bekommt eine eindeutige OID, - sofern die Tabelle nicht mit der Option WITHOUT OIDS angelegt wurde. - OIDs sind automatisch zugewiesene 4-Byte-Integer, die innerhalb - der gesamten Datenbank einmalig sind. Allerdings laufen sie bei einem Wert von - ungefähr 4 Milliarden über. PostgreSQL verwendet OIDs, um seine - interne Systemtabellen zu verbinden.

- -

Um einmalige Idenfikatoren in Datentabellen zu erstellen, wird allerdings - empfohlen, statt OIDs Werte zu verwenden, die vonSERIAL- - Sequenzen erzeugt werden. SERIAL-Sequenzen sind innerhalb einer - Tabelle einmalig und daher weniger anfällig für Überläufe. Außerdem können - 8-Byte-Sequenzwerte mit SERIAL8 erzeugt werden.

- -

CTIDs werden benutzt, um bestimmte physikalische Zeilen - durch Block und Offset Werte zu identifizieren. CTIDs - verändern sich, sobald Zeilen verändert oder zurückgeladen werden. Sie - werden in Indexeinträgen benutzt um auf die physikalischen Zeilen zu - zeigen.

- -

4.13) Wieso bekomme ich einen Fehler: "ERROR: Memory exhausted in - AllocSetAlloc()"?

- -

Wahrscheinlich gibt es keinen virtuellen Speicher mehr in Ihrem System - oder Ihr Kernel hat niedrige Höchstgrenzen für bestimmte Ressourcen. - Probieren Sie vor dem Start von postmaster folgendes:

-
-      ulimit -d 262144
-      limit datasize 256m
-
-
-

Je nach benutzter Shell wird nur einer dieser Befehle erfolgreich - ausgeführt werden. Auf jedem Fall wird die Grenze des Datensegments für - Prozesse erhöht werden und eventuell die erfolgreiche Ausführung der - Abfrage ermöglichen. Falls Sie ein Problem mit dem SQL-CLient haben, - weil das Backend zu viele Daten zurückliefert, versuchen Sie dies vor dem - Start des SQL-Clients.

- -

4.14) Wie kann ich feststellen, welche PostgreSQL-Version bei mir läuft?

- -

Geben Sie in psql SELECT VERSION(); ein.

- -

4.15) Wie kann ich eine Spalte erstellen, deren Default-Wert immer - die aktuelle Uhrzeit enthalten soll?

- -

Dazu verwenden Sie CURRENT_TIMESTAMP:

-
-      CREATE TABLE test (x INT, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
-
- -

4.16) Wie führe ich eine OUTER JOIN durch?

- -

PostgreSQL unterstützt OUTER JOINs nach dem SQL- - Standardsyntax. Hier zwei Beispiele:

-
-      SELECT *
-        FROM tabelle_1 t1
-             LEFT OUTER JOIN tabelle_2 t2 ON (t1.spalte = t2.spalte)
-
-

bzw.:

-
-      SELECT *
-        FROM tabelle_1 t1
-             LEFT OUTER JOIN tabelle_2 t2 USING (spalte)
-
- -

- Diese identischen Abfragen verknüpfen tabelle_1 mit tabelle_2 über die - Spalte 'spalte' und geben außerdem alle unverknüpften Zeilen in tabelle_1 - (diejenigen, die keine Entsprechung in tabelle_2 haben) zurück. - Ein RIGHT JOIN würde hingegen alle unverknüpften Zeilen in tabelle_2 hinzufügen und - ein FULL JOIN würde alle verknüpften Zeilen sowie jeweils alle - unverknüpften Zeilen aus den beiden Tabellen zurückliefern. Die Angabe von - OUTER ist nicht zwingend und kann in LEFT, RIGHT und FULL-Verknüpfungen - weggelassen werden. Normale Verknüpfungen sind INNER JOINs.

- -

4.17) Wie kann ich Abfragen über mehrere Datenbanken hinweg ausführen?

- -

Es gibt keinen Weg, innerhalb einer Abfrage auf mehr als eine Datenbank - zuzugreifen. Da PostgreSQL datenbank-spezifische Systemkataloge lädt, ist - eine datenbankübergreifende Abfrage nicht möglich.

- -

contrib/dblink ist eine Erweiterung, die datenbankübergreifende Abfragen über - Funktionsaufrufe ermöglicht.

- -

4.18) Wie kann ich mehrere Zeilen bzw. Spalten von einer Funktion - zurückgeben lassen?

- -

Funktionen können mehrere Zeilen und Spalten zurückgeben, vgl.: - http://www.postgresql.org/docs/techdocs.17.

- -

4.19) Warum bekomme ich eine Fehlermeldung wie - "relation with OID ##### does not exist" wenn ich temporäre Tabellen in - PL/PgSQL-Funktionen benutze?

- -

In PostgreSQL-Versionen vor 8.3 verarbeitet PL/PgSQL Funktionen in einer - Cache. Dies hat eine unangenehme Nebenwirkung, nämlich dass wenn eine - PL/PgSQL-Funktion auf eine temporäre Tabelle zugreift, und diese Tabelle - anschließend gelöscht bzw. neu erstellt wird, die Funktion fehlschlagen - wird, da die gecachten Funktionsinhalte noch auf die alte temporäre Tabelle - zeigen. Die Lösung für diese Probleme besteht darin, in der PL/PgSQL- - Funktion mittels EXECUTE auf temporäre Tabellen zuzugreifen. - Dies bewirkt, dass bei jedem Funktionsruf die betreffende Abfrage neu - geparst wird.

- -

Dieses Problem taucht in PostgreSQL 8.3 und späteren Versionen nicht - mehr auf.

- -

4.20) Welche Replikationslösungen gibt es?

- -

Der Begriff "replikation" umfasst mehrere verschiedene Technologien, - jede mit eigenen Vor- und Nachteilen.

- -

Mit "Master/slave"-Replikation werden Änderungen in einer Hauptdatenbank - durchgeführt und an "Sklaven" verteilt, die im Nur-Lese-Modus arbeiten. - Die populärste Lösung für PostgreSQL ist Slony-I.

- -

"Multi-master replication" ermöglicht sowohl lesende als auch schreibende - Zugriffe über mehrere Datenbank-Server hinweg. Allerdings hat diese Art von - Replikation eine negative Auswirkung auf die Performanz durch die - Notwendigkeit, Änderungen zwischen Servern zu synchronisieren. Pgcluster - ist die populärste freie Lösung für PostgreSQL.

- -

Es gibt auch einige kommerzielle und hardware-basierte Replikationslösungen - für verschiedene Arten der Replikation.

- -

4.21) Warum werden die Tabellen- und Spaltennamen in meiner - Abfrage nicht erkannt? Warum werden Großbuchstaben umgewandelt?

- -

Die häufigste Ursache ist die Verwendung von Gänsefüßchen - bei der Anlegung von Tabellen, z.B.:

-
-       CREATE TABLE "Tabelle"
-                   ("SPALTE1" INT)
-
-

Dadurch werden Tabellen- und Spaltennamen (sog. Identifikatoren) - in genau der Schreibweise gespeichert (vgl. - Dokumentation), was dazu führt, dass man sie danach immer - in Gänsefüßchen angeben muss. Im obigen Beispiel muss man also immer - etwa SELECT * FROM "Tabelle" verwenden. Um - dieses Problem zu vermeiden, müssen Sie immer eines der folgenden - Punkte beachten:

- -
    -
  • bei der Tabellenanlegung keine Gänsefüßchen verwenden;
  • -
  • in Identifikatoren nur Kleinschreibung verwenden;
  • -
  • immer Identifikatoren mit Gänsefüßchen versehen
  • -
- -
- -

Anmerkungen des Übersetzers

- -

Die englische Vorlage dieser FAQ wird ständig überarbeitet. Daher liegt - die Übersetzung nicht immer auf dem aktuellsten Stand.

- -

Die aktuellste Version der deutschen Übersetzung befindet sich immer unter - http://sql-info.de/de/postgresql/FAQ_german.html. - Diese "Arbeitsversion" enthält eventuell Änderungen, die noch nicht auf der - PostgreSQL-Website eingebunden worden sind.

- -

Über Verbesserungshinweise und Korrekturvorschläge sowie Verständnisfragen - zum Inhalt der FAQ freue ich mich. Ich nehme auch allgemeine Fragen zu PostgreSQL gerne - entgegen, verweise jedoch auf die Mailing-Listen als schnelle und zuverlässige - Anlaufstellen.

- - diff --git a/doc/src/FAQ/FAQ_hungarian.html b/doc/src/FAQ/FAQ_hungarian.html deleted file mode 100644 index af03d0cbbc..0000000000 --- a/doc/src/FAQ/FAQ_hungarian.html +++ /dev/null @@ -1,1668 +0,0 @@ - - - - - PostgreSQL GYIK - - -
-
-

PostgreSQL GyIK

-
-
-
-
Utolsó módosítás dátuma: 2005 május 9.
-
Fordítás aktualizálása: 2005 június
-

-A GyIK karbantartója: Bruce Momjian (pgman@candle.pha.pa.us)
-
Fordító: Hornyák László
(laszlo.hornyak.nospam@gmail.com)
-

-A legfrissebb verzió itt érhetõ el (angol):
-
http://www.PostgreSQL.org/docs/faq-english.html.
-

-Legfrissebb magyar nyelvû verzió:
-
http://hackers.forgeahead.hu/space/PostgreSQL/GYIK
-

-Platform specifikus kérdések:
-
http://www.PostgreSQL.org/users-lounge/docs/faq.html.
-
-
-

Általános kérdések

-
-1.1 Mi a PostgreSQL? Hogy kell kimondani?
-1.2 Mik a PostgreSQL felhasználási -feltételei?
-1.3 Milyen UNIX operációs -rendszereken fut PostgreSQL?
-1.4 Milyen nem UNIX operációs -rendszerek elérhetõek?
-1.5 Hogyan tudok PostgreSQL-t szerezni?
-1.6 Hogyan kapok -terméktámogatást?
-1.7 Melyik a legfrissebb kiadás?
-1.8 Milyen dokumentáció áll -rendelkezésre?
-1.9 Hogyan találok információt -hibákról vagy hiányzó -funkcionalításról?
-1.10 Hogy tanuljam meg az SQL nyelvet?
-1.11 A PostgreSQL 2000. év kompatibilis?
-1.12 Hogyan lehet csatlakozni a fejlesztõ -csapathoz?
-1.13 Hogyan küldjek hibajelentést?
-1.14 Milyen a PostgreSQL más DBMS-ekkel -összehasonlítva?
-1.15 Hogyan tudom üzletileg segiteni a -PostgreSQL-t?
-1.16 Ki irányítja a PostgreSQL-t?
-
-
-

Felhasználói kliens kérdések

-
-
-2.1 Van ODBC meghajtó PostgreSQL-hez?
-2.2 Milyen eszközök állnak -rendelkezésre PostgreSQL Web fejlesztésekhez?
-2.3 Van a PostgreSQL-hez grafikus -felhasználói felület ? Riport generátor? -Beágyazott lekérdezõ nyelv felület?
-2.4 Milyen programozási nyelvekkel lehet -elérni a PostgreSQL szervert?
-
-
-

Adminisztrációs kérdések

-
-
-3.1 Hogyan tudom a PostgreSQL-t /usr/local/pgsql --tõl eltérõ helyre installálni?
-3.2 AMikor elindítom a postmaster-t, egy -"Bad System Call"-t vagy core dump-ot kapok. Miért?
-3.3 Amikor megpróbálom inditani a -postmaster-t, "IpcMemoryCreate" hibákat kapok. Miért?
-3.4 Amikor megpróbálom inditani a -postmaster-t, "IpcSemaphoreCreate" hibákat kapok. Miért?
-3.5 Hogyan tudom kontrollálni a más -gépekrõl érkezõ kapcsolat -kéréseket?
-3.6 Hogyan tudom nagyobb -teljesítményre hangolni az -adatbázisomat?
-3.7 Milyen hibakeresõ -lehetõségek -érhetõek el?
-3.8 Miért kapok "Sorry, too many clients" -hibát -csatlakozásnál?
-3.9 Mi van pgsql_tmp könyvtárban?
-3.10 Miért kell dumpolni és -újratölteni -PostgreSQL kiadás váltásánál?
-
-
-

Mûködtetési kérdések

-
-
-4.1 Mi a különbség a bináris -és a -normál kurzorok között?
-4.2 Hogyan tudom select-elni a -lekérdezés elsõ -pár sorát?
-4.3 Hogy tudom kilistázni a -táblákat vagy -más dolgokat a PostgreSQL-ben?
-4.4 Hogyan tudok eltávolítani egy -oszlopot egy -táblából?
-4.5 Mi a maximális mérete egy sornak, -egy -táblának vagy egy adatbázisnak?
-4.6 Mekkora adatbázis lemez terület -szükséges -egy tipikus szöveg állomány -tárolásához?
-4.7 Hogy tudhatom meg milyen táblák, -indexek, -adatbázisok vagy felhasználók vannak -definiálva?
-4.8 A lekérdezéseim lassúak, -vagy nem -használják az indexeket. Miért?
-4.9 Hogy tudom ellenõrizni, hogy -optimalizálta a -lekérdezés optimalizáló a -lekérdezésem?
-4.10 Mi az R-tree index?
-4.11 Mi a Genetic Query Optimizer?
-4.12 Hogyan tudok regexp keresést és -case-insensitive -regexp keresést használni? Hogyan tudok indexet -használni case-insensitive kereséshez?
-4.13 Hogyan tudom észlelni egy -lekérdezésban, ha -egy mezõ NULL?
-4.14 Mi a különbség a -különbözõ -karaktertípusok között?
-4.15.1 Hogyan tudok létrehozni -automatikusan -növekvõ értékû mezõt?
-4.15.2 Hogyan kaphatom meg egy SERIAL -beszúrás -értékét?
-4.15.3 A currval() és a nextval() nem -teremt holtpont -veszélyes helyzetet a felhasználók -között?
-4.15.4 Miért nem -használódnak fel újra a -sequence számok tranzakció abort esetén? -Miért vannak problémák a serial oszlopok -számozásával?
-4.16 Mi a OID? Mi a TID?
-4.17 Mi a PostgreSQL-ben használt -kifejezések -jelentése?
-4.18 Miért kapom ezt a hibát: "ERROR: -Memory exhausted -in AllocSetAlloc()"?
-4.19 Hogyan tudhatom meg PostgreSQL, milyen -verziót futtatok?
-4.20 Miért kapok "invalid large obj -descriptor" hibát -nagy objektumok kezelésénél?
-4.21 Hogy hozhatok létre olyan oszlopot, -aminek -alapértelmezett érétke a jelenlegi idõ?
-4.22 Miért olyan lassúak az -al-lekérdezéseim IN-nel?
-4.23 Hogyan tudok outer join-t végrehajtani?
-4.24 Hogyan tudok több adatbázison -végrehajtani -lekérdezést?
-4.25 Hogy tudok több soros vagy oszlopos -eredményt -visszaadni egy funkcióból?
-4.26 Miért nem tudom megbizhatóan -létrehozni -és törölni az átmeneti táblákat a -PL/pgSQL funkciókban?
-4.27 Milyen replikációs -lehetõségek vannak?
-4.28 Milyen kódolási -lehetõségek vannak?
-
-
-

A PostgreSQL kiterjesztése

-
-
-5.1) Írtam egy felhasználói -funkciót. -Miért core dumpol az adatbázis amikor használom?
-5.2) Hogyan lehet új adattípusokat -és -funkciókat hozzáadni a PostgreSQL -disztribúcióhoz?
-5.3) Hogyan lehet olyan C funkciót -írni, ami Tuple-t ad -vissza? (több soros több oszlopos eredmények)
-5.4) Megváltoztattam egy forrás -állományt. -Miért nem változik a bináris -újrafordítás után?
-
-

Általános -kérdések

-
-1.1 Mi a -PostgreSQL? Hogy kell kimondani?
-

Így ejstd ki: Post-Gres-Q-L.

-

(Vagy talán inkább töltsd le a kis mp3-at a -PostgreSQL homepage-rõl)

-

A PostgreSQL a POSTGRES adatbázis management rendszer egy -kiegészítése, ami egy következõ -generációs DBMS kutatási prototípus. -Megtartja a POSTGRES adatmodellét és gazdag -adattípus választékát, de a PostQuel -lekérdezõ nyelvet az SQL egy kiterjesztett -verziójával helyettesíti. A PostgreSQL szabad -és a teljes forráskód -hozzáférhetõ.

-

A PostgreSQL fejlesztését egy csapat végzi, -amelynek minden tagja megtalálható a PostgreSQL -fejlesztõi levelezési listán. A jelenlegi -koordinátor -Marc G. Fournier (scrappyp@PostgreSQL.org). Ez a csapat felelõs -minden fejlesztésért. <>A PostgreSQL 1.01 -alkotói -Andrew Yu és Jolly Chen voltak. Sokan járultak -hozzá portolással, teszteléssel, -hibakereséssel és fejlesztéssel. Az eredeti -Postgres kód, amibõl a PostgreSQL származik -Michael Stonebraker professzor irányítása alatt -fejlesztettek az egyetem programozói, tanulói és -végzett tanulói. <>

-

A szoftver eredeti neve Postgres volt. Amikor SQL -funkcionalítással egészítették ki -1995-ben, a nevét Postgres95-re változtatták. 1996 -végén kapta mai nevét.

-
- 1.2 Mik a -PostgreSQL felhasználási -feltételei?
-
-
   Az eredeti angol copyright szöveg: 
-
   -------------------- 
-
   PostgreSQL is subject to the following COPYRIGHT:
-

PostgreSQL Data Base Management System
-

Portions copyright (c) 1996-2002, PostgreSQL Global Development Group
-
   Portions Copyright (c) 1994-6 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.
-
   --------------------
-


-

-Ami nagyon leegyszerûsítve azt jelenti, hogy jogod van -használni a szoftvert mindenféle -ellenszolgáltatás (pénz, stb) nélkül, -a forrás kódot módosíthatod, és -továbbadhatod, DE semmilyen, a szoftver -használatából következõ -károsodásért nem vállal garanciát a -fejlesztõ. A fenti a BSD licensz, egy klasszikus -nyilt-forráskód licensz. Nem tartalmaz -megszorításokat arra, hogy a forráskódot -hogyan használod fel. -

Kedveljük ezt a licensz formát és nem áll -szándékunkban megváltoztatni.

- 1.3 -Milyen UNIX operációs -rendszereken fut PostgreSQL?
-

Általában minden UNIX-kompatibilis -operációs rendszer képes arra hogy futtassa a -PostgreSQL-t. Azokat a platformokat, amiken tesztelték a -kiadást -megtalálhatod a installációs -utasítások között.

- 1.4 -Milyen nem UNIX operációs -rendszerek elérhetõek?
-
-

Kliens
-

-

A libpq C függvénykönyvtárat, a psql-t -és más felületeket le lehet úgy -fordítani, hogy fussanak MS Windows operációs -rendszereken. Ebben az esetben a kliens MS Windows-on fut és -TCP/IP segítségével kommunikál a Unixon -futó szerverrel. A "win32.mak" állomány a -kiadás része, ennek segítségével -lehet Win32 platformokra lefordítani a libpq-t és a -psql-t. A PostgreSQL ODBC kliensekkel is képes -kommunikálni.

-

-Szerver

-<>Az adatbázis szerver Cygwin -segítségével -fut Windows NT és Win2k rendszereken. További -információ -található a pgsql/doc/FAQ_MSWIN állományban -és a MS Windows FAQ-ban a következõ helyen: http://www.PostgreSQL.org/docs/faq-mswin.html.  -Natív MS Windows NT/2000/XP portok jelenleg fejlesztés -alatt állnak.
-
- 1.5 Hogyan -tudok PostgreSQL-t szerezni?
-

Az elsõdleges anonim ftp oldal: ftp://ftp.PostgreSQL.org/pub.

-

A tükör oldalak listája megtalálható -a -fõ weboldalunkon.

- 1.6 Hogyan -kapok -terméktámogatást?
-
-

Az elsõdleges lista a pgsql-general@postgresql.org. -Ez -használható a PostgreSQL-lel kapcsolatos -párbeszédekre. Ha fel -szeretnél íratkozni, küldj egy levelet a -következõ tartalommal (nem -tárggyal) a -pgsql-general-request@postgresql.org címre:

-
-subscribe
-
-end 
-
-Van egy hibákkal kapcsolatos levelezési lista is: -pgsql-bugs-request@PostgreSQL.org a következõ tartalommal:
-
-
-subscribe
-
-end
-
-

A fejlesztői levelezési lista: -pgsql-hackers-request@PostgreSQL.org a következõ -tartalommal:

-
-subscribe
-
-end
-
-Egyéb levelezési listák -találhatóak -a weboldalunkon: http://www.PostgreSQL.org -

Van egy IRC csatorna is #PostgreSQL -néven ahol felteheted -kérédseid. A következõ unix paranccsal -csatlakozhatsz: -

-

irc -c '#PostgreSQL' "$USER" irc.phoenix.net.

-

-A kereskedelmi terméktámogatást -nyújtó cégek listája elérhetö -itt: -http://www.PostgreSQL.org/users-lounge/commercial-support.html
-

-

Magyar nyelvű levelezési lista nincs, de ha tudok segiteni a -fenit e-mail cimemen elérhető vagyok.

- 1.7 Melyik -a legfrissebb kiadás?
-

A legfrissebb PostgreSQL kiadás a 8.0.

-

A tervek szerint minden évben lesz egy nagyobb -fejlesztéseket tartalmazó kiadás, míg a -kisebb fejlesztéseket néhány havonta adjuk ki.
-

- 1.8 Milyen -dokumentáció áll -rendelkezésre?
-

Számos kézikönyv, man oldalak és kis teszt -példák találhatóak a kiadásban a -doc/ könyvtár alatt. Az interneten is olvashatod a -dokumentációt a következõ címen:

-

http://www.PostgreSQL.org/users-lounge/docs/.

-

Két PostgreSQL könyv érhetõ el az -interneten -a http://www.PostgreSQL.org/docs/awbook.html -és a http://www.commandprompt.com/ppbook/ -címeken. A megvásárolható könyvek -listája itt -található: http://www.ca.PostgreSQL.org/books/. -A PostgreSQL-lel kapcsolatos technikai jellegû cikkek -gyûjteménye: http://techdocs.PostgreSQL.org/.

-

A psql parancs rendelkezik néhány \d -utasítással, amellyekkel listázhatóak az -operátorok, a funkciók, stb.

-

A website is tartalmaz további dokumentációkat.

- 1.9 Hogyan -találok információt -hibákról vagy hiányzó -funkcionalításról?
-

A PostgreSQLaz SQL-92 szabvány egy -kiegészítése. Nézd meg a TODO -listákat ha érdekelnek az ismert hibák.

- 1.10 Hogy -tanuljam meg az SQL nyelvet?
-
-

A PostgreSQL könyv a -http://www.PostgreSQL.org/docs/awbook.html -címen tartalmaz SQL -alapokat. Elérhetõ egy -másik SQL könyv is a http://www.commandprompt.com/ppbook -címen. Egy szép -oktató anyag található a -http://www.intermedia.net/support/sql/sqltut.shtm, -a -http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM -és a http://sqlcourse.com -oldalakon. -

-

Egy másik lehetõség a "Tanítsd magad 21 -nap -alatt SQL-re, második kiadás" a -http://members.tripod.com/er4ebus/sql/index.htm.

-

-Sok felhasználónak tetszett a gyakorlati SQL könyv -("The Practical SQL Handbook").

-
- 1.11 A -PostgreSQL 2000. év kompatibilis?
-
-

Igen, könnyedén kezeli a 2000 utáni és -idõszámításunk elött 2000 elötti -dátumokat is.

-
- 1.12 -Hogyan lehet csatlakozni a fejlesztõ -csapathoz?
-
-Elösször is töltsd le a forráskódot, -és olvasd el a PostgreSQL
-fejlesztõi dokumnetációt a web oldalunkon vagy a -kiadásban. Ezután
-íratkozz fel a pgsql-hackers és a pgsql-patches -levelezési listákra.
-Végül pedig küldj be magas szinvonalú -patch-eket a pgsql-patches listára.
-
-Van egy pár ember, akiknek commit privilégiumuk a -PostgreSQL CVS fán.
-Õk olyan sok magas szinvonalú patch-et küldtek be, -hogy az addigi
-csapat már nem tudta követni, és nem volt -kétségünk arról, hogy a
-patch-ek amiket õk küldenek jó -minõségû.
-
- 1.13 -Hogyan küldjek hibajelentést?
-
-Látogass el a BugTool oldalra:
-http://www.PostgreSQL.org/bugs/bugs.php
-Itt megtalálod követendõ utasításokat.
-
-Ellenõrizd az ftp oldalunkon is, hogy nincs-e újabb -verzió vagy folt.
-ftp://ftp.PostgreSQL.org/pub
-
-1.14 Milyen -a PostgreSQL más DBMS-ekkel -összehasonlítva?
-

Számos nézõpontból lehet -vizsgálni -a -szoftvert: képességek, teljesítmény -megbízhatóság, támogatottság -és ár.

-Képességek: -A PostgreSQL rendelkezik a nagy, kereskedelmi DBMS-ek -képességeivel: tranzakciók, -al-lekérdezések, triggerek, -nézetek, külsõ kulcsok, integrítás -és kifinoult zármechanizmusok. -Van néhány képessége, ami a kereskedelmi -adatbázisokból hiányzik, mint -például a felhasználó által -definiált típusok, -öröklõdés, szabályok és -verzió kontroll a zárolási viták -redukálásáért. -

Teljesítmény: -A PostgreSQL teljesítménye hasonlít a -kereskedelmi -és más nyílt adatbázis -szerverekéhez. Lehet bizonyos esetekben -lassabb, másokban gyorsabb. A MySQL nevû tanuló -RDBMS például gyorsabban hajt végre insert/update -mûveleteket, mivel a tranzakciókat -elsumákolja. Persze a MySQL nem rendelkezik a -képességek -részben felsoroltak nagy részével. Mi a -megbízhatóságra -és a képességekre építünk, -bár a teljesítmény is nõ minden -kiadással. Van -egy érdekes oldal a MySQL és a PostgreSQL -összehasonlításával a -http://openacs.org/philosophy/why-not-mysql.html -címen. -

-

Megbízhatóság: -Tudjuk hogy ha egy DBMS nem megbízható, akkor -teljesen -haszontalan. Igyekszünk jól tesztelt, stabil kódot -kiadni, amiben -a lehetõ legkevesebb hiba van. Minden kiadás -elött eltellik -legalább 1 hónap béta teszt, és a -kiadási -történet is azt mutatja, hogy stabil kódot adunk ki, -ami készen áll a -produktív felhasználásra. Úgy gondoljuk, -felülmúlunk más -adatbázis szoftvereket ezen a téren. -

-

-

Támogatás: -A levelezési listáink kapcsolatot teremtenek a -fejlesztõk és felhasználók -csoportjával , akik -segítenek a problémák megoldásában. -Bár nem tudjuk garantálni -hogy ki tudjuk javítani a hibát, más, kereskedelmi -adatbázis cégek sem tudják. A fejlesztõ -csoport közvetlen elérési -lehetõsége, a közösség, a -dokumentáció és a forráskód -gyakran támogatást biztosít, mint más -adatbázisoknál. Van kereskedelmi, alkalmi -támogatás azoknak, akiknek szüksége van -rá (lásd: 1.6). -

-

-

Ár: A -PostgreSQL szabad bármilyen -felhasználásra, -akár kereskedelmire is. A termékhez hozzáadhatod a -saját -forráskódjaidat korlátozás -nélkül.

- 1.15 -Hogyan tudom üzletileg segiteni a -PostgreSQL-t?
-

A PostgreSQL elsõ osztályú -infrastruktúrával rendelkezik, amit 1996-ban -indítottunk el. Mindent Marc Fourniernek -köszönhetünk, aki létrehozta és -karbantartja a rendszert. -

-

A minõségi infrastruktúra nagyon fontos egy -nyilt -forrású szoftver esetében. Megvéd az olyan -fennakadásoktól, -amelyek komoly késéseket okoznak a -fejlesztésekben. Természetesen ez az -infrastruktúra nem olcsó. -Számos havi és állandó kiadásunk -van. Ha a cégednek van pénze, amivel -támogatná erõfeszítéseinket, -kérlek látogass el a http://store.pgsql.com/shopping/ -oldalra.

-

-Bár a weboldal "PostgreSQL, Inc"-ként -említi, a -hozzájárulások kizárólag a -PostgreSQL fejlesztésre értendóek, és nem -egy meghatározott cégnek. Ha jobban tetszik, -küldhetsz csekket is a kapcsolati címek -bármelyikére.

-

1.16 Ki -irányítja a PostgreSQL-t?
-

-

Ha -központi bizottságot, ellenörző céget keresel a -PostgreSQL mögött, add fel, nincs ilyesmi. Létezik egy -mag és CVS commiter csoport, de ez inkáb adminisztrativ -mint ellenörző célú. A projectet fejlesztők -és felhasználók közössége -irányítja, amihez bárki csatlakozhat. -Csupán annyit kell tenned hogy felíratkozol a -levelezőlistékra és részt veszel a -beszélgetésekben.

-

-
-

Felhasználói kliens -kérdések

-
- 2.1 Van -ODBC meghajtó PostgreSQL-hez?
-

Két ODBC meghajtó érhetõ el: PsqlODBC -és a OpenLink ODBC.

-

A PsqlODBC a PostgreSQL kiadás része. További -információ található a  -ftp://ftp.PostgreSQL.org/pub/odbc/ oldalon.

-

Az OpenLink ODBC-t a http://www.openlinksw.com -címrõl -töltheted le. Ez az õ szabványos ODBC kliens -szoftverükkel -mûködik, így minden

-

általuk támogatott platformon (Win, Mac, Unix, VMS) -elérhetõ lesz  a PostgreSQL szerver.

-

Talán olyan vevõknek fogják eladni, akik -kereskedelmi minõségû terméket -szeretnének kapni, de a freeware verzió mindig -elérhetõ lesz. Kérdéseidet a -termékkel kapcsolatban a postgres95@openlink.co.uk -címen teheted fel.

-

Olvasd el az ODBC fejezetet is a programozók -kézikönyvében!

-

2.2 -Milyen -eszközök állnak -rendelkezésre PostgreSQL Web fejlesztésekhez?

-

Egy szép bemutató olvasható az -adatbázissal -támogatott web oldalanról a http://www.webreview.com -weboldalon.

-

A web integrációhoz a PHP egy kiválló -szoftver. Letölthetõ a http://www.php.net -címrõl.

-

Komplexebb esetekre sokan használják a Perl -felületet és a CGI.pm vagy a mod_perl-t.

-

2.3 Van a -PostgreSQL-hez grafikus -felhasználói felület?

-

Van egy szép PgAccess nevû grafikus -felületünk, -ami riport generátorként is használható. A -weboldalát megtalálod a -http://www.pgaccess.org/ -címen.

-

A http://techdocs.postgresql.org/guides/GUITools -oldalon találhatsz egy pontos és részltes -listát.
-

-

2.4 -Milyen -programozási nyelvekkel lehet -elérni a PostgreSQL szervert?

-

A következök:

-
    -
  • C (libpq)
  • -
  • C++ (libpq++)
  • -
  • Embedded C (ecpg)
  • -
  • Java (jdbc)
  • -
  • Perl (DBD::Pg and perl5)
  • -
  • ODBC (odbc)
  • -
  • Python (PyGreSQL)
  • -
  • TCL (libpgtcl)
  • -
  • C Easy API (libpgeasy)
  • -
  • PHP ('pg_' functions, Pear::DB)
  • -
-
-További programozási felületek -érhetõek el a
- -http://www.PostgreSQL.org/interfaces.html és a
- http://gborg.PostgreSQL.org -oldalakon.
-
-
-

Adminisztrációs -kérdések

-
- 3.1 -Hogyan tudom a PostgreSQL-t /usr/local/pgsql --tõl eltérõ helyre installálni?
-

A configure script --prefix paraméterének -használatával.

- 3.2 AMikor -elindítom a postmaster-t, egy -"Bad System Call"-t vagy core dump-ot kapok. Miért?
-

Számos probléma lehet, de legelösször -ellenõrizd le, hogy a kerneled System V -kiegészítésekkel rendelkezik-e. A -PostgreSQL használja a kernel osztott memória és -szemafor API-ját.

-

3.3 -Amikor -megpróbálom inditani a -postmaster-t, "IpcMemoryCreate" hibákat kapok. Miért?

-

-Vagy nincs megfelelõen konfigurálva a kerneled osztott -memória támogatása vagy meg kell -nagyobbítanod a maximális osztott -memória méretet.

-

A pontos méret szükséglet függ az -architektúrádtól és attól hogy -hány buffert és processzt konfigurálsz a -postmasternek. -Legalább 1 MB területre szükséged van. A -PostgreSQL -Adminisztráció kézikönyvben olvashatsz -részletesebb információkat az osztott -memóriáról és a szemaforokról.

-3.4) Amikor -megpróbálom inditani a -postmaster-t, "IpcSemaphoreCreate"
-hibákat kapok. Miért?

-

Ha a hibaüzenet ez: " IpcSemaphoreCreate: semget failed (No -space left on device)", akkor a kerneled konfigurációja -nem -tesz lehetõvé elegendõ szemafort. A PostgreSQL -szerver processzenként 1 -szemafort igényel. Egy átmeneti megoldás lehet az -hogy a -postmastert kevesebb maximális processz számmal inditod -el. Használd a --D paramétert. Egy sokkal megfelelõbb megoldás az -ha növeled a -kerneled SEMMNS és SEMMNI paramétereit.

-

A hibás szemaforok is adatázis -lerobbanásához is vezethet nagy terhelés -esetén.Ha a hibaüzenet valami más, lehet hogy nincs -szemaforok -támogatás

-

forditva a kerneledbe. Olvasd el a PostgreSQL -adminisztrátorok kézikönyvében az osztott -memóriáról és a szemaforokról -szóló fejezetet.

-

3.5) -Hogyan tudom kontrollálni a más -gépekrõl érkezõ kapcsolat -kéréseket?

-

Alapértelmezésben a PostgreSQL a helyi kapcsolatokat -Unix -socketekkel valósítja meg. Más gépek nem -lesznek -képesek csatlakozni, ha nem engedélyezed azt -i -opcióval a postmasternek, és -nem állítod be host a alapú -azonosítást a pg_hba.conf -állományban. Ezzel válnak lehetõvé a -TCP/IP kapcsolatok.

-

3.6) -Hogyan tudom nagyobb -teljesítményre hangolni az adatbázisomat?

-

Az indexelés feltétlenül gyorsítja a -lekérdezéseket. Az EXPLAIN parancs lehetõvé -teszi hogy lásd, hogy a -PostgreSQL miként interpretálja a -lekérdezést és melyik indexet használja.

-

Ha sok INSERT mûveletet hajtassz végre, csináld -nagy kötegekben a COPY paranccsal. Ez sokkal gyorsabb mint az -egyedi INSERT parancsok. -Másodszor: Azok a mûveletek, amelyek nincsenek -tranzakció blokkon -belül, azok saját tranzakciót indítanak. Sok -mûveletet érdemes -egy tranzakción belül végrehajtani. Ez -csökkenti a tranzakció -kezelés többletidejét. Az indexeket javasolt a nagy -adatváltozások elött -eltávolítani, majd újra létrehozni.

-

Számos teljesítmény javító -lehetõség van. Kikapcsolhatod az fsync() mûveletet -a postmaster -o -F opciókval való -indításakor. Így nem fog az amugy lassú -fsync() függvény -meghívódni minden tranzakció végén.

-

Használhatod a postmaster -B opcióját is az -osztott memória szegmens méretének -növeléséhez. Ha az -értéket túl magasra állítod, lehet -hogy a postmaster nem indul el, mert túllépted az -operációs rendszer által  megengedett -méretet. Minden buffer 8K méretû -és alapértelmezésban 64 buffer van.

-

A -S opcióval növelheted a szerver átmeneti -rendezésekre fenntartott memória területét. -Az értéket -kilobyteban add meg. Az alapértelmezett érték -512K.

-

Használhatod a CLUSTER utasítást is, hogy a -táblákat egy indexnek megfelelõen -csoportosítsd. Olvasd el a CLUSTER -kézikönyv oldalt további részletekért.
-

-

Hardver kiválasztásában segíthet: http://candle.pha.pa.us/main/writings/pgsql/hw_performance/index.html -és http://www.powerpostgresql.com/PerfList/.
-

-

A postgresql.conf beállitásaival kapcsolatos -tudnivalók: http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html -és http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html.

-

-

3.7) -Milyen hibakeresõ -lehetõségek érhetõek el?

-

A PostgreSQL számos lehetöséggel rendelkezik ami -értékes lehet a hibakeresésnél.

-Elösször is, futtathatod a configure scriptet ---enable-cassert opcióval, sok assert() -funkcióhivás ellenörzi -a program futását és megállitja ha valami -vératlan hiba történik.
-

Mind a postmaster és a postgres számos hibakeresö -lehetüséggel rendelkezik. Mindig amikor elinditod a -postmastert, gyözödj meg -róla, hogy a kimenetet log állományba -küldöd. Igy:

-

cd /usr/local/pgsql

-

./bin/postmaster >server.log 2>&1 &

-

Ez egy server.log állományt hoz létre a -felsö -PostgreSQL könyvtárban. Ez az állomány -tartlamaz majd számos hasznos -információt a szerverrel kapcsolatos -problémákról és -hibákról. A postmaster -d opciójával lehet -részletesebb hibakeresö információt kapni. A --d opcióhoz meg kell határozni egy hiba szintet. -Vigyázz, a magas -hibakeresö szint nagy log állományt okozhat.

-

Ha a postmaster nem fut, akkor futtathatod a postgres szervert -parancssorból is, és az SQL kifejezést -közvetlenül ennek adhatod át. Ez csak -hibakeresés esetében javasolt. Az új sor a -kifejezés végét jelenti, nem a pontosvesszö. -Ha hibakeresö opciókkal -forditottad a szervert, használhatsz egy debuggert is hogy -lásd hogy mi -történik. Mivel igy a szervert nem a postmaster inditotta, -nem -többfelhasználós környezetként fut, igy -a zárolási és a szerverek -közötti kommunikációs hiba jelenségek -nem jelentkeznek.

-

Ha már fut a postmaster, indits egy psql-t, és -nézd meg a szerver processz PID-jét! Egy debuggert -használhatsz a processzhez -csatlakozáshoz. Beállithatsz töréspontokat -és elindithatsz -lekérdezéseket. Ha a postgres inditásban keresel -hibát, a PGOPTIONS környezeti -változót állitsd be "-W n" értékre. -Ez n másodperc várakozást -idéz elö, igy tudsz csatlakozni a processzhez, el tdsz -hejezni töréspontokat, majd -folytathatod a indítást.

-

A postgres program -s, -A és -t opciói is nagyon -hasznosak lehetnek hibakeresésnél és -teljesítmény -mérésnél.

-

Profiling lehtöséggel is fordithatod a szervert, hogy -lásd melyik funkciók foglalják el a futási -idõt. A -szerver profile állományai a pgsql/data/base/dbname -könzvtárba kerülnek, a kliens -profile állományok az aktuális -könyvtárba. -Linuxon ehhez szükséges a -DLINUX_PROFILE -fordítási direktiva.

- 3.8) -Miért kapok "Sorry, too many clients" -(Túl sok kliens)
-hibát csatlakozásnál?

-

Növelned kell a postmaster egyidejûleg futtatott szerver -processz szám korlátját.

-

Az alapértelmezett korlát 32 processz. Ezt -növelhetjed úgy, hogy újrainditod a postmastert -és -N opcióval -meghatárotod az új értéket, vagy -módositod a postgresql.conf-ot.

-

Ne felejtsd el, hogy ha növeled a szerver processzek -maximális számát, akkor bufferek -számát is növelned kell, -legalább a processzek számának -kétszeresére. Nagy processz számokesetében -valószinüleg a Unix konfigurációs -paramétereken is növelni kell. -Ellenörizd a SHMMAX (az osztott memória szegmensek -maximális mérete), -a SEMMNS és a SEMMNI (a szemaforok maximális -száma), az NPROC (a processzek -maximális száma), a MAXUPRC -(felhasználónkénti maximális -processz szám) és a NFILE és NINODE (a megnzitott -állománzok maximális száma) -paramétereket. A PostgreSQL azért korlátozza -külön a processz -számot, hogy a rendszeredet ne terhelhesse meg -túlságosan.

-

A PostgreSQL 6.5 verzióban a maximális szerver -processz -szám 64 volt és a módositáshoz bele kellett -irni a -include/storage/sinvaladt.h állományba és -újra kellett forditani a servert.

-3.9) Mi van pgsql_tmp -könyvtárban?
-

Ez a könyvtár a lekérdezés -végrehajtó által létrehezott -átmeneti állományokat tartalmazza. -Például ha egy -rendezést kell végrehajtani egy ORDER BY kifejezés -miatt és a m?velet több -memóriát vesz igénybe, mint amennyit a -S -paraméter megenged, akkor az -átmeneti könyvtárban hoz létre egy -állományt a -fennmaradó adat tárolására.

-

Az átmeneti állományok többnyire -törl?dnek, de meg is maradhat ha például -váratlan hibával leáll a -szerver egy rendezés közben. Inditáskor és -leállitáskor ezeket az -állományokat törli a postmaster.

- 3.10) -Miért kell dumpolni és -újratölteni PostgreSQL kiadás -váltásánál?
-

A PostgreSQL csapat csak apróbb -változtatásokat -hajt végre a kisebb kiadások között, igy ha 7.2 -verzióról -állsz át 7.2.1 verzióra, akkor nem -szükséges kidumplonod az adatbázist. A nagy -kiadások esetében (például -verzióról 7.3-ra áttérésnél) -változik a belsiõ adatstruktúrák és -adatállományok formátuma. Ezek a -változások gyakran nagyon összetettek, ezért -inkáb nem tartunk fenn visszafelé -kompatibilitást. A dump az adatot általános -formátumban irja ki, majd az -új formátumban lehet azt visszatöleni. -

-Azokban a kiadásokban, amelyek között az adat -formátum nem változik, a pg_upgrade program -használható dumpolás -és helyreállitás nélkül. -

-

Mûködtetési -kérdések

-
- 4.1) Mi a -különbség a -bináris és a normál kurzorok között?
-

Nézd meg a DECLARE dokumentációját.

- 4.2) -Hogyan tudom select-elni a -lekérdezés elsõ pár sorát?
-

Olvasd el a FETCH dokumentációját, vagy -használd a SELECT LIMIT-et.

-

Az egész lekérdezést végre kell -hajtani, -még akkor is, ha csak az elsõ pár sort akarod -megkapni. Gondolj arra, hogy a -lekérdezésben lehet ORDER BY is. Ha van olyan index, ami -megfelel az ORDER BY kifejezésednek, -a PostgreSQL képes lehet az elsö néhány -rekord -visszaadására, vagy a teljes lekérdezésnek -le kell futnia, amig a kért rekordok -le nem generálódnak. -
-

-

4.3) Hogy tudom -kilistázni a -táblákat vagy más dolgokat a PostgreSQL-ben?

-

Elolvashatod a psql forrás kódjában a -pgsql/src/bin/psql/describe.c állományban. Ez SQL -parancsokat tartalmaz, amelyek azokat -a kimeneteket állitják elö, amiket a per jellel -kezdödö -parancsok adnak vissza.

- 4.4) -Hogyan tudok eltávolítani egy -oszlopot egy táblából?
-
-

Ez a funkcionalitás a 7.3 verziótül kezdve -érhetö el az ALTER TABLE DROP COLUMN -nal. A régebbi -vertiókban igy lehet -végrehajtani:

-
BEGIN;
-
LOCK TABLE old_table;
-
SELECT ... -- minden oszlopot, kivétel amit törölni szeretnél
-
INTO TABLE new_table
-
FROM old_table;
-
DROP TABLE old_table;
-
ALTER TABLE new_table RENAME TO old_table;
-
COMMIT;
-

-

4.5) Mi a -maximális mérete egy sornak, -egy táblának vagy egy adatbázisnak?

-
-

A korlátok:

-
    -
  • -

    adatbázis: korlátlan (1 TB az általunk -ismert -lagnagyobb)

    -
  • -
  • -

    tábla: 16 TB

    -
  • -
  • -

    rekord/sor 1.6TB

    -
  • -
  • -

    mezö 1 GB

    -
  • -
  • -

    a tábla sorainak száma: korlátlan

    -
  • -
  • -

    a tábla oszlopainak száma: 250-1600 az oszlop -nevektõl függöen

    -
  • -
  • -

    A tábla indexeinek száma: korlátlan

    -
  • -
-

Természetesen nem igazán korlátlan, de a -tárterület, memória és egyéb -külsö tényezök korlátozzák. A -teljesitmény romolhat, ha ezek az értékek -szokatlanul nagyok.

-

A 16 TB-os legnagyobb tábla méret nem igényel -nagy -állomány támogatást. A nagy -táblák több 1 GB méretü -állományba kerölnek, igy az állomány -rendszer korlátai nem lényegesek.

-

A maximális tábla méret és az oszlopok -maximális oszlop szám növelhetö, ha az -alapértelmezett blokkméretet 32k-ra növeled.

- 4.6) -Mekkora adatbázis lemez terület -szükséges egy tipikus szöveg állomány
-tárolásához?

-

A PostgreSQL akár a szöveg állomány -helyigényének ötszörösét is -elfoglalhatja.

-

Képzelj el például, egy 100.000 soros -szöveget, aminek minde sora egy számból és -egy szövegbõl -áll. Tegyük el, hogy átlagosan 20 byte hosszú -szövegek. Ez a szövegállomány -körülbelül 2.8 MB helyet foglalna el. A tábla ami -a fenti adatszerkezetet eltárolná, -körülbelül 6.4 MB-os lenne. Ezt a -következöképpen számolhatjuk ki:

-

36 byte: sor fejléc

-
24 byte: egy int mezö + egy szöveg mezö
-
4 byte: mutato
-
---------------------------------------
-
64 byte soronkent.
-

Az adat oldal mérete a PostgreSQL-ben 8192 byte, igy 8192 / -64 = 128 rekord adatbázis oldalanként -(lefelé kerekitve).

-
100000 rekord / 128 rekord oldalanként = 782 adat oldal
(felelé kerekitve).
-
782 adatbázis oldal * 8192 byte olalanként = 6,406,144
byte (6.4 MB)
-

Az indexek nem foglalnak túl sokat, de tartalmazzák az -indexelt adatot, igy ezek is lehetnek nagyok.

-

A NULL értékek bittérképben vannak -tárolva, igy kevés helyet foglanak.

-

4.7) Hogy -tudhatom meg milyen táblák, -indexek, adatbázisok vagy felhasználók

-vannak definiálva?
-
-

A psql-ben találsz számos '\' karakterrel -kezdödö utasítást az ilyen -információk listázására. A '\?' -segitségével tudot kilistázni ezeketa parancsokat. -Ezen kivül vannak rendszer táblák, -amelyek nevei 'pg_'-vel kezdödnek.

-

Próbáld ki a pgsql/src/tutorial/syscat.source -állományt is. Ez sok példát tartalmaz az -rendszertáblákon -végrehajtott SELECT-ekröl.

-

4.8) A -lekérdezéseim lassúak, -vagy nem használják az indexeket. Miért?

-

-

Az indexeket nem használja a szerver minden -lekérdezésnél automatikusan. Csak akkor -használ indexet, ha a tábla mérete egy -megadott alsó határ felett van, és a -lekérdezés csak a sorok egy kis -részét érinti. Ez azért van, mert a -véletlen hozzáférés még -mindig lassabb lehet mint az tábla szekvenciális -olvasása.

-

Hogy a PostgreSQL meg tudja határozni hogy kell-e indexet -használni, léteznie kell egy statisztikának a -tábláról. Ez a statisztikai adatok a VAACUM -ANALYZE vagy az egyszerû ANALYZE mûveletek -során jönnek létre. A statisztikai adatok -felhasználásával az optimalizáló meg -tudja határozni, hogy hány sor van a -táblában, és el tudja dönteni, hogy -használjon-e indexet. A statisztiaki -adatgyüjtést idõnként végre kell -hajtani, ahogy a tábla adatai változnak.

-

Az indexeket normális esetben nem használja az ORDER -BY -vagy az OUTER JOIN. A szekvenciális olvasás -általában gyorsabb, mint az index keresés egy nagy -táblában. Bár a LIMIT az ORDER BY-val -kombinálva használhat -indexet, mert a tábla csak kis része érintett. -Bár a MIN -és MAX SQL funkciók sem használják az -indexeket, ezeket az -értékeket egy ORDER BY + LIMIT -lekérdezéssel is le lehet kérdezni:

-
SELECT col
-
FROM tab
-
ORDER BY col [ DESC ]
-
LIMIT 1;
-
-

Amikor helyettesítõ jel operátorokat -használsz, mint a LIKE kulcsszó vagy a ~, az indexeket -csak bizonyos körülmények -között lehet használni:

-

A keresõ string kezdete a keresési minta elején -kell hogy legyen. Például:

-
    -
  • A LIKE minták nem kezdõdhetnek % jellel.
  • -
  •  ~ (regexp) kifejezések nem kezdõdhetnek ^ -jellel.
  • -
  • A keresési kifejezés nem kezdõdhet karakter -osztállyal.
  • -
  • A case-insensitive keresés (ILIKE, ~*) nem -használnak -indexet ehelyett funkcionális indexet használnak, amit a -4.12 -pontban találhatsz.
  • -
  • Az alapértelmezett C hellyel kell futtatni az initdb-t.
  • -
- 4.9) Hogy -tudom ellenõrizni, hogy -optimalizálta a lekérdezés -optimalizáló
-a lekérdezésem?
-
-

Olvasd el a dokumentáció EXPLAIN-ról -szóló részét.

-

4.10) Mi -az R-tree index?

-

Az R-tree index a térbeli adat indexelésére -alkalmas. Egy hash index nem képes tartomány -keresésekre. A B-tree -index csak egy dimenzión kezeli a tartomány -kereséseket. -Például ha az indexet egy pont (point adattípus) -típusú mez.re -építjük, gyorsabban kezeli az olyan jellegü -lekérdezéseket, mint egy -adott körben

-

található pontok.

-

Az R-tree tervezési mintát eredetileg -leíró -szöveg: 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.

-

Ezt olvashatod Stonebraker "Readings in Database Systems" c. -könyvében.

-

A beépített R-tree kezelni tudják a -sokszögeket (polygon adattípus) és a dobozokat -(box). Elméletileg, az R-tree -kiterjeszthetõ további dimenziókra is. -Gyakorlatilag ezen dolgoznod kell egy kicsit, -és még nincs dokumentációnk arról -hogy az -hogyan mûködik.

-

4.11) Mi -a Genetic Query Optimizer?

-

-

A GEQO modul a lekérdezés optimalizáció -sebességét növeli nagy mennyiségû -tábla összekapcsolása -esetén. Lehetõvé teszi a nagy -lekérdezések végrehajtását nem -teljes kereséssel.

-

4.12) -Hogyan tudok regexp keresést és -case-insensitive regexp keresést használni? Hogyan tudok -indexet használni -case-insensitive kereséshez?
-

-

A ~ operátor hajt végre reguláris -kifejezés -(regexp) értelmezést, a ~* ennek case-insensitive -változata. A LIKE case-insensitive változata az ILIKE.

-

A case-insensitive egyenlõség mûveleteket -általában igy hajtjuk végre:

-

SELECT *

-
FROM tab
-
WHERE lower(col) = 'abc';
-

Ez nem fog indexet használni, bár létrehozhatsz -egy funkció indexet:

-
CREATE INDEX tabindex ON tab (lower(col));
- 4.13) -Hogyan tudom észlelni egy -lekérdezésben, ha egy mezõ NULL?
-

Használd "IS NULL"-t és az "IS NOT NULL"-t.

-

4.14) Mi -a különbség a -különbözõ karaktertípusok között?

-
    -
  • "char" egy karakter hosszú string
  • -
  • CHAR(n) bpchar üres hellyel a megadott n -hosszúságig
  • -
  • VARCHAR(n) varchar méret maximális hossz -meghatározásával, a lefogllat terület is -változó hosszú lesz
  • -
  • TEXT nincs meghatározott felső korlát
  • -
  • BYTEA változó hosszúságú -byte-tömb
  • -
-

Látni fogod a belsõ elnevezésüket, ha -tanulmányozod a rendszertáblákatés -néhány hibaüzenetet.

-

Az utóbbi négy a "varlena" típusok, ami a -tárolásuk módjára utal: az elsõ 4 -byte a lemezen a hosszúság, a többi -az adat. A valódi méret tehát nagyobb mint a -deklarált -hosszúság.Ezek azadatok tömöritve -tárolódnak el, igy kevesebb helyet foglalnek el az -elöre számitottnál.

-

A CHAR(n) a legjobb megoldás, ha stabil -hosszúságú stringet tárolsz. A VARCHAR(n) -jó arra az esetekre, ha a hosszúság -változik, de van felsõ korlátja. A TEXT -típus korlátlan -hosszúságú (1 GB-ig) szövegek -tárolására alklamas. A BYTEA bináris adatok -tárolására van. A teljesitmény -mutatói hasonlóak ezenek a -típusoknak.

-

4.15.1) -Hogyan tudok létrehozni -automatikusan növekvõ értékû -mezõt?

-
-A PostgreSQL rendelkezik egy SERIAL adattípussal. Ez egy -szekvenciát és egy indexet hoz létre az oszlopon. -Például ez:
-
CREATE TABLE person (
-
id SERIAL,
-
name TEXT
-
);
-

ugyanezt jelenti:

-
CREATE SEQUENCE person_id_seq;
-
CREATE TABLE person (
-
id INT4 NOT NULL DEFAULT nextval('person_id_seq'),
-
name TEXT
-
);
-
CREATE UNIQUE INDEX person_id_key ON person ( id );
-
-

A szekvenciákkal kapcsolatban olvasd el a create_sequence man -oldalt. A sor OID-jét is használhatod egyedi -azonositóként, bár ebben az esetben figyelj a -pg_gump használatánál a --o opcióra (COPY WITH OIDS, másolás OID-dal), hogy -meg?rizd az -értékeket.

-

4.15.2) -Hogyan kaphatom meg egy SERIAL -beszúrás értékét?

-

Egy megoldás erre az, ha a nextval() funkcióval -megszerzed az értéket még mielött -beszúrnád -az adatot a táblába. Erre itt láthatsz egy -példát:

-
new_id = execute("SELECT nextval('person_id_seq')");
-
execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise
Pascal')");
-

-Esetleg lekérdezheted a szekvencia állapotát a sor -beszúrása után.

-
execute("INSERT INTO person (name) VALUES ('Blaise Pascal')");
-
new_id = execute("SELECT currval('person_id_seq')");
-

-Végül pedig, használhatod a visszaadott OID -értéket is, bár ez a lehetõ -legkevésbé portolható. Perl DBI-ben, Edmund Mergl -DBD::Pg moduljában az OID érték -használható a -$sth->execute() után ($sth->{pg_oid_status}).

- 4.15.3) -A currval() és a nextval() nem -teremt holtpont veszélyes helyzetet a felhasználók -között?
-

Nem. A currval() funkció a szerver processzed által -adott -értéket adja vissza, nem pedig a többi szerver -processz által adottat.

-4.15.4) -Miért nem használódnak fel újra a -sequence számok tranzakció abort esetén?
-

Miért vannak problémák a serial oszlopok -számozásával?

-

A párhuzamosság fejlesztése -érdekében a sorozat számokat kérésre -adja ki a szerver futó tranzakcióknak, és azokat -nem zárja, amig a tranzakció véget nem ér. -Ez jukakat okoz a -számozásokban a visszaforditott tranzakciók miatt.

-

4.16) -Mi a -OID? Mi a TID?

-

Az OID a PostgreSQL egyedi sor azonositója. Minden sor, ami -létrejön a szerveren, kap egy OID-t. Minden OID, amit az -initdb alatt jön -létre 16384 alatt van (lásd include/access/transam.h). -Minden, -felhasználó által létrehozott OID -legalább ennyi. -Alapértelmezésben, az OID nem csak a -táblában vagy az adatbázisban egyedi, -hanem a teljes PostgreSQL adatbázis rendszerben.

-

A PostgreSQL az OID-okat a belsö tábláiban -használja a sorok táblák között -összekapcsolásához. Ezek az OID-k -használhatóak a rekordok azonositására is -amikor táblákat csatol -össze a szerver (JOIN). Az OID-ot használhatod mezö -típusként is, -és indexelheted is.

-

Az OID érték egy központi területröl -származik, amit minden szerver processz használ. Ha az -OID-ot valami másra -szeretnéd cserélni:

-

CREATE TABLE new_table(old_oid oid, mycol int);

-
SELECT old_oid, mycol INTO new FROM old;
-
COPY new TO '/tmp/pgtable';
-
DELETE FROM new;
-
COPY new WITH OIDS FROM '/tmp/pgtable';
-
-

Az OID 4 byte-os integer értékként -tárolódik, igy 4 milliárdnál -túlcsordul. Még soha senki nem jelezte hogy ez -történt volna, -és ezt a korlátot igyekszünk eltávolitani, -még mielött -bárki észrevenné.

-

A TID a fizikai sorok blokk és offszet címmel -való -azonositására szolgál. A TID változik -minden rekord módositás és -törlés alkalmával. Ezeket az indexek -használják hogy a fizikai sort gyorsan -megtalálják.

-

4.17) Mi -a PostgreSQL-ben használt -kifejezések jelentése?

-
-

Néhol a forrás kódban és a -dokumnetációban találhatóak -kifejezések, amelyek általánosabb -jelentéssel bírnak. -Itt van néhány:

-
    -
  • tábla (table), reláció (relation), -osztály (class)
  • -
  • sor (row), rekord (record), tuple (nincs magyar jelentés)
  • -
  • oszlop (column), mezö (field), attributum (attribute)
  • -
  • retrieve, select
  • -
  • helyettesit (replace), módosit (update)
  • -
  • hozzáfûz (append), beszúr (insert)
  • -
  • OID, sorozat érték (serial value)
  • -
  • portal, cursor
  • -
  • range variable, tábla név, tábla alias
  • -
-Az általános adatbázis kifejezések -összefoglalóját itt olvasható: -

http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.html

-
- 4.18) -Miért kapom ezt a hibát: -"ERROR: Memory exhausted in AllocSetAlloc()"?
-
-

Lehet hogy elfogyott a virtuális memóriád, vagy -a -kerneled erõforrás korlátai alacsonyak. -Próbáld ki ezt mielött -elinditanád a postmastert:

-
ulimit -d 262144
-
limit datasize 256m
-

A shelltõl függõen ezek közül csak az -egyik fut majd le, de a processzek adatszegmensét sokkal -magasabbra állitja, ami -talán elég lesz a lekérdezés -végrehajtásához. Ez az utasítás a -jelenlegi processzre (a shelled) érvényes, és -minden -általa létrehozott processzre. Ha problémád -van az SQL klienssel, mert a -szerver túl nagy adatot küld vissza, próbáld -meg e -klienssel is ugyanezt.

-

4.19) -Hogyan tudhatom meg PostgreSQL, milyen -verziót futtatok?

-

A psql programban select version();

- 4.20) -Miért kapok "invalid large obj -descriptor" hibát nagy objektumok -kezelésénél?
-

A nagy objektumok kezelését egy tranzakciós -blokkban helyezd el. (BEGIN és COMMIT között)

-


-Jelenleg a PostgreSQL ezt a szabályt azzal teszi -kötelezõvé, hogy a tranzakció -végén a nagy objektumokat -lezárja, igy a tranzakció után az elsõ -mûvelet amit az objektumon -végrahajtanál hibás lesz.

-

Ha olyan programozási felületet használsz mint az -ODBC vagy a JDBC akkor valószinûleg ki kell kapcsolnod az -auto-commit-ot.

-

4.21) -Hogy hozhatok létre olyan oszlopot, -aminek alapértelmezett érétke a jelenlegi -idõ?
-

-

Használd a CURRENT_TIMESTAMP -ot:

-
CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
- 4.22) -Miért olyan lassúak az -al-lekérdezéseim IN-nel?
-

Jelenleg az al-lekérdezéseket a külsõ -lekérdezéshez csatoljuk. Ha az allekérdezés -csak kevés sort eredményez -és a külsõ lekérdezés sokat, akkor az -IN is gyors. Az EXISTS kulcsszó -használatával gyorsithatod a lekérdezéseket.

-

SELECT *

-
FROM tab
-
WHERE col IN (SELECT subcol FROM subtab);
-
-

EXISTS használatával:

-
SELECT *
-
FROM tab
-
WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col);
-Ahhoz hogy ez gyorsan fusson le, a subcol indexelt oszlopnak kell hogy -legyen. Reméljük ezt a korlátot sikerül -hamarosan legyõznünk. -

4.23) -Hogyan tudok outer join-t végrehajtani?

-

A PostgreSQL a szabványos SQL szintaktikát -követi. -Itt van két példa:

-

SELECT *

-
FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
-

-vagy

-
SELECT *
-
FROM t1 LEFT OUTER JOIN t2 USING (col);
-

Ezek az identikus lekérdezések -összekapcsolják a t1.col és a t2.col mezõket, -és a t1 bármelyik kapcsolatlan -sorát is visszadják. A RIGHT JOIN a t2 kapcsolatlan -sorait adta volna vissza, a FULL JOIN pedig a kapcsolt, és -mindkét tábla kapcsolatlan sorait -adja. Az OUTER kulcsszó opcionális, a LEFT, RIGHT -és FULL JOIN -szintaktikailag helyes. Az átlagos -összekapcsolásokat INNER JOIN-nak -nevezzük.

-

Az elõzõ kiadásokban a OUTER JOIN -lekérdezéseket UNION és NOT IN kulcsszavakkal -lehetett szimulálni. Például a tab1 -és a tab2 összekapcsolása:

-
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) -Hogyan tudok több adatbázison -végrehajtani lekérdezést?
-
-

Arra nincs lehetõség, hogy más -adatbázisból kérdezz le adatot.Mivel a PostgreSQL -adatbázis specifikus rendszer -táblákat töltbe, bizonytalan hogy egy -adatbázisok közötti -lekérdezésnek hogyankellene viselkednie.

-

A contrib/dblink könyvtárban találsz egy -megoldást erre, ami funkció hivások -segitségével -mûködik. Persze, a kliens hozhat -létreszimultán kapcsolatot több adatbázissal, -és -összefésülheti az eredményeket.

-

4.25) -Hogy tudok több soros vagy oszlopos -eredményt visszaadni egy funkcióból?
-

- -

A PL/pgSQL tárolt eljárás nyelvvel refcursor -használatával. Részletesen itt:

-

http://www.PostgreSQL.org/idocs/index.php?plpgsql-cursors.html

- 4.26) -Miért nem tudom megbizhatóan -létrehozni és törölni az átmeneti -táblákat a PL/pgSQL funkciókban?
-

A PL/pgSQL cacheli a funkciók tartalmát, aminek az a -szerencsétlen mellékhatása, hogy ha egy PL/pgSQL -funkció -használ egy átmeneti táblát, ami -később törlõdik majd ujra -létrejön, akkor az újra lefutó funkció -nem fogja megtalálni a táblát, mert -a cache változat a régi táblára tartalmaz -mutatót. A megoldás erre -az EXECUTE használata az átmeneti -táblák -kezelésére PL/pgSQL-ben. Ez a lekérdezés -újrafordítását -fogja elõidézni minden alkalommal.

-4.27) -Milyen replikációs -lehetõségek vannak?
-

Bár a replikáció egyetlen terület, -több technológia létezik replikációra, -természetesen mindnek meg vannak a maga előnyei és -hátrányai.

-

A master/slave replikációs megoldással a master -adatbázison hajthatunk végre modosításokat, -míg a slave adatbázisokon csak -lekérdezéseket. A PostgreSQL legnépszerűbb -master/slave replikációs megoldása a Solny-I.

-

Számos más master/slave replikációs -lehetõség létezik.Egy Listát olvashatsz -ezekrõl itt:

-

http://gborg.PostgreSQL.org/genpage?replication_research

-

A multi-master replikáció lehetővé teszi -több master adatbázis használatát, bár -ez a technológia drasztikusan csökkenti az adatbázis -teljesítményét a sok szinkornizáció -miatt. A PGCluster a legelterjedtebb ilyen megoldás.

-

Egy többfelhasználós replikációs -rendszer készül itt:

-

http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php.

-

4.28) -Milyen kódolási -lehetõségek vannak?

-
    -
  • A contrib/pgcrypto tartlamaz számos SQL -lekérdezésben használható -kódolást.
  • -
  • A kliens-szerver kommunikáció -rejtjelezésére a hostssl használható. Ezt a -pg_hba.conf-ben engedélyeztheted.
  • -
  • Az adatbázis felhsználók jelszavait -tároláskor kódolja a rendszer. 
  • -
  • Régebbi verziókban a PASSWORD_ENCRYPTION -opcióval -lehetett bekapcsolni.
  • -
  • A szerveren használhatsz kódolt fájrendszert.
    -
  • -
-

-
-

A PostgreSQL kiterjesztése

-
-
- 5.1) -Írtam egy felhasználói -funkciót. Miért core dumpol az adatbázis amikor -használom?
-
-

Számos probléma lehet. Elöbb probáld ki a -funkciódat egy különálló -alkalmazásban.

-

5.2) -Hogyan lehet új adattípusokat -és funkciókat hozzáadni a PostgreSQL disztribúcióhoz?
-

-

Küldd el a kiegészítéseid a pgsql-hackers -levelezési listára és a forráskodjaid -végül a contrib-ban kötnek ki.

- 5.3) -Hogyan lehet olyan C funkciót -írni, ami Tuple-t ad vissza?
-

A 7.3 verziótól kezdve a PostgreSQL támogatja a -táblázatokat viszzaadó funkciókat C, -PL/pgSQL és SQL nyelveken. -Bõvebb dokumentációt a Programozó -kézikönyvben találsz. Egy C példa -funkció található a contrib/tablefunc -könyvtárban.

-

5.4) -Megváltoztattam egy forrás -állományt. Miért nem változik a -bináris újrafordítás -után?
-

-

A Makefile-ok nem ismerik a include állományok -megfelelõ függõségeit. Végre kell -hajtanod egy make clean-t, majd újra egy -make-t. Ha GCC-t használsz felhasználhatod a configure -script ---enable-depend opcióját, így a compiler maga -fogja ellenõrizni a -függõségeket.

-
-
- - diff --git a/doc/src/FAQ/FAQ_japanese.html b/doc/src/FAQ/FAQ_japanese.html deleted file mode 100644 index 9aa6b7e805..0000000000 --- a/doc/src/FAQ/FAQ_japanese.html +++ /dev/null @@ -1,1399 +0,0 @@ - - - -PostgreSQL FAQ in Japanese - - - - -

PostgreSQL(ポストグレス・キュー・エル)についてよくある質問とその解答(FAQ)

-

原文最終更新日: Thu Jan 01 14:01:00 EDT 2009

-

現在の維持管理者: Bruce Momjian (bruce@momjian.us)
-Maintainer of Japanese Translation: Jun Kuwamura (juk at postgresql.jp)

-

この文書の最新版は - http://www.postgresql.org/docs/faqs.FAQ.html -で見ることができます。

-

プラットホームに特有の質問については: - http://www.postgresql.org/docs/faq/ -
-に解答があります。

- -

-(以下、訳者による注釈を [訳注: と ] とで囲んで記します。)
-[訳注:
-	日本語版のFAQは、
-		http://www.postgresql.org/docs/faqs.FAQ_japanese.html
-	にあります。
-	最新の日本語版については、この文書の最後にある「日本語版について」をごらんください。
-
-]
-

- -
- -

一般的な質問

- -1.1) PostgreSQLとは何ですか? その呼び方は? Postgresとは?
-1.2) 誰が PostgreSQL をコントロールしていますか?
-1.3) PostgreSQLの著作権はどうなってますか?
-1.4) PostgreSQLをサポートするプラットホームは?
-1.5) PostgreSQLはどこから入手できますか?
-1.6) 最新のリリースはどれですか?
-1.7) サポートはどこで受けられますか?
-1.8) バグレポートはどのように発信しますか?
-1.9) 既知のバグや未だ無い機能はどうやって見つけますか?
-1.10) どのような文書がありますか?
-1.11) SQLはどうすれば学べますか?
-1.12) パッチを提供したり、開発チーム参加するにはどうすればよいですか?
-1.13) 他のDBMSと比べてPostgreSQL はどうなのですか? PostgreSQLを組み込みに使えますか?
-1.14) PostgreSQLは国毎の最新の夏時間の変更を扱いますか?
-1.15) PostgreSQLのメーリングリストの購読をやめるにはどうすればよいですか?また、電子メールを重複して受け取らないようにするにはどうしますか?
- -

ユーザ・クライアントの質問

- -2.1) PostgreSQL にはどんなインターフェースが使えますか?
-2.2) PostgreSQL を Web ページと連携させるにはどんなツールがありますか?
-2.3) PostgreSQL にグラフィカル・ユーザインターフェースはありますか?
- - -

管理上の質問

- -3.1) どうすれば、PostgreSQLを/usr/local/pgsql 以外の場所にインストールできますか?
-3.2) 他のホストからの接続はどのように制御しますか?
-3.3) より良い性能を得るためには、データベース・エンジンをどのように調整しますか?
-3.4) どのようなデバグ機能が使えますか?
-3.5) 接続しようとするときに 'Sorry, too many clients' が出るのはなぜですか?
-3.6) PostgreSQLのアップグレードの手順はどうなりますか?
-3.7) ハードウェアにはどのようなコンピュータを使えばよいですか?
- - -

操作上の質問

- -4.1) 最初のいくつかのロウのみを select するにはどうしますか? ランダムなロウ?
-4.2) 定義されたテーブル、インデックス、データベース、および、ユーザをどのようにして見つけ出しますか?
-4.3) カラムのデータタイプを変更するにはどうしますか?
-4.4) ロウ、テーブル、データベースの最大サイズは?
-4.5) 一般的なテキストファイルのデータを保存するには、データベースのディスク容量はどのくらい必要ですか?
-4.6) クエリが遅いのはなぜでしょう? なぜ、インデックスが使われないのでしょうか?
-4.7) クエリオプティマイザが、どのようにクエリを評価していかを、見るにはどうしますか?
-4.8) 正規表現での検索や大文字と小文字とを区別しない正規表現検索はどのように実現しますか?大文字と小文字とを区別しない検索のためのインデックスはどのように使いますか?
-4.9) クエリの中で、フィールドが -NULL であることを検出するにはどうしますか? -NULLの可能性のあるものをどのようすれば連結できますか? -フィールドがNULLかどうかでどのようにソートができますか?
-4.10) いろいろな文字型のそれぞれの違いは何ですか?
-4.11.1) 通番(serial)/自動増分フィールドはどのようにつくりますか?
-4.11.2) SERIALデータ型に挿入される値は、どうすれば得られますか?
-4.11.3) currval() は他のユーザとの競合状態に陥ることはないですか?
-4.11.4) トランザクションが中断したときにもういちどシーケンス番号が使われないのはなぜですか?シーケンス/SERIALカラムに空きがあるのはなぜですか?
-4.12) OID とは何ですか? TID とは何ですか?
-4.13) エラーメッセージ "ERROR: Memory exhausted in AllocSetAlloc()"が出るのはなぜですか?
-4.14) どのバージョンの PostgreSQL を走らせているのかを調べるにはどうしますか?
-4.15) 現在の時刻がデフォルトとなるようなカラムはどのようにつくりますか?
-4.16) 外部結合(outer join)はどのように実現しますか?
-4.17) 複数のデータベースを使う問い合わせはどのようにすればできますか?
-4.18) 関数から複数のロウまたはカラムを返すにはどうしますか?
-4.19) PL/PgSQL の関数の中で一時テーブルにアクセスするとき、どうして "relation with OID ##### does not exist" というエラーを受け取るのでしょうか?
-4.20) どのようなレプリケーションのソリューションがありますか?
-4.21) テーブルとカラムの名前がクエリーの中で認識 -されないのはなぜですか? なぜ大文字化(キャピタライズ)は温存されないのですか?
- -

日本語に関する質問

- -5.1) 日本語がうまく扱えないのはなぜですか?
-5.2) psql でWindowsからアクセスしたときに、日本語が文字化けするのですが?
-5.3) PostgreSQLで日本語の全文検索はできますか?
- - -
- -

一般的な質問

- -

1.1) PostgreSQLとは何ですか? その呼び方は? Postgresとは?

- -

PostgreSQLはPost-Gres-Q-L(ポスト・グレス・キュー・エル) - と発音しますが、会話の中では単純に Postgres と呼ばれることも - あります。("PostgreSQL"をどう発音するか気になる人のために、 - - 音声ファイルを用意してあります。

- -

PostgreSQL はオブジェクト-リレーショナルデータベースシステムで、 - 伝統的な商用データベースシステムに、次世代DBMSシステ - ムに見られるような改良が施された特徴を有します。PostgreSQLは、無料で - 完全なソースコードを手に入れることができます。

- -

PostgreSQL の開発は、ほとんどが、世界中にひろがったボランティアの - 開発者によって、インターネットを通したコミュニケーションによって行わ - れています。コミュニティによるプロジェクトであるため、どの企業の制御 - もうけません。開発に参加したければ、 - http://www.postgresql.org/docs/faqs.FAQ_DEV.html - にある開発者のFAQを見てください。 -

- -

PostgresはPostgreSQLの広く使われている愛称です。また、バークレー - でのプロジェクトでもともと使われていた名前で、ほかのいずれの愛称に - 比べても遥かに好ましいです。'PostgreSQL' の発音が難しいと思うのであ - れば、そのかわりに 'Postgres' と呼ぶようにしましょう。

- - -

1.2) 誰が PostgreSQL をコントロールしていますか?

- -

PostgreSQLの門番、中央委員会、あるいは、コントロールをする会社を - 探そうとしても、諦めざるをえず ---- 存在しないのです。我々は、中心 - となるコミッティとCVSコミッタを持ちますが、これらのグループはコン - トロールするためというよりも、管理上のものです。ここでは、プロジェ - クトは、だれでも参加ができる開発者とユーザのコミュニティにより方向 - 付けられます。読者がやらなければならないことは、メーリングリストを - サブスクライブして、議論に 参加することです。(Developer's - FAQには、PostgreSQL開発に加わり方についての情報があります。)

- - -

1.3) PostgreSQL の著作権はどうなってますか?

- -

PostgreSQL は下記の著作権に従います。

-

PostgreSQLは古くからのBSDライセンスの下で配布されています。それ - は基本的には、利用者がそのコードを好き勝手に利用することが許されて - います。制限があるとすれば、このソフトウェアに伴ういかなる問題にお - いても法的に責任を我々に負わせることができないということです。 - また、この著作権表示がこのソフトウェアのすべての複製に表示すること - も必要です。以下に、我々が実際に使っているBSD使用許諾書を示します: -

- -
-    [訳注:
-        正文は英語です。参考として、訳文を併記掲載します。
-    ]
-    
-

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.

- -
-	POSTGRESQL データベース管理システム
-
-	部分的著作権 (c) 1996-2009, PostgreSQL国際開発グループ
-	部分的著作権 (c) 1994-1996 カリフォルニア大学本校
-
-
-	  本ソフトウェアおよびその文書一式は上記の著作権表示と、この文章
-	およびこれに続く二つの段落が全ての複製に添付されている限りにおい
-	て、使用、複製、修正および配付の許可を、いかなる目的であっても、
-	無償でかつ同意書無しに行なえることをここに認めます。
-	
-	  カリフォルニア大学は、いかなる当事者にたいしても、利益の壊失を
-	含む、直接的、間接的、特別、偶然あるいは必然的にかかわらず生じた
-	損害について、たとえカリフォルニア大学がこれらの損害について訴追
-	を受けていたとしても、一切の責任を負いません。
-	
-	  カリフォルニア大学は、商用目的における暗黙の保証と、特定目的で
-	の適合性に関してはもとより、これらに限らず、いかなる保証も放棄す
-	ることを明言します。以下に用意されたソフトウェアは「そのまま」を
-	基本原理とし、カリフォルニア大学はそれを維持、支援、更新、改良あ
-	るいは修正する義務を負いません。
-
-    [訳注:
-	著作権に関する正文は上記の英語による表記です。日本語訳はあくまで
-	参考程度としてください。
-    ]
-    
- -

1.4) PostgreSQLをサポートするプラットホームは?

- -

一般的に、最近のUnix互換プラットホームであればPostgreSQLを稼働さ - せられるはずです。リリースの時点で実際にテストを行なったことの報告が - なされたプラットホームについてはインストール手引書に列挙してあります。 -

- -

PostgreSQL は、Win2000 SP4, WinXP, そして、Win2003 など Microsoft - Windows NTベースのオペレーティングシステムで、ネイティブに走ります。 - あらかじめパッケージにされたインストーラが - http://www.postgresql.org/download/windows - からダウンロードできます。 - MSDOSベースのWindowsのバージョン(Win95, Win98, WinMe)では、Cygwinを - 使って PostgreSQL を走らせることができます。

- -
-    [訳注
-	日本語での情報は、次の Windows版に関するFAQの和訳をごらんくださ
-    い(やや古いです)。
-	http://old.postgresql.jp/wg/jpugdoc/FAQ_windows.ja.html
-    ]
-    
- -

次のサイトに Novell Netware 6 への移植版もあります。 - -http://developer.novell.com/wiki/index.php/Postgresql - また、OS/2 (eComStation) バージョンは、 - http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2Fにあります。

-
- - -

1.5) PostgreSQL はどこから入手できますか?

- -

Webブラウザ経由だと、 - http://www.postgresql.org/ftp/、それから、ftp経由だと、 - - ftp://ftp.postgresql.org/pub/ を使います。

- - -

1.6) 最新のリリースはどれですか?

- -

PostgreSQL の最新版はバージョン 8.3.5 です。

-

我々は、1年毎にメジャーリリースを、数ヵ月ごとのマイナーリリースを - 行なうことを計画しています。

- -

-    [訳注
-	バージョン番号の x.y.z の最初の x.y がメジャーリリースの番号に相
-	当し、最後の z がマイナーリリースの番号になります。メジャーリリー
-	スの番号が同じであれば、データベース・クラスタに互換性があります。
-    ]
-    

- - -

1.7) サポートはどこで受けられますか?

- -

PostgreSQL コミュニティは多くのユーザのために、電子メール経由の支 - 援を提供しています。電子メールリストをサブスクライブするためのメイン - となるウェブサイトは - - http://www.postgresql.org/community/lists/です。これから、始める - のであれば general または、bugs といったリストがよいで - しょう。

- -

メジャーなIRC チャンネルは、Freenode (irc.freenode.net)の - #postgresql というチャンネルです。UNIX コマンドでは、 - irc -c '#PostgreSQL' "$USER" irc.freenode.net を使って - 参加できます。同じネットワークに、スペイン語のチャンネル - (#postgresql-es)、フランス語のチャンネル - (#postgresqlfr)、ブラジル語チャンネル (#postgresql-br) - もあります。また、EFNetにもPostgreSQLチャンネルがあります。

- -

-    [訳注:
-	  1999年7月23日、日本ポストグレスユーザー会、略称JPUGが設立されました。
-	JPUG は非営利組織で、PostgreSQLを利用する人達の相互協力の場となっています。  
-	(2006年 特定非営利活動(NPO)法人日本PostgreSQLユーザ会になりました。
-	Web会員と正会員の会費は無料ですが、協賛会員の会費と会員の貢献で
-	  会は運営されています。)
-	詳しくは、JPUG のWeb サイト:
-		http://www.postgresql.jp/
-	をごらんください。
-
-	日本語のIRCチャンネル '#PostgreSQL:*.jp' も存在します。
-    ]
-    

- -

商用サポート会社のリストは - http://www.postgresql.org/support/professional_supportにあります。

- - -

1.8) バグレポートはどのように発信しますか? -

- -

- http://www.postgresql.org/support/submitbug - のPostgreSQL バグフォームを訪れてください。 バグレポートを提出する仕方 - についての手引と指針があります。

- -

それと同時に ftp サイト ftp://ftp.postgresql.org/pub/ - で、最新バージョンの PostgreSQL を探してみてください。

- - -

1.9) 既知のバグや未だ無い機能はどうやって見つけますか? -

- -

PostgreSQLは拡張されたSQL:2003のサブセットをサポート - します。我々のページの TODO リストに、 - 既知のバグや欠落機能や将来計画についての記述があります。

- - -

特徴の要求は普通次のいずれかの解答の中にあります:

-
    -
  • 既にここにある機能は、 - TODO - リストです
  • -
  • 次のような機能は目論まれていません。それは: -
      -
    • SQL規格に準ずる既存の機能と重複するもの
    • -
    • コードの複雑性ばかりを高めて、得るものが少ない機能
    • -
    • 安全性が確められない機能
    • -
    -
  • -
  • 新しい機能は、 - TODO - のリストに
  • 加えられられます。 -
- -

我々は、PostgreSQL に関して、電子メールで直接対応して - TODO - リストを最新に更新してゆくほうがより効果的であることを知っています - ので、バグ追跡システムは使いません。 - 現実に、このソフトウェアの中でバグはそれほど長くはい続けませんし、 - 多くのユーザに影響するバグは早急に修正されます。PostgreSQLのリリース - で、すべての変更点、改良点、そして、修正点を知りたければ、 - CVS - のログメッセージを見てください。リリースノートにさえ、このソフトウェア - に加えられたすべての変更点は網羅されていません。

- - -

1.10) どのような文書がありますか?

- -

配付の中に、いくつかのマニュアルとオンライン・マニュアル(マニュ - アル・ページ)およびいくつかの小さなテスト例題が含まれます。 - /docディレクトリをごらんください。また、マニュアルは、 -http://www.postgresql.org/docs/でオンラインでも閲覧できます。 -

- - -

-    [訳注:
-	JPUG 文書・書籍関連分科会で翻訳されたマニュアルもあります。
-		
-	http://www.postgresql.jp/document/pg830doc/
-	インプレスから、
-	
-	PostgreSQLオフィシャルマニュアルとして出版されています。
-    ]
-    

- - -

オンラインで参照できる PostgreSQL の本も2冊あります。 - http://www.postgresql.org/docs/books/awbook.html - -

-    [訳注:
-	この本は、JPUG「PostgreSQL Book翻訳分科会」
-	で翻訳され、ピアソンから
-	「はじめてのPostgreSQL」として出版されています。
-    ]
-    

- - および、 - http://www.commandprompt.com/ppbook/です。 - -

-    [訳注:
-	邦訳は「実践 PostgreSQL」
-	がオライリーから出版されています。
-    ]
-    

- - 購入可能な書籍の目録は、http://www.postgresql.org/docs/books/ - にあります。 - - PostgreSQL 技術情報記事も、http://wiki.postgresql.org/wiki/Community_Generated_Articles%2C_Guides%2C_and_Documentation - にあります。

- -

-    [訳注:
-	日本語の書籍等については、日本PostgreSQLユーザ会の、http://www.postgresql.jp/PostgreSQL/references.html
-	もごらんください。
-    ]
-    

- -

コマンドラインのクライアントプログラムpsql にも、型、 - 演算子、関数、集約、その他の情報を調べるために、素晴らしい \d コマンド - がいくつかあります。 \? を入力すると利用可能なコマンドが表示されます。

- -

我々の Web サイトには、さらに沢山の文書があります。

- -

-    [訳注:
-	2008年11月18日、PostgreSQL普及のために一般向けの情報を扱う
-	「Let's Postgres」というポータルサイトがオープンしました。http://lets.postgresql.jp/
-    ]
-    

- - -

1.11) SQL はどうすれば学べますか?

- -

まず、 上記で述べた PostgreSQL についての本を読むことを検討してください。 - The Practical SQL Handbook, Bowman Judith S. et al., - Addison-Wesley も多くのユーザに好評です。 ほかでは、The Complete - Reference SQL, Groff et al., McGraw-Hill も好評です。

- - -

素晴らしい手引書は、 -

  • 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 -
  • -
  • http://sqlzoo.net -
  • - - にあります。

    - - -

    -    [訳注:
    -	 日本PostgreSQLユーザ会の日本語の参考文献の紹介ページ
    -		
    -http://www.postgresql.jp/PostgreSQL/references.html
    -	があります。
    -	 堀田倫英氏の「PostgreSQL日本語マニュアル」
    -		http://www.net-newbie.com/
    -	ではオンラインマニュアルの検索ができます。
    -	 丸山不二夫氏のUNIX データベース入門
    -		http://www.wakhok.ac.jp/DB/DB.html
    -	もオンラインで読むことができます。
    -	 Nikkei BP IT Pro にある石井達夫氏の PostgreSQL ウォッチ
    -	では毎回新しい情報をとりあげています。
    -    ]
    -    

    - -

    1.12) パッチを提供したり、開発チーム参加するにはどうすればよいですか?

    - -

    - (開発者向けの)Developer's FAQをごらんください。

    - - -

    1.13) 他のDBMSと比べPostgreSQLはどうなのですか? PostgreSQLを組み込みに使えますか?

    - -

    ソフトウェアを評価する方法にはいくつかあります。機能と性能と信頼性と - サポートと価格です。

    - -
    -
    機能(Features)
    -
    - PostgreSQLは、トランザクション、サブクエリ、トリガー、ビュー、外 - 部キー整合性参照、および、洗練されたロック機構など、大規模商用 - DBMSが持つ機能をほとんど持っています。さらに - PostgreSQLは、ユーザ定義型、継承、ルール、それから、ロック競合を縮 - 小するマルチバージョン同時性制御など、商用DBMSも持 - ち合わせないような機能をいくつか持ち合わせています。
    - -
    - -
    性能(Performance)
    -
    - PostgreSQLは他の商用あるいはオープンソースのデータベースと互角の性 - 能も持ちます。ある面ではより早かったり、ほかの面ではより遅かったり - します。他のデータベースに比べた性能は、ふつう +/-10% くらいでしょう。 -
    - -
    信頼性(Reliability)
    -
    - 我々は、DBMSの信頼性が高くなくてはその価値が無いこ - とを理解してます。十分テストして、安定したコードをバグを最小にして - からリリースするように努めてます。それぞれのリリースは少なくとも1 - カ月以上のベータ・テストを行ない、これまでのリリースの履歴が、製品 - 版として安定した堅固なリリースであることを物語っています。この分野 - では、他のデータベースと比べても遜色がないことに自信を持っています。 -
    -
    - -
    サポート(Support)
    -
    - 我々のメーリングリストは、遭遇するいかなる問題についても解決への手 - 助けをしてくれる、開発者やユーザの大きな集まりへの接点を提供してい - ます。我々は問題の解決を保証することはできませんが、商用データベー - スであっても常に解決されるわけではありません。開発者や、ユーザ・コ - ミュニティ、マニュアル類、それに、ソースコードなどへ直接アクセスで - きることによって、PostgreSQLのサポートは、他のDBMS - サポートよりも優れたものとなっています。御要望に答えて、事柄毎の商 - 用サポートなどもあります(FAQ1.7節をごらんくだ - さい)。 -
    -
    - -
    価格(Price)
    -
    - PostgreSQLの利用は、商用でも非商用でも、すべて無料です。上記に示し - てあるBSDスタイルの使用許諾に外れない限り、PostgreSQLのコードを制 - 限無しで商品に組み込むことができます。
    -
    -
    - PostgreSQLはクライアント/サーバ・アーキテクチャで設計されていて、 - クライアントとサーバおよびそれを補助するいろいろなプロセスが別々に走 - ることが要求されます。多くの組み込みアーキテクチャはこのような要求を - サポート可能です。しかし、お使いになっている組み込みアーキテクチャに - よっては、データベースサーバがアプリケーション・プロセスの中で走るこ - とを要求される場合があり、Postgresを使うことはできないので、軽量のデー - タベースソリューションを選択すべきです。 -

    - -

    1.14) PostgreSQLは国毎の最新の夏時間の変更を扱いますか?

    - -

    合州国の夏時間の変更は、PostgreSQLのリリース8.0.4以降[4+]と、その - 後のメジャーリリース、たとえば 8.1 には含まれています。カナダとオー - 西部ストラリアの変更は、8.0.[10+], 8.1.[6+] および、その後のメジャー - リリースのすべてに含まれます。8.0より前のPosrgreSQLではオペレーティ - ングシステムのタイムゾーンデータベースを夏時間情報のために使ってい - ます。

    - -
    - -

    1.15) PostgreSQLのメーリングリストの購読をやめるにはどうすればよいですか?また、電子メールを重複して受け取らないようにするにはどうしますか? -

    - -

    PostgreSQLのMajordomo - ページから、PostgreSQLに関する複数のメーリングリストの購読の開始と中止 - ができるようになっています。(ログインするためにはMajaordomoから送ら - れる御本人のパスワードが必要になります。)

    - -

    PostgreSQLnoすべてのメーリングリストでは、返信はメーリングリスト - とかつ元のメールの投稿者へ送られるように構成してあります。こ - れにり利用者は、もっとも迅速にメールへの返信を受けられるようになって - います。既に直接受け取っているメールを、リストから重複して受け取りた - くない場合は、Majordomo のChange Settingsページから、 - eliminateccをチェックします。また、selfcopyのチェック - をはずすことで、自分の送ったメールのコピーを受け取らないようにもでき - ます。

    - - -

    ユーザ・クライアントの質問

    - - -

    2.1) PostgreSQL にはどんなインターフェースが使えますか?

    - -

    PostgreSQL のインストールに含まれる物はCと組込み - Cのインターフェースだけです。その他のインターフェース - は独立したプロジェクトで、別々にダウンロードされます。分かれることで、 - それぞれの開発チームが独自のリリーススケジュールを持つことが許されま - す。

    - -

    PHP のようないくつかのプログラミング言語は、 - PostgreSQLのインターフェースを含んでいます。Perl, TCL, - Python, そして、そのほかの利用可能な言語のインターフェースは、http://pgfoundry.org - の Drivers/Interfaces の節の中とインターネットの検索でみつけ - られます。 -

    - - -

    2.2) PostgreSQL を Web ページと連携させるにはどんなツールがありますか?

    - -

    データベースを裏に持つ Web ページについての素晴らしい紹介が、
    - http://www.webreview.comにあります。

    -

    Web への拡張のためには、PHP(http://www.php.net/) - が卓越したインターフェースとなっています。

    - -

    -    [訳注:
    -	  PHPに関する日本語の情報は、2000年4月19日に発足した日本PHPユーザ会のサイト
    -		http://www.php.gr.jp/
    -	あるいは、廣川 類さんのサイト
    -		http://www.geocities.jp/rui_hirokawa/php/
    -	にかなりまとめられています。
    -    ]
    -    

    - -

    処理が複雑な場合、多くの人は Perl インターフェースと CGI.pm か - mod_perl を使います。

    - - -

    2.3) PostgreSQL にグラフィカル・ユーザインターフェースはありますか?

    - - -

    商用とオープンソース開発者によるもの両方で、PostgreSQLには多くのGUIツールが利用可能で、詳細なリストは、 -PostgreSQL GUI ツールについてのコミュニティガイド にてごらんください。

    - -

    -    [訳注:
    -	pgAdmin3 はPostgreSQL標準GUI管理ツールで、Windows版(PostgreSQL
    -	for Windows) に同梱されています。詳しい情報は、
    -	http://www.pgadmin.org/にあります。
    -    ]
    -    

    - -
    - -

    管理上の質問

    - -

    3.1) どのようにすれば /usr/local/pgsql 以外の場所にインストールできますか?

    - -

    簡単な方法は、 configure を走らせるときに --prefix オプショ - ンを指定することです。

    - - -

    3.2) 他のホストからの接続はどのように制御しますか?

    - -

    既定値では、PostgreSQL は Unix ドメインソケット、または、TCP/IP接 - 続のローカルマシンからの接続しか許しません。postgresql.conf の中の - listen_addresses を修正し、かつ、$PGDATA/pg_hba.conf - ファイルを適切に直し、データベースサーバを再起動して、ホストベース - の認証を有効にしないかぎりは、他のマシンからは接続できないでしょう。

    - - -

    3.3) より良い性能を得るためには、データベース・エンジンをどのように調整しますか?

    - -

    性能改善の可能性のありそうな主な領域が3つあります:

    -
    -
    クエリの変更
    - -
    クエリを修正してより良い性能を得ることを含みます: -
      -
    • 式および部分インデックスを含む、インデックスを作成
    • -
    • 複数のINSERTのかわりにCOPYを使用
    • -
    • 複数の文をグループ化し、1つのトランザクションにしてコミットのオーバヘッドを削減
    • -
    • インデックスからから沢山のロウを取り出すときはCLUSTERを使用
    • -
    • クエリの出力のサブセットを返すためにLIMITを使用
    • -
    • 準備されているクエリを使用
    • -
    • オプティマイザの正確な統計を維持するためにANALYZEを使用
    • -
    • VACUUM または pg_autovacuum の常用
    • -
    • 大きなデータ変更のあるときはインデックスを削除
    • -

    -
    -
    - -
    サーバ構成
    - -
    postgresql.confの設定のいくつかは性能に影響します。 - 詳しくは、 - Administration Guide/Server Run-time Environment/Run-time - Configuration の全件リストをごらんください( - JPUGサイトの日本語版、サーバの構成)。 - そして、解説として、 - http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html - および、 - http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html を - ごらんください。 -
    -
    -
    - -
    ハードウェアの選定
    - -
    性能におけるハードウェアの影響は - - http://www.powerpostgresql.com/PerfList/ と、 - http://momjian.us/main/writings/pgsql/hw_performance/index.html - (JPUGサイトの日本語版) - に述べられています。 -
    -
    -
    -
    - - -

    -    [訳注:
    -      JPUG理事長の片岡裕生氏による、「今すぐできるPostgreSQLチューニング」
    -      というコーナーが ThinkIT サイトにあり、実作業の参考になります。
    -    	http://www.thinkit.co.jp/free/tech/10/1/1.html
    -    ]
    -    

    - - -

    3.4) どのようなデバグ機能が使えますか?

    - -

    サーバ構成変数については、 -href="http://www.postgresql.org/docs/current/interactive/runtime-config-logging.html">http://www.postgresql.org/docs/current/interactive/runtime-config-logging.html - に示されるように多くの log_* があり、クエリとプロセス - の統計情報を出力することができ、デバグや性能測定にはとても便利です。

    - - -

    3.5) 接続しようとするときに 'Sorry, too many clients' が出るのはなぜですか?

    - -

    既定での制限である 100 のデータベースセッションに達してしまって - います。サーバーの同時接続できるバックエンドプロセスの制限値を増やす - 必要があります。postgresql.conf の中のmax_connections - の値を変更してサーバを再起動することで可能になります。

    - - -

    3.6) PostgreSQLのアップグレードの手順はどうなりますか?

    - -

    バージョン番号付けの方針について、更新全般についての解説はhttp://www.postgresql.org/support/versioning を、 - そして、アップグレードについての一般的な説明は - http://www.postgresql.org/docs/current/static/install-upgrading.html - をご覧ください。 -

    -

    -[訳注:
    -   アップグレードについての和訳版は下記にあります。
    -  http://www.postgresql.jp/document/current/html/install-upgrading.html
    -]
    -

    - - -
    -[訳注:
    -   原文では、下記の内容は独立したページに移され、削除されています。
    -
    - -

    新しい機能を盛り込むPostgreSQLのメジャーリリースはだいたい年に1回 - 程度行ないます。メジャーリリースは、たとえば、8.1から8.2へのように、 - バージョン番号の1番目か2番目の部分を増やしてゆきます。

    - -

    PostgreSQLのメジャーリリースは通常、システムテーブルとデータの内 - 部フォーマットを変更します。これらの変更はたいていは複雑なのでで、デー - タファイルの後方互換性を維持したりはしません。メジャーアップグレード - のためには、データベースのダンプ/リロードが必要になります。

    - -

    マイナーリリースは、たとえば、8.1.5 から8.1.6へのように、バージョ - ン番号の3番目の値を増やします。PostgreSQLチームは、マイナーリリース - に対しては、バグフィクスしか行ないません。すべてのユーザは、できるだ - け最新のマイナーリリースに更新すべきです。アップグレードには、常にリ - スクがつきものですから、PostgreSQLのマイナー修正リリースでは、頻繁に - 発生したり、セキュリティに関係したり、データがつぶれるバグだけを修正 - し、アップグレードのリスクを最小限にとどめます。我々のコミュニティで - は、アップグレードするリスクよりも、アップグレードしないリスク - のほうが高いと考えています。

    - -

    マイナーリリースのアップグレードにはダンプとリストアの必要はなく、 - データベースサーバを停止して、アップデートされたバイナリをインストー - ルし、サーバをリスタートします。

    -
    -]
    -
    - - -

    3.7) ハードウェアにはどのようなコンピュータを使えばよいですか?

    - -

    PCハードウェアはほとんど互換性がありますので、ほとんどの人は、す - べてのPCハードウェアが同じ品質だと思い込む傾向があります。しかし、そ - れは間違いです。ECC RAM、SCSI、および、高品質マザーボードは、安いハー - ドウェアに比べると、より信頼性が高く、より性能も良いのです。 - PostgreSQL はほとんどのハードウェアで稼働しますが、信頼性や性能が重 - 要な場合は、使用中のハードウェアのオプションについて調査することが - 賢明です。バッテリーバックアップ付きのキャッシュを持つディスクコント - ローラも役に立ちます。我々のメーリングリスト上でもハードウェアオプショ - ンのトレードオフについて議論することができます。

    -
    - - -

    操作上の質問

    - -

    4.1) 最初の数ロウのみを SELECTするにはどうしますか?ランダムなロウ? -

    - -

    取得したいロウがほんの数行で、SELECT の実行時に取得するロウの - 数が分かっていれば LIMIT を使いましょう。インデックスが - ORDER BY とマッチすれば、クエリ全体を(丸ごと)実行しなくても済む場合も - あります。SELECT する時点でロウの数が不明なら、カーソルを使って - FETCH しましょう。 - -

    ランダムにロウをSELECTするには、次の文を使います: -

    -    SELECT col
    -    FROM tab
    -    ORDER BY random()
    -    LIMIT 1;
    -
    - - -

    4.2) 定義されたテーブル、インデックス、データベース、および、ユーザをどのようにして見つけ出しますか?psqlで使われているクエリを表示するにはどうしますか?

    - -

    psql の中で \dtコマンドを使ってテーブルを見ることができ - ます。psqlの中で \? を使って、コマンドの全リストを調べることができま - す。一方で、psql のソースコードで、バックスラッシュコマンドを - 出力する pgsql/src/bin/psql/describe.c ファイルを読むこともで - きます。その中には、 SQL コマンドを生成する部分も含ま - れます。また、 -E オプションを付けて psql を開始すると、 - 入力されたコマンドを実行するためのクエリを印字出力するようになります。 - PostgreSQLは SQL 準拠の INFORMATION SCHEMA インター - フェースを提供しますので、データベースについての情報を問い合わせるこ - ともできます。

    - -

    pg_ で始まるシステムテーブルでもこれらを記述することができ - ます。

    - -

    psql -lを使うと全てのデータベースをリストします。

    - -

    それと、pgsql/src/tutorial/syscat.source を試してみてくだ - さい。そこには、データベースのシステムテーブルから情報を得るために必 - 要な SELECT 文が沢山あります。

    - - -

    4.3) カラムのデータ型を変更するにはどうしますか?

    - -

    カラムのデータ型の変更は 8.0 以降では、 - ALTER TABLE ALTER COLUMN TYPE を使うことにより間単に - なりました。

    - -

    それより前のバージョンでは、以下のようにします:

    -
    -    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;
    -
    - -

    これを行なったときは、抹消された行が使っているディスク空間を回収 - するためにVACUUM FULL tabをしたほうが良いかもしれません。

    - -

    4.4) ロウ、テーブル、データベースの最大サイズは?

    - -

    制限は以下のとおりです:

    -
    - - - - - - - - -
    データベースの最大サイズ?制限無し (32 TB のデータベースも存在します)
    テーブルの最大サイズ?32 TB
    ロウの最大サイズ?400 GB
    フィールドの最大サイズ?1 GB
    テーブル内での最大ロウ数?制限無し
    テーブル内での最大カラム数?カラムの型によって 250-1600
    テーブル内での最大インデックス数?制限無し
    -
    - -

    もちろん、これらは実際は無制限ではなく、ディスク容量とメモリーや - スワップスペースの大きさにより制限されます。性能はこれらの値がことの - ほか大きな時に煽りを受けます。

    - -

    最大テーブルサイズの32TBはオペレーティングシステムによる巨大ファ - イルのサポートは必要としません。巨大なテーブルは複数の1GBのファイル - に分けて保存されますので、ファイルシステムの制限は重要ではありません。 -

    - -

    デフォルトのブロックサイズを32kに増加することで、最大テーブルサイズ - と行サイズと最大カラム数とを4倍にすることができます。また、最大テーブル - サイズはテーブルパーティションを使って増やすこともできます。

    - -

    ひとつの制限は、約2,000文字以上の長さのカラムにインデックスを付 - けることができないことです。 幸いにも、そのようなインデックスは実際 - は必要ありません。長いカラムのMD5ハッシュの関数インデックスは一意性 - がなによりの保険で、また、フルテキストのインデックスではカラム内の - 単語を検索することができます。

    - -

    4.5) 一般的なテキストファイルのデータを保存するには、データベースのディスク容量はどのくらい必要です?

    - -

    普通のテキストファイルを PostgreSQL のデータベースに保存するには、 - 最大で約5倍のディスク容量を必要とします。

    - - -

    例題として、各行に整数とテキスト記述を持つ 100,000行のファイルを - 考えてみましょう。テキストの文字列の平均長さを20バイトと仮定すると、 - フラットファイルの大きさは約2.8MB です。このデータを含む PostgreSQL - データベースファイルの大きさは次のように約5.2MBと見積もることができ - ます: - -

    -    24 bytes: 各ロウのヘッダ(概算)
    -    24 bytes: 整数(int)フィールドとテキスト(text)フィールド
    -   + 4 bytes: ページ上のタップルへのポインタ
    -   ----------------------------------------
    -    52 bytes per row
    -
    -   PostgreSQL のデータページサイズは 8192バイト(8KB)なので:
    -
    -   8192 bytes per page
    -   -------------------   =  146 rows per database page (切り捨て)
    -     52 bytes per row
    -
    -   100000 data rows
    -   --------------------  =  633 database pages (切り上げ)
    -      158 rows per page
    - 
    -  633 database pages * 8192 bytes per page  =  5,185,536 bytes (5.2 MB)
    -
    - -

    インデックスは、これほどのオーバヘッドは要求しませんが、インデッ - クス付けされるデータを含む以上、それなりに大きくなります。

    -

    NULLはビットマップとして保存されていて、それらがわ - ずかにスペースを使います。

    - - -

    4.6) クエリが遅いのはなぜでしょう? なぜ、インデックスが使われないのでしょうか?

    - -

    インデックスは、すべてのクエリで使われるわけではありません。テー - ブルが最小サイズより大きく、クエリでそのわずかなパーセンテージのロウ - を選択する時だけ、インデックスは使われます。これはインデックススキャ - ンにより起こされるランダムなディスクアクセスは、テーブルをストレート - に読む順次走査よりも遅くなることがあるからです。

    - -

    インデックスを使うかを決定するために、PostgreSQL はテーブルについ - ての統計情報を持たなければなりません。この統計情報は、 - VACUUM ANALYZEまたは、単に ANALYZE を使っ - て収集することができます。統計情報を使ってオプティマイザはテーブルの - 中にあるロウ数を知り、インデックスを使うべきかの決定をより正しくでき - ます。統計情報は最適な結合順や結合方法を決める上でも貴重なものもあり - ます。統計情報の収集は、テーブルの内容が変わる毎に繰返しなされるべ - きです。

    - -

    インデックスは、通常 ORDER BY や結合を行なうため - には使われません。順次スキャンに続く明示的ソートは、巨大なテーブルの - インデックススキャンよりも普通は高速です。

    - - しかし、ORDER BYと組み合わされたLIMIT - は、テーブルの小さな部分を返すためにたびたびインデックスを使うでしょ - う。 - -

    もし、オプティマイザが間違ってシーケンシャルスキャンを選択したこ - とに疑いがなければ、SET enable_seqscan TO 'off'に設定し - て、クエリをもう一度実行し、インデックススキャンがまちがいなく速くなっ - ているかどうかをみてください。

    - -

    LIKE あるいは ~ のようなワイルドカード演算 - 子は特別な環境でしか使えません: -

      -
    • 検索文字列が文字列の最初にききます。たとえば:
    • -
        -
      • LIKE パターンが%で始まらない
      • -
      • ~ (正規表現) パターンは^で始まらなければならない
      • -
      -
    • 検索文字列を文字クラスから始めることはできません。たとえば、[a-e]。
    • -
    • ILIKE や ~* のような大文字と小文字を区別し - ない検索は使えません。そのかわり、このFAQの4.8節で説明する式インデックスが使えます。 -
    • -
    • initdb においては、デフォルトでCロケールが使われな - くてはなりません。その理由は、Cロケール以外では次に大きな文字を - 知ることができないからです。このような場合、
      LIKE
      イン - デクシングにだけ働くような、特別な
      text_pattern_ops
      イ - ンデックスを作成することもできます。また、それを全文検索のフル - テキストのインデックス作成に使うことができます。 -
    • -
    -

    - - -

    4.7) 問い合わせオプティマイザがどのように問い合わせを評価するのかを見るにはどうしますか?

    - -

    オンラインマニュアルで EXPLAIN を見てください。

    - -

    4.8) 正規表現での検索や大文字と小文字とを区別しない正規表現検索はどのように実現しますか?大文字と小文字とを区別しない検索のためのインデックスはどのように使いますか?

    - -

    ~演算子は正規表現照合を行ない、~* は大文字と小文字 - を区別しない(case-insensitive)正規表現照合を行います。 大文字と小文 - 字を区別しない LIKE 演算子を ILIKE と - いいます。

    - -

    大文字と小文字を区別しない等値比較は次のように表現できる: -

    -    SELECT *
    -    FROM tab
    -    WHERE lower(col) = 'abc';
    -
    - -

    標準インデックスでは使われず、しかしながら、もし、式インデックス - を作ったならそれが使われるでしょう。

    - -
    -    CREATE INDEX tabindex ON tab (lower(col));
    -
    - -

    上記のインデックスがUNIQUEで作成された場合、カラム - は大文字と小文字を格納できますが、その違いが文字ケースだけであっても - 同一にはなりません。あえて特定の文字ケースをカラムに格納するには - CHECK制約か、トリガーを使ってください。

    - - - -

    4.9) クエリの中で、フィールドがNULL であることを検出するにはどうしますか? NULL であることを検出するにはどうしますか? フィールドがNULLかどうかでどのようにソートができますか?

    - -

    以下のように、IS NULL と IS NOT - NULLで、そのカラムをテストしてみます:

    - -
    -   SELECT *
    -   FROM tab
    -   WHERE col IS NULL;
    -
    - -NULLの可能性のあるものを連結するには、COALESCE()を -次のように使います。 - -
    -   SELECT COALESCE(col1, '') || COALESCE(col2, '')
    -   FROM tab
    -
    - -

    NULL状態でソートするには、IS NULL と - IS NOT NULL の修飾子を ORDER BY 句の中 - で使ってみます。true のものは false のものよりも高い値 - として並べられますので、次の例では NULL の記載が結果リストの上部に置 - かれます。 - -

    -   SELECT *
    -   FROM tab
    -   ORDER BY (col IS NOT NULL)
    -
    - - -

    4.10) いろいろな文字型のそれぞれの違いは何ですか? -

    - -
    - - - - - - - -
    型内部名備考
    VARCHAR(n)varchar最大長のサイズを指定する、詰め物無し
    CHAR(n)bpchar指定された固定長となるように空白が詰められる
    TEXTtext長さに特別な上限は無し
    BYTEAbytea可変長のバイト配列(null-byte safe)
    "char"char1文字
    -
    - -

    内部名にお目にかかるのは、システム・カタログを調べるときや、エラー - メッセージを受け取るときです。

    - -

    上記の型のうち最初の4つの型は "varlena" 型です(すなわち、ディス - クの最初の4バイトがデータ長で、それの後に実際のデータが続きます)。 - このように実際の空間は宣言された大きさよりも少し大きくなります。しか - し、長い値は圧縮されるので、ディスク上の空間は思ったよりも小さくなります。

    - -

    VARCHAR(n) は可変長の文字列を保存するのに最適です - が、保存できる文字列の長さに制限があります。TEXT は長 - さに制限の無い文字列の保存のためのもので、最大で 1ギガバイトです。 - CHAR(n)は、VARCHAR(n)が与えられた文字 - だけを保存するのに対し、ブランクを詰め込んでいつも同じ長さで文字列を - 保存するのに最適です。BYTEAは、部分的に - NULL のバイトを含むバイナリデータを保存するためのもの - です。これらのタイプは同じくらいの性能特性をもちます。

    - - -

    4.11.1) 通番(serial)/自動増分フィールドはどのようにつくりますか?

    - -

    PostgreSQL は SERIAL データ型をサポートします。カ - ラム上にシーケンスを自動作成します。たとえば、

    - -
    -    CREATE TABLE person ( 
    -        id   SERIAL, 
    -        name TEXT 
    -    );
    -
    - は自動的に次のように翻訳されます: -
    -    CREATE SEQUENCE person_id_seq;
    -    CREATE TABLE person ( 
    -        id   INT4 NOT NULL DEFAULT nextval('person_id_seq'),
    -        name TEXT
    -    );
    -
    - -

    -    [訳注:
    -	CREATE UNIQUE INDEX person_id_key ON person ( id );
    -	は、 7.3 以降は自動的には行なわれなくなりました。
    -    ]
    -    

    - -

    自動的につくられる通番は、 - <table>_<serialcolumn>_seq - と名付けられていて、table と serialcolumn は、それぞれ - テーブルと SERIAL カラムの名前です。 - 通番については、オンラインマニュアルでcreate_sequence - をごらんください。

    - - -

    4.11.2) SERIALデータ型に挿入される値は、どうすれば得られますか?

    - -

    最も簡単な方法は、割り当てられたSERIAL値を - RETURNINGとして取得することです。 - 4.11.1の例題テーブルを使うと次のように - なります。 - -

    -    INSERT INTO person (name) VALUES ('Blaise Pascal') RETURNING id;
    -
    - - -

    4.11.3) currval() は他のユーザとの競合状態に陥ることはないですか?

    - -

    それはありません。currval() は、すべてのユーザではありませ - んが、読者のセッションに与えられた現在の値を返します。

    - - -

    4.11.4) トランザクションが中断したときにもういちどシーケンス番号が使われないのはなぜですか?シーケンス/SERIALカラムに空きがあるのはなぜですか?

    - -

    同時性を改善するために、実行中のトランザクションに、必要に応じてト - ランザクションが終了するまでロックされないようシーケンス値を与えてい - ます。このためトランザクションが中断されると番号割り当てにギャップを - 生じます。

    - - -

    4.12) OID とは何ですか? CTID とは何ですか?

    - -

    テーブルがWITH OIDSでつくられた場合は、それぞれの - ロウに一意なOIDが取られます。 - OIDは自動的に4バイトの整数で与えられ、それは、全イン - ストレーションを通して一意な値となります。しかし、約40億でオーバーフ - ローし、そして、OIDは重複をしはじめます。PostgreSQLは - 内部システムテーブルを一緒にリンクするためにOID を使 - います。 - -

    ユーザのテーブルのカラムに一意の番号を付けるためには、 - OID ではなく SERIAL を使うのが最もよい - でしょう。SERIALの連番は1つのテーブル内でのみ一意にな - るからで、オーバーフローを起こしにくいと考えられます。 - 8バイトのシーケンス値を保存するために、SERIAL8があり - ます。

    - -

    CTID は、特定の物理ロウをブロックとオフセットの値 - で識別するために使われます。CTIDは、ロウが修正された - り再読込みされたときに変わります。また、物理ロウを差すためにインデッ - クスの記載に使われます。

    - - -

    4.13) エラーメッセージ "ERROR: Memory exhausted in AllocSetAlloc()"が出るのはなぜですか?

    - -

    おそらく、システムの仮想メモリーを全て使い果たしてしまっている可 - 能性があるか、カーネルがあるリソースについてもつ制限値が低すぎる可能 - 性があります。サーバを始動する前にこれを試してみてください:

    - -
    -    ulimit -d 262144
    -    limit datasize 256m
    -
    - - シェルによって、どちらかひとつが成功するでしょうが、これはプロセスの - データセグメント制限をより高く設定し、たぶんクエリが完結するようにな - るでしょう。このコマンドは現行のプロセスと、このコマンドを走らせた後 - に作られる全てのサブプロセスについて適用されます。バックエンドがとて - も多くのデータを返すためにSQL クライアントで問題が続 - いているのであれば、クライアントを開始する前にこれを試してみてくださ - い。 - -

    4.14) どのバージョンの PostgreSQL を走らせているかを調べるにはどうしますか?

    - -

    psql から SELECT version(); をタイプします。

    - - -

    4.15) 現在の時刻がデフォルトとなるようなカラムはどのようにつくりますか?

    - -

    CURRENT_TIMESTAMPを使います:

    -
    -    CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
    -
    - - -

    4.16) 外部結合(outer join)はどのように実現しますか?

    - -

    PostgreSQL は SQL 標準構文を使う外部結合(アウタージョイン)をサポー - トします。ここに 2つの例題があります。

    - -
    -    SELECT *
    -    FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
    -
    -あるいは -
    -    SELECT *
    -    FROM t1 LEFT OUTER JOIN t2 USING (col);
    -
    - -これらの象徴的なクエリでは t1.col を t2.col と結合して、t1 の結合されなかったロウ(t2 と一致しなかったロウ)も返しています。RIGHT 結合は t2 の結合されなかったロウを加えるでしょう。FULL 結合は、一致したロウに t1 と t2 からは結合されなかったロウを返すでしょう。OUTER という言葉はオプションで LEFT, RIGHT, または FULL などの結合を仮定されています。通常、結合はINNER結合と呼ばれます。 - - -

    4.17) 複数のデータベースを使う問い合わせはどのようにすればできますか?

    - -

    現行のデータベース以外への問い合わせの方法はありません。というの - もPostgreSQLがデータベース仕様のシステムカタログを読み込むためで、そ - こには、たとえそのふりをするだけにしろ、データベースを越えて問い合わ - せをするすべがありません。

    - -

    contrib/dblink はデータベース間(cross-database)の問い合わ - せを関数呼出しにより許します。もちろん、クライアントは同時に接続を別 - のデータベースへも張らなくてはならず、結果をクライアント側でマージし - なくてはなりません。

    - - -

    4.18) 関数から複数のロウまたはカラムを返すにはどうしますか?

    - -

    集合を返す関数(Set Returning Functions): - - http://wiki.postgresql.org/wiki/Return_more_than_one_row_of_data_from_PL/pgSQL_functions - を使うと簡単です

    。 - - -

    4.19) PL/PgSQL の関数の中で一時テーブルにアクセスするとき、どうして "relation with OID ##### does not exist" というエラーを受け取るのでしょうか?

    - -

    バージョン8.3より前の PostgreSQL では、PL/PgSQL は関数スクリプトを - キャッシュしたため、運悪くその副作用がありました。PL/PgSQL 関数が一時 - テーブルにアクセスして後でそのテーブルを消して作りした場合に、関数が - もう一度呼び出されたときは、その関数のキャッシュしていた内容がまだ古い - 一時テーブルを指し示したままだったからです。 - この、解決策として、PL/PgSQLの中で EXECUTE を一時テー - ブルへのアクセスのために使います。そうすると、クエリは毎回パースをや - り直しされるようになります。

    - -

    この問題は、 PostgreSQL バージョン8.3 以降では起きません。

    - - -

    4.20) どのようなレプリケーションのソリューションがありますか?

    -

    「レプリケーション」と一言でいいますが、レプリケーションをする - ための技術はいくつかあり、それぞれ、利点と欠点があります。

    - -

    マスタ/スレーブのレプリケーションは、読み/書きのクエリを受け取 - るシングルマスタが可能で、スレーブでは 読み/SELECTの - 問い合わせだけを受け付けることができます。最も人気がある、フリーで利 - 用できる、マスタ−スレーブのPostgreSQLレプリケーションソリューション - は、 - Slony-I です。

    - -

    マルチ−マスタのレプリケーションは、読み/書きのクエリを受けと - り、複数のレプリケートさせるコンピュータに送ることができます。この機 - 能は、サーバ間の変更の同期が必要なため、性能に重大な衝撃を与えます。 - PGCluster は、 - このようなソリューションとしてPostgreSQLのためにフリーで利用できるも - のとして、最も人気があります。

    - -

    この他にも、商用やハードウェア−ベースのレプリケーションソリュー - ションがいろいろなレプリケーションモデルをサポートしています。

    - -

    4.21)テーブルとカラムの名前がクエリーの中で認識されないのはなぜですか?なぜ大文字化(キャピタライズ)は温存されないのですか?

    - -

    名前が認識されない、最も一般的な原因は、テーブルを作成する際に、 - テーブルやカラムを囲う二重引用符の使用です。 - 二重引用符を使うと、テーブルとカラムの名前(識別子といいます)は大文字と小文字の区別 - をして格納されます。したがって、pgAdminのようにテーブル作成のときに - 自動的に二重引用符を使うものはクエリの中でそれらの名前を使うときに - 二重引用符を付けなくてはならないことを意味します。このため、識別子 - を認識させるためには以下のいずれかを心がけます。 - -

      -
    • テーブルを作成するときに二重引用符で識別子を囲うことを避ける
    • -
    • 識別子には小文字だけを使う
    • -
    • クエリの中で参照するときは二重引用符で識別子を囲う
    • -
    - - -
    - -

    日本語に関する質問

    - -

    5.1)日本語がうまく扱えないのはなぜですか?

    - - -

    createdb -Eコマンドオプションに UTF8 あるいは EUC_JP - のエンコーディングを指定してデータベースを作成するか、次のように - エンコーディングを指定してデータベースを作成してください。

    -
    -        CREATE DATABASE dbname WITH ENCODING 'UTF8';
    -    もしくは、
    -        CREATE DATABASE dbname WITH ENCODING 'EUC_JP';
    -
    - - -

    5.2) psql でWindowsからアクセスしたときに、日本語が文字化けするのですが?

    - -

    psqlの中でクライアントのエンコーディングを指定してください。

    -
    -        SET client_encoding TO 'SJIS'
    -
    -

    PostgreSQLデータベースのエンコーディングに使える日本語文字コード - は EUC_JP か UTF-8(UNICODE) であるため、Shift-JIS表示のコマンドプロ - ンプトからは、client_encodingを設定しておかないと、日本語を表示する - 際に文字化けがおきます。

    - - -

    5.3) PostgreSQLで日本語の全文検索はできますか?

    - -

    バージョン8.3では、TSearch2全文検索機能が本体に組み込まれ - ましたが、そのままでは日本語のインデックスを作る事が難しい状況です。 - これを解決するために、Takahiro Itagaki氏によって、Mecabという形態素 - 解析プログラムを利用する日本語全文検索モジュール textsearch_ja - が開発されました。TSearch2対応の製品をわずかに改修することで日本語対 - 応にきます。 -

    - -
    - -

    「日本語版について」

    -

    -[訳注:
    -  日本語版の製作については以下の通りです。
    -
    -  最終更新日:	2008年10月8日
    -  翻訳者:	桑村 潤 (Jun KUWAMURA <juk at postgresql.jp>)
    -
    -  このFAQの和訳の作成にあたり協力をしてくださった方々(敬称は略させていただきます):
    -
    -		田仲 稔(Minoru TANAKA <Tanaka.Minoru at keiken.co.jp>)
    -		石井 達夫(Tatsuo ISHII <ishii at sraoss.co.jp>)
    -		齊藤 知人(Tomohito SAITOH <tomos at elelab.nsc.co.jp>)
    -		馬場  肇(Hajime BABA <baba at kusastro.kyoto-u.ac.jp>)
    -		岡本 一幸(Kazuyuki OKAMOTO <kaz-okamoto at hitachi-system.co.jp>)
    -		小菅 昭一(Shoichi Kosuge <s-kosuge at str.hitachi.co.jp>)
    -		山下 義之(Yoshiyuki YAMASHITA <dica at eurus.dti.ne.jp>)
    -		境 真太郎(Sintaro SAKAI <s_sakai at mxn.mesh.ne.jp>)
    -		生越 昌己(Masami OGOSHI <ogochan at zetabits.com>)
    -		石川 俊行(Toshiyuki ISHIKAWA <tosiyuki at gol.com>)
    -		本田 茂広(Shigehiro HONDA <fwif0083 at mb.infoweb.ne.jp>)
    -		せせ じゅん(Jun SESE <sesejun at linet.gr.jp>)
    -		神谷 英孝(Hidetaka KAMIYA <hkamiya at catvmics.ne.jp>)
    -		菅原 敦(Atsushi SUGAWARA <asugawar at f3.dion.ne.jp>)
    -		稲葉 香理(Kaori Inaba <i-kaori at sraoss.co.jp>)
    -		芳賀 靖史(Yasufumi Haga <yasufumi.haga at nifty.com>)
    -
    -  をはじめ、ポストグレスに関する話題豊富な日本語PostgreSQLメーリングリスト、
    -  和訳のきっかけを作ってくれたり、いつもチェックをしてくれる
    -   JF(Linux Japanese FAQ)プロジェクト、FreeBSD ドキュメンテーションプロジェクト
    -  の方々、それから、直接あるいは間接的にかかわってくださるすべてのオープンソース
    -  コミュニティのみなさまに感謝いたします。
    -
    -
    -  この翻訳文書は 本家 "Frequently Asked Questions"  のページに "Japanese FAQ" 
    -  という項目であります。
    -  
    -  また、最新版は以下のサイトにあります。
    -	http://www.postgresql.jp/wg/jpugdoc/ 「JPUG文書・書籍関連分科会」
    -	http://www.linux.or.jp/JF/JFdocs/INDEX-database.html 「Linux JFプロジェクト」	http://www.linet.gr.jp/~juk/pgsql/ 「PostgreSQL Notes for Japanese」(翻訳者ページ)
    -
    -  なお、この和訳に関するご意見・ご質問は(juk at postgresql.jp)までお寄せください。
    -  (※ メールアドレスの " at " は適切に直してください。半角の "@" です。)
    -]
    -

    - - - - - diff --git a/doc/src/FAQ/FAQ_polish.html b/doc/src/FAQ/FAQ_polish.html deleted file mode 100644 index f0364198d3..0000000000 --- a/doc/src/FAQ/FAQ_polish.html +++ /dev/null @@ -1,1572 +0,0 @@ - - - - - - - - - - PostgreSQL FAQ - - - - -

    Frequently Asked Questions (FAQ) o PostgreSQL

    - -

    Ostatnia aktualizacja: Sobota Luty 7 22:16:21 EST 2004

    - -

    Ostatnia aktualizacja tłumaczenia: Piątek Marzec 5 19:31:12 EST 2004

    - -

    Obecny maintainer: Bruce Momjian (pgman@candle.pha.pa.us)
    -

    -

    Tłumaczenie: Marcin Mazurek (m.mazurek@netsync.pl)
    -

    - -

    Najbardziej aktualną wersję tego dokumentu można znaleźć pod - adresem: - http://www.PostgreSQL.org/docs/faqs/FAQ.html.

    - -

    Odpowiedzi na pytania dotyczące konkretnych systemów operacyjnych - można znaleźć pod adresem: - http://www.PostgreSQL.org/docs/index.html.

    -
    - -

    Pytania ogólne

    - 1.1) Co to jest PostgreSQL? Jak to wymawiać?
    - 1.2) Jaką licencją chroniony jest PostgreSQL?
    - 1.3) Na jakich systemach Unixowych działa - PostreSQL?
    - 1.4) Na jakich nie-Unixowych systemach działa - PostgreSQL?
    - 1.5) Skąd mogę ściągnąć PostgreSQL?
    - 1.6) Gdzie można szukać wsparcia technicznego?
    - 1.7) Jaka jest ostatnia dostępna wersja?
    - 1.8) Jaka dokumentacja jest dostępna?
    - 1.9) Gdzie mogę znaleźć informację o znanych - błędach czy brakujących rozwiązanich?
    - 1.10) Jak mogę się nauczyć SQL?
    - 1.11) Czy PostgreSQL ma rozwiązany problem Y2K?
    - 1.12) Jak mogę się przyłączyć do grupy osób - bezpośrednio pracujących nad rozwojem PostgreSQL?
    - 1.13) Jak mogę zgłaszać błędy?
    - 1.14) Jak można porównać PostgreSQL w stosunku - do innych DBMS?
    - 1.15) W jaki sposób mogę wesprzeć finansowo - PostgreSQL?
    - -

    Pytania użytkowników

    - 2.1) Czy są jakieś driwery ODBC dla - PostgreSQL?
    - 2.2) Jakie istnieją narzędzia pozwalające na dostęp do - PostgreSQL przez www?
    - 2.3) Czy istnieje jakieś GUI dla PostgreSQL?
    - 2.4) Za pomocą jakich języków programowania można - się komunikować z PostgreSQL?
    - - -

    Pytania dotyczące administracji

    - 3.1) Jak mogę zainstalować PostgreSQL w innej - lokalizacji niż /usr/local/pgsql?
    - 3.2) Podczas startu postmaster'a, - otrzymuję komunikat: - Bad System Call lub "core dumped". Dlaczego?
    - 3.3) Podczas startu postmaster'a, - otrzymuję komunikat o błędzie: IpcMemoryCreate. Dlaczego?
    - 3.4) Podczas startu postmaster'a, - otrzymuję komunikat o błędzie: IpcSemaphoreCreate. Dlaczego?
    - 3.5) W jaki sposób mogę kontrolować połączenia z - innych hostów?
    - 3.6) Jak powinienem skonfigurować system baz - danych aby uzyskać lepszą wydajność?
    - 3.7) Jakie są możliwości wyszukiwania błędów?
    - 3.8) Skąd się bierze komunikat: "Sorry, too many - clients" podczas próby połączenia się z bazą danych?
    - 3.9) Jakie pliki znajdują się w pg_temp?
    - 3.10) Dlaczego konieczne jest przy upgradzie - PostgreSQL korzystanie ze skryptów dump i restore?
    - -

    Pytania dotyczące użytkowania

    - 4.1) Jaka jest różnica pomiędzy kursorami - binarnymi (binary cursors) i zwykłymi kursorami (normal cursors)?
    - 4.2) Jak mogę pobrać za pomocą SELECT - jedynie kilka pierwszych wyników zapytania?
    - 4.3) Jak mogę uzyskać listę wszystkich tabel czy - innych rzeczy pod psql?
    - 4.4) Jak usunąć kolumnę z tabeli lub zmienić jej - typ?
    - 4.5) Jaki jest maksymalny rozmiar dla rzędu, - tabeli i bazy danych?
    - 4.6) Jak dużo miejsca w bazie danych jest - potrzebne aby przechować dane ze zwyczajnego pliku tekstowego?
    - 4.7) Jak mogę sprawdzić jakie tabele, klucze, - bazy danych i użytkownicy są utworzeni?
    - 4.8) Moje zapytania są wolne lub nie używają - kluczy. Dlaczego?
    - 4.9) Jak mogę sprawdzić w jakis sposób "query - optimizer" wykonuje moje zapytanie?
    - 4.10) Co to jest "R-tree index"?
    - 4.11) Co to jest "Genetic Query Optimizer"?
    - 4.12) Jak mogę używać wyrażeń regularnych w - zapytaniach i zapytań case-insensitive w wyrażeniach regularnych? - Jak korzystać z indeksów dla zapytań case-insensitive?
    - 4.13) Jak sprawdzić w zapytaniu czy pole ma - wartość NULL?
    - 4.14) Jaka jest różnica pomiędzy różnymi typami - tekstowymi (character types)?
    - 4.15.1) Jak mogę utworzyć pole typu int, które samo - zwiększa swoją wartość?
    - 4.15.2) Jak pobrać wartość pola typu - SERIAL po wykonaniu insert'u?
    - 4.15.3) Czy użycie currval() i - nextval() nie doprowadzi do "race condition" z innymi - użytkownikami?
    - 4.15.4) Dlaczego numery sekwencji nie są - ponownie używane przy przerwaniu transakcji? - Skąd się biorą luki w numerowaniu kolumny tabeli sekwencjami/SERIALem?
    - 4.16) Co to jest OID? Co to jest - TID?
    - 4.17) Jakie jest znaczenie niektórych terminów w - PostgreSQL?
    - 4.18) Skąd bierze się ten błąd: "ERROR: Memory - exhausted in AllocSetAlloc()"?
    - 4.19) Jak sprawdzić jakiej wersji PostgreSQL - używam?
    - 4.20) Dlaczego operacje, które wykonuję na - dużych obiektach "large-object" zwracają komunikat: - "invalid large obj descriptor"?
    - 4.21) Jak stworzyć kolumnę której domyślną - wartością będzie bieżący czas?
    - 4.22) Dlaczego zapytania używające - IN są takie wolne?
    - 4.23) Jak wykonać "outer join"?
    - 4.24) Jak wykonywać zapytanie używające kilku - baz danych jednocześnie?
    - 4.25) Jak zwrócić w funkcji wiele rzędów lub - kolumn?
    - 4.26) Dlaczego nie mogę w sposób pewny - tworzyć/usuwać tabel tymczasowych w funkcjach PL/PgSQL?
    - 4.27) Jakie są możliwości replikacji w - PostgreSQL?
    - 4.28) Jakie możliwości szyfrowania oferuje - PostgreSQL?
    - -

    Rozwijanie PostgreSQL

    - 5.1) Napisałem własną funkcję. Kiedy użyję jej w - psql, program zrzuca pamięć (dump core)?
    - 5.2) Jak mogę dodać/zgłosić nowe typy czy funkcje - do PostgreSQL?
    - 5.3) Jak napisać funkcję C zwracającą krotkę - (tuple)?
    - 5.4) Zmieniłem plik źródłowy. Dlaczego po - rekompilacji nie widać zmiany?
    - -
    - -

    Pytania ogólne

    - -

    1.1) Co to jest PostgreSQL? Jak to wymawiać?

    - -

    PostgreSQL wymawia się Post-Gres-kju-el. Często podczas - rozmów używany jest termin "Postgres"

    - -

    PostgreSQL jest rozszerzeniem systemu zarządzania bazami danych - - POSTGRES, kolejną generacją rozwojowego prototypu DBMS. - Mimo, że PostgreSQL zachował bardzo dobrze zbudowany model danych - (data model) i bogaty zestaw typów danych POSTGRES'a, zastąpił - PostQuel'owy język zapytań z rozbudowanym podzbiorem języka - SQL. PostgreSQL jest oprogramowaniem darmowym - z dostępnymi całymi źródłami. -

    - -

    Rozwój PostgreSQL jest prowadzony przez grupę ludzi z Internetu, - komunikujących się poprzez mailowe listy dyskusyjne PostgreSQL. - Obecnym koordynatorem jest Marc G. Fournier (scrappy@PostgreSQL.org). (Zobacz - pytanie 1.6 jak się przyłączyć). Ta grupa ludzi jest - odpowiedzialna za cały rozwój PostgreSQL. PostgreSQL jest projektem - nie kontrolowanym przez żadną firmę, aby wziąć udział w jego rozwoju - sprawdź, - http://www.PostgreSQL.org/docs/faqs/FAQ_DEV.html

    - -

    Autorami PostgreSQL 1.01 byli Andrew Yu and Jolly Chen. - Wiele innych osób pomogło przy portowaniu, testowaniu, debugowaniu i - rozwijaniu kodu. Oryginalny kod Postgresa, na którym został oparty - PostgreSQL, był wysiłkiem studentów oraz pracowników pracujących pod - kierownictwem profesora Michael'a Stonebraker'a z University of - California w Berkeley.

    - -

    Oryginalną nazwą oprogramowania w Berkeley był Postgres. Po - dodaniu obsługi SQL w 1995, nazwa została zmieniona - na Postgres95. Pod koniec roku 1996 nazwa została zmieniona na - PostgreSQL.

    - -

    1.2) Jaką licencją chroniony jest - PostgreSQL?

    - -

    PostgreSQL objęty jest następującą licencją:

    - -

    PostgreSQL Data Base Management System

    - -

    Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group - Portions Copyright (c) 1994-6 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.

    - -

    Tekst powyżej, jest klasyczną licencją BSD. - Nie posiada ona żadnych restrykcji co do używania kodu źródłowego. - Podoba nam się i nie zamierzamy jej zmieniać.

    - -

    1.3) Na jakich systemach Unixowych działa - PostreSQL?

    - -

    PostgreSQL powinien działać na wszystkich nowych Unix-podobnych - systemach. Platformy, które zostały szczegółowo przetestowane podczas - publikowania PostgreSQL są wymienione w dokumentacji opisującej - instalację.

    - -

    1.4) Na jakich nie-Unixowych systemach działa - PostgreSQL?

    - -

    Klient

    - -

    Możliwa jest kompilacja bibliteki C libpq, psql oraz - innych interfejsów i uruchamianie ich na platformie MS Windows. W tym - wypadku klient jest uruchamiany na MS Windows a z serwerem komunikuje się - poprzez TCP/IP. Serwer może działać na dowolnej wspieranej platformie - Unixowej. Plik win32.mak jest dołączony - do źródeł, aby można było stworzyć bibliotekę libpq oraz - program psql działające w środowisku Win32. PostgreSQL może się - także komunikować z klientami ODBC.

    - -

    Serwer

    - -

    Serwer może być uruchamiany na Windows NT i Win2k używając - bibliotek Cygwin, Cygnus Unix/NT. W pliku pgsql/doc/FAQ_MSWIN - znajdującym się w źródłach lub pod adresem: http://www.PostgreSQL.org/docs/faqs/text/FAQ_MSWIN na naszych stronach.

    - Obecnie prowadzone są prace nad stworzeniem wersji dla MS Win - NT/200/XP. Jeśli chcesz się dowiedzieć o obecnym statusie tych prac - zobacz http://techdocs.postgresql.org/guides/Windows and - http://momjian.postgresql.org/main/writings/pgsql/win32.html. -

    -

    - Istnieje także port pod Novell Netware 6 dostępny pod adresem http://forge.novell.com. -

    - -

    1.5) Skąd można ściągnąć PostgreSQL?

    - -

    Główny serwer ftp z dostępem "anonymous" dla PostgreSQL znajduje - się ftp://ftp.PostgreSQL.org/pub. - jeśli szukasz mirrorów sprawdź naszą główną stronę www.

    - -

    1.6) Gdzie można szukać wsparcia technicznego?

    - -

    Adres głównej listy mailowej: pgsql-general@PostgreSQL.org. - Jest ona przeznaczona dyskusjom dotyczącym spraw związanych z PostgreSQL. - Żeby zapisac się na listę, wyślij email z następującymi liniami w - treści maila (nie w temacie):

    -
    -    subscribe
    -    end
    -
    - -

    na adres: pgsql-general-request@PostgreSQL.org.

    - -

    Dostępna jest także lista wysyłająca digesty. Aby zapisać się na - nią, wyślij email na adres: - pgsql-general-digest-request@PostgreSQL.org - z treścią maila zawierającą:

    -
    -    subscribe
    -    end
    -
    - Digesty są wysyłane do członków listy, kiedy na główną listę dotrze ok - 30k wiadomości. - -

    Dostępna jest także lista poświęcona błędom znalezionym w - PostgreSQL. Aby zapisać się na nią wyślij email na adres: - pgsql-bugs-request@PostgreSQL.org - z treścią maila zawierającą:

    -
    -    subscribe
    -    end
    -
    - Lista poświęcona dyskusjom developerów jest dostępna pod adresem: - pgsql-hackers-request@PostgreSQL.org - Aby się na nią zapisać wyślij na jej adres mail z treścią: -
    -    subscribe
    -    end
    -
    - -

    Dodatkowe informacje o listach mailowych dotyczących PostgreSQL - można znaleźć na stronach WWW PostgreSQL pod adresem:

    - -
    -

    http://www.PostgreSQL.org

    -
    - -

    W sieci EFNet istnieje kanał IRC #PostgreSQL. Ja, do - połączenia się z kanałem używam Unixowego polecenia irc -c - '#PostgreSQL' "$USER" irc.phoenix.net.

    - -

    Lista firm oferujących wsparcie na zasadach komercyjnych znajduje - się pod adresem: http://techdocs.postgresql.org/companies.php.

    - -

    1.7) Jaka jest ostatnia dostępna wersja?

    - -

    Ostatnia dostępna wersja PostgreSQL to 7.4.1.

    - -

    Planujemy publikowanie kolejnych wersji co sześć do ośmiu miesięcy.

    - -

    1.8) Jaka dokumentacja jest dostępna?

    - -

    Kilka manuali, stron podęcznika man, oraz kilka przykładów do - testowania są załączone w samej dystrybucji. Znajdują się one w - katalogu /doc. Manual może być także przeglądany poprzez - strony www pod adresem http://www.PostgreSQL.org/docs.

    - -

    Istnieją także dwie książki dostępne online pod adresami - http://www.PostgreSQL.org/docs/awbook.html - i http://www.commandprompt.com/ppbook/. - Lista książek o PostgreSQL, które można kupić znajduje się pod adresem - - http://techdocs.PostgreSQL.org/techdocs/bookreviews.php. - Zbiór technicznych artykułów o PostgreSQL znajduje się pod adresem http://techdocs.postgresql.org/.

    - -

    psql posiada kilka wbudowanych poleceń \d, za pomoca których - można sprawdzić informacje dotyczące typów, operatorów, funkcji, - agregatów itd.

    - -

    Na naszej stronie można znaleźć dużo więcej dokumentacji.

    - -

    1.9) Gdzie można znaleźć informację o znanych - błędach czy brakujących rozwiązanich?

    - -

    PostgreSQL wspiera rozszerzony podzbiór standardu SQL-92. - Sprawdź naszą listę TODO - aby znaleźć informację o znanych problemach, brakujących - rozwiązaniach czy przyszłych planach.

    - -

    1.10) Jak mogę się nauczyć - SQL?

    - -

    Książka o PostgreSQL http://www.PostgreSQL.org/docs/awbook.html - uczy SQL. Jest jeszcze inna ksiązka o PostgreSQL - dostępna pod adresem: http://www.commandprompt.com/ppbook. - Dobry tutorial możesz znaleźć pod adresem: http://www.intermedia.net/support/sql/sqltut.shtm, - oraz - http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM, - i http://sqlcourse.com.

    - -

    Jeszcze inny to "Teach Yourself SQL in 21 Days, Second Edition" - pod adresem: http://members.tripod.com/er4ebus/sql/index.htm

    - -

    Wielu z naszych użytkowników poleca The Practical SQL Handbook, - Bowman, Judith S., et al., Addison-Wesley. Inni polecają The - Complete Reference SQL, Groff et al., McGraw-Hill.

    - -

    1.11) Czy PostgreSQL ma rozwiązany problem Y2K?

    - -

    Tak, bez problemu radzimy sobie z datami po roku 2000 AD, oraz - przed rokiem 2000 BC.

    - -

    1.12) Jak mogę się przyłączyć do grupy osób - bezpośrednio pracujących nad rozwojem PostgreSQL?

    - -

    Przede wszystkim ściągnij ostatnie dostępne źródła i przeczytaj - dokumentację przeznaczoną dla developerów na naszej stronie www lub - dostępną także w źródłach PostgreSQL. Następnie zapisz się na listy - mailowe pgsql-hackers i - pgsql-patches. I na koniec, wysyłaj nam wysokiej jakości - patch'e na listę pgsql-patches.

    - -

    Jest około 12 osób, które mają uprawnienia do commit'owania w - CVS PostgreSQL'a. Każdy z nich submitował tak wiele - wysokiej jakości patchy, że stało się niemożliwe dla obecnych - commiterów być z nimi na bieżąco, więc musieliśmy im ufać i mieć - pewność, że ich poprawki są wysokiej jakości.

    - -

    1.13) Jak mogę zgłaszać błędy?

    - -

    Zajrzyj na stronę PostgreSQL BugTool, na - której opisane są wskazówki jak zgłaszać informacje o błędach.

    - -

    Zajrzyj także na nasz ftp ftp://ftp.PostgreSQL.org/pub, aby - sprawdzić czy nie ma nowszych wersji PostgreSQL czy patchy.

    - -

    1.14) Jak można porównać PostgreSQL w stosunku - do innych DBMS?

    - -

    Jest kilka sposobów oceny softwaru: możliwości, - wydajność, stabilność, wsparcie i cena.

    - -
    -
    Możliwości
    - -
    PostgreSQL posiada możliwości dostępne w dużych, komercyjnych - systemach DBMS, takie jak transakcje, podzapytania - (subselects), triggery, widoki, klucze obce, referential integrity, - oraz wyrafinowany system blokowania. Mamy także właściowści których - inni nie posiadają, jak typy definiowane przez użytkownika, - dziedziczenie, rules, multi-version concurrency control, która - redukuje problemy z blokowaniem (lock contention).
    -
    -
    - -
    Wydajność
    - -
    Wydajność PostgreSQL jest podobna do innych komercyjnych i open - source baz danych. W niektórych sytuacjach jest szybszy w - niektórych wolniejszy. W porównianiu do MySQL lub mniejszych baz - danych jesteśmy szybsi przy wielu użytkownikach, skomplikowaych - zapytaniach i dużym obciążeniu podczas. MySQL jest szybszy dla - prostych SELECTów wykonywanych przez niewielu użytkowników. - Spowodowane jest to narzutem, który się pojawia przy transakcjach. - Oczywiście MySQL nie ma większości z rozwiązań opisanych powyżej - w sekcji Możliwości . PostgreSQL został stworzony z myślą o - stabilności, oraz szerokiej gamie możliwości, ale mimo to staramy - się w każdej wersji poprawiać jego wydajność. - Ciekawe porównanie PostgreSQL i MySQL można znaleźć pod adresem http://openacs.org/philosophy/why-not-mysql.html - Dodatkowo, MySQL jest firmą, która dystrybuuje jej produkty poprzez - zasadę Open Source i wymaga wykupienia licencji w przypadku - tworzenia close-source software, co ie ma miejsca w przypadku - PostgreSQL.
    -
    -
    -
    Stabilność
    - -
    Zdajemy sobie sprawę, że DBMS musi być stabilny, - w przeciwnym wypadku jest bez wartości. Staramy się publikować kod - stabilny, dobrze przetestowany, z minimum możliwych błędów. Każde - wydanie poprzedza co najmniej miesiąc testów wersji beta. Patrząc na - historię wydań PostgreSQL widać, że dostarczamy stabilne, dobrze - sprawdzone wersje, które są gotowe do użycia w środowisku - produkcyjnym. Myślimy, że proces publikowania kolejnych wersji - opracowany przez nas jest jednym z lepszych wśród innych twórców - oprogramowania bazodanowego.
    -
    -
    - -
    Wsparcie
    - -
    Dzięki naszym listom mailowym masz dostęp do dużej liczby - programistów i użytkowników, którzy pomagają rozwiązać każdy - napotkany problem. Chociaż nie możemy gwarantować znalezienia - rozwiązania danego problemu, nie różnimy się w tym od innych - komercyjnych systemów DBMS. Bezpośredni kontakt z - programistami, użytkownikami, dokumentacją i kodem źródłowym - sprawiają, że wsparcie oferowane PostgreSQL niejednokrotnie jest - lepsze niż w innych systemach DBMS. Istnieje także - możliwość skorzystania z komercyjnego wsparcia dla tych, których - takiego rozwiązania potrzebują. - (Sprawdź ten punkt FAQ.)
    -
    -
    - -
    Cena
    - -
    Korzystanie z PostgreSQL jest darmowe, zarówno w przypadku - komercyjnym jak i niekomercyjnym. Możesz korzystać z naszego kodu - źródłowego w Twoim produkcie bez żadnych ograniczeń, poza tymi - wymienionymi w licencji BSD przytoczonej powyżej.
    -
    -
    -
    - -

    1.15) W jaki sposób mogę wesprzeć finansowo - PostgreSQL?

    - -

    PostgreSQL korzysta z najlepszej infrastruktury od samego początku - istnienia projektu, czyli roku 1996 kiedy rozpoczeliśmy pracę. Wszystko - to zawdzięczamy Marc'owi Fournier'owi, który stworzył tą infrastrukturę - i zarządza nią od lat.

    - -

    Wysokiej jakości infrastruktura jest bardzo ważna dla każdego - projektu open-source. Zapobiega przerwom w rozwoju projektu i - jakimkolwiek przestojom.

    - -

    Oczywiście korzystanie z wysokiej jakości infrastruktury nie jest - tanie. Istnieje wiele różnych miesięcznych, czy jednorazowych - wydatków, które trzeba ponosić aby wszystko działało jak należy. - Jeśli Ty, bądź Twoja firma może wspomóc finansowo rozwój PostgreSQL - odwiedź adres: http://store.pgsql.com/shopping/ - gdzie opisane jest jak to zrobić.

    - -

    Chociaż na stronie wspomniana jest nazwa PostgreSQL Inc, "datki" - są przeznaczone jedynie na rozwój projektu PostgreSQL i nie są - przeznaczane na finansowanie jakiejkolwiek firmy. Jeśli wolisz, - możesz wysłać czek na adres kontaktowy.

    -
    - Jeśli możesz się pochwalić udanymi wdrożeniami PostgreSQL, prosimy - abyś zgłosił nam to na stronie: http://advocacy.postgresql.org. - -

    User Client Questions

    - -

    2.1) Czy są jakieś driwery ODBC dla - PostgreSQL?

    - -

    Dostępne są dwa driwery ODBC: PsqlODBC - i OpenLink ODBC.

    - -

    Możesz pobrać PsqlODBC z adresu http://gborg.postgresql.org/project/psqlodbc/projdisplay.php -

    - -

    OpenLink ODBC może być pobrany z adresu: http://www.openlinksw.com. - Współpracuje ze standardowym oprogramowaniem klienckim ODBC - więc w ten sposób możesz korzystać z PostgreSQL ODBC - dostępnego na każdej pltaformie którą wspiera (Win, Mac, Unix, VMS).

    - -

    Autorzy będą prawdopodobnie sprzedawać ten produkt osobom które - wymagają komercyjnego wsparcia, ale wersja darmowa będzie zawsze - dostępna. Wszystkie pytania możesz wysyłać na adres: postgres95@openlink.co.uk.

    - -

    2.2) Jakie istnieją narzędzia pozwalające na dostęp do - PostgreSQL przez www?

    - -

    Dobry podręcznik dla początkujących o dostępie do bazy danych - przez www możesz znaleźć pod adresem: - http://www.webreview.com

    - -

    Do integracji z www, świetnym rozwiązaniem jest PHP. Możesz - znaleźć więcej informacji na ten temat pod adresem - http://www.php.net.

    - -

    Wiele osób w przypadku skomplikowanych rozwiązań uzywa Perl'a i - modułu CGI.pl lub mod_perl.

    - -

    2.3) Czy istnieje jakieś GUI dla PostgreSQL?

    - -

    Tak, istnieje kilka interfejsów graficznych dla PostgreSQL. - Wśród nich PgAccess ( - http://www.pgaccess.org), PgAdmin III (http://www.pgadmin.org), - RHDB Admin (http://sources.redhat.com/rhdb/ ) oraz Rekall ( - http://www.thekompany.com/products/rekall/, komercyjny). Istnieje - także PHPPgAdmin ( http://phppgadmin.sourceforge.net/ ), webowy - interfejs dla PostgreSQL. -

    -

    - Więcej informacji na ten temat znajduje się pod adresem See - http://techdocs.postgresql.org/guides/GUITools.

    - -

    2.4) Za pomocą jakich języków programowania - można się komunikować z PostgreSQL?

    - -

    Najbardziej popularne języki posiiadają własny interfejs dla - PostgreSQL. Sprawdź listę rozszerzeń dla intersującego Ciebie języka - programowania.

    - -

    Ze źródłami PostreSQL dystrubuowane są interfejsy dla - następujących języków programowania:

    - - -
      -
    • C (libpq)
    • - -
    • Embedded C (ecpg)
    • - -
    • Java (jdbc)
    • - -
    • Python (PyGreSQL)
    • - -
    • TCL (libpgtcl)
    • -
    - Inne interfejsy są dostępne pod adresem: - http://gborg.postgresql.org w - sekcji Drivers/Interfaces. -
    - -

    Pytania dotyczące administracji

    - -

    3.1) Jak mogę zainstalować PostgreSQL w innej - lokalizacji niż /usr/local/pgsql?

    - -

    Użyj opcji --prefix podczas uruchamiania skryptu - configure.

    - -

    3.2) Podczas startu postmaster'a, - otrzymuję komunikat o błędzie: Bad System Call lub "core dumped". - Dlaczego?

    - - -

    Ten błąd może być wynikiem wielu problemów, ale na początek - sprawdź czy masz zainstalowane rozszerzenia systemu V w jądrze - systemu. PostgreSQL wymaga do pracy zainstalowanej obsługi pamięci - dzielonej i semaforów.

    - -

    3.3) Podczas startu postmaster'a, - otrzymuję komunikat o błędzie: IpcMemoryCreate. - Dlaczego?

    - -

    Albo nie masz poprawnie skonfigurowanej obsługi pamięci dzielonej - w jądrze systemu, albo musisz zwiększyć jej dostępny rozmiar. - Dokładna ilość jaką potrzebujesz jest zależna od architektury systemu - na jakim pracujesz, jak dużo buforów oraz jak dużo procesów backendu - skonfigurowałeś dla postmaster'a. Dla większości systemów, z - domyślną liczbą buforów i procesów potrzebujesz minimum w - przybliżeniu 1MB. Zobacz PostgreSQL - Administrator's Guide gdzie szczegółowo zostało opisane - wykorzystanie pamięci dzielonej i semaforów.

    - -

    3.4) Podczas startu postmaster'a, - otrzymuję komunikat o błędzie: IpcSemaphoreCreate. - Dlaczego?

    - -

    Jeśli treść błędu brzmi: IpcSemaphoreCreate: semget failed - (No space left on device) oznacza to, że jądro systemu nie jest - skonfigurowane do obsługi wystarczającej liczby semaforów. - Postgres wymaga jednego semafor'a na potencjalny jeden proces backend. - Tymczasowym rozwiązaniem jest uruchomienie programu postmaster - z mniejszą maksymalną liczbą procesów backend. - Użyj opcji -N z parameterem mniejszym od domyślnego - 32. - Bardziej trwałym rozwiązaniem jest zwiększenie parametrów - SEMMNS i SEMMNI jądra twojego systemu.

    - -

    Niedziałające semafory mogą spowodować niepoprawne zamknięcie - systemu w czasie intensywnego korzystania z bazy.

    - -

    Jeśli treść błędu jest inna, może to oznaczać, że obsługa semaforów - nie została włączona do jądra wcale. Zobacz PostgreSQL - Administrator's Guide po bardziej szczegółowe informacje o pamięci - dzielonej i semaforach.

    - -

    3.5) W jaki sposób mogę kontrolować połączenia - z innych hostów?

    - -

    Domyślnie PostgreSQL pozwala jedynie na połączenia za pomocą - socketów Unixowych z lokalnego hosta. Inne hosty nie będą mogły się - połączyć z serwerem dopóki nie zostanie dodana opcja -i do - postmaster'a, - oraz nie umożliwi się autoryzacji na podstawie adresu hostów - modyfikując odpowiednio plik - $PGDATA/pg_hba.conf. To zmiany pozwolą na połączenia TCP/IP.

    - -

    3.6) Jak powinienem skonfigurować system baz - danych aby uzyskać lepszą wydajność?

    - -

    Indeksy bez wątpienia mogą przyspieszyć wykonywanie zapytań. - Polecenie EXPLAIN pozwala zobaczyć jak PostgreSQL - interpretuje Twoje zapytanie i które indeksy są używane.

    - -

    Jeśli wykonujesz bardzo dużo INSERTów, może warto - je wykonać za pomocą jednego dużego pliku używając polecenia - COPY. Jest to dużo szybsze niż pojedyncze - INSERTy. Po drugie polecenia SQL nie zawarte w bloku - określającym transakcję - BEGIN WORK/COMMIT, są - traktowane jako pojedyncza transakcja. Rozważ wykonanie kilku - poleceń/zdań SQL w jednym bloku transakcji. To redukuje narzut - nakładany przez transakcję. Przy dużych zmianach w danych, warto - usunąć i stworzyć na nowo indeksy.

    - -

    Jest kilka opcji pozwalających na poprawienie wydajności. - Możesz wyłączyć fsync() poprzez uruchomienie postmaster'a - z opcjami -o -F. To spowoduje, że - fsync() nie będzie zrzucał danych na dysk po każdej - transakcji.

    - -

    Możesz także uruchomić postmaster'a z opcją -B - aby zwiększyć wielkość pamięci dzielonej używanej przez procesy - backendów. Jeśli ustawisz tą wartość zbyt wysoko i przekroczysz limity - ustawione przez kernel na pamięć dzieloną, postmaster może się - nie uruchomić. Każdy bufor zajmuje 8K a domyślna ilość buforów to 64.

    - -

    Możesz także użyć opcji -S dla backendu aby zwiększyć - maksymalną wartość pamięci używaną przez proces backendu podczas - sortowania. Opcja -S jest ustawiana wartością podawaną w - kilobajtach, domyślna wartość to 512K.

    - -

    Możesz także użyć polecenia CLUSTER aby pogrupować - dane w tabelach wg indeksu. Zobacz opis polecenia CLUSTER - w manualu żeby dowiedzieć się więcej.

    - -

    3.7) Jakie są możliwości wyszukiwania - błędów?

    - -

    PostgreSQL ma kilka możliwości na raportowanie informacji o - jego statusie, które mogą być przydatne przy debugowaniu procesu.

    - -

    Przede wszystkim uruchom skrypt configure z opcją - --enable-cassert, wiele funkcji assert() monitorują postęp - procesu backend i zatrzymują program kiedy wydarzy się coś - nieoczekiwanego.

    - -

    Zarówno postmaster jak i postgres mają kilka opcji - do debugowania. Za każdym razem kiedy uruchamiasz postmaster'a, - upewnij się, że wysyłasz standardowe wyjście i error do pliku z - logami, np. w ten sposób:

    -
    -    cd /usr/local/pgsql
    -    ./bin/postmaster >server.log 2>&1 &
    -
    - -

    To utworzy plik server.log w głównym katalogu PostgreSQL. - Ten plik zawiera pożyteczne informacje o problemach i błędach, które - wydarzyły się podczas pracy serwera. Postmaster posiada opcję - -d, która pozwala na raportowanie bardzo szczególowych - informacji. Do opcji -d podajemy liczbę, która określa - szczegółowość wysyłanych informacji. Musisz mieć świadomość, że - wysoki poziom logowania będzie powodował tworzenie bardzo duzych - plików z logami.

    - -

    Jeśli postmaster nie został uruchomiony, możesz uruchomić - postgres'owy backend z linii poleceń, i uruchomić Twoje - polecenie SQL bezpośrednio na nim. - Taki sposób jest polecany jedynie w przypadku debugowania. - Zwróć uwagę, że w tym wypadku zapytanie kończy znak nowej linii a nie - średnik. Jeśli skompilowałeś z opcjami debugowania mozesz użyć - debuggera aby sprawdzić co się dzieje. Poniewż backend nie został - uruchomiony przez postmaster'a, nie działa w identycznym - środowisku, co oznacza że powtórzenie warunków w jakich wystąpiły - problemy moze być problemem.

    - -

    Jeśli postmaster działa, uruchom psql w jednym z - okien, następnie znajdź PID procesu postgres - używanego przez psql. Użyj debuggera aby do - PID'u postgres'a. Możesz ustawiać pułapki - (breakpoints) w debuggerze i wykonywać zapytania z psql. - Jeśli debugujesz uruchamianie postgres'a, możesz ustawić zmienną - PGOPTIONS="-W n", następnie uruchomić psql. - Opcja ta pozwoli spowolnić uruchomienie na - n sekund abyś mógł się połączyć z procesem za pomocą - debugera, ustawić jakiekolwiek pułapki i kontynuować proces - uruchamiania.

    - -

    postgres może być uruchamiany z opcjami -s, -A i - -t, które mogą być bardzo przydatne przy debuggowaniu i ocenie - wydajności.

    - -

    Możesz także skompilować z profilingiem aby zobaczyć jakie funkcje - ile czasu wykonują się. Pliki profilowane dla backendu zostaną - umieszczone w katalogu - pgsql/data/base/dbname. Pliki profilu klienta zostaną - umieszczone w bieżącym katalogu klienta. Linux wymaga aby kompilować - z opcją -DLINUX_PROFILE aby profilowanie odbywało się - poprawnie.

    - -

    3.8) Skąd się bierze komunikat: "Sorry, too - many clients" podczas próby połączenia się z bazą danych?

    - -

    Musisz zwiększyć limit ilości jednoczesnych procesów bacekendu - dla procesu postmaster'a.

    - -

    Domyślny limit to 32 procesy. Możesz go zwiększyć przez restart - postmaster z odpowiednią wartością ustawianą opcję -N w - pliku postgresql.conf.

    - -

    Weź pod uwagę, że jeśli zwiększysz wartość podaną w opcji - -N na więcej niż 32 musisz także zwiększyć wartość w opcji - -B ponad jej domyślną wartość 64; wartość -B musi być - co najmniej dwa razy większa od wartości podanej w opcji - -N, a prawdopodobnie powinna być w rzeczywistości jeszcze - większa dla optymalnej wydajności. - Dla dużej liczby procesów backendu na pewno zauważysz, że trzeba - zwiększyć różne parametry jądra Unixa. Rzeczy, które pownieneś - sprawdzić to maksymalna liczba bloków pamięci dzielonej, - SHMMAX; maksymalna liczba semaforów, SEMMNS - oraz SEMMNI; - maksymalna liczba procesów, NPROC; maksymalna liczba - procesów na jednego użytkownika, MAXUPRC; i maksymalna - liczba otwartych plików, NFILE oraz - NINODE. Powód dla którego PostgreSQL ma limit na - maksymalną liczbę procesów backendu to obawa o wyczerpanie zasobów - systemu.

    - -

    3.9) Jakie pliki znajdują się w pg_temp?

    - -

    Katalog ten zawiera tymczasowe pliki utworzone przez executor. Dla - przykładu, jeśli jakaś operacja sortowania jest wymagana do wykonania - ORDER BY, a samo sortowanie wymaga więcej miejsca niż - parametr backendu - -S ustawił do wykorzystania, wtedy tymczasowe pliki są używane - do przechowywania tych danych.

    - -

    Pliki tymczasowe powinny być usunięte automatycznie, ale mogło się - to nie stać jeśli proces backendu w międzyczasie nie zakończył się - poprawnie podczas operacji sortowania. Jeśli w danym momencie nie - działają żadne procesy backendów mozesz spokojnie usunąć pliki - pg_tempNNN.NN.

    - -

    3.9) Dlaczego konieczne jest przy upgradzie - PostgreSQL korzystanie ze skryptów dump i restore?

    -

    - Twórcy PostgreSQL dokonują jedynie małych zmian pomiędzy małymi - upgradami wersji, np z 7.2 do 7.2.1, wtedy upgrade nie wymaga - korzystania z dump i restore. Przy większych zmianach, np. z wersji - 7.2 do 7.3, często zmianymają wpływ na format przechowywanych danych. - Zmiany te są na tyle skomplikowane, że nie utrzymujemy zgodości z - poprzednimi wersjami PostgreSQL. dump pozwala na wydostanie danych w - takiej postaci, w której łatwe jest ich zaimportowanie do nowszych - wersji bez kłopotu. -

    -

    - W wydaniach gdzie zmiany nie dotyczą formatu danych na dysku, można - wykorzystać skryptu pg_upgrade, do upgradu bez użycia dump/restore. - Dokumentacja do danego wydania zawiera informację czy możliwe jest - użycie pg_upgrade. -

    -
    - -

    Pytania dotyczące używania

    - -

    4.1) Jaka jest różnica pomiędzy kursorami - binarnymi (binary cursors) i zwykłymi kursorami (normal - cursors)?

    - -

    Zobacz w manualu opis polecenia DECLARE.

    - -

    4.2) Jak mogę pobrać za pomocą - SELECT jedynie kilka pierwszych wyników - zapytania?

    - -

    Zobacz w manualu opis polecenia FETCH lub użyj - polecenia SELECT ... LIMIT....

    - -

    Nawet jeśli chesz pobrać kilka pierwszych rzędów z wyniku - zapytania, całe zapytanie musi zostać wykonane. Byc może powinieneś - skorzystać z polecenia ORDER BY. - Jeśli istnieje indeks który odpowiada polom określonym przez - ORDER BY, PostgreSQL może wykorzystać jedynie kilka - pierwszych rzędów, być może będzie konieczność wykonania zapytania do - momentu aż zostaną znalezione pożądane wyniki.

    -

    - Aby otrzymać losowy rząd, użyj:

    -
    -    SELECT col
    -    FROM tab
    -    ORDER BY random()
    -    LIMIT 1;
    -	 
    - -

    4.3) Jak mogę uzyskać listę wszystkich tabel - czy innych rzeczy pod psql?

    - -

    Możesz sprawdzić zawartość źródeł psql, a konkretnie plik - pgsql/src/bin/psql/describe.c. Zawiera on polecenia - SQL które generuja wyniki komend z backslashem. - Możesz także uruchomić psql z opcją - -E wtedy po wykonaniu polecenia z backslashem wyświetlane - będzie zapytanie, które w rzeczywistości jest wykonywane.

    - -

    4.4) Jak usunąć kolumnę z tabeli lub zmienić - jej typ?

    - -

    DROP COLUMNT zostało dodane w wersji 7.3 przy poleceniu ALTER - TABLE DROP COLUMN. We wcześńiejszych wersjach możesz zrobić tak: -

    -
    -	 BEGIN;
    -	 LOCAL TABLE old_table;
    -    SELECT ...  -- wybierz wszystkie kolumny poza tą jedną której chcesz się pozbyć
    -    INTO TABLE new_table
    -    FROM old_table;
    -    DROP TABLE old_table;
    -    ALTER TABLE new_table RENAME TO old_table;
    -
    -

    - Aby zmienić typ danych kolumny możesz zrobić tak: -

    -
    -   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;
    -	
    - -

    4.5) Jaki jest maksymalny rozmiar dla rzędu, - tabeli i bazy danych?

    - -

    Oto wszystkie ograniczenia:

    -
    -    Maksymalny rozmiar dla bazdy danych?     nieograniczony ( istnieją
    -	 bazy danych o wielkości 32 TB databases )
    -    Maksymalny rozmiar dla tabeli?           32 TB
    -    Maksymalny rozmiar dla rzędu?            1.6 TB
    -    Maksymalny rozmiar pola?                 1 GB
    -    Maksymalna liczba rzędów w tabeli?       nieograniczona
    -    Maksymalna liczba kolumn w tabeli?       250-1600 w zależoności od typów kolumn
    -    Makasymalna liczba indeksów na tabeli?   nieograniczona
    -
    - - Oczywiście "nieograniczony" nie jest prawdą tak do końca, istnieją - ograniczenia wynikające z dostępnego miejsca na dysku, pamięci/swapa. - Kiedy wielkości te będą bardzo duże może odbić się to na wydajności. - -

    Maksymalny rozmiar tabeli, czyli 32 TB nie wymaga od systemu - operacyjnego wsparcia dla dużych plików. Duże tabele są przechowywane - jako pliki o rozmiarze 1 GB, więc ograniczenia co do wielkości plików - narzucone przez system plików nie są istotne.

    - -

    Masymalny rozmiar tabeli i maksymalna liczba kolumn może być - zwiększona jeśli zwiększymy domyślny rozmiar bloku (block size) do - 32k.

    - -

    4.6) Jak dużo miejsca w bazie danych jest - konieczne aby przechowywać dane ze zwyczajnego pliku - tekstowego?

    - -

    Baza danych PostgreSQL może potrzebować do pięciu razy więcej - miejsca na przechowywanie danych z plików tekstowych niż ich - objętość.

    - -

    Jako przykład możemy rozważyć plik składający się z 100,000 linii - zbudowanych z liczby całkowitej oraz opisu tekstowego w każdej. - Załóżmy, że średnio każdy łańcuch tekstu w linii zajmuje 20 - bajtów. Cały plik powinien zajmować ok. 2.8 MB. Rozmiar pliku bazy danych w - PostgreSQL zawierającego te dane mozna oszacować na około 6.4MB:

    - -
    -    36 bajtów: nagłówek każdego rzędu w przybliżeniu)
    -    24 bajty:  jedno pole int i jedno pole typu text
    -   + 4 bajty:  wkaźnik na stronie do krotki
    -   --------------------------------------------------
    -    64 bajty w jednym rzędzie
    -
    -	Strona danych w PostgreSQL zajmuje 8192 bajtów (8 KB), więc:
    -
    -   8192 bajtów na stronę
    -   ---------------------   =  128 rzędów na jedną strone w bazie (zaokrąglone w dół)
    -     64 bajtów na rząd
    -
    -   100000 rzędów danych
    -   -----------------------  =  782 stron w bazie danych (zaokrąglone w górę)
    -      128 rzędów na stronę
    -
    -782 stron w bazie * 8192 bajtów na stronę  =  6,406,144 bajtów (6.4 MB)
    -
    - -

    Indeksy nie powodują dużego narzutu na zajmowane miejsce, - ale zawierają pewne dane, - więc w pewnych przypadkach moga być całkiem duże.

    -

    NULLe są przechowywane jako mapy bitowe, więc używają bardzo mało - miejsca. -

    - -

    4.7) Jak mogę sprawdzić jakie tabele, klucze, - bazy danych i użytkownicy są utworzeni?

    - -

    psql ma całkiem dużą ilość poleceń z backslashem aby - wydobyć takie informacje. Wprowadź \? aby zobaczyć ich spis. Istnieją - także tablice systemowe rozpoczynające się od pg_, zawierające - interesujące Ciebie informacje. Wykonanie psql -l pokaże spis - wszystkich baz danych.

    - -

    Obejrzyj także plik pgsql/src/tutorial/syscat.source. - Zawiera on wiele z zapytań typu SELECT, które są - potrzebne aby wydobyć informacje z tablic systemowych.

    - -

    4.8) Moje zapytania są wolne lub nie używają - kluczy. Dlaczego?

    - - Indeksy nie są używane automatycznie przez kążde z zapytań. Ideksy są - używane jedynie gdy tabela jest odpowiedniego rozmiaru, większego niż - wymagany minimalny, a zapytanie wybiera jedynie mały procent - zawartości tabeli. Wynika to z tego, że losowy dostep do dysku - powodowany przez ideksowane poszukiwanie jest czasami wolniejsze niż - poszukiwanie sekwencyjne bez użycia kluczy. - -

    Żeby zdecydować czy indeks powinien byc używany, PostgreSQL musi - mieć statystyki dotyczące danej tabeli. Są one gromadzone przez - użycie polecenia VACUUM ANALYZE, lub poprostu - ANALYZE. używając statystyk, optymalizator wie ile - rzędów jest w tabeli i może lepiej określić czy indeksy powinny być - użyte. Statystyki mogą być także pomocne w określeniu najlepszej - kolejności wykonania złączenia (join) i jego sposobu. Gromadzenie - statystyk powinno się odbywać w określonych interwałach czasu - ponieważ dane w tabelach zmieniają się.

    - -

    Indeksy nie są zazwyczaj używane przez ORDER BY lub - przy wykonywaniu złączeń (join). Sekwencyjne przeszukiwanie po którym - następuje sortowanie jest zazwyczaj szybsze nię wyszukiwanie za - pomocą indeksu na dużej tabeli.

    -

    Jakkolwiek LIMIT w połączeniu z ORDER BY - często będzie wykorzystywał indeksy ponieważ jedynie mała część z - tabeli jest zwracana. W rzeczywistości, chociaż MAX() i MIN() nie - używają indeksów, możliwe jest aby zwrócić te wartości używając - indeksów poprzez użycie ORDER BY i LIMIT. -

    -
    -    SELECT col
    -    FROM tab
    -    ORDER BY col [ DESC ]
    -    LIMIT 1;					 
    -	
    -

    - Jeśli uważasz, że optimizer myli się wybierając sequential scan, użyj - SET enable_seqscan TO 'off' i uruchom testy aby sprawdzić czy wtym - wypadku zapytanie będzie szybciej wykonywane.

    - -

    Kiedy używa się operatorów dopasujących takich jak - LIKE lub ~, indeksy będą używane jedynie w - pewnych wypadkach:

    -
      -
    • Początek wyszukiwania jest oparty na początku łańcucha tekstu. -
        -
      • wzorce LIKE nie mogą się zaczynać %
      • -
      • dopasowania operatorem ~ (dopasowania regularne) - muszą się zaczynać znakiem specjalnym ^.
      • -
    • -
    • Początek wyszukiwania nie może się zaczynać od klas znaków, np. - [a-e].
    • -
    • Case-insensitive searches such as ILIKE and ~* do not utilise - indexes. Instead, use functional indexes, which are described in - section 4.12.
    • -
    • Standardowe locale C musi być uzyte przy wykonywaniu initdb
    • -
    -

    4.9) Jak mogę sprawdzić w jakis sposób "query - optimizer" wykonuje moje zapytanie?

    - -

    Zobacz manual dla polecenia EXPLAIN.

    - -

    4.10) Co to jest "R-tree index"?

    - -

    Indeks R-tree jest używany do indeksowania danych przestrzennych. - Indeks hasuujący nie nadaje się do wyszukiwania odległości. - Natomiast indeks typu B-tree może wyszukiwać odleglości jedynie w - jednowymiarowych przestrzeniach. R-tree indeks radzi sobie z - przestrzeniami wielo-wymiarowymi. Dla przykładu, jeśli zostanie - założony indeks typu R-tree na polu typu point, system może - bardziej wydajnie odpowiadać na zapytania typu - "select all points within a bounding rectangle."

    - -

    Źródłowym dokumentem opisującym oryginalnie projektowanie R-tree - indeksów jest:

    - -

    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.

    - -

    Ten dokument możesz znaleźć także w pracy Stonebraker'a "Readings in - Database Systems".

    - -

    Wbudowane indeksy R-trees radzą sobie w wielobokami i boxes. - Teoretycznie, indeksy R-tree mogą być rozszerzone o możliwości - indeksowania w więcej wymiarowych przestrzeniach. W praktyce, - rozbudowa indeksów R-tree wymaga trochę pracy, a w tej chwili nie - dysponujemy jakąkolwiek dokumentacją jak to zrobić.

    - -

    4.11) Co to jest "Genetic Query - Optimizer"?

    - -

    Moduł GEQO ma za zadanie przyspieszenie - optymalizacji zapytań łącząc wiele tabel za pomocą algorytmów - genetycznych (Genetic Algorithm (GA)). Pozwala na używanie dużych - zapytań łączących tabele (join queries) bez wykorzystywania - zasobożernego wyszukiwania.

    - -

    4.12) Jak mogę używać wyrażeń regularnych w - zapytaniach i zapytań case-insensitive w wyrażeniach - regularnych? - Jak korzystać z indeksów dla zapytań case-insensitive?

    - -

    Operator ~ moze być wykorzystywany do wyszukiwania za - pomocą wyrażeń regularnych, a - ~* do wyszukiwania case-insensitive z wyrażeniami - regularnymi. - Wariant case-insensitive dla LIKE został nazwany - ILIKE.

    - -

    Porównania case-insensitive są zazwyczaj wykonywane w następujący - sposób:

    -
    -    SELECT *
    -    FROM tab
    -    WHERE lower(col) = 'abc'
    -   
    -
    - W tym wypadku standardowe indeksy nie będą używane. Możesz utworzyć - indeks funkcyjny, poprzez: -
    -    CREATE INDEX tabindex on tab (lower(col));
    -   
    -
    - -

    4.13) Jak sprawdzić w zapytaniu czy pole ma - wartość NULL?

    - -

    Możesz to sprawdzić, testując wartość kolumny warunkiem - IS NULL albo IS NOT NULL.

    - -

    4.14) Jaka jest różnica pomiędzy różnymi - typami tekstowymi (character types)?

    -
    -Type            Nazwa wewnętrzna   Uwagi
    ---------------------------------------------------
    -VARCHAR(n)      varchar            rozmiar określa maksymalną długość, nie ma tutaj wypełniania
    -CHAR(n)         bpchar             wypełniane pustymi znakami do podanej długości
    -TEXT            text               bez limitu na długość łańcucha
    -BYTEA           bytea              zmiennej długości tablica bajtów (null-byte safe)
    -"char"          char            	  1 znak
    -
    - -

    Jeśli będziesz przeglądać katalogi systemowe lub komunikaty o - błędach często spotkasz się z podanymi powyżej nazwami - wewnętrznymi.

    - -

    Pierwsze cztery typy powyżej to tzw typy "varlena" (np. pierwsze - cztery bajty na dysku to długość, po których jest data). Dlatego - faktyczna długośc takiego łańcucha jest trochę większa niż - zadeklarowany rozmiar. Te typy także podlegają kompresji lub mogą być - przechowywane out-of-line jako TOAST, więc faktyczne - zużycie miejsca na dysku może być mniejsze niż oczekiwane.

    - -

    VARCHAR(n) jest - najodpowiedniejszy do przechowywania łańcuchów o różnej długości - ale określa on maksymalną jego długość. - - TEXT jest najlepszy dla łańcuchów o dowolnej długości, - nie przekraczającej 1GB.

    - -

    - CHAR(n) jast najlepszym typem do przechowywania - łańcuchów o tej samej długości. CHAR(n) wypełnia dane do żadanej - długości, podczas gdy VARCHAR(n) przechowuje jedynie dane - dostarczone. - - BYTEA służy do przechowywania danych binarnych, - w szczególności dla danych zawierających NULL bajty. - Wszystkie typy opisane tutaj maja podobne charakterystyki jeśli - chodzi o wydajność.

    - -

    4.15.1) Jak mogę utworzyć pole które samo - zwiększa swoją wartość?

    - -

    PostgreSQL ma zaimplementowany typ SERIAL. - Automatycznie tworzy sekwencję i indeks na tej kolumnie. Dla - przykladu:

    -
    -    CREATE TABLE person ( 
    -        id   SERIAL, 
    -        name TEXT 
    -    );
    -
    - zostanie automatycznie prztłumaczone na: -
    -    CREATE SEQUENCE person_id_seq;
    -    CREATE TABLE person ( 
    -        id   INT4 NOT NULL DEFAULT nextval('person_id_seq'),
    -        name TEXT 
    -    );
    -    CREATE UNIQUE INDEX person_id_key ON person ( id );
    -
    - Więcej informacji o sekwencjach znajdziesz w manualu o - create_sequence. Możesz także użyć pola OID jako - unikalnej wartości dla każdego rzędu danych. Jeśli będziesz - potrzebował z backupować dane robiąc dump bazy i odtworzyć ją, musisz - użyc pg_dump z opcją -o lub polecenia COPY - WITH OIDS aby zachować OIDy. - -

    4.15.2) Jak pobrać wartość pola typu - SERIAL po wykonaniu insert'u?

    - -

    Jednym z podejść jest pobranie kolejnej wartości typu - SERIAL z sekwencji za pomocą funkcji nextval() - zanim zostanie wstawiona, a później należy jej użyć. Używając - przykładu z tabeli z punktu 4.15.1, może to - wyglądać w Perlu na przykład w ten sposób:

    - -
    -    new_id = output of "SELECT nextval('person_id_seq')"
    -    INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal');
    -
    - Będziesz miał wtedy tą wartość przechowaną w zmiennej - new_id do użytku w innych zapytaniach (np. jako klucz - obcy do tabeli person). Warto zwrócić uwagę, że nazwa - automatycznie utworzonej sekwencji - SEQUENCE będzie następująca: - <tabela>_<kolumnatypuserial>_seq, - gdzie - tabela i kolumnatypuserial są nazwami Twojej tabeli i - Twojej kolumny typu SERIAL. - -

    Inne rozwiązanie to użycie funkcji currval() na pola typu - SERIAL po dodaniu nowej wartości do rzędu zawierającego - kolumnę typu SERIAL z wstawioną domyślnie wartością, - np.

    -
    -    INSERT INTO person (name) VALUES ('Blaise Pascal');
    -    new_id = output of "SELECT currval('person_id_seq')";
    -
    - Ostatecznie możesz użyć OID - zwracanej po wykonaniu INSERT, chociaż to jest najmniej - przenośne rozwiązanie. - W Perlu, wykorzystując bibliotekę DBI z modułem Edmunda Mergla - DBD::Pg, oid jest dostępny poprzez $sth->{pg_oid_status} po - wykonaniu $sth->execute(). - -

    4.15.3) Czy użycie currval() i - nextval() nie doprowadzi do race condition z innymi - użytkownikami?

    - -

    Nie. currval() zwraca bieżącą wartość przypisaną przez Twój - backend, a nie przez wszystkich użytkowników.

    - -

    4.15.4) Dlaczego numery sekwencji nie są - ponownie używane przy przerwaniu transakcji? - Skąd się biorą luki w numerowaniu kolumny tabeli - sekwancjami/SERIALem?

    - -

    Aby poprawić zbieżność (concurrency), wartości sekwencji są - podawane działającym transakcjom kiedy tego potrzebują i nie są - blokowane dopóki transakcja się nie zakończy. To spowoduje przerwy w - numerowaniu z przerwanych transakcji.

    - -

    4.16) Co to jest OID? Co to - jest TID?

    - -

    OID są PostgreSQL'owym rozwiązaniem problemu - unikalnych numerów rzędów. Każdy rząd tworzony przez PostgreSQL - otrzymuje unikalny OID. Wszystkie OIDy - generowane podczas procesu uruchamianego przez skrypt - initdb mają mniejszą wartość niż 16384 (na podstawie pliku - backend/access/transam.h). Wszystkie - OIDy tworzone przez użytkownika sa równe lub większe - podanej wcześniej wartości. Domyślnie - wszystkie OIDy są unikalne nie tylko w pojedyńczej - tabeli czy bazie danych ale w całej instalacji PostgreSQL.

    - -

    PostgreSQL używa OIDów w swoim wewnętrznym systemie - tabel, aby można było je łączyć. - Te OIDy mogą byc używane aby identyfikowac rzędy w - tabelach i wykorzystywać je w złączeniach tych tabel. Zaleca się abyś - używał typu OID aby przechowywać wartości - OID. Możesz utworzyć indeks na polu - OID aby dostęp do niego był szybszy.

    - -

    OID są przypisane do wszystkich rzędów z jednego - głównego miejsca i używane sa przez wszystkie bazy danych. Jeśli - chciałbyś zmienić OID na coś innego, lub jeśli - chciałbyś zrobić kopię tabeli, z orginalnymi OIDami - nie ma żadnego przeciwwskazania abyś to zrobił:

    - -
    -        CREATE TABLE new_table(old_oid oid, mycol int);
    -        SELECT old_oid, mycol INTO new FROM old;
    -        COPY new TO '/tmp/pgtable';
    -        DELETE FROM new;
    -        COPY new WITH OIDS FROM '/tmp/pgtable';
    -
    -
    - -

    OIDy są przechowywane jako cztero-bajtowe liczby - całkowite i skończą się po osiągnięciu czterech miliardów. Nikt jak - dotąd nie zgłosił aby coś takiego się stalo, ale mamy zamiar pozbyć - się tego ograniczenia zanim ktoś to zgłosi.

    - -

    TID są używane aby zidentyfikować konkretne rzędy z - blokami i wartością ofsetów. TIDy zmieniają się wraz - ze zmianami rzędów. Sa używane przez indeksy, aby wskazywać do - fizycznych rzędów.

    - -

    4.17) Jakie jest znaczenie niektórych terminów - w PostgreSQL?

    - -

    W części kodu źródłowego i starszej dokumentacji używamy terminów, - które mają bardziej ogólne znaczenie. Oto niektóre z nich:

    - -
      -
    • table, relation, class
    • - -
    • row, record, tuple
    • - -
    • column, field, attribute
    • - -
    • retrieve, select
    • - -
    • replace, update
    • - -
    • append, insert
    • - -
    • OID, serial value
    • - -
    • portal, cursor
    • - -
    • range variable, table name, table alias
    • -
    - -

    Listę terminów związanych z bazami danych możesz znaleźć pod tym - adresem:http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.html.

    - -

    4.18) Skąd bierze się ten błąd "ERROR: - Memory exhausted in AllocSetAlloc()"?

    - -

    - Prawdopodobnie wyczerpała Ci się pamięć wirtualna (virtual memory) - w systemie lub Twój kernel ma zbyt nisko - ustawione limity dla pewnych zasobów. Spróbuj wykonać następujące - polecenia zanim uruchomisz postmaster'a:

    -
    -    ulimit -d 262144
    -    limit datasize 256m
    -
    - W zależności od shell'a jakiego używasz jedno z tych poleceń może nie - zadziałać, ale to ustawienie pozwoli ustawić segment danych dla - procesu znacznie większy i być może pozwoli wykonać zapytanie. - To polecenie zadziała dla bieżącego procesu oraz wszytkich podprocesów - utworzonych po wykonaniu polecenia. Jeśli ten problem występuje z - klientem SQL, ponieważ backend zwraca zbyt dużo danych, - spróbuj wykonać to polecenie przed uruchomieniem klienta. - -

    4.19) Jak sprawdzić jakiej wersji PostgreSQL - używam?

    - -

    W psql, wpisz select version();

    - -

    4.20) Dlaczego operacje, które wykonuję na - dużych obiektach "large-object" zwracają komunikat: - "invalid large obj descriptor"?

    - -

    Musisz użyć BEGIN WORK i COMMIT - przed i po użyciu uchwytu do dużego obiektu, tzn. musisz nimi otoczyć - funkcje lo_open ... lo_close.

    - -

    Obecnie PostgreSQL używjąc "rule" zamyka uchwyt do dużego obiektu - przy każdym wywołaniu "commit". Więc pierwsze próba zrobienia - czegokolwiek z uchwytem spowoduje wypisanie: invalid large obj - descriptor. Kod, który do tej pory działał (przynajmniej - większość razy) będzie teraz generował informację o błędzie jeśli nie - będziesz korzystał z transakcji.

    - -

    Jeśli używasz interfejsu klienta jak ODBC być może - będziesz musiał ustawić auto-commit off.

    - -

    4.21) Jak stworzyć kolumnę której domyślną - wartością będzie bieżący czas?

    - -

    Użyj CURRENT_TIMESTAMP:

    -
    -CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
    -
    -
    - -

    4.22) Dlaczego zapytania używające - IN sa takie wolne?

    - -

    W wersjach wcześniejszych niż 7.4 łączymy podzapytania w outer queries - poprzez sekwencyjne przeszukiwanie wyników podzapytania dla każdego rzędu - z outer query. Jeśli podzapytanie zwraca jedynie kilka rzędów a - zewnętrzne zapytanie zwraca ich wiele, IN jest najszybsze. - Aby przyspieszyć inne zapytania można zastąpić IN przez - EXISTS:

    -
    -SELECT *
    -    FROM tab
    -    WHERE col IN (SELECT subcol FROM subtab)
    -
    -
    - na: -
    -SELECT *
    -    FROM tab
    -    WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col)
    -
    -
    -

    - Aby to rozwiązanie było szybkie, subcol powinna być kolumną - indeksowaną. -

    -

    - W wersji 7.4 i późniejszych, IN w rzeczywistości używa tej samej - wyrafinowanej techniki łączenia jak normalne zapytania i jest - preferowane nad używaniem EXISTS. -

    -

    4.23) Jak wykonać "outer join"?

    - -

    PostgreSQL ma zaimplementowane outer join - wykorzystując standardową składnię SQL. Poniżej dwa przykłady:

    - -
    -    SELECT *
    -    FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
    -
    - or -
    -    SELECT *
    -    FROM t1 LEFT OUTER JOIN t2 USING (col);
    -
    - -

    Te dwa identyczne zapytania łączą kolumnę t1.col z kolumną t2.col, - ale także zwrócą niepołączone rzędy w t1 (te, które nie pasują w t2). - RIGHT join dodałby niepołączone rzędy z tabeli t2. - FULL join zwróciłby rzędy plus dodatkowo wszystkie - rzędy z tabel t1 i t2. Słowo OUTER jest opcjonalne i - jest dodawane domyślnie przy - LEFT, RIGHT, i FULL - join'ach. Zwykłe join'y są nazywane INNER joins.

    - -

    W poprzednich wersjach "outer joins" mogą być zasymulowane poprzez - użycie slowa kluczowego - UNION i NOT IN. Dla przykładu, łącząc - tabele tab1 i tab2, następujące zapytanie wykonuje - outer join:
    -
    -

    -
    -    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) Jak wykonywać zapytanie używające kilku - baz danych jednocześnie?

    - -

    Nie ma takiej możliwości aby w zapytaniu odpytawać inną baze danych - poza bieżącą. Ponieważ PostgreSQL ładuje specyficzne dla bazy danych - katalogi systemowe, nie jest do końca jasne jak zapytanie pomiędzy - różnymi bazami danych powinno się zachowywać.

    - -

    contrib/dblink pozwala na wykonywanie zapytań poprzez różne - bazy danych wywołując odpowiednie funkcje. Oczywiście klient może łączyć - się z różnymi bazami danych i łączyć informację w ten sposób uzyskaną - po stronie klienta.

    - -

    4.25) Jak zwrócić w funkcji wiele rzędów lub - kolumn?

    - -

    Możesz w łatwy sposób zwracać wiele rzędów lub kolumn używając - funkcji z: http://techdocs.postgresql.org/guides/SetReturningFunctions.

    - -

    4.26) Dlaczego nie mogę w sposób pewny - tworzyć/usuwać tabel tymczasowych w funkcjach PL/PgSQL?

    -

    - PL/PgSQL przechowuje w cache zawartość funkcji, niepożądanym efektem tego - jest to, że gdy taka funkcja korzysta z tabel tymczasowych, które są - później kasowane i odtwarzane, a funkcja wywoływana jest ponownie,jej - wywołanie nie powiedzie się ponieważ cachowana funkcja wciąż będzie - wskazywać na stara tablicę tymczasową. Rozwiązaniem tego problemu jest - używanie EXECUTE aby korzystać z tabel tymczasowych w PL/PgSQL. To - spowoduje, że zapytanie będzie parsowane przy każdym wywołaniu - funkcji. -

    - -

    4.27) Jakie są możliwości replikacji w PostgreSQL?

    -

    - Jest kilka opcji aby stosować replikację typu master/slave. Ten typ - pozwala jedynie masterowi na dokonywanie zmian w bazie danych, a - slave może jedynie te zmiany odczytywać. Na stronie - http://gborg.PostgreSQL.org/genpage?replication_research - znajduje się ich lista. Replikacja typu multi-master jest w trakcie - prac, opis projektu znajduje się pod adresem: -http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php. -

    - -

    4.28) Jakie możliwości szyfrowania oferuje - PostgreSQL?

    -
      -
    • contrib/pgcrypto zawiera wiele funkcji za pomocą, których możemy używać - kryptografii w zapytaniach SQL.
    • -
    • Aby szyfrować transmisję od klienta do serwera, ten musi mieć - ustawioną opcję ssl na true w pliku postgresql.conf, odpowiedni - wpis host lub hostssl musi występować w pliku pg_hba.conf, oraz - sslmode nie może być wyłączone w kliencie. (Warto zwrócić uwagę, że - możliwe jest także używanie transportów szyfrująców przez strony - trzecie, takie jak stunnel lub ssh, poza natywnym wsparciem dla SSL - przez PostgreSQL).
    • -
    • Hasła użytkowników bazy danych są automatycznie szyfrowane od - wersji 7.3. W poprzednich wersjach, należy tą funkcjonalność poprzez - włączenie opcji PASSWORD_ENCRYPTION w postgresql.conf.
    • -
    • Serwer może działać używając szyfrowanego systemu plików.
    • -
    - -

    Rozwijanie PostgreSQL

    - -

    5.1) Napisałem własną funkcję. Kiedy użyję jej - w psql, program zrzuca pamięć (dump core)?

    - -

    Problem może być spowodowany przez bardzo wiele rzeczy. Spróbuj - najpierw przetestować Twoją funkcję w samodzielnie działającym programie. -

    - -

    5.2) Jak mogę dodać/zgłosić nowe typy czy - funkcje do PostgreSQL?

    - -

    Wyślij Twoje propozycje na listę mailową pgsql-hackers, - wtedy prawdopodobnie Twój kod znajdzie się w katalogu contrib/.

    - -

    5.3) Jak napisać funkcję C zwracającą krotkę - (tuple)?

    - -

    - W wersjach PostgreSQL od numeru 7.3, funckje zwracające tabele są w - pęlni wspierane w C, PL/PgSQL i SQL. Sprawdź w Programmer's Guide aby - uzyskać więcej informacji. Przykład funkcji napisanej w C zwracającej - tabelę został umieszczony w contrib/tablefunc. -

    - -

    5.4) Zmieniłem plik źródłowy. Dlaczego po - rekompilacji nie widać zmiany?

    - -

    Pliki Makefiles nie mają dorzuconych odpowiednich - zależności dla plików nagłówkowych (include files). Wykonaj najpierw - make clean, a następnie ponownie make. - Jeśli używasz GCC możesz użyć opcji - --enable-depend przy wykonywaniu configure aby - kompilator mógł określić zależności samodzielnie. -

    - - - diff --git a/doc/src/FAQ/FAQ_russian.html b/doc/src/FAQ/FAQ_russian.html deleted file mode 100644 index e92ce71c06..0000000000 --- a/doc/src/FAQ/FAQ_russian.html +++ /dev/null @@ -1,1197 +0,0 @@ - - - - - - - - - PostgreSQL FAQ - - - -

    Ответы на часто задаваемые вопросы по PostgreSQL

    - -

    Дата последнего обновления: Среда 25 июня 23:54:14 EDT 2008

    - -

    Английский вариант сопровождает: Брюс Момьян (Bruce Momjian) (bruce@monjian.us) -

    -

    Перевёл на русский: Виктор Вислобоков (admin@postgresql.ru.net)
    -

    - -

    Самую свежую английскую версию документа можно найти на - http://www.postgresql.org/files/documentation/faqs/FAQ.html.

    - -

    Самую свежую русскую версию документа можно найти на - http://postgresql.ru.net/docs/FAQ_russian.html.

    - -

    Ответы на вопросы специфичные для конкретных платформ можно найти на - http://www.postgresql.org/docs/faq/.

    -
    - -

    Общие вопросы

    - 1.1) Что такое PostgreSQL? Как произносится это название? Что такое Postgres?
    - 1.2) Кто управляет PostgreSQL?
    - 1.3) Каковы авторские права на PostgreSQL?
    - 1.4) На каких платформах работает PostgreSQL?
    - 1.5) Где можно взять PostgreSQL?
    - 1.6) Какая версия наиболее свежая?
    - 1.7) Где получить поддержку?
    - 1.8) Как мне сообщить об ошибке?
    - 1.9) Как найти информацию об известных ошибках или отсутствующих - возможностях?
    - 1.10) Какая документация имеется в наличии?
    - 1.11) Как научиться SQL?
    - 1.12) Как мне отправить исправление или присоединится к команде разработчиков?
    - 1.13) Как сравнить PostgreSQL с другими - СУБД? Может ли PostgreSQL быть встроенной?
    - 1.14) Будет ли PostgreSQL работать с последними изменениями, в разных страных, - касающимися дневного времени?
    - 1.15) Как мне отписаться от списков рассылки PostgreSQL? - Как избежать получения дублирующихся сообщений?
    - -

    Вопросы пользователей по клиентской части

    - 2.1) Какие интерфейсы есть для PostgreSQL?
    - 2.2) Какие инструменты существуют для использования - PostgreSQL через Web?
    - 2.3) Есть ли у PostgreSQL графический интерфейс - пользователя?
    - - -

    Вопросы администрирования

    - 3.1) Как мне установить PostgreSQL в место отличное - от /usr/local/pgsql?
    - 3.2) Как мне управлять соединениями от других - компьютеров?
    - 3.3) Какие настройки мне нужно сделать для улучшения - производительности?
    - 3.4) Какие возможности для отладки есть в наличии?
    - 3.5) Почему я получаю сообщение "Sorry, too many - clients" когда пытаюсь подключиться к базе?
    - 3.6) Как выполнить обновление PostgreSQL?
    - 3.7) Какое компьютерное "железо" я должен - использовать?
    - - -

    Вопросы эксплуатации

    - 4.1) Как выполнить SELECT только - для нескольких первых строчек запроса? Для произвольной строки?
    - 4.2) Как мне найти какие таблицы, индексы, - базы данных и пользователи существуют? Как мне увидеть запросы, - которые использует psql для получения этой информации?
    - 4.3) Как изменить тип данных колонки?
    - 4.4) Каковы максимальные размеры для строк в таблице, - таблиц и базы данных?
    - 4.5) Как много дискового пространства в базе данных - нужно для сохранения данных из обычного текстового файла?
    - 4.6) Почему мои запросы работают медлено? Почему - они не используют мои индексы?
    - 4.7) Как посмотреть на то, как оптимизатор выполняет - мой запрос?
    - 4.8) Как мне выполнить поиск регулярного выражения - и поиск независимый от регистра букв поиск регулярного выражения? - Как мне использовать индекс для поиска независимого от регистра букв?
    - 4.9) Как мне определить, что значение поля в каком-либо - запросе равно NULL? Как мне соединить возможные - NULL? Могу я сортировать поля NULL или нет?
    - 4.10) Каковы отличия между разными символьными - типами?
    - 4.11.1) Как мне создать поле serial/с-авто-увеличением?
    - 4.11.2) Как мне получить значение при вставке - SERIAL?
    - 4.11.3) Не может ли получиться так, что - использование currval() и nextval() приведет к - зациклированию с другими пользователями?
    - 4.11.4) Почему числа из моей последовательности - не используются снова при отмене транзакции? Почему создаются разрывы - при нумерации в колонке, где я использую последовательность/SERIAL?
    - 4.12) Что такое OID? Что такое - CTID?
    - 4.13) Почему я получаю ошибку "ERROR: Memory - exhausted in AllocSetAlloc()"?
    - 4.14) Как мне узнать, какая версия PostgreSQL - запущена?
    - 4.15) Как мне создать колонку которая по умолчанию - будет содержать текущее время?
    - 4.16) Как выполнить внешнее связывание?
    - 4.17) Как выполнять запросы, использующие несколько - баз данных?
    - 4.18) Как мне вернуть из функции несколько строк таблицы?
    - 4.19) Почему я получаю ошибку "relation with OID #### - не существует", когда обращаютсь к временным таблицам в функциях PL/PgSQL?
    - 4.20) Какие есть решения для репликации?
    - 4.21) Почему имена таблицы и колонок не - распознаются в в моём запросе? Почему не сохраняются заглавные буквы?
    - -
    - -

    Общие вопросы

    - -

    1.1) Что такое PostgreSQL? Как произносится это название? Что такое Postgres?

    - -

    PostgreSQL произносится Post-Gres-Q-L (Пост-Грес-Кью-Эл). - (Для особо любопытствующих как произносить "PostgreSQL", существует - аудио-файл). -

    - -

    PostgreSQL - это объектно-реляционная система управления базами - данных (СУБД), которая имеет традиционные возможности коммерческих - СУБД с расширениями, которые есть в СУБД - нового поколения. PostgreSQL - это свободное и полностью открытое - программное обеспечение.

    - -

    Разработку PostgreSQL выполняет команда разработчиков, разбросанная - по всему миру и связанная через Интернет. Разработка является - общественным проектом и не управляется какой-либо компанией. - Подробности смотрите в FAQ для разработчиков, - - http://www.postgresql.org/docs/faqs.FAQ_DEV.html -

    - -

    Postgres — это широко используемое сокращение для PostgreSQL. - Первоначальным именем проекта в Беркли было Postgres и этот ник теперь - наиболее популярен в разговорах о PostgreSQL по сравнению с другими. - Если вам трудно полностью проговаривать 'PostgreSQL', можно просто - говорить 'Postgres'.

    - -

    1.2) Кто управляет PostgreSQL?

    - -

    Если вы ищите какого-то особенного человека, центральный - комитет или управляющую компанию, то напрасно --- их нет. - У нас есть ядро комитета и разработчиков, работающих с CVS, - но эти группы служат больше для административных целей, чем - для управления. Проект напрямую функционирует с помощью - сообщества разработчиков и пользователей, к которому может - присоединится каждый. Всё что нужно -- это подписаться на - списки рассылки и участвовать в дискуссиях. (Подробности о - том как включиться в разработку PostgreSQL смотрите в - - FAQ для разработчиков.)

    - -

    1.3) Каковы авторские права на PostgreSQL?

    - -

    PostgreSQL распространяется по классической лицензии BSD. Эта - лицензия не содержит ограничений на то, как будет использоваться - исходный код. Нам нравится эта лицензия и у нас нет намерений её - менять. Вот эта лицензия BSD, которую мы используем:

    - -

    Система Управления Базами Данных PostgreSQL

    - -

    Portions copyright (c) 1996-2008, PostgreSQL Global Development - Group Portions Copyright (c) 1994-1996 Regents of the University of - California

    - -

    Предоставляются права на использование, копирование, изменение - и распространение данного программного обеспечения и его документации - для любых целей, бесплатно и без подписания какого-либо соглашения, - при условии что для каждой копии будут предоставлены данное выше - замечание об авторских правах, текущий параграф и два следующих - параграфа.

    - -

    КАЛИФОРНИЙСКИЙ УНИВЕРСИТЕТ НЕ НЕСЕТ НИКАКОЙ ОТВЕТСТВЕННОСТИ - ЗА ЛЮБЫЕ ПОВРЕЖДЕНИЯ, ВКЛЮЧАЯ ПОТЕРЮ ДОХОДА, НАНЕСЕННЫЕ ПРЯМЫМ - ИЛИ НЕПРЯМЫМ, СПЕЦИАЛЬНЫМ ИЛИ СЛУЧАЙНЫМ ИСПОЛЬЗОВАНИЕМ ДАННОГО - ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ИЛИ ЕГО ДОКУМЕНТАЦИИ, ДАЖЕ ЕСЛИ - КАЛИФОРНИЙСКИЙ УНИВЕРСИТЕТ БЫЛ ИЗВЕЩЕН О ВОЗМОЖНОСТИ ТАКИХ - ПОВРЕЖДЕНИЙ.

    - -

    КАЛИФОРНИЙСКИЙ УНИВЕРСИТЕТ СПЕЦИАЛЬНО ОТКАЗЫВАЗЫВАЕТСЯ ПРЕДОСТАВЛЯТЬ - ЛЮБЫЕ ГАРАНТИИ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ТОЛЬКО ЭТИМИ ГАРАНТИЯМИ: - НЕЯВНЫЕ ГАРАНТИИ ПРИГОДНОСТИ ТОВАРА ИЛИ ПРИГОДНОСТИ ДЛЯ ОТДЕЛЬНОЙ ЦЕЛИ. - ДАННОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ НА ОСНОВЕ ПРИЦИПА - "КАК ЕСТЬ" И КАЛИФОРНИЙСКИЙ УНИВЕРСИТЕТ НЕ ОБЯЗАН ПРЕДОСТАВЛЯТЬ - СОПРОВОЖДЕНИЕ, ПОДДЕРЖКУ, ОБНОВЛЕНИЯ, РАСШИРЕНИЯ ИЛИ ИЗМЕНЕНИЯ.

    - -

    1.4) На каких платформах работает PostgreSQL?

    - -

    Обычно, PostgreSQL может работать на любой современной платформе - совместимой с Unix. В инструкции по установке, вы найдете список - тех платформ, на которых были проведены тестовые запуски PostgreSQL - к моменту выхода данной версии.

    - -

    PostgreSQL также работает на операционных системах Microsoft - Windows, основанных на NT, таких как Win2000 SP4, WinXP и Win2003. - Пакет инсталлятора доступен по адресу - - http://www.postgresql.org/download/windows. Версии Windows, - основанные на MS-DOS (Win95, Win98, WinMe) могут запускать - PostgreSQL с помощью Cygwin.

    - -

    Также существует версия спортированная под Novell Netware 6 на - http://developer.novell.com/wiki/index.php/Postgresql, - и версия для OS/2 (eComStation) на - - http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2F.

    - -

    1.5) Где можно взять PostgreSQL?

    - -

    Через браузер, используя - http://www.postgresql.org/ftp/ и через ftp, используя - ftp://ftp.postgresql.org/pub/.

    - - -

    1.6) Какая версия наиболее свежая?

    - -

    Последний выпуск PostgreSQL - это версия 8.3.3

    - -

    Мы планируем выпускать новые старшие версии каждый год, - а младшие версии каждые несколько месяцев.

    - - -

    1.7) Где получить поддержку?

    - -

    Сообщество PostgreSQL предоставляет помощь множеству пользователей - через E-mail. Основной web-сайт для подписки на списки рассылки по - E-mail это: - http://www.postgresql.org/community/lists/. Хорошим местом для - того, чтобы начать задавать вопросы являются списки general - (общие вопросы) или bugs (ошибки).

    - -

    Главным IRC каналом является #postgreql, - расположенный на сервере Freenode (irc.freenode.net). Чтобы - подключиться, вы можете использовать в Unix вызов программы - irc -c '#postgresql' "$USER" irc.freenode.net или - любой другой IRC клиент. На этом же сервере существуют каналы на - испанском (#postgresql-es), французском (#postgresqlfr) - и бразильском (#postgresql-br) языках. Также существует канал - по PostgreSQL на сервере EFNet.

    - -

    Список коммерческой поддержки компаний доступен на - - http://www.postgresql.org/support/professional_support.

    - - -

    1.8) Как мне сообщить об ошибке?

    - -

    Посетите страничку со специальной формой отчёта об ошибке в - PostgreSQL по адресу: - - http://www.postgresql.org/support/submitbug. - Также проверьте наличие более свежей версии PostgreSQL на нашем - FTP сайте - ftp://ftp.postgresql.org/pub/.

    - -

    На ошибки, уведомление о которых были сделаны через специальную - форму или отправленные в какой-либо список рассылки PostgreSQL, - обычно генерируется один из следующих ответов:

    -
      -
    • Это не ошибка и почему
    • -
    • Это известная ошибка и она уже есть в списке - TODO
    • -
    • Данная ошибка была исправлена в текущем выпуске
    • -
    • Данная ошибка была исправлена, но исправление пока не попало в - официальный выпуск
    • -
    • Запрашивается более детальная информация: -
        -
      • Операционная система
      • -
      • Версия PostgreSQL
      • -
      • Тест, воспроизводящий ошибку
      • -
      • Отладочная информация
      • -
      • Вывод backtrace отладчика
      • -
      -
    • -
    • Это новая ошибка. Может произойти следующее: -
        -
      • Будет создано исправление, которое будет включено в следующий - выпуск
      • -
      • Ошибка не может быть исправлена немедленно и будет добавлена в список - TODO
      • -
      -
    • -
    - -

    1.9) Как найти информацию об известных ошибках - или отсутствующих возможностях?

    - -

    PostgreSQL поддерживает расширенный подкласс SQL:2003. - Смотрите наш список TODO - на предмет известных ошибок, отсутствующих возможностей и будущих - планов.

    - -

    На запрос какой-либо возможности обычно приходят следующие ответы:

    -
      -
    • Данная возможность уже есть в списке - TODO
    • -
    • Данная возможность нежелательна потому что: -
        -
      • Она дублирует существующую функциональность, которая следует - стандарту SQL
      • -
      • Данная возможность сильно усложнила бы код, но дала бы маленькую - выгоду
      • -
      • Данная возможность небезопасна или ненадёжна
      • -
      -
    • -
    • Данная новая возможность добавлена в список - TODO -
    • -
    - -

    PostgreSQL не использует какую-либо систему отслеживания ошибок, - потому что мы обнаружили, что использование прямого обращения по - электронной почте и обновляемого списка - TODO - является более эффективным. На практике, ошибки в программном - обеспечении сохраняются очень недолго, а ошибки, которые важны - большому количеству пользователей исправляются моментально. Есть - только одно место, где можно найти все изменения, улучшения и - исправления, сделанные в выпуске PostgreSQL - это журналы сообщений - системы контроля версий - CVS. - Даже замечания к выпускам не содержат все изменения, сделанные - в программном обеспечении.

    - - -

    1.10) Какая документация имеется в наличии?

    - -

    PostgreSQL содержит много документации, включая большое руководство, - страницы электронного руководства man и некоторые маленькие тестовые - примеры. Смотрите в каталог /doc. Вы также можете просматривать - документацию в Интернет по адресу - http://www.postgresql.org/docs.

    - -

    Существует две книги по PostgreSQL доступные по адресам http://www.PostgreSQL.org/docs/books/awbook.html - и http://www.commandprompt.com/ppbook/. - Есть несколько книг по PostgreSQL, которые можно купить. - Одну из наиболее популярных написал Корри Дуглас (Korry Douglas). - Список обзоров по этим книгам доступен по адресу - http://www.postgresql.org/docs/books/. - Кроме того, по адресу http://wiki.postgresql.org/wiki/Community_Generated_Articles%2C_Guides%2C_and_Documentation - вы можете найти коллекцию технических статей, посвещенных PostgreSQL.

    - -

    Клиент командной строки psql имеет несколько команд \d для - отображения информации по типам, операторам, функциям, агрегатам и т.д. - - используйте \? для получения списка доступных команд.

    - -

    Наш сайт содержит еще больше информации.

    - - -

    1.11) Как мне научиться SQL?

    - -

    Во-первых, возьмите одну из книг по PostgreSQL, о которых говорилось - выше. Многим из наших пользователей также нравится книга - The Practical SQL Handbook, - Bowman, Judith S., et al., Addison-Wesley. Другим нравится The - Complete Reference SQL, Groff et al., McGraw-Hill.

    - -

    Существует также множество прекрасных учебников доступных в online: -

    -

    - -

    1.12) Как мне прислать исправление или присоединится к команде разработчиков?

    - -

    Смотрите - FAQ для разработчиков.

    - - -

    1.13) Как сравнить PostgreSQL с другими - СУБД? Может ли PostgreSQL быть встроенным?

    - -

    - Существует несколько методов сравнения программного обеспечения: - возможности, производительность, надежность, поддержка и цена.

    - -
    -
    Возможности
    - -
    PostgreSQL имеет большинство возможностей представленных - в больших коммерческих СУБД, такие как: транзакции, - подзапросы, триггеры, представления, ссылочной - целостности вторичного ключа и разные блокировки. У нас есть некоторые возможности, - которых нет у них: типы, определяемые пользователем, механизм - наследования, правила и конкуретное многоверсионное управление - для работы с содержимым блокировок.
    -
    -
    - -
    Производительность
    - -
    Производительность PostgreSQL сходна с другими коммерческими - СУБД и с СУБД с открытым исходным кодом. В каких-то вещах мы быстрее, - в каких-то медленнее. Наша производительности обычно +/-10% по - сравнению с другими СУБД. -
    -
    - -
    Надежность
    - -
    Мы понимали, что наша СУБД должна быть надежной - или она ничего не будет стоить. Мы стараемся выпускать хорошо проверенный, - стабильный код, который содержит минимум ошибок. Каждый выпуск - проходит стадию бета-тестирования по крайней мере в течении одного - месяца и наша история выпусков показывает что мы можем предоставлять - стабильные, монолитные выпуски, которые готовы к продуктивному - использованию. Мы верим, что мы производим проверку не хуже, - чем у других СУБД.
    -
    -
    - -
    Поддержка
    - -
    Наш список рассылки предоставляет возможможность общения с - большой группой разработчиков и пользователей, которые могут помочь решить - любые возникшие проблемы. В то же время, мы не гарантируем какие-либо - исправления, но и разработчики коммерческих СУБД не всегда - делают исправления. Прямой доступ к разработчикам, сообществу - пользователей, руководствам и исходным текстам часто делают поддержку - PostgreSQL превосходящей другие СУБД. Существует - коммерческая поддержка по результам возникших инцидентов, которая - доступна для тех кому она нужна. (Смотрите Секцию 1.7.)
    -
    -
    - -
    Цена
    - -
    Наш продукт бесплатен как для коммерческого так, и не для - коммерческого использования. Вы можете добавлять свой код в наш - продукт без ограничений, за исключением тех, что описываются в - нашей лицензии стиля BSD, которая приведена выше.
    -
    -
    -
    - -

    PostgreSQL разрабатывается по архитектуре клиент/сервер, которая - требует отдельных процессов для каждого клиента и сервера, а также - несколько вспомогательных процессов. Многие встраиваемые архитектуры - могут соответствовать таким требованиям. Однако, если ваша встраиваемая - архитектура требует сервер баз данных для запуска внутри прикладного - процесса, вы не можете использовать Postgres и вам лучше бы выбрать - для базы данных какое-либо другое облегченное решение.

    - -

    1.14) Будет ли PostgreSQL работать с - последними изменениями, в разных страных, касающимися дневного времени?

    - -

    Изменения в сохранении дневного времени в США включены в PostgreSQL версии - 8.0.[4+] и во все следующие выпуски, например в 8.1. Изменения по Канаде - и Западной Австралии включены в 8.0.[10+], 8.1.[6+] и все следующие - выпуски. Выпуски PostgreSQL до 8.0 используют информацию о сохранении - дневного времени из базы данных временных зон в операционной системе.

    -
    - -

    1.15) Как мне отписаться от списков рассылки PostgreSQL? - Как избежать получения дублирующих сообщений?

    - -

    Страница Majordomo - на сайте PostgreSQL позволяет подписаться или отписаться от любого из списков - рассылки PostgreSQL. (Вам может понадобится ваш пароль для Majordomo, который - отправляется на ваш E-mail, чтобы войти в управление вашими подписками.)

    - -

    Все списки рассылки PostgreSQL настариваются так, чтобы групповой ответ уходил - на адрес списка и на адрес автора сообщения. Так сделано, чтобы пользователи - получали ответы на E-mail как можно быстрее. Если вы не хотите получать дублирующие - E-mail сообщения из списка, в случаях когда вы уже получили эти сообщения напрямую, - установите флажок eliminatecc на странице Change Settings в - Majordomo. Вы также можете избежать получения копий своих сообщений для самого себя, - если снимите флажок selfcopy.

    - -
    - -

    Вопросы пользователей по клиентской части

    - -

    2.1) Какие интерфейсы есть для PostgreSQL?

    - -

    Установка PostgreSQL включает только C и встроенный - (embedded) C интерфейсы. Все другие интерфейсы - являются независимыми проектами и загружаются отдельно; самостоятельность - проектов позволяет им организовать собственное расписание выпусков - новых версий и иметь собственную команду разработчиков.

    - -

    Некоторые языки программирования, такие как PHP - включают в себя интерфейс к PostgreSQL. Интерфейсы для таких языков - как Perl, TCL, Python и многих других, доступны на - http://pgfoundry.org.

    - -

    2.2) Какие инструменты существуют для использования - PostgreSQL через Web?

    - -

    Прекрасное введение во взаимодействие баз данных и Web можно найти на: - http://www.webreview.com

    - -

    Для интеграции с Web, PHP - http://www.php.net является неплохим интерфейсом.

    - -

    В сложных случаях, многие пользуются Perl и DBD::Pg с CGI.pm - или mod_perl.

    - -

    2.3) Есть ли у PostgreSQL графический интерфейс - пользователя?

    - -

    Для PostgreSQL существует большое количество инструментов с - графическим интерфейсом как коммерческих, так и открытых. Подробности - можно найти в - Документации сообщества для GUI иструментов PostgreSQL

    - -
    - -

    Вопросы администрирования

    - -

    3.1) Как мне установить PostgreSQL в место отличное - от /usr/local/pgsql?

    - -

    Задайте опцию --prefix когда запускаете configure.

    - -

    3.2) Как мне управлять соединениями от других - компьютеров?

    - -

    По умолчанию, PostgreSQL разрешает только соединения на локальной - машине через сокеты домена Unix или TCP/IP соединения. Для того, чтобы - другие машины смогли подключиться к базе вы должны изменить - listen_addresses в postgresql.conf, разрешить - host-авторизация в файле $PGDATA/pg_hba.conf и перестартовать - сервер СУБД.

    - -

    3.3) Какие настройки мне нужно сделать для улучшения - производительности?

    - -

    Существует три главных области, которые потенциально могут - увеличить производительность:

    - -
    -
    Изменение запроса
    -
    Это означает модификацию запросов для получения лучшей - производительности: -
      -
    • Создание индексов, включая индексы выражений и частичные индексы
    • -
    • Использование COPY вместо множества INSERT
    • -
    • Группировка нескольких операторов в единую транзакцию для - уменьшения нагрузки при выполнении завершения транзакции
    • -
    • Использование CLUSTER, когда из индекса берётся - множество строк
    • -
    • Использование LIMIT для того, чтобы возвращалась - только часть вывода от запроса
    • -
    • Использование Подготовленных (Prepared) запросов
    • -
    • Использование ANALYZE для обслуживания статистики - оптимизатора
    • -
    • Регулярное использование VACUUM или pg_autovacuum
    • -
    • Удаление индексов во время больших изменений данных
    • -
    -

    -
    - -
    Настройка сервера
    - -
    Некоторые установки в postgresql.conf влияют на - производительность. Подробный полный список установок см. в - - Administration Guide/Server Run-time Environment/Run-time Configuration, - а комментарии см. в - http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html - и - http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html. -

    -
    - -
    Выбор "железа" - аппаратного обеспечения
    - -
    Влияние "железа" на производительность подробно описано в - - http://www.powerpostgresql.com/PerfList/ и - - http://momjian.us/main/writings/pgsql/hw_performance/index.html. -
    -
    -
    -
    - -

    3.4) Какие возможности для отладки есть в - наличии?

    - -

    Есть множество установок в настройках сервера, начинающихся - на log_* на http://www.postgresql.org/docs/current/interactive/runtime-config-logging.html, - позволяющих протоколировать запросы и статистику работы процесса, - которая очень полезна для отладки и измерения производительности.

    - - -

    3.5) Почему я получаю сообщение "Sorry, too - many clients" когда пытаюсь подключиться к базе?

    - -

    Вы достигли установленного по умолчанию ограничения в 100 сессий - подключения к базе данных. Вам необходимо увеличить лимит на количество - конкурентных backend процессов для вашего сервера БД, - изменив значение max_connections в файле postgresql.conf - и перестартовать сервер БД.

    - - -

    3.6) Как выполнить обновление PostgreSQL?

    - -

    См. информацию об обновлении в http://www.postgresql.org/support/versioning - и специальные инструкции в - http://www.postgresql.org/docs/current/static/install-upgrading.html.

    - - -

    3.7) Какое компьютерное "железо" я должен - использовать?

    - -

    Поскольку "железо" персональных компьютеров является наиболее - совместимым, люди склонны верить, что такое "железо" имеет одинаковое - качество. Это не так. Память ECC, SCSI и качественные материнские платы - являются более надёжными и имеют более лучшую производительность, чем - менее дорогое "железо". PostgreSQL будет работать на любом "железе", - но если для вас важны надёжность и производительность, то с вашей стороны - будет мудро поставить соответствующее "железо". Обсудить разное "железо" - можно в наших списках рассылки.

    - -
    - -

    Вопросы эксплуатации

    - -

    4.1) Как выполнить SELECT только - для нескольких первых строчек запроса? Произвольной строки?

    - -

    Для получения только нескольких строк, если вы знаете их количество - на момент выполнения SELECT используйте LIMIT.

    - Если есть какой-либо индекс, который совпадает с ORDER BY, - то возможно, что весь запрос выполнен и не будет. Если вы не знаете - количества необходимых строк на момент выполнения SELECT, - используйте курсор и FETCH.

    - -

    To SELECT a random row, use:

    -
        SELECT col
    -    FROM tab
    -    ORDER BY random()
    -    LIMIT 1;
    -
    - - -

    4.2) Как мне найти какие таблицы, индексы, - базы данных и пользователи существуют? Как мне увидеть запросы, - которые использует psql для получения этой информации?

    - -

    Чтобы просматривать таблицы в psql, используйте команду \dt. - Полный список команд в psql вы можете получить, используя \?. - Кроме того, вы можете посмотреть исходный код psql в файле - pgsql/src/bin/psql/describe.c. Он содержит команды - SQL которые генерируются при вводе в psql команд, - начинающихся с обратной косой черты. Вы также можете запустить - psql с опцией -E так, чтобы эта программа выдавала - запросы, которые она использует для выполнения заданных вами - команд. PostgreSQL также предоставляет SQL - совместимый с INFORMATION SCHEMA интерфейс, с помощью которого, вы - можете сформировать запрос на получение информации о базе данных.

    - -

    Также существуют системные таблицы, начинающиеся с pg_.

    - -

    Используйте psql -l для получения списка всех баз данных.

    - -

    Также посмотрите файл pgsql/src/tutorial/syscat.source. - Он показывает многие из операторов SELECT необходимых - для получения информации из системных таблиц базы данных.

    - - -

    4.3) Как изменить тип данных колонки?

    - -

    В 8.0 и более поздних версиях, изменение типа колонки выполняется - очень легко через ALTER TABLE ALTER COLUMN TYPE.

    - -

    В более ранних версиях сделайте так:

    -
    -    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;
    -
    - -

    4.4) Каковы максимальные размеры для строк в таблице, - таблиц и базы данных?

    - -

    Существуют следующие ограничения:

    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Максимальный размер базы?неограничен (существуют базы на 32 TB)
    Максимальный размер таблицы?32 TB
    Максимальный размер строки?400 Gb
    Максимальный размер поля?1 GB
    Максимальное количество строк в таблице?неограничено
    Максимальное количество колонок в таблице?250-1600 в зависимости от типа
    Максимальное количество индексов в таблице?неограничено
    -
    -
    -

    Разумеется, понятие "неограничено" на самом деле ограничивается - доступным дисковым пространиством и размерами памяти/своппинга. - Когда значения перечисленные выше неоправдано большие, может - пострадать производительность.

    - -

    Максимальный размер таблицы в 32 TB не требует чтобы операционная - система поддерживала файлы больших размеров. Большие таблицы хранятся - как множество файлов размером в 1 GB, так что ограничения, которые - накладывает файловая система не важны.

    - -

    Максимальный размер таблицы и максимальное количество колонок - могут быть увеличены в четыре раза, если размер блока по умолчанию будет - увеличен до 32k.

    - -

    Существует ограничение, по которому индексы не могут создаваться для - колонок длиннее чем 2,000 символов. К счастью такие индексы вряд ли - действительно кому-то нужны. Уникальность гарантируется наилучим образом, - с помощью функционального индекса из хэша MD5 длинной колонки, а - полнотекстовое индексирование позволяет искать слова внутри колонки.

    - -

    4.5) Как много дискового пространства в базе данных - нужно для сохранения данных из обычного текстового файла?

    - -

    СУБД PostgreSQL может потребоваться дискового пространства до 5 раз - больше для сохранения данных из простого текстового файла.

    - -

    В качестве примера, рассмотрим файл в 100,000 строк в каждой, из - которых целое число и текстовое описание. При этом длина текста, - в среднем, составляет 20 байт. Размер простого файла составит 2.8 MB. - Размер базы PostgreSQL, содержащей эти же данные составит приблизительно - 5.2 MB из которых:

    -
    -    24 байт: на каждый заголовок строки в таблице (приблизительно)
    -  + 24 байта: одно поле с целочисленным типом и одно текстовое поле
    -  +  4 байта: указатель на странице для всей табличной строки
    -   ----------------------------------------
    -    56 байт на строку в таблице
    -
    -   Размер страницы данных в PostgreSQL составляет 8192 байт (8 KB), так что:
    -
    -   8192 байт на страницу
    -   ---------------------   =  158 строк в таблице на страницу БД (округлённо)
    -     52 байт на строку в таблице
    -
    -     100000 строк данных
    -   ----------------------- =  633 страниц в БД (округлённо)
    -   158 строк в таблице на страницу
    -
    -   633 страниц БД * 8192 байт на страницу = 5,185,536 байт (5.2 MB)
    -
    - -

    Индексы не требуют так много, но поскольку они создаются для - большого количества данных, они также могут быть велики.

    - -

    Значения NULL хранятся как битовые карты и поэтому они - занимают очень мало места. -

    - -

    4.6) Почему мои запросы работают медлено? Почему - они не используют мои индексы?

    - -

    Индексы не используются для каждого запроса. Они - используются только если таблица больше минимального размера и запрос - выбирает только маленький процент строк в таблице. Так устроено, - потому что доступ к диску с применением рандомизации при сканировании - индексов может быть медленнее, чем простое чтение таблицы или ее - последовательное сканирование.

    - -

    Чтобы определить необходимость использования индекса для какой-либо - таблицы, PostgreSQL должен иметь статистику по этой таблице. Эта - статистика собирается при использовании VACUUM ANALYZE - или просто ANALYZE. Используя статистику, оптимизатор - узнает о том как много строк в таблице и если он должен использовать - индексы, то он может принимать лучшие решения. Статистика также - влияет на определение оптимального порядка связывания и метода связывания. - При изменении содержимого таблицы должен периодически выполнятся - сбор статистики.

    - -

    Обычно индексы не используются для ORDER BY или для - выполнения связываний. Последовательный перебор следующий за явной - сортировкой обычно быстрее, чем поиск по индексам в большой таблице. - Однако, ORDER BY часто комбинируется с LIMIT - и в этом случае индекс будет использоваться, поскольку при выполнении - будет возвращаться небольшая часть таблицы.

    - -

    Если вам кажется, что оптимизатор некорректно выбирает последовательный - перебор, используйте SET enable_seqscan TO 'off' и - запустите запрос снова, чтобы увидеть, действительно ли сканирование - индексов быстрее. -

    - -

    Когда используются операции с шаблонами, например LIKE - или ~, индексы могут быть использованы в следующих случаях:

    -
      -
    • Начало строки поиска должно совпадать с началом искомой строки, т.е.: -
        -
      • LIKE шаблоны не должны начинаться с %..
      • -
      • ~ шаблоны регулярных выражений должна начинаться на ^.
      • -
    • -
    • Строка поиска не должна начинаться с символа класса, т.е. [a-e].
    • -
    • Поиск независимый от регистра, такой как ILIKE и - ~* не использует индексы. Вместо него, используйте индексы - выражений, которые описываются в секции 4.8.
    • -
    • Во время initdb должна использоваться локаль по умолчанию - C, потому что не существует возможности узнать следующий наибольший - символ для не-C локали. Вы можете для таких случаев создать специальный - индекс text_pattern_ops который работает только для - LIKE индексирования. Для поиска слов также можно - использовать полнотекстовый индекс.
    • -
    - -

    4.7) Как посмотреть на то, как оптимизатор выполняет - мой запрос?

    - -

    Смотрите страницу руководства посвященную EXPLAIN.

    - - -

    4.8) Как мне выполнить поиск регулярного выражения - и поиск независимый от регистра букв поиск регулярного выражения? - Как мне использовать индекс для поиска независимого от регистра букв?

    - -

    Оператор ~ производит поиск регулярного выражения, а оператор - ~* производит независимый от регистра букв поиск регулярного - выражения. Независимый от регистра вариант LIKE называется - ILIKE.

    - -

    Независимое от регистра сравнение обычно выражается так:

    -
    -    SELECT *
    -    FROM tab
    -    WHERE lower(col) = 'abc';
    -
    - - Эта конструкция не будет использовать стандартный индекс. Однако, если - вы создадите индекс выражения, он будет использован: -
    -    CREATE INDEX tabindex ON tab (lower(col));
    -
    -

    Если вышеуказанный индекс создаётся как UNIQUE, то - колонка, для которой он создаётся может хранить символы и в верхнем, - и в нижнем регистре, индес не может иметь идентичных значений, которые - отличаются только регистром. Чтобы в колонке можно было хранить символы - только в определённом регистре, используйте ограничение - CHECK или проверку через триггер.

    - -

    4.9) Как мне определить, что значение поля в каком-либо - запросе равно NULL? Как мне соединить возможные - NULL? Могу я сортировать поля NULL или нет?

    - -

    Вы просто сравниваете значение с IS NULL и - IS NOT NULL, как здесь:

    -
    -   SELECT *
    -   FROM tab
    -   WHERE col IS NULL;
    -
    - -

    Чтобы соединить с возможными значениями NULL, используйте - COALESCE() как здесь:

    -
    -   SELECT COALESCE(col1, '') || COALESCE(col2, '')
    -   FROM tab
    -
    - -

    Чтобы отсортировать данные по значению используйте модификаторы - IS NULL и IS NOT NULL в выражении - ORDER BY. Когда они будут генерировать значения - истина, то при сортировке они будут выше, чем значения - ложь, так что записи с NULL будут в отсортированном списке сверху:

    - -
    -   SELECT *
    -   FROM tab
    -   ORDER BY (col IS NOT NULL);
    -
    - -

    4.10) Каковы отличия между разными символьными - типами?

    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    ТипВнутреннее имяЗамечания
    VARCHAR(n)varcharразмер задает максимальную длину, нет заполнения
    CHAR(n)bpcharзаполняется пустотой до фиксированной длины
    TEXTtextнет задаваемого верхнего ограничения или длины
    BYTEAbyteaмассив байт переменной длины (можно использовать null-байт без опаски)
    "char"charодин символ
    -
    - -

    Внутреннее имя вы можете увидеть, когда смотрите системные каталоги - и в некоторых сообщениях об ошибках.

    - -

    Первые четыре типа являются "varlena" типами (т.е., первые - четыре байта на диске являются длинной, за которой следуют данные). - Таким образом, фактически используемое пространство больше, чем - обозначенный размер. Однако, длинные значения также сжимаются, - так что занимаемое дисковое пространство может также быть и меньше, - чем ожидалось.

    - - VARCHAR(n) - это лучшее решение, когда нужно хранить - строки переменной длины, не превышающие определенного размера. - TEXT - это лучшее решение для строк неограниченной длины, - с максимально допустимой длиной в 1 гигабайт. -

    CHAR(n) - это лучшее решение для хранения строк, которые - обычно имеют одинаковую длину. CHAR(n) заполняется - пустотой до заданной длины, в то время как VARCHAR(n) - хранит только символы, из которых состоит строка. - BYTEA используется для хранения бинарных данных, значения - которых могут включать NULL байты. Все типы описанные - здесь, имеют сходные характеристики производительности.

    - -

    4.11.1) Как мне создать поле - serial/с-авто-увеличением?

    - -

    PostgreSQL поддерживает тип данных SERIAL. Он - автоматически создает последовательность. Например:

    -
    -    CREATE TABLE person ( 
    -        id   SERIAL, 
    -        name TEXT 
    -    );
    -
    - - автоматически транслируется в: -
    -    CREATE SEQUENCE person_id_seq;
    -    CREATE TABLE person ( 
    -        id   INT4 NOT NULL DEFAULT nextval('person_id_seq'),
    -        name TEXT 
    -    );
    -
    - -

    Автоматически созданная последовательность имеет имя вида - <таблица>_<колонка_serial>_seq, где - таблица и колонка_serial - это соответственно имена - таблицы и колонки с типом SERIAL. - Смотрите подробности о последовательностях на странице руководства - посвященной create_sequence.

    - -

    4.11.2) Как мне получить значение при вставке - SERIAL?

    - -

    Простейший способ получить назначенное значение SERIAL - это использовать RETURNING. Используя для примера таблицу в 4.11.1, это может выглядеть так:

    - -
    -    INSERT INTO person (name) VALUES ('Blaise Pascal') RETURNING id;
    -
    - - Вы также можете вызвать nextval() и использовать это значение в - INSERT или вызвать currval() после - INSERT. - - -

    4.11.3) Не может ли получиться так, что - использование currval() и nextval() приведет к - зациклированию с другими пользователями?

    - -

    Нет. currval() возвращает текущее значение, назначенное вашей - сессией, а не другими сессиями.

    - -

    4.11.4) Почему числа из моей последовательности - не используются снова при отмене транзакции? Почему создаются разрывы - при нумерации в колонке, где я использую последовательность/SERIAL?

    - -

    Для реализации конкуретности, значения последовательностей, при - необходимости выдаются во время запуска транзакций и не блокируются - до полного выполнения транзакций. Это может вызывать разрывы в - нумерации при отмене транзакций.

    - - -

    4.12) Что такое OID? Что такое - CTID?

    - -

    Если таблица создана с WITH OIDS, то каждая строка - получает уникальный индентификатор OID. - OID - это автоматически назначаемое уникальное 4-х - байтовое целое число, которое уникально для всей установленной СУБД. - Однако, после того как его значение превысит 4 миллиарда, значения - OID начинают дублироваться. PostgreSQL использует - OID для связывания своих внутренних таблиц.

    - -

    Для уникального значения в строках таблицы пользователя, лучшим - способом является использование SERIAL вместо - OID, потому что последовательности SERIAL - уникальны только внутри таблицы и таким образом меньше подвержены - переполнению. Для хранения значений 8-ми байтной последовательности - доступен тип SERIAL8. - -

    CTID используется для идентификации специальных - физических записей с блочными и offset значениями. CTID - изменяется после того как строки в таблице были изменены или перегружены. -

    TID используется индексными записями в качестве - указателя на физические записи.

    - - -

    4.13) Почему я получаю ошибку "ERROR: Memory - exhausted in AllocSetAlloc()"?

    - -

    Предположительно у вас закончилась виртуальная память - или что ваше ядро имеет маленький лимит на определенные ресурсы. - Попытайтесь перед запуском сервера БД выполнить следующие - команды:

    -
    -    ulimit -d 262144
    -    limit datasize 256m
    -
    - - В зависимости от командного интерпретатора shell, только одна из данных - команд выполнится успешно, но она позволит вам установить больший - сегмент данных процесса и возможно решит проблему. Эта команда - изменяет параметры текущего процесса и всех его потомков, созданных - после её запуска. Если у вас возникла проблема с SQL - клиентом, потому что backend возвращает слишком большой объем данных, - попытайтесь выполнить эту команду перед запуском клиента. - -

    4.14) Как мне узнать, какая версия PostgreSQL - запущена?

    - -

    Из psql, наберите SELECT version();

    - - -

    4.15) Как мне создать колонку которая по умолчанию - будет содержать текущее время?

    - -

    Используйте CURRENT_TIMESTAMP:

    -
    -CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
    -
    - -

    4.16) Как мне выполнить внешнее связывание?

    - -

    PostgreSQL поддерживает внешнее связывание, - используя стандартный синтаксис SQL. Вот два примера:

    -
    -    SELECT *
    -    FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
    -
    - - или -
    -    SELECT *
    -    FROM t1 LEFT OUTER JOIN t2 USING (col);
    -
    - -

    Это идентичные запросы связывания t1.col и t2.col, также возвращают - любые несвязанные строки в t1 (которые не совпадают с t2). - RIGHT связывание должно добавить несвязанные строки - t2. FULL связывание должно возвратить совпавшие - строки плюс все несвязанные строки из t1 и t2. Слово OUTER - является необязательным и назначается в LEFT, - RIGHT и FULL связываниях. Обычные - связывания называются INNER связывания.

    - -

    4.17) Как выполнять запросы, использующие несколько - баз данных?

    - -

    Не существует способа создать запрос к базам данных отличным от текущей. - Поскольку PostgreSQL загружает системные каталоги специфичные для базы - данных, непонятно даже, как должен себя вести такой межбазовый запрос.

    - -

    contrib/dblink позволяет запросы между базами, используя - вызовы функций. Разумеется, клиент может одновременно также устанавливать - соедиенения с различными базами данных и таких образом объединять - информацию из них.

    - -

    4.18) Как мне вернуть из функции несколько строк таблицы?

    - -

    Вы можете легко использовать функции, возвращающие список, - - http://wiki.postgresql.org/wiki/Return_more_than_one_row_of_data_from_PL/pgSQL_functions.

    - -

    4.19) Почему я получаю ошибку "relation with OID #### - не существует", когда обращаютсь к временным таблицам в функциях PL/PgSQL?

    - -

    В PostgreSQL до версии 8.3, PL/PgSQL кэширует сценарии функции и один из - негативных эффектов этого состоит в том, что если функция PL/PgSQL обращается - к временной таблице и эта таблица позднее удаляется и пересоздается, а функция - затем вызывается снова, то ее вызов приведет к ошибке, потому что скэшированное - содержимое функции содержит указатель на старую временную таблицу. Чтобы решить - эту проблему, используйте EXECUTE для доступа к временным - таблицам в PL/PgSQL. Использование этого оператора заставит запрос - перегенерироваться каждый раз.

    - -

    В PostgreSQL 8.3 и позднее, этой проблемы нет.

    - - -

    4.20) Какие есть решения для репликации?

    - -

    Хотя "репликация" -- это единый термин, есть несколько разных технологий - для выполнения репликаций с разными особенностями для каждой.

    - -

    Репликация Master/slave позволяет иметь один главный (master) сервер - для выполнения запросов чтения/записи, в то время как подчинённые - (slave) сервера могут производить только запросы - чтения/SELECT. Наиболее популярным решением для репликации - master-slave в PostgreSQL является - - Slony-I.

    - -

    Репликация Multi-master позволяет выполнять запросы чтения/записи - на нескольких, реплицируемых друг с другом компьюетрах. Эта особенность - также приводит к потере производительности, потому что необходима - синхронизация изменений между несколькими серверами. Наиболее - популярным решением для такой репликации в PostgreSQL является - PGcluster. - -

    4.21) Почему имена таблицы и колонок не - распознаются в в моём запросе? Почему не сохраняются заглавные буквы?

    - -

    Наиболее часто имена нераспознаются из-за использования двойных кавычек в - имени таблицы или колонки при создании таблицы. При использовании двойных - кавычек, имя таблицы и колонки (которые называют идентификаторами) - сохраняются в - регистро-зависимом виде; это означает, что вы должны использовать - двойные кавычки, когда указываете эти имена в запросе. Некоторые - интерфейсы, такие как pgAdmin, во время создания таблицы добавляют - двойные кавычки автоматически. Таким образом, чтобы идентификаторы - распознавались вы должны следовать одному из следующих правил: -

      -
    • Избегать использования двойных кавычек при создании таблиц
    • -
    • Использовать в идентификаторах только символы нижнего регистра
    • -
    • Использовать двойные кавычки для идентификаторов в запросах
    • -
    - - - diff --git a/doc/src/FAQ/FAQ_turkish.html b/doc/src/FAQ/FAQ_turkish.html deleted file mode 100644 index 6327029c75..0000000000 --- a/doc/src/FAQ/FAQ_turkish.html +++ /dev/null @@ -1,1019 +0,0 @@ - - - - - PostgreSQL Sıkça Sorulan Sorular - Türkçe - - - - -

    PostgreSQL için Sıkça Sorulan Sorular (SSS)

    -

    Son güncelleme : 15 Kasım 2004 Pazartesi - 15:03:23

    -

    Current maintainer: Bruce Momjian -(pgman@candle.pha.pa.us)

    -

    Çevirenler : Devrim Gündüz (devrim@tdmsoft.com)
    Nicolai Tufar -(ntufar@tdmsoft.com)
    Volkan YAZICI (volkany@phreaker.net)

    -

    Bu belgenin en güncel hali, http://www.PostgreSQL.org/docs/faqs/FAQ_turkish.html -ve http://www.gunduz.org/seminer/pg/FAQ_turkish.html -adreslerinde görülebilir.

    -

    Platforma özel sorularınız, http://www.PostgreSQL.org/docs/index.html adresinde yanıtlanır.

    - -
    - -

    Genel Sorular

    - 1.1) PostgreSQL nedir? Nasıl okunur?
    - 1.2) PostgreSQL'in hakları nedir?
    - 1.3) PostgreSQL, hangi Unix platformlarında çalışır?
    - 1.4) Hangi Unix olmayan uyarlamaları bulunmaktadır?
    - 1.5) PostgreSQL'i nereden indirebilirim?
    - 1.6) Desteği nereden alabilirim?
    - 1.7) En son sürümü nedir?
    - 1.8) Hangi belgelere ulaşabilirim?
    - 1.9) Bilinen hatalar ya da eksik özelliklere nereden ulasabilirim?
    - 1.10) Nasıl SQL öğrenebilirim?
    - 1.11) PostgreSQL 2000 yılına uyumlu mudur?
    - 1.12) Geliştirme takımına nasıl katılabilirim??
    - 1.13) Bir hata raporunu nasıl gönderebilirim?
    - 1.14) PostgreSQL, diğer VTYS(DBMS) lerle nasıl - karşılaştırılabilir?
    - 1.15) PostgreSQL'e maddi açıdan nasıl destek olabilirim?
    - -

    Kullanıcı/istemci Soruları

    - 2.1) PostgreSQL için ODBC sürücüleri var mı?
    - 2.2) PostgreSQL'i web sayfalarında kullanabilmek için - hangi araçlar bulunmaktadır?
    - 2.3) PostgreSQL'in grafik kullanıcı arabirimi var mıdır?
    - 2.4) PostgreSQL ile iletişimi kurabilmek için - hangi dilleri kullanabilirim?
    - -

    Yönetimsel Sorular

    - 3.1) PostgreSQL'i /usr/local/pgsql dizininden - başka dizinlere nasıl kurabilirim?
    - 3.2) Postmaster'ı başlattığımda Bad System Call - ya da core dumped mesajı alıyorum. Neden?
    - 3.3) Postmaster'ı başlattığımda, IpcMemoryCreate - hatası alıyorum. Neden?
    - 3.4) Postmaster'ı, başlattığımda, IpcSemaphoreCreate - hatası alıyorum. Neden?
    - 3.5) Diğer bilgisayarların benim PostgreSQL veritabanı - sunucuma bağlantılarını nasıl kontrol edebilirim?
    - 3.6) Veritabanı motorunu daha iyi başarım icin nasıl ayarlayabilirim?
    - 3.7) Hangi hata ayıklama özellikleri bulunmaktadır?
    - 3.8) Bağlanmaya çalışırken, neden "Sorry, too many clients" - hatasını alıyorum. Neden?
    - 3.9) pgsql_tmpdizinin içindeki dosyalar nelerdir?
    - 3.10) PostgreSQL sürümlerini yükseltmek için neden bir - dump/reload işlemi gerçekleştirmek zorundayım?
    - 3.11) Nasıl bir donanım kullanmalıyım?br> - -

    İşletimsel Sorular

    - 4.1) Binary cursor ve normal cursor arasındaki fark nedır?
    - 4.2) Sorgunun sadece ilk birkaç satırını nasıl - SELECT edebilirim?
    - 4.3) psql'in içinde gördügüm tabloların ya da diğer - şeylerin listesini nasıl alabilirim?
    - 4.4) Bir tablodan bir kolonu nasıl kaldırabilirim?
    - 4.5) Bir satır, tablo ve veritabanı için en fazla büyüklük nedir?
    - 4.6) Tipik bir metin dosyasındaki veriyi saklamak için ne - kadar disk alanı gereklidir?
    - 4.7) Veritabanında hangi tablo ya da index'lerin - tanımlandığını nasıl görebilirim?
    - 4.8) Sorgularım cok yavaş, ya da index'lerimi kullanmıyorlar. Neden?
    - 4.9) Query-optimizer'ın sorgularımı nasıl değerlendirdiğini, - işleme soktuğunu nasıl görebilirim?
    - 4.10) R-tree index nedir?
    - 4.11) Genetic Query Optimizer nedir?
    - 4.12) Düzenli ifade (Regular Expression) aramalarını - ve büyük/küçük harfe duyarsız aramaları nasıl yapabilirim? Bu büyük/küçük harfe duyarlı - aramalar için index'i nasıl kullanabilirim?
    - 4.13) Bir sorguda, bir alanın NULL olduğunu nasıl - ortaya çıkarabilirim?
    - 4.14) Çesitli karakter tipleri arasındaki farklar nelerdir?
    - 4.15.1) Nasıl serial/otomatik artan - (auto-incrementing) bir alan yaratabilirim?
    - 4.15.2) Serial girişinin değerini nasıl alabilirim?
    - 4.15.3) currval() ve nextval() - diğer kullanıcılara sorun yaratmaz mı?
    - 4.15.4) Neden sequence sayıların transaction - işleminin iptalinden sonra yeniden kullanılıyor? Neden sequence/SERIAL - kolonumdaki sayılarda atlamalar oluyor?
    - 4.16) OID nedir? TID nedir?
    - 4.17) PostgreSQL' de kullanılan bazı terimlerin anlamları nelerdir?
    - 4.18) Neden "ERROR: Memory exhausted in AllocSetAlloc()" - hatasını alıyorum?
    - 4.19) Hangi PostgreSQL sürümünü çalıstırdığımı nasıl görebilirim?
    - 4.20) Neden large-object işlemlerim, "invalid large - obj descriptor" hatasını veriyor?
    - 4.21) Şu andaki zamanı öntanımlı değer olarak kabul - eden kolonu nasıl yaratırım?
    - 4.22) Neden IN kullanan subquery'lerim çok yavaş?
    - 4.23) Outer join işlemini nasıl yapabilirim?
    - 4.24) Aynı anda birden fazla veritabanında nasıl işlem yapabilirim?
    - 4.25) Bir fonksiyondan nasıl çoklu satır ya da kolon döndürebilirim?
    - 4.26) Neden Pl/PgSQL fonksiyonları içinden güvenli - bir şekilde tablo yaratma/kaldırma işlemlerini yapamıyoruz?
    - 4.27) Hangi şifreleme seçenekleri bulunmaktadır?
    - - -

    PostgreSQL Özelliklerini Genişletmek

    - 5.1) Kullanıcı-tanımlı bir fonksiyon yazdım. psql'de - çalıştırdığım zaman neden core dump ediyor?
    - 5.2) PostgreSQL'e nasıl yeni veri tipleri/fonksiyonlar ekleyebilirim?
    - 5.3) Bir tuple döndürmek için bir C fonksiyonunu nasıl yazarım?
    - 5.4) Bir kaynak dosyasında değişiklik yaptım. - Yeniden derlememe rağmen değişiklik geçerli olmuyor. Neden?
    - -
    - -

    Genel Sorular

    - -

    1.1) PostgreSQL nedir? Nasıl okunur?

    -

    PostgreSQL, Post-Gres-Q-L. olarak okunur

    -

    PostgreSQL, yeni-nesil VTYS araştırma prototipi olan POSTGRES - veritabanı yönetim sisteminin geliştirilmesidir. POSTGRES'in zengin veri tiplerini ve - güçlü veri modelini tutarken, SQL'in geliştirilmiş alt kümesi - olan PostQuel dilini kullanır. PostgreSQL ücretsizdir ve kaynak kodu açık dağıtılır.

    -

    PostgreSQL, PostgreSQL geliştirme listesine üye olan bir Internet geliştirici - takımı tarafından geliştirilir. Şu andaki koordinatör, Marc G. Fournier - (scrappy@PostgreSQL.org). - (Bu takıma nasıl katılacagınızı öğrenmek için 1.6 numaralı maddeyi - okuyunuz.) Bu takım, tüm PostgreSQL gelişiminden sorumludur.

    -

    PostgreSQL 1.01 sürümünün yazarları Andrew Yu ve Jolly Chen idi. Bunların dışında - bir kaç kisi de uyarlama, hata ayıklama ve kodun geliştirilmesi için çalısmıştı. - PostgreSQL'in türediği orijinal Postgres kodu, lisans, lisansüstü ve akademisyenler - tarafından, Professor Michael Stonebraker (University of California, Berkeley) - koordinatörlügünde yazılmıştır.

    -

    Berkley'deki yazılımın adı Postgres idi. SQL uyumluluğu - 1995'te eklenince, adı Postgres 95 oldu. 1996 yılının sonlarında adı - PostgreSQL olarak değiştirildi.

    - -

    1.2) PostgreSQL'in hakları nedir?

    -

    PostgreSQL Data Base Management System

    - -

    Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group - Portions Copyright (c) 1994-6 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.

    -

    Üstteki metin klasik açık-kod lisansı olan BSD lisansıdır. Kaynak kodun nasıl - kullanılabileceğine dair sınırlamaları yoktur. Bu lisansı seviyoruz. Değiştirme - niyetimiz bulunmamaktadır.

    - -

    1.3) PostgreSQL, hangi Unix platforlarında çalışır?

    -

    Genel olarak, modern bir Unix-uyumlu platform PostgreSQL'i çalıştıracaktır. - Ayrıntılı bilgi için kurulum belgelerine bakabilirsiniz.

    - -

    1.4) Hangi Unix olmayan uyarlamaları bulunmaktadır?

    -

    PostgreSQL 8.0 sürümü ile , PostgreSQL artık Win2000, WinXP ve Win2003 gibi Microsoft - Windows NT tabanlı işletim sistemlerinde doğal olarak çalışmaya başlamıştır. Paketlenmiş bir - kurulum programı, http://pgfoundry.org/projects/pginstaller. adresinden - indirilebilir.

    - -

    Ayrıca, http://forge.novell.com adresinde Novell Netware 6 portu bulunmaktadır.

    - -

    1.5) PostgreSQL'i nereden indirebilirim?

    -

    PostgreSQL için ana anonim ftp sitesi ftp://ftp.PostgreSQL.org/pub - adresidir. Yansılar için, ana web sayfamıza bakabilirsiniz.

    - -

    1.6) Nereden destek alabilirim?

    -

    Ana e-posta listesi : pgsql-general@PostgreSQL.org. PostgreSQL konusundaki tartışmalara - açıktır. Üye olmak için, aşağıdaki satırları e-postanızın body kısmına - (konu kısmına değil) yazıp, pgsql-general-request@PostgreSQL.org adresine gönderin:

    -
    subscribe
    end
    -

    Aynı zamanda, bir digest listesi bulunmaktadır. Bu listeye üye olmak için, - pgsql-general-digest-request@PostgreSQL.org adresine, body kısmında

    -
    subscribe
    end
    -

    yazan bir e-posta atmanız yeterli olacaktır.

    -

    Digest postalar, ana liste 30k civarında e-postaya ulaştığında - üyelere gönderilmektedir.

    -

    Bug'lar için bir e-posta listesi bulunmaktadır. Bu listeye üye olmak için, - pgsql-bugs-request@PostgreSQL.org adresine, body kısmında

    -
    subscribe
    end
    -

    yazan bir e-posta atmanız yeterli olacaktır.

    -

    Aynı zamanda, geliştiriciler için tartışma listesi bulunmaktadır. Bu listeye - üye olmak için, pgsql-hackers-request@PostgreSQL.org adresine, body kısmında

    -
    subscribe
    end
    -

    yazan bir e-posta atmanız yeterli olacaktır.

    -

    Bunun dışındaki e-posta listelerine ve PostgreSQL hakkında bilgiye, PostgreSQL WWW - ana sayfasından ulasabilirsiniz: http://www.PostgreSQL.org

    -

    Aynı zamanda, EFNet üzerinde, #PostgreSQL adlı bir IRC kanalı - bulunmaktadır. Bunun için, irc -c '#PostgreSQL' "$USER" irc.phoenix.net - Unix komutunu kullanabilirsiniz.

    -

    Ticari destek veren firmaların listesine

    -

    http://www.postgresql.org/users-lounge/commercial-support.html

    -

    adresinden ulaşbilirsiniz.

    - -

    1.7) En son sürüm nedir?

    -

    PostgreSQL'in son sürümü 7.4.6'dır.

    -

    Her 6-8 ayda ana sürüm çıkarılması planlanmaktadır.

    - -

    1.8) Hangi belgelere ulaşabilirim?

    -

    Dağıtımın içinde, kitapçıklar, kitapçık sayfaları ve bazı küçük örnekler verilmektedir. - /doc dizinine bakınız. Ayrıca, bu el kitapçıklarını online olarak - http://www.PostgreSQL.org/docs/ adresinden inceleyebilirsiniz.

    -

    http://www.PostgreSQL.org/docs/awbook.html - ve http://www.commandprompt.com/ppbook - adreslerinde PostgreSQL kitapları bulunmaktadır. PostgreSQL kitablarının listesine, - http://www.ca.PostgreSQL.org/books/ adresinden ulaşaiblirsiniz. - Ayrıca, PostgreSQL konusundaki teknik makalelere de - http://techdocs.PostgreSQL.org/ adresinden ulaşabilirsiniz.

    -

    psql'in, \d ile baslayan veri tipler, operatorler, fonksiyonlar, - aggregate'ler, vb. ile ilgili güzel komutları vardır.

    -

    Web sitemiz daha fazla belgeyi içermektedir.

    - -

    1.9) Bilinen hatalar ya da eksik - özelliklere nereden ulaşabilirim?

    -

    PostgreSQL SQL-92 uyumluluğu içindedir, standartlardan fazla da özellikleri - bulunmaktadır. Bilinen hatalar, eksik özellikler ve gelecek ile ilgili planlar için - TODO listesine bakınız.

    - -

    1.10) Nasıl SQL öğrenebilirim?

    -

    http:/www.PostgreSQL.org/docs/awbook.html - adresindeki kitap SQL ögretecektir. - http://www.commandprompt.com/ppbook - adresinde de bir baska PostgreSQL kitabı bulunmaktadır.

    -

    http://www.intermedia.net/support/sql/sqltut.shtm, - http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM - http://sqlcourse.com - ve http://sqlcourse2.com - adreslerinde de güzel belgeler bulunmaktadır.

    -

    Bir başkası da, http://members.tripod.com/er4ebus/sql/index.htm - adresinde bulunan "Teach Yourself SQL in 21 Days, Second Edition" kitabıdır.

    -

    Bazı kullanıcılarımız da şu kitabı önermektedirler: "The Practical SQL Handbook, - Bowman, Judith S., et al.,Addison-Wesley". Bazıları ise "The Complete - Reference SQL, Groff et al., McGraw-Hill" kitabını önermektedirler.

    - -

    1.11) PostgreSQL 2000 yılına uyumlu mudur?

    -

    Evet.

    - -

    1.12) Geliştirme takımına nasıl katılabilirim?

    -

    Öncelikle, en son kaynak kodunu indirin ve web sitemizdeki ya da dağıtımın içindeki - PostgreSQL Developer belgesini okuyun. Ardından, pgsql-hackers ve pgsql-patches - listelerine üye olun. Üçüncü olarak da, pgsql-pacthes listesine yüksek kalitede - yamalar gönderin.

    -

    PostgreSQL CVS arşivine erişim izni olan, 10 kadar geliştirici bulunmaktadır. - Hepsi defalarca, diğer kişilerin yaptığından çok daha yüksek-kaliteli yamalar - göndermişlerdir. Ayrıca biz de bu geliştiricilerin ekledikleri yamaların yüksek - kalitede olduğuna güveniyoruz.

    - -

    1.13) Bir hata raporunu nasıl gönderebilirim?

    -

    PostgreSQL BugTool sayfasına gidiniz. O sayfada bir bug bildirmek - için neleri yapmanız gerektiği anlatılmıştır.

    -

    Ayrıca, ftp://ftp.PostgreSQL.org/pub - ftp adresimizde, yeni bir PostgreSQL sürümü ya da yaması olup olmadığıni kontrol ediniz.

    - -

    1.14) PostgreSQL, diger DBMS'lerle nasıl karşılastırılabilir?

    -

    Bir yazılımın gücünü ölçmek için çeşitli yollar vardır: Yazılımın özellikleri, - başarımı, güvenilirliği, desteği ve ücreti.

    -

    Özellikler:

    -

    PostgreSQL mevcut büyük ticari veritabanlarının, transaction, - subselect, trigger, view, foreign key referential integrity - ve sophisticated locking gibi (user-defined types), rules, - inheritance ve lock cakışmalarını düşürmek için multi-version - uyumluluk özellikleri bulunmaktadır.

    -

    Performans (Başarım):

    -

    PostgreSQL, diğer ticari ve açık kaynak kodlu veritabanlarıyla yakın başarımı sağlar. - Bazı açılardan daha hızlıdır, diğer açılardan da yavaştır. MySQL ya da daha zayıf - veritabanları ile karşılaştırıldığında, INSERT/UPDATE işlemlerinde, - transaction bazlı çalıstığımız için daha yavaşız. MySQL, yukarıdaki "özellikler" - kısmında belirtilenlerden hiç birine sahip değildir. Biz, başarımımızı her sürümde - arttırsak da, esneklik ve gelişmiş özellikler için yapılanmış durumdayız. - PostgreSQL'i MySQL ile karşılaştıran şu web sitesine bakabilirsiniz: - http://openacs.org/why-not-mysql.html

    -

    Güvenilirlik:

    -

    DBMS'lerin güvenilir olması gerketiği, yoksa değerleri olmayacağını düşünüyoruz. - Çok iyi test edilmiş, dengeli çalısan minimum sayıda hata içeren kod sunmaya çalışıyoruz. - Her bir sürüm en az 1 aylık beta testlerinden geçirilmektedir. Sürüm geçmişine bakarsanız, - üretime hazır, dengeli ve kararlı kodlar sunduğumuzu görebilirsiniz. Bu alanda, diğer - veritabanı yazılımlarına üstünlüğümüz olduğuna inanmaktayız.

    -

    Destek:

    -

    E-posta listemiz, oluşan herhangi bir sorunu çözebilecek büyük sayıda kullanıcı - ve geliştirici grubunu içerir. Sorununuz için, en az bir ticari veritabanı kadar - rahat çözüm bulabilirsiniz. Gelistiricilere, kullanıcı grubuna, belgelere ve - kaynak koda direk olarak erişebilme, PostgreSQL desteğini, diğer DBMS'lere - göre daha önemli kılar. Gereksinimi olanlara, ticari destek verilebilir. - (Destek için 1.6 bölümüne bakınız.)

    -

    Fiyat:

    -

    Ticari ve ticari olmayan tüm kullanımlarınız için PostgreSQL ücretsizdir. Kodumuzu, - yukarıda belirtilen BSD-stili lisanstaki sınırlamalar hariç, ürününüzün içine - ekleyebilirsiniz.

    - -

    1.15) PostgreSQL'e maddi açıdan nasıl destek olabilirim?

    -

    PostgreSQL, 1996 yılından beri 1. sınıf altyapıya sahiptir. Bunun için, yıllar - boyu çalışıp bu altyapıyı oluşturup yöneten Marc Fournier'e teşekkürler.

    -

    Bir açık kaynak kodlu proje için, kaliteli altyapı çok önemlidir. Bu altyapı, - projenin kesilmesini önler ve projenin ilerlemesini hızlandırır.

    -

    Tabii ki bu altyapı ucuz değildir. İşlerin yürümesi için çeşitli yılık ve anlık - harcamalarımız olmaktadır. Eğer siz ya da şirketinizin bu çabamıza bağışta - bulunabilecek parası varsa, lütfen - http://store.pgsql.com/ - adresine gidiniz ve bağışta, hibede bulununuz.

    -

    Web sayfasının 'PostgreSQL Inc.' den bahsetmesine rağmen, "katkıda bulunanlar" - (contributors) maddesi sadece PostgreSQL projesini desteklemek içindir ve - belirli bir şirketin para kaynağı değildir. isterseniz, bağlantı adresine bir - çek gönderebilirsiniz.

    - -
    - -

    Kullanıcı/İstemci Soruları

    - -

    2.1) PostgreSQL icin ODBC sürücüleri var mı?

    -

    iki tane ODBC sürücüsü bulunmaktadır: PsqlODBC ve OpenLink ODBC.

    -

    PsqlODBC'i http://gborg.postgresql.org/project/psqlodbc/projdisplay.php adresinden - indirebilirsiniz.

    -

    OpenLink ODBC http://www.openlinksw.com adresinden alınabilir.Bu sürücü, - kendi standart ODBC istemci yazılımı ile çalıstığından, destekledikleri - her platformda (Win, Mac, Unix, VMS) PostgreSQL ODBC bulunmalidir.

    -

    Ücretsiz sürümü olmakla beraber, ticari kalitede destek almak isteyenlere satmak isteyeceklerdir. - Sorularınızı lütfen postgres95@openlink.co.uk adresine gönderiniz.

    - -

    2.2) PostgreSQL'i web sayfalarında kullanabilmek için hangi - araçlar bulunmaktadır?

    -

    http://www.webreview.com/ adresinde, - arka planda veritabanı çalıstıran Web sayfaları için giriş seviyesinde bilgi bulunmaktadır.

    -

    Web ile bütünleşme için, PHP () - mükemmel bir arabirim sunar.

    -

    Karmaşık sorunlar için, çoğu kisi Perl arabirimini ve CGI.pm ya da mod_perl kullanır.

    - -

    2.3) PostgreSQL'in grafik kullanıcı arabirimi var mıdır?

    -

    Çeşitli grafik arabirimlerimiz bulunmaktadır. Bunların arasında, - PgAccess (http://www.pgaccess.org/), - PgAdmin II (http://www.pgadmin.org/, sadece Win32 için), - RHDB Admin (http://sources.redhat.com/rhdb/) - ve Rekall (http://www.thekompany.com/products/rekall/) - bulunmaktadır. Ayrıca, PostgreSQL için web tabanlı bir arabirim olan - PHPPgAdmin (http://phppgadmin.sourceforge.net/) bulunmaktadır.

    -

    Daha ayrıntılı liste için - http://techdocs.postgresql.org/guides/GUITools - adresine bakabilirsiniz.

    - -

    2.4) PostgreSQL ile iletişimi kurabilmek için hangi dilleri kullanabilirim?

    -
    • C (libpq)
    • -
    • Embedded C (ecpg)
    • -
    • Java (jdbc)
    • -
    • Python (PyGreSQL)
    • -
    • TCL (libpgtcl)
    -

    Diğerleri için, http://gborg.postgresql.org adresindeki Drivers/Interfaces bölümüne - bakabilirsiniz.

    - -
    - -

    Yönetimsel Sorular

    - -

    3.1) PostgreSQL'i, /usr/local/pgsql dizininden - başka dizinlere nasıl kurabilirim?

    -

    configure betiğini çalıstırırken, --prefix seçeneğini veriniz.

    - -

    3.2) postmaster'i baslattıgımda, a Bad System Call ya da core dumped mesajı alıyorum. Neden?

    -

    Bunun birçok nedeni olabilir. Ancak ilk kontrol edilmesi gereken sey, çekirdeginize - System V uzantılarının kurulu olup olmadıgını kontrol etmek olabilir. PostgreSQL - shared memory ve semaphores için çekirdek destegine gereksinim duyar.

    - -

    3.3) postmaster'i başlattığımda, ıpcMemoryCreate - hatası alıyorum. Neden?

    -

    Ya çekirdeğinizde shared memory desteğiniz düzgünce yapılandırılmamıştır, - ya da çekirdeğinizdeki mevcut shared memory miktarını büyütmeniz gerekecektir. - Gereksinim duyacağınız miktar, mimarinize ve postmaster için ayarladıgınız tampon - ile backend işlemi sayısına bağlıdır. Tüm sistemler için, tamponlar ve - işlemlerde öntanımlı sayılarla, ~ 1MB kadar yere gereksinmeniz olacaktır. - PostgreSQL - 7.3.2 Sistem Yöneticileri Rehberi'ne, shared memory ve semaphorelar - hakkındaki ayrıntılı bilgi için bakabilirsiniz.

    - -

    3.4) postmaster'ı başlattığımda, - ıpcSemaphoreCreate hatası alıyorum. Neden?

    -

    Eğer hata, "ıpcSemaphoreCreate: semget failed (No space left on device)" - ise, çekirdeğiniz yeterli semaphore ile yapılandırılmamış demektir. Postgres, her - bir potansiyel backend için bir semaphore gereksinimi duyar. Geçici - bir çözüm, postmasterı backend işlemleri için daha az miktarda sınırla - başlatmak olabilir. -N'i varsayılan değer olan 32'den küçük bir - değerle başlatınız. Daha kalıcı bir çözüm, çekirdeğinizin SEMMNS ve - SEMMNI parametrelerini yükseltmek olacaktır.

    -

    Çalışmayan semaphore'lar ağır veritabanı işlemlerinde çökme yaratabilirler.

    -

    Eğer hata mesajınız başka bir şey ise, çekirdeğinizde semaphore desteğini - yapılandırmamış olabilirsiniz. Shared memory ve semaphore'lar hakkındaki - daha ayrıntılı bilgi için - PostgreSQL - 7.3.2 Sistem Yöneticileri Rehberi'ne bakabilirsiniz.

    - - -

    3.5) Diger bilgisayarların benim PostgreSQL veritabanı - sunucuma bağlantılarını nasıl kontrol edebilirim?

    -

    Ön tanımlı olarak, PostgreSQL sadece yerel makineden Unix domain sockets - kullanarak bağlanılmasına izin verir. Diger makineler, postmaster'a -i - etiketini geçirmezseniz ve $PGDATA/pg_hba.conf dosyasını düzenleyerek - host-based authentication'a olanak vermezseniz, bağlantı yapamayacaklardır.

    - -

    3.6) Veritabani motorunu daha iyi - başarım için nasıl ayarlayabilirim?

    -

    Index'ler sorguları hızlandırabilir. EXPLAIN komutu, - PostgreSQL'in sorgunuzu nasıl yorumladığını ve hangi index'leri kullandığını - görmenize izin verir.

    -

    Eğer cok fazla INSERT işlemi yapıyorsanız, bunları büyük bir - toplu işlem dosyasıkullanıp COPY komutu ile veritabanına girmeyi - deneyiniz. Bu, tekil INSERT'lerden daha hızlıdır. İkinci olarak, - BEGIN WORK/COMMIT transaction bloğu içinde olmayan ifadeler kendi - transaction'larındaymış gibi düşünülür. Çoklu ifadeleri tek bir - transaction bloğu içinde yapabilirsiniz. Bu, transaction overhead'ini - düşürecektir. Tek bir transaction bloğu içinde birden çok ifadeyi çalıştırmayı - deneyebilirsiniz. Bu da aynı şekilde, transaction overhead'ini düşürür.

    -

    Çeşitli ayarlama seçenekleri mevcuttur. fsync() işlemini, postmaster'ı - -o -F seçeneği ile başlatarak devre dışı bırakabilirsiniz. Bu işlem, - fsync()'lerin her transactiondan sonra diski flush etmesini - engelleyecektir.

    -

    Aynı zamanda, postmaster'i -B seçeneği ile başlatıp, backend - işlemleri tarafından kullanılan shared memory buffers sayılarını arttırabilirsiniz. - Eğer bu parametreyi çok yüksek tutarsanız, çekirdeğinizin shared memory - bölgesindeki limiti aşma olasılığınız yüzünden postmaster başlayamayabilir. Her bir - tampon (buffer) 8K'dır. Öntanımlı sayı ise 64 tampondur.

    -

    Aynı şekilde, backend'in -S seçeneğini geçici sıralamalar için - backend süreçleri tarafından kullanılacak hafızayı arttırmak amacıyla - kullanabilirsiniz. -S seçeneği kilobayt cinsinden değer alır ve ön - tanımlı değeri 512'dir (512 K)

    -

    Tablolardaki veriyi bir index'e eşlemek amacıyla gruplama için - CLUSTER komutunu kullanabilirsiniz. Ayrıntılı bilgi için - CLUSTER komutunun yardım sayfasına bakabilirsiniz.

    - -

    3.7) Hangi hata ayıklama özellikleri bulunmaktadır?

    -

    PostgreSQL, hata ayıklama amacıyla kullanılabilecek durum bilgisi - rapor eden çeşitli özeliklere sahiptir.

    -

    Öncelikle, configure betiğini --enable-cassert seçeneğiyle - çalıştırırsanız, bir çok assert() backend calışmasını gözlemler ve - beklenmeyen bir durumda programı durdurur.

    -

    Postmaster ve postgres çeşitli hata ayıklama seçeneklerine sahiptir. Öncelikle, - postmaster'ı başlattığınızda, standart çıktıyı ve hataları bir log dosyasına - yönlendirdiğinize emin olun:

    -
    cd /usr/local/pgsql
    ./bin/postmaster >server.log 2>&1 &
    -

    Bu işlem PostgreSQL ana dizinine server.log dosyası yerleştirecektir. - Bu dosya sunucunun yaşadığı sorunlar ya da hatalar hakkında yararlı bilgiler içerir. - -d seçeneği, hata ayıklama seviyesini belirten bir rakam ile kullanılır. - Yüksek hata ayıklama seviyelerinin büyük log dosyaları oluşturacağını unutmayınız.

    -

    Eğer postmaster çalışmıyorsa, postgres backend'ini komut satırından - çalıştırabilir ve SQL ifadenizi direk olarak yazabilirsiniz. Bu sadece hata ayıklama - amacıyla önerilir. Burada, noktalı virgülün değil de yeni bir satırın sorguyu - sonlandırdığını unutmayınız. Eğer hata ayıklama sembolleri ile derlediyseniz, - ne olduğunu görmek için bir hata ayıklayıcı kullanabilirsiniz. backend - postmaster'dan başlatılmadığından, eşdeğer bir ortamda çalışmamaktadır ve - locking/backend etkileşim sorunları artabilir.

    -

    Eğer postmaster çalışıyorsa, bir pencerede psql'i çalıştırın ve psql tarafından - kullanılan postgres sürecinin süreç numarasını (PID) bulun. Postgres - süreci ile ilişkilendirmek için bir hata ayıklarıcı kullanın. Sorguları psql aracılığı - ile çalıştırabilirsiniz. Eğer postgres başlangıcında hata ayıklamak istiyorsanız, - PGOPTIONS="-W n" seçeneğini ayarlayabilir ve psql'i başlatabilirsiniz. - Bu işlem, başlangıcın n saniye kadar gecikmesini sağlayacaktır; böylece - hata ayıklayıcıyı sürece ilişkilendirdikten sonra başlangıç sürecinin devam etmesini - sağlayabilirsiniz.

    -

    postgres programı hata ayıklama ve başarım ölçümleri için -s, - -A ve -t seçeneklerine sahiptir.

    - -

    3.8) Bağlanmaya çalışırken, neden "Sorry, too many - clients" hatasını alıyorum?

    -

    Postmaster'ın eşzamanlı olarak başlatabileceği backend süreçleri - sınırlarını arttırmanız gerekmektedir.

    -

    Ön tanımlı değer 32 süreçtir. Bunu, postmaster'ı uygun -N - değeri ile ya da postgresql.conf dosyasını düzenleyerek yeniden - başlatmakla arttırabilirsiniz.

    -

    Eğer -N değerini 32'den büyük yapacaksanız, aynı zamanda - -B değerini de değiştirmeniz gerektiğini unutmayın. -B, - -N'nin en az 2 katı kadar olmalıdır; daha iyi başarım için bu sayıyı daha - da arttırmalısınız. Yüksek sayıdaki backend süreçleri için, çeşitli çekirdek - yapılandırma parametrelerini arttırmanız gerekecektir. Yapılması gerekenler, - SHMMAX, SEMMNS, SEMMNI, NPROC, - MAXUPRC ve açılabilecek dosyaların maksimum sayısı olan NFILE - ve NINODE değerlerini karıştırmaktır. Bunun nedeni, PostgreSQL'in izin - verilen backend süreçlerinin sayısı üzerinde bir sınırı olmasıdır. Böylelikle - sistem kaynaklarının dışına çıkılmayacaktır.

    -

    PostgreSQL'in 6.5 sürümüne kadar, en fazla backend sayısı 64 idi ve bunu - değiştirmek için include/storage/sinvaladt.h dosyası içindeki - MaxBAckendid sabitini değiştirdek sonra yazılımı yeniden - derlemek gerekiyordu.

    - -

    3.9) pgsql_tmp dizinin içindeki dosyalar nelerdir?

    -

    Sorgu çalıstırıcı (query executer) tarafından yaratılan geçici dosyalardır. - Örnegin, bir sıralama ORDER BY ile yapılacaksa ve sıralama - backend'in -s parametresinin izin verdiğinden daha - fazla alana gereksinim duyuyorsa, ekstra veriyi tutmak için geçici dosyalar yaratılır.

    -

    Geçici dosyalar, eğer sıralama sırasında backend göçmezse otomatik olarak - silinecektir. Eğer çalışan durumda bir backend'iniz yoksa, - pg_tempNNN.NN dosyalarını silmeniz güvenlidir.

    - -

    3.10) PostgreSQL sürümlerini yükseltmek için neden bir - dump/reload işlemi gerçekleştirmek zorundayım?

    -

    PostgreSQL takımı ara sürümlerde sadece küçük değişiklikler yapmaktadır; - bu yüzden 7.2 sürümünden 7.2.1'e yükseltmek dump/restore işlemi - gerekmemektedir. Ancak, esas sürümlerde (örnek: 7.2'den 7.3'e) çoğunlukla sistem - tablolarının ve veri dosyalarının iç yapısı değiştirilir. Bu değişiklikler çoğunlukla - karmaşıktır; dolayısıyla veri dosyalarının geriye dönük uyumluluğu işlemlerini - yapmıyoruz. Dump işlemi, veriyi genel biçimde alacağından yeniden yükleme - esnasında veri, yeni iç biçime uygun şekilde yerleştirilecektir.

    -

    Disk biçiminin değişmediği sürümlerde, pg_upgrade betiği güncellemenin - bir dump/restore gerektirmeden yapılmasını sağlayacaktır. pg_upgrade - betiğinin o sürüm için bulunup bulunmadığını sürüm notları içinde bulabilirsiniz.

    - -

    3.11) Nasıl bir donanım kullanmalıyım?

    -

    PC donanımı tamamen uyumlu olduğu için, insanlar tüm PC donanımlarının aynı kalitede olduğunu - düşünürler. Oysa böyle değildir. ECC RAM, SCSI ve kaliteli anakartlar daha ucuz donanımlara göre daha - çok güvenilirlerdir ve başarımları daha yüksektir. PostgreSQL hemen hemen tüm donanımda - çalışabilmektedir, ancak güvenilirlik ve başarım önemli ise donanım seçeneklerini çok iyi araştırmak - gereklidir. E-posta listelerimi donanımlarla ilgili sorular ve de ticaret için kullanılabilir.

    - -
    - -

    İşletimsel Sorular

    - -

    4.1) Binary cursor ve normal cursor - arasındaki fark nedir?

    -

    DECLARE yardım sayfasına bakınız.

    - -

    4.2) Sorgunun sadece ilk birkaç satırını - nasıl SELECT edebilirim?

    -

    FETCH yardım sayfasına bakınız, ya da SELECT ... - LIMIT ... kullanınız.

    -

    İlk birkaç satırı almak isteseniz bile, tüm sorgu değerlendirilmek durumunda kalınabilir. ORDER - BY içeren bir sorgu düşünün. Eğer ORDER BY işe eşleşen bir index varsa, PostgreSQL istenen ilk birkaç - satırı işleyebilir, ya da tüm sorgu istenen satırlar üretilene kadar işlenebilir.

    - -

    4.3) psql'in içinde gördügüm tabloların ya da diğer - şeylerin listesini nasıl alabilirim?

    -

    pgsql/src/bin/psql/describe.c içindeki psql kaynak kodunu - okuyabilirsiniz. Bu kod, psql'in \ ile başlayan komutlarının - çıktısını olusturan SQL komutlarını içerir. Aynı zamanda, psql'i -E - seçeneği ile başlatıp, verdiğiniz komutları çalıştırmak için yaptığı - sorguların çıktılarını görebilirsiniz.

    - -

    4.4) Bir tablodan bir kolonu nasıl kaldırabilirim?

    -

    Bu özellik (ALTER TABLE DROP COLUMN) 7.3 sürümü ile gelmiştir. - Eski sürümlerde aşağıdakileri uygulamalısınız:

    -
    -BEGIN;
    -LOCK TABLE old_table;
    -SELECT ...  -- select all columns but the one you want to remove
    -INTO TABLE new_table
    -FROM old_table;
    -DROP TABLE old_table;
    -ALTER TABLE new_table RENAME TO old_table;
    -COMMIT;		
    -		
    - -

    4.5) Bir satır, tablo ve veritabanı için en - fazla büyüklük nedir?

    -

    Sınırlar:

    -

    Veritabanı için en fazla büyüklük nedir?
    Sınırsız (32 TB'lık veritabanı bulunmaktadır)

    - Bir tablo için en fazla büyüklük nedir?
    32 TB

    - Bir satır için en fazla büyüklük nedir?
    1.6 TB

    - Bir alan için en fazla büyüklük nedir?
    1 GB

    - Tabloda en fazla satır sayısı kaçtır?
    Sınırsız

    - Bir tabloda olabilecek en fazla kolon sayısı kaçtır?
    Kolon tiplerine bağlı olarak 250-1600

    - Bir tabloda olabilecek en fazla index sayısı kaçtır?
    Sınırsız

    -

    Tabii ki bunlar aslında sınırsız degildir. Burada belirtilen sınırlar, fiziksel - sınırların haricindeki sınırlardır. Boş disk alanı, hafıza/takas alanı na bağlı - sınırlamalar vardır. Başarım, sınır değerlere yaklaştıkça, ya da değerler çok büyük - olduğunda düşebilir.

    -

    Bir tablo için büyüklük sınırı olan 32 TB, işletim sisteminin büyük dosya desteği olup - olmamasından bağımsızdır. Büyük tablolar, 1 GB'lik dosyalarda saklandığı için, dosya - sistemi sınırlarınin bir önemi yoktur.

    -

    Tablo ve kolon sayısı büyüklükleri, ön tanımlı blok büyüklüğü 32k ya çıkarılarak - arttırılabilir.

    - -

    4.6) Tipik bir metin dosyasındaki veriyi saklamak için ne - kadar disk alanı gereklidir?

    -

    Bir PostgreSQL veritabanı, veriyi "flat" metin dosyasında saklamak için - gereken alanın 5 kat fazla disk alanına gereksinim duyabilir.

    -

    Her satırında bir tamsayı ve metin (text) içeren, 100.000 satırlık bir - dosya düşünün. Her satırın ortalama 20 byte olduğunu farzedelim. Metin dosyası - 2.8 MB olacaktır. Bu veriyi tutan PostgreSQL veritabanı - yaklaşık 6.4 MB yer kaplayacaktır.

    -
    -  36 byte: Her bir satır başlığı (yaklaşık)
    -+ 24 byte: Bir tamsayı (int) alanı ve bir metin (text) alanı 
    -+  4 byte: Sayfada tuple a pointer
    -----------------------------------------
    -  64 byte -> kayıt başına
    -

    PostgreSQL'de veri sayfası (data page) büyüklüğü 8192 byte (8k)dır, dolayısıyla:

    -
    -8192 byte -> page başına
    --------------------------  =  Her bir veritabanı page'ı başına 128 satır (yaklaşık)
    -  Satır başına 64 byte
    -  
    -100000 veri satırı
    ---------------------  =  782 veritabanı sayfası
    -     128 satır
    -

    782 veritabanı sayfası * sayfa başına 8192 byte = - 6,406,144 bytes (6.4 MB)

    -

    Index'ler çok fazla yere gereksinim duymazlar, ama index'lenmiş - veriyi tutacaklarından büyük olabilirler.

    -

    NULL değerler bitmapler içinde tutulur; dolayısıyla çok az yer kaplarlar.

    - -

    4.7) Veritabanında hangi tablo ya da index'lerin - tanımlandığını nasıl görebilirim?

    -

    psql, bu tür bilgileri göstermek için, \ ile başlayan bir çok - komut sunmaktadır. \? komutu ile bu komutları görebilirsiniz. Ayrıca, - bunları açıklayan ve pg_ ile başlayan çok sayıda sistem tablosu - bulunmaktadır. Aynı zamanda, psql -l ile tüm veritabanlarını - listeyelebirsiniz.

    -

    Ayrıca, pgsql/src/tutorial/syscat.source kodunu inceleyebilirsiniz. - Bu dosya, veritabanı sistem dosyalarından bilgiyi almak için gereksinim duyulan - bir çok SELECT'leri gösterir.

    - -

    4.8) Sorgularım cok yavaş, ya da index'lerimi - kullanmıyorlar. Neden?

    -

    Indexler her sorgu tarafından otomatik olarak kullanılmazlar. Indexler eğer bir - tablonun büyüklüğü minimum bir büyüklükten fazla ise ve sorgu tablodaki satırların sadece küçük bir - yüzdesini seçiyorsa kullanılır. Bunun nedeni, index erişiminin neden olduğu raslansal disk erişimi - nin diskin ya da tablonun sıralı okunmasından daha yavas olabilmesidir.

    - -

    Bir index'in kullanılıp kullanılmayacağını belirlemek için, PostgreSQL tablo hakkındaki - istatistiklere gereksinmesi vardır. Bu istatistikler, VACUUM ANALYZE kullanılarak - toplanırlar. Optimizer, istatistikleri kullanarak, tabloda kaç satır olduğunu ve bilir ve indexin - kullanılıp kullanılmayacağına daha iyi karar verir. Istatistikler, aynı zamanda en uygun join - sırasını ve yöntemini belirlemekte çok önemlidir. İstatistik toplanması, tablo içerikleri - değiştikçe periyodik olarak yapılmalıdır.

    - - -

    Indexler normalde ORDER BY sorguları ya da join işlemlerini gerçekleştirmek için - kullanılmazlar. Açık bir sıralamayı takip eden sıralı bir arama (sequential scan), büyük bir tabloda index - araması yapmaktan genelde daha hızlıdır.

    - - Ancak, ORDER BY ile birleşmiş LIMIT - genellikle bir index kullanacaktır; çünkü tablonun sadece belirli bir miktarı döndürülecektir. - Aslında, MAX() ve MIN() fonksiyonlarının index kullanmamalarından dolayı, bu gibi değerleri ORDER BY ve LIMIT - kullanarak da almak olasıdır: -
    -    SELECT col
    -    FROM tab
    -    ORDER BY col [ DESC ]
    -    LIMIT 1;
    -
    - -

    Eğer optimizer'ın sıralı arama yapmasının yanlış olduğuna inanıyorsanız, SET enable_seqscan TO -'off' kullanın ve index kullanan aramaların hala daha hızlı olup olmadığını görün.

    - -

    LIKE ya da ~ gibi operatörler kullanıyorsanız, - index'ler sadece aşağıdaki koşullarda kullanılabilir:

    - -
      -
    • Arama dizininin başı, dizinin başı ile bağlanmalıdır. Yani, -
      • LIKE sorguları % ile başlamamalıdır.
      • -
      • Düzenli ifade sorguları ^ işe başlamamalıdır.
    • -
    • Arama metni bir karakter sınıfı ile başlayamaz. Örnek: [a-e]
    • -
    • ILIKE ve ~* gibi büyük/küçük harfe duyarsız - aramalar index'lerden yararlanmazlar. Onun yerine, bölüm 4.12'de anlatılan - fonksiyonel index'leri kullanabilirsiniz.
    • -
    • initdb sırasında öntanımlı C locale'i kullanılmalıdır.
    • -
    - -

    4.9) query-optimizer'ın sorgularımı nasıl - değerlendirdiğini, işleme soktuğunu nasıl görebilirim?

    -

    EXPLAIN yardım sayfasına bakınız.

    - -

    4.10) R-tree index nedir?

    -

    R-tree index, uzaysal (spatial) verileri indexlemek için kullanılır. Bir hash - index, dizi aramalarında (range search) kullanılamaz. B-tree index dizi aramalarında sadece tek - boyutlu çalışmaktadır. R-tree, çok boyutlu veriyi destekler. Örneğin, eğer bir R-tree index point - veri tipi üzerinde inşa edililebilirse, sistem "select all points within a bounding rectangle" - gibi sorgulara daha verimli yanıtlar verecektir.

    -

    Orijinal R-tree tasarımını açıklayan belge:

    -

    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.

    -

    Bu belgeyi, Stonebraker'ın "Readings in Database Systems" kitabında bulabilirsiniz.

    -

    Gömülü R-tree indexleri poligon ve boxları kullanabilir. Teorik olarak, - R-tree indexlerin özelliklerini genişletmek bir miktar çaba gerektirir ve bunun nasıl - yapılacağına dair bir belgemiz henüz bulunmamaktadır.

    - -

    4.11) Genetic Query Optimizer nedir?

    -

    GEQO modülü, Genetic Algorithm(GA) kullanılarak tablolar - birleştirildiğinde sorgu optimizasyonunu hızlandırır.

    - -

    4.12) Düzenli ifade (Regular Expression) aramalarını - ve büyük/küçük harfe duyarsız aramaları nasıl yapabilirim? - Bu büyük(küçük harfe duyarlı aramalar için index'i nasıl kullanabilirim?

    -

    ~ operatörü düzenli ifade eşleşmesi ve ~* büyük/küçük - harfe duyarsız düzenli ifade eşleşmesi yapar. Büyük/küçük harfe duyarlı olan - LIKE'ın büyük/küçük harfe duyarsız olan biçimi ILIKE'tır - ve PostgreSQL 7.1 sürümü ile birlikte gelmiştir.

    -

    Büyük-küçük harfe duyarsız eşitlik karşılaştırmaları aşağıdaki gibi ifade edilir:

    -
    -SELECT *
    -FROM tab
    -WHERE lower(col) = 'abc'
    -		
    -

    Bu standart bir index yaratmayacaktır. Ancak eğer fonksiyonel bir - index yaratırsanız; o kullanılacaktır:

    -
    CREATE INDEX tabindex on tab (lower(col));
    - -

    4.13) Bir sorguda, bir alanin "NULL" olduğunu - nasıl ortaya çıkarabilirim?

    -

    Kolonu, IS NULL ve IS NOT NULL ile test edebilirsiniz.

    - -

    4.14) Çesitli karakter tipleri arasındaki farklar nelerdir?

    -
    -Veri Tipi	    İç Adı              Not
    ---------------------------------------------------
    -VARCHAR(n)      varchar         boyut en büyük uzunluğu verir; sadece verilen kadar veri tutulur.
    -CHAR(n)         bpchar          belirtilen uzunluğa kadar sonuna  boşluk eklenir.
    -TEXT            text            uzunlukta herhangi bir üst sınır yoktur. 
    -BYTEA           bytea           variable-length byte array (null-byte safe)
    -"char"          char            bir karakter 
    -		
    -

    İç adları (internal name) sistem kataloglarını ve - bazı hata mesajlarını incelerken göreceksiniz.

    -

    İlk dört veri tipi "varlena" tipidir (yani, diskteki ilk 4 bayt uzunluktur; - devamı da veridir.) Dolayısıyla, kullanılan gerçek alan, belirtilen alandan biraz - daha büyüktür. Ancak, bu veri tipleri, sıkıştırılmaya tabi tutulabilir; dolayısıyla - disk alanı beklenilenden küçük olabilir. VARCHAR(n) büyüklüğü - artabilen ama en büyük uzunluğu sınırlı olan verileri saklamak için en uygun yöntemdir. - TEXT, 1 GB büyüklüğe kadar olan verileri tutmak için kullanılır.

    -

    CHAR(n), aynı uzunluktaki dizilerin saklanması için kullanımır. - CHAR(n) belirtilen uzunluğa kadar boşluk ile doldurur; ancak - VARCHAR(n) sadece verilen karakterleri saklar. BYTEA - binary veri saklamak içindir; ayrıca "NULL" bayt içeren değerleri de saklar. - Burada anlatılan üç veri tipi de benzer başarım karakteristiklere sahiptir.

    - -

    4.15.1) Nasıl serial/otomatik artan - (auto-incrementing) bir alan yaratabilirim?

    -

    PostgreSQL'de SERIAL veri tipi vardır. Bu veri tipi bir - sequence ve kolon üzerinde bir index yaratır.

    -

    Örnek, aşağıdaki sorgu:

    -
    -CREATE TABLE person (
    -    id   SERIAL,
    -    name TEXT
    -);		
    -		
    -

    buna çevrilir:

    -
    -CREATE SEQUENCE person_id_seq;
    -CREATE TABLE person (
    -    id   INT4 NOT NULL DEFAULT nextval('person_id_seq'),
    -    name TEXT
    -);
    -CREATE UNIQUE INDEX person_id_key ON person ( id );		
    -		
    -

    Sequenceler hakkında daha fazla bilgi için create_sequence - yardım sayfasına bakabilirsiniz. Her satırın OID alanını tekil bir sayı - olarak alabilirsiniz. Ancak, veritabanınızın dump'ını alıp yeniden yüklerseniz, - OID değerlerini koruyabilmek için pg_dump'ın -o - parametresini ya da "COPY WITH OIDS" seçeneğini kullanmanız gerekecektir.

    - -

    4.15.2) SERIAL girişinin degerini nasıl alabilirim?

    -

    Bir yaklaşım, sequence nesnesindeki SERIAL değerini, veriyi girmeden önce nextval() ile alıp, - aldığınız değeri kendinizin girmesidir. 4.15.1'deki örnek tabloyu kullanarak bir örnek verelim:

    - -
    new_id = execute("SELECT nextval('person_id_seq')");
    - execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')");
    - -

    Diğer sorgular için new_id'de yeni değerin saklanması gerekir. Otomatik olarak yaratılan SEQUENE nesnesinin adı, - <tablo adı>_<serial kolonu adı>_seq şeklinde olacaktır (< > işaretleri olmadan).

    - -

    Alternatif olarak, atanmış SERIAL değerini, değer girildikten sonra currval() - fonksiyonu ile alabilirsiniz:

    -
    -		execute("INSERT INTO person (name) VALUES ('Blaise Pascal')");
    -		new_id = execute("SELECT currval('person_id_seq')");	
    -		
    -

    Son olarak, ön tanımlı değeri bulmak için INSERT ifadesinden - dönen OID değerini kullanabilirsiniz; ancak bu en az taşınabilir - çözüm olacaktır. Perl'de, Edmund Mergl'in DBD:Pg mödülü ile birlikte - DBI kullanarak, OID değeri $sth->execute() - çalıştırıldıktan sonra $sth->(pg_oid_status) ile alınabilir.

    - -

    4.15.3) currval() ve nextval() - diğer kullanıcılara sorun yaratmaz mı?

    -

    Hayır. curval(), tüm kullanıcılar değil, backend - tarafından atanan geçerli değeri döndürür.

    - -

    4.15.4) Neden sequence sayıları transaction - işleminin iptalinden sonra yeniden kullanılıyor? Neden sequence/SERIAL - kolonumdaki sayılarda atlamalar oluyor?

    -

    Uyumluluğu arttırmak için, sequence değerleri çalışan - transaction'lara gerektiği şekilde aktarılır ve transaction - bitene kadar o değer kilitlenmez. Bu, iptal edilen transaction - işlemleri nedeniyle boşluklara neden olur.

    - -

    4.16) OID nedir? TID nedir?

    -

    OIDler, tekil satır numaralarına PostgreSQL'in yanıtıdır. PostgreSQL'de yaratılan - her sayı, tekil bir OID alır. initdb işlemi sırasında yaratılan tüm OID'ler 16384'ten küçüktür - (backend/access/transam.h). Kullanıcılar tarafından yaratılan tüm OID'ler bu sayıya eşit ya da bu - sayıdan büyüktür. Varsayılan durumda, tüm bu OIDler sadece bir tablo ya da veritabanında değil, tüm - PostgreSQL kurulumunda tekildir.

    - -

    PostgreSQL OIDleri, tablolar arasında satırları ilişkilendirmek için kendi iç tablolarında - kullanır. Bu OIDler belirli kullanıcı satırlarını belirtmek için kullanabilir ve join işlemlerinde - kullanılır. OID değerlerini saklamak için OID kolon tipini kullanmanız önerinir. Daha hızlı bir - erişim için, OID alanında bir index yaratabilirsiniz.

    - -

    OID'ler yeni satırlara, tüm veritabanları tarafında kullanılan ortak bir alandan atanırlar. Eğer - OID'i başka bir değere eşitlemek isterseniz ya da tablonun bir kopyasını orijinal OIDler ile - çıkarmak isterseniz, bu mümkündür:

    -
    -			CREATE TABLE new_table(old_oid oid, mycol int);
    -			SELECT old_oid, mycol INTO new FROM old;
    -			COPY new TO '/tmp/pgtable';
    -			DELETE FROM new;
    -			COPY new WITH OIDS FROM '/tmp/pgtable';		
    -		
    -

    OIDler 4-bit tamsayı olarak saklanırlar ve 4 milyarda overflow olacaktır. Kimse - bu sayıya ulaştığına dair bir bilgi iletmedi ve bu sınırı kimse bu sınıra ulaşmadan kaldıracağız.

    - -

    TIDler, belirli fiziksel satırlar block ve offset değerleri ile belirtmekte kullanılır. TIDler, - satırlar değiştiğinde ya da yeniden yüklendiğinde değişirler. Index girdileri tarafından fiziksel - satırları göstermek için kullanılırlar.

    - -

    4.17) PostgreSQL'de kullanılan bazı - terimlerin anlamları nelerdir?

    -

    Kaynak kodun bir kısmı ve eski belgeler, daha geniş kullanım alanı olan terimleri - kullanırlar. Bunların bazıları:

    -
    • table, relation, class
    • -
    • row, record, tuple
    • -
    • column, field, attribute
    • -
    • retrieve, select
    • -
    • replace, update
    • -
    • append, insert
    • -
    • OID, serial value
    • -
    • portal, cursor
    • -
    • range variable, table name, table alias
    -

    Genel veritabanı terimleri, - http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.html - adresinde bulunabilir.

    - -

    4.18) Neden "ERROR: Memory exhausted in AllocSetAlloc()" - hatasını alıyorum?

    -

    Sisteminizde sanal belleğinizi tüketmiş olabilirsiniz, ya da çekirdeğiniz - belli kaynaklar icin düşük bir sınıra sahip olabilir. postmaster'ı - başlatmadan önce aşağıdakileri deneyebilirsiniz:

    -
    -ulimit -d 262144
    -limit datasize 256m		
    -		
    -

    Kabuğunuza bağlı olarak, bunlardan sadece biri olumlu sonuç verecektir, ama - bu işlem veri segment sınırınızı arttıracak, ve belki de sorgunuzun tamamlanmasını - sağlayacaktır. Bu komut, varolan işleme (current process) ve komut çalıştırıldıktan - sonraki tüm alt işlemlere uygulanır. Eğer SQL istemcinizle, backend'in çok - fazla veri döndürmesi nedeniyle bir sorun yaşıyorsanız, bunu istemciyi başlatmadan - önce deneyiniz.

    - -

    4.19) Hangi PostgreSQL sürümünü çalıştırdığımı nasıl görebilirim?

    -

    psql arabiriminde, select version(); yazınız.

    - -

    4.20) Neden large-object işlemlerim, "invalid large obj - descriptor" hatasını veriyor?

    -

    Large object işlemlerinizin uçlarına, yani lo_open ... - lo_close komutlarının çevresine, BEGIN WORK ve - COMMIT koymanız gerekmektedir;

    -

    Şu anda, PostgreSQL kuralları large objectleri transaction commit edildiğinde kapatarak - uygulamaktadır. Dolayısıyla handle ile yapılacak ilk şey invalid large obj descriptor hatası - ile sonuçlanacaktır.Dolayısıyla çalışan kodunuz eğer transaction kullanmazsanız hata mesajları - üretecektir.

    -

    Eğer ODBC gibi bir istemci arabirimi kullanıyorsanız, auto-commit'i - kapatmanız gerekebilir.

    - -

    4.21) Şu andaki zamanı öntanımlı değer olarak - kabul eden How do I create a column that will default to the current time?

    -

    Alttakini kullanabilirsiniz:

    -
    -CURRENT_TIMESTAMP:
    -CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
    -		
    - -

    4.22) Neden IN kullanan subquery'lerim - çok yavas?

    -

    7.4 sürümünden önce, subqueryler. Eğer subquery sadece birkaç satır ve outer query bol - sayıda satır döndürüyorsa, IN en hızlısıdır. Sorguları hızlandırmak için IN yerine EXISTS - kullanın:

    -
    -SELECT *
    -    FROM tab
    -    WHERE col1 IN (SELECT col2 FROM TAB2)
    -		
    -

    sorgusunu, aşağıdaki ile değiştirin:

    -
    -SELECT *
    -    FROM tab
    -    WHERE EXISTS (SELECT col2 FROM TAB2 WHERE col1 = col2)		
    -		
    -

    Bu işlemin hızlı olması için, subcol'un indexlenmiş bir kolon olması gerekmektedir.

    -

    7.4 sürümü ve sonrasında, IN aslında normal sorgularla aynı karmaşık join tekniklerini kullanır ve - EXISTS'e tercih edilir.

    - -

    4.23) Outer join işlemini nasıl yapabilirim?

    -

    PostgreSQL outer joins islemlerini SQL standartlarını kullanarak - gerçekleştirmektedir. Aşağıda 2 örnek bulunmaktadır:

    -
    -SELECT *
    -FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);		
    -		
    -

    ya da

    -
    -SELECT *
    -FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);		
    -		
    -

    Bu özdeş sorgular t1.col' i t2.col'ye join ederler ve aynı zamanda t1'deki - unjoined satırları (t2'de eşlenmemiş olanlarla) döndürürler. RIGHT - JOIN t2'nin unjoined satırlarını ekleyecektir. Bir FULL join, eşleşmiş - bütün satırları ve t1 ile t2'den tüm bağlanmamış (unjoined) satırları alır. - OUTER sözcüğü seçimseldir ve LEFT, RIGHT ve - FULL join işlemlerinde olduğu kabul edilir. Sıradan join - işlemleri INNER JOIN olarak adlandırılır.

    -

    Önceki sürümlerde, OUTER JOINler UNION ve NOT IN - kullanılarak simüle edilebiliyordu. Örneğin, tab1 ve tab2'yi birleştirirken, aşağıdaki - sorgu iki tablonun dıştan bağlanmasını sağlar:

    -
    -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) Aynı andan birden fazla veritabanında nasıl - işlem yapabilirim?

    -

    Mevcut veritabanınız dışındaki başka bir veritabanınızı sorgulamanızın - bir yolu bulunmamaktadır. Bunun nedeni, PostgreSQL'in veritabanına özel sistem - katalogları yüklemesidir. Bu nedenle, cross-database bir sorgunun nasıl - davranacağını kestirmek zordur.

    -

    contrib/dblink fonksiyon çağrılarını kullanarak cross-database sorgulara - izin verir. Tabii ki, bir istemci değişik veritabanlarına aynı anda erişim - sağlayabilir ve bilgiyi bu şekilde birleştirebilir.

    - -

    4.25) Bir fonksiyondan nasıl çoklu satır ya da - kolon döndürebilirim?

    -

    7.3 sürümünde, bir fonksiyondan kolaylıkla çoklu satır ya da sütun - döndürebilirsiniz. - (http://techdocs.postgresql.org/guides/SetReturningFunctions)

    - -

    4.26) Neden Pl/PgSQL fonksiyonları içinden - güvenli bir şekilde tablo yaratma/kaldırma işlemlerini yapamıyoruz?

    -

    PL/PgSQL fonksiyon içerikleri cache'ler. Bunun istenmeyen bir tarafı, - eğer bir PL/PgSQL fonksiyonu geçici bir tabloya erişiyorsa ve bu tablo ileride - kaldırılıp yeniden oluşturulduktan sonra fonksiyon yeniden çağrılırsa, fonksiyon - çalışmayacaktır; çünkü cache'lenmiş fonksiyon hala eski geçici tabloyu - gösteriyor olacaktır. Çözüm, geçici tablo erişimleri için PL/PgSQL'de - EXECUTE kullanmaktır. Bu, sorgunun her seferinde yeniden işlenmesini - sağlayacaktır.

    - -

    4.27) 4.28) Hangi şifreleme seçenekleri bulunmaktadır?

    -
    • contrib/pgcrypto SQL sorgularında kullanılabilmesi için - şifreleme fonksiyonları içermektedir.
    • -
    • Ä°stemciden sunucuya iletişimi şifrelemek için, sunucuda ssl seçeneği postgresql.conf içinde - açık olmalıdır. Ayrıca,pg_hba.conf dosyası içinde host ya da hostssl kaydı mutlaka olmalıdır ve - istemci sslmode kapatılmamalıdır. (Aynı zamanda,PostgreSQL'in doğal SSL bağlantıları dışında ssh ya - da ssl gibi 3.parti şifrelenmiş veri iletimi de mümkündür.)
    • -
    • Veritabanı kullanıcı adı ve şifreleri 7.3 sürümü ile birlikte - otomatik olarak şifrelenirler. Önceki sürümlerde, postgresql.conf - içindeki PASSWORD_ENCRYPTION seçeneğini aktif hale getirmeniz gerekmektedir.
    • -
    • Sunucunun kendisini şifreli dosya sistemi üzerinde çalıştırabilirsiniz.
    - -
    - -

    PostgreSQL Özelliklerini Genişletmek

    - -

    5.1) Kullanıcı-tanımlı bir fonksiyon yazdım. - psql'de çalıştırdığım zaman neden core dump ediyor?

    -

    Sorunun nedeni birden fazla şey olabilir. Kullanıcı-tanımlı fonksiyonunuzu - stand-alone bir programda çalıştırmayı deneyiniz.

    - -

    5.2) PostgreSQL'e nasıl yeni tipler/fonksiyonlar ekleyebilirim?

    -

    Çalışmalarınızı pgsql-hackers e-posta listesine gönderiniz. Kodunuz - incelendikten sonra contrib dizinine konacaktır.

    - -

    5.3) Bir tuple dondürmek icin bir C fonksiyonunu nasil yazarım?

    -

    PostgreSQL 7.3 sürümü ile birlikte, C, PL/PgSQL ve SQL kullanılarak tablo-döndüren - fonksiyonlar tamamen desteklenmektedir. Ayrıntılı bilgi için - PostgreSQL 7.3.2 - Kullanıcı Rehberi'ne bakabilrisiniz. Bir örneği contrib/tablefunc - içinde bulabilirsiniz.

    - -

    5.4) Bir kaynak dosyasında değişiklik yaptım. Yeniden derlememe - rağmen değişiklik geçerli olmuyor. Neden?

    -

    Makefile'lar include dosyaları için tam bir bağımlılık içermezler. - Öncelikle make clean, ardından da baska bir make işlemi yapmanız gerekir. - GCC kullanıyorsanız, configure betiğinin --enable-depend seçeneğini, derleyicinin - bağımlılıkları otomatik olarak hesaplaması için kullanabilirsiniz.

    - - diff --git a/doc/src/FAQ/README b/doc/src/FAQ/README deleted file mode 100644 index c3e78e0b31..0000000000 --- a/doc/src/FAQ/README +++ /dev/null @@ -1,4 +0,0 @@ -The FAQ* files in this directory are the master versions, and the -../../FAQ* text files are created using lynx: - - lynx -force_html -dont_wrap_pre -dump -hiddenlinks=ignore -nolist FAQ*