diff --git a/doc/FAQ_brazilian b/doc/FAQ_brazilian deleted file mode 100644 index 16d47428b3c948ce77480243c60279ddaddd3ef5..0000000000000000000000000000000000000000 --- 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 fde161fa1039a7c8f3d4cf71ba34170e328a753d..0000000000000000000000000000000000000000 --- 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 b1908535777882a9b2190e6eb0114efbe8c8cc44..0000000000000000000000000000000000000000 --- 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 99120e60606ce621cca6e94c8cb4fb682977c632..0000000000000000000000000000000000000000 --- 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 95b28bb9b652cc4c224e68da43d2d2ba16c4667f..0000000000000000000000000000000000000000 --- 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 71f19f0095dd4ae43c77af300f7fa4ea720a03eb..0000000000000000000000000000000000000000 --- 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 1459e5a08c4d8c0527c3c5d9862306c3bd883bbd..0000000000000000000000000000000000000000 --- 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 99f5ba4c630951daf470978c435530739f1e49cb..0000000000000000000000000000000000000000 --- 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 ca2618f8baa4f148149516b8014d9d80aaf7849d..0000000000000000000000000000000000000000 --- 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 ff50ec26e32a8470fcc885f6dd836cb5b30b8c2d..0000000000000000000000000000000000000000 --- 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 a361767ccc57d3c6a85e617305cfd07a0f68aa26..0000000000000000000000000000000000000000 --- a/doc/FAQ_russian +++ /dev/null @@ -1,988 +0,0 @@ - - Otvety na chasto zadavaemye voprosy po PostgreSQL - - Data poslednego obnovleniya: Sreda 25 iyunya 23:54:14 EDT 2008 - - Anglijskij variant soprovozhdaet: Bryus Mom'yan (Bruce Momjian) - (bruce@monjian.us) - - Pereviol na russkij: Viktor Vislobokov (admin@postgresql.ru.net) - - Samuyu svezhuyu anglijskuyu versiyu dokumenta mozhno najti na - http://www.postgresql.org/files/documentation/faqs/FAQ.html. - - Samuyu svezhuyu russkuyu versiyu dokumenta mozhno najti na - http://postgresql.ru.net/docs/FAQ_russian.html. - - Otvety na voprosy specifichnye dlya konkretnyh platform mozhno najti - na http://www.postgresql.org/docs/faq/. - _________________________________________________________________ - - Obschie voprosy - - 1.1) CHto takoe PostgreSQL? Kak proiznositsya `eto nazvanie? CHto - takoe Postgres? - 1.2) Kto upravlyaet PostgreSQL? - 1.3) Kakovy avtorskie prava na PostgreSQL? - 1.4) Na kakih platformah rabotaet PostgreSQL? - 1.5) Gde mozhno vzyat' PostgreSQL? - 1.6) Kakaya versiya naibolee svezhaya? - 1.7) Gde poluchit' podderzhku? - 1.8) Kak mne soobschit' ob oshibke? - 1.9) Kak najti informaciyu ob izvestnyh oshibkah ili otsutstvuyuschih - vozmozhnostyah? - 1.10) Kakaya dokumentaciya imeetsya v nalichii? - 1.11) Kak nauchit'sya SQL? - 1.12) Kak mne otpravit' ispravlenie ili prisoedinitsya k komande - razrabotchikov? - 1.13) Kak sravnit' PostgreSQL s drugimi SUBD? Mozhet li PostgreSQL - byt' vstroennoj? - 1.14) Budet li PostgreSQL rabotat' s poslednimi izmeneniyami, v raznyh - stranyh, kasayuschimisya dnevnogo vremeni? - 1.15) Kak mne otpisat'sya ot spiskov rassylki PostgreSQL? Kak - izbezhat' polucheniya dubliruyuschihsya soobschenij? - - Voprosy pol'zovatelej po klientskoj chasti - - 2.1) Kakie interfejsy est' dlya PostgreSQL? - 2.2) Kakie instrumenty suschestvuyut dlya ispol'zovaniya PostgreSQL - cherez Web? - 2.3) Est' li u PostgreSQL graficheskij interfejs pol'zovatelya? - - Voprosy administrirovaniya - - 3.1) Kak mne ustanovit' PostgreSQL v mesto otlichnoe ot - /usr/local/pgsql? - 3.2) Kak mne upravlyat' soedineniyami ot drugih komp'yuterov? - 3.3) Kakie nastrojki mne nuzhno sdelat' dlya uluchsheniya - proizvoditel'nosti? - 3.4) Kakie vozmozhnosti dlya otladki est' v nalichii? - 3.5) Pochemu ya poluchayu soobschenie "Sorry, too many clients" kogda - pytayus' podklyuchit'sya k baze? - 3.6) Kak vypolnit' obnovlenie PostgreSQL? - 3.7) Kakoe komp'yuternoe "zhelezo" ya dolzhen ispol'zovat'? - - Voprosy `ekspluatacii - - 4.1) Kak vypolnit' SELECT tol'ko dlya neskol'kih pervyh strochek - zaprosa? Dlya proizvol'noj stroki? - 4.2) Kak mne najti kakie tablicy, indeksy, bazy dannyh i pol'zovateli - suschestvuyut? Kak mne uvidet' zaprosy, kotorye ispol'zuet psql dlya - polucheniya `etoj informacii? - 4.3) Kak izmenit' tip dannyh kolonki? - 4.4) Kakovy maksimal'nye razmery dlya strok v tablice, tablic i bazy - dannyh? - 4.5) Kak mnogo diskovogo prostranstva v baze dannyh nuzhno dlya - sohraneniya dannyh iz obychnogo tekstovogo fajla? - 4.6) Pochemu moi zaprosy rabotayut medleno? Pochemu oni ne ispol'zuyut - moi indeksy? - 4.7) Kak posmotret' na to, kak optimizator vypolnyaet moj zapros? - 4.8) Kak mne vypolnit' poisk regulyarnogo vyrazheniya i poisk - nezavisimyj ot registra bukv poisk regulyarnogo vyrazheniya? Kak mne - ispol'zovat' indeks dlya poiska nezavisimogo ot registra bukv? - 4.9) Kak mne opredelit', chto znachenie polya v kakom-libo zaprose - ravno NULL? Kak mne soedinit' vozmozhnye NULL? Mogu ya sortirovat' - polya NULL ili net? - 4.10) Kakovy otlichiya mezhdu raznymi simvol'nymi tipami? - 4.11.1) Kak mne sozdat' pole serial/s-avto-uvelicheniem? - 4.11.2) Kak mne poluchit' znachenie pri vstavke SERIAL? - 4.11.3) Ne mozhet li poluchit'sya tak, chto ispol'zovanie currval() i - nextval() privedet k zaciklirovaniyu s drugimi pol'zovatelyami? - 4.11.4) Pochemu chisla iz moej posledovatel'nosti ne ispol'zuyutsya - snova pri otmene tranzakcii? Pochemu sozdayutsya razryvy pri numeracii - v kolonke, gde ya ispol'zuyu posledovatel'nost'/SERIAL? - 4.12) CHto takoe OID? CHto takoe CTID? - 4.13) Pochemu ya poluchayu oshibku "ERROR: Memory exhausted in - AllocSetAlloc()"? - 4.14) Kak mne uznat', kakaya versiya PostgreSQL zapuschena? - 4.15) Kak mne sozdat' kolonku kotoraya po umolchaniyu budet soderzhat' - tekuschee vremya? - 4.16) Kak vypolnit' vneshnee svyazyvanie? - 4.17) Kak vypolnyat' zaprosy, ispol'zuyuschie neskol'ko baz dannyh? - 4.18) Kak mne vernut' iz funkcii neskol'ko strok tablicy? - 4.19) Pochemu ya poluchayu oshibku "relation with OID #### ne - suschestvuet", kogda obraschayuts' k vremennym tablicam v funkciyah - PL/PgSQL? - 4.20) Kakie est' resheniya dlya replikacii? - 4.21) Pochemu imena tablicy i kolonok ne raspoznayutsya v v moiom - zaprose? Pochemu ne sohranyayutsya zaglavnye bukvy? - _________________________________________________________________ - - Obschie voprosy - - 1.1) CHto takoe PostgreSQL? Kak proiznositsya `eto nazvanie? CHto takoe - Postgres? - - PostgreSQL proiznositsya Post-Gres-Q-L (Post-Gres-K'yu-`El). (Dlya - osobo lyubopytstvuyuschih kak proiznosit' "PostgreSQL", suschestvuet - audio-fajl). - - PostgreSQL - `eto ob"ektno-relyacionnaya sistema upravleniya bazami - dannyh (SUBD), kotoraya imeet tradicionnye vozmozhnosti kommercheskih - SUBD s rasshireniyami, kotorye est' v SUBD novogo pokoleniya. - PostgreSQL - `eto svobodnoe i polnost'yu otkrytoe programmnoe - obespechenie. - - Razrabotku PostgreSQL vypolnyaet komanda razrabotchikov, razbrosannaya - po vsemu miru i svyazannaya cherez Internet. Razrabotka yavlyaetsya - obschestvennym proektom i ne upravlyaetsya kakoj-libo kompaniej. - Podrobnosti smotrite v FAQ dlya razrabotchikov, - http://www.postgresql.org/docs/faqs.FAQ_DEV.html - - Postgres -- `eto shiroko ispol'zuemoe sokraschenie dlya PostgreSQL. - Pervonachal'nym imenem proekta v Berkli bylo Postgres i `etot nik - teper' naibolee populyaren v razgovorah o PostgreSQL po sravneniyu s - drugimi. Esli vam trudno polnost'yu progovarivat' 'PostgreSQL', mozhno - prosto govorit' 'Postgres'. - - 1.2) Kto upravlyaet PostgreSQL? - - Esli vy ischite kakogo-to osobennogo cheloveka, central'nyj komitet - ili upravlyayuschuyu kompaniyu, to naprasno --- ih net. U nas est' - yadro komiteta i razrabotchikov, rabotayuschih s CVS, no `eti gruppy - sluzhat bol'she dlya administrativnyh celej, chem dlya upravleniya. - Proekt napryamuyu funkcioniruet s pomosch'yu soobschestva - razrabotchikov i pol'zovatelej, k kotoromu mozhet prisoedinitsya - kazhdyj. Vsio chto nuzhno -- `eto podpisat'sya na spiski rassylki i - uchastvovat' v diskussiyah. (Podrobnosti o tom kak vklyuchit'sya v - razrabotku PostgreSQL smotrite v FAQ dlya razrabotchikov.) - - 1.3) Kakovy avtorskie prava na PostgreSQL? - - PostgreSQL rasprostranyaetsya po klassicheskoj licenzii BSD. `Eta - licenziya ne soderzhit ogranichenij na to, kak budet ispol'zovat'sya - ishodnyj kod. Nam nravitsya `eta licenziya i u nas net namerenij eio - menyat'. Vot `eta licenziya BSD, kotoruyu my ispol'zuem: - - Sistema Upravleniya Bazami Dannyh PostgreSQL - - Portions copyright (c) 1996-2008, PostgreSQL Global Development Group - Portions Copyright (c) 1994-1996 Regents of the University of - California - - Predostavlyayutsya prava na ispol'zovanie, kopirovanie, izmenenie i - rasprostranenie dannogo programmnogo obespecheniya i ego dokumentacii - dlya lyubyh celej, besplatno i bez podpisaniya kakogo-libo - soglasheniya, pri uslovii chto dlya kazhdoj kopii budut predostavleny - dannoe vyshe zamechanie ob avtorskih pravah, tekuschij paragraf i dva - sleduyuschih paragrafa. - - KALIFORNIJSKIJ UNIVERSITET NE NESET NIKAKOJ OTVETSTVENNOSTI ZA LYUBYE - POVREZHDENIYA, VKLYUCHAYA POTERYU DOHODA, NANESENNYE PRYAMYM ILI - NEPRYAMYM, SPECIAL'NYM ILI SLUCHAJNYM ISPOL'ZOVANIEM DANNOGO - PROGRAMMNOGO OBESPECHENIYA ILI EGO DOKUMENTACII, DAZHE ESLI - KALIFORNIJSKIJ UNIVERSITET BYL IZVESCHEN O VOZMOZHNOSTI TAKIH - POVREZHDENIJ. - - KALIFORNIJSKIJ UNIVERSITET SPECIAL'NO OTKAZYVAZYVAETSYA PREDOSTAVLYAT' - LYUBYE GARANTII, VKLYUCHAYA, NO NE OGRANICHIVAYAS' TOL'KO `ETIMI - GARANTIYAMI: NEYAVNYE GARANTII PRIGODNOSTI TOVARA ILI PRIGODNOSTI DLYA - OTDEL'NOJ CELI. DANNOE PROGRAMMNOE OBESPECHENIE PREDOSTAVLYAETSYA NA - OSNOVE PRICIPA "KAK EST'" I KALIFORNIJSKIJ UNIVERSITET NE OBYAZAN - PREDOSTAVLYAT' SOPROVOZHDENIE, PODDERZHKU, OBNOVLENIYA, RASSHIRENIYA - ILI IZMENENIYA. - - 1.4) Na kakih platformah rabotaet PostgreSQL? - - Obychno, PostgreSQL mozhet rabotat' na lyuboj sovremennoj platforme - sovmestimoj s Unix. V instrukcii po ustanovke, vy najdete spisok teh - platform, na kotoryh byli provedeny testovye zapuski PostgreSQL k - momentu vyhoda dannoj versii. - - PostgreSQL takzhe rabotaet na operacionnyh sistemah Microsoft Windows, - osnovannyh na NT, takih kak Win2000 SP4, WinXP i Win2003. Paket - installyatora dostupen po adresu - http://www.postgresql.org/download/windows. Versii Windows, osnovannye - na MS-DOS (Win95, Win98, WinMe) mogut zapuskat' PostgreSQL s - pomosch'yu Cygwin. - - Takzhe suschestvuet versiya sportirovannaya pod Novell Netware 6 na - http://developer.novell.com/wiki/index.php/Postgresql, i versiya dlya - OS/2 (eComStation) na - http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgre - SQL&stype=all&sort=type&dir=%2F. - - 1.5) Gde mozhno vzyat' PostgreSQL? - - CHerez brauzer, ispol'zuya http://www.postgresql.org/ftp/ i cherez - ftp, ispol'zuya ftp://ftp.postgresql.org/pub/. - - 1.6) Kakaya versiya naibolee svezhaya? - - Poslednij vypusk PostgreSQL - `eto versiya 8.3.3 - - My planiruem vypuskat' novye starshie versii kazhdyj god, a mladshie - versii kazhdye neskol'ko mesyacev. - - 1.7) Gde poluchit' podderzhku? - - Soobschestvo PostgreSQL predostavlyaet pomosch' mnozhestvu - pol'zovatelej cherez E-mail. Osnovnoj web-sajt dlya podpiski na spiski - rassylki po E-mail `eto: http://www.postgresql.org/community/lists/. - Horoshim mestom dlya togo, chtoby nachat' zadavat' voprosy - yavlyayutsya spiski general (obschie voprosy) ili bugs (oshibki). - - Glavnym IRC kanalom yavlyaetsya #postgreql, raspolozhennyj na servere - Freenode (irc.freenode.net). CHtoby podklyuchit'sya, vy mozhete - ispol'zovat' v Unix vyzov programmy irc -c '#postgresql' "$USER" - irc.freenode.net ili lyuboj drugoj IRC klient. Na `etom zhe servere - suschestvuyut kanaly na ispanskom (#postgresql-es), francuzskom - (#postgresqlfr) i brazil'skom (#postgresql-br) yazykah. Takzhe - suschestvuet kanal po PostgreSQL na servere EFNet. - - Spisok kommercheskoj podderzhki kompanij dostupen na - http://www.postgresql.org/support/professional_support. - - 1.8) Kak mne soobschit' ob oshibke? - - Posetite stranichku so special'noj formoj otchiota ob oshibke v - PostgreSQL po adresu: http://www.postgresql.org/support/submitbug. - Takzhe prover'te nalichie bolee svezhej versii PostgreSQL na nashem - FTP sajte ftp://ftp.postgresql.org/pub/. - - Na oshibki, uvedomlenie o kotoryh byli sdelany cherez special'nuyu - formu ili otpravlennye v kakoj-libo spisok rassylki PostgreSQL, - obychno generiruetsya odin iz sleduyuschih otvetov: - * `Eto ne oshibka i pochemu - * `Eto izvestnaya oshibka i ona uzhe est' v spiske TODO - * Dannaya oshibka byla ispravlena v tekuschem vypuske - * Dannaya oshibka byla ispravlena, no ispravlenie poka ne popalo v - oficial'nyj vypusk - * Zaprashivaetsya bolee detal'naya informaciya: - + Operacionnaya sistema - + Versiya PostgreSQL - + Test, vosproizvodyaschij oshibku - + Otladochnaya informaciya - + Vyvod backtrace otladchika - * `Eto novaya oshibka. Mozhet proizojti sleduyuschee: - + Budet sozdano ispravlenie, kotoroe budet vklyucheno v - sleduyuschij vypusk - + Oshibka ne mozhet byt' ispravlena nemedlenno i budet - dobavlena v spisok TODO - - 1.9) Kak najti informaciyu ob izvestnyh oshibkah ili otsutstvuyuschih - vozmozhnostyah? - - PostgreSQL podderzhivaet rasshirennyj podklass SQL:2003. Smotrite nash - spisok TODO na predmet izvestnyh oshibok, otsutstvuyuschih - vozmozhnostej i buduschih planov. - - Na zapros kakoj-libo vozmozhnosti obychno prihodyat sleduyuschie - otvety: - * Dannaya vozmozhnost' uzhe est' v spiske TODO - * Dannaya vozmozhnost' nezhelatel'na potomu chto: - + Ona dubliruet suschestvuyuschuyu funkcional'nost', kotoraya - sleduet standartu SQL - + Dannaya vozmozhnost' sil'no uslozhnila by kod, no dala by - malen'kuyu vygodu - + Dannaya vozmozhnost' nebezopasna ili nenadiozhna - * Dannaya novaya vozmozhnost' dobavlena v spisok TODO - - PostgreSQL ne ispol'zuet kakuyu-libo sistemu otslezhivaniya oshibok, - potomu chto my obnaruzhili, chto ispol'zovanie pryamogo obrascheniya - po `elektronnoj pochte i obnovlyaemogo spiska TODO yavlyaetsya bolee - `effektivnym. Na praktike, oshibki v programmnom obespechenii - sohranyayutsya ochen' nedolgo, a oshibki, kotorye vazhny bol'shomu - kolichestvu pol'zovatelej ispravlyayutsya momental'no. Est' tol'ko - odno mesto, gde mozhno najti vse izmeneniya, uluchsheniya i - ispravleniya, sdelannye v vypuske PostgreSQL - `eto zhurnaly - soobschenij sistemy kontrolya versij CVS. Dazhe zamechaniya k vypuskam - ne soderzhat vse izmeneniya, sdelannye v programmnom obespechenii. - - 1.10) Kakaya dokumentaciya imeetsya v nalichii? - - PostgreSQL soderzhit mnogo dokumentacii, vklyuchaya bol'shoe - rukovodstvo, stranicy `elektronnogo rukovodstva man i nekotorye - malen'kie testovye primery. Smotrite v katalog /doc. Vy takzhe mozhete - prosmatrivat' dokumentaciyu v Internet po adresu - http://www.postgresql.org/docs. - - Suschestvuet dve knigi po PostgreSQL dostupnye po adresam - http://www.PostgreSQL.org/docs/books/awbook.html i - http://www.commandprompt.com/ppbook/. Est' neskol'ko knig po - PostgreSQL, kotorye mozhno kupit'. Odnu iz naibolee populyarnyh - napisal Korri Duglas (Korry Douglas). Spisok obzorov po `etim knigam - dostupen po adresu http://www.postgresql.org/docs/books/. Krome togo, - po adresu - http://wiki.postgresql.org/wiki/Community_Generated_Articles%2C_Guides - %2C_and_Documentation vy mozhete najti kollekciyu tehnicheskih statej, - posveschennyh PostgreSQL. - - Klient komandnoj stroki psql imeet neskol'ko komand \d dlya - otobrazheniya informacii po tipam, operatoram, funkciyam, agregatam i - t.d. - ispol'zujte \? dlya polucheniya spiska dostupnyh komand. - - Nash sajt soderzhit esche bol'she informacii. - - 1.11) Kak mne nauchit'sya SQL? - - Vo-pervyh, voz'mite odnu iz knig po PostgreSQL, o kotoryh govorilos' - vyshe. Mnogim iz nashih pol'zovatelej takzhe nravitsya kniga The - Practical SQL Handbook, Bowman, Judith S., et al., Addison-Wesley. - Drugim nravitsya The Complete Reference SQL, Groff et al., - McGraw-Hill. - - Suschestvuet takzhe mnozhestvo prekrasnyh uchebnikov dostupnyh v - online: - * http://www.intermedia.net/support/sql/sqltut.shtm, - * http://sqlcourse.com. - * http://www.w3school.com/sql/default.asp - * http://mysite.verizon.net/Graeme_Birchall/id1.html - - 1.12) Kak mne prislat' ispravlenie ili prisoedinitsya k komande - razrabotchikov? - - Smotrite FAQ dlya razrabotchikov. - - 1.13) Kak sravnit' PostgreSQL s drugimi SUBD? Mozhet li PostgreSQL byt' - vstroennym? - - Suschestvuet neskol'ko metodov sravneniya programmnogo obespecheniya: - vozmozhnosti, proizvoditel'nost', nadezhnost', podderzhka i cena. - - Vozmozhnosti - PostgreSQL imeet bol'shinstvo vozmozhnostej predstavlennyh v - bol'shih kommercheskih SUBD, takie kak: tranzakcii, podzaprosy, - triggery, predstavleniya, ssylochnoj celostnosti vtorichnogo - klyucha i raznye blokirovki. U nas est' nekotorye vozmozhnosti, - kotoryh net u nih: tipy, opredelyaemye pol'zovatelem, mehanizm - nasledovaniya, pravila i konkuretnoe mnogoversionnoe upravlenie - dlya raboty s soderzhimym blokirovok. - - Proizvoditel'nost' - Proizvoditel'nost' PostgreSQL shodna s drugimi kommercheskimi - SUBD i s SUBD s otkrytym ishodnym kodom. V kakih-to veschah my - bystree, v kakih-to medlennee. Nasha proizvoditel'nosti obychno - +/-10% po sravneniyu s drugimi SUBD. - - Nadezhnost' - My ponimali, chto nasha SUBD dolzhna byt' nadezhnoj ili ona - nichego ne budet stoit'. My staraemsya vypuskat' horosho - proverennyj, stabil'nyj kod, kotoryj soderzhit minimum oshibok. - Kazhdyj vypusk prohodit stadiyu beta-testirovaniya po krajnej - mere v techenii odnogo mesyaca i nasha istoriya vypuskov - pokazyvaet chto my mozhem predostavlyat' stabil'nye, monolitnye - vypuski, kotorye gotovy k produktivnomu ispol'zovaniyu. My - verim, chto my proizvodim proverku ne huzhe, chem u drugih - SUBD. - - Podderzhka - Nash spisok rassylki predostavlyaet vozmozhmozhnost' obscheniya - s bol'shoj gruppoj razrabotchikov i pol'zovatelej, kotorye - mogut pomoch' reshit' lyubye voznikshie problemy. V to zhe - vremya, my ne garantiruem kakie-libo ispravleniya, no i - razrabotchiki kommercheskih SUBD ne vsegda delayut - ispravleniya. Pryamoj dostup k razrabotchikam, soobschestvu - pol'zovatelej, rukovodstvam i ishodnym tekstam chasto delayut - podderzhku PostgreSQL prevoshodyaschej drugie SUBD. - Suschestvuet kommercheskaya podderzhka po rezul'tam voznikshih - incidentov, kotoraya dostupna dlya teh komu ona nuzhna. - (Smotrite Sekciyu 1.7.) - - Cena - Nash produkt besplaten kak dlya kommercheskogo tak, i ne dlya - kommercheskogo ispol'zovaniya. Vy mozhete dobavlyat' svoj kod v - nash produkt bez ogranichenij, za isklyucheniem teh, chto - opisyvayutsya v nashej licenzii stilya BSD, kotoraya privedena - vyshe. - - PostgreSQL razrabatyvaetsya po arhitekture klient/server, kotoraya - trebuet otdel'nyh processov dlya kazhdogo klienta i servera, a takzhe - neskol'ko vspomogatel'nyh processov. Mnogie vstraivaemye arhitektury - mogut sootvetstvovat' takim trebovaniyam. Odnako, esli vasha - vstraivaemaya arhitektura trebuet server baz dannyh dlya zapuska - vnutri prikladnogo processa, vy ne mozhete ispol'zovat' Postgres i vam - luchshe by vybrat' dlya bazy dannyh kakoe-libo drugoe oblegchennoe - reshenie. - - 1.14) Budet li PostgreSQL rabotat' s poslednimi izmeneniyami, v raznyh - stranyh, kasayuschimisya dnevnogo vremeni? - - Izmeneniya v sohranenii dnevnogo vremeni v SSHA vklyucheny v - PostgreSQL versii 8.0.[4+] i vo vse sleduyuschie vypuski, naprimer v - 8.1. Izmeneniya po Kanade i Zapadnoj Avstralii vklyucheny v 8.0.[10+], - 8.1.[6+] i vse sleduyuschie vypuski. Vypuski PostgreSQL do 8.0 - ispol'zuyut informaciyu o sohranenii dnevnogo vremeni iz bazy dannyh - vremennyh zon v operacionnoj sisteme. - _________________________________________________________________ - - 1.15) Kak mne otpisat'sya ot spiskov rassylki PostgreSQL? Kak izbezhat' - polucheniya dubliruyuschih soobschenij? - - Stranica Majordomo na sajte PostgreSQL pozvolyaet podpisat'sya ili - otpisat'sya ot lyubogo iz spiskov rassylki PostgreSQL. (Vam mozhet - ponadobitsya vash parol' dlya Majordomo, kotoryj otpravlyaetsya na - vash E-mail, chtoby vojti v upravlenie vashimi podpiskami.) - - Vse spiski rassylki PostgreSQL nastarivayutsya tak, chtoby gruppovoj - otvet uhodil na adres spiska i na adres avtora soobscheniya. Tak - sdelano, chtoby pol'zovateli poluchali otvety na E-mail kak mozhno - bystree. Esli vy ne hotite poluchat' dubliruyuschie E-mail - soobscheniya iz spiska, v sluchayah kogda vy uzhe poluchili `eti - soobscheniya napryamuyu, ustanovite flazhok eliminatecc na stranice - Change Settings v Majordomo. Vy takzhe mozhete izbezhat' polucheniya - kopij svoih soobschenij dlya samogo sebya, esli snimite flazhok - selfcopy. - _________________________________________________________________ - - Voprosy pol'zovatelej po klientskoj chasti - - 2.1) Kakie interfejsy est' dlya PostgreSQL? - - Ustanovka PostgreSQL vklyuchaet tol'ko C i vstroennyj (embedded) C - interfejsy. Vse drugie interfejsy yavlyayutsya nezavisimymi proektami - i zagruzhayutsya otdel'no; samostoyatel'nost' proektov pozvolyaet im - organizovat' sobstvennoe raspisanie vypuskov novyh versij i imet' - sobstvennuyu komandu razrabotchikov. - - Nekotorye yazyki programmirovaniya, takie kak PHP vklyuchayut v sebya - interfejs k PostgreSQL. Interfejsy dlya takih yazykov kak Perl, TCL, - Python i mnogih drugih, dostupny na http://pgfoundry.org. - - 2.2) Kakie instrumenty suschestvuyut dlya ispol'zovaniya PostgreSQL cherez - Web? - - Prekrasnoe vvedenie vo vzaimodejstvie baz dannyh i Web mozhno najti - na: http://www.webreview.com - - Dlya integracii s Web, PHP http://www.php.net yavlyaetsya neplohim - interfejsom. - - V slozhnyh sluchayah, mnogie pol'zuyutsya Perl i DBD::Pg s CGI.pm ili - mod_perl. - - 2.3) Est' li u PostgreSQL graficheskij interfejs pol'zovatelya? - - Dlya PostgreSQL suschestvuet bol'shoe kolichestvo instrumentov s - graficheskim interfejsom kak kommercheskih, tak i otkrytyh. - Podrobnosti mozhno najti v Dokumentacii soobschestva dlya GUI - istrumentov PostgreSQL - _________________________________________________________________ - - Voprosy administrirovaniya - - 3.1) Kak mne ustanovit' PostgreSQL v mesto otlichnoe ot /usr/local/pgsql? - - Zadajte opciyu --prefix kogda zapuskaete configure. - - 3.2) Kak mne upravlyat' soedineniyami ot drugih komp'yuterov? - - Po umolchaniyu, PostgreSQL razreshaet tol'ko soedineniya na lokal'noj - mashine cherez sokety domena Unix ili TCP/IP soedineniya. Dlya togo, - chtoby drugie mashiny smogli podklyuchit'sya k baze vy dolzhny - izmenit' listen_addresses v postgresql.conf, razreshit' - host-avtorizaciya v fajle $PGDATA/pg_hba.conf i perestartovat' server - SUBD. - - 3.3) Kakie nastrojki mne nuzhno sdelat' dlya uluchsheniya proizvoditel'nosti? - - Suschestvuet tri glavnyh oblasti, kotorye potencial'no mogut - uvelichit' proizvoditel'nost': - - Izmenenie zaprosa - `Eto oznachaet modifikaciyu zaprosov dlya polucheniya luchshej - proizvoditel'nosti: - - + Sozdanie indeksov, vklyuchaya indeksy vyrazhenij i - chastichnye indeksy - + Ispol'zovanie COPY vmesto mnozhestva INSERT - + Gruppirovka neskol'kih operatorov v edinuyu tranzakciyu dlya - umen'sheniya nagruzki pri vypolnenii zaversheniya tranzakcii - + Ispol'zovanie CLUSTER, kogda iz indeksa beriotsya mnozhestvo - strok - + Ispol'zovanie LIMIT dlya togo, chtoby vozvraschalas' tol'ko - chast' vyvoda ot zaprosa - + Ispol'zovanie Podgotovlennyh (Prepared) zaprosov - + Ispol'zovanie ANALYZE dlya obsluzhivaniya statistiki - optimizatora - + Regulyarnoe ispol'zovanie VACUUM ili pg_autovacuum - + Udalenie indeksov vo vremya bol'shih izmenenij dannyh - - Nastrojka servera - Nekotorye ustanovki v postgresql.conf vliyayut na - proizvoditel'nost'. Podrobnyj polnyj spisok ustanovok sm. v - Administration Guide/Server Run-time Environment/Run-time - Configuration, a kommentarii sm. v - http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_co - nf_e.html i - http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html. - - Vybor "zheleza" - apparatnogo obespecheniya - Vliyanie "zheleza" na proizvoditel'nost' podrobno opisano v - http://www.powerpostgresql.com/PerfList/ i - http://momjian.us/main/writings/pgsql/hw_performance/index.html - . - - 3.4) Kakie vozmozhnosti dlya otladki est' v nalichii? - - Est' mnozhestvo ustanovok v nastrojkah servera, nachinayuschihsya na - log_* na - http://www.postgresql.org/docs/current/interactive/runtime-config-logg - ing.html, pozvolyayuschih protokolirovat' zaprosy i statistiku raboty - processa, kotoraya ochen' polezna dlya otladki i izmereniya - proizvoditel'nosti. - - 3.5) Pochemu ya poluchayu soobschenie "Sorry, too many clients" kogda - pytayus' podklyuchit'sya k baze? - - Vy dostigli ustanovlennogo po umolchaniyu ogranicheniya v 100 sessij - podklyucheniya k baze dannyh. Vam neobhodimo uvelichit' limit na - kolichestvo konkurentnyh backend processov dlya vashego servera BD, - izmeniv znachenie max_connections v fajle postgresql.conf i - perestartovat' server BD. - - 3.6) Kak vypolnit' obnovlenie PostgreSQL? - - Sm. informaciyu ob obnovlenii v - http://www.postgresql.org/support/versioning i special'nye instrukcii - v - http://www.postgresql.org/docs/current/static/install-upgrading.html. - - 3.7) Kakoe komp'yuternoe "zhelezo" ya dolzhen ispol'zovat'? - - Poskol'ku "zhelezo" personal'nyh komp'yuterov yavlyaetsya naibolee - sovmestimym, lyudi sklonny verit', chto takoe "zhelezo" imeet - odinakovoe kachestvo. `Eto ne tak. Pamyat' ECC, SCSI i kachestvennye - materinskie platy yavlyayutsya bolee nadiozhnymi i imeyut bolee - luchshuyu proizvoditel'nost', chem menee dorogoe "zhelezo". PostgreSQL - budet rabotat' na lyubom "zheleze", no esli dlya vas vazhny - nadiozhnost' i proizvoditel'nost', to s vashej storony budet mudro - postavit' sootvetstvuyuschee "zhelezo". Obsudit' raznoe "zhelezo" - mozhno v nashih spiskah rassylki. - _________________________________________________________________ - - Voprosy `ekspluatacii - - 4.1) Kak vypolnit' SELECT tol'ko dlya neskol'kih pervyh strochek zaprosa? - Proizvol'noj stroki? - - Dlya polucheniya tol'ko neskol'kih strok, esli vy znaete ih - kolichestvo na moment vypolneniya SELECT ispol'zujte LIMIT. - Esli est' kakoj-libo indeks, kotoryj sovpadaet s ORDER BY, to - vozmozhno, chto ves' zapros vypolnen i ne budet. Esli vy ne znaete - kolichestva neobhodimyh strok na moment vypolneniya SELECT, - ispol'zujte kursor i FETCH. - - To SELECT a random row, use: - SELECT col - FROM tab - ORDER BY random() - LIMIT 1; - - 4.2) Kak mne najti kakie tablicy, indeksy, bazy dannyh i pol'zovateli - suschestvuyut? Kak mne uvidet' zaprosy, kotorye ispol'zuet psql dlya - polucheniya `etoj informacii? - - CHtoby prosmatrivat' tablicy v psql, ispol'zujte komandu \dt. Polnyj - spisok komand v psql vy mozhete poluchit', ispol'zuya \?. Krome togo, - vy mozhete posmotret' ishodnyj kod psql v fajle - pgsql/src/bin/psql/describe.c. On soderzhit komandy SQL kotorye - generiruyutsya pri vvode v psql komand, nachinayuschihsya s obratnoj - kosoj cherty. Vy takzhe mozhete zapustit' psql s opciej -E tak, chtoby - `eta programma vydavala zaprosy, kotorye ona ispol'zuet dlya - vypolneniya zadannyh vami komand. PostgreSQL takzhe predostavlyaet SQL - sovmestimyj s INFORMATION SCHEMA interfejs, s pomosch'yu kotorogo, vy - mozhete sformirovat' zapros na poluchenie informacii o baze dannyh. - - Takzhe suschestvuyut sistemnye tablicy, nachinayuschiesya s pg_. - - Ispol'zujte psql -l dlya polucheniya spiska vseh baz dannyh. - - Takzhe posmotrite fajl pgsql/src/tutorial/syscat.source. On pokazyvaet - mnogie iz operatorov SELECT neobhodimyh dlya polucheniya informacii iz - sistemnyh tablic bazy dannyh. - - 4.3) Kak izmenit' tip dannyh kolonki? - - V 8.0 i bolee pozdnih versiyah, izmenenie tipa kolonki vypolnyaetsya - ochen' legko cherez ALTER TABLE ALTER COLUMN TYPE. - - V bolee rannih versiyah sdelajte tak: - BEGIN; - ALTER TABLE tab ADD COLUMN new_col new_data_type; - UPDATE tab SET new_col = CAST(old_col AS new_data_type); - ALTER TABLE tab DROP COLUMN old_col; - COMMIT; - - 4.4) Kakovy maksimal'nye razmery dlya strok v tablice, tablic i bazy dannyh? - - Suschestvuyut sleduyuschie ogranicheniya: - - Maksimal'nyj razmer bazy? neogranichen (suschestvuyut bazy na 32 TB) - Maksimal'nyj razmer tablicy? 32 TB - Maksimal'nyj razmer stroki? 400 Gb - Maksimal'nyj razmer polya? 1 GB - Maksimal'noe kolichestvo strok v tablice? neogranicheno - Maksimal'noe kolichestvo kolonok v tablice? 250-1600 v zavisimosti ot - tipa - Maksimal'noe kolichestvo indeksov v tablice? neogranicheno - - Razumeetsya, ponyatie "neogranicheno" na samom dele ogranichivaetsya - dostupnym diskovym prostranistvom i razmerami pamyati/svoppinga. Kogda - znacheniya perechislennye vyshe neopravdano bol'shie, mozhet - postradat' proizvoditel'nost'. - - Maksimal'nyj razmer tablicy v 32 TB ne trebuet chtoby operacionnaya - sistema podderzhivala fajly bol'shih razmerov. Bol'shie tablicy - hranyatsya kak mnozhestvo fajlov razmerom v 1 GB, tak chto - ogranicheniya, kotorye nakladyvaet fajlovaya sistema ne vazhny. - - Maksimal'nyj razmer tablicy i maksimal'noe kolichestvo kolonok mogut - byt' uvelicheny v chetyre raza, esli razmer bloka po umolchaniyu budet - uvelichen do 32k. - - Suschestvuet ogranichenie, po kotoromu indeksy ne mogut sozdavat'sya - dlya kolonok dlinnee chem 2,000 simvolov. K schast'yu takie indeksy - vryad li dejstvitel'no komu-to nuzhny. Unikal'nost' garantiruetsya - nailuchim obrazom, s pomosch'yu funkcional'nogo indeksa iz h`esha MD5 - dlinnoj kolonki, a polnotekstovoe indeksirovanie pozvolyaet iskat' - slova vnutri kolonki. - - 4.5) Kak mnogo diskovogo prostranstva v baze dannyh nuzhno dlya sohraneniya - dannyh iz obychnogo tekstovogo fajla? - - SUBD PostgreSQL mozhet potrebovat'sya diskovogo prostranstva do 5 raz - bol'she dlya sohraneniya dannyh iz prostogo tekstovogo fajla. - - V kachestve primera, rassmotrim fajl v 100,000 strok v kazhdoj, iz - kotoryh celoe chislo i tekstovoe opisanie. Pri `etom dlina teksta, v - srednem, sostavlyaet 20 bajt. Razmer prostogo fajla sostavit 2.8 MB. - Razmer bazy PostgreSQL, soderzhaschej `eti zhe dannye sostavit - priblizitel'no 5.2 MB iz kotoryh: - 24 bajt: na kazhdyj zagolovok stroki v tablice (priblizitel'no) - + 24 bajta: odno pole s celochislennym tipom i odno tekstovoe pole - + 4 bajta: ukazatel' na stranice dlya vsej tablichnoj stroki - ---------------------------------------- - 56 bajt na stroku v tablice - - Razmer stranicy dannyh v PostgreSQL sostavlyaet 8192 bajt (8 KB), tak chto: - - 8192 bajt na stranicu - --------------------- = 158 strok v tablice na stranicu BD (okruglionno) - 52 bajt na stroku v tablice - - 100000 strok dannyh - ----------------------- = 633 stranic v BD (okruglionno) - 158 strok v tablice na stranicu - - 633 stranic BD * 8192 bajt na stranicu = 5,185,536 bajt (5.2 MB) - - Indeksy ne trebuyut tak mnogo, no poskol'ku oni sozdayutsya dlya - bol'shogo kolichestva dannyh, oni takzhe mogut byt' veliki. - - Znacheniya NULL hranyatsya kak bitovye karty i po`etomu oni zanimayut - ochen' malo mesta. - - 4.6) Pochemu moi zaprosy rabotayut medleno? Pochemu oni ne ispol'zuyut moi - indeksy? - - Indeksy ne ispol'zuyutsya dlya kazhdogo zaprosa. Oni ispol'zuyutsya - tol'ko esli tablica bol'she minimal'nogo razmera i zapros vybiraet - tol'ko malen'kij procent strok v tablice. Tak ustroeno, potomu chto - dostup k disku s primeneniem randomizacii pri skanirovanii indeksov - mozhet byt' medlennee, chem prostoe chtenie tablicy ili ee - posledovatel'noe skanirovanie. - - CHtoby opredelit' neobhodimost' ispol'zovaniya indeksa dlya kakoj-libo - tablicy, PostgreSQL dolzhen imet' statistiku po `etoj tablice. `Eta - statistika sobiraetsya pri ispol'zovanii VACUUM ANALYZE ili prosto - ANALYZE. Ispol'zuya statistiku, optimizator uznaet o tom kak mnogo - strok v tablice i esli on dolzhen ispol'zovat' indeksy, to on mozhet - prinimat' luchshie resheniya. Statistika takzhe vliyaet na opredelenie - optimal'nogo poryadka svyazyvaniya i metoda svyazyvaniya. Pri - izmenenii soderzhimogo tablicy dolzhen periodicheski vypolnyatsya sbor - statistiki. - - Obychno indeksy ne ispol'zuyutsya dlya ORDER BY ili dlya vypolneniya - svyazyvanij. Posledovatel'nyj perebor sleduyuschij za yavnoj - sortirovkoj obychno bystree, chem poisk po indeksam v bol'shoj - tablice. Odnako, ORDER BY chasto kombiniruetsya s LIMIT i v `etom - sluchae indeks budet ispol'zovat'sya, poskol'ku pri vypolnenii budet - vozvraschat'sya nebol'shaya chast' tablicy. - - Esli vam kazhetsya, chto optimizator nekorrektno vybiraet - posledovatel'nyj perebor, ispol'zujte SET enable_seqscan TO 'off' i - zapustite zapros snova, chtoby uvidet', dejstvitel'no li skanirovanie - indeksov bystree. - - Kogda ispol'zuyutsya operacii s shablonami, naprimer LIKE ili ~, - indeksy mogut byt' ispol'zovany v sleduyuschih sluchayah: - * Nachalo stroki poiska dolzhno sovpadat' s nachalom iskomoj stroki, - t.e.: - + LIKE shablony ne dolzhny nachinat'sya s %.. - + ~ shablony regulyarnyh vyrazhenij dolzhna nachinat'sya na ^. - * Stroka poiska ne dolzhna nachinat'sya s simvola klassa, t.e. - [a-e]. - * Poisk nezavisimyj ot registra, takoj kak ILIKE i ~* ne ispol'zuet - indeksy. Vmesto nego, ispol'zujte indeksy vyrazhenij, kotorye - opisyvayutsya v sekcii 4.8. - * Vo vremya initdb dolzhna ispol'zovat'sya lokal' po umolchaniyu C, - potomu chto ne suschestvuet vozmozhnosti uznat' sleduyuschij - naibol'shij simvol dlya ne-C lokali. Vy mozhete dlya takih - sluchaev sozdat' special'nyj indeks text_pattern_ops kotoryj - rabotaet tol'ko dlya LIKE indeksirovaniya. Dlya poiska slov takzhe - mozhno ispol'zovat' polnotekstovyj indeks. - - 4.7) Kak posmotret' na to, kak optimizator vypolnyaet moj zapros? - - Smotrite stranicu rukovodstva posvyaschennuyu EXPLAIN. - - 4.8) Kak mne vypolnit' poisk regulyarnogo vyrazheniya i poisk nezavisimyj ot - registra bukv poisk regulyarnogo vyrazheniya? Kak mne ispol'zovat' indeks - dlya poiska nezavisimogo ot registra bukv? - - Operator ~ proizvodit poisk regulyarnogo vyrazheniya, a operator ~* - proizvodit nezavisimyj ot registra bukv poisk regulyarnogo - vyrazheniya. Nezavisimyj ot registra variant LIKE nazyvaetsya ILIKE. - - Nezavisimoe ot registra sravnenie obychno vyrazhaetsya tak: - SELECT * - FROM tab - WHERE lower(col) = 'abc'; - - `Eta konstrukciya ne budet ispol'zovat' standartnyj indeks. Odnako, - esli vy sozdadite indeks vyrazheniya, on budet ispol'zovan: - CREATE INDEX tabindex ON tab (lower(col)); - - Esli vysheukazannyj indeks sozdaiotsya kak UNIQUE, to kolonka, dlya - kotoroj on sozdaiotsya mozhet hranit' simvoly i v verhnem, i v nizhnem - registre, indes ne mozhet imet' identichnyh znachenij, kotorye - otlichayutsya tol'ko registrom. CHtoby v kolonke mozhno bylo hranit' - simvoly tol'ko v opredelionnom registre, ispol'zujte ogranichenie - CHECK ili proverku cherez trigger. - - 4.9) Kak mne opredelit', chto znachenie polya v kakom-libo zaprose ravno - NULL? Kak mne soedinit' vozmozhnye NULL? Mogu ya sortirovat' polya NULL ili - net? - - Vy prosto sravnivaete znachenie s IS NULL i IS NOT NULL, kak zdes': - SELECT * - FROM tab - WHERE col IS NULL; - - CHtoby soedinit' s vozmozhnymi znacheniyami NULL, ispol'zujte - COALESCE() kak zdes': - SELECT COALESCE(col1, '') || COALESCE(col2, '') - FROM tab - - CHtoby otsortirovat' dannye po znacheniyu ispol'zujte modifikatory IS - NULL i IS NOT NULL v vyrazhenii ORDER BY. Kogda oni budut generirovat' - znacheniya istina, to pri sortirovke oni budut vyshe, chem znacheniya - lozh', tak chto zapisi s NULL budut v otsortirovannom spiske sverhu: - SELECT * - FROM tab - ORDER BY (col IS NOT NULL); - - 4.10) Kakovy otlichiya mezhdu raznymi simvol'nymi tipami? - - Tip Vnutrennee imya Zamechaniya - VARCHAR(n) varchar razmer zadaet maksimal'nuyu dlinu, net zapolneniya - CHAR(n) bpchar zapolnyaetsya pustotoj do fiksirovannoj dliny - TEXT text net zadavaemogo verhnego ogranicheniya ili dliny - BYTEA bytea massiv bajt peremennoj dliny (mozhno ispol'zovat' - null-bajt bez opaski) - "char" char odin simvol - - Vnutrennee imya vy mozhete uvidet', kogda smotrite sistemnye katalogi - i v nekotoryh soobscheniyah ob oshibkah. - - Pervye chetyre tipa yavlyayutsya "varlena" tipami (t.e., pervye - chetyre bajta na diske yavlyayutsya dlinnoj, za kotoroj sleduyut - dannye). Takim obrazom, fakticheski ispol'zuemoe prostranstvo bol'she, - chem oboznachennyj razmer. Odnako, dlinnye znacheniya takzhe - szhimayutsya, tak chto zanimaemoe diskovoe prostranstvo mozhet takzhe - byt' i men'she, chem ozhidalos'. - VARCHAR(n) - `eto luchshee reshenie, kogda nuzhno hranit' stroki - peremennoj dliny, ne prevyshayuschie opredelennogo razmera. TEXT - - `eto luchshee reshenie dlya strok neogranichennoj dliny, s maksimal'no - dopustimoj dlinoj v 1 gigabajt. - - CHAR(n) - `eto luchshee reshenie dlya hraneniya strok, kotorye obychno - imeyut odinakovuyu dlinu. CHAR(n) zapolnyaetsya pustotoj do zadannoj - dliny, v to vremya kak VARCHAR(n) hranit tol'ko simvoly, iz kotoryh - sostoit stroka. BYTEA ispol'zuetsya dlya hraneniya binarnyh dannyh, - znacheniya kotoryh mogut vklyuchat' NULL bajty. Vse tipy opisannye - zdes', imeyut shodnye harakteristiki proizvoditel'nosti. - - 4.11.1) Kak mne sozdat' pole serial/s-avto-uvelicheniem? - - PostgreSQL podderzhivaet tip dannyh SERIAL. On avtomaticheski sozdaet - posledovatel'nost'. Naprimer: - CREATE TABLE person ( - id SERIAL, - name TEXT - ); - - avtomaticheski transliruetsya v: - CREATE SEQUENCE person_id_seq; - CREATE TABLE person ( - id INT4 NOT NULL DEFAULT nextval('person_id_seq'), - name TEXT - ); - - Avtomaticheski sozdannaya posledovatel'nost' imeet imya vida - <tablica>_<kolonka_serial>_seq, gde tablica i kolonka_serial - `eto - sootvetstvenno imena tablicy i kolonki s tipom SERIAL. Smotrite - podrobnosti o posledovatel'nostyah na stranice rukovodstva - posvyaschennoj create_sequence. - - 4.11.2) Kak mne poluchit' znachenie pri vstavke SERIAL? - - Prostejshij sposob poluchit' naznachennoe znachenie SERIAL `eto - ispol'zovat' RETURNING. Ispol'zuya dlya primera tablicu v 4.11.1, `eto - mozhet vyglyadet' tak: - INSERT INTO person (name) VALUES ('Blaise Pascal') RETURNING id; - - Vy takzhe mozhete vyzvat' nextval() i ispol'zovat' `eto znachenie v - INSERT ili vyzvat' currval() posle INSERT. - - 4.11.3) Ne mozhet li poluchit'sya tak, chto ispol'zovanie currval() i - nextval() privedet k zaciklirovaniyu s drugimi pol'zovatelyami? - - Net. currval() vozvraschaet tekuschee znachenie, naznachennoe vashej - sessiej, a ne drugimi sessiyami. - - 4.11.4) Pochemu chisla iz moej posledovatel'nosti ne ispol'zuyutsya snova pri - otmene tranzakcii? Pochemu sozdayutsya razryvy pri numeracii v kolonke, gde - ya ispol'zuyu posledovatel'nost'/SERIAL? - - Dlya realizacii konkuretnosti, znacheniya posledovatel'nostej, pri - neobhodimosti vydayutsya vo vremya zapuska tranzakcij i ne - blokiruyutsya do polnogo vypolneniya tranzakcij. `Eto mozhet vyzyvat' - razryvy v numeracii pri otmene tranzakcij. - - 4.12) CHto takoe OID? CHto takoe CTID? - - Esli tablica sozdana s WITH OIDS, to kazhdaya stroka poluchaet - unikal'nyj indentifikator OID. OID - `eto avtomaticheski naznachaemoe - unikal'noe 4-h bajtovoe celoe chislo, kotoroe unikal'no dlya vsej - ustanovlennoj SUBD. Odnako, posle togo kak ego znachenie prevysit 4 - milliarda, znacheniya OID nachinayut dublirovat'sya. PostgreSQL - ispol'zuet OID dlya svyazyvaniya svoih vnutrennih tablic. - - Dlya unikal'nogo znacheniya v strokah tablicy pol'zovatelya, luchshim - sposobom yavlyaetsya ispol'zovanie SERIAL vmesto OID, potomu chto - posledovatel'nosti SERIAL unikal'ny tol'ko vnutri tablicy i takim - obrazom men'she podverzheny perepolneniyu. Dlya hraneniya znachenij - 8-mi bajtnoj posledovatel'nosti dostupen tip SERIAL8. - - CTID ispol'zuetsya dlya identifikacii special'nyh fizicheskih zapisej - s blochnymi i offset znacheniyami. CTID izmenyaetsya posle togo kak - stroki v tablice byli izmeneny ili peregruzheny. - - TID ispol'zuetsya indeksnymi zapisyami v kachestve ukazatelya na - fizicheskie zapisi. - - 4.13) Pochemu ya poluchayu oshibku "ERROR: Memory exhausted in - AllocSetAlloc()"? - - Predpolozhitel'no u vas zakonchilas' virtual'naya pamyat' ili chto - vashe yadro imeet malen'kij limit na opredelennye resursy. Popytajtes' - pered zapuskom servera BD vypolnit' sleduyuschie komandy: - ulimit -d 262144 - limit datasize 256m - - V zavisimosti ot komandnogo interpretatora shell, tol'ko odna iz - dannyh komand vypolnitsya uspeshno, no ona pozvolit vam ustanovit' - bol'shij segment dannyh processa i vozmozhno reshit problemu. `Eta - komanda izmenyaet parametry tekuschego processa i vseh ego potomkov, - sozdannyh posle eio zapuska. Esli u vas voznikla problema s SQL - klientom, potomu chto backend vozvraschaet slishkom bol'shoj ob"em - dannyh, popytajtes' vypolnit' `etu komandu pered zapuskom klienta. - - 4.14) Kak mne uznat', kakaya versiya PostgreSQL zapuschena? - - Iz psql, naberite SELECT version(); - - 4.15) Kak mne sozdat' kolonku kotoraya po umolchaniyu budet soderzhat' - tekuschee vremya? - - Ispol'zujte CURRENT_TIMESTAMP: -CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); - - 4.16) Kak mne vypolnit' vneshnee svyazyvanie? - - PostgreSQL podderzhivaet vneshnee svyazyvanie, ispol'zuya standartnyj - sintaksis SQL. Vot dva primera: - SELECT * - FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col); - - ili - SELECT * - FROM t1 LEFT OUTER JOIN t2 USING (col); - - `Eto identichnye zaprosy svyazyvaniya t1.col i t2.col, takzhe - vozvraschayut lyubye nesvyazannye stroki v t1 (kotorye ne sovpadayut s - t2). RIGHT svyazyvanie dolzhno dobavit' nesvyazannye stroki t2. FULL - svyazyvanie dolzhno vozvratit' sovpavshie stroki plyus vse - nesvyazannye stroki iz t1 i t2. Slovo OUTER yavlyaetsya - neobyazatel'nym i naznachaetsya v LEFT, RIGHT i FULL svyazyvaniyah. - Obychnye svyazyvaniya nazyvayutsya INNER svyazyvaniya. - - 4.17) Kak vypolnyat' zaprosy, ispol'zuyuschie neskol'ko baz dannyh? - - Ne suschestvuet sposoba sozdat' zapros k bazam dannyh otlichnym ot - tekuschej. Poskol'ku PostgreSQL zagruzhaet sistemnye katalogi - specifichnye dlya bazy dannyh, neponyatno dazhe, kak dolzhen sebya - vesti takoj mezhbazovyj zapros. - - contrib/dblink pozvolyaet zaprosy mezhdu bazami, ispol'zuya vyzovy - funkcij. Razumeetsya, klient mozhet odnovremenno takzhe ustanavlivat' - soedieneniya s razlichnymi bazami dannyh i takih obrazom ob"edinyat' - informaciyu iz nih. - - 4.18) Kak mne vernut' iz funkcii neskol'ko strok tablicy? - - Vy mozhete legko ispol'zovat' funkcii, vozvraschayuschie spisok, - http://wiki.postgresql.org/wiki/Return_more_than_one_row_of_data_from_ - PL/pgSQL_functions. - - 4.19) Pochemu ya poluchayu oshibku "relation with OID #### ne suschestvuet", - kogda obraschayuts' k vremennym tablicam v funkciyah PL/PgSQL? - - V PostgreSQL do versii 8.3, PL/PgSQL k`eshiruet scenarii funkcii i - odin iz negativnyh `effektov `etogo sostoit v tom, chto esli funkciya - PL/PgSQL obraschaetsya k vremennoj tablice i `eta tablica pozdnee - udalyaetsya i peresozdaetsya, a funkciya zatem vyzyvaetsya snova, to - ee vyzov privedet k oshibke, potomu chto sk`eshirovannoe soderzhimoe - funkcii soderzhit ukazatel' na staruyu vremennuyu tablicu. CHtoby - reshit' `etu problemu, ispol'zujte EXECUTE dlya dostupa k vremennym - tablicam v PL/PgSQL. Ispol'zovanie `etogo operatora zastavit zapros - peregenerirovat'sya kazhdyj raz. - - V PostgreSQL 8.3 i pozdnee, `etoj problemy net. - - 4.20) Kakie est' resheniya dlya replikacii? - - Hotya "replikaciya" -- `eto edinyj termin, est' neskol'ko raznyh - tehnologij dlya vypolneniya replikacij s raznymi osobennostyami dlya - kazhdoj. - - Replikaciya Master/slave pozvolyaet imet' odin glavnyj (master) server - dlya vypolneniya zaprosov chteniya/zapisi, v to vremya kak - podchinionnye (slave) servera mogut proizvodit' tol'ko zaprosy - chteniya/SELECT. Naibolee populyarnym resheniem dlya replikacii - master-slave v PostgreSQL yavlyaetsya Slony-I. - - Replikaciya Multi-master pozvolyaet vypolnyat' zaprosy chteniya/zapisi - na neskol'kih, repliciruemyh drug s drugom komp'yuetrah. `Eta - osobennost' takzhe privodit k potere proizvoditel'nosti, potomu chto - neobhodima sinhronizaciya izmenenij mezhdu neskol'kimi serverami. - Naibolee populyarnym resheniem dlya takoj replikacii v PostgreSQL - yavlyaetsya PGcluster. - - 4.21) Pochemu imena tablicy i kolonok ne raspoznayutsya v v moiom zaprose? - Pochemu ne sohranyayutsya zaglavnye bukvy? - - Naibolee chasto imena neraspoznayutsya iz-za ispol'zovaniya dvojnyh - kavychek v imeni tablicy ili kolonki pri sozdanii tablicy. Pri - ispol'zovanii dvojnyh kavychek, imya tablicy i kolonki (kotorye - nazyvayut identifikatorami) sohranyayutsya v registro-zavisimom vide; - `eto oznachaet, chto vy dolzhny ispol'zovat' dvojnye kavychki, kogda - ukazyvaete `eti imena v zaprose. Nekotorye interfejsy, takie kak - pgAdmin, vo vremya sozdaniya tablicy dobavlyayut dvojnye kavychki - avtomaticheski. Takim obrazom, chtoby identifikatory raspoznavalis' vy - dolzhny sledovat' odnomu iz sleduyuschih pravil: - * Izbegat' ispol'zovaniya dvojnyh kavychek pri sozdanii tablic - * Ispol'zovat' v identifikatorah tol'ko simvoly nizhnego registra - * Ispol'zovat' dvojnye kavychki dlya identifikatorov v zaprosah diff --git a/doc/FAQ_turkish b/doc/FAQ_turkish deleted file mode 100644 index d1c886d2a910a09dee4113087dd0a482d305f0f5..0000000000000000000000000000000000000000 --- a/doc/FAQ_turkish +++ /dev/null @@ -1,1192 +0,0 @@ - - PostgreSQL için Sýkça Sorulan Sorular (SSS) - - Son güncelleme : 15 Kasým 2004 Pazartesi - 15:03:23 - - Current maintainer: Bruce Momjian (pgman@candle.pha.pa.us) - - Çevirenler : Devrim Gündüz (devrim@tdmsoft.com) - Nicolai Tufar (ntufar@tdmsoft.com) - Volkan YAZICI (volkany@phreaker.net) - - Bu belgenin en güncel hali, - http://www.PostgreSQL.org/docs/faqs/FAQ_turkish.html ve - http://www.gunduz.org/seminer/pg/FAQ_turkish.html adreslerinde - görülebilir. - - Platforma özel sorularýnýz, http://www.PostgreSQL.org/docs/index.html - adresinde yanýtlanýr. - _________________________________________________________________ - - Genel Sorular - - 1.1) PostgreSQL nedir? Nasýl okunur? - 1.2) PostgreSQL'in haklarý nedir? - 1.3) PostgreSQL, hangi Unix platformlarýnda çalýþýr? - 1.4) Hangi Unix olmayan uyarlamalarý bulunmaktadýr? - 1.5) PostgreSQL'i nereden indirebilirim? - 1.6) Desteði nereden alabilirim? - 1.7) En son sürümü nedir? - 1.8) Hangi belgelere ulaþabilirim? - 1.9) Bilinen hatalar ya da eksik özelliklere nereden ulasabilirim? - 1.10) Nasýl SQL öðrenebilirim? - 1.11) PostgreSQL 2000 yýlýna uyumlu mudur? - 1.12) Geliþtirme takýmýna nasýl katýlabilirim?? - 1.13) Bir hata raporunu nasýl gönderebilirim? - 1.14) PostgreSQL, diðer VTYS(DBMS) lerle nasýl karþýlaþtýrýlabilir? - 1.15) PostgreSQL'e maddi açýdan nasýl destek olabilirim? - - Kullanýcý/istemci Sorularý - - 2.1) PostgreSQL için ODBC sürücüleri var mý? - 2.2) PostgreSQL'i web sayfalarýnda kullanabilmek için hangi araçlar - bulunmaktadýr? - 2.3) PostgreSQL'in grafik kullanýcý arabirimi var mýdýr? - 2.4) PostgreSQL ile iletiþimi kurabilmek için hangi dilleri - kullanabilirim? - - Yönetimsel Sorular - - 3.1) PostgreSQL'i /usr/local/pgsql dizininden baþka dizinlere nasýl - kurabilirim? - 3.2) Postmaster'ý baþlattýðýmda Bad System Call ya da core dumped - mesajý alýyorum. Neden? - 3.3) Postmaster'ý baþlattýðýmda, IpcMemoryCreate hatasý alýyorum. - Neden? - 3.4) Postmaster'ý, baþlattýðýmda, IpcSemaphoreCreate hatasý alýyorum. - Neden? - 3.5) Diðer bilgisayarlarýn benim PostgreSQL veritabaný sunucuma - baðlantýlarýný nasýl kontrol edebilirim? - 3.6) Veritabaný motorunu daha iyi baþarým icin nasýl ayarlayabilirim? - 3.7) Hangi hata ayýklama özellikleri bulunmaktadýr? - 3.8) Baðlanmaya çalýþýrken, neden "Sorry, too many clients" hatasýný - alýyorum. Neden? - 3.9) pgsql_tmpdizinin içindeki dosyalar nelerdir? - 3.10) PostgreSQL sürümlerini yükseltmek için neden bir dump/reload - iþlemi gerçekleþtirmek zorundayým? - 3.11) Nasýl bir donaným kullanmalýyým?br> - - Ýþletimsel Sorular - - 4.1) Binary cursor ve normal cursor arasýndaki fark nedýr? - 4.2) Sorgunun sadece ilk birkaç satýrýný nasýl SELECT edebilirim? - 4.3) psql'in içinde gördügüm tablolarýn ya da diðer þeylerin listesini - nasýl alabilirim? - 4.4) Bir tablodan bir kolonu nasýl kaldýrabilirim? - 4.5) Bir satýr, tablo ve veritabaný için en fazla büyüklük nedir? - 4.6) Tipik bir metin dosyasýndaki veriyi saklamak için ne kadar disk - alaný gereklidir? - 4.7) Veritabanýnda hangi tablo ya da index'lerin tanýmlandýðýný nasýl - görebilirim? - 4.8) Sorgularým cok yavaþ, ya da index'lerimi kullanmýyorlar. Neden? - 4.9) Query-optimizer'ýn sorgularýmý nasýl deðerlendirdiðini, iþleme - soktuðunu nasýl görebilirim? - 4.10) R-tree index nedir? - 4.11) Genetic Query Optimizer nedir? - 4.12) Düzenli ifade (Regular Expression) aramalarýný ve büyük/küçük - harfe duyarsýz aramalarý nasýl yapabilirim? Bu büyük/küçük harfe - duyarlý aramalar için index'i nasýl kullanabilirim? - 4.13) Bir sorguda, bir alanýn NULL olduðunu nasýl ortaya - çýkarabilirim? - 4.14) Çesitli karakter tipleri arasýndaki farklar nelerdir? - 4.15.1) Nasýl serial/otomatik artan (auto-incrementing) bir alan - yaratabilirim? - 4.15.2) Serial giriþinin deðerini nasýl alabilirim? - 4.15.3) currval() ve nextval() diðer kullanýcýlara sorun yaratmaz mý? - 4.15.4) Neden sequence sayýlarýn transaction iþleminin iptalinden - sonra yeniden kullanýlýyor? Neden sequence/SERIAL kolonumdaki - sayýlarda atlamalar oluyor? - 4.16) OID nedir? TID nedir? - 4.17) PostgreSQL' de kullanýlan bazý terimlerin anlamlarý nelerdir? - 4.18) Neden "ERROR: Memory exhausted in AllocSetAlloc()" hatasýný - alýyorum? - 4.19) Hangi PostgreSQL sürümünü çalýstýrdýðýmý nasýl görebilirim? - 4.20) Neden large-object iþlemlerim, "invalid large obj descriptor" - hatasýný veriyor? - 4.21) Þu andaki zamaný öntanýmlý deðer olarak kabul eden kolonu nasýl - yaratýrým? - 4.22) Neden IN kullanan subquery'lerim çok yavaþ? - 4.23) Outer join iþlemini nasýl yapabilirim? - 4.24) Ayný anda birden fazla veritabanýnda nasýl iþlem yapabilirim? - 4.25) Bir fonksiyondan nasýl çoklu satýr ya da kolon döndürebilirim? - 4.26) Neden Pl/PgSQL fonksiyonlarý içinden güvenli bir þekilde tablo - yaratma/kaldýrma iþlemlerini yapamýyoruz? - 4.27) Hangi þifreleme seçenekleri bulunmaktadýr? - - PostgreSQL Özelliklerini Geniþletmek - - 5.1) Kullanýcý-tanýmlý bir fonksiyon yazdým. psql'de çalýþtýrdýðým - zaman neden core dump ediyor? - 5.2) PostgreSQL'e nasýl yeni veri tipleri/fonksiyonlar ekleyebilirim? - 5.3) Bir tuple döndürmek için bir C fonksiyonunu nasýl yazarým? - 5.4) Bir kaynak dosyasýnda deðiþiklik yaptým. Yeniden derlememe raðmen - deðiþiklik geçerli olmuyor. Neden? - _________________________________________________________________ - - Genel Sorular - - 1.1) PostgreSQL nedir? Nasýl okunur? - - PostgreSQL, Post-Gres-Q-L. olarak okunur - - PostgreSQL, yeni-nesil VTYS araþtýrma prototipi olan POSTGRES - veritabaný yönetim sisteminin geliþtirilmesidir. POSTGRES'in zengin - veri tiplerini ve güçlü veri modelini tutarken, SQL'in geliþtirilmiþ - alt kümesi olan PostQuel dilini kullanýr. PostgreSQL ücretsizdir ve - kaynak kodu açýk daðýtýlýr. - - PostgreSQL, PostgreSQL geliþtirme listesine üye olan bir Internet - geliþtirici takýmý tarafýndan geliþtirilir. Þu andaki koordinatör, - Marc G. Fournier (scrappy@PostgreSQL.org). (Bu takýma nasýl - katýlacagýnýzý öðrenmek için 1.6 numaralý maddeyi okuyunuz.) Bu takým, - tüm PostgreSQL geliþiminden sorumludur. - - PostgreSQL 1.01 sürümünün yazarlarý Andrew Yu ve Jolly Chen idi. - Bunlarýn dýþýnda bir kaç kisi de uyarlama, hata ayýklama ve kodun - geliþtirilmesi için çalýsmýþtý. PostgreSQL'in türediði orijinal - Postgres kodu, lisans, lisansüstü ve akademisyenler tarafýndan, - Professor Michael Stonebraker (University of California, Berkeley) - koordinatörlügünde yazýlmýþtýr. - - Berkley'deki yazýlýmýn adý Postgres idi. SQL uyumluluðu 1995'te - eklenince, adý Postgres 95 oldu. 1996 yýlýnýn sonlarýnda adý - PostgreSQL olarak deðiþtirildi. - - 1.2) PostgreSQL'in haklarý nedir? - - PostgreSQL Data Base Management System - - Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group - Portions Copyright (c) 1994-6 Regents of the University of California - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose, without fee, and without a written - agreement is hereby granted, provided that the above copyright notice - and this paragraph and the following two paragraphs appear in all - copies. - - IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY - FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, - INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND - ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN - ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, - INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE - PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF - CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, - UPDATES, ENHANCEMENTS, OR MODIFICATIONS. - - Üstteki metin klasik açýk-kod lisansý olan BSD lisansýdýr. Kaynak - kodun nasýl kullanýlabileceðine dair sýnýrlamalarý yoktur. Bu lisansý - seviyoruz. Deðiþtirme niyetimiz bulunmamaktadýr. - - 1.3) PostgreSQL, hangi Unix platforlarýnda çalýþýr? - - Genel olarak, modern bir Unix-uyumlu platform PostgreSQL'i - çalýþtýracaktýr. Ayrýntýlý bilgi için kurulum belgelerine - bakabilirsiniz. - - 1.4) Hangi Unix olmayan uyarlamalarý bulunmaktadýr? - - PostgreSQL 8.0 sürümü ile , PostgreSQL artýk Win2000, WinXP ve Win2003 - gibi Microsoft Windows NT tabanlý iþletim sistemlerinde doðal olarak - çalýþmaya baþlamýþtýr. Paketlenmiþ bir kurulum programý, - http://pgfoundry.org/projects/pginstaller. adresinden indirilebilir. - - Ayrýca, http://forge.novell.com adresinde Novell Netware 6 portu - bulunmaktadýr. - - 1.5) PostgreSQL'i nereden indirebilirim? - - PostgreSQL için ana anonim ftp sitesi ftp://ftp.PostgreSQL.org/pub - adresidir. Yansýlar için, ana web sayfamýza bakabilirsiniz. - - 1.6) Nereden destek alabilirim? - - Ana e-posta listesi : pgsql-general@PostgreSQL.org. PostgreSQL - konusundaki tartýþmalara açýktýr. Üye olmak için, aþaðýdaki satýrlarý - e-postanýzýn body kýsmýna (konu kýsmýna deðil) yazýp, - pgsql-general-request@PostgreSQL.org adresine gönderin: -subscribe -end - - Ayný zamanda, bir digest listesi bulunmaktadýr. Bu listeye üye olmak - için, pgsql-general-digest-request@PostgreSQL.org adresine, body - kýsmýnda -subscribe -end - - yazan bir e-posta atmanýz yeterli olacaktýr. - - Digest postalar, ana liste 30k civarýnda e-postaya ulaþtýðýnda üyelere - gönderilmektedir. - - Bug'lar için bir e-posta listesi bulunmaktadýr. Bu listeye üye olmak - için, pgsql-bugs-request@PostgreSQL.org adresine, body kýsmýnda -subscribe -end - - yazan bir e-posta atmanýz yeterli olacaktýr. - - Ayný zamanda, geliþtiriciler için tartýþma listesi bulunmaktadýr. Bu - listeye üye olmak için, pgsql-hackers-request@PostgreSQL.org adresine, - body kýsmýnda -subscribe -end - - yazan bir e-posta atmanýz yeterli olacaktýr. - - Bunun dýþýndaki e-posta listelerine ve PostgreSQL hakkýnda bilgiye, - PostgreSQL WWW ana sayfasýndan ulasabilirsiniz: - http://www.PostgreSQL.org - - Ayný zamanda, EFNet üzerinde, #PostgreSQL adlý bir IRC kanalý - bulunmaktadýr. Bunun için, irc -c '#PostgreSQL' "$USER" - irc.phoenix.net Unix komutunu kullanabilirsiniz. - - Ticari destek veren firmalarýn listesine - - http://www.postgresql.org/users-lounge/commercial-support.html - - adresinden ulaþbilirsiniz. - - 1.7) En son sürüm nedir? - - PostgreSQL'in son sürümü 7.4.6'dýr. - - Her 6-8 ayda ana sürüm çýkarýlmasý planlanmaktadýr. - - 1.8) Hangi belgelere ulaþabilirim? - - Daðýtýmýn içinde, kitapçýklar, kitapçýk sayfalarý ve bazý küçük - örnekler verilmektedir. /doc dizinine bakýnýz. Ayrýca, bu el - kitapçýklarýný online olarak http://www.PostgreSQL.org/docs/ - adresinden inceleyebilirsiniz. - - http://www.PostgreSQL.org/docs/awbook.html ve - http://www.commandprompt.com/ppbook adreslerinde PostgreSQL kitaplarý - bulunmaktadýr. PostgreSQL kitablarýnýn listesine, - http://www.ca.PostgreSQL.org/books/ adresinden ulaþaiblirsiniz. - Ayrýca, PostgreSQL konusundaki teknik makalelere de - http://techdocs.PostgreSQL.org/ adresinden ulaþabilirsiniz. - - psql'in, \d ile baslayan veri tipler, operatorler, fonksiyonlar, - aggregate'ler, vb. ile ilgili güzel komutlarý vardýr. - - Web sitemiz daha fazla belgeyi içermektedir. - - 1.9) Bilinen hatalar ya da eksik özelliklere nereden ulaþabilirim? - - PostgreSQL SQL-92 uyumluluðu içindedir, standartlardan fazla da - özellikleri bulunmaktadýr. Bilinen hatalar, eksik özellikler ve - gelecek ile ilgili planlar için TODO listesine bakýnýz. - - 1.10) Nasýl SQL öðrenebilirim? - - http:/www.PostgreSQL.org/docs/awbook.html adresindeki kitap SQL - ögretecektir. http://www.commandprompt.com/ppbook adresinde de bir - baska PostgreSQL kitabý bulunmaktadýr. - - http://www.intermedia.net/support/sql/sqltut.shtm, - http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM - http://sqlcourse.com ve http://sqlcourse2.com adreslerinde de güzel - belgeler bulunmaktadýr. - - Bir baþkasý da, http://members.tripod.com/er4ebus/sql/index.htm - adresinde bulunan "Teach Yourself SQL in 21 Days, Second Edition" - kitabýdýr. - - Bazý kullanýcýlarýmýz da þu kitabý önermektedirler: "The Practical SQL - Handbook, Bowman, Judith S., et al.,Addison-Wesley". Bazýlarý ise "The - Complete Reference SQL, Groff et al., McGraw-Hill" kitabýný - önermektedirler. - - 1.11) PostgreSQL 2000 yýlýna uyumlu mudur? - - Evet. - - 1.12) Geliþtirme takýmýna nasýl katýlabilirim? - - Öncelikle, en son kaynak kodunu indirin ve web sitemizdeki ya da - daðýtýmýn içindeki PostgreSQL Developer belgesini okuyun. Ardýndan, - pgsql-hackers ve pgsql-patches listelerine üye olun. Üçüncü olarak da, - pgsql-pacthes listesine yüksek kalitede yamalar gönderin. - - PostgreSQL CVS arþivine eriþim izni olan, 10 kadar geliþtirici - bulunmaktadýr. Hepsi defalarca, diðer kiþilerin yaptýðýndan çok daha - yüksek-kaliteli yamalar göndermiþlerdir. Ayrýca biz de bu - geliþtiricilerin ekledikleri yamalarýn yüksek kalitede olduðuna - güveniyoruz. - - 1.13) Bir hata raporunu nasýl gönderebilirim? - - PostgreSQL BugTool sayfasýna gidiniz. O sayfada bir bug bildirmek için - neleri yapmanýz gerektiði anlatýlmýþtýr. - - Ayrýca, ftp://ftp.PostgreSQL.org/pub ftp adresimizde, yeni bir - PostgreSQL sürümü ya da yamasý olup olmadýðýni kontrol ediniz. - - 1.14) PostgreSQL, diger DBMS'lerle nasýl karþýlastýrýlabilir? - - Bir yazýlýmýn gücünü ölçmek için çeþitli yollar vardýr: Yazýlýmýn - özellikleri, baþarýmý, güvenilirliði, desteði ve ücreti. - - Özellikler: - - PostgreSQL mevcut büyük ticari veritabanlarýnýn, transaction, - subselect, trigger, view, foreign key referential integrity ve - sophisticated locking gibi (user-defined types), rules, inheritance ve - lock cakýþmalarýný düþürmek için multi-version uyumluluk özellikleri - bulunmaktadýr. - - Performans (Baþarým): - - PostgreSQL, diðer ticari ve açýk kaynak kodlu veritabanlarýyla yakýn - baþarýmý saðlar. Bazý açýlardan daha hýzlýdýr, diðer açýlardan da - yavaþtýr. MySQL ya da daha zayýf veritabanlarý ile - karþýlaþtýrýldýðýnda, INSERT/UPDATE iþlemlerinde, transaction bazlý - çalýstýðýmýz için daha yavaþýz. MySQL, yukarýdaki "özellikler" - kýsmýnda belirtilenlerden hiç birine sahip deðildir. Biz, baþarýmýmýzý - her sürümde arttýrsak da, esneklik ve geliþmiþ özellikler için - yapýlanmýþ durumdayýz. PostgreSQL'i MySQL ile karþýlaþtýran þu web - sitesine bakabilirsiniz: http://openacs.org/why-not-mysql.html - - Güvenilirlik: - - DBMS'lerin güvenilir olmasý gerketiði, yoksa deðerleri olmayacaðýný - düþünüyoruz. Çok iyi test edilmiþ, dengeli çalýsan minimum sayýda hata - içeren kod sunmaya çalýþýyoruz. Her bir sürüm en az 1 aylýk beta - testlerinden geçirilmektedir. Sürüm geçmiþine bakarsanýz, üretime - hazýr, dengeli ve kararlý kodlar sunduðumuzu görebilirsiniz. Bu - alanda, diðer veritabaný yazýlýmlarýna üstünlüðümüz olduðuna - inanmaktayýz. - - Destek: - - E-posta listemiz, oluþan herhangi bir sorunu çözebilecek büyük sayýda - kullanýcý ve geliþtirici grubunu içerir. Sorununuz için, en az bir - ticari veritabaný kadar rahat çözüm bulabilirsiniz. Gelistiricilere, - kullanýcý grubuna, belgelere ve kaynak koda direk olarak eriþebilme, - PostgreSQL desteðini, diðer DBMS'lere göre daha önemli kýlar. - Gereksinimi olanlara, ticari destek verilebilir. (Destek için 1.6 - bölümüne bakýnýz.) - - Fiyat: - - Ticari ve ticari olmayan tüm kullanýmlarýnýz için PostgreSQL - ücretsizdir. Kodumuzu, yukarýda belirtilen BSD-stili lisanstaki - sýnýrlamalar hariç, ürününüzün içine ekleyebilirsiniz. - - 1.15) PostgreSQL'e maddi açýdan nasýl destek olabilirim? - - PostgreSQL, 1996 yýlýndan beri 1. sýnýf altyapýya sahiptir. Bunun - için, yýllar boyu çalýþýp bu altyapýyý oluþturup yöneten Marc - Fournier'e teþekkürler. - - Bir açýk kaynak kodlu proje için, kaliteli altyapý çok önemlidir. Bu - altyapý, projenin kesilmesini önler ve projenin ilerlemesini - hýzlandýrýr. - - Tabii ki bu altyapý ucuz deðildir. Ýþlerin yürümesi için çeþitli yýlýk - ve anlýk harcamalarýmýz olmaktadýr. Eðer siz ya da þirketinizin bu - çabamýza baðýþta bulunabilecek parasý varsa, lütfen - http://store.pgsql.com/ adresine gidiniz ve baðýþta, hibede bulununuz. - - Web sayfasýnýn 'PostgreSQL Inc.' den bahsetmesine raðmen, "katkýda - bulunanlar" (contributors) maddesi sadece PostgreSQL projesini - desteklemek içindir ve belirli bir þirketin para kaynaðý deðildir. - isterseniz, baðlantý adresine bir çek gönderebilirsiniz. - _________________________________________________________________ - - Kullanýcý/Ýstemci Sorularý - - 2.1) PostgreSQL icin ODBC sürücüleri var mý? - - iki tane ODBC sürücüsü bulunmaktadýr: PsqlODBC ve OpenLink ODBC. - - PsqlODBC'i - http://gborg.postgresql.org/project/psqlodbc/projdisplay.php - adresinden indirebilirsiniz. - - OpenLink ODBC http://www.openlinksw.com adresinden alýnabilir.Bu - sürücü, kendi standart ODBC istemci yazýlýmý ile çalýstýðýndan, - destekledikleri her platformda (Win, Mac, Unix, VMS) PostgreSQL ODBC - bulunmalidir. - - Ücretsiz sürümü olmakla beraber, ticari kalitede destek almak - isteyenlere satmak isteyeceklerdir. Sorularýnýzý lütfen - postgres95@openlink.co.uk adresine gönderiniz. - - 2.2) PostgreSQL'i web sayfalarýnda kullanabilmek için hangi araçlar - bulunmaktadýr? - - http://www.webreview.com/ adresinde, arka planda veritabaný çalýstýran - Web sayfalarý için giriþ seviyesinde bilgi bulunmaktadýr. - - Web ile bütünleþme için, PHP () mükemmel bir arabirim sunar. - - Karmaþýk sorunlar için, çoðu kisi Perl arabirimini ve CGI.pm ya da - mod_perl kullanýr. - - 2.3) PostgreSQL'in grafik kullanýcý arabirimi var mýdýr? - - Çeþitli grafik arabirimlerimiz bulunmaktadýr. Bunlarýn arasýnda, - PgAccess (http://www.pgaccess.org/), PgAdmin II - (http://www.pgadmin.org/, sadece Win32 için), RHDB Admin - (http://sources.redhat.com/rhdb/) ve Rekall - (http://www.thekompany.com/products/rekall/) bulunmaktadýr. Ayrýca, - PostgreSQL için web tabanlý bir arabirim olan PHPPgAdmin - (http://phppgadmin.sourceforge.net/) bulunmaktadýr. - - Daha ayrýntýlý liste için - http://techdocs.postgresql.org/guides/GUITools adresine - bakabilirsiniz. - - 2.4) PostgreSQL ile iletiþimi kurabilmek için hangi dilleri kullanabilirim? - - * C (libpq) - * Embedded C (ecpg) - * Java (jdbc) - * Python (PyGreSQL) - * TCL (libpgtcl) - - Diðerleri için, http://gborg.postgresql.org adresindeki - Drivers/Interfaces bölümüne bakabilirsiniz. - _________________________________________________________________ - - Yönetimsel Sorular - - 3.1) PostgreSQL'i, /usr/local/pgsql dizininden baþka dizinlere nasýl - kurabilirim? - - configure betiðini çalýstýrýrken, --prefix seçeneðini veriniz. - - 3.2) postmaster'i baslattýgýmda, a Bad System Call ya da core dumped mesajý - alýyorum. Neden? - - Bunun birçok nedeni olabilir. Ancak ilk kontrol edilmesi gereken sey, - çekirdeginize System V uzantýlarýnýn kurulu olup olmadýgýný kontrol - etmek olabilir. PostgreSQL shared memory ve semaphores için çekirdek - destegine gereksinim duyar. - - 3.3) postmaster'i baþlattýðýmda, ýpcMemoryCreate hatasý alýyorum. Neden? - - Ya çekirdeðinizde shared memory desteðiniz düzgünce - yapýlandýrýlmamýþtýr, ya da çekirdeðinizdeki mevcut shared memory - miktarýný büyütmeniz gerekecektir. Gereksinim duyacaðýnýz miktar, - mimarinize ve postmaster için ayarladýgýnýz tampon ile backend iþlemi - sayýsýna baðlýdýr. Tüm sistemler için, tamponlar ve iþlemlerde - öntanýmlý sayýlarla, ~ 1MB kadar yere gereksinmeniz olacaktýr. - PostgreSQL 7.3.2 Sistem Yöneticileri Rehberi'ne, shared memory ve - semaphorelar hakkýndaki ayrýntýlý bilgi için bakabilirsiniz. - - 3.4) postmaster'ý baþlattýðýmda, ýpcSemaphoreCreate hatasý alýyorum. Neden? - - Eðer hata, "ýpcSemaphoreCreate: semget failed (No space left on - device)" ise, çekirdeðiniz yeterli semaphore ile yapýlandýrýlmamýþ - demektir. Postgres, her bir potansiyel backend için bir semaphore - gereksinimi duyar. Geçici bir çözüm, postmasterý backend iþlemleri - için daha az miktarda sýnýrla baþlatmak olabilir. -N'i varsayýlan - deðer olan 32'den küçük bir deðerle baþlatýnýz. Daha kalýcý bir çözüm, - çekirdeðinizin SEMMNS ve SEMMNI parametrelerini yükseltmek olacaktýr. - - Çalýþmayan semaphore'lar aðýr veritabaný iþlemlerinde çökme - yaratabilirler. - - Eðer hata mesajýnýz baþka bir þey ise, çekirdeðinizde semaphore - desteðini yapýlandýrmamýþ olabilirsiniz. Shared memory ve - semaphore'lar hakkýndaki daha ayrýntýlý bilgi için PostgreSQL 7.3.2 - Sistem Yöneticileri Rehberi'ne bakabilirsiniz. - - 3.5) Diger bilgisayarlarýn benim PostgreSQL veritabaný sunucuma - baðlantýlarýný nasýl kontrol edebilirim? - - Ön tanýmlý olarak, PostgreSQL sadece yerel makineden Unix domain - sockets kullanarak baðlanýlmasýna izin verir. Diger makineler, - postmaster'a -i etiketini geçirmezseniz ve $PGDATA/pg_hba.conf - dosyasýný düzenleyerek host-based authentication'a olanak vermezseniz, - baðlantý yapamayacaklardýr. - - 3.6) Veritabani motorunu daha iyi baþarým için nasýl ayarlayabilirim? - - Index'ler sorgularý hýzlandýrabilir. EXPLAIN komutu, PostgreSQL'in - sorgunuzu nasýl yorumladýðýný ve hangi index'leri kullandýðýný - görmenize izin verir. - - Eðer cok fazla INSERT iþlemi yapýyorsanýz, bunlarý büyük bir toplu - iþlem dosyasýkullanýp COPY komutu ile veritabanýna girmeyi deneyiniz. - Bu, tekil INSERT'lerden daha hýzlýdýr. Ýkinci olarak, BEGIN - WORK/COMMIT transaction bloðu içinde olmayan ifadeler kendi - transaction'larýndaymýþ gibi düþünülür. Çoklu ifadeleri tek bir - transaction bloðu içinde yapabilirsiniz. Bu, transaction overhead'ini - düþürecektir. Tek bir transaction bloðu içinde birden çok ifadeyi - çalýþtýrmayý deneyebilirsiniz. Bu da ayný þekilde, transaction - overhead'ini düþürür. - - Çeþitli ayarlama seçenekleri mevcuttur. fsync() iþlemini, postmaster'ý - -o -F seçeneði ile baþlatarak devre dýþý býrakabilirsiniz. Bu iþlem, - fsync()'lerin her transactiondan sonra diski flush etmesini - engelleyecektir. - - Ayný zamanda, postmaster'i -B seçeneði ile baþlatýp, backend iþlemleri - tarafýndan kullanýlan shared memory buffers sayýlarýný - arttýrabilirsiniz. Eðer bu parametreyi çok yüksek tutarsanýz, - çekirdeðinizin shared memory bölgesindeki limiti aþma olasýlýðýnýz - yüzünden postmaster baþlayamayabilir. Her bir tampon (buffer) 8K'dýr. - Öntanýmlý sayý ise 64 tampondur. - - Ayný þekilde, backend'in -S seçeneðini geçici sýralamalar için backend - süreçleri tarafýndan kullanýlacak hafýzayý arttýrmak amacýyla - kullanabilirsiniz. -S seçeneði kilobayt cinsinden deðer alýr ve ön - tanýmlý deðeri 512'dir (512 K) - - Tablolardaki veriyi bir index'e eþlemek amacýyla gruplama için CLUSTER - komutunu kullanabilirsiniz. Ayrýntýlý bilgi için CLUSTER komutunun - yardým sayfasýna bakabilirsiniz. - - 3.7) Hangi hata ayýklama özellikleri bulunmaktadýr? - - PostgreSQL, hata ayýklama amacýyla kullanýlabilecek durum bilgisi - rapor eden çeþitli özeliklere sahiptir. - - Öncelikle, configure betiðini --enable-cassert seçeneðiyle - çalýþtýrýrsanýz, bir çok assert() backend calýþmasýný gözlemler ve - beklenmeyen bir durumda programý durdurur. - - Postmaster ve postgres çeþitli hata ayýklama seçeneklerine sahiptir. - Öncelikle, postmaster'ý baþlattýðýnýzda, standart çýktýyý ve hatalarý - bir log dosyasýna yönlendirdiðinize emin olun: -cd /usr/local/pgsql -./bin/postmaster >server.log 2>&1 & - - Bu iþlem PostgreSQL ana dizinine server.log dosyasý yerleþtirecektir. - Bu dosya sunucunun yaþadýðý sorunlar ya da hatalar hakkýnda yararlý - bilgiler içerir. -d seçeneði, hata ayýklama seviyesini belirten bir - rakam ile kullanýlýr. Yüksek hata ayýklama seviyelerinin büyük log - dosyalarý oluþturacaðýný unutmayýnýz. - - Eðer postmaster çalýþmýyorsa, postgres backend'ini komut satýrýndan - çalýþtýrabilir ve SQL ifadenizi direk olarak yazabilirsiniz. Bu sadece - hata ayýklama amacýyla önerilir. Burada, noktalý virgülün deðil de - yeni bir satýrýn sorguyu sonlandýrdýðýný unutmayýnýz. Eðer hata - ayýklama sembolleri ile derlediyseniz, ne olduðunu görmek için bir - hata ayýklayýcý kullanabilirsiniz. backend postmaster'dan - baþlatýlmadýðýndan, eþdeðer bir ortamda çalýþmamaktadýr ve - locking/backend etkileþim sorunlarý artabilir. - - Eðer postmaster çalýþýyorsa, bir pencerede psql'i çalýþtýrýn ve psql - tarafýndan kullanýlan postgres sürecinin süreç numarasýný (PID) bulun. - Postgres süreci ile iliþkilendirmek için bir hata ayýklarýcý kullanýn. - Sorgularý psql aracýlýðý ile çalýþtýrabilirsiniz. Eðer postgres - baþlangýcýnda hata ayýklamak istiyorsanýz, PGOPTIONS="-W n" seçeneðini - ayarlayabilir ve psql'i baþlatabilirsiniz. Bu iþlem, baþlangýcýn n - saniye kadar gecikmesini saðlayacaktýr; böylece hata ayýklayýcýyý - sürece iliþkilendirdikten sonra baþlangýç sürecinin devam etmesini - saðlayabilirsiniz. - - postgres programý hata ayýklama ve baþarým ölçümleri için -s, -A ve -t - seçeneklerine sahiptir. - - 3.8) Baðlanmaya çalýþýrken, neden "Sorry, too many clients" hatasýný - alýyorum? - - Postmaster'ýn eþzamanlý olarak baþlatabileceði backend süreçleri - sýnýrlarýný arttýrmanýz gerekmektedir. - - Ön tanýmlý deðer 32 süreçtir. Bunu, postmaster'ý uygun -N deðeri ile - ya da postgresql.conf dosyasýný düzenleyerek yeniden baþlatmakla - arttýrabilirsiniz. - - Eðer -N deðerini 32'den büyük yapacaksanýz, ayný zamanda -B deðerini - de deðiþtirmeniz gerektiðini unutmayýn. -B, -N'nin en az 2 katý kadar - olmalýdýr; daha iyi baþarým için bu sayýyý daha da arttýrmalýsýnýz. - Yüksek sayýdaki backend süreçleri için, çeþitli çekirdek yapýlandýrma - parametrelerini arttýrmanýz gerekecektir. Yapýlmasý gerekenler, - SHMMAX, SEMMNS, SEMMNI, NPROC, MAXUPRC ve açýlabilecek dosyalarýn - maksimum sayýsý olan NFILE ve NINODE deðerlerini karýþtýrmaktýr. Bunun - nedeni, PostgreSQL'in izin verilen backend süreçlerinin sayýsý - üzerinde bir sýnýrý olmasýdýr. Böylelikle sistem kaynaklarýnýn dýþýna - çýkýlmayacaktýr. - - PostgreSQL'in 6.5 sürümüne kadar, en fazla backend sayýsý 64 idi ve - bunu deðiþtirmek için include/storage/sinvaladt.h dosyasý içindeki - MaxBAckendid sabitini deðiþtirdek sonra yazýlýmý yeniden derlemek - gerekiyordu. - - 3.9) pgsql_tmp dizinin içindeki dosyalar nelerdir? - - Sorgu çalýstýrýcý (query executer) tarafýndan yaratýlan geçici - dosyalardýr. Örnegin, bir sýralama ORDER BY ile yapýlacaksa ve - sýralama backend'in -s parametresinin izin verdiðinden daha fazla - alana gereksinim duyuyorsa, ekstra veriyi tutmak için geçici dosyalar - yaratýlýr. - - Geçici dosyalar, eðer sýralama sýrasýnda backend göçmezse otomatik - olarak silinecektir. Eðer çalýþan durumda bir backend'iniz yoksa, - pg_tempNNN.NN dosyalarýný silmeniz güvenlidir. - - 3.10) PostgreSQL sürümlerini yükseltmek için neden bir dump/reload iþlemi - gerçekleþtirmek zorundayým? - - PostgreSQL takýmý ara sürümlerde sadece küçük deðiþiklikler - yapmaktadýr; bu yüzden 7.2 sürümünden 7.2.1'e yükseltmek dump/restore - iþlemi gerekmemektedir. Ancak, esas sürümlerde (örnek: 7.2'den 7.3'e) - çoðunlukla sistem tablolarýnýn ve veri dosyalarýnýn iç yapýsý - deðiþtirilir. Bu deðiþiklikler çoðunlukla karmaþýktýr; dolayýsýyla - veri dosyalarýnýn geriye dönük uyumluluðu iþlemlerini yapmýyoruz. Dump - iþlemi, veriyi genel biçimde alacaðýndan yeniden yükleme esnasýnda - veri, yeni iç biçime uygun þekilde yerleþtirilecektir. - - Disk biçiminin deðiþmediði sürümlerde, pg_upgrade betiði güncellemenin - bir dump/restore gerektirmeden yapýlmasýný saðlayacaktýr. pg_upgrade - betiðinin o sürüm için bulunup bulunmadýðýný sürüm notlarý içinde - bulabilirsiniz. - - 3.11) Nasýl bir donaným kullanmalýyým? - - PC donanýmý tamamen uyumlu olduðu için, insanlar tüm PC donanýmlarýnýn - ayný kalitede olduðunu düþünürler. Oysa böyle deðildir. ECC RAM, SCSI - ve kaliteli anakartlar daha ucuz donanýmlara göre daha çok - güvenilirlerdir ve baþarýmlarý daha yüksektir. PostgreSQL hemen hemen - tüm donanýmda çalýþabilmektedir, ancak güvenilirlik ve baþarým önemli - ise donaným seçeneklerini çok iyi araþtýrmak gereklidir. E-posta - listelerimi donanýmlarla ilgili sorular ve de ticaret için - kullanýlabilir. - _________________________________________________________________ - - Ýþletimsel Sorular - - 4.1) Binary cursor ve normal cursor arasýndaki fark nedir? - - DECLARE yardým sayfasýna bakýnýz. - - 4.2) Sorgunun sadece ilk birkaç satýrýný nasýl SELECT edebilirim? - - FETCH yardým sayfasýna bakýnýz, ya da SELECT ... LIMIT ... kullanýnýz. - - Ýlk birkaç satýrý almak isteseniz bile, tüm sorgu deðerlendirilmek - durumunda kalýnabilir. ORDER BY içeren bir sorgu düþünün. Eðer ORDER - BY iþe eþleþen bir index varsa, PostgreSQL istenen ilk birkaç satýrý - iþleyebilir, ya da tüm sorgu istenen satýrlar üretilene kadar - iþlenebilir. - - 4.3) psql'in içinde gördügüm tablolarýn ya da diðer þeylerin listesini - nasýl alabilirim? - - pgsql/src/bin/psql/describe.c içindeki psql kaynak kodunu - okuyabilirsiniz. Bu kod, psql'in \ ile baþlayan komutlarýnýn çýktýsýný - olusturan SQL komutlarýný içerir. Ayný zamanda, psql'i -E seçeneði ile - baþlatýp, verdiðiniz komutlarý çalýþtýrmak için yaptýðý sorgularýn - çýktýlarýný görebilirsiniz. - - 4.4) Bir tablodan bir kolonu nasýl kaldýrabilirim? - - Bu özellik (ALTER TABLE DROP COLUMN) 7.3 sürümü ile gelmiþtir. Eski - sürümlerde aþaðýdakileri uygulamalýsýnýz: -BEGIN; -LOCK TABLE old_table; -SELECT ... -- select all columns but the one you want to remove -INTO TABLE new_table -FROM old_table; -DROP TABLE old_table; -ALTER TABLE new_table RENAME TO old_table; -COMMIT; - - 4.5) Bir satýr, tablo ve veritabaný için en fazla büyüklük nedir? - - Sýnýrlar: - - Veritabaný için en fazla büyüklük nedir? - Sýnýrsýz (32 TB'lýk veritabaný bulunmaktadýr) - Bir tablo için en fazla büyüklük nedir? - 32 TB - Bir satýr için en fazla büyüklük nedir? - 1.6 TB - Bir alan için en fazla büyüklük nedir? - 1 GB - Tabloda en fazla satýr sayýsý kaçtýr? - Sýnýrsýz - Bir tabloda olabilecek en fazla kolon sayýsý kaçtýr? - Kolon tiplerine baðlý olarak 250-1600 - Bir tabloda olabilecek en fazla index sayýsý kaçtýr? - Sýnýrsýz - - Tabii ki bunlar aslýnda sýnýrsýz degildir. Burada belirtilen sýnýrlar, - fiziksel sýnýrlarýn haricindeki sýnýrlardýr. Boþ disk alaný, - hafýza/takas alaný na baðlý sýnýrlamalar vardýr. Baþarým, sýnýr - deðerlere yaklaþtýkça, ya da deðerler çok büyük olduðunda düþebilir. - - Bir tablo için büyüklük sýnýrý olan 32 TB, iþletim sisteminin büyük - dosya desteði olup olmamasýndan baðýmsýzdýr. Büyük tablolar, 1 GB'lik - dosyalarda saklandýðý için, dosya sistemi sýnýrlarýnin bir önemi - yoktur. - - Tablo ve kolon sayýsý büyüklükleri, ön tanýmlý blok büyüklüðü 32k ya - çýkarýlarak arttýrýlabilir. - - 4.6) Tipik bir metin dosyasýndaki veriyi saklamak için ne kadar disk alaný - gereklidir? - - Bir PostgreSQL veritabaný, veriyi "flat" metin dosyasýnda saklamak - için gereken alanýn 5 kat fazla disk alanýna gereksinim duyabilir. - - Her satýrýnda bir tamsayý ve metin (text) içeren, 100.000 satýrlýk bir - dosya düþünün. Her satýrýn ortalama 20 byte olduðunu farzedelim. Metin - dosyasý 2.8 MB olacaktýr. Bu veriyi tutan PostgreSQL veritabaný - yaklaþýk 6.4 MB yer kaplayacaktýr. - 36 byte: Her bir satýr baþlýðý (yaklaþýk) -+ 24 byte: Bir tamsayý (int) alaný ve bir metin (text) alaný -+ 4 byte: Sayfada tuple a pointer ----------------------------------------- - 64 byte -> kayýt baþýna - - PostgreSQL'de veri sayfasý (data page) büyüklüðü 8192 byte (8k)dýr, - dolayýsýyla: -8192 byte -> page baþýna -------------------------- = Her bir veritabaný page'ý baþýna 128 satýr (yaklaþýk) - Satýr baþýna 64 byte - -100000 veri satýrý --------------------- = 782 veritabaný sayfasý - 128 satýr - - 782 veritabaný sayfasý * sayfa baþýna 8192 byte = 6,406,144 bytes (6.4 - MB) - - Index'ler çok fazla yere gereksinim duymazlar, ama index'lenmiþ veriyi - tutacaklarýndan büyük olabilirler. - - NULL deðerler bitmapler içinde tutulur; dolayýsýyla çok az yer - kaplarlar. - - 4.7) Veritabanýnda hangi tablo ya da index'lerin tanýmlandýðýný nasýl - görebilirim? - - psql, bu tür bilgileri göstermek için, \ ile baþlayan bir çok komut - sunmaktadýr. \? komutu ile bu komutlarý görebilirsiniz. Ayrýca, - bunlarý açýklayan ve pg_ ile baþlayan çok sayýda sistem tablosu - bulunmaktadýr. Ayný zamanda, psql -l ile tüm veritabanlarýný - listeyelebirsiniz. - - Ayrýca, pgsql/src/tutorial/syscat.source kodunu inceleyebilirsiniz. Bu - dosya, veritabaný sistem dosyalarýndan bilgiyi almak için gereksinim - duyulan bir çok SELECT'leri gösterir. - - 4.8) Sorgularým cok yavaþ, ya da index'lerimi kullanmýyorlar. Neden? - - Indexler her sorgu tarafýndan otomatik olarak kullanýlmazlar. Indexler - eðer bir tablonun büyüklüðü minimum bir büyüklükten fazla ise ve sorgu - tablodaki satýrlarýn sadece küçük bir yüzdesini seçiyorsa kullanýlýr. - Bunun nedeni, index eriþiminin neden olduðu raslansal disk eriþimi nin - diskin ya da tablonun sýralý okunmasýndan daha yavas olabilmesidir. - - Bir index'in kullanýlýp kullanýlmayacaðýný belirlemek için, PostgreSQL - tablo hakkýndaki istatistiklere gereksinmesi vardýr. Bu istatistikler, - VACUUM ANALYZE kullanýlarak toplanýrlar. Optimizer, istatistikleri - kullanarak, tabloda kaç satýr olduðunu ve bilir ve indexin kullanýlýp - kullanýlmayacaðýna daha iyi karar verir. Istatistikler, ayný zamanda - en uygun join sýrasýný ve yöntemini belirlemekte çok önemlidir. - Ýstatistik toplanmasý, tablo içerikleri deðiþtikçe periyodik olarak - yapýlmalýdýr. - - Indexler normalde ORDER BY sorgularý ya da join iþlemlerini - gerçekleþtirmek için kullanýlmazlar. Açýk bir sýralamayý takip eden - sýralý bir arama (sequential scan), büyük bir tabloda index aramasý - yapmaktan genelde daha hýzlýdýr. - Ancak, ORDER BY ile birleþmiþ LIMIT genellikle bir index - kullanacaktýr; çünkü tablonun sadece belirli bir miktarý - döndürülecektir. Aslýnda, MAX() ve MIN() fonksiyonlarýnýn index - kullanmamalarýndan dolayý, bu gibi deðerleri ORDER BY ve LIMIT - kullanarak da almak olasýdýr: - SELECT col - FROM tab - ORDER BY col [ DESC ] - LIMIT 1; - - Eðer optimizer'ýn sýralý arama yapmasýnýn yanlýþ olduðuna - inanýyorsanýz, SET enable_seqscan TO 'off' kullanýn ve index kullanan - aramalarýn hala daha hýzlý olup olmadýðýný görün. - - LIKE ya da ~ gibi operatörler kullanýyorsanýz, index'ler sadece - aþaðýdaki koþullarda kullanýlabilir: - * Arama dizininin baþý, dizinin baþý ile baðlanmalýdýr. Yani, - + LIKE sorgularý % ile baþlamamalýdýr. - + Düzenli ifade sorgularý ^ iþe baþlamamalýdýr. - * Arama metni bir karakter sýnýfý ile baþlayamaz. Örnek: [a-e] - * ILIKE ve ~* gibi büyük/küçük harfe duyarsýz aramalar index'lerden - yararlanmazlar. Onun yerine, bölüm 4.12'de anlatýlan fonksiyonel - index'leri kullanabilirsiniz. - * initdb sýrasýnda öntanýmlý C locale'i kullanýlmalýdýr. - - 4.9) query-optimizer'ýn sorgularýmý nasýl deðerlendirdiðini, iþleme - soktuðunu nasýl görebilirim? - - EXPLAIN yardým sayfasýna bakýnýz. - - 4.10) R-tree index nedir? - - R-tree index, uzaysal (spatial) verileri indexlemek için kullanýlýr. - Bir hash index, dizi aramalarýnda (range search) kullanýlamaz. B-tree - index dizi aramalarýnda sadece tek boyutlu çalýþmaktadýr. R-tree, çok - boyutlu veriyi destekler. Örneðin, eðer bir R-tree index point veri - tipi üzerinde inþa edililebilirse, sistem "select all points within a - bounding rectangle" gibi sorgulara daha verimli yanýtlar verecektir. - - Orijinal R-tree tasarýmýný açýklayan belge: - - Guttman, A. "R-trees: A Dynamic Index Structure for Spatial - Searching." Proceedings of the 1984 ACM SIGMOD Int'l Conf on Mgmt of - Data, 45-57. - - Bu belgeyi, Stonebraker'ýn "Readings in Database Systems" kitabýnda - bulabilirsiniz. - - Gömülü R-tree indexleri poligon ve boxlarý kullanabilir. Teorik - olarak, R-tree indexlerin özelliklerini geniþletmek bir miktar çaba - gerektirir ve bunun nasýl yapýlacaðýna dair bir belgemiz henüz - bulunmamaktadýr. - - 4.11) Genetic Query Optimizer nedir? - - GEQO modülü, Genetic Algorithm(GA) kullanýlarak tablolar - birleþtirildiðinde sorgu optimizasyonunu hýzlandýrýr. - - 4.12) Düzenli ifade (Regular Expression) aramalarýný ve büyük/küçük harfe - duyarsýz aramalarý nasýl yapabilirim? Bu büyük(küçük harfe duyarlý aramalar - için index'i nasýl kullanabilirim? - - ~ operatörü düzenli ifade eþleþmesi ve ~* büyük/küçük harfe duyarsýz - düzenli ifade eþleþmesi yapar. Büyük/küçük harfe duyarlý olan LIKE'ýn - büyük/küçük harfe duyarsýz olan biçimi ILIKE'týr ve PostgreSQL 7.1 - sürümü ile birlikte gelmiþtir. - - Büyük-küçük harfe duyarsýz eþitlik karþýlaþtýrmalarý aþaðýdaki gibi - ifade edilir: -SELECT * -FROM tab -WHERE lower(col) = 'abc' - - Bu standart bir index yaratmayacaktýr. Ancak eðer fonksiyonel bir - index yaratýrsanýz; o kullanýlacaktýr: -CREATE INDEX tabindex on tab (lower(col)); - - 4.13) Bir sorguda, bir alanin "NULL" olduðunu nasýl ortaya çýkarabilirim? - - Kolonu, IS NULL ve IS NOT NULL ile test edebilirsiniz. - - 4.14) Çesitli karakter tipleri arasýndaki farklar nelerdir? - -Veri Tipi Ýç Adý Not --------------------------------------------------- -VARCHAR(n) varchar boyut en büyük uzunluðu verir; sadece verilen kadar veri tutulur. -CHAR(n) bpchar belirtilen uzunluða kadar sonuna boþluk eklenir. -TEXT text uzunlukta herhangi bir üst sýnýr yoktur. -BYTEA bytea variable-length byte array (null-byte safe) -"char" char bir karakter - - Ýç adlarý (internal name) sistem kataloglarýný ve bazý hata - mesajlarýný incelerken göreceksiniz. - - Ýlk dört veri tipi "varlena" tipidir (yani, diskteki ilk 4 bayt - uzunluktur; devamý da veridir.) Dolayýsýyla, kullanýlan gerçek alan, - belirtilen alandan biraz daha büyüktür. Ancak, bu veri tipleri, - sýkýþtýrýlmaya tabi tutulabilir; dolayýsýyla disk alaný beklenilenden - küçük olabilir. VARCHAR(n) büyüklüðü artabilen ama en büyük uzunluðu - sýnýrlý olan verileri saklamak için en uygun yöntemdir. TEXT, 1 GB - büyüklüðe kadar olan verileri tutmak için kullanýlýr. - - CHAR(n), ayný uzunluktaki dizilerin saklanmasý için kullanýmýr. - CHAR(n) belirtilen uzunluða kadar boþluk ile doldurur; ancak - VARCHAR(n) sadece verilen karakterleri saklar. BYTEA binary veri - saklamak içindir; ayrýca "NULL" bayt içeren deðerleri de saklar. - Burada anlatýlan üç veri tipi de benzer baþarým karakteristiklere - sahiptir. - - 4.15.1) Nasýl serial/otomatik artan (auto-incrementing) bir alan - yaratabilirim? - - PostgreSQL'de SERIAL veri tipi vardýr. Bu veri tipi bir sequence ve - kolon üzerinde bir index yaratýr. - - Örnek, aþaðýdaki sorgu: -CREATE TABLE person ( - id SERIAL, - name TEXT -); - - buna çevrilir: -CREATE SEQUENCE person_id_seq; -CREATE TABLE person ( - id INT4 NOT NULL DEFAULT nextval('person_id_seq'), - name TEXT -); -CREATE UNIQUE INDEX person_id_key ON person ( id ); - - Sequenceler hakkýnda daha fazla bilgi için create_sequence yardým - sayfasýna bakabilirsiniz. Her satýrýn OID alanýný tekil bir sayý - olarak alabilirsiniz. Ancak, veritabanýnýzýn dump'ýný alýp yeniden - yüklerseniz, OID deðerlerini koruyabilmek için pg_dump'ýn -o - parametresini ya da "COPY WITH OIDS" seçeneðini kullanmanýz - gerekecektir. - - 4.15.2) SERIAL giriþinin degerini nasýl alabilirim? - - Bir yaklaþým, sequence nesnesindeki SERIAL deðerini, veriyi girmeden - önce nextval() ile alýp, aldýðýnýz deðeri kendinizin girmesidir. - 4.15.1'deki örnek tabloyu kullanarak bir örnek verelim: -new_id = execute("SELECT nextval('person_id_seq')"); - - execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')"); - - Diðer sorgular için new_id'de yeni deðerin saklanmasý gerekir. - Otomatik olarak yaratýlan SEQUENE nesnesinin adý, <tablo adý>_<serial - kolonu adý>_seq þeklinde olacaktýr (< > iþaretleri olmadan). - - Alternatif olarak, atanmýþ SERIAL deðerini, deðer girildikten sonra - currval() fonksiyonu ile alabilirsiniz: - execute("INSERT INTO person (name) VALUES ('Blaise Pascal')"); - new_id = execute("SELECT currval('person_id_seq')"); - - Son olarak, ön tanýmlý deðeri bulmak için INSERT ifadesinden dönen OID - deðerini kullanabilirsiniz; ancak bu en az taþýnabilir çözüm - olacaktýr. Perl'de, Edmund Mergl'in DBD:Pg mödülü ile birlikte DBI - kullanarak, OID deðeri $sth->execute() çalýþtýrýldýktan sonra - $sth->(pg_oid_status) ile alýnabilir. - - 4.15.3) currval() ve nextval() diðer kullanýcýlara sorun yaratmaz mý? - - Hayýr. curval(), tüm kullanýcýlar deðil, backend tarafýndan atanan - geçerli deðeri döndürür. - - 4.15.4) Neden sequence sayýlarý transaction iþleminin iptalinden sonra - yeniden kullanýlýyor? Neden sequence/SERIAL kolonumdaki sayýlarda atlamalar - oluyor? - - Uyumluluðu arttýrmak için, sequence deðerleri çalýþan transaction'lara - gerektiði þekilde aktarýlýr ve transaction bitene kadar o deðer - kilitlenmez. Bu, iptal edilen transaction iþlemleri nedeniyle - boþluklara neden olur. - - 4.16) OID nedir? TID nedir? - - OIDler, tekil satýr numaralarýna PostgreSQL'in yanýtýdýr. - PostgreSQL'de yaratýlan her sayý, tekil bir OID alýr. initdb iþlemi - sýrasýnda yaratýlan tüm OID'ler 16384'ten küçüktür - (backend/access/transam.h). Kullanýcýlar tarafýndan yaratýlan tüm - OID'ler bu sayýya eþit ya da bu sayýdan büyüktür. Varsayýlan durumda, - tüm bu OIDler sadece bir tablo ya da veritabanýnda deðil, tüm - PostgreSQL kurulumunda tekildir. - - PostgreSQL OIDleri, tablolar arasýnda satýrlarý iliþkilendirmek için - kendi iç tablolarýnda kullanýr. Bu OIDler belirli kullanýcý - satýrlarýný belirtmek için kullanabilir ve join iþlemlerinde - kullanýlýr. OID deðerlerini saklamak için OID kolon tipini kullanmanýz - önerinir. Daha hýzlý bir eriþim için, OID alanýnda bir index - yaratabilirsiniz. - - OID'ler yeni satýrlara, tüm veritabanlarý tarafýnda kullanýlan ortak - bir alandan atanýrlar. Eðer OID'i baþka bir deðere eþitlemek - isterseniz ya da tablonun bir kopyasýný orijinal OIDler ile çýkarmak - isterseniz, bu mümkündür: - CREATE TABLE new_table(old_oid oid, mycol int); - SELECT old_oid, mycol INTO new FROM old; - COPY new TO '/tmp/pgtable'; - DELETE FROM new; - COPY new WITH OIDS FROM '/tmp/pgtable'; - - OIDler 4-bit tamsayý olarak saklanýrlar ve 4 milyarda overflow - olacaktýr. Kimse bu sayýya ulaþtýðýna dair bir bilgi iletmedi ve bu - sýnýrý kimse bu sýnýra ulaþmadan kaldýracaðýz. - - TIDler, belirli fiziksel satýrlar block ve offset deðerleri ile - belirtmekte kullanýlýr. TIDler, satýrlar deðiþtiðinde ya da yeniden - yüklendiðinde deðiþirler. Index girdileri tarafýndan fiziksel - satýrlarý göstermek için kullanýlýrlar. - - 4.17) PostgreSQL'de kullanýlan bazý terimlerin anlamlarý nelerdir? - - Kaynak kodun bir kýsmý ve eski belgeler, daha geniþ kullaným alaný - olan terimleri kullanýrlar. Bunlarýn bazýlarý: - * table, relation, class - * row, record, tuple - * column, field, attribute - * retrieve, select - * replace, update - * append, insert - * OID, serial value - * portal, cursor - * range variable, table name, table alias - - Genel veritabaný terimleri, - http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary - /glossary.html adresinde bulunabilir. - - 4.18) Neden "ERROR: Memory exhausted in AllocSetAlloc()" hatasýný alýyorum? - - Sisteminizde sanal belleðinizi tüketmiþ olabilirsiniz, ya da - çekirdeðiniz belli kaynaklar icin düþük bir sýnýra sahip olabilir. - postmaster'ý baþlatmadan önce aþaðýdakileri deneyebilirsiniz: -ulimit -d 262144 -limit datasize 256m - - Kabuðunuza baðlý olarak, bunlardan sadece biri olumlu sonuç - verecektir, ama bu iþlem veri segment sýnýrýnýzý arttýracak, ve belki - de sorgunuzun tamamlanmasýný saðlayacaktýr. Bu komut, varolan iþleme - (current process) ve komut çalýþtýrýldýktan sonraki tüm alt iþlemlere - uygulanýr. Eðer SQL istemcinizle, backend'in çok fazla veri döndürmesi - nedeniyle bir sorun yaþýyorsanýz, bunu istemciyi baþlatmadan önce - deneyiniz. - - 4.19) Hangi PostgreSQL sürümünü çalýþtýrdýðýmý nasýl görebilirim? - - psql arabiriminde, select version(); yazýnýz. - - 4.20) Neden large-object iþlemlerim, "invalid large obj descriptor" - hatasýný veriyor? - - Large object iþlemlerinizin uçlarýna, yani lo_open ... lo_close - komutlarýnýn çevresine, BEGIN WORK ve COMMIT koymanýz gerekmektedir; - - Þu anda, PostgreSQL kurallarý large objectleri transaction commit - edildiðinde kapatarak uygulamaktadýr. Dolayýsýyla handle ile yapýlacak - ilk þey invalid large obj descriptor hatasý ile - sonuçlanacaktýr.Dolayýsýyla çalýþan kodunuz eðer transaction - kullanmazsanýz hata mesajlarý üretecektir. - - Eðer ODBC gibi bir istemci arabirimi kullanýyorsanýz, auto-commit'i - kapatmanýz gerekebilir. - - 4.21) Þu andaki zamaný öntanýmlý deðer olarak kabul eden How do I create a - column that will default to the current time? - - Alttakini kullanabilirsiniz: -CURRENT_TIMESTAMP: -CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP ); - - 4.22) Neden IN kullanan subquery'lerim çok yavas? - - 7.4 sürümünden önce, subqueryler. Eðer subquery sadece birkaç satýr ve - outer query bol sayýda satýr döndürüyorsa, IN en hýzlýsýdýr. Sorgularý - hýzlandýrmak için IN yerine EXISTS kullanýn: -SELECT * - FROM tab - WHERE col1 IN (SELECT col2 FROM TAB2) - - sorgusunu, aþaðýdaki ile deðiþtirin: -SELECT * - FROM tab - WHERE EXISTS (SELECT col2 FROM TAB2 WHERE col1 = col2) - - Bu iþlemin hýzlý olmasý için, subcol'un indexlenmiþ bir kolon olmasý - gerekmektedir. - - 7.4 sürümü ve sonrasýnda, IN aslýnda normal sorgularla ayný karmaþýk - join tekniklerini kullanýr ve EXISTS'e tercih edilir. - - 4.23) Outer join iþlemini nasýl yapabilirim? - - PostgreSQL outer joins islemlerini SQL standartlarýný kullanarak - gerçekleþtirmektedir. Aþaðýda 2 örnek bulunmaktadýr: -SELECT * -FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col); - - ya da -SELECT * -FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col); - - Bu özdeþ sorgular t1.col' i t2.col'ye join ederler ve ayný zamanda - t1'deki unjoined satýrlarý (t2'de eþlenmemiþ olanlarla) döndürürler. - RIGHT JOIN t2'nin unjoined satýrlarýný ekleyecektir. Bir FULL join, - eþleþmiþ bütün satýrlarý ve t1 ile t2'den tüm baðlanmamýþ (unjoined) - satýrlarý alýr. OUTER sözcüðü seçimseldir ve LEFT, RIGHT ve FULL join - iþlemlerinde olduðu kabul edilir. Sýradan join iþlemleri INNER JOIN - olarak adlandýrýlýr. - - Önceki sürümlerde, OUTER JOINler UNION ve NOT IN kullanýlarak simüle - edilebiliyordu. Örneðin, tab1 ve tab2'yi birleþtirirken, aþaðýdaki - sorgu iki tablonun dýþtan baðlanmasýný saðlar: -SELECT tab1.col1, tab2.col2 -FROM tab1, tab2 -WHERE tab1.col1 = tab2.col1 -UNION ALL -SELECT tab1.col1, NULL -FROM tab1 -WHERE tab1.col1 NOT IN (SELECT tab2.col1 FROM tab2) -ORDER BY col1 - - 4.24) Ayný andan birden fazla veritabanýnda nasýl iþlem yapabilirim? - - Mevcut veritabanýnýz dýþýndaki baþka bir veritabanýnýzý sorgulamanýzýn - bir yolu bulunmamaktadýr. Bunun nedeni, PostgreSQL'in veritabanýna - özel sistem kataloglarý yüklemesidir. Bu nedenle, cross-database bir - sorgunun nasýl davranacaðýný kestirmek zordur. - - contrib/dblink fonksiyon çaðrýlarýný kullanarak cross-database - sorgulara izin verir. Tabii ki, bir istemci deðiþik veritabanlarýna - ayný anda eriþim saðlayabilir ve bilgiyi bu þekilde birleþtirebilir. - - 4.25) Bir fonksiyondan nasýl çoklu satýr ya da kolon döndürebilirim? - - 7.3 sürümünde, bir fonksiyondan kolaylýkla çoklu satýr ya da sütun - döndürebilirsiniz. - (http://techdocs.postgresql.org/guides/SetReturningFunctions) - - 4.26) Neden Pl/PgSQL fonksiyonlarý içinden güvenli bir þekilde tablo - yaratma/kaldýrma iþlemlerini yapamýyoruz? - - PL/PgSQL fonksiyon içerikleri cache'ler. Bunun istenmeyen bir tarafý, - eðer bir PL/PgSQL fonksiyonu geçici bir tabloya eriþiyorsa ve bu tablo - ileride kaldýrýlýp yeniden oluþturulduktan sonra fonksiyon yeniden - çaðrýlýrsa, fonksiyon çalýþmayacaktýr; çünkü cache'lenmiþ fonksiyon - hala eski geçici tabloyu gösteriyor olacaktýr. Çözüm, geçici tablo - eriþimleri için PL/PgSQL'de EXECUTE kullanmaktýr. Bu, sorgunun her - seferinde yeniden iþlenmesini saðlayacaktýr. - - 4.27) 4.28) Hangi þifreleme seçenekleri bulunmaktadýr? - - * contrib/pgcrypto SQL sorgularýnda kullanýlabilmesi için þifreleme - fonksiyonlarý içermektedir. - * Ýstemciden sunucuya iletiþimi þifrelemek için, sunucuda ssl - seçeneði postgresql.conf içinde açýk olmalýdýr. Ayrýca,pg_hba.conf - dosyasý içinde host ya da hostssl kaydý mutlaka olmalýdýr ve - istemci sslmode kapatýlmamalýdýr. (Ayný zamanda,PostgreSQL'in - doðal SSL baðlantýlarý dýþýnda ssh ya da ssl gibi 3.parti - þifrelenmiþ veri iletimi de mümkündür.) - * Veritabaný kullanýcý adý ve þifreleri 7.3 sürümü ile birlikte - otomatik olarak þifrelenirler. Önceki sürümlerde, postgresql.conf - içindeki PASSWORD_ENCRYPTION seçeneðini aktif hale getirmeniz - gerekmektedir. - * Sunucunun kendisini þifreli dosya sistemi üzerinde - çalýþtýrabilirsiniz. - _________________________________________________________________ - - PostgreSQL Özelliklerini Geniþletmek - - 5.1) Kullanýcý-tanýmlý bir fonksiyon yazdým. psql'de çalýþtýrdýðým zaman - neden core dump ediyor? - - Sorunun nedeni birden fazla þey olabilir. Kullanýcý-tanýmlý - fonksiyonunuzu stand-alone bir programda çalýþtýrmayý deneyiniz. - - 5.2) PostgreSQL'e nasýl yeni tipler/fonksiyonlar ekleyebilirim? - - Çalýþmalarýnýzý pgsql-hackers e-posta listesine gönderiniz. Kodunuz - incelendikten sonra contrib dizinine konacaktýr. - - 5.3) Bir tuple dondürmek icin bir C fonksiyonunu nasil yazarým? - - PostgreSQL 7.3 sürümü ile birlikte, C, PL/PgSQL ve SQL kullanýlarak - tablo-döndüren fonksiyonlar tamamen desteklenmektedir. Ayrýntýlý bilgi - için PostgreSQL 7.3.2 Kullanýcý Rehberi'ne bakabilrisiniz. Bir örneði - contrib/tablefunc içinde bulabilirsiniz. - - 5.4) Bir kaynak dosyasýnda deðiþiklik yaptým. Yeniden derlememe raðmen - deðiþiklik geçerli olmuyor. Neden? - - Makefile'lar include dosyalarý için tam bir baðýmlýlýk içermezler. - Öncelikle make clean, ardýndan da baska bir make iþlemi yapmanýz - gerekir. GCC kullanýyorsanýz, configure betiðinin --enable-depend - seçeneðini, derleyicinin baðýmlýlýklarý otomatik olarak hesaplamasý - için kullanabilirsiniz. diff --git a/doc/src/FAQ/FAQ_MINGW.html b/doc/src/FAQ/FAQ_MINGW.html deleted file mode 100644 index 159553873abfd5e3a246e3f4887645fe69f5c5d9..0000000000000000000000000000000000000000 --- a/doc/src/FAQ/FAQ_MINGW.html +++ /dev/null @@ -1,82 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> -<html> -<head> - <meta http-equiv="content-type" - content="text/html; charset=ISO-8859-1"> - <title>PostgreSQL Native Win32 Status Report</title> -</head> -<body> -<h1 style="text-align: center;">Compiling PostgreSQL On Native Win32 FAQ<br> -</h1> -<P>Last updated: Thu Oct 14 18:22:57 EDT 2004</P> -<P>Current maintainer: Bruce Momjian <<A href= -"mailto:bruce@momjian.us">bruce@momjian.us</A>><BR> -</P> - -<P>The most recent version of this document can be viewed at <A href= -"http://www.postgresql.org/docs/faqs.FAQ_MINGW.html"> -http://www.postgresql.org/docs/faqs.FAQ_MINGW.html</A>.</P> - -<P>The FAQ Running & Installing PostgreSQL On Native Windows is at <A href= -"http://pginstaller.projects.postgresql.org/faq/FAQ_windows.html"> -http://pginstaller.projects.postgresql.org/faq/FAQ_windows.html</A>.</P> - -<p>The native Win32 port is built from source using MinGW tools. -There is also a precompiled binary installer called <span - style="font-style: italic;">pginstaller</span> which you can find at -from <a href="http://pgfoundry.org/projects/pginstaller">http://pgfoundry.org/projects/pginstaller</a>. -It is a fully native build and uses no additional software like MinGW. -The ready-made installer files are available on the main PostgreSQL ftp servers -in the binary/win32 directory. -<br> -</p> -<h2>Tools for Building Binaries<br> -</h2> -<p> The native Win32 port requires a 32-bit NT-based Microsoft -operating -system, like Windows NT 4, Windows 2000/2003, or Windows XP. (NT 4 -is no longer supported since version 8.2) Earlier -operating systems do not have sufficient infrastructure. Building the -port also -requires MinGW and Msys, which can be downloaded from <a - href="http://www.mingw.org/">http://www.mingw.org/</a>. MinGW is -a Unix-like build environment for Microsoft operating systems. -Msys is a collection of unix tools required to run shell scripts like <i>configure. -</i>Neither is required to run the resulting binaries; they are -needed only for creating the binaries. Work is in progress to support -building using Visual C++ in a future version.<br> -</p> -<h2>Steps For Building Binaries<br> -</h2> -<ul> - <li>Download the nightly snapshot tarball from <a - href="ftp://ftp.postgresql.org/pub/dev">ftp://ftp.postgresql.org/pub/dev</a> -or checkout via CVS (you will need <i>bison, flex,</i> and <i>perl</i> -installed to build from CVS)<br> - </li> - <li>Run <i>configure</i> (you might need to add the --without-zlib -argument, depending on whether you have installed <span - style="font-style: italic;">zlib - </span>on MinGW)</li> - <li>Run <i>make install</i></li> -</ul> -Note: it is suggested that you run <i>psql</i> under <i>CMD.EXE.</i>, -as the Msys console has buffering issues.<br> -<br> -If you make a change that you want to contribute, make a context diff -and send -it to the mailing list. <br> -<h2>Resources</h2> -There are several resources that helped us complete this port:<br> -<ul> - <li>PeerDirect port of PostgreSQL 7.2 to Win32 (<a - href="ftp://momjian.postgresql.org/pub/postgresql/win32/PeerDirect">ftp://momjian.postgresql.org/pub/postgresql/win32/PeerDirect</a>)</li> - <li>CONNX Win32 signal code(<a - href="ftp://momjian.postgresql.org/pub/postgresql/win32/CONNX">ftp://momjian.postgresql.org/pub/postgresql/win32/CONNX</a>)</li> - <li>SRA port of PostgreSQL to Win32 (unfortunately, this is not -publically available because the threaded portion is proprietary)</li> - <li>CHM help files (<a - href="http://www.pgadmin.org/snapshots/help/en_US/pgadmin3.chm">http://www.pgadmin.org/snapshots/help/en_US/pgadmin3.chm</a>)</li> -</ul> -</body> -</html> diff --git a/doc/src/FAQ/FAQ_brazilian.html b/doc/src/FAQ/FAQ_brazilian.html deleted file mode 100644 index 35e7c051e0235528fda2d57f3113dc224d5484dd..0000000000000000000000000000000000000000 --- a/doc/src/FAQ/FAQ_brazilian.html +++ /dev/null @@ -1,942 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> -<HTML> - <HEAD> - <META name="generator" content="HTML Tidy, see www.w3.org"> - <META http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> - <TITLE>FAQ do PostgreSQL</TITLE> - </HEAD> - - <BODY bgcolor="#ffffff" text="#000000" link="#ff0000" vlink="#a00000" - alink="#0000ff"> - <H1>Perguntas Frequentes (FAQ) sobre PostgreSQL</H1> - - <P>Última atualização: Sex Nov 16 10:53:50 EST 2007</P> - - <P>Mantenedor atual: Bruce Momjian (<A href= - "mailto:bruce@momjian.us">bruce@momjian.us</A>) - </P> - - <P>Traduzido por: Euler Taveira de Oliveira (<A href= - "mailto:euler@timbira.com">euler@timbira.com</A>)</P> - - <P>A versão mais recente desse documento pode ser vista em <A href= - "http://www.postgresql.org/files/documentation/faqs/FAQ.html"> - http://www.postgresql.org/files/documentation/faqs/FAQ.html</A> (EN).<BR> - <A href="http://www.postgresql.org/files/documentation/faqs/FAQ_brazilian.html"> - http://www.postgresql.org/files/documentation/faqs/FAQ_brazilian.html</A> (pt_BR).</P> - - <P>Perguntas sobre plataformas específicas são respondidas em <A href= - "http://www.postgresql.org/docs/faq/">http://www.postgresql.org/docs/faq/</A>.</P> - <HR> - - <H2 align="center">Perguntas Gerais</H2> - <A href="#item1.1">1.1</A>) O que é PostgreSQL? Como ele é pronunciado? - O que é Postgres?<BR> - <A href="#item1.2">1.2</A>) Quem controla o PostgreSQL?<BR> - <A href="#item1.3">1.3</A>) Qual é a licença do PostgreSQL?<BR> - <A href="#item1.4">1.4</A>) Quais plataformas o PostgreSQL pode ser executado?<BR> - <A href="#item1.5">1.5</A>) Onde eu posso conseguir o PostgreSQL?<BR> - <A href="#item1.6">1.6</A>) Qual é a última versão?<BR> - <A href="#item1.7">1.7</A>) Onde eu posso conseguir suporte?<BR> - <A href="#item1.8">1.8</A>) Como eu posso submeter um relato de um bug?<BR> - <A href="#item1.9">1.9</A>) Como eu posso saber quais são os bugs conhecidos ou características ausentes?<BR> - <A href="#item1.10">1.10</A>) Que documentação está disponível?<BR> - <A href="#item1.11">1.11</A>) Como eu posso aprender <SMALL>SQL</SMALL>?<BR> - <A href="#item1.12">1.12</A>) Como posso submeter uma correção (patch) ou me juntar a equipe de desenvolvimento?<BR> - <A href="#item1.13">1.13</A>) Como é o PostgreSQL comparado a outros <SMALL>SGBD</SMALL>s?<BR> - <A href="#item1.14">1.14</A>) O PostgreSQL gerenciará as mudanças de horário devido ao horário de verão em vários países?<BR> - - - <H2 align="center">Perguntas sobre Clientes</H2> - <A href="#item2.1">2.1</A>) Quais interfaces estão disponíveis para PostgreSQL?<BR> - <A href="#item2.2">2.2</A>) Quais ferramentas estão disponíveis para utilizar o PostgreSQL com páginas Web?<BR> - <A href="#item2.3">2.3</A>) O PostgreSQL tem interfaces gráficas para interagir com usuário?<BR> - - - <H2 align="center">Perguntas Administrativas</H2> - <A href="#item3.1">3.1</A>) Como eu instalo o PostgreSQL em um local diferente de <I>/usr/local/pgsql</I>?<BR> - <A href="#item3.2">3.2</A>) Como eu controlo conexões de outras máquinas?<BR> - <A href="#item3.3">3.3</A>) Como eu ajusto o servidor de banco de dados para obter uma performance melhor?<BR> - <A href="#item3.4">3.4</A>) Quais características de depuração estão disponíveis?<BR> - <A href="#item3.5">3.5</A>) Por que eu recebo <I>"Sorry, too many clients"</I> quando eu tento conectar?<BR> - <A href="#item3.6">3.6</A>) Qual é o processo de atualização do PostgreSQL?<BR> - <A href="#item3.7">3.7</A>) Que tipo de hardware eu devo usar?<BR> - - - <H2 align="center">Perguntas Operacionais</H2> - <A href="#item4.1">4.1</A>) Como eu faço um <SMALL>SELECT</SMALL> somente dos primeiros registros de uma consulta? Um registro randômico?<BR> - <A href="#item4.2">4.2</A>) Como eu descubro quais tabelas, índices, bancos de dados e usuários estão definidos? Como eu vejo as consultas utilizadas pelo <I>psql</I> para mostrá-los?<BR> - <A href="#item4.3">4.3</A>) Como você muda o tipo de dado de uma coluna?<BR> - <A href="#item4.4">4.4</A>) Qual é o tamanho máximo de um registro, uma tabela e um banco de dados?<BR> - <A href="#item4.5">4.5</A>) Quanto espaço em disco é necessário para armazenar dados de um arquivo texto?<BR> - <A href="#item4.6">4.6</A>) Por que minhas consultas estão lentas? Por que elas não estão utilizando meus índices?<BR> - <A href="#item4.7">4.7</A>) Como eu vejo como o otimizador de consultas está avaliando minha consulta?<BR> - <A href="#item4.8">4.8</A>) 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?<BR> - <A href="#item4.9">4.9</A>) Em uma consulta, como eu detecto se um campo é <SMALL>NULL</SMALL>? Como eu posso concatenar possíveis <SMALL>NULL</SMALL>s? Como eu posso ordenar por um campo que é <SMALL>NULL</SMALL> ou não?<BR> - <A href="#item4.10">4.10</A>) Qual é a diferença entre os vários tipos de dado de caracteres?<BR> - <A href="#item4.11.1">4.11.1</A>) Como eu crio um campo serial/auto incremento?<BR> - <A href="#item4.11.2">4.11.2</A>) Como eu consigo o valor de um campo - <SMALL>SERIAL</SMALL>?<BR> - <A href="#item4.11.3">4.11.3</A>) <I>currval()</I> não lida com condição de corrida com outros usuários?<BR> - <A href="#item4.11.4">4.11.4</A>) 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?<BR> - <A href="#item4.12">4.12</A>) O que é um <SMALL>OID</SMALL>? O que é um <SMALL>CTID</SMALL>?<BR> - <A href="#item4.13">4.13</A>) Por que eu recebo o erro <I>"ERROR: Memory exhausted in AllocSetAlloc()"</I>?<BR> - <A href="#item4.14">4.14</A>) Como eu informo qual versão do PostgreSQL eu estou utilizando?<BR> - <A href="#item4.15">4.15</A>) Como eu crio uma coluna que conterá por padrão a hora atual?<BR> - <A href="#item4.16">4.16</A>) Como eu faço uma junção externa (outer join)?<BR> - <A href="#item4.17">4.17</A>) Como eu faço consultas utilizando múltiplos bancos de dados?<BR> - <A href="#item4.18">4.18</A>) Como eu retorno múltiplos registros ou colunas de uma função?<BR> - <A href="#item4.19">4.19</A>) Por que eu obtenho erros "relation with OID ###### - does not exist" ao acessar tabelas temporárias em funções PL/PgSQL?<BR> - <A href="#item4.20">4.20</A>) Quais soluções de replicação estão disponíveis?<BR> - <A href="#item4.21">4.21</A>) 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?<BR> - - - <HR> - - <H2 align="center">Perguntas Gerais</H2> - - <H3 id="item1.1">1.1) O que é PostgreSQL? Como ele é pronunciado? O que é Postgres?</H3> - - <P>PostgreSQL é pronunciado <I>Post-Gres-Q-L</I>. - (Para os curiosos que querem saber como se diz "PostgreSQL", um - <a href="http://www.postgresql.org/files/postgresql.mp3">arquivo de áudio</a> está disponível).</P> - - <P>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 <SMALL>SGBD</SMALL>s de próxima geração. - PostgreSQL é livre e o código-fonte completo está disponível.</P> - - <P>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 <A href= - "http://www.postgresql.org/docs/faqs.FAQ_DEV.html"> - http://www.postgresql.org/docs/faqs.FAQ_DEV.html</A> - </P> - - <P>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'.</P> - - <H3 id="item1.2">1.2) Quem controla o PostgreSQL?<BR></H3> - - <P>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 <a href="http://www.postgresql.org/docs/faqs.FAQ_DEV.html"> - FAQ do desenvolvedor</A> para obter informações como se envolver com o - desenvolvimento do PostgreSQL.</P> - - <H3 id="item1.3">1.3) Qual é a licença do PostgreSQL?</H3> - - <P>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:</P> - <P>PostgreSQL está sujeito a seguinte licença:</P> - - <P>PostgreSQL Data Base Management System</P> - - <P>Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group - Portions Copyright (c) 1994-1996 Regents of the University of California</P> - - <P>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.</P> - - <P>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.</P> - - <P>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.</P> - - <H3 id="item1.4">1.4) Quais plataformas o PostgreSQL pode ser executado?</H3> - - <P>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.</P> - - <P>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 <a href= "http://pgfoundry.org/projects/pginstaller"> - http://pgfoundry.org/projects/pginstaller</a>. Versões do Windows baseadas no MS-DOS - (Win95, Win98, WinMe) podem executar o PostgreSQL utilizando o Cygwin.</P> - - <p>Há também uma versão para o Novell Netware 6 em - <a href="http://forge.novell.com">http://forge.novell.com</a> - e uma versão para OS/2 (eComStation) em <a href= - "http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2F"> - http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2F</a>.</p> - - <H3 id="item1.5">1.5) Onde eu posso conseguir o PostgreSQL?</H3> - - <P>Via navegador web, utilize <a href="http://www.postgresql.org/ftp/"> - http://www.postgresql.org/ftp/</a> e via ftp, utilize - <A href="ftp://ftp.postgresql.org/pub/"> - ftp://ftp.postgresql.org/pub/</A>.</P> - - - <H3 id="item1.6">1.6) Qual é a última versão?</H3> - - <P>A última versão do PostgreSQL é a versão 8.2.5.</P> - - <P>Nós planejamos lançar versões novas a cada ano com versões - corretivas em alguns meses.</P> - - <H3 id="item1.7">1.7) Onde eu posso conseguir suporte?</H3> - - <P>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 é <a href="http://www.postgresql.org/community/lists/"> - http://www.postgresql.org/community/lists/</a>. As listas <I>general</I> - e <I>bugs</I> são um bom lugar para início.</P> - - <P>O principal canal de IRC é o <I>#postgresql</I> na Freenode (<I>irc.freenode.net</I>). Para se conectar você pode utilizar o comando Unix <code>irc -c '#postgresql' "$USER" irc.freenode.net</code> ou utilizar qualquer outro cliente de IRC. Um canal hispânico (<I>#postgresql-es</I>) e um francês (<I>#postgresqlfr</I>) também existem na mesma rede. Há também um canal PostgreSQL na EFNet.</P> - - <P>Uma lista de empresas que prestam suporte comercial está disponível em <A href= - "http://www.postgresql.org/support/professional_support"> - http://www.postgresql.org/support/professional_support</A>.</P> - - <H3 id="item1.8">1.8) Como eu informo a existência de um bug?</H3> - - <P>Visite o formulário que reporta bugs do PostgreSQL em <A href= - "http://www.postgresql.org/support/submitbug">http://www.postgresql.org/support/submitbug</A>.</P> - <P>Verifique também o nosso ftp <A href= - "ftp://ftp.postgresql.org/pub">ftp://ftp.postgresql.org/pub</A> para - ver se há uma versão mais recente do PostgreSQL.</P> - - <P>Bugs submetidos utilizando o formulário ou informado a qualquer - lista de discussão do PostgreSQL tipicamente gera uma das seguintes - respostas:</P> - <ul> - <li>Não é um bug e o porquê</li> - <li>É um bug conhecido e já está na lista de - <A href="http://www.postgresql.org/docs/faqs.TODO.html">AFAZERES</A></li> - <li>O bug foi corrigido na versão atual</li> - <li>O bug foi corrigido mas não foi empacotado em um versão oficial</li> - <li>Um pedido foi feito para obter informações detalhadas: - <ul> - <li>Sistema Operacional</li> - <li>Versão do PostgreSQL</li> - <li>Exemplo de teste que reproduz o bug</li> - <li>Informações sobre depuração</li> - <li>Saída reconstituidora de vestígios (backtrace) do depurador</li> - </ul> - </li> - <li>O bug é novo. O seguinte pode ocorrer: - <ul> - <li>Uma correção é criada e será incluída na próxima versão</li> - <li>O bug não pode ser corrigido imediatamente e é adicionado - a lista de <A href="http://www.postgresql.org/docs/faqs.TODO.html">AFAZERES</A></li> - </ul> - </li> - </ul> - - <H3 id="item1.9">1.9) Como eu posso saber quais são os bugs conhecidos - ou funcionalidades ausentes?</H3> - - <P>O PostgreSQL suporta um subconjunto extendido do <SMALL>SQL:2003</SMALL>. - Veja nossa lista de <A href="http://www.postgresql.org/docs/faqs.TODO.html">AFAZERES</A> - que contém bugs conhecidos, funcionalidades ausentes e planos futuros.</P> - - <P>Uma solicitação de funcionalidade geralmente resulta em uma das - seguintes respostas:</P> - <ul> - <li>A funcionalidade já está na lista de <A href="http://www.postgresql.org/docs/faqs.TODO.html">AFAZERES</A></li> - <li>A funcionalidade não é desejável porque: - <ul> - <li>Ela duplica uma funcionalidade existente que já segue o - padrão SQL</li> - <li>A funcionalidade aumentará a complexidade do código mas - adicionará pouco benefício</li> - <li>A funcionalidade será insegura ou não-confiável</li> - </ul> - </li> - <li>A nova funcionalidade é adicionada a lista de - <A href="http://www.postgresql.org/docs/faqs.TODO.html">AFAZERES</A></li> - </ul> - - <P>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 <A href="http://www.postgresql.org/docs/faqs.TODO.html">AFAZERES</A> - 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 - <a href="http://www.postgresql.org/developer/sourcecode/">CVS</a>. Até mesmo - as notas de lançamento não listam todas as mudanças feitas no programa.</P> - - <H3 id="item1.10">1.10) Que documentação está disponível?</H3> - - <P>O PostgreSQL inclui vasta documentação, incluindo um manual extenso, - páginas de manuais (man pages) e alguns exemplos teste. Veja o diretório - <I>/doc</I>. Você também pode pesquisar os manuais online em <A href= - "http://www.postgresql.org/docs">http://www.postgresql.org/docs</A>. - </P> - - <P>Há dois livros sobre PostgreSQL disponíveis online em <A href= - "http://www.postgresql.org/docs/books/awbook.html">http://www.postgresql.org/docs/books/awbook.html</A> - e <A href= - "http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook/</A>. - 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 <A href= - "http://www.postgresql.org/docs/books/">http://www.postgresql.org/docs/books/</A>. - Há também uma coleção de artigos técnicos sbore PostgreSQL em <A href="http://www.postgresql.org/docs/techdocs/">http://www.postgresql.org/docs/techdocs/</A>.</P> - - <P>O programa cliente de linha de comando <I>psql</I> tem alguns comandos \d para - mostrar informações sobre tipos, operadores, funções, agregações, etc. - utilize \? - para mostrar os comandos disponíveis.</P> - - <P>Nosso sítio web contém ainda mais documentação.</P> - - <H3 id="item1.11">1.11) Como eu posso aprender <SMALL>SQL</SMALL>?</H3> - - <P>Primeiro, considere os livros específicos sobre PostgreSQL mencionados - acima. Muitos de nossos usuários gostam do <I>The Practical SQL Handbook</I>, - Bowman, Judith S., et al., Addison-Wesley. Outros do <I>The - Complete Reference SQL</I>, Groff et al., McGraw-Hill.</P> - - <P>Há também bons tutoriais disponíveis online: - <UL> - <LI> <A href="http://www.intermedia.net/support/sql/sqltut.shtm">http://www.intermedia.net/support/sql/sqltut.shtm</A> - </LI> - <LI> - <A href="http://sqlcourse.com/">http://sqlcourse.com</A> - </LI> - <LI> - <A href="http://www.w3schools.com/sql/default.asp">http://www.w3schools.com/sql/default.asp</A> - </LI> - <LI><A href= - "http://mysite.verizon.net/Graeme_Birchall/id1.html">http://mysite.verizon.net/Graeme_Birchall/id1.html</A> - </LI> - </UL> - - <H3 id="item1.12">1.12) Como posso submeter uma correção (patch) ou me juntar a equipe de desenvolvimento?</H3> - - <P>Veja a <a href="http://www.postgresql.org/docs/faqs.FAQ_DEV.html"> - FAQ do Desenvolvedor</A>.</P> - - <H3 id="item1.13">1.13) Como é o PostgreSQL comparado a outros <SMALL>SGBD</SMALL>s?</H3> - - <P>Há várias maneiras de se medir um software: funcionalidades, performance, confiabilidade, suporte e preço.</P> - - <DL> - <DT><B>Funcionalidades</B></DT> - - <DD>PostgreSQL tem muitas características presentes em muitos <SMALL>SGBD</SMALL>s 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).<BR> - <BR> - </DD> - - <DT><B>Performance</B></DT> - - <DD>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. - <BR> - </DD> - - <DT><B>Confiabilidade</B></DT> - - <DD>Nós sabemos que um <SMALL>SGBD</SMALL> 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.<BR> - <BR> - </DD> - - <DT><B>Suporte</B></DT> - - <DD>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, <SMALL>SGBD</SMALL>s 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 <SMALL>SGBD</SMALL>s. Há suporte comercial por incidente disponíveis para aqueles que precisam de um. (Veja <A href="#item1.7">seção 1.7 da FAQ</A>).<BR> - <BR> - </DD> - - <DT><B>Preço</B></DT> - - <DD>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.<BR> - <BR> - </DD> - </DL> - - <H3 id="item1.14">1.14) O PostgreSQL gerenciará mudanças no horário devido ao horário de verão em vários países?</H3> - - <P>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.</P> - - <HR> - - <H2 align="center">Perguntas sobre Clientes</H2> - - <H3 id="item2.1">2.1) Quais interfaces estão disponíveis para PostgreSQL?</H3> - - <p>A instalação do PostgreSQL inclui somente as interfaces <SMALL>C</SMALL> e - <SMALL>C</SMALL> 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.</P> - - <P>Algumas linguagens de programação como <SMALL>PHP</SMALL> incluem uma - interface para PostgreSQL. Interfaces para linguagens como Perl, - <SMALL>TCL</SMALL>, Python e muitas outras estão disponíveis em - <a href="http://www.pgfoundry.org">http://www.pgfoundry.org</A>. - </P> - - <H3 id="item2.2">2.2) Quais ferramentas estão disponíveis para utilizar o PostgreSQL com páginas Web?</H3> - - <P>Uma boa introdução para páginas web que utilizam bancos de dados pode ser vista em: - <A href="http://www.webreview.com">http://www.webreview.com</A></P> - - <P>Para integração na Web, PHP (<A - href="http://www.php.net">http://www.php.net</A>) - é uma excelente interface.</P> - - <P>Para casos complexos, muitos usam a Interface Perl e DBD::Pg com CGI.pm - ou mod_perl.</P> - - <H3 id="item2.3">2.3) O PostgreSQL tem interfaces gráficas para iteragir com o usuário?</H3> - - <P>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 <A href="http://www.postgresql.org/docs/techdocs.54"> - Documentação da Comunidade PostgreSQL</A></P> - - <HR> - - <H2 align="center">Perguntas Administrativas</H2> - - <H3 id="item3.1">3.1) Como eu instalo o PostgreSQL em um local diferente de <I>/usr/local/pgsql</I>?</H3> - - <P>Especifique a opção <I>--prefix</I> quando executar o <I>configure</I>.</P> - - <H3 id="item3.2">3.2) Como eu controlo conexões de outras máquinas?</H3> - - <P>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 <I>listen_addresses</I> no <I>postgresql.conf</I>, habilite a autenticação por máquina modificando o arquivo <I>$PGDATA/pg_hba.conf</I> e reinicie o servidor PostgreSQL.</P> - - <H3 id="item3.3">3.3) Como eu ajusto o servidor de banco de dados para obter uma performance melhor?</H3> - - <P>Há três grandes áreas para melhorar a performance em potencial:</P> - - <DL> - <DT><B>Mudança de Consultas</B></DT> - - <DD>Isto involve modificar consultas para obter melhor performance: - <ul> - <li>Criação de índices, incluir expressões e índices parciais</li> - <li>Utilização o COPY ao invés de múltiplos comandos <SMALL>INSERT</SMALL>s</li> - <li>Agrupamento de múltiplos comandos em uma única transação para diminuir - a despesa com efetivações (commit)</li> - <li>Utilização do <SMALL>CLUSTER</SMALL> quando recuperar vários registros de - um índice</li> - <li>Utilização do <SMALL>LIMIT</SMALL> para retornar um subconjunto da saída - da consulta</li> - <li>Utilização de Consultas preparadas</li> - <li>Utilização de <SMALL>ANALYZE</SMALL> para manter as estatísticas do - otimizador corretas</li> - <li>Utilização regular do <SMALL>VACUUM</SMALL> ou <I>pg_autovacuum</I></li> - <li>Remoção de índices durante grande mudança de dados</li> - </ul><BR> - <BR> - </DD> - - <DT><B>Configuração do Servidor</B></DT> - - <DD>Um grande número de configurações que afetam a performance. - Para obter detalhes adicionais, veja <a href= - "http://www.postgresql.org/docs/current/static/runtime-config.html"> - Administration Guide/Server Run-time Environment/Run-time - Configuration</a> para listagem completa, e para - comentários veja <a href= - "http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html"> - http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html</a> - e <a href="http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html"> - http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html</a>. - <BR> - <BR> - </DD> - - <DT><B>Seleção do Hardware</B></DT> - - <DD>O efeito do hardware na performance é detalhado em - <a href="http://www.powerpostgresql.com/PerfList/"> - http://www.powerpostgresql.com/PerfList/</a> e <a - href="http://momjian.us/main/writings/pgsql/hw_performance/index.html"> - http://momjian.us/main/writings/pgsql/hw_performance/index.html</a>. - <BR> - <BR> - </DD> - </DL> - - <H3 id="item3.4">3.4) Quais características de depuração estão disponíveis?</H3> - - <P>Há muitas variáveis de configuração do servidor <CODE>log_*</CODE> - que habilitam a exibição de consultas e estatísticas que podem ser - muito úteis para depuração e medidas de performance.</P> - - <H3 id="item3.5">3.5) Por que eu recebo <I>"Sorry, too many clients"</I> quando eu tento conectar?</H3> - - <P>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 <I>max_connections</I> no <I>postgresql.conf</I> e - reiniciando o <I>postmaster</I>.</P> - - <H3 id="item3.6">3.6) Qual é o processo de atualização do PostgreSQL?</H3> - - <P>Veja <a - href="http://www.postgresql.org/support/versioning">http://www.postgresql.org/support/versioning</a> - para discussão geral sobre atualizações e <a href= - "http://www.postgresql.org/docs/current/static/install-upgrading.html"> - http://www.postgresql.org/docs/current/static/install-upgrading.html</a> - para instruções específicas.</P> - - <H3 id="item3.7">3.7) Que tipo de hardware eu devo usar?</H3> - - <P>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.</P> - - <HR> - - <H2 align="center">Perguntas Operacionais</H2> - - <H3 id="item4.1">4.1) Como eu faço um <SMALL>SELECT</SMALL> somente dos primeiros registros de uma consulta? Um registro randômico?</H3> - - <P>Para obter somente alguns registros, se você sabe o número de - registros necessários ao executar o <SMALL>SELECT</SMALL> utilize - o <SMALL>LIMIT</SMALL>. Se um índice corresponde no <SMALL>ORDER - BY</SMALL> é 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 - <SMALL>SELECT</SMALL>, utilize um cursor e o <SMALL>FETCH</SMALL>.</P> - - <P>Para <SMALL>obter</SMALL> um registro randômico, utilize:</P> -<PRE> - SELECT col - FROM tab - ORDER BY random() - LIMIT 1; -</PRE> - - <H3 id="item4.2">4.2) Como eu descubro quais tabelas, índices, bancos de dados e usuários estão definidos? Como eu vejo as consultas utilizadas pelo <I>psql</I> para mostrá-los?</H3> - - <P>Utilize o comando \dt para ver tabelas no <I>psql</I>. Para obter - uma lista completa dos comandos no psql você pode utilizar \?. - Alternativamente, você pode ler o código-fonte do <I>psql</I> no arquivo - <I>pgsql/src/bin/psql/describe.c</I>, ele contém os comandos <SMALL>SQL</SMALL> - que geram a saída para os comandos de contrabarra do <I>psql</I>. Você - também pode iniciar o <I>psql</I> com a opção <I>-E</I> para que as consultas - utilizadas para executar os comandos que você informou seja exibida. - O PostgreSQL também fornece uma inteface compatível com <SMALL>SQL</SMALL> do - INFORMATION SCHEMA que você pode consultar para obter informação sobre o - banco de dados.</P> - - <P>Há também tabelas do sistema que começam com <I>pg_</I> que os descrevem - também.</P> - - <P>Utilizando o <I>psql -l</I> listará todos os bancos de dados.</P> - - <P>Veja também o arquivo <I>pgsql/src/tutorial/syscat.source</I>. Ele - ilustra muitos dos comandos <SMALL>SELECT</SMALL>s necessários para obter - informação das tabelas de sistema do banco de dados.</P> - - <H3 id="item4.3">4.3) Como você muda o tipo de dado de uma coluna?</H3> - - <P>Mudar o tipo de dado de uma coluna pode ser feito facilmente na versão 8.0 - ou superior com <SMALL>ALTER TABLE ALTER COLUMN TYPE</SMALL>.</P> - - <P>Em versões anteriores, faça isso:</P> -<PRE> - BEGIN; - ALTER TABLE tab ADD COLUMN col_nova <i>novo_tipo_dado</i>; - UPDATE tab SET col_nova = CAST(col_antiga AS <i>novo_tipo_dado</i>); - ALTER TABLE tab DROP COLUMN col_antiga; - COMMIT; -</PRE> - <P>Você pode então querer fazer um <I>VACUUM FULL tab</I> para recuperar - o espaço em disco utilizado pelos registros expirados.</P> - - <H3 id="item4.4">4.4) Qual é o tamanho máximo de um registro, uma tabela e um banco de dados?</H3> - - <P>Estes são os limites:</P> -<BLOCKQUOTE> -<TABLE> -<TR><TD>Tamanho máximo de um banco de dados?</TD><TD>ilimitado (existem bancos de dados de 32 TB)</TD></TR> -<TR><TD>Tamanho máximo de uma tabela?</TD><TD>32 TB</TD></TR> -<TR><TD>Tamanho máximo de um registro?</TD><TD>400 GB</TD></TR> -<TR><TD>Tamanho máximo de um campo?</TD><TD>1 GB</TD></TR> -<TR><TD>Número máximo de registros em uma tabela?</TD><TD>ilimitado</TD></TR> -<TR><TD>Número máximo de colunas em uma tabela?</TD><TD>250-1600 dependendo dos tipos das colunas</TD></TR> -<TR><TD>Número máximo de índices em uma tabela?</TD><TD>ilimitado</TD></TR> -</TABLE> -</BLOCKQUOTE> - - <P>É 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.</P> - - <P>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.</P> - - <P>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.</P> - - <P>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.</P> - - <H3 id="item4.5">4.5) Quanto espaço em disco é necessário para armazenar dados de um arquivo texto?</H3> - - <P>Um banco de dados PostgreSQL irá requerer até cinco vezes a quantidade de espaço requerida para armazenar dados em um arquivo texto.</P> - - <P>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:</P> -<PRE> - 24 bytes: cada cabeçalho de registro (aproximadamente) - 24 bytes: um campo int e um campo texto - + 4 bytes: ponteiro na página para a tupla - ------------------------------------------- - 52 bytes por registro - - O tamanho de uma página de dados no PostgreSQL é 8192 bytes (8 KB), então: - - 8192 bytes por página - ------------------------ = 158 registros por página do banco de dados (arredondado para baixo) - 52 bytes por registro - - 100000 registros de dados - ---------------------------- = 633 páginas do banco de dados (arredondado para cima) - 158 registros por página - -633 páginas do banco de dados * 8192 bytes por página = 5.185.536 bytes (5,2 MB) -</PRE> - - <P>Índices não requerem muito espaço, mas contém - dados que foram indexados, então eles podem ocupar algum espaço.</P> - - <P><SMALL>NULL</SMALL>s são armazenados como bitmaps, então eles - utilizam muito pouco espaço.</P> - - <H3 id="item4.6">4.6) Por que minhas consultas estão lentas? Por que elas não estão utilizando meus índices?</H3> - - <P>Í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.</P> - - <P>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 - <SMALL>VACUUM ANALYZE</SMALL> ou simplesmente o <SMALL>ANALYZE</SMALL>. - 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.</P> - - <P>Índices não são normalmente utilizados para <SMALL>ORDER BY</SMALL> 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, <SMALL>LIMIT</SMALL> combinado com <SMALL>ORDER BY</SMALL> - frequentemente utilizará índice porque somente uma pequena porção da tabela - será retornada.</P> - - <P>Se você acredita que o otimizador está incorreto ao escolher uma busca - sequencial, utilize <CODE>SET enable_seqscan TO 'off'</CODE> e execute a - consulta novamente para ver se uma busca indexada é realmente mais rápida.</P> - - <P>Ao utilizar operadores curinga tais como <SMALL>LIKE</SMALL> ou <I>~</I>, - índices podem ser utilizados somente em algumas condições:</P> - <UL> - <LI>O início da cadeia de caracteres da busca deve ser iniciar com uma - cadeia de caracteres, i.e. - <UL> - <LI>modelos <SMALL>LIKE</SMALL> não devem iniciar com <I>%</I>.</LI> - <LI>modelos <I>~</I> (expressões regulares) devem iniciar com <I>^</I>.</LI> - </UL></LI> - <LI>A cadeia de caracteres utilizada na busca não pode iniciar com a classe de - caracteres e.g. [a-e].</LI> - <LI>Busca que não diferenciam maiúsculas de minúsculas tais como <SMALL>ILIKE</SMALL> e - <I>~*</I> não utilizam índices. Em vez disso, utilize índice de expressão, que - é descrito na seção <a href="#item4.8">4.8</a>.</LI> - <LI>O idioma padrão <I>C</I> deve ser usando durante o <i>initdb</i> - porque não é possível saber o próximo caracter em idiomas que não sejam o C. - Você pode criar um índice especial <CODE>text_pattern_ops</CODE> para tais casos - que funcionam somente para indexação com <SMALL>LIKE</SMALL>. Também é - possível utilizar indexação de busca textual para buscas por palavras. - </LI> - </UL> - - <P>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.</P> - - <H3 id="item4.7">4.7) Como eu vejo como o otimizador de consulta está avaliando a minha consulta?</H3> - - <P>Veja o comando <SMALL>EXPLAIN</SMALL> no manual.</P> - - <H3 id="item4.8">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?</H3> - - <P>O operador <I>~</I> faz avaliação de expressões regulares, - e <I>~*</I> faz avaliação não sensível a maiúsculas - de expressões regulares. A variante não sensível a maiúsculas - do <SMALL>LIKE</SMALL> é chamada de <SMALL>ILIKE</SMALL>.</P> - - <P>Comparações de igualdade não sensíveis a maiúsculas - são normalmente expressadas como:</P> -<PRE> - SELECT * - FROM tab - WHERE lower(col) = 'abc'; -</PRE> - Isso não irá utilizar o índice padrão. Contudo, se - você criar um índice de expressão, ele será utilizado: -<PRE> - CREATE INDEX tabindex ON tab (lower(col)); -</PRE> - <P>Se o índice acima é criado como <SMALL>UNIQUE</SMALL>, 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 <SMALL>CHECK</SMALL> ou um gatilho.</P> - - <H3 id="item4.9">4.9) Em uma consulta, como eu detecto se um campo é <SMALL>NULL</SMALL>? Como eu posso concatenar possíveis <SMALL>NULL</SMALL>s? Como eu posso ordenar por um campo que é <SMALL>NULL</SMALL> ou não?</H3> - - <P>Você testa a coluna com <SMALL>IS NULL</SMALL> e <SMALL>IS - NOT NULL</SMALL>, como a seguir:</P> - -<PRE> - SELECT * - FROM tab - WHERE col IS NULL; -</PRE> - - <P>Para concatenar com possíveis <SMALL>NULL</SMALL>s, utilize <I>COALESCE()</I>, assim:</P> -<PRE> - SELECT COALESCE(col1, '') || COALESCE(col2, '') - FROM tab -</PRE> - - <P>Para ordenar pelo status <SMALL>NULL</SMALL>, utilize os modificadores - <SMALL>IS NULL</SMALL> e <SMALL>IS NOT NULL</SMALL> na sua cláusula - <SMALL>ORDER BY</SMALL>. Coisas que são <I>verdadeiro</I> serão ordenadas acima - das coisas que são <I>falso</I>, então a consulta a seguir irá colocar - entradas NULL no início da lista de resultados:</P> - -<PRE> - SELECT * - FROM tab - ORDER BY (col IS NOT NULL) -</PRE> - - <H3 id="item4.10">4.10) Qual é a diferença entre os vários tipos de dado de caracteres?</H3> -<BLOCKQUOTE> -<TABLE> -<TR><TH>Tipo</TH><TH>Nome Interno</TH><TH>Observação</TH></TR> -<TR><TD>VARCHAR(n)</TD><TD>varchar</TD><TD>tamanho especifica o tamanho -máximo, sem preenchimento</TD></TR> -<TR><TD>CHAR(n)</TD><TD>bpchar</TD><TD>preenchimento em branco para -comprimento fixo específico</TD></TR> -<TR><TD>TEXT</TD><TD>text</TD><TD>nenhum limite superior específico no -comprimento</TD></TR> -<TR><TD>BYTEA</TD><TD>bytea</TD><TD>vetor de bytes de comprimento variável -(seguro a byte nulo)</TD></TR> -<TR><TD>"char"</TD><TD>char</TD><TD>um caracter</TD></TR> -</TABLE> -</BLOCKQUOTE> - - <P>Você verá o nome interno quando examinar o catálogo do sistema e em algumas mensagens de erro.</P> - - <P>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.</P> - - <SMALL>VARCHAR(n)</SMALL> é melhor quando está armazenando cadeias de caracteres de comprimento variável e há um limite de tamanho desta cadeia. <SMALL>TEXT</SMALL> é para cadeias de caracteres de comprimento ilimitado, com o máximo de um gigabyte. - <P><SMALL>CHAR(n)</SMALL> é para armazenar cadeias de caracteres que são todas do mesmo tamanho. <SMALL>CHAR(n)</SMALL> preenche com espaços em branco até o tamanho especificado, enquanto o <SMALL>VARCHAR(n)</SMALL> armazena somente os caracteres fornecidos. <SMALL>BYTEA</SMALL> é para armazenar dados binários, particularmente valores que incluem bytes <SMALL>NULL</SMALL>. Todos os tipos descritos aqui tem características de performance similares.</P> - - <H3 id="item4.11.1">4.11.1) Como eu crio um campo serial/auto incremento?</H3> - - <P>PostgreSQL suporta o tipo de dados <SMALL>SERIAL</SMALL>. Ele cria - automaticamente uma sequência. Por exemplo:</P> -<PRE> - CREATE TABLE pessoa ( - id SERIAL, - nome TEXT - ); -</PRE> - - é automaticamente traduzido em: -<PRE> - CREATE SEQUENCE pessoa_id_seq; - CREATE TABLE pessoa ( - id INT4 NOT NULL DEFAULT nextval('pessoa_id_seq'), - nome TEXT - ); -</PRE> - - <P>Sequências automaticamente criadas são nomeadas como - <<i>tabela</i>>_<<i>colunaserial</i>>_<i>seq</i>, onde - <i>tabela</i> e <i>colunaserial</i> são os nomes da tabela e - da coluna serial, respectivamente. Veja a página sobre - <I>create_sequence</I> no manual para obter informações - adicionais sobre sequências. - - <H3 id="item4.11.2">4.11.2) Como eu consigo o valor de um campo - <SMALL>SERIAL</SMALL>?</H3> - - <P>A maneira mais simples de obter o próximo valor <SMALL>SERIAL</SMALL> - de uma sequência é com <SMALL>RETURNING</SMALL>. Utilizando o - exemplo da tabela em <A href="#item4.11.1">4.11.1</A>, ele ficaria assim: - -<PRE> - INSERT INTO pessoa (nome) VALUES ('Blaise Pascal') RETURNING id; -</PRE> - - Você também pode chamar <I>nextval()</I> e utilizar o valor no - <SMALL>INSERT</SMALL> ou chamar <I>currval()</I> <I>após</I> o - <SMALL>INSERT</SMALL>. - - <H3 id="item4.11.3">4.11.3) <I>currval()</I> não lida com condição de corrida com outros usuários?</H3> - - <P>Não. <I>currval()</I> retorna o valor atual atribuido pela sua sessão, e não por todas as sessões.</P> - - <H3 id="item4.11.4">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?</H3> - - <P>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.</P> - - <H3 id="item4.12">4.12) O que é um <SMALL>OID</SMALL>? O que é um <SMALL>CTID</SMALL>?</H3> - - <P>Se uma tabela é criada com <SMALL>WITH OIDS</SMALL>, cada registro recebe um <SMALL>OID</SMALL> único. - O<SMALL>ID</SMALL>s 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 O<SMALL>ID</SMALL>s começam a ser duplicados. O PostgreSQL - utiliza <SMALL>OID</SMALL>s para ligar as tabelas do sistema.</P> - - <P>Para numerar registros nas tabelas do usuários, é melhor utilizar - <SMALL>SERIAL</SMALL> ao invés de O<SMALL>ID</SMALL>s porque - sequências <SMALL>SERIAL</SMALL> são únicas somente em uma tabela; e - são menos propícias a atingir o limite. - <SMALL>SERIAL8</SMALL> está disponível para armazenar valores de sequências - com oito bytes.</P> - - <P>C<SMALL>TID</SMALL>s são utilizados para identificar registros físicos - específicos com valores de block e deslocamento. C<SMALL>TID</SMALL>s mudam - após registros serem modificados ou recarregados. Eles são utilizados por - índices para apontar registros físicos.</P> - - <H3 id="item4.13">4.13) Por que eu recebo o erro <I>"ERROR: Memory exhausted in AllocSetAlloc()"</I>?</H3> - - <P>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:</P> -<PRE> - ulimit -d 262144 - limit datasize 256m -</PRE> - - 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 <SMALL>SQL</SMALL> porque o processo servidor retornou muitos dados, tente-o antes de iniciar o cliente. - - <H3 id="item4.14">4.14) Como eu informo qual versão do PostgreSQL eu estou utilizando?</H3> - - <P>No <I>psql</I>, digite <CODE>SELECT version();</CODE></P> - - <H3 id="item4.15">4.15) Como eu crio uma coluna que conterá por padrão a hora atual?</H3> - - <P>Utilize <I>CURRENT_TIMESTAMP</I>:</P> -<PRE> - CREATE TABLE teste (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP ); -</PRE> - - <H3 id="item4.16">4.16) Como eu faço uma junção externa (outer join)?</H3> - - <P>PostgreSQL suporta junções externas utilizando a sintaxe padrão do SQL. Aqui temos dois exemplos:</P> -<PRE> - SELECT * - FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col); -</PRE> - or -<PRE> - SELECT * - FROM t1 LEFT OUTER JOIN t2 USING (col); -</PRE> - - <P>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 <SMALL>RIGHT</SMALL> - adicionaria registros que não foram juntados da tabela t2. - Uma junção completa (<SMALL>FULL</SMALL>) retornaria os registros - combinados mais todos os registros não combinados de t1 e t2. - A palavra <SMALL>OUTER</SMALL> é opcional e é assumida nas - junções <SMALL>LEFT</SMALL>, <SMALL>RIGHT</SMALL> e <SMALL>FULL</SMALL>. - Junções ordinárias são chamadas junções - internas (<SMALL>INNER</SMALL>).</P> - - <H3 id="item4.17">4.17) Como eu faço consultas utilizando múltiplos bancos de dados?</H3> - - <P>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.</P> - - <P><I>contrib/dblink</I> 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.</P> - - <H3 id="item4.18">4.18) Como eu retorno múltiplos registros ou colunas de uma função?</H3> - - <P>É fácil utilizando funções que retornam conjunto, - <a href="http://www.postgresql.org/docs/techdocs.17"> - http://www.postgresql.org/docs/techdocs.17</a>.</P> - - <H3 id="item4.19">4.19) Por que eu obtenho erros "relation with OID ###### - does not exist" ao acessar tabelas temporárias em funções PL/PgSQL?</H3> - - <P>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 <SMALL>EXECUTE</SMALL> para acesso a tabelas temporárias no PL/PgSQL. Isto irá fazer com que a consulta seja avaliada toda vez.</P> - - <P>Este problema não ocorre no PostgreSQL 8.3 ou superior.</P> - - <H3 id="item4.20">4.20) Quais soluções de replicação estão disponíveis?</H3> - - <P>Embora "replicação" seja um termo simples, há várias tecnologias para fazer - replicação, com vantagens e desvantagens para cada um.</P> - - <P>Replicação mestre/escravo permite que um mestre receba consultas de leitura e - escrita, enquanto os escravos só podem aceitar leitura/consultas <SMALL>SELECT</SMALL>. - A solução mais popular de replicação mestre-escravo para PostgreSQL disponível livremente - é <A href="http://main.slony.info">Slony-I</A>.</P> - - <P>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. <A href="http://pgfoundry.org/projects/pgcluster/">PGCluster</a> - é a solução mais popular disponível livremente para PostgreSQL.</P> - - <P>Há também soluções de replicação comerciais e baseadas em hardware disponíveis - que suportam uma variedade de modelos de replicação.</P> - - <H3 id="item4.21">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?</H3> - - <P>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 <a - href="http://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS"> - como especificado</a>, 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: - <UL> - <LI>Evitar colocar aspas no identificador ao criar tabelas</LI> - <LI>Utilizar somente caracteres minúsculos em identificadores</LI> - <LI>Colocar aspas em identificadores ao referenciá-los nas consultas</LI> - </UL> - - </BODY> -</HTML> - diff --git a/doc/src/FAQ/FAQ_chinese_simp.html b/doc/src/FAQ/FAQ_chinese_simp.html deleted file mode 100644 index db0a0c306a051f45d8b67b773a5001512ca44007..0000000000000000000000000000000000000000 --- a/doc/src/FAQ/FAQ_chinese_simp.html +++ /dev/null @@ -1,1011 +0,0 @@ -<!DOCTYPE html - PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> - -<html> -<head> - - <title>PostgreSQL 常è§é—®é¢˜ï¼ˆFAQ)</title> -</head> - - - -<body> - -<h1> PostgreSQL 常è§é—®é¢˜ï¼ˆFAQ) </h1> - - -<p> 最近更新:2007 å¹´ 1 月 30 æ—¥ 星期二 17:37:01 EST <br/> - ä¸æ–‡ç‰ˆæœ€è¿‘更新:2007 å¹´ 2 月 1 æ—¥ 星期四 12:55:04 CST -</p> -<p> ç›®å‰ç»´æŠ¤äººå‘˜ï¼šBruce Momjian (<a href="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</a>)<br/> - ä¸æ–‡ç‰ˆç»´æŠ¤äººå‘˜ï¼šDaojing.Zhou(<a href="mailto:doudou586@gmail.com">doudou586@gmail.com</a>) -</p> - -<p> - 本文档的最新版本å¯ä»¥åœ¨ - <a href="http://www.postgresql.org/files/documentation/faqs/FAQ.html">http://www.postgresql.org/files/documentation/faqs/FAQ.html</a>查看。 -</p> -<p> - 与æ“作系统平å°ç›¸å…³çš„问题å¯åœ¨<a href="http://www.postgresql.org/docs/faq/">http://www.postgresql.org/docs/faq/</a>里找到ç”案。<br/> -</p> -<hr/> - -<h2><a name="常è§é—®é¢˜"></a> 常è§é—®é¢˜ </h2> - - -<p> -<a href="#1.1">1.1</a>)PostgreSQL 是什么?该怎么å‘音?<br/> -<a href="#1.2">1.2</a>)è°æŽ§åˆ¶å’Œç®¡ç†PostgreSQL ?<br/> -<a href="#1.3">1.3</a>)PostgreSQL的版æƒæ˜¯ä»€ä¹ˆï¼Ÿ<br/> -<a href="#1.4">1.4</a>)PostgreSQLå¯ä»¥è¿è¡Œåœ¨å“ªäº›æ“作系统平å°ä¸Šï¼Ÿ<br/> -<a href="#1.5">1.5</a>)我从哪里能得到PostgreSQL?<br/> - -<a href="#1.6">1.6</a>)最新版的PostgreSQL 是什么?<br/> -<a href="#1.7">1.7</a>)我从哪里能得到对PostgreSQL 的支æŒï¼Ÿ<br/> -<a href="#1.8">1.8</a>)我如何æ交一个BUG报告?<br/> -<a href="#1.9">1.9</a>)我如何了解已知的 BUG 或暂缺的功能?<br/> -<a href="#1.10">1.10</a>)能够获å–的最新文档有哪些?<br/> -<a href="#1.11">1.11</a>)æˆ‘åº”è¯¥æ€Žæ ·å¦ä¹ SQL ?<br/> - -<a href="#1.12">1.12</a>)如何æ交补ä¸æˆ–æ˜¯åŠ å…¥å¼€å‘队ä¼ï¼Ÿ<br/> -<a href="#1.13">1.13</a>)PostgreSQL 和其他数æ®åº“系统比起æ¥å¦‚何?<br/> -<a href="#1.14">1.14</a>)PostgreSQL å¯ä»¥å¤„ç†æœ€è¿‘å„个国家å¤æ—¶åˆ¶çš„å˜åŒ–å—?<br/> -</p> - -<h2><a name="用户客户端问题"></a> 用户客户端问题 </h2> -<p> -<a href="#2.1">2.1</a>)我们å¯ä»¥ç”¨ä»€ä¹ˆè¯è¨€å’ŒPostgreSQL 打交é“?<br/> -<a href="#2.2">2.2</a>)有什么工具å¯ä»¥æŠŠPostgreSQL 用于 Web 页é¢ï¼Ÿ<br/> - -<a href="#2.3">2.3</a>)PostgreSQL 拥有图形用户界é¢å—?<br/> -</p> - -<h2><a name="系统管ç†é—®é¢˜"></a> 系统管ç†é—®é¢˜ </h2> -<p> -<a href="#3.1">3.1</a>)æˆ‘æ€Žæ ·æ‰èƒ½æŠŠPostgreSQL 装在 /usr/local/pgsql 以外的地方?<br/> -<a href="#3.2">3.2</a>)我如何控制æ¥è‡ªå…¶ä»–电脑的连接?<br/> -<a href="#3.3">3.3</a>)æˆ‘æ€Žæ ·è°ƒæ•´æ•°æ®åº“æœåŠ¡å™¨ä»¥èŽ·å¾—更好的性能?<br/> - -<a href="#3.4">3.4</a>)PostgreSQL 里å¯ä»¥èŽ·å¾—ä»€ä¹ˆæ ·çš„è°ƒè¯•ç‰¹æ€§ï¼Ÿ<br/> -<a href="#3.5">3.5</a>)为什么在试图连接登录时收到“Sorry, too many clients†消æ¯ï¼Ÿ<br/> -<a href="#3.6">3.6</a>)PostgreSQLçš„å‡çº§è¿‡ç¨‹æœ‰å“ªäº›å†…容?<br/> -<a href="#3.7">3.7</a>)(使用PostgreSQL)我需è¦ä½¿ç”¨ä»€ä¹ˆè®¡ç®—机硬件 ?<br/> -</p> - -<h2><a name="æ“作问题"></a> æ“作问题 </h2> - -<p> -<a href="#4.1">4.1</a>) 如何åªé€‰æ‹©ä¸€ä¸ªæŸ¥è¯¢ç»“æžœçš„å¤´å‡ è¡Œï¼Ÿæˆ–æ˜¯éšæœºçš„一行?<br/> -<a href="#4.2">4.2</a>) 如何查看表ã€ç´¢å¼•ã€æ•°æ®åº“以åŠç”¨æˆ·çš„定义?如何查看<i>psql</i>里用到的查询指令并显示它们?<br/> -<a href="#4.3">4.3</a>) 如何更改一个å—段的数æ®ç±»åž‹ï¼Ÿ<br/> -<a href="#4.4">4.4</a>) å•æ¡è®°å½•ï¼Œå•ä¸ªè¡¨ï¼Œä¸€ä¸ªæ•°æ®åº“的最大é™åˆ¶æ˜¯å¤šå°‘?<br/> -<a href="#4.5">4.5</a>) å˜å‚¨ä¸€ä¸ªå…¸åž‹çš„文本文件里的数æ®éœ€è¦å¤šå°‘ç£ç›˜ç©ºé—´ï¼Ÿ<br/> - -<a href="#4.6">4.6</a>) 为什么我的查询很慢?为什么这些查询没有利用索引?<br/> -<a href="#4.7">4.7</a>) 我如何æ‰èƒ½çœ‹åˆ°æŸ¥è¯¢ä¼˜åŒ–å™¨æ˜¯æ€Žæ ·è¯„ä¼°å¤„ç†æˆ‘的查询的?<br/> -<a href="#4.8">4.8</a>) æˆ‘æ€Žæ ·åšæ£åˆ™è¡¨è¾¾å¼æœç´¢å’Œå¤§å°å†™æ— 关的æ£åˆ™è¡¨è¾¾å¼æŸ¥æ‰¾ï¼Ÿæ€Žæ ·åˆ©ç”¨ç´¢å¼•è¿›è¡Œå¤§å°å†™æ— 关查找?<br/> -<a href="#4.9">4.9</a>) åœ¨ä¸€ä¸ªæŸ¥è¯¢é‡Œï¼Œæˆ‘æ€Žæ ·æ£€æµ‹ä¸€ä¸ªå—段是å¦ä¸º NULL?我如何æ‰èƒ½å‡†ç¡®æŽ’åºè€Œä¸è®ºæŸå—段是å¦å«NULL值?<br/> -<a href="#4.10">4.10</a>) å„ç§å—符类型之间有什么ä¸åŒï¼Ÿ<br/> -<a href="#4.11.1">4.11.1</a>) æˆ‘æ€Žæ ·åˆ›å»ºä¸€ä¸ªåºåˆ—å·åž‹æˆ–是自动递增的å—段?<br/> - -<a href="#4.11.2">4.11.2</a>) 我如何获得一个æ’入的åºåˆ—å·çš„值?<br/> -<a href="#4.11.3">4.11.3</a>) åŒæ—¶ä½¿ç”¨ currval() 会导致和其他用户的冲çªæƒ…况å—?<br/> -<a href="#4.11.4">4.11.4</a>) 为什么ä¸åœ¨äº‹åŠ¡å¼‚常ä¸æ¢åŽé‡ç”¨åºåˆ—å·å‘¢ï¼Ÿä¸ºä»€ä¹ˆåœ¨åºåˆ—å·å—段的å–值ä¸å˜åœ¨é—´æ–呢?<br/> -<a href="#4.12">4.12</a>) 什么是 OID?什么是 CTID ?<br/> -<a href="#4.13">4.13</a>) 为什么我收到错误信æ¯â€œ<i>ERROR: Memory exhausted in AllocSetAlloc()</i>â€ï¼Ÿ<br/> - -<a href="#4.14">4.14</a>) 我如何æ‰èƒ½çŸ¥é“所è¿è¡Œçš„ PostgreSQL 的版本?<br/> -<a href="#4.15">4.15</a>) 我如何创建一个缺çœå€¼æ˜¯å½“å‰æ—¶é—´çš„å—段?<br/> -<a href="#4.16">4.16</a>) 如何执行外连接(outer join)查询?<br/> -<a href="#4.17">4.17</a>) 如何执行涉åŠå¤šä¸ªæ•°æ®åº“的查询?<br/> -<a href="#4.18">4.18</a>) 如何让函数返回多行或多列数æ®ï¼Ÿ<br/> -<a href="#4.19">4.19</a>) 为什么我在使用PL/PgSQL函数å˜å–临时表时会收到错误信æ¯â€œrelation with OID ##### does not existâ€ï¼Ÿ<br/> - -<a href="#4.20">4.20</a>) ç›®å‰æœ‰å“ªäº›æ•°æ®å¤åˆ¶æ–¹æ¡ˆå¯ç”¨ï¼Ÿ<br/> -<a href="#4.21">4.21</a>) 为何查询结果显示的表å或列å与我的查询è¯å¥ä¸çš„ä¸åŒï¼Ÿä¸ºä½•å¤§å†™çŠ¶æ€ä¸èƒ½ä¿ç•™ï¼Ÿ<br/> -</p> - -<hr/> - -<h2><a name="常è§é—®é¢˜"></a> 常è§é—®é¢˜ </h2> - -<h3> <a name="1.1"></a>1.1)PostgreSQL 是什么?该怎么å‘音? </h3> - - -<p>PostgreSQL 读作 <i>Post-Gres-Q-L</i>,有时候也简称为<i>Postgres</i> 。想å¬ä¸€ä¸‹å…¶å‘音的人员å¯ä»Žè¿™é‡Œä¸‹è½½å£°éŸ³æ–‡ä»¶ï¼š - <a href="http://www.postgresql.org/files/postgresql.mp3">MP3 æ ¼å¼</a> 。 -</p> - -<p>PostgreSQL 是é¢å‘ç›®æ ‡çš„å…³ç³»æ•°æ®åº“ç³»ç»Ÿï¼Œå®ƒå…·æœ‰ä¼ ç»Ÿå•†ä¸šæ•°æ®åº“系统的所有功能,åŒæ—¶åˆå«æœ‰å°†åœ¨ä¸‹ä¸€ä»£ DBMS 系统的使用的增强特性。PostgreSQL 是自由å…费的,并且所有æºä»£ç 都å¯ä»¥èŽ·å¾—。 -</p> - -<p>PostgreSQL çš„å¼€å‘队ä¼ä¸»è¦ä¸ºå¿—愿者,他们é布世界å„地并通过互è”网进行è”系,这是一个社区开å‘项目,它ä¸è¢«ä»»ä½•å…¬å¸æŽ§åˆ¶ã€‚ - å¦‚æƒ³åŠ å…¥å¼€å‘队ä¼ï¼Œè¯·å‚è§å¼€å‘人员常è§é—®é¢˜ï¼ˆFAQ) - <a href="http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html">http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html</a> - -</p> - -<h3> <a name="1.2"></a>1.2) è°æŽ§åˆ¶PostgreSQL ? </h3> -<p> - å¦‚æžœä½ åœ¨å¯»æ‰¾PostgreSQL的掌门人,或是什么ä¸å¤®å§”员会,或是什么所属公å¸ï¼Œä½ åªèƒ½æ”¾å¼ƒäº†---å› ä¸ºä¸€ä¸ªä¹Ÿä¸å˜åœ¨ï¼Œä½†æˆ‘们的确有一个 - æ ¸å¿ƒå§”å‘˜ä¼šå’ŒCVS管ç†ç»„,但这些工作组的设立主è¦æ˜¯ä¸ºäº†è¿›è¡Œç®¡ç†å·¥ä½œè€Œä¸æ˜¯å¯¹PostgreSQL进行独å å¼æŽ§åˆ¶ï¼ŒPostgreSQLé¡¹ç›®æ˜¯ç”±ä»»ä½•äººå‡ - å¯å‚åŠ çš„å¼€å‘äººå‘˜ç¤¾åŒºå’Œæ‰€æœ‰ç”¨æˆ·æŽ§åˆ¶çš„ï¼Œä½ æ‰€éœ€è¦åšçš„就是订阅邮件列表,å‚与讨论å³å¯ï¼ˆè¦å‚与PostgreSQLçš„å¼€å‘è¯¦è§ - <a href="http://www.postgresql.org/docs/faqs.FAQ_DEV.html"> å¼€å‘人员常问题 (Developer's FAQ) </a>获å–ä¿¡æ¯ï¼‰ã€‚ -</p> - - -<h3> <a name="1.3"></a>1.3)PostgreSQL的版æƒæ˜¯ä»€ä¹ˆ? </h3> - - -<p>PostgreSQLçš„å‘布éµä»Žç»å…¸çš„BSD版æƒã€‚它å…许用户ä¸é™ç›®çš„地使用PostgreSQLï¼Œç”šè‡³ä½ å¯ä»¥é”€å”®PostgreSQL而ä¸å«æºä»£ç 也å¯ä»¥ï¼Œå”¯ä¸€çš„é™åˆ¶å°±æ˜¯ä½ ä¸èƒ½å› 软件自身问题而å‘我们追诉法律责任,å¦å¤–就是è¦æ±‚所有的软件拷è´ä¸é¡»åŒ…括以下版æƒå£°æ˜Žã€‚下é¢å°±æ˜¯æˆ‘们所使用的BSD版æƒå£°æ˜Žå†…容:</p> - -<p>PostgreSQLæ•°æ®åº“管ç†ç³»ç»Ÿ</p> - -<p> 部分版æƒï¼ˆc)1996-2005,PostgreSQL å…¨çƒå¼€å‘å°ç»„,部分版æƒï¼ˆc)1994-1996 åŠ å·žå¤§å¦è‘£äº‹</p> - -<p> (Portions copyright (c) 1996-2005,PostgreSQL Global Development Group Portions Copyright (c) 1994-6 Regents of the University of California)</p> - -<p> - å…许为任何目的使用,拷è´ï¼Œä¿®æ”¹å’Œåˆ†å‘这个软件和它的文档而ä¸æ”¶å–任何费用, - å¹¶ä¸”æ— é¡»ç¾ç½²å› æ¤è€Œäº§ç”Ÿçš„è¯æ˜Žï¼Œå‰æ是上é¢çš„版æƒå£°æ˜Žå’Œæœ¬æ®µä»¥åŠä¸‹é¢ä¸¤æ®µæ–‡å—出现在所有拷è´ä¸ã€‚ - -</p> - -<p> - (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.) -</p> - -<p> - åœ¨ä»»ä½•æƒ…å†µä¸‹ï¼ŒåŠ å·žå¤§å¦éƒ½ä¸æ‰¿æ‹…å› ä½¿ç”¨æ¤è½¯ä»¶åŠå…¶æ–‡æ¡£è€Œå¯¼è‡´çš„对任何当事人的直接的, - é—´æŽ¥çš„ï¼Œç‰¹æ®Šçš„ï¼Œé™„åŠ çš„æˆ–è€…ç›¸ä¼´è€Œç”Ÿçš„æŸå,包括利益æŸå¤±çš„责任,å³ä½¿åŠ 州大å¦å·²ç»å»ºè®®äº†è¿™äº›æŸå¤±çš„å¯èƒ½æ€§æ—¶ä¹Ÿæ˜¯å¦‚æ¤ã€‚ -</p> - -<p> - (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.) -</p> - - -<p> - åŠ å·žå¤§å¦æ˜Žç¡®æ”¾å¼ƒä»»ä½•ä¿è¯ï¼ŒåŒ…括但ä¸å±€é™äºŽæŸä¸€ç‰¹å®šç”¨é€”的商业和利益的éšå«ä¿è¯ã€‚ - 这里æ供的这份软件是基于“当作是â€çš„åŸºç¡€çš„ï¼Œå› è€ŒåŠ å·žå¤§å¦æ²¡æœ‰è´£ä»»æ供维护,支æŒï¼Œæ›´æ–°ï¼Œå¢žå¼ºæˆ–者修改的æœåŠ¡ã€‚ -</p> - -<p> - (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.)<br/> - -</p> - -<h3> <a name="1.4"></a>1.4)PostgreSQL å¯ä»¥è¿è¡Œåœ¨å“ªäº›æ“作系统平å°ä¸Šï¼Ÿ </h3> - -<p> 一般说æ¥ï¼Œä»»ä½•çŽ°åœ¨å¯¹ UNIX 兼容的æ“作系统之上都能è¿è¡ŒPostgreSQL 。在安装指å—里列出了å‘布时ç»è¿‡æ˜Žç¡®æµ‹è¯•çš„å¹³å°ã€‚</p> - - -<p>PostgreSQl也å¯ä»¥ç›´æŽ¥è¿è¡Œåœ¨åŸºäºŽå¾®è½¯Windows-NTçš„æ“作系统,如Win2000 SP4,WinXP å’Œ Win2003,已制作完æˆçš„安装包å¯ä»Ž - <a href="http://pgfoundry.org/projects/pginstaller">http://pgfoundry.org/projects/pginstaller</a>下载,基于MSDOSçš„Windowsæ“作系统 - (Win95,Win98,WinMe)需è¦é€šè¿‡Cygwin模拟环境è¿è¡ŒPostgreSQL。 -</p> - -<p> - åŒæ—¶ä¹Ÿæœ‰ä¸€ä¸ªä¸ºNovell Netware 6å¼€å‘的版本å¯ä»Ž <a href="http://forge.novell.com" target="_top">http://forge.novell.com</a>获å–,为OS/2(eComStation)å¼€å‘的版本å¯ä»Ž - <a href="http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2F" target="_top">http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2F</a> 下载。 - -</p> - -<h3> <a name="1.5"></a>1.5) 我从哪里能得到PostgreSQL? </h3> - -<p> - 通过æµè§ˆå™¨å¯ä»Ž<a href="http://www.postgresql.org/ftp/">http://www.postgresql.org/ftp/</a>下载,也å¯é€šè¿‡FTP,从 - <a href="ftp://ftp.PostgreSQL.org/pub/">ftp://ftp.PostgreSQL.org/pub/</a>站点下载。 -</p> - -<h3> <a name="1.6"></a>1.6) 最新版的PostgreSQL是什么? </h3> - - -<p>PostgreSQL 最新的版本是版本 8.2.1 。</p> - -<p>我们计划æ¯å¹´å‘布一个主è¦å‡çº§ç‰ˆæœ¬ï¼Œæ¯å‡ 个月å‘布一个å°ç‰ˆæœ¬ã€‚</p> - - -<h3> <a name="1.7"></a>1.7) 我从哪里能得到对PostgreSQL的支æŒï¼Ÿ </h3> - -<p>PostgreSQL社区通过邮件列表为其大多数用户æ供帮助,订阅邮件列表的主站点是 <a href="http://www.postgresql.org/community/lists/" target="_top">http://www.postgresql.org/community/lists/</a>ï¼Œä¸€èˆ¬æƒ…å†µä¸‹ï¼Œå…ˆåŠ å…¥<i>General</i> 或 <i>Bug</i>邮件列表是一个较好的开始。 -</p> - -<p> - 主è¦çš„IRC频é“是在FreeNode(<i>irc.freenode.net</i>)çš„<i>#postgresql</i>,为了连上æ¤é¢‘é“,å¯ä»¥ä½¿ç”¨UNIX程åºircï¼Œå…¶æŒ‡ä»¤æ ¼å¼ï¼š - irc -c '#postgresql' "$USER" irc.freenode.net ,或者使用其他IRC客户端程åºã€‚在æ¤ç½‘络ä¸è¿˜å˜åœ¨ä¸€ä¸ªPostgreSQL的西ç牙频é“(<i>#postgersql-es</i>)和法è¯é¢‘é“ - (<i>#postgresql-fr</i>)。åŒæ ·åœ°ï¼Œåœ¨EFNET上也有一个PostgreSQL的交æµé¢‘é“。 -</p> - -<p> - å¯æ供商业支æŒçš„å…¬å¸åˆ—表å¯åœ¨<a href="http://techdocs.postgresql.org/companies.php" target="_top">http://techdocs.postgresql.org/companies.php</a>æµè§ˆã€‚ - -</p> - - - -<h3> <a name="1.8"></a>1.8) 我如何æ交一个BUG报告? </h3> - -<p> - å¯è®¿é—® <a href="http://www.postgresql.org/support/submitbug">http://www.postgresql.org/support/submitbug</a>,填写Bugä¸ŠæŠ¥è¡¨æ ¼å³å¯ï¼ŒåŒæ ·ä¹Ÿå¯è®¿é—®ftp站点<a href="ftp://ftp.PostgreSQL.org/pub/">ftp://ftp.PostgreSQL.org/pub/</a> æ£€æŸ¥æœ‰æ— æ›´æ–°çš„PostgreSQL版本或补ä¸ã€‚ -</p> - - -<p> -通过使用Bugæäº¤è¡¨æ ¼æˆ–æ˜¯å‘å¾€PostgreSQL邮件列表的Bug通常会有以下之一回å¤ï¼š -</p> - -<ul> -<li>所æ交内容ä¸æ˜¯ä¸€ä¸ªBugåŠå…¶ä¸æ˜¯Bugçš„åŽŸå› ã€‚</li> -<li>所æ交内容是一个已知的Bug并且已ç»åŠ å…¥TODO待处ç†ä»»åŠ¡åˆ—表。</li> -<li>所æ交的Bug已在当å‰ç‰ˆæœ¬ä¸è¢«ä¿®æ£ã€‚</li> -<li>所æ交的Bug已修æ£ä½†å°šæœªå°†è¡¥ä¸åŠ 入现在的å‘布软件包。</li> -<li>请求æ交者æ供更详细的信æ¯ï¼š - <ul> - <li>æ“作系统</li> - - <li>PostgreSQL版本</li> - <li>å¯é‡çŽ°Bug的测试案例</li> - <li>调试信æ¯</li> - <li>调试跟踪输出</li> - </ul> -</li> -<li>所æ交内容是一个新Bug,将执行以下工作: - <ul> - - <li>创建一个新补ä¸å¹¶å°†å…¶åŠ 入下一个主è¦ç‰ˆæœ¬æˆ–是å°çš„改进版本ä¸ã€‚</li> - <li>æ¤Bugæš‚æ—¶ä¸èƒ½ä¿®æ£ï¼Œå°†è¢«åŠ 至TODO待处ç†ä»»åŠ¡åˆ—表。</li> - </ul> -</li> -</ul> - - -<h3> <a name="1.9"></a>1.9) 我如何了解已知的 BUG 或暂缺的功能? </h3> -<p>PostgreSQL 支æŒä¸€ä¸ªæ‰©å±•çš„ SQL:2003 çš„å集。å‚阅我们的<a href="http://www.postgresql.org/docs/faqs.TODO.html">TODO</a> 列表,了解已知Bug列表ã€æš‚缺的功能和将æ¥çš„å¼€å‘计划。 - -</p> - -<p>è¦æ±‚å¢žåŠ æ–°åŠŸèƒ½çš„ç”³è¯·é€šå¸¸ä¼šæ”¶åˆ°ä»¥ä¸‹ä¹‹ä¸€çš„å›žå¤ï¼š</p> - -<ul> -<li>è¯¥åŠŸèƒ½å·²åŠ å…¥TODO待处ç†ä»»åŠ¡åˆ—表。</li> -<li>该功能ä¸æ˜¯å¿…é¡»çš„ï¼Œå› ä¸ºï¼š - <ul> - <li>它是现有的且符åˆSQLæ ‡å‡†çš„æŸåŠŸèƒ½çš„é‡å¤ã€‚</li> - <li>è¯¥åŠŸèƒ½æ€§ä¼šå¤§å¤§å¢žåŠ ä»£ç çš„å¤æ‚程åºï¼Œè€Œå¸¦æ¥çš„好处是微ä¸è¶³é“的。</li> - <li>该功能是ä¸å®‰å…¨æˆ–是ä¸å¯é 的。</li> - - </ul> -</li> -<li>è¯¥åŠŸèƒ½å°†è¢«åŠ å…¥TODO待处ç†ä»»åŠ¡åˆ—表。</li> -</ul> - -<p> -PostgreSQLä¸ä½¿ç”¨Bugè·Ÿè¸ªç³»ç»Ÿï¼Œå› ä¸ºæˆ‘ä»¬å‘现在邮件列表ä¸ç›´æŽ¥å›žå¤ä»¥åŠä¿è¯TODO任务列表总是处于最新状æ€çš„æ–¹å¼å·¥ä½œæ•ˆçŽ‡ä¼šæ›´é«˜ä¸€äº›ã€‚事实上,Bugä¸ä¼šåœ¨æˆ‘们的软件ä¸å˜åœ¨å¾ˆé•¿æ—¶é—´ï¼Œ -对影å“很多用户的Bug也总是很快会被修æ£ã€‚唯一能找到所有改进ã€æ高和修æ£çš„地方是CVS的日志信æ¯ï¼Œå³ä½¿æ˜¯åœ¨è½¯ä»¶æ–°ç‰ˆæœ¬çš„å‘布信æ¯ä¸ä¹Ÿä¸ä¼šåˆ—出æ¯ä¸€å¤„的软件更新。 -</p> - - - -<h3> <a name="1.10"></a>1.10) 能够获å–的最新文档有哪些? </h3> - - -<p>PostgreSQL包å«å¤§é‡çš„文档,主è¦æœ‰è¯¦ç»†çš„å‚考手册,手册页和一些的测试例å。å‚è§ /doc 目录(译注:应为 $PGHOME/doc)。 - ä½ è¿˜å¯ä»¥åœ¨çº¿æµè§ˆPostgreSQL的手册,其网å€æ˜¯ï¼š<a href="http://www.PostgreSQL.org/docs">http://www.PostgreSQL.org/docs</a>。 -</p> - -<p> - 有两本关于PostgreSQL的书在线æ供,在 - <a href="http://www.PostgreSQL.org/docs/awbook.html">http://www.PostgreSQL.org/docs/awbook.html</a> - å’Œ <a href="http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook/</a> 。 - 也有大é‡çš„PostgreSQL书ç±å¯ä¾›è´ä¹°ï¼Œå…¶ä¸æœ€ä¸ºæµè¡Œçš„一本是由Korry Douglas编写的。在 - <a href="http://techdocs.PostgreSQL.org/techdocs/bookreviews.php">http://techdocs.PostgreSQL.org/techdocs/bookreviews.php</a>上 - 上有大é‡æœ‰å…³PostgreSQL书ç±çš„简介。 - 在 <a href="http://techdocs.PostgreSQL.org/">http://techdocs.PostgreSQL.org/</a>上收集了有关PostgreSQL的大é‡æŠ€æœ¯æ–‡ç« 。 - -</p> - -<p> - 客户端的命令行程åº<i>psql</i>有一些以 \d 开头的命令,å¯æ˜¾ç¤ºå…³äºŽç±»åž‹ï¼Œæ“作符,函数,èšåˆç‰ä¿¡æ¯ï¼Œä½¿ç”¨ \? å¯ä»¥æ˜¾ç¤ºæ‰€æœ‰å¯ç”¨çš„命令。 -</p> - -<p> - 我们的 web 站点包å«æ›´å¤šçš„文档。 -</p> - - - -<h3> <a name="1.11"></a>1.11) æˆ‘åº”è¯¥æ€Žæ ·å¦ä¹ SQL ? </h3> - -<p> - 首先考虑上述æ到的与PostgreSQL相关的书ç±ï¼Œå¦å¤–一本是<i>Teach Yourself SQL in 21 Days, Second Edition</i>,其详细介ç»çš„网å€æ˜¯ - <a href="http://members.tripod.com/er4ebus/sql/index.htm">http://members.tripod.com/er4ebus/sql/index.htm</a>, - 我们的许多用户喜欢<i>The Practical SQL Handbook</i>, Bowman, Judith S. 编写,Addison-Wesleyå…¬å¸å‡ºç‰ˆï¼Œå…¶ä»–的则喜欢 - <i>The Complete Reference SQL</i>, Groff 编写,McGraw-Hillå…¬å¸å‡ºç‰ˆã€‚ -</p> - -<p>在下列网å€ä¸Šä¹Ÿæœ‰å¾ˆå¥½çš„教程,他们是</p> -<ul> -<li><a href="http://www.intermedia.net/support/sql/sqltut.shtm">http://www.intermedia.net/support/sql/sqltut.shtm</a></li> -<li><a href="http://sqlcourse.com/">http://sqlcourse.com.</a></li> -<li><a href="http://www.w3schools.com/sql/default.asp">http://www.w3schools.com/sql/default.asp</a></li> -<li><a href="http://mysite.verizon.net/Graeme_Birchall/id1.html">http://mysite.verizon.net/Graeme_Birchall/id1.html</a></li> -</ul> - - - -<h3> <a name="1.12"></a>1.12)如何æ交补ä¸æˆ–æ˜¯åŠ å…¥å¼€å‘队ä¼ï¼Ÿ </h3> -<p> - 详è§<a href="http://www.postgresql.org/docs/faqs.FAQ_DEV.html"> å¼€å‘人员常è§é—®é¢˜ (Developer's FAQ) </a>。 - -</p> - - -<h3> <a name="1.13"></a>1.13)PostgreSQL和其他数æ®åº“系统比起æ¥å¦‚何? </h3> - -<p> -è¯„ä»·è½¯ä»¶æœ‰å¥½å‡ ç§æ–¹æ³•ï¼šåŠŸèƒ½ï¼Œæ€§èƒ½ï¼Œå¯é 性,支æŒå’Œä»·æ ¼ã€‚ -</p> - -<dl> - <dt><b>功能</b></dt> - <dd>PostgreSQL 拥有大型商用数æ®åº“最多的功能,例如:事务,å查询,触å‘器,视图,外键å‚考完整性和å¤æ‚çš„é”定ç‰ã€‚ - 我们还有一些它们没有的特性,如用户定义类型,继承,规则和多版本并行控制以å‡å°‘é”的争用ç‰ã€‚<br/> - - </dd> - - <dt><b>性能</b></dt> - <dd>PostgreSQL和其他商用和开æºçš„æ•°æ®åº“具有类似的性能。对æŸäº›å¤„ç†å®ƒæ¯”较快,对其他一些处ç†å®ƒæ¯”较慢。 - 与其他数æ®åº“相比,我们的性能优劣通常在 +/- 10%之间。<br/> - </dd> - - <dt><b>å¯é 性</b></dt> - <dd> - - 我们都知é“æ•°æ®åº“必须是å¯é 的,å¦åˆ™å®ƒå°±ä¸€ç‚¹ç”¨éƒ½æ²¡æœ‰ã€‚我们努力åšåˆ°å‘布ç»è¿‡è®¤çœŸæµ‹è¯•çš„,缺陷最少的稳定代ç 。æ¯ä¸ªç‰ˆæœ¬è‡³å°‘有一个月的 beta - 测试时间,并且我们的å‘布历å²æ˜¾ç¤ºæˆ‘们å¯ä»¥æ供稳定的,牢固的,å¯ç”¨äºŽç”Ÿäº§ä½¿ç”¨çš„版本。我们相信在这方é¢æˆ‘们与其他的数æ®åº“软件是相当的。<br/> - </dd> - - <dt><b>支æŒ</b></dt> - <dd> - 我们的邮件列表æ供一个éžå¸¸å¤§çš„å¼€å‘人员和用户的组以帮助解决所碰到的任何问题。我们ä¸èƒ½ä¿è¯æ€»æ˜¯èƒ½è§£å†³é—®é¢˜ï¼Œç›¸æ¯”之下,商用数æ®åº“软件也并ä¸æ˜¯æ€»èƒ½å¤Ÿæ供解决方法。 - 直接与开å‘人员,用户群,手册和æºç¨‹åºæŽ¥è§¦ä½¿PostgreSQL的支æŒæ¯”其他数æ®åº“还è¦å¥½ã€‚还有一些商业性的全é¢æŠ€æœ¯æ”¯æŒï¼Œå¯ä»¥ç»™æ供给那些需è¦çš„人。(å‚阅1.7 å°èŠ‚)<br/> - </dd> - - - <dt><b>ä»·æ ¼</b></dt> - <dd> - 我们对任何用途都å…费,包括商用和éžå•†ç”¨ç›®çš„。 - ä½ å¯ä»¥ä¸åŠ é™åˆ¶åœ°å‘ä½ çš„äº§å“é‡ŒåŠ å…¥æˆ‘ä»¬çš„ä»£ç ,除了那些我们在上é¢çš„版æƒå£°æ˜Žé‡Œå£°æ˜Žçš„ BSD版æƒä¹‹å¤–的内容。 - </dd> - -</dl> - - -<h3><a name="1.14"></a>1.14) PostgreSQLå¯ä»¥å¤„ç†æœ€è¿‘å„个国家å¤æ—¶åˆ¶çš„å˜åŒ–å—?</h3> - -<p>PostgreSQL 8.0之å‰çš„版本是使用æ“作系统ä¸çš„时区数æ®åº“æ¥å¤„ç†å¤æ—¶åˆ¶çš„ä¿¡æ¯ï¼Œè‡ª8.0版åŠä»¥åŽçš„版本PostgreSQL会自身å«æœ‰æœ€æ–°çš„时区信æ¯ã€‚</p> - - -<hr/> - - -<h2><a name="用户客户端问题"></a> 用户客户端问题 </h2> - - -<h3> <a name="2.1"></a>2.1) 我们å¯ä»¥ç”¨ä»€ä¹ˆè¯è¨€å’ŒPostgreSQL打交é“? </h3> - -<p>PostgreSQL(缺çœæƒ…况)åªå®‰è£…有C和内嵌å¼C的接å£ï¼Œå…¶ä»–的接å£éƒ½æ˜¯ç‹¬ç«‹çš„项目,能够分别下载,这些接å£é¡¹ç›®ç‹¬ç«‹çš„好处 - 是他们å¯ä»¥æœ‰å„自的å‘布计划和å„自独立的开å‘组。 -</p> -<p> - 一些编程è¯è¨€å¦‚PHP都有访问PostgreSQL的接å£ï¼ŒPerlã€TCLã€Python以åŠå¾ˆå¤šå…¶ä»–è¯è¨€çš„接å£åœ¨ - <a href="http://gborg.postgresql.org" target="_top">http://gborg.postgresql.org</a>网站上的<i>Drivers/Interfaces</i>å°èŠ‚å¯æ‰¾åˆ°ï¼Œ - 并且通过Internet很容易æœç´¢åˆ°ã€‚ -</p> - - - - -<h3> <a name="2.2"></a>2.2) 有什么工具å¯ä»¥æŠŠPostgreSQL用于 Web 页é¢ï¼Ÿ </h3> -<p> - 一个介ç»ä»¥æ•°æ®åº“为åŽå°çš„挺ä¸é”™çš„站点是:<a href="http://www.webreview.com">http://www.webreview.com</a>。 -</p> -<p> - 对于 Web 集æˆï¼ŒPHP 是一个æžå¥½çš„接å£ã€‚它在<a href="http://www.php.net/">http://www.php.net/</a>。 - -</p> -<p> - 对于å¤æ‚的任务,很多人采用 Perl 接å£å’Œ 使用CGI.pmçš„DBD::Pg 或 mod_perl 。 -</p> - - -<h3> <a name="2.3"></a>2.3)PostgreSQL拥有图形用户界é¢å—? </h3> -<p> - 商业用户或是开æºå¼€å‘人员能找到很多的有关PostgreSQLçš„GUI图形工具软件,在 <a href="http://www.postgresql.org/docs/techdocs.54">PostgreSQL社区文档</a>有一个详细的列表。 -</p> - - -<hr/> - - - -<h2><a name="系统管ç†é—®é¢˜"></a> 系统管ç†é—®é¢˜ </h2> - -<h3> <a name="3.1"></a>3.1)æˆ‘æ€Žæ ·èƒ½æŠŠPostgreSQL装在 /usr/local/pgsql 以外的地方? </h3> -<p> - 在è¿è¡Œ configure æ—¶åŠ ä¸Š --prefix 选项。 -</p> - - - -<h3> <a name="3.2"></a>3.2) 我如何控制æ¥è‡ªå…¶ä»–电脑的连接? </h3> -<p> - 缺çœæƒ…况下,PostgreSQLåªå…许æ¥è‡ªæœ¬æœºä¸”通过 unix 域套接å—或TCP/IPæ–¹å¼çš„连接。 - ä½ åªæœ‰åœ¨ä¿®æ”¹äº†é…置文件<i>postgresql.conf</i>ä¸çš„<i>listen_addresses</i>,且也在é…置文件<i>$PGDATA/pg_hba.conf</i>ä¸æ‰“开了 - 基于远程电脑( host-based )的身份认è¯ï¼Œå¹¶é‡æ–°å¯åŠ¨PostgreSQL,å¦åˆ™å…¶ä»–电脑是ä¸èƒ½ä¸Žä½ çš„PostgreSQLæœåŠ¡å™¨è¿›è¡Œè¿žæŽ¥çš„。 -</p> - - -<h3> <a name="3.3"></a>3.3) æˆ‘æ€Žæ ·è°ƒæ•´æ•°æ®åº“引擎以获得更好的性能? </h3> - - -<p> - 有三个主è¦æ–¹é¢å¯ä»¥æå‡PostgreSQL的潜能。 -</p> - -<dl> - <dt><b>查询方å¼çš„å˜åŒ–</b></dt> - <dd> - 这主è¦æ¶‰åŠä¿®æ”¹æŸ¥è¯¢æ–¹å¼ä»¥èŽ·å–更好的性能: - <ul> - <li>创建索引,包括表达å¼å’Œéƒ¨åˆ†ç´¢å¼•ï¼›</li> - - <li>使用COPYè¯å¥ä»£æ›¿å¤šä¸ªInsertè¯å¥ï¼›</li> - <li>将多个SQLè¯å¥ç»„æˆä¸€ä¸ªäº‹åŠ¡ä»¥å‡å°‘æ交事务的开销;</li> - <li>从一个索引ä¸æå–多æ¡è®°å½•æ—¶ä½¿ç”¨CLUSTERï¼›</li> - <li>从一个查询结果ä¸å–出部分记录时使用LIMITï¼›</li> - <li>使用预编译å¼æŸ¥è¯¢ï¼ˆPrepared Query)ï¼›</li> - <li>使用ANALYZE以ä¿æŒç²¾ç¡®çš„优化统计;</li> - - <li>定期使用 VACUUM 或 <i>pg_autovacuum</i></li> - <li>进行大é‡æ•°æ®æ›´æ”¹æ—¶å…ˆåˆ 除索引(然åŽé‡å»ºç´¢å¼•ï¼‰</li> - </ul> - </dd> - - <dt><b>æœåŠ¡å™¨çš„é…ç½®</b></dt> - <dd> - - é…置文件<i>postgres.conf</i>ä¸çš„很多设置都会影å“性能,所有å‚数的列表å¯è§ï¼š - <a href="http://www.postgresql.org/docs/current/static/runtime.html">管ç†å‘˜æŒ‡å—/æ•°æ®åº“æœåŠ¡å™¨è¿è¡ŒçŽ¯å¢ƒ/æ•°æ®åº“æœåŠ¡å™¨è¿è¡Œé…ç½®</a>, - 有关å‚数的解释å¯è§ï¼š<a href="http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html" target="_top">http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html</a> å’Œ - <a href="http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html">http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html</a>。 - </dd> - - <dt><b>硬件的选择</b></dt> - - <dd> - 计算机硬件对性能的影å“å¯æµè§ˆ - <a href="http://candle.pha.pa.us/main/writings/pgsql/hw_performance/index.html" target="_top">http://candle.pha.pa.us/main/writings/pgsql/hw_performance/index.html</a> å’Œ - <a href="http://www.powerpostgresql.com/PerfList/">http://www.powerpostgresql.com/PerfList/</a>。 - </dd> - -</dl> - - -<h3> <a name="3.4"></a>3.4)PostgreSQL里å¯ä»¥èŽ·å¾—ä»€ä¹ˆæ ·çš„è°ƒè¯•ç‰¹æ€§ï¼Ÿ </h3> - - -<p>PostgreSQL 有很多类似<code> log_* </code>çš„æœåŠ¡å™¨é…ç½®å˜é‡å¯ç”¨äºŽæŸ¥è¯¢çš„打å°å’Œè¿›ç¨‹ç»Ÿè®¡ï¼Œè€Œè¿™äº›å·¥ä½œå¯¹è°ƒè¯•å’Œæ€§èƒ½æµ‹è¯•å¾ˆæœ‰å¸®åŠ©ã€‚ -</p> - - - -<h3> <a name="3.5"></a>3.5) 为什么在试图连接时收到“Sorry, too many clients(已有太多用户连接)â€æ¶ˆæ¯ï¼Ÿ </h3> -<p> - è¿™è¡¨ç¤ºä½ å·²è¾¾åˆ°ç¼ºçœ100个并å‘åŽå°è¿›ç¨‹æ•°çš„é™åˆ¶ï¼Œä½ 需è¦é€šè¿‡ä¿®æ”¹<i>postgresql.conf</i>文件ä¸çš„<i>max_connections</i>å€¼æ¥ - å¢žåŠ postmasterçš„åŽå°å¹¶å‘处ç†æ•°ï¼Œä¿®æ”¹åŽéœ€é‡æ–°å¯åŠ¨<i>postmaster</i>。 - -</p> - - -<h3> <a name="3.6"></a>3.6)PostgreSQLçš„å‡çº§è¿‡ç¨‹æœ‰å“ªäº›å†…容 ? </h3> -<p> - PostgreSQL å¼€å‘组对æ¯æ¬¡å°ç‰ˆæœ¬çš„å‡çº§ä¸»è¦åªåšäº†ä¸€äº›Bugä¿®æ£å·¥ä½œï¼Œå› æ¤ä»Ž 7.4.8 å‡çº§åˆ° 7.4.9 ä¸éœ€è¦ dump å’Œ restore,仅需è¦åœæ¢æ•°æ®åº“æœåŠ¡å™¨ï¼Œå®‰è£…æ›´æ–°åŽçš„软件包,然åŽé‡å¯æœåŠ¡å™¨å³å¯ã€‚ -</p> -<p> - 所有PostgreSQLçš„ç”¨æˆ·åº”è¯¥åœ¨æœ€æŽ¥è¿‘ï¼ˆä½ æ‰€ä½¿ç”¨çš„ä¸»ç‰ˆæœ¬ï¼‰çš„å°æ”¹è¿›ç‰ˆæœ¬å‘布尽快å‡çº§ã€‚尽管æ¯æ¬¡å‡çº§å¯èƒ½éƒ½æœ‰ä¸€ç‚¹é£Žé™©ï¼ŒPostgreSQLçš„å°æ”¹è¿›ç‰ˆä»…仅是设计用æ¥ä¿®æ£ä¸€äº›Bug的,代ç 改动较少,所以风险还是很å°çš„。PostgreSQL社区认为一般情况下ä¸å‡çº§çš„风险还是多于å‡çº§çš„。 -</p> -<p> - 主版本的å‡çº§ï¼ˆä¾‹å¦‚从 7.3 到 7.4)通常会修改系统表和数æ®è¡¨çš„å†…éƒ¨æ ¼å¼ã€‚ - 这些改å˜ä¸€èˆ¬æ¯”较å¤æ‚ï¼Œå› æ¤æˆ‘们ä¸ç»´æŒæ•°æ®æ–‡ä»¶çš„å‘åŽå…¼å®¹æ€§ã€‚å› æ¤ä»Žè€ç‰ˆæœ¬ä¸è¿›è¡Œæ•°æ®å¯¼å‡ºï¼ˆdump)/然åŽåœ¨æ–°ç‰ˆæœ¬ä¸è¿›è¡Œæ•°æ®å¯¼å…¥ï¼ˆreload)对主版本的å‡çº§æ˜¯å¿…须的。 - -</p> - -<h3> <a name="3.7"></a>3.7)(使用PostgreSQL)我需è¦ä½¿ç”¨ä»€ä¹ˆè®¡ç®—机硬件 ? </h3> -<p> - 由于计算机硬件大多数是兼容的,人们总是倾å‘于相信所有计算机硬件质é‡ä¹Ÿæ˜¯ç›¸åŒçš„。事实上ä¸æ˜¯ï¼Œ - ECC RAM(带奇å¶æ ¡éªŒçš„内å˜ï¼‰ï¼ŒSCSI (硬盘)和优质的主æ¿æ¯”一些便宜货è¦æ›´åŠ å¯é 且具有更好的性能。PostgreSQLå‡ ä¹Žå¯ä»¥è¿è¡Œåœ¨ä»»ä½•ç¡¬ä»¶ä¸Šï¼Œ - 但如果å¯é æ€§å’Œæ€§èƒ½å¯¹ä½ çš„ç³»ç»Ÿå¾ˆé‡è¦ï¼Œä½ 就需è¦å…¨é¢çš„ç ”ç©¶ä¸€ä¸‹ä½ çš„ç¡¬ä»¶é…置了。在我们的邮件列表上也有关于 - 硬件é…置和性价比的讨论。 -</p> - - -<hr/> - -<h2><a name="æ“作问题"></a> æ“作问题 </h2> - - - -<h3> <a name="4.1"></a>4.1) 如何åªé€‰æ‹©ä¸€ä¸ªæŸ¥è¯¢ç»“æžœçš„å¤´å‡ è¡Œï¼Ÿæˆ–æ˜¯éšæœºçš„一行? </h3> -<p> - å¦‚æžœä½ åªæ˜¯è¦æå–å‡ è¡Œæ•°æ®ï¼Œå¹¶ä¸”ä½ åœ¨æ‰§è¡ŒæŸ¥è¯¢ä¸çŸ¥é“ç¡®åˆ‡çš„è¡Œæ•°ï¼Œä½ å¯ä»¥ä½¿ç”¨LIMIT功能。 - 如果有一个索引与 <i> ORDER BY</i>ä¸çš„æ¡ä»¶åŒ¹é…,PostgreSQL å¯èƒ½å°±åªå¤„ç†è¦æ±‚çš„å¤´å‡ æ¡è®°å½•ï¼Œ - (å¦åˆ™å°†å¯¹æ•´ä¸ªæŸ¥è¯¢è¿›è¡Œå¤„ç†ç›´åˆ°ç”Ÿæˆéœ€è¦çš„行)。如果在执行查询功能时ä¸çŸ¥é“确切的记录数, - å¯ä½¿ç”¨æ¸¸æ ‡(cursor)å’ŒFETCH功能。 -</p> -<p> - å¯ä½¿ç”¨ä»¥ä¸‹æ–¹æ³•æå–一行éšæœºè®°å½•çš„: -</p> -<pre> - SELECT cols - FROM tab - ORDER BY random() - LIMIT 1 ; - -</pre> - - - -<h3> <a name="4.2"></a>4.2) 如何查看表ã€ç´¢å¼•ã€æ•°æ®åº“以åŠç”¨æˆ·çš„定义?如何查看<i>psql</i>里用到的查询指令并显示它们? </h3> -<p> - 在<i>psql</i>ä¸ä½¿ç”¨ \dt 命令æ¥æ˜¾ç¤ºæ•°æ®è¡¨çš„定义,è¦äº†è§£<i>psql</i>ä¸çš„完整命令列表å¯ä½¿ç”¨\? ,å¦å¤–ï¼Œä½ ä¹Ÿå¯ä»¥é˜…读 <i>psql</i> çš„æºä»£ç - 文件<i>pgsql/src/bin/psql/describe.c</i>,它包括为生æˆ<i>psql</i>åæ–œæ 命令的输出的所有 SQL å‘½ä»¤ã€‚ä½ è¿˜å¯ä»¥å¸¦ <i>-E</i> 选项å¯åŠ¨ <i>psql</i>, - è¿™æ ·å®ƒå°†æ‰“å°å‡ºä½ 在<i>psql</i>ä¸æ‰€ç»™å‡ºçš„命令执行时的内部实际使用的SQL查询è¯å¥ã€‚PostgreSQL也æ供了一个兼容SQLçš„INFORMATION SCHEMA接å£ï¼Œ - ä½ å¯ä»¥ä»Žè¿™é‡ŒèŽ·å–关于数æ®åº“çš„ä¿¡æ¯ã€‚ - -</p> -<p> - 在系统ä¸ä¹Ÿæœ‰ä¸€äº›ä»¥<i>pg_</i> 打头的系统表也æ述了表的定义。 -</p> -<p> - 使用 <i>psql -l</i> 指令å¯ä»¥åˆ—出所有的数æ®åº“。 -</p> -<p> - 也å¯ä»¥æµè§ˆä¸€ä¸‹ <i>pgsql/src/tutorial/syscat.source</i>文件,它列举了很多å¯ä»Žæ•°æ®åº“系统表ä¸èŽ·å–ä¿¡æ¯çš„SELECTè¯æ³•ã€‚ - -</p> - - -<h3> <a name="4.3"></a>4.3) 如何更改一个å—段的数æ®ç±»åž‹ï¼Ÿ </h3> -<p> - 在8.0版本里更改一个å—段的数æ®ç±»åž‹å¾ˆå®¹æ˜“,å¯ä½¿ç”¨ ALTER TABLE ALTER COLUMN TYPE 。 -</p> -<p> - 在以å‰çš„版本ä¸ï¼Œå¯ä»¥è¿™æ ·åšï¼š -</p> -<pre> - 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; - -</pre> -<p> - ä½ ç„¶åŽå¯ä»¥ä½¿ç”¨<i>VACUUM FULL tab </i>指令æ¥ä½¿ç³»ç»Ÿæ”¶å›žæ— 效数æ®æ‰€å 用的空间。 -</p> - -<h3> <a name="4.4"></a>4.4) å•æ¡è®°å½•ï¼Œå•ä¸ªè¡¨ï¼Œå•ä¸ªæ•°æ®åº“的最大é™åˆ¶æ˜¯å¤šå°‘? </h3> -<p> - 下é¢æ˜¯ä¸€äº›é™åˆ¶ï¼š -</p> -<blockquote> - <table> - - <tbody> - <tr><td>å•ä¸ªæ•°æ®åº“最大尺寸?</td><td>æ— é™åˆ¶ï¼ˆå·²å˜åœ¨æœ‰ 32TB çš„æ•°æ®åº“)</td></tr> - <tr><td>å•ä¸ªè¡¨çš„最大尺寸?</td><td>32 TB</td></tr> - <tr><td>一行记录的最大尺寸?</td><td>1.6 TB</td></tr> - <tr><td>一个å—段的最大尺寸?</td><td>1 GB</td></tr> - - <tr><td>一个表里最大行数?</td><td>æ— é™åˆ¶</td></tr> - <tr><td>一个表里最大列数?</td><td>250-1600 (与列类型有关)</td></tr> - <tr><td>一个表里的最大索引数é‡ï¼Ÿ</td><td>æ— é™åˆ¶</td></tr> - </tbody> -</table> -</blockquote> - - -<p> - 当然,实际上没有真æ£çš„æ— é™åˆ¶ï¼Œè¿˜æ˜¯è¦å—å¯ç”¨ç£ç›˜ç©ºé—´ã€å¯ç”¨å†…å˜/交æ¢åŒºçš„制约。 - 事实上,当上述这些数值å˜å¾—异常地大时,系统性能也会å—很大影å“。 -</p> - -<p> - å•è¡¨çš„æœ€å¤§å¤§å° 32 TB ä¸éœ€è¦æ“作系统对å•ä¸ªæ–‡ä»¶ä¹Ÿéœ€è¿™ä¹ˆå¤§çš„支æŒã€‚大表用多个 1 GB 的文件å˜å‚¨ï¼Œå› æ¤æ–‡ä»¶ç³»ç»Ÿå¤§å°çš„é™åˆ¶æ˜¯ä¸é‡è¦çš„。 -</p> -<p> - 如果缺çœçš„å—大å°å¢žé•¿åˆ° 32K ,最大的å•è¡¨å¤§å°å’Œæœ€å¤§åˆ—数还å¯ä»¥å¢žåŠ 到四å€ã€‚ -</p> -<p> - 有一个é™åˆ¶å°±æ˜¯ä¸èƒ½å¯¹å¤§å°å¤šäºŽ2000å—节的列创建索引。幸è¿åœ°æ˜¯è¿™æ ·çš„索引很少用到。通过对多å—节列的内容进行MD5哈稀è¿ç®—结果进行函数索引å¯å¯¹åˆ—的唯一性得到ä¿è¯ï¼Œ - 并且全文检索å…许对列ä¸çš„å•è¯è¿›è¡Œæœç´¢ã€‚ -</p> - - -<h3> <a name="4.5"></a>4.5) å˜å‚¨ä¸€ä¸ªå…¸åž‹çš„文本文件里的数æ®éœ€è¦å¤šå°‘ç£ç›˜ç©ºé—´ï¼Ÿ </h3> -<p> - 一个 Postgres æ•°æ®åº“(å˜å‚¨ä¸€ä¸ªæ–‡æœ¬æ–‡ä»¶ï¼‰æ‰€å 用的空间最多å¯èƒ½éœ€è¦ç›¸å½“于这个文本文件自身大å°5å€çš„ç£ç›˜ç©ºé—´ã€‚ -</p> -<p> - 例如,å‡è®¾æœ‰ä¸€ä¸ª 100,000 行的文件,æ¯è¡Œæœ‰ä¸€ä¸ªæ•´æ•°å’Œä¸€ä¸ªæ–‡æœ¬æ述。 - å‡è®¾æ–‡æœ¬ä¸²çš„å¹³å‡é•¿åº¦ä¸º20å—节。文本文件å 用 2.8 MB。å˜æ”¾è¿™äº›æ•°æ®çš„PostgreSQLæ•°æ®åº“文件大约是 6.4 MB: -</p> -<pre> - 28 å—节: æ¯è¡Œçš„头(大约值) - 24 å—节: 一个整数型å—段和一个文本型å—段 - + 4 å—节: 页é¢å†…指å‘元组的指针 - ---------------------------------------- - 56 å—节æ¯è¡Œ - - PostgreSQL æ•°æ®é¡µçš„大å°æ˜¯ 8192 å—节 (8 KB),则: - - 8192 å—节æ¯é¡µ - ------------------- = 146 è¡Œ/æ•°æ®é¡µï¼ˆå‘下å–整) - 56 å—节æ¯è¡Œ - - 100000 æ•°æ®è¡Œ - -------------------- = 685 æ•°æ®é¡µï¼ˆå‘上å–整) - 146 è¡Œ/æ•°æ®é¡µ - - 685 æ•°æ®é¡µ * 8192 å—节/页 = 5,611,520 å—节(5.6 MB) -</pre> - - -<p> - 索引ä¸éœ€è¦è¿™ä¹ˆå¤šçš„é¢å¤–消耗,但也确实包括被索引的数æ®ï¼Œå› æ¤å®ƒä»¬ä¹Ÿå¯èƒ½å¾ˆå¤§ã€‚ -</p> -<p> - 空值<i>NULL</i>å˜æ”¾åœ¨ä½å›¾ä¸ï¼Œå› æ¤å 用很少的空间。 -</p> - -<h3> <a name="4.6"></a>4.6) 为什么我的查询很慢?为什么这些查询没有利用索引? </h3> -<p> - 并éžæ¯ä¸ªæŸ¥è¯¢éƒ½ä¼šè‡ªåŠ¨ä½¿ç”¨ç´¢å¼•ã€‚åªæœ‰åœ¨è¡¨çš„大å°è¶…过一个最å°å€¼ï¼Œå¹¶ä¸”查询åªä¼šé€‰ä¸è¡¨ä¸è¾ƒå°æ¯”例的记录时æ‰ä¼šé‡‡ç”¨ç´¢å¼•ã€‚ - è¿™æ˜¯å› ä¸ºç´¢å¼•æ‰«æ引起的éšå³ç£ç›˜å˜å–å¯èƒ½æ¯”直接地读å–表(顺åºæ‰«æ)更慢。 - -</p> -<p> - 为了判æ–是å¦ä½¿ç”¨ç´¢å¼•ï¼ŒPostgreSQL必须获得有关表的统计值。这些统计值å¯ä»¥ä½¿ç”¨ VACUUM ANALYZE,或 ANALYZE 获得。 - 使用统计值,优化器知é“表ä¸æœ‰å¤šå°‘行,就能够更好地判æ–是å¦åˆ©ç”¨ç´¢å¼•ã€‚ - 统计值对确定优化的连接顺åºå’Œè¿žæŽ¥æ–¹æ³•ä¹Ÿå¾ˆæœ‰ç”¨ã€‚在表的内容å‘生å˜åŒ–时,应定期进行统计值的更新收集。 -</p> -<p> - 索引通常ä¸ç”¨äºŽ ORDER BY 或执行连接。对一个大表的一次顺åºæ‰«æå†åšä¸€æ¬¡æŽ’åºé€šå¸¸æ¯”索引扫æè¦å¿«ã€‚然而,如果将 LIMIT å’Œ ORDER BY - 结åˆåœ¨ä¸€èµ·ä½¿ç”¨çš„è¯ï¼Œé€šå¸¸å°†ä¼šä½¿ç”¨ç´¢å¼•ï¼Œå› 为这时仅返回表ä¸çš„一å°éƒ¨åˆ†è®°å½•ã€‚ -</p> -<p> - å¦‚æžœä½ ç¡®ä¿¡PostgreSQL的优化器使用顺åºæ‰«æ是ä¸æ£ç¡®çš„ï¼Œä½ å¯ä»¥ä½¿ç”¨<code>SET enable_seqscan TO 'off'</code>指令æ¥å…³é—顺åºæ‰«æ, - 然åŽå†æ¬¡è¿è¡ŒæŸ¥è¯¢ï¼Œä½ å°±å¯ä»¥çœ‹å‡ºä½¿ç”¨ä¸€ä¸ªç´¢å¼•æ‰«æ是å¦ç¡®å®žè¦å¿«ä¸€äº›ã€‚ -</p> - -<p> - - 当使用通é…符æ“作,例如 <i>LIKE</i> 或 <i>~</i> 时,索引åªèƒ½åœ¨ç‰¹å®šçš„情况下使用: -</p> -<ul> - <li>å—符串的开始部分必须是普通å—符串,也就是说: - <ul> - <li> <i>LIKE</i> 模å¼ä¸èƒ½ä»¥ <i>%</i> 打头。</li> - - <li> <i>~</i> (æ£åˆ™è¡¨è¾¾å¼ï¼‰æ¨¡å¼å¿…须以 <i>^</i> 打头。</li> - </ul> - </li> - <li>å—符串ä¸èƒ½ä»¥åŒ¹é…多个å—符的模å¼ç±»æ‰“头,例如 [a-e]。</li> - <li>大å°å†™æ— 关的查找,如 ILIKE å’Œ ~* ç‰ä¸ä½¿ç”¨ç´¢å¼•ï¼Œä½†å¯ä»¥ç”¨ <a href="#4.8">4.8</a> 节æ述的表达å¼ç´¢å¼•ã€‚</li> - - <li>åœ¨åš initdb 时必须采用缺çœçš„本地设置 C localeï¼Œå› ä¸ºç³»ç»Ÿä¸å¯èƒ½çŸ¥é“在éžC locale情况时下一个最大å—符是什么。 - 在这ç§æƒ…å†µä¸‹ï¼Œä½ å¯ä»¥åˆ›å»ºä¸€ä¸ªç‰¹æ®Šçš„<code>text_pattern_ops</code>索引æ¥ç”¨äºŽ<small>LIKE</small>的索引。 - </li> -</ul> -<p> - 在8.0之å‰çš„版本ä¸ï¼Œé™¤éžè¦æŸ¥è¯¢çš„æ•°æ®ç±»åž‹å’Œç´¢å¼•çš„æ•°æ®ç±»åž‹ç›¸åŒ¹é…,å¦åˆ™ç´¢å¼•ç»å¸¸æ˜¯æœªè¢«ç”¨åˆ°ï¼Œç‰¹åˆ«æ˜¯å¯¹int2,int8和数值型的索引。 -</p> - -<h3> <a name="4.7"></a>4.7) 我如何æ‰èƒ½çœ‹åˆ°æŸ¥è¯¢ä¼˜åŒ–å™¨æ˜¯æ€Žæ ·è¯„ä¼°å¤„ç†æˆ‘的查询? </h3> - - -<p>å‚考 <small>EXPLAIN</small> 手册页。</p> - -<h3> <a name="4.8"></a>4.8) æˆ‘æ€Žæ ·åšæ£åˆ™è¡¨è¾¾å¼æœç´¢å’Œå¤§å°å†™æ— 关的æ£åˆ™è¡¨è¾¾å¼æŸ¥æ‰¾ï¼Ÿæ€Žæ ·åˆ©ç”¨ç´¢å¼•è¿›è¡Œå¤§å°å†™æ— 关查找? </h3> -<p> - æ“作符 <i> ~ </i> 处ç†æ£åˆ™è¡¨è¾¾å¼åŒ¹é…,而 <i>~*</i> 处ç†å¤§å°å†™æ— 关的æ£åˆ™è¡¨è¾¾å¼åŒ¹é…。大å°å†™æ— 关的 LIKE å˜ç§æˆä¸º ILIKE。 - -</p> -<p> - 大å°å†™æ— 关的ç‰å¼æ¯”较通常写åšï¼š -</p> -<pre> - SELECT * - FROM tab - WHERE lower(col) = 'abc'; -</pre> - -<p> - è¿™æ ·å°†ä¸ä¼šä½¿ç”¨æ ‡å‡†çš„索引。但是å¯ä»¥åˆ›å»ºä¸€ä¸ªåœ¨è¿™ç§æƒ…况下使用的表达å¼ç´¢å¼•: -</p> -<pre> - CREATE INDEX tabindex ON tab (lower(col)); - -</pre> -<p> - å¦‚æžœä¸Šè¿°ç´¢å¼•åœ¨åˆ›å»ºæ—¶åŠ å…¥UNIQUE约æŸï¼Œè™½ç„¶ç´¢å¼•å—段自身内容å¯ä»¥å˜å‚¨å¤§å°å†™ä¸é™çš„内容,但如果有UNIQUE约æŸåŽï¼Œè¿™äº›å†…容ä¸èƒ½ä»…仅是大å°å†™ä¸åŒï¼ˆå¦åˆ™ä¼šé€ æˆå†²çªï¼‰ã€‚为了ä¿è¯ä¸å‘生这ç§æƒ…况,å¯ä»¥ä½¿ç”¨CHECK约æŸæ¡ä»¶æˆ–是触å‘器在录入时进行é™åˆ¶ã€‚ -</p> - - -<h3> <a name="4.9"></a>4.9) åœ¨ä¸€ä¸ªæŸ¥è¯¢é‡Œï¼Œæˆ‘æ€Žæ ·æ£€æµ‹ä¸€ä¸ªå—段是å¦ä¸º <i>NULL</i> ?我如何æ‰èƒ½å‡†ç¡®æŽ’åºè€Œä¸è®ºæŸå—段是å¦å« <i>NULL</i> 值? </h3> -<p> - - 用 <small>IS NULL</small> å’Œ <small>IS NOT NULL</small> 测试这个å—段,具体方法如下: -</p> -<pre> SELECT * - FROM tab - WHERE col IS NULL; -</pre> - -<p>ä¸ºäº†èƒ½å¯¹å« <small>NULL</small>å—段排åºï¼Œå¯åœ¨ <small>ORDER BY</small> æ¡ä»¶ä¸ä½¿ç”¨ <small>IS NULL</small>å’Œ - <small>IS NOT NULL</small> 修饰符,æ¡ä»¶ä¸ºçœŸ <i>true</i> 将比æ¡ä»¶ä¸ºå‡<i>false</i> 排在å‰é¢ï¼Œä¸‹é¢çš„例åå°±ä¼šå°†å« - NULL 的记录排在结果的上é¢éƒ¨åˆ†ï¼š - -</p> -<pre> SELECT * - FROM tab - ORDER BY (col IS NOT NULL) -</pre> - -<h3> <a name="4.10"></a>4.10) å„ç§å—符类型之间有什么ä¸åŒï¼Ÿ </h3> -<blockquote> - <table> - <tbody> - <tr><th>类型</th><th>内部å称</th><th>说明</th></tr> - - <tr><td>VARCHAR(n)</td><td>varchar</td><td>指定了最大长度,å˜é•¿å—符串,ä¸è¶³å®šä¹‰é•¿åº¦çš„部分ä¸è¡¥é½</td></tr> - <tr><td>CHAR(n)</td><td>bpchar</td><td>定长å—符串,实际数æ®ä¸è¶³å®šä¹‰é•¿åº¦æ—¶ï¼Œä»¥ç©ºæ ¼è¡¥é½</td></tr> - <tr><td>TEXT</td><td>text</td><td>没有特别的上é™é™åˆ¶ï¼ˆä»…å—行的最大长度é™åˆ¶ï¼‰</td></tr> - <tr><td>BYTEA</td><td>bytea</td><td>å˜é•¿å—节åºåˆ—(使用NULLå—符也是å…许的)</td></tr> - - <tr><td>"char"</td><td>char</td><td>å•ä¸ªå—符</td></tr> - </tbody> - </table> -</blockquote> - -<p> - 在系统表和在一些错误信æ¯é‡Œä½ 将看到内部å称。 -</p> -<p> - 上é¢æ‰€åˆ—çš„å‰å››ç§ç±»åž‹æ˜¯"varlena"(å˜é•¿ï¼‰ç±»åž‹ï¼ˆä¹Ÿå°±æ˜¯è¯´ï¼Œå¼€å¤´çš„四个å—节是长度,åŽé¢æ‰æ˜¯æ•°æ®ï¼‰ã€‚ - 于是实际å 用的空间比声明的大å°è¦å¤šä¸€äº›ã€‚ - 然而这些类型如定义很长时都å¯ä»¥è¢«åŽ‹ç¼©å˜å‚¨ï¼Œå› æ¤ç£ç›˜ç©ºé—´ä¹Ÿå¯èƒ½æ¯”预想的è¦å°‘。 - -</p> -<p> - <small>VARCHAR(n)</small> 在å˜å‚¨é™åˆ¶äº†æœ€å¤§é•¿åº¦çš„å˜é•¿å—符串是最好的。 - <small>TEXT</small> 适用于å˜å‚¨æœ€å¤§å¯è¾¾ 1Gå·¦å³ä½†æœªå®šä¹‰é™åˆ¶é•¿åº¦çš„å—符串。 -</p> -<p> - <small>CHAR(n)</small> 最适åˆäºŽå˜å‚¨é•¿åº¦ç›¸åŒçš„å—符串。 <small>CHAR(n)</small>ä¼šæ ¹æ®æ‰€ç»™å®šçš„å—æ®µé•¿åº¦ä»¥ç©ºæ ¼è¡¥è¶³ï¼ˆä¸è¶³çš„å—段内容), - 而 <small>VARCHAR(n)</small> åªå˜å‚¨æ‰€ç»™å®šçš„æ•°æ®å†…容。 - <small>BYTEA</small> 用于å˜å‚¨äºŒè¿›åˆ¶æ•°æ®ï¼Œå°¤å…¶æ˜¯åŒ…å« NULL å—节的值。这些类型具有差ä¸å¤šçš„性能。 - -</p> - - - -<h3> <a name="4.11.1"></a>4.11.1) æˆ‘æ€Žæ ·åˆ›å»ºä¸€ä¸ªåºåˆ—å·æˆ–是自动递增的å—段? </h3> -<p>PostgreSQL æ”¯æŒ SERIAL æ•°æ®ç±»åž‹ã€‚(å—段定义为SERIALåŽï¼‰å°†è‡ªåŠ¨åˆ›å»ºä¸€ä¸ªåºåˆ—生æˆå™¨ï¼Œä¾‹å¦‚: -</p> -<pre> - CREATE TABLE person ( - id SERIAL, - name TEXT - ); -</pre> -<p> - 会自动转æ¢ä¸ºä»¥ä¸‹SQLè¯å¥ï¼š -</p> - -<pre> - CREATE SEQUENCE person_id_seq; - CREATE TABLE person ( - id INT4 NOT NULL DEFAULT nextval('person_id_seq'), - name TEXT - ); -</pre> -<p> - å‚考 create_sequence 手册页获å–关于åºåˆ—生æˆå™¨çš„更多信æ¯ã€‚ -</p> - - -<h3> <a name="4.11.2"></a>4.11.2) 我如何获得一个æ’入的åºåˆ—å·çš„值? </h3> -<p> - 一ç§æ–¹æ³•æ˜¯åœ¨æ’入之å‰å…ˆç”¨å‡½æ•° nextval() 从åºåˆ—对象里检索出下一个 SERIAL 值,然åŽå†ç”¨æ¤å€¼ç²¾ç¡®åœ°æ’入。使用 - <a href="#4.11.1"> 4.11.1</a> 里的例表,å¯ç”¨ä¼ªç è¿™æ ·æ述: - -</p> -<pre> - new_id = execute("SELECT nextval('person_id_seq')"); - execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')"); -</pre> -<p> - è¿™æ ·è¿˜èƒ½åœ¨å…¶ä»–æŸ¥è¯¢ä¸ä½¿ç”¨å˜æ”¾åœ¨ new_id 里的新值(例如,作为å‚ç…§ person 表的外键)。 - 注æ„自动创建的 SEQUENCE 对象的å称将会是 <<i>table</i>>_<<i>serialcolumn</i>>_<i>seq</i>, - 这里 table å’Œ serialcolumn åˆ†åˆ«æ˜¯ä½ çš„è¡¨çš„åç§°å’Œä½ çš„ SERIAL å—段的å称。 -</p> -<p> - 类似的,在 SERIAL 对象缺çœæ’å…¥åŽä½ å¯ä»¥ç”¨å‡½æ•° currval() 检索刚赋值的 SERIAL 值,例如: - -</p> -<pre> - execute("INSERT INTO person (name) VALUES ('Blaise Pascal')"); - new_id = execute("SELECT currval('person_id_seq')"); -</pre> - -<h3> <a name="4.11.3"></a>4.11.3) åŒæ—¶ä½¿ç”¨ <i>currval()</i> 会导致和其他用户的冲çªæƒ…况å—? </h3> -<p> - ä¸ä¼šã€‚<i>currval()</i> è¿”å›žçš„æ˜¯ä½ æœ¬æ¬¡ä¼šè¯è¿›ç¨‹æ‰€èµ‹çš„值而ä¸æ˜¯æ‰€æœ‰ç”¨æˆ·çš„当å‰å€¼ã€‚<br/> - -</p> - -<h3> <a name="4.11.4"></a>4.11.4) 为什么ä¸åœ¨äº‹åŠ¡å¼‚常ä¸æ¢åŽé‡ç”¨åºåˆ—å·å‘¢ï¼Ÿä¸ºä»€ä¹ˆåœ¨åºåˆ—å·å—段的å–值ä¸å˜åœ¨é—´æ–呢? </h3> -<p> - 为了æ高并å‘性,åºåˆ—å·åœ¨éœ€è¦çš„时候赋予æ£åœ¨è¿è¡Œçš„事务,并且在事务结æŸä¹‹å‰ä¸è¿›è¡Œé”定, - 这就会导致异常ä¸æ¢çš„事务åŽï¼Œåºåˆ—å·ä¼šå‡ºçŽ°é—´éš”。 -</p> - -<h3> <a name="4.12"></a>4.12) 什么是 <small>OID</small> ?什么是 <small>CTID</small> ? </h3> - - -<p>PostgreSQL 里创建的æ¯ä¸€è¡Œè®°å½•éƒ½ä¼šèŽ·å¾—一个唯一的<small>OID</small>,除éžåœ¨åˆ›å»ºè¡¨æ—¶ä½¿ç”¨<small>WITHOUT OIDS</small>选项。 - <small>OID</small>创建时会自动生æˆä¸€ä¸ª4å—节的整数,所有 OID 在相应PostgreSQLæœåŠ¡å™¨ä¸å‡æ˜¯å”¯ä¸€çš„。 然而,它在超过40亿时将溢出, - <small>OID</small>æ¤åŽä¼šå‡ºçŽ°é‡å¤ã€‚PostgreSQL 在它的内部系统表里使用 OID 在表之间建立è”系。 -</p> -<p> - 在用户的数æ®è¡¨ä¸ï¼Œæœ€å¥½æ˜¯ä½¿ç”¨<small>SERIAl</small>æ¥ä»£æ›¿<small>OID</small> - - å› ä¸º<small>SERIAL</small>åªè¦ä¿è¯åœ¨å•ä¸ªè¡¨ä¸çš„数值是唯一的就å¯ä»¥äº†ï¼Œè¿™æ ·å®ƒæº¢å‡ºçš„å¯èƒ½æ€§å°±éžå¸¸å°äº†ï¼Œ - <small>SERIAL8</small>å¯ç”¨æ¥ä¿å˜8å—节的åºåˆ—数值。 -</p> - -<p> - <small>CTID</small> ç”¨äºŽæ ‡è¯†å¸¦ç€æ•°æ®å—(地å€ï¼‰å’Œï¼ˆå—内)å移的特定的物ç†è¡Œã€‚ - <small>CTID</small> 在记录被更改或é‡è½½åŽå‘生改å˜ã€‚索引数æ®ä½¿ç”¨å®ƒä»¬æŒ‡å‘物ç†è¡Œã€‚ -</p> - - - -<h3> <a name="4.13"></a>4.13) 为什么我收到错误信æ¯â€œ<i>ERROR: Memory exhausted in AllocSetAlloc()</i>â€ï¼Ÿ </h3> -<p> - 这很å¯èƒ½æ˜¯ç³»ç»Ÿçš„虚拟内å˜ç”¨å…‰äº†ï¼Œæˆ–è€…å†…æ ¸å¯¹æŸäº›èµ„æºæœ‰è¾ƒä½Žçš„é™åˆ¶å€¼ã€‚在å¯åŠ¨ postmaster 之å‰è¯•è¯•ä¸‹é¢çš„命令: -</p> -<pre> - ulimit -d 262144 - limit datasize 256m -</pre> -<p> - å–å†³äºŽä½ ç”¨çš„ shell,上é¢å‘½ä»¤åªæœ‰ä¸€æ¡èƒ½æˆåŠŸï¼Œä½†æ˜¯å®ƒå°†æŠŠä½ 的进程数æ®æ®µé™åˆ¶è®¾å¾—比较高, - å› è€Œä¹Ÿè®¸èƒ½è®©æŸ¥è¯¢å®Œæˆã€‚è¿™æ¡å‘½ä»¤åº”用于当å‰è¿›ç¨‹ï¼Œä»¥åŠæ‰€æœ‰åœ¨è¿™æ¡å‘½ä»¤è¿è¡ŒåŽåˆ›å»ºçš„å进程。 - å¦‚æžœä½ æ˜¯åœ¨è¿è¡ŒSQLå®¢æˆ·ç«¯æ—¶å› ä¸ºåŽå°è¿”回了太多的数æ®è€Œå‡ºçŽ°é—®é¢˜ï¼Œè¯·åœ¨è¿è¡Œå®¢æˆ·ç«¯ä¹‹å‰æ‰§è¡Œä¸Šè¿°å‘½ä»¤ã€‚ - -</p> - -<h3> <a name="4.14"></a>4.14) 我如何æ‰èƒ½çŸ¥é“所è¿è¡Œçš„PostgreSQL的版本? </h3> -<p> - 从 psql 里,输入 <code>SELECT version();</code>指令。 -</p> - -<h3> <a name="4.15"></a>4.15) 我如何创建一个缺çœå€¼æ˜¯å½“å‰æ—¶é—´çš„å—段? </h3> -<p> - 使用 CURRENT_TIMESTAMP: - -</p> -<pre> - CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -</pre> - - -<h3> <a name="4.16"></a>4.16) æˆ‘æ€Žæ ·è¿›è¡Œ outer join (外连接)? </h3> -<p>PostgreSQL é‡‡ç”¨æ ‡å‡†çš„ SQL è¯æ³•æ”¯æŒå¤–连接。这里是两个例å:</p> -<pre> - SELECT * - FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col); -</pre> -<p>或是</p> - -<pre> - SELECT * - FROM t1 LEFT OUTER JOIN t2 USING (col); -</pre> -<p> - 这两个ç‰ä»·çš„查询在 t1.col å’Œ t2.col 上åšè¿žæŽ¥ï¼Œå¹¶ä¸”返回 t1 ä¸æ‰€æœ‰æœªè¿žæŽ¥çš„行(那些在 t2 ä¸æ²¡æœ‰åŒ¹é…的行)。 - å³[外]连接(RIGHT OUTER JOIN)将返回 t2 ä¸æœªè¿žæŽ¥çš„行。 - 完全外连接(FULL OUTER JOIN)将返回 t1 å’Œ t2 ä¸æœªè¿žæŽ¥çš„行。 - å…³é”®å— OUTER 在左[外]连接ã€å³[外]连接和完全[外]连接ä¸æ˜¯å¯é€‰çš„,普通连接被称为内连接(INNER JOIN)。 -</p> - - -<h3> <a name="4.17"></a>4.17) 如何使用涉åŠå¤šä¸ªæ•°æ®åº“的查询? </h3> -<p> - 没有办法查询当å‰æ•°æ®åº“之外的数æ®åº“。 - å› ä¸ºPostgreSQLè¦åŠ 载与数æ®åº“ç›¸å…³çš„ç³»ç»Ÿç›®å½•ï¼ˆç³»ç»Ÿè¡¨ï¼‰ï¼Œå› æ¤è·¨æ•°æ®åº“的查询如何执行是ä¸å®šçš„。 -</p> - -<p> - é™„åŠ å¢žå€¼æ¨¡å—contrib/dblinkå…许采用函数调用实现跨库查询。当然用户也å¯ä»¥åŒæ—¶è¿žæŽ¥åˆ°ä¸åŒçš„æ•°æ®åº“执行查询然åŽåœ¨å®¢æˆ·ç«¯åˆå¹¶ç»“果。 -</p> - -<h3> <a name="4.18"></a>4.18) 如何让函数返回多行或多列数æ®ï¼Ÿ </h3> -<p> - 在函数ä¸è¿”回数æ®è®°å½•é›†çš„功能是很容易使用的,详情å‚è§ï¼š - <a href="http://techdocs.postgresql.org/guides/SetReturningFunctions">http://techdocs.postgresql.org/guides/SetReturningFunctions</a> -</p> - -<h3> <a name="4.19"></a>4.19) 为什么我在使用PL/PgSQL函数å˜å–临时表时会收到错误信æ¯â€œrelation with OID ##### does not existâ€ï¼Ÿ </h3> - -<p> - PL/PgSQL会缓å˜å‡½æ•°çš„脚本内容,由æ¤å¸¦æ¥çš„一个ä¸å¥½çš„副作用是若一个 PL/PgSQL - 函数访问了一个临时表,然åŽè¯¥è¡¨è¢«åˆ 除并é‡å»ºäº†ï¼Œåˆ™å†æ¬¡è°ƒç”¨è¯¥å‡½æ•°å°†å¤±è´¥ï¼Œ - å› ä¸ºç¼“å˜çš„函数内容ä»ç„¶æŒ‡å‘旧的临时表。解决的方法是在 PL/PgSQL ä¸ç”¨<small>EXECUTE</small> - å¯¹ä¸´æ—¶è¡¨è¿›è¡Œè®¿é—®ã€‚è¿™æ ·ä¼šä¿è¯æŸ¥è¯¢åœ¨æ‰§è¡Œå‰æ€»ä¼šè¢«é‡æ–°è§£æžã€‚ -</p> - -<h3> <a name="4.20"></a>4.20) ç›®å‰æœ‰å“ªäº›æ•°æ®å¤åˆ¶æ–¹æ¡ˆå¯ç”¨ï¼Ÿ </h3> -<p> - “å¤åˆ¶â€åªæ˜¯ä¸€ä¸ªæœ¯è¯ï¼Œæœ‰å¥½å‡ ç§å¤åˆ¶æŠ€æœ¯å¯ç”¨ï¼Œæ¯ç§éƒ½æœ‰ä¼˜ç‚¹å’Œç¼ºç‚¹ï¼š -</p> -<p> - - 主/从å¤åˆ¶æ–¹å¼æ˜¯å…许一个主æœåŠ¡å™¨æŽ¥å—读/写的申请,而多个从æœåŠ¡å™¨åªèƒ½æŽ¥å—读/<small>SELECT</small>查询的申请, - ç›®å‰æœ€æµè¡Œä¸”å…费的主/从PostgreSQLå¤åˆ¶æ–¹æ¡ˆæ˜¯ - <a href="http://gborg.postgresql.org/project/slony1/projdisplay.php">Slony-I </a>。 -</p> -<p> - 多个主æœåŠ¡å™¨çš„å¤åˆ¶æ–¹å¼å…许将读/写的申请å‘é€ç»™å¤šå°çš„计算机,这ç§æ–¹å¼ç”±äºŽéœ€è¦åœ¨å¤šå°æœåŠ¡å™¨ä¹‹é—´åŒæ¥æ•°æ®å˜åŠ¨ - å¯èƒ½ä¼šå¸¦æ¥è¾ƒä¸¥é‡çš„性能æŸå¤±ï¼Œ<a href="http://pgfoundry.org/projects/pgcluster/">Pgcluster</a>是目å‰è¿™ç§æ–¹æ¡ˆ - ä¸æœ€å¥½çš„,而且还å¯ä»¥å…费下载。 -</p> -<p> - 也有一些商业需付费和基于硬件的数æ®å¤åˆ¶æ–¹æ¡ˆï¼Œæ”¯æŒä¸Šè¿°å„ç§å¤åˆ¶æ¨¡åž‹ã€‚ -</p> - - -<h3> <a name="4.21">4.21</a>) 为何查询结果显示的表å或列å与我的查询è¯å¥ä¸çš„ä¸åŒï¼Ÿä¸ºä½•å¤§å†™çŠ¶æ€ä¸èƒ½ä¿ç•™ï¼Ÿ </h3> - -<p> - 最常è§çš„åŽŸå› æ˜¯åœ¨åˆ›å»ºè¡¨æ—¶å¯¹è¡¨å或是列å使用了åŒå¼•å·â€œâ€ï¼Œå½“使用了åŒå¼•å·åŽï¼Œè¡¨å或列åï¼ˆç§°ä¸ºæ ‡è¯†ç¬¦ï¼‰å˜å‚¨æ—¶æ˜¯åŒºåˆ† -<a href="http://www.postgresql.org/docs/8.0/static/sql-syntax.html#SQL-SYNTAX-IDENTIFIERS">大å°å†™çš„</a>, - è¿™æ„è°“ç€ä½ 在查询时表å或列å也应使用åŒå¼•å·ï¼Œä¸€äº›å·¥å…·è½¯ä»¶ï¼ŒåƒpgAdmin会在å‘出创建表的指令时自动地在æ¯ä¸ªæ ‡è¯†ç¬¦ä¸ŠåŠ åŒå¼•å·ã€‚ - å› æ¤ï¼Œä¸ºäº†æ ‡è¯†ç¬¦çš„ç»Ÿä¸€ï¼Œä½ åº”è¯¥ï¼š -</p> -<ul> -<li>在创建表时é¿å…å°†æ ‡è¯†ç¬¦ä½¿ç”¨åŒå¼•å·å¼•èµ·æ¥ã€‚</li> -<li>åœ¨æ ‡è¯†ç¬¦ä¸åªä½¿ç”¨å°å†™å—æ¯ã€‚</li> - -<li>(为了与已å˜åœ¨çš„æ ‡è¯†ç¬¦ç›¸åŒï¼‰åœ¨æŸ¥è¯¢ä¸ä½¿ç”¨åŒå¼•å·å°†æ ‡è¯†ç¬¦å¼•èµ·æ¥ã€‚</li> -</ul> - -</body> - -</html> \ No newline at end of file diff --git a/doc/src/FAQ/FAQ_chinese_trad.html b/doc/src/FAQ/FAQ_chinese_trad.html deleted file mode 100644 index 9a56180a0848190dabf4c17d2f879c098460123e..0000000000000000000000000000000000000000 --- a/doc/src/FAQ/FAQ_chinese_trad.html +++ /dev/null @@ -1,1003 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html> -<head> - - <title>PostgreSQL 常è§é—®é¢˜ï¼ˆFAQ)</title> -</head> - - - -<body> - -<h1> PostgreSQL 常見å•é¡Œï¼ˆFAQ) </h1> - - -<p> 最近更新:2007 å¹´ 2 月 8 æ—¥ 星期二 22:43:13 EST <br/> - ä¸æ–‡ç‰ˆæœ€è¿‘更新:2007 å¹´ 2 月 12 æ—¥ 星期一 12:00:04 CST -</p> -<p> 當å‰ç¶è·äººå“¡ï¼šBruce Momjian (<a href="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</a>)<br/> - æ£é«”ä¸æ–‡ç‰ˆç¶è·äººå“¡ï¼šéƒæœç›Š(ChaoYi, Kuo)(<a href="mailto:kuo.chaoyi@gmail.com">kuo.chaoyi@gmail.com</a>)</p> - -<p> - 本文檔的最新版本å¯ä»¥åœ¨ - <a href="http://www.postgresql.org/files/documentation/faqs/FAQ.html">http://www.postgresql.org/files/documentation/faqs/FAQ.html</a> 查看。 -</p> -<p> - 與作æ¥ç³»çµ±å¹³å°ç›¸é—œçš„å•é¡Œå¯åœ¨ <a href="http://www.postgresql.org/docs/faq/">http://www.postgresql.org/docs/faq/</a> 裡找到ç”案。<br/> -</p> -<hr/> - -<h2><a name="常見å•é¡Œ"> 常見å•é¡Œ </a></h2> - - -<p> -<a href="#1.1">1.1</a>)PostgreSQL 是什麼?該怎麼發音?<br/> -<a href="#1.2">1.2</a>)誰控制和管ç†PostgreSQL ?<br/> -<a href="#1.3">1.3</a>)PostgreSQL的版權是什麼?<br/> -<a href="#1.4">1.4</a>)PostgreSQLå¯ä»¥é‹è¡Œåœ¨å“ªäº›ä½œæ¥ç³»çµ±å¹³å°ä¸Šï¼Ÿ<br/> -<a href="#1.5">1.5</a>)我從哪裡能得到PostgreSQL?<br/> - -<a href="#1.6">1.6</a>)最新版的 PostgreSQL 是什麼?<br/> -<a href="#1.7">1.7</a>)æˆ‘å¾žå“ªè£¡èƒ½å¾—åˆ°å° PostgreSQL 的支æŒï¼Ÿ<br/> -<a href="#1.8">1.8</a>)我如何æ交一個 BUG å ±å‘Šï¼Ÿ<br/> -<a href="#1.9">1.9</a>)我如何çžè§£å·²çŸ¥çš„ BUG 或暫缺的功能?<br/> -<a href="#1.10">1.10</a>)èƒ½å¤ ç²å–的最新文檔有哪些?<br/> -<a href="#1.11">1.11</a>)我應該怎樣å¸ç¿’ SQL ?<br/> - -<a href="#1.12">1.12</a>)如何æ交補ä¸æˆ–æ˜¯åŠ å…¥é–‹ç™¼éšŠä¼ï¼Ÿ<br/> -<a href="#1.13">1.13</a>)PostgreSQL 和其他資料庫系統比起來如何?<br/> -<a href="#1.14">1.14</a>)PostgreSQL å¯ä»¥è™•ç†æœ€è¿‘å„個國家å¤æ™‚制的變化嗎?<br/> -</p> - -<h2><a name="用戶客戶端å•é¡Œ"> 用戶客戶端å•é¡Œ </a></h2> -<p> -<a href="#2.1">2.1</a>)我們å¯ä»¥ç”¨ä»€éº¼èªžè¨€å’Œ PostgreSQL 進行æºé€šï¼Ÿ<br/> -<a href="#2.2">2.2</a>)有什麼工具å¯ä»¥æŠŠ PostgreSQL 用於 Web é é¢ï¼Ÿ<br/> - -<a href="#2.3">2.3</a>)PostgreSQL æ“有圖形用戶界é¢(GUI)嗎?<br/> -</p> - -<h2><a name="系統管ç†å•é¡Œ"> 系統管ç†å•é¡Œ </a></h2> -<p> -<a href="#3.1">3.1</a>)我怎樣æ‰èƒ½æŠŠ PostgreSQL è£åœ¨ /usr/local/pgsql 以外的地方?<br/> -<a href="#3.2">3.2</a>)我如何控制來自其他電腦的連接?<br/> -<a href="#3.3">3.3</a>)我怎樣調整資料庫伺æœå™¨ä»¥ç²å¾—更好的性能?<br/> - -<a href="#3.4">3.4</a>)PostgreSQL 裡å¯ä»¥ç²å¾—什麼樣的調試特性?<br/> -<a href="#3.5">3.5</a>)為什麼在試圖連接登錄時收到「Sorry, too many clients〠訊æ¯ï¼Ÿ<br/> -<a href="#3.6">3.6</a>)PostgreSQL çš„å‡ç´šéŽç¨‹æœ‰å“ªäº›å…§å®¹ï¼Ÿ<br/> -<a href="#3.7">3.7</a>)(使用 PostgreSQL )我需è¦ä½¿ç”¨ä»€éº¼é›»è…¦ç¡¬é«”?<br/> -</p> - -<h2><a name="æ“作å•é¡Œ"> æ“作å•é¡Œ </a></h2> - -<p> -<a href="#4.1">4.1</a>) 如何åªé¸æ“‡ä¸€å€‹æŸ¥è©¢çµæžœçš„é 幾行?或是隨機的一行?<br/> -<a href="#4.2">4.2</a>) 如何查看表ã€ç´¢å¼•ã€è³‡æ–™åº«ä»¥åŠç”¨æˆ¶çš„定義?如何查看<i> psql</i> 裡用到的查詢指令並顯示它們?<br/> -<a href="#4.3">4.3</a>) 如何更改一個欄ä½çš„資料類型?<br/> -<a href="#4.4">4.4</a>) å–®ç†è¨˜éŒ„,單一表,一個資料庫的最大é™åˆ¶æ˜¯å¤šå°‘?<br/> -<a href="#4.5">4.5</a>) å˜å„²ä¸€å€‹å…¸åž‹çš„文本文件裡的資料需è¦å¤šå°‘ç£ç¢Ÿç©ºé–“?<br/> - -<a href="#4.6">4.6</a>) 為什麼我的查詢很慢?為什麼這些查詢沒有利用索引?<br/> -<a href="#4.7">4.7</a>) 我如何æ‰èƒ½çœ‹åˆ°æŸ¥è©¢å„ªåŒ–器是怎樣評估處ç†æˆ‘的查詢的?<br/> -<a href="#4.8">4.8</a>) 我怎樣åšæ£å‰‡è¡¨é”å¼æœç´¢å’Œå¤§å°å¯«ç„¡é—œçš„æ£å‰‡è¡¨é”å¼æŸ¥æ‰¾ï¼Ÿæ€Žæ¨£åˆ©ç”¨ç´¢å¼•é€²è¡Œå¤§å°å¯«ç„¡é—œæŸ¥æ‰¾ï¼Ÿ<br/> -<a href="#4.9">4.9</a>) 在一個查詢裡,我怎樣檢測一個欄ä½æ˜¯å¦ç‚º NULL?我如何æ‰èƒ½æº–確排åºè€Œä¸è«–æŸæ¬„ä½æ˜¯å¦å«NULL值?<br/> -<a href="#4.10">4.10</a>) å„種å—符類型之間有什麼ä¸åŒï¼Ÿ<br/> -<a href="#4.11.1">4.11.1</a>) 我怎樣創建一個åºåˆ—號型或是自動éžå¢žçš„欄ä½ï¼Ÿ<br/> - -<a href="#4.11.2">4.11.2</a>) 我如何ç²å¾—一個æ’入的åºåˆ—號的值?<br/> -<a href="#4.11.3">4.11.3</a>) åŒæ™‚使用 currval() 會導致和其他用戶的è¡çªæƒ…æ³å—Žï¼Ÿ<br/> -<a href="#4.11.4">4.11.4</a>) 為什麼ä¸åœ¨äº‹å‹™ç•°å¸¸ä¸æ¢å¾Œé‡ç”¨åºåˆ—號呢?為什麼在åºåˆ—號欄ä½çš„å–值ä¸å˜åœ¨é–“斷呢?<br/> -<a href="#4.12">4.12</a>) 什麼是 OID?什麼是 CTID ?<br/> -<a href="#4.13">4.13</a>) 為什麼我收到錯誤資訊「<i>ERROR: Memory exhausted in AllocSetAlloc()</i>ã€ï¼Ÿ<br/> - -<a href="#4.14">4.14</a>) 我如何æ‰èƒ½çŸ¥é“所é‹è¡Œçš„ PostgreSQL 的版本?<br/> -<a href="#4.15">4.15</a>) 我如何創建一個é è¨å€¼æ˜¯ç•¶å‰æ™‚間的欄ä½ï¼Ÿ<br/> -<a href="#4.16">4.16</a>) 如何執行外連接(outer join)查詢?<br/> -<a href="#4.17">4.17</a>) 如何執行涉åŠå¤šå€‹è³‡æ–™åº«çš„查詢?<br/> -<a href="#4.18">4.18</a>) 如何讓函數返回多行或多列資料?<br/> -<a href="#4.19">4.19</a>) 為什麼我在使用 PL/PgSQL 函數å˜å–臨時表時會收到錯誤資訊「relation with OID ##### does not existã€ï¼Ÿ<br/> - -<a href="#4.20">4.20</a>) ç›®å‰æœ‰å“ªäº›è³‡æ–™è¤‡å¯«(replication)方案å¯ç”¨ï¼Ÿ<br/> -<a href="#4.21">4.21</a>) 為何查詢çµæžœé¡¯ç¤ºçš„表å或欄å與我的查詢語å¥ä¸çš„ä¸åŒï¼Ÿç‚ºä½•å¤§å¯«ç‹€æ…‹ä¸èƒ½ä¿ç•™ï¼Ÿ<br/> -</p> - -<hr/> - -<h2><a name="常見å•é¡Œ"> 常見å•é¡Œ </a></h2> - -<h3><a name="常見å•é¡Œ"> </a><a name="1.1">1.1) PostgreSQL 是什麼?該怎麼發音? </a></h3> - - -<p><a name="1.1">PostgreSQL 讀作 <i>Post-Gres-Q-L</i>,有時候也簡稱為<i>Postgres</i> 。想è½ä¸€ä¸‹å…¶ç™¼éŸ³çš„人員å¯å¾žé€™è£¡ä¸‹è¼‰è²éŸ³æ–‡ä»¶ï¼š - </a><a href="http://www.postgresql.org/files/postgresql.mp3">MP3 æ ¼å¼</a> 。 -</p> - -<p>PostgreSQL 是é¢å‘目標的關係資料庫系統,它具有傳統商æ¥è³‡æ–™åº«ç³»çµ±çš„所有功能,åŒæ™‚åˆå«æœ‰å°‡åœ¨ä¸‹ä¸€ä»£ DBMS 系統的使用的增強特性。PostgreSQL 是自由å…費的,並且所有æºä»£ç¢¼éƒ½å¯ä»¥ç²å¾—。 -</p> - -<p>PostgreSQL 的開發隊ä¼ä¸»è¦ç‚ºå¿—願者,他們é佈世界å„地並通éŽäº’è¯ç¶²é€²è¡Œè¯ç¹«ï¼Œé€™æ˜¯ä¸€å€‹ç¤¾å€é–‹ç™¼é …目,它ä¸è¢«ä»»ä½•å…¬å¸æŽ§åˆ¶ã€‚ - å¦‚æƒ³åŠ å…¥é–‹ç™¼éšŠä¼ï¼Œè«‹åƒè¦‹é–‹ç™¼äººå“¡å¸¸è¦‹å•é¡Œï¼ˆFAQ) - <a href="http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html">http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html</a> - -</p> - -<h3> <a name="1.2">1.2) 誰控制 PostgreSQL ? </a></h3> -<p> -<a name="1.2"> å¦‚æžœä½ åœ¨å°‹æ‰¾PostgreSQL的掌門人,或是什麼ä¸å¤®å§”員會,或是什麼所屬公å¸ï¼Œä½ åªèƒ½æ”¾æ£„了---å› ç‚ºä¸€å€‹ä¹Ÿä¸å˜åœ¨ï¼Œä½†æˆ‘們的確有一個 - æ ¸å¿ƒå§”å“¡æœƒå’ŒCVS管ç†çµ„,但這些工作組的è¨ç«‹ä¸»è¦æ˜¯ç‚ºäº†é€²è¡Œç®¡ç†å·¥ä½œè€Œä¸æ˜¯å°PostgreSQL進行ç¨ä½”å¼æŽ§åˆ¶ï¼ŒPostgreSQLé …ç›®æ˜¯ç”±ä»»ä½•äººå‡ - å¯åƒåŠ 的開發人員社å€å’Œæ‰€æœ‰ç”¨æˆ¶æŽ§åˆ¶çš„ï¼Œä½ æ‰€éœ€è¦åšçš„就是訂閱郵件列表,åƒèˆ‡è¨Žè«–å³å¯ï¼ˆè¦åƒèˆ‡PostgreSQL的開發詳見 - </a><a href="http://www.postgresql.org/docs/faqs.FAQ_DEV.html"> 開發人員常å•é¡Œ (Developer's FAQ) </a>ç²å–資訊)。 -</p> - - -<h3> <a name="1.3">1.3) PostgreSQL 的版權是什麼? </a></h3> - - -<p><a name="1.3">PostgreSQL的發布éµå¾žç¶“典的 BSD 版權。它å…許用戶ä¸é™ç›®çš„地使用 PostgreSQLï¼Œç”šè‡³ä½ å¯ä»¥éŠ·å”® -PostgreSQL 而ä¸å«æºä»£ç¢¼ä¹Ÿå¯ä»¥ï¼Œå”¯ä¸€çš„é™åˆ¶å°±æ˜¯ä½ ä¸èƒ½å› 軟體自身å•é¡Œè€Œå‘我們追訴法律責任,å¦å¤–就是è¦æ±‚所有的軟體拷è²ä¸é ˆåŒ…括以下版權è²æ˜Žã€‚ -下é¢å°±æ˜¯æˆ‘們所使用的BSD版權è²æ˜Žå…§å®¹ï¼š</a></p> - -<p><a name="1.3">PostgreSQL 資料庫管ç†ç³»çµ±</a></p> - -<p><a name="1.3"> 部分版權(c)1996-2005,PostgreSQL å…¨çƒé–‹ç™¼å°çµ„,部分版權(c)1994-1996 åŠ å·žå¤§å¸è‘£äº‹</a></p> - -<p><a name="1.3"> (Portions copyright (c) 1996-2005,PostgreSQL Global -Development Group Portions Copyright (c) 1994-6 Regents of the -University of California)</a></p> - -<p> -<a name="1.3"> å…許為任何目的使用,拷è²ï¼Œä¿®æ”¹å’Œåˆ†ç™¼é€™å€‹è»Ÿé«”和它的文檔而ä¸æ”¶å–任何費用, - ä¸¦ä¸”ç„¡é ˆç°½ç½²å› æ¤è€Œç”¢ç”Ÿçš„è‰æ˜Žï¼Œå‰æ是上é¢çš„版權è²æ˜Žå’Œæœ¬æ®µä»¥åŠä¸‹é¢å…©æ®µæ–‡å—出ç¾åœ¨æ‰€æœ‰æ‹·è²ä¸ã€‚ - -</a></p> - -<p> -<a name="1.3"> (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.) -</a></p> - -<p> -<a name="1.3"> 在任何情æ³ä¸‹ï¼ŒåŠ 州大å¸éƒ½ä¸æ‰¿æ“”å› ä½¿ç”¨æ¤è»Ÿé«”åŠå…¶æ–‡æª”而導致的å°ä»»ä½•ç•¶äº‹äººçš„直接的, - é–“æŽ¥çš„ï¼Œç‰¹æ®Šçš„ï¼Œé™„åŠ çš„æˆ–è€…ç›¸ä¼´è€Œç”Ÿçš„æ壞,包括利益æ失的責任,å³ä½¿åŠ 州大å¸å·²ç¶“建è°äº†é€™äº›æ失的å¯èƒ½æ€§æ™‚也是如æ¤ã€‚ -</a></p> - -<p> -<a name="1.3"> (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.) -</a></p> - - -<p> -<a name="1.3"> åŠ å·žå¤§å¸æ˜Žç¢ºæ”¾æ£„任何ä¿è‰ï¼ŒåŒ…括但ä¸å±€é™æ–¼æŸä¸€ç‰¹å®šç”¨é€”的商æ¥å’Œåˆ©ç›Šçš„éš±å«ä¿è‰ã€‚ - 這裡æ供的這份軟體是基於「當作是ã€çš„åŸºç¤Žçš„ï¼Œå› è€ŒåŠ å·žå¤§å¸æ²’有責任æä¾›ç¶è·ï¼Œæ”¯æŒï¼Œæ›´æ–°ï¼Œå¢žå¼·æˆ–者修改的æœå‹™ã€‚ -</a></p> - -<p> -<a name="1.3"> (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.)<br/> - -</a></p> - -<h3><a name="1.3"> </a><a name="1.4">1.4) PostgreSQL å¯ä»¥é‹è¡Œåœ¨å“ªäº›ä½œæ¥ç³»çµ±å¹³å°ä¸Šï¼Ÿ </a></h3> - -<p><a name="1.4"> 一般說來,任何ç¾åœ¨å° UNIX 相容的作æ¥ç³»çµ±ä¹‹ä¸Šéƒ½èƒ½é‹è¡Œ PostgreSQL 。在安è£æŒ‡å—裡列出了發佈時經éŽæ˜Žç¢ºæ¸¬è©¦çš„å¹³å°ã€‚</a></p> - - -<p><a name="1.4">PostgreSQL 也å¯ä»¥ç›´æŽ¥é‹è¡Œåœ¨åŸºæ–¼å¾®è»Ÿ Windows-NT 的作æ¥ç³»çµ±ï¼Œå¦‚ Win2000 SP4,WinXP å’Œ Win2003,已製作完æˆçš„安è£åŒ…å¯å¾ž - </a><a href="http://pgfoundry.org/projects/pginstaller">http://pgfoundry.org/projects/pginstaller</a>下載,基於MSDOSçš„Windows作æ¥ç³»çµ± - (Win95,Win98,WinMe)需è¦é€šéŽCygwin模擬環境é‹è¡ŒPostgreSQL。 -</p> - -<p> - åŒæ™‚也有一個為 Novell Netware 6 開發的版本å¯å¾ž <a href="http://forge.novell.com" target="_top">http://forge.novell.com</a> ç²å–,為OS/2(eComStation)開發的版本å¯å¾ž - <a href="http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2F" target="_top">http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2F</a> 下載。 - -</p> - -<h3> <a name="1.5">1.5) 我從哪裡能得到 PostgreSQL? </a></h3> - -<p> -<a name="1.5"> 通éŽç€è¦½å™¨å¯å¾ž </a><a href="http://www.postgresql.org/ftp/">http://www.postgresql.org/ftp/</a> 下載,也å¯é€šéŽFTP,從 - <a href="ftp://ftp.PostgreSQL.org/pub/">ftp://ftp.PostgreSQL.org/pub/</a> 站點下載。 -</p> - -<h3> <a name="1.6">1.6) 最新版的 PostgreSQL 是什麼? </a></h3> - - -<p><a name="1.6">PostgreSQL 最新的版本是版本 8.2.3 。</a></p> - -<p><a name="1.6">我們計劃æ¯å¹´ç™¼ä½ˆä¸€å€‹ä¸»è¦å‡ç´šç‰ˆæœ¬ï¼Œæ¯å¹¾å€‹æœˆç™¼ä½ˆä¸€å€‹å°ç‰ˆæœ¬ã€‚</a></p> - - -<h3><a name="1.6"> </a><a name="1.7">1.7) æˆ‘å¾žå“ªè£¡èƒ½å¾—åˆ°å° PostgreSQL 的支æŒï¼Ÿ </a></h3> - -<p><a name="1.7">PostgreSQL社å€é€šéŽéƒµä»¶åˆ—表為其大多數用戶æ供幫助,訂閱郵件列表的主站點是 </a><a href="http://www.postgresql.org/community/lists/" target="_top">http://www.postgresql.org/community/lists/</a>,一般情æ³ä¸‹ï¼Œå…ˆåŠ å…¥<i>General</i> 或 <i>Bug</i>郵件列表是一個較好的開始。 -</p> - -<p> - 主è¦çš„IRCé »é“是在FreeNode(<i>irc.freenode.net</i>)çš„<i>#postgresql</i>,為了連上æ¤é »é“,å¯ä»¥ä½¿ç”¨ UNIX ç¨‹åº ircï¼Œå…¶æŒ‡ä»¤æ ¼å¼ï¼š - irc -c '#postgresql' "$USER" irc.freenode.net ,或者使用其他IRC客戶端程åºã€‚在æ¤ç¶²çµ¡ä¸é‚„å˜åœ¨ä¸€å€‹ PostgreSQL 的西çç‰™é »é“(<i>#postgersql-es</i>)å’Œæ³•èªžé »é“ - (<i>#postgresql-fr</i>)。åŒæ¨£åœ°ï¼Œåœ¨ EFNET 上也有一個 PostgreSQL 的交æµé »é“。 -</p> - -<p> - å¯æ供商æ¥æ”¯æŒçš„å…¬å¸åˆ—表å¯åœ¨ <a href="http://techdocs.postgresql.org/companies.php" target="_top">http://techdocs.postgresql.org/companies.php</a> ç€è¦½ã€‚ - -</p> - - - -<h3> <a name="1.8">1.8) 我如何æ交一個 BUG å ±å‘Šï¼Ÿ </a></h3> - -<p> -<a name="1.8"> å¯è¨ªå• </a><a href="http://www.postgresql.org/support/submitbug">http://www.postgresql.org/support/submitbug</a>,填寫 Bug ä¸Šå ±è¡¨æ ¼å³å¯ï¼ŒåŒæ¨£ä¹Ÿå¯è¨ªå• ftp 站點 <a href="ftp://ftp.PostgreSQL.org/pub/">ftp://ftp.PostgreSQL.org/pub/</a> 檢查有無更新的PostgreSQL 版本或補ä¸ã€‚ -</p> - - -<p> -通éŽä½¿ç”¨ Bug æäº¤è¡¨æ ¼æˆ–æ˜¯ç™¼å¾€ PostgreSQL 郵件列表的 Bug 通常會有以下之一回覆: -</p> - -<ul> -<li>所æ交內容ä¸æ˜¯ä¸€å€‹ Bug åŠå…¶ä¸æ˜¯ Bug çš„åŽŸå› ã€‚</li> -<li>所æ交內容是一個已知的 Bug ä¸¦ä¸”å·²ç¶“åŠ å…¥ TODO 待處ç†ä»»å‹™åˆ—表。</li> -<li>所æ交的 Bug 已在當å‰ç‰ˆæœ¬ä¸è¢«ä¿®æ£ã€‚</li> -<li>所æ交的 Bug 已修æ£ä½†å°šæœªå°‡è£œä¸åŠ å…¥ç¾åœ¨çš„發布軟體包。</li> -<li>請求æ交者æ供更詳細的資訊: - <ul> - <li>作æ¥ç³»çµ±</li> - - <li>PostgreSQL 版本</li> - <li>å¯é‡ç¾ Bug 的測試案例</li> - <li>調試資訊</li> - <li>調試跟蹤輸出</li> - </ul> -</li> -<li>所æ交內容是一個新 Bug,將執行以下工作: - <ul> - - <li>創建一個新補ä¸ä¸¦å°‡å…¶åŠ 入下一個主è¦ç‰ˆæœ¬æˆ–是å°çš„改進版本ä¸ã€‚</li> - <li>æ¤ Bug 暫時ä¸èƒ½ä¿®æ£ï¼Œå°‡è¢«åŠ 至 TODO 待處ç†ä»»å‹™åˆ—表。</li> - </ul> -</li> -</ul> - - -<h3> <a name="1.9">1.9) 我如何çžè§£å·²çŸ¥çš„ BUG 或暫缺的功能? </a></h3> -<p><a name="1.9">PostgreSQL 支æŒä¸€å€‹æ“´å±•çš„ SQL:2003 çš„å集。åƒé–±æˆ‘們的</a><a href="http://www.postgresql.org/docs/faqs.TODO.html"> TODO</a> 列表,çžè§£å·²çŸ¥ Bug 列表ã€æš«ç¼ºçš„功能和將來的開發計劃。 - -</p> - -<p>è¦æ±‚å¢žåŠ æ–°åŠŸèƒ½çš„ç”³è«‹é€šå¸¸æœƒæ”¶åˆ°ä»¥ä¸‹ä¹‹ä¸€çš„å›žè¦†ï¼š</p> - -<ul> -<li>è©²åŠŸèƒ½å·²åŠ å…¥ TODO 待處ç†ä»»å‹™åˆ—表。</li> -<li>該功能ä¸æ˜¯å¿…é ˆçš„ï¼Œå› ç‚ºï¼š - <ul> - <li>它是ç¾æœ‰çš„ä¸”ç¬¦åˆ SQL 標準的æŸåŠŸèƒ½çš„é‡è¤‡ã€‚</li> - <li>è©²åŠŸèƒ½æ€§æœƒå¤§å¤§å¢žåŠ ä»£ç¢¼çš„è¤‡é›œç¨‹åºï¼Œè€Œå¸¶ä¾†çš„好處是微ä¸è¶³é“的。</li> - <li>該功能是ä¸å®‰å…¨æˆ–是ä¸å¯é 的。</li> - - </ul> -</li> -<li>è©²åŠŸèƒ½å°‡è¢«åŠ å…¥ TODO 待處ç†ä»»å‹™åˆ—表。</li> -</ul> - -<p> -PostgreSQL ä¸ä½¿ç”¨ Bug è·Ÿè¹¤ç³»çµ±ï¼Œå› ç‚ºæˆ‘å€‘ç™¼ç¾åœ¨éƒµä»¶åˆ—表ä¸ç›´æŽ¥å›žè¦†ä»¥åŠä¿è‰ TODO 任務列表總是處於最新狀態的方å¼å·¥ä½œæ•ˆçŽ‡æœƒæ›´é«˜ä¸€äº›ã€‚事實上,Bugä¸æœƒåœ¨æˆ‘們的軟體ä¸å˜åœ¨å¾ˆé•·æ™‚間, -å°å½±éŸ¿å¾ˆå¤šç”¨æˆ¶çš„Bug也總是很快會被修æ£ã€‚唯一能找到所有改進ã€æ高和修æ£çš„地方是 CVS 的日誌資訊,å³ä½¿æ˜¯åœ¨è»Ÿé«”新版本的發布資訊ä¸ä¹Ÿä¸æœƒåˆ—出æ¯ä¸€è™•çš„軟體更新。 -</p> - - - -<h3> <a name="1.10">1.10) èƒ½å¤ ç²å–的最新文檔有哪些? </a></h3> - - -<p><a name="1.10">PostgreSQL 包å«å¤§é‡çš„文檔,主è¦æœ‰è©³ç´°çš„åƒè€ƒæ‰‹å†Šï¼Œæ‰‹å†Šé 和一些的測試例å。åƒè¦‹ /doc 目錄(è¯è¨»ï¼šæ‡‰ç‚º $PGHOME/doc)。 - ä½ é‚„å¯ä»¥åœ¨ç·šç€è¦½ PostgreSQL 的手冊,其網å€æ˜¯ï¼š</a><a href="http://www.PostgreSQL.org/docs">http://www.PostgreSQL.org/docs</a>。 -</p> - -<p> - 有兩本關於PostgreSQL的書在線æ供,在 - <a href="http://www.postgresql.org/docs/books/awbook.html">http://www.postgresql.org/docs/books/awbook.html</a> - å’Œ <a href="http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook/</a> 。 - 也有大é‡çš„ PostgreSQL 書ç±å¯ä¾›è³¼è²·ï¼Œå…¶ä¸æœ€ç‚ºæµè¡Œçš„一本是由 Korry Douglas 編寫的。在 - <a href="http://techdocs.PostgreSQL.org/techdocs/bookreviews.php">http://techdocs.PostgreSQL.org/techdocs/bookreviews.php</a>上 - 上有大é‡æœ‰é—œ PostgreSQL 書ç±çš„簡介。 - 在 <a href="http://techdocs.PostgreSQL.org/">http://techdocs.PostgreSQL.org/</a> 上收集了有關 PostgreSQL 的大é‡æŠ€è¡“æ–‡ç« ã€‚</p> - -<p> - 客戶端的命令行程åº<i>psql</i>有一些以 \d é–‹é 的命令,å¯é¡¯ç¤ºé—œæ–¼é¡žåž‹ï¼Œæ“作符,函數,èšåˆç‰è³‡è¨Šï¼Œä½¿ç”¨ \? å¯ä»¥é¡¯ç¤ºæ‰€æœ‰å¯ç”¨çš„命令。 -</p> - -<p> - 我們的 web 站點包å«æ›´å¤šçš„文檔。 -</p> - - - -<h3> <a name="1.11">1.11) 我應該怎樣å¸ç¿’ SQL ? </a></h3> - -<p> -<a name="1.11"> 首先考慮上述æ到的與PostgreSQL相關的書ç±ï¼Œå¦å¤–一本是 <i>Teach Yourself SQL in 21 Days, Second Edition</i>,其詳細介紹的網å€æ˜¯ - </a><a href="http://members.tripod.com/er4ebus/sql/index.htm">http://members.tripod.com/er4ebus/sql/index.htm</a>, - 我們的許多用戶喜æ¡<i>The Practical SQL Handbook</i>, Bowman, Judith S. 編寫,Addison-Wesleyå…¬å¸å‡ºç‰ˆï¼Œå…¶ä»–çš„å‰‡å–œæ¡ - <i>The Complete Reference SQL</i>, Groff 編寫,McGraw-Hill å…¬å¸å‡ºç‰ˆã€‚ -</p> - -<p>在下列網å€ä¸Šä¹Ÿæœ‰å¾ˆå¥½çš„教程,他們是</p> -<ul> -<li><a href="http://www.intermedia.net/support/sql/sqltut.shtm">http://www.intermedia.net/support/sql/sqltut.shtm</a></li> -<li><a href="http://sqlcourse.com/">http://sqlcourse.com.</a></li> -<li><a href="http://www.w3schools.com/sql/default.asp">http://www.w3schools.com/sql/default.asp</a></li> -<li><a href="http://mysite.verizon.net/Graeme_Birchall/id1.html">http://mysite.verizon.net/Graeme_Birchall/id1.html</a></li> -</ul> - - - -<h3> <a name="1.12">1.12)如何æ交補ä¸æˆ–æ˜¯åŠ å…¥é–‹ç™¼éšŠä¼ï¼Ÿ </a></h3> -<p> -<a name="1.12"> 詳見</a><a href="http://www.PostgreSQL.org/docs/awbook.html"> 開發人員常見å•é¡Œ (Developer's FAQ) </a>。</p> - - -<h3> <a name="1.13">1.13) PostgreSQL 和其他資料庫系統比起來如何? </a></h3> - -<p> -<a name="1.13">評價軟體有好幾種方法:功能,性能,å¯é 性,支æŒå’Œåƒ¹æ ¼ã€‚ -</a></p> - -<dl> -<a name="1.13"> <dt><b>功能</b></dt> - <dd>PostgreSQL æ“有大型商用資料庫最多的功能,例如:事務,å查詢,觸發器,視圖,外éµåƒè€ƒå®Œæ•´æ€§å’Œè¤‡é›œçš„鎖定ç‰ã€‚ - 我們還有一些它們沒有的特性,如用戶定義類型,繼承,è¦å‰‡å’Œå¤šç‰ˆæœ¬ä¸¦è¡ŒæŽ§åˆ¶ä»¥æ¸›å°‘鎖的çˆç”¨ç‰ã€‚<br/> - - </dd> - - <dt><b>性能</b></dt> - <dd>PostgreSQL和其他商用和開æºçš„資料庫具有類似的性能。å°æŸäº›è™•ç†å®ƒæ¯”較快,å°å…¶ä»–一些處ç†å®ƒæ¯”較慢。 - 與其他資料庫相比,我們的性能優劣通常在 +/- 10%之間。<br/> - </dd> - - <dt><b>å¯é 性</b></dt> - <dd> - - 我們都知é“è³‡æ–™åº«å¿…é ˆæ˜¯å¯é 的,å¦å‰‡å®ƒå°±ä¸€é»žç”¨éƒ½æ²’有。我們努力åšåˆ°ç™¼ä½ˆç¶“éŽèªçœŸæ¸¬è©¦çš„,缺陷最少的穩定代碼。æ¯å€‹ç‰ˆæœ¬è‡³å°‘有一個月的 beta - 測試時間,並且我們的發布æ·å²é¡¯ç¤ºæˆ‘們å¯ä»¥æ供穩定的,牢固的,å¯ç”¨æ–¼ç”Ÿç”¢ä½¿ç”¨çš„版本。我們相信在這方é¢æˆ‘們與其他的資料庫軟體是相當的。<br/> - </dd> - - <dt><b>支æŒ</b></dt> - <dd> - 我們的郵件列表æ供一個éžå¸¸å¤§çš„開發人員和用戶的組以幫助解決所碰到的任何å•é¡Œã€‚我們ä¸èƒ½ä¿è‰ç¸½æ˜¯èƒ½è§£æ±ºå•é¡Œï¼Œç›¸æ¯”之下,商用資料庫軟體也並ä¸æ˜¯ç¸½èƒ½å¤ æ供解決方法。 - 直接與開發人員,用戶群,手冊和æºç¨‹åºæŽ¥è§¸ä½¿PostgreSQL的支æŒæ¯”其他資料庫還è¦å¥½ã€‚還有一些商æ¥æ€§çš„å…¨é¢æŠ€è¡“支æŒï¼Œå¯ä»¥çµ¦æ供給那些需è¦çš„人。(åƒé–±1.7 å°ç¯€ï¼‰<br/> - </dd> - - - <dt><b>åƒ¹æ ¼</b></dt> - <dd> - 我們å°ä»»ä½•ç”¨é€”都å…費,包括商用和éžå•†ç”¨ç›®çš„。 - ä½ å¯ä»¥ä¸åŠ é™åˆ¶åœ°å‘ä½ çš„ç”¢å“è£¡åŠ å…¥æˆ‘å€‘çš„ä»£ç¢¼ï¼Œé™¤äº†é‚£äº›æˆ‘å€‘åœ¨ä¸Šé¢çš„版權è²æ˜Žè£¡è²æ˜Žçš„ BSD版權之外的內容。 - </dd> - -</a></dl> - - -<h3><a name="1.14">1.14) PostgreSQL å¯ä»¥è™•ç†æœ€è¿‘å„個國家å¤æ™‚制的變化嗎?</a></h3> -<a name="1.14"> -</a> -<p><a name="1.14">PostgreSQL 8.0之å‰çš„版本是使用作æ¥ç³»çµ±ä¸çš„時å€è³‡æ–™åº«ä¾†è™•ç†å¤æ™‚制的資訊,自 8.0 版åŠä»¥å¾Œçš„版本 PostgreSQL 會自身å«æœ‰æœ€æ–°çš„時å€è³‡è¨Šã€‚</a></p> - - -<hr/> - - -<h2><a name="用戶客戶端å•é¡Œ"> 用戶客戶端å•é¡Œ </a></h2> - - -<h3><a name="用戶客戶端å•é¡Œ"> </a><a name="2.1">2.1) 我們å¯ä»¥ç”¨ä»€éº¼èªžè¨€å’Œ PostgreSQL 進行æºé€šï¼Ÿ </a></h3> - -<p><a name="2.1">PostgreSQL (é è¨æƒ…æ³)åªå®‰è£æœ‰ C å’Œå…§åµŒå¼ C 的接å£ï¼Œå…¶ä»–的接å£éƒ½æ˜¯ç¨ç«‹çš„é …ç›®ï¼Œèƒ½å¤ åˆ†åˆ¥ä¸‹è¼‰ï¼Œé€™äº›æŽ¥å£é …ç›®ç¨ç«‹çš„好處 - 是他們å¯ä»¥æœ‰å„自的發布計劃和å„自ç¨ç«‹çš„開發組。 -</a></p> -<p> -<a name="2.1"> 一些編程語言如 PHP éƒ½æœ‰è¨ªå• PostgreSQL 的接å£ï¼ŒPerlã€TCLã€Python 以åŠå¾ˆå¤šå…¶ä»–語言的接å£åœ¨ - </a><a href="http://gborg.postgresql.org" target="_top">http://gborg.postgresql.org</a> 網站上的<i> Drivers/Interfaces</i> å°ç¯€å¯æ‰¾åˆ°ï¼Œ - ä¸¦ä¸”é€šéŽ Internet 很容易æœç´¢åˆ°ã€‚ -</p> - - - - -<h3> <a name="2.2">2.2) 有什麼工具å¯ä»¥æŠŠ PostgreSQL 用於 Web é é¢ï¼Ÿ </a></h3> -<p> -<a name="2.2"> 一個介紹以資料庫為後å°çš„挺ä¸éŒ¯çš„站點是:</a><a href="http://www.webreview.com">http://www.webreview.com</a>。 -</p> -<p> - å°æ–¼ Web 集æˆï¼ŒPHP 是一個極好的接å£ã€‚它在 <a href="http://www.php.net/">http://www.php.net/</a>。 - -</p> -<p> - å°æ–¼è¤‡é›œçš„任務,很多人採用 Perl 接å£å’Œ 使用 CGI.pm çš„ DBD::Pg 或 mod_perl 。 -</p> - - -<h3> <a name="2.3">2.3)PostgreSQL æ“有圖形用戶界é¢å—Žï¼Ÿ </a></h3> -<p> -<a name="2.3"> 商æ¥ç”¨æˆ¶æˆ–是開æºé–‹ç™¼äººå“¡èƒ½æ‰¾åˆ°å¾ˆå¤šçš„有關 PostgreSQLçš„GUI 圖形工具軟體,在 </a><a href="http://www.postgresql.org/docs/techdocs.54">PostgreSQL社å€æ–‡æª”</a> 有一個詳細的列表。 -</p> - - -<hr/> - - - -<h2><a name="系統管ç†å•é¡Œ"> 系統管ç†å•é¡Œ </a></h2> - -<h3><a name="系統管ç†å•é¡Œ"> </a><a name="3.1">3.1)我怎樣能把 PostgreSQL è£åœ¨ /usr/local/pgsql 以外的地方? </a></h3> -<p> -<a name="3.1"> 在é‹è¡Œ configure æ™‚åŠ ä¸Š --prefix é¸é …。 -</a></p> - - - -<h3><a name="3.1"> </a><a name="3.2">3.2) 我如何控制來自其他電腦的連接? </a></h3> -<p> -<a name="3.2"> é è¨æƒ…æ³ä¸‹ï¼ŒPostgreSQL åªå…è¨±ä¾†è‡ªæœ¬æ©Ÿä¸”é€šéŽ unix 域套接å—或 TCP/IP æ–¹å¼çš„連接。 - ä½ åªæœ‰åœ¨ä¿®æ”¹äº†é…置文件 <i>postgresql.conf</i> ä¸çš„ <i>listen_addresses</i>,且也在é…置文件 <i>$PGDATA/pg_hba.conf</i> ä¸æ‰“開了 - 基於é 程電腦( host-based )的身份èªè‰ï¼Œä¸¦é‡æ–°å•Ÿå‹• PostgreSQL,å¦å‰‡å…¶ä»–電腦是ä¸èƒ½èˆ‡ä½ çš„ PostgreSQL 伺æœå™¨é€²è¡Œé€£æŽ¥çš„。 -</a></p> - - -<h3><a name="3.2"> </a><a name="3.3">3.3) 我怎樣調整資料庫引擎以ç²å¾—更好的性能? </a></h3> - - -<p> -<a name="3.3"> 有三個主è¦æ–¹é¢å¯ä»¥æå‡ PostgreSQL 的潛能。 -</a></p> - -<dl> -<a name="3.3"> <dt><b>查詢方å¼çš„變化</b></dt> - <dd> - 這主è¦æ¶‰åŠä¿®æ”¹æŸ¥è©¢æ–¹å¼ä»¥ç²å–更好的性能: - <ul> - <li>創建索引,包括表é”å¼å’Œéƒ¨åˆ†ç´¢å¼•ï¼›</li> - - <li>使用 COPY 語å¥ä»£æ›¿å¤šå€‹ Insert 語å¥ï¼›</li> - <li>將多個SQL語å¥çµ„æˆä¸€å€‹äº‹å‹™ä»¥æ¸›å°‘æ交事務的開銷;</li> - <li>從一個索引ä¸æå–多æ¢è¨˜éŒ„時使用 CLUSTERï¼›</li> - <li>從一個查詢çµæžœä¸å–出部分記錄時使用 LIMITï¼›</li> - <li>使用é ç·¨è¯å¼æŸ¥è©¢ï¼ˆPrepared Query)ï¼›</li> - <li>使用 ANALYZE 以ä¿æŒç²¾ç¢ºçš„優化統計;</li> - - <li>定期使用 VACUUM 或 <i>pg_autovacuum</i></li> - <li>進行大é‡è³‡æ–™æ›´æ”¹æ™‚先刪除索引(然後é‡å»ºç´¢å¼•ï¼‰</li> - </ul> - </dd> - - <dt><b>伺æœå™¨çš„é…ç½®</b></dt> - <dd> - - é…置文件 <i>postgres.conf</i> ä¸çš„很多è¨ç½®éƒ½æœƒå½±éŸ¿æ€§èƒ½ï¼Œæ‰€æœ‰åƒæ•¸çš„列表å¯è¦‹ï¼š - </dd> -</a><a href="http://www.postgresql.org/docs/current/static/runtime.html">管ç†å“¡æŒ‡å—/資料庫伺æœå™¨é‹è¡Œç’°å¢ƒ/資料庫伺æœå™¨é‹è¡Œé…ç½®</a>, - 有關åƒæ•¸çš„解釋å¯è¦‹ï¼š<a href="http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html" target="_top">http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html</a> å’Œ - <a href="http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html">http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html</a>。 - - - <dt><b>硬體的é¸æ“‡</b></dt> - - <dd> - 電腦硬體å°æ€§èƒ½çš„影響å¯ç€è¦½ - <a href="http://candle.pha.pa.us/main/writings/pgsql/hw_performance/index.html" target="_top">http://candle.pha.pa.us/main/writings/pgsql/hw_performance/index.html</a> å’Œ - <a href="http://www.powerpostgresql.com/PerfList/">http://www.powerpostgresql.com/PerfList/</a>。 - </dd> - -</dl> - - -<h3> <a name="3.4">3.4)PostgreSQL 裡å¯ä»¥ç²å¾—什麼樣的調試特性? </a></h3> - - -<p><a name="3.4">PostgreSQL 有很多類似<code> log_* </code>的伺æœå™¨é…置變é‡å¯ç”¨æ–¼æŸ¥è©¢çš„列å°å’Œé€²ç¨‹çµ±è¨ˆï¼Œè€Œé€™äº›å·¥ä½œå°èª¿è©¦å’Œæ€§èƒ½æ¸¬è©¦å¾ˆæœ‰å¹«åŠ©ã€‚ -</a></p> - - - -<h3><a name="3.4"> </a><a name="3.5">3.5) 為什麼在試圖連接時收到「Sorry, too many clients(已有太多用戶連接)ã€æ¶ˆæ¯ï¼Ÿ </a></h3> -<p> -<a name="3.5"> é€™è¡¨ç¤ºä½ å·²é”到é è¨ 100 個並發(åŒä½œ)後å°é€²ç¨‹æ•¸çš„é™åˆ¶ï¼Œä½ 需è¦é€šéŽä¿®æ”¹ <i>postgresql.conf</i> 文件ä¸çš„ <i>max_connections</i> 值來 - å¢žåŠ postmaster 的後å°ä½µç™¼è™•ç†æ•¸ï¼Œä¿®æ”¹å¾Œéœ€é‡æ–°å•Ÿå‹• <i>postmaster</i>。 - -</a></p> - - -<h3><a name="3.5"> </a><a name="3.6">3.6)PostgreSQL çš„å‡ç´šéŽç¨‹æœ‰å“ªäº›å…§å®¹ ? </a></h3> -<p> -<a name="3.6"> PostgreSQL 開發組å°æ¯æ¬¡å°ç‰ˆæœ¬çš„å‡ç´šä¸»è¦åªåšäº†ä¸€äº› Bug ä¿®æ£å·¥ä½œï¼Œå› æ¤å¾ž 7.4.8 å‡ç´šåˆ° 7.4.9 ä¸éœ€è¦ dump å’Œ restore,僅需è¦åœæ¢è³‡æ–™åº«ä¼ºæœå™¨ï¼Œå®‰è£æ›´æ–°å¾Œçš„軟體包,然後é‡å•Ÿä¼ºæœå™¨å³å¯ã€‚ -</a></p> -<p> -<a name="3.6"> -所有PostgreSQLçš„ç”¨æˆ¶æ‡‰è©²åœ¨æœ€æŽ¥è¿‘ï¼ˆä½ æ‰€ä½¿ç”¨çš„ä¸»ç‰ˆæœ¬ï¼‰çš„å°æ”¹é€²ç‰ˆæœ¬ç™¼ä½ˆç›¡å¿«å‡ç´šã€‚儘管æ¯æ¬¡å‡ç´šå¯èƒ½éƒ½æœ‰ä¸€é»žé¢¨éšªï¼ŒPostgreSQLçš„å°æ”¹ -進版僅僅是è¨è¨ˆç”¨ä¾†ä¿®æ£ä¸€äº› Bug 的,程å¼ç¢¼æ”¹å‹•è¼ƒå°‘,所以風險還是很å°çš„。PostgreSQL社å€èªç‚ºä¸€èˆ¬æƒ…æ³ä¸‹ä¸å‡ç´šçš„風險還是多於å‡ç´šçš„。 -</a></p> -<p> -<a name="3.6"> 主版本的å‡ç´šï¼ˆä¾‹å¦‚從 7.3 到 7.4ï¼‰é€šå¸¸æœƒä¿®æ”¹ç³»çµ±è¡¨å’Œè³‡æ–™è¡¨çš„å…§éƒ¨æ ¼å¼ã€‚ - é€™äº›æ”¹è®Šä¸€èˆ¬æ¯”è¼ƒè¤‡é›œï¼Œå› æ¤æˆ‘們ä¸ç¶æŒè³‡æ–™æ–‡ä»¶çš„å‘å¾Œå…¼å®¹æ€§ã€‚å› æ¤å¾žè€ç‰ˆæœ¬ä¸é€²è¡Œè³‡æ–™å°Žå‡ºï¼ˆdump)/然後在新版本ä¸é€²è¡Œè³‡æ–™å°Žå…¥ï¼ˆreload)å°ä¸»ç‰ˆæœ¬çš„å‡ç´šæ˜¯å¿…é ˆçš„ã€‚ - -</a></p> - -<h3><a name="3.6"> </a><a name="3.7">3.7)(使用 PostgreSQL )我需è¦ä½¿ç”¨ä»€éº¼é›»è…¦ç¡¬é«” ? </a></h3> -<p> -<a name="3.7"> 由於電腦硬體大多數是相容的,人們總是傾å‘於相信所有電腦硬體質é‡ä¹Ÿæ˜¯ç›¸åŒçš„。事實上ä¸æ˜¯ï¼Œ - ECC RAM(帶奇å¶æ ¡é©—的記憶體),SCSI (硬碟)和優質的主機æ¿æ¯”一些便宜貨è¦æ›´åŠ å¯é 且具有更好的性能。 PostgreSQL 幾乎å¯ä»¥é‹è¡Œåœ¨ä»»ä½•ç¡¬é«”上, - 但如果å¯é 性和性能å°ä½ 的系統很é‡è¦ï¼Œä½ 就需è¦å…¨é¢çš„ç ”ç©¶ä¸€ä¸‹ä½ çš„ç¡¬é«”çµ„æ…‹äº†ã€‚åœ¨æˆ‘å€‘çš„éƒµä»¶åˆ—è¡¨ä¸Šä¹Ÿæœ‰é—œæ–¼ - 硬體é…置和性價比的討論。 -</a></p> - - -<hr/> - -<h2><a name="æ“作å•é¡Œ"> æ“作å•é¡Œ </a></h2> - - - -<h3><a name="æ“作å•é¡Œ"> </a><a name="4.1">4.1) 如何åªé¸æ“‡ä¸€å€‹æŸ¥è©¢çµæžœçš„é 幾行?或是隨機的一行? </a></h3> -<p> -<a name="4.1"> å¦‚æžœä½ åªæ˜¯è¦æå–å¹¾è¡Œè³‡æ–™ï¼Œä¸¦ä¸”ä½ åœ¨åŸ·è¡ŒæŸ¥è©¢ä¸çŸ¥é“ç¢ºåˆ‡çš„è¡Œæ•¸ï¼Œä½ å¯ä»¥ä½¿ç”¨ LIMIT 功能。 - 如果有一個索引與 <i> ORDER BY</i> ä¸çš„æ¢ä»¶åŒ¹é…,PostgreSQL å¯èƒ½å°±åªè™•ç†è¦æ±‚çš„é å¹¾æ¢è¨˜éŒ„, - (å¦å‰‡å°‡å°æ•´å€‹æŸ¥è©¢é€²è¡Œè™•ç†ç›´åˆ°ç”Ÿæˆéœ€è¦çš„行)。如果在執行查詢功能時ä¸çŸ¥é“確切的記錄數, - å¯ä½¿ç”¨æ¸¸æ¨™(cursor)å’ŒFETCH功能。 -</a></p> -<p> -<a name="4.1"> å¯ä½¿ç”¨ä»¥ä¸‹æ–¹æ³•æå–一行隨機記錄的: -</a></p> -<pre><a name="4.1"> SELECT cols - FROM tab - ORDER BY random() - LIMIT 1 ; - -</a></pre> - - - -<h3><a name="4.1"> </a><a name="4.2">4.2) 如何查看表ã€ç´¢å¼•ã€è³‡æ–™åº«ä»¥åŠç”¨æˆ¶çš„定義?如何查看<i>psql</i>裡用到的查詢指令並顯示它們? </a></h3> -<p> -<a name="4.2"> 在<i>psql</i>ä¸ä½¿ç”¨ \dt 命令來顯示資料表的定義,è¦çžè§£ <i>psql</i> ä¸çš„完整命令列表å¯ä½¿ç”¨ \? ,å¦å¤–ï¼Œä½ ä¹Ÿå¯ä»¥é–±è®€ <i>psql</i> çš„æºä»£ç¢¼ - 文件<i> pgsql/src/bin/psql/describe.c</i>ï¼Œå®ƒåŒ…æ‹¬ç‚ºç”Ÿæˆ <i>psql</i> å斜槓命令的輸出的所有 SQL å‘½ä»¤ã€‚ä½ é‚„å¯ä»¥å¸¶ <i>-E</i> é¸é …å•Ÿå‹• <i>psql</i>, - 這樣它將列å°å‡ºä½ 在 <i>psql</i> ä¸æ‰€çµ¦å‡ºçš„命令執行時的內部實際使用的 SQL 查詢語å¥ã€‚PostgreSQL也æ供了一個兼容 SQLçš„ INFORMATION SCHEMA 接å£ï¼Œ - ä½ å¯ä»¥å¾žé€™è£¡ç²å–關於資料庫的資訊。 - -</a></p> -<p> -<a name="4.2"> 在系統ä¸ä¹Ÿæœ‰ä¸€äº›ä»¥ <i>pg_</i> 打é 的系統表也æ述了表的定義。 -</a></p> -<p> -<a name="4.2"> 使用 <i>psql -l</i> 指令å¯ä»¥åˆ—出所有的資料庫。 -</a></p> -<p> -<a name="4.2"> 也å¯ä»¥ç€è¦½ä¸€ä¸‹ <i>pgsql/src/tutorial/syscat.source </i>文件,它列舉了很多å¯å¾žè³‡æ–™åº«ç³»çµ±è¡¨ä¸ç²å–資訊的SELECT語法。 - -</a></p> - - -<h3><a name="4.2"> </a><a name="4.3">4.3) 如何更改一個欄ä½çš„資料類型? </a></h3> -<p> -<a name="4.3"> 在8.0版本裡更改一個欄ä½çš„資料類型很容易,å¯ä½¿ç”¨ ALTER TABLE ALTER COLUMN TYPE 。 -</a></p> -<p> -<a name="4.3"> 在以å‰çš„版本ä¸ï¼Œå¯ä»¥é€™æ¨£åšï¼š -</a></p> -<pre><a name="4.3"> 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; - -</a></pre> -<p> -<a name="4.3"> ä½ ç„¶å¾Œå¯ä»¥ä½¿ç”¨<i> VACUUM FULL tab </i>指令來使系統收回無效資料所佔用的空間。 -</a></p> - -<h3><a name="4.3"> </a><a name="4.4">4.4) å–®æ¢è¨˜éŒ„,單個表,單個資料庫的最大é™åˆ¶æ˜¯å¤šå°‘? </a></h3> -<p> -<a name="4.4"> 下é¢æ˜¯ä¸€äº›é™åˆ¶ï¼š -</a></p> -<blockquote> -<a name="4.4"> </a><table> - - <tbody> - <tr><td>單個資料庫最大尺寸?</td><td>ç„¡é™åˆ¶ï¼ˆå·²å˜åœ¨æœ‰ 32TB 的資料庫)</td></tr> - <tr><td>單個表的最大尺寸?</td><td>32 TB</td></tr> - <tr><td>一行記錄的最大尺寸?</td><td>1.6 TB</td></tr> - <tr><td>一個欄ä½çš„最大尺寸?</td><td>1 GB</td></tr> - - <tr> - <td>一個表裡最大列數?</td> - <td>ç„¡é™åˆ¶</td></tr> - <tr> - <td>一個表裡最大欄ä½æ•¸ï¼Ÿ</td> - <td>250-1600 (與列類型有關)</td></tr> - <tr><td>一個表裡的最大索引數é‡ï¼Ÿ</td><td>ç„¡é™åˆ¶</td></tr> - </tbody> -</table> -</blockquote> - - -<p> -<a name="4.4"> 當然,實際上沒有真æ£çš„ç„¡é™åˆ¶ï¼Œé‚„是è¦å—å¯ç”¨ç£ç›¤ç©ºé–“ã€å¯ç”¨è¨˜æ†¶é«”/交æ›å€çš„制約。 - 事實上,當上述這些數值變得異常地大時,系統性能也會å—很大影響。 -</a></p> - -<p> -<a name="4.4"> å–®è¡¨çš„æœ€å¤§å¤§å° 32 TB ä¸éœ€è¦ä½œæ¥ç³»çµ±å°å–®å€‹æ–‡ä»¶ä¹Ÿéœ€é€™éº¼å¤§çš„支æŒã€‚大表用多個 1 GB 的文件å˜å„²ï¼Œå› æ¤æ–‡ä»¶ç³»çµ±å¤§å°çš„é™åˆ¶æ˜¯ä¸é‡è¦çš„。 -</a></p> -<p> -<a name="4.4"> 如果é è¨çš„塊大å°å¢žé•·åˆ° 32K ,最大的單表大å°å’Œæœ€å¤§åˆ—數還å¯ä»¥å¢žåŠ 到四å€ã€‚ -</a></p> -<p> -<a name="4.4"> 有一個é™åˆ¶å°±æ˜¯ä¸èƒ½å°å¤§å°å¤šæ–¼2000å—節的列創建索引。幸é‹åœ°æ˜¯é€™æ¨£çš„索引很少用到。通éŽå°å¤šå—節列的內容進行MD5哈稀é‹ç®—çµæžœé€²è¡Œå‡½æ•¸ç´¢å¼•å¯å°åˆ—的唯一性得到ä¿è‰ï¼Œ - 並且全文檢索å…許å°åˆ—ä¸çš„單詞進行æœç´¢ã€‚ -</a></p> - - -<h3><a name="4.4"> </a><a name="4.5">4.5) å˜å„²ä¸€å€‹å…¸åž‹çš„文本文件裡的資料需è¦å¤šå°‘ç£ç›¤ç©ºé–“? </a></h3> -<p> -<a name="4.5"> 一個 Postgres 資料庫(å˜å„²ä¸€å€‹æ–‡æœ¬æ–‡ä»¶ï¼‰æ‰€ä½”用的空間最多å¯èƒ½éœ€è¦ç›¸ç•¶æ–¼é€™å€‹æ–‡æœ¬æ–‡ä»¶è‡ªèº«å¤§å°5å€çš„ç£ç›¤ç©ºé–“。 -</a></p> -<p> -<a name="4.5"> 例如,å‡è¨æœ‰ä¸€å€‹ 100,000 行的文件,æ¯è¡Œæœ‰ä¸€å€‹æ•´æ•¸å’Œä¸€å€‹æ–‡æœ¬æ述。 - å‡è¨æ–‡æœ¬ä¸²çš„å¹³å‡é•·åº¦ç‚º20ä½å…ƒçµ„(Byte)。文本文件佔用 2.8 MB。å˜æ”¾é€™äº›è³‡æ–™çš„PostgreSQL資料庫文件大約是 5.2 MB: -</a></p> -<pre><a name="4.5"> 24 å—元組: æ¯è¡Œçš„é (大約值) - 24 å—元組節: 一個整數型欄ä½å’Œä¸€å€‹æ–‡æœ¬åž‹æ¬„ä½ - + 4 å—元組節: é é¢å…§æŒ‡å‘å…ƒçµ„çš„æŒ‡é‡ - ---------------------------------------- - 52 å—元組æ¯è¡Œ - - PostgreSQL 資料é 的大å°æ˜¯ 8192 ä½å…ƒçµ„ (8 KB),則: - - 8192 å—元組æ¯é - ------------------- = 158 è¡Œ/資料é (å‘下å–整) - 52 å—元組æ¯è¡Œ - - 100000 資料行 - -------------------- = 633 資料é (å‘上å–整) - 146 è¡Œ/資料é - - 633 資料é * 8192 å—節/é = 5,185,536 å—節(5.2 MB) -</a></pre> - - -<p> -<a name="4.5"> 索引ä¸éœ€è¦é€™éº¼å¤šçš„é¡å¤–æ¶ˆè€—ï¼Œä½†ä¹Ÿç¢ºå¯¦åŒ…æ‹¬è¢«ç´¢å¼•çš„è³‡æ–™ï¼Œå› æ¤å®ƒå€‘也å¯èƒ½å¾ˆå¤§ã€‚ -</a></p> -<p> -<a name="4.5"> 空值<i> NULL </i>å˜æ”¾åœ¨ä½åœ–ä¸ï¼Œå› æ¤ä½”用很少的空間。 -</a></p> - -<h3><a name="4.5"> </a><a name="4.6">4.6) 為什麼我的查詢很慢?為什麼這些查詢沒有利用索引? </a></h3> -<p> -<a name="4.6"> 並éžæ¯å€‹æŸ¥è©¢éƒ½æœƒè‡ªå‹•ä½¿ç”¨ç´¢å¼•ã€‚åªæœ‰åœ¨è¡¨çš„大å°è¶…éŽä¸€å€‹æœ€å°å€¼ï¼Œä¸¦ä¸”查詢åªæœƒé¸ä¸è¡¨ä¸è¼ƒå°æ¯”例的記錄時æ‰æœƒæŽ¡ç”¨ç´¢å¼•ã€‚ - é€™æ˜¯å› ç‚ºç´¢å¼•æŽƒçž„å¼•èµ·çš„éš¨å³ç£ç›¤å˜å–å¯èƒ½æ¯”直接地讀å–è¡¨ï¼ˆé †åºæŽƒçž„)更慢。 - -</a></p> -<p> -<a name="4.6"> 為了判斷是å¦ä½¿ç”¨ç´¢å¼•ï¼ŒPostgreSQL å¿…é ˆç²å¾—有關表的統計值。這些統計值å¯ä»¥ä½¿ç”¨ VACUUM ANALYZE,或 ANALYZE ç²å¾—。 - 使用統計值,優化器知é“表ä¸æœ‰å¤šå°‘è¡Œï¼Œå°±èƒ½å¤ æ›´å¥½åœ°åˆ¤æ–·æ˜¯å¦åˆ©ç”¨ç´¢å¼•ã€‚ - 統計值å°ç¢ºå®šå„ªåŒ–çš„é€£æŽ¥é †åºå’Œé€£æŽ¥æ–¹æ³•ä¹Ÿå¾ˆæœ‰ç”¨ã€‚在表的內容發生變化時,應定期進行統計值的更新收集。 -</a></p> -<p> -<a name="4.6"> 索引通常ä¸ç”¨æ–¼ ORDER BY 或執行連接。å°ä¸€å€‹å¤§è¡¨çš„ä¸€æ¬¡é †åºæŽƒçž„å†åšä¸€æ¬¡æŽ’åºé€šå¸¸æ¯”索引掃瞄è¦å¿«ã€‚然而,如果將 LIMIT å’Œ ORDER BY - çµåˆåœ¨ä¸€èµ·ä½¿ç”¨çš„è©±ï¼Œé€šå¸¸å°‡æœƒä½¿ç”¨ç´¢å¼•ï¼Œå› ç‚ºé€™æ™‚åƒ…è¿”å›žè¡¨ä¸çš„一å°éƒ¨åˆ†è¨˜éŒ„。 -</a></p> -<p> -<a name="4.6"> å¦‚æžœä½ ç¢ºä¿¡PostgreSQLçš„å„ªåŒ–å™¨ä½¿ç”¨é †åºæŽƒçž„是ä¸æ£ç¢ºçš„ï¼Œä½ å¯ä»¥ä½¿ç”¨<code>SET enable_seqscan TO 'off'</code>æŒ‡ä»¤ä¾†é—œé–‰é †åºæŽƒçž„, - 然後å†æ¬¡é‹è¡ŒæŸ¥è©¢ï¼Œä½ å°±å¯ä»¥çœ‹å‡ºä½¿ç”¨ä¸€å€‹ç´¢å¼•æŽƒçž„是å¦ç¢ºå¯¦è¦å¿«ä¸€äº›ã€‚ -</a></p> - -<p> - -<a name="4.6"> 當使用通é…符æ“作,例如 <i>LIKE</i> 或 <i>~</i> 時,索引åªèƒ½åœ¨ç‰¹å®šçš„情æ³ä¸‹ä½¿ç”¨ï¼š -</a></p> -<ul> -<a name="4.6"> </a><li><a name="4.6">å—ç¬¦ä¸²çš„é–‹å§‹éƒ¨åˆ†å¿…é ˆæ˜¯æ™®é€šå—符串,也就是說: - </a><ul> -<a name="4.6"> </a><li><a name="4.6"> <i>LIKE</i> 模å¼ä¸èƒ½ä»¥ <i>%</i> 打é 。</a></li> - -<a name="4.6"> </a><li><a name="4.6"> <i>~</i> (æ£å‰‡è¡¨é”å¼ï¼‰æ¨¡å¼å¿…é ˆä»¥ <i>^</i> 打é 。</a></li> -<a name="4.6"> </a></ul> -<a name="4.6"> </a></li> -<a name="4.6"> </a><li><a name="4.6">å—符串ä¸èƒ½ä»¥åŒ¹é…多個å—符的模å¼é¡žæ‰“é ,例如 [a-e]。</a></li> -<a name="4.6"> </a><li><a name="4.6">大å°å¯«ç„¡é—œçš„查找,如 ILIKE å’Œ ~* ç‰ä¸ä½¿ç”¨ç´¢å¼•ï¼Œä½†å¯ä»¥ç”¨ </a><a href="#4.8">4.8</a> 節æ述的表é”å¼ç´¢å¼•ã€‚</li> - - <li>åœ¨åš initdb æ™‚å¿…é ˆæŽ¡ç”¨é è¨çš„本地è¨ç½® C localeï¼Œå› ç‚ºç³»çµ±ä¸å¯èƒ½çŸ¥é“åœ¨éž C locale 情æ³æ™‚下一個最大å—符是什麼。 - 在這種情æ³ä¸‹ï¼Œä½ å¯ä»¥å‰µå»ºä¸€å€‹ç‰¹æ®Šçš„ <code>text_pattern_ops</code> 索引來用於 <small>LIKE</small> 的索引。 - </li> -</ul> -<p> - 在 8.0 之å‰çš„版本ä¸ï¼Œé™¤éžè¦æŸ¥è©¢çš„資料類型和索引的資料類型相匹é…,å¦å‰‡ç´¢å¼•ç¶“å¸¸æ˜¯æœªè¢«ç”¨åˆ°ï¼Œç‰¹åˆ¥æ˜¯å° int2, int8 和數值型的索引。 -</p> - -<h3> <a name="4.7">4.7) 我如何æ‰èƒ½çœ‹åˆ°æŸ¥è©¢å„ªåŒ–器是怎樣評估處ç†æˆ‘的查詢? </a></h3> - - -<p><a name="4.7">åƒè€ƒ <small>EXPLAIN</small> 手冊é 。</a></p> - -<h3><a name="4.7"> </a><a name="4.8">4.8) 我怎樣åšæ£å‰‡è¡¨é”å¼æœç´¢å’Œå¤§å°å¯«ç„¡é—œçš„æ£å‰‡è¡¨é”å¼æŸ¥æ‰¾ï¼Ÿæ€Žæ¨£åˆ©ç”¨ç´¢å¼•é€²è¡Œå¤§å°å¯«ç„¡é—œæŸ¥æ‰¾ï¼Ÿ </a></h3> -<p> -<a name="4.8"> æ“作符 <i> ~ </i> 處ç†æ£å‰‡è¡¨é”å¼åŒ¹é…,而 <i>~*</i> 處ç†å¤§å°å¯«ç„¡é—œçš„æ£å‰‡è¡¨é”å¼åŒ¹é…。大å°å¯«ç„¡é—œçš„ LIKE 變種æˆç‚º ILIKE。 - -</a></p> -<p> -<a name="4.8"> 大å°å¯«ç„¡é—œçš„ç‰å¼æ¯”較通常寫åšï¼š -</a></p> -<pre><a name="4.8"> SELECT * - FROM tab - WHERE lower(col) = 'abc'; -</a></pre> - -<p> -<a name="4.8"> 這樣將ä¸æœƒä½¿ç”¨æ¨™æº–的索引。但是å¯ä»¥å‰µå»ºä¸€å€‹åœ¨é€™ç¨®æƒ…æ³ä¸‹ä½¿ç”¨çš„表é”å¼ç´¢å¼•: -</a></p> -<pre><a name="4.8"> CREATE INDEX tabindex ON tab (lower(col)); - -</a></pre> -<p> -<a name="4.8"> å¦‚æžœä¸Šè¿°ç´¢å¼•åœ¨å‰µå»ºæ™‚åŠ å…¥ UNIQUE ç´„æŸï¼Œé›–然索引欄ä½è‡ªèº«å…§å®¹å¯ä»¥å˜å„²å¤§å°å¯«ä¸é™çš„內容,但如果有 UNIQUE ç´„æŸå¾Œï¼Œé€™äº›å…§å®¹ä¸èƒ½åƒ…僅是大å°å¯«ä¸åŒï¼ˆå¦å‰‡æœƒé€ æˆè¡çªï¼‰ã€‚為了ä¿è‰ä¸ç™¼ç”Ÿé€™ç¨®æƒ…æ³ï¼Œå¯ä»¥ä½¿ç”¨ CHECK ç´„æŸæ¢ä»¶æˆ–是觸發器在錄入時進行é™åˆ¶ã€‚ -</a></p> - - -<h3><a name="4.8"> </a><a name="4.9">4.9) 在一個查詢裡,我怎樣檢測一個欄ä½æ˜¯å¦ç‚º <i>NULL</i> ?我如何æ‰èƒ½æº–確排åºè€Œä¸è«–æŸæ¬„ä½æ˜¯å¦å« <i>NULL</i> 值? </a></h3> -<p> - -<a name="4.9"> 用 <small>IS NULL</small> å’Œ <small>IS NOT NULL</small> 測試這個欄ä½ï¼Œå…·é«”方法如下: -</a></p> -<pre><a name="4.9"> SELECT * - FROM tab - WHERE col IS NULL; -</a></pre> - -<p><a name="4.9">為了能å°å« <small>NULL </small>欄ä½æŽ’åºï¼Œå¯åœ¨ <small>ORDER BY</small> æ¢ä»¶ä¸ä½¿ç”¨ <small>IS NULL</small> å’Œ - <small>IS NOT NULL</small> 修飾符,æ¢ä»¶ç‚ºçœŸ <i>true</i> 將比æ¢ä»¶ç‚ºå‡ <i>false</i> 排在å‰é¢ï¼Œä¸‹é¢çš„例åå°±æœƒå°‡å« - NULL 的記錄排在çµæžœçš„上é¢éƒ¨åˆ†ï¼š - -</a></p> -<pre><a name="4.9"> SELECT * - FROM tab - ORDER BY (col IS NOT NULL) -</a></pre> - -<h3><a name="4.9"> </a><a name="4.10">4.10) å„種å—符類型之間有什麼ä¸åŒï¼Ÿ </a></h3> -<blockquote> -<a name="4.10"> </a><table width="614"> - <tbody> - <tr><th width="104">é¡žåž‹</th> - <th width="77">內部å稱</th> - <th width="417">說明</th> - </tr> - - <tr><td>VARCHAR(n)</td><td>varchar</td><td>指定了最大長度,變長å—符串,ä¸è¶³å®šç¾©é•·åº¦çš„部分ä¸è£œé½Š</td></tr> - <tr><td>CHAR(n)</td><td>bpchar</td><td>定長å—符串,實際資料ä¸è¶³å®šç¾©é•·åº¦æ™‚ï¼Œä»¥ç©ºæ ¼è£œé½Š</td></tr> - <tr><td>TEXT</td><td>text</td><td>沒有特別的上é™é™åˆ¶ï¼ˆåƒ…å—行的最大長度é™åˆ¶ï¼‰</td></tr> - <tr><td>BYTEA</td><td>bytea</td><td>變長å—節åºåˆ—(使用NULLå—符也是å…許的)</td></tr> - - <tr><td>"char"</td><td>char</td><td>單個å—符</td></tr> - </tbody> - </table> -</blockquote> - -<p> -<a name="4.10"> åœ¨ç³»çµ±è¡¨å’Œåœ¨ä¸€äº›éŒ¯èª¤è³‡è¨Šè£¡ä½ å°‡çœ‹åˆ°å…§éƒ¨å稱。 -</a></p> -<p> -<a name="4.10"> 上é¢æ‰€åˆ—çš„å‰å››ç¨®é¡žåž‹æ˜¯ "varlena"(變長)類型(也就是說,開é 的四個å—節是長度,後é¢æ‰æ˜¯è³‡æ–™ï¼‰ã€‚ - 於是實際佔用的空間比è²æ˜Žçš„大å°è¦å¤šä¸€äº›ã€‚ - 然而這些類型如定義很長時都å¯ä»¥è¢«å£“縮å˜å„²ï¼Œå› æ¤ç£ç›¤ç©ºé–“也å¯èƒ½æ¯”é 想的è¦å°‘。 - -</a></p> -<p> -<a name="4.10"> <small>VARCHAR(n)</small> 在å˜å„²é™åˆ¶äº†æœ€å¤§é•·åº¦çš„變長å—符串是最好的。 - <small>TEXT</small> é©ç”¨æ–¼å˜å„²æœ€å¤§å¯é” 1G å·¦å³ä½†æœªå®šç¾©é™åˆ¶é•·åº¦çš„å—符串。 -</a></p> -<p> -<a name="4.10"> <small>CHAR(n)</small> 最é©åˆæ–¼å˜å„²é•·åº¦ç›¸åŒçš„å—符串。 <small>CHAR(n)</small>æœƒæ ¹æ“šæ‰€çµ¦å®šçš„æ¬„ä½é•·åº¦ä»¥ç©ºæ ¼è£œè¶³ï¼ˆä¸è¶³çš„欄ä½å…§å®¹ï¼‰ï¼Œ - 而 <small>VARCHAR(n)</small> åªå˜å„²æ‰€çµ¦å®šçš„資料內容。 - <small>BYTEA</small> 用於å˜å„²äºŒé€²åˆ¶è³‡æ–™ï¼Œå°¤å…¶æ˜¯åŒ…å« NULL å—節的值。這些類型具有差ä¸å¤šçš„性能。 - -</a></p> - - - -<h3><a name="4.10"> </a><a name="4.11.1">4.11.1) 我怎樣創建一個åºåˆ—號或是自動éžå¢žçš„欄ä½ï¼Ÿ </a></h3> -<p><a name="4.11.1">PostgreSQL æ”¯æŒ SERIAL 資料類型。(欄ä½å®šç¾©ç‚ºSERIAL後)將自動創建一個åºåˆ—生æˆå™¨ï¼Œä¾‹å¦‚: -</a></p> -<pre><a name="4.11.1"> CREATE TABLE person ( - id SERIAL, - name TEXT - ); -</a></pre> -<p> -<a name="4.11.1"> 會自動轉æ›ç‚ºä»¥ä¸‹SQL語å¥ï¼š -</a></p> - -<pre><a name="4.11.1"> CREATE SEQUENCE person_id_seq; - CREATE TABLE person ( - id INT4 NOT NULL DEFAULT nextval('person_id_seq'), - name TEXT - ); -</a></pre> -<p> -<a name="4.11.1"> åƒè€ƒ create_sequence 手冊é ç²å–關於åºåˆ—生æˆå™¨çš„更多資訊。 -</a></p> - - -<h3><a name="4.11.1"> </a><a name="4.11.2">4.11.2) 我如何ç²å¾—一個æ’入的åºåˆ—號的值? </a></h3> -<p> -<a name="4.11.2"> 一種方法是在æ’入之å‰å…ˆç”¨å‡½æ•¸ nextval() 從åºåˆ—å°è±¡è£¡æª¢ç´¢å‡ºä¸‹ä¸€å€‹ SERIAL 值,然後å†ç”¨æ¤å€¼ç²¾ç¢ºåœ°æ’入。使用 - </a><a href="#4.11.1"> 4.11.1</a> 裡的例表,å¯ç”¨å½ç¢¼é€™æ¨£æ述: - -</p> -<pre> new_id = execute("SELECT nextval('person_id_seq')"); - execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')"); -</pre> -<p> - 這樣還能在其他查詢ä¸ä½¿ç”¨å˜æ”¾åœ¨ new_id 裡的新值(例如,作為åƒç…§ person 表的外éµï¼‰ã€‚ - 注æ„自動創建的 SEQUENCE å°è±¡çš„å稱將會是 <<i>table</i>>_<<i>serialcolumn</i>>_<i>seq</i>, - 這裡 table å’Œ serialcolumn åˆ†åˆ¥æ˜¯ä½ çš„è¡¨çš„åç¨±å’Œä½ çš„ SERIAL 欄ä½çš„å稱。 -</p> -<p> - 類似的,在 SERIAL å°è±¡é è¨æ’å…¥å¾Œä½ å¯ä»¥ç”¨å‡½æ•¸ currval() 檢索剛賦值的 SERIAL 值,例如: - -</p> -<pre> execute("INSERT INTO person (name) VALUES ('Blaise Pascal')"); - new_id = execute("SELECT currval('person_id_seq')"); -</pre> - -<h3> <a name="4.11.3">4.11.3) åŒæ™‚使用 <i>currval()</i> 會導致和其他用戶的è¡çªæƒ…æ³å—Žï¼Ÿ </a></h3> -<p> -<a name="4.11.3"> ä¸æœƒã€‚<i>currval()</i> è¿”å›žçš„æ˜¯ä½ æœ¬æ¬¡æœƒè©±é€²ç¨‹æ‰€è³¦çš„å€¼è€Œä¸æ˜¯æ‰€æœ‰ç”¨æˆ¶çš„當å‰å€¼ã€‚<br/> - -</a></p> - -<h3><a name="4.11.3"> </a><a name="4.11.4">4.11.4) 為什麼ä¸åœ¨äº‹å‹™ç•°å¸¸ä¸æ¢å¾Œé‡ç”¨åºåˆ—號呢?為什麼在åºåˆ—號欄ä½çš„å–值ä¸å˜åœ¨é–“斷呢? </a></h3> -<p> -<a name="4.11.4"> 為了æ高併發性,åºåˆ—號在需è¦çš„時候賦予æ£åœ¨é‹è¡Œçš„事務,並且在事務çµæŸä¹‹å‰ä¸é€²è¡ŒéŽ–定, - 這就會導致異常ä¸æ¢çš„事務後,åºåˆ—號會出ç¾é–“隔。 -</a></p> - -<h3><a name="4.11.4"> </a><a name="4.12">4.12) 什麼是 <small>OID</small> ?什麼是 <small>CTID</small> ? </a></h3> - - -<p><a name="4.12">PostgreSQL 裡創建的æ¯ä¸€è¡Œè¨˜éŒ„都會ç²å¾—一個唯一的 <small>OID</small>,除éžåœ¨å‰µå»ºè¡¨æ™‚使用 <small>WITHOUT OIDS</small> é¸é …。 - <small>OID </small>創建時會自動生æˆä¸€å€‹ 4ä½å…ƒçµ„的整數,所有 OID 在相應 PostgreSQL 伺æœå™¨ä¸å‡æ˜¯å”¯ä¸€çš„。 ç„¶è€Œï¼Œå®ƒåœ¨è¶…éŽ 40億時將溢出, - <small>OID</small> æ¤å¾Œæœƒå‡ºç¾é‡è¤‡ã€‚PostgreSQL 在它的內部系統表裡使用 OID 在表之間建立è¯ç¹«ã€‚ -</a></p> -<p><a name="4.12"> - 在用戶的資料表ä¸ï¼Œæœ€å¥½æ˜¯ä½¿ç”¨ <small>SERIAl</small> 來代替 <small>OID</small> - - å› ç‚º<small> SERIAL</small> åªè¦ä¿è‰åœ¨å–®å€‹è¡¨ä¸çš„數值是唯一的就å¯ä»¥äº†ï¼Œé€™æ¨£å®ƒæº¢å‡ºçš„å¯èƒ½æ€§å°±éžå¸¸å°äº†ï¼Œ - <small>SERIAL8</small> å¯ç”¨ä¾†ä¿å˜8å—元組的åºåˆ—數值。 -</a></p> - -<p> -<a name="4.12"> <small>CTID</small> 用於標è˜å¸¶è‘—資料塊(地å€ï¼‰å’Œï¼ˆå¡Šå…§ï¼‰å移的特定的物ç†è¡Œã€‚ - <small>CTID</small> 在記錄被更改或é‡è¼‰å¾Œç™¼ç”Ÿæ”¹è®Šã€‚索引資料使用它們指å‘物ç†è¡Œã€‚ -</a></p> - - - -<h3><a name="4.12"> </a><a name="4.13">4.13) 為什麼我收到錯誤資訊「<i>ERROR: Memory exhausted in AllocSetAlloc()</i>ã€ï¼Ÿ </a></h3> -<p> -<a name="4.13"> 這很å¯èƒ½æ˜¯ç³»çµ±çš„虛擬內å˜ç”¨å…‰äº†ï¼Œæˆ–è€…å…§æ ¸å°æŸäº›è³‡æºæœ‰è¼ƒä½Žçš„é™åˆ¶å€¼ã€‚在啟動 postmaster 之å‰è©¦è©¦ä¸‹é¢çš„命令: -</a></p> -<pre><a name="4.13"> ulimit -d 262144 - limit datasize 256m -</a></pre> -<p> -<a name="4.13"> å–æ±ºæ–¼ä½ ç”¨çš„ shell,上é¢å‘½ä»¤åªæœ‰ä¸€æ¢èƒ½æˆåŠŸï¼Œä½†æ˜¯å®ƒå°‡æŠŠä½ 的進程資料段é™åˆ¶è¨å¾—比較高, - å› è€Œä¹Ÿè¨±èƒ½è®“æŸ¥è©¢å®Œæˆã€‚這æ¢å‘½ä»¤æ‡‰ç”¨æ–¼ç•¶å‰é€²ç¨‹ï¼Œä»¥åŠæ‰€æœ‰åœ¨é€™æ¢å‘½ä»¤é‹è¡Œå¾Œå‰µå»ºçš„å進程。 - å¦‚æžœä½ æ˜¯åœ¨é‹è¡ŒSQLå®¢æˆ¶ç«¯æ™‚å› ç‚ºå¾Œå°è¿”回了太多的資料而出ç¾å•é¡Œï¼Œè«‹åœ¨é‹è¡Œå®¢æˆ¶ç«¯ä¹‹å‰åŸ·è¡Œä¸Šè¿°å‘½ä»¤ã€‚ - -</a></p> - -<h3><a name="4.13"> </a><a name="4.14">4.14) 我如何æ‰èƒ½çŸ¥é“所é‹è¡Œçš„PostgreSQL的版本? </a></h3> -<p> -<a name="4.14"> 從 psql 裡,輸入 <code>SELECT version();</code>指令。 -</a></p> - -<h3><a name="4.14"> </a><a name="4.15">4.15) 我如何創建一個é è¨å€¼æ˜¯ç•¶å‰æ™‚間的欄ä½ï¼Ÿ </a></h3> -<p> -<a name="4.15"> 使用 CURRENT_TIMESTAMP: - -</a></p> -<pre><a name="4.15"> CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -</a></pre> - - -<h3><a name="4.15"> </a><a name="4.16">4.16) 我怎樣進行 outer join (外連接)? </a></h3> -<p><a name="4.16">PostgreSQL 採用標準的 SQL 語法支æŒå¤–連接。這裡是兩個例å:</a></p> -<pre><a name="4.16"> SELECT * - FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col); -</a></pre> -<p><a name="4.16">或是</a></p> - -<pre><a name="4.16"> SELECT * - FROM t1 LEFT OUTER JOIN t2 USING (col); -</a></pre> -<p> -<a name="4.16"> 這兩個ç‰åƒ¹çš„查詢在 t1.col å’Œ t2.col 上åšé€£æŽ¥ï¼Œä¸¦ä¸”返回 t1 ä¸æ‰€æœ‰æœªé€£æŽ¥çš„行(那些在 t2 ä¸æ²’有匹é…的行)。 - å³[外]連接(RIGHT OUTER JOIN)將返回 t2 ä¸æœªé€£æŽ¥çš„行。 - 完全外連接(FULL OUTER JOIN)將返回 t1 å’Œ t2 ä¸æœªé€£æŽ¥çš„行。 - é—œéµå— OUTER 在左[外]連接ã€å³[外]連接和完全[外]連接ä¸æ˜¯å¯é¸çš„,普通連接被稱為內連接(INNER JOIN)。 -</a></p> - - -<h3><a name="4.16"> </a><a name="4.17">4.17) 如何使用涉åŠå¤šå€‹è³‡æ–™åº«çš„查詢? </a></h3> -<p> -<a name="4.17"> 沒有辦法查詢當å‰è³‡æ–™åº«ä¹‹å¤–的資料庫。 - å› ç‚ºPostgreSQLè¦åŠ è¼‰èˆ‡è³‡æ–™åº«ç›¸é—œçš„ç³»çµ±ç›®éŒ„ï¼ˆç³»çµ±è¡¨ï¼‰ï¼Œå› æ¤è·¨è³‡æ–™åº«çš„查詢如何執行是ä¸å®šçš„。 -</a></p> - -<p> -<a name="4.17"> é™„åŠ å¢žå€¼æ¨¡å¡Š contrib/dblink å…許採用函數調用實ç¾è·¨åº«æŸ¥è©¢ã€‚當然用戶也å¯ä»¥åŒæ™‚連接到ä¸åŒçš„資料庫執行查詢然後在客戶端åˆä½µçµæžœã€‚ -</a></p> - -<h3><a name="4.17"> </a><a name="4.18">4.18) 如何讓函數返回多行或多列資料? </a></h3> -<p> -<a name="4.18"> 在函數ä¸è¿”回資料記錄集的功能是很容易使用的,詳情åƒè¦‹ï¼š - </a><a href="http://techdocs.postgresql.org/guides/SetReturningFunctions">http://techdocs.postgresql.org/guides/SetReturningFunctions</a> -</p> - -<h3> <a name="4.19">4.19) 為什麼我在使用 PL/PgSQL 函數å˜å–臨時表時會收到錯誤資訊「relation with OID ##### does not existã€ï¼Ÿ </a></h3> - -<p> -<a name="4.19"> PL/PgSQL 會緩å˜å‡½æ•¸çš„腳本內容,由æ¤å¸¶ä¾†çš„一個ä¸å¥½çš„副作用是若一個 PL/PgSQL - 函數訪å•äº†ä¸€å€‹è‡¨æ™‚表,然後該表被刪除並é‡å»ºäº†ï¼Œå‰‡å†æ¬¡èª¿ç”¨è©²å‡½æ•¸å°‡å¤±æ•—, - å› ç‚ºç·©å˜çš„函數內容ä»ç„¶æŒ‡å‘舊的臨時表。解決的方法是在 PL/PgSQL ä¸ç”¨<small>EXECUTE</small> - å°è‡¨æ™‚表進行訪å•ã€‚這樣會ä¿è‰æŸ¥è©¢åœ¨åŸ·è¡Œå‰ç¸½æœƒè¢«é‡æ–°è§£æžã€‚ -</a></p> - -<h3><a name="4.19"> </a><a name="4.20">4.20) ç›®å‰æœ‰å“ªäº›è³‡æ–™è¤‡å¯«(replication)方案å¯ç”¨ï¼Ÿ </a></h3> -<p> -<a name="4.20"> 「複寫ã€åªæ˜¯ä¸€å€‹è¡“語,有好幾種複寫技術å¯ç”¨ï¼Œæ¯ç¨®éƒ½æœ‰å„ªé»žå’Œç¼ºé»žï¼š -</a></p> -<p> - -<a name="4.20"> 主/從å¼è¤‡å¯«æ–¹å¼æ˜¯å…許一個主伺æœå™¨æŽ¥å—讀/寫的申請,而多個從伺æœå™¨åªèƒ½æŽ¥å—讀/<small>SELECT</small>查詢的申請, - ç›®å‰æœ€æµè¡Œä¸”å…費的主/從PostgreSQL複寫方案是 - </a><a href="http://gborg.postgresql.org/project/slony1/projdisplay.php">Slony-I </a>。 -</p> -<p> - 多個主伺æœå™¨çš„複寫方å¼å…許將讀/寫的申請發é€çµ¦å¤šå°çš„主機,這種方å¼ç”±æ–¼éœ€è¦åœ¨å¤šå°ä¼ºæœå™¨ä¹‹é–“åŒæ¥è³‡æ–™è®Šå‹• - å¯èƒ½æœƒå¸¶ä¾†è¼ƒåš´é‡çš„性能æ失,<a href="http://pgfoundry.org/projects/pgcluster/">Pgcluster</a> 是目å‰é€™ç¨®æ–¹æ¡ˆä¸æœ€å¥½çš„,並且還å¯ä»¥å…費下載。 -</p> -<p> - 也有一些商æ¥éœ€ä»˜è²»å’ŒåŸºæ–¼ç¡¬é«”的資料複寫方案,支æŒä¸Šè¿°å„種複寫模型。 -</p> - - -<h3> <a name="4.21">4.21</a>) 為何查詢çµæžœé¡¯ç¤ºçš„表å或欄å與我的查詢語å¥ä¸çš„ä¸åŒï¼Ÿç‚ºä½•å¤§å¯«ç‹€æ…‹ä¸èƒ½ä¿ç•™ï¼Ÿ </h3> - -<p> - æœ€å¸¸è¦‹çš„åŽŸå› æ˜¯åœ¨å‰µå»ºè¡¨æ™‚å°è¡¨å或是欄å使用了雙引號( ' ' ),當使用了雙引號後,表å或欄å(稱為標è˜ç¬¦ï¼‰å˜å„²æ™‚是å€åˆ† -<a href="http://www.postgresql.org/docs/8.0/static/sql-syntax.html#SQL-SYNTAX-IDENTIFIERS">大å°å¯«çš„</a>, - 這æ„è¬‚è‘—ä½ åœ¨æŸ¥è©¢æ™‚è¡¨å或欄åä¹Ÿæ‡‰ä½¿ç”¨é›™å¼•è™Ÿï¼Œä¸€äº›å·¥å…·è»Ÿé«”ï¼Œåƒ pgAdmin 會在發出創建表的指令時自動地在æ¯å€‹æ¨™è˜ç¬¦ä¸ŠåŠ 雙引號。 - å› æ¤ï¼Œç‚ºäº†æ¨™è˜ç¬¦çš„çµ±ä¸€ï¼Œä½ æ‡‰è©²ï¼š</p> -<ul> -<li>在創建表時é¿å…將標è˜ç¬¦ä½¿ç”¨é›™å¼•è™Ÿå¼•èµ·ä¾†ã€‚</li> -<li>在標è˜ç¬¦ä¸åªä½¿ç”¨å°å¯«å—æ¯ã€‚</li> - -<li>(為了與已å˜åœ¨çš„標è˜ç¬¦ç›¸åŒï¼‰åœ¨æŸ¥è©¢ä¸ä½¿ç”¨é›™å¼•è™Ÿå°‡æ¨™è˜ç¬¦å¼•èµ·ä¾†ã€‚</li> -</ul> - -</body> - -</html> \ No newline at end of file diff --git a/doc/src/FAQ/FAQ_czech.html b/doc/src/FAQ/FAQ_czech.html deleted file mode 100644 index 39c26974e5819ffd92cf20f9009fecb9fc98c608..0000000000000000000000000000000000000000 --- a/doc/src/FAQ/FAQ_czech.html +++ /dev/null @@ -1,645 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> -<html> -<head> -<title>PostgreSQL FAQ</title> -<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> -<meta http-equiv="Content-language" content="cs"> -<meta name="description" lang="en" content="Czech translation of FAQ for PostgreSQL"> -<meta name="description" lang="cs" content="ÄŒeský pÅ™eklad FAQ PostgreSQL"> -</head> -<body bgcolor="#ffffff" text="#000000" link="#ff0000" vlink="#a00000" alink="#0000ff"> -<h1>Frequently Asked Questions</h1> -<p><i>ÄŒasto kladené dotazy (FAQ) PostgreSQL</i> -</p> -<p>Poslednà aktualizace: 29. Å™Ãjna 2007 (aktualizováno pro PostgreSQL 8.3) -</p> -<p>SouÄasný správce: Bruce Momjian (bruce@momjian.us) -</p> -<p>PÅ™eložil: Pavel StÄ›hule (pavel.stehule@gmail.com) -</p> -<p>NejaktuálnÄ›jÅ¡Ã verzi tohoto dokumentu naleznete na adrese -<a href="http://www.postgresql.org/files/documentation/faqs/FAQ.html" title="http://www.postgresql.org/files/documentation/faqs/FAQ.html">http://www.postgresql.org/files/documentation/faqs/FAQ.html</a> -</p> -<p>OdpovÄ›di na otázky vázané na konkrétnà platformy naleznete na -adrese <a href="http://www.postgresql.org/docs/faq/" title="http://www.postgresql.org/docs/faq/">http://www.postgresql.org/docs/faq/</a>. -</p> -<hr> -<h2 align="center">Obecné otázky</h2> -<a href="#item1.1">1.1</a>) Co je to PostgreSQL? Jaká je správná výslovnost slova PostgreSQL?<br> -<a href="#item1.2">1.2</a>) Kdo Å™Ãdà vývoj PostgreSQL?<br> -<a href="#item1.3">1.3</a>) Pod jakou licencà je PostgreSQL?<br> -<a href="#item1.4">1.4</a>) Na kterých platformách lze provozovat PostgreSQL?<br> -<a href="#item1.5">1.5</a>) Kde mohu zÃskat PostgreSQL?<br> -<a href="#item1.6">1.6</a>) Jaká je poslednà verze?<br> -<a href="#item1.7">1.7</a>) Kde mohu zÃskat podporu?<br> -<a href="#item1.8">1.8</a>) Jak a kam hlásit chyby?<br> -<a href="#item1.9">1.9</a>) Kde najdu informace o známých chybách nebo nepodporovaných vlastnostech?<br> -<a href="#item1.10">1.10</a>) Jaká je dostupná dokumentace?<br> -<a href="#item1.11">1.11</a>) Jak se mohu nauÄit SQL?<br> -<a href="#item1.12">1.12</a>) Jak se mohu pÅ™ipojit k týmu vývojářů?<br> -<a href="#item1.13">1.13</a>) Jak je na tom PostgreSQL v porovnánà s jinými databázemi?<br> -<a href="#item1.14">1.14</a>) Je PostgreSQL pÅ™ipraven na aktuálnà zavádÄ›nà letnÃho Äasu v nÄ›kterých zemÃch?<br> -<h2 align="center">Dotazy na klientská rozhranÃ</h2> -<a href="#item2.1">2.1</a>) Která rozhranà jsou použitelná pro PostgreSQL?<br> -<a href="#item2.2">2.2</a>) Jaké nástroje lze použÃt pro PostgreSQL a web?<br> -<a href="#item2.3">2.3</a>) Existuje grafické rozhranà pro PostgreSQL?<br> -<h2 align="center">Administrativnà dotazy</h2> -<a href="#item3.1">3.1</a>) Jak nainstalovat PostgreSQL jinam než do /usr/local/pgsql?<br> -<a href="#item3.2">3.2</a>) Jak nastavit pravidla pro pÅ™Ãstup z jiných stanic?<br> -<a href="#item3.3">3.3</a>) Jak vyladit databázi na vyÅ¡Å¡Ã výkon?<br> -<a href="#item3.4">3.4</a>) Jaké mám ladÃcà prostÅ™edky?<br> -<a href="#item3.5">3.5</a>) Co znamená "Sorry, too many clients", když se zkouÅ¡Ãm pÅ™ipojit?<br> -<a href="#item3.6">3.6</a>) ProÄ je nutný dump a obnovenà (load) databáze pÅ™i upgradu PostgreSQL?<br> -<a href="#item3.7">3.7</a>) Jaký hardware bych mÄ›l použÃvat?<br> -<h2 align="center">Provoznà dotazy</h2> -<a href="#item4.1">4.1</a>) Jak zÃskat pouze prvnà řádek dotazu? Náhodný řádek?<br> -<a href="#item4.2">4.2</a>) Jak zÃskám seznam tabulek, indexů, databázÃ, a definovaných uživatelů. Mohu vidÄ›t dotazy, které použÃvá psql pro zobrazenà tÄ›chto informacÃ?<br> -<a href="#item4.3">4.3</a>) Jak zmÄ›nit datový typ sloupce?<br> -<a href="#item4.4">4.4</a>) Jaká je maximálnà velikost řádku, tabulky a databáze?<br> -<a href="#item4.5">4.5</a>) Kolik diskového prostoru je potÅ™eba k uloženà dat z normálnÃho textového souboru?<br> -<a href="#item4.6">4.6</a>) Můj dotaz je pomalý a nepoužÃvá vytvoÅ™ené indexy. ProÄ?<br> -<a href="#item4.7">4.7</a>) Jak zjistÃm, jak se vyhodnocuje můj dotaz?<br> -<a href="#item4.8">4.8</a>) Jak použÃt case-(in)sensitive regulárnà výraz? Jak použÃt index pro case insensitive hledánÃ?<br> -<a href="#item4.9">4.9</a>) Jak v dotazu detekovat, že položka je NULL? Jak bezpeÄnÄ› spojit dva Å™etÄ›zce, pokud mohou obsahovat NULL? Lze tÅ™Ãdit podle toho, jestli je položka NULL nebo ne?<br> -<a href="#item4.10">4.10</a>) Jaké jsou rozdÃly mezi různými znakovými typy?<br> -<a href="#item4.11.1">4.11.1</a>) Jak vytvoÅ™it serial/auto-increment položku?<br> -<a href="#item4.11.2">4.11.2</a>) Jak zÃskat hodnotu SERIAL po vloženà řádku?<br> -<a href="#item4.11.3">4.11.3</a>) Nezpůsobà currval() a nextval() problémy ve vÃce uživatelském prostÅ™edÃ?<br> -<a href="#item4.11.4">4.11.4</a>) ProÄ nenà vygenerované ÄÃslo použito pÅ™i pÅ™eruÅ¡enà transakce?ProÄ vznikajà dÃry v ÄÃslovánà prostÅ™ednictvÃm sekvence nebo typu SERIAL?<br> -<a href="#item4.12">4.12</a>) Co to je OID? Co je to CTID?<br> -<a href="#item4.13">4.13</a>) Co znamená chybové hlášenà "ERROR: Memory exhausted in AllocSetAlloc()"?<br> -<a href="#item4.14">4.14</a>) Jak zjistÃm, kterou verzi PostgreSQL použÃvám?<br> -<a href="#item4.15">4.15</a>) Jak vytvoÅ™it sloupec, který bude implicitnÄ› obsahovat aktuálnà Äas?<br> -<a href="#item4.16">4.16</a>) Jak provést vnÄ›jÅ¡Ã spojenà (outer join)?<br> -<a href="#item4.17">4.17</a>) Jak provést dotaz napÅ™ÃÄ nÄ›kolika databázemi?<br> -<a href="#item4.18">4.18</a>) Může funkce vrátit vÃce řádků nebo sloupců?<br> -<a href="#item4.19">4.19</a>) Co je pÅ™ÃÄinou chyby "relation with OID xxxxx does not exist"?<br> -<a href="#item4.20">4.20</a>) Jaké jsou možnosti replikace databázÃ?<br> -<a href="#item4.21">4.21</a>) ProÄ v dotazu nejsou rozpoznány názvy mých tabulek nebo funkcÃ? ProÄ jsou velká pÃsmena v názvech automaticky pÅ™evedena na malá pÃsmena?<br> -<hr> -<h2 align="center">Obecné otázky</h2> -<h3><a name="item1.1">1.1</a>) Co je to PostgreSQL? Jaká je správná výslovnost slova PostgreSQL?</h3> -<p>Výslovnost PostgreSQL je <i>Post-Gres-Q-L</i> -, nebo zjednoduÅ¡enÄ› <i>Postgres</i> -. V Å™adÄ› jazyků je slovo PostgreSQL obtÞnÄ› vyslovitelný, proto se v hovoru Äasto použÃvá zjednoduÅ¡ená forma názvu. Pro ty, kteřà by si rádi poslechli výslovnost, je k dispozici audiozáznam v <a href="http://www.postgresql.org/files/postgresql.mp3" title="http://www.postgresql.org/files/postgresql.mp3">MP3 formátu</a>. -</p> -<p>PostgreSQL je relaÄnà databáze s nÄ›kterými objektovými rysy, která má možnosti tradiÄnÃch -komerÄnÃch databázových systémů s nÄ›kolika rozÅ¡ÃÅ™enÃmi, které lze najÃt v DBMS -systémech pÅ™ÃÅ¡tà generace. PoužÃvánà PostgreSQL nenà omezené a veÅ¡keré zdrojové kódy jsou -volnÄ› dostupné. -</p> -<p>Za vývojem PostgreSQL je mezinárodnà skupina nezávislých vývojářů navzájem komunikujÃcÃch -prostÅ™ednictvÃm internetu. Tento projekt nenà řÃzen žádnou obchodnà organizacÃ. Pokud se chcete -pÅ™idat k projektu, pÅ™eÄtÄ›te si vývojářské FAQ na adrese <a href="http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html" title="http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html">http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html</a> . -</p> -<h3><a name="item1.2">1.2</a>) Kdo Å™Ãdà vývoj PostgreSQL?</h3> -<p>Pokud budete hledat organizaci Å™ÃdÃcà vývoj PostgreSQL, budete zklamáni. Nic takového -neexistuje. Existujà pouze "core" a CVS skupiny uživatelů, ale ty existujà vÃce z administrátorských -důvodů než z organizaÄnÃch. Projekt je smÄ›rován komunitou vývojářů a uživatelů, ke které se -kdokoliv může pÅ™ipojit. Jediné co potÅ™ebuje, je pÅ™ihlásit se do elektronické konference. VÃce ve -<a href="http://www.postgresql.org/docs/faqs.FAQ_DEV.html" title="http://www.postgresql.org/docs/faqs.FAQ_DEV.html">vývojářském FAQ</a>. -</p> -<h3><a name="item1.3">1.3</a>) Pod jakou licencà je PostgreSQL?</h3> -<p>PostgreSQL je pÅ™edmÄ›tem následujÃcÃch autorských práv: -</p> -<p>DÃlÄà Copyright (c) 1996-2009, PostgreSQL Global Development Group<br> -DÃlÄà Copyright (c) 1994-6, Regents of the University of California -</p> -<p>UdÄ›luje se oprávnÄ›nà k užitÃ, rozmnožovánÃ, provádÄ›nà úprav a -rozÅ¡iÅ™ovánà tohoto softwaru a dokumentace k nÄ›mu, pro jakékoli úÄely, -bez licenÄnÃho poplatku a bez pÃsemné licenÄnà smlouvy, za podmÃnky, -že na vÅ¡ech jeho kopiÃch je uvedeno oznámenà o výše uvedených právech, -jakož i obsah tohoto a dvou následujÃcÃch odstavců. -</p> -<p>THE UNIVERSITY OF CALIFORNIA ("KALIFORNSKà UNIVERZITA") NENà V ŽÃDNÉM -PŘÃPADÄš ODPOVÄšDNA ŽÃDNÉ TŘETà OSOBÄš ZA PŘÃMOU, NEPŘÃMOU, ZVLÃÅ TNÃ, -NAHODILOU NEBO VÃSLEDNOU Å KODU, VÄŒETNÄš UÅ LÉHO ZISKU, ZPÅ®SOBENOU UŽITÃM -TOHOTO SOFTWARU A DOKUMENTACE K NÄšMU, A TO I V PŘÃPADÄš, ŽE THE -UNIVERSITY OF CALIFORNIA BYLA INFORMOVÃNA O MOŽNOSTI VZNIKU TAKOVÉ -Å KODY. -</p> -<p>THE UNIVERSITY OF CALIFORNIA ZEJMÉNA NEPOSKYTUJE JAKÉKOLI ZÃRUKY, A TO -NEJEN ZÃRUKY OBCHODOVATELNOSTI A VHODNOSTI TOHOTO VÃROBKU KE -SPECIFICKÃM ÚČELÅ®M. NÃŽE UVEDENà SOFTWARE JE POSKYTNUT "JAK STOJà A -LEŽÃ" A THE UNIVERSITY OF CALIFORNIA NENà POVINNA ZAJISTIT JEHO -ÚDRŽBU, PODPORU, AKTUALIZACI, VYLEPÅ ENà NEBO MODIFIKACI. -</p> -<p>Výše uvedené je BSD licence, běžná licence otevÅ™eného zdroje. Nenà zde -žádné omezenà ohlednÄ› užità kódu zdroje. Jsme s tÃm spokojeni a nemáme -v úmyslu na této skuteÄnosti cokoli mÄ›nit. -</p> -<h3><a name="item1.4">1.4</a>) Na kterých platformách lze provozovat PostgreSQL?</h3> -<p>StruÄnÄ› Å™eÄeno, PostgreSQL běžà na vÅ¡ech modernÃch unixových systémech. Seznam tÄ›ch, u kterých probÄ›hlo testovánÃ, naleznete v instalaÄnÃch instrukcÃch. -</p> -<p>PostreSQL také běžà nativnÄ› na vÅ¡ech Microsof Windows systémech odvozených z Microsoft Windows NT jako jsou Windows 2000SP4, WindowsXP a Windows2003. InstalaÄnà balÃÄek naleznete na adrese <a href="http://pgfoundry.org/projects/pginstaller" title="http://pgfoundry.org/projects/pginstaller">http://pgfoundry.org/projects/pginstaller</a>. Na starÅ¡Ãch systémech s jeÅ¡tÄ› MS-DOS jádrem lze spustit PostgreSQL s emulaÄnÃm programem Cygwin. -</p> -<p>Dále existuje port pro Novell Netware 6 port na adrese <a href="http://forge.novell.com" title="http://forge.novell.com">http://forge.novell.com</a>, a pro OS/2 verze (eComStation) na adrese <a href="http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2F" title="http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2F">http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2F</a> . -</p> -<h3><a name="item1.5">1.5</a>) Kde mohu zÃskat PostgreSQL?</h3> -<p>Pomocà webového klienta z adresy <a href="http://www.postgresql.org/ftp/" title="http://www.postgresql.org/ftp/">http://www.postgresql.org/ftp/</a> nebo klienta ftp z adresy <a href="ftp://ftp.postgresql.org/pub/" title="ftp://ftp.postgresql.org/pub/">ftp://ftp.postgresql.org/pub/</a>. -</p> -<h3><a name="item1.6">1.6</a>) Jaká je poslednà verze?</h3> -<p>NejnovÄ›jÅ¡Ã verzà PostgreSQL je verze 8.2.5 -</p> -<p>V plánu je uvolňovat každoroÄnÄ› jednu velkou verzi a každých nÄ›kolik mÄ›sÃců malé verze. -</p> -<h3><a name="item1.7">1.7</a>) Kde mohu zÃskat podporu?</h3> -<p>NejÄastÄ›jÅ¡Ã forma podpory uživatelům PostgreSQL komunitou je prostÅ™ednictvÃm e-mailů. Na naÅ¡em webovém serveru naleznete <a href="http://www.postgresql.org/community/lists/" title="http://www.postgresql.org/community/lists/">odkaz</a> na stránky,kde se můžete pÅ™ihlásit do elektronické konference. Pro zaÄátek jsou doporuÄené konference general nebo bugs. -</p> -<p>DalÅ¡Ã cestou je IRC kanál #postgresql na Freenode (irc.freenode.net). K pÅ™ipojenà použijte Unixový pÅ™Ãkaz irc -x '#postgresql' "$USER" irc.freenode.net nebo jakékoholiv jiného IRC klienta. V této sÃti existuje jeÅ¡tÄ› Å¡panÄ›lská (#postgresql-es) a francouzská (#postgresqlfr) verze. DalÅ¡Ã PostgreSQL kanál naleznete na EFNet. -</p> -<p>Seznam spoleÄnostà poskytujÃcà komerÄnà podporu naleznete na adrese <a href="http://techdocs.postgresql.org/companies.php" title="http://techdocs.postgresql.org/companies.php">http://techdocs.postgresql.org/companies.php</a>. -</p> -<h3><a name="item1.8">1.8</a>) Jak a kam hlásit chyby?</h3> -<p>Vyplňte formulář na adrese <a href="http://www.postgresql.org/support/submitbug" title="http://www.postgresql.org/support/submitbug">http://www.postgresql.org/support/submitbug</a>. Na naÅ¡em ftp serveru <a href="ftp://ftp.postgresql.org/pub/" title="ftp://ftp.postgresql.org/pub/">ftp://ftp.postgresql.org/pub/</a> si ověřte, že použÃváte aktuálnà verzi PostreSQL. -</p> -<p>Chyby reportované prostÅ™ednictvÃm chybového formuláře nebo zaslánÃm mailu do PostgreSQL konference obvykle generuje následujÃcà odezvu: -</p> -<ul><li> Nejedná se o chybu, a proÄ -</li> -<li> Jedná se o známou chybu, která je již v seznamu úkolů <a href="http://www.postgresql.org/docs/faqs.TODO.html" title="http://www.postgresql.org/docs/faqs.TODO.html">TODO</a> -</li> -<li> Tato chyba byla opravena v aktuálnà verzi -</li> -<li> Tato chyba byla již opravena ve verzi, která zatÃm nebyla oficiálnÄ› uvolnÄ›na -</li> -<li> Požadavek na dalÅ¡Ã doplňujÃcà informace: -<ul><li> OperaÄnà systém -</li> -<li> Verze PostgreSQL -</li> -<li> Test reprodukujÃcà chybu -</li> -<li> LadÃcà informace -</li> -<li> Backtrace výstup debuggeru -</li> -</ul> -</li> -<li> Jedná se o zatÃm nezjiÅ¡tÄ›nou chybu, pak můžete Äekat -<ul><li> Záplatu odstraňujÃcà chybu, která bude vložena do dalÅ¡Ã velké nebo malé verze -</li> -<li> Informaci, že se jedná o chybu, kterou nelze okamžitÄ› Å™eÅ¡it a je proto pÅ™idána do <a href="http://www.postgresql.org/docs/faqs.TODO.html" title="http://www.postgresql.org/docs/faqs.TODO.html">TODO</a> -</li> -</ul> -</li> -</ul> -<h3><a name="item1.9">1.9</a>) Kde najdu informace o známých chybách nebo nepodporovaných vlastnostech?</h3> -<p>PostgreSQL podporuje rozÅ¡ÃÅ™enou podmnožinu SQL:2003. V naÅ¡em <a href="http://www.postgresql.org/docs/faqs.TODO.html" title="http://www.postgresql.org/docs/faqs.TODO.html">TODO</a> naleznete seznam známých chyb, chybÄ›jÃcÃch vlastnostÃ, a plány do budoucna. -</p> -<p>Odezva na požadavek na novou vlastnost PostgreSQL je obvykle: -</p> -<ul><li> Požadavek je již v <a href="http://www.postgresql.org/docs/faqs.TODO.html" title="http://www.postgresql.org/docs/faqs.TODO.html">TODO</a> -</li> -<li> Požadovaná funkce nenà chtÄ›ná protože -<ul><li> Duplikuje již existujÃcà funkci, která respektuje SQL standard -</li> -<li> Implementacà funkce by se pÅ™ÃliÅ¡ zkomplikoval kód bez relevantnÃho pÅ™Ãnosu -</li> -<li> Funkce by mohla být nebezpeÄná nebo nespolehlivá -</li> -</ul> -</li> -<li> Požadavek je pÅ™idán do <a href="http://www.postgresql.org/docs/faqs.TODO.html" title="http://www.postgresql.org/docs/faqs.TODO.html">TODO</a> -</li> -</ul> -<p>PostgreSQL nepožÃvá systém pro sledovánà chyb, protože jsme zjistili, že je efektivnÄ›jÅ¡Ã pÅ™Ãmo reagovat na maily a udržovat aktuálnà <a href="http://www.postgresql.org/docs/faqs.TODO.html" title="http://www.postgresql.org/docs/faqs.TODO.html">TODO</a>. V praxi je snaha o co nejrychlejÅ¡Ã Å™eÅ¡enà chyb, a chyby, které by se mohly projevit u mnoha uživatelů jsou opravovány velice rychle. Jediné mÃsto, kde lze dohledat vÅ¡echny zmÄ›ny, rozÅ¡ÃÅ™enà a opravy v PostgreSQL je CVS log. Poznámky k verzi "Release notes" nezachycujà vÅ¡echny zmÄ›ny, k nÄ›mž doÅ¡lo. -</p> -<h3><a name="item1.10">1.10</a>) Jaká je dostupná dokumentace?</h3> -<p>PostgreSQL obsahuje vynikajÃcà dokumentaci zahrnujÃcà manuál, manuálové stránky a testovacà pÅ™Ãklady. PodÃvejte se do adresáře /doc. Manuál je pÅ™Ãstupný online na <a href="http://www.postgresql.org/docs" title="http://www.postgresql.org/docs">http://www.postgresql.org/docs</a>. -</p> -<p>K dispozici jsou zdarma dvÄ› online knihy na adresách <a href="http://www.postgresql.org/docs/books/awbook.html" title="http://www.postgresql.org/docs/books/awbook.html">http://www.postgresql.org/docs/books/awbook.html</a> a <a href="http://www.commandprompt.com/ppbook/" title="http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook/</a>. DalÅ¡Ã literaturu lze zakoupit. NejpopulárnÄ›jÅ¡Ã je od Kerryho Douglase. Seznam dostupné literatury je na <a href="http://techdocs.postgresql.org/techdocs/bookreviews.php" title="http://techdocs.postgresql.org/techdocs/bookreviews.php">http://techdocs.postgresql.org/techdocs/bookreviews.php</a>. JeÅ¡tÄ› je kolekce technicky orientovaných Älánků tematicky spojených s PostgreSQL na adrese <a href="http://techdocs.postgresql.org/" title="http://techdocs.postgresql.org/">http://techdocs.postgresql.org/</a>. -</p> -<p>Řádkový klient psql má \d pÅ™Ãkazy pro zobrazenà informacà o typech, operátorech, funkcÃch, agregaÄnÃch funkcÃ, atd. Použijte \? pro zobrazenà dostupných pÅ™Ãkazů. -</p> -<p>DalÅ¡Ã dokumentaci najdete na naÅ¡em webu. -</p> -<h3><a name="item1.11">1.11</a>) Jak se mohu nauÄit SQL?</h3> -<p>PodÃvejte se do výše uvedené dokumentace. DalÅ¡Ã online knihou je "Teach Yourself SQL in 21 Days, Second Edition" na adrese <a href="http://members.tripod.com/er4ebus/sql/index.htm" title="http://members.tripod.com/er4ebus/sql/index.htm">http://members.tripod.com/er4ebus/sql/index.htm</a>. Mnoho naÅ¡ich uživatelů doporuÄuje knihu The Practical SQL Handbook, Bowman, Judith S., et al., Addison-Wesley. DalÅ¡Ã The Complete Reference SQL, Groff et al., McGraw-Hill. -</p> -<p>DalÅ¡Ã online tutoriály jsou dostupné na adresách: -</p> -<ul><li> <a href="http://www.intermedia.net/support/sql/sqltut.shtm" title="http://www.intermedia.net/support/sql/sqltut.shtm">http://www.intermedia.net/support/sql/sqltut.shtm</a> -</li> -<li> <a href="http://sqlcourse.com" title="http://sqlcourse.com">http://sqlcourse.com</a> -</li> -<li> <a href="http://www.w3schools.com/sql/default.asp" title="http://www.w3schools.com/sql/default.asp">http://www.w3schools.com/sql/default.asp</a> -</li> -<li> <a href="http://mysite.verizon.net/Graeme_Birchall/id1.html" title="http://mysite.verizon.net/Graeme_Birchall/id1.html">http://mysite.verizon.net/Graeme_Birchall/id1.html</a> -</li> -</ul> -<h3><a name="item1.12">1.12</a>) Jak se mohu pÅ™ipojit k týmu vývojářů?</h3> -<p>Prostudujte si <a href="http://www.postgresql.org/docs/faqs.FAQ_DEV.html" title="http://www.postgresql.org/docs/faqs.FAQ_DEV.html">Developer's FAQ</a>. -</p> -<h3><a name="item1.13">1.13</a>) Jak je na tom PostgreSQL v porovnánà s jinými databázemi?</h3> -<p>Software můžeme porovnávat z nÄ›kolika různých pohledů: vlastnosti, výkon, spolehlivost, podpora a cena. -</p> -<script></script> -<h4> Vlastnosti </h4> -<p>PostgreSQL nabÃzà vÄ›tÅ¡inu funkcà funkcionality velkých komerÄnÃch DBMS systémů jako jsou: transakce, vnoÅ™ené dotazy, spouÅ¡tÄ›, referenÄnà integrita a sofistikovaný systém zamykánÃ. Poskytujeme urÄité funkce, které ostatnà systémy běžnÄ› nepodporujÃ. NapÅ™. uživatelem definované typy, dÄ›diÄnost, pravidla (rules), a MVCC architekturu. -</p> -<h4> Výkon </h4> -<p>Výkon PostgreSQL je srovnatelný s ostatnÃmi komerÄnÃmi nebo Open Source databázemi. V nÄ›kterých pÅ™Ãpadech je rychlejÅ¡Ã, jindy pomalejÅ¡Ã. Náš výkon je obvykle +/-10% vůÄi ostatnÃm databázÃm. -</p> -<h4> Spolehlivost </h4> -<p>UvÄ›domujeme si, že databáze musà být stoprocentnÄ› spolehlivá, jinak je nepoužitelná. SnažÃme se, aby každá verze byla dobÅ™e otestována a obsahovala minimum chyb. Každá verze je minimálnÄ› nÄ›kolik mÄ›sÃců v beta testovacÃm režimu. Do produkÄnÃho režimu se dostane, až když nedocházà k dalÅ¡Ãm zmÄ›nám nebo opravám. VěřÃme, že jsem vÃce než srovnatelnà s ostatnÃmi databázemi v této oblasti. -</p> -<h4> Podpora </h4> -<p>Na naÅ¡ich internetových konferencÃch se setkává velká skupina vývojářů a uživatelů pÅ™i Å™eÅ¡enà vyskytujÃcÃch se problémů. -NaÅ¡e internetové konference umožňujà kontakt velké skupiny vývojářů a uživatelů. Nemůžeme garantovat opravu chyby, ale komerÄnà DBMSs také vždy negarantujà řeÅ¡enà problémů. VěřÃme ale, že dÃky pÅ™Ãmému kontaktu na vývojáře, naÅ¡i uživatelskou komunitu, manuálům, a dostupným zdrojovým kódům máme lepÅ¡Ã podporu než ostatnà DBMSs. Pro ty, kteřà preferujà komerÄnà "per-incident" podporu, existuje spoleÄnostÃ, kteřà ji nabÃzejà (FAQ sekce 1.7.) -</p> -<h4> Cena </h4> -<p>PostgreSQL lze použÃvat bezplatnÄ› (a to i pro komerÄnà použitÃ). Také můžete neomezenÄ› použÃvat náš kód ve svých produktech s výjimkami specifikovanými v naÅ¡Ã licenci (pÅ™ebÃráme BSD licenci). -</p> -<h3><a name="item1.14">1.14</a>) Je PostgreSQL pÅ™ipraven na aktuálnà zavádÄ›nà letnÃho Äasu v nÄ›kterých zemÃch?</h3> -<p>PoÄÃnaje verzà 8.0.[4+] podporuje PostgreSQL letnà Äas také pro USA. Podpora letnÃho Äasu (daylight saving time) pro Kanadu a Západnà Austrálii je obsažena ve verzÃch 8.0.[10+] a 8.1.[6+] a vÅ¡ech následujÃcÃch verzÃch. StarÅ¡Ã verze použÃvaly systémovou databázi Äasových zón obsahujÃcÃ, kromÄ› jiného, informaci o tom, zda se pro danou Äasovou zónu rozliÅ¡uje mezi letnÃm a zimnÃm Äasem. -</p> -<hr> -<h2 align="center">Dotazy na klientská rozhranÃ</h2> -<h3><a name="item2.1">2.1</a>) Která rozhranà jsou použitelná pro PostgreSQL?</h3> -<p>PostgreSQL se distribuuje pouze s rozhranÃm pro jazyk C a embedded C. VÅ¡echna dalÅ¡Ã rozhranà pÅ™edstavujà nezávislé projekty, které je tÅ™eba stáhnout z internetu samostatnÄ›. OsamostatnÄ›nà tÄ›chto projektů umožňuje nezávislost vývojových týmů a možnost vydávat nové verze bez ohledu na vydánà nové verze PostgreSQL. -</p> -<p>NÄ›které programovacà jazyky jako je napÅ™. PHP obsahujà rozhranà pro PostgreSQL. Rozhranà pro jazyky jako je Perl, Tcl, Python a mnoho dalÅ¡Ãch jsou dostupné na adrese: <a href="http://gborg.postgresql.org" title="http://gborg.postgresql.org">http://gborg.postgresql.org</a> v sekci Drivers/Interfaces. -</p> -<h3><a name="item2.2">2.2</a>) Jaké nástroje lze použÃt pro PostgreSQL a web?</h3> -<p>Dobrým úvodem do problematiky databázà v prostÅ™edà webových stránek může být web <a href="http://www.webreview.com" title="http://www.webreview.com">http://www.webreview.com</a>. -</p> -<p>PHP (<a href="http://www.php.net" title="http://www.php.net">http://www.php.net</a>) je vynikajÃcÃm rozhranÃm pro tvorbu webů. -</p> -<p>Pro složitÄ›jšà úlohy se Äasto použÃvá Perl a jeho BDB:Pg rozhranà s podporou CGI - CGI.pm nebo mod_perl(u). -</p> -<h3><a name="item2.3">2.3</a>) Existuje grafické rozhranà pro PostgreSQL?</h3> -<p>K dispozici je Å™ada grafických nástrojů podporujÃcÃch PostgreSQL a to od komerÄnÃch nebo open source vývojářů. Podrobný seznam naleznete na adrese -<a href="http://www.postgresql.org/docs/techdocs.54" title="http://www.postgresql.org/docs/techdocs.54">http://www.postgresql.org/docs/techdocs.54</a>. -</p> -<hr> -<h2 align="center">Administrativnà dotazy</h2> -<h3><a name="item3.1">3.1</a>) Jak nainstalovat PostgreSQL jinam než do /usr/local/pgsql?</h3> -<p>PÅ™i spouÅ¡tÄ›nà configure nastavte parametr --prefix -</p> -<h3><a name="item3.2">3.2</a>) Jak nastavit pravidla pro pÅ™Ãstup z jiných stanic?</h3> -<p>Ve výchozà konfiguraci, PostgreSQL umožňuje pouze pÅ™ipojenà z lokálnÃho uživatele prostÅ™ednictvÃm Unix domain sockets nebo TCP/IP spojenÃ. Bez modifikace listen_addresses v souboru postgresql.conf, a povolenà adresy v souboru $PGDATA/pg_hba.conf se nelze pÅ™ipojit k PostgreSQL z ostatnÃch stanic. ZmÄ›na výše zmÃnÄ›ných parametrů vyžaduje restart databázového serveru. -</p> -<h3><a name="item3.3">3.3</a>) Jak vyladit databázi na vyÅ¡Å¡Ã výkon?</h3> -<p>Výkon systému můžete ovlivnit ve tÅ™ech oblastech: -</p> -<h4> ZmÄ›ny dotazu </h4> -<ul><li> PoužitÃm indexů vÄetnÄ› ÄásteÄných a funkcionálnÃch -</li> -<li> PoužitÃm COPY mÃsto opakovaných INSERTů -</li> -<li> SlouÄenÃm mnoha SQL pÅ™Ãkazů do jedné transakce snÞenÃm režie na commit -</li> -<li> PoužÃvánÃm CLUSTERU, pokud naÄÃtáte vÄ›tÅ¡Ã poÄet řádek podle indexu -</li> -<li> PoužitÃm klauzule LIMIT v poddotazech -</li> -<li> PoužitÃm pÅ™edpÅ™ipravených dotazů -</li> -<li> PoužÃvánÃm ANALYZE. Tento pÅ™Ãkaz aktualizuje statistiky, které se použÃvajà pÅ™i optimalizaci dotazu -</li> -<li> Pravidelné použità VACUUM nebo použÃvánà pg_autovacuum -</li> -<li> OdstranÄ›nÃm indexů pÅ™ed rozsáhlými zmÄ›nami v datech -</li> -</ul> -<h4> Konfigurace serveru </h4> -<p>UrÄité parametry v souboru postgresql.conf majà vliv na výkon serveru. Detaily naleznete v pÅ™ÃruÄce Administrátora v Server Run-time Environment/Run-time Configuration. DalÅ¡Ã komentáře naleznete v <a href="http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html" title="http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html">http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html</a> a <a href="http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html" title="http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html">http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html</a>. -</p> -<h4> VýbÄ›r hardware </h4> -<p>Vliv hardware na výkon serveru je popsán v dokumentech <a href="http://candle.pha.pa.us/main/writings/pgsql/hw_performance/index.html" title="http://candle.pha.pa.us/main/writings/pgsql/hw_performance/index.html">http://candle.pha.pa.us/main/writings/pgsql/hw_performance/index.html</a> a <a href="http://www.powerpostgresql.com/PerfList/" title="http://www.powerpostgresql.com/PerfList/">http://www.powerpostgresql.com/PerfList/</a>. -</p> -<h3><a name="item3.4">3.4</a>) Jaké mám ladÃcà prostÅ™edky?</h3> -<p>NastavenÃm log_* promÄ›nných v konfiguraci serveru si vynutÃte logovánà dotazů a procesnÃch statistik, které Vám mohou pomoci pÅ™i ladÄ›nà a optimalizaci výkonu. -</p> -<h3><a name="item3.5">3.5</a>) Co znamená "Sorry, too many clients", když se zkouÅ¡Ãm pÅ™ipojit?</h3> -<p>PÅ™ekroÄil jste výchozà limit, který je 100 souÄasnÄ› pÅ™ipojených uživatelů. V konfiguraci serveru v postgresql.conf tuto hodnotu můžete zvÄ›tÅ¡it zmÄ›nou hodnoty max_connection. Nezapomeňte restartovat server. -</p> -<h3><a name="item3.6">3.6</a>) ProÄ je nutný dump a obnovenà (load) databáze pÅ™i upgradu PostgreSQL?</h3> -<p>Způsob ÄÃslovánà je popsán v dokumentaci na <a href="http://www.postgresql.org/support/versioning" title="http://www.postgresql.org/support/versioning">http://www.postgresql.org/support/versioning</a>. Instrukce k provedenà migrace na vyÅ¡Å¡Ã verzi jsou taktéž v dokumentaci na adrese <a href="http://www.postgresql.org/docs/current/static/install-upgrading.html" title="http://www.postgresql.org/docs/current/static/install-upgrading.html">http://www.postgresql.org/docs/current/static/install-upgrading.html</a>. -</p> -<h3><a name="item3.7">3.7</a>) Jaký hardware bych mÄ›l použÃvat?</h3> -<p>Jelikož PC jsou vÄ›tÅ¡inou kompatibilnÃ, lidé majà tendence věřit, že vÅ¡echna PC jsou stejnÄ› kvalitnÃ. Což nenà pravda. PamÄ›ti ECC, SCSI a kvalitnà základnà desky jsou mnohem spolehlivÄ›jÅ¡Ã a výkonnÄ›jÅ¡Ã než lacinÄ›jÅ¡Ã hardware. PostgreSQL poběžà na vÄ›tÅ¡inÄ› hardwaru, nicménÄ› pokud je pro Vás spolehlivost a výkon systému důležitá, je dobré vÄ›novat Äas nalezenà vhodné hardwarové konfigurace. Na naÅ¡ich elektronických konferencÃch můžete diskutovat o vhodných konfiguracÃch a znaÄkách. -</p> -<hr> -<h2 align="center">Provoznà dotazy</h2> -<h3><a name="item4.1">4.1</a>) Jak zÃskat pouze prvnà řádek dotazu? Náhodný řádek?</h3> -<p>Pokud potÅ™ebujete pouze nÄ›kolik řádků a pokud vÃte kolik, použijte -SELECT LIMIT. Pokud bude možné použÃt index shodujÃcà se s ORDER BY, -je možné, že se nebude provádÄ›t celý dotaz. Pokud neznáte poÄet záznamů, -použijte kurzor a pÅ™Ãkaz FETCH. -</p> -<p>Pro výbÄ›r náhodného řádku použijte pÅ™Ãkaz ve tvaru: -</p> -<pre> -SELECT col -FROM tab -ORDER BY random() -LIMIT 1; -</pre> -<h3><a name="item4.2">4.2</a>) Jak zÃskám seznam tabulek, indexů, databázÃ, a definovaných uživatelů. Mohu vidÄ›t dotazy, které použÃvá psql pro zobrazenà tÄ›chto informacÃ?</h3> -<p>V psql pÅ™Ãkazem \dt zÃskáte seznam tabulek. Úplný seznam pÅ™Ãkazů psql zÃskáte pÅ™Ãkazem \?. AlternativnÄ› si můžete prostudovat zdrojový kód psql - soubor pgsql/src/bin/psql/describe.c, který obsahuje SQL pÅ™Ãkazy, které jsou generovány pro zÃskánà výstupu psql "backslash" pÅ™Ãkazů. Také můžete nastartovat psql s parametrem -E, který způsobà zobrazenà vÅ¡ech SQL pÅ™Ãkazů, které se odesÃlajà na server. PostgreSQL také podporuje SQL standard INFORMAÄŒNà SCHÉMATA (standardnà systémové tabulky). Klasickým dotazem do systémových tabulek zÃskáte požadované informace o struktuÅ™e databáze. -</p> -<p>Systémové tabulky PostgreSQL (mimo rámec SQL standardů) použÃvajà prefix pg_. Pro zjiÅ¡tÄ›nà struktury databáze je můžete použÃt také, i když preferovány jsou dotazy do informaÄnÃho schématu. -</p> -<p>Seznam vÅ¡ech databázà zÃskáte pÅ™Ãkazem psql -l -</p> -<p>DalÅ¡Ã inspiraci najdete v souboru pgsql/src/tutorial/syscat.source. Obsahuje ilustraÄnà SELECTy potÅ™ebné k zÃskánà informacà z systémových tabulek databáze. -</p> -<h3><a name="item4.3">4.3</a>) Jak zmÄ›nit datový typ sloupce?</h3> -<p>Ve verzÃch 8.0 a pozdÄ›jÅ¡Ãch jednoduÅ¡e: -</p> -<pre> -ALTER TABLE ALTER COLUMN TYPE -</pre><p>V starÅ¡Ãch verzÃch: -</p> -<pre> -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; -</pre><p>Po zmÄ›nÄ› spusÅ¥te pÅ™Ãkaz VACUUM FULL, aby doÅ¡lo k uvolnÄ›nà diskového prostoru použitého v tu chvÃli již neplatnými záznamy. -</p> -<h3><a name="item4.4">4.4</a>) Jaká je maximálnà velikost řádku, tabulky a databáze?</h3> -<p>PostgreSQL má tato omezenÃ: -</p> -<table border="0"> -<tr><td> Maximálnà velikost databáze: </td><td> neomezena (existujà 32TB db) -</td></tr> -<tr><td> Maximálnà velikost tabulky: </td><td> 32 TB -</td></tr> -<tr><td> Maximálnà velikost řádky: </td><td> 480GB -</td></tr> -<tr><td> Maximálnà velikost položky </td><td> 1 GB -</td></tr> -<tr><td> Maximálnà poÄet řádků v tabulce: </td><td> neomezeno -</td></tr> -<tr><td> Maximálnà poÄet sloupců v tabulce: </td><td> 250-1600 podle typů -</td></tr> -<tr><td> Maximálnà poÄet indexů na tabulce: </td><td> neomezeno -</td></tr> -</table> -<p>Ve skuteÄnosti nic nenà neomezeno, limitem bývá vždy dostupná disková -paměť nebo velikost operaÄnà pamÄ›ti. Pokud máte nÄ›kterou z tÄ›chto -hodnot neobvykle velkou, může dojÃt ke snÞenà výkonu. -</p> -<p>Maximálnà velikost tabulky je 32 TB a nevyžaduje podporu velkých -souborů operaÄnÃm systémem. Velké tabulky se ukládajà do nÄ›kolika 1 GB -souborů takže limity souborového systému nejsou podstatné. -</p> -<p>Maximálnà velikost tabulky a maximálnà poÄet sloupců můžeme -zeÄtyÅ™násobit nastavenÃm velikosti bloku na 32K. -</p> -<p>Indexy jsou povolené pouze na sloupcÃch jejichž délka je menÅ¡Ã než 2000 znaků. Pokud tuto délku pÅ™ekroÄÃme a index potÅ™ebujeme pro zajiÅ¡tÄ›nà jednoznaÄnosti, je vhodnÄ›jÅ¡Ã použÃt funkcionálnà index nad MD5 funkcà nebo fulltextový index. -</p> -<h3><a name="item4.5">4.5</a>) Kolik diskového prostoru je potÅ™eba k uloženà dat z normálnÃho textového souboru?</h3> -<p>PostgreSQL vyžaduje až pÄ›tinásobek diskového prostoru k uloženà dat z -textového souboru. -</p> -<p>NapÅ™Ãklad, uvažujme soubor se 100 tisÃci řádky obsahujÃcà na každé -řádce celé ÄÃslo a textový popis. Text je v průmÄ›rnÄ› dvacet bytů -dlouhý. Textový soubor bude 2.8 MB dlouhý. Velikost databáze -obsahujÃcà odpovÃdajÃcà data bude zhruba 5.2 MB. -</p> -<pre> - 24 bytů: hlaviÄka řádku (pÅ™ibližnÄ›) - 24 bytů: jedna celoÄÃselná položka a jedna textová - + 4 byty: ukazatel na stránku k entici - ------------------------------------------------------ - 52 bytů na řádek -</pre><p>Velikost datové stránky PostgreSQL je 8192 bytů (8KB) -</p> -<pre> - 8192 bytů na stránce ----------------------- = 158 řádek na stránku - 52 bytů za řádek - -100000 řádek ------------------------ = 633 stránek (zaokrouhleno nahoru) - 158 řádek na stránce - -633 datových stránek * 8192 bytů na každou stránku = 5,185,536 bytů (5.2 MB) -</pre><p>Indexy nemajà tak velkou režii, ale mohou být také velké, protože -obsahujà indexovaná data. -</p> -<p>Hodnoty NULL jsou uloženy v bitmapách, takže zabÃrajà jen velmi málo -diskového prostoru. -</p> -<h3><a name="item4.6">4.6</a>) Můj dotaz je pomalý a nepoužÃvá vytvoÅ™ené indexy. ProÄ?</h3> -<p>Každý dotaz nemusà nutnÄ› použÃt existujÃcà indexy. Index se použije -tehdy, když je tabulka vÄ›tÅ¡Ã než urÄitá minimálnà velikost, a dotaz -vybÃrá pouze procentuálnÄ› malou Äást řádků tabulky. To proto, že -náhodný pÅ™Ãstup k disku daný ÄtenÃm indexu může být pomalejÅ¡Ã než -lineárnà Ätenà tabulky nebo sekvenÄnà ÄtenÃ. -</p> -<p>PostgreSQL rozhoduje o použità indexů na základÄ› statistiky pÅ™Ãstupů k -tabulce. Tyto statistiky se shromažÄujà pÅ™Ãkazy VACUUM ANALYZE nebo -ANALYZE. DÃky statistikám má optimizer informaci o poÄtu řádek v -tabulce a může lépe rozhodnout o použità indexů. Statistiky se uplatnà -pÅ™i urÄenà optimálnÃho poÅ™adà a metody spojenà tabulek. Statistiky by -se mÄ›li aktualizovat opakovanÄ›, tak jak se mÄ›nà obsah tabulek. -</p> -<p>Indexy nejsou obyÄejnÄ› použity pro setÅ™ÃdÄ›nà nebo spojenà tabulek. -SekvenÄnà zpracovánà následované explicitnÃm tÅ™ÃdÄ›nÃm je obyÄejnÄ› -rychlejÅ¡Ã než použità indexu na velké tabulce. -</p> -<p>Jinak je tomu v pÅ™ÃpadÄ› použità LIMIT a ORDER BY, pÅ™i kterém se -vÄ›tÅ¡inou index použije, jelikož je výsledkem pouze malá Äást tabulky. -</p> -<p>Pokud si myslÃte, že optimizer mylnÄ› zvolil sekvenÄnà prohledávánà -tabulky, použijte pÅ™Ãkaz SET enable_seqscan TO 'off' a zkuste zda je -prohledávánà s indexem rychlejÅ¡Ã. -</p> -<p>PÅ™i vyhledávánà na základÄ› vzoru jako je napÅ™. operátor LIKE nebo ~ se -indexy použijà pouze za urÄitých skuteÄnostÃ: -</p> -<ul><li> zaÄátek hledaného vzoru musà být ukotven k zaÄátku, tj. -<ul><li> vzor LIKE nesmà zaÄÃnat % -</li> -<li> ~ regulárnà výraz musà zaÄÃnat ^ -</li> -</ul> -</li> -<li> vzor nesmà zaÄÃnat intervalem, napÅ™. [a-e] -</li> -<li> vyhledávanÃ, které nenà Case sensitiv jako je ILIKE nebo ~* nepoužÃvá indexy. Můžete ale použÃt funkcionálnà indexy, které jsou popsány v sekci 4.8 -</li> -<li> pÅ™i inicializaci databáze (initdb) musà být použito C locale nebo vytvoÅ™te speciálnà text_pattern_index, který umožnÃ, pÅ™i respektovánà zmÃnÄ›ných podmÃnek použità indexu operacà LIKE. Pro vyhledávánà celých slov je možné a výhodné použÃt fulltext. -</li> -</ul> -<h3><a name="item4.7">4.7</a>) Jak zjistÃm, jak se vyhodnocuje můj dotaz?</h3> -<p>PodÃvejte se do nápovÄ›dy k pÅ™Ãkazu EXPLAIN. -</p> -<h3><a name="item4.8">4.8</a>) Jak použÃt case-(in)sensitive regulárnà výraz? Jak použÃt index pro case insensitive hledánÃ?</h3> -<p>Vyhledávánà prostÅ™ednictvÃm regulárnÃch vzorů zajiÅ¡Å¥uje operátor ~, který je case-sensitive. Jeho case-insensitive varianta je operátor ~*. Case-insensitive variacà operátoru LIKE je operátor ILIKE. -</p> -<p>Case-insensitive vyhledánà se Å™eÅ¡Ã: -</p> -<pre> -SELECT * -FROM tab -WHERE lower(col) = 'abc'; -</pre><p>Tento dotaz nepoužije standardnà index. MusÃte použÃt tzv. funkcionálnà index: -</p> -<pre> -CREATE INDEX tabindex ON tab (lower(col)); -</pre><p>Pokud index vytvoÅ™Ãme jako unikátnÃ, tak můžeme ukládat Å™etÄ›zce obsahujÃcà malá i velká pÃsmena, ale nikoliv Å™etÄ›zce, které se od sebe odliÅ¡ujà jen v malých a velkých pÃsmenech. K zajiÅ¡tÄ›nà zápisu Å™etÄ›zce obsahujÃcà pouze malá nebo pouze velká pÃsmena použijte CHECK kontroly nebo triggery. -</p> -<h3><a name="item4.9">4.9</a>) Jak v dotazu detekovat, že položka je NULL? Jak bezpeÄnÄ› spojit dva Å™etÄ›zce, pokud mohou obsahovat NULL? Lze tÅ™Ãdit podle toho, jestli je položka NULL nebo ne?</h3> -<p>Pokud chcete testovat hodnotu NULL použijte operátor IS: -</p> -<pre> - SELECT * - FROM tab - WHERE col IS NULL; -</pre><p>K spojenà řetÄ›zců, které mohou obsahovat hodnotu NULL, použÃvejte funkci COALESCE(), napÅ™.: -</p> -<pre> - SELECT COALESCE(col1, '') || COALESCE(col2, '') - FROM tab -</pre><p>Pokud chcete tÅ™Ãdit podle hodnoty NULL, použijte výraz IS NULL nebo IS NOT NULL v klauzuli ORDER. Hodnota pravda má pÅ™ednost pÅ™ed hodnotou false a tedy pokud použijete: -</p> -<pre> - SELECT * - FROM tab - ORDER BY (col IS NOT NULL) -</pre><p>tak záznamy s NULL budou na zaÄátku setÅ™ÃdÄ›ných dat. -</p> -<h3><a name="item4.10">4.10</a>) Jaké jsou rozdÃly mezi různými znakovými typy?</h3> -<table border="0"> -<tr><td>Typ </td><td> Internà název </td><td> Poznámky -</td></tr> -<tr><td> VARCHAR(n)</td><td> varchar</td><td> n urÄuje maximálnà délku -</td></tr> -<tr><td> CHAR(n)</td><td> bpchar </td><td> Å™etÄ›zec je do dané délky rozÅ¡ÃÅ™en mezerami -</td></tr> -<tr><td> TEXT</td><td> text</td><td> bez omezenà délky -</td></tr> -<tr><td> BYTEA</td><td> bytea</td><td> pole bytů nespecifikované délky -</td></tr> -<tr><td> "char"</td><td> char</td><td> jeden znak -</td></tr> -</table> -<p>Na internà názvy můžete narazit v systémovém katalogu nebo v nÄ›kterých chybových hlášenÃch. -</p> -<p>ÄŒtyÅ™i prvnà typy jsou tzv. varlena typy (prvnà ÄtyÅ™i byty na disku jsou obsahujà délku, ostatnà obsahujà vlastnà data). SkuteÄnÄ› obsazený prostor je tedy o nÄ›co málo vÄ›tÅ¡Ã než deklarovaná velikost. Na druhou stranu, delÅ¡Ã Å™etÄ›zce jsou komprimovány, takže obsazený prostor na disku může být menÅ¡Ã než se Äeká. -</p> -<p>VARCHAR(n) je vhodný pro ukládánà různÄ› dlouhých Å™etÄ›zců u kterých známe délkové omezenÃ, TEXT pro Å™etÄ›zce bez omezenà délky (maximum je jeden gigabyte). -</p> -<p>CHAR(n) se použÃvá pro uloženà stejnÄ› dlouhých Å™etÄ›zců. CHAR(n) doplnà mezerami na specifikovanou délku, VARCHAR(n) hodnoty se ukládajà tak jak jsou. BYTEA je pro ukládánà binárnÃch dat - non ASCII hodnot. VÅ¡echny zmÃnÄ›né typy majà podobné výkonové charakteristiky. -</p> -<h3><a name="item4.11.1">4.11.1</a>) Jak vytvoÅ™it serial/auto-increment položku?</h3> -<p>V PostgreSQL můžete použÃt datový typ SERIAL. Jeho použitÃm se automaticky vytvořà sekvence. -NapÅ™Ãklad: -</p> -<pre> -CREATE TABLE person ( - id SERIAL, - name TEXT -); -</pre><p>je automaticky transformováno na: -</p> -<pre> -CREATE SEQUENCE person_id_seq; -CREATE TABLE person ( - id INT4 NOT NULL DEFAULT nextval('person_id_seq'), - name TEXT -); -</pre><p>PodrobnÄ›jÅ¡Ã informace najdete v manuálu v popisu pÅ™Ãkazu create_sequence. -</p> -<h3><a name="item4.11.2">4.11.2</a>) Jak zÃskat hodnotu SERIAL po vloženà řádku?</h3> -<p>NejjednoduÅ¡Å¡Ãm způsob, jak zÃskat vygenerovanou hodnotu typu SERIAL, je využÃt klauzuli RETURNING. Pro tabulku z 4.11.1 vypadá takto: -</p> -<pre> -INSERT INTO person (name) VALUES ('Blaise Pascal') RETURNING id; -</pre><p>Také můžete použÃt funkci nextvall() a jejà výsledek použÃt v pÅ™Ãkazu INSERT, nebo zavolat currval() po provedenà pÅ™Ãkazu INSERT. -</p> -<h3><a name="item4.11.3">4.11.3</a>) Nezpůsobà currval() a nextval() problémy ve vÃce uživatelském prostÅ™edÃ?</h3> -<p>Ne, currval vracà vždy hodnotu, která byla vygenerována pro vás. -</p> -<h3><a name="item4.11.4">4.11.4</a>) ProÄ nenà vygenerované ÄÃslo použito pÅ™i pÅ™eruÅ¡enà transakce?ProÄ vznikajà dÃry v ÄÃslovánà prostÅ™ednictvÃm sekvence nebo typu SERIAL?</h3> -<p>Poté co sekvence vygeneruje nové ÄÃslo, tak se nedocházà k zamÄenà sekvence a neÄeká se na úspěšné nebo neúspěšné dokonÄenà transakce. OdvolánÃm transakce, která si vyžádala ÄÃsla sekvence se tato ÄÃsla nenávratnÄ› ztratÃ. -</p> -<h3><a name="item4.12">4.12</a>) Co to je OID? Co je to CTID?</h3> -<p>V pÅ™ÃpadÄ›, že tabulku nezaložÃme s atributem WITHOUT OIDS, tak má každý řádek unikátnà identifikaÄnà ÄÃslo OID. Toto ÄÃslo je 4 bajtové celé ÄÃslo, které je jedineÄné v celé instalaci. PÅ™eteÄe po 4 miliardách řádků. PostgreSQL použÃvá OIDs jako internà linky v internÃch systémových tabulkách. -</p> -<p>K zÃskánà unikátnÃho ÄÃsla v nesystémových tabulkách je vhodnÄ›jÅ¡Ã použità typu SERIAL než OID, jelikož sekvence SERIAL se použÃvá pouze pro jednu tabulku a je tudÞ ménÄ› náchylná na pÅ™eteÄenÃ. Pokud byste se toho obávali, použijte typ SERIAL8. -</p> -<p>CTID se použÃvá k identifikaci konkrétnÃho fyzického řádku. CTID se mÄ›nà pokud je řádek modifikován nebo znovu naÄten. PoužÃvajà ho indexy jako adresaci fyzických řádků. -</p> -<h3><a name="item4.13">4.13</a>) Co znamená chybové hlášenà "ERROR: Memory exhausted in AllocSetAlloc()"?</h3> -<p>PravdÄ›podobnÄ› jste vyÄerpal dostupnou virtuálnà paměť, nebo tvůj kernel -má pÅ™ÃliÅ¡ nÃzké limity u urÄitých zdrojů. PÅ™ed startem PostgreSQL vyzkouÅ¡ejte: -</p> -<pre> -ulimit -d 262144 -limit datasize 256m -</pre><p>Možná, že se projde pouze jeden pÅ™Ãkaz - záležà to na vaÅ¡em shellu. -MÄ›l by zvednout limity datových segmentů vaÅ¡ich procesů na dostateÄnÄ› velkou -hodnotu a snad umožnit dokonÄenà dotazu. ZmÄ›na limitů se bude aplikovat -pouze na aktuálnà proces a na vÅ¡echny novÄ› vytvoÅ™ené procesy. Jestliže máte -problém s SQL klientem, protože vám server vrátil pÅ™ÃliÅ¡ dat, zkuste to -pÅ™ed startem klienta. -</p> -<h3><a name="item4.14">4.14</a>) Jak zjistÃm, kterou verzi PostgreSQL použÃvám?</h3> -<p>V psql napiÅ¡te: -</p> -<pre> -SELECT version(); -</pre> -<h3><a name="item4.15">4.15</a>) Jak vytvoÅ™it sloupec, který bude implicitnÄ› obsahovat aktuálnà Äas?</h3> -<p>Použijte CURRENT_TIMESTAMP: -</p> -<pre> -CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -</pre> -<h3><a name="item4.16">4.16</a>) Jak provést vnÄ›jÅ¡Ã spojenà (outer join)?</h3> -<p>PostgreSQL podporuje standardnà SQL syntaxi pro vnÄ›jÅ¡Ã spojenÃ. Zde jsou -dva pÅ™Ãklady: -</p> -<pre> -SELECT * -FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col); -</pre><p>nebo -</p> -<pre> -SELECT * -FROM t1 LEFT OUTER JOIN t2 USING (col); -</pre><p>Tyto identické dotazy spojà sloupec t1.col k sloupci t2.col, a jeÅ¡tÄ› vrátà vÅ¡echny nespárované řádky t2 (ty, které nedohledá v t2). RIGHT JOIN by pÅ™ipojil vÅ¡echny nespárované řádky z t2. FULL JOIN vrátà vÅ¡echny spárované řádky i vÅ¡echny zbývajÃcà řádky z obou tabulek. KlÃÄové slovo OUTER je volitelné. Běžná operace JOIN se také oznaÄuje jako vnitÅ™nà spojenÃ. -</p> -<h3><a name="item4.17">4.17</a>) Jak provést dotaz napÅ™ÃÄ nÄ›kolika databázemi?</h3> -<p>Neexistuje žádný způsob, jak se v dotazu odkazovat na tabulky z jiné než aktuálnà databáze. A to protože má systémové tabulky uložené nezávisle v každé databázi a nenà tak úplnÄ› zÅ™ejmé, jak by se dotaz provedený napÅ™ÃÄ databázemi mÄ›l chovat. -</p> -<p>Jeden z doplňků dblink umožňuje dotaz nad nÄ›kolika tabulkami pomocà funkcÃ. Druhý způsob je simultálnà pÅ™ipojenà klienta ke vÅ¡em relevantnÃm databázÃm a slouÄenà výsledku na stranÄ› klienta. -</p> -<h3><a name="item4.18">4.18</a>) Může funkce vrátit vÃce řádků nebo sloupců?</h3> -<p>Jde to jednoduÅ¡e pomocà set-returning funkce. VÃce na -<a href="http://www.postgresql.org/docs/techdocs.17" title="http://www.postgresql.org/docs/techdocs.17">http://www.postgresql.org/docs/techdocs.17</a>. -</p> -<h3><a name="item4.19">4.19</a>) Co je pÅ™ÃÄinou chyby "relation with OID xxxxx does not exist"?</h3> -<p>NechtÄ›ným vedlejÅ¡Ãm efektem keÅ¡ovánà SQL dotazů v PL/pgSQL funkci je problém s neplatnými odkazy na doÄasné tabulky, které byly od prvnÃho spuÅ¡tÄ›nà funkce zruÅ¡eny a znovu vytvoÅ™eny pÅ™ed dalÅ¡Ãm spuÅ¡tÄ›nÃm PL/pgSQL funkce. ŘeÅ¡enÃm je použÃt pÅ™Ãkaz EXECUTE a to proto, že provádÄ›cà plán SQL pÅ™Ãkazu spouÅ¡tÄ›ného pÅ™Ãkazem EXECUTE se vytvářà pokaždé znovu (neukládá se do cache). -</p> -<p>Tento problém by se nemÄ›l vyskytovat u PostgreSQL verze 8.3 a vyÅ¡Å¡Ãch verzÃch. -</p> -<h3><a name="item4.20">4.20</a>) Jaké jsou možnosti replikace databázÃ?</h3> -<p>Replikaci databáze umožňuje nÄ›kolik technoligiÃ. Každá má urÄité výhody a nevýhody. -</p> -<p>Master/Slave replikaci podporuje jeden hlavnà server, který pÅ™ijÃmá požadavky na zápis a ÄtenÃ, a nÄ›kolik podÅ™Ãzených serverů, které umožňujà pouze Ätenà (SELECT). NejrozÅ¡ÃÅ™enÄ›jÅ¡Ãm volnÄ› dostupným Å™eÅ¡enÃm tohoto typu je <a href="http://main.slony.info/" title="http://main.slony.info/">Slony-I</a>. -</p> -<p>Replikace typu Multi-master podporuje existenci nÄ›kolika serverů s povoleným zápisem na vÃce replikovaných serverech. Toto Å™eÅ¡enà zvyÅ¡uje zátěž serverů, protože je nutná synchronizace serverů. NejrozÅ¡ÃÅ™enÄ›jÅ¡Ãm volnÄ› dostupným Å™eÅ¡enÃm je <a href="http://pgfoundry.org/projects/pgcluster/" title="http://pgfoundry.org/projects/pgcluster/">PGCluster</a>. -</p> -<p>JeÅ¡tÄ› existuje nÄ›kolik komerÄnÃch a hardware Å™eÅ¡enà replikacà podporujÃcÃch různé modely replikace. -</p> -<h3><a name="item4.21">4.21</a>) ProÄ v dotazu nejsou rozpoznány názvy mých tabulek nebo funkcÃ? ProÄ jsou velká pÃsmena v názvech automaticky pÅ™evedena na malá pÃsmena?</h3> -<p>NejÄastÄ›jÅ¡Ãm důvodem nerozpoznánà názvu objektu bylo použità vloženà názvu sloupce nebo tabulky mezi uvozovky pÅ™i zakládánà tabulky. Pokud se název zapÃÅ¡e mezi uvozovky, pak je case sensitive, a v důsledku toho je nutné názvy tÄ›chto sloupců nebo tabulek v SQL pÅ™Ãkazech také vkládat mezi uvozovky (pokud obsahujà velká pÃsmena). NÄ›které programy, jako je napÅ™Ãklad pgAdmin, automaticky použÃvajà uvozovky. Takže pokud chcete, aby systém identifikoval identifikátor, musÃte: -</p> -<ul><li> nepoužÃvat uvozovky v pÅ™Ãkazu CREATE TABLE -</li> -<li> v identifikátoru použÃt pouze malá pÃsmena -</li> -<li> v dotazech vkládat identifikátory do uvozovek -</li> -</ul> -</body> -</htm> diff --git a/doc/src/FAQ/FAQ_farsi.html b/doc/src/FAQ/FAQ_farsi.html deleted file mode 100644 index b304095b7508f4338c2906d1e341dde6fb7440c1..0000000000000000000000000000000000000000 --- a/doc/src/FAQ/FAQ_farsi.html +++ /dev/null @@ -1,1533 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> -<!-- saved from url=(0122) --> -<HTML dir="rtl"><HEAD><TITLE>PostgreSQL FAQ</TITLE> -<META content="Microsoft FrontPage 6.0" name=GENERATOR> -<META http-equiv=Content-Type content="text/html; charset=utf-8"></HEAD> -<BODY text=#000000 vLink=#A00000 aLink=#0000FF link=#FF0000 bgColor=#ffffff> -<h1 dir="rtl"><font face="Tahoma"><span lang="fa">سوالاتي كه اغلب در مورد -</span> </font> -<font face="Tahoma">PostgreSQL</font><span lang="fa"><font face="Tahoma">‌ -پرسيده مي شوند</font></span></h1> -<p dir="rtl"><font face="Tahoma"><span lang="fa">تاريخ آخرين Ø§ØµÙ„Ø§Ø Ø§ÙŠÙ† Ùايل: 28 -شهریور 1383 هجری شمسی</span></font></p> -<P dir="rtl"><span lang="fa"><font face="Tahoma">نگهدارنده اصلي Ùايل (زبان -انگليسي)در Øال Øاضر </font></span><font face="Tahoma">: Bruce Momjian -<A -href="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</A></font></P> -<P dir="rtl"><span lang="fa"><font face="Tahoma">نگهدارنده Ùايل به زبان Ùارسي: -</font></span><font face="Tahoma"><a href="mailto:m.taghizadeh@imenafzar.net"> -m.taghizadeh@imenafzar.net</a> </font><span lang="fa"><font face="Tahoma"> Ù…Øمود -تقي‌زاده مهرجردی</font></span><font face="Tahoma"><BR></font></P> -<P dir="rtl"><span lang="fa"><font face="Tahoma">آخرين نسخه اين Ùايل را -مي‌توانيد از اين آدرس بگيريد </font></span><font face="Tahoma"> <A -href="http://www.postgresql.org/docs/faqs/FAQ.html">http://www.PostgreSQL.org/docs/faqs/FAQ.html</A></font></P> -<P dir="rtl"><span lang="fa"><font face="Tahoma">سوالاتي كه در مورد يك -سکوی(پلتÙرم) خاص است در اين آدرس جواب داده شده اند </font></span><font face="Tahoma"> - <A -href="http://www.postgresql.org/docs/index.html">http://www.PostgreSQL.org/docs/index.html</A></font></P> -<HR dir="rtl"> - -<H2 align=center dir="rtl"><font face="Tahoma"><span lang="fa">سوالات عمومي</span></font></H2> -<p dir="rtl"><font face="Tahoma"><a href="#1.1">1.1</a>) PostgreSQL</font><span lang="fa"><font face="Tahoma"> -چيست Ùˆ چگونه بايد آن را تلÙظ كرد؟</font></span><font face="Tahoma"><BR><A -href="#1.2">1.2</A>) -<span lang="fa">قانون كپي رايت‌ (Øقوق معنوي) در مورد </span>PostgreSQL -<span lang="fa"> به Ú†Ù‡ صورت است؟</span><BR><A -href="#1.3">1.3</A>)<span lang="fa"> -</span>PostgreSQL</font><span lang="fa"><font face="Tahoma">‌ روي Ú†Ù‡ نوع -يونيكسهايي اجرا مي‌شود؟</font></span><font face="Tahoma"><BR><A -href="#1.4">1.4</A>) -</font><span lang="fa"><font face="Tahoma">روي Ú†Ù‡ Ù…Øيطهاي غير يونيكسي مي‌توان آن -را اجرا كرد؟</font></span><font face="Tahoma"><BR><A -href="#1.5">1.5</A>) PostgreSQL</font><span lang="fa"><font face="Tahoma"> -را از كجا مي‌توانم بگيرم؟</font></span><font face="Tahoma"><BR><A -href="#1.6">1.6</A>) -</font><span lang="fa"><font face="Tahoma">از كجا خدمات پشتيباني بگيرم؟</font></span><font face="Tahoma"><BR><A -href="#1.7">1.7</A>)</font><span lang="fa"><font face="Tahoma"> -آخرين نسخه اعلام شده چيست؟</font></span><font face="Tahoma"><BR><A -href="#1.8">1.8</A>) -</font><span lang="fa"><font face="Tahoma">Ú†Ù‡ مستندات Ùˆ راهنمائيهايي وجود دارند؟</font></span><font face="Tahoma"><BR><A -href="#1.9">1.9</A>) -<span lang="fa">چگونه مي‌توانم ازاشكالات شناخته شده Ùˆ يا امكاناتي كه در اين -پايگاه داده وجود ندارد مطلع شوم؟</span><BR><A -href="#1.10">1.10</A>) -</font><span lang="fa"><font face="Tahoma">چگونه مي‌توانم زبان </font></span> -<font face="Tahoma">SQL</font><span lang="fa"><font face="Tahoma"> را ياد بگيرم؟</font></span><font face="Tahoma"><BR><A -href="#1.11">1.11</A>)</font><span lang="fa"><font face="Tahoma"> -آيا </font></span><font face="Tahoma">PostgreSQL</font><span lang="fa"><font face="Tahoma"> -مشكل </font></span><font face="Tahoma">Y2K</font><span lang="fa"><font face="Tahoma">‌ -دارد يا خير؟</font></span><font face="Tahoma"><BR><A -href="#1.12">1.12</A>) -</font><span lang="fa"><font face="Tahoma">چگونه مي‌توانم به تيم برنامه نويس -</font></span><font face="Tahoma">PostgreSQL</font><span lang="fa"><font face="Tahoma"> -ملØÙ‚ شوم؟</font></span><font face="Tahoma"><BR><A -href="#1.13">1.13</A>) -<span lang="fa">چگونه مي‌توانم يك اشكال را به گروه برنامه نويس اعلام كنم؟</span><BR><A -href="#1.14">1.14</A>) -</font><span lang="fa"><font face="Tahoma"> وضعيت </font></span> -<font face="Tahoma">PostgreSQL</font><span lang="fa"><font face="Tahoma">‌ در -مقايسه با ساير </font></span><font face="Tahoma">DBMS<span lang="fa">ها به Ú†Ù‡ -صورت است؟</span><BR><A -href="#1.15">1.15</A>) -<span lang="fa">من چگونه مي‌توانم از نظر مالي به </span>PostgreSQL<span lang="fa"> -كمك كنم؟</span><BR> -</font></p> -<h2 align="center" dir="rtl"><font face="Tahoma"><span lang="fa">سوالات مربوط به -استÙاده از پايگاه داده</span></font></h2> -<p dir="rtl"><font face="Tahoma"><A -href="#2.1">2.1</A>) -<span lang="fa">آيا هيچ درايور </span>ODBC</font><span lang="fa"><font face="Tahoma">‌ -براي </font></span><font face="Tahoma">PostgreSQL</font><font face="Tahoma"><span lang="fa"> -وجود دارد؟</span><BR><A -href="#2.2">2.2</A>) -<span lang="fa">Ú†Ù‡ ابزارهايي براي استÙاده از </span>PostgreSQL<span lang="fa">‌ -با صÙØات وب وجود دارد؟</span><BR><A -href="#2.3">2.3</A>) -<span lang="fa">آيا </span>PostgreSQL<span lang="fa">‌ يك واسط كاربري گراÙيكي -دارد؟</span><BR><A -href="#2.4">2.4</A>) -<span lang="fa">با Ú†Ù‡ زبانهاي برنامه‌نويسي مي‌توان با </span>PostgreSQL<span lang="fa">‌ -ارتباط برقرار كرد؟</span><BR> -</font></p> -<h2 align="center" dir="rtl"><span lang="fa"><font face="Tahoma">سوالات مربوط به -راهبري</font></span></h2> -<p dir="rtl"><font face="Tahoma"><A -href="#3.1">3.1</A>) -<span lang="fa">چگونه مي‌توانم </span>PostgreSQL<span lang="fa">‌ را در شاخه‌اي -غير از </span>/usr/local/pgsql/<span lang="fa"> نصب كنم؟</span><BR><A -href="#3.2">3.2</A>) -<span lang="fa">چرا موقعي كه من برنامه </span>postmaster<span lang="fa">‌ را -اجرا مي كنم پيام </span>Bad system call<span lang="fa">‌ Ùˆ يا </span>core dump -<span lang="fa">‌مي‌گيرم؟</span><BR><A -href="#3.3">3.3</A>) -<span lang="fa">چرا موقعي كه من سعي مي‌كنم برنامه </span>postmaster<span lang="fa">‌ -را اجرا كنم خطاي</span> <I>IpcMemoryCreate</I> <span lang="fa">مي‌گيرم؟</span><BR><A -href="#3.4">3.4</A>)<I><span lang="fa"> -</span></I><span lang="fa">چرا موقعي كه من سعي مي‌كنم برنامه </span>postmaster<span lang="fa">‌ -را اجرا كنم خطاي</span> <I><span lang="fa"> </span>IpcSemaphoreCreate<span lang="fa"> -</span></I><span lang="fa">مي‌گيرم؟</span><BR><A -href="#3.5">3.5</A>) -<span lang="fa">چگونه مي‌توانم اتصالات ساير ماشينها را كنترل كنم؟</span><BR><A -href="#3.6">3.6</A>) -<span lang="fa">براي كارايي بالاتر Ùˆ بهتر پايگاه داده من Ú†Ù‡ تنظيماتي را بايد -انجام دهم؟</span><BR><A -href="#3.7">3.7</A>) -<span lang="fa">Ú†Ù‡ امكاناتي براي پيدا كردن اشكال‌ وجود دارد؟</span><BR><A -href="#3.8">3.8</A>) -<span lang="fa">چرا موقعي كه من مي‌خواهم به پايگاه داده وصل شوم پيام</span> <I> -"Sorry, too many clients" -<span lang="fa">‌</span></I><span lang="fa">مي‌گيرم؟</span><BR><A -href="#3.9">3.9</A>)<span lang="fa"> -در شاخه </span> <I>pgsql_tmp</I> <span lang="fa"> Ú†Ù‡ چيزي قرار دارد؟</span><BR><A -href="#3.10">3.10</A>) -<span lang="fa">چرا براي به روز كردن نسخه پايگاه داده من بايد كل داده ها را -</span>dump<span lang="fa">‌ Ùˆ مجدداً </span>restore<span lang="fa"> كنم؟</span><BR><A -href="#3.11">3.11</A>) -<span lang="fa">از Ú†Ù‡ سخت اÙزاري بايد استÙاده كنم؟</span><BR> -</font></p> -<H2 align=center dir="rtl"><span lang="fa"><font face="Tahoma">سوالات عملياتي</font></span></H2> -<p dir="rtl"><font face="Tahoma"><A -href="#4.1">4.1</A>) تÙاوت بين <span lang="en-us">binary cursors</span> Ùˆ <span lang="en-us"> -Normal cursors</span> چيست؟<BR><A -href="#4.2">4.2</A>) -<span lang="fa">من چگونه مي‌توانم Ùقط روي چند ردي٠اول يا يك ردي٠تصادÙÙŠ درخواست </span> -SELECT<span lang="fa">‌ بزنم؟</span><BR><A -href="#4.3">4.3</A>) -<span lang="fa">من چگونه مي‌توانم ليستي از جداول يا ساير چيزهايي كه در </span> -psql<span lang="fa">‌ وجود دارد را ببينم؟</span><BR><A -href="#4.4">4.4</A>) -<span lang="fa">چگونه يك ستون جدول را Øذ٠مي‌كنيد؟ چگونه نوع داده آن را عوض -كنيم؟</span><BR><A -href="#4.5">4.5</A>) -<span lang="fa">Øداكثر اندازه يك رديÙ،‌ جدول Ùˆ خود پايگاه داده چقدر است؟</span><BR><A -href="#4.6">4.6</A>) -<span lang="fa">چقدر Ùضاي ديسك سخت براي ذخيره كردن داده‌‌هاي يك Ùايل متني مورد -نياز است؟</span><BR><A -href="#4.7">4.7</A>) -<span lang="fa">چگونه مي‌توانم بÙهمم كه Ú†Ù‡ كاربران،‌ پايگاه داده،‌ نمايه Ùˆ -جداولي در سيستم تعري٠شده است؟</span><BR><A -href="#4.8">4.8</A>) -<span lang="fa">چرا درخواستهاي من كند اجرا مي‌شوند يا چرا از نمايه ها استÙاده -نمي‌كنند؟</span><BR><A -href="#4.9">4.9</A>) -<span lang="fa">چگونه مي‌توانم Ù†Øوه بررسي درخواست را توسط بهينه‌ساز درخواستها -مشاهده كنم؟</span><BR><A -href="#4.10">4.10</A>) -<span lang="fa">نمايه </span>R-tree<span lang="fa">‌ چيست؟</span><BR><A -href="#4.11">4.11</A>) -<span lang="fa">بهينه ساز تكويني درخواست چيست؟</span> (Genetic Query Optimizer)<BR><A -href="#4.12">4.12</A>) -<span lang="fa">چگونه از عبارات منظم براي جستجو استÙاده كنم؟ چگونه جستجويي انجام -دهم كه Øساس به متن نباشد؟ چگونه براي يك جستجوي غير Øساس به متن از نمايه استÙاده -كنم؟</span><BR><A -href="#4.13">4.13</A>) -<span lang="fa">چگونه مي‌توانم در يك درخواست تشخيص دهم كه يك Ùيلد </span>NULL<span lang="fa">‌ -است؟</span><BR><A -href="#4.14">4.14</A>) -<span lang="fa">تÙاوت بين گونه‌هاي مختل٠</span>character<span lang="fa"> چيست؟</span><BR><A -href="#4.15.1">4.15.1</A>) -<span lang="fa">چگونه مي‌توانم يك Ùيلد سريال يا اÙزايشي ايجاد كنم؟</span><BR><A -href="#4.15.2">4.15.2</A>) -<span lang="fa">چگونه مي‌توانم مقدار يك درج سريالي را بدانم؟</span><BR><A -href="#4.15.3">4.15.3</A>) <span lang="fa">آیا توابع ()</span>nextval<span lang="fa"> -Ùˆ ()</span>currval<span lang="fa"> منجر به ایجاد شرایط </span>race<span lang="fa"> -برای سایر کاربران Ù…ÛŒ شوند؟</span><BR><A -href="#4.15.4">4.15.4</A>) -<span lang="fa">چرا اعداد سریالی مربوط به تراکنشهای </span>abort<span lang="fa"> -شده مجدداً استÙاده نمی شود؟ چرا بین اعداد سریالی یک Ùاصله خالی ایجاد Ù…ÛŒ شود؟</span><BR><A -href="#4.16">4.16</A>) OID<span lang="fa"> Ùˆ </span>TID<span lang="fa"> Ú†Ù‡ -هستند؟</span><BR><A -href="#4.17">4.17</A>) -<span lang="fa">معني بعضي از ترمها Ùˆ كلماتي كه در </span>PostgreSQL<span lang="fa">‌ -استÙاده مي‌شود چيست؟</span><BR><A -href="#4.18">4.18</A>)<span lang="fa"> -چرا من خطاي </span><i>"ERROR: Memory exhausted in AllocSetAlloc"</i><span lang="fa"> -مي‌گيرم؟</span><BR><A -href="#4.19">4.19</A>) -<span lang="fa">از كجا تشخيص دهم كه ويرايش يا نسخه </span>PostgreSQL<span lang="fa">يي -كه من استÙاده مي‌كنم چيست؟</span><BR><A -href="#4.20">4.20</A>) <span lang="fa">چرا در Øین اجرای عملیات روی </span> -large-object<span lang="fa">ها خطای </span>"<I>invalid large obj descriptor</I>"<span lang="fa">به -وجود Ù…ÛŒ آید؟</span><BR><A -href="#4.21">4.21</A>) -<span lang="fa">چگونه يك ستون ايجاد كنم كه مقدار زمان جاري را به عنوان مقدار -پيش‌Ùرض داشته باشد؟</span><BR><A -href="#4.22">4.22</A>) -<span lang="fa">چرا زير درخواستهايي كه از </span>IN<span lang="fa"> استÙاده -مي‌كنند كند هستند؟</span><BR><A -href="#4.23">4.23</A>) -<span lang="fa">چگونه مي‌توانم يك الØاق خارجي (</span>outer join<span lang="fa">) -انجام دهم؟</span><BR><A -href="#4.24">4.24</A>) -<span lang="fa">چگونه مي‌توان درخواستهايي از چند پايگاه داده توليد كرد؟</span><BR><A -href="#4.25">4.25</A>) -<span lang="fa">چگونه خروجي يك تابع مي‌تواند چند ردي٠يا ستون باشد؟</span><BR><A -href="#4.26">4.26</A>) -<span lang="fa">در توابع </span>PL/PgSQL<span lang="fa"> چرا نمي‌توان با اطمينان -جداول موقت را ايجاد يا Øذ٠كرد؟</span><BR><A -href="#4.27">4.27</A>) -<span lang="fa">Ú†Ù‡ گزينه‌هايي براي تكرار (</span>replication<span lang="fa">)</span> -<span lang="fa">وجود دارد؟</span><BR><A -href="#4.28">4.28</A>) -<span lang="fa">Ú†Ù‡ گزينه‌هايي براي رمزنگاري وجود دارد؟</span><BR> -</font></p> -<h2 align="center" dir="rtl"><font face="Tahoma"><span lang="fa">توسعه </span> -PostgreSQL</font></h2> -<p dir="rtl"><font face="Tahoma"><A -href="#5.1">5.1</A>) -<span lang="fa">من يك تابع نوشته‌ام. چگونه آن را در </span>psql<span lang="fa"> -اجرا كنم؟ چرا با اجراي آن </span>core dump<span lang="fa"> مي‌گيرم؟</span><BR><A -href="#5.2">5.2</A>) -<span lang="fa">چگونه مي‌توانم در توليد نوع‌ها Ùˆ توابع جديد Ùˆ جالب براي </span> -PostgreSQL<span lang="fa">‌ همكاري Ùˆ مشاركت داشته باشم.</span><BR><A -href="#5.3">5.3</A>) -<span lang="fa">چگونه مي‌توانم يك تابع به زبان </span>C<span lang="fa"> بنويسم -كه خروجي آن يك</span> <span lang="fa">‌</span>tuple<span lang="fa"> </span> <span lang="fa">(چند -تايي) باشد؟</span><BR><A -href="#5.4">5.4</A>) -<span lang="fa">من يك Ùايل منبع را عوض كرده ام چرا در عمليات كامپيل مجدد آن -تغيير ديده نمي‌شود؟</span><BR> -</font></p> -<HR dir="rtl"> - -<H2 align=center dir="rtl"><font face="Tahoma"><span lang="fa">سوالات عمومي</span></font></H2> -<H4 dir="rtl"><font face="Tahoma"><A name=1.1>1.1</A>) <span lang="en-us"> -PostgreSQL</span> چيست Ùˆ چگونه آن را بايد تلÙظ كرد؟</font></H4> -<p dir="rtl"><span lang="en-us">PostgreSQL</span> به صورت <span lang="en-us"> -Post-Gres-Q-L</span>‌ تلÙظ مي‌شود. يك Ùايل صوتي در آدرس -<a href="http://www.postfresql.org/postgresql.mp3‌"><span lang="en-us"> -http://www.postfresql.org/postgresql.mp3</span>‌</a> براي كساني كه مايلند تلÙظ -صØÙŠØ Ø±Ø§ بشنوند وجود دارد.</p> -<P dir="rtl"><span lang="en-us">PostgreSQL</span> از روي سيستم مديريت پايگاه -داده <span lang="en-us">POSTGRES</span> توسعه داده شده است (هنوز هم بعضي مواقع -براي سادگي به آن <span lang="en-us">Postgres</span> Ú¯Ùته مي‌شود) كه يك نمونه -تØقيقاتي از پايگاه داده‌هاي نسل بعد است. <span lang="en-us">PostgreSQL</span> -همان الگوي داده قوي Ùˆ انواع داده را ØÙظ كرده است ولي زبان -<span lang="en-us">PostQuel</span> را با يك زيرمجموعه پيشرÙته از -<span lang="en-us">SQL</span> جايگزين كرده است. <span lang="en-us">PostgreSQL</span> -متن باز بوده Ùˆ متن كامل آن در دسترس است.</P> -<P dir="rtl"><font face="Tahoma"><span lang="en-us">PostgreSQL </span> توسط يك -تيم برنامه‌نويس كه همگي در گروه پست الكترونيك برنامه‌نويسان -<span lang="en-us">PostgreSQL</span> عضو هستند، انجام مي‌شود. هماهنگ كننده -اصلي در Øال Øاضر <span lang="en-us">Marc G. Fournier</span>‌ به آدرس -<span lang="en-us"><a href="mailto:scrappy@PostgreSQL.org"> -scrappy@PostgreSQL.org</a></span> مي‌باشد. (براي ديدن Ù†Øوه ملØÙ‚ شدن به اين -تيم قسمت <A -href="#1.6">1.6</A> -را ببينيد). اين تيم در Øاضر مسئوليت تمام مسائل مربوط به برنامه‌نويسي -<span lang="en-us">PostgreSQL</span> را بر عهده دارد. اين يك پروژه گروهي است Ùˆ -تØت كنترل هيچ شركتي نيست. براي اطلاعات بيشتر در مورد اين تيم به آدرس -<A -href="http://www.postgresql.org/docs/faqs/FAQ_DEV.html"> -http://www.PostgreSQL.org/docs/faqs/FAQ_DEV.html</A> -مراجعه كنيد.</font></P> -<P dir="rtl"><font face="Tahoma">اولين نسخه <span lang="en-us">PostgreSQL</span>‌ -توسط Andrew Yu and Jolly Chen به وجود آمد. اÙراد بسياري در توسعه Ùˆ رÙع اشكال Ùˆ -انتقال آن شركت كرده‌اند. متن اصلي <span lang="en-us">Postgres</span> كه -<span lang="en-us">PostgreSQL</span> از روي آن نوشته شده است، توسط تعداد زيادي -دانشجوي كارشناسي ارشدو دانشجوي كارشناسي Ùˆ تيم برنامه‌نويسي كه تØت نظر پروÙسور -Michael Stonebrake در دانشگاه بركلي،‌كاليÙرنيا كار مي‌كرده‌اند نوشته شده است.</font></P> -<P dir="rtl"><font face="Tahoma">نام اصلي نرم اÙزار در دانشگاه بركلي -<span lang="en-us">Postgres</span>‌ بود. در سال 1995 بعد از اضاÙÙ‡ شدن -<span lang="en-us">SQL</span> نام آن به<span lang="en-us"> Postgres95</span> -تغيير داده شد.<span lang="en-us"> </span>در سال 1996 نام آن به -<span lang="en-us">PostgreSQL</span> تغيير داده شد.</font></P> -<H4 dir="rtl"><font face="Tahoma"><A name=1.2>1.2</A>) قوانين كپي رايت در مورد -<span lang="en-us">PostgreSQL</span> به Ú†Ù‡ صورت است؟</font></H4> -<p dir="rtl"><font face="Tahoma"><span lang="en-us">PostgreSQL</span> تØت قانون -كپي رايت زير قرار دارد:</font></p> -<P dir="ltr"><font face="Tahoma">PostgreSQL Data Base Management System</font></P> -<P dir="ltr"><font face="Tahoma">Portions copyright (c) 1996-2004, PostgreSQL -Global Development Group Portions Copyright (c) 1994-6 Regents of the University -of California</font></P> -<P dir="ltr"><font face="Tahoma">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.</font></P> -<P dir="ltr"><font face="Tahoma">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.</font></P> -<P dir="ltr"><font face="Tahoma">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.</font></P> -<P dir="rtl"><font face="Tahoma">قانون بالا ليسانس <span lang="en-us">BSD</span> -كه يك ليسانس كلاسيك براي متن‌هاي باز است مي‌باشد. هيچ Ù…Øدوديتي در مورد Ù†Øوه -استÙاده از متن در آن ديده نمي‌شود. ما آن را دوست داريم Ùˆ هيچ قصدي براي تغيير آن -نداريم.</font></P> -<H4 dir="rtl"><font face="Tahoma"><A name=1.3>1.3</A>) PostgreSQL</font><span lang="fa"><font face="Tahoma">‌ -روي Ú†Ù‡ نوع يونيكسهايي اجرا مي‌شود؟</font></span></H4> -<p dir="rtl"><font face="Tahoma">در Øالت كلي <span lang="en-us">PostgreSQL</span> -روي هر پلتÙرم (سكوي) سازگار با يونيكس اجرا مي‌شود. ليست پلتÙرمهايي كه تاكنون -<span lang="en-us">PostgreSQL</span>‌ روي آنها نصب Ùˆ تست شده است درقسمت -دستورالعملهاي نصب آمده است.</font></p> -<H4 dir="rtl"><font face="Tahoma"><A name=1.4>1.4</A>) </font><span lang="fa"><font face="Tahoma"> -روي Ú†Ù‡ Ù…Øيطهاي غير يونيكسي مي‌توان آن را اجرا كرد؟</font></span></H4> -<P dir="rtl"><font face="Tahoma"><STRONG>Client</STRONG></font></P> -<P dir="rtl"><font face="Tahoma">مي‌توان <span lang="en-us">psql, </span> -كتابخانه <span lang="en-us">libpq</span> Ùˆ ساير واسطها Ùˆ برنامه‌هاي كاربردي را -طوري كامپيل كرد كه روي Ù…Øيطهاي ويندوز نيز اجرا شوند. در اين Øالت -<span lang="en-us">Client</span> روي ويندوز اجرا مي‌شود Ùˆ از طربق شبكه Ùˆ پروتكل -<span lang="en-us">TCP/IP</span> با يك سرور كه روي يك پلتÙرم لينوكس در Øال -اجراست ارتباط برقرار مي‌كند.يك Ùايل <span lang="en-us">win32.mak</span> همراه با -كدهاي <span lang="en-us">PostgreSQL</span> وجود دارد كه براي كامپيل كردن -كتابخانه <span lang="en-us">libpq</span> Ùˆ برنامه <span lang="en-us">psql</span> -مي‌باشد. <span lang="en-us">P</span>‌<span lang="en-us">ostgreSQL</span>‌ همچنين -امكان ارتباط به صورت <span lang="en-us">ODBC</span>‌ را نيز دارد.</font></P> -<P dir="rtl"><font face="Tahoma"><STRONG>Server</STRONG></font></P> -<P dir="rtl"><strong style="font-weight: 400"><font face="Tahoma">با استÙاده از -<span lang="en-us">Cygwin</span>‌ Ùˆ كتابخانه <span lang="en-us">Cygnus</span> -مي‌توان پايگاه داده را روي ويندوز <span lang="en-us">NT</span> Ùˆ يا -<span lang="en-us">Win2K</span> اجرا كرد.براي ديدن اطلاعات بيشتر Ùايل<span lang="en-us"> -</span></font></strong><font face="Tahoma"> <I>pgsql/doc/FAQ_MSWIN<span lang="en-us"> -</span>‌</I>را كه بهمراه توزبع‌هاي <span lang="en-us">PostgreSQL</span> آمده است -ببينيد Ùˆ يا اينكه به اين صÙØÙ‡ <A -href="http://www.postgresql.org/docs/faqs/text/FAQ_MSWIN"> -http://www.PostgreSQL.org/docs/faqs/text/FAQ_MSWIN</A> -مراجعه كنيد.</font></P> -<P dir="rtl"><font face="Tahoma">در Øال Øاضر يك عمليات انتقال <span lang="en-us"> -PostgreSQL</span> به روي سكوهاي <span lang="en-us">Win NT/2000/XP</span> در -جريان است. براي ديدن وضعيت اين پروژه به سايت‌هاي <A -href="http://momjian.postgresql.org/main/writings/pgsql/win32.html"> -http://momjian.postgresql.org/main/writings/pgsql/win32.htm</A> Ùˆ <A -href="http://techdocs.postgresql.org/guides/Windows"> -http://techdocs.postgresql.org/guides/Windows</A> -مراجعه كنيد. </font></P> -<P dir="rtl"><font face="Tahoma">همچنين يك عمليات انتقال بر روي -<span lang="en-us">Novell Netware 6</span> نيز در Øال انجام است كه در سايت <A -href="http://forge.novell.com/">http://forge.novell.com</A> مي‌توانيد اطلاعات -بيشتر را ببينيد.</font></P> -<H4 dir="rtl"><font face="Tahoma"><A name=1.5>1.5</A>) PostgreSQL</font><span lang="fa"><font face="Tahoma"> -را از كجا مي‌توانم بگيرم؟</font></span></H4> -<p dir="rtl"><font face="Tahoma"><span lang="en-us">PostgreSQL</span>‌ را از -سايت اصلي آن <A -href="ftp://ftp.postgresql.org/pub">ftp://ftp.PostgreSQL.org/pub</A> مي‌توانيد -بگيريد. در صÙØÙ‡ اصلي سايت ليست ساير آدرسهايي كه مي‌توانيد <span lang="en-us"> -PostgreSQL</span>‌ را از آنها بگيريد آمده است.</font></p> -<H4 dir="rtl"><font face="Tahoma"><A name=1.6>1.6</A>) </font><span lang="fa"><font face="Tahoma"> -از كجا خدمات پشتيباني بگيرم؟</font></span></H4> -<p dir="rtl"><font face="Tahoma">گروه پستي اصلي <A -href="mailto:pgsql-general@PostgreSQL.org">pgsql-general@PostgreSQL.org</A> -مي‌باشد. اين گروه براي بØØ« در مورد موضوعات مختل٠در زمينه <span lang="en-us"> -PostgreSQL</span> است. براي عضو شدن در اين گروه پستي يك نامه الكترونيكي به آدرس -گروه با Ù…Øتوياتی كه در ادامه آمده است ارسال كنيد. در قسمت <span lang="en-us"> -Subject</span> چيزي ننويسيد.</font></p> -<div dir="rtl"> - <PRE><font face="Tahoma"> subscribe - end -</font></PRE> -</div> -<P dir="rtl"><font face="Tahoma">آدرس گروه: <A -href="mailto:pgsql-general-request@PostgreSQL.org"> -pgsql-general-request@PostgreSQL.org</A></font></P> -<P dir="rtl"><font face="Tahoma">همچنين يك گروه پستي هم به صورت ارسال چكيده -پيامها وجود دارد. براي عضو شدن در اين گروه يك نامه با Ù…Øتويات زير به این آدرس -ارسال كنيد. <A -href="mailto:pgsql-general-digest-request@PostgreSQL.org"> -pgsql-general-digest-request@PostgreSQL.org</A> -</font></P> -<div dir="rtl"> - <PRE><font face="Tahoma"> subscribe - end -</font></PRE></div> -<p dir="rtl"><font face="Tahoma">در اين گروه هر موقع Øجم نامه‌ها به 30 كيلوبايت -رسيد براي تمام اعضاء ارسال مي‌شود.</font></p> -<p dir="rtl"><font face="Tahoma">گروه پستي بررسي اÙشكالات هم وجود دارد. براي عضو -شدن در اين گروه يك نامه با Ù…Øتويات زير به -<A -href="mailto:pgsql-bugs-request@PostgreSQL.org"> -pgsql-bugs-request@PostgreSQL.org</A> -ارسال كنيد.</font></p> -<div dir="rtl"> - <PRE><font face="Tahoma"> subscribe - end -</font></PRE></div> -<P dir="rtl"><font face="Tahoma" size="3">گروه پستي مخصوص توسعه دهندگان (برنامه‌نويسان) -نيز وجوددارد. براي عضويت در اين گروه يك نامه به آدرس زير با Ù…Øتويات مشخص شده -ارسال كنيد. </font><font face="Tahoma"> -<A -href="mailto:pgsql-hackers-request@PostgreSQL.org"><font size="3">pgsql-hackers-request@PostgreSQL.org</font></A><span lang="en-us"> -</span> </font></p> -<div dir="rtl"> - <PRE><font face="Tahoma"> subscribe - end -</font></PRE> -</div> -<p dir="rtl"><font face="Tahoma">گروههاي پستي ديگري نيز در زمينه -<span lang="en-us">PostgreSQL</span>‌ وجود دارد كه مي‌توانيد در سايت <A - href="http://www.postgresql.org/">http://www.postgresql.org</A> ببينيد.</font></p> -<p dir="rtl"><font face="Tahoma">همچنين يك كانال <span lang="en-us">IRC</span> -روي <span lang="en-us">Freenode</span> Ùˆ <span lang="en-us">EFNet</span> بنام <I> -PostgreSQL<span lang="en-us">#</span> </I> -وجود دارد. شما مي‌توانيد از Ùرمان يونيكسي </font> <CODE> -<font face="Tahoma">irc -c '#PostgreSQL' "$USER" irc.phoenix.net.</font></CODE><font face="Tahoma"> -يا </font> <CODE> -<font face="Tahoma">irc -c '#PostgreSQL' "$USER" irc.freenode.net<span lang="en-us"> -</span>استÙاده كنيد.</font></CODE></p> -<p dir="rtl"><font face="Tahoma">ليست شركتهايي كه از طريق آنها مي‌توانيد خدمات -پشتيباني تجاري در زمينه <span lang="en-us">PostgreSQL</span> درياÙت كنيد در اين -آدرس <A -href="http://techdocs.postgresql.org/companies.php"> -http://techdocs.postgresql.org/companies.php</A></font><code><font face="Tahoma"> -موجود است.</font></code></p> -<H4 dir="rtl"><font face="Tahoma"><A name=1.7>1.7</A>) </font><span lang="fa"><font face="Tahoma"> -آخرين نسخه اعلام شده چيست؟</font></span></H4> -<p dir="rtl"><font face="Tahoma">آخرين نسخه <span lang="en-us">PostgreSQL</span>‌<span lang="en-us"> -</span> كه وجود دارد 7.4.3 است.</font></p> -<p dir="rtl"><font face="Tahoma">هد٠ما آن است كه هر 6 ماه تا 8 ماه يك نسخه جديد -ارائه شود.</font></p> -<H4 dir="rtl"><font face="Tahoma"><A name=1.8>1.8</A>) </font><span lang="fa"><font face="Tahoma"> -Ú†Ù‡ مستندات Ùˆ راهنمائيهايي وجود دارند؟</font></span></H4> -<p dir="rtl"><font face="Tahoma">چندين كتابچه Ùˆ صÙØات راهنما Ùˆ مثالهاي كوچك -همراه با متن اصلي <span lang="en-us">PostgreSQL</span>‌ در شاخه -<span lang="en-us">doc </span>وجود دارد. براي ديدن صÙØات راهنما مي‌توانيد به -سايت <A -href="http://www.postgresql.org/docs">http://www.PostgreSQL.org/docs</A><span lang="en-us"> -</span> نيز مراجعه نماييد.</font></p> -<p dir="rtl"><font face="Tahoma">دو كتاب در زمينه <span lang="en-us">PostgreSQL</span>‌<span lang="en-us"> -</span> در آدرس‌هاي <A -href="http://www.postgresql.org/docs/awbook.html"> -http://www.PostgreSQL.org/docs/awbook.htm</A> -Ùˆ <A -href="http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook</A> -وجود دارد. ليستي از كتابهايي كه قابل خريد است در آدرس <A -href="http://techdocs.postgresql.org/techdocs/bookreviews.php"> -http://techdocs.PostgreSQL.org/techdocs/bookreviews.php</A><span lang="en-us"> -</span>وجود دارد. همچنين ليستي از مقالات Ùني در مورد <span lang="en-us"> -PostgreSQL</span> در آدرس <A -href="http://techdocs.postgresql.org/">http://techdocs.PostgreSQL.org</A><span lang="en-us"> -</span>وجود دارد.</font></p> -<p dir="rtl"><font face="Tahoma">برنامه <span lang="en-us">psql</span> يك دستور -<span lang="en-us">d\</span> دارد كه اطلاعاتي در مورد انواع داده‌هاي قابل تعري٠-Ùˆ عملگر‌ها Ùˆ توابع Ùˆ ... به ما نشان مي‌دهد. در سايت اصلي ما اطلاعات بيشتري را -مي‌توانيد پيدا كنيد.</font></p> -<H4 dir="rtl"><font face="Tahoma"><A name=1.9>1.9</A>) -<span lang="fa">چگونه مي‌توانم ازاشكالات شناخته شده Ùˆ يا امكاناتي كه در اين -پايگاه داده وجود ندارد مطلع شوم؟</span></font></H4> -<p dir="rtl"><font face="Tahoma"><span lang="en-us">PostgreSQL</span> يك زير -مجموعه پيشرÙته از <span lang="en-us">SQL-92</span> را پشتيباني مي‌كند. در ليست -<span lang="en-us"> </span><A -href="http://developer.postgresql.org/todo.php">TODO</A> اÙشكالات -شناخته شده يا امكاناتي كه وجود ندارد Ùˆ يا برنامه‌‌هاي آينده آمده است.</font></p> -<H4 dir="rtl"><font face="Tahoma"><A name=1.10>1.10</A>) </font><span lang="fa"><font face="Tahoma"> -چگونه مي‌توانم زبان </font></span> -<font face="Tahoma">SQL</font><span lang="fa"><font face="Tahoma"> را ياد بگيرم؟</font></span></H4> -<p dir="rtl"><font face="Tahoma">كتاب <span lang="en-us">PostgreSQL</span> در -آدرس <span lang="en-us">SQL</span> <A -href="http://www.postgresql.org/docs/awbook.html"> -http://www.PostgreSQL.org/docs/awbook.html</A><span lang="en-us"> -</span>‌را آموزش مي‌دهد. همچنين يك كتاب در آدرس <A -href="http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook </A> -وجود دارد. يك راهنماي خيلي خوب هم در سايت‌هاي <A -href="http://www.intermedia.net/support/sql/sqltut.shtm"> -http://www.intermedia.net/support/sql/sqltut.shtm</A> -Ùˆ <A -href="http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM"> -http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM</A> -Ùˆ <A href="http://sqlcourse.com/">http://sqlcourse.com</A> در مورد -<span lang="en-us">SQL</span> وجود دارد.</font></p> -<p dir="rtl"><font face="Tahoma">كتاب ديگري كه مي‌توان براي يادگيري -<span lang="en-us">SQL</span> از آن استÙاده كرد كتاب <span lang="en-us">"SQL</span> -را در 21 روز ياد بگيريد،‌ ويرايش دوم<span lang="en-us">" </span>در سايت <A -href="http://members.tripod.com/er4ebus/sql/index.htm"> -http://members.tripod.com/er4ebus/sql/index.htm</A><span lang="en-us"> -</span>مي‌باشد.</font></p> -<p dir="rtl"><font face="Tahoma">تعداد زيادي از كاربران كتاب <span lang="en-us"> -The Practical SQL</span> را ØªØ±Ø¬ÙŠØ Ù…ÙŠâ€ŒØ¯Ù‡Ù†Ø¯. كتاب ديگر <span lang="en-us">The -Complete Refrence SQL</span> انتشارات <span lang="en-us">McGraw-Hill</span> -مي‌باشد.</font></p> -<H4 dir="rtl"><font face="Tahoma"><A name=1.11>1.11</A>) </font><span lang="fa"><font face="Tahoma"> -آيا </font></span><font face="Tahoma">PostgreSQL</font><span lang="fa"><font face="Tahoma"> -مشكل </font></span><font face="Tahoma">Y2K</font><span lang="fa"><font face="Tahoma">‌ -دارد يا خير؟</font></span></H4> -<p dir="rtl"><font face="Tahoma">خير،‌<span lang="en-us">PostgreSQL</span>‌ با -تاريخ‌هاي قبل Ùˆ بعد از 2000 مشكلي ندارد.</font></p> -<H4 dir="rtl"><font face="Tahoma"><A name=1.12>1.12</A>) </font><span lang="fa"><font face="Tahoma"> -چگونه مي‌توانم به تيم برنامه نويس -</font></span><font face="Tahoma">PostgreSQL</font><span lang="fa"><font face="Tahoma"> -ملØÙ‚ شوم؟</font></span></H4> -<p dir="rtl"><font face="Tahoma">ابتدا،‌آخرين سورس را دونلود كرده Ùˆ مستندات -مربوط به برنامه‌نويسي <span lang="en-us">PostgreSQL</span> را در سايت مطالعه -كنيد. سپس به گروههاي پستي ‌ <I>pgsql-patches </I> -Ùˆ <i><span lang="en-us">pgsql-hackers -</span> </i>عضو شويد. در مرØله آخر وصله‌هاي با كيÙيت بالا را به -<span lang="en-us">pgsql-patches</span> ارسال كنيد.</font></p> -<p dir="rtl"><font face="Tahoma">تعداد زيادي از برنامه‌نويسان وجود دارند كه -امتياز انجام تغييرات در <span lang="en-us">cvs</span>‌ را دارند. هر كدام از آنها -تعداد زيادي وصله‌‌ با كيÙيت بالا به گروه ارسال كرده‌اند كه اعتماد گردانندگان -<span lang="en-us">PostgreSQL</span> را به دست آورده‌اند.</font></p> -<H4 dir="rtl"><font face="Tahoma"><A name=1.13>1.13</A>) -<span lang="fa">چگونه مي‌توانم يك اÙشكال را به گروه برنامه نويس اعلام كنم؟</span></font></H4> -<p dir="rtl"><font face="Tahoma">لطÙاً صÙØÙ‡ مربوط به اÙشكالات <span lang="en-us"> -PostgreSQL</span> را در سايت <A -href="http://www.postgresql.org/bugs/bugs.php"> -http://www.PostgreSQL.org/bugs/bugs.php</A><span lang="en-us"> -</span>مشاهده‌<span lang="en-us"> </span>كنيد. در اين سايت Ù†Øوه گزارش Ùˆ ارسال يك -اشكال ØªÙˆØ¶ÙŠØ Ø¯Ø§Ø¯Ù‡ شده است.</font></p> -<p dir="rtl"><font face="Tahoma"><span lang="en-us"> </span>همچنين براي ديدن -نسخه‌هاي جديدتر <span lang="en-us">PostgreSQL</span> Ùˆ يا وجود يك وصله جديد از -سايت <A -href="ftp://ftp.postgresql.org/pub">ftp://ftp.PostgreSQL.org/pub</A> بازديد -كنيد.</font></p> -<H4 dir="rtl"><font face="Tahoma"><A name=1.14>1.14</A>) </font><span lang="fa"><font face="Tahoma"> -وضعيت </font></span> -<font face="Tahoma">PostgreSQL</font><span lang="fa"><font face="Tahoma">‌ در -مقايسه با ساير </font></span><font face="Tahoma">DBMS<span lang="fa">ها به Ú†Ù‡ -صورت است؟</span></font></H4> -<p dir="rtl"><font face="Tahoma">راههاي مختلÙÙŠ براي اندازه‌گيري Ùˆ مقايسه -نرم‌اÙزارها وجود دارد كه عبارتند از امكانات، كارايي، قابليت اعتماد، پشتيباني Ùˆ -قيمت</font></p> -<DL> - <div dir="rtl"> - <dl> - <dt><b><font face="Tahoma">امكانات</font></b></dt> - <dd><font face="Tahoma"><span lang="en-us">PostgreSQL</span> بيشتر امكانات - موجود در سيستم‌هاي پايگاه داده تجاري بزرگ نظير <span lang="en-us"> - transactions, subselets, triggers, views, foreign key referential integrity - </span>Ùˆ <span lang="en-us">sophisticated locking</span>‌ را دارد. در - <span lang="en-us">PostgreSQL</span>‌‌ امكاناتي وجود دارد كه پايگاههاي داده - ديگر آن را ندارند نظير <span lang="en-us">user-defined types</span>‌و - <span lang="en-us">Inheritance</span>‌و <span lang="en-us">rules</span>‌و - <span lang="en-us">multi-version concurrency control</span></font></dd> - </dl> - </div> - <DD> - <p dir="rtl"> <div dir="rtl"> - <b><font face="Tahoma">كارايي</font></b><p><font face="Tahoma"><b> - </b>كارايي <span lang="en-us">PostgreSQL</span> در Øد بقيه سيستم‌هاي تجاري Ùˆ - متن باز است. در بعضي موارد سريعتر Ùˆ در بعضي موارد از آنها كندتر است. در - مقايسه با <span lang="en-us">MySQL</span> براي كاربران بيشتر Ùˆ درخواست‌هاي - پيچيده Ùˆ بار زياد خواندن/نوشتن سريعتر است. در درخواست‌هاي ساده<span lang="en-us"> - SELECT</span>‌ از <span lang="en-us">MySQL</span> كندتر است. البته - <span lang="en-us">MySQL</span> خيلي از امكانات <span lang="en-us"> - PostgreSQL</span> كه در بالا به آن اشاره شد را ندارد. هد٠اصلي ما امكانات Ùˆ - قابليت اعتماد بالاست در ضمن آنكه تلاش مي‌كنيم تا كارايي آن نيز بهبود يابد. - در آدرس <A - href="http://openacs.org/philosophy/why-not-mysql.html"> - http://openacs.org/philosophy/why-not-mysql.html</A> - يك مقايسه جالب بين <span lang="en-us">MySQL</span> Ùˆ <span lang="en-us"> - PostgreSQL</span> وجود دارد. از طر٠ديگر <span lang="en-us">MySQL</span>‌ يك - شركت است كه Ù…Øصول خود را به صورت متن باز ارائه مي‌كند ولي براي نرم‌اÙزار غير - متن باز خود اØتياج به ليسانس تجاري دارد بر خلا٠<span lang="en-us"> - PostgreSQL</span> كه يك گروه كاملاً متن باز هستند.</font></div> - <DD> - <p dir="rtl"> <div dir="rtl"> - <dl> - <dt><b><font face="Tahoma">قابليت اطمينان</font></b></dt> - <dd><font face="Tahoma">ما Ùكر مي‌كنيم كه يك سيستم پايگاه داده‌اي كه مطمئن - نباشد ارزشي ندارد. ما تمام تلاشمان را براي ارائه كدهاي پايداري كه به خوبي - تست شده باشند Ùˆ كمترين اÙشكالات را داشته باشند مي‌كنيم. هر نسخه جديدي كه - ارائه مي‌شود Øداقل يك ماه را در مرØله تست بتا مي‌گذراند. ما بر اين باور - هستيم كه قابليت اطمينان <span lang="en-us">PostgreSQL</span>‌ در مقايسه با - ساير سيستم‌هاي پايگاه داده قابل توجه است Ùˆ نسخه‌هايي كه تاكنون ارائه شده است - نشان مي‌دهد كه ما توانايي ارائه يك سيستم قوي Ùˆ Ù…Øكم Ùˆ مطمئن را كه آماده - بهره‌برداري است داريم.</font></dd> - </dl> - </div> - <DD> - <div dir="rtl"> - <dl> - <dt><b><font face="Tahoma">پشتيباني</font></b></dt> - <dd><font face="Tahoma">گروههاي پستي ما امكان ارتباط Ùˆ تماس به گروه بزرگي از - برنامه نويسان Ùˆ كاربران را مي‌دهد كه مي‌توانند در ØÙ„ مشكلات به ديگران كمك - كنند. دسترسي مستقيم به برنامه‌نويسان Ùˆ گروههاي كاربران Ùˆ راهنماها Ùˆ كداصلي - باعث مي‌شود كه پشتيباني <span lang="en-us">PostgreSQL</span> نسبت به ساير - پايگاههاي داده به Ù†ØÙˆ بهتري انجام شود. همچنين امكان ارائه خدمات پشتيباني به - صورت تجاري نيز وجود دارد. براي ديدن اطلاعات بيشتر به <A - href="#1.6">FAQ section 1.6</A> مراجعه كنيد.</font></dd> - </dl> - </div> - <DD> - <div dir="rtl"> - <dl> - <dt><b><font face="Tahoma">قيمت</font></b></dt> - <dd><font face="Tahoma">هم براي استÙاده تجاري Ùˆ هم غير تجاري هيچ هزينه‌اي - نبايد پرداخت شود. هيچ Ù…Øدوديتي براي انجام تغييرات در <span lang="en-us"> - PostgreSQL</span> توسط استÙاده كنندگان وجود ندارد به جز مواردي كه در ليسانس - <span lang="en-us">BSD</span> به آن اشاره شده است.</font></dd> - </dl> - </div> - </DL> -<H4 dir="rtl"><font face="Tahoma"><A name=1.15>1.15</A>) -<span lang="fa">من چگونه مي‌توانم از نظر مالي به </span>PostgreSQL<span lang="fa"> -كمك كنم؟</span></font></H4> -<p dir="rtl"><font face="Tahoma"><span lang="en-us">PostgreSQL </span> داراي يك -ساختار تشكيلاتي درجه اول است كه آن را مديون <span lang="en-us">Marc Fournier</span>‌ -است كه اين ساختار را ايجاد كرده است.</font></p> -<p dir="rtl"><font face="Tahoma">كيÙيت يك ساختار براي يك پروژه متن باز بسيار -اهميت دارد. يك ساختار خوب مي‌تواند مانع از Øوادثي شود كه در Øركت روبه‌جلوي پروژه -خللي وارد مي‌كنند.</font></p> -<p dir="rtl"><font face="Tahoma">البته اين ساختار تشكيلاتي ارزان نيست. هزينه‌هاي -ثابت ماهانه Ùˆ روزمره براي نگهداري Ùˆ ØÙظ اين ساختار مورد نياز است. اگر شما يا -شركت شما مايل است كه از نظر مالي به اين Øركت كمك كند لطÙاً به سايت <A -href="http://store.pgsql.com/shopping/">http://store.pgsql.com/shopping</A> -مراجعه كرده Ùˆ كمك خود را اهدا كنيد.</font></p> -<p dir="rtl"><font face="Tahoma">هر چند در صÙØÙ‡ اصلي عبارت <span lang="en-us"> -PostgreSQL,Inc</span>‌ ذكر شده است ولي مشاركت عمدتاً براي پشتيباني از پروژه -<span lang="en-us">PostgreSQL</span>‌ مي باشد Ùˆ نه براي يك شركت مشخص. اگر ØªØ±Ø¬ÙŠØ -مي‌دهيد مي‌توانيد يك Ú†Ùƒ به آدرس مشخص شده ارسال كنيد.</font></p> -<p dir="rtl"><font face="Tahoma">اگر يك استÙاده موÙÙ‚ از <span lang="en-us"> -PostgreSQL</span> سراغ داريد لطÙاً آن را به سايت <A -href="http://advocacy.postgresql.org/">http://advocacy.postgresql.org</A> گزارش -دهيد.</font></p> -<HR dir="rtl"> - -<h2 align="center" dir="rtl"><font face="Tahoma"><span lang="fa">سوالات مربوط به -استÙاده از پايگاه داده</span></font></h2> -<H4 dir="rtl"><font face="Tahoma"><A name=2.1>2.1</A>) -<span lang="fa">آيا هيچ درايور </span>ODBC</font><span lang="fa"><font face="Tahoma">‌ -براي </font></span><font face="Tahoma">PostgreSQL<span lang="fa"> -وجود دارد؟</span></font></H4> -<p dir="rtl"><font face="Tahoma"><span lang="fa">دو درايور </span>ODBC<span lang="fa"> -بنامهاي </span>psqlODBC<span lang="fa">‌ Ùˆ </span>OpenLink<span lang="fa"> براي -</span>PostgreSQL<span lang="fa">‌ وجود دارد.</span></font></p> -<p dir="rtl"><font face="Tahoma"><span lang="fa">براي گرÙتن </span>psqlODBC<span lang="fa"> -به سايت </span> <A -href="http://gborg.postgresql.org/project/psqlodbc/projdisplay.php"> -http://gborg.postgresql.org/project/psqlodbc/projdisplay.php</A><span lang="fa"> -مراجعه كنيد.</span></font></p> -<p dir="rtl"><font face="Tahoma"><span lang="en-us">OpenLlink</span> را از اين -سايت <A -href="http://www.openlinksw.com/">http://www.openlinksw.com</A> مي‌توانيد -بگيريد. اين درايور با نرم‌اÙزارهاي مختل٠<span lang="en-us">ODBC</span> كار -مي‌كند بنابراين شما قادر خواهيد بود با استÙاده از <span lang="en-us">OpenLink</span> -روي اكثر سكو‌هايي كه نرم‌اÙزار<span lang="en-us">ODBC</span>‌دارند بدون مشكل به -<span lang="en-us">PostgreSQL</span> نيز متصل شويد.</font></p> -<p dir="rtl"><font face="Tahoma">اين Ù…Øصول به كساني كه اØتياج به خدمات پشتيباني -تجاري دارند Ùروخته مي‌شود. ولي نسخه آزاد اين نرم‌اÙزار هميشه در درسترس مي‌باشد. -براي كسب اطلاعات بيشتر سوالات خود را به آدرس <A -href="mailto:postgres95@openlink.co.uk">postgres95@openlink.co.uk</A><span lang="en-us"> -</span>‌ارسال نماييد.</font></p> -<H4 dir="rtl"><font face="Tahoma"><A name=2.2>2.2</A>) -<span lang="fa">Ú†Ù‡ ابزارهايي براي استÙاده از </span>PostgreSQL<span lang="fa">‌ -با صÙØات وب وجود دارد؟</span></font></H4> -<p dir="rtl"><font face="Tahoma">در سايت <A -href="http://www.webreview.com/">http://www.webreview.com</A> براي استÙاده از -<span lang="en-us">PostgreSQL</span>‌ در صÙØات وب راهنماييهاي خوبي وجود دارد.</font></p> -<P dir="rtl"><font face="Tahoma">براي تركيب Ùˆ استÙاده در صÙØات وب زبان -<span lang="en-us">PHP</span>‌ يك واسط بسيار مناسب است. اطلاعات بيشتر راجع به -<span lang="en-us">PHP</span>‌در سايت <A -href="http://www.php.net/">http://www.php.net</A><span lang="en-us"> </span>وجود -دارد.</font></P> -<P dir="rtl"><font face="Tahoma">مثالهايي نيز با استÙاده از <span lang="en-us"> -Perl</span>‌ Ùˆ<span lang="en-us"> CGI.pm</span> Ùˆ <span lang="en-us">mod_perl</span> -وجود دارد.</font></P> -<H4 dir="rtl"><font face="Tahoma"><A name=2.3>2.3</A>) -<span lang="fa">آيا </span>PostgreSQL<span lang="fa">‌ يك واسط كاربري گراÙيكي -دارد؟</span></font></H4> -<p dir="rtl"><font face="Tahoma">چند نرم اÙزار گراÙيكي براي <span lang="en-us"> -PostgreSQL</span>‌ وجود دارد كه شامل <span lang="en-us">pgAccess</span> درسايت <A -href="http://www.pgaccess.org/">http://www.pgaccess.org</A><span lang="en-us"> -</span>Ùˆ <span lang="en-us">pgAdmin III</span> در سايت <A -href="http://www.pgadmin.org/">http://www.pgadmin.org</A><span lang="en-us"> -</span>Ùˆ <span lang="en-us">RHDB Admin</span> در سايت <A -href="http://sources.redhat.com/rhdb/">http://sources.redhat.com/rhdb</A><span lang="en-us"> -</span>Ùˆ <span lang="en-us">Rekall</span> در سايت <A href="http://www.thekompany.com/products/rekall/"> -http://www.thekompany.com/products/rekall<span lang="en-us"> </span></A> - مي‌باشد. همچنين يك <span lang="en-us">phpPgAdmin</span> هم در سايت <A href="http://phppgadmin.sourceforge.net/"> -http://phppgadmin.sourceforge.net</A><span lang="en-us"> </span>وجود دارد كه يك -واسط وبي براي مديريت <span lang="en-us">PostgreSQL</span> مي‌باشد.</font></p> -<P dir="rtl"><font face="Tahoma">براي ديدن اطلاعات بيشتر راجع به نرم‌اÙزارهاي -گراÙيكي براي <span lang="en-us">PostgreSQL</span> به آدرس <A -href="http://techdocs.postgresql.org/guides/GUITools"> -http://techdocs.postgresql.org/guides/GUITools</A><span lang="en-us"> -</span>مراجعه كنيد.</font></P> -<H4 dir="rtl"><font face="Tahoma"><A name=2.4>2.4</A>) -<span lang="fa">با Ú†Ù‡ زبانهاي برنامه‌نويسي مي‌توان با </span>PostgreSQL<span lang="fa">‌ -ارتباط برقرار كرد؟</span></font></H4> -<p dir="rtl"><font face="Tahoma"><span lang="fa">بيشتر زبانهاي برنامه‌نويسي -مي‌توانند با </span>PostgreSQL<span lang="fa">‌ ارتباط برقرار كنند. به همراه -سورس </span>PostgreSQL<span lang="fa"> تعدادي از واسطهاي مورد نياز براي ارتباط -با پايگاه داده از طريق زبانهاي مختل٠آمده است كه در زير ليست آنها را مشاهده -مي‌كنيد.</span></font></p> -<ul dir="rtl"> - <li dir="ltr"> - <p dir="ltr" align="left"><font face="Tahoma">C (libpq) </font></li> - <li dir="ltr"> - <p dir="ltr" align="left"><font face="Tahoma">Embedded C (ecpg) </font> - </li> - <li dir="ltr"> - <p dir="ltr" align="left"><font face="Tahoma">Java (jdbc) </font></li> - <li dir="ltr"> - <p dir="ltr" align="left"><font face="Tahoma">Python (PyGreSQL) </font> - </li> - <li dir="ltr"> - <p dir="ltr" align="left"><font face="Tahoma">TCL (libpgtcl) </font></li> -</ul> -<p dir="rtl" align="right"><span lang="fa"><font face="Tahoma">واسطهاي ديگر در -سايت </font></span><font face="Tahoma"> <A -href="http://gborg.postgresql.org/">http://gborg.postgresql.org</A> -<span lang="fa">در قسمت </span><i>Drivers/Interfaces</i><span lang="fa"> وجود -دارد.</span></font></p> -<HR dir="rtl"> - -<h2 align="center" dir="rtl"><span lang="fa"><font face="Tahoma">سوالات مديريتي</font></span></h2> -<H4 dir="rtl"><font face="Tahoma"><A name=3.1>3.1</A>) -<span lang="fa">چگونه مي‌توانم </span>PostgreSQL<span lang="fa">‌ را در شاخه‌اي -غير از </span>/usr/local/pgsql/<span lang="fa"> نصب كنم؟</span></font></H4> -<p dir="rtl"><font face="Tahoma">موقع اجراي دستور <i><span lang="en-us"> -configure</span> </i>از گزينه <span lang="en-us">prefix--</span> استÙاده كنيد.</font></p> -<H4 dir="rtl"><font face="Tahoma"><A name=3.2>3.2</A>) -<span lang="fa">چرا موقعي كه من برنامه </span>postmaster<span lang="fa">‌ را -اجرا مي كنم پيام </span>Bad system call<span lang="fa">‌ Ùˆ يا </span>core dump -<span lang="fa">‌مي‌گيرم؟</span></font></H4> -<p dir="rtl"><font face="Tahoma">به دلايل مختل٠ممكن است اين اتÙاق بيÙتد. اما در -قدم اول شما مطمئن شويد كه كه امكانات اضاÙÙ‡ <span lang="en-us">System V</span>‌ -در كرنل شما نصب شده باشد. <span lang="en-us">PostgreSQL</span> براي اجرا شدن -نياز به استÙاده از امكانات ØاÙظه مشترك Ùˆ سماÙورها دارد.</font></p> -<H4 dir="rtl"><font face="Tahoma"><A name=3.3>3.3</A>) -<span lang="fa">چرا موقعي كه من سعي مي‌كنم برنامه </span>postmaster<span lang="fa">‌ -را اجرا كنم خطاي</span> <I>IpcMemoryCreate</I> <span lang="fa">مي‌گيرم؟</span></font></H4> -<p dir="rtl"><font face="Tahoma">اØتمالاً‌ قسمت ايجاد ØاÙظه مشترك در كرنل به -درستي تنظيم نشده است Ùˆ يا اينكه بايد Ùضاي ØاÙظه اشتراكي در كرنل را زياد كرد. -ميزان دقيق ØاÙظه مشترك مورد نياز بسته به معماري Ùˆ Ù†Øوه استÙاده از باÙرها توسط -برنامه <span lang="en-us"><i>postmaster </i></span>دارد. براي بيشتر سيستم‌ها كه -با تنظيمات پيش‌Ùرض كار مي‌كنند مقدار اين ØاÙظه Øدود <span lang="en-us">1</span> -مگابايت است. براي ديدن اطلاعات بيشتر راجع به ØاÙظه مشترك Ùˆ سماÙور به <A -href="http://www.postgresql.org/docs/view.php?version=current&idoc=1&file=kernel-resources.html"> -PostgreSQL Administrator's Guide</A><span lang="en-us"> </span>مراجعه كنيد.</font></p> -<H4 dir="rtl"><font face="Tahoma"><A name=3.4>3.4</A>) <span lang="fa">چرا موقعي -كه من سعي مي‌كنم برنامه </span>postmaster<span lang="fa">‌ را اجرا كنم خطاي</span> <I><span lang="fa"> - </span>IpcSemaphoreCreate<span lang="fa"> -</span></I><span lang="fa">مي‌گيرم؟</span></font></H4> -<p dir="rtl"><font face="Tahoma">اگر پيغام خطا<span lang="en-us"> </span><i> -(‌pcSemaphoreCreate: semget failed (No space left on devi<span lang="en-us">ce -</span> </i>باشد به اين معني است كه تعداد سماÙورهاي تنظيم شده در كرنل كاÙÙŠ نيست. <span lang="en-us"> -PostgreSQL</span>‌ براي هر Ùرايندي كه در -<span lang="en-us">backend</span> اجرا مي‌شود به يك سماÙور نياز دارد. يك راه ØÙ„ -موقت براي اين مسئله آن است كه <i><span lang="en-us">postmaster</span> </i>را با -اعمال Ù…Øدوديت روي تعداد Ùرايندهايي كه مي‌تواند ايجاد كند اجرا كنيم. براي اينكار -از گزينه <span lang="en-us">N-</span> Ùˆ يك عدد كمتر از 32 استÙاده كنيد. راه ØÙ„ -دائمي اين مشكل آن است كه پارامترهاي <span lang="en-us">SEMMNS, SEMMNI</span> -كرنل را اÙزايش دهيم.</font></p> -<P dir="rtl"><font face="Tahoma">در زمان دسترسي خيلي زياد به پايگاه داده، ‌ -سماÙورهاي نامعتبر مي‌توانند باعث <span lang="en-us">crash</span>‌ كردن سيستم -شوند.</font></P> -<P dir="rtl"><font face="Tahoma">اگر پيغام خطا چيز ديگري باشد اØتمالاً به دليل -آن است كه كرنل از سماÙورها پشتيباني نمي‌كند. براي ديدن اطلاعات بيشتر راهنماي -مديريتي <span lang="en-us">PostgreSQL</span> را مطالعه كنيد.</font></P> -<H4 dir="rtl"><font face="Tahoma"><A name=3.5>3.5</A>) -<span lang="fa">چگونه مي‌توانم اتصالات ساير ماشينها را كنترل كنم؟</span></font></H4> -<p dir="rtl"><font face="Tahoma">به صورت پيش Ùرض Ùقط از ماشيني كه -<span lang="en-us">PostgreSQL </span>روي آن در Øال اجراست مي‌توان با استÙاده از -سوكت‌هاي يونيكسي به آن متصل شد. ساير ماشين‌ها قادر نيستند به <span lang="en-us"> -PostgreSQL</span> متصل شوند مگر آنكه گزينه <span lang="en-us">tcp_sockets</span> -در Ùايل <span lang="en-us">postgresql.conf</span> Ùعال شده Ùˆ همچنين با Ø§ØµÙ„Ø§Ø -Ùايل <span lang="en-us">PGDATA/ph_hba.conf</span> هويت‌شناسي مبتني بر ميزبان نيز -Ùعال شود. با اين كار مي‌توان اتصالات <span lang="en-us">TCP/IP</span> به -<span lang="en-us">PostgreSQL</span>‌ ايجاد كرد.</font></p> -<H4 dir="rtl"><font face="Tahoma"><A name=3.6>3.6</A>) -<span lang="fa">براي كارايي بالاتر Ùˆ بهتر پايگاه داده من Ú†Ù‡ تنظيماتي را بايد -انجام دهم؟</span></font></H4> -<p dir="rtl"><font face="Tahoma">به طور Øتم استÙاده از انديس‌ها باعث بالا رÙتن -سرعت پاسخ‌گويي به درخواست‌ها خواهد شد. دستور <span lang="en-us">EXPLAIN ANALYZE</span> -به شما امكان ديدن Ù†Øوه پردازش يك دستور توسط <span lang="en-us">PostgreSQL</span> -را مي‌دهد.</font></p> -<p dir="rtl"><font face="Tahoma">اگر شما تعداد زيادي<span lang="en-us"> INSERT</span>‌ -داريد سعي كنيد آنها را با قرار دادن در يك Ùايل با دستور <span lang="en-us">COPY</span>‌ -اجرا كنيد. اين دستور به مراتب از <span lang="en-us">INSERT</span> سريعتر است. -Øتي‌الامكان سعي كنيد از تراكنشها استÙاده نكنيد. تراكنشها مجموعه دستوراتي هستند -كه بيند <span lang="en-us">BEGIN</span> Ùˆ â€<span lang="en-us">COMMIT</span> -مي‌آيند. اگر يك دستور به صورت عادي اجرا شود <span lang="en-us">PostgreSQL</span> -خود آن دستور را به صورت يك تراكنش مستقل نگاه كرده Ùˆ اجرا مي‌كند. موقعی كه -تغييرات زيادي در پايگاه داده انجام مي‌شود انديسهاي قبلي را ØØ°Ù Ùˆ مجدداً‌ ايجاد -كنيد.</font></p> -<p dir="rtl"><font face="Tahoma">استÙاده از گزينه <span lang="en-us">o -F-</span> -در Ùرمان <i><span lang="en-us">postmaster</span></i> باعث غير Ùعال كردن -<span lang="en-us">()fsync</span> مي‌شود. اين دستور بعد از هر تراكنش اطلاعات را -روي هاردديسك منتقل مي‌كند.</font></p> -<p dir="rtl"><font face="Tahoma">براي اÙزايش تعداد باÙرهاي ØاÙظه اشتراكي از -گزينه <span lang="en-us">B-</span> به همراه Ùرمان <i><span lang="en-us"> -postmaster</span></i> استÙاده كنيد. توجه كنيد كه اگر اين عدد خيلي بزرگ باشد ممكن -است <i><span lang="en-us">postmaster</span></i> اصلاً‌ اجرا نشود. هر باÙر 8 كيلو -بايت ØاÙظه نياز دارد Ùˆ تعداد باÙرها به طور پيش Ùرض 64 است.</font></p> -<p dir="rtl"><font face="Tahoma">همچنين مي‌توان با گزينه <span lang="en-us">S-</span> -ميزان ØاÙظه‌اي كه براي مرتب‌سازي‌هاي موقت توسط <span lang="en-us">PostgreSQL</span> -استÙاده مي‌شود را اÙزايش داد. مقدار پيش Ùرض 512 كيلو بايت است.</font></p> -<p dir="rtl"><font face="Tahoma">استÙاده از دستور <span lang="en-us">CLUSTER</span> -نيز براي بالا بردن كارايي موثر ا ست. دستور راهنماي <span lang="en-us">CLUSTER</span> -اطلاعات بيشتري در اين زمينه به شما مي‌دهد.</font></p> -<H4 dir="rtl"><font face="Tahoma"><A name=3.7>3.7</A>) -<span lang="fa">Ú†Ù‡ امكاناتي براي پيدا كردن اشكال‌ وجود دارد؟</span></font></H4> -<p dir="rtl"><font face="Tahoma"><span lang="en-us">PostgerSQL</span>‌ امكانات -مختلÙÙŠ براي گزارش دادن وضعيت خود دارد كه براي اشكال زدايي مي‌توان از آنها -استÙاده كرد.</font></p> -<P dir="rtl"><font face="Tahoma">با استÙاده از گزينه <span lang="en-us"> -enable-assert--</span> -تعداد زيادي <span lang="en-us">()assert</span> براي مونيتور كردن Ùˆ توق٠برنامه -در صورت بروز خطاهاي ناخواسته Ùعال مي‌شود.</font></P> -<P dir="rtl"><font face="Tahoma">هم <i><span lang="en-us">Postmaster</span></i> -Ùˆ هم <i><span lang="en-us">postgres</span></i> گزينه‌هاي زيادي براي اشكال زدايي -دارند. موقعي كه <i><span lang="en-us">postmaster</span></i> را اجرا مي‌كنيد -خروجي استاندارد Ùˆ خطا را سمت Ùايل <span lang="en-us">log</span> ارسال كنيد.</font></P> -<div dir="ltr"> - <PRE><font face="Tahoma"> cd /usr/local/pgsql - ./bin/postmaster >server.log 2>&1 & -</font></PRE> -</div> -<P dir="rtl"><font face="Tahoma">اين كار يك Ùايل<span lang="en-us"> -log</span> -در بالاترين شاخه <span lang="en-us">PostgreSQL</span>‌ ايجاد مي‌كند. اين Ùايل -Øاوي اطلاعات Ù…Ùيدي در مورد مسائل Ùˆ خطاهايي است كه براي سرور اتÙاق اÙتاده است. -براي ديدن جزئيات بيشتر مي‌توان از <span lang="en-us">d-</span> به همراه -Ùرمان <i><span lang="en-us">postmaster</span>‌</i> استÙاده كرد. گزينه -<span lang="en-us">d-</span> همچنين يك عدد مي‌گيرد كه نشان دهنده Ø³Ø·Ø Ø¬Ø²Ø¦ÙŠØ§ØªÙŠ است -كه در <span lang="en-us">Log</span>‌Ùايل نوشته مي‌شود. با بالابردن اين عدد Øجم -اطلاعات توليد شده در <span lang="en-us">Log</span>Ùايل نيز اÙزايش مي‌يابد.</font></P> -<P dir="rtl"><font face="Tahoma">اگر <i><span lang="en-us">postmaster</span></i> -در Øال اجرا نباشد، مي‌توانيم <span lang="en-us">postgres</span> را به طور مستقيم -از خط Ùرمان اجرا كرده Ùˆ دستورات <span lang="en-us">SQL</span> را به آن -بدهيم. اين كار Ùقط براي اشكال‌يابي توصيه مي‌شود. توجه كنيد كه در اين Øالت يك -دستور با كاراكتر <span lang="en-us">newline</span> خاتمه پيدا مي‌كند Ùˆ نه با -<span lang="en-us">;. </span>اگر <span lang="en-us">postmaster</span> را با -امكانات اشكال‌يابي كامپيل كرده باشيد مي‌توانيد با استÙاده از يك برنامه اشكال‌ياب -اجراي برنامه را مونيتور كنيد. </font></P> -<P dir="rtl"><font face="Tahoma">اگر <i><span lang="en-us">postmaster</span></i> -در Øال اجرا باشد با دستور <span lang="en-us">psql</span> مي‌توان به -<span lang="en-us">postgres</span> متصل شد. با پيدا كردن <span lang="en-us">PID</span> -Ùرايند <span lang="en-us">postgres</span> كه <span lang="en-us">psql</span> به -آن متصل شده است مي‌توان آن را مونيتور كرد. براي اينكار بايد يك برنامه اشكال‌ياب -را به آن <span lang="en-us">pid</span> متصل كرد. اگر بخواهيم بالا آمدن -<span lang="en-us">postgres</span> را مونيتور كنيم كاÙÙŠ است<span lang="en-us"> -"PGOPTIONS="-W</span> <span lang="en-us">n</span> Ùˆ <span lang="en-us">psql</span> -را اجرا كنيم. اين كار باعث مي‌شود كه <span lang="en-us">postgres</span> با -<span lang="en-us">n</span> ثانيه تاخير اجرا شود Ùˆ در اين Ùاصله شما مي‌توانيد -برنامه اشكال‌ياب را به آن متصل كرده Ùˆ با قرار دادن يك نقطه توق٠روند اجراي -آن را مونيتور كنيد.</font></P> -<P dir="rtl"><font face="Tahoma"><i><span lang="en-us">postgres</span></i> -گزينه‌هاي <span lang="en-us">s-</span>‌ Ùˆ <span lang="en-us">A-</span> Ùˆ -<span lang="en-us">t-</span>‌ دارد كه براي پيدا كردن اشكالات بسيار مناسب هستند.</font></P> -<p dir="rtl"><font face="Tahoma">شما مي‌توانيد <span lang="en-us">postgreSQL</span> -را با امكانات <span lang="en-us">profiling</span> كامپيل كنيد. اين كار باعث -مي‌شود كه زمان اجراي دقيق هر تابع در برنامه مشخص شود. خروجي‌هاي توليد شده در اين -Øالت در Ùايل <span lang="en-us">DLINUX_PROFILE.</span> ريخته مي‌شود.</font></p> -<H4 dir="rtl"><font face="Tahoma"><A name=3.8>3.8</A>) -<span lang="fa">چرا موقعي كه من مي‌خواهم به پايگاه داده وصل شوم پيام</span> <I> -"Sorry, too many clients" -<span lang="fa">‌</span></I><span lang="fa">مي‌گيرم؟</span></font></H4> -<p dir="rtl"><font face="Tahoma">شما بايد Øداكثر تعداد Ùرايندهاي همزمان <i> -<span lang="en-us">postmaster</span></i> را اÙزايش دهيد. مقدار پيش Ùرض 32 است. -براي اÙزايش آن مي‌توان از گزينه <span lang="en-us">N-</span> استÙاده كرد Ùˆ يا -Ùايل <i><span lang="en-us">postgresql.conf</span></i> را Ø§ØµÙ„Ø§Ø Ù†Ù…ÙˆØ¯</font></p> -<p dir="rtl"><font face="Tahoma">توجه كنيد كه اگر <span lang="en-us">N-</span> -مقداري بيشتر از 32 داشته باشد بايد مقدار <span lang="en-us">B-</span> را نيز -اÙزايش دهيم. اين مقدار بايد Øداقل دو برابر مقدار <span lang="en-us">N-</span>‌ -باشد. براي اعداد خيلي بالا بايد بعضي از پارامترهاي كرنل را نيز Ø§ØµÙ„Ø§Ø ÙƒØ±Ø¯. -پارامترهايي نظير Øداكثر اندازه ØاÙظه اشتراكي <span lang="en-us">SHMMAX</span> ØŒ -Øداكثر تعداد سماÙورها<span lang="en-us"> SEMMNI</span>‌ Ùˆ <span lang="en-us"> -SEMMNS </span>ØŒ Øداكثر تعداد Ùرايندها <span lang="en-us">NPROC</span>ØŒ Øداكثر -Ùرايندهاي يك كاربر <span lang="en-us">MAXUPRC</span> Ùˆ Øداكثر Ùايلهاي باز -<span lang="en-us">NFILE</span> Ùˆ <span lang="en-us">NINODE. </span>يكي از -دلايلي كه تعداد اتصالات همزمان <span lang="en-us">postgreSQL</span> Ù…Øدود است آن -است كه نيازهاي <span lang="en-us">PostgreSQL</span> بيش از منابع موجود سيستم -نباشد.</font></p> -<H4 dir="rtl"><font face="Tahoma"><A name=3.9>3.9</A>) <span lang="fa"> -در شاخه </span> <I>pgsql_tmp</I> <span lang="fa"> Ú†Ù‡ چيزي قرار دارد؟</span></font></H4> -<p dir="rtl"><font face="Tahoma">دراين شاخه Ùايلهاي موقتي قرار دارد كه با اجراي -درخواستها به وجود آمده است. به عنوان مثال اگر براي اجراي دستور -<span lang="en-us">order by</span> نياز به انجام مرتب سازي باشد Ùˆ در صورتي كه -ØاÙظه مشخص شده با گزينه <span lang="en-us">S-</span> براي اينكار كاÙÙŠ نباشد -سيستم يك Ùايل موقت در اين شاخه ايجاد مي‌كند تا عمل مرتب سازي را انجام دهد.</font></p> -<P dir="rtl"><font face="Tahoma">Ùايلهاي موقت معمولاً به صورت اتوماتيك پاك -مي‌شود اما اگر <span lang="en-us">postgreSQL</span> در Øين مرتب سازي -<span lang="en-us">crash</span>‌ كند آن Ùايلها باقي مي‌مانند. با -<span lang="en-us">stop</span> Ùˆ <span lang="en-us">start</span> كردن برنامه <i> -<span lang="en-us">postmaster</span></i> اين Ùايلها پاك مي‌شوند.</font></P> -<H4 dir="rtl"><font face="Tahoma"><A name=3.10>3.10</A>) -<span lang="fa">چرا براي به روز كردن نسخه پايگاه داده من بايد كل داده ها را -</span>dump<span lang="fa">‌ Ùˆ مجدداً </span>restore<span lang="fa"> كنم؟</span></font></H4> -<p dir="rtl"><font face="Tahoma">تيم برنامه نويس <span lang="en-us">postgreSQL</span> -در نسخه‌هاي ارائه شده كه Ùقط <span lang="en-us">minor</span> آنها متÙاوت است Ùقط -تغييرات كوچكي اعمال مي‌كنند؛ بنابراين براي به روز كردن از نسخه -<span lang="en-us">7.2</span>‌به 7.2.1<span lang="en-us"> </span>نيازي به -<span lang="en-us">dump</span> Ùˆ <span lang="en-us">restore</span> نيست. اما در -نسخه‌هايي كه <span lang="en-us">major</span> آنها تغيير مي‌كند غالباً ساختار -داخلي جداول Ùˆ Ùايلهاي داده تغيير مي‌كند. اين تغييرات معمولاً‌ پيچيده هستند. براي -انتقال داده‌هاي موجود در پايگاه داده در اين Øالت بايد ‌از <span lang="en-us"> -dump</span> Ùˆ <span lang="en-us">restore</span> استÙاده كرد.</font></p> -<P dir="rtl"><font face="Tahoma">در نسخه‌هايي كه ساختار روي ديسك تغييري نمي‌كند -مي توان از برنامه <span lang="en-us">pg_upgrade</span> براي به روز كردن پايگاه -داده استÙاده كرد بدون اينكه نيازي به استÙاده از <span lang="en-us">dump</span> Ùˆ -<span lang="en-us">restore </span> باشد. در يادداشتي كه به همراه هر توزيع مي‌آيد -ذكر شده است كه آيا برنامه <span lang="en-us">pg_upgrade</span> براي اين توزيع -وجود دارد يا خير.</font></P> -<H4 dir="rtl"><font face="Tahoma"><A name=3.11>3.11</A>) -<span lang="fa">از Ú†Ù‡ سخت اÙزاري بايد استÙاده كنم؟</span><BR> -</font></H4> -<P dir="rtl"><font face="Tahoma">چون اكثر سخت‌اÙزارهاي <span lang="en-us">PC -</span> سازگار هستند مردم Ùكر مي‌كنند كه كيÙيت آنها نيز يكسان است. در Øاليكه -اينطور نيست. استÙاده از هاردهاي <span lang="en-us">SCSI</span> Ùˆ ØاÙظه‌هاي <span lang="en-us"> -ECC</span> Ùˆ مادربردهاي با كيÙيت بالا نسبت به سخت اÙزارهاي ارزانتر نتايج بهتري -از نظر كارايي Ùˆ پايداري سيستم بهمراه خواهد داشت.<span lang="en-us"> -PostgreSQL</span> روي بيشتر سخت اÙزارها اجرا مي‌شود اما اگر كارايي Ùˆ اطمينان -Ùاكتورهاي مهمي هستند بايد سخت اÙزار مناسب استÙاده شود. در گروههاي پستي در مورد -سخت اÙزار مناسب Ùˆ انتخاب آن بØØ« شده است. </font></P> -<HR dir="rtl"> - -<H2 align=center dir="rtl"><span lang="fa"><font face="Tahoma">سوالات عملياتي</font></span></H2> -<H4 dir="rtl"><font face="Tahoma"><A name=4.1>4.1</A>) تÙاوت بين -<span lang="en-us">binary cursors</span> Ùˆ <span lang="en-us">Normal cursors</span> -چيست؟</font></H4> -<p dir="rtl"><font face="Tahoma"><span lang="fa">راهنماي دستور </span>DECLARE<span lang="fa">‌ -را مطالعه كنيد.</span></font></p> -<H4 dir="rtl"><font face="Tahoma"><A name=4.2>4.2</A>) -<span lang="fa">من چگونه مي‌توانم Ùقط روي چند ردي٠اول يا يك ردي٠تصادÙÙŠ درخواست </span> -SELECT<span lang="fa">‌ بزنم؟</span></font></H4> -<p dir="rtl"><font face="Tahoma"><span lang="fa">راهنماي دستور </span>FETCH -<span lang="fa"> يا </span>SELECT...LIMIT<span lang="fa"> را ببينيد.</span></font></p> -<P dir="rtl"><font face="Tahoma"><span lang="fa">در واقع كل درخواست بايد بررسي Ùˆ -ارزيابي شود Øتي اگر شما Ùقط چند ردي٠اول را بخواهيد. براي مثال درخواست </span> -ORDER BY<span lang="fa"> را در نظر بگيريد. اگر انديس يا نمايه‌اي براي </span> -ORDER BY<span lang="fa"> وجود داشته باشد،‌</span>postgreSQL<span lang="fa">‌ -ممكن است بتواند Ùقط چند سطر اول درخواستي را ارزيابي كند Ùˆ يا اينكه كل درخواست -پردازش شود تا تعداد رديÙ‌هاي درخواستي توليد شود.</span></font></P> -<P dir="rtl"><span lang="fa"><font face="Tahoma">براي انتخاب يك سطر تصادÙÙŠ به -روش زير عمل مي‌كنيم:</font></span><div dir="ltr"> - <PRE><font face="Tahoma"> SELECT col - FROM tab - ORDER BY random() - LIMIT 1; -</font></PRE> -</div> -<H4 dir="rtl"><font face="Tahoma"><A name=4.3>4.3</A>) -<span lang="fa">من چگونه مي‌توانم ليستي از جداول يا ساير چيزهايي كه در </span> -psql<span lang="fa">‌ وجود دارد را ببينم؟</span></font></H4> -<P dir="rtl"><font face="Tahoma"><span lang="fa">براي ديدن ليست جداول دستور -</span>dt\<span lang="fa"> را در برنامه </span><i>psql</i><span lang="fa"><i>‌</i> -استÙاده كنيد. براي ديدن ليست كامل Ùرمانها </span>?\<span lang="fa"> را اجرا -كنيد. راه ديگر خواندن متن برنامه </span>psql<span lang="fa">‌ است كه در شاخه -</span> <I>pgsql/src/bin/psql/describe.c <span lang="fa">‌</span></I><span lang="fa">قرار -دارد.<I> </I>اين Ùايل Øاوي Ùرامين </span>SQL<span lang="fa">يي است كه خروجي را -براي دستوراتي كه با </span>\<span lang="fa">‌در </span>psql<span lang="fa"> -شروع مي‌شوند توليد مي‌كنند. راه ديگر اجراي </span>psql<span lang="fa"> با گزينه -</span>E-<span lang="fa">‌است. اينكار باعث مي‌شود كه </span>psql<span lang="fa"> -قبل از اجرا هر دستور </span>SQL<span lang="fa">‌متناظر آن را نشان دهد. </span> -PostgreSQL<span lang="fa">‌همچنين يك برنامه </span>SQLi<span lang="fa"> دارد كه -مي‌توان با استÙاده از آن اطلاعات داخلي پايگاه داده را استخراج كرد.</span></font></P> -<H4 dir="rtl"><font face="Tahoma"><A name=4.4>4.4</A>) -<span lang="fa">چگونه يك ستون جدول را Øذ٠مي‌كنيد؟ چگونه نوع داده آن را عوض -كنيم؟</span></font></H4> -<P dir="rtl"><font face="Tahoma"><span lang="fa">Øذ٠يك ستون در توزيع </span>7.3 -<span lang="fa">با استÙاده از دستور </span>ALTER TABLE DROP COLUMN<span lang="fa"> -اضاÙÙ‡ شده است. در نسخه‌هاي قبلي به روش زير عمل كنيد:</span></font></P> -<div dir="ltr"> - <PRE><font face="Tahoma"> BEGIN; - LOCK TABLE old_table; - SELECT ... -- <span lang="fa">تمام ستونها غير از ستوني كه مي‌خواهيد آن را Øذ٠كنيد را در اينجا بياوريد</span> - INTO TABLE new_table - FROM old_table; - DROP TABLE old_table; - ALTER TABLE new_table RENAME TO old_table; - COMMIT; -</font></PRE> -</div> -<P dir="rtl"><span lang="fa"><font face="Tahoma">براي عوض كردن نوع داده يك ستون -به روش زير عمل كنيد:</font></span></P> -<div dir="ltr"> - <PRE><font face="Tahoma"> BEGIN; - ALTER TABLE tab ADD COLUMN new_col <I>new_data_type</I>; - UPDATE tab SET new_col = CAST(old_col AS <I>new_data_type</I>); - ALTER TABLE tab DROP COLUMN old_col; - COMMIT; -</font></PRE> -</div> -<H4 dir="rtl"><font face="Tahoma"><A name=4.5>4.5</A>) -<span lang="fa">Øداكثر اندازه يك رديÙ،‌ جدول Ùˆ خود پايگاه داده چقدر است؟</span></font></H4> -<p dir="rtl"><span lang="fa"><font face="Tahoma">Ù…Øدوديتها عبارتند از:</font></span></p> -<div dir="rtl"> - <PRE><font face="Tahoma"> <span lang="fa">Øداكثر اندازه پايگاه داده </span> <span lang="fa">نامØدود (تا 32 ترابايت وجود دارد)</span> - <span lang="fa">Øداكثر اندازه يك جدول</span> <span lang="fa">32 ترابايت</span> - <span lang="fa">Øداكثر ا ندازه يك رديÙ</span> <span lang="fa">1.6 ترابايت</span> - <span lang="fa">Øداكثر اندازه يك Ùيلد</span> <span lang="fa">1 گيگا بايت</span> - <span lang="fa">Øداكثر اندازه رديÙهاي يك جدول</span> <span lang="fa"> نا Ù…Øدود</span> - <span lang="fa">Øداكثر ستونهاي يك جدول</span> <span lang="fa"> بسته به نوع جدول بين 250 تا 6000 </span> - <span lang="fa">Øداكثر انديسهاي يك جدول نا Ù…Øدود</span> -</font></PRE></div> -<p dir="rtl"><span lang="fa"><font face="Tahoma">البته در Øالت نامØدود نيز ما -Ù…Øدود به Øجم هاردديسك Ùˆ Ùضاي ØاÙظه خواهيم بود. در صورتي Ú©Ù‡ مقادير مشخص شده به -عنوان نامØدود به صورت غير معمولي بزرك شوند كارايي سيستم كاهش خواهد ياÙت.</font></span></p> -<P dir="rtl"><span lang="fa"><font face="Tahoma">براي ذخيره كردن جداول با اندازه -خيلي بزرگ نيازي نيست كه سيستم عامل امكان ايجاد Ùايلهاي بزرگ را داشته باشد. بلكه -جداول خيلي بزرگ به صورت Ùايلهايي به Øجم يك گيگا بايت نگاهداري مي‌شوند.</font></span></P> -<P dir="rtl"><font face="Tahoma"><span lang="fa">اگر اندازه بلوكهاي داده را -برابر 32 كيلو بايت قرار دهيم Øداكثر اندازه جدول Ùˆ Øداكثر تعداد ستونها 4 برابر -خواهد شد.</span></font></P> -<H4 dir="rtl"><font face="Tahoma"><A name=4.6>4.6</A>) -<span lang="fa">چقدر Ùضاي ديسك سخت براي ذخيره كردن داده‌‌هاي يك Ùايل متني مورد -نياز است؟</span></font></H4> -<P dir="rtl"><font face="Tahoma"><span lang="fa">يك پايگاه داده </span> -PostgreSQL<span lang="fa">‌ تا 5 برابر Ùضايي روي هاردديسك براي نگاهداري يك Ùايل -متني نياز دارد.</span></font></P> -<P dir="rtl"><font face="Tahoma"><span lang="fa">به عنوان مثال يك Ùايل با 100000 -خط را در نظر بگيريد كه در هر خط يك عدد صØÙŠØ Ùˆ يك ØªÙˆØ¶ÙŠØ Ù…ØªÙ†ÙŠ آمده است. Ùرض كنيد -كه رشته متني به طور متوسط 20 بايت باشد. اندازه Ùايل برابر 2.8 مگا بايت خواهد بود -ولي </span>PostgreSQL<span lang="fa"> براي نگاهداري اين Ùايل به 6.4 مگا بايت -اطلاعات نياز خواهد داشت.</span></font></P> -<div dir="rtl"> - <PRE><font face="Tahoma"> 32 bytes: <span lang="fa">اندازه سرايند هر خط به طور تقريبي</span> - 24 bytes: <span lang="fa">يك عدد صØÙŠØ Ùˆ يك رشته 24 بايتي</span> - + 4 bytes: <span lang="fa">اشاره گر روي صÙØÙ‡ به يك چندتايي</span> - ---------------------------------------- - 60 bytes <span lang="fa">در هر رديÙ</span> - -<span lang="fa">اندازه صÙØات داده در </span>PostgreSQL<span lang="fa"> برابر با 8 كيلو بايت است</span> - 8192 <span lang="fa">تعداد بايت‌ها در هر صÙØÙ‡</span> - ------------------- = 136 <span lang="fa">تعداد رديÙ‌ها در يك صÙØÙ‡ پايگاه داده</span> - 60 <span lang="fa"> تعداد بايت‌هاي هر رديÙ</span> - - 100000 <span lang="fa"> تعداد رديÙها</span> - -------------------- = <span lang="fa">تعدادصÙØات پايگاه داده</span> - 128 <span lang="fa">تعداد رديÙها در هر صÙØÙ‡</span> - -735 <span lang="fa">تعداد صÙØات</span> * 8192 <span lang="fa">تعداد بايت‌هاي هر صÙØÙ‡</span> = 6,021,120 <span lang="fa">مگا بايت</span> -</font></PRE> -</div> -<P dir="rtl"><span lang="fa"><font face="Tahoma">سربار انديسها يا نمايه‌ها از -اين مقدار كمتر است ولي چون شامل خود داده‌ها هم هست </font></span> -<font face="Tahoma">Ù…<span lang="fa">Ù…Ú©Ù† است اندازه آنها هم بزرگ شود</span>.</font></P> -<p dir="rtl"><font face="Tahoma">NULL<span lang="fa">ها به صورت </span>bitmap<span lang="fa"> -ذخيره مي‌شوند Ùˆ از اينرو Ùضاي بسيار كمي را اشغال مي‌كنند.</span></font></p> -<H4 dir="rtl"><font face="Tahoma"><A name=4.7>4.7</A>) -<span lang="fa">چگونه مي‌توانم بÙهمم كه Ú†Ù‡ كاربران،‌ پايگاه داده،‌ نمايه Ùˆ -جداولي در سيستم تعري٠شده است؟</span></font></H4> -<P dir="rtl"><font face="Tahoma"><i>psql<span lang="fa"> </span></i> -<span lang="fa">تعداد زيادي دستور دارد كه با </span>\<span lang="fa"> شروع -مي‌شوند Ùˆ اين اطلاعات را در اختيار ما قرار مي‌دهند. براي ديدن آنها دستور </span> -?\ <span lang="fa"> را اجرا كنيد. همچنين جداول سيستمي كه با نام آنها -</span>pg<span lang="fa">_</span> <span lang="fa">‌شروع مي‌شود نيز اين اطلاعات -را در خود دارند. اجراي برنامه </span>psql<span lang="fa"> با گزينه </span>l- -<span lang="fa"> نيز باعث نشان دادن ليست تمام پايگاههاي داده مي‌شود.</span></font></P> -<P dir="rtl"><font face="Tahoma"><span lang="fa">همچنين Ùايل </span> <I> -pgsql/src/tutorial/syscat.source<span lang="fa"> -</span></I><span lang="fa">نيز Ùرمانهاي </span>SELECT<span lang="fa"> كه با -استÙاده از آن مي‌توان اطلاعات پايگاه داده را استخراج كرد Ø´Ø±Ø Ø¯Ø§Ø¯Ù‡ است.</span></font></P> -<H4 dir="rtl"><font face="Tahoma"><A name=4.8>4.8</A>) -<span lang="fa">چرا درخواستهاي من كند اجرا مي‌شوند يا چرا از نمايه ها استÙاده -نمي‌كنند؟</span></font></H4> -<p dir="rtl"><span lang="fa"><font face="Tahoma">به طور معمول </font></span> -<font face="Tahoma"><span lang="fa">براي درخواستها از نمايه‌ها استÙاده نمي‌شود. -تنها در صورتي از نمايه‌ها استÙاده مي‌شود كه اندازه جدول از يك اندازه Øداقل -بزرگتر باشد Ùˆ درخواست هم Ùقط قسمتي از رديÙ‌هاي جدول را انتخاب كرده باشد. دليل -اين كار آن است كه دسترسي‌هاي تصادÙÙŠ به هاردديسك كه به خاطر نمايه‌ها ايجاد مي‌شود -ممكن است از خواندن مستقيم جدول يا خواندن ترتيبي ركوردها كندتر باشد.</span></font></p> -<p dir="rtl"><font face="Tahoma"><span lang="fa">براي تعيين اينكه از نمايه -استÙاده شود يا خير، </span>PostgreSQL<span lang="fa"> بايد اطلاعات آماري را در -مورد يك جدول بداند. اين اطلاعات توسط دستور </span>ANALYZE<span lang="fa"> Ùˆ -</span>VACUUM ANALYZE<span lang="fa"> به دست مي‌آيد. با استÙاده از اين اطلاعات،‌ -بهينه ساز از تعداد رديÙ‌هاي يك جدول اطلاع پيدا مي‌كند Ùˆ بهتر مي‌تواند تعيين كند -كه آيا از نمايه استÙاده شود يا خير. اطلاعات آماري همچنين براي تعيين ترتيب الØاق -Ùˆ روشهاي الØاق به صورت بهينه نيز كاربر دارد. جمع آوري اطلاعات آماري بايد به صورت -دوره‌اي همزمان با تغيير داده‌هاي جدول انجام شود.</span></font></p> -<P dir="rtl"><font face="Tahoma"><span lang="fa">نمايه‌ها به طور معمول همراه با -دستور </span>ORDER BY<span lang="fa"> به كار برده نمي‌شوند. براي يك جدول بزرگ يك -پيمايش ترتيبي همراه با دستور مرتب سازي از به كار بردن نمايه‌ها سريعتر خواهد بود.</span></font></P> -<p dir="rtl"><font face="Tahoma"><span lang="fa">اما اگر همراه با </span>ORDER -BY<span lang="fa">‌ از </span>LIMIT<span lang="fa"> استÙاده شود اغلب از نمايه‌ها -استÙاده مي‌شود چون Ùقط قسمتي از جدول استÙاده مي‌شود. در Øقيقت هر چند</span> -<span lang="fa">توابع ()</span>MIN<span lang="fa">‌ Ùˆ </span>()MAX -<span lang="fa">از نمايه‌ها استÙاده نمي‌كنند ولي مي‌توانيم با استÙاده از دستور -زير با استÙاده از نمايه‌ها Ùˆ دستور </span>ORDER BY<span lang="fa"> Ùˆ </span> -LIMIT<span lang="fa">‌ آنها را به دست آوريم.</span></font></p> -<div dir="ltr"> - <PRE><font face="Tahoma"> SELECT col - FROM tab - ORDER BY col [ DESC ] - LIMIT 1; -</font></PRE> -</div> -<P dir="rtl"><font face="Tahoma"><span lang="fa">اگر شما Ùكر مي‌كنيد كه بهينه -ساز سيستم در انتخاب پيمايش ترتيبي اشتباه كرده است با دستور </span>'</font><CODE><font face="Tahoma">SET -enable_seqscan TO 'off'</font></CODE><font face="Tahoma"><span lang="fa"> -مي‌توانيد ببينيد آيا استÙاده از نمايه‌ها باعث اÙزايش سرعت درخواست‌ها خواهد شد.</span></font></P> -<P dir="rtl"><font face="Tahoma"><span lang="fa">استÙاده از نمايه‌ها هنگامي كه -از علائم ويژه نظير </span>LIKE<span lang="fa"> Ùˆ </span>~<span lang="fa"> -استÙاده مي‌كنيد Ùقط در بعضي شرايط خاصي كه در اينجا ذكر شده است ممكن است:</span></font></P> -<ul dir="rtl"> - <li dir="rtl"> - <p dir="rtl"><font face="Tahoma"><span lang="fa">ابتداي رشته جستجو بايد به - طور ØµØ±ÙŠØ Ù…Ø´Ø®Øµ باشد براي مثال:</span></font></li> - <li dir="rtl"> - <p dir="rtl"><span dir="rtl"><font face="Tahoma"><span lang="fa">دستورات - </span>LIKE<span lang="fa"> نبايد با علامت </span>%<span lang="fa"> شروع - شوند</span></font></span></li> - <li dir="rtl"> - <p dir="rtl"><font face="Tahoma"><span lang="fa">الگوهاي منظمي كه با </span> - ~<span lang="fa"> مي‌ايد Øتماً بايد با علامت </span>^<span lang="fa"> شروع - شود</span></font></li> - <li dir="rtl"> - <p dir="rtl"><font face="Tahoma"><span lang="fa">رشته جستجو نبايد با يك - مجموعه از كاراكتر‌ها مثل </span>[a-e]<span lang="fa"> شروع شود</span></font></li> - <li dir="rtl"> - <p dir="rtl"><font face="Tahoma"><span lang="fa">جستجوهاي غيرØساس به متن مثل - </span>ILIKE<span lang="fa">‌ Ùˆ </span>*~<span lang="fa"> از نمايه‌ها - استÙاده نمي‌كنند. در عوض از توابع نمايه‌اي كه در قسمت </span> - <A - href="#4.12">4.12</A><span lang="fa"> - ØªÙˆØ¶ÙŠØ Ø¯Ø§Ø¯Ù‡ شد استÙاده مي‌كنند.</span></font></li> - <li dir="rtl"> - <p dir="rtl"><font face="Tahoma"><span lang="fa">مقدار پيش Ùرض </span>locale<span lang="fa">‌ - بايد در </span>initdb<span lang="fa"> استÙاده شود.</span></font></li> -</ul> -<H4 dir="rtl"><font face="Tahoma"><A name=4.9>4.9</A>) -<span lang="fa">چگونه مي‌توانم Ù†Øوه بررسي درخواست را توسط بهينه‌ساز درخواستها -مشاهده كنم؟</span></font></H4> -<p dir="rtl"><font face="Tahoma"><span lang="fa">راهنماي دستور </span>EXPLAIN<span lang="fa"> -را نگاه كنيد.</span></font></p> -<H4 dir="rtl"><font face="Tahoma"><A name=4.10>4.10</A>) -<span lang="fa">نمايه </span>R-tree<span lang="fa">‌ چيست؟</span></font></H4> -<p dir="rtl"><font face="Tahoma"><span lang="fa">از نمايه </span>R-Tree -<span lang="fa"> براي انديس كردن داده‌هاي Ùاصله‌اي استÙاده مي‌شود. يك نمايه -</span>hash<span lang="fa"> نمي‌توانند جستجوهاي Ù…Øدوده‌اي را انجام دهد. نمايه</span> -"B-tree"<span lang="fa"> نيز براي انجام جستجوي Ù…Øدوده‌اي در يك جهت قابل استÙاده -است. اما </span>R-Tree<span lang="fa"> مي‌تواند داده‌هاي چند بعدي را نيز -پشتيباني كند. براي مثال استÙاده اگر از نمايه </span>R-tree<span lang="fa">‌ براي -گونه </span>Point<span lang="fa"> استÙاده شود سرعت درخواست‌هايي نظير "</span>select -all points within a bounding rectangle<span lang="fa">" به مراتب اÙزايش مي‌يابد.</span></font></p> -<P dir="rtl"><font face="Tahoma"><span lang="fa">مقاله‌اي كه طراØÙŠ </span>R-tree<span lang="fa"> -را ØªÙˆØ¶ÙŠØ Ø¯Ø§Ø¯Ù‡ است </span></font></P> -<P><font face="Tahoma">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.</font></P> -<P dir="rtl"><font face="Tahoma">R-tree<span lang="fa">‌ مي‌تواند چندضلعيها Ùˆ -چند وجهي را پشتيباني كند. در تئوري </span>R-tree<span lang="fa"> مي‌تواند تعداد -بعدهاي بالاتر ري نيز پشتيباني كند. در عمل توسعه </span>R-tree<span lang="fa">‌ -نياز به كار بيشتري دارد.</span></font></P> -<H4 dir="rtl"><font face="Tahoma"><A name=4.11>4.11</A>) -<span lang="fa">بهينه ساز تكويني درخواست چيست؟</span> (Genetic Query Optimizer)</font></H4> -<p dir="rtl"><font face="Tahoma"><span lang="fa">استÙاده از </span>GEQO<span lang="fa"> -سرعت بهينه سازي درخواست را هنگاميكه تعداد زيادي جدول را با استÙاده از الگوريتم -ژنتيك الØاق مي‌كنيم اÙزايش مي‌دهد.</span></font></p> -<H4 dir="rtl"><font face="Tahoma"><A name=4.12>4.12</A>) -<span lang="fa">چگونه از عبارات منظم براي جستجو استÙاده كنم؟ چگونه جستجويي انجام -دهم كه Øساس به متن نباشد؟ چگونه براي يك جستجوي غير Øساس به متن از نمايه استÙاده -كنم؟</span></font></H4> -<P dir="rtl"><font face="Tahoma"><span lang="fa">براي جستجوي عبارت منظم از عملگر -</span>~<span lang="fa">‌ استÙاده مي‌كنيم. براي جستجوي غير Øساس به متن از عملگر -</span>*~ <span lang="fa">Ùˆ يا </span>ILIKE<span lang="fa">‌ استÙاده مي‌كنيم.</span></font></P> -<p dir="rtl"><span lang="fa"><font face="Tahoma">روش ديگر انجام جستجوي غير Øساس -به متن در زير نشان داده شده است.</font></span></p> -<PRE><font face="Tahoma"> SELECT * - FROM tab - WHERE lower(col) = 'abc'; -</font></PRE> -<p dir="rtl"><span lang="fa"><font face="Tahoma">اين از نمايه‌هاي استاندارد -استÙاده نمي‌كند. ولي شما مي توانيد با دستور زير يك نمايه ايجاد كنيد Ùˆ از آن -استÙاده كنيد.</font></span></p> -<PRE><font face="Tahoma"> CREATE INDEX tabindex ON tab (lower(col)); -</font></PRE> -<H4 dir="rtl"><font face="Tahoma"><A name=4.13>4.13</A>) I<span lang="fa">چگونه -مي‌توانم در يك درخواست تشخيص دهم كه يك Ùيلد </span>NULL<span lang="fa">‌ است؟</span></font></H4> -<p dir="rtl"><font face="Tahoma"><span lang="fa">با استÙاده از توابع </span>IS -NULL<span lang="fa"> Ùˆ </span>IS NOT NULL<span lang="fa"> مي‌توانيم </span>NULL<span lang="fa"> -بودن يك Ùيلد را تست كنيم.</span></font></p> -<H4 dir="rtl"><font face="Tahoma"><A name=4.14>4.14</A>) -<span lang="fa">تÙاوت بين گونه‌هاي مختل٠</span>character<span lang="fa"> چيست؟</span></font></H4> -<PRE><font face="Tahoma">Type Internal Name Notes --------------------------------------------------- -VARCHAR(n) varchar <span lang="fa">اندازه، Øداكثر طول را نشان مي دهد بدون اضاÙÙ‡ شدن كاراكتر اضاÙÙ‡</span> -CHAR(n) <span lang="fa"> </span> bpchar <span lang="fa">كاراكترهاي بلانك براي پر شدن طول مشخص شده استÙاده مي‌شود</span> -TEXT <span lang="fa"> </span>text <span lang="fa"> </span>Ø<span lang="fa">داكثر طول را مشخص نمي‌كند</span> -BYTEA <span lang="fa"> </span> bytea <span lang="fa">آرايه‌اي از بايت با طول متغير</span> -"char" <span lang="fa"> </span>char <span lang="fa">يك كاراكتر</span> -</font></PRE> -<p dir="rtl"><font face="Tahoma"><span lang="fa">نام داخلي گونه‌ها را در </span> -system catalogue <span lang="fa">‌و بعضي از پيغامهاي خطا مي‌توان ديد.</span></font></p> -<p dir="rtl"><font face="Tahoma"><span lang="fa">چهار گونه اول همگي از نوع -</span>varlena <span lang="fa">هستند (4 بايت اول روي ديسك طول را مشخص مي‌كند كه -به دنبال آن داده‌ها قرار دارند.)‌بنابراين Ùضاي واقعي استÙاده شده روي ديسك از -اندازه تعري٠شده بيشتر است. اما اين گونه‌ها را مي‌توان Ùشرده كرد كه اينكار باعث -مي‌شود Ùضاي كمتري روي ديسك اشغال كنند.</span></font></p> -<P dir="rtl"><font face="Tahoma"><span lang="fa">براي ذخيره رشته‌هاي با طول -متغير</span><font size="2">(</font><SMALL>VARCHAR(n<span lang="fa">‌ -<font size="3">بهترين انتخاب است. در اين گونه Øداكثر طول رشته Ù…Øدود است بر خلا٠-</font></span><font size="3">text<span lang="fa"> كه هيچ Ù…Øدوديتي روي Øداكثر -اندازه رشته نمي‌گذارد.(در اين گونه Øداكثر طول يك رشته يك گيگا بايت خواهد بود)</span></font></SMALL></font></P> -<p dir="rtl"><span lang="fa"><font face="Tahoma">گونه <font size="2">(</font></font></span><font face="Tahoma">CHAR(n<span lang="fa"> -<font size="3"> براي ذخيره داده‌هاي با طول يكسان است.يك گونه‌</font>ÙŠ</span><font size="3"> </font> -<font size="2"><span lang="fa">(</span></font>CHAR(n <span lang="fa"> -<font size="3">با كاراكترهاي بلانك (خالي) پر مي‌شود تا به طول مشخص شده برسد در -Øاليكه گونه </font></span><font size="3">VARCHAR</font><font size="3"><span lang="fa"> -كاراكترها را به همان صورت كه هستند ذخيره مي‌كند. گونه </span>BYTEA<span lang="fa"> -براي ذخيره داده‌هاي باينري است به خصوص داده‌هاي باينتري كه شامل بايت‌هاي </span> -NULL<span lang="fa"> هستند. از نظر كارايي تمام اين گونه‌ها يكسان هستند.</span></font></font></p> -<H4 dir="rtl"><font face="Tahoma"><A name=4.15.1>4.15.1</A>) -<span lang="fa">چگونه مي‌توانم يك Ùيلد سريال يا اÙزايشي ايجاد كنم؟</span></font></H4> -<p dir="rtl"><font face="Tahoma">PostgreSQL<span lang="fa"> از داده‌هاي سريال -پشتيباني مي‌كند. براي ايجاد يك Ùيلد سريال (براي داشتن يك Ùيلد منØصر به Ùرد براي -هر ردي٠)به روش زير عمل كنيد:</span></font></p> -<PRE><font face="Tahoma"> CREATE TABLE person ( - id SERIAL, - name TEXT - ); -</font></PRE> -<p dir="rtl"><span lang="fa"><font face="Tahoma">دستور بالا به طور اتوماتيک به -دستور زير تبديل مي‌شود:</font></span></p> -<PRE><font face="Tahoma"> CREATE SEQUENCE person_id_seq; - CREATE TABLE person ( - id INT4 NOT NULL DEFAULT nextval('person_id_seq'), - name TEXT - ); -</font></PRE> -<p dir="rtl"><font face="Tahoma"><span lang="fa">براي ديدن اطلاعات بيشتر به -راهنماي دستور </span> <I>create_sequence</I> <span lang="fa"> مراجعه كنيد. -همچنين مي‌توان از </span>OID<span lang="fa">‌هر ردي٠به عنوان يك مقدار منØصر به -Ùرد استÙاده كرد. اما در اين Øالت براي </span>dump<span lang="fa"> كردن Ùˆ </span> -reload<span lang="fa">‌كردن پايگاه داده بايد دستور </span><i>pg_dumps</i><span lang="fa"><i>‌</i> -را با گزينه </span>o-<span lang="fa">‌ اجرا كنيد.</span></font></p> -<H4 dir="rtl"><font face="Tahoma"><A name=4.15.2>4.15.2</A>) <span lang="fa"> -چگونه مي‌توانم مقدار يك درج سريالي را بدانم؟</span></font></H4> -<P dir="rtl"><font face="Tahoma"><span lang="fa">يك روش براي گرÙتن مقدار بعدي يك -Ùيلد سريال استÙاده از تابع </span><i>()nextval</i><span lang="fa"> است.</span> -<span lang="fa">در شبه ÙƒÙدي كه در ادامه آمده است روش انجام اين كار نشان داده شده -است:</span></font></P> -<PRE><font face="Tahoma"> new_id = execute("SELECT nextval('person_id_seq')"); - execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')"); -</font></PRE> -<p dir="rtl"><font face="Tahoma"><span lang="fa">با اجرا دستور Ùوق مقدار جديد را -در متغير </span>new_id<span lang="fa"> نيز خواهيدداشت كه مي‌توانيد آن را در بقيه -درخواست‌هاي نيز استÙاده كنيد. توجه داشته باشيد كه نام </span>SEQUENCE<span lang="fa">يي -كه به طور اتوماتيك ايجاد شده است به صورت </span><i>table</i>_<I>serialcolumn</I>_<I>seq<span lang="fa">‌ -</span></I><span lang="fa">خواهد بود</span>. <span lang="fa">كه در آن </span> -table<span lang="fa">‌ نام جدول Ùˆ </span>serialcolumn<span lang="fa"> نام Ùيلد -سريال جدول مي‌باشد.</span></font></p> -<P dir="rtl"><font face="Tahoma"><span lang="fa">براي ديدن مقدار نسبت داده شده -به Ùيلد سريال نيز مي‌توان از تابع <i>()</i></span> <I>currval </I> -<span lang="fa">به صورت زير استÙاده كرد. </span></font></P> -<PRE><font face="Tahoma"> execute("INSERT INTO person (name) VALUES ('Blaise Pascal')"); - new_id = execute("SELECT currval('person_id_seq')"); -</font></PRE> -<p dir="rtl"><font face="Tahoma"><span lang="fa">Ùˆ سرانجام شما مي‌توانيد از -مقدار </span>OID<span lang="fa"> كه خروجي دستور </span>INSERT <span lang="fa"> - است براي ديدن مقدار پيش Ùرض استÙاده كنيد. هر چند اين روش در همه پلتÙرمها قابل -استÙاده نيست Ùˆ ضمن اينكه Ùيلد </span>oid<span lang="fa">‌ بعد از عدد 4 ميليارد -دوباره صÙر مي‌شود. در زبان </span>perl<span lang="fa"> با استÙاده از </span>DBI<span lang="fa"> -Ùˆ </span>DBD::Pg<span lang="fa"> مقدار </span>oid<span lang="fa">‌را مي‌توانيد -به شكل زير استخراج كنيد:</span> <span lang="fa">بعد از اجراي ()</span>st->execute<span lang="fa">$ -مقدار </span>oid<span lang="fa">‌ در متغير </span> <I>sth->pg_oid_status<span lang="fa">$</span></I><span lang="fa"> -ذخيره خواهد شد.</span></font></p> -<H4 dir="rtl"><font face="Tahoma"><A name=4.15.3>4.15.3</A>) <span lang="fa">آیا -توابع ()</span>nextval<span lang="fa"> Ùˆ ()</span>currval<span lang="fa"> منجر -به ایجاد شرایط </span>race<span lang="fa"> برای سایر کاربران Ù…ÛŒ شوند؟</span></font></H4> -<P dir="rtl"><font face="Tahoma"><span lang="fa">خیر، استÙاده از این توابع شرایط -</span>race<span lang="fa"> را به وجود نمی آورد.</span></font></P> -<H4 dir="rtl"><font face="Tahoma"><A name=4.15.4>4.15.4</A>)</font><font face="Tahoma"><span lang="fa"> -چرا اعداد سریالی مربوط به تراکنشهای </span>abort<span lang="fa"> شده مجدداً -استÙاده نمی شود؟ چرا بین اعداد سریالی یک Ùاصله خالی ایجاد Ù…ÛŒ شود؟</span></font></H4> -<P dir="rtl"><font face="Tahoma"><span lang="fa">برای بالا بردن امکان اجرای -همزمان تراکنشها، اعداد سریالی به Ù…Øض اجرای تراکنش به آنها تخصیص Ù…ÛŒ یابد در این -Øالت اگر بعضی از تراکنشها </span>abort<span lang="fa"> شوند بین اعداد سریالی -استÙاده شده یک Ùاصله خالی به وجود Ù…ÛŒ آید.</span></font></P> -<H4 dir="rtl"><font face="Tahoma"><A name=4.16>4.16</A>) OID<span lang="fa"> Ùˆ </span> -TID<span lang="fa"> Ú†Ù‡ هستند؟</span></font></H4> -<P dir="rtl"><font face="Tahoma">OID<span lang="fa"> راه ØÙ„ </span>PostgreSQL<span lang="fa"> -برای داشتن یک شناسه منØصر به Ùرد برای هر ردی٠است. هر ردی٠جدیدی Ú©Ù‡ ایجاد Ù…ÛŒ شود -یک </span>OID<span lang="fa"> منØصر به Ùرد به آن اختصاص Ù…ÛŒ یابد. تمام </span>OID<span lang="fa">هایی -Ú©Ù‡ در Øین </span>initdb<span lang="fa"> ایجاد Ù…ÛŒ شوند از 16384 کمتر هستند Ùˆ -</span>OID<span lang="fa">هایی بعداً تولید Ù…ÛŒ شود از این عدد بزرگتر خواهد بود. -نکته مهم آن است Ú©Ù‡ </span>OID<span lang="fa">ها نه تنها در یک جدول شبیه نیستند -بلکه در Ú©Ù„ پایگاه داده هیچ دو ردیÙÛŒ دارای </span>OID<span lang="fa"> یکسان -نخواهد بود.</span></font></P> -<P dir="rtl"><font face="Tahoma">PostgreSQL<span lang="fa"> از </span>OID<span lang="fa"> -در سیستم داخلی خود برای ایجاد ارتباط بین ردیÙهای جداول مختل٠استÙاده Ù…ÛŒ کند. -توصیه Ù…ÛŒ شود Ú©Ù‡ یک ستون از نوع </span>OID<span lang="fa"> برای ذخیره این Ùیلد در -جدول ایجاد کنید. ساختن یک نمایه برای این Ùیلد باعث دسترسی سریعتر به آن خواهد شد.</span></font></P> -<P dir="rtl"><font face="Tahoma"><span lang="fa">تمام پایگاههای داده در </span> -PostgreSQL<span lang="fa"> برای گرÙتن </span>OID<span lang="fa"> جدید از یک -ناØیه مرکزی استÙاده Ù…ÛŒ کند. ولی اگر بخواهیم </span>OID<span lang="fa"> را به روش -دیگری بگیریم Ùˆ یا اینکه در Øین Ú©Ù¾ÛŒ کردن یک جدول بخواهیم </span>OID<span lang="fa">های -اصلی آن تغییر نکند به روش زیر Ù…ÛŒ توانیم عمل کنیم:</span></font></P> -<P dir="rtl"> </P> -<div dir="ltr"> - <PRE><font face="Tahoma"> 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; -</font></PRE> -</div> -<P dir="rtl"><font face="Tahoma">OID<span lang="fa"> یک عدد صØÛŒØ 4 بایتی است Ùˆ -بنابراین Øداکثر مقدار آن 4 میلیارد خواهد بود Ùˆ بعد از آن مقدار آن سرریز خواهد -شد. البته تا کنون برای کسی این اتÙاق Ù†ÛŒÙتاده است Ùˆ تصمیم -گرداندگان </span>PostgreSQL<span lang="fa"> آن است Ú©Ù‡ قبل از آنکه این اتÙاق رخ -دهد این مشکل را برطر٠کنند.</span></font></P> -<P dir="rtl"><font face="Tahoma">TID<span lang="fa">ها برای شناسایی Ù…ØÙ„ Ùیزیکی -یک ردی٠بر اساس بلوک Ùˆ Ø¢Ùست Ù…ÛŒ باشد. </span>TID<span lang="fa">ها بعد از تغییر -پیدا کردن یک ردی٠و یا بازخوانی آن عوض Ù…ÛŒ شوند. </span>TID<span lang="fa">ها -توسط نمایه ها استÙاده Ù…ÛŒ شوند.</span></font></P> -<H4 dir="rtl"><font face="Tahoma"><A name=4.17>4.17</A>) -<span lang="fa">معني بعضي از ترمها Ùˆ كلماتي كه در </span>PostgreSQL<span lang="fa">‌ -استÙاده مي‌شود چيست؟</span></font></H4> -<P dir="rtl"><font face="Tahoma"><span lang="fa">لیست برخی از ترمها Ùˆ کلماتی Ú©Ù‡ -استÙاده Ù…ÛŒ شوند:</span></font></P> -<UL> - <LI dir="ltr"> - <p dir="ltr"><font face="Tahoma">table, relation, class <span lang="fa"> - :کلاس، رابطه، جدول</span></font><LI dir="ltr"> - <p dir="ltr"><font face="Tahoma">row, record, tuple <span lang="fa">چندتایی، - رکورد، ردیÙ</span></font><LI dir="ltr"> - <p dir="ltr"><font face="Tahoma">column, field, attribute <span lang="fa"> - صÙت، Ùیلد، ستون</span></font><LI dir="ltr"> - <p dir="ltr"><font face="Tahoma">retrieve, select <span lang="fa">انتخاب، - خواندن</span></font><LI dir="ltr"> - <p dir="ltr"><font face="Tahoma">replace, update<span lang="fa">به روز کردن، - جایگزینی</span> - </font> - <LI dir="ltr"> - <p dir="ltr"><font face="Tahoma">append, insert <span lang="fa">درج، اضاÙÙ‡ - کردن</span></font><LI dir="ltr"> - <p dir="ltr"><font face="Tahoma"><SMALL>OID</SMALL>, serial value - <span lang="fa">مقدار سریال</span></font><LI dir="ltr"> - <p dir="ltr"><font face="Tahoma">portal, cursor - </font> - <LI dir="ltr"> - <p dir="ltr"><font face="Tahoma">range variable, table name, table alias - </font> </LI></UL> -<P dir="rtl"><font face="Tahoma"><span lang="fa">یک لیست عمومی از ترمهای مورد -استÙاده در پایگاه داده در آدرس </span> <A -href="http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.html"> -http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.htm</A> -<span lang="fa">وجود دارد.</span></font></P> -<H4 dir="rtl"><font face="Tahoma"><A name=4.18>4.18</A>) <span lang="fa"> -چرا من خطاي </span><i>"ERROR: Memory exhausted in AllocSetAlloc"</i><span lang="fa"> -مي‌گيرم؟</span></font></H4> -<P dir="rtl"><font face="Tahoma"><span lang="fa">این خطا اØتمالاً یا به خاطر -تمام شدن ØاÙظه مجازی سیستم شماست Ùˆ یا اینکه کرنل برای برنامه ها در مورد میزان -استÙاده از ØاÙظه مجازی Ù…Øدودیت اعمال کرده است. قبل از اجرای برنامه اصلی یکی از -دستورات زیر را اجرا کنید.</span></font></P> -<div dir="ltr"> - <PRE><font face="Tahoma"> ulimit -d 262144 - limit datasize 256m -</font></PRE></div> -<p dir="rtl"><font face="Tahoma"><span lang="fa">بسته به نوع شل یکی از این -دستورات ممکن است با موÙقیت اجرا شود. با اجرای آن دستور Ù…Øدودیت ØاÙظه مجازی برای -برنامه ها برداشته شده Ùˆ با این کار اØتمالاً درخواستی Ú©Ù‡ قبلاً خطا Ù…ÛŒ داده است -اجرا خواهد شد.</span></font></p> -<H4 dir="rtl"><font face="Tahoma"><A name=4.19>4.19</A>) <span lang="fa">از كجا -تشخيص دهم كه ويرايش يا نسخه </span>PostgreSQL<span lang="fa">يي كه من استÙاده -مي‌كنم چيست؟</span></font></H4> -<P dir="rtl"><font face="Tahoma"><span lang="fa">با اجرای دستور</span> -<span lang="fa">()</span>SELECT version</font></P> -<H4 dir="rtl"><font face="Tahoma"><A name=4.20>4.20</A>) <span lang="fa">چرا در -Øین اجرای عملیات روی </span>large-object<span lang="fa">ها خطای </span>"<I>invalid -large obj descriptor</I>"<span lang="fa">به وجود Ù…ÛŒ آید؟</span></font></H4> -<p align="right" dir="rtl"><font face="Tahoma"><span lang="fa">شما باید قبل از -شروع دستوراتی Ú©Ù‡ با </span>large-object<span lang="fa">ها کار Ù…ÛŒ کنند از </span> -BEGIN<span lang="fa"> Ùˆ بعد از آنها هم یک </span>END<span lang="fa"> -بگذارید. در Øال Øاضر </span>PostgreSQL<span lang="fa"> هندل </span>large-object<span lang="fa">ها -را در زمان نهایی شدن تراکنش (</span>commit<span lang="fa">شدن)</span> -<span lang="fa">Ù…ÛŒ بندد. به همین دلیل اولین تلاش برای انجام هر کاری با هندل منجر -به خطای </span><i>invalid large obj descriptor</i><span lang="fa"> خواهد شد.</span> -<span lang="fa">برای جلوگیری از این خطا Øتماً باید از یک تراکنش استÙاده کنید. -این کار همانطور Ú©Ù‡ قبلاً Ú¯Ùته شد با استÙاده از قرار دادن </span>BEGIN<span lang="fa"> -Ùˆ </span>END<span lang="fa"> در ابتدا Ùˆ انتهای دستورات انجام Ù…ÛŒ شود.</span></font></p> -<p dir="rtl"><font face="Tahoma"><span lang="fa">اگر این خطا را در Øین استÙاده -از یک درایور </span>ODBC<span lang="fa"> دریاÙت کردید اØتمالاً باید این دستور را -اجرا کنید: </span>set </font> <CODE><font face="Tahoma">auto-commit off</font></CODE></p> -<H4 dir="rtl"><font face="Tahoma"><A name=4.21>4.21</A>) -<span lang="fa">چگونه يك ستون ايجاد كنم كه مقدار زمان جاري را به عنوان مقدار -پيش‌Ùرض داشته باشد؟</span></font></H4> -<P dir="rtl"><font face="Tahoma"><span lang="fa">از</span> <I>CURRENT_TIMESTAMP -<span lang="fa"> </span></I><span lang="fa">استÙاده کنید در مثال زیر Ù†Øوه انجام -این کار نشان داده شده است:</span></font></P> -<div dir="ltr"> - <PRE><CODE><font face="Tahoma">CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP ); -</font></CODE><font face="Tahoma"> -</font></PRE> -</div> -<H4 dir="rtl"><font face="Tahoma"><A name=4.22>4.22</A>) -<span lang="fa">چرا "زير درخواستهايي" كه از </span>IN<span lang="fa"> استÙاده -مي‌كنند كند هستند؟</span></font></H4> -<P dir="rtl"><font face="Tahoma"><span lang="fa">در نسخه های قبل از 7.4 عمل -الØاق زیر درخواست Ùˆ درخواست اصلی به این صورت انجام Ù…ÛŒ شود Ú©Ù‡ نتایج به دست آمده -از زیر درخواست به صورت ترتیبی برای هر ردی٠اعمال Ù…ÛŒ شود. اگر زیردرخواست ردی٠های -Ú©Ù…ÛŒ را به عنوان خروجی برگرداند Ùˆ درخواست بیرونی ردی٠های زیادی را شامل شود -استÙاده از </span>IN<span lang="fa"> بهترین روش است در غیر اینصورت بهتر است از -</span>EXISTS<span lang="fa"> استÙاده شود</span></font></P> -<div dir="ltr"> - <PRE><font face="Tahoma"> SELECT * - FROM tab - WHERE col IN (SELECT subcol FROM subtab); -</font></PRE></div> -<p dir="rtl"><span lang="fa"><font face="Tahoma">به:</font></span></p> -<div dir="ltr"> - <PRE><font face="Tahoma"> SELECT * - FROM tab - WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col); -</font></PRE></div> -<p dir="rtl"><font face="Tahoma"><span lang="fa">برای اجرای سریع این درخواست -باید برای ستون </span>subcol<span lang="fa"> نمایه ایجاد شده باشد.</span></font></p> -<P dir="rtl"><font face="Tahoma"><span lang="fa">در نسخه های بعد از 7.4 </span> -IN<span lang="fa"> برای الØاق از همان تکنیک پیچیده مورد استÙاده در دستورات -معمولی استÙاده Ù…ÛŒ کند Ùˆ بنابراین استÙاده از آن نسبت به </span>EXISTS<span lang="fa"> -ارجØیت دارد.</span></font><H4 dir="rtl"><font face="Tahoma"><A name=4.23>4.23</A>) <span lang="fa"> -چگونه مي‌توانم يك الØاق خارجي (</span>outer join<span lang="fa">) انجام دهم؟</span></font></H4> -<p dir="rtl"><span lang="fa"><font face="Tahoma">برای انجام الØاق خارجی به روش -زیر عمل کنید:</font></span></p> -<div dir="ltr"> - <PRE><font face="Tahoma"> SELECT * - FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col); -</font></PRE></div> -<p dir="rtl"><span lang="fa"><font face="Tahoma">یا</font></span></p> -<div dir="ltr"> - <PRE><font face="Tahoma"> SELECT * - FROM t1 LEFT OUTER JOIN t2 USING (col); -</font></PRE> -</div> -<P dir="rtl"><font face="Tahoma"><span lang="fa">درخواستهای بالا </span>t1.col , -t2.col<span lang="fa"> را به هم الØاق Ù…ÛŒ کند Ùˆ همچنین ردیÙهای </span>t1<span lang="fa"> -Ú©Ù‡ نظیر آنها در </span>t2<span lang="fa"> نبوده است را نیز برمی گرداند. اگر از -</span>RIGHT<span lang="fa"> استÙاده شود نتیجه بر عکس است. یعنی ردیÙهای </span> -t2<span lang="fa"> Ú©Ù‡ نظیر آنها در </span>t1 <span lang="fa">نباشد را نشان Ù…ÛŒ -دهد Ùˆ اگر از </span>FULL<span lang="fa"> استÙاده شود نتیجه هم شامل ردیÙهای -</span>t1<span lang="fa"> است Ùˆ هم شامل ردیÙهای </span>t2<span lang="fa">. -استÙاده از کلمه </span>OUTER<span lang="fa"> اختیاری است چرا Ú©Ù‡ این کلمه به طور -ضمنی دستورهای </span>LEFT, RIGHT, FULL<span lang="fa"> وجود دارد.</span></font></P> -<P dir="rtl"><font face="Tahoma"><span lang="fa">در نسخه های قبلی پایگاه داده Ù…ÛŒ -توانیم الØاق خارجی را به Ú©Ù…Ú© دستورهای </span>UNION, NOT IN<span lang="fa"> شبیه -سازی کنیم. این کار در مثال زیر نشان داده شده است:</span><BR></font></P> -<div dir="ltr"> - <PRE><font face="Tahoma"> 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 -</font></PRE> -</div> -<H4 dir="rtl"><font face="Tahoma"><A name=4.24>4.24</A>) -<span lang="fa">چگونه مي‌توان درخواستهايي از چند پايگاه داده توليد كرد؟</span></font></H4> -<P dir="rtl"><font face="Tahoma"><span lang="fa">در Øال Øاضر این کار امکان پذیر -نیست. </span>PostgreSQL<span lang="fa"> Ùقط امکان درخواست از پایگاه داده ای را -Ù…ÛŒ دهد Ú©Ù‡ در Øال Øاضر به آن متصل باشید Ùˆ نمی توان به طور همزمان از دو پایگاه -داده استÙاده کرد. البته یک برنامه کاربردی خود Ù…ÛŒ تواند به طور همزمان دو -پایگاه داده را مورد استÙاده قرار داده Ùˆ نتایج را با هم ترکیب کند ولی نمی تواند -در یک درخواست به هر دو پایگاه داده رجوع کند.</span></font></P> -<H4 dir="rtl"><font face="Tahoma"><A name=4.25>4.25</A>) -<span lang="fa">چگونه خروجي يك تابع مي‌تواند چند ردي٠يا ستون باشد؟</span></font></H4> -<P dir="rtl"><span lang="fa"><font face="Tahoma">در نسخه 7.3 خروجی یک تابع Ù…ÛŒ -تواند چند ردی٠یا چند ستون باشد. برای دیدن اطلاعات بیشتر به سایت زیر -مراجعه کنید:</font></span><font face="Tahoma"><A -href="http://techdocs.postgresql.org/guides/SetReturningFunctions">http://techdocs.postgresql.org/guides/SetReturningFunctions</A><span lang="fa"> -</span> </font><H4 dir="rtl"><font face="Tahoma"><A name=4.26>4.26</A>) -<span lang="fa">در توابع </span>PL/PgSQL<span lang="fa"> چرا نمي‌توان با اطمينان -جداول موقت را ايجاد يا Øذ٠كرد؟</span></font></H4> -<P dir="rtl"><font face="Tahoma">PL/PgSQL<span lang="fa"> Ù…Øتوای توابع را ذخیره -(</span>cache<span lang="fa">) Ù…ÛŒ کند.</span> <span lang="fa">یک اثر بد جانبی -این کار آن است Ú©Ù‡ اگر در تابع از یک جدول موقت استÙاده شود Ùˆ بعداً آن جدول ØØ°Ù Ùˆ -یک جدول جدید به جای آن ایجاد شود، در Ùراخوانی مجدد آن تابع، Ù…Øتوای ذخیره -شده تابع هنوز به جدول قدیمی اشاره Ù…ÛŒ کند Ùˆ بنابراین اجرای تابع با اشکال -مواجه Ù…ÛŒ شود. راه ØÙ„ این مشکل آن است Ú©Ù‡ برای جداول موقت از دستور </span>EXECUTE<span lang="fa"> -استÙاده شود Ú©Ù‡ این کار سبب Ù…ÛŒ شود Ú©Ù‡ درخواست برای هر بار اجرا مجدداً پیمایش Ùˆ -تÙسیر شود.</span></font></P> -<H4 dir="rtl"><font face="Tahoma"><A name=4.27>4.27</A>) -<span lang="fa">Ú†Ù‡ گزينه‌هايي براي تكرار (</span>replication<span lang="fa">)</span> -<span lang="fa">وجود دارد؟</span> -</font> </H4> -<P dir="rtl"><font face="Tahoma">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 <A -href="http://gborg.postgresql.org/genpage?replication_research"> -http://gborg.PostgreSQL.org/genpage?replication_research</A> -lists them. A multi-master replication solution is being worked on at <A -href="http://gborg.postgresql.org/project/pgreplication/projdisplay.php"> -http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php</A>.</font></P> -<H4 dir="rtl"><font face="Tahoma"><A name=4.28>4.28</A>) -<span lang="fa">Ú†Ù‡ گزينه‌هايي براي رمزنگاري وجود دارد؟</span> -</font> </H4> -<UL> - <LI dir="rtl"> - <p dir="rtl"><font face="Tahoma">contrib<I>/pgcrypto </I><span lang="fa"> - شامل توابع رمزنگاری زیادی است Ú©Ù‡ Ù…ÛŒ توان از آنها در دستورات </span>SQL<span lang="fa"> - استÙاده کرد.</span></font><LI dir="rtl"> - <p dir="rtl"><font face="Tahoma"><span lang="fa">برای رمز کردن ارتباط بین - </span>client<span lang="fa"> Ùˆ </span>server<span lang="fa"> ØŒ پایگاه داده - Øتماً گزینه </span>SSL<span lang="fa"> را بر روی پایگاه داده Ùعال کنیم.</span></font><LI dir="rtl"> - <p dir="rtl"><font face="Tahoma"><span lang="fa">در نسخه 7.3 به بعد کلمات - عبور کاربران به طور اتوماتیک به صورت رمز شده ذخیره Ù…ÛŒ شود ولی در نسخه های - قبلی باید گزینه </span> - <I>PASSWORD_ENCRYPTION</I> <span lang="fa"> در Ùایل</span><I>postgresql.conf </I> - <span lang="fa">Ùعال کنیم. </span> - </font> - <LI dir="rtl"> - <p dir="rtl"><span lang="fa"><font face="Tahoma">Ù…ÛŒ توان پایگاههای داده را - روی یک Ùایل سیستم رمزشده نگاهداری کرد</font></span></LI></UL> -<HR dir="rtl"> - -<H2 align=center dir="rtl"><font face="Tahoma">Extending PostgreSQL</font></H2> -<H4 dir="rtl"><font face="Tahoma"><A name=5.1>5.1</A>) -<span lang="fa">من يك تابع نوشته‌ام. چگونه آن را در </span>psql<span lang="fa"> -اجرا كنم؟ چرا با اجراي آن </span>core dump<span lang="fa"> مي‌گيرم؟</span></font></H4> -<p dir="rtl"><span lang="fa"><font face="Tahoma">دلایل مختلÙÛŒ Ù…ÛŒ تواند باعث بروز -این مشکل شود. اما قبل از همه تابع خود را به صورت جدا تست کنید.</font></span></p> -<H4 dir="rtl"><font face="Tahoma"><A name=5.2>5.2</A>) <span lang="fa">چگونه -مي‌توانم در توليد نوع‌ها Ùˆ توابع جديد Ùˆ جالب براي -</span>PostgreSQL<span lang="fa">‌ همكاري Ùˆ مشاركت داشته باشم</span></font><span lang="fa"><font face="Tahoma">ØŸ</font></span></H4> -<p dir="rtl"><span lang="fa"><font face="Tahoma">کد خود را به گروه پستی </font> -</span><font face="Tahoma"> <I>pgsql-hackers<span lang="fa"> </span></I> -<span lang="fa"> ارسال کنید.</span></font></p> -<H4 dir="rtl"><font face="Tahoma"><A name=5.3>5.3</A>) -<span lang="fa">چگونه مي‌توانم يك تابع به زبان </span>C<span lang="fa"> بنويسم -كه خروجي آن يك</span> <span lang="fa">‌</span>tuple<span lang="fa"> </span> <span lang="fa">(چند -تايي) باشد؟</span></font></H4> -<P dir="rtl"><font face="Tahoma"><span lang="fa">در نسخه های 7.3 به بعد یک تابع -Ù…ÛŒ تواند یک جدول را به عنوان خروجی برگرداند. این ویژگی در توابعی Ú©Ù‡ به زبانهای -</span>C<span lang="fa"> Ùˆ </span>PL/PgSQL<span lang="fa"> نوشته Ù…ÛŒ شوند به طور -کامل وجود دارد. راهنما برنامه نویسان را مطالعه کنید. یک مثال از Ù†Øوه برگرداندن -یک جدول به عنوان خروجی در </span><i>contrib/tablefunc</i><span lang="fa"> آمده -است.</span></font></P> -<H4 dir="rtl"><font face="Tahoma"><A name=5.4>5.4</A>) -<span lang="fa">من يك Ùايل منبع را عوض كرده ام چرا در عمليات كامپيل مجدد آن -تغيير ديده نمي‌شود؟</span></font></H4> -<P dir="rtl"><font face="Tahoma">Makefile<span lang="fa"> برای Ùایلهای </span> -include<span lang="fa"> شده وابستگیها را به درستی نشان نمی دهد. برای اطمینان از -اینکه Ùایلی Ú©Ù‡ عوض کرده اید Øتماً دوباره کامپیل Ù…ÛŒ شود دستور </span>make clean<span lang="fa"> -را اجرا کنید. اگر از کامپیلر </span>gcc<span lang="fa"> استÙاده Ù…ÛŒ کنید Ù…ÛŒ -توانید از گزینه </span>enable-depend--<span lang="fa"> در موقع اجرای برنامه -</span>configure<span lang="fa"> استÙاده کنید این گزینه باعث Ù…ÛŒ شود Ú©Ù‡ وابستگیها -به طور اتوماتیک تولید شود.</span></font></P></BODY></HTML> \ No newline at end of file diff --git a/doc/src/FAQ/FAQ_french.html b/doc/src/FAQ/FAQ_french.html deleted file mode 100644 index 12f33422e2656bf28a6e361b322fa9455dc0b27f..0000000000000000000000000000000000000000 --- a/doc/src/FAQ/FAQ_french.html +++ /dev/null @@ -1,1466 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> -<HTML> - <HEAD> - <META name="generator" content="HTML Tidy, see www.w3.org"> - <META http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> - <TITLE>PostgreSQL FAQ</TITLE> - </HEAD> - - <BODY bgcolor="#ffffff" text="#000000" link="#ff0000" vlink="#a00000" - alink="#0000ff"> - <H1>Foire Aux Questions (FAQ) pour PostgreSQL</H1> - - <P>Dernière mise à jour : vendredi 14 novembre 2004 16:32:47</P> - - <P>Mainteneur actuel : Bruce Momjian (<A href= - "mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</A>)<BR> - </P> - - <P>La plus récente version de ce document est disponible sur <A - href= - "http://www.PostgreSQL.org/docs/faqs/FAQ.html">http://www.PostgreSQL.org/docs/faqs/FAQ.html</A>.</P> - - <P>Les questions spécifiques à la plateforme sont répondues sur <A href= - "http://www.PostgreSQL.org/docs/index.html">http://www.PostgreSQL.org/docs/index.html</A>.</P> - <HR> - - <H2 align="center">Questions générales</H2> - <A href="#1.1">1.1</A>) Qu'est ce que PostgreSQL ? Comment le prononcer ?<BR> - <A href="#1.2">1.2</A>) Quelle est la licence de PostgreSQL ?<BR> - <A href="#1.3">1.3</A>) Sous quels environnements Unix PostgreSQL tourne-t-il ?<BR> - <A href="#1.4">1.4</A>) Sous quels environnements non-Unix PostgreSQL tourne-t-il ?<BR> - <A href="#1.5">1.5</A>) Où puis-je me procurer PostgreSQL ?<BR> - <A href="#1.6">1.6</A>) Où puis-je obtenir du support ?<BR> - <A href="#1.7">1.7</A>) Quelle est la dernière version ?<BR> - <A href="#1.8">1.8</A>) Quelle documentation est disponible ?<BR> - <A href="#1.9">1.9</A>) Comment savoir quels sont les bogues connus ou les fonctionnalités manquantes ?<BR> - <A href="#1.10">1.10</A>) Comment puis-je apprendre le <SMALL>SQL</SMALL> ?<BR> - <A href="#1.11">1.11</A>) PostgreSQL est-il compatible an 2000 ?<BR> - <A href="#1.12">1.12</A>) Comment puis-je rejoindre l'équipe de développement ?<BR> - <A href="#1.13">1.13</A>) Comment dois-je soumettre un rapport de - bogue ?<BR> - <A href="#1.14">1.14</A>) Comment PostgreSQL se compare-t'il à d'autres - <SMALL>SGBD</SMALL> ?<BR> - <A href="#1.15">1.15</A>) Comment puis-je aider financièrement PostgreSQL ?<BR> - - - <H2 align="center">Questions sur le client utilisateur</H2> - <A href="#2.1">2.1</A>) Y a-t-il des pilotes <SMALL>ODBC</SMALL> pour - PostgreSQL ?<BR> - <A href="#2.2">2.2</A>) Quels outils sont disponibles pour utiliser - PostgreSQL avec des pages Web ?<BR> - <A href="#2.3">2.3</A>) PostgreSQL a-t-il une interface graphique ?<BR> - <A href="#2.4">2.4</A>) Quels langages sont disponibles pour - communiquer avec PostgreSQL ?<BR> - - - <H2 align="center">Questions administratives</H2> - <A href="#3.1">3.1</A>) Comment installer PostgreSQL ailleurs que sous <I>/usr/local/pgsql</I> ?<BR> - <A href="#3.2">3.2</A>) Quand je lance <I>postmaster</I>, j'obtiens un <I>Bad System Call</I> ou un message <I>core dumped</I>. Pourquoi ?<BR> - <A href="#3.3">3.3</A>) Quand je lance <I>postmaster</I>, j'obtiens des erreurs <I>IpcMemoryCreate</I>. Pourquoi ?<BR> - <A href="#3.4">3.4</A>) Quand je lance <I>postmaster</I>, j'obtiens des erreurs <I>IpcSemaphoreCreate</I>. Pourquoi ?<BR> - <A href="#3.5">3.5</A>) Comment contrôler les connexions d'autres machines ?<BR> - <A href="#3.6">3.6</A>) Comment règler le moteur de la base de données pour de meilleures performances ?<BR> - <A href="#3.7">3.7</A>) Quelles fonctionalités de déboguage sont disponibles ?<BR> - <A href="#3.8">3.8</A>) Pourquoi est-ce que j'obtiens des messages <I>Sorry, too many clients</I> quand je me connecte ?<BR> - <A href="#3.9">3.9</A>) Que contient le répertoire <I>pgsql_tmp</I> ?<BR> - <A href="#3.10">3.10</A>) Pourquoi ai-je besoin de faire une sauvegarde des bases et de restaurer pour mettre a jour les versions de PostgreSQL ?<BR> - <A href="#3.11">3.11</A>) Quels matériels dois-je utiliser ?<BR> - - - <H2 align="center">Questions fonctionnelles</H2> - <A href="#4.1">4.1</A>) Quelle est la différence entre curseur binaire - et curseur normal ?<BR> - <A href="#4.2">4.2</A>) Comment faire un <SMALL>SELECT</SMALL> seulement - sur les premières lignes d'une requête ? Sur une ligne aléatoire ?<BR> - <A href="#4.3">4.3</A>) Comment obtenir une liste des tables ou - d'autres choses que je vois dans <I>psql</I> ?<BR> - <A href="#4.4">4.4</A>) Comment supprime-t-on une colonne d'une table, - ou comment change-t-on son type de données ?<BR> - <A href="#4.5">4.5</A>) Quelle est la taille maximale pour une ligne, - une table et une base de données ?<BR> - <A href="#4.6">4.6</A>) Combien d'espace disque faut-il pour stocker - les données d'un fichier texte typique ?<BR> - <A href="#4.7">4.7</A>) Comment puis-je savoir quels index, tables, - bases de données et utilisateurs sont définis ?<BR> - <A href="#4.8">4.8</A>) Mes requêtes sont lentes ou ne font pas usage - des index. Pourquoi ?<BR> - <A href="#4.9">4.9</A>) Comment puis-je savoir si l'optimiseur évalue - mes requêtes ?<BR> - <A href="#4.10">4.10</A>) Qu'est-ce qu'un index R-tree ?<BR> - <A href="#4.11">4.11</A>) Qu'est-ce que l'optimiseur génétique de - requêtes ?<BR> - <A href="#4.12">4.12</A>) 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 ?<BR> - <A href="#4.13">4.13</A>) Comment puis-je détecter si un champ est - <SMALL>NULL</SMALL> dans une requête ?<BR> - <A href="#4.14">4.14</A>) Quelle sont les différences entre les nombreux - types de caractères ?<BR> - <A href="#4.15.1">4.15.1</A>) Comment puis-je créer un champ série, - c'est-à-dire s'incrémentant automatiquement ?<BR> - <A href="#4.15.2">4.15.2</A>) Comment puis-je obtenir la valeur d'un - <SMALL>SERIAL</SMALL> suite à une insertion ?<BR> - <A href="#4.15.3">4.15.3</A>) Est-ce que <I>currval()</I> et - <I>nextval()</I> n'amènent pas des problèmes lorsque plusieurs utilisateurs - les lancent en même temps ?<BR> - <A href="#4.15.4">4.15.4</A>) 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) ?<BR> - <A href="#4.16">4.16</A>) Qu'est-ce qu'un <SMALL>OID</SMALL>? Qu'est-ce qu'un <SMALL>TID</SMALL> ?<BR> - <A href="#4.17">4.17</A>) A quoi correspond certains termes utilisés avec - PostgreSQL ?<BR> - <A href="#4.18">4.18</A>) Pourquoi ai-je l'erreur <I>ERROR: - Memory exhausted in AllocSetAlloc()</I> ?<BR> - <A href="#4.19">4.19</A>) Comment puis-je connaître la version de - PostgreSQL que j'utilise ?<BR> - <A href="#4.20">4.20</A>) Pourquoi ai-je <I>invalid large obj - descriptor</I> lors d'opérations avec des gros objets ?<BR> - <A href="#4.21">4.21</A>) Comment puis-je créer une colonne qui aura par - défaut l'heure actuelle comme valeur ?<BR> - <A href="#4.22">4.22</A>) Pourquoi mes sous-requêtes utilisant - <CODE><SMALL>IN</SMALL></CODE> sont-elles si lentes ?<BR> - <A href="#4.23">4.23</A>) Comment puis-je réaliser une jointure - externe ?<BR> - <A href="#4.24">4.24</A>) Comment puis-je lancer des requêtes utilisant - plusieurs bases de données ??<BR> - <A href="#4.25">4.25</A>) Comment puis-je renvoyer plusieurs lignes ou - colonnes à partir d'une fonction ?<BR> - <A href="#4.26">4.26</A>) Pourquoi ne puis-je pas créer/supprimer des - tables temporaires dans les fonctions PL/PgSQL de façon stable ?<BR> - <A href="#4.27">4.27</A>) Quelles options de cryptage sont - disponibles ?<BR> - - <H2 align="center">Etendre PostgreSQL</H2> - <A href="#5.1">5.1</A>) J'ai écrit une fonction utilisateur. Lorsque je l'exécute avec - <I>psql</I>, pourquoi cela finit-il avec un "dump core" ?<BR> - <A href="#5.2">5.2</A>) Comment puis-je contribuer avec de nouveaux types et fonctions - pour PostgreSQL ?<BR> - <A href="#5.3">5.3</A>) Comment puis-je écrire une fonction C pour récupérer une - ligne ?<BR> - <A href="#5.4">5.4</A>) J'ai modifié un fichier source. Pourquoi la modification - n'est-elle pas visible après la recompilation ?<BR> - - <HR> - - <H2 align="center">Questions générales</H2> - - <H4><A name="1.1">1.1</A>) Qu'est ce que PostgreSQL ? Comment - le prononcer ?</H4> - - <P>PostgreSQL se prononce <I>Post-Gres-Q-L</I>. Un fichier audio est - disponible sur <A - href="http://www.postgresql.org/postgresql.mp3">http://www.postgresql.org/postgresql.mp3</A> - pour ceux souhaitant entendre la prononciation.</P> - - <P>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 - <SMALL>SGBD</SMALL> 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 <SMALL>SQL</SMALL>. PostgreSQL est gratuit - et les sources complets sont disponibles.</P> - - <P> 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 (<A href= - "mailto:scrappy@PostgreSQL.org">scrappy@PostgreSQL.org</A> et voir - la section <a href="#1.6">1.6</a> 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 <A - href="http://www.postgresql.org/docs/faqs/FAQ_DEV.html">http://www.postgresql.org/docs/faqs/FAQ_DEV.html</A>.</P> - - <P>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.</P> - - <P>Le nom original du logiciel à Berkeley était Postgres. Quand le - <SMALL>SQL</SMALL> fut ajouté en 1995, le nom a dû être changé en - Postgres95. Fin 1996, le nom fut changé en PostgreSQL.</P> - - <H4><A name="1.2">1.2</A>) Quelle est la licence de PostgreSQL ?</H4> - - <P>PostgreSQL est distribué sous la licence suivante :</P> - - <P>PostgreSQL Data Base Management System</P> - - <P>Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group - Portions Copyright (c) 1994-6 Regents of the University of California</P> - - <P>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.</P> - - <P>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.</P> - - <P>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.</P> - - <P>La licence ci-dessus est la licence BSD, une licence open-source - classique.</P> - - <H4><A name="1.3">1.3</A>) Sous quels environnements Unix PostgreSQL tourne-t-il ?</H4> - - <P>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.</P> - - <H4><A name="1.4">1.4</A>) Sous quels environnements non Unix PostgreSQL fonctionne-t'il ?</H4> - - - <p>À 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 - <a href="http://pgfoundry.org/projects/pginstaller">http://pgfoundry.org/projects/pginstaller</a>.</p> - - <p>Il existe aussi un port sur Novell Netware sur - <a href="http://forge.novell.com">http://forge.novell.com</a>.</p> - - <H4><A name="1.5">1.5</A>) Où puis-je me procurer PostgreSQL ?</H4> - - <P>Le site FTP anonyme principal de PostgreSQL est <A href= - "ftp://ftp.PostgreSQL.org/pub">ftp://ftp.PostgreSQL.org/pub</A>. - Pour les sites miroirs, voir notre site web principal.</P> - - <H4><A name="1.6">1.6</A>) Où puis-je obtenir du support ?</H4> - - <P>La liste de diffusion principale est <A href= - "mailto:pgsql-general@PostgreSQL.org">pgsql-general@PostgreSQL.org</A>. - 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) :</P> -<PRE> - subscribe - end -</PRE> - - <P>à <A href= - "mailto:pgsql-general-request@PostgreSQL.org">pgsql-general-request@PostgreSQL.org</A>.</P> - - <P>Il existe aussi un recueil de la liste. Pour s'y inscrire, - envoyez un courriel à <A href= - "mailto:pgsql-general-digest-request@PostgreSQL.org">pgsql-general-digest-request@PostgreSQL.org</A> - avec dans le corps :</P> -<PRE> - subscribe - end -</PRE> - - Les recueils sont envoyés aux membres de cette liste dès que la - liste principale a reçu 30 Ko de messages. - - <P>Une liste de diffusion de bogues est disponible. Pour s'y inscrire, - envoyer un courriel à <A href= - "mailto:pgsql-bugs-request@PostgreSQL.org">pgsql-bugs-request@PostgreSQL.org</A> - avec dans le corps :</P> -<PRE> - subscribe - end -</PRE> - - Une liste de diffusion pour les développeurs est aussi disponible. Pour s'y - inscrire, envoyez un courriel à <A href= - "mailto:pgsql-hackers-request@PostgreSQL.org">pgsql-hackers-request@PostgreSQL.org</A> - avec dans le corps : -<PRE> - subscribe - end -</PRE> - - <P>Vous pouvez trouver d'autres listes et informations sur - PostgreSQL sur le site web de PostgreSQL :</P> - - <BLOCKQUOTE> - <p><A href="http://www.PostgreSQL.org">http://www.PostgreSQL.org</A></p> - </BLOCKQUOTE> - - <P>Il y a aussi un canal IRC sur Freenode et EFNet, le canal - <I>#PostgreSQL</I>. Vous pouvez utiliser la commande Unix - <CODE>irc -c '#PostgreSQL' "$USER" irc.phoenix.net</CODE> ou - <CODE>irc -c '#PostgreSQL' "$USER" irc.freenode.net</CODE>.</P> - - <P>Une liste de sociétés pouvant fournir un support commercial - est disponible sur <A href= - "http://techdocs.postgresql.org/companies.php">http://techdocs.postgresql.org/companies.php</A>.</P> - - <H4><A name="1.7">1.7</A>) Quelle est la dernière version ?</H4> - - <P>La dernière version de PostgreSQL est la version 7.4.5.</P> - - <P>Nous projetons de sortir une version majeure tous les six à huit - mois.</P> - - <H4><A name="1.8">1.8</A>) Quelle documentation est disponible ?</H4> - - <P>Plusieurs manuels, pages de manuel ainsi que des petits exemples de - test sont inclus dans la distribution. Voir le répertoire - <I>/doc</I>. Vous pouvez aussi accéder aux manuels en ligne sur <A href= - "http://www.PostgreSQL.org/docs">http://www.PostgreSQL.org/docs</A>.</P> - - <P>Deux livres sur PostgreSQL sont disponibles en ligne sur <A href= - "http://www.PostgreSQL.org/docs/awbook.html">http://www.PostgreSQL.org/docs/awbook.html</A> - et <A href= - "http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook/</A>. - Il y a une liste de livres sur PostgreSQL pouvant être achetés sur <A - href= - "http://techdocs.postgresql.org/techdocs/bookreviews.php">http://techdocs.PostgreSQL.org/techdocs/bookreviews.php</A>. - Il y a aussi une collection d'articles techniques sur PostgreSQL sur <A - href= - "http://techdocs.PostgreSQL.org/">http://techdocs.PostgreSQL.org/</A>.</P> - - <P><I>psql</I> possède des commandes \d pratiques montrant des - informations sur les types, opérateurs, fonctions, aggrégats, etc.</P> - - <P>Notre site web contient encore plus de documentations.</P> - - <H4><A name="1.9">1.9</A>) Comment savoir quels sont les bogues connus ou les fonctionnalités manquantes ?</H4> - - <P>PostgreSQL supporte un sous-ensemble étendu de <SMALL>SQL</SMALL>-92. - Voir notre liste <A href="http://www.postgresql.org/docs/faqs.TODO.html">TODO</A> - pour les bogues connus, les fonctionnalités manquantes et les - plans pour le futur.</P> - - <H4><A name="1.10">1.10</A>) Comment puis-je apprendre le <SMALL>SQL</SMALL> ?</H4> - - <P>Le livre PostgreSQL sur <A href= - "http://www.PostgreSQL.org/docs/awbook.html">http://www.PostgreSQL.org/docs/awbook.html</A> - enseigne le <SMALL>SQL</SMALL>. Il existe un autre livre PostgreSQL sur <A - href= - "http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook.</A> - Il existe de bons tutoriels sur <A href= - "http://www.intermedia.net/support/sql/sqltut.shtm">http://www.intermedia.net/support/sql/sqltut.shtm,</A> - <A href= - "http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM"> - http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM</A> - et <A href= - "http://sqlcourse.com/">http://sqlcourse.com.</A></P> - - <P>Un autre (en anglais uniquement) "Teach Yourself SQL in 21 Days, Second Edition" - se trouve sur <A href= - "http://members.tripod.com/er4ebus/sql/index.htm">http://members.tripod.com/er4ebus/sql/index.htm</A></P> - - <P>Nombre de nos utilisateurs aiment <I>The Practical SQL Handbook</I>, - Bowman, Judith S., et al., Addison-Wesley. D'autres aiment <I>The - Complete Reference SQL</I>, Groff et al., McGraw-Hill.</P> - - <H4><A name="1.11">1.11</A>) PostgreSQL est-il compatible an 2000 ?</H4> - - <P>Oui, nous manipulons facilement les dates après et avant l'an 2000.</P> - - <H4><A name="1.12">1.12</A>) Comment puis-je rejoindre l'équipe de développement ?</H4> - - <P>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 <I>pgsql-hackers</I> et <I>pgsql-patches</I>. Et pour finir, - soumettez des correctifs de grande qualité sur <i>pgsql-patches</i>.</P> - - <P>Environ une douzaine de personnes ont des droits de modification - sur l'archive <SMALL>CVS</SMALL> 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.</P> - - <H4><A name="1.13">1.13</A>) Comment dois-je soumettre un rapport de - bogue ?</H4> - - <P>Merci de visiter la page PostgreSQL BugTool sur <A href= - "http://www.PostgreSQL.org/bugs/bugs.php">http://www.PostgreSQL.org/bugs/bugs.php</A>, - qui donne des indications sur la façon de soumettre un rapport de bogue.</P> - - <P>De même, vérifiez notre site ftp <A href= - "ftp://ftp.PostgreSQL.org/pub">ftp://ftp.PostgreSQL.org/pub</A> pour - voir s'il existe une version PostgreSQL plus récente ou des - correctifs.</P> - - <H4><A name="1.14">1.14</A>) Comment PostgreSQL se compare-til à - d'autres <SMALL>SGBD</SMALL> ?</H4> - - <P>Il y a plusieurs manières de mesurer un logiciel : les fonctionnalités, - les performances, la fiabilité, le support, et le prix.</P> - - <DL> - <DT><B>Fonctionnalités</B></DT> - - <DD>PostgreSQL possède la plupart des fonctionnalités présentes - dans les <SMALL>SGBD</SMALL> 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.<BR> - <BR> - </DD> - - <DT><B>Performances</B></DT> - - <DD>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 <SMALL>SGBD</small> 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 - <I>Fonctionnalités</I> 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 <A - href="http://openacs.org/philosophy/why-not-mysql.html"> - http://openacs.org/philosophy/why-not-mysql.html</A>. 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.<BR> - - <BR> - </DD> - - <DT><B>Fiabilité</B></DT> - - <DD>Nous somme conscients qu'un <SMALL>SGBD</SMALL> 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.<BR> - <BR> - </DD> - - <DT><B>Support</B></DT> - - <DD>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 <SMALL>SGBD</SMALL> 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 <SMALL>SGBD</SMALL>. Un support commercial par - incident est disponible pour ceux qui en ont le besoin (voir - la <A - href="#1.6">section 1.6 de la FAQ</A>).<BR> - <BR> - </DD> - - <DT><B>Prix</B></DT> - - <DD>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.<BR> - <BR> - </DD> - </DL> - - <H4><A name="1.15">1.15</A>) Comment puis-je aider financièrement - PostgreSQL ?</H4> - - <P>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.</P> - - <P>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.</P> - - <P>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 <A - href="http://store.pgsql.com/shopping/">http://store.pgsql.com/shopping/</A> - et de faire une donation.</P> - - <P>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.</P> - <HR> - - <P>De plus, si vous avez une histoire de succès avec PostgreSQL, - merci de la soumettre à notre site d'évangélisation sur <a - href="http://advocacy.postgresql.org"> - http://advocacy.postgresql.org</a>.</P> - - - - <H2 align="center">Questions sur le client utilisateur</H2> - - <H4><A name="2.1">2.1</A>) Existe-t'il des pilotes <SMALL>ODBC</SMALL> pour - PostgreSQL ?</H4> - - <P>Il y a deux pilotes <SMALL>ODBC</SMALL> disponibles, PsqlODBC - et OpenLink <SMALL>ODBC</SMALL>.</P> - - <P>Vous pouvez télécharger PsqlOBDC depuis <A href= - "http://gborg.postgresql.org/project/psqlodbc/projdisplay.php"> - http://gborg.postgresql.org/project/psqlodbc/projdisplay.php</A>.</P> - - <P>OpenLink <SMALL>ODBC</SMALL> peut être obtenu depuis <A href= - "http://www.openlinksw.com/">http://www.openlinksw.com</A>. Il fonctionne - avec leur logiciel client <SMALL>ODBC</SMALL> standard, vous aurez - donc PostgreSQL <SMALL>ODBC</SMALL> sur toutes les plateformes - client qu'ils supportent (Win, Mac, Unix, VMS).</P> - - <P>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 à <A href= - "mailto:postgres95@openlink.co.uk">postgres95@openlink.co.uk</A>.</P> - - <H4><A name="2.2">2.2</A>) Quels outils sont disponibles pour utiliser - PostgreSQL avec des pages Web ?</H4> - - <P>Une bonne introduction aux pages Web adossés à une base de données se - trouve à <A href="http://www.webreview.com">http://www.webreview.com</A></P> - - <P>Pour l'intégration Web, PHP est une excellente interface. Elle se trouve à <A - href="http://www.php.net">http://www.php.net</A>.</P> - - <P>Pour les cas complexes, beaucoup utilisent l'interface Perl et CGI.pm ou mod_perl.</P> - - <H4><A name="2.3">2.3</A>) PostgreSQL a-t-il une interface graphique ?</H4> - - <P>Oui, il y a plusieurs interfaces graphiques disponibles pour PostgreSQL, - dont PgAccess <a href="http://www.pgaccess.org"> - http://www.pgaccess.org</a>), PgAdmin III (<a - href="http://www.pgadmin.org">http://www.pgadmin.org</a>), - RHDB Admin (<a - href="http://sources.redhat.com/rhdb/">http://sources.redhat.com/rhdb/ - </a> et Rekall (<a href="http://www.thekompany.com/products/rekall/"> - http://www.thekompany.com/products/rekall/</a>, propriétaire). Il y a - aussi PhpPgAdmin (<a href="http://phppgadmin.sourceforge.net/"> - http://phppgadmin.sourceforge.net/ </a>), une interface Web pour - PostgreSQL.</P> - - <P>Voir <a href="http://techdocs.postgresql.org/guides/GUITools">http://techdocs.postgresql.org/guides/GUITools</a> pour une liste plus détaillée.</P> - - <H4><A name="2.4">2.4</A>) Quels langages sont disponibles pour - communiquer avec PostgreSQL ?</H4> - - <P>La plupart des langages de programmation couramment utilisés ont - une interface pour PostgreSQL. Vérifiez la liste des modules de votre - langage.</P> - - <P>Les interfaces ci-dessous sont incluses dans la distribution :</P> - - <UL> - <LI>C (libpq)</LI> - - <LI>Embedded C (ecpg)</LI> - - <LI>Java (jdbc)</LI> - - <LI>Python (PyGreSQL)</LI> - - <LI>TCL (libpgtcl)</LI> - - </UL> - <P>Interfaces supplémentaires disponibles sur - <a href="http://gborg.postgresql.org">http://gborg.postgresql.org</A> - dans la section <I>Drivers/Interfaces</I> - </P> - <HR> - - <H2 align="center">Questions Administratives</H2> - - <H4><A name="3.1">3.1</A>) Comment installer PostgreSQL ailleurs que sous <I>/usr/local/pgsql</I> ?</H4> - - <P>Il faut spécifier l'option <I>--prefix</I> lors du lancement de <I>configure</I>.</P> - - <H4><A name="3.2">3.2</A>) Quand je lance <I>postmaster</I>, j'obtiens un <I>Bad System Call</I> ou un message <i>core dumped</i> . Pourquoi ?</H4> - - <P>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.</P> - - <H4><A name="3.3">3.3</A>) Quand je lance <I>postmaster</I>, j'obtiens des erreurs <I>IpcMemoryCreate</I>. Pourquoi ?</H4> - - <P>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 <I>postmaster</I>. 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 <A href= - "http://www.PostgreSQL.org/docs/view.php?version=current&idoc=1&file=kernel-resources.html">Administration - du manuel PostgreSQL</A> pour des informations plus détaillées sur la mémoire partagée et les sémaphores.</P> - - <H4><A name="3.4">3.4</A>) Quand je lance <I>postmaster</I>, j'obtiens des erreurs <I>IpcSemaphoreCreate</I>. Pourquoi ?</H4> - - <P>Si le message d'erreur est <I>IpcSemaphoreCreate: semget failed (No - space left on device)</I> 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 <I>postmaster</I> - avec une plus petite limite sur le nombre de processus serveur. Utilisez l'option - <I>-N</I> avec un paramètre inférieur au choix par défaut de 32. Une - solution permanente est d'augmenter les paramètres - <SMALL>SEMMNS</SMALL> et <SMALL>SEMMNI</SMALL> de votre noyau.</P> - - <P>Des sémaphores inopérantes peuvent aussi provoquer des plantages pendant de gros accès à la base de données.</P> - - <P>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 <A href= - "http://www.PostgreSQL.org/docs/view.php?version=current&idoc=1&file=kernel-resources.html">Administration - du manuel PostgreSQL</A> pour des informations plus détaillées sur la mémoire partagée et les sémaphores.</P> - - <H4><A name="3.5">3.5</A>) Comment contrôler les connexions d'autres machines ?</H4> - - <p>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 <i>$PGDATA/pg_hba.conf</i> en accord.</p> - - <H4><A name="3.6">3.6</A>) Comment régler le moteur de la base de données pour de meilleures performances ?</H4> - - <P>Des index accéléreront les requêtes. La commande - <SMALL>EXPLAIN ANALYZE</SMALL> vous permet de voir comment PostgreSQL traite - votre requête et quels index sont utilisés.</P> - - <P>Si vous faites beaucoup d'insertions (instruction <SMALL>INSERT</SMALL>), - envisagez de les faire en une fois en utilisant la commande <SMALL>COPY</SMALL>. Ceci - est plus rapide que des commandes <SMALL>INSERTS</SMALL> individuelles. Deuxièment, - les requêtes qui ne sont pas dans des blocs de transaction <SMALL>BEGIN WORK/COMMIT</SMALL> - 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.</P> - - <P>Il y a plusieurs options d'optimisations. Vous pouvez désactiver - <I>fsync()</I> en lançant <I>postmaster</I> avec l'option <I>-o -F</I>. - Ceci empêchera les <I>fsync()</I>s d'écrire sur disque après toute - transaction.</P> - - <P>Vous pouvez utiliser l'option <I>-B</I> de <I>postmaster</I> 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, - <I>postmaster</I> 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.</P> - - <P>Vous pouvez utiliser l'option serveur <I>-S</I> pour augmenter la - quantité maximale de mémoire utilisée par les processus serveurs pour des - tris temporaires. La valeur de <I>-S</I> est mesuré en kilooctets et le - choix par défaut est de 512 (c'est-à-dire 512 Ko).</P> - - <P>Vous pouvez utiliser la commande <SMALL>CLUSTER</SMALL> pour regrouper - vos données en tables pour correspondre à un index. Voir la page de manual - <SMALL>CLUSTER</SMALL> pour plus de détails.</P> - - <H4><A name="3.7">3.7</A>) Quelles fonctionalités de déboguage sont disponibles ?</H4> - - <P>PostgreSQL a plusieurs fonctionalités qui permettent de recueillir des - informations de statut qui peuvent être utile pour des intentions de - déboguage.</P> - - <P>D'abord, en lançant <I>configure</I> avec l'option --enable-cassert, - beaucoup d'<I>assert()</I>s surveillent le serveur et arrêtent le programme - quand quelque chose d'inattendu arrive.</P> - - <P><I>Postmaster</I> et <I>postgres</I> ont tous deux plusieurs options de - déboguage de disponible. D'abord, quand vous lancez <I>postmaster</I>, - vérifiez que vous envoyez les sorties standard et d'erreur dans un fichier - de traces comme :</P> -<PRE> - cd /usr/local/pgsql - ./bin/postmaster >server.log 2>&1 & -</PRE> - - <P>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. <I>Postmaster</I> dispose d'une - option <I>-d</I> qui permet de rapporter des informations encore plus - détaillées d'être rapportées. L'option <I>-d</I> 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.</P> - - <P>Si <I>postmaster</I> ne tourne pas, vous pouvez lancer le serveur - <I>postgres</I> de la ligne de commande et taper votre requête - <SMALL>SQL</SMALL> directement. Ceci est recommandé <B>seulement</B> 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 <I>postmaster</I>, il ne tourne pas dans un environnement - identique et les problèmes d'interaction de verrouillage/serveur ne peuvent - être dupliqués.</P> - - <P>Si <I>postmaster</I> est en train de tourner, lancez <I>psql</I> dans - une fenêtre puis trouvez le <SMALL>PID</SMALL> du processus <I>postgres</I> - utilisé par <I>psql</I>. Utilisez un débogueur pour l'attacher au - <SMALL>PID</SMALL> <I>postgres</I>. Vous pouvez mettre un point d'arrêt - dans le débogueur et envoyez des requêtes de <I>psql</I>. Si vous déboguez - le démarrage de <I>postgres</I>, vous pouvez mettre PGOPTIONS="-W n", puis - lancez <I>psql</I>. Ceci va retarder le démarrage de <I>n</I> 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.</P> - - <P>Le programme <I>postgres</I> a les options <I>-s, -A</I> et <I>-t</I> - qui peuvent être utile pour des mesures de déboguage et de performance.</P> - - <P>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 <I>pgsql/data/base/nom_db</I>. Les - fichiers de gestion clients seront mis dans le répertoire actuel du client. - Linux requiert une compilation avec <I>-DLINUX_PROFILE</I> pour une - meilleure gestion.</P> - - <H4><A name="3.8">3.8</A>) Pourquoi est-ce que j'obtiens des messages <I>Sorry, too many clients</I> quand je me connecte ?</H4> - - <P>Vous pouvez augmenter la limite de <I>postmaster</I> sur le nombre de - processus serveur concurrents qu'il peut lancer.</P> - - <P>La limite par défaut est de 32 processus. Vous pouvez l'augmenter en - relançant <I>postmaster</I> avec une valeur <I>-N</I> appropriée ou - en modifiant <I>postgresql.conf</I>.</P> - - <P>Tenez compte du fait que si vous fixez <I>-N</I> plus grand que 32, vous - devez aussi augmenter <I>-B</I> au-dela de sa valeur par défaut 64 ; - <I>-B</I> doit valoir au moins deux fois <I>-N</I> 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, <SMALL>SHMMAX</SMALL> ; le nombre maximal de - sémaphores, <SMALL>SEMMNS</SMALL> et <SMALL>SEMMNI</SMALL> ; le - nombre maximal de processus, <SMALL>NPROC</SMALL> ; le nombre maximal - de processus par utilisateur, <SMALL>MAXUPRC</SMALL> ; et le nombre - maximal de fichiers ouverts, <SMALL>NFILE</SMALL> et <SMALL>NINODE</SMALL>. - 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.</P> - - <H4><A name="3.9">3.9</A>) Que contient le répertoire <I>pgsql_tmp</I> ?</H4> - - <P>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 - <SMALL>ORDER BY</SMALL> et que ce tri requiert plus de place que le paramètre - <I>-S</I> du serveur n'autorise, alors des fichiers temporaires seront créés - pour contenir les données nécessaires.</P> - - <P>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 <I>postmaster</I> effacera les fichiers dans ces - répertoires.</P> - - <H4><A name="3.10">3.10</A>) Pourquoi est-ce que j'ai besoin de faire une - sauvegarde des bases et de restaurer pour mettre a jour les versions de - PostgreSQL ?</H4> - - <P>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.</P> - - <P>Dans les sorties où le format sur disque ne change pas, le script - <I>pg_upgrade</I> peut être utilisé pour mettre à jour sans - sauvegarde/restauration. Les notes de sorties précisent si <I>pg_upgrade</I> - est disponible pour la sortie.</P> - - <H4><A name="3.11">3.11</A>) Quels matériels dois-je utiliser ?</H4> - - <P>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.</P> - - <HR> - - <H2 align="center">Questions fonctionnelles</H2> - - <H4><A name="4.1">4.1</A>) Quelle est la différence entre curseur binaire - et curseur normal ?</H4> - - <P>Voir la page <SMALL>DECLARE</SMALL> du manuel pour une description.</P> - - <H4><A name="4.2">4.2</A>) Comment faire un <SMALL>SELECT</SMALL> seulement - sur les premières lignes d'une requête ? Sur une ligne aléatoire ?</H4> - - <P>Voir la page <SMALL>FETCH</SMALL> du manuel ou utiliser - <SMALL>SELECT</SMALL> ... <SMALL>LIMIT</SMALL>....</P> - - <P>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 <SMALL>ORDER - BY</SMALL>. S'il existe un index correspondant à l'<SMALL>ORDER - BY</SMALL>, 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.</P> - - <P>Pour faire un <SMALL>SELECT</SMALL> sur une ligne aléatoire :</P> -<PRE> - SELECT colonne - FROM table - ORDER BY random() - LIMIT 1; -</PRE> - - <H4><A name="4.3">4.3</A>) Comment obtenir une liste des tables ou - d'autres objets que je vois dans <I>psql</I> ?</H4> - - <P>Utilisez la commande \dt pour voir les tables dans <I>psql</I>. Pour - une liste complète de commandes à l'intérieur de psql, vous pouvez utiliser - \?. Autrement, vous pouvez lire le code source de <I>psql</I> dans le fichier - <I>pgsql/src/bin/psql/describe.c</I>. Il contient des commandes - <SMALL>SQL</SMALL> qui génèrent le contenu des commandes anti-slash de - psql. Vous pouvez aussi lancer <I>psql</I> avec l'option - <I>-E</I>, 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 <I>SQLi</I> que vous pouvez - interroger des informations sur la base de données.</P> - - <H4><A name="4.4">4.4</A>) Comment supprime-t-on une colonne d'une table, - ou comment change-t-on son type de données ?</H4> - - <P>La fonction <SMALL>DROP COLUMN</SMALL> a été ajoutée dans la version 7.3 - avec <SMALL>ALTER TABLE DROP COLUMN</SMALL>. Pour les versions précédentes, - vous pouvez faire :</P> -<PRE> - 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; -</PRE> - - <P>Pour changer le type de données d'une colonne, faites :</P> - -<PRE> - BEGIN; - ALTER TABLE table ADD COLUMN nouvelle_colonne <i>nouveau_type_de_donnees</i>; - UPDATE table SET nouvelle_colonne = CAST(ancienne_colonne AS <i>nouveau_type_de_donnees</i>); - ALTER TABLE table DROP COLUMN ancienne_colonne; - COMMIT; -</PRE> - - <P>Après, vous pouvez faire <I>VACUUM FULL tab</I> pour récupérer l'espace - disque utilisé par les lignes expirées.</P> - - <H4><A name="4.5">4.5</A>) Quelle est la taille maximale pour une ligne, - une table, une base de données ?</H4> - - <P>Les limites sont :</P> -<PRE> - Taille maximum pour une base de données illimitée (il existe des bases de 32 To) - Taille maximum pour une table 32 To - Taille maximum pour une ligne 1,6 To - Taille maximum pour un champ 1 Go - Nombre maximum de lignes dans une table illimité - Nombre maximum de colonnes dans une table 250-1600, selon le type de colonnes - Nombre maximum d'index sur une table illimité -</PRE> - - <P>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.</P> - - <P>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.</P> - - <P>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.</P> - - <H4><A name="4.6">4.6</A>) Combien d'espace disque faut-il pour stocker - les données d'un fichier texte typique ?</H4> - - <P>Une base de données PostgreSQL peut utiliser jusqu'à cinq fois - l'espace nécessaire pour stocker les données d'un fichier texte.</P> - - <P>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 :</P> -<PRE> - 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) -</PRE> - - <P>Les index utilisent moins d'espace, mais ils contiennent les données indexées, - ils peuvent donc également être grands.</P> - - <P>Les <SMALL>NULL</SMALL> sont stockés sous forme de bitmap, aussi - utilisent-ils très peu d'espace.</P> - - <H4><A name="4.7">4.7</A>) Comment puis-je savoir quels index, tables, - bases de données et utilisateurs sont définis ?</H4> - - <P><I>psql</I> 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 <I>pg_</I> et qui les - décrivent également. Aussi, <I>psql -l</I> liste toutes les bases de - données.</P> - - <P>Essayez également le fichier <I>pgsql/src/tutorial/syscat.source</I>. Il - illustre un grand nombre de commandes <SMALL>SELECT</SMALL> nécessaires pour - récupérer l'information des tables système de la base de données.</P> - - <H4><A name="4.8">4.8</A>) Mes requêtes sont lentes ou ne font pas usage - des index. Pourquoi ?</H4> - - <P>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</P> - - <P>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 - <SMALL>VACUUM ANALYZE</SMALL> ou simplement <SMALL>ANALYZE</SMALL>. - 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.</P> - - <P>Les index ne sont normalement pas utilisés pour les clauses <SMALL>ORDER BY</SMALL> - 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, <SMALL>LIMIT</SMALL> combiné avec <SMALL>ORDER BY</SMALL> - 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 :</P> - -<PRE> - SELECT colonne - FROM table - ORDER BY colonne [ DESC ] - LIMIT 1; -</PRE> - - <P>Si vous pensez que l'optimiseur choisit par erreur un parcours sequentiel, - utilisez <CODE>SET enable_seqscan TO 'off'</CODE> et - lancez des tests pour voir si le parcours d'index est effectivement plus rapide.</P> - - <P>Lorsque vous utilisez des caractères joker tels que <SMALL>LIKE</SMALL> ou - <I>~</I>, les index peuvent seulement être utilisés dans certaines circonstances :</P> - <UL> - <LI>Le début de la chaîne de recherche doit être ancré au départ de la chaîne, c'est-à-dire - <UL> - <LI>Les modèles pour <SMALL>LIKE</SMALL> ne doivent pas commencer par <I>%</I>.</LI> - <LI>Les modèles d'expression régulière pour <I>~</I> doivent commencer par - <I>^</I>.</LI> - </UL></LI> - <LI>La chaîne de recherche ne peut pas commencer par une classe de caractères, c'est-à-dire - [a-e].</LI> - <LI>Les recherches sans casse comme <SMALL>ILIKE</SMALL> et - <I>~*</I> n'utilisent pas les index. Utilisez plutôt les index fonctionnels, - décrit dans la section <a href="#4.12">4.12</a>.</LI> - <LI>La locale <I>C</I> par défaut doit être utilisée lors de - <i>initdb</i>.</LI> - </UL> - - <p>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.</p> - - <H4><A name="4.9">4.9</A>) Comment puis-je savoir si l'optimiseur évalue - mes requêtes ?</H4> - - <P>Voir la page <SMALL>EXPLAIN</SMALL> du manuel.</P> - - <H4><A name="4.10">4.10</A>) Qu'est-ce qu'un index R-tree ?</H4> - - <P>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 <I>point</I>, - le système peut plus efficacement gérer les requêtes du type - "Sélection de tous les points d'un rectangle".</P> - - <P>L'article de référence qui décrit le système R-tree original est :</P> - - <P>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.</P> - - <P>Vous pouvez également trouver ce papier dans le livre de Stonebraker - "Readings in Database Systems".</P> - - <P>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.</P> - - <H4><A name="4.11">4.11</A>) Qu'est-ce que l'optimiseur génétique de - requêtes ?</H4> - - <P>Le module <SMALL>GEQO</SMALL> (acronyme de <i>GEnetic Query - Optimizer</i>) 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.</P> - - <H4><A name="4.12">4.12</A>) 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 ?</H4> - - <P>L'opérateur <I>~</I> réalise des recherches d'expressions rationnelles - et <I>~*</I> le fait sans tenir compte de la casse. La variante de - <SMALL>LIKE</SMALL> non sensible à la casse est - <SMALL>ILIKE</SMALL>.</P> - - <P>Des comparaisons d'égalité non sensibles à la casse sont habituellement - exprimées de cette façon :</P> -<PRE> - SELECT * - FROM table - WHERE lower(colonne) = 'abc'; -</PRE> - - <P>Ceci n'utilisera pas un index standard. Néanmoins, si vous créez un index - fonctionnel, celui-ci sera utilisé :</P> -<PRE> - CREATE INDEX tableindex ON table (lower(colonne)); -</PRE> - - <H4><A name="4.13">4.13</A>) Comment puis-je détecter si un champ est - <SMALL>NULL</SMALL> dans une requête ?</H4> - - <P>Il vous suffit de tester la colonne avec <SMALL>IS NULL</SMALL> ou <SMALL>IS - NOT NULL</SMALL>.</P> - - <H4><A name="4.14">4.14</A>) Quelle sont les différences entre les nombreux - types de caractères ?</H4> -<PRE> -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 -</PRE> - - <P>Vous verrez le nom interne en examinant les catalogues système et dans - quelques messages d'erreur.</P> - - <P>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 - <SMALL>TOAST</SMALL>, donc l'espace occupé sur disque pourrait aussi être - moindre que ce qu'on pourrait attendre.</P> - - <P><SMALL>VARCHAR(n)</SMALL> est bien mieux pour enregistrer des chaînes de - longueurs variables tout en limitant la taille de cette chaîne. - <SMALL>TEXT</SMALL> est utile pour les chaînes de longueur illimitée, avec - malgré tout un maximum de 1 Go.</P> - - <P><SMALL>CHAR(n)</SMALL> est intéressant pour stocker des chaînes de taille - identique. <SMALL>CHAR(n)</SMALL> complète avec des espaces pour arriver à - la taille spécifiée alors que <SMALL>VARCHAR(n)</SMALL> n'enregistre que les - caractères donnés. <SMALL>BYTEA</SMALL> sert à stocker des données binaires, - particulièrement les données incluant des octets <SMALL>NULL</SMALL>. Tous - les types décrits ici ont des performances similaires.</P> - - <H4><A name="4.15.1">4.15.1</A>) Comment puis-je créer un champ série, - c'est-à-dire s'incrémentant automatiquement ?</H4> - - <P>PostgreSQL supporte un type de données <SMALL>SERIAL</SMALL>. Il crée - automatiquement une séquence. Par exemple, - ceci :</P> -<PRE> - CREATE TABLE personne ( - id SERIAL, - nom TEXT - ); -</PRE> - - est automatiquement traduit en ceci : -<PRE> - CREATE SEQUENCE personne_id_seq; - CREATE TABLE personne ( - id INT4 NOT NULL DEFAULT nextval('personne_id_seq'), - nom TEXT - ); -</PRE> - - Voir la page man de <I>create_sequence</I> pour plus d'informations - sur les séquences. Vous pouvez aussi utiliser le champ <I>OID</I> 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 - <I>-o</I> ou l'option <SMALL>COPY WITH OIDS</SMALL> de - <I>pg_dump</I> pour conserver les <SMALL>OID</SMALL>s. - - <H4><A name="4.15.2">4.15.2</A>) Comment puis-je obtenir la valeur d'un - <SMALL>SERIAL</SMALL> suite à une insertion ?</H4> - - <P>Une approche pour récupérer la prochaine valeur <SMALL>SERIAL</SMALL> à - partir de l'objet séquence est d'utiliser la fonction <I>nextval()</I> - <I>avant</I> l'insertion et de l'insérer ensuite explicitement. En utilisant - la table d'exemple de la section <A href="#4.15.1">4.15.1</A>, un exemple - dans un pseudo-langage ressemblerait à ceci :</P> -<PRE> - nouvelle_id = execute("SELECT nextval('personne_id_seq')"); - execute("INSERT INTO personne (id, nom) VALUES (nouvelle_id, 'Blaise Pascal')"); -</PRE> - - Vous pourriez ensuite utiliser la nouvelle valeur stockée dans - <CODE>nouvelle_id</CODE> avec d'autres requêtes (c'est-à-dire en tant que - clé étrangère de la table <CODE>personne</CODE>). Notez que le nom de la - <SMALL>SEQUENCE</SMALL> automatiquement créée sera - <<I>table</I>>_<<I>colonneserial</I>>_<I>seq</I>, où - <I>table</I> et <I>colonneserial</I> sont les noms respectifs de votre table - et de votre colonne <SMALL>SERIAL</SMALL>. - - <P>Autrement, vous pouvez récupérer la valeur <SMALL>SERIAL</SMALL> affectée - avec la fonction <I>currval()</I> <I>après</I> qu'elle ait été insérée par - défaut, c'est-à-dire,</P> -<PRE> - execute("INSERT INTO personne (nom) VALUES ('Blaise Pascal')"); - nouvelle_id = execute("SELECT currval('personne_id_seq')"); -</PRE> - - Enfin, vous pouvez utiliser l'<A href="#4.16"><SMALL>OID</SMALL></A> renvoyé - par l'instruction <SMALL>INSERT</SMALL> 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 - <I>$sth->{pg_oid_status}</I> après un <I>$sth->execute()</I>. - - <H4><A name="4.15.3">4.15.3</A>) Est-ce que <I>currval()</I> et - <I>nextval()</I> n'amènent pas des problèmes lorsque plusieurs utilisateurs - les lancent en même temps ?</H4> - - <P>Non. <I>currval()</I> renvoie la valeur actuelle affectée par votre - processus, et non pas par tous les utilisateurs.</P> - - <H4><A name="4.15.4">4.15.4</A>) 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) ?</H4> - - <P>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.</P> - - <H4><A name="4.16">4.16</A>) Qu'est-ce qu'un <SMALL>OID</SMALL> ? - Qu'est-ce qu'un <SMALL>TID</SMALL> ?</H4> - - <P>Les <SMALL>OID</SMALL> sont la réponse de PostgreSQL aux identifiants de - lignes uniques. Chaque ligne créée dans PostgreSQL obtient un - <SMALL>OID</SMALL> unique. Tous les <SMALL>OID</SMALL> générés pendant - <I>initdb</I> sont inférieurs à 16384 (voir <I>include/access/transam.h</I>). - Tous les <SMALL>OID</SMALL> créés par un utilisateur sont supérieurs ou - égaux à ceci. Par défaut, tous ces <SMALL>OID</SMALL> sont uniques non - seulement dans une table ou une base mais unique à l'intérieur d'une - installation PostgreSQL entière.</P> - - <P>PostgreSQL utilise les <SMALL>OID</SMALL> dans ses tables système interne - pour lier les lignes entre tables. Ces <SMALL>OID</SMALL> 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 - <SMALL>OID</SMALL> pour stocker des valeurs <SMALL>OID</SMALL>. - Vous pouvez créer un index sur le champ <SMALL>OID</SMALL> pour un accès - plus rapide.</P> - - <P>Les <SMALL>OID</SMALL> 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'<SMALL>OID</SMALL> en quelque chose d'autre ou si vous voulez - faire une copie de la table avec les <SMALL>OID</SMALL> originaux, il - n'y a pas de raisons pour ne pas le faire :</P> -<PRE> - 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; -</PRE> - - <P>Les <SMALL>OID</SMALL> 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.</P> - - <P>Les <SMALL>TID</SMALL>s sont utilisés pour identifier des lignes - physiques spécifiques avec des valeurs de bloc et décalage. Les - <SMALL>TID</SMALL> 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.</P> - - <H4><A name="4.17">4.17</A>) A quoi correspond certains termes utilisés avec - PostgreSQL ?</H4> - - <P>Une partie du code source et de l'ancienne documentation utilisent des - termes dont l'usage est plus commun. Voici quelques exemples :</P> - - <UL> - <LI>table, relation, classe</LI> - <LI>ligne (row), enregistrement (record), tuple</LI> - <LI>colonne (column), champ (field), attribut</LI> - <LI>récupère, sélectionne (select)</LI> - <LI>remplace (replace), met à jour (update)</LI> - <LI>ajoute (append), insère (insert)</LI> - <LI><SMALL>OID</SMALL>, valeur séquentielle (serial value)</LI> - <LI>portal, curseur</LI> - <LI>range variable, table name, table alias</LI> - </UL> - - <P>Une liste des termes généraux pour le domaine des bases de données est - disponible sur : <A href= - "http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.html">http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.html</A></P> - - <H4><A name="4.18">4.18</A>) Pourquoi ai-je l'erreur <I>ERROR: - Memory exhausted in AllocSetAlloc()</I> ?</H4> - - <P>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 <I>postmaster</I> :</P> -<PRE> - ulimit -d 262144 - limit datasize 256m -</PRE> - - 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 - <SMALL>SQL</SMALL> parce que le processus serveur renvoie trop de données, - essayez ça avant de lancer le client. - - <H4><A name="4.19">4.19</A>) Comment puis-je connaître la version de - PostgreSQL que j'utilise ?</H4> - - <P>A partir de <I>psql</I>, tapez <CODE>SELECT version();</CODE></P> - - <H4><A name="4.20">4.20</A>) Pourquoi ai-je <I>invalid large obj - descriptor</I> lors d'opérations sur des gros objects ?</H4> - - <P>Vous avez besoin de placer <CODE>BEGIN WORK</CODE> et <CODE>COMMIT</CODE> - autour de chaque utilisateur de gros objets, c'est-à-dire pour entourer - <CODE>lo_open</CODE> ... <CODE>lo_close.</CODE></P> - - <P>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 - <I>invalid large obj descriptor</I>. 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.</P> - - <P>Si vous utilisez une interface client interface comme - <SMALL>ODBC</SMALL>, vous aurez peut-être besoin de lancer - <CODE>auto-commit off.</CODE></P> - - <H4><A name="4.21">4.21</A>) Comment puis-je créer une colonne qui aura par - défaut l'heure actuelle comme valeur ?</H4> - - <P>Utilisez <I>CURRENT_TIMESTAMP</I>:</P> -<PRE> -<CODE>CREATE TABLE test (x int, heuremodif timestamp DEFAULT CURRENT_TIMESTAMP ); -</CODE> -</PRE> - - <H4><A name="4.22">4.22</A>) Pourquoi mes sous-requêtes utilisant - <CODE><SMALL>IN</SMALL></CODE> sont-elles si lentes ?</H4> - - <P>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, - <CODE><SMALL>IN</SMALL></CODE> sera plus rapide. Pour accélérer les autres - requêtes, remplacez <CODE>IN</CODE> avec <CODE>EXISTS</CODE> :</P> -<PRE> SELECT * - FROM table - WHERE colonne IN (SELECT souscolonne FROM soustable); -</PRE> - to: -<PRE> SELECT * - FROM table - WHERE EXISTS (SELECT souscolonne FROM soustable WHERE souscolonne = colonne); -</PRE> - - Pour que ceci soit rapide, <CODE>souscolonne</CODE> doit être une colonne - indexée. - - <P>A partir de la version 7.4, <CODE>IN</CODE> utilise actuellement les mêmes - techniques sophistiquées de jointures comme des requêtes normales et est - préféré à l'utilisation de <CODE>EXISTS</CODE>.</P> - - <H4><A name="4.23">4.23</A>) Comment puis-je réaliser une jointure - externe ?</H4> - - <P>PostgreSQL supporte les jointures externes en utilisant la syntaxe SQL - standard. Voici deux exemples :</P> -<PRE> - SELECT * - FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col); -</PRE> - or -<PRE> - SELECT * - FROM t1 LEFT OUTER JOIN t2 USING (col); -</PRE> - - <P>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 (<SMALL>RIGHT join</SMALL>) ajoutera les lignes non jointes de t2. - Une jointure complète (<SMALL>FULL join</SMALL>) renverra les lignes - correspondantes ainsi que les lignes non jointes de t1 et t2. Le mot clé - <SMALL>OUTER</SMALL> est optionnelle et assumé dans le cas de jointure - <SMALL>LEFT</SMALL>, <SMALL>RIGHT</SMALL> et <SMALL>FULL</SMALL>. Les - jointures ordinaires sont appelées des jointures <SMALL>INNER</SMALL>.</P> - - <P>Lors des précédentes versions, les jointures externes peuvent être - simulées en utilisant <SMALL>UNION</SMALL> et <SMALL>NOT IN</SMALL>. Par - exemple, lors d'une jointure de <I>tab1</I> et <I>tab2</I>, la requête - suivante réalise une jointure externe, <I>outer</I>, des deux tables :<BR> - <BR> - </P> -<PRE> - 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 -</PRE> - - <H4><A name="4.24">4.24</A>) Comment puis-je lancer des requêtes utilisant - plusieurs bases de données ?</H4> - - <P>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.</P> - - <P><I>contrib/dblink</I> 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.</P> - - <H4><A name="4.25">4.25</A>) Comment puis-je renvoyer plusieurs lignes ou - colonnes à partir d'une fonction?</H4> - - <P>A partir de la 7.3, vous pouvez facilement renvoyer plusieurs lignes ou - colonnes à partir d'une fonction, - <a href="http://techdocs.postgresql.org/guides/SetReturningFunctions"> - http://techdocs.postgresql.org/guides/SetReturningFunctions</a>.</P> - - <H4><A name="4.26">4.26</A>) Pourquoi ne puis-je pas créer/supprimer des - tables temporaires dans les fonctions PL/PgSQL de façon stable ?</H4> - <P>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 - <SMALL>EXECUTE</SMALL> pour l'accès aux tables temporaires avec PL/PgSQL. - Ceci obligera l'analyse de la requête à chaque fois.</P> - - <H4><A name="4.27">4.27</A>) Quelles options de cryptage sont - disponibles ? - </H4> - <UL> - <LI><I>contrib/pgcrypto</I> contient de nombreuses fonctions de cryptage, à - utiliser dans des requêtes <SMALL>SQL</SMALL>.</LI> - <LI>Pour crypter une transmission entre le client et le serveur, le serveur - doit avoir positionné l'option <I>ssl</I> à <I>true</I> dans <I>postgresql.conf, - </I> et un enregistrement applicable <I>host</I> ou <I>hostssl</I> doit - exister dans <I>pg_hba.conf</I>, et le <I>sslmode</I> du client ne doit pas - être <I>désactivée</I>. 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.</LI> - <LI>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 - <I>PASSWORD_ENCRYPTION</I> dans <I>postgresql.conf</I>.</LI> - <LI>Le serveur peut fonctionner avec un système de fichiers cryptés.</LI> - </UL> - - <HR> - - <H2 align="center">Etendre PostgreSQL</H2> - - <H4><A name="5.1">5.1</A>) J'ai écrit une fonction utilisateur. Lorsque je l'exécute avec - <I>psql</I>, pourquoi cela finit-il avec un <I>dump core</I> ?</H4> - - <P>Il peut y avoir plusieurs raisons. Essayez tout d'abord votre fonction utilisateur - dans un programme de test.</P> - - <H4><A name="5.2">5.2</A>) Comment puis-je ajouter de bons nouveaux - types ou fonctions à PostgreSQL ?</H4> - - <P>Envoyez vos extensions à la liste de diffusion <I>pgsql-hackers</I>, - elles atterriront éventuellement dans le sous-répertoire <I>contrib/</I>.</P> - - <H4><A name="5.3">5.3</A>) Comment faire pour écrire une fonction C - qui renvoie un tuple ?</H4> - - <P>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 à - <I>contrib/tablefunc</I>.</P> - - <H4><A name="5.4">5.4</A>) J'ai modifié un fichier source. Pourquoi - ma recompilation ne voit-elle pas les modifications ?</H4> - - <P>Les <I>Makefiles</I> n'ont pas les dépendances adéquates pour les - fichiers d'en-tête. Il vous faut faire <I>make clean</I> puis un autre - <I>make</I>. Si vous utilisez <SMALL>GCC</SMALL>, vous pouvez utiliser - l'option <I>--enable-depend</I> de <I>configure</I> pour que le - compilateur calcule les dépendances automatiquement.</P> - </BODY> -</HTML> - diff --git a/doc/src/FAQ/FAQ_german.html b/doc/src/FAQ/FAQ_german.html deleted file mode 100644 index bd3f86895644e9ec507b1a2ef333c4fbb7b1f721..0000000000000000000000000000000000000000 --- a/doc/src/FAQ/FAQ_german.html +++ /dev/null @@ -1,1067 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> -<title>PostgreSQL FAQ</title> -</head> -<body bgcolor="#FFFFFF" text="#000000" link="#FF0000" vlink="#A00000" alink="#0000FF"> - - <h1>Häufig gestellte Fragen (FAQ) zu PostgreSQL</h1> - - <p>Current maintainer: Bruce Momjian (<a href="mailto:bruce@momjian.us">bruce@momjian.us</a>).</p> - - <p>Deutsche Ãœbersetzung von Ian Barwick (<a href="mailto:barwick@gmail.com">barwick@gmail.com</a>).</p> - - <p>Letzte Aktualisierung der deutschen Ãœbersetzung: Fr., den 19.10.2007, 17:00 MEZ</p> - - <p>Die aktuellste Version dieses Dokuments liegt auf der PostgreSQL-Website:</p> - <ul> - <li><a href="http://www.postgresql.org/docs/faqs.FAQ.html">http://www.postgresql.org/docs/faqs.FAQ.html</a> (engl.)</li> - <li><a href="http://www.postgresql.org/docs/faqs.FAQ_german.html">http://www.postgresql.org/docs/faqs.FAQ_german.html</a> (dt.)</li> - </ul> - <p>Ãœbersetzungen dieses Dokuments in anderen Sprachen sowie plattform- - spezifische FAQs können unter - <a href="http://www.postgresql.org/docs/faq/">http://www.postgresql.org/docs/faq/</a> - eingesehen werden.</p> - -<hr /> - -<h2 align="center">Allgemeine Fragen</h2> - -<a href="#1.1">1.1</a>) Was ist PostgreSQL? Wie wird es ausgesprochen?<br /> -<a href="#1.2">1.2</a>) Wer kontrolliert PostgreSQL?<br /> -<a href="#1.3">1.3</a>) Welchem Copyright unterliegt PostgreSQL?<br /> -<a href="#1.4">1.4</a>) Auf welchen Plattformen läuft PostgreSQL?<br /> -<a href="#1.5">1.5</a>) Woher bekomme ich PostgreSQL?<br /> -<a href="#1.6">1.6</a>) Was ist die neueste Version von PostgreSQL?<br /> -<a href="#1.7">1.7</a>) Wo bekomme ich Support für PostgreSQL?<br /> -<a href="#1.8">1.8</a>) Wie kann ich einen Fehlerbericht abgeben?<br /> -<a href="#1.9">1.9</a>) Wie erfahre ich von bekannten Bugs oder fehlenden Features?<br /> -<a href="#1.10">1.10</a>) Welche Dokumentation ist für PostgreSQL verfügbar?<br /> -<a href="#1.11">1.11</a>) Wie kann ich SQL lernen?<br /> -<a href="#1.12">1.12</a>) Wie kann ich im Entwicklerteam mitarbeiten?<br /> -<a href="#1.13">1.13</a>) Wie läuft PostgreSQL im Vergleich zu anderen Datenbanksystemen?<br /> -<a href="#1.14">1.14</a>) Kommt PostgreSQL mit den Anpassungen der Sommerzeit in verschiedenen Ländern klar?<br /> - -<h2 align="center">Fragen zu Benutzerprogrammen</h2> - -<a href="#2.1">2.1</a>) Welche Schnittstellen gibt es für PostgreSQL?<br /> - -<a href="#2.2">2.2</a>) Wie kann man PostgreSQL mit einer Website nutzen?<br /> -<a href="#2.3">2.3</a>) Hat PostgreSQL eine grafische Benutzerschnittstelle?<br /> - -<h2 align="center">Administrative Fragen</h2> - -<a href="#3.1">3.1</a>) Wie installiere ich PostgreSQL woanders als in /usr/local/pgsql?<br /> -<a href="#3.2">3.2</a>) Wie regle ich Zugriffe von anderen Rechnern?<br /> -<a href="#3.3">3.3</a>) Wie kann ich eine bessere Performanz erreichen?<br /> -<a href="#3.4">3.4</a>) Welche Debugging-Funktionen sind für PostgreSQL verfügbar?<br /> -<a href="#3.5">3.5</a>) Ich bekomme die Meldung "<em>Sorry, too many clients</em>", wenn ich eine Verbindung aufzubauen versuche. Warum?<br /> -<a href="#3.6">3.6</a>) Wie wird PostgreSQL aktualisiert?<br /> -<a href="#3.7">3.7</a>) Welche Hardware eignet sich für den Betrieb mit PostgreSQL?<br /> - -<h2 align="center">Fragen zum Betrieb</h2> - -<a href="#4.1">4.1</a>) Wie wähle ich per <small>SELECT</small>-Anweisung nur die ersten paar - Zeilen bzw. eine beliebige Zeile in einer Abfrage aus?<br /> -<a href="#4.2">4.2</a>) Wie finde ich heraus, welche Tabellen, Indexe, Datenbanken oder - Benutzer in der Datenbank definiert sind? Wie bekomme ich die von <em>psql</em> verwendeten - Abfragen?<br /> -<a href="#4.3">4.3</a>) Wie ändere ich den Datentyp einer Spalte?<br /> -<a href="#4.4">4.4</a>) Was ist die Maximalgröße für eine Zeile, eine Tabelle, eine Datenbank?<br /> -<a href="#4.5">4.5</a>) Wieviel Plattenplatz wird benötigt, um die Daten aus einer typischen - Textdatei abzuspeichern?<br /> -<a href="#4.6">4.6</a>) Meine Abfragen sind langsam oder benutzen die Indexe nicht. Warum?<br /> -<a href="#4.7">4.7</a>) Auf welche Weise kann ich sehen, wie der Abfrage-Optimierer meine - Abfrage auswertet?<br /> -<a href="#4.8">4.8</a>) 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?<br /> -<a href="#4.9">4.9</a>) Wie ermittle ich in einer Abfrage, ob ein Feld NULL ist?<br /> -<a href="#4.10">4.10</a>) Was ist der Unterschied zwischen den verschiedenen <small>CHAR</small>-Typen?<br /> - -<a href="#4.11.1">4.11.1</a>) Wie erzeuge ich ein serielles Feld mit automatischer Erhöhung des Wertes?<br /> -<a href="#4.11.2">4.11.2</a>) Wie bekomme ich den Wert einer SERIAL-Sequenz?<br /> -<a href="#4.11.3">4.11.3</a>) Führt currval() zu einer Race-Condition mit anderen Nutzern?<br /> -<a href="#4.11.4">4.11.4</a>) Warum werden die Sequenzwerte nach einem Transaktionsabbruch nicht - zurückgesetzt? Warum gibt es Lücken in der Nummerierung meiner - Sequenz-/<small>SERIAL</small>-Spalte?<br /> -<a href="#4.12">4.12</a>) Was ist ein <small>OID</small>? Was ist ein <small>CTID</small>?<br /> -<a href="#4.13">4.13</a>) Wieso bekomme ich den Fehler: "<em>FATAL: Memory exhausted in AllocSetAlloc()</em>"?<br /> -<a href="#4.14">4.14</a>) Wie kann ich feststellen, welche PostgreSQL-Version bei mir läuft?<br /> -<a href="#4.15">4.15</a>) Wie kann ich eine Spalte erstellen, deren Default-Wert immer - die aktuelle Uhrzeit enthalten soll?<br /> -<a href="#4.16">4.16</a>) Wie führe ich eine <small>OUTER JOIN</small> durch?<br /> -<a href="#4.17">4.17</a>) Wie kann ich Abfragen über mehrere Datenbanken hinweg ausführen?<br /> -<a href="#4.18">4.18</a>) Wie kann ich mehrere Zeilen bzw. Spalten von einer Funktion - zurückgeben lassen?<br /> -<a href="#4.19">4.19</a>) Warum bekomme ich eine Fehlermeldung wie <br /> - "relation with OID ##### does not exist" wenn ich temporäre Tabellen in<br /> - PL/PgSQL-Funktionen benutze?<br /> -<a href="#4.20">4.20</a>) Welche Replikationslösungen gibt es?<br /> -<a href="#4.21">4.21</a>) Warum werden die Tabellen- und Spaltennamen in meiner - Abfrage nicht erkannt? Warum werden Großbuchstaben umgewandelt?<br /> - -<hr /> - - <h2 align="center">Allgemeine Fragen</h2> - <h3><a name="1.1">1.1</a>) Was ist PostgreSQL? Wie wird es ausgesprochen?</h3> - <p>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: - <a href="http://www.postgresql.org/files/postgresql.mp3">http://www.postgresql.org/files/postgresql.mp3</a> - </p> - - <p>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.</p> - - <p>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: - <a href="http://www.postgresql.org/docs/faqs.FAQ_DEV.html">http://www.postgresql.org/docs/faqs.FAQ_DEV.html</a> - wenn Sie an einer Mitarbeit interessiert sind.</p> - - - <h3><a name="1.2">1.2</a>) Wer kontrolliert PostgreSQL?</h3> - - <p>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: - <a href="http://www.postgresql.org/docs/faqs.FAQ_DEV.html">http://www.postgresql.org/docs/faqs.FAQ_DEV.html</a> - wenn Sie an der PostgreSQL-Entwicklung teilnehmen möchten).</p> - - <h3><a name="1.3">1.3</a>) Welchem Copyright unterliegt PostgreSQL?</h3> - - <p>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:</p> - - <p>PostgreSQL Data Base Management System</p> - - <P>Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group - Portions Copyright (c) 1994-6 Regents of the University of California</P> - - <p>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.</P> - - <p>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.</P> - - <p>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.</P> - - <p>Es gilt die Copyright-Klausel im Original!</p> - - <h3><a name="1.4">1.4</a>) Auf welchen Plattformen läuft PostgreSQL?</h3> - - <p>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.</p> - - <p>PostgreSQL läuft auch auf Microsoft NT-basierten Betriebssystemen - wie Windows 2000 SP4, XP und Server 2003. Ein vorgefertigtes Installationspaket - kann von <a href="http://pgfoundry.org/projects/pginstaller">http://pgfoundry.org/projects/pginstaller</a> heruntergeladen werden. - DOS-basierte Windows-Versionen (Win95, Win98, WinMe) können PostgreSQL nur mit - Hilfe der Cygwin-Umgebung ausführen.</p> - - <p>Eine Portierung für Novell Netware 6 gibt es unter <a href="http://forge.novell.com">http://forge.novell.com</a> sowie eine OS/2 (eComStation) version unter - <a href="http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2F">http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2F</a>.</p> - - <h3><a name="1.5">1.5</a>) Woher bekomme ich PostgreSQL?</h3> - - <p>Per Web-Browser hier: <a href="http://www.postgresql.org/ftp/">http://www.postgresql.org/ftp/</a> - und per FTP hier: <a href="ftp://ftp.postgresql.org/pub/">ftp://ftp.postgresql.org/pub/</a>.</p> - - <h3><a name="1.6">1.6</a>) Was ist die neueste Version von PostgreSQL?</h3> - - <p>Die neueste Version von PostgreSQL ist 8.2.5.</p> - - <p>Die Freigabe einer neuen Hauptversion erfolgt in der Regel jährlich, kleinere - Korrekturversionen alle paar Monaten.</p> - - - <h3><a name="1.7">1.7</a>) Wo bekomme ich Support für PostgreSQL?</h3> - - <p>Die PostgreSQL-Community bietet Unterstützung per Mailing-Liste. Die Web-Seite - <a href="http://www.postgresql.org/community/lists/">http://www.postgresql.org/community/lists/</a> bietet einen Ãœberblick. - Die Listen <i>general</i> und <i>bugs</i> bieten einen guten Einstieg.</p> - - <p>Eine deutschsprachige Mailing-Liste gibt es hier: - <a href="http://archives.postgresql.org/pgsql-de-allgemein/">http://archives.postgresql.org/pgsql-de-allgemein/</a>.</p> - - <p>Der wichtigsten IRC-Channel ist <em>#postgresql</em> auf Freenode - (<em>irc.freenode.net</em>). Unter UNIX/Linux können Sie mit z.B. - <small>irc -c '#postgresql' "$USER" irc.freenode.net.</small> - daran teilnehmen. Auf Freenode gibt es einen spanischsprachigen Channel - <em>#postgresql-es</em>, einen französischen, <em>#postgresqlfr</em> sowie einen brasilianischen, <em>#postgresql-br</em> . - Es gibt außerdem einen PostgreSQL-Channel bei EFNet.</p> - - <p>Eine Liste von Unternehmen, die Support für PostgreSQL auf kommerzieller - Basis leisten, kann unter - <a href="http://www.postgresql.org/support/professional_support">http://www.postgresql.org/support/professional_support</a> - eingesehen werden.</p> - - - <h3><a name="1.8">1.8</a>) Wie kann ich einen Fehlerbericht abgeben?</h3> - - <p>Nutzen Sie das Formular unter <a href="http://www.postgresql.org/support/submitbug">http://www.postgresql.org/support/submitbug</a>. - Schauen Sie aber vorher unter <a href="ftp://ftp.postgresql.org/pub/">ftp://ftp.postgresql.org/pub/</a> nach, - ob es mittlerweile eine neuere PostgreSQL-Version gibt, in der der Fehler behoben wurde.</p> - - <p>Bugs, die über das Formular bzw. eine der Mailing-Listen bekanntgegeben wurden, - erhalten typischerweise einer der folgenden Reaktionen:</p> - - <ul> - <li>es ist kein Bug, der Grund wird benannt</li> - <li>es ist ein bereits bekannter Bug, der bereits auf der - <a href="http://www.postgresql.org/docs/faqs.TODO.html">TODO</a>-Liste aufgenommen wurde</li> - <li>der Bug wurde in der aktuellen Version behoben</li> - - <li>der Bug wurde bereits behoben, befindet sich aber noch nicht in - einer offiziell veröffentlichten Version</li> - <li>es wird um eingehendere Informationen gebeten, z.B.: - <ul> - <li>Betriebssystem</li> - <li>PostgreSQL-Version</li> - <li>reproduzierbarer Fallbeispiel</li> - <li>Debugging-Information</li> - <li>Debugger-Backtrace-Ausgabe</li> - </ul> - </li> - <li>der Bug ist neu. Folgendes könnte passieren: - <ul> - <li>ein Patch wird erstellt und in der nächsten Version - eingebaut;</li> - <li>oder der Bug kann nicht sofort behoben werden und wird auf die - <a href="http://www.postgresql.org/docs/faqs.TODO.html">TODO</a>-Liste gesetzt</li> - </ul> - </li> - </ul> - - <h3><a name="1.9">1.9</a>) Wie erfahre ich von bekannten Bugs oder fehlenden Features?</h3> - - <p>PostgreSQL unterstützt eine erweiterte Teilmenge von SQL:2003. Siehe - unsere TODO-Liste unter <a href="http://www.postgresql.org/docs/faqs.TODO.html">http://www.postgresql.org/docs/faqs.TODO.html</a> für eine Auflistung - der bekannten Bugs, fehlenden Features und zukünftigen Pläne.</p> - - <p>Eine Anfrage nach einem neuen Feature führt normalerweise zu einer der - folgenden Antworten:</p> - <ul> - <li>das Feature ist bereits auf der <a href="http://www.postgresql.org/docs/faqs.TODO.html">TODO</a>-Liste</li> - <li>das Feature ist nicht wünschenswert, weil: - <ul> - <li>es vorhandene Funktionalität dupliziert, welche bereits dem - SQL-Standard folgt</li> - <li>es würde die Komplexität der Code-Basis erhöhen, ohne nennenswerte - Vorteile zu bringen</li> - <li>es wäre unsicher bzw. unzuverlässig</li> - </ul> - </li> - <li>das neue Feature wird der <a href="http://www.postgresql.org/docs/faqs.TODO.html">TODO</A>-Liste hinzugefügt</li> - - </ul> - - <p>PostgreSQL verwendet kein Bugtracking-System, da es sich als effizienter - erwiesen hat, E-Mails direkt zu beantworten und die <a href="http://www.postgresql.org/docs/faqs.TODO.html">TODO</a>-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 <a href="http://www.postgresql.org/developer/sourcecode/">CVS</a>-Log-Meldungen. - Auch die Release-Notes listen nicht jede Änderung in der Software auf.</p> - - <h3><a name="1.10">1.10</a>) Welche Dokumentation ist für PostgreSQL verfügbar?</h3> - - <p>PostgreSQL bietet umfangreiche Dokumentation, darunter ein großes - Handbuch, man-Pages und einige kleine Testprogramme. Siehe das <em>/doc</em>- - Verzeichnis. Ausserdem sind alle Handbücher online unter <a href="http://www.postgresql.org/docs/">http://www.postgresql.org/docs/</a> - verfügbar.</p> - - <p>Zwei Bücher zu PostgreSQL sind online verfügbar unter - <a href="http://www.postgresql.org/docs/books/awbook.html">http://www.postgresql.org/docs/books/awbook.html</a> und - <a href="http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook/</a> .</p> - - <p>Eine Liste lieferbarer PostgreSQL-Bücher befindet sich unter - <a href="http://www.postgresql.org/docs/books">http://www.postgresql.org/docs/books</a> - Diverse technische Artikel befinden sich unter - <a href="http://www.postgresql.org/docs/techdocs">http://www.postgresql.org/docs/techdocs</a> .</p> - - <p><em>psql</em> hat einige nützliche <em>\d</em>-Befehle, um Informationen über Typen, - Operatoren, Funktionen, Aggregate, usw. zu zeigen. </p> - - <p>Die PostgreSQL-Website enthält noch mehr Dokumentation.</p> - - - <h3><a name="1.11">1.11</a>) Wie kann ich <small>SQL</small> lernen?</h3> - - <p>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).</p> - - <p>Es gibt ausserdem einige nützliche Online-Tutorials:</p> - <ul> - <li><a href="http://www.intermedia.net/support/sql/sqltut.shtm">http://www.intermedia.net/support/sql/sqltut.shtm</a></li> - <li><a href="http://sqlcourse.com/">http://sqlcourse.com</a></li> - <li><a href="http://www.w3schools.com/sql/default.asp">http://www.w3schools.com/sql/default.asp</a></li> - <li><a href="http://mysite.verizon.net/Graeme_Birchall/id1.html">http://mysite.verizon.net/Graeme_Birchall/id1.html</a></li> - </ul> - - <h3><a name="1.12">1.12</a>) Wie kann ich im Entwicklerteam mitarbeiten?</h3> - - <p>Lesen Sie in der Entwickler-FAQ unter <a href="http://www.postgresql.org/docs/faqs.FAQ_DEV.html">http://www.postgresql.org/docs/faqs.FAQ_DEV.html</a> nach. - - <h3><a name="1.13">1.13</a>) Wie läuft PostgreSQL im Vergleich zu anderen Datenbanksystemen?</h3> - - <p>Es gibt verschiedene Methoden, Software zu messen: Eigenschaften, - Performanz, Zuverlässigkeit, Support und Preis.</p> - - <dl> - <dt><b>Eigenschaften</b></dt> - <dd><p>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.</p> - </dd> - - <dt><b>Performanz</b></dt> - - <dd><p>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%.</p> - </dd> - - <dt><b>Zuverlässigkeit</b></dt> - <dd><p>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.</p> - </dd> - - <dt><b>Support</b></dt> - - <dd><p>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 <a href="#1.7">1.7</a>).</p> - </dd> - <dt><b>Preis</b></dt> - <dd><p>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.</p> - </dd> - </dl> - - <h3><a name="1.14">1.14</a>) Kommt PostgreSQL mit den Anpassungen der Sommerzeit in verschiedenen Ländern klar?</h3> - - <p>Ä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.</p> - - <h2 align="center">Fragen zu Benutzerprogrammen</h2> - - <h3><a name="2.1">2.1</a>) Welche Schnittstellen gibt es für PostgreSQL?</h3> - - <p>Die PostgreSQL-Installation stellt nur Schnittstellen für <code>C</code> und - <code>Embedded C</code> 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.</p> - - <p>Einige Programmiersprachen wie <code>PHP</code> haben eine PostgreSQL- - Schnittstelle bereits eingebaut. Schnittstellen für Sprachen wie <code>Perl</code>, <code>TCL</code>, - <code>Python</code> und viele anderen sind unter <a href="http://gborg.postgresql.org">http://gborg.postgresql.org</a> - im Bereich <em>Drivers/Interfaces</em> verfügbar sowie per Internet-Suche.</p> - - - <h3><a name="2.2">2.2)</a> Wie kann man PostgreSQL in einer Website nutzen?</H3> - <p>Eine nette Einführung zu datenbank-gestützten Webseiten kann unter - <a href="http://www.webreview.com"> http://www.webreview.com</a> (engl.) eingesehen werden.</p> - - <p>Für die Web-Integration ist PHP eine ausgezeichnete Schnittstelle. - PHP gibt es bei <a href="http://www.php.net">http://www.php.net</a></p> - - <p>Für komplexere Aufgaben bietet sich die Perl-Schnittstelle mit CGI.pm - oder mod_perl.</p> - - <h3><a name="2.3">2.3</a>) Hat PostgreSQL eine grafische Benutzerschnittstelle?</h3> - - <p>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 <a href="http://www.postgresql.org/docs/techdocs.54">http://www.postgresql.org/docs/techdocs.54</a> .</p> - - <hr /> - - <h2 align="center">Administrative Fragen</h2> - - <h3><a name="3.1">3.1</a>) Wie installiere ich PostgreSQL woanders als in /usr/local/pgsql?</h3> - - <p>Bei der Ausführung von <em>configure</em> die Option <em>--prefix</em> mit dem Zielverzeichnis - angeben.</p> - - <h3><a name="3.2">3.2</a>) Wie regle ich Zugriffe von anderen Rechnern?</h3> - - <p>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 <em>postgresql.conf</em> die Einstellung <tt>listen_addresses</tt> - anpassen, in der Datei <em>$PGDATA/pg_hba.conf</em> host-basierte - Authentifizierung einschalten und den Server neu starten.</p> - - <h3><a name="3.3">3.3</a>) Wie kann ich eine bessere Performanz erreichen?</h3> - - <p>Es gibt drei große Bereiche, in denen Performanzverbesserungen - erzielt werden können:</p> - - <dl> - <dt><b>Abfrageoptimierung</b></dt> - - <dd>Die Modifizierung von Abfragen kann eine bessere Performanz - erzielen: - <ul> - - <li>Erstellung von Indexen, einschliesslich partieller Indexe - sowie Expressionsindexe</li> - <li>Einsatz von <tt>COPY</tt> anstelle multipler <tt>INSERT</tt>-Anweisungen</li> - <li>Gruppierung von mehreren Abfragen innerhalb einer Transaktion, - um Aufwand beim Abschluss von Transaktionen einzusparen</li> - <li>Einsatz von <tt>CLUSTER</tt> beim Holen von einer großen Anzahl - von Datenreihen aus einem Index</li> - <li>Einsatz von <tt>LIMIT</tt>, um eine Untermenge der Abfragen- - ergebnisse zurückzuliefern</li> - <li>Einsatz von vorbereiteten Befehlen (prepared queries)</li> - <li>Einsatz von <tt>ANALYZE</tt>, um die Datenbankstatistik für - den Abfragenplaner aktuell zu halten</li> - <li>Regelmäßiger Einsatz von <tt>VACUUM</tt> bzw. <em>pg_autovacuum</em></li> - <li>Bei großen Datenveränderungen die Löschung von Indexen</li> - </ul><br/> - - <br/> - </dd> - - <dt><b>Server-Konfiguration</b></dt> - - <dd>Einige Einstellungen in der Datei <em>postgresql.conf</em> - - wirken auf die Performanz aus. Das Handbuch enthält unter - <a href="http://www.postgresql.org/docs/current/static/runtime-config.html">http://www.postgresql.org/docs/current/static/runtime-config.html</a> eine - komplette Auflistung. Kommentare zu den jeweiligen Einstellungen - gibt es unter - <a href="http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html">http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html</a> - und <a href="http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html">http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html</a>. - <br/> - <br/> - </dd> - - <dt><b>Hardware-Auswahl</b></dt> - - <dd>Die Auswirkung von Hardware auf Performanz wird unter - <a href="http://momjian.us/main/writings/pgsql/hw_performance/index.html">http://momjian.us/main/writings/pgsql/hw_performance/index.html</a> und - <a href="http://www.powerpostgresql.com/PerfList/">http://www.powerpostgresql.com/PerfList/</a> erläutert. - <br/> - <br/> - </dd> - - </dl> - - <h3><a name="3.4">3.4</a>) Welche Debugging-Funktionen sind für PostgreSQL verfügbar?</h3> - - <p>Unter den Optionen für die Server-Konfigurierung gibt es zahlreiche - <tt>log_*</tt>-Variablen, die die Ausgabe von Abfrage- und Prozessstatistiken - ermöglichen. Diese können für Debugging-Zwecke sowie Performanz-Tests sehr - nützlich sein.</p> - - <h3><a name="3.5">3.5</a>) Ich bekomme die Meldung "<em>Sorry, too many clients</em>", wenn ich eine - Verbindung aufzubauen versuche. Warum?</h3> - - <p>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 - <em>postgresql.conf</em> den Wert <tt>max_connections</tt> ändern und - den Server neustarten.</p> - - - <h3><a name="3.6">3.6</a>) Wie wird PostgreSQL aktualisiert?</h3> - - <p>Allgemeine Informationen zur Aktualisierung von PostgreSQL gibt es auf der - Seite <a href="http://www.postgresql.org/support/versioning">http://www.postgresql.org/support/versioning</a>. - Detaillierte technische Informationen gibt es auf der Seite - <a href="http://www.postgresql.org/docs/current/static/install-upgrading.html">http://www.postgresql.org/docs/current/static/install-upgrading.html</a> - </p> - -<!-- - <p>Zwischen "kleinen" PostgreSQL-Versionsänderungen (z.B. zwischen - 7.4.8 und 7.4.9) werden nur Bugs behoben, wodurch ein erneutes Aus- - und Einlesen der Daten nicht erforderlich ist. Es müssen lediglich die - neue Software installiert sowie der Server neugestartet werden.</p> - - <p>Alle Nutzer sollten sobald wie möglich die neueste "kleine" - Version installieren. Zwar birgt eine Server-Aktualisierung immer - einige Risiken, doch die "kleinen" Versionsänderungen zielen darauf, - mit dem kleinsten Risiko die häufigsten Bugs zu beheben. Allgemein - wird es als riskanter betrachtet, <em>nicht</em> zu aktualisieren - als zu aktualisieren.</p> - - <p>Bei "großen" Versionsänderungen (z.B. zwischen 7.3 und 7.4) wird - oft das interne Format der Systemtabellen und Datendateien - angepasst. Diese Änderungen sind oft sehr komplex, wodurch die - Rückwärtskompatibilität der Datendateien nicht gewährleistet werden kann. - Bei der Aktualisierung zwischen "großen" Versionen muss die - Datenbank exportiert und neu importiert werden.</p> ---> - <h3><a name="3.7">3.7</a>) Welche Hardware eignet sich für den Betrieb mit PostgreSQL?</h3> - - <p>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. - </p> - - <hr /> - - <h2 align="center">Fragen zum Betrieb</h2> - - <h3><a name="4.1">4.1</a>) Wie wähle ich per <small>SELECT</small>-Anweisung nur die ersten paar - Zeilen bzw. eine beliebige Zeile in einer Abfrage aus?</h3> - - <p>Wenn Sie bei der Ausführung der Abfrage die Anzahl der anzufordenden - Reihen bereits kennen, nutzen Sie <tt>LIMIT</tt>. Wenn die <tt>ORDER BY</tt>- - 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 <tt>FETCH</tt>. - - <p>Um eine beliebige Zeile auszuwählen, nutzen Sie <small>ORDER BY random()</small>:</p> - <pre> - SELECT spalte - FROM tabelle - ORDER BY random() - LIMIT 1 - </pre> - - <h3><a name="4.2">4.2</a>) Wie finde ich heraus, welche Tabellen, Indexe, Datenbanken oder - Benutzer in der Datenbank definiert sind? Wie bekomme ich die von <em>psql</em> verwendeten Abfragen?</h3> - - <p>In psql zeigt der Befehl \dt eine Liste der Datenbanktabellen. Weitere psql-Befehle - lassen sich mit \? anzeigen. Sie können sich die Datei <em>pgsql/src/bin/psql/describe.c</em> - mit dem Quellcode für <em>psql</em> ansehen. Sie enthält die <small>SQL</small>-Abfragen, die die - Backslash-Kommandos (\) ausführen. Sie können <em>psql</em> auch mit der <em>-E</em> - Option starten. Danach gibt <em>psql</em> die Abfragen aus, die es bei der Ausführung der Befehle - benutzt. Außerdem biete PostgreSQL ein <small>SQL</small>-kompatibles INFORMATION SCHEMA, - das Metainformation über die Datenbank zur Verfügung stellt.</p> - - <p>Mit <tt>psql -l</tt> können Sie alle Datenbanken anzeigen lassen.</p> - - <p>Die Datei <em>pgsql/src/tutorial/syscat.source</em> enthält außerdem viele <small>SELECT</small>- - Abfragen, mit deren Hilfe man Information über die Systemtabellen erhalten kann.</p> - - <h3><a name="4.3">4.3</a>) Wie ändere ich den Datentyp einer Spalte?</h3> - - <p>Ab Version 8.0 kann der Datentyp einer Spalte mit <tt>ALTER TABLE ALTER COLUMN TYPE</tt> - geändert werden, sofern der neue Datentyp die Werte des alten Datentype aufnehmen - kann.</p> - - <p>Bei früheren Versionen gehen Sie wie folgt vor:</p> - - <pre> - BEGIN; - ALTER TABLE <em>tabelle</em> ADD COLUMN <em>neue_spalte</em> <em>neuer_datentyp</em>; - UPDATE <em>tabelle</em> SET <em>neue_spalte</em> = CAST(<em>alte_spalte</em> AS <em>neuer_datentyp</em>); - ALTER TABLE <em>tabelle</em> DROP COLUMN <em>alte_spalte</em>; - COMMIT; - </pre> - - <p>Um den Speicherplatz freizugeben, der von der gelöschten Spalte verwendet - wurde, führen Sie <small>VACUUM FULL</small> aus.</p> - - <h3><a name="4.4">4.4</a>) Was ist die Maximalgröße für eine Zeile, eine Tabelle, eine Datenbank?</h3> - - <p>Es bestehen folgende Obergrenzen:</p> -<pre> - 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 - -</pre> - <p>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.</p> - - <p>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.</p> - - <p>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.</p> - - <p>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 <small>UNIQUE</small>-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.</p> - - <h3><a name="4.5">4.5</a>) Wieviel Plattenplatz wird benötigt, um die Daten aus einer typischen - Textdatei abzuspeichern? </h3> - - <p>Eine PostgreSQL-Datenbank kann beim Abspeichern einer einfachen Textdatei - bis zu fünfmal mehr Platz gegenüber der eigentlichen Größe der Datei - beanspruchen.</p> - - <p>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:</p> -<pre> - 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 -</pre> - <p>Die Größe einer Datenseite in PostgreSQL beträgt 8192 Bytes (8 KB), also:</p> - -<pre> - 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) -</pre> - <p>Indexe beanspruchen nicht so viel Platz. Da sie jedoch die - Daten beinhalten, die sie indizieren, können auch sie sehr groß werden.</p> - - <p>NULL-Werte werden als Bitmaps gespeichert, wodurch sie sehr wenig - Platz in Anspruch nehmen.</p> - - <h3><a name="4.6">4.6</a>) Meine Abfragen sind langsam oder benutzen die Indexe nicht. Warum?</h3> - - <p>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).</p> - - <p>Um festzustellen, ob ein Index verwendet werden soll, braucht PostgreSQL - Statistiken über die Tabelle. Diese Statistiken werden durch die Anweisungen - <small>VACUUM ANALYZE</small> bzw. <small>ANALYZE</small> 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 <small>JOIN</small>-Reihenfolgen und - -Methoden wertvoll. Daher sollten diese regelmässig durchgeführt werden, da - sich der Inhalt einer Tabelle ja auch verändert.</p> - - <p>Indexe werden normalerweise nicht in <small>ORDER BY</small>-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 <small>LIMIT</small> zusammen mit - <small>ORDER BY</small> verwendet wird, oftmals ein Index verwendet, da nur ein - kleiner Abschnitt der Tabelle zurückgeliefert wird.</p> - - <p>Sollte es danach aussehen, also ob der Optimierer irrtümlich einen sequentiellen - Scan ausführt, führen Sie <small>SET enable_seqscan TO 'off'</small> aus und prüfen - Sie, ob die Indexabfrage dadurch scheller geworden ist.</p> - - <p>Bei der Nutzung von Wildcard-Operatoren wie <small>LIKE</small> oder <small>~</small>, können - Indexe nur unter bestimmten Umständen verwendet werden:</p> - <ul> - - <li>Das Suchmuster muss sich an Anfang des Strings befinden, d.h.: - <ul> - <li><small>LIKE</small>-Suchmuster dürfen nicht mit <em>%</em> anfangen;</li> - <li><small>~</small> (reguläre Ausdrücke) müssen mit <em>^</em> anfangen.</li> - </ul> - </li> - <li>Das Suchmuster darf nicht mit einer Zeichenklasse (z.B. <em>[a-e]</em>) - beginnen.</li> - <li>Suchmuster, die Gross- und Kleinschreibung nicht berücksichtigen (z.B. - <small>ILIKE</small> bzw. <small>~*</small>), verwenden keine Indexe. Stattdessen können - funktionale Indexe verwendet werden, die im Punkt <a href="#4.8">4.8</a> beschrieben werden.</li> - <li>Die Standard-Locale "C" muss während der Datenbank-Initialisierung mit <em>initdb</em> - verwendet worden sein, da andere <em>locales</em> den nächstgrößten Wert nicht - ermitteln können. Es ist allerdings möglich, einen besonderen <small>text_pattern_ops</small>-Index - für solche Fälle zu erstellen.</li> - </ul> - <p>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 <small>INT2</small>, <small>INT8</small> und <small>NUMERIC</small></p> - - - <h3><a name="4.7">4.7</a>) Auf welche Weise kann ich sehen, wie der Abfrage-Optimierer meine - Abfrage auswertet?</h3> - - <p>Vgl. die <em>EXPLAIN</em> Man-Page.</p> - - <h3><a name="4.8">4.8</a>) 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?</h3> - - <p>Der Operator <em>~</em> wendet einen regulären Ausdruck an und <em>~*</em> wendet ihn an, ohne die Groß- und Kleinschreibung zu beachten. - Ebenso beachtet <small>LIKE</small> die Groß- und Kleinschreibung, und <small>ILIKE</small> nicht.</p> - - <p>Gleichheitsvergleiche, die Groß- und Kleinschreibung ignorieren, werden - in der Regel so ausgedruckt:</p> - -<pre> - SELECT * - FROM tabelle - WHERE LOWER(spalte) = 'abc' -</pre> - <p>Hier wird kein normaler Index benutzt. Legt man hingegen einen funktionalen - Index an, so wird er auf jeden Fall verwendet:</p> -<pre> - CREATE INDEX tabelle_index ON tabelle (LOWER(spalte)) -</pre> - <p>Falls der obige Index als einen <small>UNIQUE</small>-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 <small>CHECK</small>-Constraint oder ein Trigger - eingesetzt werden.</p> - - <h3><a name="4.9">4.9</a>) Wie ermittle ich in einer Abfrage, ob ein Feld NULL ist? - Kann nach der NULL-Belegung sortiert werden?</h3> - - <p>Testen Sie die Spalte mit <small>IS NULL</small> bzw. <small>IS NOT NULL</small>.</p> -<pre> - SELECT * - FROM tabelle - WHERE spalte IS NULL -</pre> - <p>Um die Spalte danach zu sortieren, ob sie mit NULL belegt ist oder nicht, - verwenden Sie die Bedingungen <small>IS NULL</small> bzw. <small>IS NOT NULL</small> - in der <small>ORDER BY</small>-Klausel. Da Bedingungen, die wahr sind, höher - als das Gegenteil sortiert werden, bewirkt die folgende Abfrage, dass die - <small>NULL</small>-Spalten zuerst gelistet werden:</p> -<pre> - SELECT * - FROM tabelle - ORDER BY (spalte IS NOT NULL) - -</pre> - - <h3><a name="4.10">4.10</a>) Was ist der Unterschied zwischen den verschiedenen <small>CHAR</small>-Typen?</h3><pre> -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 -</pre> - <p>Der <em>interne Name</em> kommt vor allem in den Systemkatalogen und in manchen - Fehlermeldungen vor.</p> - - <p>Die ersten vier Typen sind "<em>varlena</em>"-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 <small>TOAST</small>- - Verfahren angewendet, womit der tatsächlich belegte Platz auch geringer - als erwartet ausfallen kann.</p> - - <p>Für die Speicherung von Zeichenketten variabler Länge empfiehlt sich <small>VARCHAR(n)</small>. - Die maximale Länge eines <small>VARCHAR(n)</small>-Felds wird bei der Tabellendefinition - festgelegt. <small>TEXT</small> setzt keine Längengrenze, allerdings gibt es - eine systembedingte Obergrenze von 1 GB. </p> - - <p><small>CHAR(n)</small> ist geeignet für die Speicherung von Zeichenketten, die alle - die gleiche Länge haben. Bitte beachten Sie, dass <small>CHAR(n)</small> automatisch Zeichenketten - bis zur definierten Feldlänge mit Leerzeichen ausfüllt, während bei <small>VARCHAR(n)</small> nur - die tatsächlich eingegebene Zeichenkette gespeichert wird.</p> - - <p><small>BYTEA</small> ist für binäre Daten, besonders für Werte, die <small>NULL</small>-Bytes haben. </p> - - <p>Alle der hier erwähnten Typen weisen ähnliche Performanzeigenschaften auf.</p> - - <h3><a name="4.11.1">4.11.1</a>) Wie erzeuge ich ein serielles Feld mit automatischer Erhöhung des - Wert?</h3> - - <p>PostgreSQL bietet einen <small>SERIAL</small>-Datentyp. Dieser erzeugt automatisch - eine Sequenz auf die angegebene Spalte. Zum Beispiel:</p> -<pre> - CREATE TABLE person ( - id SERIAL, - name TEXT - )</pre> - - <p>wird automatisch in:</p> -<pre> - CREATE SEQUENCE person_id_seq; - CREATE TABLE person ( - id INT4 NOT NULL DEFAULT nextval('person_id_seq'), - name TEXT - ); -</pre><p>umgewandelt.</p> - - <p>Die <em>create_sequence</em> Man-Page liefert weitere Informationen über Sequenzen.</p> - - <h3><a name="4.11.2">4.11.2</a>) Wie bekomme ich den Wert einer <small>SERIAL</small>-Sequenz?</h3> - - <p>Eine Möglichkeit wäre, mit der <em>nextval()</em>-Funktion den nächsten <small>SERIAL</small>-Wert - von dem Sequenzobjekt vor der Auszuführung einer <small>INSERT</small>-Anweisung anzufordern und ihn - dann explizit in die <small>INSERT</small>-Anweisung einzubinden. Anhand der Beispieltabelle in - <a href="#4.11.1">4.11.1</a> könnte dieser Vorgang in einer Pseudosprache so aussehen:</p> - -<pre> - new_id = output of execute("SELECT nextval('person_id_seq')"); - execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')"); -</pre> - <p>Danach stünde der neue Wert in der Variablen <em>new_id</em> 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 <small>SEQUENCE</small>-Objektes folgenden Name hat: - <em>«table»_«serialcolumn»_seq</em> - wobei '<em>table</em>' und '<em>serialcolumn</em>' die Namen der jeweils betreffenden - Tabelle / Spalte darstellen.</p> - - <p>Als weitere Möglichkeit können Sie nach einer <small>INSERT</small>-Anweisung den - automatisch eingefügten <small>SERIAL</small>-Wert mit der <em>currval()</em>-Funktion zurückgeben - lassen:</p> -<pre> - execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')"); - new_id = output of execute("SELECT currval('person_id_seq')"); -</pre> - - <h3><a name="4.11.3">4.11.3</a>) Führt <em>currval()</em> zu einer Race-Condition mit anderen - Nutzern?</h3> - - <p>Nein. <em>currval()</em> liefert einen Wert zurück, der von Ihrer - Datenbank-Session bestimmt wird, und der anderen Sessionen nicht zur Verfügung - steht.</p> - - <h3><a name="4.11.4">4.11.4</a>) Warum werden die Sequenzwerte nach einem Transaktionsabbruch nicht - zurückgesetzt? Warum gibt es Lücken in der Nummerierung meiner - Sequenz-/<small>SERIAL</small>-Spalte?</h3> - - <p>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.</p> - - <h3><a name="4.12">4.12</a>) Was ist ein <small>OID</small>? Was ist ein <small>CTID</small>?</h3> - - <p>Jede Zeile, die in PostgreSQL erzeugt wird, bekommt eine eindeutige <small>OID</small>, - sofern die Tabelle nicht mit der Option <small>WITHOUT OIDS</small> angelegt wurde. - <small>OID</small>s 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 <small>OID</small>s, um seine - interne Systemtabellen zu verbinden.</p> - - <p>Um einmalige Idenfikatoren in Datentabellen zu erstellen, wird allerdings - empfohlen, statt <small>OID</small>s Werte zu verwenden, die von<small>SERIAL</small>- - Sequenzen erzeugt werden. <small>SERIAL</small>-Sequenzen sind innerhalb einer - Tabelle einmalig und daher weniger anfällig für Ãœberläufe. Außerdem können - 8-Byte-Sequenzwerte mit <small>SERIAL8</small> erzeugt werden.</p> - - <p><small>CTID</small>s werden benutzt, um bestimmte physikalische Zeilen - durch Block und Offset Werte zu identifizieren. <small>CTID</small>s - verändern sich, sobald Zeilen verändert oder zurückgeladen werden. Sie - werden in Indexeinträgen benutzt um auf die physikalischen Zeilen zu - zeigen.</p> - - <h3><a name="4.13">4.13</a>) Wieso bekomme ich einen Fehler: "<em>ERROR: Memory exhausted in - AllocSetAlloc()</em>"?</h3> - - <p>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 <em>postmaster</em> folgendes:</p> -<pre> - ulimit -d 262144 - limit datasize 256m - -</pre> - <p>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.</p> - - <h3><a name="4.14">4.14</a>) Wie kann ich feststellen, welche PostgreSQL-Version bei mir läuft?</h3> - - <p>Geben Sie in <em>psql</em> <small>SELECT VERSION();</small> ein.</p> - - <h3><a name="4.15">4.15</a>) Wie kann ich eine Spalte erstellen, deren Default-Wert immer - die aktuelle Uhrzeit enthalten soll?</h3> - - <p>Dazu verwenden Sie <small>CURRENT_TIMESTAMP</small>:</p> -<pre> - CREATE TABLE test (x INT, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -</pre> - - <h3><a name="4.16">4.16</a>) Wie führe ich eine <small>OUTER JOIN</small> durch?</h3> - - <p>PostgreSQL unterstützt <small>OUTER JOIN</small>s nach dem SQL- - Standardsyntax. Hier zwei Beispiele:</p> -<pre> - SELECT * - FROM tabelle_1 t1 - LEFT OUTER JOIN tabelle_2 t2 ON (t1.spalte = t2.spalte) -</pre> - <p>bzw.:</p> -<pre> - SELECT * - FROM tabelle_1 t1 - LEFT OUTER JOIN tabelle_2 t2 USING (spalte) -</pre> - - <p> - Diese identischen Abfragen verknüpfen <em>tabelle_1</em> mit <em>tabelle_2</em> über die - Spalte '<em>spalte</em>' und geben außerdem alle unverknüpften Zeilen in tabelle_1 - (diejenigen, die keine Entsprechung in <em>tabelle_2</em> haben) zurück. - Ein <small>RIGHT JOIN</small> würde hingegen alle unverknüpften Zeilen in tabelle_2 hinzufügen und - ein <small>FULL JOIN</small> würde alle verknüpften Zeilen sowie jeweils alle - unverknüpften Zeilen aus den beiden Tabellen zurückliefern. Die Angabe von - <small>OUTER</small> ist nicht zwingend und kann in <small>LEFT</small>, <small>RIGHT</small> und <small>FULL</small>-Verknüpfungen - weggelassen werden. Normale Verknüpfungen sind <small>INNER JOIN</small>s.</p> - - <h3><a name="4.17">4.17</a>) Wie kann ich Abfragen über mehrere Datenbanken hinweg ausführen?</h3> - - <p>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.</p> - - <p><em>contrib/dblink</em> ist eine Erweiterung, die datenbankübergreifende Abfragen über - Funktionsaufrufe ermöglicht.</p> - - <h3><a name="4.18">4.18</a>) Wie kann ich mehrere Zeilen bzw. Spalten von einer Funktion - zurückgeben lassen?</h3> - - <p>Funktionen können mehrere Zeilen und Spalten zurückgeben, vgl.: - <a href="http://www.postgresql.org/docs/techdocs.17">http://www.postgresql.org/docs/techdocs.17</a>.</p> - - <h3><a name="4.19">4.19</a>) Warum bekomme ich eine Fehlermeldung wie - "relation with OID ##### does not exist" wenn ich temporäre Tabellen in - PL/PgSQL-Funktionen benutze?</h3> - - <p>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 <small>EXECUTE</small> auf temporäre Tabellen zuzugreifen. - Dies bewirkt, dass bei jedem Funktionsruf die betreffende Abfrage neu - geparst wird.</p> - - <p>Dieses Problem taucht in PostgreSQL 8.3 und späteren Versionen nicht - mehr auf.</p> - - <h3><a name="4.20">4.20</a>) Welche Replikationslösungen gibt es?</h3> - - <p>Der Begriff "replikation" umfasst mehrere verschiedene Technologien, - jede mit eigenen Vor- und Nachteilen.</p> - - <p>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 <a href="http://main.slony.info/">Slony-I</a>.</p> - - <p>"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. <a href="http://pgfoundry.org/projects/pgcluster/">Pgcluster</a> - ist die populärste freie Lösung für PostgreSQL.</p> - - <p>Es gibt auch einige kommerzielle und hardware-basierte Replikationslösungen - für verschiedene Arten der Replikation.</p> - - <h3><a name="4.21">4.21</a>) Warum werden die Tabellen- und Spaltennamen in meiner - Abfrage nicht erkannt? Warum werden Großbuchstaben umgewandelt?</h3> - - <p>Die häufigste Ursache ist die Verwendung von Gänsefüßchen - bei der Anlegung von Tabellen, z.B.:</p> -<pre> - CREATE TABLE "Tabelle" - ("SPALTE1" INT) -</pre> - <p>Dadurch werden Tabellen- und Spaltennamen (sog. Identifikatoren) - in genau der Schreibweise gespeichert (vgl. <a - href="http://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS"> - Dokumentation</a>), was dazu führt, dass man sie danach immer - in Gänsefüßchen angeben muss. Im obigen Beispiel muss man also immer - etwa <small>SELECT * FROM "Tabelle"</small> verwenden. Um - dieses Problem zu vermeiden, müssen Sie immer eines der folgenden - Punkte beachten:</p> - - <ul> - <li>bei der Tabellenanlegung keine Gänsefüßchen verwenden;</li> - <li>in Identifikatoren nur Kleinschreibung verwenden;</li> - <li>immer Identifikatoren mit Gänsefüßchen versehen</li> - </ul> - - <hr /> - - <h3>Anmerkungen des Ãœbersetzers</h3> - - <p>Die englische Vorlage dieser FAQ wird ständig überarbeitet. Daher liegt - die Ãœbersetzung nicht immer auf dem aktuellsten Stand.</p> - - <p>Die aktuellste Version der deutschen Ãœbersetzung befindet sich immer unter - <a href="http://sql-info.de/de/postgresql/FAQ_german.html">http://sql-info.de/de/postgresql/FAQ_german.html</a>. - Diese "Arbeitsversion" enthält eventuell Änderungen, die noch nicht auf der - PostgreSQL-Website eingebunden worden sind.</p> - - <p>Ãœ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.</p> -</body> -</html> diff --git a/doc/src/FAQ/FAQ_hungarian.html b/doc/src/FAQ/FAQ_hungarian.html deleted file mode 100644 index af03d0cbbcbafce3c16598967356725a06814fb1..0000000000000000000000000000000000000000 --- a/doc/src/FAQ/FAQ_hungarian.html +++ /dev/null @@ -1,1668 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> -<html> -<head> - <meta content="text/html; charset=ISO-8859-1" - http-equiv="content-type"> - <title>PostgreSQL GYIK</title> -</head> -<body> -<br> -<div style="text-align: center;"> -<h1>PostgreSQL GyIK</h1> -<br> -</div> -<br> -<pre>Utolsó módosítás dátuma: 2005 május 9.</pre> -<pre>Fordítás aktualizálása: 2005 június</pre> -<pre><br> -A GyIK karbantartója: Bruce Momjian (<a - href="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</a>)</pre> -<pre>Fordító: Hornyák László<br>(<a - href="mailto:laszlo.hornyak.nospam@gmail.com">laszlo.hornyak.nospam@gmail.com</a>)</pre> -<pre><br> -A legfrissebb verzió itt érhetõ el (angol):</pre> -<pre><a href="http://www.PostgreSQL.org/docs/faq-english.html">http://www.PostgreSQL.org/docs/faq-english.html</a>.</pre> -<pre><br> -Legfrissebb magyar nyelvû verzió:</pre> -<pre><a href="http://hackers.forgeahead.hu/space/PostgreSQL/GYIK">http://hackers.forgeahead.hu/space/PostgreSQL/GYIK</a></pre> -<pre><br> -Platform specifikus kérdések:</pre> -<pre><a href="http://www.PostgreSQL.org/users-lounge/docs/faq.htm">http://www.PostgreSQL.org/users-lounge/docs/faq.htm</a>l.</pre> -<hr style="width: 100%; height: 2px;"> -<div style="text-align: center;"> -<h2>Általános kérdések</h2> -</div> -<a href="#1.1">1.1</a> Mi a PostgreSQL? Hogy kell kimondani?<br> -<a href="#1.2">1.2</a> Mik a PostgreSQL felhasználási -feltételei?<br> -<a href="#1.3">1.3</a> Milyen UNIX operációs -rendszereken fut PostgreSQL?<br> -<a href="#1.4">1.4</a> Milyen nem UNIX operációs -rendszerek elérhetõek?<br> -<a href="#1.5">1.5</a> Hogyan tudok PostgreSQL-t szerezni?<br> -<a href="#1.6">1.6</a> Hogyan kapok -terméktámogatást?<br> -<a href="#1.7">1.7</a> Melyik a legfrissebb kiadás?<br> -<a href="#1.8">1.8</a> Milyen dokumentáció áll -rendelkezésre?<br> -<a href="#1.9">1.9</a> Hogyan találok információt -hibákról vagy hiányzó -funkcionalításról?<br> -<a href="#1.10">1.10</a> Hogy tanuljam meg az SQL nyelvet?<br> -<a href="#1.11">1.11</a> A PostgreSQL 2000. év kompatibilis?<br> -<a href="#1.12">1.12</a> Hogyan lehet csatlakozni a fejlesztõ -csapathoz?<br> -<a href="#1.13">1.13</a> Hogyan küldjek hibajelentést?<br> -<a href="#1.14">1.14</a> Milyen a PostgreSQL más DBMS-ekkel -összehasonlítva?<br> -<a href="#1.15">1.15</a> Hogyan tudom üzletileg segiteni a -PostgreSQL-t?<br> -<a href="#1.16">1.16</a> Ki irányítja a PostgreSQL-t?<br> -<br> -<div style="text-align: center;"> -<h2>Felhasználói kliens kérdések</h2> -</div> -<br> -<a href="#2.1">2.1</a> Van ODBC meghajtó PostgreSQL-hez?<br> -<a href="#2.2">2.2</a> Milyen eszközök állnak -rendelkezésre PostgreSQL Web fejlesztésekhez?<br> -<a href="#2.3">2.3</a> Van a PostgreSQL-hez grafikus -felhasználói felület ? Riport generátor? -Beágyazott lekérdezõ nyelv felület?<br> -<a href="#2.4">2.4</a> Milyen programozási nyelvekkel lehet -elérni a PostgreSQL szervert?<br> -<br> -<div style="text-align: center;"> -<h2>Adminisztrációs kérdések</h2> -</div> -<br> -<a href="#3.1">3.1</a> Hogyan tudom a PostgreSQL-t /usr/local/pgsql --tõl eltérõ helyre installálni?<br> -<a href="#3.2">3.2</a> AMikor elindítom a postmaster-t, egy -"Bad System Call"-t vagy core dump-ot kapok. Miért?<br> -<a href="#3.3">3.3</a> Amikor megpróbálom inditani a -postmaster-t, "IpcMemoryCreate" hibákat kapok. Miért?<br> -<a href="#3.4">3.4</a> Amikor megpróbálom inditani a -postmaster-t, "IpcSemaphoreCreate" hibákat kapok. Miért?<br> -<a href="#3.5">3.5</a> Hogyan tudom kontrollálni a más -gépekrõl érkezõ kapcsolat -kéréseket?<br> -<a href="#3.6">3.6</a> Hogyan tudom nagyobb -teljesítményre hangolni az -adatbázisomat?<br> -<a href="#3.7">3.7</a> Milyen hibakeresõ -lehetõségek -érhetõek el?<br> -<a href="#3.8">3.8</a> Miért kapok "Sorry, too many clients" -hibát -csatlakozásnál?<br> -<a href="#3.9">3.9</a> Mi van pgsql_tmp könyvtárban?<br> -<a href="#3.10">3.10</a> Miért kell dumpolni és -újratölteni -PostgreSQL kiadás váltásánál?<br> -<br> -<div style="text-align: center;"> -<h2>Mûködtetési kérdések</h2> -</div> -<br> -<a href="#4.1">4.1</a> Mi a különbség a bináris -és a -normál kurzorok között?<br> -<a href="#4.2">4.2</a> Hogyan tudom select-elni a -lekérdezés elsõ -pár sorát?<br> -<a href="#4.3">4.3</a> Hogy tudom kilistázni a -táblákat vagy -más dolgokat a PostgreSQL-ben?<br> -<a href="#4.4">4.4</a> Hogyan tudok eltávolítani egy -oszlopot egy -táblából?<br> -<a href="#4.5">4.5</a> Mi a maximális mérete egy sornak, -egy -táblának vagy egy adatbázisnak?<br> -<a href="#4.6">4.6</a> Mekkora adatbázis lemez terület -szükséges -egy tipikus szöveg állomány -tárolásához?<br> -<a href="#4.7">4.7</a> Hogy tudhatom meg milyen táblák, -indexek, -adatbázisok vagy felhasználók vannak -definiálva?<br> -<a href="#4.8">4.8</a> A lekérdezéseim lassúak, -vagy nem -használják az indexeket. Miért?<br> -<a href="#4.9">4.9</a> Hogy tudom ellenõrizni, hogy -optimalizálta a -lekérdezés optimalizáló a -lekérdezésem?<br> -<a href="#4.10">4.10</a> Mi az R-tree index?<br> -<a href="#4.11">4.11</a> Mi a Genetic Query Optimizer?<br> -<a href="4.12">4.12</a> Hogyan tudok regexp keresést és -case-insensitive -regexp keresést használni? Hogyan tudok indexet -használni case-insensitive kereséshez?<br> -<a href="4.13">4.13</a> Hogyan tudom észlelni egy -lekérdezésban, ha -egy mezõ NULL?<br> -<a href="#4.14">4.14</a> Mi a különbség a -különbözõ -karaktertípusok között?<br> -<a href="#4.15.1">4.15.1</a> Hogyan tudok létrehozni -automatikusan -növekvõ értékû mezõt?<br> -<a href="#4.15.2">4.15.2</a> Hogyan kaphatom meg egy SERIAL -beszúrás -értékét?<br> -<a href="#4.15.3">4.15.3</a> A currval() és a nextval() nem -teremt holtpont -veszélyes helyzetet a felhasználók -között?<br> -<a href="#4.15.4">4.15.4</a> Miért nem -használódnak fel újra a -sequence számok tranzakció abort esetén? -Miért vannak problémák a serial oszlopok -számozásával?<br> -<a href="#4.16">4.16</a> Mi a OID? Mi a TID?<br> -<a href="#4.17">4.17</a> Mi a PostgreSQL-ben használt -kifejezések -jelentése?<br> -<a href="#4.18">4.18</a> Miért kapom ezt a hibát: "ERROR: -Memory exhausted -in AllocSetAlloc()"?<br> -<a href="#4.19">4.19</a> Hogyan tudhatom meg PostgreSQL, milyen -verziót futtatok?<br> -<a href="#4.20">4.20</a> Miért kapok "invalid large obj -descriptor" hibát -nagy objektumok kezelésénél?<br> -<a href="#4.21">4.21</a> Hogy hozhatok létre olyan oszlopot, -aminek -alapértelmezett érétke a jelenlegi idõ?<br> -<a href="#4.22">4.22</a> Miért olyan lassúak az -al-lekérdezéseim IN-nel?<br> -<a href="#4.23">4.23</a> Hogyan tudok outer join-t végrehajtani?<br> -<a href="#4.24">4.24</a> Hogyan tudok több adatbázison -végrehajtani -lekérdezést?<br> -<a href="#4.25">4.25</a> Hogy tudok több soros vagy oszlopos -eredményt -visszaadni egy funkcióból?<br> -<a href="#4.26">4.26</a> Miért nem tudom megbizhatóan -létrehozni -és törölni az átmeneti táblákat a -PL/pgSQL funkciókban?<br> -<a href="#4.27">4.27</a> Milyen replikációs -lehetõségek vannak?<br> -<a href="#4.28">4.28</a> Milyen kódolási -lehetõségek vannak?<br> -<br> -<div style="text-align: center;"> -<h2>A PostgreSQL kiterjesztése</h2> -</div> -<br> -<a href="#5.1">5.1</a>) Írtam egy felhasználói -funkciót. -Miért core dumpol az adatbázis amikor használom?<br> -<a href="#5.1">5.2</a>) Hogyan lehet új adattípusokat -és -funkciókat hozzáadni a PostgreSQL -disztribúcióhoz?<br> -<a href="#5.3">5.3</a>) Hogyan lehet olyan C funkciót -írni, ami Tuple-t ad -vissza? (több soros több oszlopos eredmények)<br> -<a href="#5.4">5.4</a>) Megváltoztattam egy forrás -állományt. -Miért nem változik a bináris -újrafordítás után?<br> -<hr style="width: 100%; height: 2px;"> -<h2 style="text-align: center;"> Általános -kérdések</h2> -<br> -<a name="1.1"></a><big style="text-decoration: underline;">1.1 Mi a -PostgreSQL? Hogy kell kimondani?</big><br> -<p>Így ejstd ki: Post-Gres-Q-L.</p> -<p>(Vagy talán inkább töltsd le a kis mp3-at a -PostgreSQL homepage-rõl)</p> -<p>A PostgreSQL a POSTGRES adatbázis management rendszer egy -kiegészítése, ami egy következõ -generációs DBMS kutatási prototípus. -Megtartja a POSTGRES adatmodellét és gazdag -adattípus választékát, de a PostQuel -lekérdezõ nyelvet az SQL egy kiterjesztett -verziójával helyettesíti. A PostgreSQL szabad -és a teljes forráskód -hozzáférhetõ.</p> -<p>A PostgreSQL fejlesztését egy csapat végzi, -amelynek minden tagja megtalálható a PostgreSQL -fejlesztõi levelezési listán. A jelenlegi -koordinátor -Marc G. Fournier (scrappyp@PostgreSQL.org). Ez a csapat felelõs -minden fejlesztésért. <>A PostgreSQL 1.01 -alkotói -Andrew Yu és Jolly Chen voltak. Sokan járultak -hozzá portolással, teszteléssel, -hibakereséssel és fejlesztéssel. Az eredeti -Postgres kód, amibõl a PostgreSQL származik -Michael Stonebraker professzor irányítása alatt -fejlesztettek az egyetem programozói, tanulói és -végzett tanulói. <></p> -<p>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. </p> -<br> -<a name="1.2"></a> <big style="text-decoration: underline;">1.2 Mik a -PostgreSQL felhasználási -feltételei?</big><br> -<br> -<pre> Az eredeti angol copyright szöveg: </pre> -<pre> -------------------- </pre> -<pre> PostgreSQL is subject to the following COPYRIGHT:</pre> -<pre><br> PostgreSQL Data Base Management System</pre> -<pre><br> Portions copyright (c) 1996-2002, PostgreSQL Global Development Group</pre> -<pre> Portions Copyright (c) 1994-6 Regents of the University of California</pre> -<pre><br> Permission to use, copy, modify, and distribute this software and its</pre> -<pre> documentation for any purpose, without fee, and without a written</pre> -<pre> agreement is hereby granted, provided that the above copyright notice</pre> -<pre> and this paragraph and the following two paragraphs appear in all</pre> -<pre> copies.</pre> -<pre><br> IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY</pre> -<pre> FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES,</pre> -<pre> INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND</pre> -<pre> ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN</pre> -<pre> ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</pre> -<pre><br> THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,</pre> -<pre> INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF</pre> -<pre> MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE</pre> -<pre> PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF</pre> -<pre> CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT,</pre> -<pre> UPDATES, ENHANCEMENTS, OR MODIFICATIONS.</pre> -<pre> --------------------</pre> -<p><br> -</p> -Ami nagyon leegyszerûsítve azt jelenti, hogy jogod van -használni a szoftvert mindenféle -ellenszolgáltatás (pénz, stb) nélkül, -a forrás kódot módosíthatod, és -továbbadhatod, DE semmilyen, a szoftver -használatából következõ -károsodásért nem vállal garanciát a -fejlesztõ. A fenti a BSD licensz, egy klasszikus -nyilt-forráskód licensz. Nem tartalmaz -megszorításokat arra, hogy a forráskódot -hogyan használod fel. -<p> Kedveljük ezt a licensz formát és nem áll -szándékunkban megváltoztatni.</p> -<a name="1.3"></a> <big><span style="text-decoration: underline;">1.3 -Milyen UNIX operációs -rendszereken fut PostgreSQL?</span></big><br> -<p>Általában minden UNIX-kompatibilis -operációs rendszer képes arra hogy futtassa a -PostgreSQL-t. Azokat a platformokat, amiken tesztelték a -kiadást -megtalálhatod a installációs -utasítások között. </p> -<a name="1.4"></a> <big><span style="text-decoration: underline;">1.4 -Milyen nem UNIX operációs -rendszerek elérhetõek?</span></big><br> -<br> -<p>Kliens<br> -</p> -<p>A libpq C függvénykönyvtárat, a psql-t -és más felületeket le lehet úgy -fordítani, hogy fussanak MS Windows operációs -rendszereken. Ebben az esetben a kliens MS Windows-on fut és -TCP/IP segítségével kommunikál a Unixon -futó szerverrel. A "win32.mak" állomány a -kiadás része, ennek segítségével -lehet Win32 platformokra lefordítani a libpq-t és a -psql-t. A PostgreSQL ODBC kliensekkel is képes -kommunikálni.</p> -<p> -Szerver</p> -<>Az adatbázis szerver Cygwin -segítségével -fut Windows NT és Win2k rendszereken. További -információ -található a pgsql/doc/FAQ_MSWIN állományban -és a MS Windows FAQ-ban a következõ helyen: <a - href="http://www.PostgreSQL.org/docs/faq-mswin.html">http://www.PostgreSQL.org/docs/faq-mswin.html</a>. -Natív MS Windows NT/2000/XP portok jelenleg fejlesztés -alatt állnak.<br> -<br> -<a name="1.5"></a> <big style="text-decoration: underline;">1.5 Hogyan -tudok PostgreSQL-t szerezni?</big><br> -<p>Az elsõdleges anonim ftp oldal: <a - href="ftp://ftp.PostgreSQL.org/pub">ftp://ftp.PostgreSQL.org/pub</a>. </p> -<p>A tükör oldalak listája megtalálható -a -fõ weboldalunkon.</p> -<a name="1.6"></a> <big style="text-decoration: underline;">1.6 Hogyan -kapok -terméktámogatást?</big><br> -<br> -<p>Az elsõdleges lista a <a - href="mailto:pgsql-general@postgresql.org">pgsql-general@postgresql.org</a>. -Ez -használható a PostgreSQL-lel kapcsolatos -párbeszédekre. Ha fel -szeretnél íratkozni, küldj egy levelet a -következõ tartalommal (nem -tárggyal) a<a - href="mailto:%20pgsql-general-request@postgresql.org"> -pgsql-general-request@postgresql.org</a> címre:</p> -<pre> -subscribe</pre> -<pre> -end </pre> -<br> -Van egy hibákkal kapcsolatos levelezési lista is: -pgsql-bugs-request@PostgreSQL.org a következõ tartalommal:<br> -<br> -<pre> -subscribe</pre> -<pre> -end -</pre> -<p>A fejlesztői levelezési lista:<a - href="mailto:pgsql-hackers-request@PostgreSQL.org"> -pgsql-hackers-request@PostgreSQL.org</a> a következõ -tartalommal:</p> -<pre> -subscribe</pre> -<pre> -end</pre> -<br> -Egyéb levelezési listák -találhatóak -a weboldalunkon: <a href="http://www.PostgreSQL.org">http://www.PostgreSQL.org</a> -<p>Van egy IRC csatorna is <a href="irc://irc.freenode.net/#postgresql">#PostgreSQL</a> -néven ahol felteheted -kérédseid. A következõ unix paranccsal -csatlakozhatsz: -</p> -<p>irc -c '#PostgreSQL' "$USER" irc.phoenix.net.</p> -<p> -A kereskedelmi terméktámogatást -nyújtó cégek listája elérhetö -itt:<a - href="http://www.PostgreSQL.org/users-lounge/commercial-support.html"> -http://www.PostgreSQL.org/users-lounge/commercial-support.html</a><br> -</p> -<p>Magyar nyelvű levelezési lista nincs, de ha tudok segiteni a -fenit e-mail cimemen elérhető vagyok.</p> -<a name="1.7"></a> <big style="text-decoration: underline;">1.7 Melyik -a legfrissebb kiadás?</big><br> -<p>A legfrissebb PostgreSQL kiadás a 8.0.</p> -<p>A tervek szerint minden évben lesz egy nagyobb -fejlesztéseket tartalmazó kiadás, míg a -kisebb fejlesztéseket néhány havonta adjuk ki.<br> -</p> -<a name="1.8"></a> <big style="text-decoration: underline;">1.8 Milyen -dokumentáció áll -rendelkezésre?</big><br> -<p>Számos kézikönyv, man oldalak és kis teszt -példák találhatóak a kiadásban a -doc/ könyvtár alatt. Az interneten is olvashatod a -dokumentációt a következõ címen:</p> -<p><a href="http://www.PostgreSQL.org/users-lounge/docs/">http://www.PostgreSQL.org/users-lounge/docs/</a>.</p> -<p>Két PostgreSQL könyv érhetõ el az -interneten -a <a href="http://www.PostgreSQL.org/docs/awbook.html">http://www.PostgreSQL.org/docs/awbook.html</a> -és a <a href="http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook/</a> -címeken. A megvásárolható könyvek -listája itt -található: <a href="http://www.ca.PostgreSQL.org/books/">http://www.ca.PostgreSQL.org/books/</a>. -A PostgreSQL-lel kapcsolatos technikai jellegû cikkek -gyûjteménye: <a href="http://techdocs.PostgreSQL.org/">http://techdocs.PostgreSQL.org/</a>.</p> -<p>A psql parancs rendelkezik néhány \d -utasítással, amellyekkel listázhatóak az -operátorok, a funkciók, stb.</p> -<p>A website is tartalmaz további dokumentációkat.</p> -<a name="1.9"></a> <big style="text-decoration: underline;">1.9 Hogyan -találok információt -hibákról vagy hiányzó -funkcionalításról?</big><br> -<p>A PostgreSQLaz SQL-92 szabvány egy -kiegészítése. Nézd meg a TODO -listákat ha érdekelnek az ismert hibák.</p> -<a name="1.10"></a> <big style="text-decoration: underline;">1.10 Hogy -tanuljam meg az SQL nyelvet?</big><br> -<br> -<p>A PostgreSQL könyv a -<a href="http://www.PostgreSQL.org/docs/awbook.html">http://www.PostgreSQL.org/docs/awbook.html</a> -címen tartalmaz SQL -alapokat. Elérhetõ egy -másik SQL könyv is a <a - href="http://www.commandprompt.com/ppbook">http://www.commandprompt.com/ppbook</a> -címen. Egy szép -oktató anyag található a -<a href="http://www.intermedia.net/support/sql/sqltut.shtm">http://www.intermedia.net/support/sql/sqltut.shtm</a>, -a -<a - href="http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM">http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM</a> -és a <a href="http://sqlcourse.com">http://sqlcourse.com</a> -oldalakon. -</p> -<p>Egy másik lehetõség a "Tanítsd magad 21 -nap -alatt SQL-re, második kiadás" a -<a href="http://members.tripod.com/er4ebus/sql/index.htm">http://members.tripod.com/er4ebus/sql/index.htm</a>.</p> -<p> -Sok felhasználónak tetszett a gyakorlati SQL könyv -("The Practical SQL Handbook"). </p> -<br> -<a name="1.11"></a> <big style="text-decoration: underline;">1.11 A -PostgreSQL 2000. év kompatibilis?</big><br> -<br> -<p>Igen, könnyedén kezeli a 2000 utáni és -idõszámításunk elött 2000 elötti -dátumokat is. </p> -<br> -<a name="1.12"></a> <big style="text-decoration: underline;">1.12 -Hogyan lehet csatlakozni a fejlesztõ -csapathoz?</big><br> -<br> -Elösször is töltsd le a forráskódot, -és olvasd el a PostgreSQL<br> -fejlesztõi dokumnetációt a web oldalunkon vagy a -kiadásban. Ezután<br> -íratkozz fel a pgsql-hackers és a pgsql-patches -levelezési listákra.<br> -Végül pedig küldj be magas szinvonalú -patch-eket a pgsql-patches listára.<br> -<br> -Van egy pár ember, akiknek commit privilégiumuk a -PostgreSQL CVS fán.<br> -Õk olyan sok magas szinvonalú patch-et küldtek be, -hogy az addigi <br> -csapat már nem tudta követni, és nem volt -kétségünk arról, hogy a<br> -patch-ek amiket õk küldenek jó -minõségû.<br> -<br> -<a name="1.13"></a> <big style="text-decoration: underline;">1.13 -Hogyan küldjek hibajelentést?</big><br> -<br> -Látogass el a BugTool oldalra: <br> -<a href="http://www.PostgreSQL.org/bugs/bugs.php">http://www.PostgreSQL.org/bugs/bugs.php</a><br> -Itt megtalálod követendõ utasításokat.<br> -<br> -Ellenõrizd az ftp oldalunkon is, hogy nincs-e újabb -verzió vagy folt.<br> -<a href="ftp://ftp.PostgreSQL.org/pub">ftp://ftp.PostgreSQL.org/pub </a><br> -<br> -<a name="1.14"></a><big style="text-decoration: underline;">1.14 Milyen -a PostgreSQL más DBMS-ekkel -összehasonlítva?</big><br> -<p>Számos nézõpontból lehet -vizsgálni -a -szoftvert: képességek, teljesítmény -megbízhatóság, támogatottság -és ár.</p> -<span style="text-decoration: underline;">Képességek:</span> -A PostgreSQL rendelkezik a nagy, kereskedelmi DBMS-ek -képességeivel: tranzakciók, -al-lekérdezések, triggerek, -nézetek, külsõ kulcsok, integrítás -és kifinoult zármechanizmusok. -Van néhány képessége, ami a kereskedelmi -adatbázisokból hiányzik, mint -például a felhasználó által -definiált típusok, -öröklõdés, szabályok és -verzió kontroll a zárolási viták -redukálásáért. -<p><span style="text-decoration: underline;">Teljesítmény:</span> -A PostgreSQL teljesítménye hasonlít a -kereskedelmi -és más nyílt adatbázis -szerverekéhez. Lehet bizonyos esetekben -lassabb, másokban gyorsabb. A MySQL nevû tanuló -RDBMS például gyorsabban hajt végre insert/update -mûveleteket, mivel a tranzakciókat -elsumákolja. Persze a MySQL nem rendelkezik a -képességek -részben felsoroltak nagy részével. Mi a -megbízhatóságra -és a képességekre építünk, -bár a teljesítmény is nõ minden -kiadással. Van -egy érdekes oldal a MySQL és a PostgreSQL -összehasonlításával a -<a href="http://openacs.org/philosophy/why-not-mysql.html">http://openacs.org/philosophy/why-not-mysql.html -</a>címen. -</p> -<p><span style="text-decoration: underline;">Megbízhatóság:</span> -Tudjuk hogy ha egy DBMS nem megbízható, akkor -teljesen -haszontalan. Igyekszünk jól tesztelt, stabil kódot -kiadni, amiben -a lehetõ legkevesebb hiba van. Minden kiadás -elött eltellik -legalább 1 hónap béta teszt, és a -kiadási -történet is azt mutatja, hogy stabil kódot adunk ki, -ami készen áll a -produktív felhasználásra. Úgy gondoljuk, -felülmúlunk más -adatbázis szoftvereket ezen a téren. -</p> -<p></p> -<p><span style="text-decoration: underline;">Támogatás:</span> -A levelezési listáink kapcsolatot teremtenek a -fejlesztõk és felhasználók -csoportjával , akik -segítenek a problémák megoldásában. -Bár nem tudjuk garantálni -hogy ki tudjuk javítani a hibát, más, kereskedelmi -adatbázis cégek sem tudják. A fejlesztõ -csoport közvetlen elérési -lehetõsége, a közösség, a -dokumentáció és a forráskód -gyakran támogatást biztosít, mint más -adatbázisoknál. Van kereskedelmi, alkalmi -támogatás azoknak, akiknek szüksége van -rá (lásd: 1.6). -</p> -<p></p> -<p><span style="text-decoration: underline;">Ár:</span> A -PostgreSQL szabad bármilyen -felhasználásra, -akár kereskedelmire is. A termékhez hozzáadhatod a -saját -forráskódjaidat korlátozás -nélkül.</p> -<a name="1.15"></a> <big style="text-decoration: underline;">1.15 -Hogyan tudom üzletileg segiteni a -PostgreSQL-t?</big><br> -<p>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. -</p> -<p>A minõségi infrastruktúra nagyon fontos egy -nyilt -forrású szoftver esetében. Megvéd az olyan -fennakadásoktól, -amelyek komoly késéseket okoznak a -fejlesztésekben. Természetesen ez az -infrastruktúra nem olcsó. -Számos havi és állandó kiadásunk -van. Ha a cégednek van pénze, amivel -támogatná erõfeszítéseinket, -kérlek látogass el a <a - href="http://store.pgsql.com/shopping/">http://store.pgsql.com/shopping/</a> -oldalra.</p> -<p> -Bár a weboldal "PostgreSQL, Inc"-ként -említi, a -hozzájárulások kizárólag a -PostgreSQL fejlesztésre értendóek, és nem -egy meghatározott cégnek. Ha jobban tetszik, -küldhetsz csekket is a kapcsolati címek -bármelyikére.</p> -<p><big style="text-decoration: underline;"><a name="1.16"></a>1.16 Ki -irányítja a PostgreSQL-t?<br> -</big></p> -<p><big style="text-decoration: underline;"><small><span - style="text-decoration: underline;"></span></small></big><big><small>Ha -központi bizottságot, ellenörző céget keresel a -PostgreSQL mögött, add fel, nincs ilyesmi. Létezik egy -mag és CVS commiter csoport, de ez inkáb adminisztrativ -mint ellenörző célú. A projectet fejlesztők -és felhasználók közössége -irányítja, amihez bárki csatlakozhat. -Csupán annyit kell tenned hogy felíratkozol a -levelezőlistékra és részt veszel a -beszélgetésekben.</small></big><big - style="text-decoration: underline;"><small><span - style="text-decoration: underline;"></span></small></big></p> -<p></p> -<hr style="width: 100%; height: 2px;"> -<h2 style="text-align: center;">Felhasználói kliens -kérdések</h2> -<br> -<a name="2.1"></a> <big style="text-decoration: underline;">2.1 Van -ODBC meghajtó PostgreSQL-hez?</big><br> -<p>Két ODBC meghajtó érhetõ el: PsqlODBC -és a OpenLink ODBC.</p> -<p>A PsqlODBC a PostgreSQL kiadás része. További -információ található a -ftp://ftp.PostgreSQL.org/pub/odbc/ oldalon.</p> -<p>Az OpenLink ODBC-t a <a href="http://www.openlinksw.com">http://www.openlinksw.com</a> -címrõl -töltheted le. Ez az õ szabványos ODBC kliens -szoftverükkel -mûködik, így minden</p> -<p>általuk támogatott platformon (Win, Mac, Unix, VMS) -elérhetõ lesz a PostgreSQL szerver.</p> -<p>Talán olyan vevõknek fogják eladni, akik -kereskedelmi minõségû terméket -szeretnének kapni, de a freeware verzió mindig -elérhetõ lesz. Kérdéseidet a -termékkel kapcsolatban a postgres95@openlink.co.uk -címen teheted fel.</p> -<p>Olvasd el az ODBC fejezetet is a programozók -kézikönyvében!</p> -<p><a name="2.2"></a><big style="text-decoration: underline;">2.2 -Milyen -eszközök állnak -rendelkezésre PostgreSQL Web fejlesztésekhez?</big></p> -<p>Egy szép bemutató olvasható az -adatbázissal -támogatott web oldalanról a http://www.webreview.com -weboldalon.</p> -<p>A web integrációhoz a PHP egy kiválló -szoftver. Letölthetõ a <a href="http://www.php.net">http://www.php.net</a> -címrõl. </p> -<p>Komplexebb esetekre sokan használják a Perl -felületet és a CGI.pm vagy a mod_perl-t.</p> -<p><a name="2.3"></a><big style="text-decoration: underline;">2.3 Van a -PostgreSQL-hez grafikus -felhasználói felület?</big></p> -<p>Van egy szép PgAccess nevû grafikus -felületünk, -ami riport generátorként is használható. A -weboldalát megtalálod a -<a href="http://www.pgaccess.org/">http://www.pgaccess.org/</a> -címen.</p> -<p>A <a href="http://techdocs.postgresql.org/guides/GUITools">http://techdocs.postgresql.org/guides/GUITools</a> -oldalon találhatsz egy pontos és részltes -listát.<br> -</p> -<p><a name="2.4"></a><big style="text-decoration: underline;">2.4 -Milyen -programozási nyelvekkel lehet -elérni a PostgreSQL szervert?</big></p> -<p>A következök: </p> -<ul> - <li>C (libpq)</li> - <li>C++ (libpq++)</li> - <li>Embedded C (ecpg)</li> - <li>Java (jdbc)</li> - <li>Perl (DBD::Pg and perl5)</li> - <li>ODBC (odbc)</li> - <li>Python (PyGreSQL)</li> - <li>TCL (libpgtcl)</li> - <li>C Easy API (libpgeasy)</li> - <li>PHP ('pg_' functions, Pear::DB)</li> -</ul> -<br> -További programozási felületek -érhetõek el a <br> -<a href="http://www.PostgreSQL.org/interfaces.html"> -http://www.PostgreSQL.org/interfaces.html</a> és a<br> -<a href="http://gborg.PostgreSQL.org"> http://gborg.PostgreSQL.org</a> -oldalakon.<br> -<br> -<hr style="width: 100%; height: 2px;"> -<h2 style="text-align: center;">Adminisztrációs -kérdések</h2> -<br> -<a name="3.1"></a> <big><span style="text-decoration: underline;">3.1 -Hogyan tudom a PostgreSQL-t /usr/local/pgsql --tõl eltérõ helyre installálni?</span></big><br> -<p>A configure script --prefix paraméterének -használatával.</p> -<a name="3.2"></a> <big style="text-decoration: underline;">3.2 AMikor -elindítom a postmaster-t, egy -"Bad System Call"-t vagy core dump-ot kapok. Miért?</big><br> -<p>Számos probléma lehet, de legelösször -ellenõrizd le, hogy a kerneled System V -kiegészítésekkel rendelkezik-e. A -PostgreSQL használja a kernel osztott memória és -szemafor API-ját. </p> -<p><a name="3.3"></a><big style="text-decoration: underline;">3.3 -Amikor -megpróbálom inditani a -postmaster-t, "IpcMemoryCreate" hibákat kapok. Miért?</big></p> -<p> -Vagy nincs megfelelõen konfigurálva a kerneled osztott -memória támogatása vagy meg kell -nagyobbítanod a maximális osztott -memória méretet.</p> -<p>A pontos méret szükséglet függ az -architektúrádtól és attól hogy -hány buffert és processzt konfigurálsz a -postmasternek. -Legalább 1 MB területre szükséged van. A -PostgreSQL -Adminisztráció kézikönyvben olvashatsz -részletesebb információkat az osztott -memóriáról és a szemaforokról.</p> -<a name="3.4"></a><big style="text-decoration: underline;">3.4) Amikor -megpróbálom inditani a -postmaster-t, "IpcSemaphoreCreate" <br> -hibákat kapok. Miért?</big><br> -<p>Ha a hibaüzenet ez: " IpcSemaphoreCreate: semget failed (No -space left on device)", akkor a kerneled konfigurációja -nem -tesz lehetõvé elegendõ szemafort. A PostgreSQL -szerver processzenként 1 -szemafort igényel. Egy átmeneti megoldás lehet az -hogy a -postmastert kevesebb maximális processz számmal inditod -el. Használd a --D paramétert. Egy sokkal megfelelõbb megoldás az -ha növeled a -kerneled SEMMNS és SEMMNI paramétereit.</p> -<p>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</p> -<p>forditva a kerneledbe. Olvasd el a PostgreSQL -adminisztrátorok kézikönyvében az osztott -memóriáról és a szemaforokról -szóló fejezetet.</p> -<p><a name="3.5"></a><big style="text-decoration: underline;">3.5) -Hogyan tudom kontrollálni a más -gépekrõl érkezõ kapcsolat -kéréseket?</big></p> -<p>Alapértelmezésben a PostgreSQL a helyi kapcsolatokat -Unix -socketekkel valósítja meg. Más gépek nem -lesznek -képesek csatlakozni, ha nem engedélyezed azt -i -opcióval a postmasternek, és -nem állítod be host a alapú -azonosítást a pg_hba.conf -állományban. Ezzel válnak lehetõvé a -TCP/IP kapcsolatok.</p> -<p><a name="3.6"></a><big style="text-decoration: underline;">3.6) -Hogyan tudom nagyobb -teljesítményre hangolni az adatbázisomat?</big></p> -<p>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.</p> -<p>Ha sok INSERT mûveletet hajtassz végre, csináld -nagy kötegekben a COPY paranccsal. Ez sokkal gyorsabb mint az -egyedi INSERT parancsok. -Másodszor: Azok a mûveletek, amelyek nincsenek -tranzakció blokkon -belül, azok saját tranzakciót indítanak. Sok -mûveletet érdemes -egy tranzakción belül végrehajtani. Ez -csökkenti a tranzakció -kezelés többletidejét. Az indexeket javasolt a nagy -adatváltozások elött -eltávolítani, majd újra létrehozni.</p> -<p>Számos teljesítmény javító -lehetõség van. Kikapcsolhatod az fsync() mûveletet -a postmaster -o -F opciókval való -indításakor. Így nem fog az amugy lassú -fsync() függvény -meghívódni minden tranzakció végén.</p> -<p>Használhatod a postmaster -B opcióját is az -osztott memória szegmens méretének -növeléséhez. Ha az -értéket túl magasra állítod, lehet -hogy a postmaster nem indul el, mert túllépted az -operációs rendszer által megengedett -méretet. Minden buffer 8K méretû -és alapértelmezésban 64 buffer van.</p> -<p>A -S opcióval növelheted a szerver átmeneti -rendezésekre fenntartott memória területét. -Az értéket -kilobyteban add meg. Az alapértelmezett érték -512K. </p> -<p>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.<br> -</p> -<p>Hardver kiválasztásában segíthet: <a - href="http://candle.pha.pa.us/main/writings/pgsql/hw_performance/index.html">http://candle.pha.pa.us/main/writings/pgsql/hw_performance/index.html</a> -és <a href="http://www.powerpostgresql.com/PerfList/">http://www.powerpostgresql.com/PerfList/</a>.<br> -</p> -<p>A postgresql.conf beállitásaival kapcsolatos -tudnivalók: <a - href="http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html">http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html</a> -és <a - href="http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html">http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html</a>.</p> -<p></p> -<p><a name="3.7"></a> <big style="text-decoration: underline;">3.7) -Milyen hibakeresõ -lehetõségek érhetõek el?</big></p> -<p>A PostgreSQL számos lehetöséggel rendelkezik ami -értékes lehet a hibakeresésnél.</p> -Elösször is, futtathatod a configure scriptet ---enable-cassert opcióval, sok assert() -funkcióhivás ellenörzi -a program futását és megállitja ha valami -vératlan hiba történik.<br> -<p>Mind a postmaster és a postgres számos hibakeresö -lehetüséggel rendelkezik. Mindig amikor elinditod a -postmastert, gyözödj meg -róla, hogy a kimenetet log állományba -küldöd. Igy:</p> -<p>cd /usr/local/pgsql</p> -<p>./bin/postmaster >server.log 2>&1 &</p> -<p>Ez egy server.log állományt hoz létre a -felsö -PostgreSQL könyvtárban. Ez az állomány -tartlamaz majd számos hasznos -információt a szerverrel kapcsolatos -problémákról és -hibákról. A postmaster -d opciójával lehet -részletesebb hibakeresö információt kapni. A --d opcióhoz meg kell határozni egy hiba szintet. -Vigyázz, a magas -hibakeresö szint nagy log állományt okozhat.</p> -<p>Ha a postmaster nem fut, akkor futtathatod a postgres szervert -parancssorból is, és az SQL kifejezést -közvetlenül ennek adhatod át. Ez csak -hibakeresés esetében javasolt. Az új sor a -kifejezés végét jelenti, nem a pontosvesszö. -Ha hibakeresö opciókkal -forditottad a szervert, használhatsz egy debuggert is hogy -lásd hogy mi -történik. Mivel igy a szervert nem a postmaster inditotta, -nem -többfelhasználós környezetként fut, igy -a zárolási és a szerverek -közötti kommunikációs hiba jelenségek -nem jelentkeznek.</p> -<p>Ha már fut a postmaster, indits egy psql-t, és -nézd meg a szerver processz PID-jét! Egy debuggert -használhatsz a processzhez -csatlakozáshoz. Beállithatsz töréspontokat -és elindithatsz -lekérdezéseket. Ha a postgres inditásban keresel -hibát, a PGOPTIONS környezeti -változót állitsd be "-W n" értékre. -Ez n másodperc várakozást -idéz elö, igy tudsz csatlakozni a processzhez, el tdsz -hejezni töréspontokat, majd -folytathatod a indítást.</p> -<p>A postgres program -s, -A és -t opciói is nagyon -hasznosak lehetnek hibakeresésnél és -teljesítmény -mérésnél.</p> -<p>Profiling lehtöséggel is fordithatod a szervert, hogy -lásd melyik funkciók foglalják el a futási -idõt. A -szerver profile állományai a pgsql/data/base/dbname -könzvtárba kerülnek, a kliens -profile állományok az aktuális -könyvtárba. -Linuxon ehhez szükséges a -DLINUX_PROFILE -fordítási direktiva.</p> -<a name="3.8"></a> <big style="text-decoration: underline;">3.8) -Miért kapok "Sorry, too many clients" -(Túl sok kliens) <br> -hibát csatlakozásnál?</big><br> -<p>Növelned kell a postmaster egyidejûleg futtatott szerver -processz szám korlátját.</p> -<p>Az alapértelmezett korlát 32 processz. Ezt -növelhetjed úgy, hogy újrainditod a postmastert -és -N opcióval -meghatárotod az új értéket, vagy -módositod a postgresql.conf-ot.</p> -<p>Ne felejtsd el, hogy ha növeled a szerver processzek -maximális számát, akkor bufferek -számát is növelned kell, -legalább a processzek számának -kétszeresére. Nagy processz számokesetében -valószinüleg a Unix konfigurációs -paramétereken is növelni kell. -Ellenörizd a SHMMAX (az osztott memória szegmensek -maximális mérete), -a SEMMNS és a SEMMNI (a szemaforok maximális -száma), az NPROC (a processzek -maximális száma), a MAXUPRC -(felhasználónkénti maximális -processz szám) és a NFILE és NINODE (a megnzitott -állománzok maximális száma) -paramétereket. A PostgreSQL azért korlátozza -külön a processz -számot, hogy a rendszeredet ne terhelhesse meg -túlságosan.</p> -<p>A PostgreSQL 6.5 verzióban a maximális szerver -processz -szám 64 volt és a módositáshoz bele kellett -irni a -include/storage/sinvaladt.h állományba és -újra kellett forditani a servert. <a name="3.9"></a></p> -<big style="text-decoration: underline;">3.9) Mi van pgsql_tmp -könyvtárban?</big><br> -<p>Ez a könyvtár a lekérdezés -végrehajtó által létrehezott -átmeneti állományokat tartalmazza. -Például ha egy -rendezést kell végrehajtani egy ORDER BY kifejezés -miatt és a m?velet több -memóriát vesz igénybe, mint amennyit a -S -paraméter megenged, akkor az -átmeneti könyvtárban hoz létre egy -állományt a -fennmaradó adat tárolására.</p> -<p>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.</p> -<a name="3.10"></a> <big style="text-decoration: underline;">3.10) -Miért kell dumpolni és -újratölteni PostgreSQL kiadás -váltásánál?</big><br> -<p>A PostgreSQL csapat csak apróbb -változtatásokat -hajt végre a kisebb kiadások között, igy ha 7.2 -verzióról -állsz át 7.2.1 verzióra, akkor nem -szükséges kidumplonod az adatbázist. A nagy -kiadások esetében (például -verzióról 7.3-ra áttérésnél) -változik a belsiõ adatstruktúrák és -adatállományok formátuma. Ezek a -változások gyakran nagyon összetettek, ezért -inkáb nem tartunk fenn visszafelé -kompatibilitást. A dump az adatot általános -formátumban irja ki, majd az -új formátumban lehet azt visszatöleni. -</p> -Azokban a kiadásokban, amelyek között az adat -formátum nem változik, a pg_upgrade program -használható dumpolás -és helyreállitás nélkül. -<hr style="width: 100%; height: 2px;"><br> -<h2 style="text-align: center;"> Mûködtetési -kérdések</h2> -<br> -<a name="4.1"></a> <big style="text-decoration: underline;">4.1) Mi a -különbség a -bináris és a normál kurzorok között?</big><br> -<p>Nézd meg a DECLARE dokumentációját.</p> -<a name="4.2"></a> <big style="text-decoration: underline;">4.2) -Hogyan tudom select-elni a -lekérdezés elsõ pár sorát?</big><br> -<p>Olvasd el a FETCH dokumentációját, vagy -használd a SELECT LIMIT-et.</p> -<p>Az egész lekérdezést végre kell -hajtani, -még akkor is, ha csak az elsõ pár sort akarod -megkapni. Gondolj arra, hogy a -lekérdezésben lehet ORDER BY is. Ha van olyan index, ami -megfelel az ORDER BY kifejezésednek, -a PostgreSQL képes lehet az elsö néhány -rekord -visszaadására, vagy a teljes lekérdezésnek -le kell futnia, amig a kért rekordok -le nem generálódnak. -<a name="4.3"></a><big style="text-decoration: underline;"><br> -</big></p> -<p><big style="text-decoration: underline;">4.3) Hogy tudom -kilistázni a -táblákat vagy más dolgokat a PostgreSQL-ben?</big></p> -<p>Elolvashatod a psql forrás kódjában a -pgsql/src/bin/psql/describe.c állományban. Ez SQL -parancsokat tartalmaz, amelyek azokat -a kimeneteket állitják elö, amiket a per jellel -kezdödö -parancsok adnak vissza.</p> -<a name="4.4"></a> <big style="text-decoration: underline;">4.4) -Hogyan tudok eltávolítani egy -oszlopot egy táblából?</big><br> -<br> -<p>Ez a funkcionalitás a 7.3 verziótül kezdve -érhetö el az ALTER TABLE DROP COLUMN -nal. A régebbi -vertiókban igy lehet -végrehajtani:</p> -<pre>BEGIN;</pre> -<pre>LOCK TABLE old_table;</pre> -<pre>SELECT ... -- minden oszlopot, kivétel amit törölni szeretnél<br></pre> -<pre>INTO TABLE new_table</pre> -<pre>FROM old_table;</pre> -<pre>DROP TABLE old_table;</pre> -<pre>ALTER TABLE new_table RENAME TO old_table;</pre> -<pre>COMMIT;</pre> -<pre><br></pre> -<h4><a name="4.5"></a><big - style="text-decoration: underline; font-weight: normal;">4.5) Mi a -maximális mérete egy sornak, -egy táblának vagy egy adatbázisnak?</big></h4> -<br> -<p>A korlátok:</p> -<ul> - <li> - <p>adatbázis: korlátlan (1 TB az általunk -ismert -lagnagyobb)</p> - </li> - <li> - <p>tábla: 16 TB</p> - </li> - <li> - <p>rekord/sor 1.6TB</p> - </li> - <li> - <p>mezö 1 GB</p> - </li> - <li> - <p>a tábla sorainak száma: korlátlan</p> - </li> - <li> - <p>a tábla oszlopainak száma: 250-1600 az oszlop -nevektõl függöen</p> - </li> - <li> - <p>A tábla indexeinek száma: korlátlan</p> - </li> -</ul> -<p>Természetesen nem igazán korlátlan, de a -tárterület, memória és egyéb -külsö tényezök korlátozzák. A -teljesitmény romolhat, ha ezek az értékek -szokatlanul nagyok.</p> -<p>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.</p> -<p>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.</p> -<a name="4.6"></a> <big style="text-decoration: underline;">4.6) -Mekkora adatbázis lemez terület -szükséges egy tipikus szöveg állomány <br> -tárolásához?</big><br> -<p>A PostgreSQL akár a szöveg állomány -helyigényének ötszörösét is -elfoglalhatja.</p> -<p>Képzelj el például, egy 100.000 soros -szöveget, aminek minde sora egy számból és -egy szövegbõl -áll. Tegyük el, hogy átlagosan 20 byte hosszú -szövegek. Ez a szövegállomány -körülbelül 2.8 MB helyet foglalna el. A tábla ami -a fenti adatszerkezetet eltárolná, -körülbelül 6.4 MB-os lenne. Ezt a -következöképpen számolhatjuk ki:</p> -<p>36 byte: sor fejléc</p> -<pre>24 byte: egy int mezö + egy szöveg mezö</pre> -<pre>4 byte: mutato</pre> -<pre>---------------------------------------</pre> -<pre>64 byte soronkent.</pre> -<p>Az adat oldal mérete a PostgreSQL-ben 8192 byte, igy 8192 / -64 = 128 rekord adatbázis oldalanként -(lefelé kerekitve).</p> -<pre>100000 rekord / 128 rekord oldalanként = 782 adat oldal<br>(felelé kerekitve).</pre> -<pre>782 adatbázis oldal * 8192 byte olalanként = 6,406,144<br>byte (6.4 MB)</pre> -<p>Az indexek nem foglalnak túl sokat, de tartalmazzák az -indexelt adatot, igy ezek is lehetnek nagyok.</p> -<p>A NULL értékek bittérképben vannak -tárolva, igy kevés helyet foglanak.</p> -<p><a name="4.7"></a><big style="text-decoration: underline;">4.7) Hogy -tudhatom meg milyen táblák, -indexek, adatbázisok vagy felhasználók</big></p> -<big style="text-decoration: underline;">vannak definiálva?<br> -</big> -<p>A psql-ben találsz számos '\' karakterrel -kezdödö utasítást az ilyen -információk listázására. A '\?' -segitségével tudot kilistázni ezeketa parancsokat. -Ezen kivül vannak rendszer táblák, -amelyek nevei 'pg_'-vel kezdödnek.</p> -<p>Próbáld ki a pgsql/src/tutorial/syscat.source -állományt is. Ez sok példát tartalmaz az -rendszertáblákon -végrehajtott SELECT-ekröl.</p> -<p><a name="4.8"></a><big style="text-decoration: underline;">4.8) A -lekérdezéseim lassúak, -vagy nem használják az indexeket. Miért?</big></p> -<p><big style="text-decoration: underline;"></big></p> -<p>Az indexeket nem használja a szerver minden -lekérdezésnél automatikusan. Csak akkor -használ indexet, ha a tábla mérete egy -megadott alsó határ felett van, és a -lekérdezés csak a sorok egy kis -részét érinti. Ez azért van, mert a -véletlen hozzáférés még -mindig lassabb lehet mint az tábla szekvenciális -olvasása.</p> -<p>Hogy a PostgreSQL meg tudja határozni hogy kell-e indexet -használni, léteznie kell egy statisztikának a -tábláról. Ez a statisztikai adatok a VAACUM -ANALYZE vagy az egyszerû ANALYZE mûveletek -során jönnek létre. A statisztikai adatok -felhasználásával az optimalizáló meg -tudja határozni, hogy hány sor van a -táblában, és el tudja dönteni, hogy -használjon-e indexet. A statisztiaki -adatgyüjtést idõnként végre kell -hajtani, ahogy a tábla adatai változnak.</p> -<p>Az indexeket normális esetben nem használja az ORDER -BY -vagy az OUTER JOIN. A szekvenciális olvasás -általában gyorsabb, mint az index keresés egy nagy -táblában. Bár a LIMIT az ORDER BY-val -kombinálva használhat -indexet, mert a tábla csak kis része érintett. -Bár a MIN -és MAX SQL funkciók sem használják az -indexeket, ezeket az -értékeket egy ORDER BY + LIMIT -lekérdezéssel is le lehet kérdezni:</p> -<pre>SELECT col</pre> -<pre>FROM tab</pre> -<pre>ORDER BY col [ DESC ]</pre> -<pre>LIMIT 1;</pre> -<br> -<p>Amikor helyettesítõ jel operátorokat -használsz, mint a LIKE kulcsszó vagy a ~, az indexeket -csak bizonyos körülmények -között lehet használni:</p> -<p>A keresõ string kezdete a keresési minta elején -kell hogy legyen. Például:</p> -<ul> - <li>A LIKE minták nem kezdõdhetnek % jellel.</li> - <li> ~ (regexp) kifejezések nem kezdõdhetnek ^ -jellel.</li> - <li>A keresési kifejezés nem kezdõdhet karakter -osztállyal.</li> - <li>A case-insensitive keresés (ILIKE, ~*) nem -használnak -indexet ehelyett funkcionális indexet használnak, amit a -4.12 -pontban találhatsz.</li> - <li>Az alapértelmezett C hellyel kell futtatni az initdb-t.</li> -</ul> -<a name="4.9"></a> <big style="text-decoration: underline;">4.9) Hogy -tudom ellenõrizni, hogy -optimalizálta a lekérdezés -optimalizáló<br> -a lekérdezésem?<br> -</big> -<p>Olvasd el a dokumentáció EXPLAIN-ról -szóló részét.</p> -<p><a name="4.10"></a><big style="text-decoration: underline;">4.10) Mi -az R-tree index?</big></p> -<p>Az R-tree index a térbeli adat indexelésére -alkalmas. Egy hash index nem képes tartomány -keresésekre. A B-tree -index csak egy dimenzión kezeli a tartomány -kereséseket. -Például ha az indexet egy pont (point adattípus) -típusú mez.re -építjük, gyorsabban kezeli az olyan jellegü -lekérdezéseket, mint egy -adott körben</p> -<p>található pontok.</p> -<p>Az R-tree tervezési mintát eredetileg -leíró -szöveg: Guttman, A. "R-trees: A Dynamic Index Structure for -Spatial Searching." Proceedings of the 1984 ACM SIGMOD Int'l Conf on -Mgmt of Data, 45-57.</p> -<p>Ezt olvashatod Stonebraker "Readings in Database Systems" c. -könyvében.</p> -<p>A beépített R-tree kezelni tudják a -sokszögeket (polygon adattípus) és a dobozokat -(box). Elméletileg, az R-tree -kiterjeszthetõ további dimenziókra is. -Gyakorlatilag ezen dolgoznod kell egy kicsit, -és még nincs dokumentációnk arról -hogy az -hogyan mûködik.</p> -<p><a name="4.11"></a><big style="text-decoration: underline;">4.11) Mi -a Genetic Query Optimizer?</big></p> -<p><big style="text-decoration: underline;"></big></p> -<p>A GEQO modul a lekérdezés optimalizáció -sebességét növeli nagy mennyiségû -tábla összekapcsolása -esetén. Lehetõvé teszi a nagy -lekérdezések végrehajtását nem -teljes kereséssel.</p> -<p><a name="4.12"></a><big style="text-decoration: underline;">4.12) -Hogyan tudok regexp keresést és -case-insensitive regexp keresést </big><big - style="text-decoration: underline;">használni? Hogyan tudok -indexet használni -case-insensitive kereséshez?</big><br> -</p> -<p>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.</p> -<p>A case-insensitive egyenlõség mûveleteket -általában igy hajtjuk végre:</p> -<p>SELECT *</p> -<pre>FROM tab</pre> -<pre>WHERE lower(col) = 'abc';</pre> -<p>Ez nem fog indexet használni, bár létrehozhatsz -egy funkció indexet:</p> -<pre>CREATE INDEX tabindex ON tab (lower(col));</pre> -<a name="4.13"></a> <big style="text-decoration: underline;">4.13) -Hogyan tudom észlelni egy -lekérdezésben, ha egy mezõ NULL?</big><br> -<p>Használd "IS NULL"-t és az "IS NOT NULL"-t.</p> -<p><a name="4.14"></a><big style="text-decoration: underline;">4.14) Mi -a különbség a -különbözõ karaktertípusok között?</big></p> -<ul> - <li>"char" egy karakter hosszú string</li> - <li>CHAR(n) bpchar üres hellyel a megadott n -hosszúságig</li> - <li>VARCHAR(n) varchar méret maximális hossz -meghatározásával, a lefogllat terület is -változó hosszú lesz</li> - <li>TEXT nincs meghatározott felső korlát</li> - <li>BYTEA változó hosszúságú -byte-tömb</li> -</ul> -<p>Látni fogod a belsõ elnevezésüket, ha -tanulmányozod a rendszertáblákatés -néhány hibaüzenetet.</p> -<p>Az utóbbi négy a "varlena" típusok, ami a -tárolásuk módjára utal: az elsõ 4 -byte a lemezen a hosszúság, a többi -az adat. A valódi méret tehát nagyobb mint a -deklarált -hosszúság.Ezek azadatok tömöritve -tárolódnak el, igy kevesebb helyet foglalnek el az -elöre számitottnál.</p> -<p>A CHAR(n) a legjobb megoldás, ha stabil -hosszúságú stringet tárolsz. A VARCHAR(n) -jó arra az esetekre, ha a hosszúság -változik, de van felsõ korlátja. A TEXT -típus korlátlan -hosszúságú (1 GB-ig) szövegek -tárolására alklamas. A BYTEA bináris adatok -tárolására van. A teljesitmény -mutatói hasonlóak ezenek a -típusoknak.</p> -<p><a name="4.15.1"></a><big style="text-decoration: underline;">4.15.1) -Hogyan tudok létrehozni -automatikusan növekvõ értékû -mezõt?</big></p> -<br> -A PostgreSQL rendelkezik egy SERIAL adattípussal. Ez egy -szekvenciát és egy indexet hoz létre az oszlopon. -Például ez:<br> -<pre>CREATE TABLE person (</pre> -<pre>id SERIAL,</pre> -<pre>name TEXT</pre> -<pre>);</pre> -<p>ugyanezt jelenti:</p> -<pre>CREATE SEQUENCE person_id_seq;</pre> -<pre>CREATE TABLE person (</pre> -<pre>id INT4 NOT NULL DEFAULT nextval('person_id_seq'),</pre> -<pre>name TEXT</pre> -<pre>);</pre> -<pre>CREATE UNIQUE INDEX person_id_key ON person ( id );</pre> -<br> -<p>A szekvenciákkal kapcsolatban olvasd el a create_sequence man -oldalt. A sor OID-jét is használhatod egyedi -azonositóként, bár ebben az esetben figyelj a -pg_gump használatánál a --o opcióra (COPY WITH OIDS, másolás OID-dal), hogy -meg?rizd az -értékeket.</p> -<p><a name="4.15.2"></a><big style="text-decoration: underline;">4.15.2) -Hogyan kaphatom meg egy SERIAL -beszúrás értékét?</big></p> -<p>Egy megoldás erre az, ha a nextval() funkcióval -megszerzed az értéket még mielött -beszúrnád -az adatot a táblába. Erre itt láthatsz egy -példát:</p> -<pre>new_id = execute("SELECT nextval('person_id_seq')");</pre> -<pre>execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise<br>Pascal')");</pre> -<p> -Esetleg lekérdezheted a szekvencia állapotát a sor -beszúrása után. </p> -<pre>execute("INSERT INTO person (name) VALUES ('Blaise Pascal')");</pre> -<pre>new_id = execute("SELECT currval('person_id_seq')");</pre> -<p> -Végül pedig, használhatod a visszaadott OID -értéket is, bár ez a lehetõ -legkevésbé portolható. Perl DBI-ben, Edmund Mergl -DBD::Pg moduljában az OID érték -használható a -$sth->execute() után ($sth->{pg_oid_status}).</p> -<a name="4.15.3"></a> <big style="text-decoration: underline;">4.15.3) -A currval() és a nextval() nem -teremt holtpont veszélyes helyzetet a felhasználók -között?</big><br> -<p>Nem. A currval() funkció a szerver processzed által -adott -értéket adja vissza, nem pedig a többi szerver -processz által adottat.</p> -<big style="text-decoration: underline;"><a name="4.15.4"></a>4.15.4) -Miért nem használódnak fel újra a -sequence számok tranzakció abort esetén?</big><br> -<p>Miért vannak problémák a serial oszlopok -számozásával?</p> -<p>A párhuzamosság fejlesztése -érdekében a sorozat számokat kérésre -adja ki a szerver futó tranzakcióknak, és azokat -nem zárja, amig a tranzakció véget nem ér. -Ez jukakat okoz a -számozásokban a visszaforditott tranzakciók miatt.</p> -<p><a name="4.16"></a><big style="text-decoration: underline;"> 4.16) -Mi a -OID? Mi a TID?</big></p> -<p>Az OID a PostgreSQL egyedi sor azonositója. Minden sor, ami -létrejön a szerveren, kap egy OID-t. Minden OID, amit az -initdb alatt jön -létre 16384 alatt van (lásd include/access/transam.h). -Minden, -felhasználó által létrehozott OID -legalább ennyi. -Alapértelmezésben, az OID nem csak a -táblában vagy az adatbázisban egyedi, -hanem a teljes PostgreSQL adatbázis rendszerben.</p> -<p>A PostgreSQL az OID-okat a belsö tábláiban -használja a sorok táblák között -összekapcsolásához. Ezek az OID-k -használhatóak a rekordok azonositására is -amikor táblákat csatol -össze a szerver (JOIN). Az OID-ot használhatod mezö -típusként is, -és indexelheted is.</p> -<p>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:</p> -<p>CREATE TABLE new_table(old_oid oid, mycol int);</p> -<pre>SELECT old_oid, mycol INTO new FROM old;</pre> -<pre>COPY new TO '/tmp/pgtable';</pre> -<pre>DELETE FROM new;</pre> -<pre>COPY new WITH OIDS FROM '/tmp/pgtable';</pre> -<br> -<p>Az OID 4 byte-os integer értékként -tárolódik, igy 4 milliárdnál -túlcsordul. Még soha senki nem jelezte hogy ez -történt volna, -és ezt a korlátot igyekszünk eltávolitani, -még mielött -bárki észrevenné.</p> -<p>A TID a fizikai sorok blokk és offszet címmel -való -azonositására szolgál. A TID változik -minden rekord módositás és -törlés alkalmával. Ezeket az indexek -használják hogy a fizikai sort gyorsan -megtalálják.</p> -<p><a name="4.17"></a><big style="text-decoration: underline;">4.17) Mi -a PostgreSQL-ben használt -kifejezések jelentése?</big></p> -<br> -<p>Néhol a forrás kódban és a -dokumnetációban találhatóak -kifejezések, amelyek általánosabb -jelentéssel bírnak. -Itt van néhány:</p> -<ul> - <li>tábla (table), reláció (relation), -osztály (class)</li> - <li>sor (row), rekord (record), tuple (nincs magyar jelentés)</li> - <li>oszlop (column), mezö (field), attributum (attribute)</li> - <li>retrieve, select</li> - <li>helyettesit (replace), módosit (update)</li> - <li>hozzáfûz (append), beszúr (insert)</li> - <li>OID, sorozat érték (serial value)</li> - <li>portal, cursor</li> - <li>range variable, tábla név, tábla alias</li> -</ul> -Az általános adatbázis kifejezések -összefoglalóját itt olvasható: -<p><a - href="http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary%0A/glossary.html">http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.html</a></p> -<br> -<a name="4.18"></a> <big style="text-decoration: underline;">4.18) -Miért kapom ezt a hibát: -"ERROR: Memory exhausted in AllocSetAlloc()"?<br> -</big> -<p>Lehet hogy elfogyott a virtuális memóriád, vagy -a -kerneled erõforrás korlátai alacsonyak. -Próbáld ki ezt mielött -elinditanád a postmastert:</p> -<pre>ulimit -d 262144</pre> -<pre>limit datasize 256m</pre> -<p>A shelltõl függõen ezek közül csak az -egyik fut majd le, de a processzek adatszegmensét sokkal -magasabbra állitja, ami -talán elég lesz a lekérdezés -végrehajtásához. Ez az utasítás a -jelenlegi processzre (a shelled) érvényes, és -minden -általa létrehozott processzre. Ha problémád -van az SQL klienssel, mert a -szerver túl nagy adatot küld vissza, próbáld -meg e -klienssel is ugyanezt.</p> -<p><a name="4.19"></a><big style="text-decoration: underline;">4.19) -Hogyan tudhatom meg PostgreSQL, milyen -verziót futtatok?</big></p> -<p>A psql programban select version();</p> -<a name="4.20"></a> <big style="text-decoration: underline;">4.20) -Miért kapok "invalid large obj -descriptor" hibát nagy objektumok -kezelésénél?</big><br> -<p>A nagy objektumok kezelését egy tranzakciós -blokkban helyezd el. (BEGIN és COMMIT között)</p> -<p><br> -Jelenleg a PostgreSQL ezt a szabályt azzal teszi -kötelezõvé, hogy a tranzakció -végén a nagy objektumokat -lezárja, igy a tranzakció után az elsõ -mûvelet amit az objektumon -végrahajtanál hibás lesz.</p> -<p>Ha olyan programozási felületet használsz mint az -ODBC vagy a JDBC akkor valószinûleg ki kell kapcsolnod az -auto-commit-ot.</p> -<p><a name="4.21"></a><big style="text-decoration: underline;">4.21) -Hogy hozhatok létre olyan oszlopot, -aminek alapértelmezett </big><big - style="text-decoration: underline;">érétke a jelenlegi -idõ?</big><br> -</p> -<p>Használd a CURRENT_TIMESTAMP -ot:</p> -<pre>CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );</pre> -<a name="4.22"></a> <big style="text-decoration: underline;">4.22) -Miért olyan lassúak az -al-lekérdezéseim IN-nel?</big><br> -<p>Jelenleg az al-lekérdezéseket a külsõ -lekérdezéshez csatoljuk. Ha az allekérdezés -csak kevés sort eredményez -és a külsõ lekérdezés sokat, akkor az -IN is gyors. Az EXISTS kulcsszó -használatával gyorsithatod a lekérdezéseket.</p> -<p>SELECT *</p> -<pre>FROM tab</pre> -<pre>WHERE col IN (SELECT subcol FROM subtab);</pre> -<br> -<p>EXISTS használatával:</p> -<pre>SELECT *</pre> -<pre>FROM tab</pre> -<pre>WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col);</pre> -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. -<p><a name="4.23"></a><big style="text-decoration: underline;">4.23) -Hogyan tudok outer join-t végrehajtani?</big></p> -<p>A PostgreSQL a szabványos SQL szintaktikát -követi. -Itt van két példa:</p> -<p>SELECT *</p> -<pre>FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);</pre> -<p> -vagy</p> -<pre>SELECT *</pre> -<pre>FROM t1 LEFT OUTER JOIN t2 USING (col);</pre> -<p>Ezek az identikus lekérdezések -összekapcsolják a t1.col és a t2.col mezõket, -és a t1 bármelyik kapcsolatlan -sorát is visszadják. A RIGHT JOIN a t2 kapcsolatlan -sorait adta volna vissza, a FULL JOIN pedig a kapcsolt, és -mindkét tábla kapcsolatlan sorait -adja. Az OUTER kulcsszó opcionális, a LEFT, RIGHT -és FULL JOIN -szintaktikailag helyes. Az átlagos -összekapcsolásokat INNER JOIN-nak -nevezzük.</p> -<p>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:</p> -<pre><code>SELECT tab1.col1, tab2.col2</code></pre> -<pre><code> -FROM tab1, tab2</code></pre> -<pre><code> -WHERE tab1.col1 = tab2.col1</code></pre> -<pre><code> -UNION ALL</code></pre> -<pre><code> -SELECT tab1.col1, NULL</code></pre> -<pre><code> -FROM tab1</code></pre> -<pre><code> -WHERE tab1.col1 NOT IN (SELECT tab2.col1 FROM tab2)</code></pre> -<pre><code> -ORDER BY col1</code></pre> -<pre><code></code></pre> -<code></code> -<a name="4.24"></a> <big style="text-decoration: underline;">4.24) -Hogyan tudok több adatbázison -végrehajtani lekérdezést?<br> -</big> -<p>Arra nincs lehetõség, hogy más -adatbázisból kérdezz le adatot.Mivel a PostgreSQL -adatbázis specifikus rendszer -táblákat töltbe, bizonytalan hogy egy -adatbázisok közötti -lekérdezésnek hogyankellene viselkednie. </p> -<p>A contrib/dblink könyvtárban találsz egy -megoldást erre, ami funkció hivások -segitségével -mûködik. Persze, a kliens hozhat -létreszimultán kapcsolatot több adatbázissal, -és -összefésülheti az eredményeket.</p> -<p><big style="text-decoration: underline;"><a name="4.25"></a>4.25) -Hogy tudok több soros vagy oszlopos -eredményt visszaadni egy funkcióból?</big><br> -</p> -<big style="text-decoration: underline;"></big> -<p>A PL/pgSQL tárolt eljárás nyelvvel refcursor -használatával. Részletesen itt:</p> -<p><a - href="http://www.PostgreSQL.org/idocs/index.php?plpgsql-cursors.html">http://www.PostgreSQL.org/idocs/index.php?plpgsql-cursors.html</a></p> -<a name="4.26"></a> <big style="text-decoration: underline;">4.26) -Miért nem tudom megbizhatóan -létrehozni és törölni az átmeneti -táblákat a PL/pgSQL funkciókban?</big><br> -<p>A PL/pgSQL cacheli a funkciók tartalmát, aminek az a -szerencsétlen mellékhatása, hogy ha egy PL/pgSQL -funkció -használ egy átmeneti táblát, ami -később törlõdik majd ujra -létrejön, akkor az újra lefutó funkció -nem fogja megtalálni a táblát, mert -a cache változat a régi táblára tartalmaz -mutatót. A megoldás erre -az <code>EXECUTE</code> 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.</p> -<big style="text-decoration: underline;">4.27) -Milyen replikációs -lehetõségek vannak?</big><br> -<p>Bár a replikáció egyetlen terület, -több technológia létezik replikációra, -természetesen mindnek meg vannak a maga előnyei és -hátrányai.</p> -<p>A master/slave replikációs megoldással a master -adatbázison hajthatunk végre modosításokat, -míg a slave adatbázisokon csak -lekérdezéseket. A PostgreSQL legnépszerűbb -master/slave replikációs megoldása a Solny-I. </p> -<p>Számos más master/slave replikációs -lehetõség létezik.Egy Listát olvashatsz -ezekrõl itt: </p> -<p><a href="http://gborg.PostgreSQL.org/genpage?replication_research">http://gborg.PostgreSQL.org/genpage?replication_research</a></p> -<p>A multi-master replikáció lehetővé teszi -több master adatbázis használatát, bár -ez a technológia drasztikusan csökkenti az adatbázis -teljesítményét a sok szinkornizáció -miatt. A PGCluster a legelterjedtebb ilyen megoldás.</p> -<p>Egy többfelhasználós replikációs -rendszer készül itt:</p> -<p><a - href="http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php">http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php.</a></p> -<p><a name="4.28"></a><big style="text-decoration: underline;">4.28) -Milyen kódolási -lehetõségek vannak?</big></p> -<ul> - <li>A contrib/pgcrypto tartlamaz számos SQL -lekérdezésben használható -kódolást.</li> - <li>A kliens-szerver kommunikáció -rejtjelezésére a hostssl használható. Ezt a -pg_hba.conf-ben engedélyeztheted.</li> - <li>Az adatbázis felhsználók jelszavait -tároláskor kódolja a rendszer. </li> - <li>Régebbi verziókban a PASSWORD_ENCRYPTION -opcióval -lehetett bekapcsolni.</li> - <li>A szerveren használhatsz kódolt fájrendszert.<br> - </li> -</ul> -<hr style="width: 100%; height: 2px;"><br> -<div style="text-align: center;"> -<h2>A PostgreSQL kiterjesztése</h2> -</div> -<br> -<a name="5.1"></a> <big style="text-decoration: underline;">5.1) -Írtam egy felhasználói -funkciót. Miért core dumpol az adatbázis amikor -használom?<br> -</big> -<p>Számos probléma lehet. Elöbb probáld ki a -funkciódat egy különálló -alkalmazásban.</p> -<p><a name="5.2"></a><big style="text-decoration: underline;">5.2) -Hogyan lehet új adattípusokat -és funkciókat hozzáadni a PostgreSQL </big><big - style="text-decoration: underline;">disztribúcióhoz?</big><br> -</p> -<p>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.</p> -<a name="5.3"></a> <big style="text-decoration: underline;">5.3) -Hogyan lehet olyan C funkciót -írni, ami Tuple-t ad vissza?</big><br> -<p>A 7.3 verziótól kezdve a PostgreSQL támogatja a -táblázatokat viszzaadó funkciókat C, -PL/pgSQL és SQL nyelveken. -Bõvebb dokumentációt a Programozó -kézikönyvben találsz. Egy C példa -funkció található a contrib/tablefunc -könyvtárban.</p> -<p><a name="5.4"></a><big style="text-decoration: underline;">5.4) -Megváltoztattam egy forrás -állományt. Miért nem változik a -bináris </big><big style="text-decoration: underline;">újrafordítás -után?</big><br> -</p> -<p>A Makefile-ok nem ismerik a include állományok -megfelelõ függõségeit. Végre kell -hajtanod egy make clean-t, majd újra egy -make-t. Ha GCC-t használsz felhasználhatod a configure -script ---enable-depend opcióját, így a compiler maga -fogja ellenõrizni a -függõségeket.</p> -<br> -<br> -</body> -</html> diff --git a/doc/src/FAQ/FAQ_japanese.html b/doc/src/FAQ/FAQ_japanese.html deleted file mode 100644 index 9aa6b7e80510e3d627cb67aabe08061979415a00..0000000000000000000000000000000000000000 --- a/doc/src/FAQ/FAQ_japanese.html +++ /dev/null @@ -1,1399 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> -<HTML> -<HEAD> -<TITLE>PostgreSQL FAQ in Japanese</TITLE> -</HEAD> -<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#FF0000" VLINK="#A00000" ALINK="#0000FF"> -<META http-equiv="Content-Type" content="text/html; charset=utf-8"> - -<h1>PostgreSQL(ãƒã‚¹ãƒˆã‚°ãƒ¬ã‚¹ãƒ»ã‚ュー・エル)ã«ã¤ã„ã¦ã‚ˆãã‚る質å•ã¨ãã®è§£ç”(FAQ)</h1> -<p>原文最終更新日: Thu Jan 01 14:01:00 EDT 2009</p> -<p>ç¾åœ¨ã®ç¶æŒç®¡ç†è€…: Bruce Momjian (<A -href="mailto:bruce@momjian.us">bruce@momjian.us</a>)<br /> -Maintainer of Japanese Translation: Jun Kuwamura (<A -href="mailto:juk at postgresql.jp">juk at postgresql.jp</a>)<br /></p> -<p>ã“ã®æ–‡æ›¸ã®æœ€æ–°ç‰ˆã¯<a href= - "http://www.postgresql.org/docs/faqs.FAQ.html"> - http://www.postgresql.org/docs/faqs.FAQ.html</a> -ã§è¦‹ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚</p> -<p>プラットホームã«ç‰¹æœ‰ã®è³ªå•ã«ã¤ã„ã¦ã¯:<a href= - "http://www.postgresql.org/docs/faq/"> - http://www.postgresql.org/docs/faq/</a> -<br /> -ã«è§£ç”ãŒã‚ã‚Šã¾ã™ã€‚</p> - -<p><small><pre> -(以下ã€è¨³è€…ã«ã‚ˆã‚‹æ³¨é‡ˆã‚’ [訳注: 㨠] ã¨ã§å›²ã‚“ã§è¨˜ã—ã¾ã™ã€‚) -[訳注: - 日本語版ã®FAQã¯ã€ - http://www.postgresql.org/docs/faqs.FAQ_japanese.html - ã«ã‚ã‚Šã¾ã™ã€‚ - 最新ã®æ—¥æœ¬èªžç‰ˆã«ã¤ã„ã¦ã¯ã€ã“ã®æ–‡æ›¸ã®æœ€å¾Œã«ã‚ã‚‹<a - href="#item-japanese">「日本語版ã«ã¤ã„ã¦ã€</a>ã‚’ã”らんãã ã•ã„。 - -] -</pre></small></p> - -<hr /> - -<h2 align="center">一般的ãªè³ªå•</h2> - -<a href="#item1.1">1.1</a>) PostgreSQLã¨ã¯ä½•ã§ã™ã‹ï¼Ÿ ãã®å‘¼ã³æ–¹ã¯ï¼Ÿ Postgresã¨ã¯ï¼Ÿ<br /> -<a href="#item1.2">1.2</a>) 誰㌠PostgreSQL をコントãƒãƒ¼ãƒ«ã—ã¦ã„ã¾ã™ã‹ï¼Ÿ<br /> -<a href="#item1.3">1.3</a>) PostgreSQLã®è‘—作権ã¯ã©ã†ãªã£ã¦ã¾ã™ã‹ï¼Ÿ<br /> -<a href="#item1.4">1.4</a>) PostgreSQLをサãƒãƒ¼ãƒˆã™ã‚‹ãƒ—ラットホームã¯ï¼Ÿ<br /> -<a href="#item1.5">1.5</a>) PostgreSQLã¯ã©ã“ã‹ã‚‰å…¥æ‰‹ã§ãã¾ã™ã‹ï¼Ÿ<br /> -<a href="#item1.6">1.6</a>) 最新ã®ãƒªãƒªãƒ¼ã‚¹ã¯ã©ã‚Œã§ã™ã‹ï¼Ÿ<br /> -<a href="#item1.7">1.7</a>) サãƒãƒ¼ãƒˆã¯ã©ã“ã§å—ã‘られã¾ã™ã‹ï¼Ÿ<br /> -<a href="#item1.8">1.8</a>) ãƒã‚°ãƒ¬ãƒãƒ¼ãƒˆã¯ã©ã®ã‚ˆã†ã«ç™ºä¿¡ã—ã¾ã™ã‹ï¼Ÿ<br /> -<a href="#item1.9">1.9</a>) 既知ã®ãƒã‚°ã‚„未ã ç„¡ã„機能ã¯ã©ã†ã‚„ã£ã¦è¦‹ã¤ã‘ã¾ã™ã‹ï¼Ÿ<br /> -<a href="#item1.10">1.10</a>) ã©ã®ã‚ˆã†ãªæ–‡æ›¸ãŒã‚ã‚Šã¾ã™ã‹ï¼Ÿ<br /> -<a href="#item1.11">1.11</a>) <small>SQL</small>ã¯ã©ã†ã™ã‚Œã°å¦ã¹ã¾ã™ã‹ï¼Ÿ<br /> -<a href="#item1.12">1.12</a>) パッãƒã‚’æä¾›ã—ãŸã‚Šã€é–‹ç™ºãƒãƒ¼ãƒ å‚åŠ ã™ã‚‹ã«ã¯ã©ã†ã™ã‚Œã°ã‚ˆã„ã§ã™ã‹ï¼Ÿ<br /> -<a href="#item1.13">1.13</a>) ä»–ã®<small>DBMS</small>ã¨æ¯”ã¹ã¦PostgreSQL ã¯ã©ã†ãªã®ã§ã™ã‹ï¼Ÿ PostgreSQLを組ã¿è¾¼ã¿ã«ä½¿ãˆã¾ã™ã‹ï¼Ÿ<br /> -<a href="#item1.14">1.14</a>) PostgreSQLã¯å›½æ¯Žã®æœ€æ–°ã®å¤æ™‚é–“ã®å¤‰æ›´ã‚’扱ã„ã¾ã™ã‹ï¼Ÿ<br /> -<a href="#item1.15">1.15</a>) PostgreSQLã®ãƒ¡ãƒ¼ãƒªãƒ³ã‚°ãƒªã‚¹ãƒˆã®è³¼èªã‚’ã‚„ã‚ã‚‹ã«ã¯ã©ã†ã™ã‚Œã°ã‚ˆã„ã§ã™ã‹ï¼Ÿã¾ãŸã€é›»åメールをé‡è¤‡ã—ã¦å—ã‘å–らãªã„よã†ã«ã™ã‚‹ã«ã¯ã©ã†ã—ã¾ã™ã‹ï¼Ÿ<br /> - -<h2 align="center">ユーザ・クライアントã®è³ªå•</h2> - -<a href="#item2.1">2.1</a>) PostgreSQL ã«ã¯ã©ã‚“ãªã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹ãŒä½¿ãˆã¾ã™ã‹ï¼Ÿ<br /> -<a href="#item2.2">2.2</a>) PostgreSQL ã‚’ Web ページã¨é€£æºã•ã›ã‚‹ã«ã¯ã©ã‚“ãªãƒ„ールãŒã‚ã‚Šã¾ã™ã‹ï¼Ÿ<br /> -<a href="#item2.3">2.3</a>) PostgreSQL ã«ã‚°ãƒ©ãƒ•ã‚£ã‚«ãƒ«ãƒ»ãƒ¦ãƒ¼ã‚¶ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹ã¯ã‚ã‚Šã¾ã™ã‹ï¼Ÿ<br /> - - -<h2 align="center">管ç†ä¸Šã®è³ªå•</h2> - -<a href="#item3.1">3.1</a>) ã©ã†ã™ã‚Œã°ã€PostgreSQLã‚’<i>/usr/local/pgsql</i> 以外ã®å ´æ‰€ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã§ãã¾ã™ã‹ï¼Ÿ<br /> -<a href="#item3.2">3.2</a>) ä»–ã®ãƒ›ã‚¹ãƒˆã‹ã‚‰ã®æŽ¥ç¶šã¯ã©ã®ã‚ˆã†ã«åˆ¶å¾¡ã—ã¾ã™ã‹ï¼Ÿ<br /> -<a href="#item3.3">3.3</a>) より良ã„性能を得るãŸã‚ã«ã¯ã€ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ãƒ»ã‚¨ãƒ³ã‚¸ãƒ³ã‚’ã©ã®ã‚ˆã†ã«èª¿æ•´ã—ã¾ã™ã‹ï¼Ÿ<br /> -<a href="#item3.4">3.4</a>) ã©ã®ã‚ˆã†ãªãƒ‡ãƒã‚°æ©Ÿèƒ½ãŒä½¿ãˆã¾ã™ã‹ï¼Ÿ<br /> -<a href="#item3.5">3.5</a>) 接続ã—よã†ã¨ã™ã‚‹ã¨ãã« <i>'Sorry, too many clients'</i> ãŒå‡ºã‚‹ã®ã¯ãªãœã§ã™ã‹ï¼Ÿ<br /> -<a href="#item3.6">3.6</a>) PostgreSQLã®ã‚¢ãƒƒãƒ—グレードã®æ‰‹é †ã¯ã©ã†ãªã‚Šã¾ã™ã‹ï¼Ÿ<br /> -<a href="#item3.7">3.7</a>) ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã«ã¯ã©ã®ã‚ˆã†ãªã‚³ãƒ³ãƒ”ュータを使ãˆã°ã‚ˆã„ã§ã™ã‹ï¼Ÿ<br /> - - -<h2 align="center">æ“作上ã®è³ªå•</h2> - -<a href="#item4.1">4.1</a>) 最åˆã®ã„ãã¤ã‹ã®ãƒã‚¦ã®ã¿ã‚’ <small>select</small> ã™ã‚‹ã«ã¯ã©ã†ã—ã¾ã™ã‹ï¼Ÿ ランダムãªãƒã‚¦ï¼Ÿ <br /> -<a href="#item4.2">4.2</a>) 定義ã•ã‚ŒãŸãƒ†ãƒ¼ãƒ–ルã€ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ã€ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã€ãŠã‚ˆã³ã€ãƒ¦ãƒ¼ã‚¶ã‚’ã©ã®ã‚ˆã†ã«ã—ã¦è¦‹ã¤ã‘出ã—ã¾ã™ã‹ï¼Ÿ<br /> -<a href="#item4.3">4.3</a>) カラムã®ãƒ‡ãƒ¼ã‚¿ã‚¿ã‚¤ãƒ—を変更ã™ã‚‹ã«ã¯ã©ã†ã—ã¾ã™ã‹ï¼Ÿ<br /> -<a href="#item4.4">4.4</a>) ãƒã‚¦ã€ãƒ†ãƒ¼ãƒ–ルã€ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã®æœ€å¤§ã‚µã‚¤ã‚ºã¯ï¼Ÿ<br /> -<a href="#item4.5">4.5</a>) 一般的ãªãƒ†ã‚ストファイルã®ãƒ‡ãƒ¼ã‚¿ã‚’ä¿å˜ã™ã‚‹ã«ã¯ã€ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã®ãƒ‡ã‚£ã‚¹ã‚¯å®¹é‡ã¯ã©ã®ãらã„å¿…è¦ã§ã™ã‹ï¼Ÿ<br /> -<a href="#item4.6">4.6</a>) クエリãŒé…ã„ã®ã¯ãªãœã§ã—ょã†ï¼Ÿ ãªãœã€ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ãŒä½¿ã‚ã‚Œãªã„ã®ã§ã—ょã†ã‹ï¼Ÿ<br /> -<a href="#item4.7">4.7</a>) クエリオプティマイザãŒã€ã©ã®ã‚ˆã†ã«ã‚¯ã‚¨ãƒªã‚’評価ã—ã¦ã„ã‹ã‚’ã€è¦‹ã‚‹ã«ã¯ã©ã†ã—ã¾ã™ã‹ï¼Ÿ<br /> -<a href="#item4.8">4.8</a>) æ£è¦è¡¨ç¾ã§ã®æ¤œç´¢ã‚„大文å—ã¨å°æ–‡å—ã¨ã‚’区別ã—ãªã„æ£è¦è¡¨ç¾æ¤œç´¢ã¯ã©ã®ã‚ˆã†ã«å®Ÿç¾ã—ã¾ã™ã‹ï¼Ÿå¤§æ–‡å—ã¨å°æ–‡å—ã¨ã‚’区別ã—ãªã„検索ã®ãŸã‚ã®ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ã¯ã©ã®ã‚ˆã†ã«ä½¿ã„ã¾ã™ã‹ï¼Ÿ<br /> -<a href="#item4.9">4.9</a>) クエリã®ä¸ã§ã€ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ãŒ -<small>NULL</small> ã§ã‚ã‚‹ã“ã¨ã‚’検出ã™ã‚‹ã«ã¯ã©ã†ã—ã¾ã™ã‹ï¼Ÿ -<small>NULL</small>ã®å¯èƒ½æ€§ã®ã‚ã‚‹ã‚‚ã®ã‚’ã©ã®ã‚ˆã†ã™ã‚Œã°é€£çµã§ãã¾ã™ã‹? -フィールドãŒ<small>NULL</small>ã‹ã©ã†ã‹ã§ã©ã®ã‚ˆã†ã«ã‚½ãƒ¼ãƒˆãŒã§ãã¾ã™ã‹ï¼Ÿ<br /> -<a href="#item4.10">4.10</a>) ã„ã‚ã„ã‚ãªæ–‡å—åž‹ã®ãã‚Œãžã‚Œã®é•ã„ã¯ä½•ã§ã™ã‹ï¼Ÿ<br /> -<a href="#item4.11.1">4.11.1</a>) 通番(serial)ï¼è‡ªå‹•å¢—分フィールドã¯ã©ã®ã‚ˆã†ã«ã¤ãã‚Šã¾ã™ã‹ï¼Ÿ<br /> -<a href="#item4.11.2">4.11.2</a>) <small>SERIAL</small>データ型ã«æŒ¿å…¥ã•ã‚Œã‚‹å€¤ã¯ã€ã©ã†ã™ã‚Œã°å¾—られã¾ã™ã‹ï¼Ÿ<br /> -<a href="#item4.11.3">4.11.3</a>) <i>currval()</i> ã¯ä»–ã®ãƒ¦ãƒ¼ã‚¶ã¨ã®ç«¶åˆçŠ¶æ…‹ã«é™¥ã‚‹ã“ã¨ã¯ãªã„ã§ã™ã‹ï¼Ÿ<br /> -<a href="#item4.11.4">4.11.4</a>) トランザクションãŒä¸æ–ã—ãŸã¨ãã«ã‚‚ã†ã„ã¡ã©ã‚·ãƒ¼ã‚±ãƒ³ã‚¹ç•ªå·ãŒä½¿ã‚ã‚Œãªã„ã®ã¯ãªãœã§ã™ã‹ï¼Ÿã‚·ãƒ¼ã‚±ãƒ³ã‚¹ï¼SERIALカラムã«ç©ºããŒã‚ã‚‹ã®ã¯ãªãœã§ã™ã‹ï¼Ÿ<br /> -<a href="#item4.12">4.12</a>) <small>OID</small> ã¨ã¯ä½•ã§ã™ã‹ï¼Ÿ <small>TID</small> ã¨ã¯ä½•ã§ã™ã‹ï¼Ÿ<br /> -<a href="#item4.13">4.13</a>) エラーメッセージ <i>"ERROR: Memory exhausted in AllocSetAlloc()"</i>ãŒå‡ºã‚‹ã®ã¯ãªãœã§ã™ã‹ï¼Ÿ<br /> -<a href="#item4.14">4.14</a>) ã©ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® PostgreSQL を走らã›ã¦ã„ã‚‹ã®ã‹ã‚’調ã¹ã‚‹ã«ã¯ã©ã†ã—ã¾ã™ã‹ï¼Ÿ<br /> -<a href="#item4.15">4.15</a>) ç¾åœ¨ã®æ™‚刻ãŒãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã¨ãªã‚‹ã‚ˆã†ãªã‚«ãƒ©ãƒ ã¯ã©ã®ã‚ˆã†ã«ã¤ãã‚Šã¾ã™ã‹ï¼Ÿ<br /> -<a href="#item4.16">4.16</a>) <i>外部</i>çµåˆ(<i>outer</i> join)ã¯ã©ã®ã‚ˆã†ã«å®Ÿç¾ã—ã¾ã™ã‹?<br /> -<a href="#item4.17">4.17</a>) 複数ã®ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚’使ã†å•ã„åˆã‚ã›ã¯ã©ã®ã‚ˆã†ã«ã™ã‚Œã°ã§ãã¾ã™ã‹ï¼Ÿ<br /> -<a href="#item4.18">4.18</a>) 関数ã‹ã‚‰è¤‡æ•°ã®ãƒã‚¦ã¾ãŸã¯ã‚«ãƒ©ãƒ ã‚’è¿”ã™ã«ã¯ã©ã†ã—ã¾ã™ã‹ï¼Ÿ<br /> -<a href="#item4.19">4.19</a>) PL/PgSQL ã®é–¢æ•°ã®ä¸ã§ä¸€æ™‚テーブルã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã¨ãã€ã©ã†ã—㦠"relation with OID ##### does not exist" ã¨ã„ã†ã‚¨ãƒ©ãƒ¼ã‚’å—ã‘å–ã‚‹ã®ã§ã—ょã†ã‹ï¼Ÿ<br /> -<a href="#item4.19">4.20</a>) ã©ã®ã‚ˆã†ãªãƒ¬ãƒ—リケーションã®ã‚½ãƒªãƒ¥ãƒ¼ã‚·ãƒ§ãƒ³ãŒã‚ã‚Šã¾ã™ã‹ï¼Ÿ<br /> -<a href="#item4.20">4.21</a>) テーブルã¨ã‚«ãƒ©ãƒ ã®åå‰ãŒã‚¯ã‚¨ãƒªãƒ¼ã®ä¸ã§èªè˜ -ã•ã‚Œãªã„ã®ã¯ãªãœã§ã™ã‹ï¼Ÿ ãªãœå¤§æ–‡å—化(ã‚ャピタライズ)ã¯æ¸©å˜ã•ã‚Œãªã„ã®ã§ã™ã‹?<br /> - -<h2 align="center">日本語ã«é–¢ã™ã‚‹è³ªå•</h2> - -<a href="#item5.1">5.1</a>) 日本語ãŒã†ã¾ã扱ãˆãªã„ã®ã¯ãªãœã§ã™ã‹ï¼Ÿ<br /> -<a href="#item5.2">5.2</a>) psql ã§Windowsã‹ã‚‰ã‚¢ã‚¯ã‚»ã‚¹ã—ãŸã¨ãã«ã€æ—¥æœ¬èªžãŒæ–‡å—化ã‘ã™ã‚‹ã®ã§ã™ãŒï¼Ÿ<br /> -<a href="#item5.3">5.3</a>) PostgreSQLã§æ—¥æœ¬èªžã®å…¨æ–‡æ¤œç´¢ã¯ã§ãã¾ã™ã‹ï¼Ÿ<br /> - - -<hr /> - -<h2 align="center">一般的ãªè³ªå•</h2> - -<h4 id="item1.1">1.1</a>) PostgreSQLã¨ã¯ä½•ã§ã™ã‹ï¼Ÿ ãã®å‘¼ã³æ–¹ã¯ï¼Ÿ Postgresã¨ã¯ï¼Ÿ</h4> - - <p>PostgreSQLã¯<i>Post-Gres-Q-L</i>(ãƒã‚¹ãƒˆãƒ»ã‚°ãƒ¬ã‚¹ãƒ»ã‚ュー・エル) - ã¨ç™ºéŸ³ã—ã¾ã™ãŒã€ä¼šè©±ã®ä¸ã§ã¯å˜ç´”ã« <i>Postgres</i> ã¨å‘¼ã°ã‚Œã‚‹ã“ã¨ã‚‚ - ã‚ã‚Šã¾ã™ã€‚("PostgreSQL"ã‚’ã©ã†ç™ºéŸ³ã™ã‚‹ã‹æ°—ã«ãªã‚‹äººã®ãŸã‚ã«ã€ - <a href="http://www.postgresql.org/files/postgresql.mp3"> - 音声ファイル</a>を用æ„ã—ã¦ã‚ã‚Šã¾ã™ã€‚</p> - - <p>PostgreSQL ã¯ã‚ªãƒ–ジェクト-リレーショナルデータベースシステムã§ã€ - ä¼çµ±çš„ãªå•†ç”¨ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚·ã‚¹ãƒ†ãƒ ã«ã€æ¬¡ä¸–代<small>DBMS</small>システ - ムã«è¦‹ã‚‰ã‚Œã‚‹ã‚ˆã†ãªæ”¹è‰¯ãŒæ–½ã•ã‚ŒãŸç‰¹å¾´ã‚’有ã—ã¾ã™ã€‚PostgreSQLã¯ã€ç„¡æ–™ã§ - 完全ãªã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ã‚’手ã«å…¥ã‚Œã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚</p> - - <p>PostgreSQL ã®é–‹ç™ºã¯ã€ã»ã¨ã‚“ã©ãŒã€ä¸–ç•Œä¸ã«ã²ã‚ãŒã£ãŸãƒœãƒ©ãƒ³ãƒ†ã‚£ã‚¢ã® - 開発者ã«ã‚ˆã£ã¦ã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒãƒƒãƒˆã‚’通ã—ãŸã‚³ãƒŸãƒ¥ãƒ‹ã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã«ã‚ˆã£ã¦è¡Œã‚ - ã‚Œã¦ã„ã¾ã™ã€‚コミュニティã«ã‚ˆã‚‹ãƒ—ãƒã‚¸ã‚§ã‚¯ãƒˆã§ã‚ã‚‹ãŸã‚ã€ã©ã®ä¼æ¥ã®åˆ¶å¾¡ - ã‚‚ã†ã‘ã¾ã›ã‚“。開発ã«å‚åŠ ã—ãŸã‘ã‚Œã°ã€<a href= - "http://www.postgresql.org/docs/faqs.FAQ_DEV.html"> - http://www.postgresql.org/docs/faqs.FAQ_DEV.html</a> - ã«ã‚る開発者ã®FAQを見ã¦ãã ã•ã„。 - </p> - - <p>Postgresã¯PostgreSQLã®åºƒã使ã‚ã‚Œã¦ã„る愛称ã§ã™ã€‚ã¾ãŸã€ãƒãƒ¼ã‚¯ãƒ¬ãƒ¼ - ã§ã®ãƒ—ãƒã‚¸ã‚§ã‚¯ãƒˆã§ã‚‚ã¨ã‚‚ã¨ä½¿ã‚ã‚Œã¦ã„ãŸåå‰ã§ã€ã»ã‹ã®ã„ãšã‚Œã®æ„›ç§°ã« - 比ã¹ã¦ã‚‚é¥ã‹ã«å¥½ã¾ã—ã„ã§ã™ã€‚'PostgreSQL' ã®ç™ºéŸ³ãŒé›£ã—ã„ã¨æ€ã†ã®ã§ã‚ - ã‚Œã°ã€ãã®ã‹ã‚ã‚Šã« 'Postgres' ã¨å‘¼ã¶ã‚ˆã†ã«ã—ã¾ã—ょã†ã€‚</p> - - -<h4 id="item1.2">1.2</a>) 誰㌠PostgreSQL をコントãƒãƒ¼ãƒ«ã—ã¦ã„ã¾ã™ã‹ï¼Ÿ</h4> - - <p>PostgreSQLã®é–€ç•ªã€ä¸å¤®å§”員会ã€ã‚ã‚‹ã„ã¯ã€ã‚³ãƒ³ãƒˆãƒãƒ¼ãƒ«ã‚’ã™ã‚‹ä¼šç¤¾ã‚’ - 探ãã†ã¨ã—ã¦ã‚‚ã€è«¦ã‚ã–ã‚‹ã‚’ãˆãš ---- å˜åœ¨ã—ãªã„ã®ã§ã™ã€‚我々ã¯ã€ä¸å¿ƒ - ã¨ãªã‚‹ã‚³ãƒŸãƒƒãƒ†ã‚£ã¨CVSコミッタをæŒã¡ã¾ã™ãŒã€ã“れらã®ã‚°ãƒ«ãƒ¼ãƒ—ã¯ã‚³ãƒ³ - トãƒãƒ¼ãƒ«ã™ã‚‹ãŸã‚ã¨ã„ã†ã‚ˆã‚Šã‚‚ã€ç®¡ç†ä¸Šã®ã‚‚ã®ã§ã™ã€‚ã“ã“ã§ã¯ã€ãƒ—ãƒã‚¸ã‚§ - クトã¯ã€ã ã‚Œã§ã‚‚å‚åŠ ãŒã§ãる開発者ã¨ãƒ¦ãƒ¼ã‚¶ã®ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ã«ã‚ˆã‚Šæ–¹å‘ - 付ã‘られã¾ã™ã€‚èªè€…ãŒã‚„らãªã‘ã‚Œã°ãªã‚‰ãªã„ã“ã¨ã¯ã€ãƒ¡ãƒ¼ãƒªãƒ³ã‚°ãƒªã‚¹ãƒˆã‚’ - サブスクライブã—ã¦ã€è°è«–ã« å‚åŠ ã™ã‚‹ã“ã¨ã§ã™ã€‚(<a - href="http://wiki.postgresql.org/wiki/Developer_FAQ">Developer's - FAQ</a>ã«ã¯ã€PostgreSQL開発ã«åŠ ã‚ã‚Šæ–¹ã«ã¤ã„ã¦ã®æƒ…å ±ãŒã‚ã‚Šã¾ã™ã€‚)</p> - - -<h4 id="item1.3">1.3</a>) PostgreSQL ã®è‘—作権ã¯ã©ã†ãªã£ã¦ã¾ã™ã‹ï¼Ÿ</h4> - - <p> PostgreSQL ã¯ä¸‹è¨˜ã®è‘—作権ã«å¾“ã„ã¾ã™ã€‚</p> - <p> PostgreSQLã¯å¤ãã‹ã‚‰ã®BSDライセンスã®ä¸‹ã§é…布ã•ã‚Œã¦ã„ã¾ã™ã€‚ãã‚Œ - ã¯åŸºæœ¬çš„ã«ã¯ã€åˆ©ç”¨è€…ãŒãã®ã‚³ãƒ¼ãƒ‰ã‚’好ãå‹æ‰‹ã«åˆ©ç”¨ã™ã‚‹ã“ã¨ãŒè¨±ã•ã‚Œã¦ - ã„ã¾ã™ã€‚制é™ãŒã‚ã‚‹ã¨ã™ã‚Œã°ã€ã“ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã«ä¼´ã†ã„ã‹ãªã‚‹å•é¡Œã«ãŠ - ã„ã¦ã‚‚法的ã«è²¬ä»»ã‚’我々ã«è² ã‚ã›ã‚‹ã“ã¨ãŒã§ããªã„ã¨ã„ã†ã“ã¨ã§ã™ã€‚ - ã¾ãŸã€ã“ã®è‘—作権表示ãŒã“ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã®ã™ã¹ã¦ã®è¤‡è£½ã«è¡¨ç¤ºã™ã‚‹ã“㨠- ã‚‚å¿…è¦ã§ã™ã€‚以下ã«ã€æˆ‘々ãŒå®Ÿéš›ã«ä½¿ã£ã¦ã„ã‚‹BSD使用許諾書を示ã—ã¾ã™ï¼š -</p> - - <small><pre> - [訳注: - æ£æ–‡ã¯è‹±èªžã§ã™ã€‚å‚考ã¨ã—ã¦ã€è¨³æ–‡ã‚’併記掲載ã—ã¾ã™ã€‚ - ] - </pre></small> - <p>PostgreSQL Data Base Management System</p> - <p> - Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group - Portions Copyright (c) 1994-1996 Regents of the University of California</p> - <p> - 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.</p> - <p> - 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.</p> - <p> - 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.</p> - - <small><pre> - POSTGRESQL データベース管ç†ã‚·ã‚¹ãƒ†ãƒ - - 部分的著作権 (c) 1996-2009, PostgreSQL国際開発グループ - 部分的著作権 (c) 1994-1996 カリフォルニア大å¦æœ¬æ ¡ - - - 本ソフトウェアãŠã‚ˆã³ãã®æ–‡æ›¸ä¸€å¼ã¯ä¸Šè¨˜ã®è‘—作権表示ã¨ã€ã“ã®æ–‡ç« - ãŠã‚ˆã³ã“ã‚Œã«ç¶šã二ã¤ã®æ®µè½ãŒå…¨ã¦ã®è¤‡è£½ã«æ·»ä»˜ã•ã‚Œã¦ã„ã‚‹é™ã‚Šã«ãŠã„ - ã¦ã€ä½¿ç”¨ã€è¤‡è£½ã€ä¿®æ£ãŠã‚ˆã³é…付ã®è¨±å¯ã‚’ã€ã„ã‹ãªã‚‹ç›®çš„ã§ã‚ã£ã¦ã‚‚〠- ç„¡å„Ÿã§ã‹ã¤åŒæ„書無ã—ã«è¡Œãªãˆã‚‹ã“ã¨ã‚’ã“ã“ã«èªã‚ã¾ã™ã€‚ - - カリフォルニア大å¦ã¯ã€ã„ã‹ãªã‚‹å½“事者ã«ãŸã„ã—ã¦ã‚‚ã€åˆ©ç›Šã®å£Šå¤±ã‚’ - å«ã‚€ã€ç›´æŽ¥çš„ã€é–“接的ã€ç‰¹åˆ¥ã€å¶ç„¶ã‚ã‚‹ã„ã¯å¿…然的ã«ã‹ã‹ã‚らãšç”Ÿã˜ãŸ - æ害ã«ã¤ã„ã¦ã€ãŸã¨ãˆã‚«ãƒªãƒ•ã‚©ãƒ«ãƒ‹ã‚¢å¤§å¦ãŒã“れらã®æ害ã«ã¤ã„ã¦è¨´è¿½ - ã‚’å—ã‘ã¦ã„ãŸã¨ã—ã¦ã‚‚ã€ä¸€åˆ‡ã®è²¬ä»»ã‚’è² ã„ã¾ã›ã‚“。 - - カリフォルニア大å¦ã¯ã€å•†ç”¨ç›®çš„ã«ãŠã‘ã‚‹æš—é»™ã®ä¿è¨¼ã¨ã€ç‰¹å®šç›®çš„㧠- ã®é©åˆæ€§ã«é–¢ã—ã¦ã¯ã‚‚ã¨ã‚ˆã‚Šã€ã“れらã«é™ã‚‰ãšã€ã„ã‹ãªã‚‹ä¿è¨¼ã‚‚放棄㙠- ã‚‹ã“ã¨ã‚’明言ã—ã¾ã™ã€‚以下ã«ç”¨æ„ã•ã‚ŒãŸã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã¯ã€Œãã®ã¾ã¾ã€ã‚’ - 基本原ç†ã¨ã—ã€ã‚«ãƒªãƒ•ã‚©ãƒ«ãƒ‹ã‚¢å¤§å¦ã¯ãれをç¶æŒã€æ”¯æ´ã€æ›´æ–°ã€æ”¹è‰¯ã‚ - ã‚‹ã„ã¯ä¿®æ£ã™ã‚‹ç¾©å‹™ã‚’è² ã„ã¾ã›ã‚“。 - - [訳注: - 著作権ã«é–¢ã™ã‚‹æ£æ–‡ã¯ä¸Šè¨˜ã®è‹±èªžã«ã‚ˆã‚‹è¡¨è¨˜ã§ã™ã€‚日本語訳ã¯ã‚ãã¾ã§ - å‚考程度ã¨ã—ã¦ãã ã•ã„。 - ] - </pre></small> - -<h4 id="item1.4">1.4</a>) PostgreSQLをサãƒãƒ¼ãƒˆã™ã‚‹ãƒ—ラットホームã¯ï¼Ÿ</h4> - - <p>一般的ã«ã€æœ€è¿‘ã®Unix互æ›ãƒ—ラットホームã§ã‚ã‚Œã°PostgreSQLを稼åƒã• - ã›ã‚‰ã‚Œã‚‹ã¯ãšã§ã™ã€‚リリースã®æ™‚点ã§å®Ÿéš›ã«ãƒ†ã‚¹ãƒˆã‚’è¡Œãªã£ãŸã“ã¨ã®å ±å‘ŠãŒ - ãªã•ã‚ŒãŸãƒ—ラットホームã«ã¤ã„ã¦ã¯ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«æ‰‹å¼•æ›¸ã«åˆ—挙ã—ã¦ã‚ã‚Šã¾ã™ã€‚ - </p> - - <p>PostgreSQL ã¯ã€Win2000 SP4, WinXP, ãã—ã¦ã€Win2003 ãªã© Microsoft - Windows NTベースã®ã‚ªãƒšãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚·ã‚¹ãƒ†ãƒ ã§ã€ãƒã‚¤ãƒ†ã‚£ãƒ–ã«èµ°ã‚Šã¾ã™ã€‚ - ã‚らã‹ã˜ã‚パッケージã«ã•ã‚ŒãŸã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ©ãŒ<a href= - "http://www.postgresql.org/download/windows"> - http://www.postgresql.org/download/windows</a> - ã‹ã‚‰ãƒ€ã‚¦ãƒ³ãƒãƒ¼ãƒ‰ã§ãã¾ã™ã€‚ - MSDOSベースã®Windowsã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³(Win95, Win98, WinMe)ã§ã¯ã€Cygwinã‚’ - 使ã£ã¦ PostgreSQL を走らã›ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚</p> - - <small><pre> - [訳注 - 日本語ã§ã®æƒ…å ±ã¯ã€æ¬¡ã® Windows版ã«é–¢ã™ã‚‹FAQã®å’Œè¨³ã‚’ã”らんãã ã• - ã„(ややå¤ã„ã§ã™ï¼‰ã€‚ - http://old.postgresql.jp/wg/jpugdoc/FAQ_windows.ja.html - ] - </pre></small> - - <p>次ã®ã‚µã‚¤ãƒˆã« Novell Netware 6 ã¸ã®ç§»æ¤ç‰ˆã‚‚ã‚ã‚Šã¾ã™ã€‚ - <a href="http://developer.novell.com/wiki/index.php/Postgresql"> -http://developer.novell.com/wiki/index.php/Postgresql</a> - ã¾ãŸã€OS/2 (eComStation) ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¯ã€<a href= - "http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2F"> - http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2F</a>ã«ã‚ã‚Šã¾ã™ã€‚</p> -<br /> - - -<h4 id="item1.5">1.5</a>) PostgreSQL ã¯ã©ã“ã‹ã‚‰å…¥æ‰‹ã§ãã¾ã™ã‹ï¼Ÿ</h4> - - <p>Webブラウザ経由ã ã¨ã€<a href="http://www.postgresql.org/ftp/"> - http://www.postgresql.org/ftp/</a>ã€ãã‚Œã‹ã‚‰ã€ftp経由ã ã¨ã€ - <a href="ftp://ftp.postgresql.org/pub/"> - ftp://ftp.postgresql.org/pub/</a> を使ã„ã¾ã™ã€‚</p> - - -<h4 id="item1.6">1.6</a>) 最新ã®ãƒªãƒªãƒ¼ã‚¹ã¯ã©ã‚Œã§ã™ã‹ï¼Ÿ</h4> - - <p>PostgreSQL ã®æœ€æ–°ç‰ˆã¯ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 8.3.5 ã§ã™ã€‚</p> - <p>我々ã¯ã€1年毎ã«ãƒ¡ã‚¸ãƒ£ãƒ¼ãƒªãƒªãƒ¼ã‚¹ã‚’ã€æ•°ãƒµæœˆã”ã¨ã®ãƒžã‚¤ãƒŠãƒ¼ãƒªãƒªãƒ¼ã‚¹ã‚’ - è¡Œãªã†ã“ã¨ã‚’計画ã—ã¦ã„ã¾ã™ã€‚</p> - - <p><small><pre> - [訳注 - ãƒãƒ¼ã‚¸ãƒ§ãƒ³ç•ªå·ã® x.y.z ã®æœ€åˆã® x.y ãŒãƒ¡ã‚¸ãƒ£ãƒ¼ãƒªãƒªãƒ¼ã‚¹ã®ç•ªå·ã«ç›¸ - 当ã—ã€æœ€å¾Œã® z ãŒãƒžã‚¤ãƒŠãƒ¼ãƒªãƒªãƒ¼ã‚¹ã®ç•ªå·ã«ãªã‚Šã¾ã™ã€‚メジャーリリー - スã®ç•ªå·ãŒåŒã˜ã§ã‚ã‚Œã°ã€ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ãƒ»ã‚¯ãƒ©ã‚¹ã‚¿ã«äº’æ›æ€§ãŒã‚ã‚Šã¾ã™ã€‚ - ] - </pre></small></p> - - -<h4 id="item1.7">1.7</a>) サãƒãƒ¼ãƒˆã¯ã©ã“ã§å—ã‘られã¾ã™ã‹ï¼Ÿ</h4> - - <p>PostgreSQL コミュニティã¯å¤šãã®ãƒ¦ãƒ¼ã‚¶ã®ãŸã‚ã«ã€é›»åメール経由ã®æ”¯ - æ´ã‚’æä¾›ã—ã¦ã„ã¾ã™ã€‚é›»åメールリストをサブスクライブã™ã‚‹ãŸã‚ã®ãƒ¡ã‚¤ãƒ³ - ã¨ãªã‚‹ã‚¦ã‚§ãƒ–サイト㯠- <a href="http://www.postgresql.org/community/lists/"> - http://www.postgresql.org/community/lists/</a>ã§ã™ã€‚ã“ã‚Œã‹ã‚‰ã€å§‹ã‚ã‚‹ - ã®ã§ã‚れ㰠<i>general</i> ã¾ãŸã¯ã€<i>bugs</i> ã¨ã„ã£ãŸãƒªã‚¹ãƒˆãŒã‚ˆã„㧠- ã—ょã†ã€‚</p> - - <p>メジャーãªIRC ãƒãƒ£ãƒ³ãƒãƒ«ã¯ã€Freenode (<i>irc.freenode.net</i>)ã® - <i>#postgresql</i> ã¨ã„ã†ãƒãƒ£ãƒ³ãƒãƒ«ã§ã™ã€‚UNIX コマンドã§ã¯ã€ - <code>irc -c '#PostgreSQL' "$USER" irc.freenode.net</code> を使ã£ã¦ - å‚åŠ ã§ãã¾ã™ã€‚åŒã˜ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã«ã€ã‚¹ãƒšã‚¤ãƒ³èªžã®ãƒãƒ£ãƒ³ãƒãƒ« - (<i>#postgresql-es</i>)ã€ãƒ•ãƒ©ãƒ³ã‚¹èªžã®ãƒãƒ£ãƒ³ãƒãƒ« - (<i>#postgresqlfr</i>)ã€ãƒ–ラジル語ãƒãƒ£ãƒ³ãƒãƒ« (<i>#postgresql-br</i>) - ã‚‚ã‚ã‚Šã¾ã™ã€‚ã¾ãŸã€EFNetã«ã‚‚PostgreSQLãƒãƒ£ãƒ³ãƒãƒ«ãŒã‚ã‚Šã¾ã™ã€‚</p> - - <p><small><pre> - [訳注: - 1999å¹´7月23æ—¥ã€æ—¥æœ¬ãƒã‚¹ãƒˆã‚°ãƒ¬ã‚¹ãƒ¦ãƒ¼ã‚¶ãƒ¼ä¼šã€ç•¥ç§°JPUGãŒè¨ç«‹ã•ã‚Œã¾ã—ãŸã€‚ - JPUG ã¯éžå–¶åˆ©çµ„ç¹”ã§ã€PostgreSQLを利用ã™ã‚‹äººé”ã®ç›¸äº’å”力ã®å ´ã¨ãªã£ã¦ã„ã¾ã™ã€‚ - (2006å¹´ 特定éžå–¶åˆ©æ´»å‹•(NPO)法人日本PostgreSQLユーザ会ã«ãªã‚Šã¾ã—ãŸã€‚ - Web会員ã¨æ£ä¼šå“¡ã®ä¼šè²»ã¯ç„¡æ–™ã§ã™ãŒã€å”賛会員ã®ä¼šè²»ã¨ä¼šå“¡ã®è²¢çŒ®ã§ - 会ã¯é‹å–¶ã•ã‚Œã¦ã„ã¾ã™ã€‚) - 詳ã—ãã¯ã€JPUG ã®Web サイト: - <a href="http://www.postgresql.jp/">http://www.postgresql.jp/</a> - ã‚’ã”らんãã ã•ã„。 - - 日本語ã®IRCãƒãƒ£ãƒ³ãƒãƒ« '#PostgreSQL:*.jp' ã‚‚å˜åœ¨ã—ã¾ã™ã€‚ - ] - </pre></small></p> - - <p>商用サãƒãƒ¼ãƒˆä¼šç¤¾ã®ãƒªã‚¹ãƒˆã¯<a - href="http://www.postgresql.org/support/professional_support"> - http://www.postgresql.org/support/professional_support</a>ã«ã‚ã‚Šã¾ã™ã€‚</p> - - -<h4 id="item1.8">1.8</a>) ãƒã‚°ãƒ¬ãƒãƒ¼ãƒˆã¯ã©ã®ã‚ˆã†ã«ç™ºä¿¡ã—ã¾ã™ã‹ï¼Ÿ -</h4> - - <p><a href= - "http://www.postgresql.org/support/submitbug"> - http://www.postgresql.org/support/submitbug</a> - ã®PostgreSQL ãƒã‚°ãƒ•ã‚©ãƒ¼ãƒ を訪れã¦ãã ã•ã„。 ãƒã‚°ãƒ¬ãƒãƒ¼ãƒˆã‚’æ出ã™ã‚‹ä»•æ–¹ - ã«ã¤ã„ã¦ã®æ‰‹å¼•ã¨æŒ‡é‡ãŒã‚ã‚Šã¾ã™ã€‚</p> - - <p> ãã‚Œã¨åŒæ™‚ã« ftp サイト <A - href="ftp://ftp.postgresql.org/pub/">ftp://ftp.postgresql.org/pub/</a> - ã§ã€æœ€æ–°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® PostgreSQL を探ã—ã¦ã¿ã¦ãã ã•ã„。</p> - - -<h4 id="item1.9">1.9</a>) 既知ã®ãƒã‚°ã‚„未ã ç„¡ã„機能ã¯ã©ã†ã‚„ã£ã¦è¦‹ã¤ã‘ã¾ã™ã‹ï¼Ÿ -</h4> - - <p>PostgreSQLã¯æ‹¡å¼µã•ã‚ŒãŸ<small>SQL:2003</small>ã®ã‚µãƒ–セットをサãƒãƒ¼ãƒˆ - ã—ã¾ã™ã€‚我々ã®ãƒšãƒ¼ã‚¸ã® <A - href="http://www.PostgreSQL.org/docs/todo.html">TODO</a> リストã«ã€ - 既知ã®ãƒã‚°ã‚„æ¬ è½æ©Ÿèƒ½ã‚„å°†æ¥è¨ˆç”»ã«ã¤ã„ã¦ã®è¨˜è¿°ãŒã‚ã‚Šã¾ã™ã€‚</p> - - - <p>特徴ã®è¦æ±‚ã¯æ™®é€šæ¬¡ã®ã„ãšã‚Œã‹ã®è§£ç”ã®ä¸ã«ã‚ã‚Šã¾ã™ï¼š</p> - <ul> - <li>æ—¢ã«ã“ã“ã«ã‚る機能ã¯ã€ - <a href="http://www.postgresql.org/docs/faqs.TODO.html">TODO</a> - リストã§ã™</li> - <li>次ã®ã‚ˆã†ãªæ©Ÿèƒ½ã¯ç›®è«–ã¾ã‚Œã¦ã„ã¾ã›ã‚“。ãã‚Œã¯ï¼š - <ul> - <li>SQLè¦æ ¼ã«æº–ãšã‚‹æ—¢å˜ã®æ©Ÿèƒ½ã¨é‡è¤‡ã™ã‚‹ã‚‚ã®</li> - <li>コードã®è¤‡é›‘性ã°ã‹ã‚Šã‚’高ã‚ã¦ã€å¾—ã‚‹ã‚‚ã®ãŒå°‘ãªã„機能</li> - <li>安全性ãŒç¢ºã‚られãªã„機能</li> - </ul> - </li> - <li>æ–°ã—ã„機能ã¯ã€ - <a href="http://www.postgresql.org/docs/faqs.TODO.html">TODO</a> - ã®ãƒªã‚¹ãƒˆã«</li>åŠ ãˆã‚‰ã‚Œã‚‰ã‚Œã¾ã™ã€‚ - </ul> - - <p>我々ã¯ã€PostgreSQL ã«é–¢ã—ã¦ã€é›»åメールã§ç›´æŽ¥å¯¾å¿œã—㦠- <a href="http://www.postgresql.org/docs/faqs.TODO.html">TODO</a> - リストを最新ã«æ›´æ–°ã—ã¦ã‚†ãã»ã†ãŒã‚ˆã‚ŠåŠ¹æžœçš„ã§ã‚ã‚‹ã“ã¨ã‚’知ã£ã¦ã„ã¾ã™ - ã®ã§ã€ãƒã‚°è¿½è·¡ã‚·ã‚¹ãƒ†ãƒ ã¯ä½¿ã„ã¾ã›ã‚“。 - ç¾å®Ÿã«ã€ã“ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã®ä¸ã§ãƒã‚°ã¯ãã‚Œã»ã©é•·ãã¯ã„続ã‘ã¾ã›ã‚“ã—〠- 多ãã®ãƒ¦ãƒ¼ã‚¶ã«å½±éŸ¿ã™ã‚‹ãƒã‚°ã¯æ—©æ€¥ã«ä¿®æ£ã•ã‚Œã¾ã™ã€‚PostgreSQLã®ãƒªãƒªãƒ¼ã‚¹ - ã§ã€ã™ã¹ã¦ã®å¤‰æ›´ç‚¹ã€æ”¹è‰¯ç‚¹ã€ãã—ã¦ã€ä¿®æ£ç‚¹ã‚’知りãŸã‘ã‚Œã°ã€ - <a href="http://www.postgresql.org/developer/sourcecode/">CVS</a> - ã®ãƒã‚°ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’見ã¦ãã ã•ã„。リリースノートã«ã•ãˆã€ã“ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ - ã«åŠ ãˆã‚‰ã‚ŒãŸã™ã¹ã¦ã®å¤‰æ›´ç‚¹ã¯ç¶²ç¾…ã•ã‚Œã¦ã„ã¾ã›ã‚“。</p> - - -<h4 id="item1.10">1.10</a>) ã©ã®ã‚ˆã†ãªæ–‡æ›¸ãŒã‚ã‚Šã¾ã™ã‹ï¼Ÿ</h4> - - <p> é…付ã®ä¸ã«ã€ã„ãã¤ã‹ã®ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ã¨ã‚ªãƒ³ãƒ©ã‚¤ãƒ³ãƒ»ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«(マニュ - アル・ページ)ãŠã‚ˆã³ã„ãã¤ã‹ã®å°ã•ãªãƒ†ã‚¹ãƒˆä¾‹é¡ŒãŒå«ã¾ã‚Œã¾ã™ã€‚ - <i>/doc</i>ディレクトリをã”らんãã ã•ã„。ã¾ãŸã€ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ã¯ã€<A - href="http://www.postgresql.org/docs/"> -http://www.postgresql.org/docs/</a>ã§ã‚ªãƒ³ãƒ©ã‚¤ãƒ³ã§ã‚‚閲覧ã§ãã¾ã™ã€‚ - </p> - - - <p><small><pre> - [訳注: - JPUG 文書・書ç±é–¢é€£åˆ†ç§‘会ã§ç¿»è¨³ã•ã‚ŒãŸãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ã‚‚ã‚ã‚Šã¾ã™ã€‚ - <a href="http://www.postgresql.jp/document/pg835doc/"> - http://www.postgresql.jp/document/pg830doc/</a> - インプレスã‹ã‚‰ã€ - <a href="http://home.impress.co.jp/reference/2108.htm"> - PostgreSQLオフィシャルマニュアル</a>ã¨ã—ã¦å‡ºç‰ˆã•ã‚Œã¦ã„ã¾ã™ã€‚ - ] - </pre></small></p> - - - <p>オンラインã§å‚ç…§ã§ãã‚‹ PostgreSQL ã®æœ¬ã‚‚2冊ã‚ã‚Šã¾ã™ã€‚<a href= - "http://www.postgresql.org/docs/books/awbook.html"> - http://www.postgresql.org/docs/books/awbook.html</a> - - <p><small><pre> - [訳注: - ã“ã®æœ¬ã¯ã€JPUG<a href="http://www.postgresql.jp/wg/psqltrans/">「PostgreSQL Book翻訳分科会〠- </a>ã§ç¿»è¨³ã•ã‚Œã€ãƒ”アソンã‹ã‚‰<a href="http://www.seshop.com/detail.asp?pid=2587"> - 「ã¯ã˜ã‚ã¦ã®PostgreSQLã€</a>ã¨ã—ã¦å‡ºç‰ˆã•ã‚Œã¦ã„ã¾ã™ã€‚ - ] - </pre></small></p> - - ãŠã‚ˆã³ã€ <a href= - "http://www.commandprompt.com/ppbook/"> - http://www.commandprompt.com/ppbook/</a>ã§ã™ã€‚ - - <p><small><pre> - [訳注: - 邦訳ã¯<a href="http://www.oreilly.co.jp/books/4873111021/">「実践 PostgreSQL〠- </a>ãŒã‚ªãƒ©ã‚¤ãƒªãƒ¼ã‹ã‚‰å‡ºç‰ˆã•ã‚Œã¦ã„ã¾ã™ã€‚ - ] - </pre></small></p> - - 購入å¯èƒ½ãªæ›¸ç±ã®ç›®éŒ²ã¯ã€<a href= - "http://www.postgresql.org/docs/books/">http://www.postgresql.org/docs/books/</a> - ã«ã‚ã‚Šã¾ã™ã€‚ - - PostgreSQL æŠ€è¡“æƒ…å ±è¨˜äº‹ã‚‚ã€<a href= - "http://wiki.postgresql.org/wiki/Community_Generated_Articles%2C_Guides%2C_and_Documentation">http://wiki.postgresql.org/wiki/Community_Generated_Articles%2C_Guides%2C_and_Documentation</a> - ã«ã‚ã‚Šã¾ã™ã€‚</p> - - <p><small><pre> - [訳注: - 日本語ã®æ›¸ç±ç‰ã«ã¤ã„ã¦ã¯ã€æ—¥æœ¬PostgreSQLユーザ会ã®ã€<A - href="http://old.postgresql.jp/PostgreSQL/references.html">http://www.postgresql.jp/PostgreSQL/references.html</a> - ã‚‚ã”らんãã ã•ã„。 - ] - </pre></small></p> - - <p> コマンドラインã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ—ãƒã‚°ãƒ©ãƒ <i>psql</i> ã«ã‚‚ã€åž‹ã€ - 演算åã€é–¢æ•°ã€é›†ç´„ã€ãã®ä»–ã®æƒ…å ±ã‚’èª¿ã¹ã‚‹ãŸã‚ã«ã€ç´ 晴らã—ã„ \d コマンド - ãŒã„ãã¤ã‹ã‚ã‚Šã¾ã™ã€‚ \? を入力ã™ã‚‹ã¨åˆ©ç”¨å¯èƒ½ãªã‚³ãƒžãƒ³ãƒ‰ãŒè¡¨ç¤ºã•ã‚Œã¾ã™ã€‚</p> - - <p> 我々㮠Web サイトã«ã¯ã€ã•ã‚‰ã«æ²¢å±±ã®æ–‡æ›¸ãŒã‚ã‚Šã¾ã™ã€‚</p> - - <p><small><pre> - [訳注: - 2008å¹´11月18æ—¥ã€PostgreSQLæ™®åŠã®ãŸã‚ã«ä¸€èˆ¬å‘ã‘ã®æƒ…å ±ã‚’æ‰±ã† - 「Let's Postgresã€ã¨ã„ã†ãƒãƒ¼ã‚¿ãƒ«ã‚µã‚¤ãƒˆãŒã‚ªãƒ¼ãƒ—ンã—ã¾ã—ãŸã€‚<A - href="http://lets.postgresql.jp/">http://lets.postgresql.jp/</a> - ] - </pre></small></p> - - -<h4 id="item1.11">1.11</a>) <small>SQL</small> ã¯ã©ã†ã™ã‚Œã°å¦ã¹ã¾ã™ã‹ï¼Ÿ</h4> - - <p>ã¾ãšã€ 上記ã§è¿°ã¹ãŸ PostgreSQL ã«ã¤ã„ã¦ã®æœ¬ã‚’èªã‚€ã“ã¨ã‚’検討ã—ã¦ãã ã•ã„。 - <i>The Practical SQL Handbook</i>, Bowman Judith S. et al., - Addison-Wesley も多ãã®ãƒ¦ãƒ¼ã‚¶ã«å¥½è©•ã§ã™ã€‚ ã»ã‹ã§ã¯ã€<i>The Complete - Reference SQL</i >, Groff et al., McGraw-Hill も好評ã§ã™ã€‚</p> - - - <p>ç´ æ™´ã‚‰ã—ã„手引書ã¯ã€<a href= - <ul> - <li> <a href="http://www.intermedia.net/support/sql/sqltut.shtm">http://www.intermedia.net/support/sql/sqltut.shtm</a> - </li> - <li> - <a href="http://sqlcourse.com/">http://sqlcourse.com</a> - </li> - - <li> - <a href="http://www.w3schools.com/sql/default.asp">http://www.w3schools.com/sql/default.asp</a> - </li> - <li><a href= - "http://mysite.verizon.net/Graeme_Birchall/id1.html">http://mysite.verizon.net/Graeme_Birchall/id1.html</a> - </li> - <li><a href= - "http://sqlzoo.net">http://sqlzoo.net</a> - </li> - </ul> - ã«ã‚ã‚Šã¾ã™ã€‚</p> - - - <p><small><pre> - [訳注: - 日本PostgreSQLユーザ会ã®æ—¥æœ¬èªžã®å‚考文献ã®ç´¹ä»‹ãƒšãƒ¼ã‚¸ - <a href="http://www.postgresql.jp/PostgreSQL/references.html"> -http://www.postgresql.jp/PostgreSQL/references.html</a> - ãŒã‚ã‚Šã¾ã™ã€‚ - å €ç”°å€«è‹±æ°ã®ã€ŒPostgreSQL日本語マニュアル〠- <a href="http://www.net-newbie.com/">http://www.net-newbie.com/</a> - ã§ã¯ã‚ªãƒ³ãƒ©ã‚¤ãƒ³ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ã®æ¤œç´¢ãŒã§ãã¾ã™ã€‚ - 丸山ä¸äºŒå¤«æ°ã®UNIX データベース入門 - <a href="http://www.wakhok.ac.jp/DB/DB.html">http://www.wakhok.ac.jp/DB/DB.html</a> - もオンラインã§èªã‚€ã“ã¨ãŒã§ãã¾ã™ã€‚ - Nikkei BP IT Pro ã«ã‚る石井é”夫æ°ã® <a href="http://itpro.nikkeibp.co.jp/article/COLUMN/20060120/227628/">PostgreSQL ウォッãƒ</a> - ã§ã¯æ¯Žå›žæ–°ã—ã„æƒ…å ±ã‚’ã¨ã‚Šã‚ã’ã¦ã„ã¾ã™ã€‚ - ] - </pre></small></p> - -<h4 id="item1.12">1.12</a>) パッãƒã‚’æä¾›ã—ãŸã‚Šã€é–‹ç™ºãƒãƒ¼ãƒ å‚åŠ ã™ã‚‹ã«ã¯ã©ã†ã™ã‚Œã°ã‚ˆã„ã§ã™ã‹ï¼Ÿ</h4> - - <p><a href="http://www.postgresql.org/docs/faqs.FAQ_DEV.html"> - (開発者å‘ã‘ã®ï¼‰Developer's FAQ</a>ã‚’ã”らんãã ã•ã„。</p> - - -<h4 id="item1.13">1.13</a>) ä»–ã®<small>DBMS</small>ã¨æ¯”ã¹PostgreSQLã¯ã©ã†ãªã®ã§ã™ã‹ï¼Ÿ PostgreSQLを組ã¿è¾¼ã¿ã«ä½¿ãˆã¾ã™ã‹ï¼Ÿ</h4> - - <p>ソフトウェアを評価ã™ã‚‹æ–¹æ³•ã«ã¯ã„ãã¤ã‹ã‚ã‚Šã¾ã™ã€‚機能ã¨æ€§èƒ½ã¨ä¿¡é ¼æ€§ã¨ - サãƒãƒ¼ãƒˆã¨ä¾¡æ ¼ã§ã™ã€‚</p> - - <dl> - <dt> <b>機能(Features)</b></dt> - <dd> - PostgreSQLã¯ã€ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ã€ã‚µãƒ–クエリã€ãƒˆãƒªã‚¬ãƒ¼ã€ãƒ“ューã€å¤– - 部ã‚ー整åˆæ€§å‚ç…§ã€ãŠã‚ˆã³ã€æ´—ç·´ã•ã‚ŒãŸãƒãƒƒã‚¯æ©Ÿæ§‹ãªã©ã€å¤§è¦æ¨¡å•†ç”¨ - <small>DBMS</small>ãŒæŒã¤æ©Ÿèƒ½ã‚’ã»ã¨ã‚“ã©æŒã£ã¦ã„ã¾ã™ã€‚ã•ã‚‰ã« - PostgreSQLã¯ã€ãƒ¦ãƒ¼ã‚¶å®šç¾©åž‹ã€ç¶™æ‰¿ã€ãƒ«ãƒ¼ãƒ«ã€ãã‚Œã‹ã‚‰ã€ãƒãƒƒã‚¯ç«¶åˆã‚’縮 - å°ã™ã‚‹ãƒžãƒ«ãƒãƒãƒ¼ã‚¸ãƒ§ãƒ³åŒæ™‚性制御ãªã©ã€å•†ç”¨<small>DBMS</small>ã‚‚æŒ - ã¡åˆã‚ã›ãªã„よã†ãªæ©Ÿèƒ½ã‚’ã„ãã¤ã‹æŒã¡åˆã‚ã›ã¦ã„ã¾ã™ã€‚<br /> - - </dd> - - <dt> <b>性能(Performance)</b></dt> - <dd> - PostgreSQLã¯ä»–ã®å•†ç”¨ã‚ã‚‹ã„ã¯ã‚ªãƒ¼ãƒ—ンソースã®ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã¨äº’角ã®æ€§ - 能もæŒã¡ã¾ã™ã€‚ã‚ã‚‹é¢ã§ã¯ã‚ˆã‚Šæ—©ã‹ã£ãŸã‚Šã€ã»ã‹ã®é¢ã§ã¯ã‚ˆã‚Šé…ã‹ã£ãŸã‚Š - ã—ã¾ã™ã€‚ä»–ã®ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã«æ¯”ã¹ãŸæ€§èƒ½ã¯ã€ãµã¤ã† +/-10% ãらã„ã§ã—ょã†ã€‚ - </dd> - - <dt> <b>ä¿¡é ¼æ€§(Reliability)</b></dt> - <dd> - 我々ã¯ã€<small>DBMS</small>ã®ä¿¡é ¼æ€§ãŒé«˜ããªãã¦ã¯ãã®ä¾¡å€¤ãŒç„¡ã„ã“ - ã¨ã‚’ç†è§£ã—ã¦ã¾ã™ã€‚å分テストã—ã¦ã€å®‰å®šã—ãŸã‚³ãƒ¼ãƒ‰ã‚’ãƒã‚°ã‚’最å°ã«ã—㦠- ã‹ã‚‰ãƒªãƒªãƒ¼ã‚¹ã™ã‚‹ã‚ˆã†ã«åŠªã‚ã¦ã¾ã™ã€‚ãã‚Œãžã‚Œã®ãƒªãƒªãƒ¼ã‚¹ã¯å°‘ãªãã¨ã‚‚1 - カ月以上ã®ãƒ™ãƒ¼ã‚¿ãƒ»ãƒ†ã‚¹ãƒˆã‚’è¡Œãªã„ã€ã“ã‚Œã¾ã§ã®ãƒªãƒªãƒ¼ã‚¹ã®å±¥æ´ãŒã€è£½å“ - 版ã¨ã—ã¦å®‰å®šã—ãŸå …固ãªãƒªãƒªãƒ¼ã‚¹ã§ã‚ã‚‹ã“ã¨ã‚’物語ã£ã¦ã„ã¾ã™ã€‚ã“ã®åˆ†é‡Ž - ã§ã¯ã€ä»–ã®ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã¨æ¯”ã¹ã¦ã‚‚éœè‰²ãŒãªã„ã“ã¨ã«è‡ªä¿¡ã‚’æŒã£ã¦ã„ã¾ã™ã€‚ - <br /> - </dd> - - <dt> <b>サãƒãƒ¼ãƒˆ(Support)</b></dt> - <dd> - 我々ã®ãƒ¡ãƒ¼ãƒªãƒ³ã‚°ãƒªã‚¹ãƒˆã¯ã€éé‡ã™ã‚‹ã„ã‹ãªã‚‹å•é¡Œã«ã¤ã„ã¦ã‚‚解決ã¸ã®æ‰‹ - 助ã‘ã‚’ã—ã¦ãれるã€é–‹ç™ºè€…やユーザã®å¤§ããªé›†ã¾ã‚Šã¸ã®æŽ¥ç‚¹ã‚’æä¾›ã—ã¦ã„ - ã¾ã™ã€‚我々ã¯å•é¡Œã®è§£æ±ºã‚’ä¿è¨¼ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“ãŒã€å•†ç”¨ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ - スã§ã‚ã£ã¦ã‚‚常ã«è§£æ±ºã•ã‚Œã‚‹ã‚ã‘ã§ã¯ã‚ã‚Šã¾ã›ã‚“。開発者やã€ãƒ¦ãƒ¼ã‚¶ãƒ»ã‚³ - ミュニティã€ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«é¡žã€ãã‚Œã«ã€ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ãªã©ã¸ç›´æŽ¥ã‚¢ã‚¯ã‚»ã‚¹ã§ - ãã‚‹ã“ã¨ã«ã‚ˆã£ã¦ã€PostgreSQLã®ã‚µãƒãƒ¼ãƒˆã¯ã€ä»–ã®<small>DBMS</small> - サãƒãƒ¼ãƒˆã‚ˆã‚Šã‚‚優れãŸã‚‚ã®ã¨ãªã£ã¦ã„ã¾ã™ã€‚御è¦æœ›ã«ç”ãˆã¦ã€äº‹æŸ„毎ã®å•† - 用サãƒãƒ¼ãƒˆãªã©ã‚‚ã‚ã‚Šã¾ã™ï¼ˆ<a href="#item1.7">FAQ1.7節</a>ã‚’ã”らんãã - ã•ã„)。 - <br /> - </dd> - - <dt> <b>ä¾¡æ ¼(Price)</b></dt> - <dd> - PostgreSQLã®åˆ©ç”¨ã¯ã€å•†ç”¨ã§ã‚‚éžå•†ç”¨ã§ã‚‚ã€ã™ã¹ã¦ç„¡æ–™ã§ã™ã€‚上記ã«ç¤ºã— - ã¦ã‚ã‚‹BSDスタイルã®ä½¿ç”¨è¨±è«¾ã«å¤–ã‚Œãªã„é™ã‚Šã€PostgreSQLã®ã‚³ãƒ¼ãƒ‰ã‚’制 - é™ç„¡ã—ã§å•†å“ã«çµ„ã¿è¾¼ã‚€ã“ã¨ãŒã§ãã¾ã™ã€‚<br /> - </dd> - </dl> - PostgreSQLã¯ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆï¼ã‚µãƒ¼ãƒãƒ»ã‚¢ãƒ¼ã‚テクãƒãƒ£ã§è¨è¨ˆã•ã‚Œã¦ã„ã¦ã€ - クライアントã¨ã‚µãƒ¼ãƒãŠã‚ˆã³ãれを補助ã™ã‚‹ã„ã‚ã„ã‚ãªãƒ—ãƒã‚»ã‚¹ãŒåˆ¥ã€…ã«èµ° - ã‚‹ã“ã¨ãŒè¦æ±‚ã•ã‚Œã¾ã™ã€‚多ãã®çµ„ã¿è¾¼ã¿ã‚¢ãƒ¼ã‚テクãƒãƒ£ã¯ã“ã®ã‚ˆã†ãªè¦æ±‚ã‚’ - サãƒãƒ¼ãƒˆå¯èƒ½ã§ã™ã€‚ã—ã‹ã—ã€ãŠä½¿ã„ã«ãªã£ã¦ã„る組ã¿è¾¼ã¿ã‚¢ãƒ¼ã‚テクãƒãƒ£ã« - よã£ã¦ã¯ã€ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚µãƒ¼ãƒãŒã‚¢ãƒ—リケーション・プãƒã‚»ã‚¹ã®ä¸ã§èµ°ã‚‹ã“ - ã¨ã‚’è¦æ±‚ã•ã‚Œã‚‹å ´åˆãŒã‚ã‚Šã€Postgresを使ã†ã“ã¨ã¯ã§ããªã„ã®ã§ã€è»½é‡ã®ãƒ‡ãƒ¼ - タベースソリューションをé¸æŠžã™ã¹ãã§ã™ã€‚ - </p> - -<h3 id="item1.14">1.14) PostgreSQLã¯å›½æ¯Žã®æœ€æ–°ã®å¤æ™‚é–“ã®å¤‰æ›´ã‚’扱ã„ã¾ã™ã‹ï¼Ÿ</h3> - - <p>åˆå·žå›½ã®å¤æ™‚é–“ã®å¤‰æ›´ã¯ã€PostgreSQLã®ãƒªãƒªãƒ¼ã‚¹8.0.4以é™[4+]ã¨ã€ãã® - 後ã®ãƒ¡ã‚¸ãƒ£ãƒ¼ãƒªãƒªãƒ¼ã‚¹ã€ãŸã¨ãˆã° 8.1 ã«ã¯å«ã¾ã‚Œã¦ã„ã¾ã™ã€‚カナダã¨ã‚ªãƒ¼ - 西部ストラリアã®å¤‰æ›´ã¯ã€8.0.[10+], 8.1.[6+] ãŠã‚ˆã³ã€ãã®å¾Œã®ãƒ¡ã‚¸ãƒ£ãƒ¼ - リリースã®ã™ã¹ã¦ã«å«ã¾ã‚Œã¾ã™ã€‚8.0よりå‰ã®PosrgreSQLã§ã¯ã‚ªãƒšãƒ¬ãƒ¼ãƒ†ã‚£ - ングシステムã®ã‚¿ã‚¤ãƒ ゾーンデータベースをå¤æ™‚é–“æƒ…å ±ã®ãŸã‚ã«ä½¿ã£ã¦ã„ - ã¾ã™ã€‚</p> - -<hr /> - -<h3 id="item1.15">1.15) PostgreSQLã®ãƒ¡ãƒ¼ãƒªãƒ³ã‚°ãƒªã‚¹ãƒˆã®è³¼èªã‚’ã‚„ã‚ã‚‹ã«ã¯ã©ã†ã™ã‚Œã°ã‚ˆã„ã§ã™ã‹ï¼Ÿã¾ãŸã€é›»åメールをé‡è¤‡ã—ã¦å—ã‘å–らãªã„よã†ã«ã™ã‚‹ã«ã¯ã©ã†ã—ã¾ã™ã‹ï¼Ÿ -</h3> - - <p>PostgreSQLã®<a - href="http://mail.postgresql.org/mj/mj_wwwusr/domain=postgresql.org?user=&passw=&func=login">Majordomo</a> - ページã‹ã‚‰ã€PostgreSQLã«é–¢ã™ã‚‹è¤‡æ•°ã®ãƒ¡ãƒ¼ãƒªãƒ³ã‚°ãƒªã‚¹ãƒˆã®è³¼èªã®é–‹å§‹ã¨ä¸æ¢ - ãŒã§ãるよã†ã«ãªã£ã¦ã„ã¾ã™ã€‚(ãƒã‚°ã‚¤ãƒ³ã™ã‚‹ãŸã‚ã«ã¯Majaordomoã‹ã‚‰é€ã‚‰ - れる御本人ã®ãƒ‘スワードãŒå¿…è¦ã«ãªã‚Šã¾ã™ã€‚)</p> - - <p>PostgreSQLnoã™ã¹ã¦ã®ãƒ¡ãƒ¼ãƒªãƒ³ã‚°ãƒªã‚¹ãƒˆã§ã¯ã€è¿”ä¿¡ã¯ãƒ¡ãƒ¼ãƒªãƒ³ã‚°ãƒªã‚¹ãƒˆ - ã¨<i>ã‹ã¤</i>å…ƒã®ãƒ¡ãƒ¼ãƒ«ã®æŠ•ç¨¿è€…ã¸é€ã‚‰ã‚Œã‚‹ã‚ˆã†ã«æ§‹æˆã—ã¦ã‚ã‚Šã¾ã™ã€‚ã“ - ã‚Œã«ã‚Šåˆ©ç”¨è€…ã¯ã€ã‚‚ã£ã¨ã‚‚迅速ã«ãƒ¡ãƒ¼ãƒ«ã¸ã®è¿”ä¿¡ã‚’å—ã‘られるよã†ã«ãªã£ã¦ - ã„ã¾ã™ã€‚æ—¢ã«ç›´æŽ¥å—ã‘å–ã£ã¦ã„るメールをã€ãƒªã‚¹ãƒˆã‹ã‚‰é‡è¤‡ã—ã¦å—ã‘å–り㟠- ããªã„å ´åˆã¯ã€Majordomo ã®<i>Change Settings</i>ページã‹ã‚‰ã€ - <i>eliminatecc</i>ã‚’ãƒã‚§ãƒƒã‚¯ã—ã¾ã™ã€‚ã¾ãŸã€<i>selfcopy</i>ã®ãƒã‚§ãƒƒã‚¯ - ã‚’ã¯ãšã™ã“ã¨ã§ã€è‡ªåˆ†ã®é€ã£ãŸãƒ¡ãƒ¼ãƒ«ã®ã‚³ãƒ”ーをå—ã‘å–らãªã„よã†ã«ã‚‚ã§ã - ã¾ã™ã€‚</p> - - -<h2 align="center">ユーザ・クライアントã®è³ªå•</h2> - - -<h4 id="item2.1">2.1</a>) PostgreSQL ã«ã¯ã©ã‚“ãªã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹ãŒä½¿ãˆã¾ã™ã‹ï¼Ÿ</h4> - - <p>PostgreSQL ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã«å«ã¾ã‚Œã‚‹ç‰©ã¯<small>C</small>ã¨çµ„込㿠- <small>C</small>ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹ã ã‘ã§ã™ã€‚ãã®ä»–ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹ - ã¯ç‹¬ç«‹ã—ãŸãƒ—ãƒã‚¸ã‚§ã‚¯ãƒˆã§ã€åˆ¥ã€…ã«ãƒ€ã‚¦ãƒ³ãƒãƒ¼ãƒ‰ã•ã‚Œã¾ã™ã€‚分ã‹ã‚Œã‚‹ã“ã¨ã§ã€ - ãã‚Œãžã‚Œã®é–‹ç™ºãƒãƒ¼ãƒ ãŒç‹¬è‡ªã®ãƒªãƒªãƒ¼ã‚¹ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’æŒã¤ã“ã¨ãŒè¨±ã•ã‚Œã¾ - ã™ã€‚</p> - - <p><small>PHP</small> ã®ã‚ˆã†ãªã„ãã¤ã‹ã®ãƒ—ãƒã‚°ãƒ©ãƒŸãƒ³ã‚°è¨€èªžã¯ã€ - PostgreSQLã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹ã‚’å«ã‚“ã§ã„ã¾ã™ã€‚Perl, <small>TCL</small>, - Python, ãã—ã¦ã€ãã®ã»ã‹ã®åˆ©ç”¨å¯èƒ½ãªè¨€èªžã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹ã¯ã€<a - href="http://pgfoundry.org">http://pgfoundry.org</a> - ã® <i>Drivers/Interfaces</i> ã®ç¯€ã®ä¸ã¨ã‚¤ãƒ³ã‚¿ãƒ¼ãƒãƒƒãƒˆã®æ¤œç´¢ã§ã¿ã¤ã‘ - られã¾ã™ã€‚ - </p> - - -<h4 id="item2.2">2.2</a>) PostgreSQL ã‚’ Web ページã¨é€£æºã•ã›ã‚‹ã«ã¯ã©ã‚“ãªãƒ„ールãŒã‚ã‚Šã¾ã™ã‹ï¼Ÿ</h4> - - <p> データベースをè£ã«æŒã¤ Web ページã«ã¤ã„ã¦ã®ç´ 晴らã—ã„紹介ãŒã€<br /> - <a href="http://www.webreview.com">http://www.webreview.com</a>ã«ã‚ã‚Šã¾ã™ã€‚</p> - <p> Web ã¸ã®æ‹¡å¼µã®ãŸã‚ã«ã¯ã€PHP(<a href="http://www.php.net">http://www.php.net/</a>) - ãŒå“越ã—ãŸã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹ã¨ãªã£ã¦ã„ã¾ã™ã€‚</p> - - <p><small><pre> - [訳注: - PHPã«é–¢ã™ã‚‹æ—¥æœ¬èªžã®æƒ…å ±ã¯ã€2000å¹´4月19æ—¥ã«ç™ºè¶³ã—ãŸæ—¥æœ¬PHPユーザ会ã®ã‚µã‚¤ãƒˆ - <a href="http://www.php.gr.jp/">http://www.php.gr.jp/</a> - ã‚ã‚‹ã„ã¯ã€å»£å· é¡žã•ã‚“ã®ã‚µã‚¤ãƒˆ - <a href="http://www.geocities.jp/rui_hirokawa/php/">http://www.geocities.jp/rui_hirokawa/php/</a> - ã«ã‹ãªã‚Šã¾ã¨ã‚られã¦ã„ã¾ã™ã€‚ - ] - </pre></small></p> - - <p> 処ç†ãŒè¤‡é›‘ãªå ´åˆã€å¤šãã®äººã¯ Perl インターフェース㨠CGI.pm ã‹ - mod_perl を使ã„ã¾ã™ã€‚ </p> - - -<h4 id="item2.3">2.3</a>) PostgreSQL ã«ã‚°ãƒ©ãƒ•ã‚£ã‚«ãƒ«ãƒ»ãƒ¦ãƒ¼ã‚¶ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹ã¯ã‚ã‚Šã¾ã™ã‹ï¼Ÿ</h4> - - - <p>商用ã¨ã‚ªãƒ¼ãƒ—ンソース開発者ã«ã‚ˆã‚‹ã‚‚ã®ä¸¡æ–¹ã§ã€PostgreSQLã«ã¯å¤šãã®GUIツールãŒåˆ©ç”¨å¯èƒ½ã§ã€è©³ç´°ãªãƒªã‚¹ãƒˆã¯ã€<a -href="http://wiki.postgresql.org/wiki/Community_Guide_to_PostgreSQL_GUI_Tools"> -PostgreSQL GUI ツールã«ã¤ã„ã¦ã®ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ã‚¬ã‚¤ãƒ‰</a> ã«ã¦ã”らんãã ã•ã„。</p> - - <p><small><pre> - [訳注: - pgAdmin3 ã¯PostgreSQL標準GUI管ç†ãƒ„ールã§ã€Windows版(PostgreSQL - for Windows) ã«åŒæ¢±ã•ã‚Œã¦ã„ã¾ã™ã€‚詳ã—ã„æƒ…å ±ã¯ã€ - <a href="http://www.pgadmin.org/">http://www.pgadmin.org/</a>ã«ã‚ã‚Šã¾ã™ã€‚ - ] - </pre></small></p> - -<hr /> - -<h2 align="center">管ç†ä¸Šã®è³ªå•</h2> - -<h4 id="item3.1">3.1</a>) ã©ã®ã‚ˆã†ã«ã™ã‚Œã° <i>/usr/local/pgsql</i> 以外ã®å ´æ‰€ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã§ãã¾ã™ã‹ï¼Ÿ</h4> - - <p> ç°¡å˜ãªæ–¹æ³•ã¯ã€ <i>configure</i> を走らã›ã‚‹ã¨ãã« --prefix オプショ - ンを指定ã™ã‚‹ã“ã¨ã§ã™ã€‚ </p> - - -<h4 id="item3.2">3.2</a>) ä»–ã®ãƒ›ã‚¹ãƒˆã‹ã‚‰ã®æŽ¥ç¶šã¯ã©ã®ã‚ˆã†ã«åˆ¶å¾¡ã—ã¾ã™ã‹ï¼Ÿ</h4> - - <p>既定値ã§ã¯ã€PostgreSQL 㯠Unix ドメインソケットã€ã¾ãŸã¯ã€TCP/IP接 - 続ã®ãƒãƒ¼ã‚«ãƒ«ãƒžã‚·ãƒ³ã‹ã‚‰ã®æŽ¥ç¶šã—ã‹è¨±ã—ã¾ã›ã‚“。postgresql.conf ã®ä¸ã® - listen_addresses ã‚’ä¿®æ£ã—ã€<b>ã‹ã¤</b>ã€<i>$PGDATA/pg_hba.conf</i> - ファイルをé©åˆ‡ã«ç›´ã—ã€ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚µãƒ¼ãƒã‚’å†èµ·å‹•ã—ã¦ã€ãƒ›ã‚¹ãƒˆãƒ™ãƒ¼ã‚¹ - ã®èªè¨¼ã‚’有効ã«ã—ãªã„ã‹ãŽã‚Šã¯ã€ä»–ã®ãƒžã‚·ãƒ³ã‹ã‚‰ã¯æŽ¥ç¶šã§ããªã„ã§ã—ょã†ã€‚</p> - - -<h4 id="item3.3">3.3</a>) より良ã„性能を得るãŸã‚ã«ã¯ã€ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ãƒ»ã‚¨ãƒ³ã‚¸ãƒ³ã‚’ã©ã®ã‚ˆã†ã«èª¿æ•´ã—ã¾ã™ã‹ï¼Ÿ</h4> - - <p>性能改善ã®å¯èƒ½æ€§ã®ã‚ã‚Šãã†ãªä¸»ãªé ˜åŸŸãŒ3ã¤ã‚ã‚Šã¾ã™ï¼š</p> - <dl> - <dt><b>クエリã®å¤‰æ›´</b></dt> - - <dd>クエリを修æ£ã—ã¦ã‚ˆã‚Šè‰¯ã„性能を得るã“ã¨ã‚’å«ã¿ã¾ã™ï¼š - <ul> - <li>å¼ãŠã‚ˆã³éƒ¨åˆ†ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ã‚’å«ã‚€ã€ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ã‚’作æˆ</li> - <li>複数ã®<small>INSERT</small>ã®ã‹ã‚ã‚Šã«COPYを使用</li> - <li>複数ã®æ–‡ã‚’グループ化ã—ã€1ã¤ã®ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ã«ã—ã¦ã‚³ãƒŸãƒƒãƒˆã®ã‚ªãƒ¼ãƒãƒ˜ãƒƒãƒ‰ã‚’削減</li> - <li>インデックスã‹ã‚‰ã‹ã‚‰æ²¢å±±ã®ãƒã‚¦ã‚’å–り出ã™ã¨ãã¯<small>CLUSTER</small>を使用</li> - <li>クエリã®å‡ºåŠ›ã®ã‚µãƒ–セットを返ã™ãŸã‚ã«<small>LIMIT</small>を使用</li> - <li>準備ã•ã‚Œã¦ã„るクエリを使用</li> - <li>オプティマイザã®æ£ç¢ºãªçµ±è¨ˆã‚’ç¶æŒã™ã‚‹ãŸã‚ã«<small>ANALYZE</small>を使用</li> - <li><small>VACUUM</small> ã¾ãŸã¯ <i>pg_autovacuum</i> ã®å¸¸ç”¨</li> - <li>大ããªãƒ‡ãƒ¼ã‚¿å¤‰æ›´ã®ã‚ã‚‹ã¨ãã¯ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ã‚’削除</li> - </ul><br/> - <br/> - </dd> - - <dt><b>サーãƒæ§‹æˆ</b></dt> - - <dd><i>postgresql.conf</i>ã®è¨å®šã®ã„ãã¤ã‹ã¯æ€§èƒ½ã«å½±éŸ¿ã—ã¾ã™ã€‚ - 詳ã—ãã¯ã€<a href= - "http://www.postgresql.org/docs/current/static/runtime-config.html"> - Administration Guide/Server Run-time Environment/Run-time - Configuration</a> ã®å…¨ä»¶ãƒªã‚¹ãƒˆã‚’ã”らんãã ã•ã„(<a - href="http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html"> - JPUGサイトã®æ—¥æœ¬èªžç‰ˆã€ã‚µãƒ¼ãƒã®æ§‹æˆ</a>)。 - ãã—ã¦ã€è§£èª¬ã¨ã—ã¦ã€<a - href="http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html"> - http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html</a> - ãŠã‚ˆã³ã€ <a href="http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html"> - http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html</a> ã‚’ - ã”らんãã ã•ã„。 - <br/> - <br/> - </dd> - - <dt><b>ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã®é¸å®š</b></dt> - - <dd>性能ã«ãŠã‘ã‚‹ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã®å½±éŸ¿ã¯ - <a href="http://www.powerpostgresql.com/PerfList/"> - http://www.powerpostgresql.com/PerfList/</a> ã¨ã€ <a - href="http://momjian.us/main/writings/pgsql/hw_performance/index.html"> - http://momjian.us/main/writings/pgsql/hw_performance/index.html</a> - (<a href="http://www.postgresql.jp/wg/psqltrans/hw_performance_j/index.html">JPUGサイトã®æ—¥æœ¬èªžç‰ˆ</a>) - ã«è¿°ã¹ã‚‰ã‚Œã¦ã„ã¾ã™ã€‚ - <br/> - <br/> - </dd> - </dl> - - - <p><small><pre> - [訳注: - JPUGç†äº‹é•·ã®ç‰‡å²¡è£•ç”Ÿæ°ã«ã‚ˆã‚‹ã€ã€Œä»Šã™ãã§ãã‚‹PostgreSQLãƒãƒ¥ãƒ¼ãƒ‹ãƒ³ã‚°ã€ - ã¨ã„ã†ã‚³ãƒ¼ãƒŠãƒ¼ãŒ ThinkIT サイトã«ã‚ã‚Šã€å®Ÿä½œæ¥ã®å‚考ã«ãªã‚Šã¾ã™ã€‚ - http://www.thinkit.co.jp/free/tech/10/1/1.html - ] - </pre></small></p> - - -<h4 id="item3.4">3.4</a>) ã©ã®ã‚ˆã†ãªãƒ‡ãƒã‚°æ©Ÿèƒ½ãŒä½¿ãˆã¾ã™ã‹ï¼Ÿ</h4> - - <p>サーãƒæ§‹æˆå¤‰æ•°ã«ã¤ã„ã¦ã¯ã€ -href="http://www.postgresql.org/docs/current/interactive/runtime-config-logging.html">http://www.postgresql.org/docs/current/interactive/runtime-config-logging.html</a> - ã«ç¤ºã•ã‚Œã‚‹ã‚ˆã†ã«å¤šãã® <code>log_*</code> ãŒã‚ã‚Šã€ã‚¯ã‚¨ãƒªã¨ãƒ—ãƒã‚»ã‚¹ - ã®çµ±è¨ˆæƒ…å ±ã‚’å‡ºåŠ›ã™ã‚‹ã“ã¨ãŒã§ãã€ãƒ‡ãƒã‚°ã‚„性能測定ã«ã¯ã¨ã¦ã‚‚便利ã§ã™ã€‚</p> - - -<h4 id="item3.5">3.5</a>) 接続ã—よã†ã¨ã™ã‚‹ã¨ãã« <i>'Sorry, too many clients'</i> ãŒå‡ºã‚‹ã®ã¯ãªãœã§ã™ã‹ï¼Ÿ</h4> - - <p> 既定ã§ã®åˆ¶é™ã§ã‚ã‚‹ 100 ã®ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚»ãƒƒã‚·ãƒ§ãƒ³ã«é”ã—ã¦ã—ã¾ã£ã¦ - ã„ã¾ã™ã€‚サーãƒãƒ¼ã®åŒæ™‚接続ã§ãã‚‹ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ãƒ—ãƒã‚»ã‚¹ã®åˆ¶é™å€¤ã‚’増や㙠- å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚<i>postgresql.conf</i> ã®ä¸ã®<i>max_connections</i> - ã®å€¤ã‚’変更ã—ã¦ã‚µãƒ¼ãƒã‚’å†èµ·å‹•ã™ã‚‹ã“ã¨ã§å¯èƒ½ã«ãªã‚Šã¾ã™ã€‚</p> - - -<h4 id="item3.6">3.6</a>) PostgreSQLã®ã‚¢ãƒƒãƒ—グレードã®æ‰‹é †ã¯ã©ã†ãªã‚Šã¾ã™ã‹ï¼Ÿ</h4> - - <p>ãƒãƒ¼ã‚¸ãƒ§ãƒ³ç•ªå·ä»˜ã‘ã®æ–¹é‡ã«ã¤ã„ã¦ã€æ›´æ–°å…¨èˆ¬ã«ã¤ã„ã¦ã®è§£èª¬ã¯<a - href="http://www.postgresql.org/support/versioning">http://www.postgresql.org/support/versioning</a> を〠- ãã—ã¦ã€ã‚¢ãƒƒãƒ—グレードã«ã¤ã„ã¦ã®ä¸€èˆ¬çš„ãªèª¬æ˜Žã¯ <a - href="http://www.postgresql.org/docs/current/static/install-upgrading.html"> - http://www.postgresql.org/docs/current/static/install-upgrading.html</a> - ã‚’ã”覧ãã ã•ã„。 - </p> -<p><small><pre> -[訳注: - アップグレードã«ã¤ã„ã¦ã®å’Œè¨³ç‰ˆã¯ä¸‹è¨˜ã«ã‚ã‚Šã¾ã™ã€‚ - <a href="http://www.postgresql.jp/document/current/html/install-upgrading.html">http://www.postgresql.jp/document/current/html/install-upgrading.html</a> -] -</pre></small></p> - - -<small><pre> -[訳注: - 原文ã§ã¯ã€ä¸‹è¨˜ã®å†…容ã¯<a href="http://www.postgresql.org/support/versioning">独立ã—ãŸãƒšãƒ¼ã‚¸ã«ç§»ã•ã‚Œ</a>ã€å‰Šé™¤ã•ã‚Œã¦ã„ã¾ã™ã€‚ -</pre> - - <p>æ–°ã—ã„機能を盛り込むPostgreSQLã®ãƒ¡ã‚¸ãƒ£ãƒ¼ãƒªãƒªãƒ¼ã‚¹ã¯ã ã„ãŸã„å¹´ã«1回 - 程度行ãªã„ã¾ã™ã€‚メジャーリリースã¯ã€ãŸã¨ãˆã°ã€8.1ã‹ã‚‰8.2ã¸ã®ã‚ˆã†ã«ã€ - ãƒãƒ¼ã‚¸ãƒ§ãƒ³ç•ªå·ã®1番目ã‹2番目ã®éƒ¨åˆ†ã‚’増やã—ã¦ã‚†ãã¾ã™ã€‚</p> - - <p>PostgreSQLã®ãƒ¡ã‚¸ãƒ£ãƒ¼ãƒªãƒªãƒ¼ã‚¹ã¯é€šå¸¸ã€ã‚·ã‚¹ãƒ†ãƒ テーブルã¨ãƒ‡ãƒ¼ã‚¿ã®å†… - 部フォーマットを変更ã—ã¾ã™ã€‚ã“れらã®å¤‰æ›´ã¯ãŸã„ã¦ã„ã¯è¤‡é›‘ãªã®ã§ã§ã€ãƒ‡ãƒ¼ - タファイルã®å¾Œæ–¹äº’æ›æ€§ã‚’ç¶æŒã—ãŸã‚Šã¯ã—ã¾ã›ã‚“。メジャーアップグレード - ã®ãŸã‚ã«ã¯ã€ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã®ãƒ€ãƒ³ãƒ—/リãƒãƒ¼ãƒ‰ãŒå¿…è¦ã«ãªã‚Šã¾ã™ã€‚</p> - - <p>マイナーリリースã¯ã€ãŸã¨ãˆã°ã€8.1.5 ã‹ã‚‰8.1.6ã¸ã®ã‚ˆã†ã«ã€ãƒãƒ¼ã‚¸ãƒ§ - ン番å·ã®3番目ã®å€¤ã‚’増やã—ã¾ã™ã€‚PostgreSQLãƒãƒ¼ãƒ ã¯ã€ãƒžã‚¤ãƒŠãƒ¼ãƒªãƒªãƒ¼ã‚¹ - ã«å¯¾ã—ã¦ã¯ã€ãƒã‚°ãƒ•ã‚£ã‚¯ã‚¹ã—ã‹è¡Œãªã„ã¾ã›ã‚“。ã™ã¹ã¦ã®ãƒ¦ãƒ¼ã‚¶ã¯ã€ã§ãã‚‹ã - ã‘最新ã®ãƒžã‚¤ãƒŠãƒ¼ãƒªãƒªãƒ¼ã‚¹ã«æ›´æ–°ã™ã¹ãã§ã™ã€‚アップグレードã«ã¯ã€å¸¸ã«ãƒª - スクãŒã¤ãã‚‚ã®ã§ã™ã‹ã‚‰ã€PostgreSQLã®ãƒžã‚¤ãƒŠãƒ¼ä¿®æ£ãƒªãƒªãƒ¼ã‚¹ã§ã¯ã€é »ç¹ã« - 発生ã—ãŸã‚Šã€<a href="http://www.postgresql.org/support/security">ã‚»ã‚ュリティ</a>ã«é–¢ä¿‚ã—ãŸã‚Šã€ãƒ‡ãƒ¼ã‚¿ãŒã¤ã¶ã‚Œã‚‹ãƒã‚°ã ã‘ã‚’ä¿®æ£ - ã—ã€ã‚¢ãƒƒãƒ—グレードã®ãƒªã‚¹ã‚¯ã‚’最å°é™ã«ã¨ã©ã‚ã¾ã™ã€‚我々ã®ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ã§ - ã¯ã€ã‚¢ãƒƒãƒ—グレードã™ã‚‹ãƒªã‚¹ã‚¯ã‚ˆã‚Šã‚‚ã€ã‚¢ãƒƒãƒ—グレード<i>ã—ãªã„リスク</i> - ã®ã»ã†ãŒé«˜ã„ã¨è€ƒãˆã¦ã„ã¾ã™ã€‚</p> - - <p>マイナーリリースã®ã‚¢ãƒƒãƒ—グレードã«ã¯ãƒ€ãƒ³ãƒ—ã¨ãƒªã‚¹ãƒˆã‚¢ã®å¿…è¦ã¯ãªã〠- データベースサーãƒã‚’åœæ¢ã—ã¦ã€ã‚¢ãƒƒãƒ—デートã•ã‚ŒãŸãƒã‚¤ãƒŠãƒªã‚’インストー - ルã—ã€ã‚µãƒ¼ãƒã‚’リスタートã—ã¾ã™ã€‚</p> -<pre> -] -</pre></small> - - -<h4 id="item3.7">3.7</a>) ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã«ã¯ã©ã®ã‚ˆã†ãªã‚³ãƒ³ãƒ”ュータを使ãˆã°ã‚ˆã„ã§ã™ã‹ï¼Ÿ</h4> - - <p>PCãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã¯ã»ã¨ã‚“ã©äº’æ›æ€§ãŒã‚ã‚Šã¾ã™ã®ã§ã€ã»ã¨ã‚“ã©ã®äººã¯ã€ã™ - ã¹ã¦ã®PCãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ãŒåŒã˜å“質ã ã¨æ€ã„込む傾å‘ãŒã‚ã‚Šã¾ã™ã€‚ã—ã‹ã—ã€ã - ã‚Œã¯é–“é•ã„ã§ã™ã€‚ECC RAMã€SCSIã€ãŠã‚ˆã³ã€é«˜å“質マザーボードã¯ã€å®‰ã„ãƒãƒ¼ - ドウェアã«æ¯”ã¹ã‚‹ã¨ã€ã‚ˆã‚Šä¿¡é ¼æ€§ãŒé«˜ãã€ã‚ˆã‚Šæ€§èƒ½ã‚‚良ã„ã®ã§ã™ã€‚ - PostgreSQL ã¯ã»ã¨ã‚“ã©ã®ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã§ç¨¼åƒã—ã¾ã™ãŒã€ä¿¡é ¼æ€§ã‚„性能ãŒé‡ - è¦ãªå ´åˆã¯ã€ä½¿ç”¨ä¸ã®ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã®ã‚ªãƒ—ションã«ã¤ã„ã¦èª¿æŸ»ã™ã‚‹ã“ã¨ãŒ - 賢明ã§ã™ã€‚ãƒãƒƒãƒ†ãƒªãƒ¼ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—付ãã®ã‚ャッシュをæŒã¤ãƒ‡ã‚£ã‚¹ã‚¯ã‚³ãƒ³ãƒˆ - ãƒãƒ¼ãƒ©ã‚‚å½¹ã«ç«‹ã¡ã¾ã™ã€‚我々ã®ãƒ¡ãƒ¼ãƒªãƒ³ã‚°ãƒªã‚¹ãƒˆä¸Šã§ã‚‚ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã‚ªãƒ—ショ - ンã®ãƒˆãƒ¬ãƒ¼ãƒ‰ã‚ªãƒ•ã«ã¤ã„ã¦è°è«–ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚</p> -<hr /> - - -<h2 align="center">æ“作上ã®è³ªå•</h2> - -<h4 id="item4.1">4.1</a>) 最åˆã®æ•°ãƒã‚¦ã®ã¿ã‚’ <small>SELECT</small>ã™ã‚‹ã«ã¯ã©ã†ã—ã¾ã™ã‹ï¼Ÿãƒ©ãƒ³ãƒ€ãƒ ãªãƒã‚¦ï¼Ÿ -</h4> - - <p>å–å¾—ã—ãŸã„ãƒã‚¦ãŒã»ã‚“ã®æ•°è¡Œã§ã€<small>SELECT</small> ã®å®Ÿè¡Œæ™‚ã«å–å¾—ã™ã‚‹ãƒã‚¦ã® - æ•°ãŒåˆ†ã‹ã£ã¦ã„れ㰠<small>LIMIT</small> を使ã„ã¾ã—ょã†ã€‚インデックス㌠- <small>ORDER BY</small> ã¨ãƒžãƒƒãƒã™ã‚Œã°ã€ã‚¯ã‚¨ãƒªå…¨ä½“ã‚’(丸ã”ã¨)実行ã—ãªãã¦ã‚‚æ¸ˆã‚€å ´åˆã‚‚ - ã‚ã‚Šã¾ã™ã€‚<small>SELECT</small> ã™ã‚‹æ™‚点ã§ãƒã‚¦ã®æ•°ãŒä¸æ˜Žãªã‚‰ã€ã‚«ãƒ¼ã‚½ãƒ«ã‚’使ã£ã¦ - <small>FETCH</small> ã—ã¾ã—ょã†ã€‚ - - <p>ランダムã«ãƒã‚¦ã‚’<small>SELECT</small>ã™ã‚‹ã«ã¯ã€æ¬¡ã®æ–‡ã‚’使ã„ã¾ã™ï¼š -<pre> - SELECT col - FROM tab - ORDER BY random() - LIMIT 1; -</pre> - - -<h4 id="item4.2">4.2</a>) 定義ã•ã‚ŒãŸãƒ†ãƒ¼ãƒ–ルã€ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ã€ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã€ãŠã‚ˆã³ã€ãƒ¦ãƒ¼ã‚¶ã‚’ã©ã®ã‚ˆã†ã«ã—ã¦è¦‹ã¤ã‘出ã—ã¾ã™ã‹ï¼Ÿ<i>psql</i>ã§ä½¿ã‚ã‚Œã¦ã„るクエリを表示ã™ã‚‹ã«ã¯ã©ã†ã—ã¾ã™ã‹ï¼Ÿ</h4> - - <p><i>psql</i> ã®ä¸ã§ \dtコマンドを使ã£ã¦ãƒ†ãƒ¼ãƒ–ルを見るã“ã¨ãŒã§ã - ã¾ã™ã€‚psqlã®ä¸ã§ \? を使ã£ã¦ã€ã‚³ãƒžãƒ³ãƒ‰ã®å…¨ãƒªã‚¹ãƒˆã‚’調ã¹ã‚‹ã“ã¨ãŒã§ãã¾ - ã™ã€‚一方ã§ã€<i>psql</i> ã®ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ã§ã€ãƒãƒƒã‚¯ã‚¹ãƒ©ãƒƒã‚·ãƒ¥ã‚³ãƒžãƒ³ãƒ‰ã‚’ - 出力ã™ã‚‹ <i>pgsql/src/bin/psql/describe.c</i> ファイルをèªã‚€ã“ã¨ã‚‚㧠- ãã¾ã™ã€‚ãã®ä¸ã«ã¯ã€ <small>SQL</small> コマンドを生æˆã™ã‚‹éƒ¨åˆ†ã‚‚å«ã¾ - ã‚Œã¾ã™ã€‚ã¾ãŸã€ <i>-E</i> オプションを付ã‘㦠<i>psql</i> を開始ã™ã‚‹ã¨ã€ - 入力ã•ã‚ŒãŸã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã™ã‚‹ãŸã‚ã®ã‚¯ã‚¨ãƒªã‚’å°å—出力ã™ã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚ - PostgreSQL㯠<small>SQL</small> æº–æ‹ ã® INFORMATION SCHEMA インター - フェースをæä¾›ã—ã¾ã™ã®ã§ã€ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã«ã¤ã„ã¦ã®æƒ…å ±ã‚’å•ã„åˆã‚ã›ã‚‹ã“ - ã¨ã‚‚ã§ãã¾ã™ã€‚</p> - - <p><i>pg_</i> ã§å§‹ã¾ã‚‹ã‚·ã‚¹ãƒ†ãƒ テーブルã§ã‚‚ã“れらを記述ã™ã‚‹ã“ã¨ãŒã§ã - ã¾ã™ã€‚</p> - - <p><i>psql -l</i>を使ã†ã¨å…¨ã¦ã®ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚’リストã—ã¾ã™ã€‚</p> - - <p>ãã‚Œã¨ã€<i>pgsql/src/tutorial/syscat.source</i> を試ã—ã¦ã¿ã¦ãã - ã•ã„。ãã“ã«ã¯ã€ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã®ã‚·ã‚¹ãƒ†ãƒ テーブルã‹ã‚‰æƒ…å ±ã‚’å¾—ã‚‹ãŸã‚ã«å¿… - è¦ãª <small>SELECT</small> æ–‡ãŒæ²¢å±±ã‚ã‚Šã¾ã™ã€‚</p> - - -<h4 id="item4.3">4.3</a>) カラムã®ãƒ‡ãƒ¼ã‚¿åž‹ã‚’変更ã™ã‚‹ã«ã¯ã©ã†ã—ã¾ã™ã‹ï¼Ÿ</h4> - - <p>カラムã®ãƒ‡ãƒ¼ã‚¿åž‹ã®å¤‰æ›´ã¯ 8.0 以é™ã§ã¯ã€ - <small>ALTER TABLE ALTER COLUMN TYPE</small> を使ã†ã“ã¨ã«ã‚ˆã‚Šé–“å˜ã« - ãªã‚Šã¾ã—ãŸã€‚</p> - - <p>ãれよりå‰ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ã—ã¾ã™:</p> -<pre> - BEGIN; - ALTER TABLE tab ADD COLUMN new_col <i>new_data_type</i>; - UPDATE tab SET new_col = CAST(old_col AS <i>new_data_type</i>); - ALTER TABLE tab DROP COLUMN old_col; - COMMIT; -</pre> - - <p>ã“れを行ãªã£ãŸã¨ãã¯ã€æŠ¹æ¶ˆã•ã‚ŒãŸè¡ŒãŒä½¿ã£ã¦ã„ã‚‹ãƒ‡ã‚£ã‚¹ã‚¯ç©ºé–“ã‚’å›žåŽ - ã™ã‚‹ãŸã‚ã«<i>VACUUM FULL tab</i>ã‚’ã—ãŸã»ã†ãŒè‰¯ã„ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。</p> - -<h4 id="item4.4">4.4</a>) ãƒã‚¦ã€ãƒ†ãƒ¼ãƒ–ルã€ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã®æœ€å¤§ã‚µã‚¤ã‚ºã¯ï¼Ÿ</h4> - - <p>制é™ã¯ä»¥ä¸‹ã®ã¨ãŠã‚Šã§ã™:</p> -<blockquote> -<table> -<tr><td>データベースã®æœ€å¤§ã‚µã‚¤ã‚º?</td><td>制é™ç„¡ã— (32 TB ã®ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚‚å˜åœ¨ã—ã¾ã™)</td></tr> -<tr><td>テーブルã®æœ€å¤§ã‚µã‚¤ã‚º?</td><td>32 TB</td></tr> -<tr><td>ãƒã‚¦ã®æœ€å¤§ã‚µã‚¤ã‚º?</td><td>400 GB</td></tr> -<tr><td>フィールドã®æœ€å¤§ã‚µã‚¤ã‚º?</td><td>1 GB</td></tr> -<tr><td>テーブル内ã§ã®æœ€å¤§ãƒã‚¦æ•°?</td><td>制é™ç„¡ã—</td></tr> -<tr><td>テーブル内ã§ã®æœ€å¤§ã‚«ãƒ©ãƒ æ•°?</td><td>カラムã®åž‹ã«ã‚ˆã£ã¦ 250-1600</td></tr> -<tr><td>テーブル内ã§ã®æœ€å¤§ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹æ•°?</td><td>制é™ç„¡ã—</td></tr> -</table> -</blockquote> - - <p> ã‚‚ã¡ã‚ã‚“ã€ã“れらã¯å®Ÿéš›ã¯ç„¡åˆ¶é™ã§ã¯ãªãã€ãƒ‡ã‚£ã‚¹ã‚¯å®¹é‡ã¨ãƒ¡ãƒ¢ãƒªãƒ¼ã‚„ - スワップスペースã®å¤§ãã•ã«ã‚ˆã‚Šåˆ¶é™ã•ã‚Œã¾ã™ã€‚性能ã¯ã“れらã®å€¤ãŒã“ã¨ã® - ã»ã‹å¤§ããªæ™‚ã«ç…½ã‚Šã‚’å—ã‘ã¾ã™ã€‚</p> - - <p> 最大テーブルサイズã®32TBã¯ã‚ªãƒšãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚·ã‚¹ãƒ†ãƒ ã«ã‚ˆã‚‹å·¨å¤§ãƒ•ã‚¡ - イルã®ã‚µãƒãƒ¼ãƒˆã¯å¿…è¦ã¨ã—ã¾ã›ã‚“。巨大ãªãƒ†ãƒ¼ãƒ–ルã¯è¤‡æ•°ã®1GBã®ãƒ•ã‚¡ã‚¤ãƒ« - ã«åˆ†ã‘ã¦ä¿å˜ã•ã‚Œã¾ã™ã®ã§ã€ãƒ•ã‚¡ã‚¤ãƒ«ã‚·ã‚¹ãƒ†ãƒ ã®åˆ¶é™ã¯é‡è¦ã§ã¯ã‚ã‚Šã¾ã›ã‚“。 - </p> - - <p> デフォルトã®ãƒ–ãƒãƒƒã‚¯ã‚µã‚¤ã‚ºã‚’32kã«å¢—åŠ ã™ã‚‹ã“ã¨ã§ã€æœ€å¤§ãƒ†ãƒ¼ãƒ–ルサイズ - ã¨è¡Œã‚µã‚¤ã‚ºã¨æœ€å¤§ã‚«ãƒ©ãƒ æ•°ã¨ã‚’4å€ã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã¾ãŸã€æœ€å¤§ãƒ†ãƒ¼ãƒ–ル - サイズã¯ãƒ†ãƒ¼ãƒ–ルパーティションを使ã£ã¦å¢—ã‚„ã™ã“ã¨ã‚‚ã§ãã¾ã™ã€‚</p> - - <p>ã²ã¨ã¤ã®åˆ¶é™ã¯ã€ç´„2,000æ–‡å—以上ã®é•·ã•ã®ã‚«ãƒ©ãƒ ã«ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ã‚’付 - ã‘ã‚‹ã“ã¨ãŒã§ããªã„ã“ã¨ã§ã™ã€‚ 幸ã„ã«ã‚‚ã€ãã®ã‚ˆã†ãªã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ã¯å®Ÿéš› - ã¯å¿…è¦ã‚ã‚Šã¾ã›ã‚“。長ã„カラムã®MD5ãƒãƒƒã‚·ãƒ¥ã®é–¢æ•°ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ã¯ä¸€æ„性 - ãŒãªã«ã‚ˆã‚Šã®ä¿é™ºã§ã€ã¾ãŸã€ãƒ•ãƒ«ãƒ†ã‚ストã®ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ã§ã¯ã‚«ãƒ©ãƒ 内㮠- å˜èªžã‚’検索ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚</p> - -<h4 id="item4.5">4.5</a>) 一般的ãªãƒ†ã‚ストファイルã®ãƒ‡ãƒ¼ã‚¿ã‚’ä¿å˜ã™ã‚‹ã«ã¯ã€ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã®ãƒ‡ã‚£ã‚¹ã‚¯å®¹é‡ã¯ã©ã®ãらã„å¿…è¦ã§ã™ï¼Ÿ</h4> - - <p>普通ã®ãƒ†ã‚ストファイルを PostgreSQL ã®ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã«ä¿å˜ã™ã‚‹ã«ã¯ã€ - 最大ã§ç´„5å€ã®ãƒ‡ã‚£ã‚¹ã‚¯å®¹é‡ã‚’å¿…è¦ã¨ã—ã¾ã™ã€‚</p> - - - <p> 例題ã¨ã—ã¦ã€å„è¡Œã«æ•´æ•°ã¨ãƒ†ã‚スト記述をæŒã¤ 100,000è¡Œã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’ - 考ãˆã¦ã¿ã¾ã—ょã†ã€‚テã‚ストã®æ–‡å—列ã®å¹³å‡é•·ã•ã‚’20ãƒã‚¤ãƒˆã¨ä»®å®šã™ã‚‹ã¨ã€ - フラットファイルã®å¤§ãã•ã¯ç´„2.8MB ã§ã™ã€‚ã“ã®ãƒ‡ãƒ¼ã‚¿ã‚’å«ã‚€ PostgreSQL - データベースファイルã®å¤§ãã•ã¯æ¬¡ã®ã‚ˆã†ã«ç´„5.2MBã¨è¦‹ç©ã‚‚ã‚‹ã“ã¨ãŒã§ã - ã¾ã™ï¼š - -<pre> - 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) -</pre> - - <p>インデックスã¯ã€ã“ã‚Œã»ã©ã®ã‚ªãƒ¼ãƒãƒ˜ãƒƒãƒ‰ã¯è¦æ±‚ã—ã¾ã›ã‚“ãŒã€ã‚¤ãƒ³ãƒ‡ãƒƒ - クス付ã‘ã•ã‚Œã‚‹ãƒ‡ãƒ¼ã‚¿ã‚’å«ã‚€ä»¥ä¸Šã€ãã‚Œãªã‚Šã«å¤§ãããªã‚Šã¾ã™ã€‚ </p> - <p><small>NULL</small>ã¯ãƒ“ットマップã¨ã—ã¦ä¿å˜ã•ã‚Œã¦ã„ã¦ã€ãれらãŒã‚ - ãšã‹ã«ã‚¹ãƒšãƒ¼ã‚¹ã‚’使ã„ã¾ã™ã€‚</p> - - -<h4 id="item4.6">4.6</a>) クエリãŒé…ã„ã®ã¯ãªãœã§ã—ょã†ï¼Ÿ ãªãœã€ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ãŒä½¿ã‚ã‚Œãªã„ã®ã§ã—ょã†ã‹ï¼Ÿ</h4> - - <p>インデックスã¯ã€ã™ã¹ã¦ã®ã‚¯ã‚¨ãƒªã§ä½¿ã‚れるã‚ã‘ã§ã¯ã‚ã‚Šã¾ã›ã‚“。テー - ブルãŒæœ€å°ã‚µã‚¤ã‚ºã‚ˆã‚Šå¤§ããã€ã‚¯ã‚¨ãƒªã§ãã®ã‚ãšã‹ãªãƒ‘ーセンテージã®ãƒã‚¦ - ã‚’é¸æŠžã™ã‚‹æ™‚ã ã‘ã€ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ã¯ä½¿ã‚ã‚Œã¾ã™ã€‚ã“ã‚Œã¯ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ã‚¹ã‚ャ - ンã«ã‚ˆã‚Šèµ·ã“ã•ã‚Œã‚‹ãƒ©ãƒ³ãƒ€ãƒ ãªãƒ‡ã‚£ã‚¹ã‚¯ã‚¢ã‚¯ã‚»ã‚¹ã¯ã€ãƒ†ãƒ¼ãƒ–ルをストレート - ã«èªã‚€é †æ¬¡èµ°æŸ»ã‚ˆã‚Šã‚‚é…ããªã‚‹ã“ã¨ãŒã‚ã‚‹ã‹ã‚‰ã§ã™ã€‚ </p> - - <p>インデックスを使ã†ã‹ã‚’決定ã™ã‚‹ãŸã‚ã«ã€PostgreSQL ã¯ãƒ†ãƒ¼ãƒ–ルã«ã¤ã„ - ã¦ã®çµ±è¨ˆæƒ…å ±ã‚’æŒãŸãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。ã“ã®çµ±è¨ˆæƒ…å ±ã¯ã€ - <small>VACUUM ANALYZE</small>ã¾ãŸã¯ã€å˜ã« <small>ANALYZE</small> を使㣠- ã¦åŽé›†ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚çµ±è¨ˆæƒ…å ±ã‚’ä½¿ã£ã¦ã‚ªãƒ—ティマイザã¯ãƒ†ãƒ¼ãƒ–ル㮠- ä¸ã«ã‚ã‚‹ãƒã‚¦æ•°ã‚’知りã€ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ã‚’使ã†ã¹ãã‹ã®æ±ºå®šã‚’よりæ£ã—ãã§ã - ã¾ã™ã€‚çµ±è¨ˆæƒ…å ±ã¯æœ€é©ãªçµåˆé †ã‚„çµåˆæ–¹æ³•ã‚’決ã‚る上ã§ã‚‚è²´é‡ãªã‚‚ã®ã‚‚ã‚ã‚Š - ã¾ã™ã€‚çµ±è¨ˆæƒ…å ±ã®åŽé›†ã¯ã€ãƒ†ãƒ¼ãƒ–ルã®å†…容ãŒå¤‰ã‚る毎ã«ç¹°è¿”ã—ãªã•ã‚Œã‚‹ã¹ - ãã§ã™ã€‚</p> - - <p> インデックスã¯ã€é€šå¸¸ <small>ORDER BY</small> ã‚„çµåˆã‚’è¡Œãªã†ãŸã‚ - ã«ã¯ä½¿ã‚ã‚Œã¾ã›ã‚“ã€‚é †æ¬¡ã‚¹ã‚ャンã«ç¶šã明示的ソートã¯ã€å·¨å¤§ãªãƒ†ãƒ¼ãƒ–ル㮠- インデックススã‚ャンよりも普通ã¯é«˜é€Ÿã§ã™ã€‚</p> - - ã—ã‹ã—ã€<small>ORDER BY</small>ã¨çµ„ã¿åˆã‚ã•ã‚ŒãŸ<small>LIMIT</small> - ã¯ã€ãƒ†ãƒ¼ãƒ–ルã®å°ã•ãªéƒ¨åˆ†ã‚’è¿”ã™ãŸã‚ã«ãŸã³ãŸã³ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ã‚’使ã†ã§ã—ょ - ã†ã€‚ - - <p>ã‚‚ã—ã€ã‚ªãƒ—ティマイザãŒé–“é•ã£ã¦ã‚·ãƒ¼ã‚±ãƒ³ã‚·ãƒ£ãƒ«ã‚¹ã‚ャンをé¸æŠžã—ãŸã“ - ã¨ã«ç–‘ã„ãŒãªã‘ã‚Œã°ã€<CODE>SET enable_seqscan TO 'off'</CODE>ã«è¨å®šã— - ã¦ã€ã‚¯ã‚¨ãƒªã‚’ã‚‚ã†ä¸€åº¦å®Ÿè¡Œã—ã€ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ã‚¹ã‚ャンãŒã¾ã¡ãŒã„ãªã速ããªã£ - ã¦ã„ã‚‹ã‹ã©ã†ã‹ã‚’ã¿ã¦ãã ã•ã„。</p> - - <p> <small>LIKE</small> ã‚ã‚‹ã„㯠<i>~</i> ã®ã‚ˆã†ãªãƒ¯ã‚¤ãƒ«ãƒ‰ã‚«ãƒ¼ãƒ‰æ¼”ç®— - åã¯ç‰¹åˆ¥ãªç’°å¢ƒã§ã—ã‹ä½¿ãˆã¾ã›ã‚“: - <ul> - <li>検索文å—列ãŒæ–‡å—列ã®æœ€åˆã«ããã¾ã™ã€‚ãŸã¨ãˆã°ï¼š</li> - <ul> - <li><small>LIKE</small> パターンãŒ<i>%</i>ã§å§‹ã¾ã‚‰ãªã„</li> - <li><i>~</i> (æ£è¦è¡¨ç¾) パターンã¯<i>^</i>ã§å§‹ã¾ã‚‰ãªã‘ã‚Œã°ãªã‚‰ãªã„</li> - </ul> - <li>検索文å—列を文å—クラスã‹ã‚‰å§‹ã‚ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。ãŸã¨ãˆã°ã€[a-e]。</li> - <li><small>ILIKE</small> ã‚„ <i>~*</i> ã®ã‚ˆã†ãªå¤§æ–‡å—ã¨å°æ–‡å—を区別㗠- ãªã„検索ã¯ä½¿ãˆã¾ã›ã‚“。ãã®ã‹ã‚ã‚Šã€ã“ã®FAQã®<a - href="#item4.8">4.8</a>節ã§èª¬æ˜Žã™ã‚‹å¼ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ãŒä½¿ãˆã¾ã™ã€‚ - </li> - <li><i>initdb</i> ã«ãŠã„ã¦ã¯ã€ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã§<i>C</i>ãƒã‚±ãƒ¼ãƒ«ãŒä½¿ã‚れ㪠- ãã¦ã¯ãªã‚Šã¾ã›ã‚“。ãã®ç†ç”±ã¯ã€Cãƒã‚±ãƒ¼ãƒ«ä»¥å¤–ã§ã¯æ¬¡ã«å¤§ããªæ–‡å—ã‚’ - 知るã“ã¨ãŒã§ããªã„ã‹ã‚‰ã§ã™ã€‚ã“ã®ã‚ˆã†ãªå ´åˆã€<pre>LIKE</pre>イン - デクシングã«ã ã‘åƒãよã†ãªã€ç‰¹åˆ¥ãª<pre>text_pattern_ops</pre>イ - ンデックスを作æˆã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ã¾ãŸã€ãれを全文検索ã®ãƒ•ãƒ« - テã‚ストã®ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ä½œæˆã«ä½¿ã†ã“ã¨ãŒã§ãã¾ã™ã€‚ - </li> - </ul> - <p> - - -<h4 id="ITEM4.7">4.7</a>) å•ã„åˆã‚ã›ã‚ªãƒ—ティマイザãŒã©ã®ã‚ˆã†ã«å•ã„åˆã‚ã›ã‚’評価ã™ã‚‹ã®ã‹ã‚’見るã«ã¯ã©ã†ã—ã¾ã™ã‹ï¼Ÿ</h4> - - <p>オンラインマニュアル㧠<small>EXPLAIN</small> を見ã¦ãã ã•ã„。</p> - -<h4 id="item4.8">4.8</a>) æ£è¦è¡¨ç¾ã§ã®æ¤œç´¢ã‚„大文å—ã¨å°æ–‡å—ã¨ã‚’区別ã—ãªã„æ£è¦è¡¨ç¾æ¤œç´¢ã¯ã©ã®ã‚ˆã†ã«å®Ÿç¾ã—ã¾ã™ã‹ï¼Ÿå¤§æ–‡å—ã¨å°æ–‡å—ã¨ã‚’区別ã—ãªã„検索ã®ãŸã‚ã®ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ã¯ã©ã®ã‚ˆã†ã«ä½¿ã„ã¾ã™ã‹ï¼Ÿ</h4> - - <p><i>~</i>演算åã¯æ£è¦è¡¨ç¾ç…§åˆã‚’è¡Œãªã„ã€<i>~*</i> ã¯å¤§æ–‡å—ã¨å°æ–‡å— - を区別ã—ãªã„(case-insensitive)æ£è¦è¡¨ç¾ç…§åˆã‚’è¡Œã„ã¾ã™ã€‚ 大文å—ã¨å°æ–‡ - å—を区別ã—ãªã„ <small>LIKE</small> 演算åã‚’ <small>ILIKE</small> 㨠- ã„ã„ã¾ã™ã€‚</p> - - <p>大文å—ã¨å°æ–‡å—を区別ã—ãªã„ç‰å€¤æ¯”較ã¯æ¬¡ã®ã‚ˆã†ã«è¡¨ç¾ã§ãる: -<pre> - SELECT * - FROM tab - WHERE lower(col) = 'abc'; -</pre> - - <p>標準インデックスã§ã¯ä½¿ã‚ã‚Œãšã€ã—ã‹ã—ãªãŒã‚‰ã€ã‚‚ã—ã€å¼ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ - を作ã£ãŸãªã‚‰ãã‚ŒãŒä½¿ã‚れるã§ã—ょã†ã€‚</p> - -<pre> - CREATE INDEX tabindex ON tab (lower(col)); -</pre> - - <p>上記ã®ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ãŒ<small>UNIQUE</small>ã§ä½œæˆã•ã‚ŒãŸå ´åˆã€ã‚«ãƒ©ãƒ - ã¯å¤§æ–‡å—ã¨å°æ–‡å—ã‚’æ ¼ç´ã§ãã¾ã™ãŒã€ãã®é•ã„ãŒæ–‡å—ケースã ã‘ã§ã‚ã£ã¦ã‚‚ - åŒä¸€ã«ã¯ãªã‚Šã¾ã›ã‚“。ã‚ãˆã¦ç‰¹å®šã®æ–‡å—ケースをカラムã«æ ¼ç´ã™ã‚‹ã«ã¯ - <small>CHECK</small>制約ã‹ã€ãƒˆãƒªã‚¬ãƒ¼ã‚’使ã£ã¦ãã ã•ã„。</p> - - - -<h4 id="item4.9">4.9</a>) クエリã®ä¸ã§ã€ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ãŒ<small>NULL</small> ã§ã‚ã‚‹ã“ã¨ã‚’検出ã™ã‚‹ã«ã¯ã©ã†ã—ã¾ã™ã‹ï¼Ÿ <small>NULL</small> ã§ã‚ã‚‹ã“ã¨ã‚’検出ã™ã‚‹ã«ã¯ã©ã†ã—ã¾ã™ã‹ï¼Ÿ フィールドãŒ<small>NULL</small>ã‹ã©ã†ã‹ã§ã©ã®ã‚ˆã†ã«ã‚½ãƒ¼ãƒˆãŒã§ãã¾ã™ã‹ï¼Ÿ</h4> - - <p>以下ã®ã‚ˆã†ã«ã€<small>IS NULL</small> 㨠<small>IS NOT - NULL</small>ã§ã€ãã®ã‚«ãƒ©ãƒ をテストã—ã¦ã¿ã¾ã™ï¼š</p> - -<pre> - SELECT * - FROM tab - WHERE col IS NULL; -</pre> - -<small>NULL</small>ã®å¯èƒ½æ€§ã®ã‚ã‚‹ã‚‚ã®ã‚’連çµã™ã‚‹ã«ã¯ã€<i>COALESCE()</i>ã‚’ -次ã®ã‚ˆã†ã«ä½¿ã„ã¾ã™ã€‚ - -<pre> - SELECT COALESCE(col1, '') || COALESCE(col2, '') - FROM tab -</pre> - - <p><small>NULL</small>状態ã§ã‚½ãƒ¼ãƒˆã™ã‚‹ã«ã¯ã€<small>IS NULL</small> 㨠- <small>IS NOT NULL</small> ã®ä¿®é£¾åã‚’ <small>ORDER BY</small> å¥ã®ä¸ - ã§ä½¿ã£ã¦ã¿ã¾ã™ã€‚<i>true</i> ã®ã‚‚ã®ã¯ <i>false</i> ã®ã‚‚ã®ã‚ˆã‚Šã‚‚高ã„値 - ã¨ã—ã¦ä¸¦ã¹ã‚‰ã‚Œã¾ã™ã®ã§ã€æ¬¡ã®ä¾‹ã§ã¯ NULL ã®è¨˜è¼‰ãŒçµæžœãƒªã‚¹ãƒˆã®ä¸Šéƒ¨ã«ç½® - ã‹ã‚Œã¾ã™ã€‚ - -<pre> - SELECT * - FROM tab - ORDER BY (col IS NOT NULL) -</pre> - - -<h4 id="item4.10">4.10</a>) ã„ã‚ã„ã‚ãªæ–‡å—åž‹ã®ãã‚Œãžã‚Œã®é•ã„ã¯ä½•ã§ã™ã‹ï¼Ÿ -</h4> - -<blockquote> -<table> -<tr><th>åž‹</th><th>内部å</th><th>備考</th></tr> -<tr><td>VARCHAR(n)</td><td>varchar</td><td>最大長ã®ã‚µã‚¤ã‚ºã‚’指定ã™ã‚‹ã€è©°ã‚物無ã—</td></tr> -<tr><td>CHAR(n)</td><td>bpchar</td><td>指定ã•ã‚ŒãŸå›ºå®šé•·ã¨ãªã‚‹ã‚ˆã†ã«ç©ºç™½ãŒè©°ã‚られる</td></tr> -<tr><td>TEXT</td><td>text</td><td>é•·ã•ã«ç‰¹åˆ¥ãªä¸Šé™ã¯ç„¡ã—</td></tr> -<tr><td>BYTEA</td><td>bytea</td><td>å¯å¤‰é•·ã®ãƒã‚¤ãƒˆé…列(null-byte safe)</td></tr> -<tr><td>"char"</td><td>char</td><td>1æ–‡å—</td></tr> -</table> -</blockquote> - - <p> 内部åã«ãŠç›®ã«ã‹ã‹ã‚‹ã®ã¯ã€ã‚·ã‚¹ãƒ†ãƒ ・カタãƒã‚°ã‚’調ã¹ã‚‹ã¨ãã‚„ã€ã‚¨ãƒ©ãƒ¼ - メッセージをå—ã‘å–ã‚‹ã¨ãã§ã™ã€‚</p> - - <p> 上記ã®åž‹ã®ã†ã¡æœ€åˆã®ï¼”ã¤ã®åž‹ã¯ "varlena" åž‹ã§ã™(ã™ãªã‚ã¡ã€ãƒ‡ã‚£ã‚¹ - クã®æœ€åˆã®ï¼”ãƒã‚¤ãƒˆãŒãƒ‡ãƒ¼ã‚¿é•·ã§ã€ãã‚Œã®å¾Œã«å®Ÿéš›ã®ãƒ‡ãƒ¼ã‚¿ãŒç¶šãã¾ã™)。 - ã“ã®ã‚ˆã†ã«å®Ÿéš›ã®ç©ºé–“ã¯å®£è¨€ã•ã‚ŒãŸå¤§ãã•ã‚ˆã‚Šã‚‚å°‘ã—大ãããªã‚Šã¾ã™ã€‚ã—ã‹ - ã—ã€é•·ã„値ã¯åœ§ç¸®ã•ã‚Œã‚‹ã®ã§ã€ãƒ‡ã‚£ã‚¹ã‚¯ä¸Šã®ç©ºé–“ã¯æ€ã£ãŸã‚ˆã‚Šã‚‚å°ã•ããªã‚Šã¾ã™ã€‚</p> - - <p><small>VARCHAR(n)</small> ã¯å¯å¤‰é•·ã®æ–‡å—列をä¿å˜ã™ã‚‹ã®ã«æœ€é©ã§ã™ - ãŒã€ä¿å˜ã§ãã‚‹æ–‡å—列ã®é•·ã•ã«åˆ¶é™ãŒã‚ã‚Šã¾ã™ã€‚<small>TEXT</small> ã¯é•· - ã•ã«åˆ¶é™ã®ç„¡ã„æ–‡å—列ã®ä¿å˜ã®ãŸã‚ã®ã‚‚ã®ã§ã€æœ€å¤§ã§ 1ギガãƒã‚¤ãƒˆã§ã™ã€‚ - <small>CHAR(n)</small>ã¯ã€<small>VARCHAR(n)</small>ãŒä¸Žãˆã‚‰ã‚ŒãŸæ–‡å— - ã ã‘ã‚’ä¿å˜ã™ã‚‹ã®ã«å¯¾ã—ã€ãƒ–ランクを詰ã‚込んã§ã„ã¤ã‚‚åŒã˜é•·ã•ã§æ–‡å—列を - ä¿å˜ã™ã‚‹ã®ã«æœ€é©ã§ã™ã€‚<small>BYTEA</small>ã¯ã€éƒ¨åˆ†çš„ã« - <small>NULL</small> ã®ãƒã‚¤ãƒˆã‚’å«ã‚€ãƒã‚¤ãƒŠãƒªãƒ‡ãƒ¼ã‚¿ã‚’ä¿å˜ã™ã‚‹ãŸã‚ã®ã‚‚ã® - ã§ã™ã€‚ã“れらã®ã‚¿ã‚¤ãƒ—ã¯åŒã˜ãらã„ã®æ€§èƒ½ç‰¹æ€§ã‚’ã‚‚ã¡ã¾ã™ã€‚</p> - - -<h4 id="item4.11.1">4.11.1</a>) 通番(serial)ï¼è‡ªå‹•å¢—分フィールドã¯ã©ã®ã‚ˆã†ã«ã¤ãã‚Šã¾ã™ã‹ï¼Ÿ</h4> - - <p> PostgreSQL 㯠<small>SERIAL</small> データ型をサãƒãƒ¼ãƒˆã—ã¾ã™ã€‚ã‚« - ラム上ã«ã‚·ãƒ¼ã‚±ãƒ³ã‚¹ã‚’自動作æˆã—ã¾ã™ã€‚ãŸã¨ãˆã°ã€</p> - -<pre> - CREATE TABLE person ( - id SERIAL, - name TEXT - ); -</pre> - ã¯è‡ªå‹•çš„ã«æ¬¡ã®ã‚ˆã†ã«ç¿»è¨³ã•ã‚Œã¾ã™: -<pre> - CREATE SEQUENCE person_id_seq; - CREATE TABLE person ( - id INT4 NOT NULL DEFAULT nextval('person_id_seq'), - name TEXT - ); -</pre> - - <p><small><pre> - [訳注: - CREATE UNIQUE INDEX person_id_key ON person ( id ); - ã¯ã€ 7.3 以é™ã¯è‡ªå‹•çš„ã«ã¯è¡Œãªã‚ã‚Œãªããªã‚Šã¾ã—ãŸã€‚ - ] - </small></pre></p> - - <p>自動的ã«ã¤ãられる通番ã¯ã€ - <<i>table</i>>_<<i>serialcolumn</i>>_<i>seq</i> - ã¨å付ã‘られã¦ã„ã¦ã€<i>table</i> 㨠<i>serialcolumn</i> ã¯ã€ãã‚Œãžã‚Œ - テーブル㨠<small>SERIAL</small> カラムã®åå‰ã§ã™ã€‚ - 通番ã«ã¤ã„ã¦ã¯ã€ã‚ªãƒ³ãƒ©ã‚¤ãƒ³ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ã§<i>create_sequence</i> - ã‚’ã”らんãã ã•ã„。</p> - - -<h4 id="item4.11.2">4.11.2</a>) <small>SERIAL</small>データ型ã«æŒ¿å…¥ã•ã‚Œã‚‹å€¤ã¯ã€ã©ã†ã™ã‚Œã°å¾—られã¾ã™ã‹ï¼Ÿ</h4> - - <p>最も簡å˜ãªæ–¹æ³•ã¯ã€å‰²ã‚Šå½“ã¦ã‚‰ã‚ŒãŸ<small>SERIAL</small>値を - <small>RETURNING</small>ã¨ã—ã¦å–å¾—ã™ã‚‹ã“ã¨ã§ã™ã€‚ - <a href="#item4.11.1">4.11.1</a>ã®ä¾‹é¡Œãƒ†ãƒ¼ãƒ–ルを使ã†ã¨æ¬¡ã®ã‚ˆã†ã« - ãªã‚Šã¾ã™ã€‚ - -<pre> - INSERT INTO person (name) VALUES ('Blaise Pascal') RETURNING id; -</pre> - - -<h4 id="item4.11.3">4.11.3</a>) <i>currval()</i> ã¯ä»–ã®ãƒ¦ãƒ¼ã‚¶ã¨ã®ç«¶åˆçŠ¶æ…‹ã«é™¥ã‚‹ã“ã¨ã¯ãªã„ã§ã™ã‹ï¼Ÿ</h4> - - <p>ãã‚Œã¯ã‚ã‚Šã¾ã›ã‚“。<i>currval()</i> ã¯ã€ã™ã¹ã¦ã®ãƒ¦ãƒ¼ã‚¶ã§ã¯ã‚ã‚Šã¾ã› - ã‚“ãŒã€èªè€…ã®ã‚»ãƒƒã‚·ãƒ§ãƒ³ã«ä¸Žãˆã‚‰ã‚ŒãŸç¾åœ¨ã®å€¤ã‚’è¿”ã—ã¾ã™ã€‚ </p> - - -<h4 id="item4.11.4">4.11.4</a>) トランザクションãŒä¸æ–ã—ãŸã¨ãã«ã‚‚ã†ã„ã¡ã©ã‚·ãƒ¼ã‚±ãƒ³ã‚¹ç•ªå·ãŒä½¿ã‚ã‚Œãªã„ã®ã¯ãªãœã§ã™ã‹ï¼Ÿã‚·ãƒ¼ã‚±ãƒ³ã‚¹ï¼SERIALカラムã«ç©ºããŒã‚ã‚‹ã®ã¯ãªãœã§ã™ã‹ï¼Ÿ</h4> - - <p>åŒæ™‚性を改善ã™ã‚‹ãŸã‚ã«ã€å®Ÿè¡Œä¸ã®ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ã«ã€å¿…è¦ã«å¿œã˜ã¦ãƒˆ - ランザクションãŒçµ‚了ã™ã‚‹ã¾ã§ãƒãƒƒã‚¯ã•ã‚Œãªã„よã†ã‚·ãƒ¼ã‚±ãƒ³ã‚¹å€¤ã‚’与ãˆã¦ã„ - ã¾ã™ã€‚ã“ã®ãŸã‚トランザクションãŒä¸æ–ã•ã‚Œã‚‹ã¨ç•ªå·å‰²ã‚Šå½“ã¦ã«ã‚®ãƒ£ãƒƒãƒ—ã‚’ - 生ã˜ã¾ã™ã€‚</p> - - -<h4 id="item4.12">4.12</a>) <small>OID</small> ã¨ã¯ä½•ã§ã™ã‹ï¼Ÿ <small>CTID</small> ã¨ã¯ä½•ã§ã™ã‹ï¼Ÿ</h4> - - <p>テーブルãŒ<small>WITH OIDS</small>ã§ã¤ãられãŸå ´åˆã¯ã€ãã‚Œãžã‚Œã® - ãƒã‚¦ã«ä¸€æ„ãª<small>OID</small>ãŒå–られã¾ã™ã€‚ - <small>OID</small>ã¯è‡ªå‹•çš„ã«4ãƒã‚¤ãƒˆã®æ•´æ•°ã§ä¸Žãˆã‚‰ã‚Œã€ãã‚Œã¯ã€å…¨ã‚¤ãƒ³ - ストレーションを通ã—ã¦ä¸€æ„ãªå€¤ã¨ãªã‚Šã¾ã™ã€‚ã—ã‹ã—ã€ç´„40å„„ã§ã‚ªãƒ¼ãƒãƒ¼ãƒ• - ãƒãƒ¼ã—ã€ãã—ã¦ã€<small>OID</small>ã¯é‡è¤‡ã‚’ã—ã¯ã˜ã‚ã¾ã™ã€‚PostgreSQL㯠- 内部システムテーブルを一緒ã«ãƒªãƒ³ã‚¯ã™ã‚‹ãŸã‚ã«<small>OID</small> を使 - ã„ã¾ã™ã€‚ - - <p>ユーザã®ãƒ†ãƒ¼ãƒ–ルã®ã‚«ãƒ©ãƒ ã«ä¸€æ„ã®ç•ªå·ã‚’付ã‘ã‚‹ãŸã‚ã«ã¯ã€ - <small>OID</small> ã§ã¯ãªã <small>SERIAL</small> を使ã†ã®ãŒæœ€ã‚‚よㄠ- ã§ã—ょã†ã€‚<small>SERIAL</small>ã®é€£ç•ªã¯1ã¤ã®ãƒ†ãƒ¼ãƒ–ル内ã§ã®ã¿ä¸€æ„ã«ãª - ã‚‹ã‹ã‚‰ã§ã€ã‚ªãƒ¼ãƒãƒ¼ãƒ•ãƒãƒ¼ã‚’èµ·ã“ã—ã«ãã„ã¨è€ƒãˆã‚‰ã‚Œã¾ã™ã€‚ - 8ãƒã‚¤ãƒˆã®ã‚·ãƒ¼ã‚±ãƒ³ã‚¹å€¤ã‚’ä¿å˜ã™ã‚‹ãŸã‚ã«ã€<small>SERIAL8</small>ãŒã‚ã‚Š - ã¾ã™ã€‚</p> - - <p><small>CTID</small> ã¯ã€ç‰¹å®šã®ç‰©ç†ãƒã‚¦ã‚’ブãƒãƒƒã‚¯ã¨ã‚ªãƒ•ã‚»ãƒƒãƒˆã®å€¤ - ã§è˜åˆ¥ã™ã‚‹ãŸã‚ã«ä½¿ã‚ã‚Œã¾ã™ã€‚<small>CTID</small>ã¯ã€ãƒã‚¦ãŒä¿®æ£ã•ã‚ŒãŸ - ã‚Šå†èªè¾¼ã¿ã•ã‚ŒãŸã¨ãã«å¤‰ã‚ã‚Šã¾ã™ã€‚ã¾ãŸã€ç‰©ç†ãƒã‚¦ã‚’å·®ã™ãŸã‚ã«ã‚¤ãƒ³ãƒ‡ãƒƒ - クスã®è¨˜è¼‰ã«ä½¿ã‚ã‚Œã¾ã™ã€‚</p> - - -<h4 id="item4.13">4.13</a>) エラーメッセージ <i>"ERROR: Memory exhausted in AllocSetAlloc()"</i>ãŒå‡ºã‚‹ã®ã¯ãªãœã§ã™ã‹ï¼Ÿ</h4> - - <p>ãŠãらãã€ã‚·ã‚¹ãƒ†ãƒ ã®ä»®æƒ³ãƒ¡ãƒ¢ãƒªãƒ¼ã‚’å…¨ã¦ä½¿ã„æžœãŸã—ã¦ã—ã¾ã£ã¦ã„ã‚‹å¯ - 能性ãŒã‚ã‚‹ã‹ã€ã‚«ãƒ¼ãƒãƒ«ãŒã‚るリソースã«ã¤ã„ã¦ã‚‚ã¤åˆ¶é™å€¤ãŒä½Žã™ãŽã‚‹å¯èƒ½ - 性ãŒã‚ã‚Šã¾ã™ã€‚サーãƒã‚’始動ã™ã‚‹å‰ã«ã“れを試ã—ã¦ã¿ã¦ãã ã•ã„:</p> - -<pre> - ulimit -d 262144 - limit datasize 256m -</pre> - - シェルã«ã‚ˆã£ã¦ã€ã©ã¡ã‚‰ã‹ã²ã¨ã¤ãŒæˆåŠŸã™ã‚‹ã§ã—ょã†ãŒã€ã“ã‚Œã¯ãƒ—ãƒã‚»ã‚¹ã® - データセグメント制é™ã‚’より高ãè¨å®šã—ã€ãŸã¶ã‚“クエリãŒå®Œçµã™ã‚‹ã‚ˆã†ã«ãª - ã‚‹ã§ã—ょã†ã€‚ã“ã®ã‚³ãƒžãƒ³ãƒ‰ã¯ç¾è¡Œã®ãƒ—ãƒã‚»ã‚¹ã¨ã€ã“ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’走らã›ãŸå¾Œ - ã«ä½œã‚‰ã‚Œã‚‹å…¨ã¦ã®ã‚µãƒ–プãƒã‚»ã‚¹ã«ã¤ã„ã¦é©ç”¨ã•ã‚Œã¾ã™ã€‚ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ãŒã¨ã¦ - も多ãã®ãƒ‡ãƒ¼ã‚¿ã‚’è¿”ã™ãŸã‚ã«<small>SQL</small> クライアントã§å•é¡ŒãŒç¶š - ã„ã¦ã„ã‚‹ã®ã§ã‚ã‚Œã°ã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã‚’開始ã™ã‚‹å‰ã«ã“れを試ã—ã¦ã¿ã¦ãã ã• - ã„。 - -<h4 id="item4.14">4.14</a>) ã©ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® PostgreSQL を走らã›ã¦ã„ã‚‹ã‹ã‚’調ã¹ã‚‹ã«ã¯ã©ã†ã—ã¾ã™ã‹ï¼Ÿ<br /></h4> - - <p><i>psql</i> ã‹ã‚‰ <CODE>SELECT version();</CODE> をタイプã—ã¾ã™ã€‚</p> - - -<h4 id="item4.15">4.15</a>) ç¾åœ¨ã®æ™‚刻ãŒãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã¨ãªã‚‹ã‚ˆã†ãªã‚«ãƒ©ãƒ ã¯ã©ã®ã‚ˆã†ã«ã¤ãã‚Šã¾ã™ã‹ï¼Ÿ<br /></h4> - - <p><i>CURRENT_TIMESTAMP</i>を使ã„ã¾ã™:</p> -<pre> - CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -</pre> - - -<h4 id="item4.16">4.16</a>) <i>外部</i>çµåˆ(<i>outer</i> join)ã¯ã©ã®ã‚ˆã†ã«å®Ÿç¾ã—ã¾ã™ã‹?<br /></h4> - - <p>PostgreSQL 㯠SQL 標準構文を使ã†å¤–部çµåˆ(アウタージョイン)をサãƒãƒ¼ - トã—ã¾ã™ã€‚ã“ã“ã« 2ã¤ã®ä¾‹é¡ŒãŒã‚ã‚Šã¾ã™ã€‚</p> - -<pre> - SELECT * - FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col); -</pre> -ã‚ã‚‹ã„㯠-<pre> - SELECT * - FROM t1 LEFT OUTER JOIN t2 USING (col); -</pre> - -ã“れらã®è±¡å¾´çš„ãªã‚¯ã‚¨ãƒªã§ã¯ t1.col ã‚’ t2.col ã¨çµåˆã—ã¦ã€t1 ã®çµåˆã•ã‚Œãªã‹ã£ãŸãƒã‚¦(t2 ã¨ä¸€è‡´ã—ãªã‹ã£ãŸãƒã‚¦)ã‚‚è¿”ã—ã¦ã„ã¾ã™ã€‚<small>RIGHT</small> çµåˆã¯ t2 ã®çµåˆã•ã‚Œãªã‹ã£ãŸãƒã‚¦ã‚’åŠ ãˆã‚‹ã§ã—ょã†ã€‚<small>FULL</small> çµåˆã¯ã€ä¸€è‡´ã—ãŸãƒã‚¦ã« t1 㨠t2 ã‹ã‚‰ã¯çµåˆã•ã‚Œãªã‹ã£ãŸãƒã‚¦ã‚’è¿”ã™ã§ã—ょã†ã€‚<small>OUTER</small> ã¨ã„ã†è¨€è‘‰ã¯ã‚ªãƒ—ション㧠<small>LEFT</small>, <small>RIGHT</small>, ã¾ãŸã¯ <small>FULL</small> ãªã©ã®çµåˆã‚’仮定ã•ã‚Œã¦ã„ã¾ã™ã€‚通常ã€çµåˆã¯<small>INNER</small>çµåˆã¨å‘¼ã°ã‚Œã¾ã™ã€‚ - - -<h4 id="item4.17">4.17</a>) 複数ã®ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚’使ã†å•ã„åˆã‚ã›ã¯ã©ã®ã‚ˆã†ã«ã™ã‚Œã°ã§ãã¾ã™ã‹ï¼Ÿ</h4> - - <p>ç¾è¡Œã®ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ä»¥å¤–ã¸ã®å•ã„åˆã‚ã›ã®æ–¹æ³•ã¯ã‚ã‚Šã¾ã›ã‚“。ã¨ã„ã†ã® - ã‚‚PostgreSQLãŒãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ä»•æ§˜ã®ã‚·ã‚¹ãƒ†ãƒ ã‚«ã‚¿ãƒã‚°ã‚’èªã¿è¾¼ã‚€ãŸã‚ã§ã€ã - ã“ã«ã¯ã€ãŸã¨ãˆãã®ãµã‚Šã‚’ã™ã‚‹ã ã‘ã«ã—ã‚ã€ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚’越ãˆã¦å•ã„åˆã‚ - ã›ã‚’ã™ã‚‹ã™ã¹ãŒã‚ã‚Šã¾ã›ã‚“。 </p> - - <p><i>contrib/dblink</i> ã¯ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹é–“(cross-database)ã®å•ã„åˆã‚ - ã›ã‚’関数呼出ã—ã«ã‚ˆã‚Šè¨±ã—ã¾ã™ã€‚ã‚‚ã¡ã‚ã‚“ã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¯åŒæ™‚ã«æŽ¥ç¶šã‚’別 - ã®ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã¸ã‚‚張らãªãã¦ã¯ãªã‚‰ãšã€çµæžœã‚’クライアントå´ã§ãƒžãƒ¼ã‚¸ã— - ãªãã¦ã¯ãªã‚Šã¾ã›ã‚“。</p> - - -<h4 id="item4.18">4.18</a>) 関数ã‹ã‚‰è¤‡æ•°ã®ãƒã‚¦ã¾ãŸã¯ã‚«ãƒ©ãƒ ã‚’è¿”ã™ã«ã¯ã©ã†ã—ã¾ã™ã‹ï¼Ÿ</h4> - - <p>集åˆã‚’è¿”ã™é–¢æ•°(Set Returning Functions): - <a href="http://wiki.postgresql.org/wiki/Return_more_than_one_row_of_data_from_PL/pgSQL_functions"> - http://wiki.postgresql.org/wiki/Return_more_than_one_row_of_data_from_PL/pgSQL_functions</a> - を使ã†ã¨ç°¡å˜ã§ã™</p>。 - - -<h4 id="item4.19">4.19</a>) PL/PgSQL ã®é–¢æ•°ã®ä¸ã§ä¸€æ™‚テーブルã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã¨ãã€ã©ã†ã—㦠"relation with OID ##### does not exist" ã¨ã„ã†ã‚¨ãƒ©ãƒ¼ã‚’å—ã‘å–ã‚‹ã®ã§ã—ょã†ã‹ï¼Ÿ</h4> - - <p>ãƒãƒ¼ã‚¸ãƒ§ãƒ³8.3よりå‰ã® PostgreSQL ã§ã¯ã€PL/PgSQL ã¯é–¢æ•°ã‚¹ã‚¯ãƒªãƒ—トを - ã‚ャッシュã—ãŸãŸã‚ã€é‹æ‚ªããã®å‰¯ä½œç”¨ãŒã‚ã‚Šã¾ã—ãŸã€‚PL/PgSQL 関数ãŒä¸€æ™‚ - テーブルã«ã‚¢ã‚¯ã‚»ã‚¹ã—ã¦å¾Œã§ãã®ãƒ†ãƒ¼ãƒ–ルを消ã—ã¦ä½œã‚Šã—ãŸå ´åˆã«ã€é–¢æ•°ãŒ - ã‚‚ã†ä¸€åº¦å‘¼ã³å‡ºã•ã‚ŒãŸã¨ãã¯ã€ãã®é–¢æ•°ã®ã‚ャッシュã—ã¦ã„ãŸå†…容ãŒã¾ã å¤ã„ - 一時テーブルを指ã—示ã—ãŸã¾ã¾ã ã£ãŸã‹ã‚‰ã§ã™ã€‚ - ã“ã®ã€è§£æ±ºç–ã¨ã—ã¦ã€PL/PgSQLã®ä¸ã§ <small>EXECUTE</small> を一時テー - ブルã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã®ãŸã‚ã«ä½¿ã„ã¾ã™ã€‚ãã†ã™ã‚‹ã¨ã€ã‚¯ã‚¨ãƒªã¯æ¯Žå›žãƒ‘ースをや - ã‚Šç›´ã—ã•ã‚Œã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚</p> - - <p>ã“ã®å•é¡Œã¯ã€ PostgreSQL ãƒãƒ¼ã‚¸ãƒ§ãƒ³8.3 以é™ã§ã¯èµ·ãã¾ã›ã‚“。</p> - - -<h4 id="item4.20">4.20</a>) ã©ã®ã‚ˆã†ãªãƒ¬ãƒ—リケーションã®ã‚½ãƒªãƒ¥ãƒ¼ã‚·ãƒ§ãƒ³ãŒã‚ã‚Šã¾ã™ã‹ï¼Ÿ</h4> - <p>「レプリケーションã€ã¨ä¸€è¨€ã§ã„ã„ã¾ã™ãŒã€ãƒ¬ãƒ—リケーションをã™ã‚‹ - ãŸã‚ã®æŠ€è¡“ã¯ã„ãã¤ã‹ã‚ã‚Šã€ãã‚Œãžã‚Œã€åˆ©ç‚¹ã¨æ¬ 点ãŒã‚ã‚Šã¾ã™ã€‚</p> - - <p>マスタï¼ã‚¹ãƒ¬ãƒ¼ãƒ–ã®ãƒ¬ãƒ—リケーションã¯ã€èªã¿ï¼æ›¸ãã®ã‚¯ã‚¨ãƒªã‚’å—ã‘å– - るシングルマスタãŒå¯èƒ½ã§ã€ã‚¹ãƒ¬ãƒ¼ãƒ–ã§ã¯ èªã¿ï¼<small>SELECT</small>ã® - å•ã„åˆã‚ã›ã ã‘ã‚’å—ã‘付ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚最も人気ãŒã‚ã‚‹ã€ãƒ•ãƒªãƒ¼ã§åˆ© - 用ã§ãã‚‹ã€ãƒžã‚¹ã‚¿âˆ’スレーブã®PostgreSQLレプリケーションソリューション - ã¯ã€<a - href="http://main.slony.info/"> - Slony-I</a> ã§ã™ã€‚</p> - - <p>マルãƒâˆ’マスタã®ãƒ¬ãƒ—リケーションã¯ã€èªã¿ï¼æ›¸ãã®ã‚¯ã‚¨ãƒªã‚’å—ã‘㨠- ã‚Šã€è¤‡æ•°ã®ãƒ¬ãƒ—リケートã•ã›ã‚‹ã‚³ãƒ³ãƒ”ュータã«é€ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“ã®æ©Ÿ - 能ã¯ã€ã‚µãƒ¼ãƒé–“ã®å¤‰æ›´ã®åŒæœŸãŒå¿…è¦ãªãŸã‚ã€æ€§èƒ½ã«é‡å¤§ãªè¡æ’ƒã‚’与ãˆã¾ã™ã€‚ - <a href="http://pgfoundry.org/projects/pgcluster/">PGCluster</a> ã¯ã€ - ã“ã®ã‚ˆã†ãªã‚½ãƒªãƒ¥ãƒ¼ã‚·ãƒ§ãƒ³ã¨ã—ã¦PostgreSQLã®ãŸã‚ã«ãƒ•ãƒªãƒ¼ã§åˆ©ç”¨ã§ãã‚‹ã‚‚ - ã®ã¨ã—ã¦ã€æœ€ã‚‚人気ãŒã‚ã‚Šã¾ã™ã€‚</p> - - <p>ã“ã®ä»–ã«ã‚‚ã€å•†ç”¨ã‚„ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢âˆ’ベースã®ãƒ¬ãƒ—リケーションソリュー - ションãŒã„ã‚ã„ã‚ãªãƒ¬ãƒ—リケーションモデルをサãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã™ã€‚</p> - -<h3 id="item4.21">4.21</a>)テーブルã¨ã‚«ãƒ©ãƒ ã®åå‰ãŒã‚¯ã‚¨ãƒªãƒ¼ã®ä¸ã§èªè˜ã•ã‚Œãªã„ã®ã¯ãªãœã§ã™ã‹ï¼Ÿãªãœå¤§æ–‡å—化(ã‚ャピタライズ)ã¯æ¸©å˜ã•ã‚Œãªã„ã®ã§ã™ã‹?</h3> - - <p>åå‰ãŒèªè˜ã•ã‚Œãªã„ã€æœ€ã‚‚一般的ãªåŽŸå› ã¯ã€ãƒ†ãƒ¼ãƒ–ルを作æˆã™ã‚‹éš›ã«ã€ - テーブルやカラムを囲ã†äºŒé‡å¼•ç”¨ç¬¦ã®ä½¿ç”¨ã§ã™ã€‚ - 二é‡å¼•ç”¨ç¬¦ã‚’使ã†ã¨ã€ãƒ†ãƒ¼ãƒ–ルã¨ã‚«ãƒ©ãƒ ã®åå‰ï¼ˆè˜åˆ¥åã¨ã„ã„ã¾ã™ï¼‰ã¯<a - href="http://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS">大文å—ã¨å°æ–‡å—ã®åŒºåˆ¥</a> - ã‚’ã—ã¦æ ¼ç´ã•ã‚Œã¾ã™ã€‚ã—ãŸãŒã£ã¦ã€pgAdminã®ã‚ˆã†ã«ãƒ†ãƒ¼ãƒ–ル作æˆã®ã¨ãã« - 自動的ã«äºŒé‡å¼•ç”¨ç¬¦ã‚’使ã†ã‚‚ã®ã¯ã‚¯ã‚¨ãƒªã®ä¸ã§ãれらã®åå‰ã‚’使ã†ã¨ãã« - 二é‡å¼•ç”¨ç¬¦ã‚’付ã‘ãªãã¦ã¯ãªã‚‰ãªã„ã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚ã“ã®ãŸã‚ã€è˜åˆ¥å - ã‚’èªè˜ã•ã›ã‚‹ãŸã‚ã«ã¯ä»¥ä¸‹ã®ã„ãšã‚Œã‹ã‚’心ãŒã‘ã¾ã™ã€‚ - - <ul> - <li>テーブルを作æˆã™ã‚‹ã¨ãã«äºŒé‡å¼•ç”¨ç¬¦ã§è˜åˆ¥åを囲ã†ã“ã¨ã‚’é¿ã‘ã‚‹</li> - <li>è˜åˆ¥åã«ã¯å°æ–‡å—ã ã‘を使ã†</li> - <li>クエリã®ä¸ã§å‚ç…§ã™ã‚‹ã¨ãã¯äºŒé‡å¼•ç”¨ç¬¦ã§è˜åˆ¥åを囲ã†</li> - </ul> - - -<hr /> - -<h2 align="center">日本語ã«é–¢ã™ã‚‹è³ªå•</h2> - -<h3 id="item5.1">5.1</a>)日本語ãŒã†ã¾ã扱ãˆãªã„ã®ã¯ãªãœã§ã™ã‹ï¼Ÿ</h3> - - - <p><i>createdb -E</i>コマンドオプション㫠UTF8 ã‚ã‚‹ã„㯠EUC_JP - ã®ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ã‚’指定ã—ã¦ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚’作æˆã™ã‚‹ã‹ã€æ¬¡ã®ã‚ˆã†ã« - エンコーディングを指定ã—ã¦ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚’作æˆã—ã¦ãã ã•ã„。</p> -<pre> - CREATE DATABASE dbname WITH ENCODING 'UTF8'; - ã‚‚ã—ãã¯ã€ - CREATE DATABASE dbname WITH ENCODING 'EUC_JP'; -</pre> - - -<h3 id="item5.2">5.2</a>) psql ã§Windowsã‹ã‚‰ã‚¢ã‚¯ã‚»ã‚¹ã—ãŸã¨ãã«ã€æ—¥æœ¬èªžãŒæ–‡å—化ã‘ã™ã‚‹ã®ã§ã™ãŒï¼Ÿ</h3> - - <p><i>psql</i>ã®ä¸ã§ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ã‚’指定ã—ã¦ãã ã•ã„。</p> -<pre> - SET client_encoding TO 'SJIS' -</pre> - <p>PostgreSQLデータベースã®ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ã«ä½¿ãˆã‚‹æ—¥æœ¬èªžæ–‡å—コード - 㯠EUC_JP ã‹ UTF-8(UNICODE) ã§ã‚ã‚‹ãŸã‚ã€Shift-JIS表示ã®ã‚³ãƒžãƒ³ãƒ‰ãƒ—ム- ンプトã‹ã‚‰ã¯ã€client_encodingã‚’è¨å®šã—ã¦ãŠã‹ãªã„ã¨ã€æ—¥æœ¬èªžã‚’表示ã™ã‚‹ - éš›ã«æ–‡å—化ã‘ãŒãŠãã¾ã™ã€‚</p> - - -<h3 id="item5.3">5.3</a>) PostgreSQLã§æ—¥æœ¬èªžã®å…¨æ–‡æ¤œç´¢ã¯ã§ãã¾ã™ã‹ï¼Ÿ</h3> - - <p>ãƒãƒ¼ã‚¸ãƒ§ãƒ³8.3ã§ã¯ã€<i>TSearch2</i>全文検索機能ãŒæœ¬ä½“ã«çµ„ã¿è¾¼ã¾ã‚Œ - ã¾ã—ãŸãŒã€ãã®ã¾ã¾ã§ã¯æ—¥æœ¬èªžã®ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ã‚’作る事ãŒé›£ã—ã„状æ³ã§ã™ã€‚ - ã“れを解決ã™ã‚‹ãŸã‚ã«ã€Takahiro Itagakiæ°ã«ã‚ˆã£ã¦ã€Mecabã¨ã„ã†å½¢æ…‹ç´ - 解æžãƒ—ãƒã‚°ãƒ©ãƒ を利用ã™ã‚‹æ—¥æœ¬èªžå…¨æ–‡æ¤œç´¢ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ« <a - href="http://textsearch-ja.projects.postgresql.org/index-ja.html">textsearch_ja</a> - ãŒé–‹ç™ºã•ã‚Œã¾ã—ãŸã€‚TSearch2対応ã®è£½å“ã‚’ã‚ãšã‹ã«æ”¹ä¿®ã™ã‚‹ã“ã¨ã§æ—¥æœ¬èªžå¯¾ - å¿œã«ãã¾ã™ã€‚ - </p> - -<hr /> - -<h4 id="item-japanese">「日本語版ã«ã¤ã„ã¦ã€</h4> -<p><small><pre> -[訳注: - 日本語版ã®è£½ä½œã«ã¤ã„ã¦ã¯ä»¥ä¸‹ã®é€šã‚Šã§ã™ã€‚ - - 最終更新日: 2008å¹´10月8æ—¥ - 翻訳者: æ¡‘æ‘ æ½¤ (<a href="mailto:juk at postgresql.jp">Jun KUWAMURA <juk at postgresql.jp></a>) - - ã“ã®FAQã®å’Œè¨³ã®ä½œæˆã«ã‚ãŸã‚Šå”力をã—ã¦ãã ã•ã£ãŸæ–¹ã€…(敬称ã¯ç•¥ã•ã›ã¦ã„ãŸã ãã¾ã™): - - 田仲 稔(<a href="mailto:Tanaka.Minoru at keiken.co.jp">Minoru TANAKA <Tanaka.Minoru at keiken.co.jp></a>) - 石井 é”夫(<a href="mailto:ishii at sraoss.co.jp">Tatsuo ISHII <ishii at sraoss.co.jp></a>) - 齊藤 知人(<a href="mailto:tomos at elelab.nsc.co.jp">Tomohito SAITOH <tomos at elelab.nsc.co.jp></a>) - é¦¬å ´ 肇(<a href="mailto:baba at kusastro.kyoto-u.ac.jp">Hajime BABA <baba at kusastro.kyoto-u.ac.jp></a>) - 岡本 一幸(<a href="mailto:kaz-okamoto at hitachi-system.co.jp">Kazuyuki OKAMOTO <kaz-okamoto at hitachi-system.co.jp></a>) - å°è… æ˜ä¸€(<a href="mailto:s-kosuge at str.hitachi.co.jp">Shoichi Kosuge <s-kosuge at str.hitachi.co.jp></a>) - 山下 義之(<a href="mailto:dica at eurus.dti.ne.jp">Yoshiyuki YAMASHITA <dica at eurus.dti.ne.jp></a>) - 境 真太郎(<a href="mailto:s_sakai at mxn.mesh.ne.jp">Sintaro SAKAI <s_sakai at mxn.mesh.ne.jp></a>) - 生越 昌己(<a href="mailto:ogochan at zetabits.com">Masami OGOSHI <ogochan at zetabits.com></a>) - çŸ³å· ä¿Šè¡Œ(<a href="mailto:tosiyuki at gol.com">Toshiyuki ISHIKAWA <tosiyuki at gol.com></a>) - 本田 茂広(<a href="mailto:fwif0083 at mb.infoweb.ne.jp">Shigehiro HONDA <fwif0083 at mb.infoweb.ne.jp></a>) - ã›ã› ã˜ã‚…ã‚“(<a href="mailto:sesejun at linet.gr.jp">Jun SESE <sesejun at linet.gr.jp></a>) - 神谷 英å(<a href="mailto:hkamiya at catvmics.ne.jp">Hidetaka KAMIYA <hkamiya at catvmics.ne.jp></a>) - è…原 敦(<a href="mailto:asugawar at f3.dion.ne.jp">Atsushi SUGAWARA <asugawar at f3.dion.ne.jp></a>) - 稲葉 香ç†(<a href="mailto:i-kaori at sraoss.co.jp">Kaori Inaba <i-kaori at sraoss.co.jp></a>) - 芳賀 é–å²(<a href="mailto:yasufumi.haga at nifty.com">Yasufumi Haga <yasufumi.haga at nifty.com></a>) - - ã‚’ã¯ã˜ã‚ã€ãƒã‚¹ãƒˆã‚°ãƒ¬ã‚¹ã«é–¢ã™ã‚‹è©±é¡Œè±Šå¯Œãªæ—¥æœ¬èªžPostgreSQLメーリングリスト〠- 和訳ã®ãã£ã‹ã‘を作ã£ã¦ãã‚ŒãŸã‚Šã€ã„ã¤ã‚‚ãƒã‚§ãƒƒã‚¯ã‚’ã—ã¦ãれる - <a href="http://jf.linux.or.jp/">JF(Linux Japanese FAQ)プãƒã‚¸ã‚§ã‚¯ãƒˆ</a>ã€FreeBSD ドã‚ュメンテーションプãƒã‚¸ã‚§ã‚¯ãƒˆ - ã®æ–¹ã€…ã€ãã‚Œã‹ã‚‰ã€ç›´æŽ¥ã‚ã‚‹ã„ã¯é–“接的ã«ã‹ã‹ã‚ã£ã¦ãã ã•ã‚‹ã™ã¹ã¦ã®ã‚ªãƒ¼ãƒ—ンソース - コミュニティã®ã¿ãªã•ã¾ã«æ„Ÿè¬ã„ãŸã—ã¾ã™ã€‚ - - - ã“ã®ç¿»è¨³æ–‡æ›¸ã¯ <a href="http://www.postgresql.org/docs/faq/">本家 "Frequently Asked Questions" </a> ã®ãƒšãƒ¼ã‚¸ã« "Japanese FAQ" - ã¨ã„ã†é …ç›®ã§ã‚ã‚Šã¾ã™ã€‚ - - ã¾ãŸã€æœ€æ–°ç‰ˆã¯ä»¥ä¸‹ã®ã‚µã‚¤ãƒˆã«ã‚ã‚Šã¾ã™ã€‚ - <a - href="http://www.postgresql.jp/wg/jpugdoc/">http://www.postgresql.jp/wg/jpugdoc/</a> 「JPUG文書・書ç±é–¢é€£åˆ†ç§‘会〠- <a href="http://www.linux.or.jp/JF/JFdocs/INDEX-database.html">http://www.linux.or.jp/JF/JFdocs/INDEX-database.html</a> 「Linux JFプãƒã‚¸ã‚§ã‚¯ãƒˆã€ <a href="http://www.linet.gr.jp/~juk/pgsql/">http://www.linet.gr.jp/~juk/pgsql/</a> 「PostgreSQL Notes for Japaneseã€ï¼ˆç¿»è¨³è€…ページ) - - ãªãŠã€ã“ã®å’Œè¨³ã«é–¢ã™ã‚‹ã”æ„見・ã”質å•ã¯(<a href="mailto:juk at - postgresql.jp">juk at postgresql.jp</a>)ã¾ã§ãŠå¯„ã›ãã ã•ã„。 - (※ メールアドレス㮠" at " ã¯é©åˆ‡ã«ç›´ã—ã¦ãã ã•ã„。åŠè§’ã® "@" ã§ã™ã€‚) -] -</pre></small></p> - -</div> - -</BODY> -</HTML> diff --git a/doc/src/FAQ/FAQ_polish.html b/doc/src/FAQ/FAQ_polish.html deleted file mode 100644 index f0364198d3089da43b4b63a685a030e09e06e426..0000000000000000000000000000000000000000 --- a/doc/src/FAQ/FAQ_polish.html +++ /dev/null @@ -1,1572 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD html 4.01 transitional//EN"> - -<HTML> - <!-- DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN" --> - <!-- HTML --> - - <HEAD> - <META name="generator" content="HTML Tidy, see www.w3.org"> - <meta http-equiv="Content-Type" content="text/html; charset=utf8"> - <TITLE>PostgreSQL FAQ</TITLE> - </HEAD> - - <BODY bgcolor="#ffffff" text="#000000" link="#ff0000" vlink="#a00000" - alink="#0000ff"> - - <H1>Frequently Asked Questions (FAQ) o PostgreSQL</H1> - - <P>Ostatnia aktualizacja: Sobota Luty 7 22:16:21 EST 2004</P> - - <P>Ostatnia aktualizacja tÅ‚umaczenia: PiÄ…tek Marzec 5 19:31:12 EST 2004</P> - - <P>Obecny maintainer: Bruce Momjian (<A href= - "mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</A>)<BR> - </P> - <P>TÅ‚umaczenie: Marcin Mazurek (<A href= - "mailto:m.mazurek@netsync.pl">m.mazurek@netsync.pl</A>)<BR> - </P> - - <P>Najbardziej aktualnÄ… wersjÄ™ tego dokumentu można znaleźć pod - adresem: - <A href= - "http://www.Postgresql.org/docs/faqs/FAQ.html">http://www.PostgreSQL.org/docs/faqs/FAQ.html</A>.</P> - - <P>Odpowiedzi na pytania dotyczÄ…ce konkretnych systemów operacyjnych - można znaleźć pod adresem: - <A href= - "http://www.PostgreSQL.org/docs/index.html">http://www.PostgreSQL.org/docs/index.html</A>.</P> - <HR> - - <H2 align="center">Pytania ogólne</H2> - <A href="#1.1">1.1</A>) Co to jest PostgreSQL? Jak to wymawiać?<BR> - <A href="#1.2">1.2</A>) JakÄ… licencjÄ… chroniony jest PostgreSQL?<BR> - <A href="#1.3">1.3</A>) Na jakich systemach Unixowych dziaÅ‚a - PostreSQL?<BR> - <A href="#1.4">1.4</A>) Na jakich nie-Unixowych systemach dziaÅ‚a - PostgreSQL?<BR> - <A href="#1.5">1.5</A>) SkÄ…d mogÄ™ Å›ciÄ…gnąć PostgreSQL?<BR> - <A href="#1.6">1.6</A>) Gdzie można szukać wsparcia technicznego?<BR> - <A href="#1.7">1.7</A>) Jaka jest ostatnia dostÄ™pna wersja?<BR> - <A href="#1.8">1.8</A>) Jaka dokumentacja jest dostÄ™pna?<BR> - <A href="#1.9">1.9</A>) Gdzie mogÄ™ znaleźć informacjÄ™ o znanych - bÅ‚Ä™dach czy brakujÄ…cych rozwiÄ…zanich?<BR> - <A href="#1.10">1.10</A>) Jak mogÄ™ siÄ™ nauczyć <SMALL>SQL</SMALL>?<BR> - <A href="#1.11">1.11</A>) Czy PostgreSQL ma rozwiÄ…zany problem Y2K?<BR> - <A href="#1.12">1.12</A>) Jak mogÄ™ siÄ™ przyÅ‚Ä…czyć do grupy osób - bezpoÅ›rednio pracujÄ…cych nad rozwojem PostgreSQL?<BR> - <A href="#1.13">1.13</A>) Jak mogÄ™ zgÅ‚aszać bÅ‚Ä™dy?<BR> - <A href="#1.14">1.14</A>) Jak można porównać PostgreSQL w stosunku - do innych <SMALL>DBMS</SMALL>?<BR> - <A href="#1.15">1.15</A>) W jaki sposób mogÄ™ wesprzeć finansowo - PostgreSQL?<BR> - - <H2 align="center">Pytania użytkowników</H2> - <A href="#2.1">2.1</A>) Czy sÄ… jakieÅ› driwery <SMALL>ODBC</SMALL> dla - PostgreSQL?<BR> - <A href="#2.2">2.2</A>) Jakie istniejÄ… narzÄ™dzia pozwalajÄ…ce na dostÄ™p do - PostgreSQL przez www?<BR> - <A href="#2.3">2.3</A>) Czy istnieje jakieÅ› GUI dla PostgreSQL?<BR> - <A href="#2.4">2.4</A>) Za pomocÄ… jakich jÄ™zyków programowania można - siÄ™ komunikować z PostgreSQL?<BR> - - - <H2 align="center">Pytania dotyczÄ…ce administracji</H2> - <A href="#3.1">3.1</A>) Jak mogÄ™ zainstalować PostgreSQL w innej - lokalizacji niż <I>/usr/local/pgsql</I>?<BR> - <A href="#3.2">3.2</A>) Podczas startu <I>postmaster'a</I>, - otrzymujÄ™ komunikat: - <I>Bad System Call</I> lub "core dumped". Dlaczego?<BR> - <A href="#3.3">3.3</A>) Podczas startu <I>postmaster'a</I>, - otrzymujÄ™ komunikat o bÅ‚Ä™dzie: <I>IpcMemoryCreate</I>. Dlaczego?<BR> - <A href="#3.4">3.4</A>) Podczas startu <I>postmaster'a</I>, - otrzymujÄ™ komunikat o bÅ‚Ä™dzie: <I>IpcSemaphoreCreate</I>. Dlaczego?<BR> - <A href="#3.5">3.5</A>) W jaki sposób mogÄ™ kontrolować poÅ‚Ä…czenia z - innych hostów?<BR> - <A href="#3.6">3.6</A>) Jak powinienem skonfigurować system baz - danych aby uzyskać lepszÄ… wydajność?<BR> - <A href="#3.7">3.7</A>) Jakie sÄ… możliwoÅ›ci wyszukiwania bÅ‚Ä™dów?<BR> - <A href="#3.8">3.8</A>) SkÄ…d siÄ™ bierze komunikat: <I>"Sorry, too many - clients"</I> podczas próby poÅ‚Ä…czenia siÄ™ z bazÄ… danych?<BR> - <A href="#3.9">3.9</A>) Jakie pliki znajdujÄ… siÄ™ w <I>pg_temp</I>?<BR> - <A href="#3.10">3.10</A>) Dlaczego konieczne jest przy upgradzie - PostgreSQL korzystanie ze skryptów dump i restore?<BR> - - <H2 align="center">Pytania dotyczÄ…ce użytkowania</H2> - <A href="#4.1">4.1</A>) Jaka jest różnica pomiÄ™dzy kursorami - binarnymi (binary cursors) i zwykÅ‚ymi kursorami (normal cursors)?<BR> - <A href="#4.2">4.2</A>) Jak mogÄ™ pobrać za pomocÄ… <SMALL>SELECT</SMALL> - jedynie kilka pierwszych wyników zapytania?<BR> - <A href="#4.3">4.3</A>) Jak mogÄ™ uzyskać listÄ™ wszystkich tabel czy - innych rzeczy pod <I>psql</I>?<BR> - <A href="#4.4">4.4</A>) Jak usunąć kolumnÄ™ z tabeli lub zmienić jej - typ?<BR> - <A href="#4.5">4.5</A>) Jaki jest maksymalny rozmiar dla rzÄ™du, - tabeli i bazy danych?<BR> - <A href="#4.6">4.6</A>) Jak dużo miejsca w bazie danych jest - potrzebne aby przechować dane ze zwyczajnego pliku tekstowego?<BR> - <A href="#4.7">4.7</A>) Jak mogÄ™ sprawdzić jakie tabele, klucze, - bazy danych i użytkownicy sÄ… utworzeni?<BR> - <A href="#4.8">4.8</A>) Moje zapytania sÄ… wolne lub nie używajÄ… - kluczy. Dlaczego?<BR> - <A href="#4.9">4.9</A>) Jak mogÄ™ sprawdzić w jakis sposób "query - optimizer" wykonuje moje zapytanie?<BR> - <A href="#4.10">4.10</A>) Co to jest "R-tree index"?<BR> - <A href="#4.11">4.11</A>) Co to jest "Genetic Query Optimizer"?<BR> - <A href="#4.12">4.12</A>) Jak mogÄ™ używać wyrażeÅ„ regularnych w - zapytaniach i zapytaÅ„ case-insensitive w wyrażeniach regularnych? - Jak korzystać z indeksów dla zapytaÅ„ case-insensitive?<BR> - <A href="#4.13">4.13</A>) Jak sprawdzić w zapytaniu czy pole ma - wartość <SMALL>NULL</SMALL>?<BR> - <A href="#4.14">4.14</A>) Jaka jest różnica pomiÄ™dzy różnymi typami - tekstowymi (character types)?<BR> - <A href="#4.15.1">4.15.1</A>) Jak mogÄ™ utworzyć pole typu int, które samo - zwiÄ™ksza swojÄ… wartość?<BR> - <A href="#4.15.2">4.15.2</A>) Jak pobrać wartość pola typu - <SMALL>SERIAL</SMALL> po wykonaniu insert'u?<BR> - <A href="#4.15.3">4.15.3</A>) Czy użycie <I>currval()</I> i - <I>nextval()</I> nie doprowadzi do "race condition" z innymi - użytkownikami?<BR> - <A href="#4.15.4">4.15.4</A>) Dlaczego numery sekwencji nie sÄ… - ponownie używane przy przerwaniu transakcji? - SkÄ…d siÄ™ biorÄ… luki w numerowaniu kolumny tabeli sekwencjami/SERIALem?<BR> - <A href="#4.16">4.16</A>) Co to jest <SMALL>OID</SMALL>? Co to jest - <SMALL>TID</SMALL>?<BR> - <A href="#4.17">4.17</A>) Jakie jest znaczenie niektórych terminów w - PostgreSQL?<BR> - <A href="#4.18">4.18</A>) SkÄ…d bierze siÄ™ ten bÅ‚Ä…d: <I>"ERROR: Memory - exhausted in AllocSetAlloc()"</I>?<BR> - <A href="#4.19">4.19</A>) Jak sprawdzić jakiej wersji PostgreSQL - używam?<BR> - <A href="#4.20">4.20</A>) Dlaczego operacje, które wykonujÄ™ na - dużych obiektach "large-object" zwracajÄ… komunikat: - <I>"invalid large obj descriptor"</I>?<BR> - <A href="#4.21">4.21</A>) Jak stworzyć kolumnÄ™ której domyÅ›lnÄ… - wartoÅ›ciÄ… bÄ™dzie bieżący czas?<BR> - <A href="#4.22">4.22</A>) Dlaczego zapytania używajÄ…ce - <CODE><SMALL>IN</SMALL></CODE> sÄ… takie wolne?<BR> - <A href="#4.23">4.23</A>) Jak wykonać "outer join"?<BR> - <A href="#4.24">4.24</A>) Jak wykonywać zapytanie używajÄ…ce kilku - baz danych jednoczeÅ›nie?<BR> - <A href="#4.25">4.25</A>) Jak zwrócić w funkcji wiele rzÄ™dów lub - kolumn?<BR> - <A href="#4.26">4.26</A>) Dlaczego nie mogÄ™ w sposób pewny - tworzyć/usuwać tabel tymczasowych w funkcjach PL/PgSQL?<BR> - <A href="#4.27">4.27</A>) Jakie sÄ… możliwoÅ›ci replikacji w - PostgreSQL?<BR> - <A href="#4.28">4.28</A>) Jakie możliwoÅ›ci szyfrowania oferuje - PostgreSQL?<BR> - - <H2 align="center">Rozwijanie PostgreSQL</H2> - <A href="#5.1">5.1</A>) NapisaÅ‚em wÅ‚asnÄ… funkcjÄ™. Kiedy użyjÄ™ jej w - <I>psql</I>, program zrzuca pamięć (dump core)?<BR> - <A href="#5.2">5.2</A>) Jak mogÄ™ dodać/zgÅ‚osić nowe typy czy funkcje - do PostgreSQL?<BR> - <A href="#5.3">5.3</A>) Jak napisać funkcjÄ™ C zwracajÄ…cÄ… krotkÄ™ - (tuple)?<BR> - <A href="#5.4">5.4</A>) ZmieniÅ‚em plik źródÅ‚owy. Dlaczego po - rekompilacji nie widać zmiany?<BR> - - <HR> - - <H2 align="center">Pytania ogólne</H2> - - <H4><A name="1.1">1.1</A>) Co to jest PostgreSQL? Jak to wymawiać?</H4> - - <P>PostgreSQL wymawia siÄ™ <I>Post-Gres-kju-el</I>. CzÄ™sto podczas - rozmów używany jest termin "Postgres"</P> - - <P>PostgreSQL jest rozszerzeniem systemu zarzÄ…dzania bazami danych - - POSTGRES, kolejnÄ… generacjÄ… rozwojowego prototypu <SMALL>DBMS</SMALL>. - Mimo, że PostgreSQL zachowaÅ‚ bardzo dobrze zbudowany model danych - (data model) i bogaty zestaw typów danych POSTGRES'a, zastÄ…piÅ‚ - PostQuel'owy jÄ™zyk zapytaÅ„ z rozbudowanym podzbiorem jÄ™zyka - <SMALL>SQL</SMALL>. PostgreSQL jest oprogramowaniem darmowym - z dostÄ™pnymi caÅ‚ymi źródÅ‚ami. - </P> - - <P>Rozwój PostgreSQL jest prowadzony przez grupÄ™ ludzi z Internetu, - komunikujÄ…cych siÄ™ poprzez mailowe listy dyskusyjne PostgreSQL. - Obecnym koordynatorem jest Marc G. Fournier (<A href= - "mailto:scrappy@PostgreSQL.org">scrappy@PostgreSQL.org</A>). (Zobacz - pytanie <A href="#1.6">1.6</A> jak siÄ™ przyÅ‚Ä…czyć). Ta grupa ludzi jest - odpowiedzialna za caÅ‚y rozwój PostgreSQL. PostgreSQL jest projektem - nie kontrolowanym przez żadnÄ… firmÄ™, aby wziąć udziaÅ‚ w jego rozwoju - sprawdź, <A href="http://www.PostgreSQL.org/docs/faqs/FAQ_DEV.html"> - http://www.PostgreSQL.org/docs/faqs/FAQ_DEV.html</a></P> - - <P>Autorami PostgreSQL 1.01 byli Andrew Yu and Jolly Chen. - Wiele innych osób pomogÅ‚o przy portowaniu, testowaniu, debugowaniu i - rozwijaniu kodu. Oryginalny kod Postgresa, na którym zostaÅ‚ oparty - PostgreSQL, byÅ‚ wysiÅ‚kiem studentów oraz pracowników pracujÄ…cych pod - kierownictwem profesora Michael'a Stonebraker'a z University of - California w Berkeley.</P> - - <P>OryginalnÄ… nazwÄ… oprogramowania w Berkeley byÅ‚ Postgres. Po - dodaniu obsÅ‚ugi <SMALL>SQL</SMALL> w 1995, nazwa zostaÅ‚a zmieniona - na Postgres95. Pod koniec roku 1996 nazwa zostaÅ‚a zmieniona na - PostgreSQL.</P> - - <H4><A name="1.2">1.2</A>) JakÄ… licencjÄ… chroniony jest - PostgreSQL?</H4> - - <P>PostgreSQL objÄ™ty jest nastÄ™pujÄ…cÄ… licencjÄ…:</P> - - <P>PostgreSQL Data Base Management System</P> - - <P>Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group - Portions Copyright (c) 1994-6 Regents of the University of California</P> - - <P>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.</P> - - <P>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.</P> - - <P>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.</P> - - <P>Tekst powyżej, jest klasycznÄ… licencjÄ… BSD. - Nie posiada ona żadnych restrykcji co do używania kodu źródÅ‚owego. - Podoba nam siÄ™ i nie zamierzamy jej zmieniać.</P> - - <H4><A name="1.3">1.3</A>) Na jakich systemach Unixowych dziaÅ‚a - PostreSQL?</H4> - - <P>PostgreSQL powinien dziaÅ‚ać na wszystkich nowych Unix-podobnych - systemach. Platformy, które zostaÅ‚y szczegółowo przetestowane podczas - publikowania PostgreSQL sÄ… wymienione w dokumentacji opisujÄ…cej - instalacjÄ™.</P> - - <H4><A name="1.4">1.4</A>) Na jakich nie-Unixowych systemach dziaÅ‚a - PostgreSQL?</H4> - - <P><STRONG>Klient</STRONG></P> - - <P>Możliwa jest kompilacja bibliteki C <I>libpq</I>, psql oraz - innych interfejsów i uruchamianie ich na platformie MS Windows. W tym - wypadku klient jest uruchamiany na MS Windows a z serwerem komunikuje siÄ™ - poprzez TCP/IP. Serwer może dziaÅ‚ać na dowolnej wspieranej platformie - Unixowej. Plik <I>win32.mak</I> jest doÅ‚Ä…czony - do źródeÅ‚, aby można byÅ‚o stworzyć bibliotekÄ™ <I>libpq</I> oraz - program <I>psql</I> dziaÅ‚ajÄ…ce w Å›rodowisku Win32. PostgreSQL może siÄ™ - także komunikować z klientami <SMALL>ODBC</SMALL>.</P> - - <P><STRONG>Serwer</STRONG></P> - - <P>Serwer może być uruchamiany na Windows NT i Win2k używajÄ…c - bibliotek Cygwin, Cygnus Unix/NT. W pliku <I>pgsql/doc/FAQ_MSWIN</I> - znajdujÄ…cym siÄ™ w źródÅ‚ach lub pod adresem: <A href= - "http://www.postgresql.org/docs/faqs/text/FAQ_MSWIN">http://www.PostgreSQL.org/docs/faqs/text/FAQ_MSWIN</A> na naszych stronach.</P><P> - Obecnie prowadzone sÄ… prace nad stworzeniem wersji dla MS Win - NT/200/XP. JeÅ›li chcesz siÄ™ dowiedzieć o obecnym statusie tych prac - zobacz <A - href="http://techdocs.postgresql.org/guides/Windows">http://techdocs.postgresql.org/guides/Windows</A> and - <A - href="http://momjian.postgresql.org/main/writings/pgsql/win32.html">http://momjian.postgresql.org/main/writings/pgsql/win32.html</A>. - </P> - <P> - Istnieje także port pod Novell Netware 6 dostÄ™pny pod adresem <A - href="http://forge.novell.com">http://forge.novell.com</A>. - </P> - - <H4><A name="1.5">1.5</A>) SkÄ…d można Å›ciÄ…gnąć PostgreSQL?</H4> - - <P>Główny serwer ftp z dostÄ™pem "anonymous" dla PostgreSQL znajduje - siÄ™ <A href="ftp://ftp.PostgreSQL.org/pub">ftp://ftp.PostgreSQL.org/pub</A>. - jeÅ›li szukasz mirrorów sprawdź naszÄ… głównÄ… stronÄ™ www.</P> - - <H4><A name="1.6">1.6</A>) Gdzie można szukać wsparcia technicznego?</H4> - - <P>Adres głównej listy mailowej: <A href= - "mailto:pgsql-general@PostgreSQL.org">pgsql-general@PostgreSQL.org</A>. - Jest ona przeznaczona dyskusjom dotyczÄ…cym spraw zwiÄ…zanych z PostgreSQL. - Å»eby zapisac siÄ™ na listÄ™, wyÅ›lij email z nastÄ™pujÄ…cymi liniami w - treÅ›ci maila (nie w temacie):</P> -<PRE> - subscribe - end -</PRE> - - <P>na adres: <A href= - "mailto:pgsql-general-request@PostgreSQL.org">pgsql-general-request@PostgreSQL.org</A>.</P> - - <P>DostÄ™pna jest także lista wysyÅ‚ajÄ…ca digesty. Aby zapisać siÄ™ na - niÄ…, wyÅ›lij email na adres: - <A href= - "mailto:pgsql-general-digest-request@PostgreSQL.org">pgsql-general-digest-request@PostgreSQL.org</A> - z treÅ›ciÄ… maila zawierajÄ…cÄ…:</P> -<PRE> - subscribe - end -</PRE> - Digesty sÄ… wysyÅ‚ane do czÅ‚onków listy, kiedy na głównÄ… listÄ™ dotrze ok - 30k wiadomoÅ›ci. - - <P>DostÄ™pna jest także lista poÅ›wiÄ™cona bÅ‚Ä™dom znalezionym w - PostgreSQL. Aby zapisać siÄ™ na niÄ… wyÅ›lij email na adres: - <A href= - "mailto:pgsql-bugs-request@PostgreSQL.org">pgsql-bugs-request@PostgreSQL.org</A> - z treÅ›ciÄ… maila zawierajÄ…cÄ…:</P> -<PRE> - subscribe - end -</PRE> - Lista poÅ›wiÄ™cona dyskusjom developerów jest dostÄ™pna pod adresem: - <A href= - "mailto:pgsql-hackers-request@PostgreSQL.org">pgsql-hackers-request@PostgreSQL.org</A> - Aby siÄ™ na niÄ… zapisać wyÅ›lij na jej adres mail z treÅ›ciÄ…: -<PRE> - subscribe - end -</PRE> - - <P>Dodatkowe informacje o listach mailowych dotyczÄ…cych PostgreSQL - można znaleźć na stronach WWW PostgreSQL pod adresem:</P> - - <BLOCKQUOTE> - <P><A href="http://www.PostgreSQL.org">http://www.PostgreSQL.org</A></P> - </BLOCKQUOTE> - - <P>W sieci EFNet istnieje kanaÅ‚ IRC <I>#PostgreSQL</I>. Ja, do - poÅ‚Ä…czenia siÄ™ z kanaÅ‚em używam Unixowego polecenia <CODE>irc -c - '#PostgreSQL' "$USER" irc.phoenix.net.</CODE></P> - - <P>Lista firm oferujÄ…cych wsparcie na zasadach komercyjnych znajduje - siÄ™ pod adresem: <A href= "http://techdocs.postgresql.org/companies.php">http://techdocs.postgresql.org/companies.php</A>.</P> - - <H4><A name="1.7">1.7</A>) Jaka jest ostatnia dostÄ™pna wersja?</H4> - - <P>Ostatnia dostÄ™pna wersja PostgreSQL to 7.4.1.</P> - - <P>Planujemy publikowanie kolejnych wersji co sześć do oÅ›miu miesiÄ™cy.</P> - - <H4><A name="1.8">1.8</A>) Jaka dokumentacja jest dostÄ™pna?</H4> - - <P>Kilka manuali, stron podÄ™cznika man, oraz kilka przykÅ‚adów do - testowania sÄ… zaÅ‚Ä…czone w samej dystrybucji. ZnajdujÄ… siÄ™ one w - katalogu <I>/doc</I>. Manual może być także przeglÄ…dany poprzez - strony www pod adresem <A href= - "http://www.PostgreSQL.org/docs">http://www.PostgreSQL.org/docs</A>.</P> - - <P>IstniejÄ… także dwie książki dostÄ™pne online pod adresami - <A href= - "http://www.PostgreSQL.org/docs/awbook.html">http://www.PostgreSQL.org/docs/awbook.html</A> - i <A href= - "http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook/</A>. - Lista książek o PostgreSQL, które można kupić znajduje siÄ™ pod adresem - <A href= - "http://techdocs.PostgreSQL.org/techdocs/bookreviews.php"> - http://techdocs.PostgreSQL.org/techdocs/bookreviews.php</A>. - Zbiór technicznych artykułów o PostgreSQL znajduje siÄ™ pod adresem <A - href= - "http://techdocs.PostgreSQL.org">http://techdocs.postgresql.org/</A>.</P> - - <P><I>psql</I> posiada kilka wbudowanych poleceÅ„ \d, za pomoca których - można sprawdzić informacje dotyczÄ…ce typów, operatorów, funkcji, - agregatów itd.</P> - - <P>Na naszej stronie można znaleźć dużo wiÄ™cej dokumentacji.</P> - - <H4><A name="1.9">1.9</A>) Gdzie można znaleźć informacjÄ™ o znanych - bÅ‚Ä™dach czy brakujÄ…cych rozwiÄ…zanich?</H4> - - <P>PostgreSQL wspiera rozszerzony podzbiór standardu <SMALL>SQL</SMALL>-92. - Sprawdź naszÄ… listÄ™ <A href="http://www.postgresql.org/docs/faqs.TODO.html">TODO</A> - aby znaleźć informacjÄ™ o znanych problemach, brakujÄ…cych - rozwiÄ…zaniach czy przyszÅ‚ych planach.</P> - - <H4><A name="1.10">1.10</A>) Jak mogÄ™ siÄ™ nauczyć - <SMALL>SQL</SMALL>?</H4> - - <P>Książka o PostgreSQL <A href= - "http://www.PostgreSQL.org/docs/awbook.html">http://www.PostgreSQL.org/docs/awbook.html</A> - uczy <SMALL>SQL</SMALL>. Jest jeszcze inna ksiÄ…zka o PostgreSQL - dostÄ™pna pod adresem: <A href= - "http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook.</A> - Dobry tutorial możesz znaleźć pod adresem: <A href= - "http://www.intermedia.net/support/sql/sqltut.shtm">http://www.intermedia.net/support/sql/sqltut.shtm,</A> - oraz <A href= - "http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM"> - http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM,</A> - i <A href= - "http://sqlcourse.com/">http://sqlcourse.com.</A></P> - - <P>Jeszcze inny to "Teach Yourself SQL in 21 Days, Second Edition" - pod adresem: <A href= - "http://members.tripod.com/er4ebus/sql/index.htm">http://members.tripod.com/er4ebus/sql/index.htm</A></P> - - <P>Wielu z naszych użytkowników poleca <I>The Practical SQL Handbook</I>, - Bowman, Judith S., et al., Addison-Wesley. Inni polecajÄ… <I>The - Complete Reference SQL</I>, Groff et al., McGraw-Hill.</P> - - <H4><A name="1.11">1.11</A>) Czy PostgreSQL ma rozwiÄ…zany problem Y2K?</H4> - - <P>Tak, bez problemu radzimy sobie z datami po roku 2000 AD, oraz - przed rokiem 2000 BC.</P> - - <H4><A name="1.12">1.12</A>) Jak mogÄ™ siÄ™ przyÅ‚Ä…czyć do grupy osób - bezpoÅ›rednio pracujÄ…cych nad rozwojem PostgreSQL?</H4> - - <P>Przede wszystkim Å›ciÄ…gnij ostatnie dostÄ™pne źródÅ‚a i przeczytaj - dokumentacjÄ™ przeznaczonÄ… dla developerów na naszej stronie www lub - dostÄ™pnÄ… także w źródÅ‚ach PostgreSQL. NastÄ™pnie zapisz siÄ™ na listy - mailowe <I>pgsql-hackers</I> i - <I>pgsql-patches</I>. I na koniec, wysyÅ‚aj nam wysokiej jakoÅ›ci - patch'e na listÄ™ pgsql-patches.</P> - - <P>Jest okoÅ‚o 12 osób, które majÄ… uprawnienia do commit'owania w - <SMALL>CVS</SMALL> PostgreSQL'a. Każdy z nich submitowaÅ‚ tak wiele - wysokiej jakoÅ›ci patchy, że staÅ‚o siÄ™ niemożliwe dla obecnych - commiterów być z nimi na bieżąco, wiÄ™c musieliÅ›my im ufać i mieć - pewność, że ich poprawki sÄ… wysokiej jakoÅ›ci.</P> - - <H4><A name="1.13">1.13</A>) Jak mogÄ™ zgÅ‚aszać bÅ‚Ä™dy?</H4> - - <P>Zajrzyj na stronÄ™ <A href= - "http://www.postgresql.org/bugs/bugs.php">PostgreSQL BugTool</A>, na - której opisane sÄ… wskazówki jak zgÅ‚aszać informacje o bÅ‚Ä™dach.</P> - - <P>Zajrzyj także na nasz ftp <A href= - "ftp://ftp.PostgreSQL.org/pub">ftp://ftp.PostgreSQL.org/pub</A>, aby - sprawdzić czy nie ma nowszych wersji PostgreSQL czy patchy.</P> - - <H4><A name="1.14">1.14</A>) Jak można porównać PostgreSQL w stosunku - do innych <SMALL>DBMS</SMALL>?</H4> - - <P>Jest kilka sposobów oceny softwaru: możliwoÅ›ci, - wydajność, stabilność, wsparcie i cena.</P> - - <DL> - <DT><B>MożliwoÅ›ci</B></DT> - - <DD>PostgreSQL posiada możliwoÅ›ci dostÄ™pne w dużych, komercyjnych - systemach <SMALL>DBMS</SMALL>, takie jak transakcje, podzapytania - (subselects), triggery, widoki, klucze obce, referential integrity, - oraz wyrafinowany system blokowania. Mamy także wÅ‚aÅ›ciowÅ›ci których - inni nie posiadajÄ…, jak typy definiowane przez użytkownika, - dziedziczenie, rules, multi-version concurrency control, która - redukuje problemy z blokowaniem (lock contention).<BR> - <BR> - </DD> - - <DT><B>Wydajność</B></DT> - - <DD>Wydajność PostgreSQL jest podobna do innych komercyjnych i open - source baz danych. W niektórych sytuacjach jest szybszy w - niektórych wolniejszy. W porównianiu do MySQL lub mniejszych baz - danych jesteÅ›my szybsi przy wielu użytkownikach, skomplikowaych - zapytaniach i dużym obciążeniu podczas. MySQL jest szybszy dla - prostych SELECTów wykonywanych przez niewielu użytkowników. - Spowodowane jest to narzutem, który siÄ™ pojawia przy transakcjach. - OczywiÅ›cie MySQL nie ma wiÄ™kszoÅ›ci z rozwiÄ…zaÅ„ opisanych powyżej - w sekcji <I> MożliwoÅ›ci </I>. PostgreSQL zostaÅ‚ stworzony z myÅ›lÄ… o - stabilnoÅ›ci, oraz szerokiej gamie możliwoÅ›ci, ale mimo to staramy - siÄ™ w każdej wersji poprawiać jego wydajność. - Ciekawe porównanie PostgreSQL i MySQL można znaleźć pod adresem <A href= - "http://openacs.org/philosophy/why-not-mysql.html">http://openacs.org/philosophy/why-not-mysql.html</A> - Dodatkowo, MySQL jest firmÄ…, która dystrybuuje jej produkty poprzez - zasadÄ™ Open Source i wymaga wykupienia licencji w przypadku - tworzenia close-source software, co ie ma miejsca w przypadku - PostgreSQL.<BR> - <BR> - </DD> - <DT><B>Stabilność</B></DT> - - <DD>Zdajemy sobie sprawÄ™, że <SMALL>DBMS</SMALL> musi być stabilny, - w przeciwnym wypadku jest bez wartoÅ›ci. Staramy siÄ™ publikować kod - stabilny, dobrze przetestowany, z minimum możliwych bÅ‚Ä™dów. Każde - wydanie poprzedza co najmniej miesiÄ…c testów wersji beta. PatrzÄ…c na - historiÄ™ wydaÅ„ PostgreSQL widać, że dostarczamy stabilne, dobrze - sprawdzone wersje, które sÄ… gotowe do użycia w Å›rodowisku - produkcyjnym. MyÅ›limy, że proces publikowania kolejnych wersji - opracowany przez nas jest jednym z lepszych wÅ›ród innych twórców - oprogramowania bazodanowego.<BR> - <BR> - </DD> - - <DT><B>Wsparcie</B></DT> - - <DD>DziÄ™ki naszym listom mailowym masz dostÄ™p do dużej liczby - programistów i użytkowników, którzy pomagajÄ… rozwiÄ…zać każdy - napotkany problem. Chociaż nie możemy gwarantować znalezienia - rozwiÄ…zania danego problemu, nie różnimy siÄ™ w tym od innych - komercyjnych systemów <SMALL>DBMS</SMALL>. BezpoÅ›redni kontakt z - programistami, użytkownikami, dokumentacjÄ… i kodem źródÅ‚owym - sprawiajÄ…, że wsparcie oferowane PostgreSQL niejednokrotnie jest - lepsze niż w innych systemach <SMALL>DBMS</SMALL>. Istnieje także - możliwość skorzystania z komercyjnego wsparcia dla tych, których - takiego rozwiÄ…zania potrzebujÄ…. - (Sprawdź <A href="#1.6">ten punkt FAQ</A>.)<BR> - <BR> - </DD> - - <DT><B>Cena</B></DT> - - <DD>Korzystanie z PostgreSQL jest darmowe, zarówno w przypadku - komercyjnym jak i niekomercyjnym. Możesz korzystać z naszego kodu - źródÅ‚owego w Twoim produkcie bez żadnych ograniczeÅ„, poza tymi - wymienionymi w licencji BSD przytoczonej powyżej.<BR> - <BR> - </DD> - </DL> - - <H4><A name="1.15">1.15</A>) W jaki sposób mogÄ™ wesprzeć finansowo - PostgreSQL?</H4> - - <P>PostgreSQL korzysta z najlepszej infrastruktury od samego poczÄ…tku - istnienia projektu, czyli roku 1996 kiedy rozpoczeliÅ›my pracÄ™. Wszystko - to zawdziÄ™czamy Marc'owi Fournier'owi, który stworzyÅ‚ tÄ… infrastrukturÄ™ - i zarzÄ…dza niÄ… od lat.</P> - - <P>Wysokiej jakoÅ›ci infrastruktura jest bardzo ważna dla każdego - projektu open-source. Zapobiega przerwom w rozwoju projektu i - jakimkolwiek przestojom.</P> - - <P>OczywiÅ›cie korzystanie z wysokiej jakoÅ›ci infrastruktury nie jest - tanie. Istnieje wiele różnych miesiÄ™cznych, czy jednorazowych - wydatków, które trzeba ponosić aby wszystko dziaÅ‚aÅ‚o jak należy. - JeÅ›li Ty, bÄ…dź Twoja firma może wspomóc finansowo rozwój PostgreSQL - odwiedź adres: <A href= - "http://store.pgsql.com/shopping/">http://store.pgsql.com/shopping/</A> - gdzie opisane jest jak to zrobić.</P> - - <P>Chociaż na stronie wspomniana jest nazwa PostgreSQL Inc, "datki" - sÄ… przeznaczone jedynie na rozwój projektu PostgreSQL i nie sÄ… - przeznaczane na finansowanie jakiejkolwiek firmy. JeÅ›li wolisz, - możesz wysÅ‚ać czek na adres kontaktowy.</P> - <HR> - JeÅ›li możesz siÄ™ pochwalić udanymi wdrożeniami PostgreSQL, prosimy - abyÅ› zgÅ‚osiÅ‚ nam to na stronie: <A - href="http://advocacy.postgresql.org/">http://advocacy.postgresql.org</a>. - - <H2 align="center">User Client Questions</H2> - - <H4><A name="2.1">2.1</A>) Czy sÄ… jakieÅ› driwery <SMALL>ODBC</SMALL> dla - PostgreSQL?</H4> - - <P>DostÄ™pne sÄ… dwa driwery <SMALL>ODBC</SMALL>: PsqlODBC - i OpenLink <SMALL>ODBC</SMALL>.</P> - - <P>Możesz pobrać PsqlODBC z adresu <A - href="http://gborg.postgresql.org/project/psqlodbc/projdisplay.php">http://gborg.postgresql.org/project/psqlodbc/projdisplay.php</A> - </P> - - <P>OpenLink <SMALL>ODBC</SMALL> może być pobrany z adresu: <A href= - "http://www.openlinksw.com/">http://www.openlinksw.com</A>. - Współpracuje ze standardowym oprogramowaniem klienckim <SMALL>ODBC</SMALL> - wiÄ™c w ten sposób możesz korzystać z PostgreSQL <SMALL>ODBC</SMALL> - dostÄ™pnego na każdej pltaformie którÄ… wspiera (Win, Mac, Unix, VMS).</P> - - <P>Autorzy bÄ™dÄ… prawdopodobnie sprzedawać ten produkt osobom które - wymagajÄ… komercyjnego wsparcia, ale wersja darmowa bÄ™dzie zawsze - dostÄ™pna. Wszystkie pytania możesz wysyÅ‚ać na adres: <A href= - "mailto:postgres95@openlink.co.uk">postgres95@openlink.co.uk</A>.</P> - - <H4><A name="2.2">2.2</A>) Jakie istniejÄ… narzÄ™dzia pozwalajÄ…ce na dostÄ™p do - PostgreSQL przez www?</H4> - - <P>Dobry podrÄ™cznik dla poczÄ…tkujÄ…cych o dostÄ™pie do bazy danych - przez www możesz znaleźć pod adresem: - <A href="http://www.webreview.com">http://www.webreview.com</A></P> - - <P>Do integracji z www, Å›wietnym rozwiÄ…zaniem jest PHP. Możesz - znaleźć wiÄ™cej informacji na ten temat pod adresem - <A href="http://www.php.net">http://www.php.net</A>.</P> - - <P>Wiele osób w przypadku skomplikowanych rozwiÄ…zaÅ„ uzywa Perl'a i - moduÅ‚u CGI.pl lub mod_perl.</P> - - <H4><A name="2.3">2.3</A>) Czy istnieje jakieÅ› GUI dla PostgreSQL?</H4> - - <P>Tak, istnieje kilka interfejsów graficznych dla PostgreSQL. - WÅ›ród nich PgAccess (<A href="http://www.pgaccess.org"> - http://www.pgaccess.org</A>), PgAdmin III (<A - href="http://www.pgadmin.org">http://www.pgadmin.org</A>), - RHDB Admin (http://sources.redhat.com/rhdb/ ) oraz Rekall ( - http://www.thekompany.com/products/rekall/, komercyjny). Istnieje - także PHPPgAdmin ( http://phppgadmin.sourceforge.net/ ), webowy - interfejs dla PostgreSQL. - </P> - <P> - WiÄ™cej informacji na ten temat znajduje siÄ™ pod adresem See - <A href="http://techdocs.postgresql.org/guides/GUITools">http://techdocs.postgresql.org/guides/GUITools</A>.</P> - - <H4><A name="2.4">2.4</A>) Za pomocÄ… jakich jÄ™zyków programowania - można siÄ™ komunikować z PostgreSQL?</H4> - - <P>Najbardziej popularne jÄ™zyki posiiadajÄ… wÅ‚asny interfejs dla - PostgreSQL. Sprawdź listÄ™ rozszerzeÅ„ dla intersujÄ…cego Ciebie jÄ™zyka - programowania.</P> - - <P>Ze źródÅ‚ami PostreSQL dystrubuowane sÄ… interfejsy dla - nastÄ™pujÄ…cych jÄ™zyków programowania:</P> - - - <UL> - <LI>C (libpq)</LI> - - <LI>Embedded C (ecpg)</LI> - - <LI>Java (jdbc)</LI> - - <LI>Python (PyGreSQL)</LI> - - <LI>TCL (libpgtcl)</LI> - </UL> - Inne interfejsy sÄ… dostÄ™pne pod adresem: - <A href="http://gborg.postgresql.org"> http://gborg.postgresql.org</A> w - sekcji Drivers/Interfaces. - <HR> - - <H2 align="center">Pytania dotyczÄ…ce administracji</H2> - - <H4><A name="3.1">3.1</A>) Jak mogÄ™ zainstalować PostgreSQL w innej - lokalizacji niż <I>/usr/local/pgsql</I>?</H4> - - <P>Użyj opcji <I>--prefix</I> podczas uruchamiania skryptu - <I>configure</I>.</P> - - <H4><A name="3.2">3.2</A>) Podczas startu <I>postmaster'a</I>, - otrzymujÄ™ komunikat o bÅ‚Ä™dzie: <I>Bad System Call</I> lub "core dumped". - Dlaczego?</H4> - - - <P>Ten bÅ‚Ä…d może być wynikiem wielu problemów, ale na poczÄ…tek - sprawdź czy masz zainstalowane rozszerzenia systemu V w jÄ…drze - systemu. PostgreSQL wymaga do pracy zainstalowanej obsÅ‚ugi pamiÄ™ci - dzielonej i semaforów.</P> - - <H4><A name="3.3">3.3</A>) Podczas startu <I>postmaster'a</I>, - otrzymujÄ™ komunikat o bÅ‚Ä™dzie: <I>IpcMemoryCreate</I>. - Dlaczego?</H4> - - <P>Albo nie masz poprawnie skonfigurowanej obsÅ‚ugi pamiÄ™ci dzielonej - w jÄ…drze systemu, albo musisz zwiÄ™kszyć jej dostÄ™pny rozmiar. - DokÅ‚adna ilość jakÄ… potrzebujesz jest zależna od architektury systemu - na jakim pracujesz, jak dużo buforów oraz jak dużo procesów backendu - skonfigurowaÅ‚eÅ› dla <I>postmaster'a</I>. Dla wiÄ™kszoÅ›ci systemów, z - domyÅ›lnÄ… liczbÄ… buforów i procesów potrzebujesz minimum w - przybliżeniu 1MB. Zobacz <A href= - "http://www.postgresql.org/idocs/index.php?kernel-resources.html">PostgreSQL - Administrator's Guide</A> gdzie szczegółowo zostaÅ‚o opisane - wykorzystanie pamiÄ™ci dzielonej i semaforów.</P> - - <H4><A name="3.4">3.4</A>) Podczas startu <I>postmaster'a</I>, - otrzymujÄ™ komunikat o bÅ‚Ä™dzie: <I>IpcSemaphoreCreate</I>. - Dlaczego?</H4> - - <P>JeÅ›li treść bÅ‚Ä™du brzmi: <I>IpcSemaphoreCreate: semget failed - (No space left on device)</I> oznacza to, że jÄ…dro systemu nie jest - skonfigurowane do obsÅ‚ugi wystarczajÄ…cej liczby semaforów. - Postgres wymaga jednego semafor'a na potencjalny jeden proces backend. - Tymczasowym rozwiÄ…zaniem jest uruchomienie programu <I>postmaster</I> - z mniejszÄ… maksymalnÄ… liczbÄ… procesów backend. - Użyj opcji <I>-N</i> z parameterem mniejszym od domyÅ›lnego - 32. - Bardziej trwaÅ‚ym rozwiÄ…zaniem jest zwiÄ™kszenie parametrów - <SMALL>SEMMNS</SMALL> i <SMALL>SEMMNI</SMALL> jÄ…dra twojego systemu.</P> - - <P>NiedziaÅ‚ajÄ…ce semafory mogÄ… spowodować niepoprawne zamkniÄ™cie - systemu w czasie intensywnego korzystania z bazy.</P> - - <P>JeÅ›li treść bÅ‚Ä™du jest inna, może to oznaczać, że obsÅ‚uga semaforów - nie zostaÅ‚a wÅ‚Ä…czona do jÄ…dra wcale. Zobacz PostgreSQL - Administrator's Guide po bardziej szczegółowe informacje o pamiÄ™ci - dzielonej i semaforach.</P> - - <H4><A name="3.5">3.5</A>) W jaki sposób mogÄ™ kontrolować poÅ‚Ä…czenia - z innych hostów?</H4> - - <P>DomyÅ›lnie PostgreSQL pozwala jedynie na poÅ‚Ä…czenia za pomocÄ… - socketów Unixowych z lokalnego hosta. Inne hosty nie bÄ™dÄ… mogÅ‚y siÄ™ - poÅ‚Ä…czyć z serwerem dopóki nie zostanie dodana opcja <I>-i</I> do - <I>postmaster'a</I>, - <B>oraz</B> nie umożliwi siÄ™ autoryzacji na podstawie adresu hostów - modyfikujÄ…c odpowiednio plik - <I>$PGDATA/pg_hba.conf</I>. To zmiany pozwolÄ… na poÅ‚Ä…czenia TCP/IP.</P> - - <H4><A name="3.6">3.6</A>) Jak powinienem skonfigurować system baz - danych aby uzyskać lepszÄ… wydajność?</H4> - - <P>Indeksy bez wÄ…tpienia mogÄ… przyspieszyć wykonywanie zapytaÅ„. - Polecenie <SMALL>EXPLAIN</SMALL> pozwala zobaczyć jak PostgreSQL - interpretuje Twoje zapytanie i które indeksy sÄ… używane.</P> - - <P>JeÅ›li wykonujesz bardzo dużo <SMALL>INSERTów</SMALL>, może warto - je wykonać za pomocÄ… jednego dużego pliku używajÄ…c polecenia - <SMALL>COPY</SMALL>. Jest to dużo szybsze niż pojedyncze - <SMALL>INSERTy.</SMALL> Po drugie polecenia SQL nie zawarte w bloku - okreÅ›lajÄ…cym transakcjÄ™ - <SMALL>BEGIN WORK/COMMIT</SMALL>, sÄ… - traktowane jako pojedyncza transakcja. Rozważ wykonanie kilku - poleceÅ„/zdaÅ„ SQL w jednym bloku transakcji. To redukuje narzut - nakÅ‚adany przez transakcjÄ™. Przy dużych zmianach w danych, warto - usunąć i stworzyć na nowo indeksy.</P> - - <P>Jest kilka opcji pozwalajÄ…cych na poprawienie wydajnoÅ›ci. - Możesz wyÅ‚Ä…czyć <I>fsync()</I> poprzez uruchomienie <I>postmaster'a</I> - z opcjami <I>-o -F</I>. To spowoduje, że - <I>fsync()</I> nie bÄ™dzie zrzucaÅ‚ danych na dysk po każdej - transakcji.</P> - - <P>Możesz także uruchomić <I>postmaster'a</I> z opcjÄ… <I>-B</I> - aby zwiÄ™kszyć wielkość pamiÄ™ci dzielonej używanej przez procesy - backendów. JeÅ›li ustawisz tÄ… wartość zbyt wysoko i przekroczysz limity - ustawione przez kernel na pamięć dzielonÄ…, <I>postmaster</I> może siÄ™ - nie uruchomić. Każdy bufor zajmuje 8K a domyÅ›lna ilość buforów to 64.</P> - - <P>Możesz także użyć opcji <I>-S</I> dla backendu aby zwiÄ™kszyć - maksymalnÄ… wartość pamiÄ™ci używanÄ… przez proces backendu podczas - sortowania. Opcja <I>-S</I> jest ustawiana wartoÅ›ciÄ… podawanÄ… w - kilobajtach, domyÅ›lna wartość to 512K.</P> - - <P>Możesz także użyć polecenia <SMALL>CLUSTER</SMALL> aby pogrupować - dane w tabelach wg indeksu. Zobacz opis polecenia <SMALL>CLUSTER</SMALL> - w manualu żeby dowiedzieć siÄ™ wiÄ™cej.</P> - - <H4><A name="3.7">3.7</A>) Jakie sÄ… możliwoÅ›ci wyszukiwania - bÅ‚Ä™dów?</H4> - - <P>PostgreSQL ma kilka możliwoÅ›ci na raportowanie informacji o - jego statusie, które mogÄ… być przydatne przy debugowaniu procesu.</P> - - <P>Przede wszystkim uruchom skrypt <I>configure</I> z opcjÄ… - --enable-cassert, wiele funkcji <I>assert()</I> monitorujÄ… postÄ™p - procesu backend i zatrzymujÄ… program kiedy wydarzy siÄ™ coÅ› - nieoczekiwanego.</P> - - <P>Zarówno <I>postmaster</I> jak i <I>postgres</I> majÄ… kilka opcji - do debugowania. Za każdym razem kiedy uruchamiasz <I>postmaster'a</I>, - upewnij siÄ™, że wysyÅ‚asz standardowe wyjÅ›cie i error do pliku z - logami, np. w ten sposób:</P> -<PRE> - cd /usr/local/pgsql - ./bin/postmaster >server.log 2>&1 & -</PRE> - - <P>To utworzy plik server.log w głównym katalogu PostgreSQL. - Ten plik zawiera pożyteczne informacje o problemach i bÅ‚Ä™dach, które - wydarzyÅ‚y siÄ™ podczas pracy serwera. <I>Postmaster</I> posiada opcjÄ™ - <I>-d</I>, która pozwala na raportowanie bardzo szczególowych - informacji. Do opcji <I>-d</I> podajemy liczbÄ™, która okreÅ›la - szczegółowość wysyÅ‚anych informacji. Musisz mieć Å›wiadomość, że - wysoki poziom logowania bÄ™dzie powodowaÅ‚ tworzenie bardzo duzych - plików z logami.</P> - - <P>JeÅ›li <I>postmaster</I> nie zostaÅ‚ uruchomiony, możesz uruchomić - <I>postgres'owy</I> backend z linii poleceÅ„, i uruchomić Twoje - polecenie <SMALL>SQL</SMALL> bezpoÅ›rednio na nim. - Taki sposób jest polecany <B>jedynie</B> w przypadku debugowania. - Zwróć uwagÄ™, że w tym wypadku zapytanie koÅ„czy znak nowej linii a nie - Å›rednik. JeÅ›li skompilowaÅ‚eÅ› z opcjami debugowania mozesz użyć - debuggera aby sprawdzić co siÄ™ dzieje. Poniewż backend nie zostaÅ‚ - uruchomiony przez <I>postmaster'a</I>, nie dziaÅ‚a w identycznym - Å›rodowisku, co oznacza że powtórzenie warunków w jakich wystÄ…piÅ‚y - problemy moze być problemem.</P> - - <P>JeÅ›li <I>postmaster</I> dziaÅ‚a, uruchom <I>psql</I> w jednym z - okien, nastÄ™pnie znajdź <SMALL>PID</SMALL> procesu <I>postgres</I> - używanego przez <I>psql</I>. Użyj debuggera aby do - <SMALL>PID'u</SMALL> <I>postgres'a</I>. Możesz ustawiać puÅ‚apki - (breakpoints) w debuggerze i wykonywać zapytania z <I>psql</I>. - JeÅ›li debugujesz uruchamianie <I>postgres'a</I>, możesz ustawić zmiennÄ… - PGOPTIONS="-W n", nastÄ™pnie uruchomić <I>psql</I>. - Opcja ta pozwoli spowolnić uruchomienie na - <I>n</I> sekund abyÅ› mógÅ‚ siÄ™ poÅ‚Ä…czyć z procesem za pomocÄ… - debugera, ustawić jakiekolwiek puÅ‚apki i kontynuować proces - uruchamiania.</P> - - <P><I>postgres</I> może być uruchamiany z opcjami <I>-s, -A</I> i - <I>-t</I>, które mogÄ… być bardzo przydatne przy debuggowaniu i ocenie - wydajnoÅ›ci.</P> - - <P>Możesz także skompilować z profilingiem aby zobaczyć jakie funkcje - ile czasu wykonujÄ… siÄ™. Pliki profilowane dla backendu zostanÄ… - umieszczone w katalogu - <I>pgsql/data/base/dbname</I>. Pliki profilu klienta zostanÄ… - umieszczone w bieżącym katalogu klienta. Linux wymaga aby kompilować - z opcjÄ… <I>-DLINUX_PROFILE</I> aby profilowanie odbywaÅ‚o siÄ™ - poprawnie.</P> - - <H4><A name="3.8">3.8</A>) SkÄ…d siÄ™ bierze komunikat: <I>"Sorry, too - many clients"</I> podczas próby poÅ‚Ä…czenia siÄ™ z bazÄ… danych?</H4> - - <P>Musisz zwiÄ™kszyć limit iloÅ›ci jednoczesnych procesów bacekendu - dla procesu <I>postmaster'a</I>.</P> - - <P>DomyÅ›lny limit to 32 procesy. Możesz go zwiÄ™kszyć przez restart - <I>postmaster</I> z odpowiedniÄ… wartoÅ›ciÄ… ustawianÄ… opcjÄ™ <I>-N</I> w - pliku <I>postgresql.conf</I>.</P> - - <P>Weź pod uwagÄ™, że jeÅ›li zwiÄ™kszysz wartość podanÄ… w opcji - <I>-N</I> na wiÄ™cej niż 32 musisz także zwiÄ™kszyć wartość w opcji - <I>-B</I> ponad jej domyÅ›lnÄ… wartość 64; wartość <I>-B</I> musi być - co najmniej dwa razy wiÄ™ksza od wartoÅ›ci podanej w opcji - <I>-N</I>, a prawdopodobnie powinna być w rzeczywistoÅ›ci jeszcze - wiÄ™ksza dla optymalnej wydajnoÅ›ci. - Dla dużej liczby procesów backendu na pewno zauważysz, że trzeba - zwiÄ™kszyć różne parametry jÄ…dra Unixa. Rzeczy, które pownieneÅ› - sprawdzić to maksymalna liczba bloków pamiÄ™ci dzielonej, - <SMALL>SHMMAX;</SMALL> maksymalna liczba semaforów, <SMALL>SEMMNS</SMALL> - oraz <SMALL>SEMMNI;</SMALL> - maksymalna liczba procesów, <SMALL>NPROC;</SMALL> maksymalna liczba - procesów na jednego użytkownika, <SMALL>MAXUPRC;</SMALL> i maksymalna - liczba otwartych plików, <SMALL>NFILE</SMALL> oraz - <SMALL>NINODE.</SMALL> Powód dla którego PostgreSQL ma limit na - maksymalnÄ… liczbÄ™ procesów backendu to obawa o wyczerpanie zasobów - systemu.</P> - - <H4><A name="3.9">3.9</A>) Jakie pliki znajdujÄ… siÄ™ w <I>pg_temp</I>?</H4> - - <P>Katalog ten zawiera tymczasowe pliki utworzone przez executor. Dla - przykÅ‚adu, jeÅ›li jakaÅ› operacja sortowania jest wymagana do wykonania - <SMALL>ORDER BY,</SMALL> a samo sortowanie wymaga wiÄ™cej miejsca niż - parametr backendu - <I>-S</I> ustawiÅ‚ do wykorzystania, wtedy tymczasowe pliki sÄ… używane - do przechowywania tych danych.</P> - - <P>Pliki tymczasowe powinny być usuniÄ™te automatycznie, ale mogÅ‚o siÄ™ - to nie stać jeÅ›li proces backendu w miÄ™dzyczasie nie zakoÅ„czyÅ‚ siÄ™ - poprawnie podczas operacji sortowania. JeÅ›li w danym momencie nie - dziaÅ‚ajÄ… żadne procesy backendów mozesz spokojnie usunąć pliki - pg_tempNNN.NN.</P> - - <H4><A name="3.9">3.9</A>) Dlaczego konieczne jest przy upgradzie - PostgreSQL korzystanie ze skryptów dump i restore?</H4> - <P> - Twórcy PostgreSQL dokonujÄ… jedynie maÅ‚ych zmian pomiÄ™dzy maÅ‚ymi - upgradami wersji, np z 7.2 do 7.2.1, wtedy upgrade nie wymaga - korzystania z dump i restore. Przy wiÄ™kszych zmianach, np. z wersji - 7.2 do 7.3, czÄ™sto zmianymajÄ… wpÅ‚yw na format przechowywanych danych. - Zmiany te sÄ… na tyle skomplikowane, że nie utrzymujemy zgodoÅ›ci z - poprzednimi wersjami PostgreSQL. dump pozwala na wydostanie danych w - takiej postaci, w której Å‚atwe jest ich zaimportowanie do nowszych - wersji bez kÅ‚opotu. - </P> - <P> - W wydaniach gdzie zmiany nie dotyczÄ… formatu danych na dysku, można - wykorzystać skryptu pg_upgrade, do upgradu bez użycia dump/restore. - Dokumentacja do danego wydania zawiera informacjÄ™ czy możliwe jest - użycie pg_upgrade. - </P> - <HR> - - <H2 align="center">Pytania dotyczÄ…ce używania</H2> - - <H4><A name="4.1">4.1</A>) Jaka jest różnica pomiÄ™dzy kursorami - binarnymi (binary cursors) i zwykÅ‚ymi kursorami (normal - cursors)?</H4> - - <P>Zobacz w manualu opis polecenia <SMALL>DECLARE</SMALL>.</P> - - <H4><A name="4.2">4.2</A>) Jak mogÄ™ pobrać za pomocÄ… - <SMALL>SELECT</SMALL> jedynie kilka pierwszych wyników - zapytania?</H4> - - <P>Zobacz w manualu opis polecenia <SMALL>FETCH</SMALL> lub użyj - polecenia <SMALL>SELECT</SMALL> ... <SMALL>LIMIT</SMALL>....</P> - - <P>Nawet jeÅ›li chesz pobrać kilka pierwszych rzÄ™dów z wyniku - zapytania, caÅ‚e zapytanie musi zostać wykonane. Byc może powinieneÅ› - skorzystać z polecenia <SMALL>ORDER BY.</SMALL> - JeÅ›li istnieje indeks który odpowiada polom okreÅ›lonym przez - <SMALL>ORDER BY</SMALL>, PostgreSQL może wykorzystać jedynie kilka - pierwszych rzÄ™dów, być może bÄ™dzie konieczność wykonania zapytania do - momentu aż zostanÄ… znalezione pożądane wyniki.</P> - <P> - Aby otrzymać losowy rzÄ…d, użyj:</P> - <PRE> - SELECT col - FROM tab - ORDER BY random() - LIMIT 1; - </PRE> - - <H4><A name="4.3">4.3</A>) Jak mogÄ™ uzyskać listÄ™ wszystkich tabel - czy innych rzeczy pod <I>psql</I>?</H4> - - <P>Możesz sprawdzić zawartość źródeÅ‚ <I>psql</I>, a konkretnie plik - <I>pgsql/src/bin/psql/describe.c</I>. Zawiera on polecenia - <SMALL>SQL</SMALL> które generuja wyniki komend z backslashem. - Możesz także uruchomić <I>psql</I> z opcjÄ… - <I>-E</I> wtedy po wykonaniu polecenia z backslashem wyÅ›wietlane - bÄ™dzie zapytanie, które w rzeczywistoÅ›ci jest wykonywane.</P> - - <H4><A name="4.4">4.4</A>) Jak usunąć kolumnÄ™ z tabeli lub zmienić - jej typ?</H4> - - <P>DROP COLUMNT zostaÅ‚o dodane w wersji 7.3 przy poleceniu ALTER - TABLE DROP COLUMN. We wcześńiejszych wersjach możesz zrobić tak: - </P> -<PRE> - BEGIN; - LOCAL TABLE old_table; - SELECT ... -- wybierz wszystkie kolumny poza tÄ… jednÄ… której chcesz siÄ™ pozbyć - INTO TABLE new_table - FROM old_table; - DROP TABLE old_table; - ALTER TABLE new_table RENAME TO old_table; -</PRE> - <P> - Aby zmienić typ danych kolumny możesz zrobić tak: - </P> - <PRE> - 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; - </PRE> - - <H4><A name="4.5">4.5</A>) Jaki jest maksymalny rozmiar dla rzÄ™du, - tabeli i bazy danych?</H4> - - <P>Oto wszystkie ograniczenia:</P> -<PRE> - Maksymalny rozmiar dla bazdy danych? nieograniczony ( istniejÄ… - bazy danych o wielkoÅ›ci 32 TB databases ) - Maksymalny rozmiar dla tabeli? 32 TB - Maksymalny rozmiar dla rzÄ™du? 1.6 TB - Maksymalny rozmiar pola? 1 GB - Maksymalna liczba rzÄ™dów w tabeli? nieograniczona - Maksymalna liczba kolumn w tabeli? 250-1600 w zależonoÅ›ci od typów kolumn - Makasymalna liczba indeksów na tabeli? nieograniczona -</PRE> - - OczywiÅ›cie "nieograniczony" nie jest prawdÄ… tak do koÅ„ca, istniejÄ… - ograniczenia wynikajÄ…ce z dostÄ™pnego miejsca na dysku, pamiÄ™ci/swapa. - Kiedy wielkoÅ›ci te bÄ™dÄ… bardzo duże może odbić siÄ™ to na wydajnoÅ›ci. - - <P>Maksymalny rozmiar tabeli, czyli 32 TB nie wymaga od systemu - operacyjnego wsparcia dla dużych plików. Duże tabele sÄ… przechowywane - jako pliki o rozmiarze 1 GB, wiÄ™c ograniczenia co do wielkoÅ›ci plików - narzucone przez system plików nie sÄ… istotne.</P> - - <P>Masymalny rozmiar tabeli i maksymalna liczba kolumn może być - zwiÄ™kszona jeÅ›li zwiÄ™kszymy domyÅ›lny rozmiar bloku (block size) do - 32k.</P> - - <H4><A name="4.6">4.6</A>) Jak dużo miejsca w bazie danych jest - konieczne aby przechowywać dane ze zwyczajnego pliku - tekstowego?</H4> - - <P>Baza danych PostgreSQL może potrzebować do piÄ™ciu razy wiÄ™cej - miejsca na przechowywanie danych z plików tekstowych niż ich - objÄ™tość.</P> - - <P>Jako przykÅ‚ad możemy rozważyć plik skÅ‚adajÄ…cy siÄ™ z 100,000 linii - zbudowanych z liczby caÅ‚kowitej oraz opisu tekstowego w każdej. - Załóżmy, że Å›rednio każdy Å‚aÅ„cuch tekstu w linii zajmuje 20 - bajtów. CaÅ‚y plik powinien zajmować ok. 2.8 MB. Rozmiar pliku bazy danych w - PostgreSQL zawierajÄ…cego te dane mozna oszacować na okoÅ‚o 6.4MB:</P> - -<PRE> - 36 bajtów: nagłówek każdego rzÄ™du w przybliżeniu) - 24 bajty: jedno pole int i jedno pole typu text - + 4 bajty: wkaźnik na stronie do krotki - -------------------------------------------------- - 64 bajty w jednym rzÄ™dzie - - Strona danych w PostgreSQL zajmuje 8192 bajtów (8 KB), wiÄ™c: - - 8192 bajtów na stronÄ™ - --------------------- = 128 rzÄ™dów na jednÄ… strone w bazie (zaokrÄ…glone w dół) - 64 bajtów na rzÄ…d - - 100000 rzÄ™dów danych - ----------------------- = 782 stron w bazie danych (zaokrÄ…glone w górÄ™) - 128 rzÄ™dów na stronÄ™ - -782 stron w bazie * 8192 bajtów na stronÄ™ = 6,406,144 bajtów (6.4 MB) -</PRE> - - <P>Indeksy nie powodujÄ… dużego narzutu na zajmowane miejsce, - ale zawierajÄ… pewne dane, - wiÄ™c w pewnych przypadkach moga być caÅ‚kiem duże.</P> - <P> NULLe sÄ… przechowywane jako mapy bitowe, wiÄ™c używajÄ… bardzo maÅ‚o - miejsca. - </P> - - <H4><A name="4.7">4.7</A>) Jak mogÄ™ sprawdzić jakie tabele, klucze, - bazy danych i użytkownicy sÄ… utworzeni?</H4> - - <P><I>psql</I> ma caÅ‚kiem dużą ilość poleceÅ„ z backslashem aby - wydobyć takie informacje. Wprowadź \? aby zobaczyć ich spis. IstniejÄ… - także tablice systemowe rozpoczynajÄ…ce siÄ™ od <i>pg_</i>, zawierajÄ…ce - interesujÄ…ce Ciebie informacje. Wykonanie <i>psql -l</i> pokaże spis - wszystkich baz danych.</P> - - <P>Obejrzyj także plik <I>pgsql/src/tutorial/syscat.source</I>. - Zawiera on wiele z zapytaÅ„ typu <SMALL>SELECT</SMALL>, które sÄ… - potrzebne aby wydobyć informacje z tablic systemowych.</P> - - <H4><A name="4.8">4.8</A>) Moje zapytania sÄ… wolne lub nie używajÄ… - kluczy. Dlaczego?</H4> - - Indeksy nie sÄ… używane automatycznie przez kążde z zapytaÅ„. Ideksy sÄ… - używane jedynie gdy tabela jest odpowiedniego rozmiaru, wiÄ™kszego niż - wymagany minimalny, a zapytanie wybiera jedynie maÅ‚y procent - zawartoÅ›ci tabeli. Wynika to z tego, że losowy dostep do dysku - powodowany przez ideksowane poszukiwanie jest czasami wolniejsze niż - poszukiwanie sekwencyjne bez użycia kluczy. - - <P>Å»eby zdecydować czy indeks powinien byc używany, PostgreSQL musi - mieć statystyki dotyczÄ…ce danej tabeli. SÄ… one gromadzone przez - użycie polecenia <SMALL>VACUUM ANALYZE</SMALL>, lub poprostu - <SMALL>ANALYZE</SMALL>. używajÄ…c statystyk, optymalizator wie ile - rzÄ™dów jest w tabeli i może lepiej okreÅ›lić czy indeksy powinny być - użyte. Statystyki mogÄ… być także pomocne w okreÅ›leniu najlepszej - kolejnoÅ›ci wykonania zÅ‚Ä…czenia (join) i jego sposobu. Gromadzenie - statystyk powinno siÄ™ odbywać w okreÅ›lonych interwaÅ‚ach czasu - ponieważ dane w tabelach zmieniajÄ… siÄ™.</P> - - <P>Indeksy nie sÄ… zazwyczaj używane przez <SMALL>ORDER BY</SMALL> lub - przy wykonywaniu zÅ‚Ä…czeÅ„ (join). Sekwencyjne przeszukiwanie po którym - nastÄ™puje sortowanie jest zazwyczaj szybsze niÄ™ wyszukiwanie za - pomocÄ… indeksu na dużej tabeli.</P> - <P>Jakkolwiek <SMALL>LIMIT</SMALL> w poÅ‚Ä…czeniu z <SMALL>ORDER BY</SMALL> - czÄ™sto bÄ™dzie wykorzystywaÅ‚ indeksy ponieważ jedynie maÅ‚a część z - tabeli jest zwracana. W rzeczywistoÅ›ci, chociaż MAX() i MIN() nie - używajÄ… indeksów, możliwe jest aby zwrócić te wartoÅ›ci używajÄ…c - indeksów poprzez użycie ORDER BY i LIMIT. - </P> - <PRE> - SELECT col - FROM tab - ORDER BY col [ DESC ] - LIMIT 1; - </PRE> - <P> - JeÅ›li uważasz, że optimizer myli siÄ™ wybierajÄ…c sequential scan, użyj - SET enable_seqscan TO 'off' i uruchom testy aby sprawdzić czy wtym - wypadku zapytanie bÄ™dzie szybciej wykonywane.</P> - - <P>Kiedy używa siÄ™ operatorów dopasujÄ…cych takich jak - <SMALL>LIKE</SMALL> lub <I>~</I>, indeksy bÄ™dÄ… używane jedynie w - pewnych wypadkach:</P> - <UL> - <LI>PoczÄ…tek wyszukiwania jest oparty na poczÄ…tku Å‚aÅ„cucha tekstu. - <UL> - <LI>wzorce <SMALL>LIKE</SMALL> nie mogÄ… siÄ™ zaczynać <I>%</I></LI> - <LI>dopasowania operatorem <I>~</I> (dopasowania regularne) - muszÄ… siÄ™ zaczynać znakiem specjalnym <I>^</I>.</LI> - </UL></LI> - <LI>PoczÄ…tek wyszukiwania nie może siÄ™ zaczynać od klas znaków, np. - [a-e].</LI> - <LI>Case-insensitive searches such as ILIKE and ~* do not utilise - indexes. Instead, use functional indexes, which are described in - section 4.12.</LI> - <LI>Standardowe locale C musi być uzyte przy wykonywaniu initdb</LI> - </UL> - <H4><A name="4.9">4.9</A>) Jak mogÄ™ sprawdzić w jakis sposób "query - optimizer" wykonuje moje zapytanie?</H4> - - <P>Zobacz manual dla polecenia <SMALL>EXPLAIN</SMALL>.</P> - - <H4><A name="4.10">4.10</A>) Co to jest "R-tree index"?</H4> - - <P>Indeks R-tree jest używany do indeksowania danych przestrzennych. - Indeks hasuujÄ…cy nie nadaje siÄ™ do wyszukiwania odlegÅ‚oÅ›ci. - Natomiast indeks typu B-tree może wyszukiwać odlegloÅ›ci jedynie w - jednowymiarowych przestrzeniach. R-tree indeks radzi sobie z - przestrzeniami wielo-wymiarowymi. Dla przykÅ‚adu, jeÅ›li zostanie - zaÅ‚ożony indeks typu R-tree na polu typu <I>point</I>, system może - bardziej wydajnie odpowiadać na zapytania typu - "select all points within a bounding rectangle."</P> - - <P>ŹródÅ‚owym dokumentem opisujÄ…cym oryginalnie projektowanie R-tree - indeksów jest:</P> - - <P>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.</P> - - <P>Ten dokument możesz znaleźć także w pracy Stonebraker'a "Readings in - Database Systems".</P> - - <P>Wbudowane indeksy R-trees radzÄ… sobie w wielobokami i boxes. - Teoretycznie, indeksy R-tree mogÄ… być rozszerzone o możliwoÅ›ci - indeksowania w wiÄ™cej wymiarowych przestrzeniach. W praktyce, - rozbudowa indeksów R-tree wymaga trochÄ™ pracy, a w tej chwili nie - dysponujemy jakÄ…kolwiek dokumentacjÄ… jak to zrobić.</P> - - <H4><A name="4.11">4.11</A>) Co to jest "Genetic Query - Optimizer"?</H4> - - <P>ModuÅ‚ <SMALL>GEQO</SMALL> ma za zadanie przyspieszenie - optymalizacji zapytaÅ„ Å‚Ä…czÄ…c wiele tabel za pomocÄ… algorytmów - genetycznych (Genetic Algorithm (GA)). Pozwala na używanie dużych - zapytaÅ„ Å‚Ä…czÄ…cych tabele (join queries) bez wykorzystywania - zasobożernego wyszukiwania.</P> - - <H4><A name="4.12">4.12</A>) Jak mogÄ™ używać wyrażeÅ„ regularnych w - zapytaniach i zapytaÅ„ case-insensitive w wyrażeniach - regularnych? - Jak korzystać z indeksów dla zapytaÅ„ case-insensitive?</H4> - - <P>Operator <I>~</I> moze być wykorzystywany do wyszukiwania za - pomocÄ… wyrażeÅ„ regularnych, a - <I>~*</I> do wyszukiwania case-insensitive z wyrażeniami - regularnymi. - Wariant case-insensitive dla <SMALL>LIKE</SMALL> zostaÅ‚ nazwany - <SMALL>ILIKE</SMALL>.</P> - - <P>Porównania case-insensitive sÄ… zazwyczaj wykonywane w nastÄ™pujÄ…cy - sposób:</P> -<PRE> - SELECT * - FROM tab - WHERE lower(col) = 'abc' - -</PRE> - W tym wypadku standardowe indeksy nie bÄ™dÄ… używane. Możesz utworzyć - indeks funkcyjny, poprzez: -<PRE> - CREATE INDEX tabindex on tab (lower(col)); - -</PRE> - - <H4><A name="4.13">4.13</A>) Jak sprawdzić w zapytaniu czy pole ma - wartość <SMALL>NULL</SMALL>?</H4> - - <P>Możesz to sprawdzić, testujÄ…c wartość kolumny warunkiem - <SMALL>IS NULL</SMALL> albo <SMALL>IS NOT NULL</SMALL>.</P> - - <H4><A name="4.14">4.14</A>) Jaka jest różnica pomiÄ™dzy różnymi - typami tekstowymi (character types)?</H4> -<PRE> -Type Nazwa wewnÄ™trzna Uwagi --------------------------------------------------- -VARCHAR(n) varchar rozmiar okreÅ›la maksymalnÄ… dÅ‚ugość, nie ma tutaj wypeÅ‚niania -CHAR(n) bpchar wypeÅ‚niane pustymi znakami do podanej dÅ‚ugoÅ›ci -TEXT text bez limitu na dÅ‚ugość Å‚aÅ„cucha -BYTEA bytea zmiennej dÅ‚ugoÅ›ci tablica bajtów (null-byte safe) -"char" char 1 znak -</PRE> - - <P>JeÅ›li bÄ™dziesz przeglÄ…dać katalogi systemowe lub komunikaty o - bÅ‚Ä™dach czÄ™sto spotkasz siÄ™ z podanymi powyżej nazwami - wewnÄ™trznymi.</P> - - <P>Pierwsze cztery typy powyżej to tzw typy "varlena" (np. pierwsze - cztery bajty na dysku to dÅ‚ugość, po których jest data). Dlatego - faktyczna dÅ‚ugoÅ›c takiego Å‚aÅ„cucha jest trochÄ™ wiÄ™ksza niż - zadeklarowany rozmiar. Te typy także podlegajÄ… kompresji lub mogÄ… być - przechowywane out-of-line jako <SMALL>TOAST</SMALL>, wiÄ™c faktyczne - zużycie miejsca na dysku może być mniejsze niż oczekiwane.</P> - - <P> <SMALL>VARCHAR(n)</SMALL> jest - najodpowiedniejszy do przechowywania Å‚aÅ„cuchów o różnej dÅ‚ugoÅ›ci - ale okreÅ›la on maksymalnÄ… jego dÅ‚ugość. - - <SMALL>TEXT</SMALL> jest najlepszy dla Å‚aÅ„cuchów o dowolnej dÅ‚ugoÅ›ci, - nie przekraczajÄ…cej 1GB.</P> - - <P> - <SMALL>CHAR(n)</SMALL> jast najlepszym typem do przechowywania - Å‚aÅ„cuchów o tej samej dÅ‚ugoÅ›ci. CHAR(n) wypeÅ‚nia dane do żadanej - dÅ‚ugoÅ›ci, podczas gdy VARCHAR(n) przechowuje jedynie dane - dostarczone. - - <SMALL>BYTEA</SMALL> sÅ‚uży do przechowywania danych binarnych, - w szczególnoÅ›ci dla danych zawierajÄ…cych <SMALL>NULL</SMALL> bajty. - Wszystkie typy opisane tutaj maja podobne charakterystyki jeÅ›li - chodzi o wydajność.</P> - - <H4><A name="4.15.1">4.15.1</A>) Jak mogÄ™ utworzyć pole które samo - zwiÄ™ksza swojÄ… wartość?</H4> - - <P>PostgreSQL ma zaimplementowany typ <SMALL>SERIAL</SMALL>. - Automatycznie tworzy sekwencjÄ™ i indeks na tej kolumnie. Dla - przykladu:</P> -<PRE> - CREATE TABLE person ( - id SERIAL, - name TEXT - ); -</PRE> - zostanie automatycznie prztÅ‚umaczone na: -<PRE> - 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 ); -</PRE> - WiÄ™cej informacji o sekwencjach znajdziesz w manualu o - <I>create_sequence</I>. Możesz także użyć pola <I>OID</I> jako - unikalnej wartoÅ›ci dla każdego rzÄ™du danych. JeÅ›li bÄ™dziesz - potrzebowaÅ‚ z backupować dane robiÄ…c dump bazy i odtworzyć jÄ…, musisz - użyc <I>pg_dump</I> z opcjÄ… <I>-o</I> lub polecenia <SMALL>COPY - WITH OIDS</SMALL> aby zachować <SMALL>OIDy</SMALL>. - - <H4><A name="4.15.2">4.15.2</A>) Jak pobrać wartość pola typu - <SMALL>SERIAL</SMALL> po wykonaniu insert'u?</H4> - - <P>Jednym z podejść jest pobranie kolejnej wartoÅ›ci typu - <SMALL>SERIAL</SMALL> z sekwencji za pomocÄ… funkcji <I>nextval()</I> - <I>zanim</I> zostanie wstawiona, a później należy jej użyć. UżywajÄ…c - przykÅ‚adu z tabeli z punktu <A href="#4.15.1">4.15.1</A>, może to - wyglÄ…dać w Perlu na przykÅ‚ad w ten sposób:</P> - -<PRE> - new_id = output of "SELECT nextval('person_id_seq')" - INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal'); -</PRE> - BÄ™dziesz miaÅ‚ wtedy tÄ… wartość przechowanÄ… w zmiennej - <CODE>new_id</CODE> do użytku w innych zapytaniach (np. jako klucz - obcy do tabeli <CODE>person</CODE>). Warto zwrócić uwagÄ™, że nazwa - automatycznie utworzonej sekwencji - <SMALL>SEQUENCE</SMALL> bÄ™dzie nastÄ™pujÄ…ca: - <<I>tabela</I>>_<<I>kolumnatypuserial</I>>_<I>seq</I>, - gdzie - <I>tabela</I> i <I>kolumnatypuserial</I> sÄ… nazwami Twojej tabeli i - Twojej kolumny typu <SMALL>SERIAL</SMALL>. - - <P>Inne rozwiÄ…zanie to użycie funkcji <I>currval</I>() na pola typu - <SMALL>SERIAL</SMALL> po dodaniu nowej wartoÅ›ci do rzÄ™du zawierajÄ…cego - kolumnÄ™ typu <SMALL>SERIAL</SMALL> z wstawionÄ… domyÅ›lnie wartoÅ›ciÄ…, - np.</P> -<PRE> - INSERT INTO person (name) VALUES ('Blaise Pascal'); - new_id = output of "SELECT currval('person_id_seq')"; -</PRE> - Ostatecznie możesz użyć <A href="#4.16"><SMALL>OID</SMALL></A> - zwracanej po wykonaniu <SMALL>INSERT</SMALL>, chociaż to jest najmniej - przenoÅ›ne rozwiÄ…zanie. - W Perlu, wykorzystujÄ…c bibliotekÄ™ DBI z moduÅ‚em Edmunda Mergla - DBD::Pg, oid jest dostÄ™pny poprzez <I>$sth->{pg_oid_status}</I> po - wykonaniu <I>$sth->execute()</I>. - - <H4><A name="4.15.3">4.15.3</A>) Czy użycie <I>currval()</I> i - <I>nextval()</I> nie doprowadzi do race condition z innymi - użytkownikami?</H4> - - <P>Nie. currval() zwraca bieżącÄ… wartość przypisanÄ… przez Twój - backend, a nie przez wszystkich użytkowników.</P> - - <H4><A name="4.15.4">4.15.4</A>) Dlaczego numery sekwencji nie sÄ… - ponownie używane przy przerwaniu transakcji? - SkÄ…d siÄ™ biorÄ… luki w numerowaniu kolumny tabeli - sekwancjami/SERIALem?</H4> - - <P>Aby poprawić zbieżność (concurrency), wartoÅ›ci sekwencji sÄ… - podawane dziaÅ‚ajÄ…cym transakcjom kiedy tego potrzebujÄ… i nie sÄ… - blokowane dopóki transakcja siÄ™ nie zakoÅ„czy. To spowoduje przerwy w - numerowaniu z przerwanych transakcji.</P> - - <H4><A name="4.16">4.16</A>) Co to jest <SMALL>OID</SMALL>? Co to - jest <SMALL>TID</SMALL>?</H4> - - <P><SMALL>OID</SMALL> sÄ… PostgreSQL'owym rozwiÄ…zaniem problemu - unikalnych numerów rzÄ™dów. Każdy rzÄ…d tworzony przez PostgreSQL - otrzymuje unikalny <SMALL>OID</SMALL>. Wszystkie <SMALL>OID</SMALL>y - generowane podczas procesu uruchamianego przez skrypt - <I>initdb</I> majÄ… mniejszÄ… wartość niż 16384 (na podstawie pliku - <I>backend/access/transam.h</I>). Wszystkie - <SMALL>OID</SMALL>y tworzone przez użytkownika sa równe lub wiÄ™ksze - podanej wczeÅ›niej wartoÅ›ci. DomyÅ›lnie - wszystkie <SMALL>OID</SMALL>y sÄ… unikalne nie tylko w pojedyÅ„czej - tabeli czy bazie danych ale w caÅ‚ej instalacji PostgreSQL.</P> - - <P>PostgreSQL używa <SMALL>OIDów</SMALL> w swoim wewnÄ™trznym systemie - tabel, aby można byÅ‚o je Å‚Ä…czyć. - Te <SMALL>OIDy</SMALL> mogÄ… byc używane aby identyfikowac rzÄ™dy w - tabelach i wykorzystywać je w zÅ‚Ä…czeniach tych tabel. Zaleca siÄ™ abyÅ› - używaÅ‚ typu <SMALL>OID</SMALL> aby przechowywać wartoÅ›ci - <SMALL>OID</SMALL>. Możesz utworzyć indeks na polu - <SMALL>OID</SMALL> aby dostÄ™p do niego byÅ‚ szybszy.</P> - - <P><SMALL>OID</SMALL> sÄ… przypisane do wszystkich rzÄ™dów z jednego - głównego miejsca i używane sa przez wszystkie bazy danych. JeÅ›li - chciaÅ‚byÅ› zmienić <SMALL>OID</SMALL> na coÅ› innego, lub jeÅ›li - chciaÅ‚byÅ› zrobić kopiÄ™ tabeli, z orginalnymi <SMALL>OIDami</SMALL> - nie ma żadnego przeciwwskazania abyÅ› to zrobiÅ‚:</P> - -<PRE> - 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'; -<!-- - CREATE TABLE new_table (mycol int); - INSERT INTO new_table (oid, mycol) SELECT oid, mycol FROM old_table; ---> -</PRE> - - <P><SMALL>OIDy</SMALL> sÄ… przechowywane jako cztero-bajtowe liczby - caÅ‚kowite i skoÅ„czÄ… siÄ™ po osiÄ…gniÄ™ciu czterech miliardów. Nikt jak - dotÄ…d nie zgÅ‚osiÅ‚ aby coÅ› takiego siÄ™ stalo, ale mamy zamiar pozbyć - siÄ™ tego ograniczenia zanim ktoÅ› to zgÅ‚osi.</P> - - <P><SMALL>TID</SMALL> sÄ… używane aby zidentyfikować konkretne rzÄ™dy z - blokami i wartoÅ›ciÄ… ofsetów. <SMALL>TIDy</SMALL> zmieniajÄ… siÄ™ wraz - ze zmianami rzÄ™dów. Sa używane przez indeksy, aby wskazywać do - fizycznych rzÄ™dów.</P> - - <H4><A name="4.17">4.17</A>) Jakie jest znaczenie niektórych terminów - w PostgreSQL?</H4> - - <P>W części kodu źródÅ‚owego i starszej dokumentacji używamy terminów, - które majÄ… bardziej ogólne znaczenie. Oto niektóre z nich:</P> - - <UL> - <LI>table, relation, class</LI> - - <LI>row, record, tuple</LI> - - <LI>column, field, attribute</LI> - - <LI>retrieve, select</LI> - - <LI>replace, update</LI> - - <LI>append, insert</LI> - - <LI><SMALL>OID</SMALL>, serial value</LI> - - <LI>portal, cursor</LI> - - <LI>range variable, table name, table alias</LI> - </UL> - - <P>ListÄ™ terminów zwiÄ…zanych z bazami danych możesz znaleźć pod tym - adresem:<A - href="http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.html">http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.html</A>.</P> - - <H4><A name="4.18">4.18</A>) SkÄ…d bierze siÄ™ ten bÅ‚Ä…d <I>"ERROR: - Memory exhausted in AllocSetAlloc()"</I>?</H4> - - <P> - Prawdopodobnie wyczerpaÅ‚a Ci siÄ™ pamięć wirtualna (virtual memory) - w systemie lub Twój kernel ma zbyt nisko - ustawione limity dla pewnych zasobów. Spróbuj wykonać nastÄ™pujÄ…ce - polecenia zanim uruchomisz <I>postmaster'a</I>:</P> -<PRE> - ulimit -d 262144 - limit datasize 256m -</PRE> - W zależnoÅ›ci od shell'a jakiego używasz jedno z tych poleceÅ„ może nie - zadziaÅ‚ać, ale to ustawienie pozwoli ustawić segment danych dla - procesu znacznie wiÄ™kszy i być może pozwoli wykonać zapytanie. - To polecenie zadziaÅ‚a dla bieżącego procesu oraz wszytkich podprocesów - utworzonych po wykonaniu polecenia. JeÅ›li ten problem wystÄ™puje z - klientem <SMALL>SQL</SMALL>, ponieważ backend zwraca zbyt dużo danych, - spróbuj wykonać to polecenie przed uruchomieniem klienta. - - <H4><A name="4.19">4.19</A>) Jak sprawdzić jakiej wersji PostgreSQL - używam?</H4> - - <P>W <I>psql</I>, wpisz <CODE>select version();</CODE></P> - - <H4><A name="4.20">4.20</A>) Dlaczego operacje, które wykonujÄ™ na - dużych obiektach "large-object" zwracajÄ… komunikat: - <I>"invalid large obj descriptor"</I>?</H4> - - <P>Musisz użyć <CODE>BEGIN WORK</CODE> i <CODE>COMMIT</CODE> - przed i po użyciu uchwytu do dużego obiektu, tzn. musisz nimi otoczyć - funkcje <CODE>lo_open</CODE> ... <CODE>lo_close.</CODE></P> - - <P>Obecnie PostgreSQL używjÄ…c "rule" zamyka uchwyt do dużego obiektu - przy każdym wywoÅ‚aniu "commit". WiÄ™c pierwsze próba zrobienia - czegokolwiek z uchwytem spowoduje wypisanie: <I>invalid large obj - descriptor</I>. Kod, który do tej pory dziaÅ‚aÅ‚ (przynajmniej - wiÄ™kszość razy) bÄ™dzie teraz generowaÅ‚ informacjÄ™ o bÅ‚Ä™dzie jeÅ›li nie - bÄ™dziesz korzystaÅ‚ z transakcji.</P> - - <P>JeÅ›li używasz interfejsu klienta jak <SMALL>ODBC</SMALL> być może - bÄ™dziesz musiaÅ‚ ustawić <CODE>auto-commit off.</CODE></P> - - <H4><A name="4.21">4.21</A>) Jak stworzyć kolumnÄ™ której domyÅ›lnÄ… - wartoÅ›ciÄ… bÄ™dzie bieżący czas?</H4> - - <P>Użyj <I>CURRENT_TIMESTAMP</I>:</P> -<PRE> -<CODE>CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP ); -</CODE> -</PRE> - - <H4><A name="4.22">4.22</A>) Dlaczego zapytania używajÄ…ce - <CODE><SMALL>IN</SMALL></CODE> sa takie wolne?</H4> - - <P>W wersjach wczeÅ›niejszych niż 7.4 Å‚Ä…czymy podzapytania w outer queries - poprzez sekwencyjne przeszukiwanie wyników podzapytania dla każdego rzÄ™du - z outer query. JeÅ›li podzapytanie zwraca jedynie kilka rzÄ™dów a - zewnÄ™trzne zapytanie zwraca ich wiele, IN jest najszybsze. - Aby przyspieszyć inne zapytania można zastÄ…pić <CODE>IN</CODE> przez - <CODE>EXISTS</CODE>:</P> -<PRE> -<CODE>SELECT * - FROM tab - WHERE col IN (SELECT subcol FROM subtab) -</CODE> -</PRE> - na: -<PRE> -<CODE>SELECT * - FROM tab - WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col) -</CODE> -</PRE> - <P> - Aby to rozwiÄ…zanie byÅ‚o szybkie, subcol powinna być kolumnÄ… - indeksowanÄ…. - </P> - <P> - W wersji 7.4 i późniejszych, IN w rzeczywistoÅ›ci używa tej samej - wyrafinowanej techniki Å‚Ä…czenia jak normalne zapytania i jest - preferowane nad używaniem EXISTS. - </P> - <H4><A name="4.23">4.23</A>) Jak wykonać "outer join"?</H4> - - <P>PostgreSQL ma zaimplementowane outer join - wykorzystujÄ…c standardowÄ… skÅ‚adniÄ™ SQL. Poniżej dwa przykÅ‚ady:</P> - -<PRE> - SELECT * - FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col); -</PRE> - or -<PRE> - SELECT * - FROM t1 LEFT OUTER JOIN t2 USING (col); -</PRE> - - <P>Te dwa identyczne zapytania Å‚Ä…czÄ… kolumnÄ™ t1.col z kolumnÄ… t2.col, - ale także zwrócÄ… niepoÅ‚Ä…czone rzÄ™dy w t1 (te, które nie pasujÄ… w t2). - <SMALL>RIGHT</SMALL> join dodaÅ‚by niepoÅ‚Ä…czone rzÄ™dy z tabeli t2. - <SMALL>FULL</SMALL> join zwróciÅ‚by rzÄ™dy plus dodatkowo wszystkie - rzÄ™dy z tabel t1 i t2. SÅ‚owo <SMALL>OUTER</SMALL> jest opcjonalne i - jest dodawane domyÅ›lnie przy - <SMALL>LEFT</SMALL>, <SMALL>RIGHT</SMALL>, i <SMALL>FULL</SMALL> - join'ach. ZwykÅ‚e join'y sÄ… nazywane <SMALL>INNER</SMALL> joins.</P> - - <P>W poprzednich wersjach "outer joins" mogÄ… być zasymulowane poprzez - użycie slowa kluczowego - <SMALL>UNION</SMALL> i <SMALL>NOT IN</SMALL>. Dla przykÅ‚adu, Å‚Ä…czÄ…c - tabele <I>tab1</I> i <I>tab2</I>, nastÄ™pujÄ…ce zapytanie wykonuje - <I>outer</I> join:<BR> - <BR> - </P> -<PRE> - 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 -</PRE> - - <H4><A name="4.24">4.24</A>) Jak wykonywać zapytanie używajÄ…ce kilku - baz danych jednoczeÅ›nie?</H4> - - <P>Nie ma takiej możliwoÅ›ci aby w zapytaniu odpytawać innÄ… baze danych - poza bieżącÄ…. Ponieważ PostgreSQL Å‚aduje specyficzne dla bazy danych - katalogi systemowe, nie jest do koÅ„ca jasne jak zapytanie pomiÄ™dzy - różnymi bazami danych powinno siÄ™ zachowywać.</P> - - <P><I>contrib/dblink</I> pozwala na wykonywanie zapytaÅ„ poprzez różne - bazy danych wywoÅ‚ujÄ…c odpowiednie funkcje. OczywiÅ›cie klient może Å‚Ä…czyć - siÄ™ z różnymi bazami danych i Å‚Ä…czyć informacjÄ™ w ten sposób uzyskanÄ… - po stronie klienta.</P> - - <H4><A name="4.25">4.25</A>) Jak zwrócić w funkcji wiele rzÄ™dów lub - kolumn?</H4> - - <P>Możesz w Å‚atwy sposób zwracać wiele rzÄ™dów lub kolumn używajÄ…c - funkcji z: <A href="http://techdocs.postgresql.org/guides/SetReturningFunctions">http://techdocs.postgresql.org/guides/SetReturningFunctions</A>.</P> - - <H4><A name="4.26">4.26</A>) Dlaczego nie mogÄ™ w sposób pewny - tworzyć/usuwać tabel tymczasowych w funkcjach PL/PgSQL?</H4> - <P> - PL/PgSQL przechowuje w cache zawartość funkcji, niepożądanym efektem tego - jest to, że gdy taka funkcja korzysta z tabel tymczasowych, które sÄ… - później kasowane i odtwarzane, a funkcja wywoÅ‚ywana jest ponownie,jej - wywoÅ‚anie nie powiedzie siÄ™ ponieważ cachowana funkcja wciąż bÄ™dzie - wskazywać na stara tablicÄ™ tymczasowÄ…. RozwiÄ…zaniem tego problemu jest - używanie EXECUTE aby korzystać z tabel tymczasowych w PL/PgSQL. To - spowoduje, że zapytanie bÄ™dzie parsowane przy każdym wywoÅ‚aniu - funkcji. - </P> - - <H4><A name="4.27">4.27</A>) Jakie sÄ… możliwoÅ›ci replikacji w PostgreSQL?</H4> - <P> - Jest kilka opcji aby stosować replikacjÄ™ typu master/slave. Ten typ - pozwala jedynie masterowi na dokonywanie zmian w bazie danych, a - slave może jedynie te zmiany odczytywać. Na stronie - <A - href="http://gborg.PostgreSQL.org/genpage?replication_research">http://gborg.PostgreSQL.org/genpage?replication_research</A> - znajduje siÄ™ ich lista. Replikacja typu multi-master jest w trakcie - prac, opis projektu znajduje siÄ™ pod adresem: <A - href="http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php"> -http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php</A>. - </P> - - <H4><A name="4.28">4.28</A>) Jakie możliwoÅ›ci szyfrowania oferuje - PostgreSQL?</H4> - <UL> - <LI>contrib/pgcrypto zawiera wiele funkcji za pomocÄ…, których możemy używać - kryptografii w zapytaniach SQL.</LI> - <LI>Aby szyfrować transmisjÄ™ od klienta do serwera, ten musi mieć - ustawionÄ… opcjÄ™ ssl na true w pliku postgresql.conf, odpowiedni - wpis host lub hostssl musi wystÄ™pować w pliku pg_hba.conf, oraz - sslmode nie może być wyÅ‚Ä…czone w kliencie. (Warto zwrócić uwagÄ™, że - możliwe jest także używanie transportów szyfrujÄ…ców przez strony - trzecie, takie jak stunnel lub ssh, poza natywnym wsparciem dla SSL - przez PostgreSQL).</LI> - <LI>HasÅ‚a użytkowników bazy danych sÄ… automatycznie szyfrowane od - wersji 7.3. W poprzednich wersjach, należy tÄ… funkcjonalność poprzez - wÅ‚Ä…czenie opcji PASSWORD_ENCRYPTION w postgresql.conf. </LI> - <LI>Serwer może dziaÅ‚ać używajÄ…c szyfrowanego systemu plików.</LI> - </UL> - - <H2 align="center">Rozwijanie PostgreSQL</H2> - - <H4><A name="5.1">5.1</A>) NapisaÅ‚em wÅ‚asnÄ… funkcjÄ™. Kiedy użyjÄ™ jej - w <I>psql</I>, program zrzuca pamięć (dump core)?</H4> - - <P>Problem może być spowodowany przez bardzo wiele rzeczy. Spróbuj - najpierw przetestować TwojÄ… funkcjÄ™ w samodzielnie dziaÅ‚ajÄ…cym programie. - </P> - - <H4><A name="5.2">5.2</A>) Jak mogÄ™ dodać/zgÅ‚osić nowe typy czy - funkcje do PostgreSQL?</H4> - - <P>WyÅ›lij Twoje propozycje na listÄ™ mailowÄ… <I>pgsql-hackers</I>, - wtedy prawdopodobnie Twój kod znajdzie siÄ™ w katalogu <I>contrib/</I>.</P> - - <H4><A name="5.3">5.3</A>) Jak napisać funkcjÄ™ C zwracajÄ…cÄ… krotkÄ™ - (tuple)?</H4> - - <P> - W wersjach PostgreSQL od numeru 7.3, funckje zwracajÄ…ce tabele sÄ… w - pÄ™lni wspierane w C, PL/PgSQL i SQL. Sprawdź w Programmer's Guide aby - uzyskać wiÄ™cej informacji. PrzykÅ‚ad funkcji napisanej w C zwracajÄ…cej - tabelÄ™ zostaÅ‚ umieszczony w <I>contrib/tablefunc</I>. - </P> - - <H4><A name="5.4">5.4</A>) ZmieniÅ‚em plik źródÅ‚owy. Dlaczego po - rekompilacji nie widać zmiany?</H4> - - <P>Pliki <I>Makefiles</I> nie majÄ… dorzuconych odpowiednich - zależnoÅ›ci dla plików nagłówkowych (include files). Wykonaj najpierw - <I>make clean</I>, a nastÄ™pnie ponownie <I>make</I>. - JeÅ›li używasz <SMALL>GCC</SMALL> możesz użyć opcji - <I>--enable-depend</I> przy wykonywaniu <I>configure</I> aby - kompilator mógÅ‚ okreÅ›lić zależnoÅ›ci samodzielnie. - </P> - </BODY> -</HTML> - diff --git a/doc/src/FAQ/FAQ_russian.html b/doc/src/FAQ/FAQ_russian.html deleted file mode 100644 index e92ce71c06293f83a0722b025a46bf2ae38c7808..0000000000000000000000000000000000000000 --- a/doc/src/FAQ/FAQ_russian.html +++ /dev/null @@ -1,1197 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD html 4.01 transitional//EN"> - -<HTML> - <!-- DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN" --> - - <HEAD> - <META name="generator" content="HTML Tidy, see www.w3.org"> - <META http-equiv="Content-Type" content="text/html; charset=utf8"> - <TITLE>PostgreSQL FAQ</TITLE> - </HEAD> - - <BODY bgcolor="#ffffff" text="#000000" link="#ff0000" vlink="#a00000" alink="#0000ff"> - <H1>Ответы на чаÑто задаваемые вопроÑÑ‹ по PostgreSQL</H1> - - <P>Дата поÑледнего обновлениÑ: Среда 25 Ð¸ÑŽÐ½Ñ 23:54:14 EDT 2008</P> - - <P>ÐнглийÑкий вариант Ñопровождает: Ð‘Ñ€ÑŽÑ ÐœÐ¾Ð¼ÑŒÑн (Bruce Momjian) (<A href= - "mailto:bruce@momjian.us">bruce@monjian.us</A>) - </P> - <P>Перевёл на руÑÑкий: Виктор ВиÑлобоков (<A href= - "mailto:admin@postgresql.ru.net">admin@postgresql.ru.net</A>)<BR> - </P> - - <P>Самую Ñвежую английÑкую верÑию документа можно найти на - <A href="http://www.postgresql.org/files/documentation/faqs/FAQ.html">http://www.postgresql.org/files/documentation/faqs/FAQ.html</A>.</P> - - <P>Самую Ñвежую руÑÑкую верÑию документа можно найти на - <A href="http://postgresql.ru.net/docs/FAQ_russian.html">http://postgresql.ru.net/docs/FAQ_russian.html</A>.</P> - - <P>Ответы на вопроÑÑ‹ Ñпецифичные Ð´Ð»Ñ ÐºÐ¾Ð½ÐºÑ€ÐµÑ‚Ð½Ñ‹Ñ… платформ можно найти на - <A href="http://www.postgresql.org/docs/faq/">http://www.postgresql.org/docs/faq/</A>.</P> - <HR> - - <H2 align="center">Общие вопроÑÑ‹</H2> - <A href="#item1.1">1.1</A>) Что такое PostgreSQL? Как произноÑитÑÑ Ñто название? Что такое Postgres?<BR> - <A href="#item1.2">1.2</A>) Кто управлÑет PostgreSQL?<BR> - <A href="#item1.3">1.3</A>) Каковы авторÑкие права на PostgreSQL?<BR> - <A href="#item1.4">1.4</A>) Ðа каких платформах работает PostgreSQL?<BR> - <A href="#item1.5">1.5</A>) Где можно взÑÑ‚ÑŒ PostgreSQL?<BR> - <A href="#item1.6">1.6</A>) ÐšÐ°ÐºÐ°Ñ Ð²ÐµÑ€ÑÐ¸Ñ Ð½Ð°Ð¸Ð±Ð¾Ð»ÐµÐµ ÑвежаÑ?<BR> - <A href="#item1.7">1.7</A>) Где получить поддержку?<BR> - <A href="#item1.8">1.8</A>) Как мне Ñообщить об ошибке?<BR> - <A href="#item1.9">1.9</A>) Как найти информацию об извеÑтных ошибках или отÑутÑтвующих - возможноÑÑ‚ÑÑ…?<BR> - <A href="#item1.10">1.10</A>) ÐšÐ°ÐºÐ°Ñ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ Ð¸Ð¼ÐµÐµÑ‚ÑÑ Ð² наличии?<BR> - <A href="#item1.11">1.11</A>) Как научитьÑÑ <SMALL>SQL</SMALL>?<BR> - <A href="#item1.12">1.12</A>) Как мне отправить иÑправление или приÑоединитÑÑ Ðº команде разработчиков?<BR> - <A href="#item1.13">1.13</A>) Как Ñравнить PostgreSQL Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð¸ - <SMALL>СУБД</SMALL>? Может ли PostgreSQL быть вÑтроенной?<BR> - <A href="#item1.14">1.14</A>) Будет ли PostgreSQL работать Ñ Ð¿Ð¾Ñледними изменениÑми, в разных Ñтраных, - каÑающимиÑÑ Ð´Ð½ÐµÐ²Ð½Ð¾Ð³Ð¾ времени?<BR> - <A href="#item1.15">1.15</A>) Как мне отпиÑатьÑÑ Ð¾Ñ‚ ÑпиÑков раÑÑылки PostgreSQL? - Как избежать Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð´ÑƒÐ±Ð»Ð¸Ñ€ÑƒÑŽÑ‰Ð¸Ñ…ÑÑ Ñообщений?<BR> - - <H2 align="center">ВопроÑÑ‹ пользователей по клиентÑкой чаÑти</H2> - <A href="#item2.1">2.1</A>) Какие интерфейÑÑ‹ еÑÑ‚ÑŒ Ð´Ð»Ñ PostgreSQL?<BR> - <A href="#item2.2">2.2</A>) Какие инÑтрументы ÑущеÑтвуют Ð´Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ - PostgreSQL через Web?<BR> - <A href="#item2.3">2.3</A>) ЕÑÑ‚ÑŒ ли у PostgreSQL графичеÑкий Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ - пользователÑ?<BR> - - - <H2 align="center">ВопроÑÑ‹ админиÑтрированиÑ</H2> - <A href="#item3.1">3.1</A>) Как мне уÑтановить PostgreSQL в меÑто отличное - от <I>/usr/local/pgsql</I>?<BR> - <A href="#item3.2">3.2</A>) Как мне управлÑÑ‚ÑŒ ÑоединениÑми от других - компьютеров?<BR> - <A href="#item3.3">3.3</A>) Какие наÑтройки мне нужно Ñделать Ð´Ð»Ñ ÑƒÐ»ÑƒÑ‡ÑˆÐµÐ½Ð¸Ñ - производительноÑти?<BR> - <A href="#item3.4">3.4</A>) Какие возможноÑти Ð´Ð»Ñ Ð¾Ñ‚Ð»Ð°Ð´ÐºÐ¸ еÑÑ‚ÑŒ в наличии?<BR> - <A href="#item3.5">3.5</A>) Почему Ñ Ð¿Ð¾Ð»ÑƒÑ‡Ð°ÑŽ Ñообщение <I>"Sorry, too many - clients"</I> когда пытаюÑÑŒ подключитьÑÑ Ðº базе?<BR> - <A href="#item3.6">3.6</A>) Как выполнить обновление PostgreSQL?<BR> - <A href="#item3.7">3.7</A>) Какое компьютерное "железо" Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ - иÑпользовать?<BR> - - - <H2 align="center">ВопроÑÑ‹ ÑкÑплуатации</H2> - <A href="#item4.1">4.1</A>) Как выполнить <SMALL>SELECT</SMALL> только - Ð´Ð»Ñ Ð½ÐµÑкольких первых Ñтрочек запроÑа? Ð”Ð»Ñ Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð»ÑŒÐ½Ð¾Ð¹ Ñтроки?<BR> - <A href="#item4.2">4.2</A>) Как мне найти какие таблицы, индекÑÑ‹, - базы данных и пользователи ÑущеÑтвуют? Как мне увидеть запроÑÑ‹, - которые иÑпользует <I>psql</I> Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ñтой информации?<BR> - <A href="#item4.3">4.3</A>) Как изменить тип данных колонки?<BR> - <A href="#item4.4">4.4</A>) Каковы макÑимальные размеры Ð´Ð»Ñ Ñтрок в таблице, - таблиц и базы данных?<BR> - <A href="#item4.5">4.5</A>) Как много диÑкового проÑтранÑтва в базе данных - нужно Ð´Ð»Ñ ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ… из обычного текÑтового файла?<BR> - <A href="#item4.6">4.6</A>) Почему мои запроÑÑ‹ работают медлено? Почему - они не иÑпользуют мои индекÑÑ‹?<BR> - <A href="#item4.7">4.7</A>) Как поÑмотреть на то, как оптимизатор выполнÑет - мой запроÑ?<BR> - <A href="#item4.8">4.8</A>) Как мне выполнить поиÑк регулÑрного Ð²Ñ‹Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ - и поиÑк незавиÑимый от региÑтра букв поиÑк регулÑрного выражениÑ? - Как мне иÑпользовать Ð¸Ð½Ð´ÐµÐºÑ Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка незавиÑимого от региÑтра букв?<BR> - <A href="#item4.9">4.9</A>) Как мне определить, что значение Ð¿Ð¾Ð»Ñ Ð² каком-либо - запроÑе равно <SMALL>NULL</SMALL>? Как мне Ñоединить возможные - <SMALL>NULL</SMALL>? Могу Ñ Ñортировать Ð¿Ð¾Ð»Ñ <SMALL>NULL</SMALL> или нет?<BR> - <A href="#item4.10">4.10</A>) Каковы Ð¾Ñ‚Ð»Ð¸Ñ‡Ð¸Ñ Ð¼ÐµÐ¶Ð´Ñƒ разными Ñимвольными - типами?<BR> - <A href="#item4.11.1">4.11.1</A>) Как мне Ñоздать поле serial/Ñ-авто-увеличением?<BR> - <A href="#item4.11.2">4.11.2</A>) Как мне получить значение при вÑтавке - <SMALL>SERIAL</SMALL>?<BR> - <A href="#item4.11.3">4.11.3</A>) Ðе может ли получитьÑÑ Ñ‚Ð°Ðº, что - иÑпользование <I>currval()</I> и <I>nextval()</I> приведет к - зациклированию Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð¸ пользователÑми?<BR> - <A href="#item4.11.4">4.11.4</A>) Почему чиÑла из моей поÑледовательноÑти - не иÑпользуютÑÑ Ñнова при отмене транзакции? Почему ÑоздаютÑÑ Ñ€Ð°Ð·Ñ€Ñ‹Ð²Ñ‹ - при нумерации в колонке, где Ñ Ð¸Ñпользую поÑледовательноÑÑ‚ÑŒ/SERIAL?<BR> - <A href="#item4.12">4.12</A>) Что такое <SMALL>OID</SMALL>? Что такое - <SMALL>CTID</SMALL>?<BR> - <A href="#item4.13">4.13</A>) Почему Ñ Ð¿Ð¾Ð»ÑƒÑ‡Ð°ÑŽ ошибку <I>"ERROR: Memory - exhausted in AllocSetAlloc()"</I>?<BR> - <A href="#item4.14">4.14</A>) Как мне узнать, ÐºÐ°ÐºÐ°Ñ Ð²ÐµÑ€ÑÐ¸Ñ PostgreSQL - запущена?<BR> - <A href="#item4.15">4.15</A>) Как мне Ñоздать колонку ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð¿Ð¾ умолчанию - будет Ñодержать текущее времÑ?<BR> - <A href="#item4.16">4.16</A>) Как выполнить внешнее ÑвÑзывание?<BR> - <A href="#item4.17">4.17</A>) Как выполнÑÑ‚ÑŒ запроÑÑ‹, иÑпользующие неÑколько - баз данных?<BR> - <A href="#item4.18">4.18</A>) Как мне вернуть из функции неÑколько Ñтрок таблицы?<BR> - <A href="#item4.19">4.19</A>) Почему Ñ Ð¿Ð¾Ð»ÑƒÑ‡Ð°ÑŽ ошибку "relation with OID #### - не ÑущеÑтвует", когда обращаютÑÑŒ к временным таблицам в функциÑÑ… PL/PgSQL?<BR> - <A href="#item4.20">4.20</A>) Какие еÑÑ‚ÑŒ Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ñ€ÐµÐ¿Ð»Ð¸ÐºÐ°Ñ†Ð¸Ð¸?<BR> - <A href="#item4.21">4.21</A>) Почему имена таблицы и колонок не - раÑпознаютÑÑ Ð² в моём запроÑе? Почему не ÑохранÑÑŽÑ‚ÑÑ Ð·Ð°Ð³Ð»Ð°Ð²Ð½Ñ‹Ðµ буквы?<BR> - - <HR> - - <H2 align="center">Общие вопроÑÑ‹</H2> - - <H3><A name="item1.1">1.1</A>) Что такое PostgreSQL? Как произноÑитÑÑ Ñто название? Что такое Postgres?</H3> - - <P>PostgreSQL произноÑитÑÑ <I>Post-Gres-Q-L (ПоÑÑ‚-ГреÑ-Кью-Ðл)</I>. - (Ð”Ð»Ñ Ð¾Ñобо любопытÑтвующих как произноÑить "PostgreSQL", ÑущеÑтвует - <A href="http://www.postgresql.org/files/postgresql.mp3">аудио-файл</A>). - </P> - - <P>PostgreSQL - Ñто объектно-релÑÑ†Ð¸Ð¾Ð½Ð½Ð°Ñ ÑиÑтема ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð±Ð°Ð·Ð°Ð¼Ð¸ - данных (СУБД), ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð¸Ð¼ÐµÐµÑ‚ традиционные возможноÑти коммерчеÑких - <small>СУБД</small> Ñ Ñ€Ð°ÑширениÑми, которые еÑÑ‚ÑŒ в <small>СУБД</small> - нового поколениÑ. PostgreSQL - Ñто Ñвободное и полноÑтью открытое - программное обеÑпечение.</P> - - <P>Разработку PostgreSQL выполнÑет команда разработчиков, разброÑÐ°Ð½Ð½Ð°Ñ - по вÑему миру и ÑвÑÐ·Ð°Ð½Ð½Ð°Ñ Ñ‡ÐµÑ€ÐµÐ· Интернет. Разработка ÑвлÑетÑÑ - общеÑтвенным проектом и не управлÑетÑÑ ÐºÐ°ÐºÐ¾Ð¹-либо компанией. - ПодробноÑти Ñмотрите в FAQ Ð´Ð»Ñ Ñ€Ð°Ð·Ñ€Ð°Ð±Ð¾Ñ‚Ñ‡Ð¸ÐºÐ¾Ð², - <A href="http://www.postgresql.org/docs/faqs.FAQ_DEV.html"> - http://www.postgresql.org/docs/faqs.FAQ_DEV.html</A> - </P> - - <P>Postgres — Ñто широко иÑпользуемое Ñокращение Ð´Ð»Ñ PostgreSQL. - Первоначальным именем проекта в Беркли было Postgres и Ñтот ник теперь - наиболее популÑрен в разговорах о PostgreSQL по Ñравнению Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð¸. - ЕÑли вам трудно полноÑтью проговаривать 'PostgreSQL', можно проÑто - говорить 'Postgres'.</P> - - <H3><A name="item1.2">1.2</A>) Кто управлÑет PostgreSQL?</H3> - - <P>ЕÑли вы ищите какого-то оÑобенного человека, центральный - комитет или управлÑющую компанию, то напраÑно --- их нет. - У Ð½Ð°Ñ ÐµÑÑ‚ÑŒ Ñдро комитета и разработчиков, работающих Ñ CVS, - но Ñти группы Ñлужат больше Ð´Ð»Ñ Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñтративных целей, чем - Ð´Ð»Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ. Проект напрÑмую функционирует Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ - ÑообщеÑтва разработчиков и пользователей, к которому может - приÑоединитÑÑ ÐºÐ°Ð¶Ð´Ñ‹Ð¹. Ð’ÑÑ‘ что нужно -- Ñто подпиÑатьÑÑ Ð½Ð° - ÑпиÑки раÑÑылки и учаÑтвовать в диÑкуÑÑиÑÑ…. (ПодробноÑти о - том как включитьÑÑ Ð² разработку PostgreSQL Ñмотрите в - <a href="http://www.postgresql.org/docs/faqs.FAQ_DEV.html"> - FAQ Ð´Ð»Ñ Ñ€Ð°Ð·Ñ€Ð°Ð±Ð¾Ñ‚Ñ‡Ð¸ÐºÐ¾Ð²</A>.)</P> - - <H3><A name="item1.3">1.3</A>) Каковы авторÑкие права на PostgreSQL?</H3> - - <P>PostgreSQL раÑпроÑтранÑетÑÑ Ð¿Ð¾ клаÑÑичеÑкой лицензии BSD. Ðта - Ð»Ð¸Ñ†ÐµÐ½Ð·Ð¸Ñ Ð½Ðµ Ñодержит ограничений на то, как будет иÑпользоватьÑÑ - иÑходный код. Ðам нравитÑÑ Ñта Ð»Ð¸Ñ†ÐµÐ½Ð·Ð¸Ñ Ð¸ у Ð½Ð°Ñ Ð½ÐµÑ‚ намерений её - менÑÑ‚ÑŒ. Вот Ñта Ð»Ð¸Ñ†ÐµÐ½Ð·Ð¸Ñ BSD, которую мы иÑпользуем:</P> - - <P>СиÑтема Ð£Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð‘Ð°Ð·Ð°Ð¼Ð¸ Данных PostgreSQL</P> - - <P>Portions copyright (c) 1996-2008, PostgreSQL Global Development - Group Portions Copyright (c) 1994-1996 Regents of the University of - California</P> - - <P>ПредоÑтавлÑÑŽÑ‚ÑÑ Ð¿Ñ€Ð°Ð²Ð° на иÑпользование, копирование, изменение - и раÑпроÑтранение данного программного обеÑÐ¿ÐµÑ‡ÐµÐ½Ð¸Ñ Ð¸ его документации - Ð´Ð»Ñ Ð»ÑŽÐ±Ñ‹Ñ… целей, беÑплатно и без подпиÑÐ°Ð½Ð¸Ñ ÐºÐ°ÐºÐ¾Ð³Ð¾-либо ÑоглашениÑ, - при уÑловии что Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ копии будут предоÑтавлены данное выше - замечание об авторÑких правах, текущий параграф и два Ñледующих - параграфа.</P> - - <P>КÐЛИФОРÐИЙСКИЙ УÐИВЕРСИТЕТ ÐЕ ÐЕСЕТ ÐИКÐКОЙ ОТВЕТСТВЕÐÐОСТИ - ЗРЛЮБЫЕ ПОВРЕЖДЕÐИЯ, ВКЛЮЧÐЯ ПОТЕРЮ ДОХОДÐ, ÐÐÐЕСЕÐÐЫЕ ПРЯМЫМ - ИЛИ ÐЕПРЯМЫМ, СПЕЦИÐЛЬÐЫМ ИЛИ СЛУЧÐЙÐЫМ ИСПОЛЬЗОВÐÐИЕМ ДÐÐÐОГО - ПРОГРÐММÐОГО ОБЕСПЕЧЕÐИЯ ИЛИ ЕГО ДОКУМЕÐТÐЦИИ, ДÐЖЕ ЕСЛИ - КÐЛИФОРÐИЙСКИЙ УÐИВЕРСИТЕТ БЫЛ ИЗВЕЩЕРО ВОЗМОЖÐОСТИ ТÐКИХ - ПОВРЕЖДЕÐИЙ.</P> - - <P>КÐЛИФОРÐИЙСКИЙ УÐИВЕРСИТЕТ СПЕЦИÐЛЬÐО ОТКÐЗЫВÐЗЫВÐЕТСЯ ПРЕДОСТÐВЛЯТЬ - ЛЮБЫЕ ГÐÐ ÐÐТИИ, ВКЛЮЧÐЯ, ÐО ÐЕ ОГРÐÐИЧИВÐЯСЬ ТОЛЬКО ÐТИМИ ГÐÐ ÐÐТИЯМИ: - ÐЕЯВÐЫЕ ГÐÐ ÐÐТИИ ПРИГОДÐОСТИ ТОВÐРРИЛИ ПРИГОДÐОСТИ ДЛЯ ОТДЕЛЬÐОЙ ЦЕЛИ. - ДÐÐÐОЕ ПРОГРÐММÐОЕ ОБЕСПЕЧЕÐИЕ ПРЕДОСТÐВЛЯЕТСЯ ÐРОСÐОВЕ ПРИЦИПР- "КÐК ЕСТЬ" И КÐЛИФОРÐИЙСКИЙ УÐИВЕРСИТЕТ ÐЕ ОБЯЗÐРПРЕДОСТÐВЛЯТЬ - СОПРОВОЖДЕÐИЕ, ПОДДЕРЖКУ, ОБÐОВЛЕÐИЯ, Ð ÐСШИРЕÐИЯ ИЛИ ИЗМЕÐЕÐИЯ.</P> - - <H3><A name="item1.4">1.4</A>) Ðа каких платформах работает PostgreSQL?</H3> - - <P>Обычно, PostgreSQL может работать на любой Ñовременной платформе - ÑовмеÑтимой Ñ Unix. Ð’ инÑтрукции по уÑтановке, вы найдете ÑпиÑок - тех платформ, на которых были проведены теÑтовые запуÑки PostgreSQL - к моменту выхода данной верÑии.</P> - - <P>PostgreSQL также работает на операционных ÑиÑтемах Microsoft - Windows, оÑнованных на NT, таких как Win2000 SP4, WinXP и Win2003. - Пакет инÑталлÑтора доÑтупен по адреÑу - <A href="http://www.postgresql.org/download/windows"> - http://www.postgresql.org/download/windows</A>. ВерÑии Windows, - оÑнованные на MS-DOS (Win95, Win98, WinMe) могут запуÑкать - PostgreSQL Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ Cygwin.</P> - - <P>Также ÑущеÑтвует верÑÐ¸Ñ ÑÐ¿Ð¾Ñ€Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ð°Ñ Ð¿Ð¾Ð´ Novell Netware 6 на - <A href="http://developer.novell.com/wiki/index.php/Postgresql">http://developer.novell.com/wiki/index.php/Postgresql</A>, - и верÑÐ¸Ñ Ð´Ð»Ñ OS/2 (eComStation) на - <A href="http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2F"> - http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2F</A>.</P> - - <H3><A name="item1.5">1.5</A>) Где можно взÑÑ‚ÑŒ PostgreSQL?</H3> - - <P>Через браузер, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ <a href="http://www.postgresql.org/ftp/"> - http://www.postgresql.org/ftp/</a> и через ftp, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ - <A href="ftp://ftp.PostgreSQL.org/pub/">ftp://ftp.postgresql.org/pub/</A>.</P> - - - <H3><A name="item1.6">1.6</A>) ÐšÐ°ÐºÐ°Ñ Ð²ÐµÑ€ÑÐ¸Ñ Ð½Ð°Ð¸Ð±Ð¾Ð»ÐµÐµ ÑвежаÑ?</H3> - - <P>ПоÑледний выпуÑк PostgreSQL - Ñто верÑÐ¸Ñ 8.3.3</P> - - <P>Мы планируем выпуÑкать новые Ñтаршие верÑии каждый год, - а младшие верÑии каждые неÑколько меÑÑцев.</P> - - - <H3><A name="item1.7">1.7</A>) Где получить поддержку?</H3> - - <P>СообщеÑтво PostgreSQL предоÑтавлÑет помощь множеÑтву пользователей - через E-mail. ОÑновной web-Ñайт Ð´Ð»Ñ Ð¿Ð¾Ð´Ð¿Ð¸Ñки на ÑпиÑки раÑÑылки по - E-mail Ñто: <A href="http://www.postgresql.org/community/lists/"> - http://www.postgresql.org/community/lists/</A>. Хорошим меÑтом Ð´Ð»Ñ - того, чтобы начать задавать вопроÑÑ‹ ÑвлÑÑŽÑ‚ÑÑ ÑпиÑки <i>general</i> - (общие вопроÑÑ‹) или <i>bugs</i> (ошибки).</P> - - <P>Главным IRC каналом ÑвлÑетÑÑ <I>#postgreql</I>, - раÑположенный на Ñервере Freenode (<I>irc.freenode.net</I>). Чтобы - подключитьÑÑ, вы можете иÑпользовать в Unix вызов программы - <code>irc -c '#postgresql' "$USER" irc.freenode.net</code> или - любой другой IRC клиент. Ðа Ñтом же Ñервере ÑущеÑтвуют каналы на - иÑпанÑком (<I>#postgresql-es</I>), французÑком (<I>#postgresqlfr</I>) - и бразильÑком (<I>#postgresql-br</I>) Ñзыках. Также ÑущеÑтвует канал - по PostgreSQL на Ñервере EFNet.</P> - - <P>СпиÑок коммерчеÑкой поддержки компаний доÑтупен на - <A href="http://www.postgresql.org/support/professional_support"> - http://www.postgresql.org/support/professional_support</A>.</P> - - - <H3><A name="item1.8">1.8</A>) Как мне Ñообщить об ошибке?</H3> - - <P>ПоÑетите Ñтраничку Ñо Ñпециальной формой отчёта об ошибке в - PostgreSQL по адреÑу: - <A HREF="http://www.postgresql.org/support/submitbug"> - http://www.postgresql.org/support/submitbug</A>. - Также проверьте наличие более Ñвежей верÑии PostgreSQL на нашем - FTP Ñайте <A href="ftp://ftp.postgresql.org/pub/"> - ftp://ftp.postgresql.org/pub/</A>.</P> - - <P>Ðа ошибки, уведомление о которых были Ñделаны через Ñпециальную - форму или отправленные в какой-либо ÑпиÑок раÑÑылки PostgreSQL, - обычно генерируетÑÑ Ð¾Ð´Ð¸Ð½ из Ñледующих ответов:</P> - <UL> - <LI>Ðто не ошибка и почему</LI> - <LI>Ðто извеÑÑ‚Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° и она уже еÑÑ‚ÑŒ в ÑпиÑке - <A HREF="http://www.postgresql.org/docs/faqs.TODO.html">TODO</A></LI> - <LI>Ð”Ð°Ð½Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° была иÑправлена в текущем выпуÑке</LI> - <LI>Ð”Ð°Ð½Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° была иÑправлена, но иÑправление пока не попало в - официальный выпуÑк</LI> - <LI>ЗапрашиваетÑÑ Ð±Ð¾Ð»ÐµÐµ Ð´ÐµÑ‚Ð°Ð»ÑŒÐ½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ: - <UL> - <LI>ÐžÐ¿ÐµÑ€Ð°Ñ†Ð¸Ð¾Ð½Ð½Ð°Ñ ÑиÑтема</LI> - <LI>ВерÑÐ¸Ñ PostgreSQL</LI> - <LI>ТеÑÑ‚, воÑпроизводÑщий ошибку</LI> - <LI>ÐžÑ‚Ð»Ð°Ð´Ð¾Ñ‡Ð½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ</LI> - <LI>Вывод backtrace отладчика</LI> - </UL> - </LI> - <LI>Ðто Ð½Ð¾Ð²Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°. Может произойти Ñледующее: - <UL> - <LI>Будет Ñоздано иÑправление, которое будет включено в Ñледующий - выпуÑк</LI> - <LI>Ошибка не может быть иÑправлена немедленно и будет добавлена в ÑпиÑок - <A HREF="http://www.postgresql.org/docs/faqs.TODO.html">TODO</A></LI> - </UL> - </LI> - </UL> - - <H3><A name="1.9">1.9</A>) Как найти информацию об извеÑтных ошибках - или отÑутÑтвующих возможноÑÑ‚ÑÑ…?</H3> - - <P>PostgreSQL поддерживает раÑширенный подклаÑÑ <SMALL>SQL:2003</SMALL>. - Смотрите наш ÑпиÑок <A href="http://www.postgresql.org/docs/faqs.TODO.html">TODO</A> - на предмет извеÑтных ошибок, отÑутÑтвующих возможноÑтей и будущих - планов.</P> - - <P>Ðа Ð·Ð°Ð¿Ñ€Ð¾Ñ ÐºÐ°ÐºÐ¾Ð¹-либо возможноÑти обычно приходÑÑ‚ Ñледующие ответы:</P> - <UL> - <LI>Ð”Ð°Ð½Ð½Ð°Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑ‚ÑŒ уже еÑÑ‚ÑŒ в ÑпиÑке - <A href="http://www.postgresql.org/docs/faqs.TODO.html">TODO</A></LI> - <LI>Ð”Ð°Ð½Ð½Ð°Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑ‚ÑŒ нежелательна потому что: - <UL> - <LI>Она дублирует ÑущеÑтвующую функциональноÑÑ‚ÑŒ, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ñледует - Ñтандарту SQL</LI> - <LI>Ð”Ð°Ð½Ð½Ð°Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑ‚ÑŒ Ñильно уÑложнила бы код, но дала бы маленькую - выгоду</LI> - <LI>Ð”Ð°Ð½Ð½Ð°Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑ‚ÑŒ небезопаÑна или ненадёжна</LI> - </UL> - </LI> - <LI>Ð”Ð°Ð½Ð½Ð°Ñ Ð½Ð¾Ð²Ð°Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑ‚ÑŒ добавлена в ÑпиÑок - <A href="http://www.postgresql.org/docs/faqs.TODO.html">TODO</A> - </LI> - </UL> - - <P>PostgreSQL не иÑпользует какую-либо ÑиÑтему отÑÐ»ÐµÐ¶Ð¸Ð²Ð°Ð½Ð¸Ñ Ð¾ÑˆÐ¸Ð±Ð¾Ðº, - потому что мы обнаружили, что иÑпользование прÑмого Ð¾Ð±Ñ€Ð°Ñ‰ÐµÐ½Ð¸Ñ Ð¿Ð¾ - Ñлектронной почте и обновлÑемого ÑпиÑка - <A href="http://www.postgresql.org/docs/faqs.TODO.html">TODO</A> - ÑвлÑетÑÑ Ð±Ð¾Ð»ÐµÐµ Ñффективным. Ðа практике, ошибки в программном - обеÑпечении ÑохранÑÑŽÑ‚ÑÑ Ð¾Ñ‡ÐµÐ½ÑŒ недолго, а ошибки, которые важны - большому количеÑтву пользователей иÑправлÑÑŽÑ‚ÑÑ Ð¼Ð¾Ð¼ÐµÐ½Ñ‚Ð°Ð»ÑŒÐ½Ð¾. ЕÑÑ‚ÑŒ - только одно меÑто, где можно найти вÑе изменениÑ, ÑƒÐ»ÑƒÑ‡ÑˆÐµÐ½Ð¸Ñ Ð¸ - иÑправлениÑ, Ñделанные в выпуÑке PostgreSQL - Ñто журналы Ñообщений - ÑиÑтемы ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð²ÐµÑ€Ñий - <A HREF="http://www.postgresql.org/developer/sourcecode/">CVS</A>. - Даже Ð·Ð°Ð¼ÐµÑ‡Ð°Ð½Ð¸Ñ Ðº выпуÑкам не Ñодержат вÑе изменениÑ, Ñделанные - в программном обеÑпечении.</P> - - - <H3><A name="item1.10">1.10</A>) ÐšÐ°ÐºÐ°Ñ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ Ð¸Ð¼ÐµÐµÑ‚ÑÑ Ð² наличии?</H3> - - <P>PostgreSQL Ñодержит много документации, Ð²ÐºÐ»ÑŽÑ‡Ð°Ñ Ð±Ð¾Ð»ÑŒÑˆÐ¾Ðµ руководÑтво, - Ñтраницы Ñлектронного руководÑтва man и некоторые маленькие теÑтовые - примеры. Смотрите в каталог <I>/doc</I>. Ð’Ñ‹ также можете проÑматривать - документацию в Интернет по адреÑу <A href="http://www.postgresql.org/docs"> - http://www.postgresql.org/docs</A>.</P> - - <P>СущеÑтвует две книги по PostgreSQL доÑтупные по адреÑам <A href= - "http://www.PostgreSQL.org/docs/books/awbook.html">http://www.PostgreSQL.org/docs/books/awbook.html</A> - и <a href="http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook/</a>. - ЕÑÑ‚ÑŒ неÑколько книг по PostgreSQL, которые можно купить. - Одну из наиболее популÑрных напиÑал Корри Ð”ÑƒÐ³Ð»Ð°Ñ (Korry Douglas). - СпиÑок обзоров по Ñтим книгам доÑтупен по адреÑу - <a href="http://www.postgresql.org/docs/books/">http://www.postgresql.org/docs/books/</a>. - Кроме того, по адреÑу <a href="http://wiki.postgresql.org/wiki/Community_Generated_Articles%2C_Guides%2C_and_Documentation">http://wiki.postgresql.org/wiki/Community_Generated_Articles%2C_Guides%2C_and_Documentation</a> - вы можете найти коллекцию техничеÑких Ñтатей, поÑвещенных PostgreSQL.</P> - - <P>Клиент командной Ñтроки <I>psql</I> имеет неÑколько команд \d Ð´Ð»Ñ - Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ по типам, операторам, функциÑм, агрегатам и Ñ‚.д. - - иÑпользуйте \? Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ ÑпиÑка доÑтупных команд.</P> - - <P>Ðаш Ñайт Ñодержит еще больше информации.</P> - - - <H3><A name="item1.11">1.11</A>) Как мне научитьÑÑ <SMALL>SQL</SMALL>?</H3> - - <P>Во-первых, возьмите одну из книг по PostgreSQL, о которых говорилоÑÑŒ - выше. Многим из наших пользователей также нравитÑÑ ÐºÐ½Ð¸Ð³Ð° - <I>The Practical SQL Handbook</I>, - Bowman, Judith S., et al., Addison-Wesley. Другим нравитÑÑ <I>The - Complete Reference SQL</I>, Groff et al., McGraw-Hill.</P> - - <P>СущеÑтвует также множеÑтво прекраÑных учебников доÑтупных в online: - <UL> - <LI><A href="http://www.intermedia.net/support/sql/sqltut.shtm">http://www.intermedia.net/support/sql/sqltut.shtm,</A> - </LI> - <LI><A href="http://sqlcourse.com/">http://sqlcourse.com.</A> - </LI> - <LI><A href="http://www.w3schools.com/sql/default.asp">http://www.w3school.com/sql/default.asp</A> - </LI> - <LI><A href="http://mysite.verizon.net/Graeme_Birchall/id1.html">http://mysite.verizon.net/Graeme_Birchall/id1.html</A> - </LI> - </UL> - </P> - - <H3><A name="item1.12">1.12</A>) Как мне приÑлать иÑправление или приÑоединитÑÑ Ðº команде разработчиков?</H3> - - <P>Смотрите <a href="http://www.postgresql.org/docs/faqs.FAQ_DEV.html"> - FAQ Ð´Ð»Ñ Ñ€Ð°Ð·Ñ€Ð°Ð±Ð¾Ñ‚Ñ‡Ð¸ÐºÐ¾Ð²</A>.</P> - - - <H3><A name="item1.13">1.13</A>) Как Ñравнить PostgreSQL Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð¸ - <SMALL>СУБД</SMALL>? Может ли PostgreSQL быть вÑтроенным?</H3> - - <P> - СущеÑтвует неÑколько методов ÑÑ€Ð°Ð²Ð½ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð½Ð¾Ð³Ð¾ обеÑпечениÑ: - возможноÑти, производительноÑÑ‚ÑŒ, надежноÑÑ‚ÑŒ, поддержка и цена.</P> - - <DL> - <DT><B>ВозможноÑти</B></DT> - - <DD>PostgreSQL имеет большинÑтво возможноÑтей предÑтавленных - в больших коммерчеÑких <SMALL>СУБД</SMALL>, такие как: транзакции, - подзапроÑÑ‹, триггеры, предÑтавлениÑ, ÑÑылочной - целоÑтноÑти вторичного ключа и разные блокировки. У Ð½Ð°Ñ ÐµÑÑ‚ÑŒ некоторые возможноÑти, - которых нет у них: типы, определÑемые пользователем, механизм - наÑледованиÑ, правила и конкуретное многоверÑионное управление - Ð´Ð»Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ Ñ Ñодержимым блокировок.<BR> - <BR> - </DD> - - <DT><B>ПроизводительноÑÑ‚ÑŒ</B></DT> - - <DD>ПроизводительноÑÑ‚ÑŒ PostgreSQL Ñходна Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð¸ коммерчеÑкими - СУБД и Ñ Ð¡Ð£Ð‘Ð” Ñ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ñ‹Ð¼ иÑходным кодом. Ð’ каких-то вещах мы быÑтрее, - в каких-то медленнее. Ðаша производительноÑти обычно +/-10% по - Ñравнению Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð¸ СУБД. - <BR> - </DD> - - <DT><B>ÐадежноÑÑ‚ÑŒ</B></DT> - - <DD>Мы понимали, что наша <SMALL>СУБД</SMALL> должна быть надежной - или она ничего не будет Ñтоить. Мы ÑтараемÑÑ Ð²Ñ‹Ð¿ÑƒÑкать хорошо проверенный, - Ñтабильный код, который Ñодержит минимум ошибок. Каждый выпуÑк - проходит Ñтадию бета-теÑÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾ крайней мере в течении одного - меÑÑца и наша иÑÑ‚Ð¾Ñ€Ð¸Ñ Ð²Ñ‹Ð¿ÑƒÑков показывает что мы можем предоÑтавлÑÑ‚ÑŒ - Ñтабильные, монолитные выпуÑки, которые готовы к продуктивному - иÑпользованию. Мы верим, что мы производим проверку не хуже, - чем у других СУБД.<BR> - <BR> - </DD> - - <DT><B>Поддержка</B></DT> - - <DD>Ðаш ÑпиÑок раÑÑылки предоÑтавлÑет возможможноÑÑ‚ÑŒ Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ñ - большой группой разработчиков и пользователей, которые могут помочь решить - любые возникшие проблемы. Ð’ то же времÑ, мы не гарантируем какие-либо - иÑправлениÑ, но и разработчики коммерчеÑких <SMALL>СУБД</SMALL> не вÑегда - делают иÑправлениÑ. ПрÑмой доÑтуп к разработчикам, ÑообщеÑтву - пользователей, руководÑтвам и иÑходным текÑтам чаÑто делают поддержку - PostgreSQL превоÑходÑщей другие <SMALL>СУБД</SMALL>. СущеÑтвует - коммерчеÑÐºÐ°Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ° по результам возникших инцидентов, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ - доÑтупна Ð´Ð»Ñ Ñ‚ÐµÑ… кому она нужна. (Смотрите <A href="#item1.7">Секцию 1.7</A>.)<BR> - <BR> - </DD> - - <DT><B>Цена</B></DT> - - <DD>Ðаш продукт беÑплатен как Ð´Ð»Ñ ÐºÐ¾Ð¼Ð¼ÐµÑ€Ñ‡ÐµÑкого так, и не Ð´Ð»Ñ - коммерчеÑкого иÑпользованиÑ. Ð’Ñ‹ можете добавлÑÑ‚ÑŒ Ñвой код в наш - продукт без ограничений, за иÑключением тех, что опиÑываютÑÑ Ð² - нашей лицензии ÑÑ‚Ð¸Ð»Ñ BSD, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð¿Ñ€Ð¸Ð²ÐµÐ´ÐµÐ½Ð° выше.<BR> - <BR> - </DD> - </DL> - - <P>PostgreSQL разрабатываетÑÑ Ð¿Ð¾ архитектуре клиент/Ñервер, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ - требует отдельных процеÑÑов Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ клиента и Ñервера, а также - неÑколько вÑпомогательных процеÑÑов. Многие вÑтраиваемые архитектуры - могут ÑоответÑтвовать таким требованиÑм. Однако, еÑли ваша вÑÑ‚Ñ€Ð°Ð¸Ð²Ð°ÐµÐ¼Ð°Ñ - архитектура требует Ñервер баз данных Ð´Ð»Ñ Ð·Ð°Ð¿ÑƒÑка внутри прикладного - процеÑÑа, вы не можете иÑпользовать Postgres и вам лучше бы выбрать - Ð´Ð»Ñ Ð±Ð°Ð·Ñ‹ данных какое-либо другое облегченное решение.</P> - - <H3><A name="item1.14">1.14</A>) Будет ли PostgreSQL работать Ñ - поÑледними изменениÑми, в разных Ñтраных, каÑающимиÑÑ Ð´Ð½ÐµÐ²Ð½Ð¾Ð³Ð¾ времени?</H3> - - <P>Ð˜Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð² Ñохранении дневного времени в СШРвключены в PostgreSQL верÑии - 8.0.[4+] и во вÑе Ñледующие выпуÑки, например в 8.1. Ð˜Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¿Ð¾ Канаде - и Западной ÐвÑтралии включены в 8.0.[10+], 8.1.[6+] и вÑе Ñледующие - выпуÑки. ВыпуÑки PostgreSQL до 8.0 иÑпользуют информацию о Ñохранении - дневного времени из базы данных временных зон в операционной ÑиÑтеме.</p> - <HR> - - <H3 id="item1.15">1.15) Как мне отпиÑатьÑÑ Ð¾Ñ‚ ÑпиÑков раÑÑылки PostgreSQL? - Как избежать Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð´ÑƒÐ±Ð»Ð¸Ñ€ÑƒÑŽÑ‰Ð¸Ñ… Ñообщений?</H3> - - <P>Страница <a - href="http://mail.postgresql.org/mj/mj_wwwusr/domain=postgresql.org?user=&passw=&func=login">Majordomo</a> - на Ñайте PostgreSQL позволÑет подпиÑатьÑÑ Ð¸Ð»Ð¸ отпиÑатьÑÑ Ð¾Ñ‚ любого из ÑпиÑков - раÑÑылки PostgreSQL. (Вам может понадобитÑÑ Ð²Ð°Ñˆ пароль Ð´Ð»Ñ Majordomo, который - отправлÑетÑÑ Ð½Ð° ваш E-mail, чтобы войти в управление вашими подпиÑками.)</P> - - <P>Ð’Ñе ÑпиÑки раÑÑылки PostgreSQL наÑтариваютÑÑ Ñ‚Ð°Ðº, чтобы групповой ответ уходил - на Ð°Ð´Ñ€ÐµÑ ÑпиÑка <I>и</I> на Ð°Ð´Ñ€ÐµÑ Ð°Ð²Ñ‚Ð¾Ñ€Ð° ÑообщениÑ. Так Ñделано, чтобы пользователи - получали ответы на E-mail как можно быÑтрее. ЕÑли вы не хотите получать дублирующие - E-mail ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¸Ð· ÑпиÑка, в ÑлучаÑÑ… когда вы уже получили Ñти ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð½Ð°Ð¿Ñ€Ñмую, - уÑтановите флажок <I>eliminatecc</I> на Ñтранице <I>Change Settings</I> в - Majordomo. Ð’Ñ‹ также можете избежать Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ ÐºÐ¾Ð¿Ð¸Ð¹ Ñвоих Ñообщений Ð´Ð»Ñ Ñамого ÑебÑ, - еÑли Ñнимите флажок <I>selfcopy</I>.</P> - - <HR> - - <H2 align="center">ВопроÑÑ‹ пользователей по клиентÑкой чаÑти</H2> - - <H3><A name="item2.1">2.1</A>) Какие интерфейÑÑ‹ еÑÑ‚ÑŒ Ð´Ð»Ñ PostgreSQL?</H3> - - <P>УÑтановка PostgreSQL включает только <small>C</small> и вÑтроенный - (embedded) <small>C</small> интерфейÑÑ‹. Ð’Ñе другие интерфейÑÑ‹ - ÑвлÑÑŽÑ‚ÑÑ Ð½ÐµÐ·Ð°Ð²Ð¸Ñимыми проектами и загружаютÑÑ Ð¾Ñ‚Ð´ÐµÐ»ÑŒÐ½Ð¾; ÑамоÑтоÑтельноÑÑ‚ÑŒ - проектов позволÑет им организовать ÑобÑтвенное раÑпиÑание выпуÑков - новых верÑий и иметь ÑобÑтвенную команду разработчиков.</P> - - <P>Ðекоторые Ñзыки программированиÑ, такие как <small>PHP</small> - включают в ÑÐµÐ±Ñ Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ðº PostgreSQL. ИнтерфейÑÑ‹ Ð´Ð»Ñ Ñ‚Ð°ÐºÐ¸Ñ… Ñзыков - как Perl, <small>TCL</small>, Python и многих других, доÑтупны на - <a href="http://pgfoundry.org">http://pgfoundry.org</A>.</P> - - <H3><A name="item2.2">2.2</A>) Какие инÑтрументы ÑущеÑтвуют Ð´Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ - PostgreSQL через Web?</H3> - - <P>ПрекраÑное введение во взаимодейÑтвие баз данных и Web можно найти на: - <A href="http://www.webreview.com">http://www.webreview.com</A></P> - - <P>Ð”Ð»Ñ Ð¸Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ð¸Ð¸ Ñ Web, PHP <A href="http://www.php.net"> - http://www.php.net</A> ÑвлÑетÑÑ Ð½ÐµÐ¿Ð»Ð¾Ñ…Ð¸Ð¼ интерфейÑом.</P> - - <P>Ð’ Ñложных ÑлучаÑÑ…, многие пользуютÑÑ Perl и DBD::Pg Ñ CGI.pm - или mod_perl.</P> - - <H3><A name="item2.3">2.3</A>) ЕÑÑ‚ÑŒ ли у PostgreSQL графичеÑкий Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ - пользователÑ?</H3> - - <P>Ð”Ð»Ñ PostgreSQL ÑущеÑтвует большое количеÑтво инÑтрументов Ñ - графичеÑким интерфейÑом как коммерчеÑких, так и открытых. ПодробноÑти - можно найти в <A href="http://wiki.postgresql.org/wiki/Community_Guide_to_PostgreSQL_GUI_Tools"> - Документации ÑообщеÑтва Ð´Ð»Ñ GUI иÑтрументов PostgreSQL</A></P> - - <HR> - - <H2 align="center">ВопроÑÑ‹ админиÑтрированиÑ</H2> - - <H3><A name="item3.1">3.1</A>) Как мне уÑтановить PostgreSQL в меÑто отличное - от <I>/usr/local/pgsql</I>?</H3> - - <P>Задайте опцию <I>--prefix</I> когда запуÑкаете <I>configure</I>.</P> - - <H3><A name="item3.2">3.2</A>) Как мне управлÑÑ‚ÑŒ ÑоединениÑми от других - компьютеров?</H3> - - <P>По умолчанию, PostgreSQL разрешает только ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð½Ð° локальной - машине через Ñокеты домена Unix или TCP/IP ÑоединениÑ. Ð”Ð»Ñ Ñ‚Ð¾Ð³Ð¾, чтобы - другие машины Ñмогли подключитьÑÑ Ðº базе вы должны изменить - <I>listen_addresses</I> в <I>postgresql.conf</I>, разрешить - host-Ð°Ð²Ñ‚Ð¾Ñ€Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð² файле <I>$PGDATA/pg_hba.conf</I> и переÑтартовать - Ñервер СУБД.</P> - - <H3><A name="item3.3">3.3</A>) Какие наÑтройки мне нужно Ñделать Ð´Ð»Ñ ÑƒÐ»ÑƒÑ‡ÑˆÐµÐ½Ð¸Ñ - производительноÑти?</H3> - - <P>СущеÑтвует три главных облаÑти, которые потенциально могут - увеличить производительноÑÑ‚ÑŒ:</P> - - <DL> - <DT><B>Изменение запроÑа</B></DT> - <DD>Ðто означает модификацию запроÑов Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð»ÑƒÑ‡ÑˆÐµÐ¹ - производительноÑти: - <UL> - <LI>Создание индекÑов, Ð²ÐºÐ»ÑŽÑ‡Ð°Ñ Ð¸Ð½Ð´ÐµÐºÑÑ‹ выражений и чаÑтичные индекÑÑ‹</LI> - <LI>ИÑпользование COPY вмеÑто множеÑтва <small>INSERT</small></LI> - <LI>Группировка неÑкольких операторов в единую транзакцию Ð´Ð»Ñ - ÑƒÐ¼ÐµÐ½ÑŒÑˆÐµÐ½Ð¸Ñ Ð½Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ при выполнении Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ Ñ‚Ñ€Ð°Ð½Ð·Ð°ÐºÑ†Ð¸Ð¸</LI> - <LI>ИÑпользование <small>CLUSTER</small>, когда из индекÑа берётÑÑ - множеÑтво Ñтрок</LI> - <LI>ИÑпользование <small>LIMIT</small> Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾, чтобы возвращалаÑÑŒ - только чаÑÑ‚ÑŒ вывода от запроÑа</LI> - <LI>ИÑпользование Подготовленных (Prepared) запроÑов</LI> - <LI>ИÑпользование <small>ANALYZE</small> Ð´Ð»Ñ Ð¾Ð±ÑÐ»ÑƒÐ¶Ð¸Ð²Ð°Ð½Ð¸Ñ ÑтатиÑтики - оптимизатора</LI> - <LI>РегулÑрное иÑпользование <small>VACUUM</small> или <I>pg_autovacuum</I></LI> - <LI>Удаление индекÑов во Ð²Ñ€ÐµÐ¼Ñ Ð±Ð¾Ð»ÑŒÑˆÐ¸Ñ… изменений данных</LI> - </UL> - <BR><BR> - </DD> - - <DT><B>ÐаÑтройка Ñервера</B></DT> - - <DD>Ðекоторые уÑтановки в <I>postgresql.conf</I> влиÑÑŽÑ‚ на - производительноÑÑ‚ÑŒ. Подробный полный ÑпиÑок уÑтановок Ñм. в - <A href="http://www.postgresql.org/docs/current/static/runtime-config.html"> - Administration Guide/Server Run-time Environment/Run-time Configuration</A>, - а комментарии Ñм. в <A href="http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html"> - http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html</A> - и <A href="http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html"> - http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html</A>. - <BR><BR> - </DD> - - <DT><B>Выбор "железа" - аппаратного обеÑпечениÑ</B></DT> - - <DD>ВлиÑние "железа" на производительноÑÑ‚ÑŒ подробно опиÑано в - <A href="http://www.powerpostgresql.com/PerfList/"> - http://www.powerpostgresql.com/PerfList/</A> и - <A href="http://momjian.us/main/writings/pgsql/hw_performance/index.html"> - http://momjian.us/main/writings/pgsql/hw_performance/index.html</A>. - <BR> - <BR> - </DD> - </DL> - - <H3><A name="item3.4">3.4</A>) Какие возможноÑти Ð´Ð»Ñ Ð¾Ñ‚Ð»Ð°Ð´ÐºÐ¸ еÑÑ‚ÑŒ в - наличии?</H3> - - <P>ЕÑÑ‚ÑŒ множеÑтво уÑтановок в наÑтройках Ñервера, начинающихÑÑ - на <code>log_*</code> на <a - href="http://www.postgresql.org/docs/current/interactive/runtime-config-logging.html">http://www.postgresql.org/docs/current/interactive/runtime-config-logging.html</a>, - позволÑющих протоколировать запроÑÑ‹ и ÑтатиÑтику работы процеÑÑа, - ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð¾Ñ‡ÐµÐ½ÑŒ полезна Ð´Ð»Ñ Ð¾Ñ‚Ð»Ð°Ð´ÐºÐ¸ и Ð¸Ð·Ð¼ÐµÑ€ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð´Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ñти.</P> - - - <H3><A name="item3.5">3.5</A>) Почему Ñ Ð¿Ð¾Ð»ÑƒÑ‡Ð°ÑŽ Ñообщение <I>"Sorry, too - many clients"</I> когда пытаюÑÑŒ подключитьÑÑ Ðº базе?</H3> - - <P>Ð’Ñ‹ доÑтигли уÑтановленного по умолчанию Ð¾Ð³Ñ€Ð°Ð½Ð¸Ñ‡ÐµÐ½Ð¸Ñ Ð² 100 ÑеÑÑий - Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ðº базе данных. Вам необходимо увеличить лимит на количеÑтво - конкурентных backend процеÑÑов Ð´Ð»Ñ Ð²Ð°ÑˆÐµÐ³Ð¾ Ñервера БД, - изменив значение <I>max_connections</I> в файле <I>postgresql.conf</I> - и переÑтартовать Ñервер БД.</P> - - - <H3><A name="item3.6">3.6</A>) Как выполнить обновление PostgreSQL?</H3> - - <P>См. информацию об обновлении в <a - href="http://www.postgresql.org/support/versioning">http://www.postgresql.org/support/versioning</a> - и Ñпециальные инÑтрукции в <a href="http://www.postgresql.org/docs/current/static/install-upgrading.html"> - http://www.postgresql.org/docs/current/static/install-upgrading.html</a>.</P> - - - <H3><A name="item3.7">3.7</A>) Какое компьютерное "железо" Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ - иÑпользовать?</H3> - - <P>ПоÑкольку "железо" перÑональных компьютеров ÑвлÑетÑÑ Ð½Ð°Ð¸Ð±Ð¾Ð»ÐµÐµ - ÑовмеÑтимым, люди Ñклонны верить, что такое "железо" имеет одинаковое - качеÑтво. Ðто не так. ПамÑÑ‚ÑŒ ECC, SCSI и качеÑтвенные материнÑкие платы - ÑвлÑÑŽÑ‚ÑÑ Ð±Ð¾Ð»ÐµÐµ надёжными и имеют более лучшую производительноÑÑ‚ÑŒ, чем - менее дорогое "железо". PostgreSQL будет работать на любом "железе", - но еÑли Ð´Ð»Ñ Ð²Ð°Ñ Ð²Ð°Ð¶Ð½Ñ‹ надёжноÑÑ‚ÑŒ и производительноÑÑ‚ÑŒ, то Ñ Ð²Ð°ÑˆÐµÐ¹ Ñтороны - будет мудро поÑтавить ÑоответÑтвующее "железо". ОбÑудить разное "железо" - можно в наших ÑпиÑках раÑÑылки.</P> - - <HR> - - <H2 align="center">ВопроÑÑ‹ ÑкÑплуатации</H2> - - <H3><A name="item4.1">4.1</A>) Как выполнить <SMALL>SELECT</SMALL> только - Ð´Ð»Ñ Ð½ÐµÑкольких первых Ñтрочек запроÑа? Произвольной Ñтроки?</H3> - - <P>Ð”Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ неÑкольких Ñтрок, еÑли вы знаете их количеÑтво - на момент Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ <SMALL>SELECT</SMALL> иÑпользуйте <SMALL>LIMIT</SMALL>.</P> - ЕÑли еÑÑ‚ÑŒ какой-либо индекÑ, который Ñовпадает Ñ <SMALL>ORDER BY</SMALL>, - то возможно, что веÑÑŒ Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½ и не будет. ЕÑли вы не знаете - количеÑтва необходимых Ñтрок на момент Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ <SMALL>SELECT</SMALL>, - иÑпользуйте курÑор и <SMALL>FETCH</SMALL>.</P> - - <P>To <small>SELECT</small> a random row, use:</P> -<PRE> SELECT col - FROM tab - ORDER BY random() - LIMIT 1; -</PRE> - - - <H3><A name="item4.2">4.2</A>) Как мне найти какие таблицы, индекÑÑ‹, - базы данных и пользователи ÑущеÑтвуют? Как мне увидеть запроÑÑ‹, - которые иÑпользует <I>psql</I> Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ñтой информации?</H3> - - <P>Чтобы проÑматривать таблицы в <I>psql</I>, иÑпользуйте команду \dt. - Полный ÑпиÑок команд в <I>psql</I> вы можете получить, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ \?. - Кроме того, вы можете поÑмотреть иÑходный код <I>psql</I> в файле - <I>pgsql/src/bin/psql/describe.c</I>. Он Ñодержит команды - <SMALL>SQL</SMALL> которые генерируютÑÑ Ð¿Ñ€Ð¸ вводе в <I>psql</I> команд, - начинающихÑÑ Ñ Ð¾Ð±Ñ€Ð°Ñ‚Ð½Ð¾Ð¹ коÑой черты. Ð’Ñ‹ также можете запуÑтить - <I>psql</I> Ñ Ð¾Ð¿Ñ†Ð¸ÐµÐ¹ <I>-E</I> так, чтобы Ñта программа выдавала - запроÑÑ‹, которые она иÑпользует Ð´Ð»Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ñ‹Ñ… вами - команд. PostgreSQL также предоÑтавлÑет <SMALL>SQL</SMALL> - ÑовмеÑтимый Ñ INFORMATION SCHEMA интерфейÑ, Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ которого, вы - можете Ñформировать Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð½Ð° получение информации о базе данных.</P> - - <P>Также ÑущеÑтвуют ÑиÑтемные таблицы, начинающиеÑÑ Ñ <I>pg_</I>.</P> - - <P>ИÑпользуйте <I>psql -l</I> Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ ÑпиÑка вÑех баз данных.</P> - - <P>Также поÑмотрите файл <I>pgsql/src/tutorial/syscat.source</I>. - Он показывает многие из операторов <SMALL>SELECT</SMALL> необходимых - Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ из ÑиÑтемных таблиц базы данных.</P> - - - <H3><A name="item4.3">4.3</A>) Как изменить тип данных колонки?</H3> - - <P>Ð’ 8.0 и более поздних верÑиÑÑ…, изменение типа колонки выполнÑетÑÑ - очень легко через <SMALL>ALTER TABLE ALTER COLUMN TYPE</SMALL>.</P> - - <P>Ð’ более ранних верÑиÑÑ… Ñделайте так:</P> -<PRE> - BEGIN; - ALTER TABLE tab ADD COLUMN new_col <i>new_data_type</i>; - UPDATE tab SET new_col = CAST(old_col AS <i>new_data_type</i>); - ALTER TABLE tab DROP COLUMN old_col; - COMMIT; -</PRE> - - <H3><A name="item4.4">4.4</A>) Каковы макÑимальные размеры Ð´Ð»Ñ Ñтрок в таблице, - таблиц и базы данных?</H3> - - <P>СущеÑтвуют Ñледующие ограничениÑ:</P> -<BLOCKQUOTE> -<TABLE> -<TR> - <TD>МакÑимальный размер базы?</TD> - <TD>неограничен (ÑущеÑтвуют базы на 32 TB)</TD> -</TR> -<TR> - <TD>МакÑимальный размер таблицы?</TD> - <TD>32 TB</TD> -</TR> -<TR> - <TD>МакÑимальный размер Ñтроки?</TD> - <TD>400 Gb</TD> -</TR> -<TR> - <TD>МакÑимальный размер полÑ?</TD> - <TD>1 GB</TD> -</TR> -<TR> - <TD>МакÑимальное количеÑтво Ñтрок в таблице?</TD> - <TD>неограничено</TD> -</TR> -<TR> - <TD>МакÑимальное количеÑтво колонок в таблице?</TD> - <TD>250-1600 в завиÑимоÑти от типа</TD> -</TR> -<TR> - <TD>МакÑимальное количеÑтво индекÑов в таблице?</TD> - <TD>неограничено</TD> -</TR> -</TABLE> -</BLOCKQUOTE> -<BR> - <P>РазумеетÑÑ, понÑтие "неограничено" на Ñамом деле ограничиваетÑÑ - доÑтупным диÑковым проÑтраниÑтвом и размерами памÑти/Ñвоппинга. - Когда Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¿ÐµÑ€ÐµÑ‡Ð¸Ñленные выше неоправдано большие, может - поÑтрадать производительноÑÑ‚ÑŒ.</P> - - <P>МакÑимальный размер таблицы в 32 TB не требует чтобы Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ð¾Ð½Ð½Ð°Ñ - ÑиÑтема поддерживала файлы больших размеров. Большие таблицы хранÑÑ‚ÑÑ - как множеÑтво файлов размером в 1 GB, так что ограничениÑ, которые - накладывает Ñ„Ð°Ð¹Ð»Ð¾Ð²Ð°Ñ ÑиÑтема не важны.</P> - - <P>МакÑимальный размер таблицы и макÑимальное количеÑтво колонок - могут быть увеличены в четыре раза, еÑли размер блока по умолчанию будет - увеличен до 32k.</P> - - <P>СущеÑтвует ограничение, по которому индекÑÑ‹ не могут ÑоздаватьÑÑ Ð´Ð»Ñ - колонок длиннее чем 2,000 Ñимволов. К ÑчаÑтью такие индекÑÑ‹ врÑд ли - дейÑтвительно кому-то нужны. УникальноÑÑ‚ÑŒ гарантируетÑÑ Ð½Ð°Ð¸Ð»ÑƒÑ‡Ð¸Ð¼ образом, - Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ функционального индекÑа из Ñ…Ñша MD5 длинной колонки, а - полнотекÑтовое индекÑирование позволÑет иÑкать Ñлова внутри колонки.</P> - - <H3><A name="item4.5">4.5</A>) Как много диÑкового проÑтранÑтва в базе данных - нужно Ð´Ð»Ñ ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ… из обычного текÑтового файла?</H3> - - <P>СУБД PostgreSQL может потребоватьÑÑ Ð´Ð¸Ñкового проÑтранÑтва до 5 раз - больше Ð´Ð»Ñ ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ… из проÑтого текÑтового файла.</P> - - <P>Ð’ качеÑтве примера, раÑÑмотрим файл в 100,000 Ñтрок в каждой, из - которых целое чиÑло и текÑтовое опиÑание. При Ñтом длина текÑта, - в Ñреднем, ÑоÑтавлÑет 20 байт. Размер проÑтого файла ÑоÑтавит 2.8 MB. - Размер базы PostgreSQL, Ñодержащей Ñти же данные ÑоÑтавит приблизительно - 5.2 MB из которых:</P> -<PRE> - 24 байт: на каждый заголовок Ñтроки в таблице (приблизительно) - + 24 байта: одно поле Ñ Ñ†ÐµÐ»Ð¾Ñ‡Ð¸Ñленным типом и одно текÑтовое поле - + 4 байта: указатель на Ñтранице Ð´Ð»Ñ Ð²Ñей табличной Ñтроки - ---------------------------------------- - 56 байт на Ñтроку в таблице - - Размер Ñтраницы данных в PostgreSQL ÑоÑтавлÑет 8192 байт (8 KB), так что: - - 8192 байт на Ñтраницу - --------------------- = 158 Ñтрок в таблице на Ñтраницу БД (округлённо) - 52 байт на Ñтроку в таблице - - 100000 Ñтрок данных - ----------------------- = 633 Ñтраниц в БД (округлённо) - 158 Ñтрок в таблице на Ñтраницу - - 633 Ñтраниц БД * 8192 байт на Ñтраницу = 5,185,536 байт (5.2 MB) -</PRE> - - <P>ИндекÑÑ‹ не требуют так много, но поÑкольку они ÑоздаютÑÑ Ð´Ð»Ñ - большого количеÑтва данных, они также могут быть велики.</P> - - <P>Ð—Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ <small>NULL</small> хранÑÑ‚ÑÑ ÐºÐ°Ðº битовые карты и поÑтому они - занимают очень мало меÑта. - </P> - - <H3><A name="item4.6">4.6</A>) Почему мои запроÑÑ‹ работают медлено? Почему - они не иÑпользуют мои индекÑÑ‹?</H3> - - <P>ИндекÑÑ‹ не иÑпользуютÑÑ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ запроÑа. Они - иÑпользуютÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ еÑли таблица больше минимального размера и Ð·Ð°Ð¿Ñ€Ð¾Ñ - выбирает только маленький процент Ñтрок в таблице. Так уÑтроено, - потому что доÑтуп к диÑку Ñ Ð¿Ñ€Ð¸Ð¼ÐµÐ½ÐµÐ½Ð¸ÐµÐ¼ рандомизации при Ñканировании - индекÑов может быть медленнее, чем проÑтое чтение таблицы или ее - поÑледовательное Ñканирование.</P> - - <P>Чтобы определить необходимоÑÑ‚ÑŒ иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð½Ð´ÐµÐºÑа Ð´Ð»Ñ ÐºÐ°ÐºÐ¾Ð¹-либо - таблицы, PostgreSQL должен иметь ÑтатиÑтику по Ñтой таблице. Ðта - ÑтатиÑтика ÑобираетÑÑ Ð¿Ñ€Ð¸ иÑпользовании <SMALL>VACUUM ANALYZE</SMALL> - или проÑто <SMALL>ANALYZE</SMALL>. ИÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ ÑтатиÑтику, оптимизатор - узнает о том как много Ñтрок в таблице и еÑли он должен иÑпользовать - индекÑÑ‹, то он может принимать лучшие решениÑ. СтатиÑтика также - влиÑет на определение оптимального порÑдка ÑвÑÐ·Ñ‹Ð²Ð°Ð½Ð¸Ñ Ð¸ метода ÑвÑзываниÑ. - При изменении Ñодержимого таблицы должен периодичеÑки выполнÑÑ‚ÑÑ - Ñбор ÑтатиÑтики.</P> - - <P>Обычно индекÑÑ‹ не иÑпользуютÑÑ Ð´Ð»Ñ <SMALL>ORDER BY</SMALL> или Ð´Ð»Ñ - Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÑвÑзываний. ПоÑледовательный перебор Ñледующий за Ñвной - Ñортировкой обычно быÑтрее, чем поиÑк по индекÑам в большой таблице. - Однако, <SMALL>ORDER BY</SMALL> чаÑто комбинируетÑÑ Ñ <SMALL>LIMIT</SMALL> - и в Ñтом Ñлучае Ð¸Ð½Ð´ÐµÐºÑ Ð±ÑƒÐ´ÐµÑ‚ иÑпользоватьÑÑ, поÑкольку при выполнении - будет возвращатьÑÑ Ð½ÐµÐ±Ð¾Ð»ÑŒÑˆÐ°Ñ Ñ‡Ð°ÑÑ‚ÑŒ таблицы.</P> - - <P>ЕÑли вам кажетÑÑ, что оптимизатор некорректно выбирает поÑледовательный - перебор, иÑпользуйте <CODE>SET enable_seqscan TO 'off'</CODE> и - запуÑтите Ð·Ð°Ð¿Ñ€Ð¾Ñ Ñнова, чтобы увидеть, дейÑтвительно ли Ñканирование - индекÑов быÑтрее. - </P> - - <P>Когда иÑпользуютÑÑ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ð¸ Ñ ÑˆÐ°Ð±Ð»Ð¾Ð½Ð°Ð¼Ð¸, например <SMALL>LIKE</SMALL> - или <I>~</I>, индекÑÑ‹ могут быть иÑпользованы в Ñледующих ÑлучаÑÑ…:</P> - <UL> - <LI>Ðачало Ñтроки поиÑка должно Ñовпадать Ñ Ð½Ð°Ñ‡Ð°Ð»Ð¾Ð¼ иÑкомой Ñтроки, Ñ‚.е.: - <UL> - <LI><small>LIKE</small> шаблоны не должны начинатьÑÑ Ñ <i>%.</i>.</LI> - <LI><i>~</i> шаблоны регулÑрных выражений должна начинатьÑÑ Ð½Ð° <i>^</i>.</LI> - </UL></LI> - <LI>Строка поиÑка не должна начинатьÑÑ Ñ Ñимвола клаÑÑа, Ñ‚.е. [a-e].</LI> - <LI>ПоиÑк незавиÑимый от региÑтра, такой как <small>ILIKE</small> и - <i>~*</i> не иÑпользует индекÑÑ‹. ВмеÑто него, иÑпользуйте индекÑÑ‹ - выражений, которые опиÑываютÑÑ Ð² Ñекции <A href="#item4.8">4.8</A>.</LI> - <LI>Во Ð²Ñ€ÐµÐ¼Ñ <i>initdb</i> должна иÑпользоватьÑÑ Ð»Ð¾ÐºÐ°Ð»ÑŒ по умолчанию - <i>C</i>, потому что не ÑущеÑтвует возможноÑти узнать Ñледующий наибольший - Ñимвол Ð´Ð»Ñ Ð½Ðµ-C локали. Ð’Ñ‹ можете Ð´Ð»Ñ Ñ‚Ð°ÐºÐ¸Ñ… Ñлучаев Ñоздать Ñпециальный - Ð¸Ð½Ð´ÐµÐºÑ <CODE>text_pattern_ops</CODE> который работает только Ð´Ð»Ñ - <SMALL>LIKE</SMALL> индекÑированиÑ. Ð”Ð»Ñ Ð¿Ð¾Ð¸Ñка Ñлов также можно - иÑпользовать полнотекÑтовый индекÑ.</LI> - </UL> - - <H3><A name="item4.7">4.7</A>) Как поÑмотреть на то, как оптимизатор выполнÑет - мой запроÑ?</H3> - - <P>Смотрите Ñтраницу руководÑтва поÑвÑщенную <SMALL>EXPLAIN</SMALL>.</P> - - - <H3><A name="item4.8">4.8</A>) Как мне выполнить поиÑк регулÑрного Ð²Ñ‹Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ - и поиÑк незавиÑимый от региÑтра букв поиÑк регулÑрного выражениÑ? - Как мне иÑпользовать Ð¸Ð½Ð´ÐµÐºÑ Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка незавиÑимого от региÑтра букв?</H3> - - <P>Оператор <I>~</I> производит поиÑк регулÑрного выражениÑ, а оператор - <I>~*</I> производит незавиÑимый от региÑтра букв поиÑк регулÑрного - выражениÑ. ÐезавиÑимый от региÑтра вариант <SMALL>LIKE</SMALL> называетÑÑ - <SMALL>ILIKE</SMALL>.</P> - - <P>ÐезавиÑимое от региÑтра Ñравнение обычно выражаетÑÑ Ñ‚Ð°Ðº:</P> -<PRE> - SELECT * - FROM tab - WHERE lower(col) = 'abc'; -</PRE> - - Ðта конÑÑ‚Ñ€ÑƒÐºÑ†Ð¸Ñ Ð½Ðµ будет иÑпользовать Ñтандартный индекÑ. Однако, еÑли - вы Ñоздадите Ð¸Ð½Ð´ÐµÐºÑ Ð²Ñ‹Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ, он будет иÑпользован: -<PRE> - CREATE INDEX tabindex ON tab (lower(col)); -</PRE> - <P>ЕÑли вышеуказанный Ð¸Ð½Ð´ÐµÐºÑ ÑоздаётÑÑ ÐºÐ°Ðº <SMALL>UNIQUE</SMALL>, то - колонка, Ð´Ð»Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ð¾Ð¹ он ÑоздаётÑÑ Ð¼Ð¾Ð¶ÐµÑ‚ хранить Ñимволы и в верхнем, - и в нижнем региÑтре, Ð¸Ð½Ð´ÐµÑ Ð½Ðµ может иметь идентичных значений, которые - отличаютÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ региÑтром. Чтобы в колонке можно было хранить Ñимволы - только в определённом региÑтре, иÑпользуйте ограничение - <SMALL>CHECK</SMALL> или проверку через триггер.</P> - - <H3><A name="item4.9">4.9</A>) Как мне определить, что значение Ð¿Ð¾Ð»Ñ Ð² каком-либо - запроÑе равно <SMALL>NULL</SMALL>? Как мне Ñоединить возможные - <SMALL>NULL</SMALL>? Могу Ñ Ñортировать Ð¿Ð¾Ð»Ñ <SMALL>NULL</SMALL> или нет?</H3> - - <P>Ð’Ñ‹ проÑто Ñравниваете значение Ñ <SMALL>IS NULL</SMALL> и - <SMALL>IS NOT NULL</SMALL>, как здеÑÑŒ:</P> -<PRE> - SELECT * - FROM tab - WHERE col IS NULL; -</PRE> - - <P>Чтобы Ñоединить Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ñ‹Ð¼Ð¸ значениÑми <SMALL>NULL</SMALL>, иÑпользуйте - <I>COALESCE()</I> как здеÑÑŒ:</P> -<PRE> - SELECT COALESCE(col1, '') || COALESCE(col2, '') - FROM tab -</PRE> - - <P>Чтобы отÑортировать данные по значению <NULL> иÑпользуйте модификаторы - <SMALL>IS NULL</SMALL> и <SMALL>IS NOT NULL</SMALL> в выражении - <SMALL>ORDER BY</SMALL>. Когда они будут генерировать Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ - <I>иÑтина</I>, то при Ñортировке они будут выше, чем Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ - <I>ложь</I>, так что запиÑи Ñ NULL будут в отÑортированном ÑпиÑке Ñверху:</P> - -<PRE> - SELECT * - FROM tab - ORDER BY (col IS NOT NULL); -</PRE> - - <H3><A name="item4.10">4.10</A>) Каковы Ð¾Ñ‚Ð»Ð¸Ñ‡Ð¸Ñ Ð¼ÐµÐ¶Ð´Ñƒ разными Ñимвольными - типами?</H3> -<BLOCKQUOTE> -<TABLE> -<TR> - <TH>Тип</TH> - <TH>Внутреннее имÑ</TH> - <TH>ЗамечаниÑ</TH> -</TR> -<TR> - <TD>VARCHAR(n)</TD> - <TD>varchar</TD> - <TD>размер задает макÑимальную длину, нет заполнениÑ</TD> -</TR> -<TR> - <TD>CHAR(n)</TD> - <TD>bpchar</TD> - <TD>заполнÑетÑÑ Ð¿ÑƒÑтотой до фикÑированной длины</TD> -</TR> -<TR> - <TD>TEXT</TD> - <TD>text</TD> - <TD>нет задаваемого верхнего Ð¾Ð³Ñ€Ð°Ð½Ð¸Ñ‡ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ длины</TD> -</TR> -<TR> - <TD>BYTEA</TD> - <TD>bytea</TD> - <TD>маÑÑив байт переменной длины (можно иÑпользовать null-байт без опаÑки)</TD> -</TR> -<TR> - <TD>"char"</TD> - <TD>char</TD> - <TD>один Ñимвол</TD> -</TR> -</TABLE> -</BLOCKQUOTE> - - <P>Внутреннее Ð¸Ð¼Ñ Ð²Ñ‹ можете увидеть, когда Ñмотрите ÑиÑтемные каталоги - и в некоторых ÑообщениÑÑ… об ошибках.</P> - - <P>Первые четыре типа ÑвлÑÑŽÑ‚ÑÑ "varlena" типами (Ñ‚.е., первые - четыре байта на диÑке ÑвлÑÑŽÑ‚ÑÑ Ð´Ð»Ð¸Ð½Ð½Ð¾Ð¹, за которой Ñледуют данные). - Таким образом, фактичеÑки иÑпользуемое проÑтранÑтво больше, чем - обозначенный размер. Однако, длинные Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ñ‚Ð°ÐºÐ¶Ðµ ÑжимаютÑÑ, - так что занимаемое диÑковое проÑтранÑтво может также быть и меньше, - чем ожидалоÑÑŒ.</P> - - <SMALL>VARCHAR(n)</SMALL> - Ñто лучшее решение, когда нужно хранить - Ñтроки переменной длины, не превышающие определенного размера. - <SMALL>TEXT</SMALL> - Ñто лучшее решение Ð´Ð»Ñ Ñтрок неограниченной длины, - Ñ Ð¼Ð°ÐºÑимально допуÑтимой длиной в 1 гигабайт. - <P><SMALL>CHAR(n)</SMALL> - Ñто лучшее решение Ð´Ð»Ñ Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ñтрок, которые - обычно имеют одинаковую длину. <SMALL>CHAR(n)</SMALL> заполнÑетÑÑ - пуÑтотой до заданной длины, в то Ð²Ñ€ÐµÐ¼Ñ ÐºÐ°Ðº <SMALL>VARCHAR(n)</SMALL> - хранит только Ñимволы, из которых ÑоÑтоит Ñтрока. - <SMALL>BYTEA</SMALL> иÑпользуетÑÑ Ð´Ð»Ñ Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð±Ð¸Ð½Ð°Ñ€Ð½Ñ‹Ñ… данных, Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ - которых могут включать <SMALL>NULL</SMALL> байты. Ð’Ñе типы опиÑанные - здеÑÑŒ, имеют Ñходные характериÑтики производительноÑти.</P> - - <H3><A name="item4.11.1">4.11.1</A>) Как мне Ñоздать поле - serial/Ñ-авто-увеличением?</H3> - - <P>PostgreSQL поддерживает тип данных <SMALL>SERIAL</SMALL>. Он - автоматичеÑки Ñоздает поÑледовательноÑÑ‚ÑŒ. Ðапример:</P> -<PRE> - CREATE TABLE person ( - id SERIAL, - name TEXT - ); -</PRE> - - автоматичеÑки транÑлируетÑÑ Ð²: -<PRE> - CREATE SEQUENCE person_id_seq; - CREATE TABLE person ( - id INT4 NOT NULL DEFAULT nextval('person_id_seq'), - name TEXT - ); -</PRE> - - <P>ÐвтоматичеÑки ÑÐ¾Ð·Ð´Ð°Ð½Ð½Ð°Ñ Ð¿Ð¾ÑледовательноÑÑ‚ÑŒ имеет Ð¸Ð¼Ñ Ð²Ð¸Ð´Ð° - <<I>таблица</I>>_<<I>колонка_serial</I>>_<I>seq</I>, где - <I>таблица</I> и <I>колонка_serial</I> - Ñто ÑоответÑтвенно имена - таблицы и колонки Ñ Ñ‚Ð¸Ð¿Ð¾Ð¼ <SMALL>SERIAL</SMALL>. - Смотрите подробноÑти о поÑледовательноÑÑ‚ÑÑ… на Ñтранице руководÑтва - поÑвÑщенной <I>create_sequence</I>.</P> - - <H3><A name="item4.11.2">4.11.2</A>) Как мне получить значение при вÑтавке - <SMALL>SERIAL</SMALL>?</H3> - - <P>ПроÑтейший ÑпоÑоб получить назначенное значение <SMALL>SERIAL</SMALL> - Ñто иÑпользовать <SMALL>RETURNING</SMALL>. ИÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð¼ÐµÑ€Ð° таблицу в <A - href="#item4.11.1">4.11.1</A>, Ñто может выглÑдеть так:</P> - -<PRE> - INSERT INTO person (name) VALUES ('Blaise Pascal') RETURNING id; -</PRE> - - Ð’Ñ‹ также можете вызвать <I>nextval()</I> и иÑпользовать Ñто значение в - <SMALL>INSERT</SMALL> или вызвать <I>currval()</I> <I>поÑле</I> - <SMALL>INSERT</SMALL>. - - - <H3><A name="item4.11.3">4.11.3</A>) Ðе может ли получитьÑÑ Ñ‚Ð°Ðº, что - иÑпользование <I>currval()</I> и <I>nextval()</I> приведет к - зациклированию Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð¸ пользователÑми?</H3> - - <P>Ðет. <i>currval()</i> возвращает текущее значение, назначенное вашей - ÑеÑÑией, а не другими ÑеÑÑиÑми.</P> - - <H3><A name="item4.11.4">4.11.4</A>) Почему чиÑла из моей поÑледовательноÑти - не иÑпользуютÑÑ Ñнова при отмене транзакции? Почему ÑоздаютÑÑ Ñ€Ð°Ð·Ñ€Ñ‹Ð²Ñ‹ - при нумерации в колонке, где Ñ Ð¸Ñпользую поÑледовательноÑÑ‚ÑŒ/SERIAL?</H3> - - <P>Ð”Ð»Ñ Ñ€ÐµÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ð¸ конкуретноÑти, Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¿Ð¾ÑледовательноÑтей, при - необходимоÑти выдаютÑÑ Ð²Ð¾ Ð²Ñ€ÐµÐ¼Ñ Ð·Ð°Ð¿ÑƒÑка транзакций и не блокируютÑÑ - до полного Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ñ‚Ñ€Ð°Ð½Ð·Ð°ÐºÑ†Ð¸Ð¹. Ðто может вызывать разрывы в - нумерации при отмене транзакций.</P> - - - <H3><A name="item4.12">4.12</A>) Что такое <SMALL>OID</SMALL>? Что такое - <SMALL>CTID</SMALL>?</H3> - - <P>ЕÑли таблица Ñоздана Ñ <SMALL>WITH OIDS</SMALL>, то ÐºÐ°Ð¶Ð´Ð°Ñ Ñтрока - получает уникальный индентификатор <SMALL>OID</SMALL>. - O<SMALL>ID</SMALL> - Ñто автоматичеÑки назначаемое уникальное 4-Ñ… - байтовое целое чиÑло, которое уникально Ð´Ð»Ñ Ð²Ñей уÑтановленной СУБД. - Однако, поÑле того как его значение превыÑит 4 миллиарда, Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ - O<SMALL>ID</SMALL> начинают дублироватьÑÑ. PostgreSQL иÑпользует - <SMALL>OID</SMALL> Ð´Ð»Ñ ÑвÑÐ·Ñ‹Ð²Ð°Ð½Ð¸Ñ Ñвоих внутренних таблиц.</P> - - <P>Ð”Ð»Ñ ÑƒÐ½Ð¸ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð² Ñтроках таблицы пользователÑ, лучшим - ÑпоÑобом ÑвлÑетÑÑ Ð¸Ñпользование <SMALL>SERIAL</SMALL> вмеÑто - O<SMALL>ID</SMALL>, потому что поÑледовательноÑти <SMALL>SERIAL</SMALL> - уникальны только внутри таблицы и таким образом меньше подвержены - переполнению. Ð”Ð»Ñ Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ð¹ 8-ми байтной поÑледовательноÑти - доÑтупен тип <SMALL>SERIAL8</SMALL>. - - <P>C<SMALL>TID</SMALL> иÑпользуетÑÑ Ð´Ð»Ñ Ð¸Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ð¸ Ñпециальных - физичеÑких запиÑей Ñ Ð±Ð»Ð¾Ñ‡Ð½Ñ‹Ð¼Ð¸ и offset значениÑми. C<SMALL>TID</SMALL> - изменÑетÑÑ Ð¿Ð¾Ñле того как Ñтроки в таблице были изменены или перегружены. - <P>T<SMALL>ID</SMALL> иÑпользуетÑÑ Ð¸Ð½Ð´ÐµÐºÑными запиÑÑми в качеÑтве - ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»Ñ Ð½Ð° физичеÑкие запиÑи.</P> - - - <H3><A name="item4.13">4.13</A>) Почему Ñ Ð¿Ð¾Ð»ÑƒÑ‡Ð°ÑŽ ошибку <I>"ERROR: Memory - exhausted in AllocSetAlloc()"</I>?</H3> - - <P>Предположительно у Ð²Ð°Ñ Ð·Ð°ÐºÐ¾Ð½Ñ‡Ð¸Ð»Ð°ÑÑŒ Ð²Ð¸Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ð°Ñ Ð¿Ð°Ð¼ÑÑ‚ÑŒ - или что ваше Ñдро имеет маленький лимит на определенные реÑурÑÑ‹. - ПопытайтеÑÑŒ перед запуÑком Ñервера БД выполнить Ñледующие - команды:</P> -<PRE> - ulimit -d 262144 - limit datasize 256m -</PRE> - - Ð’ завиÑимоÑти от командного интерпретатора shell, только одна из данных - команд выполнитÑÑ ÑƒÑпешно, но она позволит вам уÑтановить больший - Ñегмент данных процеÑÑа и возможно решит проблему. Ðта команда - изменÑет параметры текущего процеÑÑа и вÑех его потомков, Ñозданных - поÑле её запуÑка. ЕÑли у Ð²Ð°Ñ Ð²Ð¾Ð·Ð½Ð¸ÐºÐ»Ð° проблема Ñ <SMALL>SQL</SMALL> - клиентом, потому что backend возвращает Ñлишком большой объем данных, - попытайтеÑÑŒ выполнить Ñту команду перед запуÑком клиента. - - <H3><A name="item4.14">4.14</A>) Как мне узнать, ÐºÐ°ÐºÐ°Ñ Ð²ÐµÑ€ÑÐ¸Ñ PostgreSQL - запущена?</H3> - - <P>Из <I>psql</I>, наберите <CODE>SELECT version();</CODE></P> - - - <H3><A name="item4.15">4.15</A>) Как мне Ñоздать колонку ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð¿Ð¾ умолчанию - будет Ñодержать текущее времÑ?</H3> - - <P>ИÑпользуйте <I>CURRENT_TIMESTAMP</I>:</P> -<PRE> -CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -</PRE> - - <H3><A name="item4.16">4.16</A>) Как мне выполнить внешнее ÑвÑзывание?</H3> - - <P>PostgreSQL поддерживает внешнее ÑвÑзывание, - иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ñтандартный ÑинтакÑÐ¸Ñ SQL. Вот два примера:</P> -<PRE> - SELECT * - FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col); -</PRE> - - или -<PRE> - SELECT * - FROM t1 LEFT OUTER JOIN t2 USING (col); -</PRE> - - <P>Ðто идентичные запроÑÑ‹ ÑвÑÐ·Ñ‹Ð²Ð°Ð½Ð¸Ñ t1.col и t2.col, также возвращают - любые неÑвÑзанные Ñтроки в t1 (которые не Ñовпадают Ñ t2). - <SMALL>RIGHT</SMALL> ÑвÑзывание должно добавить неÑвÑзанные Ñтроки - t2. <SMALL>FULL</SMALL> ÑвÑзывание должно возвратить Ñовпавшие - Ñтроки Ð¿Ð»ÑŽÑ Ð²Ñе неÑвÑзанные Ñтроки из t1 и t2. Слово <SMALL>OUTER</SMALL> - ÑвлÑетÑÑ Ð½ÐµÐ¾Ð±Ñзательным и назначаетÑÑ Ð² <SMALL>LEFT</SMALL>, - <SMALL>RIGHT</SMALL> и <SMALL>FULL</SMALL> ÑвÑзываниÑÑ…. Обычные - ÑвÑÐ·Ñ‹Ð²Ð°Ð½Ð¸Ñ Ð½Ð°Ð·Ñ‹Ð²Ð°ÑŽÑ‚ÑÑ <SMALL>INNER</SMALL> ÑвÑзываниÑ.</P> - - <H3><A name="item4.17">4.17</A>) Как выполнÑÑ‚ÑŒ запроÑÑ‹, иÑпользующие неÑколько - баз данных?</H3> - - <P>Ðе ÑущеÑтвует ÑпоÑоба Ñоздать Ð·Ð°Ð¿Ñ€Ð¾Ñ Ðº базам данных отличным от текущей. - ПоÑкольку PostgreSQL загружает ÑиÑтемные каталоги Ñпецифичные Ð´Ð»Ñ Ð±Ð°Ð·Ñ‹ - данных, непонÑтно даже, как должен ÑÐµÐ±Ñ Ð²ÐµÑти такой межбазовый запроÑ.</P> - - <P><I>contrib/dblink</I> позволÑет запроÑÑ‹ между базами, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ - вызовы функций. РазумеетÑÑ, клиент может одновременно также уÑтанавливать - ÑÐ¾ÐµÐ´Ð¸ÐµÐ½ÐµÐ½Ð¸Ñ Ñ Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð½Ñ‹Ð¼Ð¸ базами данных и таких образом объединÑÑ‚ÑŒ - информацию из них.</P> - - <H3><A name="item4.18">4.18</A>) Как мне вернуть из функции неÑколько Ñтрок таблицы?</H3> - - <P>Ð’Ñ‹ можете легко иÑпользовать функции, возвращающие ÑпиÑок, - <a href="http://wiki.postgresql.org/wiki/Return_more_than_one_row_of_data_from_PL/pgSQL_functions"> - http://wiki.postgresql.org/wiki/Return_more_than_one_row_of_data_from_PL/pgSQL_functions</a>.</P> - - <H3><A name="item4.19">4.19</A>) Почему Ñ Ð¿Ð¾Ð»ÑƒÑ‡Ð°ÑŽ ошибку "relation with OID #### - не ÑущеÑтвует", когда обращаютÑÑŒ к временным таблицам в функциÑÑ… PL/PgSQL?</H3> - - <P>Ð’ PostgreSQL до верÑии 8.3, PL/PgSQL кÑширует Ñценарии функции и один из - негативных Ñффектов Ñтого ÑоÑтоит в том, что еÑли Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ PL/PgSQL обращаетÑÑ - к временной таблице и Ñта таблица позднее удалÑетÑÑ Ð¸ переÑоздаетÑÑ, а Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ - затем вызываетÑÑ Ñнова, то ее вызов приведет к ошибке, потому что ÑкÑшированное - Ñодержимое функции Ñодержит указатель на Ñтарую временную таблицу. Чтобы решить - Ñту проблему, иÑпользуйте <SMALL>EXECUTE</SMALL> Ð´Ð»Ñ Ð´Ð¾Ñтупа к временным - таблицам в PL/PgSQL. ИÑпользование Ñтого оператора заÑтавит Ð·Ð°Ð¿Ñ€Ð¾Ñ - перегенерироватьÑÑ ÐºÐ°Ð¶Ð´Ñ‹Ð¹ раз.</P> - - <P>Ð’ PostgreSQL 8.3 и позднее, Ñтой проблемы нет.</p> - - - <H3><A name="item4.20">4.20</a>) Какие еÑÑ‚ÑŒ Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ñ€ÐµÐ¿Ð»Ð¸ÐºÐ°Ñ†Ð¸Ð¸?</H3> - - <P>Ð¥Ð¾Ñ‚Ñ "репликациÑ" -- Ñто единый термин, еÑÑ‚ÑŒ неÑколько разных технологий - Ð´Ð»Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ñ€ÐµÐ¿Ð»Ð¸ÐºÐ°Ñ†Ð¸Ð¹ Ñ Ñ€Ð°Ð·Ð½Ñ‹Ð¼Ð¸ оÑобенноÑÑ‚Ñми Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹.</P> - - <P>Ð ÐµÐ¿Ð»Ð¸ÐºÐ°Ñ†Ð¸Ñ Master/slave позволÑет иметь один главный (master) Ñервер - Ð´Ð»Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð·Ð°Ð¿Ñ€Ð¾Ñов чтениÑ/запиÑи, в то Ð²Ñ€ÐµÐ¼Ñ ÐºÐ°Ðº подчинённые - (slave) Ñервера могут производить только запроÑÑ‹ - чтениÑ/<SMALL>SELECT</SMALL>. Ðаиболее популÑрным решением Ð´Ð»Ñ Ñ€ÐµÐ¿Ð»Ð¸ÐºÐ°Ñ†Ð¸Ð¸ - master-slave в PostgreSQL ÑвлÑетÑÑ - <A href="http://main.slony.info/"> - Slony-I</A>.</P> - - <P>Ð ÐµÐ¿Ð»Ð¸ÐºÐ°Ñ†Ð¸Ñ Multi-master позволÑет выполнÑÑ‚ÑŒ запроÑÑ‹ чтениÑ/запиÑи - на неÑкольких, реплицируемых друг Ñ Ð´Ñ€ÑƒÐ³Ð¾Ð¼ компьюетрах. Ðта оÑобенноÑÑ‚ÑŒ - также приводит к потере производительноÑти, потому что необходима - ÑÐ¸Ð½Ñ…Ñ€Ð¾Ð½Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹ между неÑколькими Ñерверами. Ðаиболее - популÑрным решением Ð´Ð»Ñ Ñ‚Ð°ÐºÐ¾Ð¹ репликации в PostgreSQL ÑвлÑетÑÑ - <A href="http://pgfoundry.org/projects/pgcluster/">PGcluster</A>. - - <H3><A name="item4.21">4.21</A>) Почему имена таблицы и колонок не - раÑпознаютÑÑ Ð² в моём запроÑе? Почему не ÑохранÑÑŽÑ‚ÑÑ Ð·Ð°Ð³Ð»Ð°Ð²Ð½Ñ‹Ðµ буквы?</H3> - - <P>Ðаиболее чаÑто имена нераÑпознаютÑÑ Ð¸Ð·-за иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð²Ð¾Ð¹Ð½Ñ‹Ñ… кавычек в - имени таблицы или колонки при Ñоздании таблицы. При иÑпользовании двойных - кавычек, Ð¸Ð¼Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ‹ и колонки (которые называют идентификаторами) - ÑохранÑÑŽÑ‚ÑÑ Ð² <A href="http://www.postgresql.org/docs/current/static/sql-syntax.html#SQL-SYNTAX-IDENTIFIERS"> - региÑтро-завиÑимом виде</A>; Ñто означает, что вы должны иÑпользовать - двойные кавычки, когда указываете Ñти имена в запроÑе. Ðекоторые - интерфейÑÑ‹, такие как pgAdmin, во Ð²Ñ€ÐµÐ¼Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ‹ добавлÑÑŽÑ‚ - двойные кавычки автоматичеÑки. Таким образом, чтобы идентификаторы - раÑпознавалиÑÑŒ вы должны Ñледовать одному из Ñледующих правил: - <UL> - <LI>Избегать иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð²Ð¾Ð¹Ð½Ñ‹Ñ… кавычек при Ñоздании таблиц</LI> - <LI>ИÑпользовать в идентификаторах только Ñимволы нижнего региÑтра</LI> - <LI>ИÑпользовать двойные кавычки Ð´Ð»Ñ Ð¸Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ‚Ð¾Ñ€Ð¾Ð² в запроÑах</LI> - </UL> - - </BODY> -</HTML> diff --git a/doc/src/FAQ/FAQ_turkish.html b/doc/src/FAQ/FAQ_turkish.html deleted file mode 100644 index 6327029c75d643bc518988075600c95d73c07c7e..0000000000000000000000000000000000000000 --- a/doc/src/FAQ/FAQ_turkish.html +++ /dev/null @@ -1,1019 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> -<html> -<head> - <meta http-equiv="Content-Type" content="text/html; charset=utf8"> - <title>PostgreSQL Sıkça Sorulan Sorular - Türkçe</title> - <style type="text/css"><!-- - body { background: #FFFFFF; } - a:link { color: #ff0000; } - a:active { color: #0000ff; } - a:visited { color: #a00000; } - i { font-style: oblique; } - body, h1, h2, h4, ul, p, a { font-family: helvetica, arial, sans-serif; font-size: medium; color: black; } - pre { color: #5C5C5C; padding-left: 30px; } - .fixme { color: cyan; } - --></style> -</head> -<body bgcolor="#ffffff" text="#000000" link="#ff0000" vlink="#a00000" alink="#0000ff"> - -<h1>PostgreSQL için Sıkça Sorulan Sorular (SSS)</h1> -<p>Son güncelleme : 15 Kasım 2004 Pazartesi - 15:03:23</p> -<p>Current maintainer: Bruce Momjian -(<a href="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</a>)<br></p> -<p>Çevirenler : Devrim Gündüz (<a href="mailto:devrim@tdmsoft.com">devrim@tdmsoft.com</a>)<br>Nicolai Tufar -(<a href="mailto:ntufar@tdmsoft.com">ntufar@tdmsoft.com</a>)<BR>Volkan YAZICI (<a href="mailto:volkany@phreaker.net">volkany@phreaker.net</a>)</p> -<p>Bu belgenin en güncel hali, <a href="http://www.postgresql.org/docs/faqs/FAQ_turkish.html">http://www.PostgreSQL.org/docs/faqs/FAQ_turkish.html</a> -ve <a href="http://www.gunduz.org/seminer/pg/FAQ_turkish.html">http://www.gunduz.org/seminer/pg/FAQ_turkish.html</a> -adreslerinde görülebilir.</p> -<p>Platforma özel sorularınız, <a href="http://www.postgresql.org/docs/index.html">http://www.PostgreSQL.org/docs/index.html</a> adresinde yanıtlanır.</p> - -<hr> - -<h2 align="center">Genel Sorular</h2> - <a href="#1.1">1.1</a>) PostgreSQL nedir? Nasıl okunur?<br> - <a href="#1.2">1.2</a>) PostgreSQL'in hakları nedir?<br> - <a href="#1.3">1.3</a>) PostgreSQL, hangi Unix platformlarında çalışır?<br> - <a href="#1.4">1.4</a>) Hangi Unix olmayan uyarlamaları bulunmaktadır?<br> - <a href="#1.5">1.5</a>) PostgreSQL'i nereden indirebilirim?<br> - <a href="#1.6">1.6</a>) DesteÄŸi nereden alabilirim?<br> - <a href="#1.7">1.7</a>) En son sürümü nedir?<br> - <a href="#1.8">1.8</a>) Hangi belgelere ulaÅŸabilirim?<br> - <a href="#1.9">1.9</a>) Bilinen hatalar ya da eksik özelliklere nereden ulasabilirim?<br> - <a href="#1.10">1.10</a>) Nasıl <small>SQL</small> öğrenebilirim?<br> - <a href="#1.11">1.11</a>) PostgreSQL 2000 yılına uyumlu mudur?<br> - <a href="#1.12">1.12</a>) GeliÅŸtirme takımına nasıl katılabilirim??<br> - <a href="#1.13">1.13</a>) Bir hata raporunu nasıl gönderebilirim?<br> - <a href="#1.14">1.14</a>) PostgreSQL, diÄŸer <small>VTYS(DBMS)</small> lerle nasıl - karşılaÅŸtırılabilir?<br> - <a href="#1.15">1.15</a>) PostgreSQL'e maddi açıdan nasıl destek olabilirim?<br> - -<h2 align="center">Kullanıcı/istemci Soruları</h2> - <a href="#2.1">2.1</a>) PostgreSQL için <i>ODBC</i> sürücüleri var mı?<br> - <a href="#2.2">2.2</a>) PostgreSQL'i web sayfalarında kullanabilmek için - hangi araçlar bulunmaktadır?<br> - <a href="#2.3">2.3</a>) PostgreSQL'in grafik kullanıcı arabirimi var mıdır?<br> - <a href="#2.4">2.4</a>) PostgreSQL ile iletiÅŸimi kurabilmek için - hangi dilleri kullanabilirim? <br> - -<h2 align="center">Yönetimsel Sorular</h2> - <a href="#3.1">3.1</a>) PostgreSQL'i <code>/usr/local/pgsql</code> dizininden - baÅŸka dizinlere nasıl kurabilirim?<br> - <a href="#3.2">3.2</a>) <i>Postmaster</i>'ı baÅŸlattığımda <code>Bad System Call</code> - ya da <code>core dumped</code> mesajı alıyorum. Neden?<br> - <a href="#3.3">3.3</a>) <i>Postmaster</i>'ı baÅŸlattığımda, <code>IpcMemoryCreate</code> - hatası alıyorum. Neden?<br> - <a href="#3.4">3.4</a>) <i>Postmaster</i>'ı, baÅŸlattığımda, <code>IpcSemaphoreCreate</code> - hatası alıyorum. Neden?<br> - <a href="#3.5">3.5</a>) DiÄŸer bilgisayarların benim PostgreSQL veritabanı - sunucuma baÄŸlantılarını nasıl kontrol edebilirim?<br> - <a href="#3.6">3.6</a>) Veritabanı motorunu daha iyi baÅŸarım icin nasıl ayarlayabilirim?<br> - <a href="#3.7">3.7</a>) Hangi hata ayıklama özellikleri bulunmaktadır?<br> - <a href="#3.8">3.8</a>) BaÄŸlanmaya çalışırken, neden "<code>Sorry, too many clients</code>" - hatasını alıyorum. Neden?<br> - <a href="#3.9">3.9</a>) <code>pgsql_tmp</code>dizinin içindeki dosyalar nelerdir?<br> - <a href="#3.10">3.10</a>) PostgreSQL sürümlerini yükseltmek için neden bir - <code>dump/reload</code> iÅŸlemi gerçekleÅŸtirmek zorundayım?<br> - <a href="#3.11">3.11</a>) Nasıl bir donanım kullanmalıyım?br> - -<h2 align="center">Ä°ÅŸletimsel Sorular</h2> - <a href="#4.1">4.1</a>) <i>Binary cursor</i> ve <i>normal cursor</i> arasındaki fark nedır?<br> - <a href="#4.2">4.2</a>) Sorgunun sadece ilk birkaç satırını nasıl - <code>SELECT</code> edebilirim?<br> - <a href="#4.3">4.3</a>) <i>psql</i>'in içinde gördügüm tabloların ya da diÄŸer - ÅŸeylerin listesini nasıl alabilirim?<br> - <a href="#4.4">4.4</a>) Bir tablodan bir kolonu nasıl kaldırabilirim?<br> - <a href="#4.5">4.5</a>) Bir satır, tablo ve veritabanı için en fazla büyüklük nedir?<br> - <a href="#4.6">4.6</a>) Tipik bir metin dosyasındaki veriyi saklamak için ne - kadar disk alanı gereklidir?<br> - <a href="#4.7">4.7</a>) Veritabanında hangi tablo ya da <i>index</i>'lerin - tanımlandığını nasıl görebilirim?<br> - <a href="#4.8">4.8</a>) Sorgularım cok yavaÅŸ, ya da <i>index</i>'lerimi kullanmıyorlar. Neden?<br> - <a href="#4.9">4.9</a>) <i>Query-optimizer</i>'ın sorgularımı nasıl deÄŸerlendirdiÄŸini, - iÅŸleme soktuÄŸunu nasıl görebilirim?<br> - <a href="#4.10">4.10</a>) <i>R-tree index</i> nedir?<br> - <a href="#4.11">4.11</a>) <i>Genetic Query Optimizer</i> nedir?<br> - <a href="#4.12">4.12</a>) Düzenli ifade (<i>Regular Expression</i>) aramalarını - ve büyük/küçük harfe duyarsız aramaları nasıl yapabilirim? Bu büyük/küçük harfe duyarlı - aramalar için <i>index</i>'i nasıl kullanabilirim?<br> - <a href="#4.13">4.13</a>) Bir sorguda, bir alanın <code>NULL</code> olduÄŸunu nasıl - ortaya çıkarabilirim?<br> - <a href="#4.14">4.14</a>) Çesitli karakter tipleri arasındaki farklar nelerdir?<br> - <a href="#4.15.1">4.15.1</a>) Nasıl <code>serial</code>/otomatik artan - (<i>auto-incrementing</i>) bir alan yaratabilirim?<br> - <a href="#4.15.2">4.15.2</a>) <code>Serial</code> giriÅŸinin deÄŸerini nasıl alabilirim?<br> - <a href="#4.15.3">4.15.3</a>) <code>currval()</code> ve <code>nextval()</code> - diÄŸer kullanıcılara sorun yaratmaz mı?<br> - <a href="#4.15.4">4.15.4</a>) Neden sequence sayıların <i>transaction</i> - iÅŸleminin iptalinden sonra yeniden kullanılıyor? Neden <code>sequence/SERIAL</code> - kolonumdaki sayılarda atlamalar oluyor?<br> - <a href="#4.16">4.16</a>) <code>OID</code> nedir? <code>TID</code> nedir?<br> - <a href="#4.17">4.17</a>) PostgreSQL' de kullanılan bazı terimlerin anlamları nelerdir?<br> - <a href="#4.18">4.18</a>) Neden "<code>ERROR: Memory exhausted in AllocSetAlloc()</code>" - hatasını alıyorum?<br> - <a href="#4.19">4.19</a>) Hangi PostgreSQL sürümünü çalıstırdığımı nasıl görebilirim?<br> - <a href="#4.20">4.20</a>) Neden <i>large-object</i> iÅŸlemlerim, "<code>invalid large - obj descriptor</code>" hatasını veriyor?<br> - <a href="#4.21">4.21</a>) Åžu andaki zamanı öntanımlı deÄŸer olarak kabul - eden kolonu nasıl yaratırım?<br> - <a href="#4.22">4.22</a>) Neden <code>IN</code> kullanan <i>subquery</i>'lerim çok yavaÅŸ?<br> - <a href="#4.23">4.23</a>) <i>Outer join</i> iÅŸlemini nasıl yapabilirim?<br> - <a href="#4.24">4.24</a>) Aynı anda birden fazla veritabanında nasıl iÅŸlem yapabilirim?<br> - <a href="#4.25">4.25</a>) Bir fonksiyondan nasıl çoklu satır ya da kolon döndürebilirim?<br> - <a href="#4.26">4.26</a>) Neden Pl/PgSQL fonksiyonları içinden güvenli - bir ÅŸekilde tablo yaratma/kaldırma iÅŸlemlerini yapamıyoruz?<br> - <a href="#4.27">4.27</a>) Hangi ÅŸifreleme seçenekleri bulunmaktadır?<br> - - -<h2 align="center">PostgreSQL Özelliklerini GeniÅŸletmek</h2> - <a href="#5.1">5.1</a>) Kullanıcı-tanımlı bir fonksiyon yazdım. <i>psql</i>'de - çalıştırdığım zaman neden <code>core dump</code> ediyor?<br> - <a href="#5.2">5.2</a>) PostgreSQL'e nasıl yeni veri tipleri/fonksiyonlar ekleyebilirim?<br> - <a href="#5.3">5.3</a>) Bir tuple döndürmek için bir C fonksiyonunu nasıl yazarım?<br> - <a href="#5.4">5.4</a>) Bir kaynak dosyasında deÄŸiÅŸiklik yaptım. - Yeniden derlememe raÄŸmen deÄŸiÅŸiklik geçerli olmuyor. Neden?<br> - - <hr> - - <h2 align="center">Genel Sorular</h2> - - <h4><a name="1.1">1.1</a>) PostgreSQL nedir? Nasıl okunur?</h4> - <p>PostgreSQL, <i>Post-Gres-Q-L</i>. olarak okunur</p> - <p>PostgreSQL, yeni-nesil <small>VTYS</small> araÅŸtırma prototipi olan POSTGRES - veritabanı yönetim sisteminin geliÅŸtirilmesidir. POSTGRES'in zengin veri tiplerini ve - güçlü veri modelini tutarken, <small>SQL</small>'in geliÅŸtirilmiÅŸ alt kümesi - olan PostQuel dilini kullanır. PostgreSQL ücretsizdir ve kaynak kodu açık dağıtılır.</p> - <p>PostgreSQL, PostgreSQL geliÅŸtirme listesine üye olan bir Internet geliÅŸtirici - takımı tarafından geliÅŸtirilir. Åžu andaki koordinatör, Marc G. Fournier - (<a href="mailto:scrappy@PostgreSQL.org">scrappy@PostgreSQL.org</a>). - (Bu takıma nasıl katılacagınızı öğrenmek için <a href="#1.6">1.6</a> numaralı maddeyi - okuyunuz.) Bu takım, tüm PostgreSQL geliÅŸiminden sorumludur.</p> - <p>PostgreSQL 1.01 sürümünün yazarları Andrew Yu ve Jolly Chen idi. Bunların dışında - bir kaç kisi de uyarlama, hata ayıklama ve kodun geliÅŸtirilmesi için çalısmıştı. - PostgreSQL'in türediÄŸi orijinal Postgres kodu, lisans, lisansüstü ve akademisyenler - tarafından, Professor Michael Stonebraker (University of California, Berkeley) - koordinatörlügünde yazılmıştır.</p> - <p>Berkley'deki yazılımın adı Postgres idi. <small>SQL</small> uyumluluÄŸu - 1995'te eklenince, adı Postgres 95 oldu. 1996 yılının sonlarında adı - PostgreSQL olarak deÄŸiÅŸtirildi.</p> - - <h4><a name="1.2">1.2</a>) PostgreSQL'in hakları nedir?</h4> - <p>PostgreSQL Data Base Management System</p> - - <P>Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group - Portions Copyright (c) 1994-6 Regents of the University of California</P> - - <p>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.</p> - <p>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.</p> - <p>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.</p> - <p>Ãœstteki metin klasik açık-kod lisansı olan BSD lisansıdır. Kaynak kodun nasıl - kullanılabileceÄŸine dair sınırlamaları yoktur. Bu lisansı seviyoruz. DeÄŸiÅŸtirme - niyetimiz bulunmamaktadır.</p> - - <h4><a name="1.3">1.3</a>) PostgreSQL, hangi Unix platforlarında çalışır?</h4> - <p>Genel olarak, modern bir Unix-uyumlu platform PostgreSQL'i çalıştıracaktır. - Ayrıntılı bilgi için kurulum belgelerine bakabilirsiniz.</p> - - <h4><a name="1.4">1.4</a>) Hangi Unix olmayan uyarlamaları bulunmaktadır?</h4> - <P>PostgreSQL 8.0 sürümü ile , PostgreSQL artık Win2000, WinXP ve Win2003 gibi Microsoft - Windows NT tabanlı iÅŸletim sistemlerinde doÄŸal olarak çalışmaya baÅŸlamıştır. PaketlenmiÅŸ bir - kurulum programı, <a href="http://pgfoundry.org/projects/pginstaller">http://pgfoundry.org/projects/pginstaller</a>. adresinden - indirilebilir.</P> - - <p>Ayrıca, http://forge.novell.com adresinde Novell Netware 6 portu bulunmaktadır.</p> - - <h4><a name="1.5">1.5</a>) PostgreSQL'i nereden indirebilirim?</h4> - <p>PostgreSQL için ana anonim ftp sitesi <i><a href="ftp://ftp.PostgreSQL.org/pub">ftp://ftp.PostgreSQL.org/pub</a></i> - adresidir. Yansılar için, ana web sayfamıza bakabilirsiniz.</p> - - <h4><a name="1.6">1.6</a>) Nereden destek alabilirim?</h4> - <p>Ana e-posta listesi : pgsql-general@PostgreSQL.org. PostgreSQL konusundaki tartışmalara - açıktır. Ãœye olmak için, aÅŸağıdaki satırları e-postanızın <i>body</i> kısmına - (konu kısmına deÄŸil) yazıp, pgsql-general-request@PostgreSQL.org adresine gönderin:</p> - <pre>subscribe<br>end</pre> - <p>Aynı zamanda, bir <i>digest</i> listesi bulunmaktadır. Bu listeye üye olmak için, - pgsql-general-digest-request@PostgreSQL.org adresine, body kısmında</p> - <pre>subscribe<br>end</pre> - <p>yazan bir e-posta atmanız yeterli olacaktır.</p> - <p><i>Digest</i> postalar, ana liste 30k civarında e-postaya ulaÅŸtığında - üyelere gönderilmektedir.</p> - <p><i>Bug</i>'lar için bir e-posta listesi bulunmaktadır. Bu listeye üye olmak için, - pgsql-bugs-request@PostgreSQL.org adresine, <i>body</i> kısmında</p> - <pre>subscribe<br>end</pre> - <p>yazan bir e-posta atmanız yeterli olacaktır.</p> - <p>Aynı zamanda, geliÅŸtiriciler için tartışma listesi bulunmaktadır. Bu listeye - üye olmak için, pgsql-hackers-request@PostgreSQL.org adresine, body kısmında</p> - <pre>subscribe<br>end</pre> - <p>yazan bir e-posta atmanız yeterli olacaktır.</p> - <p>Bunun dışındaki e-posta listelerine ve PostgreSQL hakkında bilgiye, PostgreSQL WWW - ana sayfasından ulasabilirsiniz: <i><a href="http://www.PostgreSQL.org">http://www.PostgreSQL.org</a></i></p> - <p>Aynı zamanda, EFNet üzerinde, <code>#PostgreSQL</code> adlı bir IRC kanalı - bulunmaktadır. Bunun için, <code>irc -c '#PostgreSQL' "$USER" irc.phoenix.net</code> - Unix komutunu kullanabilirsiniz.</p> - <p>Ticari destek veren firmaların listesine</p> - <p><i><a href="http://www.postgresql.org/users-lounge/commercial-support.html">http://www.postgresql.org/users-lounge/commercial-support.html</a></i></p> - <p>adresinden ulaÅŸbilirsiniz.</p> - - <h4><a name="1.7">1.7</a>) En son sürüm nedir?</h4> - <p>PostgreSQL'in son sürümü 7.4.6'dır.</p> - <p>Her 6-8 ayda <i>ana sürüm</i> çıkarılması planlanmaktadır.</p> - - <h4><a name="1.8">1.8</a>) Hangi belgelere ulaÅŸabilirim?</h4> - <p>Dağıtımın içinde, kitapçıklar, kitapçık sayfaları ve bazı küçük örnekler verilmektedir. - <code>/doc</code> dizinine bakınız. Ayrıca, bu el kitapçıklarını online olarak - <i><a href="http://www.PostgreSQL.org/docs/">http://www.PostgreSQL.org/docs/</a></i> adresinden inceleyebilirsiniz.</p> - <p><i><a href="http://www.PostgreSQL.org/docs/awbook.html">http://www.PostgreSQL.org/docs/awbook.html</a></i> - ve <i><a href="http://www.commandprompt.com/ppbook">http://www.commandprompt.com/ppbook</a></i> - adreslerinde PostgreSQL kitapları bulunmaktadır. PostgreSQL kitablarının listesine, - <i><a href="http://www.ca.PostgreSQL.org/books/">http://www.ca.PostgreSQL.org/books/</a></i> adresinden ulaÅŸaiblirsiniz. - Ayrıca, PostgreSQL konusundaki teknik makalelere de - <i><a href="http://techdocs.PostgreSQL.org/">http://techdocs.PostgreSQL.org/</a></i> adresinden ulaÅŸabilirsiniz.</p> - <p>psql'in, \d ile baslayan veri tipler, operatorler, fonksiyonlar, - <i>aggregate</i>'ler, vb. ile ilgili güzel komutları vardır.</p> - <p>Web sitemiz daha fazla belgeyi içermektedir.</p> - - <h4><a name="1.9">1.9</a>) Bilinen hatalar ya da eksik - özelliklere nereden ulaÅŸabilirim?</h4> - <p>PostgreSQL SQL-92 uyumluluÄŸu içindedir, standartlardan fazla da özellikleri - bulunmaktadır. Bilinen hatalar, eksik özellikler ve gelecek ile ilgili planlar için - TODO listesine bakınız.</p> - - <h4><a name="1.10">1.10</a>) Nasıl <small>SQL</small> öğrenebilirim?</h4> - <p><i><a href="http:/www.PostgreSQL.org/docs/awbook.html">http:/www.PostgreSQL.org/docs/awbook.html</a></i> - adresindeki kitap SQL ögretecektir. - <i><a href="http://www.commandprompt.com/ppbook">http://www.commandprompt.com/ppbook</a></i> - adresinde de bir baska PostgreSQL kitabı bulunmaktadır.</p> - <p><i><a href="http://www.intermedia.net/support/sql/sqltut.shtm">http://www.intermedia.net/support/sql/sqltut.shtm</a></i>, - <i><a href="http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM">http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM</a></i> - <i><a href="http://sqlcourse.com">http://sqlcourse.com</a></i> - ve <i><a href="http://sqlcourse2.com">http://sqlcourse2.com</a></i> - adreslerinde de güzel belgeler bulunmaktadır.</p> - <p>Bir baÅŸkası da, <i><a href="http://members.tripod.com/er4ebus/sql/index.htm">http://members.tripod.com/er4ebus/sql/index.htm</a></i> - adresinde bulunan "<i>Teach Yourself SQL in 21 Days, Second Edition</i>" kitabıdır.</p> - <p>Bazı kullanıcılarımız da ÅŸu kitabı önermektedirler: "<i>The Practical SQL Handbook, - Bowman, Judith S., et al.,Addison-Wesley</i>". Bazıları ise "<i>The Complete - Reference SQL, Groff et al., McGraw-Hill</i>" kitabını önermektedirler.</p> - - <h4><a name="1.11">1.11</a>) PostgreSQL 2000 yılına uyumlu mudur?</h4> - <p>Evet.</p> - - <h4><a name="1.12">1.12</a>) GeliÅŸtirme takımına nasıl katılabilirim?</h4> - <p>Öncelikle, en son kaynak kodunu indirin ve web sitemizdeki ya da dağıtımın içindeki - PostgreSQL Developer belgesini okuyun. Ardından, pgsql-hackers ve pgsql-patches - listelerine üye olun. Üçüncü olarak da, pgsql-pacthes listesine yüksek kalitede - yamalar gönderin.</p> - <p>PostgreSQL CVS arÅŸivine eriÅŸim izni olan, 10 kadar geliÅŸtirici bulunmaktadır. - Hepsi defalarca, diÄŸer kiÅŸilerin yaptığından çok daha yüksek-kaliteli yamalar - göndermiÅŸlerdir. Ayrıca biz de bu geliÅŸtiricilerin ekledikleri yamaların yüksek - kalitede olduÄŸuna güveniyoruz.</p> - - <h4><a name="1.13">1.13</a>) Bir hata raporunu nasıl gönderebilirim?</h4> - <p>PostgreSQL BugTool sayfasına gidiniz. O sayfada bir <i>bug</i> bildirmek - için neleri yapmanız gerektiÄŸi anlatılmıştır.</p> - <p>Ayrıca, <i><a href="ftp://ftp.PostgreSQL.org/pub">ftp://ftp.PostgreSQL.org/pub</a></i> - ftp adresimizde, yeni bir PostgreSQL sürümü ya da yaması olup olmadığıni kontrol ediniz.</p> - - <h4><a name="1.14">1.14</a>) PostgreSQL, diger DBMS'lerle nasıl karşılastırılabilir?</h4> - <p>Bir yazılımın gücünü ölçmek için çeÅŸitli yollar vardır: Yazılımın özellikleri, - baÅŸarımı, güvenilirliÄŸi, desteÄŸi ve ücreti.</p> - <p>Özellikler:</p> - <p>PostgreSQL mevcut büyük ticari veritabanlarının, <i>transaction</i>, - <i>subselect</i>, <i>trigger</i>, <i>view</i>, <i>foreign key referential integrity</i> - ve <i>sophisticated locking</i> gibi (<i>user-defined types</i>), <i>rules</i>, - <i>inheritance</i> ve <i>lock</i> cakışmalarını düşürmek için <i>multi-version</i> - uyumluluk özellikleri bulunmaktadır.</p> - <p>Performans (BaÅŸarım):</p> - <p>PostgreSQL, diÄŸer ticari ve açık kaynak kodlu veritabanlarıyla yakın baÅŸarımı saÄŸlar. - Bazı açılardan daha hızlıdır, diÄŸer açılardan da yavaÅŸtır. MySQL ya da daha zayıf - veritabanları ile karşılaÅŸtırıldığında, <code>INSERT/UPDATE</code> iÅŸlemlerinde, - <i>transaction</i> bazlı çalıstığımız için daha yavaşız. MySQL, yukarıdaki "özellikler" - kısmında belirtilenlerden hiç birine sahip deÄŸildir. Biz, baÅŸarımımızı her sürümde - arttırsak da, esneklik ve geliÅŸmiÅŸ özellikler için yapılanmış durumdayız. - PostgreSQL'i MySQL ile karşılaÅŸtıran ÅŸu web sitesine bakabilirsiniz: - <i><a href="http://openacs.org/why-not-mysql.html">http://openacs.org/why-not-mysql.html</a></i></p> - <p>Güvenilirlik:</p> - <p><i>DBMS</i>'lerin güvenilir olması gerketiÄŸi, yoksa deÄŸerleri olmayacağını düşünüyoruz. - Çok iyi test edilmiÅŸ, dengeli çalısan minimum sayıda hata içeren kod sunmaya çalışıyoruz. - Her bir sürüm en az 1 aylık beta testlerinden geçirilmektedir. Sürüm geçmiÅŸine bakarsanız, - üretime hazır, dengeli ve kararlı kodlar sunduÄŸumuzu görebilirsiniz. Bu alanda, diÄŸer - veritabanı yazılımlarına üstünlüğümüz olduÄŸuna inanmaktayız.</p> - <p>Destek:</p> - <p>E-posta listemiz, oluÅŸan herhangi bir sorunu çözebilecek büyük sayıda kullanıcı - ve geliÅŸtirici grubunu içerir. Sorununuz için, en az bir ticari veritabanı kadar - rahat çözüm bulabilirsiniz. Gelistiricilere, kullanıcı grubuna, belgelere ve - kaynak koda direk olarak eriÅŸebilme, PostgreSQL desteÄŸini, diÄŸer <i>DBMS</i>'lere - göre daha önemli kılar. Gereksinimi olanlara, ticari destek verilebilir. - (Destek için 1.6 bölümüne bakınız.)</p> - <p>Fiyat:</p> - <p>Ticari ve ticari olmayan tüm kullanımlarınız için PostgreSQL ücretsizdir. Kodumuzu, - yukarıda belirtilen BSD-stili lisanstaki sınırlamalar hariç, ürününüzün içine - ekleyebilirsiniz.</p> - - <h4><a name="1.15">1.15</a>) PostgreSQL'e maddi açıdan nasıl destek olabilirim?</h4> - <p>PostgreSQL, 1996 yılından beri 1. sınıf altyapıya sahiptir. Bunun için, yıllar - boyu çalışıp bu altyapıyı oluÅŸturup yöneten Marc Fournier'e teÅŸekkürler.</p> - <p>Bir açık kaynak kodlu proje için, kaliteli altyapı çok önemlidir. Bu altyapı, - projenin kesilmesini önler ve projenin ilerlemesini hızlandırır.</p> - <p>Tabii ki bu altyapı ucuz deÄŸildir. Ä°ÅŸlerin yürümesi için çeÅŸitli yılık ve anlık - harcamalarımız olmaktadır. EÄŸer siz ya da ÅŸirketinizin bu çabamıza bağışta - bulunabilecek parası varsa, lütfen - <i><a href="http://store.pgsql.com/">http://store.pgsql.com/</a></i> - adresine gidiniz ve bağışta, hibede bulununuz.</p> - <p>Web sayfasının 'PostgreSQL Inc.' den bahsetmesine raÄŸmen, "katkıda bulunanlar" - (<i>contributors</i>) maddesi sadece PostgreSQL projesini desteklemek içindir ve - belirli bir ÅŸirketin para kaynağı deÄŸildir. isterseniz, baÄŸlantı adresine bir - çek gönderebilirsiniz.</p> - - <hr> - - <h2 align="center">Kullanıcı/Ä°stemci Soruları</h2> - - <h4><a name="2.1">2.1</a>) PostgreSQL icin ODBC sürücüleri var mı?</h4> - <p>iki tane ODBC sürücüsü bulunmaktadır: PsqlODBC ve OpenLink ODBC.</p> - <p>PsqlODBC'i http://gborg.postgresql.org/project/psqlodbc/projdisplay.php adresinden - indirebilirsiniz.</p> - <p>OpenLink ODBC http://www.openlinksw.com adresinden alınabilir.Bu sürücü, - kendi standart ODBC istemci yazılımı ile çalıstığından, destekledikleri - her platformda (Win, Mac, Unix, VMS) PostgreSQL ODBC bulunmalidir.</p> - <p>Ãœcretsiz sürümü olmakla beraber, ticari kalitede destek almak isteyenlere satmak isteyeceklerdir. - Sorularınızı lütfen postgres95@openlink.co.uk adresine gönderiniz.</p> - - <h4><a name="2.2">2.2</a>) PostgreSQL'i web sayfalarında kullanabilmek için hangi - araçlar bulunmaktadır?</h4> - <p><i><a href="http://www.webreview.com/">http://www.webreview.com/</a></i> adresinde, - arka planda veritabanı çalıstıran Web sayfaları için giriÅŸ seviyesinde bilgi bulunmaktadır.</p> - <p>Web ile bütünleÅŸme için, PHP (<i><a href="http://www.php.net/"></a></i>) - mükemmel bir arabirim sunar.</p> - <p>Karmaşık sorunlar için, çoÄŸu kisi Perl arabirimini ve CGI.pm ya da mod_perl kullanır.</p> - - <h4><a name="2.3">2.3</a>) PostgreSQL'in grafik kullanıcı arabirimi var mıdır?</h4> - <p>ÇeÅŸitli grafik arabirimlerimiz bulunmaktadır. Bunların arasında, - PgAccess (<i><a href="http://www.pgaccess.org/">http://www.pgaccess.org/</a></i>), - PgAdmin II (<i><a href="http://www.pgadmin.org/">http://www.pgadmin.org/</a></i>, sadece Win32 için), - RHDB Admin (<i><a href="http://sources.redhat.com/rhdb/">http://sources.redhat.com/rhdb/</a></i>) - ve Rekall (<i><a href="http://www.thekompany.com/products/rekall/">http://www.thekompany.com/products/rekall/</a></i>) - bulunmaktadır. Ayrıca, PostgreSQL için web tabanlı bir arabirim olan - PHPPgAdmin (<i><a href="http://phppgadmin.sourceforge.net/">http://phppgadmin.sourceforge.net/</a></i>) bulunmaktadır.</p> - <p>Daha ayrıntılı liste için - <i><a href="http://techdocs.postgresql.org/guides/GUITools">http://techdocs.postgresql.org/guides/GUITools</a></i> - adresine bakabilirsiniz.</p> - - <h4><a name="2.4">2.4</a>) PostgreSQL ile iletiÅŸimi kurabilmek için hangi dilleri kullanabilirim?</h4> - <ul><li>C (libpq)</li> - <li>Embedded C (ecpg)</li> - <li>Java (jdbc)</li> - <li>Python (PyGreSQL)</li> - <li>TCL (libpgtcl)</li></ul> - <p>DiÄŸerleri için, http://gborg.postgresql.org adresindeki Drivers/Interfaces bölümüne - bakabilirsiniz.</p> - - <hr> - - <h2 align="center">Yönetimsel Sorular</h2> - - <h4><a name="3.1">3.1</a>) PostgreSQL'i, <code>/usr/local/pgsql</code> dizininden - baÅŸka dizinlere nasıl kurabilirim?</h4> - <p><i>configure</i> betiÄŸini çalıstırırken, <code>--prefix</code> seçeneÄŸini veriniz.</p> - - <h4><a name="3.2">3.2</a>) postmaster'i baslattıgımda, a Bad System Call ya da core dumped mesajı alıyorum. Neden?</h4> - <p>Bunun birçok nedeni olabilir. Ancak ilk kontrol edilmesi gereken sey, çekirdeginize - System V uzantılarının kurulu olup olmadıgını kontrol etmek olabilir. PostgreSQL - shared memory ve semaphores için çekirdek destegine gereksinim duyar.</p> - - <h4><a name="3.3">3.3</a>) postmaster'i baÅŸlattığımda, <code>ıpcMemoryCreate</code> - hatası alıyorum. Neden?</h4> - <p>Ya çekirdeÄŸinizde <i>shared memory</i> desteÄŸiniz düzgünce yapılandırılmamıştır, - ya da çekirdeÄŸinizdeki mevcut <i>shared memory</i> miktarını büyütmeniz gerekecektir. - Gereksinim duyacağınız miktar, mimarinize ve postmaster için ayarladıgınız tampon - ile <i>backend</i> iÅŸlemi sayısına baÄŸlıdır. Tüm sistemler için, tamponlar ve - iÅŸlemlerde öntanımlı sayılarla, ~ 1MB kadar yere gereksinmeniz olacaktır. - <i><a href="http://www.postgresql.com/docs/7.3/interactive/admin.html">PostgreSQL - 7.3.2 Sistem Yöneticileri Rehberi</a></i>'ne, <i>shared memory</i> ve <i>semaphorelar</i> - hakkındaki ayrıntılı bilgi için bakabilirsiniz.</p> - - <h4><a name="3.3">3.4</a>) postmaster'ı baÅŸlattığımda, - <code>ıpcSemaphoreCreate</code> hatası alıyorum. Neden?</h4> - <p>EÄŸer hata, "<code>ıpcSemaphoreCreate: semget failed (No space left on device)</code>" - ise, çekirdeÄŸiniz yeterli <i>semaphore</i> ile yapılandırılmamış demektir. Postgres, her - bir potansiyel <i>backend</i> için bir <i>semaphore</i> gereksinimi duyar. Geçici - bir çözüm, postmasterı <i>backend</i> iÅŸlemleri için daha az miktarda sınırla - baÅŸlatmak olabilir. <code>-N</code>'i varsayılan deÄŸer olan 32'den küçük bir - deÄŸerle baÅŸlatınız. Daha kalıcı bir çözüm, çekirdeÄŸinizin <code>SEMMNS</code> ve - <code>SEMMNI</code> parametrelerini yükseltmek olacaktır.</p> - <p>Çalışmayan <i>semaphore</i>'lar ağır veritabanı iÅŸlemlerinde çökme yaratabilirler.</p> - <p>EÄŸer hata mesajınız baÅŸka bir ÅŸey ise, çekirdeÄŸinizde <i>semaphore</i> desteÄŸini - yapılandırmamış olabilirsiniz. <i>Shared memory</i> ve <i>semaphore</i>'lar hakkındaki - daha ayrıntılı bilgi için - <i><a href="http://www.postgresql.com/docs/7.3/interactive/admin.html">PostgreSQL - 7.3.2 Sistem Yöneticileri Rehberi</a></i>'ne bakabilirsiniz.</p> - - - <h4><a name="3.5">3.5</a>) Diger bilgisayarların benim PostgreSQL veritabanı - sunucuma baÄŸlantılarını nasıl kontrol edebilirim?</h4> - <p>Ön tanımlı olarak, PostgreSQL sadece yerel makineden <i>Unix domain sockets</i> - kullanarak baÄŸlanılmasına izin verir. Diger makineler, postmaster'a <code>-i</code> - etiketini geçirmezseniz ve <code>$PGDATA/pg_hba.conf</code> dosyasını düzenleyerek - <i>host-based authentication</i>'a olanak vermezseniz, baÄŸlantı yapamayacaklardır.</p> - - <h4><a name="3.6">3.6</a>) Veritabani motorunu daha iyi - baÅŸarım için nasıl ayarlayabilirim?</h4> - <p><i>Index</i>'ler sorguları hızlandırabilir. <code>EXPLAIN</code> komutu, - PostgreSQL'in sorgunuzu nasıl yorumladığını ve hangi <i>index</i>'leri kullandığını - görmenize izin verir.</p> - <p>EÄŸer cok fazla <code>INSERT</code> iÅŸlemi yapıyorsanız, bunları büyük bir - toplu iÅŸlem dosyasıkullanıp <code>COPY</code> komutu ile veritabanına girmeyi - deneyiniz. Bu, tekil <code>INSERT</code>'lerden daha hızlıdır. Ä°kinci olarak, - <code>BEGIN WORK/COMMIT</code> <i>transaction</i> bloÄŸu içinde olmayan ifadeler kendi - <i>transaction</i>'larındaymış gibi düşünülür. Çoklu ifadeleri tek bir - <i>transaction</i> bloÄŸu içinde yapabilirsiniz. Bu, <i>transaction overhead</i>'ini - düşürecektir. Tek bir <i>transaction</i> bloÄŸu içinde birden çok ifadeyi çalıştırmayı - deneyebilirsiniz. Bu da aynı ÅŸekilde, <i>transaction overhead</i>'ini düşürür.</p> - <p>ÇeÅŸitli ayarlama seçenekleri mevcuttur. <code>fsync()</code> iÅŸlemini, postmaster'ı - <code>-o -F</code> seçeneÄŸi ile baÅŸlatarak devre dışı bırakabilirsiniz. Bu iÅŸlem, - <code>fsync()</code>'lerin her <i>transactiondan</i> sonra diski <i>flush</i> etmesini - engelleyecektir.</p> - <p>Aynı zamanda, postmaster'i <code>-B</code> seçeneÄŸi ile baÅŸlatıp, <i>backend</i> - iÅŸlemleri tarafından kullanılan <i>shared memory buffers</i> sayılarını arttırabilirsiniz. - EÄŸer bu parametreyi çok yüksek tutarsanız, çekirdeÄŸinizin <i>shared memory</i> - bölgesindeki limiti aÅŸma olasılığınız yüzünden postmaster baÅŸlayamayabilir. Her bir - tampon (<i>buffer</i>) 8K'dır. Öntanımlı sayı ise 64 tampondur.</p> - <p>Aynı ÅŸekilde, backend'in <code>-S</code> seçeneÄŸini geçici sıralamalar için - <i>backend</i> süreçleri tarafından kullanılacak hafızayı arttırmak amacıyla - kullanabilirsiniz. <code>-S</code> seçeneÄŸi kilobayt cinsinden deÄŸer alır ve ön - tanımlı deÄŸeri 512'dir (512 K)</p> - <p>Tablolardaki veriyi bir <i>index</i>'e eÅŸlemek amacıyla gruplama için - <code>CLUSTER</code> komutunu kullanabilirsiniz. Ayrıntılı bilgi için - <code>CLUSTER</code> komutunun yardım sayfasına bakabilirsiniz.</p> - - <h4><a name="3.7">3.7</a>) Hangi hata ayıklama özellikleri bulunmaktadır?</h4> - <p>PostgreSQL, hata ayıklama amacıyla kullanılabilecek durum bilgisi - rapor eden çeÅŸitli özeliklere sahiptir.</p> - <p>Öncelikle, <i>configure</i> betiÄŸini <code>--enable-cassert</code> seçeneÄŸiyle - çalıştırırsanız, bir çok <code>assert() backend</code> calışmasını gözlemler ve - beklenmeyen bir durumda programı durdurur.</p> - <p>Postmaster ve postgres çeÅŸitli hata ayıklama seçeneklerine sahiptir. Öncelikle, - postmaster'ı baÅŸlattığınızda, standart çıktıyı ve hataları bir log dosyasına - yönlendirdiÄŸinize emin olun:</p> - <pre>cd /usr/local/pgsql<br>./bin/postmaster >server.log 2>&1 &</pre> - <p>Bu iÅŸlem PostgreSQL ana dizinine <code>server.log</code> dosyası yerleÅŸtirecektir. - Bu dosya sunucunun yaÅŸadığı sorunlar ya da hatalar hakkında yararlı bilgiler içerir. - <code>-d</code> seçeneÄŸi, hata ayıklama seviyesini belirten bir rakam ile kullanılır. - Yüksek hata ayıklama seviyelerinin büyük log dosyaları oluÅŸturacağını unutmayınız.</p> - <p>EÄŸer postmaster çalışmıyorsa, <code>postgres backend</code>'ini komut satırından - çalıştırabilir ve SQL ifadenizi direk olarak yazabilirsiniz. Bu sadece hata ayıklama - amacıyla önerilir. Burada, noktalı virgülün deÄŸil de yeni bir satırın sorguyu - sonlandırdığını unutmayınız. EÄŸer hata ayıklama sembolleri ile derlediyseniz, - ne olduÄŸunu görmek için bir hata ayıklayıcı kullanabilirsiniz. <i>backend</i> - postmaster'dan baÅŸlatılmadığından, eÅŸdeÄŸer bir ortamda çalışmamaktadır ve - <i>locking/backend</i> etkileÅŸim sorunları artabilir.</p> - <p>EÄŸer postmaster çalışıyorsa, bir pencerede psql'i çalıştırın ve psql tarafından - kullanılan postgres sürecinin süreç numarasını (<code>PID</code>) bulun. Postgres - süreci ile iliÅŸkilendirmek için bir hata ayıklarıcı kullanın. Sorguları psql aracılığı - ile çalıştırabilirsiniz. EÄŸer postgres baÅŸlangıcında hata ayıklamak istiyorsanız, - <code>PGOPTIONS="-W n"</code> seçeneÄŸini ayarlayabilir ve psql'i baÅŸlatabilirsiniz. - Bu iÅŸlem, baÅŸlangıcın <code>n</code> saniye kadar gecikmesini saÄŸlayacaktır; böylece - hata ayıklayıcıyı sürece iliÅŸkilendirdikten sonra baÅŸlangıç sürecinin devam etmesini - saÄŸlayabilirsiniz.</p> - <p>postgres programı hata ayıklama ve baÅŸarım ölçümleri için <code>-s</code>, - <code>-A</code> ve <code>-t</code> seçeneklerine sahiptir.</p> - - <h4><a name="3.8">3.8</a>) BaÄŸlanmaya çalışırken, neden "<i>Sorry, too many - clients</i>" hatasını alıyorum?</h4> - <p>Postmaster'ın eÅŸzamanlı olarak baÅŸlatabileceÄŸi <i>backend</i> süreçleri - sınırlarını arttırmanız gerekmektedir.</p> - <p>Ön tanımlı deÄŸer 32 süreçtir. Bunu, postmaster'ı uygun <code>-N</code> - deÄŸeri ile ya da <code>postgresql.conf</code> dosyasını düzenleyerek yeniden - baÅŸlatmakla arttırabilirsiniz.</p> - <p>EÄŸer <code>-N</code> deÄŸerini 32'den büyük yapacaksanız, aynı zamanda - <code>-B</code> deÄŸerini de deÄŸiÅŸtirmeniz gerektiÄŸini unutmayın. <code>-B</code>, - <code>-N</code>'nin en az 2 katı kadar olmalıdır; daha iyi baÅŸarım için bu sayıyı daha - da arttırmalısınız. Yüksek sayıdaki <i>backend</i> süreçleri için, çeÅŸitli çekirdek - yapılandırma parametrelerini arttırmanız gerekecektir. Yapılması gerekenler, - <code>SHMMAX</code>, <code>SEMMNS</code>, <code>SEMMNI</code>, <code>NPROC</code>, - <code>MAXUPRC</code> ve açılabilecek dosyaların maksimum sayısı olan <code>NFILE</code> - ve <code>NINODE</code> deÄŸerlerini karıştırmaktır. Bunun nedeni, PostgreSQL'in izin - verilen <i>backend</i> süreçlerinin sayısı üzerinde bir sınırı olmasıdır. Böylelikle - sistem kaynaklarının dışına çıkılmayacaktır.</p> - <p>PostgreSQL'in 6.5 sürümüne kadar, en fazla <i>backend</i> sayısı 64 idi ve bunu - deÄŸiÅŸtirmek için <code>include/storage/sinvaladt.h</code> dosyası içindeki - <code>MaxBAckendid</code> sabitini deÄŸiÅŸtirdek sonra yazılımı yeniden - derlemek gerekiyordu.</p> - - <h4><a name="3.9">3.9</a>) <code>pgsql_tmp</code> dizinin içindeki dosyalar nelerdir?</h4> - <p>Sorgu çalıstırıcı (<i>query executer</i>) tarafından yaratılan geçici dosyalardır. - Örnegin, bir sıralama <code>ORDER BY</code> ile yapılacaksa ve sıralama - <code>backend</code>'in <code>-s</code> parametresinin izin verdiÄŸinden daha - fazla alana gereksinim duyuyorsa, ekstra veriyi tutmak için geçici dosyalar yaratılır.</p> - <p>Geçici dosyalar, eÄŸer sıralama sırasında <i>backend</i> göçmezse otomatik olarak - silinecektir. EÄŸer çalışan durumda bir <i>backend</i>'iniz yoksa, - <code>pg_tempNNN.NN</code> dosyalarını silmeniz güvenlidir.</p> - - <h4><a name="3.10">3.10</a>) PostgreSQL sürümlerini yükseltmek için neden bir - dump/reload iÅŸlemi gerçekleÅŸtirmek zorundayım?</h4> - <p>PostgreSQL takımı ara sürümlerde sadece küçük deÄŸiÅŸiklikler yapmaktadır; - bu yüzden 7.2 sürümünden 7.2.1'e yükseltmek <i>dump/restore</i> iÅŸlemi - gerekmemektedir. Ancak, esas sürümlerde (örnek: 7.2'den 7.3'e) çoÄŸunlukla sistem - tablolarının ve veri dosyalarının iç yapısı deÄŸiÅŸtirilir. Bu deÄŸiÅŸiklikler çoÄŸunlukla - karmaşıktır; dolayısıyla veri dosyalarının geriye dönük uyumluluÄŸu iÅŸlemlerini - yapmıyoruz. <i>Dump</i> iÅŸlemi, veriyi genel biçimde alacağından yeniden yükleme - esnasında veri, yeni iç biçime uygun ÅŸekilde yerleÅŸtirilecektir.</p> - <p>Disk biçiminin deÄŸiÅŸmediÄŸi sürümlerde, <code>pg_upgrade</code> betiÄŸi güncellemenin - bir <i>dump/restore</i> gerektirmeden yapılmasını saÄŸlayacaktır. <i>pg_upgrade</i> - betiÄŸinin o sürüm için bulunup bulunmadığını sürüm notları içinde bulabilirsiniz.</p> - - <h4><a name="3.11">3.11</a>) Nasıl bir donanım kullanmalıyım? </h4> - <p> PC donanımı tamamen uyumlu olduÄŸu için, insanlar tüm PC donanımlarının aynı kalitede olduÄŸunu - düşünürler. Oysa böyle deÄŸildir. ECC RAM, SCSI ve kaliteli anakartlar daha ucuz donanımlara göre daha - çok güvenilirlerdir ve baÅŸarımları daha yüksektir. PostgreSQL hemen hemen tüm donanımda - çalışabilmektedir, ancak güvenilirlik ve baÅŸarım önemli ise donanım seçeneklerini çok iyi araÅŸtırmak - gereklidir. E-posta listelerimi donanımlarla ilgili sorular ve de ticaret için kullanılabilir.</p> - - <hr> - - <h2 align="center">Ä°ÅŸletimsel Sorular</h2> - - <h4><a name="4.1">4.1</a>) <i>Binary cursor</i> ve <i>normal cursor</i> - arasındaki fark nedir?</h4> - <p><code>DECLARE</code> yardım sayfasına bakınız.</p> - - <h4><a name="4.2">4.2</a>) Sorgunun sadece ilk birkaç satırını - nasıl <code>SELECT</code> edebilirim?</h4> - <p><code>FETCH</code> yardım sayfasına bakınız, ya da <code>SELECT</code> ... - <code>LIMIT</code> ... kullanınız.</p> - <p>Ä°lk birkaç satırı almak isteseniz bile, tüm sorgu deÄŸerlendirilmek durumunda kalınabilir. ORDER - BY içeren bir sorgu düşünün. EÄŸer ORDER BY iÅŸe eÅŸleÅŸen bir index varsa, PostgreSQL istenen ilk birkaç - satırı iÅŸleyebilir, ya da tüm sorgu istenen satırlar üretilene kadar iÅŸlenebilir. </p> - - <h4><a name="4.3">4.3</a>) psql'in içinde gördügüm tabloların ya da diÄŸer - ÅŸeylerin listesini nasıl alabilirim?</h4> - <p><code>pgsql/src/bin/psql/describe.c</code> içindeki psql kaynak kodunu - okuyabilirsiniz. Bu kod, psql'in <code>\</code> ile baÅŸlayan komutlarının - çıktısını olusturan SQL komutlarını içerir. Aynı zamanda, psql'i <code>-E</code> - seçeneÄŸi ile baÅŸlatıp, verdiÄŸiniz komutları çalıştırmak için yaptığı - sorguların çıktılarını görebilirsiniz.</p> - - <h4><a name="4.4">4.4</a>) Bir tablodan bir kolonu nasıl kaldırabilirim?</h4> - <p>Bu özellik (<code>ALTER TABLE DROP COLUMN</code>) 7.3 sürümü ile gelmiÅŸtir. - Eski sürümlerde aÅŸağıdakileri uygulamalısınız: </p> - <pre> -BEGIN; -LOCK TABLE old_table; -SELECT ... -- select all columns but the one you want to remove -INTO TABLE new_table -FROM old_table; -DROP TABLE old_table; -ALTER TABLE new_table RENAME TO old_table; -COMMIT; - </pre> - - <h4><a name="4.5">4.5</a>) Bir satır, tablo ve veritabanı için en - fazla büyüklük nedir?</h4> - <p>Sınırlar:</p> - <p>Veritabanı için en fazla büyüklük nedir?<br>Sınırsız (32 TB'lık veritabanı bulunmaktadır)<br><br> - Bir tablo için en fazla büyüklük nedir?<br>32 TB<br><br> - Bir satır için en fazla büyüklük nedir?<br>1.6 TB<br><br> - Bir alan için en fazla büyüklük nedir?<br>1 GB<br><br> - Tabloda en fazla satır sayısı kaçtır?<br>Sınırsız<br><br> - Bir tabloda olabilecek en fazla kolon sayısı kaçtır?<br>Kolon tiplerine baÄŸlı olarak 250-1600<br><br> - Bir tabloda olabilecek en fazla <i>index</i> sayısı kaçtır?<br>Sınırsız</p> - <p>Tabii ki bunlar aslında sınırsız degildir. Burada belirtilen sınırlar, fiziksel - sınırların haricindeki sınırlardır. BoÅŸ disk alanı, hafıza/takas alanı na baÄŸlı - sınırlamalar vardır. BaÅŸarım, sınır deÄŸerlere yaklaÅŸtıkça, ya da deÄŸerler çok büyük - olduÄŸunda düşebilir.</p> - <p>Bir tablo için büyüklük sınırı olan 32 TB, iÅŸletim sisteminin büyük dosya desteÄŸi olup - olmamasından bağımsızdır. Büyük tablolar, 1 GB'lik dosyalarda saklandığı için, dosya - sistemi sınırlarınin bir önemi yoktur.</p> - <p>Tablo ve kolon sayısı büyüklükleri, ön tanımlı blok büyüklüğü 32k ya çıkarılarak - arttırılabilir.</p> - - <h4><a name="4.6">4.6</a>) Tipik bir metin dosyasındaki veriyi saklamak için ne - kadar disk alanı gereklidir?</h4> - <p>Bir PostgreSQL veritabanı, veriyi "<i>flat</i>" metin dosyasında saklamak için - gereken alanın 5 kat fazla disk alanına gereksinim duyabilir.</p> - <p>Her satırında bir tamsayı ve metin (<i>text</i>) içeren, 100.000 satırlık bir - dosya düşünün. Her satırın ortalama 20 byte olduÄŸunu farzedelim. Metin dosyası - 2.8 MB olacaktır. Bu veriyi tutan PostgreSQL veritabanı - yaklaşık 6.4 MB yer kaplayacaktır.</p> - <pre> - 36 byte: Her bir satır baÅŸlığı (yaklaşık) -+ 24 byte: Bir tamsayı (int) alanı ve bir metin (text) alanı -+ 4 byte: Sayfada tuple a pointer ----------------------------------------- - 64 byte -> kayıt başına</pre> - <p>PostgreSQL'de veri sayfası (data page) büyüklüğü 8192 byte (8k)dır, dolayısıyla:</p> - <pre> -8192 byte -> page başına -------------------------- = Her bir veritabanı <i>page</i>'ı başına 128 satır (yaklaşık) - Satır başına 64 byte - -100000 veri satırı --------------------- = 782 veritabanı sayfası - 128 satır</pre> - <p>782 veritabanı sayfası <code>*</code> sayfa başına <code>8192 byte = - 6,406,144 bytes (6.4 MB)</code></p> - <p><i>Index</i>'ler çok fazla yere gereksinim duymazlar, ama <i>index</i>'lenmiÅŸ - veriyi tutacaklarından büyük olabilirler.</p> - <p><code>NULL</code> deÄŸerler bitmapler içinde tutulur; dolayısıyla çok az yer kaplarlar.</p> - - <h4><a name="4.7">4.7</a>) Veritabanında hangi tablo ya da <i>index</i>'lerin - tanımlandığını nasıl görebilirim?</h4> - <p>psql, bu tür bilgileri göstermek için, <code>\</code> ile baÅŸlayan bir çok - komut sunmaktadır. <code>\?</code> komutu ile bu komutları görebilirsiniz. Ayrıca, - bunları açıklayan ve <code>pg_</code> ile baÅŸlayan çok sayıda sistem tablosu - bulunmaktadır. Aynı zamanda, <code>psql -l</code> ile tüm veritabanlarını - listeyelebirsiniz.</p> - <p>Ayrıca, <code>pgsql/src/tutorial/syscat.source</code> kodunu inceleyebilirsiniz. - Bu dosya, veritabanı sistem dosyalarından bilgiyi almak için gereksinim duyulan - bir çok <code>SELECT</code>'leri gösterir.</p> - - <h4><a name="4.8">4.8</a>) Sorgularım cok yavaÅŸ, ya da <i>index</i>'lerimi - kullanmıyorlar. Neden?</h4> - <p>Indexler her sorgu tarafından otomatik olarak kullanılmazlar. Indexler eÄŸer bir - tablonun büyüklüğü minimum bir büyüklükten fazla ise ve sorgu tablodaki satırların sadece küçük bir - yüzdesini seçiyorsa kullanılır. Bunun nedeni, index eriÅŸiminin neden olduÄŸu raslansal disk eriÅŸimi - nin diskin ya da tablonun sıralı okunmasından daha yavas olabilmesidir.</p> - - <p>Bir index'in kullanılıp kullanılmayacağını belirlemek için, PostgreSQL tablo hakkındaki - istatistiklere gereksinmesi vardır. Bu istatistikler, <small>VACUUM ANALYZE</small> kullanılarak - toplanırlar. Optimizer, istatistikleri kullanarak, tabloda kaç satır olduÄŸunu ve bilir ve indexin - kullanılıp kullanılmayacağına daha iyi karar verir. Istatistikler, aynı zamanda en uygun join - sırasını ve yöntemini belirlemekte çok önemlidir. Ä°statistik toplanması, tablo içerikleri - deÄŸiÅŸtikçe periyodik olarak yapılmalıdır.</p> - - - <p>Indexler normalde <small>ORDER BY</small> sorguları ya da join iÅŸlemlerini gerçekleÅŸtirmek için - kullanılmazlar. Açık bir sıralamayı takip eden sıralı bir arama (sequential scan), büyük bir tabloda index - araması yapmaktan genelde daha hızlıdır.</p> - - Ancak, <small>ORDER BY</small> ile birleÅŸmiÅŸ <small>LIMIT</small> - genellikle bir index kullanacaktır; çünkü tablonun sadece belirli bir miktarı döndürülecektir. - Aslında, MAX() ve MIN() fonksiyonlarının index kullanmamalarından dolayı, bu gibi deÄŸerleri ORDER BY ve LIMIT - kullanarak da almak olasıdır: -<pre> - SELECT col - FROM tab - ORDER BY col [ DESC ] - LIMIT 1; -</pre> - - <p>EÄŸer optimizer'ın sıralı arama yapmasının yanlış olduÄŸuna inanıyorsanız, <code>SET enable_seqscan TO -'off'</code> kullanın ve index kullanan aramaların hala daha hızlı olup olmadığını görün.</p> - - <p><code>LIKE</code> ya da <code>~</code> gibi operatörler kullanıyorsanız, - <i>index</i>'ler sadece aÅŸağıdaki koÅŸullarda kullanılabilir:</p> - - <ul> - <li>Arama dizininin başı, dizinin başı ile baÄŸlanmalıdır. Yani, - <ul><li><code>LIKE</code> sorguları <code>%</code> ile baÅŸlamamalıdır.</li> - <li>Düzenli ifade sorguları <code>^</code> iÅŸe baÅŸlamamalıdır.</li></ul></li> - <li>Arama metni bir karakter sınıfı ile baÅŸlayamaz. Örnek: <code>[a-e]</code></li> - <li><code>ILIKE</code> ve <code>~*</code> gibi büyük/küçük harfe duyarsız - aramalar <i>index</i>'lerden yararlanmazlar. Onun yerine, bölüm 4.12'de anlatılan - fonksiyonel <i>index</i>'leri kullanabilirsiniz.</li> - <li><i>initdb</i> sırasında öntanımlı <i>C locale</i>'i kullanılmalıdır.</li> - </ul> - - <h4><a name="4.9">4.9</a>) <i>query-optimizer</i>'ın sorgularımı nasıl - deÄŸerlendirdiÄŸini, iÅŸleme soktuÄŸunu nasıl görebilirim?</h4> - <p><code>EXPLAIN</code> yardım sayfasına bakınız.</p> - - <h4><a name="4.10">4.10</a>) <i>R-tree index</i> nedir?</h4> - <p>R-tree index, uzaysal (spatial) verileri indexlemek için kullanılır. Bir hash - index, dizi aramalarında (range search) kullanılamaz. B-tree index dizi aramalarında sadece tek - boyutlu çalışmaktadır. R-tree, çok boyutlu veriyi destekler. ÖrneÄŸin, eÄŸer bir R-tree index point - veri tipi üzerinde inÅŸa edililebilirse, sistem "select all points within a bounding rectangle" - gibi sorgulara daha verimli yanıtlar verecektir.</p> - <p>Orijinal R-tree tasarımını açıklayan belge:</p> - <p>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.</p> - <p>Bu belgeyi, Stonebraker'ın "Readings in Database Systems" kitabında bulabilirsiniz.</p> - <p>Gömülü R-tree indexleri poligon ve boxları kullanabilir. Teorik olarak, - R-tree indexlerin özelliklerini geniÅŸletmek bir miktar çaba gerektirir ve bunun nasıl - yapılacağına dair bir belgemiz henüz bulunmamaktadır.</p> - - <h4><a name="4.11">4.11</a>) <i>Genetic Query Optimizer</i> nedir?</h4> - <p><i>GEQO</i> modülü, <i>Genetic Algorithm(GA)</i> kullanılarak tablolar - birleÅŸtirildiÄŸinde sorgu optimizasyonunu hızlandırır. </p> - - <h4><a name="4.12">4.12</a>) Düzenli ifade (<i>Regular Expression</i>) aramalarını - ve büyük/küçük harfe duyarsız aramaları nasıl yapabilirim? - Bu büyük(küçük harfe duyarlı aramalar için <i>index</i>'i nasıl kullanabilirim?</h4> - <p><code>~</code> operatörü düzenli ifade eÅŸleÅŸmesi ve <code>~*</code> büyük/küçük - harfe duyarsız düzenli ifade eÅŸleÅŸmesi yapar. Büyük/küçük harfe duyarlı olan - <code>LIKE</code>'ın büyük/küçük harfe duyarsız olan biçimi <code>ILIKE</code>'tır - ve PostgreSQL 7.1 sürümü ile birlikte gelmiÅŸtir.</p> - <p>Büyük-küçük harfe duyarsız eÅŸitlik karşılaÅŸtırmaları aÅŸağıdaki gibi ifade edilir:</p> - <pre> -SELECT * -FROM tab -WHERE lower(col) = 'abc' - </pre> - <p>Bu standart bir <i>index</i> yaratmayacaktır. Ancak eÄŸer fonksiyonel bir - <i>index</i> yaratırsanız; o kullanılacaktır:</p> - <pre>CREATE INDEX tabindex on tab (lower(col));</pre> - - <h4><a name="4.13">4.13</a>) Bir sorguda, bir alanin "<code>NULL</code>" olduÄŸunu - nasıl ortaya çıkarabilirim?</h4> - <p>Kolonu, <code>IS NULL</code> ve <code>IS NOT NULL</code> ile test edebilirsiniz.</p> - - <h4><a name="4.14">4.14</a>) Çesitli karakter tipleri arasındaki farklar nelerdir?</h4> - <pre> -Veri Tipi İç Adı Not --------------------------------------------------- -VARCHAR(n) varchar boyut en büyük uzunluÄŸu verir; sadece verilen kadar veri tutulur. -CHAR(n) bpchar belirtilen uzunluÄŸa kadar sonuna boÅŸluk eklenir. -TEXT text uzunlukta herhangi bir üst sınır yoktur. -BYTEA bytea variable-length byte array (null-byte safe) -"char" char bir karakter - </pre> - <p>İç adları (<i>internal name</i>) sistem kataloglarını ve - bazı hata mesajlarını incelerken göreceksiniz.</p> - <p>Ä°lk dört veri tipi "<i>varlena</i>" tipidir (yani, diskteki ilk 4 bayt uzunluktur; - devamı da veridir.) Dolayısıyla, kullanılan gerçek alan, belirtilen alandan biraz - daha büyüktür. Ancak, bu veri tipleri, sıkıştırılmaya tabi tutulabilir; dolayısıyla - disk alanı beklenilenden küçük olabilir. <code>VARCHAR(<i>n</i>)</code> büyüklüğü - artabilen ama en büyük uzunluÄŸu sınırlı olan verileri saklamak için en uygun yöntemdir. - <code>TEXT</code>, 1 GB büyüklüğe kadar olan verileri tutmak için kullanılır.</p> - <p><code>CHAR(<i>n</i>)</code>, aynı uzunluktaki dizilerin saklanması için kullanımır. - <code>CHAR(<i>n</i>)</code> belirtilen uzunluÄŸa kadar boÅŸluk ile doldurur; ancak - <code>VARCHAR(<i>n</i>)</code> sadece verilen karakterleri saklar. <code>BYTEA</code> - binary veri saklamak içindir; ayrıca "<code>NULL</code>" bayt içeren deÄŸerleri de saklar. - Burada anlatılan üç veri tipi de benzer baÅŸarım karakteristiklere sahiptir.</p> - - <h4><a name="4.15.1">4.15.1</a>) Nasıl <i>serial</i>/otomatik artan - (<i>auto-incrementing</i>) bir alan yaratabilirim?</h4> - <p>PostgreSQL'de <code>SERIAL</code> veri tipi vardır. Bu veri tipi bir - <i>sequence</i> ve kolon üzerinde bir <i>index</i> yaratır.</p> - <p>Örnek, aÅŸağıdaki sorgu:</p> - <pre> -CREATE TABLE person ( - id SERIAL, - name TEXT -); - </pre> - <p>buna çevrilir:</p> - <pre> -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 ); - </pre> - <p><i>Sequenceler</i> hakkında daha fazla bilgi için <i>create_sequence</i> - yardım sayfasına bakabilirsiniz. Her satırın <code>OID</code> alanını tekil bir sayı - olarak alabilirsiniz. Ancak, veritabanınızın <i>dump</i>'ını alıp yeniden yüklerseniz, - <code>OID</code> deÄŸerlerini koruyabilmek için <code>pg_dump</code>'ın <code>-o</code> - parametresini ya da "<code>COPY WITH OIDS</code>" seçeneÄŸini kullanmanız gerekecektir.</p> - - <h4><a name="4.15.2">4.15.2</a>) <code>SERIAL</code> giriÅŸinin degerini nasıl alabilirim?</h4> - <p>Bir yaklaşım, sequence nesnesindeki SERIAL deÄŸerini, veriyi girmeden önce nextval() ile alıp, - aldığınız deÄŸeri kendinizin girmesidir. 4.15.1'deki örnek tabloyu kullanarak bir örnek verelim:</p> - - <pre>new_id = execute("SELECT nextval('person_id_seq')");<BR> - execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')");</pre> - - <P>DiÄŸer sorgular için new_id'de yeni deÄŸerin saklanması gerekir. Otomatik olarak yaratılan SEQUENE nesnesinin adı, - <tablo adı>_<serial kolonu adı>_seq ÅŸeklinde olacaktır (< > iÅŸaretleri olmadan).</p> - - <p>Alternatif olarak, atanmış SERIAL deÄŸerini, deÄŸer girildikten sonra currval() - fonksiyonu ile alabilirsiniz:</p> - <pre> - execute("INSERT INTO person (name) VALUES ('Blaise Pascal')"); - new_id = execute("SELECT currval('person_id_seq')"); - </pre> - <p>Son olarak, ön tanımlı deÄŸeri bulmak için <code>INSERT</code> ifadesinden - dönen <code>OID</code> deÄŸerini kullanabilirsiniz; ancak bu en az taşınabilir - çözüm olacaktır. Perl'de, Edmund Mergl'in <i>DBD:Pg</i> mödülü ile birlikte - <i>DBI</i> kullanarak, <code>OID</code> deÄŸeri <code>$sth->execute()</code> - çalıştırıldıktan sonra <code>$sth->(pg_oid_status)</code> ile alınabilir.</p> - - <h4><a name="4.15.3">4.15.3</a>) <code>currval()</code> ve <code>nextval()</code> - diÄŸer kullanıcılara sorun yaratmaz mı?</h4> - <p>Hayır. <code>curval()</code>, tüm kullanıcılar deÄŸil, backend - tarafından atanan geçerli deÄŸeri döndürür.</p> - - <h4><a name="4.15.4">4.15.4</a>) Neden <i>sequence</i> sayıları <i>transaction</i> - iÅŸleminin iptalinden sonra yeniden kullanılıyor? Neden <i>sequence/SERIAL</i> - kolonumdaki sayılarda atlamalar oluyor?</h4> - <p>UyumluluÄŸu arttırmak için, <i>sequence</i> deÄŸerleri çalışan - <i>transaction</i>'lara gerektiÄŸi ÅŸekilde aktarılır ve <i>transaction</i> - bitene kadar o deÄŸer kilitlenmez. Bu, iptal edilen <i>transaction</i> - iÅŸlemleri nedeniyle boÅŸluklara neden olur.</p> - - <h4><a name="4.16">4.16</a>) OID nedir? TID nedir?</h4> - <p>OIDler, tekil satır numaralarına PostgreSQL'in yanıtıdır. PostgreSQL'de yaratılan - her sayı, tekil bir OID alır. initdb iÅŸlemi sırasında yaratılan tüm OID'ler 16384'ten küçüktür - (backend/access/transam.h). Kullanıcılar tarafından yaratılan tüm OID'ler bu sayıya eÅŸit ya da bu - sayıdan büyüktür. Varsayılan durumda, tüm bu OIDler sadece bir tablo ya da veritabanında deÄŸil, tüm - PostgreSQL kurulumunda tekildir.</p> - - <p> PostgreSQL OIDleri, tablolar arasında satırları iliÅŸkilendirmek için kendi iç tablolarında - kullanır. Bu OIDler belirli kullanıcı satırlarını belirtmek için kullanabilir ve join iÅŸlemlerinde - kullanılır. OID deÄŸerlerini saklamak için OID kolon tipini kullanmanız önerinir. Daha hızlı bir - eriÅŸim için, OID alanında bir index yaratabilirsiniz.</p> - - <p>OID'ler yeni satırlara, tüm veritabanları tarafında kullanılan ortak bir alandan atanırlar. EÄŸer - OID'i baÅŸka bir deÄŸere eÅŸitlemek isterseniz ya da tablonun bir kopyasını orijinal OIDler ile - çıkarmak isterseniz, bu mümkündür:</p> - <pre> - 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'; - </pre> - <p>OIDler 4-bit tamsayı olarak saklanırlar ve 4 milyarda overflow olacaktır. Kimse - bu sayıya ulaÅŸtığına dair bir bilgi iletmedi ve bu sınırı kimse bu sınıra ulaÅŸmadan kaldıracağız.</p> - - <p>TIDler, belirli fiziksel satırlar block ve offset deÄŸerleri ile belirtmekte kullanılır. TIDler, - satırlar deÄŸiÅŸtiÄŸinde ya da yeniden yüklendiÄŸinde deÄŸiÅŸirler. Index girdileri tarafından fiziksel - satırları göstermek için kullanılırlar.</p> - - <h4><a name="4.17">4.17</a>) PostgreSQL'de kullanılan bazı - terimlerin anlamları nelerdir?</h4> - <p>Kaynak kodun bir kısmı ve eski belgeler, daha geniÅŸ kullanım alanı olan terimleri - kullanırlar. Bunların bazıları:</p> - <ul><li>table, relation, class</li> - <li>row, record, tuple</li> - <li>column, field, attribute</li> - <li>retrieve, select</li> - <li>replace, update</li> - <li>append, insert</li> - <li>OID, serial value</li> - <li>portal, cursor</li> - <li>range variable, table name, table alias</li></ul> - <p>Genel veritabanı terimleri, - <i><a href="http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.html">http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.html</a></i> - adresinde bulunabilir.</p> - - <h4><a name="4.18">4.18</a>) Neden "<i>ERROR: Memory exhausted in AllocSetAlloc()</i>" - hatasını alıyorum?</h4> - <p>Sisteminizde sanal belleÄŸinizi tüketmiÅŸ olabilirsiniz, ya da çekirdeÄŸiniz - belli kaynaklar icin düşük bir sınıra sahip olabilir. <i>postmaster</i>'ı - baÅŸlatmadan önce aÅŸağıdakileri deneyebilirsiniz:</p> - <pre> -ulimit -d 262144 -limit datasize 256m - </pre> - <p>KabuÄŸunuza baÄŸlı olarak, bunlardan sadece biri olumlu sonuç verecektir, ama - bu iÅŸlem veri segment sınırınızı arttıracak, ve belki de sorgunuzun tamamlanmasını - saÄŸlayacaktır. Bu komut, varolan iÅŸleme (<i>current process</i>) ve komut çalıştırıldıktan - sonraki tüm alt iÅŸlemlere uygulanır. EÄŸer SQL istemcinizle, <i>backend</i>'in çok - fazla veri döndürmesi nedeniyle bir sorun yaşıyorsanız, bunu istemciyi baÅŸlatmadan - önce deneyiniz.</p> - - <h4><a name="4.19">4.19</a>) Hangi PostgreSQL sürümünü çalıştırdığımı nasıl görebilirim?</h4> - <p>psql arabiriminde, <code>select version();</code> yazınız.</p> - - <h4><a name="4.20">4.20</a>) Neden <i>large-object</i> iÅŸlemlerim, "<i>invalid large obj - descriptor</i>" hatasını veriyor?</h4> - <p><i>Large object</i> iÅŸlemlerinizin uçlarına, yani <code>lo_open</code> ... - <code>lo_close</code> komutlarının çevresine, <code>BEGIN WORK</code> ve - <code>COMMIT</code> koymanız gerekmektedir;</p> - <p>Åžu anda, PostgreSQL kuralları large objectleri transaction commit edildiÄŸinde kapatarak - uygulamaktadır. Dolayısıyla handle ile yapılacak ilk ÅŸey <i>invalid large obj descriptor</i> hatası - ile sonuçlanacaktır.Dolayısıyla çalışan kodunuz eÄŸer transaction kullanmazsanız hata mesajları - üretecektir.</p> - <p>EÄŸer ODBC gibi bir istemci arabirimi kullanıyorsanız, <i>auto-commit</i>'i - kapatmanız gerekebilir.</p> - - <h4><a name="4.21">4.21</a>) Åžu andaki zamanı öntanımlı deÄŸer olarak - kabul eden <b>How do I create a column that will default to the current time?</b></h4> - <p>Alttakini kullanabilirsiniz:</p> - <pre> -CURRENT_TIMESTAMP: -CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP ); - </pre> - - <h4><a name="4.22">4.22</a>) Neden <code>IN</code> kullanan <i>subquery</i>'lerim - çok yavas?</h4> - <p>7.4 sürümünden önce, subqueryler. EÄŸer subquery sadece birkaç satır ve outer query bol - sayıda satır döndürüyorsa, IN en hızlısıdır. Sorguları hızlandırmak için IN yerine EXISTS - kullanın:</p> - <pre> -SELECT * - FROM tab - WHERE col1 IN (SELECT col2 FROM TAB2) - </pre> - <p>sorgusunu, aÅŸağıdaki ile deÄŸiÅŸtirin:</p> - <pre> -SELECT * - FROM tab - WHERE EXISTS (SELECT col2 FROM TAB2 WHERE col1 = col2) - </pre> - <p>Bu iÅŸlemin hızlı olması için, subcol'un indexlenmiÅŸ bir kolon olması gerekmektedir.</p> - <p>7.4 sürümü ve sonrasında, IN aslında normal sorgularla aynı karmaşık join tekniklerini kullanır ve - EXISTS'e tercih edilir.</p> - - <h4><a name="4.23">4.23</a>) <i>Outer join</i> iÅŸlemini nasıl yapabilirim?</h4> - <p>PostgreSQL outer joins islemlerini SQL standartlarını kullanarak - gerçekleÅŸtirmektedir. AÅŸağıda 2 örnek bulunmaktadır:</p> - <pre> -SELECT * -FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col); - </pre> - <p>ya da</p> - <pre> -SELECT * -FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col); - </pre> - <p>Bu özdeÅŸ sorgular t1.col' i t2.col'ye <i>join</i> ederler ve aynı zamanda t1'deki - <i>unjoined</i> satırları (t2'de eÅŸlenmemiÅŸ olanlarla) döndürürler. <code>RIGHT - JOIN t2</code>'nin <i>unjoined</i> satırlarını ekleyecektir. Bir FULL join, eÅŸleÅŸmiÅŸ - bütün satırları ve t1 ile t2'den tüm baÄŸlanmamış (<i>unjoined</i>) satırları alır. - <code>OUTER</code> sözcüğü seçimseldir ve <code>LEFT</code>, <code>RIGHT</code> ve - <code>FULL</code> <i>join</i> iÅŸlemlerinde olduÄŸu kabul edilir. Sıradan <i>join</i> - iÅŸlemleri <code>INNER JOIN</code> olarak adlandırılır.</p> - <p>Önceki sürümlerde, <code>OUTER JOIN</code>ler <code>UNION</code> ve <code>NOT IN</code> - kullanılarak simüle edilebiliyordu. ÖrneÄŸin, tab1 ve tab2'yi birleÅŸtirirken, aÅŸağıdaki - sorgu iki tablonun dıştan baÄŸlanmasını saÄŸlar:</p> - <pre> -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 - </pre> - - <h4><a name="4.24">4.24</a>) Aynı andan birden fazla veritabanında nasıl - iÅŸlem yapabilirim?</h4> - <p>Mevcut veritabanınız dışındaki baÅŸka bir veritabanınızı sorgulamanızın - bir yolu bulunmamaktadır. Bunun nedeni, PostgreSQL'in veritabanına özel sistem - katalogları yüklemesidir. Bu nedenle, cross-database bir sorgunun nasıl - davranacağını kestirmek zordur.</p> - <p>contrib/dblink fonksiyon çaÄŸrılarını kullanarak cross-database sorgulara - izin verir. Tabii ki, bir istemci deÄŸiÅŸik veritabanlarına aynı anda eriÅŸim - saÄŸlayabilir ve bilgiyi bu ÅŸekilde birleÅŸtirebilir.</p> - - <h4><a name="4.25">4.25</a>) Bir fonksiyondan nasıl çoklu satır ya da - kolon döndürebilirim?</h4> - <p>7.3 sürümünde, bir fonksiyondan kolaylıkla çoklu satır ya da sütun - döndürebilirsiniz. - (<i><a href="http://techdocs.postgresql.org/guides/SetReturningFunctions">http://techdocs.postgresql.org/guides/SetReturningFunctions</a></i>)</p> - - <h4><a name="4.26">4.26</a>) Neden Pl/PgSQL fonksiyonları içinden - güvenli bir ÅŸekilde tablo yaratma/kaldırma iÅŸlemlerini yapamıyoruz?</h4> - <p>PL/PgSQL fonksiyon içerikleri <i>cache</i>'ler. Bunun istenmeyen bir tarafı, - eÄŸer bir PL/PgSQL fonksiyonu geçici bir tabloya eriÅŸiyorsa ve bu tablo ileride - kaldırılıp yeniden oluÅŸturulduktan sonra fonksiyon yeniden çaÄŸrılırsa, fonksiyon - çalışmayacaktır; çünkü <i>cache</i>'lenmiÅŸ fonksiyon hala eski geçici tabloyu - gösteriyor olacaktır. Çözüm, geçici tablo eriÅŸimleri için PL/PgSQL'de - <code>EXECUTE</code> kullanmaktır. Bu, sorgunun her seferinde yeniden iÅŸlenmesini - saÄŸlayacaktır.</p> - - <h4><a name="4.27">4.27</a>) 4.28) Hangi ÅŸifreleme seçenekleri bulunmaktadır?</h4> - <ul><li>contrib/pgcrypto SQL sorgularında kullanılabilmesi için - ÅŸifreleme fonksiyonları içermektedir.</li> - <li> Ä°stemciden sunucuya iletiÅŸimi ÅŸifrelemek için, sunucuda ssl seçeneÄŸi postgresql.conf içinde - açık olmalıdır. Ayrıca,pg_hba.conf dosyası içinde host ya da hostssl kaydı mutlaka olmalıdır ve - istemci sslmode kapatılmamalıdır. (Aynı zamanda,PostgreSQL'in doÄŸal SSL baÄŸlantıları dışında ssh ya - da ssl gibi 3.parti ÅŸifrelenmiÅŸ veri iletimi de mümkündür.)</li> - <li>Veritabanı kullanıcı adı ve ÅŸifreleri 7.3 sürümü ile birlikte - otomatik olarak ÅŸifrelenirler. Önceki sürümlerde, postgresql.conf - içindeki PASSWORD_ENCRYPTION seçeneÄŸini aktif hale getirmeniz gerekmektedir.</li> - <li>Sunucunun kendisini ÅŸifreli dosya sistemi üzerinde çalıştırabilirsiniz.</li></ul> - - <hr> - - <h2 align="center">PostgreSQL Özelliklerini GeniÅŸletmek</h2> - - <h4><a name="5.1">5.1</a>) Kullanıcı-tanımlı bir fonksiyon yazdım. - psql'de çalıştırdığım zaman neden core dump ediyor?</h4> - <p>Sorunun nedeni birden fazla ÅŸey olabilir. Kullanıcı-tanımlı fonksiyonunuzu - stand-alone bir programda çalıştırmayı deneyiniz.</p> - - <h4><a name="5.2">5.2</a>) PostgreSQL'e nasıl yeni tipler/fonksiyonlar ekleyebilirim?</h4> - <p>Çalışmalarınızı pgsql-hackers e-posta listesine gönderiniz. Kodunuz - incelendikten sonra contrib dizinine konacaktır.</p> - - <h4><a name="5.3">5.3</a>) Bir <i>tuple</i> dondürmek icin bir C fonksiyonunu nasil yazarım?</h4> - <p>PostgreSQL 7.3 sürümü ile birlikte, C, PL/PgSQL ve SQL kullanılarak tablo-döndüren - fonksiyonlar tamamen desteklenmektedir. Ayrıntılı bilgi için - <i><a href="http://www.postgresql.com/docs/7.3/interactive/user.html">PostgreSQL 7.3.2 - Kullanıcı Rehberi</a></i>'ne bakabilrisiniz. Bir örneÄŸi contrib/tablefunc - içinde bulabilirsiniz.</p> - - <h4><a name="5.4">5.4</a>) Bir kaynak dosyasında deÄŸiÅŸiklik yaptım. Yeniden derlememe - raÄŸmen deÄŸiÅŸiklik geçerli olmuyor. Neden?</h4> - <p>Makefile'lar include dosyaları için tam bir bağımlılık içermezler. - Öncelikle make clean, ardından da baska bir make iÅŸlemi yapmanız gerekir. - GCC kullanıyorsanız, configure betiÄŸinin --enable-depend seçeneÄŸini, derleyicinin - bağımlılıkları otomatik olarak hesaplaması için kullanabilirsiniz.</p> - -</body></html> diff --git a/doc/src/FAQ/README b/doc/src/FAQ/README deleted file mode 100644 index c3e78e0b312bcd162e60d43ad787e674fcde57da..0000000000000000000000000000000000000000 --- a/doc/src/FAQ/README +++ /dev/null @@ -1,4 +0,0 @@ -The FAQ* files in this directory are the master versions, and the -../../FAQ* text files are created using lynx: - - lynx -force_html -dont_wrap_pre -dump -hiddenlinks=ignore -nolist FAQ*