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