From f3f45c87d23b800913fb8ea88fe2d713f6b9dd74 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut <peter_e@gmx.net> Date: Tue, 21 Jul 2009 19:20:33 +0000 Subject: [PATCH] Remove translated FAQs The English FAQ has been moved to the wiki, so the translated versions should have been removed at that point as well. The FAQ_MINGW.html should have been removed when the platform FAQs were integrated into the documentation (or earlier). applied to both 8.4 and 8.5 --- doc/FAQ_brazilian | 922 ---------------- doc/FAQ_chinese_simp | 801 -------------- doc/FAQ_chinese_trad | 793 -------------- doc/FAQ_czech | 849 --------------- doc/FAQ_farsi | 1256 ---------------------- doc/FAQ_french | 1289 ---------------------- doc/FAQ_german | 978 ----------------- doc/FAQ_hungarian | 1234 --------------------- doc/FAQ_japanese | 1126 ------------------- doc/FAQ_polish | 1279 ---------------------- doc/FAQ_russian | 988 ----------------- doc/FAQ_turkish | 1192 --------------------- doc/src/FAQ/FAQ_MINGW.html | 82 -- doc/src/FAQ/FAQ_brazilian.html | 942 ---------------- doc/src/FAQ/FAQ_chinese_simp.html | 1011 ----------------- doc/src/FAQ/FAQ_chinese_trad.html | 1003 ----------------- doc/src/FAQ/FAQ_czech.html | 645 ----------- doc/src/FAQ/FAQ_farsi.html | 1533 -------------------------- doc/src/FAQ/FAQ_french.html | 1466 ------------------------- doc/src/FAQ/FAQ_german.html | 1067 ------------------ doc/src/FAQ/FAQ_hungarian.html | 1668 ----------------------------- doc/src/FAQ/FAQ_japanese.html | 1399 ------------------------ doc/src/FAQ/FAQ_polish.html | 1572 --------------------------- doc/src/FAQ/FAQ_russian.html | 1197 --------------------- doc/src/FAQ/FAQ_turkish.html | 1019 ------------------ doc/src/FAQ/README | 4 - 26 files changed, 27315 deletions(-) delete mode 100644 doc/FAQ_brazilian delete mode 100644 doc/FAQ_chinese_simp delete mode 100644 doc/FAQ_chinese_trad delete mode 100644 doc/FAQ_czech delete mode 100644 doc/FAQ_farsi delete mode 100644 doc/FAQ_french delete mode 100644 doc/FAQ_german delete mode 100644 doc/FAQ_hungarian delete mode 100644 doc/FAQ_japanese delete mode 100644 doc/FAQ_polish delete mode 100644 doc/FAQ_russian delete mode 100644 doc/FAQ_turkish delete mode 100644 doc/src/FAQ/FAQ_MINGW.html delete mode 100644 doc/src/FAQ/FAQ_brazilian.html delete mode 100644 doc/src/FAQ/FAQ_chinese_simp.html delete mode 100644 doc/src/FAQ/FAQ_chinese_trad.html delete mode 100644 doc/src/FAQ/FAQ_czech.html delete mode 100644 doc/src/FAQ/FAQ_farsi.html delete mode 100644 doc/src/FAQ/FAQ_french.html delete mode 100644 doc/src/FAQ/FAQ_german.html delete mode 100644 doc/src/FAQ/FAQ_hungarian.html delete mode 100644 doc/src/FAQ/FAQ_japanese.html delete mode 100644 doc/src/FAQ/FAQ_polish.html delete mode 100644 doc/src/FAQ/FAQ_russian.html delete mode 100644 doc/src/FAQ/FAQ_turkish.html delete mode 100644 doc/src/FAQ/README diff --git a/doc/FAQ_brazilian b/doc/FAQ_brazilian deleted file mode 100644 index 16d47428b3..0000000000 --- a/doc/FAQ_brazilian +++ /dev/null @@ -1,922 +0,0 @@ - - Perguntas Frequentes (FAQ) sobre PostgreSQL - - �ltima atualiza��o: Sex Nov 16 10:53:50 EST 2007 - - Mantenedor atual: Bruce Momjian (bruce@momjian.us) - - Traduzido por: Euler Taveira de Oliveira (euler@timbira.com) - - A vers�o mais recente desse documento pode ser vista em - http://www.postgresql.org/files/documentation/faqs/FAQ.html (EN). - http://www.postgresql.org/files/documentation/faqs/FAQ_brazilian.html - (pt_BR). - - Perguntas sobre plataformas espec�ficas s�o respondidas em - http://www.postgresql.org/docs/faq/. - _________________________________________________________________ - - Perguntas Gerais - - 1.1) O que � PostgreSQL? Como ele � pronunciado? O que � Postgres? - 1.2) Quem controla o PostgreSQL? - 1.3) Qual � a licen�a do PostgreSQL? - 1.4) Quais plataformas o PostgreSQL pode ser executado? - 1.5) Onde eu posso conseguir o PostgreSQL? - 1.6) Qual � a �ltima vers�o? - 1.7) Onde eu posso conseguir suporte? - 1.8) Como eu posso submeter um relato de um bug? - 1.9) Como eu posso saber quais s�o os bugs conhecidos ou - caracter�sticas ausentes? - 1.10) Que documenta��o est� dispon�vel? - 1.11) Como eu posso aprender SQL? - 1.12) Como posso submeter uma corre��o (patch) ou me juntar a equipe - de desenvolvimento? - 1.13) Como � o PostgreSQL comparado a outros SGBDs? - 1.14) O PostgreSQL gerenciar� as mudan�as de hor�rio devido ao hor�rio - de ver�o em v�rios pa�ses? - - Perguntas sobre Clientes - - 2.1) Quais interfaces est�o dispon�veis para PostgreSQL? - 2.2) Quais ferramentas est�o dispon�veis para utilizar o PostgreSQL - com p�ginas Web? - 2.3) O PostgreSQL tem interfaces gr�ficas para interagir com usu�rio? - - Perguntas Administrativas - - 3.1) Como eu instalo o PostgreSQL em um local diferente de - /usr/local/pgsql? - 3.2) Como eu controlo conex�es de outras m�quinas? - 3.3) Como eu ajusto o servidor de banco de dados para obter uma - performance melhor? - 3.4) Quais caracter�sticas de depura��o est�o dispon�veis? - 3.5) Por que eu recebo "Sorry, too many clients" quando eu tento - conectar? - 3.6) Qual � o processo de atualiza��o do PostgreSQL? - 3.7) Que tipo de hardware eu devo usar? - - Perguntas Operacionais - - 4.1) Como eu fa�o um SELECT somente dos primeiros registros de uma - consulta? Um registro rand�mico? - 4.2) Como eu descubro quais tabelas, �ndices, bancos de dados e - usu�rios est�o definidos? Como eu vejo as consultas utilizadas pelo - psql para mostr�-los? - 4.3) Como voc� muda o tipo de dado de uma coluna? - 4.4) Qual � o tamanho m�ximo de um registro, uma tabela e um banco de - dados? - 4.5) Quanto espa�o em disco � necess�rio para armazenar dados de um - arquivo texto? - 4.6) Por que minhas consultas est�o lentas? Por que elas n�o est�o - utilizando meus �ndices? - 4.7) Como eu vejo como o otimizador de consultas est� avaliando minha - consulta? - 4.8) Como eu fa�o buscas com express�es regulares e buscas com - express�es regulares sem diferenciar mau�sculas de min�sculas? Como eu - utilizo um �ndice para buscas sem distinguir mai�sculas de min�sculas? - 4.9) Em uma consulta, como eu detecto se um campo � NULL? Como eu - posso concatenar poss�veis NULLs? Como eu posso ordenar por um campo - que � NULL ou n�o? - 4.10) Qual � a diferen�a entre os v�rios tipos de dado de caracteres? - 4.11.1) Como eu crio um campo serial/auto incremento? - 4.11.2) Como eu consigo o valor de um campo SERIAL? - 4.11.3) currval() n�o lida com condi��o de corrida com outros - usu�rios? - 4.11.4) Por que os n�meros da minha sequ�ncia n�o s�o reutilizados - quando uma transa��o � abortada? Por que h� intervalos nos n�meros da - minha sequ�ncia/coluna SERIAL? - 4.12) O que � um OID? O que � um CTID? - 4.13) Por que eu recebo o erro "ERROR: Memory exhausted in - AllocSetAlloc()"? - 4.14) Como eu informo qual vers�o do PostgreSQL eu estou utilizando? - 4.15) Como eu crio uma coluna que conter� por padr�o a hora atual? - 4.16) Como eu fa�o uma jun��o externa (outer join)? - 4.17) Como eu fa�o consultas utilizando m�ltiplos bancos de dados? - 4.18) Como eu retorno m�ltiplos registros ou colunas de uma fun��o? - 4.19) Por que eu obtenho erros "relation with OID ###### does not - exist" ao acessar tabelas tempor�rias em fun��es PL/PgSQL? - 4.20) Quais solu��es de replica��o est�o dispon�veis? - 4.21) Por que os nomes de minhas tabelas e colunas n�o s�o - reconhecidos em minha consulta? Por que as mai�sculas n�o s�o - preservadas? - _________________________________________________________________ - - Perguntas Gerais - - 1.1) O que � PostgreSQL? Como ele � pronunciado? O que � Postgres? - - PostgreSQL � pronunciado Post-Gres-Q-L. (Para os curiosos que querem - saber como se diz "PostgreSQL", um arquivo de �udio est� dispon�vel). - - O PostgreSQL � um sistema de banco de dados objeto-relacional que tem - as caracter�sticas de sistemas de bancos de dados comerciais - tradicionais com melhoramentos encontrados nos sistemas SGBDs de - pr�xima gera��o. PostgreSQL � livre e o c�digo-fonte completo est� - dispon�vel. - - O desenvolvimento do PostgreSQL � feito por um grupo de - desenvolvedores volunt�rios (na sua maioria) espalhados pelo mundo e - que se comunicam via Internet. � um projeto da comunidade e n�o � - controlado por nenhuma empresa. Para se envolver, veja a FAQ do - desenvolvedor em http://www.postgresql.org/docs/faqs.FAQ_DEV.html - - Postgres � um apelido para o PostgreSQL amplamente utilizado. Era o - nome original do projeto em Berkeley e dentre os outros apelidos � o - preferido. Se voc� acha 'PostgreSQL' dif�cil de pronunciar, diga - apenas 'Postgres'. - - 1.2) Quem controla o PostgreSQL? - - Se voc� est� procurando por um mantenedor, comit� central ou empresa - controladora do PostgreSQL, desista --- n�o h� um(a). N�s temos um - comit� core e committers CVS, mas estes grupos s�o mais para quest�es - administrativas do que controle. O projeto � direcionado pela - comunidade de desenvolvedores e usu�rios, que qualquer um pode se - juntar. Tudo o que voc� precisa � se inscrever nas listas de discuss�o - e participar das discuss�es. Veja a FAQ do desenvolvedor para obter - informa��es como se envolver com o desenvolvimento do PostgreSQL. - - 1.3) Qual � a licen�a do PostgreSQL? - - O PostgreSQL � distribu�do sob a licen�a BSD cl�ssica. Basicamente, - ela permite que usu�rios fa�am qualquer coisa com o c�digo, incluindo - revender os bin�rios sem o c�digo-fonte. A �nica restri��o � que voc� - n�o nos responsabilize legalmente por problemas com o programa de - computador. H� tamb�m a exig�ncia de que esta licen�a apare�a em todas - as c�pias do programa de computador. Aqui est� a licen�a BSD que - usamos atualmente: - - PostgreSQL est� sujeito a seguinte licen�a: - - PostgreSQL Data Base Management System - - Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group - Portions Copyright (c) 1994-1996 Regents of the University of - California - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose, without fee, and without a written - agreement is hereby granted, provided that the above copyright notice - and this paragraph and the following two paragraphs appear in all - copies. - - IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY - FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, - INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND - ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN - ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, - INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE - PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF - CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, - UPDATES, ENHANCEMENTS, OR MODIFICATIONS. - - 1.4) Quais plataformas o PostgreSQL pode ser executado? - - Em geral, qualquer plataforma moderna compat�vel com Unix deve ser - capaz de executar o PostgreSQL. As plataformas que foram testadas - antes do lan�amento de uma vers�o s�o listadas nas instru��es de - instala��o. - - O PostgreSQL tamb�m executa nativamente nos sistemas operacionais - Microsoft Windows baseados no NT tais como Win200 SP4, WinXP e - Win2003. Um instalador pr�-empacotado est� dispon�vel em - http://pgfoundry.org/projects/pginstaller. Vers�es do Windows baseadas - no MS-DOS (Win95, Win98, WinMe) podem executar o PostgreSQL utilizando - o Cygwin. - - H� tamb�m uma vers�o para o Novell Netware 6 em - http://forge.novell.com e uma vers�o para OS/2 (eComStation) em - http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgre - SQL&stype=all&sort=type&dir=%2F. - - 1.5) Onde eu posso conseguir o PostgreSQL? - - Via navegador web, utilize http://www.postgresql.org/ftp/ e via ftp, - utilize ftp://ftp.postgresql.org/pub/. - - 1.6) Qual � a �ltima vers�o? - - A �ltima vers�o do PostgreSQL � a vers�o 8.2.5. - - N�s planejamos lan�ar vers�es novas a cada ano com vers�es corretivas - em alguns meses. - - 1.7) Onde eu posso conseguir suporte? - - A comunidade do PostgreSQL fornece assist�ncia a muitos de seus - usu�rios via e-mail. O principal s�tio web para inscri��o nas listas - de e-mail � http://www.postgresql.org/community/lists/. As listas - general e bugs s�o um bom lugar para in�cio. - - O principal canal de IRC � o #postgresql na Freenode - (irc.freenode.net). Para se conectar voc� pode utilizar o comando Unix - irc -c '#postgresql' "$USER" irc.freenode.net ou utilizar qualquer - outro cliente de IRC. Um canal hisp�nico (#postgresql-es) e um franc�s - (#postgresqlfr) tamb�m existem na mesma rede. H� tamb�m um canal - PostgreSQL na EFNet. - - Uma lista de empresas que prestam suporte comercial est� dispon�vel em - http://www.postgresql.org/support/professional_support. - - 1.8) Como eu informo a exist�ncia de um bug? - - Visite o formul�rio que reporta bugs do PostgreSQL em - http://www.postgresql.org/support/submitbug. - - Verifique tamb�m o nosso ftp ftp://ftp.postgresql.org/pub para ver se - h� uma vers�o mais recente do PostgreSQL. - - Bugs submetidos utilizando o formul�rio ou informado a qualquer lista - de discuss�o do PostgreSQL tipicamente gera uma das seguintes - respostas: - * N�o � um bug e o porqu� - * � um bug conhecido e j� est� na lista de AFAZERES - * O bug foi corrigido na vers�o atual - * O bug foi corrigido mas n�o foi empacotado em um vers�o oficial - * Um pedido foi feito para obter informa��es detalhadas: - + Sistema Operacional - + Vers�o do PostgreSQL - + Exemplo de teste que reproduz o bug - + Informa��es sobre depura��o - + Sa�da reconstituidora de vest�gios (backtrace) do depurador - * O bug � novo. O seguinte pode ocorrer: - + Uma corre��o � criada e ser� inclu�da na pr�xima vers�o - + O bug n�o pode ser corrigido imediatamente e � adicionado a - lista de AFAZERES - - 1.9) Como eu posso saber quais s�o os bugs conhecidos ou funcionalidades - ausentes? - - O PostgreSQL suporta um subconjunto extendido do SQL:2003. Veja nossa - lista de AFAZERES que cont�m bugs conhecidos, funcionalidades ausentes - e planos futuros. - - Uma solicita��o de funcionalidade geralmente resulta em uma das - seguintes respostas: - * A funcionalidade j� est� na lista de AFAZERES - * A funcionalidade n�o � desej�vel porque: - + Ela duplica uma funcionalidade existente que j� segue o - padr�o SQL - + A funcionalidade aumentar� a complexidade do c�digo mas - adicionar� pouco benef�cio - + A funcionalidade ser� insegura ou n�o-confi�vel - * A nova funcionalidade � adicionada a lista de AFAZERES - - O PostgreSQL n�o utiliza sistema de acompanhamento de bugs porque n�s - achamos mais eficiente responder diretamente o e-mail e manter a lista - de AFAZERES atualizada. Na pr�tica, bugs n�o duram muito no programa; - e bugs que afetam uma grande quantidade de usu�rios s�o corrigidos - rapidamente. O �nico lugar para encontrar todas as mudan�as, melhorias - e corre��es em uma vers�o do PostgreSQL � ler as mensagens de log do - CVS. At� mesmo as notas de lan�amento n�o listam todas as mudan�as - feitas no programa. - - 1.10) Que documenta��o est� dispon�vel? - - O PostgreSQL inclui vasta documenta��o, incluindo um manual extenso, - p�ginas de manuais (man pages) e alguns exemplos teste. Veja o - diret�rio /doc. Voc� tamb�m pode pesquisar os manuais online em - http://www.postgresql.org/docs. - - H� dois livros sobre PostgreSQL dispon�veis online em - http://www.postgresql.org/docs/books/awbook.html e - http://www.commandprompt.com/ppbook/. H� uma lista de livros sobre - PostgreSQL dispon�veis para compra. Um dos mais populares � o do Korry - Douglas. Uma lista de an�lise sobre os livros pode ser encontrada em - http://www.postgresql.org/docs/books/. H� tamb�m uma cole��o de - artigos t�cnicos sbore PostgreSQL em - http://www.postgresql.org/docs/techdocs/. - - O programa cliente de linha de comando psql tem alguns comandos \d - para mostrar informa��es sobre tipos, operadores, fun��es, agrega��es, - etc. - utilize \? para mostrar os comandos dispon�veis. - - Nosso s�tio web cont�m ainda mais documenta��o. - - 1.11) Como eu posso aprender SQL? - - Primeiro, considere os livros espec�ficos sobre PostgreSQL mencionados - acima. Muitos de nossos usu�rios gostam do The Practical SQL Handbook, - Bowman, Judith S., et al., Addison-Wesley. Outros do The Complete - Reference SQL, Groff et al., McGraw-Hill. - - H� tamb�m bons tutoriais dispon�veis online: - * http://www.intermedia.net/support/sql/sqltut.shtm - * http://sqlcourse.com - * http://www.w3schools.com/sql/default.asp - * http://mysite.verizon.net/Graeme_Birchall/id1.html - - 1.12) Como posso submeter uma corre��o (patch) ou me juntar a equipe de - desenvolvimento? - - Veja a FAQ do Desenvolvedor. - - 1.13) Como � o PostgreSQL comparado a outros SGBDs? - - H� v�rias maneiras de se medir um software: funcionalidades, - performance, confiabilidade, suporte e pre�o. - - Funcionalidades - PostgreSQL tem muitas caracter�sticas presentes em muitos SGBDs - comerciais como transa��es, subconsultas, gatilhos, vis�es, - integridade referencial de chave estrangeira e bloqueio (lock) - sofisticado. N�s temos algumas funcionalidades que eles n�o - tem, como tipos definidos pelo usu�rio, heran�a, regras e - controle de concorr�ncia de m�ltiplas vers�es para reduzir - bloqueios (locks). - - Performance - A performance do PostgreSQL � compar�vel a outros bancos de - dados comerciais e de c�digo livre. Ele � mais r�pido em - algumas coisas, mais lento em outras. Nossa performance � - geralmente +/- 10% comparada a de outros bancos de dados. - - Confiabilidade - N�s sabemos que um SGBD deve ser confi�vel ou ele � in�til. N�s - empenhamos em lan�ar vers�es bem testadas, de c�digo est�vel e - que tenha o m�nimo de bugs. Cada vers�o tem no m�nimo um m�s de - teste em vers�o beta, e nosso hist�rico de vers�es mostra que - n�s podemos fornecer vers�es est�veis e s�lidas que est�o - prontas para uso em produ��o. N�s acreditamos que somos - comparados a nosso favor com outros sistemas de bancos de dados - nessa �rea. - - Suporte - Nossas listas de discuss�o fornecem contato com um grupo de - desenvolvedores e usu�rios para ajudar a resolver muitos - problemas encontrados. Enquanto n�s n�o podemos garantir o - conserto, SGBDs comerciais nem sempre fornecem tamb�m. Com - acesso direto aos desenvolvedores, a comunidade de usu�rios, - manuais e o c�digo fonte faz com que o suporte do PostgreSQL - seja superior ao de outros SGBDs. H� suporte comercial por - incidente dispon�veis para aqueles que precisam de um. (Veja - se��o 1.7 da FAQ). - - Pre�o - N�s somos livres para uso dele tanto comercial quanto n�o - comercial. Voc� pode adicionar nosso c�digo ao seu produto sem - limita��es, exceto aquelas descritas na nossa licen�a BSD - mencionada acima. - - 1.14) O PostgreSQL gerenciar� mudan�as no hor�rio devido ao hor�rio de ver�o - em v�rios pa�ses? - - Mudan�as no hor�rio de ver�o dos USA foram inclu�das nas vers�es 8.0 - .[4+] do PostgreSQL e em todas as vers�es grandes, i.e. 8.1. Mudan�as - no Canad� e Austr�lia Oeste foram inclu�das na 8.0.[10+], 8.1.[6+] e - em todas as vers�es grandes subsequentes. Vers�es do PostgreSQL - anteriores a 8.0 utilizam o banco de dados de zona hor�ria do sistema - operacional para informa��es sobre hor�rio de ver�o. - _________________________________________________________________ - - Perguntas sobre Clientes - - 2.1) Quais interfaces est�o dispon�veis para PostgreSQL? - - A instala��o do PostgreSQL inclui somente as interfaces C e C - embutida. Todas as outras interfaces s�o projetos independentes que - podem ser obtidos separadamente; sendo separados permitem que eles - tenham suas pr�prias datas de lan�amento e time de desenvolvedores. - - Algumas linguagens de programa��o como PHP incluem uma interface para - PostgreSQL. Interfaces para linguagens como Perl, TCL, Python e muitas - outras est�o dispon�veis em http://www.pgfoundry.org. - - 2.2) Quais ferramentas est�o dispon�veis para utilizar o PostgreSQL com - p�ginas Web? - - Uma boa introdu��o para p�ginas web que utilizam bancos de dados pode - ser vista em: http://www.webreview.com - - Para integra��o na Web, PHP (http://www.php.net) � uma excelente - interface. - - Para casos complexos, muitos usam a Interface Perl e DBD::Pg com - CGI.pm ou mod_perl. - - 2.3) O PostgreSQL tem interfaces gr�ficas para iteragir com o usu�rio? - - H� um vasto n�mero de Ferramentas Gr�ficas (GUI), que est�o - dispon�veis para o PostgreSQL, comerciais e de desenvolvedores de - c�digo aberto. Uma lista detalhada pode ser encontrada em Documenta��o - da Comunidade PostgreSQL - _________________________________________________________________ - - Perguntas Administrativas - - 3.1) Como eu instalo o PostgreSQL em um local diferente de /usr/local/pgsql? - - Especifique a op��o --prefix quando executar o configure. - - 3.2) Como eu controlo conex�es de outras m�quinas? - - Por padr�o, o PostgreSQL s� permite conex�es da m�quina local - utilizando soquetes de dom�nio Unix ou conex�es TCP/IP. Outras - m�quinas n�o poder�o conectar-se a menos que voc� modifique - listen_addresses no postgresql.conf, habilite a autentica��o por - m�quina modificando o arquivo $PGDATA/pg_hba.conf e reinicie o - servidor PostgreSQL. - - 3.3) Como eu ajusto o servidor de banco de dados para obter uma performance - melhor? - - H� tr�s grandes �reas para melhorar a performance em potencial: - - Mudan�a de Consultas - Isto involve modificar consultas para obter melhor performance: - - + Cria��o de �ndices, incluir express�es e �ndices parciais - + Utiliza��o o COPY ao inv�s de m�ltiplos comandos INSERTs - + Agrupamento de m�ltiplos comandos em uma �nica transa��o para - diminuir a despesa com efetiva��es (commit) - + Utiliza��o do CLUSTER quando recuperar v�rios registros de um - �ndice - + Utiliza��o do LIMIT para retornar um subconjunto da sa�da da - consulta - + Utiliza��o de Consultas preparadas - + Utiliza��o de ANALYZE para manter as estat�sticas do - otimizador corretas - + Utiliza��o regular do VACUUM ou pg_autovacuum - + Remo��o de �ndices durante grande mudan�a de dados - - Configura��o do Servidor - Um grande n�mero de configura��es que afetam a performance. - Para obter detalhes adicionais, veja Administration - Guide/Server Run-time Environment/Run-time Configuration para - listagem completa, e para coment�rios veja - http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_co - nf_e.html e - http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html. - - Sele��o do Hardware - O efeito do hardware na performance � detalhado em - http://www.powerpostgresql.com/PerfList/ e - http://momjian.us/main/writings/pgsql/hw_performance/index.html - . - - 3.4) Quais caracter�sticas de depura��o est�o dispon�veis? - - H� muitas vari�veis de configura��o do servidor log_* que habilitam a - exibi��o de consultas e estat�sticas que podem ser muito �teis para - depura��o e medidas de performance. - - 3.5) Por que eu recebo "Sorry, too many clients" quando eu tento conectar? - - Voc� atingiu o limite padr�o de 100 sess�es. Voc� precisa aumentar o - limite do servidor PostgreSQL, que diz quantos processos servidor - concorrentes ele pode iniciar, alterando o valor max_connections no - postgresql.conf e reiniciando o postmaster. - - 3.6) Qual � o processo de atualiza��o do PostgreSQL? - - Veja http://www.postgresql.org/support/versioning para discuss�o geral - sobre atualiza��es e - http://www.postgresql.org/docs/current/static/install-upgrading.html - para instru��es espec�ficas. - - 3.7) Que tipo de hardware eu devo usar? - - Por causa do hardware de PC ser em sua maioria compat�vel, pessoas - tendem a acreditar que todos os hardwares de PC s�o de mesma - qualidade. N�o � verdade. ECC RAM, SCSI e placas m�e de qualidade s�o - mais confi�veis e t�m uma melhor performance do que hardwares mais - baratos. O PostgreSQL executar� em quase todo hardware, mas se a - confiabilidade e a performance forem importantes � prudente pesquisar - sobre as op��es de hardware. Nossas listas de discuss�o podem ser - usadas para discutir op��es de hardware e dilemas. - _________________________________________________________________ - - Perguntas Operacionais - - 4.1) Como eu fa�o um SELECT somente dos primeiros registros de uma consulta? - Um registro rand�mico? - - Para obter somente alguns registros, se voc� sabe o n�mero de - registros necess�rios ao executar o SELECT utilize o LIMIT. Se um - �ndice corresponde no ORDER BY � poss�vel que a consulta toda n�o - tenha que ser executada. Se voc� n�o sabe o n�mero de registros ao - executar o SELECT, utilize um cursor e o FETCH. - - Para obter um registro rand�mico, utilize: - SELECT col - FROM tab - ORDER BY random() - LIMIT 1; - - 4.2) Como eu descubro quais tabelas, �ndices, bancos de dados e usu�rios - est�o definidos? Como eu vejo as consultas utilizadas pelo psql para - mostr�-los? - - Utilize o comando \dt para ver tabelas no psql. Para obter uma lista - completa dos comandos no psql voc� pode utilizar \?. Alternativamente, - voc� pode ler o c�digo-fonte do psql no arquivo - pgsql/src/bin/psql/describe.c, ele cont�m os comandos SQL que geram a - sa�da para os comandos de contrabarra do psql. Voc� tamb�m pode - iniciar o psql com a op��o -E para que as consultas utilizadas para - executar os comandos que voc� informou seja exibida. O PostgreSQL - tamb�m fornece uma inteface compat�vel com SQL do INFORMATION SCHEMA - que voc� pode consultar para obter informa��o sobre o banco de dados. - - H� tamb�m tabelas do sistema que come�am com pg_ que os descrevem - tamb�m. - - Utilizando o psql -l listar� todos os bancos de dados. - - Veja tamb�m o arquivo pgsql/src/tutorial/syscat.source. Ele ilustra - muitos dos comandos SELECTs necess�rios para obter informa��o das - tabelas de sistema do banco de dados. - - 4.3) Como voc� muda o tipo de dado de uma coluna? - - Mudar o tipo de dado de uma coluna pode ser feito facilmente na vers�o - 8.0 ou superior com ALTER TABLE ALTER COLUMN TYPE. - - Em vers�es anteriores, fa�a isso: - BEGIN; - ALTER TABLE tab ADD COLUMN col_nova novo_tipo_dado; - UPDATE tab SET col_nova = CAST(col_antiga AS novo_tipo_dado); - ALTER TABLE tab DROP COLUMN col_antiga; - COMMIT; - - Voc� pode ent�o querer fazer um VACUUM FULL tab para recuperar o - espa�o em disco utilizado pelos registros expirados. - - 4.4) Qual � o tamanho m�ximo de um registro, uma tabela e um banco de dados? - - Estes s�o os limites: - - Tamanho m�ximo de um banco de dados? ilimitado (existem bancos de - dados de 32 TB) - Tamanho m�ximo de uma tabela? 32 TB - Tamanho m�ximo de um registro? 400 GB - Tamanho m�ximo de um campo? 1 GB - N�mero m�ximo de registros em uma tabela? ilimitado - N�mero m�ximo de colunas em uma tabela? 250-1600 dependendo dos tipos - das colunas - N�mero m�ximo de �ndices em uma tabela? ilimitado - - � claro, que eles n�o s�o ilimitados, mas limitados ao espa�o em disco - dispon�vel e espa�o em mem�ria/swap. A Performance ser� penalizada - quando estes valores se tornarem grandes. - - O tamanho m�ximo de uma tabela com 32 TB n�o requer suporte a arquivos - grandes do sistema operacional. Tabelas grandes s�o armazenadas como - m�ltiplos arquivos de 1 GB ent�o o limite do sistema de arquivos n�o � - importante. - - O tamanho m�ximo de uma tabela, o tamanho de um registro e o n�mero - m�ximo de colunas podem ser quadruplicados aumentando-se o tamanho - padr�o do bloco para 32k. O tamanho m�ximo de uma tabela pode tamb�m - ser aumentado utilizando particionamento de tabela. - - Uma limita��o � que �ndices n�o podem ser criados em colunas maiores - do que 2.000 caracteres. Felizmente, tais �ndices s�o raramente - necess�rios. Unicidade � melhor garantida por um �ndice de uma fun��o - de um hash MD5 de uma coluna longa, e indexa��o de texto longo permite - a busca de palavras dentro da coluna. - - 4.5) Quanto espa�o em disco � necess�rio para armazenar dados de um arquivo - texto? - - Um banco de dados PostgreSQL ir� requerer at� cinco vezes a quantidade - de espa�o requerida para armazenar dados em um arquivo texto. - - Como um exemplo, considere um arquivo com 100.000 linhas contendo um - inteiro e uma descri��o em cada linha. Suponha que o tamanho m�dio da - descri��o � de vinte bytes. O arquivo ter� 2,8 MB. O tamanho do - arquivo do banco de dados PostgreSQL que cont�m esses dados pode ser - estimado em 5,2 MB: - 24 bytes: cada cabe�alho de registro (aproximadamente) - 24 bytes: um campo int e um campo texto - + 4 bytes: ponteiro na p�gina para a tupla - ------------------------------------------- - 52 bytes por registro - - O tamanho de uma p�gina de dados no PostgreSQL � 8192 bytes (8 KB), ent�o: - - 8192 bytes por p�gina - ------------------------ = 158 registros por p�gina do banco de dados (arredondado para baixo) - 52 bytes por registro - - 100000 registros de dados - ---------------------------- = 633 p�ginas do banco de dados (arredondadopara cima) - 158 registros por p�gina - -633 p�ginas do banco de dados * 8192 bytes por p�gina = 5.185.536 bytes (5,2MB) - - �ndices n�o requerem muito espa�o, mas cont�m dados que foram - indexados, ent�o eles podem ocupar algum espa�o. - - NULLs s�o armazenados como bitmaps, ent�o eles utilizam muito pouco - espa�o. - - 4.6) Por que minhas consultas est�o lentas? Por que elas n�o est�o utilizando - meus �ndices? - - �ndices n�o s�o utilizados por toda consulta. �ndices s�o utilizados - somente se a tabela � maior do que um tamanho m�nimo, e a consulta - seleciona somente uma pequena porcentagem dos registros da tabela. - Isto porque o acesso rand�mico ao disco causado pela busca indexada - pode ser mais lento do que uma leitura ao longo da tabela ou busca - sequencial. - - Para determinar se um �ndice deveria ser utilizado, o PostgreSQL deve - ter estat�sticas sobre a tabela. Estas estat�sticas s�o coletadas - utilizando o VACUUM ANALYZE ou simplesmente o ANALYZE. Utilizando - estat�sticas, o otimizador sbae quantos registros est�o na tabela, e - pode melhor determinar se �ndices deveriam ser utilizados. - Estat�sticas tamb�m s�o �teis para determinar a ordem de jun��o �tima - e m�todos de jun��o. Cole��o de estat�sticas deveriam ser feitas - periodicamente a medida que o conte�do da tabela muda. - - �ndices n�o s�o normalmente utilizados para ORDER BY ou para fazer - jun��es. Uma busca sequencial seguido por uma ordena��o expl�cita � - geralmente mais r�pida do que uma busca indexada em uma tabela grande. - Contudo, LIMIT combinado com ORDER BY frequentemente utilizar� �ndice - porque somente uma pequena por��o da tabela ser� retornada. - - Se voc� acredita que o otimizador est� incorreto ao escolher uma busca - sequencial, utilize SET enable_seqscan TO 'off' e execute a consulta - novamente para ver se uma busca indexada � realmente mais r�pida. - - Ao utilizar operadores curinga tais como LIKE ou ~, �ndices podem ser - utilizados somente em algumas condi��es: - * O in�cio da cadeia de caracteres da busca deve ser iniciar com uma - cadeia de caracteres, i.e. - + modelos LIKE n�o devem iniciar com %. - + modelos ~ (express�es regulares) devem iniciar com ^. - * A cadeia de caracteres utilizada na busca n�o pode iniciar com a - classe de caracteres e.g. [a-e]. - * Busca que n�o diferenciam mai�sculas de min�sculas tais como ILIKE - e ~* n�o utilizam �ndices. Em vez disso, utilize �ndice de - express�o, que � descrito na se��o 4.8. - * O idioma padr�o C deve ser usando durante o initdb porque n�o � - poss�vel saber o pr�ximo caracter em idiomas que n�o sejam o C. - Voc� pode criar um �ndice especial text_pattern_ops para tais - casos que funcionam somente para indexa��o com LIKE. Tamb�m � - poss�vel utilizar indexa��o de busca textual para buscas por - palavras. - - Em vers�es anteriores a 8.0, �ndices frequentemente n�o podem ser - utilizados a menos que os tipos de dados correspondam aos tipos de - coluna do �ndice. Isto era particularmente verdadeiro para �ndices de - coluna int2, int8 e numeric. - - 4.7) Como eu vejo como o otimizador de consulta est� avaliando a minha - consulta? - - Veja o comando EXPLAIN no manual. - - 4.8) Como eu fa�o buscas com express�es regulares e buscas com express�es - regulares sem diferenciar mai�sculas de min�sculas? Como eu utilizo um �ndice - para buscas que n�o diferenciam mai�sculas de min�sculas? - - O operador ~ faz avalia��o de express�es regulares, e ~* faz avalia��o - n�o sens�vel a mai�sculas de express�es regulares. A variante n�o - sens�vel a mai�sculas do LIKE � chamada de ILIKE. - - Compara��es de igualdade n�o sens�veis a mai�sculas s�o normalmente - expressadas como: - SELECT * - FROM tab - WHERE lower(col) = 'abc'; - - Isso n�o ir� utilizar o �ndice padr�o. Contudo, se voc� criar um - �ndice de express�o, ele ser� utilizado: - CREATE INDEX tabindex ON tab (lower(col)); - - Se o �ndice acima � criado como UNIQUE, embora a coluna possa - armazenar caracteres mai�sculos e min�sculos, ele n�o pode ter valores - id�nticos que diferem apenas em letras mai�sculas e min�sculas. Para - for�ar uma letra mai�scula ou min�scula a ser armazenada na coluna, - utilize uma restri��o CHECK ou um gatilho. - - 4.9) Em uma consulta, como eu detecto se um campo � NULL? Como eu posso - concatenar poss�veis NULLs? Como eu posso ordenar por um campo que � NULL ou - n�o? - - Voc� testa a coluna com IS NULL e IS NOT NULL, como a seguir: - SELECT * - FROM tab - WHERE col IS NULL; - - Para concatenar com poss�veis NULLs, utilize COALESCE(), assim: - SELECT COALESCE(col1, '') || COALESCE(col2, '') - FROM tab - - Para ordenar pelo status NULL, utilize os modificadores IS NULL e IS - NOT NULL na sua cl�usula ORDER BY. Coisas que s�o verdadeiro ser�o - ordenadas acima das coisas que s�o falso, ent�o a consulta a seguir - ir� colocar entradas NULL no in�cio da lista de resultados: - SELECT * - FROM tab - ORDER BY (col IS NOT NULL) - - 4.10) Qual � a diferen�a entre os v�rios tipos de dado de caracteres? - - Tipo Nome Interno Observa��o - VARCHAR(n) varchar tamanho especifica o tamanho m�ximo, sem - preenchimento - CHAR(n) bpchar preenchimento em branco para comprimento fixo - espec�fico - TEXT text nenhum limite superior espec�fico no comprimento - BYTEA bytea vetor de bytes de comprimento vari�vel (seguro a byte - nulo) - "char" char um caracter - - Voc� ver� o nome interno quando examinar o cat�logo do sistema e em - algumas mensagens de erro. - - Os primeiros quatro tipos acima s�o do tipo "varlena" (i.e., os - primeiros quatro bytes no disco s�o o comprimento seguido pelos - dados). Consequentemente o espa�o atual utilizado � ligeiramente maior - do que o tamanho declarado. Contudo, valores longos s�o tamb�m - sujeitos a compress�o, ent�o o espa�o em disco pode tamb�m ser bem - menor do que o esperado. - VARCHAR(n) � melhor quando est� armazenando cadeias de caracteres de - comprimento vari�vel e h� um limite de tamanho desta cadeia. TEXT � - para cadeias de caracteres de comprimento ilimitado, com o m�ximo de - um gigabyte. - - CHAR(n) � para armazenar cadeias de caracteres que s�o todas do mesmo - tamanho. CHAR(n) preenche com espa�os em branco at� o tamanho - especificado, enquanto o VARCHAR(n) armazena somente os caracteres - fornecidos. BYTEA � para armazenar dados bin�rios, particularmente - valores que incluem bytes NULL. Todos os tipos descritos aqui tem - caracter�sticas de performance similares. - - 4.11.1) Como eu crio um campo serial/auto incremento? - - PostgreSQL suporta o tipo de dados SERIAL. Ele cria automaticamente - uma sequ�ncia. Por exemplo: - CREATE TABLE pessoa ( - id SERIAL, - nome TEXT - ); - - � automaticamente traduzido em: - CREATE SEQUENCE pessoa_id_seq; - CREATE TABLE pessoa ( - id INT4 NOT NULL DEFAULT nextval('pessoa_id_seq'), - nome TEXT - ); - - Sequ�ncias automaticamente criadas s�o nomeadas como - <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 fde161fa10..0000000000 --- a/doc/FAQ_chinese_simp +++ /dev/null @@ -1,801 +0,0 @@ - - PostgreSQL 常����FAQ� - - �����2007 年 1 � 30 � ��� 17:37:01 EST - ��������2007 年 2 � 1 � ��� 12:55:04 CST - - ��维�人��Bruce Momjian (pgman@candle.pha.pa.us) - ���维�人��Daojing.Zhou�doudou586@gmail.com� - - ��档������以� - http://www.postgresql.org/files/documentation/faqs/FAQ.html��� - - ���系�平��������http://www.postgresql.org/docs/faq/���� - �� - _________________________________________________________________ - -常��� - - 1.1)PostgreSQL ����该����� - 1.2)����管�PostgreSQL � - 1.3)PostgreSQL������� - 1.4)PostgreSQL�以�������系�平��� - 1.5)�������PostgreSQL� - 1.6)����PostgreSQL ���� - 1.7)�������对PostgreSQL ���� - 1.8)����交�个BUG��� - 1.9)����解已�� BUG ��缺���� - 1.10)��������档���� - 1.11)��该�� ��� SQL � - 1.12)���交补���� ������ - 1.13)PostgreSQL ������系��起���� - 1.14)PostgreSQL �以�����个�家�������� - -��客�端�� - - 2.1)�们�以������PostgreSQL �交�� - 2.2)���工��以�PostgreSQL �� Web 页�� - 2.3)PostgreSQL ���形������ - -系�管��� - - 3.1)��� ����PostgreSQL �� /usr/local/pgsql 以����� - 3.2)��������������� - 3.3)��� ���������以���好���� - 3.4)PostgreSQL ��以����� ������� - 3.5)为�������������Sorry, too many clients� ��� - 3.6)PostgreSQL��级������容� - 3.7)(使�PostgreSQL)���使���计��硬件 � - -���� - - 4.1) ������个�询���头� ���������� - 4.2) - ����表�索�����以�����������psql�����询�令并�� - ���们� - 4.3) �����个�段���类�� - 4.4) ��记���个表��个�����大������ - 4.5) ���个������件����������空�� - 4.6) 为�����询���为�����询没���索�� - 4.7) ��������询������ ��估�����询�� - 4.8) ��� ����表达��索�大��� ��� - ��表达������ ���索���大��� ���� - 4.9) ��个�询����� ����个�段��为 - NULL�������确����论��段���NULL�� - 4.10) ���符类��������� - 4.11.1) ��� ��建�个������������段� - 4.11.2) ������个��������� - 4.11.3) ��使� currval() �导������������� - 4.11.4) 为�������常����������为�������段���中 - ������ - 4.12) ��� OID���� CTID � - 4.13) 为������误信��ERROR: Memory exhausted in - AllocSetAlloc()�� - 4.14) ����������� PostgreSQL ���� - 4.15) ����建�个缺���������段� - 4.16) ��������outer join��询� - 4.17) �������个�����询� - 4.18) ��让������������ - 4.19) 为����使�PL/PgSQL����临�表�����误信��relation - with OID ##### does not exist�� - 4.20) �������������� - 4.21) 为��询���示�表��������询��中 - ����为�大�������� - _________________________________________________________________ - -常��� - - 1.1)PostgreSQL ����该����� - - PostgreSQL 读� Post-Gres-Q-L������称为Postgres - ���������人������载声��件� MP3 � �� � - - PostgreSQL - ����� ��系���系������ ������系�������������� - ���代 DBMS 系��使���强���PostgreSQL - ����费��并����代� ��以��� - - PostgreSQL - �����主�为�����们������并��������系����个社� - ���项����被任������ - ��� ������请����人�常����FAQ� - http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html - - 1.2) ���PostgreSQL � - - ��� �寻�PostgreSQL���人�����中 - 央�������������� �����---� 为�个��� - ����们�确��个 - � ������CVS管������工���设�主��为���管�工���� - �对PostgreSQL���� ����PostgreSQL项���任�人� - ��� ���人�社����������� �����就�订��件�表���讨论 - ������PostgreSQL���详� ��人�常�� (Developer's FAQ) - ��信��� - - 1.3)PostgreSQL������? - - PostgreSQL��������BSD�����许�������使�PostgreSQL���� - �以��PostgreSQL����代� ��以������就�� ��� 软件�� - �������们追���责任���就������软件��中 - 须��以���声����就��们�使��BSD��声��容� - - PostgreSQL���管�系� - - �����c�1996-2005�PostgreSQL ������������c�1994-1996 - � �大��� - - �Portions copyright (c) 1996-2005,PostgreSQL Global Development Group - Portions Copyright (c) 1994-6 Regents of the University of - California� - - �许为任���使�����修�����个软件����档����任�费� - �� 并�� 须�署� � - ��产�������������声���段以���两段����������� - - �Permission to use, copy, modify, and distribute this software and - its documentation for any purpose, without fee, and without a written - agreement is hereby granted, provided that the above copyright notice - and this paragraph and the following two paragraphs appear in all - copies.� - - �任������ �大������ 使�� - �软件���档�导��对任���人����� - ���������� ����伴�����������失�责任��使� �大� - �已�建议����失���������� - - �IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY - PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL - DAMAGES, INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS - SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA - HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.� - - � �大��确��任����������������������������� - ������份软件�������������� �� �大� - �没�责任��维���������强��修����� - - �THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, - INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE - PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF - CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, - UPDATES, ENHANCEMENTS, OR MODIFICATIONS.� - - 1.4)PostgreSQL �以�������系�平��� - - ��说��任���对 UNIX �容���系�������PostgreSQL - ����������������确���平�� - - PostgreSQl��以�������微软Windows-NT���系���Win2000 - SP4�WinXP � Win2003�已���������� - http://pgfoundry.org/projects/pginstaller�载���MSDOS�Windows��� - �� �Win95�Win98�WinMe�����Cygwin模�����PostgreSQL� - - �����个为Novell Netware 6������� - http://forge.novell.com���为OS/2(eComStation)������� - http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgre - SQL&stype=all&sort=type&dir=%2F �载� - - 1.5) �������PostgreSQL� - - �������http://www.postgresql.org/ftp/�载�����FTP�� - ftp://ftp.PostgreSQL.org/pub/���载� - - 1.6) ����PostgreSQL���� - - PostgreSQL �������� 8.2.1 � - - �们计��年���个主��级����� 个����个���� - - 1.7) �������对PostgreSQL���� - - PostgreSQL社����件�表为�大������帮��订��件�表�主 - ��� - http://www.postgresql.org/community/lists/��������� �General � - Bug�件�表��个�好���� - - 主��IRC����FreeNode(irc.freenode.net)�#postgresql�为���� - �����以使�UNIX��irc���令� ��� irc -c '#postgresql' - "$USER" irc.freenode.net ���使���IRC客�端���������� - ��个PostgreSQL�西����(#postgersql-es)����� - (#postgresql-fr)��� ����EFNET����个PostgreSQL�交���� - - �����������表��http://techdocs.postgresql.org/companies.php� - �� - - 1.8) ����交�个BUG��� - - �访� - http://www.postgresql.org/support/submitbug�填�Bug��表� ������ - ���访�ftp��ftp://ftp.PostgreSQL.org/pub/ - ���� ���PostgreSQL���补�� - - ��使�Bug�交表� �����PostgreSQL�件�表�Bug�常��以������ - � - * ��交�容���个Bug����Bug��� � - * ��交�容��个已��Bug并�已�� �TODO���任��表� - * ��交�Bug已������被修�� - * ��交�Bug已修�����补�� ������软件�� - * 请��交����详��信�� - + ��系� - + PostgreSQL�� - + ���Bug����� - + ��信� - + ���踪�� - * ��交�容��个�Bug����以�工�� - + �建�个�补�并��� ���个主������������� - + �Bug����修���被� �TODO���任��表� - - 1.9) ����解已�� BUG ��缺���� - - PostgreSQL ���个��� SQL:2003 �������们�TODO - �表��解已�Bug�表��缺���������计�� - - ���� �����请�常���以������� - * 该��已� �TODO���任��表� - * 该�����须��� 为� - + ������符�SQL� ��������� - + 该����大大�� 代� �������带��好��微�足��� - + 该����������� �� - * 该���被� �TODO���任��表� - - PostgreSQL�使�Bug�踪系��� 为�们����件�表中 - ����以���TODO任��表�����������工������������ - ��Bug����们�软件�������� - 对影������Bug����快�被修���������������修� - �����CVS���信���使��软件������信�中 - ���������软件��� - - 1.10) ��������档���� - - PostgreSQL��大���档�主��详���������页����������� /doc - ����注��为 $PGHOME/doc�� - � ��以�线��PostgreSQL���������http://www.PostgreSQL.org/d - ocs� - - �两���PostgreSQL�书�线���� - http://www.PostgreSQL.org/docs/awbook.html � - http://www.commandprompt.com/ppbook/ � ��大��PostgreSQL书���购 - 买����为�������Korry Douglas����� - http://techdocs.PostgreSQL.org/techdocs/bookreviews.php� - ��大���PostgreSQL书����� � - http://techdocs.PostgreSQL.org/������PostgreSQL�大����� � - - 客�端��令���psql���以 \d - �头��令���示��类����符�������信��使� \? - �以�示������令� - - �们� web ��������档� - - 1.11) ��该�� ��� SQL � - - �����述����PostgreSQL���书�������Teach Yourself SQL in - 21 Days, Second Edition��详������� - http://members.tripod.com/er4ebus/sql/index.htm� - �们�许����欢The Practical SQL Handbook� Bowman, Judith S. - ���Addison-Wesley����������欢 The Complete Reference SQL, - Groff ���McGraw-Hill����� - - ���������好�����们� - * http://www.intermedia.net/support/sql/sqltut.shtm - * http://sqlcourse.com. - * http://www.w3schools.com/sql/default.asp - * http://mysite.verizon.net/Graeme_Birchall/id1.html - - 1.12)���交补���� ������ - - 详� ��人�常��� (Developer's FAQ) � - - 1.13)PostgreSQL������系��起���� - - �价软件�好� ������������ �����价� �� - - �� - PostgreSQL ��大������������������� - �询�触��������������������� - �们�����们没����������类��继��������并� - ���以�������� - - �� - PostgreSQL��������������类似����对�������快 - �对����������� ����������们������常� - +/- 10%��� - - �� � - �们�������须��� �����就����没���们������ - ��认�����缺����稳�代� ��个������个�� beta - �����并��们������示�们�以��稳���������� - ��产使������们�信�����们�������软件����� - - �� - �们��件�表���个�常大���人������以帮�解��碰� - ��任�����们�������解��������������软 - 件�并�������解���� - �����人����群��������触使PostgreSQL������� - ����好�����������������以���������人�� - ��1.7 ��� - - 价� � - �们对任�����费������������ - � �以�� ����� �产��� ��们�代� ������们����� - �声��声�� BSD������容� - - 1.14) PostgreSQL�以�����个�家�������? - - PostgreSQL 8.0������使���系�中 - �������������信���8.0��以����PostgreSQL��身������ - ��信�� - _________________________________________________________________ - -��客�端�� - - 2.1) �们�以������PostgreSQL�交�� - - PostgreSQL(缺���)����C����C��������������项���� - ���载�����项����好� - ��们�以������计����������� - - ����语 - ��PHP��访�PostgreSQL����Perl�TCL�Python以����������� - http://gborg.postgresql.org����Drivers/Interfaces������ - 并���Internet�容��索�� - - 2.2) ���工��以�PostgreSQL�� Web 页�� - - �个��以���为�����������http://www.webreview.com� - - 对� Web ���PHP ��个�好������http://www.php.net/� - - 对����任����人�� Perl ��� 使�CGI.pm�DBD::Pg � mod_perl � - - 2.3)PostgreSQL���形������ - - ����������人���������PostgreSQL�GUI�形工�软件�� - PostgreSQL社��档��个详���表� - _________________________________________________________________ - -系�管��� - - 3.1)��� ���PostgreSQL�� /usr/local/pgsql 以����� - - ��� configure �� � --prefix �项� - - 3.2) ��������������� - - 缺�����PostgreSQL��许������� unix �����TCP/IP������ - � ���修���置�件postgresql.conf中 - �listen_addresses�����置�件$PGDATA/pg_hba.conf���� - ������� host-based - ��身份认��并����PostgreSQL������������ �PostgreSQL - ��������� - - 3.3) ��� ��������以���好���� - - ��个主����以��PostgreSQL���� - - �询����� - �主���修��询��以���好���: - - + �建索����表达����索�� - + 使�COPY��代��个Insert��� - + ��个SQL�����个��以���交������ - + ��个索������记��使�CLUSTER� - + ��个�询�������记��使�LIMIT� - + 使������询�Prepared Query)� - + 使�ANALYZE以��精确����计� - + ��使� VACUUM � pg_autovacuum - + ��大�������� �索�����建索�� - - �����置 - �置�件postgres.conf中 - ���设置��影����������表��� - 管����/����������/���������置� - �����解����http://www.varlena.com/varlena/GeneralBits/Tid - bits/annotated_conf_e.html � - http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html� - - 硬件��� - 计��硬件对���影���� - http://candle.pha.pa.us/main/writings/pgsql/hw_performance/inde - x.html � http://www.powerpostgresql.com/PerfList/� - - 3.4)PostgreSQL��以����� ������� - - PostgreSQL ���类似 log_* - �����置������询�������计����工�对���������� - ��� - - 3.5) 为�����������Sorry, too many - clients�已�太���������� - - �表示� 已达�缺�100个并����������� ����修�postgres - ql.conf�件��max_connections�� - �� postmaster���并�����修�������postmaster� - - 3.6)PostgreSQL��级������容 � - - PostgreSQL ���对�次�����级主������Bug修�工��� �� - 7.4.8 �级� 7.4.9 ��� dump � restore������ - ��������������软件������������ - - ��PostgreSQL����该������ �使��主�����������尽快�� - ���尽管�次�级���������PostgreSQL��������设计��� - ��� - ���Bug��代� ������以��������PostgreSQL社�认为��� - ����级��������级�� - - 主����级���� 7.3 � 7.4��常�修�系�表���表���� ��� - ������������ ��们�维����件����容��� �����中 - ����导��dump�/������中 - ����导��reload�对主����级��须�� - - 3.7)(使�PostgreSQL)���使���计��硬件 � - - ��计��硬件大����容��人们������信��计��硬件� - ��������������� ECC RAM�带��� �������SCSI - �硬����质�主����便�货��� �� ����好����PostgreSQL - � ��以���任�硬件�� - ����� ����对� �系������ 就������ 究��� �硬件�� - ������们��件�表����� 硬件�置��价��讨论� - _________________________________________________________________ - -���� - - 4.1) ������个�询���头� ���������� - - ��� ������ ����并�� ����询中 - ��确������ �以使�LIMIT��� ����个索�� ORDER BY中 - ��件���PostgreSQL ��就������头� �记�� - ����对�个�询��������������������询������确� - �记��� �使�游� (cursor)�FETCH��� - - �使�以���������记��� - SELECT cols - FROM tab - ORDER BY random() - LIMIT 1 ; - - 4.2) - ����表�索�����以�����������psql�����询�令并�示�们 - � - - �psql�使� \dt �令��示��表������解psql中 - ����令�表�使�\? ����� ��以�读 psql ��代� - �件pgsql/src/bin/psql/describe.c����为��psql��� �令������ SQL - �令�� ��以带 -E �项�� psql� �� ������� �psql中 - �����令��������使��SQL�询语 - ��PostgreSQL�����个�容SQL�INFORMATION SCHEMA��� - � �以�����������信�� - - �系������以pg_ �头�系�表��述�表���� - - 使� psql -l �令�以��������� - - ��以���� - pgsql/src/tutorial/syscat.source�件���举��������系�表� - ��信��SELECT��� - - 4.3) �����个�段���类�� - - �8.0������个�段���类��容���使� ALTER TABLE ALTER - COLUMN TYPE � - - �以�������以�� ��� - BEGIN; - ALTER TABLE tab ADD COLUMN new_col new_data_type; - UPDATE tab SET new_col = CAST(old_col AS new_data_type); - ALTER TABLE tab DROP COLUMN old_col; - COMMIT; - - � ���以使�VACUUM FULL tab �令�使系���� ����� ��空�� - - 4.4) ��记���个表��个�����大������ - - �������� - - �个����大尺寸� � ���已��� 32TB ����� - �个表��大尺寸� 32 TB - ��记���大尺寸� 1.6 TB - �个�段��大尺寸? 1 GB - �个表��大��� � �� - �个表��大��� 250-1600 ���类���� - �个表���大索���� � �� - - ������没����� �����������空������/交����约� - ������述�������常�大��系�������大影�� - - �表��大大� 32 TB - �����系�对�个�件����大����大表��个 1 GB ��件� - ��� ��件系�大���������� - - ��缺���大���� 32K ��大��表大���大����以�� ���� - - ��个��就���对大���2000� - ����建索��幸����� ��索��������对�� - ����容��MD5����������索��对���������� - 并����索�许对��������索� - - 4.5) ���个������件����������空�� - - �个 Postgres ����� - ��个���件��� ��空�����������个���件�身大�5��� - �空�� - - ����设��个 100,000 ���件�����个����个���述� - �设��串�平��度为20������件� � 2.8 MB�� - ������PostgreSQL����件大约� 6.4 MB: - 28 ��: ���头�大约�� - 24 ��: �个����段��个����段 - + 4 ��: 页��������� - ---------------------------------------- - 56 ���� - - PostgreSQL ��页�大�� 8192 �� (8 KB)��� - - 8192 ���页 - ------------------- = 146 �/��页������ - 56 ���� - - 100000 ��� - -------------------- = 685 ��页������ - 146 �/��页 - - 685 ��页 * 8192 ��/页 = 5,611,520 ���5.6 MB� - - 索���������������确���被索������ � - ��们����大� - - 空�NULL�������� �� ����空�� - - 4.6) 为�����询���为�����询没���索�� - - 并��个�询����使�索�����表�大����个����并�� - 询����表������记������索�� - ��� 为索����起�������������读�表�顺������� - - 为��� - ��使�索��PostgreSQL�须����表��计�����计��以使� - � VACUUM ANALYZE�� ANALYZE ��� 使��计�������表中 - �����就���好�������索�� - �计�对确������顺������������表��容���������� - ��计������� - - 索��常��� ORDER BY - ������对�个大表��次顺������次���常�索����快�� - ����� LIMIT � ORDER BY - ����起使�����常��使�索��� 为�����表中 - �����记�� - - ��� 确信PostgreSQL����使�顺������确��� �以使�SET - enable_seqscan TO 'off'�令���顺���� - ���次���询�� 就�以��使��个索�����确��快��� - - �使���符����� LIKE � ~ ��索����������使�� - * �符串������须����符串��就�说� - + LIKE 模���以 % �头� - + ~ ���表达��模��须以 ^ �头� - * �符串��以���个�符�模�类�头��� [a-e]� - * 大��� ������ ILIKE � ~* ��使�索����以� 4.8 - ��述�表达�索�� - * �� initdb ��须��缺����设置 C - locale�� 为系��������C locale�����个�大�符���� - �������� �以�建�个���text_pattern_ops索����LIKE - �索�� - - �8.0�����中 - �����询���类��索����类�������索��常��被���� - ���对int2,int8�����索�� - - 4.7) ��������询������ ��估�����询� - - �� EXPLAIN ��页� - - 4.8) ��� ����表达��索�大��� ��� - ��表达������ ���索���大��� ���� - - ��符 ~ ����表达����� ~* ��大��� ��� - ��表达����大��� �� LIKE ���为 ILIKE� - - 大��� �������常��� - SELECT * - FROM tab - WHERE lower(col) = 'abc'; - - �� ����使�� ��索�����以�建�个������使��表达�� - ���: - CREATE INDEX tabindex ON tab (lower(col)); - - ���述索���建�� �UNIQUE约����索��段�身�容�以� - �大������容�����UNIQUE约������容�����大�������� - �� �����为������������以使�CHECK约��件��触���� - ������� - - 4.9) ��个�询����� ����个�段��为 NULL �������确����论�� - 段��� NULL �� - - � IS NULL � IS NOT NULL ���个�段�������� - SELECT * - FROM tab - WHERE col IS NULL; - - 为��对� NULL�段����� ORDER BY �件�使� IS NULL� IS NOT - NULL 修饰符��件为� true ���件为�false ���������� - 就��� NULL �记����������� - SELECT * - FROM tab - ORDER BY (col IS NOT NULL) - - 4.10) ���符类��������� - - 类� ���称 说� - VARCHAR(n) varchar ����大�度���� - 符串��足���度����补� - CHAR(n) bpchar ���符串������足���度��以空� �补� - TEXT text 没��������������大�度��� - BYTEA bytea �������使�NULL�符���许�� - "char" char �个�符 - - �系�表�����误信��� ������称� - - ��������类��"varlena"����类���就�说��头��个� - ���度��������� ����� ��空��声��大������ - ����类���������以被�缩���� � - ���空����������� - - VARCHAR(n) �������大�度����符串��好�� TEXT ���� - ��大�达 1G左��������度��符串� - - CHAR(n) �������度����符串� CHAR(n)�� ������� - 段�度以空� �补足��足��段�容�� � VARCHAR(n) �� - ��������容� BYTEA ����������尤���� NULL � - ������类���差������ - - 4.11.1) ��� ��建�个�����������段� - - PostgreSQL �� SERIAL ��类���� - 段��为SERIAL������建�个��������� - CREATE TABLE person ( - id SERIAL, - name TEXT - ); - - ���转�为以�SQL��� - CREATE SEQUENCE person_id_seq; - CREATE TABLE person ( - id INT4 NOT NULL DEFAULT nextval('person_id_seq'), - name TEXT - ); - - �� create_sequence ��页������������信�� - - 4.11.2) ������个��������� - - �������������� nextval() ���对象��索���个 SERIAL - ��������精确����使� 4.11.1 ���表���伪� �� ��述� - new_id = execute("SELECT nextval('person_id_seq')"); - execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')"); - - �� �������询�使���� new_id ���������为�� person - 表����� 注����建� SEQUENCE 对象��称��� - <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 b190853577..0000000000 --- a/doc/FAQ_chinese_trad +++ /dev/null @@ -1,793 +0,0 @@ - - PostgreSQL 常����FAQ� - - �����2007 年 2 � 8 � ��� 22:43:13 EST - ��������2007 年 2 � 12 � ��� 12:00:04 CST - - ����人��Bruce Momjian (pgman@candle.pha.pa.us) - �������人�����(ChaoYi, Kuo)�kuo.chaoyi@gmail.com� - - ���������以� - http://www.postgresql.org/files/documentation/faqs/FAQ.html ��� - - ���系統平�������� http://www.postgresql.org/docs/faq/ - 裡����� - _________________________________________________________________ - -常��� - - 1.1)PostgreSQL ��麼�該�麼��� - 1.2)誰���管�PostgreSQL � - 1.3)PostgreSQL�����麼� - 1.4)PostgreSQL�以�������系統平��� - 1.5)���裡���PostgreSQL� - 1.6)���� PostgreSQL ��麼� - 1.7)���裡���� PostgreSQL ���� - 1.8)����交�� BUG � ��� - 1.9)����解已�� BUG ��缺���� - 1.10)�� ����������� - 1.11)��該�樣�� SQL � - 1.12)���交����� ������ - 1.13)PostgreSQL �����庫系統�起���� - 1.14)PostgreSQL �以�������家�������� - -��客�端�� - - 2.1)���以��麼��� PostgreSQL ����� - 2.2)��麼工��以� PostgreSQL �� Web � �� - 2.3)PostgreSQL ���形����(GUI)�� - -系統管��� - - 3.1)��樣��� PostgreSQL �� /usr/local/pgsql 以����� - 3.2)��������������� - 3.3)��樣調���庫伺��以���好���� - 3.4)PostgreSQL 裡�以���麼樣�調試��� - 3.5)��麼�試���������Sorry, too many clients� ��� - 3.6)PostgreSQL ���������容� - 3.7)(使� PostgreSQL )���使��麼��硬�� - -���� - - 4.1) ��������詢���� 幾���������� - 4.2) ����表�索����庫以�����義����� psql - 裡����詢�令並顯示��� - 4.3) �������������� - 4.4) �������表�����庫��大������ - 4.5) ����������件裡���������空�� - 4.6) ��麼���詢�����麼���詢����索�� - 4.7) ��������詢�����樣�估�����詢�� - 4.8) ��樣���表���索�大�寫���� - ��表������樣��索���大�寫����� - 4.9) ����詢裡���樣檢測������� - NULL�������確�����������NULL�� - 4.10) �種�符������麼��� - 4.11.1) ��樣�建���������������� - 4.11.2) ���������������� - 4.11.3) ��使� currval() ��������������� - 4.11.4) ��麼�����常������������麼���������中 - ������ - 4.12) �麼� OID��麼� CTID � - 4.13) ��麼����誤���ERROR: Memory exhausted in - AllocSetAlloc()�� - 4.14) ����������� PostgreSQL ���� - 4.15) ����建��� ����������� - 4.16) ��������outer join��詢� - 4.17) ����������庫��詢� - 4.18) ��������������� - 4.19) ��麼��使� PL/PgSQL ������表�����誤���relation - with OID ##### does not exist�� - 4.20) ��������寫(replication)����� - 4.21) ���詢��顯示�表��������詢��中 - ������大寫������� - _________________________________________________________________ - -常��� - - 1.1) PostgreSQL ��麼�該�麼��� - - PostgreSQL �� Post-Gres-Q-L�����簡稱�Postgres - ���������人����裡�����件� MP3 � �� � - - PostgreSQL ����������庫系統�����統�業 - ��庫系統���������������代 DBMS - 系統�使���強���PostgreSQL - ����費��並����代碼��以��� - - PostgreSQL - �����主��������������並����網���繫�����社���� - ����被任������ - ��� �����������人�常����FAQ� - http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html - - 1.2) 誰�� PostgreSQL � - - ��� ���PostgreSQL���人����麼中 - 央�������麼�屬���� �����---� ������ - ������確��� � ������CVS管������工���設 - �主������管�工�����PostgreSQL��������PostgreSQL� - ���任�人� - ��� ���人�社����������� �����就����件�表������� - �����PostgreSQL���詳� ��人�常�� (Developer's FAQ) ������ - - 1.3) PostgreSQL �����麼? - - PostgreSQL�������� BSD �����許�������使� - PostgreSQL���� �以�� PostgreSQL - ����代碼��以������就�� ��� ���身������追訴�� - 責任���就������������ ��以������ - ��就����使��BSD�����容� - - PostgreSQL ��庫管�系統 - - �����c�1996-2005�PostgreSQL ������������c�1994-1996 - � �大��� - - �Portions copyright (c) 1996-2005,PostgreSQL Global Development Group - Portions Copyright (c) 1994-6 Regents of the University of - California� - - �許�任���使�����修�����������������任�費�� - 並��� 簽署� ��������������������段以����段�� - ��������� - - �Permission to use, copy, modify, and distribute this software and - its documentation for any purpose, without fee, and without a written - agreement is hereby granted, provided that the above copyright notice - and this paragraph and the following two paragraphs appear in all - copies.� - - �任������ �大������ 使�� - ������������任���人����� - ���������� ����伴�����������失�責任��使� �大� - �已�建�����失���������� - - �IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY - PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL - DAMAGES, INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS - SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA - HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.� - - � �大��確��任����������������������������� - �裡����份���������������� �� �大���責任��維 - ���������強��修����� - - �THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, - INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE - PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF - CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, - UPDATES, ENHANCEMENTS, OR MODIFICATIONS.� - - 1.4) PostgreSQL �以�������系統平��� - - ��說��任���� UNIX �容���系統������ PostgreSQL - ������裡���������確測試�平�� - - PostgreSQL ��以�������微� Windows-NT ���系統�� - Win2000 SP4�WinXP � Win2003�已製��������� - http://pgfoundry.org/projects/pginstaller�����MSDOS�Windows�業 - 系統 �Win95�Win98�WinMe�����Cygwin模�����PostgreSQL� - - ������� Novell Netware 6 ������� http://forge.novell.com - ����OS/2(eComStation)������� - http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgre - SQL&stype=all&sort=type&dir=%2F ��� - - 1.5) ���裡��� PostgreSQL� - - ���覽��� http://www.postgresql.org/ftp/ �������FTP�� - ftp://ftp.PostgreSQL.org/pub/ ����� - - 1.6) ���� PostgreSQL ��麼� - - PostgreSQL �������� 8.2.3 � - - �����年����主�������幾���������� - - 1.7) ���裡���� PostgreSQL ���� - - PostgreSQL社����件�表��大������幫�����件�表�主�� - �� - http://www.postgresql.org/community/lists/��������� �General � - Bug�件�表����好���� - - 主��IRC� ����FreeNode(irc.freenode.net)�#postgresql������ - �� ����以使� UNIX �� irc���令� ��� irc -c '#postgresql' - "$USER" irc.freenode.net ���使���IRC客�端�����網絡��� - ��� PostgreSQL �西��� ��(#postgersql-es)���� �� - (#postgresql-fr)��樣��� EFNET ����� PostgreSQL �交�� ��� - - �����������表�� http://techdocs.postgresql.org/companies.php - �覽� - - 1.8) ����交�� BUG � ��� - - �訪� http://www.postgresql.org/support/submitbug�填寫 Bug - �� �表� �����樣��訪� ftp �� ftp://ftp.PostgreSQL.org/pub/ - 檢������PostgreSQL ������ - - ��使� Bug �交表� ����� PostgreSQL �件�表� Bug - �常��以������ - * ��交�容���� Bug ���� Bug ��� � - * ��交�容���已�� Bug 並�已�� � TODO ���任��表� - * ��交� Bug 已������被修�� - * ��交� Bug 已修�������� ���������� - * ���交����詳細���� - + ��系統 - + PostgreSQL �� - + ��� Bug �測試�� - + 調試�� - + 調試�蹤輸� - * ��交�容���� Bug����以�工�� - + �建�����並��� ����主������������� - + � Bug ����修���被� � TODO ���任��表� - - 1.9) ����解已�� BUG ��缺���� - - PostgreSQL ������� SQL:2003 ��������� TODO �表��解已� Bug - �表��缺������������ - - ���� �������常���以������� - * 該��已� � TODO ���任��表� - * 該������ ��� �� - + ������符� SQL ���������� - + 該����大大�� 代碼�������帶��好��微�足��� - + 該����������� �� - * 該���被� � TODO ���任��表� - - PostgreSQL �使� Bug �蹤系統�� �������件�表中 - ����以��� TODO - 任��表總����������工����������實��Bug��������中 - ������� �影������Bug�總��快�被修� - ���������������修����� CVS - �������使��������������������������� - - 1.10) �� ����������� - - PostgreSQL ��大�����主��詳細��������� ����測試����� - /doc ����註��� $PGHOME/doc�� � ��以���覽 PostgreSQL - �����網���http://www.PostgreSQL.org/docs� - - �����PostgreSQL�������� - http://www.postgresql.org/docs/books/awbook.html � - http://www.commandprompt.com/ppbook/ � ��大�� PostgreSQL - ����購買������������ Korry Douglas 編寫��� - http://techdocs.PostgreSQL.org/techdocs/bookreviews.php� ��大��� - PostgreSQL ���簡�� � http://techdocs.PostgreSQL.org/ ������ - PostgreSQL �大����� � - - 客�端��令���psql���以 \d �� � - ��令��顯示�������符����������使� \? - �以顯示������令� - - ��� web ���������� - - 1.11) ��該�樣�� SQL � - - �����述����PostgreSQL����������� Teach Yourself SQL in - 21 Days, Second Edition��詳細�紹�網�� - http://members.tripod.com/er4ebus/sql/index.htm� ���許�����The - Practical SQL Handbook� Bowman, Judith S. - 編寫�Addison-Wesley����������� The Complete Reference SQL, - Groff 編寫�McGraw-Hill ����� - - ���網�����好������� - * http://www.intermedia.net/support/sql/sqltut.shtm - * http://sqlcourse.com. - * http://www.w3schools.com/sql/default.asp - * http://mysite.verizon.net/Graeme_Birchall/id1.html - - 1.12)���交����� ������ - - 詳� ��人�常��� (Developer's FAQ) � - - 1.13) PostgreSQL �����庫系統�起���� - - �����好幾種����������� ������� �� - - �� - PostgreSQL ��大�����庫������������� - �詢�觸��������������������� - ������������������義���繼��������並���� - ���������� - - �� - PostgreSQL�����������庫���似������������快�� - ����������� �����庫�����������常� +/- - 10%��� - - �� � - �������庫�� ��� �����就������������������ - �測試��缺����穩�代碼������������ beta - 測試���並������� - ��顯示���以��穩������������使��������信�� - ����������庫������� - - �� - ����件�表�����常大���人������以幫�解決�碰�� - 任���������� - 總��解決������������庫���並��總�� ��� - �決��� - �����人����群��������觸使PostgreSQL������� - �庫��好������業 - ����������以給��給�����人����1.7 ��� - - �� � - ���任�����費������������ - � �以�� ����� ���裡� ����代碼������������� - ��裡��� BSD������容� - - 1.14) PostgreSQL �以�������家�������? - - PostgreSQL 8.0������使���系統������庫����������� - 8.0 ��以���� PostgreSQL ��身���������� - _________________________________________________________________ - -��客�端�� - - 2.1) ���以��麼��� PostgreSQL ����� - - PostgreSQL (� ���)���� C ���� C - ��������������� ���� ���������� ����好� - ����以������������������ - - ��編���� PHP ��訪� PostgreSQL ����Perl�TCL�Python - 以����������� http://gborg.postgresql.org 網��� - Drivers/Interfaces ������ 並��� Internet �容��索�� - - 2.2) ��麼工��以� PostgreSQL �� Web � �� - - ���紹以��庫������������http://www.webreview.com� - - �� Web ���PHP ���極好������ http://www.php.net/� - - �����任����人�� Perl ��� 使� CGI.pm � DBD::Pg � mod_perl - � - - 2.3)PostgreSQL ���形������ - - ����������人��������� PostgreSQL�GUI �形工����� - PostgreSQL社��� ���詳細��表� - _________________________________________________________________ - -系統管��� - - 3.1)��樣�� PostgreSQL �� /usr/local/pgsql 以����� - - ��� configure �� � --prefix �� � - - 3.2) ��������������� - - � �����PostgreSQL ��許������� unix ����� TCP/IP - ������ � ���修���置�件 postgresql.conf �� - listen_addresses�����置�件 $PGDATA/pg_hba.conf ���� - ��� ���� host-based ��身份���並���� - PostgreSQL������������ � PostgreSQL 伺�������� - - 3.3) ��樣調���庫��以���好���� - - ���主����以�� PostgreSQL ���� - - �詢����� - �主���修��詢��以���好���: - - + �建索����表�����索�� - + 使� COPY ��代��� Insert ��� - + ���SQL��������以���交������ - + ���索���������使� CLUSTER� - + ����詢����������使� LIMIT� - + 使�� 編���詢�Prepared Query)� - + 使� ANALYZE 以��精確���統�� - + ��使� VACUUM � pg_autovacuum - + ��大���������索�����建索�� - - 伺����置 - �置�件 postgres.conf ����設 - 置��影����������表��� - 管����/��庫伺������/��庫伺�����置� - �����解����http://www.varlena.com/varlena/GeneralBits/Tidb - its/annotated_conf_e.html � - http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html� - - 硬���� - ��硬�����影���覽 - http://candle.pha.pa.us/main/writings/pgsql/hw_performance/inde - x.html � http://www.powerpostgresql.com/PerfList/� - - 3.4)PostgreSQL 裡�以���麼樣�調試��� - - PostgreSQL ����似 log_* - �伺���置������詢������統�����工��調試���測試� - ��幫�� - - 3.5) ��麼�試�������Sorry, too many - clients�已�太���������� - - �表示� 已��� � 100 �並�(��)���������� ����修� - postgresql.conf �件�� max_connections �� �� postmaster - ���併�����修������� postmaster� - - 3.6)PostgreSQL ���������容 � - - PostgreSQL �����次������主������ Bug 修�工��� �� - 7.4.8 ��� 7.4.9 ��� dump � restore������ - ���庫伺�����������������伺����� - - ��PostgreSQL����該������ �使��主������������快�� - ��管�次��������風��PostgreSQL��� ���������修� - ��� Bug - ����碼������以風�������PostgreSQL社������������ - 風��������� - - 主��������� 7.3 � 7.4��常�修�系統表���表���� ��� - ������������ ���������件����容��� �����中 - �������dump�/������中 - �������reload��主�������� �� - - 3.7)(使� PostgreSQL )���使��麼��硬� � - - ����硬�大����容��人�總�����信����硬�質���� - ����實���� ECC RAM�帶��� ��������SCSI - �硬����質�主�����便�貨��� �� ����好���� - PostgreSQL 幾��以���任�硬��� - ����� ������ �系統����� 就������ 究��� �硬��� - �������件�表����� 硬��置�������� - _________________________________________________________________ - -���� - - 4.1) ��������詢���� 幾���������� - - ��� �����幾����並�� ����詢中 - ��確������ �以使� LIMIT ��� �����索�� ORDER BY 中 - ��件���PostgreSQL ��就������� 幾���� - ��������詢��������������������詢������確����� - �� �使�游�(cursor)�FETCH��� - - �使�以������������� - SELECT cols - FROM tab - ORDER BY random() - LIMIT 1 ; - - 4.2) - ����表�索����庫以�����義�����psql裡����詢�令並顯示� - ��� - - �psql�使� \dt �令�顯示��表��義���解 psql 中 - ����令�表�使� \? ����� ��以�� psql ��代碼 �件 - pgsql/src/bin/psql/describe.c������� psql ����令�輸���� SQL - �令�� ��以帶 -E �� �� psql� �樣������ � psql 中 - �給���令������實�使�� SQL - �詢���PostgreSQL�������容 SQL� INFORMATION SCHEMA ��� - � �以��裡������庫���� - - �系統�����以 pg_ �� �系統表��述�表��義� - - 使� psql -l �令�以�������庫� - - ��以�覽�� pgsql/src/tutorial/syscat.source - �件�����������庫系統表������SELECT��� - - 4.3) �������������� - - �8.0��裡������������容���使� ALTER TABLE ALTER COLUMN - TYPE � - - �以�������以�樣�� - BEGIN; - ALTER TABLE tab ADD COLUMN new_col new_data_type; - UPDATE tab SET new_col = CAST(old_col AS new_data_type); - ALTER TABLE tab DROP COLUMN old_col; - COMMIT; - - � ���以使� VACUUM FULL tab �令�使系統����������空�� - - 4.4) �������表�����庫��大������ - - �������� - - ����庫�大尺寸� ����已��� 32TB ���庫� - ��表��大尺寸� 32 TB - ������大尺寸� 1.6 TB - ������大尺寸? 1 GB - ��表裡�大��� ��� - ��表裡�大���� 250-1600 �������� - ��表裡��大索���� ��� - - ���實�������������������空�������/交������ - �實����述�������常�大��系統������大影�� - - �表��大大� 32 TB ����業 - 系統����件���麼大����大表��� 1 GB ��件���� � - ��件系統大���������� - - ��� ���大���� 32K ��大��表大���大����以�� ���� - - �����就����大���2000� - ����建索��幸����樣�索����������� - ����容��MD5����������索������������� - 並���檢索�許���������索� - - 4.5) ����������件裡���������空�� - - �� Postgres ��庫�� - ������件�����空���������������件�身大�5����空� - � - - �������� 100,000 ���件��������������述� �設 - ��串�平��度�20���(Byte)����件�� 2.8 MB�� - ������PostgreSQL��庫�件大�� 5.2 MB: - 24 ���: ���� �大��� - 24 ����: ��������������� - + 4 ����: � ��������� - ---------------------------------------- - 52 ����� - - PostgreSQL ��� �大�� 8192 ��� (8 KB)��� - - 8192 ����� - ------------------- = 158 �/��� ������ - 52 ����� - - 100000 ��� - -------------------- = 633 ��� ������ - 146 �/��� - - 633 ��� * 8192 ��/� = 5,185,536 ���5.2 MB� - - 索�����麼���������確實��被索������ � - �������大� - - 空� NULL �������� ������空�� - - 4.6) ��麼���詢�����麼���詢����索�� - - 並����詢����使�索�����表�大���������並��詢��� - ��表�������������索�� ��� �索����起������ - ���������表�� ������� - - ������使�索��PostgreSQL - �� ����表�統�����統���以使� VACUUM ANALYZE�� ANALYZE - ��� 使�統��������表中 - �����就�� �好�������索�� - 統���確������� ������������表��容����������� - �統�������� - - 索��常��� ORDER BY - ���������大表��次� ������次���常�索����快������ - � LIMIT � ORDER BY - ����起使��話��常��使�索��� ������表��������� - - ��� 確信PostgreSQL����使�� ������確��� �以使�SET - enable_seqscan TO 'off'�令���� ���� - ���次���詢�� 就�以��使���索�����確實�快��� - - �使���符����� LIKE � ~ ��索����������使�� - * �符串������� ����符串��就�說� - + LIKE 模���以 % �� � - + ~ ���表���模��� 以 ^ �� � - * �符串��以�����符�模���� ��� [a-e]� - * 大�寫������� ILIKE � ~* ��使�索����以� 4.8 - ��述�表��索�� - * �� initdb ��� ��� �����置 C - locale�� �系統������� C locale �������大�符��麼� - ��種����� �以�建����� text_pattern_ops 索���� - LIKE �索�� - - � 8.0 �����中 - �����詢������索������������索��常��被������ - �� int2, int8 �����索�� - - 4.7) ��������詢�����樣�估�����詢� - - �� EXPLAIN ��� � - - 4.8) ��樣���表���索�大�寫���� - ��表������樣��索���大�寫����� - - ��符 ~ ����表������ ~* ��大�寫�����表�����大�寫��� - LIKE �種�� ILIKE� - - 大�寫��������常寫�� - SELECT * - FROM tab - WHERE lower(col) = 'abc'; - - �樣���使����索�����以�建����種���使��表��索� - : - CREATE INDEX tabindex ON tab (lower(col)); - - ���述索���建�� � UNIQUE �����索����身�容�以� - �大�寫����容����� UNIQUE - �������容�����大�寫������� ��������� - ����種����以使� CHECK ���件��觸����������� - - 4.9) ����詢裡���樣檢測������� NULL - �������確����������� NULL �� - - � IS NULL � IS NOT NULL 測試������������ - SELECT * - FROM tab - WHERE col IS NULL; - - ����� NULL ������� ORDER BY �件�使� IS NULL � IS NOT - NULL 修飾符��件�� true ���件�� false ���������� - 就��� NULL ������������� - SELECT * - FROM tab - ORDER BY (col IS NOT NULL) - - 4.10) �種�符������麼��� - - �� ���稱 說� - VARCHAR(n) varchar ����大�度���� - 符串��足�義�度������ - CHAR(n) bpchar ���符串�實����足�義�度��以空� ��� - TEXT text ���������������大�度��� - BYTEA bytea �������使�NULL�符���許�� - "char" char ���符 - - �系統表�����誤��裡� ������稱� - - �������種��� "varlena"��������就�說��� ���� - ���度��������� ��實����空�����大������ - ��������義�����以被�縮���� � - ���空������ ����� - - VARCHAR(n) �������大�度����符串��好�� TEXT ���� - ��大�� 1G 左����義���度��符串� - - CHAR(n) �������度����符串� - CHAR(n)�� ���給�����度以空� ��足��足����容�� � - VARCHAR(n) ����給�����容� BYTEA ����������尤���� - NULL �����������差������ - - 4.11.1) ��樣�建��������������� - - PostgreSQL �� SERIAL - ���������義�SERIAL������建����������� - CREATE TABLE person ( - id SERIAL, - name TEXT - ); - - ������以�SQL��� - CREATE SEQUENCE person_id_seq; - CREATE TABLE person ( - id INT4 NOT NULL DEFAULT nextval('person_id_seq'), - name TEXT - ); - - �� create_sequence ��� ��������������� - - 4.11.2) ���������������� - - �種������������ nextval() ����象裡檢索���� SERIAL - ��������精確����使� 4.11.1 裡��表����碼�樣�述� - new_id = execute("SELECT nextval('person_id_seq')"); - execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')"); - - �樣������詢�使���� new_id 裡����������� person - 表����� 注����建� SEQUENCE �象��稱��� - <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 99120e6060..0000000000 --- a/doc/FAQ_czech +++ /dev/null @@ -1,849 +0,0 @@ - - Frequently Asked Questions - - Casto kladen� dotazy (FAQ) PostgreSQL - - Posledn� aktualizace: 29. r�jna 2007 (aktualizov�no pro PostgreSQL - 8.3) - - Soucasn� spr�vce: Bruce Momjian (bruce@momjian.us) - - Prelozil: Pavel Stehule (pavel.stehule@gmail.com) - - Nejaktu�lnejs� verzi tohoto dokumentu naleznete na adrese - http://www.postgresql.org/files/documentation/faqs/FAQ.html - - Odpovedi na ot�zky v�zan� na konkr�tn� platformy naleznete na adrese - http://www.postgresql.org/docs/faq/. - _________________________________________________________________ - - Obecn� ot�zky - - 1.1) Co je to PostgreSQL? Jak� je spr�vn� v�slovnost slova PostgreSQL? - 1.2) Kdo r�d� v�voj PostgreSQL? - 1.3) Pod jakou licenc� je PostgreSQL? - 1.4) Na kter�ch platform�ch lze provozovat PostgreSQL? - 1.5) Kde mohu z�skat PostgreSQL? - 1.6) Jak� je posledn� verze? - 1.7) Kde mohu z�skat podporu? - 1.8) Jak a kam hl�sit chyby? - 1.9) Kde najdu informace o zn�m�ch chyb�ch nebo nepodporovan�ch - vlastnostech? - 1.10) Jak� je dostupn� dokumentace? - 1.11) Jak se mohu naucit SQL? - 1.12) Jak se mohu pripojit k t�mu v�voj�ru? - 1.13) Jak je na tom PostgreSQL v porovn�n� s jin�mi datab�zemi? - 1.14) Je PostgreSQL pripraven na aktu�ln� zav�den� letn�ho casu v - nekter�ch zem�ch? - - Dotazy na klientsk� rozhran� - - 2.1) Kter� rozhran� jsou pouziteln� pro PostgreSQL? - 2.2) Jak� n�stroje lze pouz�t pro PostgreSQL a web? - 2.3) Existuje grafick� rozhran� pro PostgreSQL? - - Administrativn� dotazy - - 3.1) Jak nainstalovat PostgreSQL jinam nez do /usr/local/pgsql? - 3.2) Jak nastavit pravidla pro pr�stup z jin�ch stanic? - 3.3) Jak vyladit datab�zi na vyss� v�kon? - 3.4) Jak� m�m lad�c� prostredky? - 3.5) Co znamen� "Sorry, too many clients", kdyz se zkous�m pripojit? - 3.6) Proc je nutn� dump a obnoven� (load) datab�ze pri upgradu - PostgreSQL? - 3.7) Jak� hardware bych mel pouz�vat? - - Provozn� dotazy - - 4.1) Jak z�skat pouze prvn� r�dek dotazu? N�hodn� r�dek? - 4.2) Jak z�sk�m seznam tabulek, indexu, datab�z�, a definovan�ch - uzivatelu. Mohu videt dotazy, kter� pouz�v� psql pro zobrazen� techto - informac�? - 4.3) Jak zmenit datov� typ sloupce? - 4.4) Jak� je maxim�ln� velikost r�dku, tabulky a datab�ze? - 4.5) Kolik diskov�ho prostoru je potreba k ulozen� dat z norm�ln�ho - textov�ho souboru? - 4.6) Muj dotaz je pomal� a nepouz�v� vytvoren� indexy. Proc? - 4.7) Jak zjist�m, jak se vyhodnocuje muj dotaz? - 4.8) Jak pouz�t case-(in)sensitive regul�rn� v�raz? Jak pouz�t index - pro case insensitive hled�n�? - 4.9) Jak v dotazu detekovat, ze polozka je NULL? Jak bezpecne spojit - dva retezce, pokud mohou obsahovat NULL? Lze tr�dit podle toho, jestli - je polozka NULL nebo ne? - 4.10) Jak� jsou rozd�ly mezi ruzn�mi znakov�mi typy? - 4.11.1) Jak vytvorit serial/auto-increment polozku? - 4.11.2) Jak z�skat hodnotu SERIAL po vlozen� r�dku? - 4.11.3) Nezpusob� currval() a nextval() probl�my ve v�ce uzivatelsk�m - prostred�? - 4.11.4) Proc nen� vygenerovan� c�slo pouzito pri prerusen� - transakce?Proc vznikaj� d�ry v c�slov�n� prostrednictv�m sekvence nebo - typu SERIAL? - 4.12) Co to je OID? Co je to CTID? - 4.13) Co znamen� chybov� hl�sen� "ERROR: Memory exhausted in - AllocSetAlloc()"? - 4.14) Jak zjist�m, kterou verzi PostgreSQL pouz�v�m? - 4.15) Jak vytvorit sloupec, kter� bude implicitne obsahovat aktu�ln� - cas? - 4.16) Jak prov�st vnejs� spojen� (outer join)? - 4.17) Jak prov�st dotaz napr�c nekolika datab�zemi? - 4.18) Muze funkce vr�tit v�ce r�dku nebo sloupcu? - 4.19) Co je pr�cinou chyby "relation with OID xxxxx does not exist"? - 4.20) Jak� jsou moznosti replikace datab�z�? - 4.21) Proc v dotazu nejsou rozpozn�ny n�zvy m�ch tabulek nebo funkc�? - Proc jsou velk� p�smena v n�zvech automaticky prevedena na mal� - p�smena? - _________________________________________________________________ - - Obecn� ot�zky - - 1.1) Co je to PostgreSQL? Jak� je spr�vn� v�slovnost slova PostgreSQL? - - V�slovnost PostgreSQL je Post-Gres-Q-L , nebo zjednodusene Postgres . - V rade jazyku je slovo PostgreSQL obt�zne vysloviteln�, proto se v - hovoru casto pouz�v� zjednodusen� forma n�zvu. Pro ty, kter� by si - r�di poslechli v�slovnost, je k dispozici audioz�znam v MP3 form�tu. - - PostgreSQL je relacn� datab�ze s nekter�mi objektov�mi rysy, kter� m� - moznosti tradicn�ch komercn�ch datab�zov�ch syst�mu s nekolika - rozs�ren�mi, kter� lze naj�t v DBMS syst�mech pr�st� generace. - Pouz�v�n� PostgreSQL nen� omezen� a vesker� zdrojov� k�dy jsou volne - dostupn�. - - Za v�vojem PostgreSQL je mezin�rodn� skupina nez�visl�ch v�voj�ru - navz�jem komunikuj�c�ch prostrednictv�m internetu. Tento projekt nen� - r�zen z�dnou obchodn� organizac�. Pokud se chcete pridat k projektu, - prectete si v�voj�rsk� FAQ na adrese - http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html . - - 1.2) Kdo r�d� v�voj PostgreSQL? - - Pokud budete hledat organizaci r�d�c� v�voj PostgreSQL, budete - zklam�ni. Nic takov�ho neexistuje. Existuj� pouze "core" a CVS skupiny - uzivatelu, ale ty existuj� v�ce z administr�torsk�ch duvodu nez z - organizacn�ch. Projekt je smerov�n komunitou v�voj�ru a uzivatelu, ke - kter� se kdokoliv muze pripojit. Jedin� co potrebuje, je prihl�sit se - do elektronick� konference. V�ce ve v�voj�rsk�m FAQ. - - 1.3) Pod jakou licenc� je PostgreSQL? - - PostgreSQL je predmetem n�sleduj�c�ch autorsk�ch pr�v: - - D�lc� Copyright (c) 1996-2009, PostgreSQL Global Development Group - D�lc� Copyright (c) 1994-6, Regents of the University of California - - Udeluje se opr�vnen� k uzit�, rozmnozov�n�, prov�den� �prav a - rozsirov�n� tohoto softwaru a dokumentace k nemu, pro jak�koli �cely, - bez licencn�ho poplatku a bez p�semn� licencn� smlouvy, za podm�nky, - ze na vsech jeho kopi�ch je uvedeno ozn�men� o v�se uveden�ch pr�vech, - jakoz i obsah tohoto a dvou n�sleduj�c�ch odstavcu. - - THE UNIVERSITY OF CALIFORNIA ("KALIFORNSK� UNIVERZITA") NEN� V Z�DN�M - PR�PADE ODPOVEDNA Z�DN� TRET� OSOBE ZA PR�MOU, NEPR�MOU, ZVL�STN�, - NAHODILOU NEBO V�SLEDNOU SKODU, VCETNE USL�HO ZISKU, ZPUSOBENOU UZIT�M - TOHOTO SOFTWARU A DOKUMENTACE K NEMU, A TO I V PR�PADE, ZE THE - UNIVERSITY OF CALIFORNIA BYLA INFORMOV�NA O MOZNOSTI VZNIKU TAKOV� - SKODY. - - THE UNIVERSITY OF CALIFORNIA ZEJM�NA NEPOSKYTUJE JAK�KOLI Z�RUKY, A TO - NEJEN Z�RUKY OBCHODOVATELNOSTI A VHODNOSTI TOHOTO V�ROBKU KE - SPECIFICK�M �CELUM. N�ZE UVEDEN� SOFTWARE JE POSKYTNUT "JAK STOJ� A - LEZ�" A THE UNIVERSITY OF CALIFORNIA NEN� POVINNA ZAJISTIT JEHO - �DRZBU, PODPORU, AKTUALIZACI, VYLEPSEN� NEBO MODIFIKACI. - - V�se uveden� je BSD licence, bezn� licence otevren�ho zdroje. Nen� zde - z�dn� omezen� ohledne uzit� k�du zdroje. Jsme s t�m spokojeni a nem�me - v �myslu na t�to skutecnosti cokoli menit. - - 1.4) Na kter�ch platform�ch lze provozovat PostgreSQL? - - Strucne receno, PostgreSQL bez� na vsech modern�ch unixov�ch - syst�mech. Seznam tech, u kter�ch probehlo testov�n�, naleznete v - instalacn�ch instrukc�ch. - - PostreSQL tak� bez� nativne na vsech Microsof Windows syst�mech - odvozen�ch z Microsoft Windows NT jako jsou Windows 2000SP4, WindowsXP - a Windows2003. Instalacn� bal�cek naleznete na adrese - http://pgfoundry.org/projects/pginstaller. Na stars�ch syst�mech s - jeste MS-DOS j�drem lze spustit PostgreSQL s emulacn�m programem - Cygwin. - - D�le existuje port pro Novell Netware 6 port na adrese - http://forge.novell.com, a pro OS/2 verze (eComStation) na adrese - http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgre - SQL&stype=all&sort=type&dir=%2F . - - 1.5) Kde mohu z�skat PostgreSQL? - - Pomoc� webov�ho klienta z adresy http://www.postgresql.org/ftp/ nebo - klienta ftp z adresy ftp://ftp.postgresql.org/pub/. - - 1.6) Jak� je posledn� verze? - - Nejnovejs� verz� PostgreSQL je verze 8.2.5 - - V pl�nu je uvolnovat kazdorocne jednu velkou verzi a kazd�ch nekolik - mes�cu mal� verze. - - 1.7) Kde mohu z�skat podporu? - - Nejcastejs� forma podpory uzivatelum PostgreSQL komunitou je - prostrednictv�m e-mailu. Na nasem webov�m serveru naleznete odkaz na - str�nky,kde se muzete prihl�sit do elektronick� konference. Pro - zac�tek jsou doporucen� konference general nebo bugs. - - Dals� cestou je IRC kan�l #postgresql na Freenode (irc.freenode.net). - K pripojen� pouzijte Unixov� pr�kaz irc -x '#postgresql' "$USER" - irc.freenode.net nebo jak�koholiv jin�ho IRC klienta. V t�to s�ti - existuje jeste spanelsk� (#postgresql-es) a francouzsk� - (#postgresqlfr) verze. Dals� PostgreSQL kan�l naleznete na EFNet. - - Seznam spolecnost� poskytuj�c� komercn� podporu naleznete na adrese - http://techdocs.postgresql.org/companies.php. - - 1.8) Jak a kam hl�sit chyby? - - Vyplnte formul�r na adrese - http://www.postgresql.org/support/submitbug. Na nasem ftp serveru - ftp://ftp.postgresql.org/pub/ si overte, ze pouz�v�te aktu�ln� verzi - PostreSQL. - - Chyby reportovan� prostrednictv�m chybov�ho formul�re nebo zasl�n�m - mailu do PostgreSQL konference obvykle generuje n�sleduj�c� odezvu: - * Nejedn� se o chybu, a proc - * Jedn� se o zn�mou chybu, kter� je jiz v seznamu �kolu TODO - * Tato chyba byla opravena v aktu�ln� verzi - * Tato chyba byla jiz opravena ve verzi, kter� zat�m nebyla - ofici�lne uvolnena - * Pozadavek na dals� doplnuj�c� informace: - + Operacn� syst�m - + Verze PostgreSQL - + Test reprodukuj�c� chybu - + Lad�c� informace - + Backtrace v�stup debuggeru - * Jedn� se o zat�m nezjistenou chybu, pak muzete cekat - + Z�platu odstranuj�c� chybu, kter� bude vlozena do dals� velk� - nebo mal� verze - + Informaci, ze se jedn� o chybu, kterou nelze okamzite resit a - je proto prid�na do TODO - - 1.9) Kde najdu informace o zn�m�ch chyb�ch nebo nepodporovan�ch vlastnostech? - - PostgreSQL podporuje rozs�renou podmnozinu SQL:2003. V nasem TODO - naleznete seznam zn�m�ch chyb, chybej�c�ch vlastnost�, a pl�ny do - budoucna. - - Odezva na pozadavek na novou vlastnost PostgreSQL je obvykle: - * Pozadavek je jiz v TODO - * Pozadovan� funkce nen� chten� protoze - + Duplikuje jiz existuj�c� funkci, kter� respektuje SQL - standard - + Implementac� funkce by se pr�lis zkomplikoval k�d bez - relevantn�ho pr�nosu - + Funkce by mohla b�t nebezpecn� nebo nespolehliv� - * Pozadavek je prid�n do TODO - - PostgreSQL nepoz�v� syst�m pro sledov�n� chyb, protoze jsme zjistili, - ze je efektivnejs� pr�mo reagovat na maily a udrzovat aktu�ln� TODO. V - praxi je snaha o co nejrychlejs� resen� chyb, a chyby, kter� by se - mohly projevit u mnoha uzivatelu jsou opravov�ny velice rychle. Jedin� - m�sto, kde lze dohledat vsechny zmeny, rozs�ren� a opravy v PostgreSQL - je CVS log. Pozn�mky k verzi "Release notes" nezachycuj� vsechny - zmeny, k nemz doslo. - - 1.10) Jak� je dostupn� dokumentace? - - PostgreSQL obsahuje vynikaj�c� dokumentaci zahrnuj�c� manu�l, - manu�lov� str�nky a testovac� pr�klady. Pod�vejte se do adres�re /doc. - Manu�l je pr�stupn� online na http://www.postgresql.org/docs. - - K dispozici jsou zdarma dve online knihy na adres�ch - http://www.postgresql.org/docs/books/awbook.html a - http://www.commandprompt.com/ppbook/. Dals� literaturu lze zakoupit. - Nejpopul�rnejs� je od Kerryho Douglase. Seznam dostupn� literatury je - na http://techdocs.postgresql.org/techdocs/bookreviews.php. Jeste je - kolekce technicky orientovan�ch cl�nku tematicky spojen�ch s - PostgreSQL na adrese http://techdocs.postgresql.org/. - - R�dkov� klient psql m� \d pr�kazy pro zobrazen� informac� o typech, - oper�torech, funkc�ch, agregacn�ch funkc�, atd. Pouzijte \? pro - zobrazen� dostupn�ch pr�kazu. - - Dals� dokumentaci najdete na nasem webu. - - 1.11) Jak se mohu naucit SQL? - - Pod�vejte se do v�se uveden� dokumentace. Dals� online knihou je - "Teach Yourself SQL in 21 Days, Second Edition" na adrese - http://members.tripod.com/er4ebus/sql/index.htm. Mnoho nasich - uzivatelu doporucuje knihu The Practical SQL Handbook, Bowman, Judith - S., et al., Addison-Wesley. Dals� The Complete Reference SQL, Groff et - al., McGraw-Hill. - - Dals� online tutori�ly jsou dostupn� na adres�ch: - * http://www.intermedia.net/support/sql/sqltut.shtm - * http://sqlcourse.com - * http://www.w3schools.com/sql/default.asp - * http://mysite.verizon.net/Graeme_Birchall/id1.html - - 1.12) Jak se mohu pripojit k t�mu v�voj�ru? - - Prostudujte si Developer's FAQ. - - 1.13) Jak je na tom PostgreSQL v porovn�n� s jin�mi datab�zemi? - - Software muzeme porovn�vat z nekolika ruzn�ch pohledu: vlastnosti, - v�kon, spolehlivost, podpora a cena. - - Vlastnosti - - PostgreSQL nab�z� vetsinu funkc� funkcionality velk�ch komercn�ch DBMS - syst�mu jako jsou: transakce, vnoren� dotazy, spouste, referencn� - integrita a sofistikovan� syst�m zamyk�n�. Poskytujeme urcit� funkce, - kter� ostatn� syst�my bezne nepodporuj�. Napr. uzivatelem definovan� - typy, dedicnost, pravidla (rules), a MVCC architekturu. - - V�kon - - V�kon PostgreSQL je srovnateln� s ostatn�mi komercn�mi nebo Open - Source datab�zemi. V nekter�ch pr�padech je rychlejs�, jindy - pomalejs�. N�s v�kon je obvykle +/-10% vuci ostatn�m datab�z�m. - - Spolehlivost - - Uvedomujeme si, ze datab�ze mus� b�t stoprocentne spolehliv�, jinak je - nepouziteln�. Snaz�me se, aby kazd� verze byla dobre otestov�na a - obsahovala minimum chyb. Kazd� verze je minim�lne nekolik mes�cu v - beta testovac�m rezimu. Do produkcn�ho rezimu se dostane, az kdyz - nedoch�z� k dals�m zmen�m nebo oprav�m. Ver�me, ze jsem v�ce nez - srovnateln� s ostatn�mi datab�zemi v t�to oblasti. - - Podpora - - Na nasich internetov�ch konferenc�ch se setk�v� velk� skupina v�voj�ru - a uzivatelu pri resen� vyskytuj�c�ch se probl�mu. Nase internetov� - konference umoznuj� kontakt velk� skupiny v�voj�ru a uzivatelu. - Nemuzeme garantovat opravu chyby, ale komercn� DBMSs tak� vzdy - negarantuj� resen� probl�mu. Ver�me ale, ze d�ky pr�m�mu kontaktu na - v�voj�re, nasi uzivatelskou komunitu, manu�lum, a dostupn�m zdrojov�m - k�dum m�me leps� podporu nez ostatn� DBMSs. Pro ty, kter� preferuj� - komercn� "per-incident" podporu, existuje spolecnost�, kter� ji - nab�zej� (FAQ sekce 1.7.) - - Cena - - PostgreSQL lze pouz�vat bezplatne (a to i pro komercn� pouzit�). Tak� - muzete neomezene pouz�vat n�s k�d ve sv�ch produktech s v�jimkami - specifikovan�mi v nas� licenci (preb�r�me BSD licenci). - - 1.14) Je PostgreSQL pripraven na aktu�ln� zav�den� letn�ho casu v nekter�ch - zem�ch? - - Poc�naje verz� 8.0.[4+] podporuje PostgreSQL letn� cas tak� pro USA. - Podpora letn�ho casu (daylight saving time) pro Kanadu a Z�padn� - Austr�lii je obsazena ve verz�ch 8.0.[10+] a 8.1.[6+] a vsech - n�sleduj�c�ch verz�ch. Stars� verze pouz�valy syst�movou datab�zi - casov�ch z�n obsahuj�c�, krome jin�ho, informaci o tom, zda se pro - danou casovou z�nu rozlisuje mezi letn�m a zimn�m casem. - _________________________________________________________________ - - Dotazy na klientsk� rozhran� - - 2.1) Kter� rozhran� jsou pouziteln� pro PostgreSQL? - - PostgreSQL se distribuuje pouze s rozhran�m pro jazyk C a embedded C. - Vsechna dals� rozhran� predstavuj� nez�visl� projekty, kter� je treba - st�hnout z internetu samostatne. Osamostatnen� techto projektu - umoznuje nez�vislost v�vojov�ch t�mu a moznost vyd�vat nov� verze bez - ohledu na vyd�n� nov� verze PostgreSQL. - - Nekter� programovac� jazyky jako je napr. PHP obsahuj� rozhran� pro - PostgreSQL. Rozhran� pro jazyky jako je Perl, Tcl, Python a mnoho - dals�ch jsou dostupn� na adrese: http://gborg.postgresql.org v sekci - Drivers/Interfaces. - - 2.2) Jak� n�stroje lze pouz�t pro PostgreSQL a web? - - Dobr�m �vodem do problematiky datab�z� v prostred� webov�ch str�nek - muze b�t web http://www.webreview.com. - - PHP (http://www.php.net) je vynikaj�c�m rozhran�m pro tvorbu webu. - - Pro slozitejs� �lohy se casto pouz�v� Perl a jeho BDB:Pg rozhran� s - podporou CGI - CGI.pm nebo mod_perl(u). - - 2.3) Existuje grafick� rozhran� pro PostgreSQL? - - K dispozici je rada grafick�ch n�stroju podporuj�c�ch PostgreSQL a to - od komercn�ch nebo open source v�voj�ru. Podrobn� seznam naleznete na - adrese http://www.postgresql.org/docs/techdocs.54. - _________________________________________________________________ - - Administrativn� dotazy - - 3.1) Jak nainstalovat PostgreSQL jinam nez do /usr/local/pgsql? - - Pri spousten� configure nastavte parametr --prefix - - 3.2) Jak nastavit pravidla pro pr�stup z jin�ch stanic? - - Ve v�choz� konfiguraci, PostgreSQL umoznuje pouze pripojen� z - lok�ln�ho uzivatele prostrednictv�m Unix domain sockets nebo TCP/IP - spojen�. Bez modifikace listen_addresses v souboru postgresql.conf, a - povolen� adresy v souboru $PGDATA/pg_hba.conf se nelze pripojit k - PostgreSQL z ostatn�ch stanic. Zmena v�se zm�nen�ch parametru vyzaduje - restart datab�zov�ho serveru. - - 3.3) Jak vyladit datab�zi na vyss� v�kon? - - V�kon syst�mu muzete ovlivnit ve trech oblastech: - - Zmeny dotazu - - * Pouzit�m indexu vcetne c�stecn�ch a funkcion�ln�ch - * Pouzit�m COPY m�sto opakovan�ch INSERTu - * Sloucen�m mnoha SQL pr�kazu do jedn� transakce sn�zen�m rezie na - commit - * Pouz�v�n�m CLUSTERU, pokud nac�t�te vets� pocet r�dek podle indexu - * Pouzit�m klauzule LIMIT v poddotazech - * Pouzit�m predpripraven�ch dotazu - * Pouz�v�n�m ANALYZE. Tento pr�kaz aktualizuje statistiky, kter� se - pouz�vaj� pri optimalizaci dotazu - * Pravideln� pouzit� VACUUM nebo pouz�v�n� pg_autovacuum - * Odstranen�m indexu pred rozs�hl�mi zmenami v datech - - Konfigurace serveru - - Urcit� parametry v souboru postgresql.conf maj� vliv na v�kon serveru. - Detaily naleznete v pr�rucce Administr�tora v Server Run-time - Environment/Run-time Configuration. Dals� koment�re naleznete v - http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.ht - ml a http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html. - - V�ber hardware - - Vliv hardware na v�kon serveru je pops�n v dokumentech - http://candle.pha.pa.us/main/writings/pgsql/hw_performance/index.html - a http://www.powerpostgresql.com/PerfList/. - - 3.4) Jak� m�m lad�c� prostredky? - - Nastaven�m log_* promenn�ch v konfiguraci serveru si vynut�te logov�n� - dotazu a procesn�ch statistik, kter� V�m mohou pomoci pri laden� a - optimalizaci v�konu. - - 3.5) Co znamen� "Sorry, too many clients", kdyz se zkous�m pripojit? - - Prekrocil jste v�choz� limit, kter� je 100 soucasne pripojen�ch - uzivatelu. V konfiguraci serveru v postgresql.conf tuto hodnotu muzete - zvetsit zmenou hodnoty max_connection. Nezapomente restartovat server. - - 3.6) Proc je nutn� dump a obnoven� (load) datab�ze pri upgradu PostgreSQL? - - Zpusob c�slov�n� je pops�n v dokumentaci na - http://www.postgresql.org/support/versioning. Instrukce k proveden� - migrace na vyss� verzi jsou takt�z v dokumentaci na adrese - http://www.postgresql.org/docs/current/static/install-upgrading.html. - - 3.7) Jak� hardware bych mel pouz�vat? - - Jelikoz PC jsou vetsinou kompatibiln�, lid� maj� tendence verit, ze - vsechna PC jsou stejne kvalitn�. Coz nen� pravda. Pameti ECC, SCSI a - kvalitn� z�kladn� desky jsou mnohem spolehlivejs� a v�konnejs� nez - lacinejs� hardware. PostgreSQL pobez� na vetsine hardwaru, nicm�ne - pokud je pro V�s spolehlivost a v�kon syst�mu dulezit�, je dobr� - venovat cas nalezen� vhodn� hardwarov� konfigurace. Na nasich - elektronick�ch konferenc�ch muzete diskutovat o vhodn�ch konfigurac�ch - a znack�ch. - _________________________________________________________________ - - Provozn� dotazy - - 4.1) Jak z�skat pouze prvn� r�dek dotazu? N�hodn� r�dek? - - Pokud potrebujete pouze nekolik r�dku a pokud v�te kolik, pouzijte - SELECT LIMIT. Pokud bude mozn� pouz�t index shoduj�c� se s ORDER BY, - je mozn�, ze se nebude prov�det cel� dotaz. Pokud nezn�te pocet - z�znamu, pouzijte kurzor a pr�kaz FETCH. - - Pro v�ber n�hodn�ho r�dku pouzijte pr�kaz ve tvaru: -SELECT col -FROM tab -ORDER BY random() -LIMIT 1; - - 4.2) Jak z�sk�m seznam tabulek, indexu, datab�z�, a definovan�ch uzivatelu. - Mohu videt dotazy, kter� pouz�v� psql pro zobrazen� techto informac�? - - V psql pr�kazem \dt z�sk�te seznam tabulek. �pln� seznam pr�kazu psql - z�sk�te pr�kazem \?. Alternativne si muzete prostudovat zdrojov� k�d - psql - soubor pgsql/src/bin/psql/describe.c, kter� obsahuje SQL - pr�kazy, kter� jsou generov�ny pro z�sk�n� v�stupu psql "backslash" - pr�kazu. Tak� muzete nastartovat psql s parametrem -E, kter� zpusob� - zobrazen� vsech SQL pr�kazu, kter� se odes�laj� na server. PostgreSQL - tak� podporuje SQL standard INFORMACN� SCH�MATA (standardn� syst�mov� - tabulky). Klasick�m dotazem do syst�mov�ch tabulek z�sk�te pozadovan� - informace o strukture datab�ze. - - Syst�mov� tabulky PostgreSQL (mimo r�mec SQL standardu) pouz�vaj� - prefix pg_. Pro zjisten� struktury datab�ze je muzete pouz�t tak�, i - kdyz preferov�ny jsou dotazy do informacn�ho sch�matu. - - Seznam vsech datab�z� z�sk�te pr�kazem psql -l - - Dals� inspiraci najdete v souboru pgsql/src/tutorial/syscat.source. - Obsahuje ilustracn� SELECTy potrebn� k z�sk�n� informac� z syst�mov�ch - tabulek datab�ze. - - 4.3) Jak zmenit datov� typ sloupce? - - Ve verz�ch 8.0 a pozdejs�ch jednoduse: -ALTER TABLE ALTER COLUMN TYPE - - V stars�ch verz�ch: -BEGIN; -ALTER TABLE tab ADD COLUMN new_col new_data_type; -UPDATE tab SET new_col = CAST(old_col AS new_data_type); -ALTER TABLE tab DROP COLUMN old_col; -COMMIT; - - Po zmene spustte pr�kaz VACUUM FULL, aby doslo k uvolnen� diskov�ho - prostoru pouzit�ho v tu chv�li jiz neplatn�mi z�znamy. - - 4.4) Jak� je maxim�ln� velikost r�dku, tabulky a datab�ze? - - PostgreSQL m� tato omezen�: - - Maxim�ln� velikost datab�ze: neomezena (existuj� 32TB db) - Maxim�ln� velikost tabulky: 32 TB - Maxim�ln� velikost r�dky: 480GB - Maxim�ln� velikost polozky 1 GB - Maxim�ln� pocet r�dku v tabulce: neomezeno - Maxim�ln� pocet sloupcu v tabulce: 250-1600 podle typu - Maxim�ln� pocet indexu na tabulce: neomezeno - - Ve skutecnosti nic nen� neomezeno, limitem b�v� vzdy dostupn� diskov� - pamet nebo velikost operacn� pameti. Pokud m�te nekterou z techto - hodnot neobvykle velkou, muze doj�t ke sn�zen� v�konu. - - Maxim�ln� velikost tabulky je 32 TB a nevyzaduje podporu velk�ch - souboru operacn�m syst�mem. Velk� tabulky se ukl�daj� do nekolika 1 GB - souboru takze limity souborov�ho syst�mu nejsou podstatn�. - - Maxim�ln� velikost tabulky a maxim�ln� pocet sloupcu muzeme - zectyrn�sobit nastaven�m velikosti bloku na 32K. - - Indexy jsou povolen� pouze na sloupc�ch jejichz d�lka je mens� nez - 2000 znaku. Pokud tuto d�lku prekroc�me a index potrebujeme pro - zajisten� jednoznacnosti, je vhodnejs� pouz�t funkcion�ln� index nad - MD5 funkc� nebo fulltextov� index. - - 4.5) Kolik diskov�ho prostoru je potreba k ulozen� dat z norm�ln�ho textov�ho - souboru? - - PostgreSQL vyzaduje az petin�sobek diskov�ho prostoru k ulozen� dat z - textov�ho souboru. - - Napr�klad, uvazujme soubor se 100 tis�ci r�dky obsahuj�c� na kazd� - r�dce cel� c�slo a textov� popis. Text je v prumerne dvacet bytu - dlouh�. Textov� soubor bude 2.8 MB dlouh�. Velikost datab�ze - obsahuj�c� odpov�daj�c� data bude zhruba 5.2 MB. - 24 bytu: hlavicka r�dku (priblizne) - 24 bytu: jedna celoc�seln� polozka a jedna textov� - + 4 byty: ukazatel na str�nku k entici - ------------------------------------------------------ - 52 bytu na r�dek - - Velikost datov� str�nky PostgreSQL je 8192 bytu (8KB) - 8192 bytu na str�nce ----------------------- = 158 r�dek na str�nku - 52 bytu za r�dek - -100000 r�dek ------------------------ = 633 str�nek (zaokrouhleno nahoru) - 158 r�dek na str�nce - -633 datov�ch str�nek * 8192 bytu na kazdou str�nku = 5,185,536 bytu (5.2 MB) - - Indexy nemaj� tak velkou rezii, ale mohou b�t tak� velk�, protoze - obsahuj� indexovan� data. - - Hodnoty NULL jsou ulozeny v bitmap�ch, takze zab�raj� jen velmi m�lo - diskov�ho prostoru. - - 4.6) Muj dotaz je pomal� a nepouz�v� vytvoren� indexy. Proc? - - Kazd� dotaz nemus� nutne pouz�t existuj�c� indexy. Index se pouzije - tehdy, kdyz je tabulka vets� nez urcit� minim�ln� velikost, a dotaz - vyb�r� pouze procentu�lne malou c�st r�dku tabulky. To proto, ze - n�hodn� pr�stup k disku dan� cten�m indexu muze b�t pomalejs� nez - line�rn� cten� tabulky nebo sekvencn� cten�. - - PostgreSQL rozhoduje o pouzit� indexu na z�klade statistiky pr�stupu k - tabulce. Tyto statistiky se shromazduj� pr�kazy VACUUM ANALYZE nebo - ANALYZE. D�ky statistik�m m� optimizer informaci o poctu r�dek v - tabulce a muze l�pe rozhodnout o pouzit� indexu. Statistiky se uplatn� - pri urcen� optim�ln�ho porad� a metody spojen� tabulek. Statistiky by - se meli aktualizovat opakovane, tak jak se men� obsah tabulek. - - Indexy nejsou obycejne pouzity pro setr�den� nebo spojen� tabulek. - Sekvencn� zpracov�n� n�sledovan� explicitn�m tr�den�m je obycejne - rychlejs� nez pouzit� indexu na velk� tabulce. - - Jinak je tomu v pr�pade pouzit� LIMIT a ORDER BY, pri kter�m se - vetsinou index pouzije, jelikoz je v�sledkem pouze mal� c�st tabulky. - - Pokud si mysl�te, ze optimizer mylne zvolil sekvencn� prohled�v�n� - tabulky, pouzijte pr�kaz SET enable_seqscan TO 'off' a zkuste zda je - prohled�v�n� s indexem rychlejs�. - - Pri vyhled�v�n� na z�klade vzoru jako je napr. oper�tor LIKE nebo ~ se - indexy pouzij� pouze za urcit�ch skutecnost�: - * zac�tek hledan�ho vzoru mus� b�t ukotven k zac�tku, tj. - + vzor LIKE nesm� zac�nat % - + ~ regul�rn� v�raz mus� zac�nat ^ - * vzor nesm� zac�nat intervalem, napr. [a-e] - * vyhled�van�, kter� nen� Case sensitiv jako je ILIKE nebo ~* - nepouz�v� indexy. Muzete ale pouz�t funkcion�ln� indexy, kter� - jsou pops�ny v sekci 4.8 - * pri inicializaci datab�ze (initdb) mus� b�t pouzito C locale nebo - vytvorte speci�ln� text_pattern_index, kter� umozn�, pri - respektov�n� zm�nen�ch podm�nek pouzit� indexu operac� LIKE. Pro - vyhled�v�n� cel�ch slov je mozn� a v�hodn� pouz�t fulltext. - - 4.7) Jak zjist�m, jak se vyhodnocuje muj dotaz? - - Pod�vejte se do n�povedy k pr�kazu EXPLAIN. - - 4.8) Jak pouz�t case-(in)sensitive regul�rn� v�raz? Jak pouz�t index pro case - insensitive hled�n�? - - Vyhled�v�n� prostrednictv�m regul�rn�ch vzoru zajistuje oper�tor ~, - kter� je case-sensitive. Jeho case-insensitive varianta je oper�tor - ~*. Case-insensitive variac� oper�toru LIKE je oper�tor ILIKE. - - Case-insensitive vyhled�n� se res�: -SELECT * -FROM tab -WHERE lower(col) = 'abc'; - - Tento dotaz nepouzije standardn� index. Mus�te pouz�t tzv. - funkcion�ln� index: -CREATE INDEX tabindex ON tab (lower(col)); - - Pokud index vytvor�me jako unik�tn�, tak muzeme ukl�dat retezce - obsahuj�c� mal� i velk� p�smena, ale nikoliv retezce, kter� se od sebe - odlisuj� jen v mal�ch a velk�ch p�smenech. K zajisten� z�pisu retezce - obsahuj�c� pouze mal� nebo pouze velk� p�smena pouzijte CHECK kontroly - nebo triggery. - - 4.9) Jak v dotazu detekovat, ze polozka je NULL? Jak bezpecne spojit dva - retezce, pokud mohou obsahovat NULL? Lze tr�dit podle toho, jestli je polozka - NULL nebo ne? - - Pokud chcete testovat hodnotu NULL pouzijte oper�tor IS: - SELECT * - FROM tab - WHERE col IS NULL; - - K spojen� retezcu, kter� mohou obsahovat hodnotu NULL, pouz�vejte - funkci COALESCE(), napr.: - SELECT COALESCE(col1, '') || COALESCE(col2, '') - FROM tab - - Pokud chcete tr�dit podle hodnoty NULL, pouzijte v�raz IS NULL nebo IS - NOT NULL v klauzuli ORDER. Hodnota pravda m� prednost pred hodnotou - false a tedy pokud pouzijete: - SELECT * - FROM tab - ORDER BY (col IS NOT NULL) - - tak z�znamy s NULL budou na zac�tku setr�den�ch dat. - - 4.10) Jak� jsou rozd�ly mezi ruzn�mi znakov�mi typy? - - Typ Intern� n�zev Pozn�mky - VARCHAR(n) varchar n urcuje maxim�ln� d�lku - CHAR(n) bpchar retezec je do dan� d�lky rozs�ren mezerami - TEXT text bez omezen� d�lky - BYTEA bytea pole bytu nespecifikovan� d�lky - "char" char jeden znak - - Na intern� n�zvy muzete narazit v syst�mov�m katalogu nebo v nekter�ch - chybov�ch hl�sen�ch. - - Ctyri prvn� typy jsou tzv. varlena typy (prvn� ctyri byty na disku - jsou obsahuj� d�lku, ostatn� obsahuj� vlastn� data). Skutecne obsazen� - prostor je tedy o neco m�lo vets� nez deklarovan� velikost. Na druhou - stranu, dels� retezce jsou komprimov�ny, takze obsazen� prostor na - disku muze b�t mens� nez se cek�. - - VARCHAR(n) je vhodn� pro ukl�d�n� ruzne dlouh�ch retezcu u kter�ch - zn�me d�lkov� omezen�, TEXT pro retezce bez omezen� d�lky (maximum je - jeden gigabyte). - - CHAR(n) se pouz�v� pro ulozen� stejne dlouh�ch retezcu. CHAR(n) dopln� - mezerami na specifikovanou d�lku, VARCHAR(n) hodnoty se ukl�daj� tak - jak jsou. BYTEA je pro ukl�d�n� bin�rn�ch dat - non ASCII hodnot. - Vsechny zm�nen� typy maj� podobn� v�konov� charakteristiky. - - 4.11.1) Jak vytvorit serial/auto-increment polozku? - - V PostgreSQL muzete pouz�t datov� typ SERIAL. Jeho pouzit�m se - automaticky vytvor� sekvence. Napr�klad: -CREATE TABLE person ( - id SERIAL, - name TEXT -); - - je automaticky transformov�no na: -CREATE SEQUENCE person_id_seq; -CREATE TABLE person ( - id INT4 NOT NULL DEFAULT nextval('person_id_seq'), - name TEXT -); - - Podrobnejs� informace najdete v manu�lu v popisu pr�kazu - create_sequence. - - 4.11.2) Jak z�skat hodnotu SERIAL po vlozen� r�dku? - - Nejjednoduss�m zpusob, jak z�skat vygenerovanou hodnotu typu SERIAL, - je vyuz�t klauzuli RETURNING. Pro tabulku z 4.11.1 vypad� takto: -INSERT INTO person (name) VALUES ('Blaise Pascal') RETURNING id; - - Tak� muzete pouz�t funkci nextvall() a jej� v�sledek pouz�t v pr�kazu - INSERT, nebo zavolat currval() po proveden� pr�kazu INSERT. - - 4.11.3) Nezpusob� currval() a nextval() probl�my ve v�ce uzivatelsk�m - prostred�? - - Ne, currval vrac� vzdy hodnotu, kter� byla vygenerov�na pro v�s. - - 4.11.4) Proc nen� vygenerovan� c�slo pouzito pri prerusen� transakce?Proc - vznikaj� d�ry v c�slov�n� prostrednictv�m sekvence nebo typu SERIAL? - - Pot� co sekvence vygeneruje nov� c�slo, tak se nedoch�z� k zamcen� - sekvence a necek� se na �spesn� nebo ne�spesn� dokoncen� transakce. - Odvol�n�m transakce, kter� si vyz�dala c�sla sekvence se tato c�sla - nen�vratne ztrat�. - - 4.12) Co to je OID? Co je to CTID? - - V pr�pade, ze tabulku nezaloz�me s atributem WITHOUT OIDS, tak m� - kazd� r�dek unik�tn� identifikacn� c�slo OID. Toto c�slo je 4 bajtov� - cel� c�slo, kter� je jedinecn� v cel� instalaci. Pretece po 4 - miliard�ch r�dku. PostgreSQL pouz�v� OIDs jako intern� linky v - intern�ch syst�mov�ch tabulk�ch. - - K z�sk�n� unik�tn�ho c�sla v nesyst�mov�ch tabulk�ch je vhodnejs� - pouzit� typu SERIAL nez OID, jelikoz sekvence SERIAL se pouz�v� pouze - pro jednu tabulku a je tud�z m�ne n�chyln� na pretecen�. Pokud byste - se toho ob�vali, pouzijte typ SERIAL8. - - CTID se pouz�v� k identifikaci konkr�tn�ho fyzick�ho r�dku. CTID se - men� pokud je r�dek modifikov�n nebo znovu nacten. Pouz�vaj� ho indexy - jako adresaci fyzick�ch r�dku. - - 4.13) Co znamen� chybov� hl�sen� "ERROR: Memory exhausted in - AllocSetAlloc()"? - - Pravdepodobne jste vycerpal dostupnou virtu�ln� pamet, nebo tvuj - kernel m� pr�lis n�zk� limity u urcit�ch zdroju. Pred startem - PostgreSQL vyzkousejte: -ulimit -d 262144 -limit datasize 256m - - Mozn�, ze se projde pouze jeden pr�kaz - z�lez� to na vasem shellu. - Mel by zvednout limity datov�ch segmentu vasich procesu na dostatecne - velkou hodnotu a snad umoznit dokoncen� dotazu. Zmena limitu se bude - aplikovat pouze na aktu�ln� proces a na vsechny nove vytvoren� - procesy. Jestlize m�te probl�m s SQL klientem, protoze v�m server - vr�til pr�lis dat, zkuste to pred startem klienta. - - 4.14) Jak zjist�m, kterou verzi PostgreSQL pouz�v�m? - - V psql napiste: -SELECT version(); - - 4.15) Jak vytvorit sloupec, kter� bude implicitne obsahovat aktu�ln� cas? - - Pouzijte CURRENT_TIMESTAMP: -CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); - - 4.16) Jak prov�st vnejs� spojen� (outer join)? - - PostgreSQL podporuje standardn� SQL syntaxi pro vnejs� spojen�. Zde - jsou dva pr�klady: -SELECT * -FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col); - - nebo -SELECT * -FROM t1 LEFT OUTER JOIN t2 USING (col); - - Tyto identick� dotazy spoj� sloupec t1.col k sloupci t2.col, a jeste - vr�t� vsechny nesp�rovan� r�dky t2 (ty, kter� nedohled� v t2). RIGHT - JOIN by pripojil vsechny nesp�rovan� r�dky z t2. FULL JOIN vr�t� - vsechny sp�rovan� r�dky i vsechny zb�vaj�c� r�dky z obou tabulek. - Kl�cov� slovo OUTER je voliteln�. Bezn� operace JOIN se tak� oznacuje - jako vnitrn� spojen�. - - 4.17) Jak prov�st dotaz napr�c nekolika datab�zemi? - - Neexistuje z�dn� zpusob, jak se v dotazu odkazovat na tabulky z jin� - nez aktu�ln� datab�ze. A to protoze m� syst�mov� tabulky ulozen� - nez�visle v kazd� datab�zi a nen� tak �plne zrejm�, jak by se dotaz - proveden� napr�c datab�zemi mel chovat. - - Jeden z doplnku dblink umoznuje dotaz nad nekolika tabulkami pomoc� - funkc�. Druh� zpusob je simult�ln� pripojen� klienta ke vsem - relevantn�m datab�z�m a sloucen� v�sledku na strane klienta. - - 4.18) Muze funkce vr�tit v�ce r�dku nebo sloupcu? - - Jde to jednoduse pomoc� set-returning funkce. V�ce na - http://www.postgresql.org/docs/techdocs.17. - - 4.19) Co je pr�cinou chyby "relation with OID xxxxx does not exist"? - - Nechten�m vedlejs�m efektem kesov�n� SQL dotazu v PL/pgSQL funkci je - probl�m s neplatn�mi odkazy na docasn� tabulky, kter� byly od prvn�ho - spusten� funkce zruseny a znovu vytvoreny pred dals�m spusten�m - PL/pgSQL funkce. Resen�m je pouz�t pr�kaz EXECUTE a to proto, ze - prov�dec� pl�n SQL pr�kazu spousten�ho pr�kazem EXECUTE se vytv�r� - pokazd� znovu (neukl�d� se do cache). - - Tento probl�m by se nemel vyskytovat u PostgreSQL verze 8.3 a vyss�ch - verz�ch. - - 4.20) Jak� jsou moznosti replikace datab�z�? - - Replikaci datab�ze umoznuje nekolik technoligi�. Kazd� m� urcit� - v�hody a nev�hody. - - Master/Slave replikaci podporuje jeden hlavn� server, kter� prij�m� - pozadavky na z�pis a cten�, a nekolik podr�zen�ch serveru, kter� - umoznuj� pouze cten� (SELECT). Nejrozs�renejs�m volne dostupn�m - resen�m tohoto typu je Slony-I. - - Replikace typu Multi-master podporuje existenci nekolika serveru s - povolen�m z�pisem na v�ce replikovan�ch serverech. Toto resen� zvysuje - z�tez serveru, protoze je nutn� synchronizace serveru. - Nejrozs�renejs�m volne dostupn�m resen�m je PGCluster. - - Jeste existuje nekolik komercn�ch a hardware resen� replikac� - podporuj�c�ch ruzn� modely replikace. - - 4.21) Proc v dotazu nejsou rozpozn�ny n�zvy m�ch tabulek nebo funkc�? Proc - jsou velk� p�smena v n�zvech automaticky prevedena na mal� p�smena? - - Nejcastejs�m duvodem nerozpozn�n� n�zvu objektu bylo pouzit� vlozen� - n�zvu sloupce nebo tabulky mezi uvozovky pri zakl�d�n� tabulky. Pokud - se n�zev zap�se mezi uvozovky, pak je case sensitive, a v dusledku - toho je nutn� n�zvy techto sloupcu nebo tabulek v SQL pr�kazech tak� - vkl�dat mezi uvozovky (pokud obsahuj� velk� p�smena). Nekter� - programy, jako je napr�klad pgAdmin, automaticky pouz�vaj� uvozovky. - Takze pokud chcete, aby syst�m identifikoval identifik�tor, mus�te: - * nepouz�vat uvozovky v pr�kazu CREATE TABLE - * v identifik�toru pouz�t pouze mal� p�smena - * v dotazech vkl�dat identifik�tory do uvozovek diff --git a/doc/FAQ_farsi b/doc/FAQ_farsi deleted file mode 100644 index 95b28bb9b6..0000000000 --- a/doc/FAQ_farsi +++ /dev/null @@ -1,1256 +0,0 @@ -PostgreSQL FAQسوالاتي كه اغلب در مورد PostgreSQL‌ -پرسيده مي شوند -تاريخ آخرين Ø§ØµÙ„Ø§Ø Ø§ÙŠÙ† ÙØ§ÙŠÙ„: 28 شهریور 1383 هجری -شمسی -نگهدارنده اصلي ÙØ§ÙŠÙ„ (زبان انگليسي)در ØØ§Ù„ -ØØ§Ø¶Ø± : Bruce Momjian pgman@candle.pha.pa.us -نگهدارنده ÙØ§ÙŠÙ„ به زبان ÙØ§Ø±Ø³ÙŠ: m.taghizadeh@imenafzar.net - Ù…ØÙ…ود تقي‌زاده مهرجردی - -آخرين نسخه اين ÙØ§ÙŠÙ„ را مي‌توانيد از اين -آدرس بگيريد http://www.PostgreSQL.org/docs/faqs/FAQ.html -سوالاتي كه در مورد يك سکوی(Ù¾Ù„ØªÙØ±Ù…) خاص است در -اين آدرس جواب داده شده اند -http://www.PostgreSQL.org/docs/index.html - - - -سوالات عمومي -1.1) PostgreSQL چيست Ùˆ چگونه بايد آن را ØªÙ„ÙØ¸ كرد؟ -1.2) قانون كپي رايت‌ (ØÙ‚وق معنوي) در مورد -PostgreSQL به Ú†Ù‡ صورت است؟ -1.3) PostgreSQL‌ روي Ú†Ù‡ نوع يونيكسهايي اجرا -مي‌شود؟ -1.4) روي Ú†Ù‡ Ù…ØÙŠØ·Ù‡Ø§ÙŠ ØºÙŠØ± يونيكسي مي‌توان آن را -اجرا كرد؟ -1.5) PostgreSQL را از كجا مي‌توانم بگيرم؟ -1.6) از كجا خدمات پشتيباني بگيرم؟ -1.7) آخرين نسخه اعلام شده چيست؟ -1.8) Ú†Ù‡ مستندات Ùˆ راهنمائيهايي وجود دارند؟ -1.9) چگونه مي‌توانم ازاشكالات شناخته شده Ùˆ يا -امكاناتي كه در اين پايگاه داده وجود ندارد -مطلع شوم؟ -1.10) چگونه مي‌توانم زبان SQL را ياد بگيرم؟ -1.11) آيا PostgreSQL مشكل Y2K‌ دارد يا خير؟ -1.12) چگونه مي‌توانم به تيم برنامه نويس PostgreSQL -ملØÙ‚ شوم؟ -1.13) چگونه مي‌توانم يك اشكال را به گروه -برنامه نويس اعلام كنم؟ -1.14) وضعيت PostgreSQL‌ در مقايسه با ساير DBMSها به -Ú†Ù‡ صورت است؟ -1.15) من چگونه مي‌توانم از نظر مالي به PostgreSQL -كمك كنم؟ - -سوالات مربوط به Ø§Ø³ØªÙØ§Ø¯Ù‡ از پايگاه داده -2.1) آيا هيچ درايور ODBC‌ براي PostgreSQL وجود دارد؟ -2.2) Ú†Ù‡ ابزارهايي براي Ø§Ø³ØªÙØ§Ø¯Ù‡ از PostgreSQL‌ با -ØµÙØØ§Øª وب وجود دارد؟ -2.3) آيا PostgreSQL‌ يك واسط كاربري گراÙيكي دارد؟ -2.4) با Ú†Ù‡ زبانهاي برنامه‌نويسي مي‌توان با -PostgreSQL‌ ارتباط برقرار كرد؟ - -سوالات مربوط به راهبري -3.1) چگونه مي‌توانم PostgreSQL‌ را در شاخه‌اي غير -از /usr/local/pgsql/ نصب كنم؟ -3.2) چرا موقعي كه من برنامه postmaster‌ را اجرا مي -كنم پيام Bad system call‌ Ùˆ يا core dump ‌مي‌گيرم؟ -3.3) چرا موقعي كه من سعي مي‌كنم برنامه postmaster‌ -را اجرا كنم خطاي IpcMemoryCreate مي‌گيرم؟ -3.4) چرا موقعي كه من سعي مي‌كنم برنامه postmaster‌ -را اجرا كنم خطاي IpcSemaphoreCreate مي‌گيرم؟ -3.5) چگونه مي‌توانم اتصالات ساير ماشينها را -كنترل كنم؟ -3.6) براي كارايي بالاتر Ùˆ بهتر پايگاه داده من -Ú†Ù‡ تنظيماتي را بايد انجام دهم؟ -3.7) Ú†Ù‡ امكاناتي براي پيدا كردن اشكال‌ وجود -دارد؟ -3.8) چرا موقعي كه من مي‌خواهم به پايگاه داده -وصل شوم پيام "Sorry, too many clients" ‌مي‌گيرم؟ -3.9) در شاخه pgsql_tmp Ú†Ù‡ چيزي قرار دارد؟ -3.10) چرا براي به روز كردن نسخه پايگاه داده من -بايد كل داده ها را dump‌ Ùˆ مجدداً restore كنم؟ -3.11) از Ú†Ù‡ سخت Ø§ÙØ²Ø§Ø±ÙŠ Ø¨Ø§ÙŠØ¯ Ø§Ø³ØªÙØ§Ø¯Ù‡ كنم؟ - -سوالات عملياتي -4.1) ØªÙØ§ÙˆØª بين binary cursors Ùˆ Normal cursors چيست؟ -4.2) من چگونه مي‌توانم Ùقط روي چند ردي٠اول يا -يك ردي٠تصادÙÙŠ درخواست SELECT‌ بزنم؟ -4.3) من چگونه مي‌توانم ليستي از جداول يا ساير -چيزهايي كه در psql‌ وجود دارد را ببينم؟ -4.4) چگونه يك ستون جدول را ØØ°Ù مي‌كنيد؟ چگونه -نوع داده آن را عوض كنيم؟ -4.5) ØØ¯Ø§ÙƒØ«Ø± اندازه يك Ø±Ø¯ÙŠÙØŒâ€Œ جدول Ùˆ خود -پايگاه داده چقدر است؟ -4.6) چقدر ÙØ¶Ø§ÙŠ Ø¯ÙŠØ³Ùƒ سخت براي ذخيره كردن -داده‌‌هاي يك ÙØ§ÙŠÙ„ متني مورد نياز است؟ -4.7) چگونه مي‌توانم بÙهمم كه Ú†Ù‡ كاربران،‌ -پايگاه داده،‌ نمايه Ùˆ جداولي در سيستم تعري٠-شده است؟ -4.8) چرا درخواستهاي من كند اجرا مي‌شوند يا -چرا از نمايه ها Ø§Ø³ØªÙØ§Ø¯Ù‡ نمي‌كنند؟ -4.9) چگونه مي‌توانم Ù†ØÙˆÙ‡ بررسي درخواست را -توسط بهينه‌ساز درخواستها مشاهده كنم؟ -4.10) نمايه R-tree‌ چيست؟ -4.11) بهينه ساز تكويني درخواست چيست؟ (Genetic Query -Optimizer) -4.12) چگونه از عبارات منظم براي جستجو Ø§Ø³ØªÙØ§Ø¯Ù‡ -كنم؟ چگونه جستجويي انجام دهم كه ØØ³Ø§Ø³ به متن -نباشد؟ چگونه براي يك جستجوي غير ØØ³Ø§Ø³ به متن -از نمايه Ø§Ø³ØªÙØ§Ø¯Ù‡ كنم؟ -4.13) چگونه مي‌توانم در يك درخواست تشخيص دهم -كه يك Ùيلد NULL‌ است؟ -4.14) ØªÙØ§ÙˆØª بين گونه‌هاي مختل٠character چيست؟ -4.15.1) چگونه مي‌توانم يك Ùيلد سريال يا -Ø§ÙØ²Ø§ÙŠØ´ÙŠ Ø§ÙŠØ¬Ø§Ø¯ كنم؟ -4.15.2) چگونه مي‌توانم مقدار يك درج سريالي را -بدانم؟ -4.15.3) آیا توابع ()nextval Ùˆ ()currval منجر به ایجاد -شرایط race برای سایر کاربران Ù…ÛŒ شوند؟ -4.15.4) چرا اعداد سریالی مربوط به تراکنشهای abort -شده مجدداً Ø§Ø³ØªÙØ§Ø¯Ù‡ نمی شود؟ چرا بین اعداد -سریالی یک ÙØ§ØµÙ„Ù‡ خالی ایجاد Ù…ÛŒ شود؟ -4.16) OID Ùˆ TID Ú†Ù‡ هستند؟ -4.17) معني بعضي از ترمها Ùˆ كلماتي كه در PostgreSQL‌ -Ø§Ø³ØªÙØ§Ø¯Ù‡ مي‌شود چيست؟ -4.18) چرا من خطاي "ERROR: Memory exhausted in AllocSetAlloc" -مي‌گيرم؟ -4.19) از كجا تشخيص دهم كه ويرايش يا نسخه -PostgreSQLيي كه من Ø§Ø³ØªÙØ§Ø¯Ù‡ مي‌كنم چيست؟ -4.20) چرا در ØÛŒÙ† اجرای عملیات روی large-objectها -خطای "invalid large obj descriptor"به وجود Ù…ÛŒ آید؟ -4.21) چگونه يك ستون ايجاد كنم كه مقدار زمان -جاري را به عنوان مقدار Ù¾ÙŠØ´â€ŒÙØ±Ø¶ داشته باشد؟ -4.22) چرا زير درخواستهايي كه از IN Ø§Ø³ØªÙØ§Ø¯Ù‡ -مي‌كنند كند هستند؟ -4.23) چگونه مي‌توانم يك Ø§Ù„ØØ§Ù‚ خارجي (outer join) -انجام دهم؟ -4.24) چگونه مي‌توان درخواستهايي از چند پايگاه -داده توليد كرد؟ -4.25) چگونه خروجي يك تابع مي‌تواند چند ردي٠-يا ستون باشد؟ -4.26) در توابع PL/PgSQL چرا نمي‌توان با اطمينان -جداول موقت را ايجاد يا ØØ°Ù كرد؟ -4.27) Ú†Ù‡ گزينه‌هايي براي تكرار (replication) وجود -دارد؟ -4.28) Ú†Ù‡ گزينه‌هايي براي رمزنگاري وجود دارد؟ - -توسعه PostgreSQL -5.1) من يك تابع نوشته‌ام. چگونه آن را در psql -اجرا كنم؟ چرا با اجراي آن core dump مي‌گيرم؟ -5.2) چگونه مي‌توانم در توليد نوع‌ها Ùˆ توابع -جديد Ùˆ جالب براي PostgreSQL‌ همكاري Ùˆ مشاركت -داشته باشم. -5.3) چگونه مي‌توانم يك تابع به زبان C بنويسم -كه خروجي آن يك ‌tuple (چند تايي) باشد؟ -5.4) من يك ÙØ§ÙŠÙ„ منبع را عوض كرده ام چرا در -عمليات كامپيل مجدد آن تغيير ديده نمي‌شود؟ - - - - -سوالات عمومي -1.1) PostgreSQL چيست Ùˆ چگونه آن را بايد ØªÙ„ÙØ¸ كرد؟ -PostgreSQL به صورت Post-Gres-Q-L‌ ØªÙ„ÙØ¸ مي‌شود. يك ÙØ§ÙŠÙ„ -صوتي در آدرس http://www.postfresql.org/postgresql.mp3‌ براي -كساني كه مايلند ØªÙ„ÙØ¸ صØÙŠØ را بشنوند وجود -دارد. -PostgreSQL از روي سيستم مديريت پايگاه داده POSTGRES -توسعه داده شده است (هنوز هم بعضي مواقع براي -سادگي به آن Postgres Ú¯ÙØªÙ‡ مي‌شود) كه يك نمونه -تØÙ‚يقاتي از پايگاه داده‌هاي نسل بعد است. -PostgreSQL همان الگوي داده قوي Ùˆ انواع داده را -ØÙظ كرده است ولي زبان PostQuel را با يك -زيرمجموعه Ù¾ÙŠØ´Ø±ÙØªÙ‡ از SQL جايگزين كرده است. -PostgreSQL متن باز بوده Ùˆ متن كامل آن در دسترس -است. -PostgreSQL توسط يك تيم برنامه‌نويس كه همگي در -گروه پست الكترونيك برنامه‌نويسان PostgreSQL -عضو هستند، انجام مي‌شود. هماهنگ كننده اصلي -در ØØ§Ù„ ØØ§Ø¶Ø± Marc G. Fournier‌ به آدرس scrappy@PostgreSQL.org -مي‌باشد. (براي ديدن Ù†ØÙˆÙ‡ ملØÙ‚ شدن به اين تيم -قسمت 1.6 را ببينيد). اين تيم در ØØ§Ø¶Ø± مسئوليت -تمام مسائل مربوط به برنامه‌نويسي PostgreSQL را -بر عهده دارد. اين يك پروژه گروهي است Ùˆ ØªØØª -كنترل هيچ شركتي نيست. براي اطلاعات بيشتر در -مورد اين تيم به آدرس -http://www.PostgreSQL.org/docs/faqs/FAQ_DEV.html مراجعه كنيد. -اولين نسخه PostgreSQL‌ توسط Andrew Yu and Jolly Chen به -وجود آمد. Ø§ÙØ±Ø§Ø¯ بسياري در توسعه Ùˆ Ø±ÙØ¹ اشكال Ùˆ -انتقال آن شركت كرده‌اند. متن اصلي Postgres كه -PostgreSQL از روي آن نوشته شده است، توسط تعداد -زيادي دانشجوي كارشناسي ارشدو دانشجوي -كارشناسي Ùˆ تيم برنامه‌نويسي كه ØªØØª نظر -Ù¾Ø±ÙˆÙØ³ÙˆØ± Michael Stonebrake در دانشگاه -Ø¨Ø±ÙƒÙ„ÙŠØŒâ€ŒÙƒØ§Ù„ÙŠÙØ±Ù†ÙŠØ§ كار مي‌كرده‌اند نوشته -شده است. -نام اصلي نرم Ø§ÙØ²Ø§Ø± در دانشگاه بركلي Postgres‌ -بود. در سال 1995 بعد از اضاÙÙ‡ شدن SQL نام آن به -Postgres95 تغيير داده شد. در سال 1996 نام آن به -PostgreSQL تغيير داده شد. -1.2) قوانين كپي رايت در مورد PostgreSQL به Ú†Ù‡ صورت -است؟ -PostgreSQL ØªØØª قانون كپي رايت زير قرار دارد: -PostgreSQL Data Base Management System -Portions copyright (c) 1996-2004, PostgreSQL Global Development Group Portions -Copyright (c) 1994-6 Regents of the University of California -Permission to use, copy, modify, and distribute this software and its -documentation for any purpose, without fee, and without a written agreement is -hereby granted, provided that the above copyright notice and this paragraph and -the following two paragraphs appear in all copies. -IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST -PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF -THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A -PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND -THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, -UPDATES, ENHANCEMENTS, OR MODIFICATIONS. -قانون بالا ليسانس BSD كه يك ليسانس كلاسيك -براي متن‌هاي باز است مي‌باشد. هيچ Ù…ØØ¯ÙˆØ¯ÙŠØªÙŠ -در مورد Ù†ØÙˆÙ‡ Ø§Ø³ØªÙØ§Ø¯Ù‡ از متن در آن ديده -نمي‌شود. ما آن را دوست داريم Ùˆ هيچ قصدي براي -تغيير آن نداريم. -1.3) PostgreSQL‌ روي Ú†Ù‡ نوع يونيكسهايي اجرا -مي‌شود؟ -در ØØ§Ù„ت كلي PostgreSQL روي هر Ù¾Ù„ØªÙØ±Ù… (سكوي) سازگار -با يونيكس اجرا مي‌شود. ليست Ù¾Ù„ØªÙØ±Ù…هايي كه -تاكنون PostgreSQL‌ روي آنها نصب Ùˆ تست شده است -درقسمت دستورالعملهاي نصب آمده است. -1.4) روي Ú†Ù‡ Ù…ØÙŠØ·Ù‡Ø§ÙŠ ØºÙŠØ± يونيكسي مي‌توان آن را -اجرا كرد؟ -Client -مي‌توان psql, كتابخانه libpq Ùˆ ساير واسطها Ùˆ -برنامه‌هاي كاربردي را طوري كامپيل كرد كه -روي Ù…ØÙŠØ·Ù‡Ø§ÙŠ ÙˆÙŠÙ†Ø¯ÙˆØ² نيز اجرا شوند. در اين -ØØ§Ù„ت Client روي ويندوز اجرا مي‌شود Ùˆ از طربق -شبكه Ùˆ پروتكل TCP/IP با يك سرور كه روي يك Ù¾Ù„ØªÙØ±Ù… -لينوكس در ØØ§Ù„ اجراست ارتباط برقرار -مي‌كند.يك ÙØ§ÙŠÙ„ win32.mak همراه با كدهاي PostgreSQL -وجود دارد كه براي كامپيل كردن كتابخانه libpq Ùˆ -برنامه psql مي‌باشد. P‌ostgreSQL‌ همچنين امكان -ارتباط به صورت ODBC‌ را نيز دارد. -Server -با Ø§Ø³ØªÙØ§Ø¯Ù‡ از Cygwin‌ Ùˆ كتابخانه Cygnus مي‌توان -پايگاه داده را روي ويندوز NT Ùˆ يا Win2K اجرا -كرد.براي ديدن اطلاعات بيشتر ÙØ§ÙŠÙ„ pgsql/doc/FAQ_MSWIN -‌را كه بهمراه توزبع‌هاي PostgreSQL آمده است -ببينيد Ùˆ يا اينكه به اين ØµÙØÙ‡ -http://www.PostgreSQL.org/docs/faqs/text/FAQ_MSWIN مراجعه كنيد. -در ØØ§Ù„ ØØ§Ø¶Ø± يك عمليات انتقال PostgreSQL به روي -سكوهاي Win NT/2000/XP در جريان است. براي ديدن وضعيت -اين پروژه به سايت‌هاي -http://momjian.postgresql.org/main/writings/pgsql/win32.htm Ùˆ -http://techdocs.postgresql.org/guides/Windows مراجعه كنيد. -همچنين يك عمليات انتقال بر روي Novell Netware 6 نيز -در ØØ§Ù„ انجام است كه در سايت http://forge.novell.com -مي‌توانيد اطلاعات بيشتر را ببينيد. -1.5) PostgreSQL را از كجا مي‌توانم بگيرم؟ -PostgreSQL‌ را از سايت اصلي آن ftp://ftp.PostgreSQL.org/pub -مي‌توانيد بگيريد. در ØµÙØÙ‡ اصلي سايت ليست -ساير آدرسهايي كه مي‌توانيد PostgreSQL‌ را از -آنها بگيريد آمده است. -1.6) از كجا خدمات پشتيباني بگيرم؟ -گروه پستي اصلي pgsql-general@PostgreSQL.org مي‌باشد. اين -گروه براي Ø¨ØØ« در مورد موضوعات مختل٠در زمينه -PostgreSQL است. براي عضو شدن در اين گروه پستي يك -نامه الكترونيكي به آدرس گروه با Ù…ØØªÙˆÙŠØ§ØªÛŒ كه -در ادامه آمده است ارسال كنيد. در قسمت Subject -چيزي ننويسيد. - subscribe - end -آدرس گروه: pgsql-general-request@PostgreSQL.org -همچنين يك گروه پستي هم به صورت ارسال چكيده -پيامها وجود دارد. براي عضو شدن در اين گروه يك -نامه با Ù…ØØªÙˆÙŠØ§Øª زير به این آدرس ارسال كنيد. -pgsql-general-digest-request@PostgreSQL.org - subscribe - end -در اين گروه هر موقع ØØ¬Ù… نامه‌ها به 30 -كيلوبايت رسيد براي تمام اعضاء ارسال مي‌شود. -گروه پستي بررسي Ø§ÙØ´ÙƒØ§Ù„ات هم وجود دارد. براي -عضو شدن در اين گروه يك نامه با Ù…ØØªÙˆÙŠØ§Øª زير به -pgsql-bugs-request@PostgreSQL.org ارسال كنيد. - subscribe - end -گروه پستي مخصوص توسعه دهندگان -(برنامه‌نويسان) نيز وجوددارد. براي عضويت در -اين گروه يك نامه به آدرس زير با Ù…ØØªÙˆÙŠØ§Øª مشخص -شده ارسال كنيد. pgsql-hackers-request@PostgreSQL.org - subscribe - end -گروههاي پستي ديگري نيز در زمينه PostgreSQL‌ وجود -دارد كه مي‌توانيد در سايت http://www.postgresql.org -ببينيد. -همچنين يك كانال IRC روي Freenode Ùˆ EFNet بنام PostgreSQL# -وجود دارد. شما مي‌توانيد از ÙØ±Ù…ان يونيكسي irc --c '#PostgreSQL' "$USER" irc.phoenix.net. يا irc -c '#PostgreSQL' "$USER" -irc.freenode.net Ø§Ø³ØªÙØ§Ø¯Ù‡ كنيد. -ليست شركتهايي كه از طريق آنها مي‌توانيد -خدمات پشتيباني تجاري در زمينه PostgreSQL Ø¯Ø±ÙŠØ§ÙØª -كنيد در اين آدرس http://techdocs.postgresql.org/companies.php -موجود است. -1.7) آخرين نسخه اعلام شده چيست؟ -آخرين نسخه PostgreSQL‌ كه وجود دارد 7.4.3 است. -هد٠ما آن است كه هر 6 ماه تا 8 ماه يك نسخه جديد -ارائه شود. -1.8) Ú†Ù‡ مستندات Ùˆ راهنمائيهايي وجود دارند؟ -چندين كتابچه Ùˆ ØµÙØØ§Øª راهنما Ùˆ مثالهاي كوچك -همراه با متن اصلي PostgreSQL‌ در شاخه doc وجود -دارد. براي ديدن ØµÙØØ§Øª راهنما مي‌توانيد به -سايت http://www.PostgreSQL.org/docs نيز مراجعه نماييد. -دو كتاب در زمينه PostgreSQL‌ در آدرس‌هاي -http://www.PostgreSQL.org/docs/awbook.htm Ùˆ http://www.commandprompt.com/ppbook -وجود دارد. ليستي از كتابهايي كه قابل خريد -است در آدرس http://techdocs.PostgreSQL.org/techdocs/bookreviews.php -وجود دارد. همچنين ليستي از مقالات Ùني در -مورد PostgreSQL در آدرس http://techdocs.PostgreSQL.org وجود -دارد. -برنامه psql يك دستور d\ دارد كه اطلاعاتي در -مورد انواع داده‌هاي قابل تعري٠و عملگر‌ها -Ùˆ توابع Ùˆ ... به ما نشان مي‌دهد. در سايت اصلي -ما اطلاعات بيشتري را مي‌توانيد پيدا كنيد. -1.9) چگونه مي‌توانم ازاشكالات شناخته شده Ùˆ يا -امكاناتي كه در اين پايگاه داده وجود ندارد -مطلع شوم؟ -PostgreSQL يك زير مجموعه Ù¾ÙŠØ´Ø±ÙØªÙ‡ از SQL-92 را -پشتيباني مي‌كند. در ليست TODO Ø§ÙØ´ÙƒØ§Ù„ات -شناخته شده يا امكاناتي كه وجود ندارد Ùˆ يا -برنامه‌‌هاي آينده آمده است. -1.10) چگونه مي‌توانم زبان SQL را ياد بگيرم؟ -كتاب PostgreSQL در آدرس SQL http://www.PostgreSQL.org/docs/awbook.html -‌را آموزش مي‌دهد. همچنين يك كتاب در آدرس -http://www.commandprompt.com/ppbook وجود دارد. يك راهنماي -خيلي خوب هم در سايت‌هاي -http://www.intermedia.net/support/sql/sqltut.shtm Ùˆ -http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM Ùˆ -http://sqlcourse.com در مورد SQL وجود دارد. -كتاب ديگري كه مي‌توان براي يادگيري SQL از آن -Ø§Ø³ØªÙØ§Ø¯Ù‡ كرد كتاب "SQL را در 21 روز ياد بگيريد،‌ -ويرايش دوم" در سايت -http://members.tripod.com/er4ebus/sql/index.htm مي‌باشد. -تعداد زيادي از كاربران كتاب The Practical SQL را -ØªØ±Ø¬ÙŠØ Ù…ÙŠâ€ŒØ¯Ù‡Ù†Ø¯. كتاب ديگر The Complete Refrence SQL -انتشارات McGraw-Hill مي‌باشد. -1.11) آيا PostgreSQL مشكل Y2K‌ دارد يا خير؟ -خير،‌PostgreSQL‌ با تاريخ‌هاي قبل Ùˆ بعد از 2000 -مشكلي ندارد. -1.12) چگونه مي‌توانم به تيم برنامه نويس PostgreSQL -ملØÙ‚ شوم؟ -ابتدا،‌آخرين سورس را دونلود كرده Ùˆ مستندات -مربوط به برنامه‌نويسي PostgreSQL را در سايت -مطالعه كنيد. سپس به گروههاي پستي ‌ pgsql-patches Ùˆ -pgsql-hackers عضو شويد. در مرØÙ„Ù‡ آخر وصله‌هاي با -كيÙيت بالا را به pgsql-patches ارسال كنيد. -تعداد زيادي از برنامه‌نويسان وجود دارند كه -امتياز انجام تغييرات در cvs‌ را دارند. هر -كدام از آنها تعداد زيادي وصله‌‌ با كيÙيت -بالا به گروه ارسال كرده‌اند كه اعتماد -گردانندگان PostgreSQL را به دست آورده‌اند. -1.13) چگونه مي‌توانم يك Ø§ÙØ´ÙƒØ§Ù„ را به گروه -برنامه نويس اعلام كنم؟ -Ù„Ø·ÙØ§Ù‹ ØµÙØÙ‡ مربوط به Ø§ÙØ´ÙƒØ§Ù„ات PostgreSQL را در -سايت http://www.PostgreSQL.org/bugs/bugs.php مشاهده‌ كنيد. در -اين سايت Ù†ØÙˆÙ‡ گزارش Ùˆ ارسال يك اشكال ØªÙˆØ¶ÙŠØ -داده شده است. - همچنين براي ديدن نسخه‌هاي جديدتر PostgreSQL Ùˆ -يا وجود يك وصله جديد از سايت ftp://ftp.PostgreSQL.org/pub -بازديد كنيد. -1.14) وضعيت PostgreSQL‌ در مقايسه با ساير DBMSها به -Ú†Ù‡ صورت است؟ -راههاي مختلÙÙŠ براي اندازه‌گيري Ùˆ مقايسه -Ù†Ø±Ù…â€ŒØ§ÙØ²Ø§Ø±Ù‡Ø§ وجود دارد كه عبارتند از -امكانات، كارايي، قابليت اعتماد، پشتيباني Ùˆ -قيمت - امكانات - PostgreSQL بيشتر امكانات موجود در سيستم‌هاي - پايگاه داده تجاري بزرگ نظير transactions, subselets, - triggers, views, foreign key referential integrity Ùˆ sophisticated - locking‌ را دارد. در PostgreSQL‌‌ امكاناتي وجود - دارد كه پايگاههاي داده ديگر آن را ندارند - نظير user-defined types‌و Inheritance‌و rules‌و multi-version - concurrency control - - كارايي - كارايي PostgreSQL در ØØ¯ بقيه سيستم‌هاي - تجاري Ùˆ متن باز است. در بعضي موارد سريعتر Ùˆ - در بعضي موارد از آنها كندتر است. در مقايسه - با MySQL براي كاربران بيشتر Ùˆ درخواست‌هاي - پيچيده Ùˆ بار زياد خواندن/نوشتن سريعتر است. - در درخواست‌هاي ساده SELECT‌ از MySQL كندتر است. - البته MySQL خيلي از امكانات PostgreSQL كه در بالا - به آن اشاره شد را ندارد. هد٠اصلي ما امكانات - Ùˆ قابليت اعتماد بالاست در ضمن آنكه تلاش - مي‌كنيم تا كارايي آن نيز بهبود يابد. در - آدرس http://openacs.org/philosophy/why-not-mysql.html يك مقايسه - جالب بين MySQL Ùˆ PostgreSQL وجود دارد. از طر٠ديگر - MySQL‌ يك شركت است كه Ù…ØØµÙˆÙ„ خود را به صورت متن - باز ارائه مي‌كند ولي براي Ù†Ø±Ù…â€ŒØ§ÙØ²Ø§Ø± غير - متن باز خود Ø§ØØªÙŠØ§Ø¬ به ليسانس تجاري دارد بر - خلا٠PostgreSQL كه يك گروه كاملاً متن باز هستند. - - قابليت اطمينان - ما Ùكر مي‌كنيم كه يك سيستم پايگاه - داده‌اي كه مطمئن نباشد ارزشي ندارد. ما - تمام تلاشمان را براي ارائه كدهاي پايداري - كه به خوبي تست شده باشند Ùˆ كمترين Ø§ÙØ´ÙƒØ§Ù„ات - را داشته باشند مي‌كنيم. هر نسخه جديدي كه - ارائه مي‌شود ØØ¯Ø§Ù‚Ù„ يك ماه را در مرØÙ„Ù‡ تست - بتا مي‌گذراند. ما بر اين باور هستيم كه - قابليت اطمينان PostgreSQL‌ در مقايسه با ساير - سيستم‌هاي پايگاه داده قابل توجه است Ùˆ - نسخه‌هايي كه تاكنون ارائه شده است نشان - مي‌دهد كه ما توانايي ارائه يك سيستم قوي Ùˆ - Ù…ØÙƒÙ… Ùˆ مطمئن را كه آماده بهره‌برداري است - داريم. - پشتيباني - گروههاي پستي ما امكان ارتباط Ùˆ تماس به - گروه بزرگي از برنامه نويسان Ùˆ كاربران را - مي‌دهد كه مي‌توانند در ØÙ„ مشكلات به - ديگران كمك كنند. دسترسي مستقيم به - برنامه‌نويسان Ùˆ گروههاي كاربران Ùˆ - راهنماها Ùˆ كداصلي باعث مي‌شود كه - پشتيباني PostgreSQL نسبت به ساير پايگاههاي - داده به Ù†ØÙˆ بهتري انجام شود. همچنين امكان - ارائه خدمات پشتيباني به صورت تجاري نيز - وجود دارد. براي ديدن اطلاعات بيشتر به FAQ - section 1.6 مراجعه كنيد. - قيمت - هم براي Ø§Ø³ØªÙØ§Ø¯Ù‡ تجاري Ùˆ هم غير تجاري هيچ - هزينه‌اي نبايد پرداخت شود. هيچ Ù…ØØ¯ÙˆØ¯ÙŠØªÙŠ - براي انجام تغييرات در PostgreSQL توسط Ø§Ø³ØªÙØ§Ø¯Ù‡ - كنندگان وجود ندارد به جز مواردي كه در - ليسانس BSD به آن اشاره شده است. -1.15) من چگونه مي‌توانم از نظر مالي به PostgreSQL -كمك كنم؟ -PostgreSQL داراي يك ساختار تشكيلاتي درجه اول است -كه آن را مديون Marc Fournier‌ است كه اين ساختار را -ايجاد كرده است. -كيÙيت يك ساختار براي يك پروژه متن باز بسيار -اهميت دارد. يك ساختار خوب مي‌تواند مانع از -ØÙˆØ§Ø¯Ø«ÙŠ Ø´ÙˆØ¯ كه در ØØ±ÙƒØª روبه‌جلوي پروژه خللي -وارد مي‌كنند. -البته اين ساختار تشكيلاتي ارزان نيست. -هزينه‌هاي ثابت ماهانه Ùˆ روزمره براي -نگهداري Ùˆ ØÙظ اين ساختار مورد نياز است. اگر -شما يا شركت شما مايل است كه از نظر مالي به -اين ØØ±ÙƒØª كمك كند Ù„Ø·ÙØ§Ù‹ به سايت -http://store.pgsql.com/shopping مراجعه كرده Ùˆ كمك خود را -اهدا كنيد. -هر چند در ØµÙØÙ‡ اصلي عبارت PostgreSQL,Inc‌ ذكر شده -است ولي مشاركت عمدتاً براي پشتيباني از -پروژه PostgreSQL‌ مي باشد Ùˆ نه براي يك شركت مشخص. -اگر ØªØ±Ø¬ÙŠØ Ù…ÙŠâ€ŒØ¯Ù‡ÙŠØ¯ مي‌توانيد يك Ú†Ùƒ به آدرس -مشخص شده ارسال كنيد. -اگر يك Ø§Ø³ØªÙØ§Ø¯Ù‡ موÙÙ‚ از PostgreSQL سراغ داريد -Ù„Ø·ÙØ§Ù‹ آن را به سايت http://advocacy.postgresql.org گزارش -دهيد. - - - -سوالات مربوط به Ø§Ø³ØªÙØ§Ø¯Ù‡ از پايگاه داده -2.1) آيا هيچ درايور ODBC‌ براي PostgreSQL وجود دارد؟ -دو درايور ODBC بنامهاي psqlODBC‌ Ùˆ OpenLink براي -PostgreSQL‌ وجود دارد. -براي Ú¯Ø±ÙØªÙ† psqlODBC به سايت -http://gborg.postgresql.org/project/psqlodbc/projdisplay.php مراجعه -كنيد. -OpenLlink را از اين سايت http://www.openlinksw.com -مي‌توانيد بگيريد. اين درايور با -Ù†Ø±Ù…â€ŒØ§ÙØ²Ø§Ø±Ù‡Ø§ÙŠ Ù…Ø®ØªÙ„Ù ODBC كار مي‌كند بنابراين -شما قادر خواهيد بود با Ø§Ø³ØªÙØ§Ø¯Ù‡ از OpenLink روي -اكثر سكو‌هايي كه Ù†Ø±Ù…â€ŒØ§ÙØ²Ø§Ø±ODBC‌دارند بدون -مشكل به PostgreSQL نيز متصل شويد. -اين Ù…ØØµÙˆÙ„ به كساني كه Ø§ØØªÙŠØ§Ø¬ به خدمات -پشتيباني تجاري دارند ÙØ±ÙˆØ®ØªÙ‡ مي‌شود. ولي -نسخه آزاد اين Ù†Ø±Ù…â€ŒØ§ÙØ²Ø§Ø± هميشه در درسترس -مي‌باشد. براي كسب اطلاعات بيشتر سوالات خود -را به آدرس postgres95@openlink.co.uk ‌ارسال نماييد. -2.2) Ú†Ù‡ ابزارهايي براي Ø§Ø³ØªÙØ§Ø¯Ù‡ از PostgreSQL‌ با -ØµÙØØ§Øª وب وجود دارد؟ -در سايت http://www.webreview.com براي Ø§Ø³ØªÙØ§Ø¯Ù‡ از -PostgreSQL‌ در ØµÙØØ§Øª وب راهنماييهاي خوبي وجود -دارد. -براي تركيب Ùˆ Ø§Ø³ØªÙØ§Ø¯Ù‡ در ØµÙØØ§Øª وب زبان PHP‌ يك -واسط بسيار مناسب است. اطلاعات بيشتر راجع به -PHP‌در سايت http://www.php.net وجود دارد. -مثالهايي نيز با Ø§Ø³ØªÙØ§Ø¯Ù‡ از Perl‌ Ùˆ CGI.pm Ùˆ mod_perl -وجود دارد. -2.3) آيا PostgreSQL‌ يك واسط كاربري گراÙيكي دارد؟ -چند نرم Ø§ÙØ²Ø§Ø± گراÙيكي براي PostgreSQL‌ وجود دارد -كه شامل pgAccess درسايت http://www.pgaccess.org Ùˆ pgAdmin III در -سايت http://www.pgadmin.org Ùˆ RHDB Admin در سايت -http://sources.redhat.com/rhdb Ùˆ Rekall در سايت -http://www.thekompany.com/products/rekall مي‌باشد. همچنين يك -phpPgAdmin هم در سايت http://phppgadmin.sourceforge.net وجود -دارد كه يك واسط وبي براي مديريت PostgreSQL -مي‌باشد. -براي ديدن اطلاعات بيشتر راجع به -Ù†Ø±Ù…â€ŒØ§ÙØ²Ø§Ø±Ù‡Ø§ÙŠ Ú¯Ø±Ø§Ùيكي براي PostgreSQL به آدرس -http://techdocs.postgresql.org/guides/GUITools مراجعه كنيد. -2.4) با Ú†Ù‡ زبانهاي برنامه‌نويسي مي‌توان با -PostgreSQL‌ ارتباط برقرار كرد؟ -بيشتر زبانهاي برنامه‌نويسي مي‌توانند با -PostgreSQL‌ ارتباط برقرار كنند. به همراه سورس -PostgreSQL تعدادي از واسطهاي مورد نياز براي -ارتباط با پايگاه داده از طريق زبانهاي مختل٠-آمده است كه در زير ليست آنها را مشاهده -مي‌كنيد. - C (libpq) - Embedded C (ecpg) - Java (jdbc) - Python (PyGreSQL) - TCL (libpgtcl) -واسطهاي ديگر در سايت http://gborg.postgresql.org در قسمت -Drivers/Interfaces وجود دارد. - - - -سوالات مديريتي -3.1) چگونه مي‌توانم PostgreSQL‌ را در شاخه‌اي غير -از /usr/local/pgsql/ نصب كنم؟ -موقع اجراي دستور configure از گزينه prefix-- Ø§Ø³ØªÙØ§Ø¯Ù‡ -كنيد. -3.2) چرا موقعي كه من برنامه postmaster‌ را اجرا مي -كنم پيام Bad system call‌ Ùˆ يا core dump ‌مي‌گيرم؟ -به دلايل مختل٠ممكن است اين Ø§ØªÙØ§Ù‚ Ø¨ÙŠÙØªØ¯. اما -در قدم اول شما مطمئن شويد كه كه امكانات -اضاÙÙ‡ System V‌ در كرنل شما نصب شده باشد. PostgreSQL -براي اجرا شدن نياز به Ø§Ø³ØªÙØ§Ø¯Ù‡ از امكانات -ØØ§Ùظه مشترك Ùˆ سماÙورها دارد. -3.3) چرا موقعي كه من سعي مي‌كنم برنامه postmaster‌ -را اجرا كنم خطاي IpcMemoryCreate مي‌گيرم؟ -Ø§ØØªÙ…الاً‌ قسمت ايجاد ØØ§Ùظه مشترك در كرنل به -درستي تنظيم نشده است Ùˆ يا اينكه بايد ÙØ¶Ø§ÙŠ -ØØ§Ùظه اشتراكي در كرنل را زياد كرد. ميزان -دقيق ØØ§Ùظه مشترك مورد نياز بسته به معماري Ùˆ -Ù†ØÙˆÙ‡ Ø§Ø³ØªÙØ§Ø¯Ù‡ از Ø¨Ø§ÙØ±Ù‡Ø§ توسط برنامه postmaster -دارد. براي بيشتر سيستم‌ها كه با تنظيمات -Ù¾ÙŠØ´â€ŒÙØ±Ø¶ كار مي‌كنند مقدار اين ØØ§Ùظه ØØ¯ÙˆØ¯ 1 -مگابايت است. براي ديدن اطلاعات بيشتر راجع به -ØØ§Ùظه مشترك Ùˆ سماÙور به PostgreSQL Administrator's Guide -مراجعه كنيد. -3.4) چرا موقعي كه من سعي مي‌كنم برنامه postmaster‌ -را اجرا كنم خطاي IpcSemaphoreCreate مي‌گيرم؟ -اگر پيغام خطا (‌pcSemaphoreCreate: semget failed (No space left on -device باشد به اين معني است كه تعداد سماÙورهاي -تنظيم شده در كرنل كاÙÙŠ نيست. PostgreSQL‌ براي هر -ÙØ±Ø§ÙŠÙ†Ø¯ÙŠ ÙƒÙ‡ در backend اجرا مي‌شود به يك سماÙور -نياز دارد. يك راه ØÙ„ موقت براي اين مسئله آن -است كه postmaster را با اعمال Ù…ØØ¯ÙˆØ¯ÙŠØª روي تعداد -ÙØ±Ø§ÙŠÙ†Ø¯Ù‡Ø§ÙŠÙŠ ÙƒÙ‡ مي‌تواند ايجاد كند اجرا كنيم. -براي اينكار از گزينه N- Ùˆ يك عدد كمتر از 32 -Ø§Ø³ØªÙØ§Ø¯Ù‡ كنيد. راه ØÙ„ دائمي اين مشكل آن است كه -پارامترهاي SEMMNS, SEMMNI كرنل را Ø§ÙØ²Ø§ÙŠØ´ دهيم. -در زمان دسترسي خيلي زياد به پايگاه داده، ‌ -سماÙورهاي نامعتبر مي‌توانند باعث crash‌ كردن -سيستم شوند. -اگر پيغام خطا چيز ديگري باشد Ø§ØØªÙ…الاً به -دليل آن است كه كرنل از سماÙورها پشتيباني -نمي‌كند. براي ديدن اطلاعات بيشتر راهنماي -مديريتي PostgreSQL را مطالعه كنيد. -3.5) چگونه مي‌توانم اتصالات ساير ماشينها را -كنترل كنم؟ -به صورت پيش ÙØ±Ø¶ Ùقط از ماشيني كه PostgreSQL روي آن -در ØØ§Ù„ اجراست مي‌توان با Ø§Ø³ØªÙØ§Ø¯Ù‡ از -سوكت‌هاي يونيكسي به آن متصل شد. ساير -ماشين‌ها قادر نيستند به PostgreSQL متصل شوند مگر -آنكه گزينه tcp_sockets در ÙØ§ÙŠÙ„ postgresql.conf ÙØ¹Ø§Ù„ شده Ùˆ -همچنين با Ø§ØµÙ„Ø§Ø ÙØ§ÙŠÙ„ PGDATA/ph_hba.conf هويت‌شناسي -مبتني بر ميزبان نيز ÙØ¹Ø§Ù„ شود. با اين كار -مي‌توان اتصالات TCP/IP به PostgreSQL‌ ايجاد كرد. -3.6) براي كارايي بالاتر Ùˆ بهتر پايگاه داده من -Ú†Ù‡ تنظيماتي را بايد انجام دهم؟ -به طور ØØªÙ… Ø§Ø³ØªÙØ§Ø¯Ù‡ از انديس‌ها باعث بالا -Ø±ÙØªÙ† سرعت پاسخ‌گويي به درخواست‌ها خواهد -شد. دستور EXPLAIN ANALYZE به شما امكان ديدن Ù†ØÙˆÙ‡ -پردازش يك دستور توسط PostgreSQL را مي‌دهد. -اگر شما تعداد زيادي INSERT‌ داريد سعي كنيد -آنها را با قرار دادن در يك ÙØ§ÙŠÙ„ با دستور COPY‌ -اجرا كنيد. اين دستور به مراتب از INSERT سريعتر -است. ØØªÙŠâ€ŒØ§Ù„امكان سعي كنيد از تراكنشها -Ø§Ø³ØªÙØ§Ø¯Ù‡ نكنيد. تراكنشها مجموعه دستوراتي -هستند كه بيند BEGIN Ùˆ â€COMMIT مي‌آيند. اگر يك -دستور به صورت عادي اجرا شود PostgreSQL خود آن -دستور را به صورت يك تراكنش مستقل نگاه كرده Ùˆ -اجرا مي‌كند. موقعی كه تغييرات زيادي در -پايگاه داده انجام مي‌شود انديسهاي قبلي را -ØØ°Ù Ùˆ مجدداً‌ ايجاد كنيد. -Ø§Ø³ØªÙØ§Ø¯Ù‡ از گزينه o -F- در ÙØ±Ù…ان postmaster باعث غير -ÙØ¹Ø§Ù„ كردن ()fsync مي‌شود. اين دستور بعد از هر -تراكنش اطلاعات را روي هاردديسك منتقل -مي‌كند. -براي Ø§ÙØ²Ø§ÙŠØ´ تعداد Ø¨Ø§ÙØ±Ù‡Ø§ÙŠ ØØ§Ùظه اشتراكي از -گزينه B- به همراه ÙØ±Ù…ان postmaster Ø§Ø³ØªÙØ§Ø¯Ù‡ كنيد. -توجه كنيد كه اگر اين عدد خيلي بزرگ باشد ممكن -است postmaster اصلاً‌ اجرا نشود. هر Ø¨Ø§ÙØ± 8 كيلو -بايت ØØ§Ùظه نياز دارد Ùˆ تعداد Ø¨Ø§ÙØ±Ù‡Ø§ به طور -پيش ÙØ±Ø¶ 64 است. -همچنين مي‌توان با گزينه S- ميزان ØØ§Ùظه‌اي -كه براي مرتب‌سازي‌هاي موقت توسط PostgreSQL -Ø§Ø³ØªÙØ§Ø¯Ù‡ مي‌شود را Ø§ÙØ²Ø§ÙŠØ´ داد. مقدار پيش ÙØ±Ø¶ -512 كيلو بايت است. -Ø§Ø³ØªÙØ§Ø¯Ù‡ از دستور CLUSTER نيز براي بالا بردن -كارايي موثر ا ست. دستور راهنماي CLUSTER اطلاعات -بيشتري در اين زمينه به شما مي‌دهد. -3.7) Ú†Ù‡ امكاناتي براي پيدا كردن اشكال‌ وجود -دارد؟ -PostgerSQL‌ امكانات مختلÙÙŠ براي گزارش دادن -وضعيت خود دارد كه براي اشكال زدايي مي‌توان -از آنها Ø§Ø³ØªÙØ§Ø¯Ù‡ كرد. -با Ø§Ø³ØªÙØ§Ø¯Ù‡ از گزينه enable-assert-- تعداد زيادي -()assert براي مونيتور كردن Ùˆ توق٠برنامه در صورت -بروز خطاهاي ناخواسته ÙØ¹Ø§Ù„ مي‌شود. -هم Postmaster Ùˆ هم postgres گزينه‌هاي زيادي براي -اشكال زدايي دارند. موقعي كه postmaster را اجرا -مي‌كنيد خروجي استاندارد Ùˆ خطا را سمت ÙØ§ÙŠÙ„ log -ارسال كنيد. - cd /usr/local/pgsql - ./bin/postmaster >server.log 2>&1 & -اين كار يك ÙØ§ÙŠÙ„ log در بالاترين شاخه PostgreSQL‌ -ايجاد مي‌كند. اين ÙØ§ÙŠÙ„ ØØ§ÙˆÙŠ Ø§Ø·Ù„Ø§Ø¹Ø§Øª Ù…Ùيدي -در مورد مسائل Ùˆ خطاهايي است كه براي سرور -Ø§ØªÙØ§Ù‚ Ø§ÙØªØ§Ø¯Ù‡ است. براي ديدن جزئيات بيشتر -مي‌توان از d- به همراه ÙØ±Ù…ان postmaster‌ Ø§Ø³ØªÙØ§Ø¯Ù‡ -كرد. گزينه d- همچنين يك عدد مي‌گيرد كه نشان -دهنده Ø³Ø·Ø Ø¬Ø²Ø¦ÙŠØ§ØªÙŠ است كه در Logâ€ŒÙØ§ÙŠÙ„ نوشته -مي‌شود. با بالابردن اين عدد ØØ¬Ù… اطلاعات -توليد شده در LogÙØ§ÙŠÙ„ نيز Ø§ÙØ²Ø§ÙŠØ´ مي‌يابد. -اگر postmaster در ØØ§Ù„ اجرا نباشد، مي‌توانيم postgres -را به طور مستقيم از خط ÙØ±Ù…ان اجرا كرده Ùˆ -دستورات SQL را به آن بدهيم. اين كار Ùقط براي -اشكال‌يابي توصيه مي‌شود. توجه كنيد كه در -اين ØØ§Ù„ت يك دستور با كاراكتر newline خاتمه پيدا -مي‌كند Ùˆ نه با ;. اگر postmaster را با امكانات -اشكال‌يابي كامپيل كرده باشيد مي‌توانيد با -Ø§Ø³ØªÙØ§Ø¯Ù‡ از يك برنامه اشكال‌ياب اجراي -برنامه را مونيتور كنيد. -اگر postmaster در ØØ§Ù„ اجرا باشد با دستور psql -مي‌توان به postgres متصل شد. با پيدا كردن PID -ÙØ±Ø§ÙŠÙ†Ø¯ postgres كه psql به آن متصل شده است مي‌توان -آن را مونيتور كرد. براي اينكار بايد يك -برنامه اشكال‌ياب را به آن pid متصل كرد. اگر -بخواهيم بالا آمدن postgres را مونيتور كنيم كاÙÙŠ -است "PGOPTIONS="-W n Ùˆ psql را اجرا كنيم. اين كار باعث -مي‌شود كه postgres با n ثانيه تاخير اجرا شود Ùˆ در -اين ÙØ§ØµÙ„Ù‡ شما مي‌توانيد برنامه اشكال‌ياب -را به آن متصل كرده Ùˆ با قرار دادن يك نقطه -توق٠روند اجراي آن را مونيتور كنيد. -postgres گزينه‌هاي s-‌ Ùˆ A- Ùˆ t-‌ دارد كه براي -پيدا كردن اشكالات بسيار مناسب هستند. -شما مي‌توانيد postgreSQL را با امكانات profiling -كامپيل كنيد. اين كار باعث مي‌شود كه زمان -اجراي دقيق هر تابع در برنامه مشخص شود. -خروجي‌هاي توليد شده در اين ØØ§Ù„ت در ÙØ§ÙŠÙ„ -DLINUX_PROFILE. ريخته مي‌شود. -3.8) چرا موقعي كه من مي‌خواهم به پايگاه داده -وصل شوم پيام "Sorry, too many clients" ‌مي‌گيرم؟ -شما بايد ØØ¯Ø§ÙƒØ«Ø± تعداد ÙØ±Ø§ÙŠÙ†Ø¯Ù‡Ø§ÙŠ Ù‡Ù…Ø²Ù…Ø§Ù† -postmaster را Ø§ÙØ²Ø§ÙŠØ´ دهيد. مقدار پيش ÙØ±Ø¶ 32 است. -براي Ø§ÙØ²Ø§ÙŠØ´ آن مي‌توان از گزينه N- Ø§Ø³ØªÙØ§Ø¯Ù‡ -كرد Ùˆ يا ÙØ§ÙŠÙ„ postgresql.conf را Ø§ØµÙ„Ø§Ø Ù†Ù…ÙˆØ¯ -توجه كنيد كه اگر N- مقداري بيشتر از 32 داشته -باشد بايد مقدار B- را نيز Ø§ÙØ²Ø§ÙŠØ´ دهيم. اين -مقدار بايد ØØ¯Ø§Ù‚Ù„ دو برابر مقدار N-‌ باشد. -براي اعداد خيلي بالا بايد بعضي از -پارامترهاي كرنل را نيز Ø§ØµÙ„Ø§Ø ÙƒØ±Ø¯. -پارامترهايي نظير ØØ¯Ø§ÙƒØ«Ø± اندازه ØØ§Ùظه -اشتراكي SHMMAX ØŒ ØØ¯Ø§ÙƒØ«Ø± تعداد سماÙورها SEMMNI‌ Ùˆ -SEMMNS ØŒ ØØ¯Ø§ÙƒØ«Ø± تعداد ÙØ±Ø§ÙŠÙ†Ø¯Ù‡Ø§ NPROCØŒ ØØ¯Ø§ÙƒØ«Ø± -ÙØ±Ø§ÙŠÙ†Ø¯Ù‡Ø§ÙŠ ÙŠÙƒ كاربر MAXUPRC Ùˆ ØØ¯Ø§ÙƒØ«Ø± ÙØ§ÙŠÙ„هاي باز -NFILE Ùˆ NINODE. يكي از دلايلي كه تعداد اتصالات -همزمان postgreSQL Ù…ØØ¯ÙˆØ¯ است آن است كه نيازهاي -PostgreSQL بيش از منابع موجود سيستم نباشد. -3.9) در شاخه pgsql_tmp Ú†Ù‡ چيزي قرار دارد؟ -دراين شاخه ÙØ§ÙŠÙ„هاي موقتي قرار دارد كه با -اجراي درخواستها به وجود آمده است. به عنوان -مثال اگر براي اجراي دستور order by نياز به انجام -مرتب سازي باشد Ùˆ در صورتي كه ØØ§Ùظه مشخص شده -با گزينه S- براي اينكار كاÙÙŠ نباشد سيستم يك -ÙØ§ÙŠÙ„ موقت در اين شاخه ايجاد مي‌كند تا عمل -مرتب سازي را انجام دهد. -ÙØ§ÙŠÙ„هاي موقت معمولاً به صورت اتوماتيك پاك -مي‌شود اما اگر postgreSQL در ØÙŠÙ† مرتب سازي crash‌ -كند آن ÙØ§ÙŠÙ„ها باقي مي‌مانند. با stop Ùˆ start كردن -برنامه postmaster اين ÙØ§ÙŠÙ„ها پاك مي‌شوند. -3.10) چرا براي به روز كردن نسخه پايگاه داده من -بايد كل داده ها را dump‌ Ùˆ مجدداً restore كنم؟ -تيم برنامه نويس postgreSQL در نسخه‌هاي ارائه شده -كه Ùقط minor آنها Ù…ØªÙØ§ÙˆØª است Ùقط تغييرات كوچكي -اعمال مي‌كنند؛ بنابراين براي به روز كردن از -نسخه 7.2‌به 7.2.1 نيازي به dump Ùˆ restore نيست. اما در -نسخه‌هايي كه major آنها تغيير مي‌كند غالباً -ساختار داخلي جداول Ùˆ ÙØ§ÙŠÙ„هاي داده تغيير -مي‌كند. اين تغييرات معمولاً‌ پيچيده هستند. -براي انتقال داده‌هاي موجود در پايگاه داده -در اين ØØ§Ù„ت بايد ‌از dump Ùˆ restore Ø§Ø³ØªÙØ§Ø¯Ù‡ كرد. -در نسخه‌هايي كه ساختار روي ديسك تغييري -نمي‌كند مي توان از برنامه pg_upgrade براي به روز -كردن پايگاه داده Ø§Ø³ØªÙØ§Ø¯Ù‡ كرد بدون اينكه -نيازي به Ø§Ø³ØªÙØ§Ø¯Ù‡ از dump Ùˆ restore باشد. در -يادداشتي كه به همراه هر توزيع مي‌آيد ذكر -شده است كه آيا برنامه pg_upgrade براي اين توزيع -وجود دارد يا خير. -3.11) از Ú†Ù‡ سخت Ø§ÙØ²Ø§Ø±ÙŠ Ø¨Ø§ÙŠØ¯ Ø§Ø³ØªÙØ§Ø¯Ù‡ كنم؟ - -چون اكثر Ø³Ø®Øªâ€ŒØ§ÙØ²Ø§Ø±Ù‡Ø§ÙŠ PC سازگار هستند مردم -Ùكر مي‌كنند كه كيÙيت آنها نيز يكسان است. در -ØØ§Ù„يكه اينطور نيست. Ø§Ø³ØªÙØ§Ø¯Ù‡ از هاردهاي SCSI Ùˆ -ØØ§Ùظه‌هاي ECC Ùˆ مادربردهاي با كيÙيت بالا -نسبت به سخت Ø§ÙØ²Ø§Ø±Ù‡Ø§ÙŠ Ø§Ø±Ø²Ø§Ù†ØªØ± نتايج بهتري از -نظر كارايي Ùˆ پايداري سيستم بهمراه خواهد -داشت. PostgreSQL روي بيشتر سخت Ø§ÙØ²Ø§Ø±Ù‡Ø§ اجرا -مي‌شود اما اگر كارايي Ùˆ اطمينان ÙØ§ÙƒØªÙˆØ±Ù‡Ø§ÙŠ -مهمي هستند بايد سخت Ø§ÙØ²Ø§Ø± مناسب Ø§Ø³ØªÙØ§Ø¯Ù‡ شود. -در گروههاي پستي در مورد سخت Ø§ÙØ²Ø§Ø± مناسب Ùˆ -انتخاب آن Ø¨ØØ« شده است. - - - -سوالات عملياتي -4.1) ØªÙØ§ÙˆØª بين binary cursors Ùˆ Normal cursors چيست؟ -راهنماي دستور DECLARE‌ را مطالعه كنيد. -4.2) من چگونه مي‌توانم Ùقط روي چند ردي٠اول يا -يك ردي٠تصادÙÙŠ درخواست SELECT‌ بزنم؟ -راهنماي دستور FETCH يا SELECT...LIMIT را ببينيد. -در واقع كل درخواست بايد بررسي Ùˆ ارزيابي شود -ØØªÙŠ Ø§Ú¯Ø± شما Ùقط چند ردي٠اول را بخواهيد. براي -مثال درخواست ORDER BY را در نظر بگيريد. اگر -انديس يا نمايه‌اي براي ORDER BY وجود داشته -باشد،‌postgreSQL‌ ممكن است بتواند Ùقط چند سطر -اول درخواستي را ارزيابي كند Ùˆ يا اينكه كل -درخواست پردازش شود تا تعداد رديÙ‌هاي -درخواستي توليد شود. -براي انتخاب يك سطر تصادÙÙŠ به روش زير عمل -مي‌كنيم: - SELECT col - FROM tab - ORDER BY random() - LIMIT 1; -4.3) من چگونه مي‌توانم ليستي از جداول يا ساير -چيزهايي كه در psql‌ وجود دارد را ببينم؟ -براي ديدن ليست جداول دستور dt\ را در برنامه -psql‌ Ø§Ø³ØªÙØ§Ø¯Ù‡ كنيد. براي ديدن ليست كامل -ÙØ±Ù…انها ?\ را اجرا كنيد. راه ديگر خواندن متن -برنامه psql‌ است كه در شاخه pgsql/src/bin/psql/describe.c -‌قرار دارد. اين ÙØ§ÙŠÙ„ ØØ§ÙˆÙŠ ÙØ±Ø§Ù…ين SQLيي است كه -خروجي را براي دستوراتي كه با \‌در psql شروع -مي‌شوند توليد مي‌كنند. راه ديگر اجراي psql با -گزينه E-‌است. اينكار باعث مي‌شود كه psql قبل -از اجرا هر دستور SQL‌متناظر آن را نشان دهد. -PostgreSQL‌همچنين يك برنامه SQLi دارد كه مي‌توان -با Ø§Ø³ØªÙØ§Ø¯Ù‡ از آن اطلاعات داخلي پايگاه داده -را استخراج كرد. -4.4) چگونه يك ستون جدول را ØØ°Ù مي‌كنيد؟ چگونه -نوع داده آن را عوض كنيم؟ -ØØ°Ù يك ستون در توزيع 7.3 با Ø§Ø³ØªÙØ§Ø¯Ù‡ از دستور -ALTER TABLE DROP COLUMN اضاÙÙ‡ شده است. در نسخه‌هاي -قبلي به روش زير عمل كنيد: - BEGIN; - LOCK TABLE old_table; - SELECT ... -- تمام ستونها غير از ستوني كه مي‌خواهيد آن را ØØ°Ù كنيد را در اينجا بياوريد - INTO TABLE new_table - FROM old_table; - DROP TABLE old_table; - ALTER TABLE new_table RENAME TO old_table; - COMMIT; -براي عوض كردن نوع داده يك ستون به روش زير عمل -كنيد: - BEGIN; - ALTER TABLE tab ADD COLUMN new_col new_data_type; - UPDATE tab SET new_col = CAST(old_col AS new_data_type); - ALTER TABLE tab DROP COLUMN old_col; - COMMIT; -4.5) ØØ¯Ø§ÙƒØ«Ø± اندازه يك Ø±Ø¯ÙŠÙØŒâ€Œ جدول Ùˆ خود -پايگاه داده چقدر است؟ -Ù…ØØ¯ÙˆØ¯ÙŠØªÙ‡Ø§ عبارتند از: - ØØ¯Ø§ÙƒØ«Ø± اندازه پايگاه داده Ù†Ø§Ù…ØØ¯ÙˆØ¯ (تا 32 ترابايت وجود دارد) - ØØ¯Ø§ÙƒØ«Ø± اندازه يك جدول 32 ترابايت - ØØ¯Ø§ÙƒØ«Ø± ا ندازه يك ردي٠1.6 ترابايت - ØØ¯Ø§ÙƒØ«Ø± اندازه يك Ùيلد 1 گيگا بايت - ØØ¯Ø§ÙƒØ«Ø± اندازه رديÙهاي يك جدول نا Ù…ØØ¯ÙˆØ¯ - ØØ¯Ø§ÙƒØ«Ø± ستونهاي يك جدول بسته به نوع جدول بين 250 تا 6000 - ØØ¯Ø§ÙƒØ«Ø± انديسهاي يك جدول نا Ù…ØØ¯ÙˆØ¯ -البته در ØØ§Ù„ت Ù†Ø§Ù…ØØ¯ÙˆØ¯ نيز ما Ù…ØØ¯ÙˆØ¯ به ØØ¬Ù… -هاردديسك Ùˆ ÙØ¶Ø§ÙŠ ØØ§Ùظه خواهيم بود. در صورتي -Ú©Ù‡ مقادير مشخص شده به عنوان Ù†Ø§Ù…ØØ¯ÙˆØ¯ به صورت -غير معمولي بزرك شوند كارايي سيستم كاهش -خواهد ÙŠØ§ÙØª. -براي ذخيره كردن جداول با اندازه خيلي بزرگ -نيازي نيست كه سيستم عامل امكان ايجاد -ÙØ§ÙŠÙ„هاي بزرگ را داشته باشد. بلكه جداول خيلي -بزرگ به صورت ÙØ§ÙŠÙ„هايي به ØØ¬Ù… يك گيگا بايت -نگاهداري مي‌شوند. -اگر اندازه بلوكهاي داده را برابر 32 كيلو بايت -قرار دهيم ØØ¯Ø§ÙƒØ«Ø± اندازه جدول Ùˆ ØØ¯Ø§ÙƒØ«Ø± تعداد -ستونها 4 برابر خواهد شد. -4.6) چقدر ÙØ¶Ø§ÙŠ Ø¯ÙŠØ³Ùƒ سخت براي ذخيره كردن -داده‌‌هاي يك ÙØ§ÙŠÙ„ متني مورد نياز است؟ -يك پايگاه داده PostgreSQL‌ تا 5 برابر ÙØ¶Ø§ÙŠÙŠ Ø±ÙˆÙŠ -هاردديسك براي نگاهداري يك ÙØ§ÙŠÙ„ متني نياز -دارد. -به عنوان مثال يك ÙØ§ÙŠÙ„ با 100000 خط را در نظر -بگيريد كه در هر خط يك عدد صØÙŠØ Ùˆ يك ØªÙˆØ¶ÙŠØ -متني آمده است. ÙØ±Ø¶ كنيد كه رشته متني به طور -متوسط 20 بايت باشد. اندازه ÙØ§ÙŠÙ„ برابر 2.8 مگا -بايت خواهد بود ولي PostgreSQL براي نگاهداري اين -ÙØ§ÙŠÙ„ به 6.4 مگا بايت اطلاعات نياز خواهد داشت. - 32 bytes: اندازه سرايند هر خط به طور تقريبي - 24 bytes: يك عدد صØÙŠØ Ùˆ يك رشته 24 بايتي - + 4 bytes: اشاره گر روي ØµÙØÙ‡ به يك چندتايي - ---------------------------------------- - 60 bytes در هر ردي٠- -اندازه ØµÙØØ§Øª داده در PostgreSQL برابر با 8 كيلو بايت است - 8192 تعداد بايت‌ها در هر ØµÙØÙ‡ - ------------------- = 136 تعداد رديÙ‌ها در يك ØµÙØÙ‡ پايگاه داده - 60 تعداد بايت‌هاي هر ردي٠- - 100000 تعداد رديÙها - -------------------- = ØªØ¹Ø¯Ø§Ø¯ØµÙØØ§Øª پايگاه داده - 128 تعداد رديÙها در هر ØµÙØÙ‡ - -735 تعداد ØµÙØØ§Øª * 8192 تعداد بايت‌هاي هر ØµÙØÙ‡ = 6,021,120 مگا بايت -سربار انديسها يا نمايه‌ها از اين مقدار كمتر -است ولي چون شامل خود داده‌ها هم هست ممکن است -اندازه آنها هم بزرگ شود. -NULLها به صورت bitmap ذخيره مي‌شوند Ùˆ از اينرو -ÙØ¶Ø§ÙŠ Ø¨Ø³ÙŠØ§Ø± كمي را اشغال مي‌كنند. -4.7) چگونه مي‌توانم بÙهمم كه Ú†Ù‡ كاربران،‌ -پايگاه داده،‌ نمايه Ùˆ جداولي در سيستم تعري٠-شده است؟ -psql تعداد زيادي دستور دارد كه با \ شروع -مي‌شوند Ùˆ اين اطلاعات را در اختيار ما قرار -مي‌دهند. براي ديدن آنها دستور ?\ را اجرا -كنيد. همچنين جداول سيستمي كه با نام آنها pg_ -‌شروع مي‌شود نيز اين اطلاعات را در خود -دارند. اجراي برنامه psql با گزينه l- نيز باعث -نشان دادن ليست تمام پايگاههاي داده مي‌شود. -همچنين ÙØ§ÙŠÙ„ pgsql/src/tutorial/syscat.source نيز ÙØ±Ù…انهاي -SELECT كه با Ø§Ø³ØªÙØ§Ø¯Ù‡ از آن مي‌توان اطلاعات -پايگاه داده را استخراج كرد Ø´Ø±Ø Ø¯Ø§Ø¯Ù‡ است. -4.8) چرا درخواستهاي من كند اجرا مي‌شوند يا -چرا از نمايه ها Ø§Ø³ØªÙØ§Ø¯Ù‡ نمي‌كنند؟ -به طور معمول براي درخواستها از نمايه‌ها -Ø§Ø³ØªÙØ§Ø¯Ù‡ نمي‌شود. تنها در صورتي از نمايه‌ها -Ø§Ø³ØªÙØ§Ø¯Ù‡ مي‌شود كه اندازه جدول از يك اندازه -ØØ¯Ø§Ù‚Ù„ بزرگتر باشد Ùˆ درخواست هم Ùقط قسمتي از -رديÙ‌هاي جدول را انتخاب كرده باشد. دليل اين -كار آن است كه دسترسي‌هاي تصادÙÙŠ به هاردديسك -كه به خاطر نمايه‌ها ايجاد مي‌شود ممكن است -از خواندن مستقيم جدول يا خواندن ترتيبي -ركوردها كندتر باشد. -براي تعيين اينكه از نمايه Ø§Ø³ØªÙØ§Ø¯Ù‡ شود يا -خير، PostgreSQL بايد اطلاعات آماري را در مورد يك -جدول بداند. اين اطلاعات توسط دستور ANALYZE Ùˆ VACUUM -ANALYZE به دست مي‌آيد. با Ø§Ø³ØªÙØ§Ø¯Ù‡ از اين -اطلاعات،‌ بهينه ساز از تعداد رديÙ‌هاي يك -جدول اطلاع پيدا مي‌كند Ùˆ بهتر مي‌تواند -تعيين كند كه آيا از نمايه Ø§Ø³ØªÙØ§Ø¯Ù‡ شود يا خير. -اطلاعات آماري همچنين براي تعيين ترتيب Ø§Ù„ØØ§Ù‚ -Ùˆ روشهاي Ø§Ù„ØØ§Ù‚ به صورت بهينه نيز كاربر دارد. -جمع آوري اطلاعات آماري بايد به صورت دوره‌اي -همزمان با تغيير داده‌هاي جدول انجام شود. -نمايه‌ها به طور معمول همراه با دستور ORDER BY -به كار برده نمي‌شوند. براي يك جدول بزرگ يك -پيمايش ترتيبي همراه با دستور مرتب سازي از به -كار بردن نمايه‌ها سريعتر خواهد بود. -اما اگر همراه با ORDER BY‌ از LIMIT Ø§Ø³ØªÙØ§Ø¯Ù‡ شود -اغلب از نمايه‌ها Ø§Ø³ØªÙØ§Ø¯Ù‡ مي‌شود چون Ùقط -قسمتي از جدول Ø§Ø³ØªÙØ§Ø¯Ù‡ مي‌شود. در ØÙ‚يقت هر -چند توابع ()MIN‌ Ùˆ ()MAX از نمايه‌ها Ø§Ø³ØªÙØ§Ø¯Ù‡ -نمي‌كنند ولي مي‌توانيم با Ø§Ø³ØªÙØ§Ø¯Ù‡ از دستور -زير با Ø§Ø³ØªÙØ§Ø¯Ù‡ از نمايه‌ها Ùˆ دستور ORDER BY Ùˆ -LIMIT‌ آنها را به دست آوريم. - SELECT col - FROM tab - ORDER BY col [ DESC ] - LIMIT 1; -اگر شما Ùكر مي‌كنيد كه بهينه ساز سيستم در -انتخاب پيمايش ترتيبي اشتباه كرده است با -دستور 'SET enable_seqscan TO 'off' مي‌توانيد ببينيد آيا -Ø§Ø³ØªÙØ§Ø¯Ù‡ از نمايه‌ها باعث Ø§ÙØ²Ø§ÙŠØ´ سرعت -درخواست‌ها خواهد شد. -Ø§Ø³ØªÙØ§Ø¯Ù‡ از نمايه‌ها هنگامي كه از علائم ويژه -نظير LIKE Ùˆ ~ Ø§Ø³ØªÙØ§Ø¯Ù‡ مي‌كنيد Ùقط در بعضي -شرايط خاصي كه در اينجا ذكر شده است ممكن است: - ابتداي رشته جستجو بايد به طور ØµØ±ÙŠØ Ù…Ø´Ø®Øµ - باشد براي مثال: - دستورات LIKE نبايد با علامت % شروع شوند - الگوهاي منظمي كه با ~ مي‌ايد ØØªÙ…اً بايد با - علامت ^ شروع شود - رشته جستجو نبايد با يك مجموعه از - كاراكتر‌ها مثل [a-e] شروع شود - جستجوهاي ØºÙŠØ±ØØ³Ø§Ø³ به متن مثل ILIKE‌ Ùˆ *~ از - نمايه‌ها Ø§Ø³ØªÙØ§Ø¯Ù‡ نمي‌كنند. در عوض از - توابع نمايه‌اي كه در قسمت 4.12 ØªÙˆØ¶ÙŠØ Ø¯Ø§Ø¯Ù‡ شد - Ø§Ø³ØªÙØ§Ø¯Ù‡ مي‌كنند. - مقدار پيش ÙØ±Ø¶ locale‌ بايد در initdb Ø§Ø³ØªÙØ§Ø¯Ù‡ شود. - -4.9) چگونه مي‌توانم Ù†ØÙˆÙ‡ بررسي درخواست را -توسط بهينه‌ساز درخواستها مشاهده كنم؟ -راهنماي دستور EXPLAIN را نگاه كنيد. -4.10) نمايه R-tree‌ چيست؟ -از نمايه R-Tree براي انديس كردن داده‌هاي -ÙØ§ØµÙ„ه‌اي Ø§Ø³ØªÙØ§Ø¯Ù‡ مي‌شود. يك نمايه hash -نمي‌توانند جستجوهاي Ù…ØØ¯ÙˆØ¯Ù‡â€ŒØ§ÙŠ Ø±Ø§ انجام -دهد. نمايه "B-tree" نيز براي انجام جستجوي -Ù…ØØ¯ÙˆØ¯Ù‡â€ŒØ§ÙŠ Ø¯Ø± يك جهت قابل Ø§Ø³ØªÙØ§Ø¯Ù‡ است. اما -R-Tree مي‌تواند داده‌هاي چند بعدي را نيز -پشتيباني كند. براي مثال Ø§Ø³ØªÙØ§Ø¯Ù‡ اگر از نمايه -R-tree‌ براي گونه Point Ø§Ø³ØªÙØ§Ø¯Ù‡ شود سرعت -درخواست‌هايي نظير "select all points within a bounding -rectangle" به مراتب Ø§ÙØ²Ø§ÙŠØ´ مي‌يابد. -مقاله‌اي كه طراØÙŠ R-tree را ØªÙˆØ¶ÙŠØ Ø¯Ø§Ø¯Ù‡ است -Guttman, A. "R-trees: A Dynamic Index Structure for Spatial Searching." -Proceedings of the 1984 ACM SIGMOD Int'l Conf on Mgmt of Data, 45-57. -R-tree‌ مي‌تواند چندضلعيها Ùˆ چند وجهي را -پشتيباني كند. در تئوري R-tree مي‌تواند تعداد -بعدهاي بالاتر ري نيز پشتيباني كند. در عمل -توسعه R-tree‌ نياز به كار بيشتري دارد. -4.11) بهينه ساز تكويني درخواست چيست؟ (Genetic Query -Optimizer) -Ø§Ø³ØªÙØ§Ø¯Ù‡ از GEQO سرعت بهينه سازي درخواست را -هنگاميكه تعداد زيادي جدول را با Ø§Ø³ØªÙØ§Ø¯Ù‡ از -الگوريتم ژنتيك Ø§Ù„ØØ§Ù‚ مي‌كنيم Ø§ÙØ²Ø§ÙŠØ´ -مي‌دهد. -4.12) چگونه از عبارات منظم براي جستجو Ø§Ø³ØªÙØ§Ø¯Ù‡ -كنم؟ چگونه جستجويي انجام دهم كه ØØ³Ø§Ø³ به متن -نباشد؟ چگونه براي يك جستجوي غير ØØ³Ø§Ø³ به متن -از نمايه Ø§Ø³ØªÙØ§Ø¯Ù‡ كنم؟ -براي جستجوي عبارت منظم از عملگر ~‌ Ø§Ø³ØªÙØ§Ø¯Ù‡ -مي‌كنيم. براي جستجوي غير ØØ³Ø§Ø³ به متن از -عملگر *~ Ùˆ يا ILIKE‌ Ø§Ø³ØªÙØ§Ø¯Ù‡ مي‌كنيم. -روش ديگر انجام جستجوي غير ØØ³Ø§Ø³ به متن در زير -نشان داده شده است. - SELECT * - FROM tab - WHERE lower(col) = 'abc'; -اين از نمايه‌هاي استاندارد Ø§Ø³ØªÙØ§Ø¯Ù‡ -نمي‌كند. ولي شما مي توانيد با دستور زير يك -نمايه ايجاد كنيد Ùˆ از آن Ø§Ø³ØªÙØ§Ø¯Ù‡ كنيد. - CREATE INDEX tabindex ON tab (lower(col)); -4.13) Iچگونه مي‌توانم در يك درخواست تشخيص دهم -كه يك Ùيلد NULL‌ است؟ -با Ø§Ø³ØªÙØ§Ø¯Ù‡ از توابع IS NULL Ùˆ IS NOT NULL مي‌توانيم -NULL بودن يك Ùيلد را تست كنيم. -4.14) ØªÙØ§ÙˆØª بين گونه‌هاي مختل٠character چيست؟ -Type Internal Name Notes --------------------------------------------------- -VARCHAR(n) varchar اندازه، ØØ¯Ø§ÙƒØ«Ø± طول را نشان مي دهد بدون اضاÙÙ‡ شدن كاراكتر اضاÙÙ‡ -CHAR(n) bpchar كاراكترهاي بلانك براي پر شدن طول مشخص شده Ø§Ø³ØªÙØ§Ø¯Ù‡ مي‌شود -TEXT text ØØ¯Ø§ÙƒØ«Ø± طول را مشخص نمي‌كند -BYTEA bytea آرايه‌اي از بايت با طول متغير -"char" char يك كاراكتر -نام داخلي گونه‌ها را در system catalogue ‌و بعضي از -پيغامهاي خطا مي‌توان ديد. -چهار گونه اول همگي از نوع varlena هستند (4 بايت -اول روي ديسك طول را مشخص مي‌كند كه به دنبال -آن داده‌ها قرار دارند.)‌بنابراين ÙØ¶Ø§ÙŠ -واقعي Ø§Ø³ØªÙØ§Ø¯Ù‡ شده روي ديسك از اندازه تعري٠-شده بيشتر است. اما اين گونه‌ها را مي‌توان -ÙØ´Ø±Ø¯Ù‡ كرد كه اينكار باعث مي‌شود ÙØ¶Ø§ÙŠ ÙƒÙ…ØªØ±ÙŠ -روي ديسك اشغال كنند. -براي ذخيره رشته‌هاي با طول متغير(VARCHAR(n‌ -بهترين انتخاب است. در اين گونه ØØ¯Ø§ÙƒØ«Ø± طول -رشته Ù…ØØ¯ÙˆØ¯ است بر خلا٠text كه هيچ Ù…ØØ¯ÙˆØ¯ÙŠØªÙŠ -روي ØØ¯Ø§ÙƒØ«Ø± اندازه رشته نمي‌گذارد.(در اين -گونه ØØ¯Ø§ÙƒØ«Ø± طول يك رشته يك گيگا بايت خواهد -بود) -گونه (CHAR(n براي ذخيره داده‌هاي با طول يكسان -است.يك گونه‌ي (CHAR(n با كاراكترهاي بلانك -(خالي) پر مي‌شود تا به طول مشخص شده برسد در -ØØ§Ù„يكه گونه VARCHAR كاراكترها را به همان صورت -كه هستند ذخيره مي‌كند. گونه BYTEA براي ذخيره -داده‌هاي باينري است به خصوص داده‌هاي -باينتري كه شامل بايت‌هاي NULL هستند. از نظر -كارايي تمام اين گونه‌ها يكسان هستند. -4.15.1) چگونه مي‌توانم يك Ùيلد سريال يا -Ø§ÙØ²Ø§ÙŠØ´ÙŠ Ø§ÙŠØ¬Ø§Ø¯ كنم؟ -PostgreSQL از داده‌هاي سريال پشتيباني مي‌كند. -براي ايجاد يك Ùيلد سريال (براي داشتن يك Ùيلد -Ù…Ù†ØØµØ± به ÙØ±Ø¯ براي هر ردي٠)به روش زير عمل -كنيد: - CREATE TABLE person ( - id SERIAL, - name TEXT - ); -دستور بالا به طور اتوماتيک به دستور زير -تبديل مي‌شود: - CREATE SEQUENCE person_id_seq; - CREATE TABLE person ( - id INT4 NOT NULL DEFAULT nextval('person_id_seq'), - name TEXT - ); -براي ديدن اطلاعات بيشتر به راهنماي دستور -create_sequence مراجعه كنيد. همچنين مي‌توان از -OID‌هر ردي٠به عنوان يك مقدار Ù…Ù†ØØµØ± به ÙØ±Ø¯ -Ø§Ø³ØªÙØ§Ø¯Ù‡ كرد. اما در اين ØØ§Ù„ت براي dump كردن Ùˆ -reload‌كردن پايگاه داده بايد دستور pg_dumps‌ را -با گزينه o-‌ اجرا كنيد. -4.15.2) چگونه مي‌توانم مقدار يك درج سريالي را -بدانم؟ -يك روش براي Ú¯Ø±ÙØªÙ† مقدار بعدي يك Ùيلد سريال -Ø§Ø³ØªÙØ§Ø¯Ù‡ از تابع ()nextval است. در شبه ÙƒÙØ¯ÙŠ ÙƒÙ‡ در -ادامه آمده است روش انجام اين كار نشان داده -شده است: - new_id = execute("SELECT nextval('person_id_seq')"); - execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')"); -با اجرا دستور Ùوق مقدار جديد را در متغير new_id -نيز خواهيدداشت كه مي‌توانيد آن را در بقيه -درخواست‌هاي نيز Ø§Ø³ØªÙØ§Ø¯Ù‡ كنيد. توجه داشته -باشيد كه نام SEQUENCEيي كه به طور اتوماتيك ايجاد -شده است به صورت table_serialcolumn_seq‌ خواهد بود. كه -در آن table‌ نام جدول Ùˆ serialcolumn نام Ùيلد سريال -جدول مي‌باشد. -براي ديدن مقدار نسبت داده شده به Ùيلد سريال -نيز مي‌توان از تابع () currval به صورت زير -Ø§Ø³ØªÙØ§Ø¯Ù‡ كرد. - execute("INSERT INTO person (name) VALUES ('Blaise Pascal')"); - new_id = execute("SELECT currval('person_id_seq')"); -Ùˆ سرانجام شما مي‌توانيد از مقدار OID كه خروجي -دستور INSERT است براي ديدن مقدار پيش ÙØ±Ø¶ -Ø§Ø³ØªÙØ§Ø¯Ù‡ كنيد. هر چند اين روش در همه Ù¾Ù„ØªÙØ±Ù…ها -قابل Ø§Ø³ØªÙØ§Ø¯Ù‡ نيست Ùˆ ضمن اينكه Ùيلد oid‌ بعد -از عدد 4 ميليارد دوباره ØµÙØ± مي‌شود. در زبان -perl با Ø§Ø³ØªÙØ§Ø¯Ù‡ از DBI Ùˆ DBD::Pg مقدار oid‌را -مي‌توانيد به شكل زير استخراج كنيد: بعد از -اجراي ()st->execute$ مقدار oid‌ در متغير sth->pg_oid_status$ -ذخيره خواهد شد. -4.15.3) آیا توابع ()nextval Ùˆ ()currval منجر به ایجاد -شرایط race برای سایر کاربران Ù…ÛŒ شوند؟ -خیر، Ø§Ø³ØªÙØ§Ø¯Ù‡ از این توابع شرایط race را به -وجود نمی آورد. -4.15.4) چرا اعداد سریالی مربوط به تراکنشهای abort -شده مجدداً Ø§Ø³ØªÙØ§Ø¯Ù‡ نمی شود؟ چرا بین اعداد -سریالی یک ÙØ§ØµÙ„Ù‡ خالی ایجاد Ù…ÛŒ شود؟ -برای بالا بردن امکان اجرای همزمان تراکنشها، -اعداد سریالی به Ù…ØØ¶ اجرای تراکنش به آنها -تخصیص Ù…ÛŒ یابد در این ØØ§Ù„ت اگر بعضی از -تراکنشها abort شوند بین اعداد سریالی Ø§Ø³ØªÙØ§Ø¯Ù‡ -شده یک ÙØ§ØµÙ„Ù‡ خالی به وجود Ù…ÛŒ آید. -4.16) OID Ùˆ TID Ú†Ù‡ هستند؟ -OID راه ØÙ„ PostgreSQL برای داشتن یک شناسه Ù…Ù†ØØµØ± به -ÙØ±Ø¯ برای هر ردی٠است. هر ردی٠جدیدی Ú©Ù‡ ایجاد -Ù…ÛŒ شود یک OID Ù…Ù†ØØµØ± به ÙØ±Ø¯ به آن اختصاص Ù…ÛŒ -یابد. تمام OIDهایی Ú©Ù‡ در ØÛŒÙ† initdb ایجاد Ù…ÛŒ شوند -از 16384 کمتر هستند Ùˆ OIDهایی بعداً تولید Ù…ÛŒ شود -از این عدد بزرگتر خواهد بود. نکته مهم آن است -Ú©Ù‡ OIDها نه تنها در یک جدول شبیه نیستند بلکه -در Ú©Ù„ پایگاه داده هیچ دو ردیÙÛŒ دارای OID یکسان -نخواهد بود. -PostgreSQL از OID در سیستم داخلی خود برای ایجاد -ارتباط بین ردیÙهای جداول Ù…Ø®ØªÙ„Ù Ø§Ø³ØªÙØ§Ø¯Ù‡ Ù…ÛŒ -کند. توصیه Ù…ÛŒ شود Ú©Ù‡ یک ستون از نوع OID برای -ذخیره این Ùیلد در جدول ایجاد کنید. ساختن یک -نمایه برای این Ùیلد باعث دسترسی سریعتر به آن -خواهد شد. -تمام پایگاههای داده در PostgreSQL برای Ú¯Ø±ÙØªÙ† OID -جدید از یک ناØÛŒÙ‡ مرکزی Ø§Ø³ØªÙØ§Ø¯Ù‡ Ù…ÛŒ کند. ولی -اگر بخواهیم OID را به روش دیگری بگیریم Ùˆ یا -اینکه در ØÛŒÙ† Ú©Ù¾ÛŒ کردن یک جدول بخواهیم OIDهای -اصلی آن تغییر نکند به روش زیر Ù…ÛŒ توانیم عمل -کنیم: - - CREATE TABLE new_table(mycol int); - SELECT oid AS old_oid, mycol INTO tmp_table FROM old_table; - COPY tmp_table TO '/tmp/pgtable'; - COPY new_table WITH OIDS FROM '/tmp/pgtable'; - DROP TABLE tmp_table; -OID یک عدد صØÛŒØ 4 بایتی است Ùˆ بنابراین ØØ¯Ø§Ú©Ø«Ø± -مقدار آن 4 میلیارد خواهد بود Ùˆ بعد از آن -مقدار آن سرریز خواهد شد. البته تا کنون برای -کسی این Ø§ØªÙØ§Ù‚ Ù†ÛŒÙØªØ§Ø¯Ù‡ است Ùˆ تصمیم گرداندگان -PostgreSQL آن است Ú©Ù‡ قبل از آنکه این Ø§ØªÙØ§Ù‚ رخ دهد -این مشکل را برطر٠کنند. -TIDها برای شناسایی Ù…ØÙ„ Ùیزیکی یک ردی٠بر اساس -بلوک Ùˆ Ø¢ÙØ³Øª Ù…ÛŒ باشد. TIDها بعد از تغییر پیدا -کردن یک ردی٠و یا بازخوانی آن عوض Ù…ÛŒ شوند. -TIDها توسط نمایه ها Ø§Ø³ØªÙØ§Ø¯Ù‡ Ù…ÛŒ شوند. -4.17) معني بعضي از ترمها Ùˆ كلماتي كه در PostgreSQL‌ -Ø§Ø³ØªÙØ§Ø¯Ù‡ مي‌شود چيست؟ -لیست برخی از ترمها Ùˆ کلماتی Ú©Ù‡ Ø§Ø³ØªÙØ§Ø¯Ù‡ Ù…ÛŒ -شوند: - table, relation, class :کلاس، رابطه، جدول - row, record, tuple چندتایی، رکورد، ردی٠- column, field, attribute ØµÙØªØŒ Ùیلد، ستون - retrieve, select انتخاب، خواندن - replace, updateبه روز کردن، جایگزینی - append, insert درج، اضاÙÙ‡ کردن - OID, serial value مقدار سریال - portal, cursor - range variable, table name, table alias -یک لیست عمومی از ترمهای مورد Ø§Ø³ØªÙØ§Ø¯Ù‡ در -پایگاه داده در آدرس -http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.htm -وجود دارد. -4.18) چرا من خطاي "ERROR: Memory exhausted in AllocSetAlloc" -مي‌گيرم؟ -این خطا Ø§ØØªÙ…الاً یا به خاطر تمام شدن ØØ§Ùظه -مجازی سیستم شماست Ùˆ یا اینکه کرنل برای -برنامه ها در مورد میزان Ø§Ø³ØªÙØ§Ø¯Ù‡ از ØØ§Ùظه -مجازی Ù…ØØ¯ÙˆØ¯ÛŒØª اعمال کرده است. قبل از اجرای -برنامه اصلی یکی از دستورات زیر را اجرا کنید. - ulimit -d 262144 - limit datasize 256m -بسته به نوع شل یکی از این دستورات ممکن است با -موÙقیت اجرا شود. با اجرای آن دستور Ù…ØØ¯ÙˆØ¯ÛŒØª -ØØ§Ùظه مجازی برای برنامه ها برداشته شده Ùˆ با -این کار Ø§ØØªÙ…الاً درخواستی Ú©Ù‡ قبلاً خطا Ù…ÛŒ -داده است اجرا خواهد شد. -4.19) از كجا تشخيص دهم كه ويرايش يا نسخه -PostgreSQLيي كه من Ø§Ø³ØªÙØ§Ø¯Ù‡ مي‌كنم چيست؟ -با اجرای دستور ()SELECT version -4.20) چرا در ØÛŒÙ† اجرای عملیات روی large-objectها -خطای "invalid large obj descriptor"به وجود Ù…ÛŒ آید؟ -شما باید قبل از شروع دستوراتی Ú©Ù‡ با large-objectها -کار Ù…ÛŒ کنند از BEGIN Ùˆ بعد از آنها هم یک END -بگذارید. در ØØ§Ù„ ØØ§Ø¶Ø± PostgreSQL هندل large-objectها را -در زمان نهایی شدن تراکنش (commitشدن) Ù…ÛŒ بندد. به -همین دلیل اولین تلاش برای انجام هر کاری با -هندل منجر به خطای invalid large obj descriptor خواهد شد. -برای جلوگیری از این خطا ØØªÙ…اً باید از یک -تراکنش Ø§Ø³ØªÙØ§Ø¯Ù‡ کنید. این کار همانطور Ú©Ù‡ -قبلاً Ú¯ÙØªÙ‡ شد با Ø§Ø³ØªÙØ§Ø¯Ù‡ از قرار دادن BEGIN Ùˆ END -در ابتدا Ùˆ انتهای دستورات انجام Ù…ÛŒ شود. -اگر این خطا را در ØÛŒÙ† Ø§Ø³ØªÙØ§Ø¯Ù‡ از یک درایور ODBC -Ø¯Ø±ÛŒØ§ÙØª کردید Ø§ØØªÙ…الاً باید این دستور را -اجرا کنید: set auto-commit off -4.21) چگونه يك ستون ايجاد كنم كه مقدار زمان -جاري را به عنوان مقدار Ù¾ÙŠØ´â€ŒÙØ±Ø¶ داشته باشد؟ -از CURRENT_TIMESTAMP Ø§Ø³ØªÙØ§Ø¯Ù‡ کنید در مثال زیر Ù†ØÙˆÙ‡ -انجام این کار نشان داده شده است: -CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP ); - -4.22) چرا "زير درخواستهايي" كه از IN Ø§Ø³ØªÙØ§Ø¯Ù‡ -مي‌كنند كند هستند؟ -در نسخه های قبل از 7.4 عمل Ø§Ù„ØØ§Ù‚ زیر درخواست Ùˆ -درخواست اصلی به این صورت انجام Ù…ÛŒ شود Ú©Ù‡ -نتایج به دست آمده از زیر درخواست به صورت -ترتیبی برای هر ردی٠اعمال Ù…ÛŒ شود. اگر -زیردرخواست ردی٠های Ú©Ù…ÛŒ را به عنوان خروجی -برگرداند Ùˆ درخواست بیرونی ردی٠های زیادی را -شامل شود Ø§Ø³ØªÙØ§Ø¯Ù‡ از IN بهترین روش است در غیر -اینصورت بهتر است از EXISTS Ø§Ø³ØªÙØ§Ø¯Ù‡ شود - SELECT * - FROM tab - WHERE col IN (SELECT subcol FROM subtab); -به: - SELECT * - FROM tab - WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col); -برای اجرای سریع این درخواست باید برای ستون -subcol نمایه ایجاد شده باشد. -در نسخه های بعد از 7.4 IN برای Ø§Ù„ØØ§Ù‚ از همان -تکنیک پیچیده مورد Ø§Ø³ØªÙØ§Ø¯Ù‡ در دستورات معمولی -Ø§Ø³ØªÙØ§Ø¯Ù‡ Ù…ÛŒ کند Ùˆ بنابراین Ø§Ø³ØªÙØ§Ø¯Ù‡ از آن نسبت -به EXISTS ارجØÛŒØª دارد. -4.23) چگونه مي‌توانم يك Ø§Ù„ØØ§Ù‚ خارجي (outer join) -انجام دهم؟ -برای انجام Ø§Ù„ØØ§Ù‚ خارجی به روش زیر عمل کنید: - SELECT * - FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col); -یا - SELECT * - FROM t1 LEFT OUTER JOIN t2 USING (col); -درخواستهای بالا t1.col , t2.col را به هم Ø§Ù„ØØ§Ù‚ Ù…ÛŒ -کند Ùˆ همچنین ردیÙهای t1 Ú©Ù‡ نظیر آنها در t2 -نبوده است را نیز برمی گرداند. اگر از RIGHT -Ø§Ø³ØªÙØ§Ø¯Ù‡ شود نتیجه بر عکس است. یعنی ردیÙهای t2 -Ú©Ù‡ نظیر آنها در t1 نباشد را نشان Ù…ÛŒ دهد Ùˆ اگر -از FULL Ø§Ø³ØªÙØ§Ø¯Ù‡ شود نتیجه هم شامل ردیÙهای t1 -است Ùˆ هم شامل ردیÙهای t2. Ø§Ø³ØªÙØ§Ø¯Ù‡ از کلمه OUTER -اختیاری است چرا Ú©Ù‡ این کلمه به طور ضمنی -دستورهای LEFT, RIGHT, FULL وجود دارد. -در نسخه های قبلی پایگاه داده Ù…ÛŒ توانیم Ø§Ù„ØØ§Ù‚ -خارجی را به Ú©Ù…Ú© دستورهای UNION, NOT IN شبیه سازی -کنیم. این کار در مثال زیر نشان داده شده است: - - SELECT tab1.col1, tab2.col2 - FROM tab1, tab2 - WHERE tab1.col1 = tab2.col1 - UNION ALL - SELECT tab1.col1, NULL - FROM tab1 - WHERE tab1.col1 NOT IN (SELECT tab2.col1 FROM tab2) - ORDER BY col1 -4.24) چگونه مي‌توان درخواستهايي از چند پايگاه -داده توليد كرد؟ -در ØØ§Ù„ ØØ§Ø¶Ø± این کار امکان پذیر نیست. PostgreSQL -Ùقط امکان درخواست از پایگاه داده ای را Ù…ÛŒ -دهد Ú©Ù‡ در ØØ§Ù„ ØØ§Ø¶Ø± به آن متصل باشید Ùˆ نمی -توان به طور همزمان از دو پایگاه داده Ø§Ø³ØªÙØ§Ø¯Ù‡ -کرد. البته یک برنامه کاربردی خود Ù…ÛŒ تواند به -طور همزمان دو پایگاه داده را مورد Ø§Ø³ØªÙØ§Ø¯Ù‡ -قرار داده Ùˆ نتایج را با هم ترکیب کند ولی نمی -تواند در یک درخواست به هر دو پایگاه داده -رجوع کند. -4.25) چگونه خروجي يك تابع مي‌تواند چند ردي٠-يا ستون باشد؟ -در نسخه 7.3 خروجی یک تابع Ù…ÛŒ تواند چند ردی٠یا -چند ستون باشد. برای دیدن اطلاعات بیشتر به -سایت زیر مراجعه -کنید:http://techdocs.postgresql.org/guides/SetReturningFunctions -4.26) در توابع PL/PgSQL چرا نمي‌توان با اطمينان -جداول موقت را ايجاد يا ØØ°Ù كرد؟ -PL/PgSQL Ù…ØØªÙˆØ§ÛŒ توابع را ذخیره (cache) Ù…ÛŒ کند. یک -اثر بد جانبی این کار آن است Ú©Ù‡ اگر در تابع از -یک جدول موقت Ø§Ø³ØªÙØ§Ø¯Ù‡ شود Ùˆ بعداً آن جدول ØØ°Ù -Ùˆ یک جدول جدید به جای آن ایجاد شود، در -ÙØ±Ø§Ø®ÙˆØ§Ù†ÛŒ مجدد آن تابع، Ù…ØØªÙˆØ§ÛŒ ذخیره شده -تابع هنوز به جدول قدیمی اشاره Ù…ÛŒ کند Ùˆ -بنابراین اجرای تابع با اشکال مواجه Ù…ÛŒ شود. -راه ØÙ„ این مشکل آن است Ú©Ù‡ برای جداول موقت از -دستور EXECUTE Ø§Ø³ØªÙØ§Ø¯Ù‡ شود Ú©Ù‡ این کار سبب Ù…ÛŒ شود -Ú©Ù‡ درخواست برای هر بار اجرا مجدداً پیمایش Ùˆ -ØªÙØ³ÛŒØ± شود. -4.27) Ú†Ù‡ گزينه‌هايي براي تكرار (replication) وجود -دارد؟ -There are several master/slave replication options available. These allow only -the master to make database changes and the slave can only do database reads. -The bottom of http://gborg.PostgreSQL.org/genpage?replication_research lists -them. A multi-master replication solution is being worked on at -http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php. -4.28) Ú†Ù‡ گزينه‌هايي براي رمزنگاري وجود دارد؟ - contrib/pgcrypto شامل توابع رمزنگاری زیادی است Ú©Ù‡ - Ù…ÛŒ توان از آنها در دستورات SQL Ø§Ø³ØªÙØ§Ø¯Ù‡ کرد. - برای رمز کردن ارتباط بین client Ùˆ server ØŒ پایگاه - داده ØØªÙ…اً گزینه SSL را بر روی پایگاه داده - ÙØ¹Ø§Ù„ کنیم. - در نسخه 7.3 به بعد کلمات عبور کاربران به طور - اتوماتیک به صورت رمز شده ذخیره Ù…ÛŒ شود ولی - در نسخه های قبلی باید گزینه PASSWORD_ENCRYPTION در - ÙØ§ÛŒÙ„postgresql.conf ÙØ¹Ø§Ù„ کنیم. - Ù…ÛŒ توان پایگاههای داده را روی یک ÙØ§ÛŒÙ„ سیستم - رمزشده نگاهداری کرد - - - -Extending PostgreSQL -5.1) من يك تابع نوشته‌ام. چگونه آن را در psql -اجرا كنم؟ چرا با اجراي آن core dump مي‌گيرم؟ -دلایل مختلÙÛŒ Ù…ÛŒ تواند باعث بروز این مشکل -شود. اما قبل از همه تابع خود را به صورت جدا -تست کنید. -5.2) چگونه مي‌توانم در توليد نوع‌ها Ùˆ توابع -جديد Ùˆ جالب براي PostgreSQL‌ همكاري Ùˆ مشاركت -داشته باشم؟ -کد خود را به گروه پستی pgsql-hackers ارسال کنید. -5.3) چگونه مي‌توانم يك تابع به زبان C بنويسم -كه خروجي آن يك ‌tuple (چند تايي) باشد؟ -در نسخه های 7.3 به بعد یک تابع Ù…ÛŒ تواند یک جدول -را به عنوان خروجی برگرداند. این ویژگی در -توابعی Ú©Ù‡ به زبانهای C Ùˆ PL/PgSQL نوشته Ù…ÛŒ شوند -به طور کامل وجود دارد. راهنما برنامه نویسان -را مطالعه کنید. یک مثال از Ù†ØÙˆÙ‡ برگرداندن یک -جدول به عنوان خروجی در contrib/tablefunc آمده است. -5.4) من يك ÙØ§ÙŠÙ„ منبع را عوض كرده ام چرا در -عمليات كامپيل مجدد آن تغيير ديده نمي‌شود؟ -Makefile برای ÙØ§ÛŒÙ„های include شده وابستگیها را به -درستی نشان نمی دهد. برای اطمینان از اینکه -ÙØ§ÛŒÙ„ÛŒ Ú©Ù‡ عوض کرده اید ØØªÙ…اً دوباره کامپیل Ù…ÛŒ -شود دستور make clean را اجرا کنید. اگر از کامپیلر -gcc Ø§Ø³ØªÙØ§Ø¯Ù‡ Ù…ÛŒ کنید Ù…ÛŒ توانید از گزینه -enable-depend-- در موقع اجرای برنامه configure Ø§Ø³ØªÙØ§Ø¯Ù‡ -کنید این گزینه باعث Ù…ÛŒ شود Ú©Ù‡ وابستگیها به -طور اتوماتیک تولید شود. \ No newline at end of file diff --git a/doc/FAQ_french b/doc/FAQ_french deleted file mode 100644 index 71f19f0095..0000000000 --- a/doc/FAQ_french +++ /dev/null @@ -1,1289 +0,0 @@ - - Foire Aux Questions (FAQ) pour PostgreSQL - - Derni�re mise � jour : vendredi 14 novembre 2004 16:32:47 - - Mainteneur actuel : Bruce Momjian (pgman@candle.pha.pa.us) - - La plus r�cente version de ce document est disponible sur - http://www.PostgreSQL.org/docs/faqs/FAQ.html. - - Les questions sp�cifiques � la plateforme sont r�pondues sur - http://www.PostgreSQL.org/docs/index.html. - _________________________________________________________________ - - Questions g�n�rales - - 1.1) Qu'est ce que PostgreSQL ? Comment le prononcer ? - 1.2) Quelle est la licence de PostgreSQL ? - 1.3) Sous quels environnements Unix PostgreSQL tourne-t-il ? - 1.4) Sous quels environnements non-Unix PostgreSQL tourne-t-il ? - 1.5) O� puis-je me procurer PostgreSQL ? - 1.6) O� puis-je obtenir du support ? - 1.7) Quelle est la derni�re version ? - 1.8) Quelle documentation est disponible ? - 1.9) Comment savoir quels sont les bogues connus ou les - fonctionnalit�s manquantes ? - 1.10) Comment puis-je apprendre le SQL ? - 1.11) PostgreSQL est-il compatible an 2000 ? - 1.12) Comment puis-je rejoindre l'�quipe de d�veloppement ? - 1.13) Comment dois-je soumettre un rapport de bogue ? - 1.14) Comment PostgreSQL se compare-t'il � d'autres SGBD ? - 1.15) Comment puis-je aider financi�rement PostgreSQL ? - - Questions sur le client utilisateur - - 2.1) Y a-t-il des pilotes ODBC pour PostgreSQL ? - 2.2) Quels outils sont disponibles pour utiliser PostgreSQL avec des - pages Web ? - 2.3) PostgreSQL a-t-il une interface graphique ? - 2.4) Quels langages sont disponibles pour communiquer avec - PostgreSQL ? - - Questions administratives - - 3.1) Comment installer PostgreSQL ailleurs que sous /usr/local/pgsql ? - 3.2) Quand je lance postmaster, j'obtiens un Bad System Call ou un - message core dumped. Pourquoi ? - 3.3) Quand je lance postmaster, j'obtiens des erreurs IpcMemoryCreate. - Pourquoi ? - 3.4) Quand je lance postmaster, j'obtiens des erreurs - IpcSemaphoreCreate. Pourquoi ? - 3.5) Comment contr�ler les connexions d'autres machines ? - 3.6) Comment r�gler le moteur de la base de donn�es pour de meilleures - performances ? - 3.7) Quelles fonctionalit�s de d�boguage sont disponibles ? - 3.8) Pourquoi est-ce que j'obtiens des messages Sorry, too many - clients quand je me connecte ? - 3.9) Que contient le r�pertoire pgsql_tmp ? - 3.10) Pourquoi ai-je besoin de faire une sauvegarde des bases et de - restaurer pour mettre a jour les versions de PostgreSQL ? - 3.11) Quels mat�riels dois-je utiliser ? - - Questions fonctionnelles - - 4.1) Quelle est la diff�rence entre curseur binaire et curseur - normal ? - 4.2) Comment faire un SELECT seulement sur les premi�res lignes d'une - requ�te ? Sur une ligne al�atoire ? - 4.3) Comment obtenir une liste des tables ou d'autres choses que je - vois dans psql ? - 4.4) Comment supprime-t-on une colonne d'une table, ou comment - change-t-on son type de donn�es ? - 4.5) Quelle est la taille maximale pour une ligne, une table et une - base de donn�es ? - 4.6) Combien d'espace disque faut-il pour stocker les donn�es d'un - fichier texte typique ? - 4.7) Comment puis-je savoir quels index, tables, bases de donn�es et - utilisateurs sont d�finis ? - 4.8) Mes requ�tes sont lentes ou ne font pas usage des index. - Pourquoi ? - 4.9) Comment puis-je savoir si l'optimiseur �value mes requ�tes ? - 4.10) Qu'est-ce qu'un index R-tree ? - 4.11) Qu'est-ce que l'optimiseur g�n�tique de requ�tes ? - 4.12) Comment puis-je r�aliser des recherches par des expressions - rationnelles ainsi que des recherches non sensibles � la casse ? - Comment puis-je utiliser un index lors de recherches non sensibles � - la casse ? - 4.13) Comment puis-je d�tecter si un champ est NULL dans une requ�te ? - 4.14) Quelle sont les diff�rences entre les nombreux types de - caract�res ? - 4.15.1) Comment puis-je cr�er un champ s�rie, c'est-�-dire - s'incr�mentant automatiquement ? - 4.15.2) Comment puis-je obtenir la valeur d'un SERIAL suite � une - insertion ? - 4.15.3) Est-ce que currval() et nextval() n'am�nent pas des probl�mes - lorsque plusieurs utilisateurs les lancent en m�me temps ? - 4.15.4) Pourquoi mes num�ros de s�quences ne sont pas r�-utilis�s lors - d'une annulation de transaction ? Pourquoi existe-t'il des trous dans - la num�rotation de ma colonne s�quentielle (SERIAL) ? - 4.16) Qu'est-ce qu'un OID? Qu'est-ce qu'un TID ? - 4.17) A quoi correspond certains termes utilis�s avec PostgreSQL ? - 4.18) Pourquoi ai-je l'erreur ERROR: Memory exhausted in - AllocSetAlloc() ? - 4.19) Comment puis-je conna�tre la version de PostgreSQL que - j'utilise ? - 4.20) Pourquoi ai-je invalid large obj descriptor lors d'op�rations - avec des gros objets ? - 4.21) Comment puis-je cr�er une colonne qui aura par d�faut l'heure - actuelle comme valeur ? - 4.22) Pourquoi mes sous-requ�tes utilisant IN sont-elles si lentes ? - 4.23) Comment puis-je r�aliser une jointure externe ? - 4.24) Comment puis-je lancer des requ�tes utilisant plusieurs bases de - donn�es ?? - 4.25) Comment puis-je renvoyer plusieurs lignes ou colonnes � partir - d'une fonction ? - 4.26) Pourquoi ne puis-je pas cr�er/supprimer des tables temporaires - dans les fonctions PL/PgSQL de fa�on stable ? - 4.27) Quelles options de cryptage sont disponibles ? - - Etendre PostgreSQL - - 5.1) J'ai �crit une fonction utilisateur. Lorsque je l'ex�cute avec - psql, pourquoi cela finit-il avec un "dump core" ? - 5.2) Comment puis-je contribuer avec de nouveaux types et fonctions - pour PostgreSQL ? - 5.3) Comment puis-je �crire une fonction C pour r�cup�rer une ligne ? - 5.4) J'ai modifi� un fichier source. Pourquoi la modification - n'est-elle pas visible apr�s la recompilation ? - _________________________________________________________________ - - Questions g�n�rales - - 1.1) Qu'est ce que PostgreSQL ? Comment le prononcer ? - - PostgreSQL se prononce Post-Gres-Q-L. Un fichier audio est disponible - sur http://www.postgresql.org/postgresql.mp3 pour ceux souhaitant - entendre la prononciation. - - PostgreSQL est une am�lioration du syst�me de gestion de bases de - donn�es POSTGRES (et est toujours quelque fois appel� "Postgres"), un - prototype de recherche de SGBD de prochaine g�n�ration. PostgreSQL - garde le puissant mod�le de donn�es et les types de donn�es riches de - POSTGRES, mais remplace le langage de requ�tes PostQuel par un - sous-ensemble �tendu de SQL. PostgreSQL est gratuit et les sources - complets sont disponibles. - - PostgreSQL est �crit par une �quipe de d�veloppeurs qui sont tous - inscrits � la liste de diffusion de d�veloppement de PostgreSQL. Le - coordinateur actuel est Marc G. Fournier (scrappy@PostgreSQL.org et - voir la section 1.6 pour contacter les d�veloppeurs). Cette �quipe est - responsable de tout le d�veloppement de PostgreSQL. C'est un projet - soutenu par une communaut� sans �tre contr�l� par une soci�t�. Pour y - contribuer, voir la FAQ des d�veloppeurs sur - http://www.postgresql.org/docs/faqs/FAQ_DEV.html. - - Les auteurs de PostgreSQL 1.01 �taient Andrew Yu et Jolly Chen. - Beaucoup d'autres personnes ont contribu� au portage, aux tests, au - d�boguage et � l'am�lioration du code. Le code de Postgres original, - duquel PostgreSQL est d�riv�, �tait le fruit de l'effort de nombreux - �tudiants dipl�m�s et non dipl�m�s, et de programmeurs travaillant - sous la direction du Professeur Michael Stonebraker � l'universit� de - Californie, Berkeley. - - Le nom original du logiciel � Berkeley �tait Postgres. Quand le SQL - fut ajout� en 1995, le nom a d� �tre chang� en Postgres95. Fin 1996, - le nom fut chang� en PostgreSQL. - - 1.2) Quelle est la licence de PostgreSQL ? - - PostgreSQL est distribu� sous la licence suivante : - - PostgreSQL Data Base Management System - - Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group - Portions Copyright (c) 1994-6 Regents of the University of California - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose, without fee, and without a written - agreement is hereby granted, provided that the above copyright notice - and this paragraph and the following two paragraphs appear in all - copies. - - IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY - FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, - INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND - ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN - ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, - INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE - PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF - CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, - UPDATES, ENHANCEMENTS, OR MODIFICATIONS. - - La licence ci-dessus est la licence BSD, une licence open-source - classique. - - 1.3) Sous quels environnements Unix PostgreSQL tourne-t-il ? - - En g�n�ral, tout environnement compatible Unix moderne devrait pouvoir - faire fonctionner PostgreSQL. Les environnements qui ont �t� test�s - explicitement sont list�s dans les instructions d'installation. - - 1.4) Sous quels environnements non Unix PostgreSQL fonctionne-t'il ? - - � partir de la version 8.0, PostgreSQL fonctionne nativement sur les - syst�mes d'exploitation Microsoft Windows � base NT comme Win2000, - WinXP et Win2003. Un installeur est disponible sur - http://pgfoundry.org/projects/pginstaller. - - Il existe aussi un port sur Novell Netware sur - http://forge.novell.com. - - 1.5) O� puis-je me procurer PostgreSQL ? - - Le site FTP anonyme principal de PostgreSQL est - ftp://ftp.PostgreSQL.org/pub. Pour les sites miroirs, voir notre site - web principal. - - 1.6) O� puis-je obtenir du support ? - - La liste de diffusion principale est pgsql-general@PostgreSQL.org. - Elle est disponible pour discuter de sujets en rapport avec - PostgreSQL. Pour s'y inscrire, il faut envoyer un courriel avec les - lignes suivantes dans le corps du message (pas dans la ligne du - sujet) : - subscribe - end - - � pgsql-general-request@PostgreSQL.org. - - Il existe aussi un recueil de la liste. Pour s'y inscrire, envoyez un - courriel � pgsql-general-digest-request@PostgreSQL.org avec dans le - corps : - subscribe - end - - Les recueils sont envoy�s aux membres de cette liste d�s que la liste - principale a re�u 30 Ko de messages. - - Une liste de diffusion de bogues est disponible. Pour s'y inscrire, - envoyer un courriel � pgsql-bugs-request@PostgreSQL.org avec dans le - corps : - subscribe - end - - Une liste de diffusion pour les d�veloppeurs est aussi disponible. - Pour s'y inscrire, envoyez un courriel � - pgsql-hackers-request@PostgreSQL.org avec dans le corps : - subscribe - end - - Vous pouvez trouver d'autres listes et informations sur PostgreSQL sur - le site web de PostgreSQL : - - http://www.PostgreSQL.org - - Il y a aussi un canal IRC sur Freenode et EFNet, le canal #PostgreSQL. - Vous pouvez utiliser la commande Unix irc -c '#PostgreSQL' "$USER" - irc.phoenix.net ou irc -c '#PostgreSQL' "$USER" irc.freenode.net. - - Une liste de soci�t�s pouvant fournir un support commercial est - disponible sur http://techdocs.postgresql.org/companies.php. - - 1.7) Quelle est la derni�re version ? - - La derni�re version de PostgreSQL est la version 7.4.5. - - Nous projetons de sortir une version majeure tous les six � huit mois. - - 1.8) Quelle documentation est disponible ? - - Plusieurs manuels, pages de manuel ainsi que des petits exemples de - test sont inclus dans la distribution. Voir le r�pertoire /doc. Vous - pouvez aussi acc�der aux manuels en ligne sur - http://www.PostgreSQL.org/docs. - - Deux livres sur PostgreSQL sont disponibles en ligne sur - http://www.PostgreSQL.org/docs/awbook.html et - http://www.commandprompt.com/ppbook/. Il y a une liste de livres sur - PostgreSQL pouvant �tre achet�s sur - http://techdocs.PostgreSQL.org/techdocs/bookreviews.php. Il y a aussi - une collection d'articles techniques sur PostgreSQL sur - http://techdocs.PostgreSQL.org/. - - psql poss�de des commandes \d pratiques montrant des informations sur - les types, op�rateurs, fonctions, aggr�gats, etc. - - Notre site web contient encore plus de documentations. - - 1.9) Comment savoir quels sont les bogues connus ou les fonctionnalit�s - manquantes ? - - PostgreSQL supporte un sous-ensemble �tendu de SQL-92. Voir notre - liste TODO pour les bogues connus, les fonctionnalit�s manquantes et - les plans pour le futur. - - 1.10) Comment puis-je apprendre le SQL ? - - Le livre PostgreSQL sur http://www.PostgreSQL.org/docs/awbook.html - enseigne le SQL. Il existe un autre livre PostgreSQL sur - http://www.commandprompt.com/ppbook. Il existe de bons tutoriels sur - http://www.intermedia.net/support/sql/sqltut.shtm, - http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM - et http://sqlcourse.com. - - Un autre (en anglais uniquement) "Teach Yourself SQL in 21 Days, - Second Edition" se trouve sur - http://members.tripod.com/er4ebus/sql/index.htm - - Nombre de nos utilisateurs aiment The Practical SQL Handbook, Bowman, - Judith S., et al., Addison-Wesley. D'autres aiment The Complete - Reference SQL, Groff et al., McGraw-Hill. - - 1.11) PostgreSQL est-il compatible an 2000 ? - - Oui, nous manipulons facilement les dates apr�s et avant l'an 2000. - - 1.12) Comment puis-je rejoindre l'�quipe de d�veloppement ? - - Tout d'abord, t�l�chargez les derniers sources et lisez la - documentation pour les d�veloppeurs sur notre site web ou bien dans la - distribution. Ensuite, inscrivez-vous aux listes de diffusion - pgsql-hackers et pgsql-patches. Et pour finir, soumettez des - correctifs de grande qualit� sur pgsql-patches. - - Environ une douzaine de personnes ont des droits de modification sur - l'archive CVS de PostgreSQL. Ils ont chacun soumis tellement de - correctifs de qualit� qu'il �tait devenu impossible aux d�veloppeurs - de tenir la cadence et nous avions confiance dans le qualit� des - correctifs qu'ils soumettaient. - - 1.13) Comment dois-je soumettre un rapport de bogue ? - - Merci de visiter la page PostgreSQL BugTool sur - http://www.PostgreSQL.org/bugs/bugs.php, qui donne des indications sur - la fa�on de soumettre un rapport de bogue. - - De m�me, v�rifiez notre site ftp ftp://ftp.PostgreSQL.org/pub pour - voir s'il existe une version PostgreSQL plus r�cente ou des - correctifs. - - 1.14) Comment PostgreSQL se compare-til � d'autres SGBD ? - - Il y a plusieurs mani�res de mesurer un logiciel : les - fonctionnalit�s, les performances, la fiabilit�, le support, et le - prix. - - Fonctionnalit�s - PostgreSQL poss�de la plupart des fonctionnalit�s pr�sentes - dans les SGBD commerciaux, comme les transactions, les requ�tes - imbriqu�es, les d�clencheurs, les vues, l'int�grit� - r�f�rentielle par cl�s �trang�res, et le verrouillage - sophistiqu�. Nous avons des fonctionnalit�s qu'ils n'ont pas, - comme les types d�finis par l'utilisateur, l'h�ritage, les - r�gles, et le contr�le de concurrence par multi-versionnage - pour r�duire les contentions de verrouillage. - - Performances - PostgreSQL a des performances similaires aux autres bases de - donn�es commerciales et open source. Il est plus rapide pour - certaines op�rations, plus lent pour d'autres. Par rapport � - MySQL ou d'autres SGBD plus l�ger, nous sommes plus rapides - pour de nombreux utilisateurs, des requ�tes complexes et une - charge pour les requ�tes de lecture/�criture. MySQL est plus - rapide pour des requ�tes SELECT simples effectu�es par quelques - utilisateurs. Bien s�r, MySQL ne poss�de aucune des - fonctionnalit�s de la section Fonctionnalit�s ci-dessus. - PostgreSQL est construit pour la fiabilit� et les - fonctionnalit�s et nous continuons � am�liorer les performances - � chaque version. Il y a une page web int�ressante qui compare - PostgreSQL � MySQL sur - http://openacs.org/philosophy/why-not-mysql.html. De plus, - MySQL est une soci�t� qui distribue son produit via l'open - source et requiert une licence commerciale pour les logiciels - propri�taires, donc pas une communaut� de d�veloppement open - source comme PostgreSQL. - - Fiabilit� - Nous somme conscients qu'un SGBD doit �tre fiable ou bien il - est inutile. Nous faisons le maximum pour sortir des versions - bien test�es, du code stable ne contenant qu'un minimum de - bogues. Chaque version a au moins un mois de tests, et notre - historique de versions montre que nous pouvons fournir des - versions stables et robustes, pr�tes pour une utilisation en - environnement de production. Nous pensons que nous nous - comparons favorablement aux autres bases de donn�es dans ce - domaine. - - Support - Nos listes de diffusion offrent un contact avec un large groupe - de d�veloppeurs et d'utilisateurs afin d'aider � la r�solution - des probl�mes rencontr�s. Nous ne pouvons garantir un correctif - mais les SGBD commerciaux ne le garantissent pas toujours non - plus. L'acc�s direct aux d�veloppeurs, � la communaut� - d'utilisateurs, aux manuels, et au code source, fait du support - pour PostgreSQL un support sup�rieur aux autres SGBD. Un - support commercial par incident est disponible pour ceux qui en - ont le besoin (voir la section 1.6 de la FAQ). - - Prix - Nous sommes gratuits pour tous les usages, commerciaux et non - commerciaux. Vous pouvez inclure notre code dans vos produits - sans limitation, except�es celles cit�es dans notre licence de - type BSD donn�e plus haut. - - 1.15) Comment puis-je aider financi�rement PostgreSQL ? - - PostgreSQL poss�de une infrastructure de premi�re classe depuis le - d�but en 1996. Ceci gr�ce � Marc Fournier, qui a cr�� et g�r� cette - infrastructure des ann�es durant. - - Une infrastructure de qualit� est importante pour un projet - open-source. Cela permet d'emp�cher l'�parpillement qui ralentirait - beaucoup l'avancement du projet. - - Bien s�r, cette infrastructure n'est pas donn�e. Elle requiert un - certain nombre de d�penses mensuelles ou ponctuelles. Si vous ou votre - soci�t� peut donner de l'argent pour soutenir cet effort, merci de - consulter la page web http://store.pgsql.com/shopping/ et de faire une - donation. - - Bien que la page web mentionne PostgreSQL, Inc, les contributions sont - exclusivement utilis�es pour soutenir le projet PostgreSQL et ne - soutiennent aucune soci�t� que ce soit. Si vous le pr�f�rez, vous - pouvez aussi envoyer un ch�que � l'adresse de contact. - _________________________________________________________________ - - De plus, si vous avez une histoire de succ�s avec PostgreSQL, merci de - la soumettre � notre site d'�vang�lisation sur - http://advocacy.postgresql.org. - - Questions sur le client utilisateur - - 2.1) Existe-t'il des pilotes ODBC pour PostgreSQL ? - - Il y a deux pilotes ODBC disponibles, PsqlODBC et OpenLink ODBC. - - Vous pouvez t�l�charger PsqlOBDC depuis - http://gborg.postgresql.org/project/psqlodbc/projdisplay.php. - - OpenLink ODBC peut �tre obtenu depuis http://www.openlinksw.com. Il - fonctionne avec leur logiciel client ODBC standard, vous aurez donc - PostgreSQL ODBC sur toutes les plateformes client qu'ils supportent - (Win, Mac, Unix, VMS). - - Ils vendront probablement ce produit aux gens qui recherchent une - qualit� de support professionnelle mais une version freeware sera - toujours disponible. Merci d'envoyer vos questions � - postgres95@openlink.co.uk. - - 2.2) Quels outils sont disponibles pour utiliser PostgreSQL avec des pages - Web ? - - Une bonne introduction aux pages Web adoss�s � une base de donn�es se - trouve � http://www.webreview.com - - Pour l'int�gration Web, PHP est une excellente interface. Elle se - trouve � http://www.php.net. - - Pour les cas complexes, beaucoup utilisent l'interface Perl et CGI.pm - ou mod_perl. - - 2.3) PostgreSQL a-t-il une interface graphique ? - - Oui, il y a plusieurs interfaces graphiques disponibles pour - PostgreSQL, dont PgAccess http://www.pgaccess.org), PgAdmin III - (http://www.pgadmin.org), RHDB Admin (http://sources.redhat.com/rhdb/ - et Rekall ( http://www.thekompany.com/products/rekall/, propri�taire). - Il y a aussi PhpPgAdmin ( http://phppgadmin.sourceforge.net/ ), une - interface Web pour PostgreSQL. - - Voir http://techdocs.postgresql.org/guides/GUITools pour une liste - plus d�taill�e. - - 2.4) Quels langages sont disponibles pour communiquer avec PostgreSQL ? - - La plupart des langages de programmation couramment utilis�s ont une - interface pour PostgreSQL. V�rifiez la liste des modules de votre - langage. - - Les interfaces ci-dessous sont incluses dans la distribution : - * C (libpq) - * Embedded C (ecpg) - * Java (jdbc) - * Python (PyGreSQL) - * TCL (libpgtcl) - - Interfaces suppl�mentaires disponibles sur http://gborg.postgresql.org - dans la section Drivers/Interfaces - _________________________________________________________________ - - Questions Administratives - - 3.1) Comment installer PostgreSQL ailleurs que sous /usr/local/pgsql ? - - Il faut sp�cifier l'option --prefix lors du lancement de configure. - - 3.2) Quand je lance postmaster, j'obtiens un Bad System Call ou un message - core dumped . Pourquoi ? - - Cela peut �tre d� � une vari�t� de probl�mes mais v�rifiez d'abord que - vous avez les extensions System V install�es pour votre noyau. - PostgreSQL n�cessite le support noyau pour la m�moire partag�e et les - s�maphores. - - 3.3) Quand je lance postmaster, j'obtiens des erreurs IpcMemoryCreate. - Pourquoi ? - - Soit vous n'avez pas configur� correctement la m�moire partag�e dans - votre noyau, soit vous devez augmenter la m�moire partag�e disponible - dans le noyau. Le montant exact dont vous avez besoin d�pend de votre - architecture et du nombre de tampons et de processus que vous avez - configur� pour postmaster. Pour la plupart des syst�mes avec un nombre - par d�faut de tampons et de processus, vous aurez besoin d'un minimum - d'environ 1 Mo. Voir le chapitre Administration du manuel PostgreSQL - pour des informations plus d�taill�es sur la m�moire partag�e et les - s�maphores. - - 3.4) Quand je lance postmaster, j'obtiens des erreurs IpcSemaphoreCreate. - Pourquoi ? - - Si le message d'erreur est IpcSemaphoreCreate: semget failed (No space - left on device) alors votre noyau n'est pas configur� avec - suffisamment de s�maphores. PostgreSQL a besoin d'un s�maphore par - processus serveur potentiel. Une solution provisoire est de lancer - postmaster avec une plus petite limite sur le nombre de processus - serveur. Utilisez l'option -N avec un param�tre inf�rieur au choix par - d�faut de 32. Une solution permanente est d'augmenter les param�tres - SEMMNS et SEMMNI de votre noyau. - - Des s�maphores inop�rantes peuvent aussi provoquer des plantages - pendant de gros acc�s � la base de donn�es. - - Si le message d'erreur est autre chose, vous n'avez peut-�tre pas du - tout le support des s�maphores dans votre noyau. Voir le chapitre - Administration du manuel PostgreSQL pour des informations plus - d�taill�es sur la m�moire partag�e et les s�maphores. - - 3.5) Comment contr�ler les connexions d'autres machines ? - - Par d�faut, PostgreSQL autorise seulement les connexions de la machine - locale en utilisant les sockets de domaine Unix ou les connexions - TCP/IP. D'autres machines ne seront pas capables de se connecter sauf - si vous modifiez listen_addresses dans postgresql.conf et activez une - authentification bas�e sur l'h�te en modifiant le fichier - $PGDATA/pg_hba.conf en accord. - - 3.6) Comment r�gler le moteur de la base de donn�es pour de meilleures - performances ? - - Des index acc�l�reront les requ�tes. La commande EXPLAIN ANALYZE vous - permet de voir comment PostgreSQL traite votre requ�te et quels index - sont utilis�s. - - Si vous faites beaucoup d'insertions (instruction INSERT), envisagez - de les faire en une fois en utilisant la commande COPY. Ceci est plus - rapide que des commandes INSERTS individuelles. Deuxi�ment, les - requ�tes qui ne sont pas dans des blocs de transaction BEGIN - WORK/COMMIT sont consid�r�s comme �tant dans leur propre transaction. - Envisagez de faire plusieurs instructions dans un seul bloc de - transaction. Ceci r�duira la surcharge apport�e par les transactions. - Aussi, envisagez d'abandonner et de recr�er des index lors de grosses - modifications de donn�es. - - Il y a plusieurs options d'optimisations. Vous pouvez d�sactiver - fsync() en lan�ant postmaster avec l'option -o -F. Ceci emp�chera les - fsync()s d'�crire sur disque apr�s toute transaction. - - Vous pouvez utiliser l'option -B de postmaster pour augmenter le - nombre de tampons de m�moire partag�e utilis�s par les processus - serveurs. Si vous fixez ce param�tre trop haut, postmaster ne se - lancera pas car vous avez d�pass� la limite de votre noyau sur la - quantit� de m�moire partag�e. Chaque tampon fait 8 Ko et le choix par - d�faut est de 64 tampons. - - Vous pouvez utiliser l'option serveur -S pour augmenter la quantit� - maximale de m�moire utilis�e par les processus serveurs pour des tris - temporaires. La valeur de -S est mesur� en kilooctets et le choix par - d�faut est de 512 (c'est-�-dire 512 Ko). - - Vous pouvez utiliser la commande CLUSTER pour regrouper vos donn�es en - tables pour correspondre � un index. Voir la page de manual CLUSTER - pour plus de d�tails. - - 3.7) Quelles fonctionalit�s de d�boguage sont disponibles ? - - PostgreSQL a plusieurs fonctionalit�s qui permettent de recueillir des - informations de statut qui peuvent �tre utile pour des intentions de - d�boguage. - - D'abord, en lan�ant configure avec l'option --enable-cassert, beaucoup - d'assert()s surveillent le serveur et arr�tent le programme quand - quelque chose d'inattendu arrive. - - Postmaster et postgres ont tous deux plusieurs options de d�boguage de - disponible. D'abord, quand vous lancez postmaster, v�rifiez que vous - envoyez les sorties standard et d'erreur dans un fichier de traces - comme : - cd /usr/local/pgsql - ./bin/postmaster >server.log 2>&1 & - - Ceci va cr�er un fichier server.log dans le r�pertoire racine de - PostgreSQL. Ce fichier contient des informations utiles sur les - probl�mes ou erreurs rencontr�s par le serveur. Postmaster dispose - d'une option -d qui permet de rapporter des informations encore plus - d�taill�es d'�tre rapport�es. L'option -d prend un num�ro qui sp�cifie - le niveau de d�boguage. Faites attention au fait que des valeurs - �l�v�es de niveau de d�boguage g�nerent des fichiers de traces - volumineux. - - Si postmaster ne tourne pas, vous pouvez lancer le serveur postgres de - la ligne de commande et taper votre requ�te SQL directement. Ceci est - recommand� seulement pour des fonctions de d�boguage. Notez qu'un - retour chariot termine la requ�te, pas un point-virgule. Si vous - compilez avec les symboles de d�boguage, vous pouvez utiliser un - d�bogueur pour voir ce qui se passe. Parce que le serveur n'a pas �t� - lanc� par postmaster, il ne tourne pas dans un environnement identique - et les probl�mes d'interaction de verrouillage/serveur ne peuvent �tre - dupliqu�s. - - Si postmaster est en train de tourner, lancez psql dans une fen�tre - puis trouvez le PID du processus postgres utilis� par psql. Utilisez - un d�bogueur pour l'attacher au PID postgres. Vous pouvez mettre un - point d'arr�t dans le d�bogueur et envoyez des requ�tes de psql. Si - vous d�boguez le d�marrage de postgres, vous pouvez mettre - PGOPTIONS="-W n", puis lancez psql. Ceci va retarder le d�marrage de n - secondes pour que vous puissiez attacher un d�bogueur au processus, - fixer des points d'arr�t et continuer la s�quence de d�marrage. - - Le programme postgres a les options -s, -A et -t qui peuvent �tre - utile pour des mesures de d�boguage et de performance. - - Vous pouvez compiler avec les options de performance pour voir quelles - fonctions prennent du temps d'ex�cution. Les fichiers de gestion du - serveur seront d�pos�s dans le r�pertoire pgsql/data/base/nom_db. Les - fichiers de gestion clients seront mis dans le r�pertoire actuel du - client. Linux requiert une compilation avec -DLINUX_PROFILE pour une - meilleure gestion. - - 3.8) Pourquoi est-ce que j'obtiens des messages Sorry, too many clients - quand je me connecte ? - - Vous pouvez augmenter la limite de postmaster sur le nombre de - processus serveur concurrents qu'il peut lancer. - - La limite par d�faut est de 32 processus. Vous pouvez l'augmenter en - relan�ant postmaster avec une valeur -N appropri�e ou en modifiant - postgresql.conf. - - Tenez compte du fait que si vous fixez -N plus grand que 32, vous - devez aussi augmenter -B au-dela de sa valeur par d�faut 64 ; -B doit - valoir au moins deux fois -N et probablement plus pour une meilleure - performance. Pour de grand nombres de processus serveurs vous aurez - probablement aussi augmenter plusieurs parametres de configuration du - noyau Unix. Les choses a v�rifier incluent la taille maximale des - blocs de m�moire partag�e, SHMMAX ; le nombre maximal de s�maphores, - SEMMNS et SEMMNI ; le nombre maximal de processus, NPROC ; le nombre - maximal de processus par utilisateur, MAXUPRC ; et le nombre maximal - de fichiers ouverts, NFILE et NINODE. La raison pour laquelle - PostgreSQL a une limite sur le nombre de processus serveurs autoris�s - est pour que votre syst�me ne tombe pas � court de ressources. - - 3.9) Que contient le r�pertoire pgsql_tmp ? - - Ce r�pertoire contient des fichiers temporaires g�n�r�s par le moteur - de requ�te. Par exemple, si un tri doit �tre fait pour satisfaire un - ORDER BY et que ce tri requiert plus de place que le param�tre -S du - serveur n'autorise, alors des fichiers temporaires seront cr��s pour - contenir les donn�es n�cessaires. - - Les fichiers temporaires sont d'habitude effac�s automatiquement mais - peuvent rester si un serveur s'arr�te brutalement pendant un tri. Un - arr�t et un red�marrage de postmaster effacera les fichiers dans ces - r�pertoires. - - 3.10) Pourquoi est-ce que j'ai besoin de faire une sauvegarde des bases et - de restaurer pour mettre a jour les versions de PostgreSQL ? - - L'�quipe PostgreSQL ne fait que des changements mineurs entre des - versions mineurs, donc mettre � jour de 7.2 vers 7.2.1 ne n�cessitera - pas de sauvegarde et de restauration. Par contre, les sorties majeures - (c'est-�-dire de 7.2 vers 7.3) changent souvent le format interne des - tables syst�mes et des fichiers de donn�es. Ces modifications sont - souvent complexes alors nous ne gardons pas de compatibilit� - descendante pour les fichiers de donn�es. Une sauvegarde exportera les - donn�es dans un format g�n�rique qui peut ensuite �tre charg� dans le - nouveau format interne. - - Dans les sorties o� le format sur disque ne change pas, le script - pg_upgrade peut �tre utilis� pour mettre � jour sans - sauvegarde/restauration. Les notes de sorties pr�cisent si pg_upgrade - est disponible pour la sortie. - - 3.11) Quels mat�riels dois-je utiliser ? - - Comme le mat�riel PC est compatible en grosse partie, les gens ont - tendance � croire que tous les mat�riels PC sont de m�me qualit�. Ce - n'est pas le cas. La RAM ECC, le SCSI et les cartes-m�re de qualit� - sont plus fiables et ont de meilleurs performances qu'un mat�riel - moins co�teux. PostgreSQL fonctionnera sur � peu pr�s tout mat�riel - mais si la fiabilit� et la performance sont importantes pour vous, il - est rus� de bien consid�rer les options mat�rielles. Nos listes de - diffusion peuvent �tre utilis�es pour discuter des options mat�riels. - _________________________________________________________________ - - Questions fonctionnelles - - 4.1) Quelle est la diff�rence entre curseur binaire et curseur normal ? - - Voir la page DECLARE du manuel pour une description. - - 4.2) Comment faire un SELECT seulement sur les premi�res lignes d'une - requ�te ? Sur une ligne al�atoire ? - - Voir la page FETCH du manuel ou utiliser SELECT ... LIMIT.... - - Il se peut que l'int�gralit� de la requ�te doive �tre �valu�e, m�me si - vous voulez seulement les premi�res lignes. Envisagez d'utiliser une - requ�te avec une clause ORDER BY. S'il existe un index correspondant � - l'ORDER BY, PostgreSQL peut n'�valuer que les premi�res lignes, sinon - l'int�gralit� de la requ�te peut �tre �valu�e, jusqu'� g�n�rer les - lignes d�sir�es. - - Pour faire un SELECT sur une ligne al�atoire : - SELECT colonne - FROM table - ORDER BY random() - LIMIT 1; - - 4.3) Comment obtenir une liste des tables ou d'autres objets que je vois - dans psql ? - - Utilisez la commande \dt pour voir les tables dans psql. Pour une - liste compl�te de commandes � l'int�rieur de psql, vous pouvez - utiliser \?. Autrement, vous pouvez lire le code source de psql dans - le fichier pgsql/src/bin/psql/describe.c. Il contient des commandes - SQL qui g�n�rent le contenu des commandes anti-slash de psql. Vous - pouvez aussi lancer psql avec l'option -E, afin qu'il imprime les - requ�tes qu'il utilise pour ex�cuter les commandes que vous lui - passez. PostgreSQL fournit aussi une interface d'informations sur le - sch�ma compatible avec SQLi que vous pouvez interroger des - informations sur la base de donn�es. - - 4.4) Comment supprime-t-on une colonne d'une table, ou comment change-t-on - son type de donn�es ? - - La fonction DROP COLUMN a �t� ajout�e dans la version 7.3 avec ALTER - TABLE DROP COLUMN. Pour les versions pr�c�dentes, vous pouvez faire : - BEGIN; - LOCK TABLE ancienne_table; - SELECT ... -- s�lectionnez toutes les colonnes sauf celle � supprimer - INTO TABLE nouvelle_table - FROM ancienne_table; - DROP TABLE ancienne_table; - ALTER TABLE nouvelle_table RENAME TO ancienne_table; - COMMIT; - - Pour changer le type de donn�es d'une colonne, faites : - BEGIN; - ALTER TABLE table ADD COLUMN nouvelle_colonne nouveau_type_de_donnees; - UPDATE table SET nouvelle_colonne = CAST(ancienne_colonne AS nouveau_type_de_donnees); - ALTER TABLE table DROP COLUMN ancienne_colonne; - COMMIT; - - Apr�s, vous pouvez faire VACUUM FULL tab pour r�cup�rer l'espace - disque utilis� par les lignes expir�es. - - 4.5) Quelle est la taille maximale pour une ligne, une table, une base de - donn�es ? - - Les limites sont : - Taille maximum pour une base de donn�es illimit�e (il existe des basesde 32 To) - Taille maximum pour une table 32 To - Taille maximum pour une ligne 1,6 To - Taille maximum pour un champ 1 Go - Nombre maximum de lignes dans une table illimit� - Nombre maximum de colonnes dans une table 250-1600, selon le type de colonnes - Nombre maximum d'index sur une table illimit� - - Bien s�r, ces valeurs ne sont pas vraiment illimit�e, elles sont - limit�es par l'espace disque disponible, ainsi que par l'espace de - m�moire et de swap. Les performances peuvent se d�grader si ces - valeurs sont inhabituellement grandes. - - La taille maximum des tables (32 To) ne n�cessite pas que le syst�me - d'exploitation supporte les grands fichiers. Les grandes tables sont - stock�es sous forme de fichiers multiples de 1 Go, donc les limites de - taille du syst�me de fichier ne sont pas importantes. - - La taille maximum des tables et le nombre maximum de colonnes peuvent - �tre quadripl�s, si la taille des blocs par d�faut est augment�e � - 32 Ko. - - 4.6) Combien d'espace disque faut-il pour stocker les donn�es d'un fichier - texte typique ? - - Une base de donn�es PostgreSQL peut utiliser jusqu'� cinq fois - l'espace n�cessaire pour stocker les donn�es d'un fichier texte. - - A titre d'exemple, consid�rez un fichier de 100 000 lignes, comportant - un entier et une cha�ne de description sur chaque ligne. Supposons que - la cha�ne soit longue en moyenne de 20 octets. Le fichier texte serait - de 2,8 Mo. La taille du fichier d'une base de donn�es PostgreSQL peut - �tre estim�e � 6,4 Mo : - 32 octets: chaque ligne (approximation) - 24 octets: un champ 'entier' et un champ 'texte' - + 4 octets: pointeur vers le tuple sur la page - ---------------------------------------- - 60 octets par ligne - - La taille des pages de donn�es dans PostgreSQL est de 8192 octets (8 KO), donc : - - 8192 octets par page - ---------------------- = 136 lignes par page de base de donn�es (arrondi � l'entier inf�rieur) - 60 octets par ligne - - 100000 lignes de donn�es - ------------------------- = 735 pages de base de donn�es (arrondi � l'entier sup�rieur) - 128 lignes par page - -735 pages de base de donn�es * 8192 octets par page = 6 021 120 octets (6,4 Mo) - - Les index utilisent moins d'espace, mais ils contiennent les donn�es - index�es, ils peuvent donc �galement �tre grands. - - Les NULL sont stock�s sous forme de bitmap, aussi utilisent-ils tr�s - peu d'espace. - - 4.7) Comment puis-je savoir quels index, tables, bases de donn�es et - utilisateurs sont d�finis ? - - psql dispose de plusieurs commandes commen�ant par un anti-slash pour - retrouver ces informations. Utilisez \? pour les conna�tre. Il existe - aussi des tables syst�mes, qui commencent par pg_ et qui les d�crivent - �galement. Aussi, psql -l liste toutes les bases de donn�es. - - Essayez �galement le fichier pgsql/src/tutorial/syscat.source. Il - illustre un grand nombre de commandes SELECT n�cessaires pour - r�cup�rer l'information des tables syst�me de la base de donn�es. - - 4.8) Mes requ�tes sont lentes ou ne font pas usage des index. Pourquoi ? - - Les index ne sont pas automatiquement utilis�s par chaque requ�te. Ils - sont utilis�s uniquement si la table est plus grande qu'une certaine - taille, et si la requ�te s�lectionne seulement un faible pourcentage - des lignes de la table. Ceci est d� au fait qu'un acc�s disque - al�atoire caus� par un parcours d'index peut �tre plus lent qu'une - simple lecture de la table, ou parcours s�quentiel - - Pour d�terminer si un index devrait �tre utilis�, PostgreSQL a besoin - des statistiques de la table. Ces statistiques sont collect�es en - lan�ant VACUUM ANALYZE ou simplement ANALYZE. Avec les statistiques, - l'optimiseur sait combien de lignes se trouvent dans la table et peut - mieux d�terminer s'il faut utiliser l'index. Les statistiques sont - �galement utiles pour d�terminer l'ordre optimal des op�rations de - jointure. La collecte des statistiques devrait �tre effectu�e - r�guli�rement lorsque le contenu de la table change. - - Les index ne sont normalement pas utilis�s pour les clauses ORDER BY - ou pour les jointures. Un parcours s�quentiel suivi d'un tri explicite - est habituellement plus rapide qu'un parcours d'index pour une table - importante. Toutefois, LIMIT combin� avec ORDER BY utilisera souvent - un index parce que seulement une petite partie de la table est - renvoy�e. En fait, bien que MAX() et MIN() n'utilisent pas les index, - il est possible de retrouver ces valeurs en utilisant un index avec - ORDER BY et LIMIT : - SELECT colonne - FROM table - ORDER BY colonne [ DESC ] - LIMIT 1; - - Si vous pensez que l'optimiseur choisit par erreur un parcours - sequentiel, utilisez SET enable_seqscan TO 'off' et lancez des tests - pour voir si le parcours d'index est effectivement plus rapide. - - Lorsque vous utilisez des caract�res joker tels que LIKE ou ~, les - index peuvent seulement �tre utilis�s dans certaines circonstances : - * Le d�but de la cha�ne de recherche doit �tre ancr� au d�part de la - cha�ne, c'est-�-dire - + Les mod�les pour LIKE ne doivent pas commencer par %. - + Les mod�les d'expression r�guli�re pour ~ doivent commencer - par ^. - * La cha�ne de recherche ne peut pas commencer par une classe de - caract�res, c'est-�-dire [a-e]. - * Les recherches sans casse comme ILIKE et ~* n'utilisent pas les - index. Utilisez plut�t les index fonctionnels, d�crit dans la - section 4.12. - * La locale C par d�faut doit �tre utilis�e lors de initdb. - - Dans les versions ant�rieures � la 8.0, les indexs ne peuvent souvent - pas �tre utilis�s sauf si les types de donn�es correspondent - exactement au type de la colonne de l'index. Ceci est particuli�rement - vrai pour les index de colonnes de type int2, int8 et numeric. - - 4.9) Comment puis-je savoir si l'optimiseur �value mes requ�tes ? - - Voir la page EXPLAIN du manuel. - - 4.10) Qu'est-ce qu'un index R-tree ? - - Un index R-tree est utilis� pour l'indexation des donn�es spatiales. - Un index de hachage ne permet pas les recherches par plage. Un index - B-tree peut seulement faire des recherches sur une dimension. Les - index R-tree peuvent traiter des donn�es multi-dimensionnelles. Par - exemple, si un index R-tree peut �tre construit sur un attribut de - type point, le syst�me peut plus efficacement g�rer les requ�tes du - type "S�lection de tous les points d'un rectangle". - - L'article de r�f�rence qui d�crit le syst�me R-tree original est : - - Guttman, A. "R-trees: A Dynamic Index Structure for Spatial - Searching." Proceedings of the 1984 ACM SIGMOD Int'l Conf on Mgmt of - Data, 45-57. - - Vous pouvez �galement trouver ce papier dans le livre de Stonebraker - "Readings in Database Systems". - - Les index R-tree int�gr�s peuvent prendre en charge les polyg�nes et - les bo�tes. En th�orie, les R-trees peuvent �tre �tendus � un plus - grand nombre de dimensions. En pratique, l'extension des R-trees - requiert pas mal de travail et nous n'avons pour le moment aucune - documentation sur la fa�on de proc�der. - - 4.11) Qu'est-ce que l'optimiseur g�n�tique de requ�tes ? - - Le module GEQO (acronyme de GEnetic Query Optimizer) acc�l�re - l'optimisation des requ�tes lors de jointures de nombreuses tables par - un algorithme g�n�tique (GA). Il permet la gestion des grosses - requ�tes de jointures en utilisant une recherche non exhaustive. - - 4.12) Comment puis-je r�aliser des recherches sur des expressions - rationnelles ainsi que des recherches non sensibles � la casse ? Comment - puis-je utiliser un index lors de recherches non sensibles � la casse ? - - L'op�rateur ~ r�alise des recherches d'expressions rationnelles et ~* - le fait sans tenir compte de la casse. La variante de LIKE non - sensible � la casse est ILIKE. - - Des comparaisons d'�galit� non sensibles � la casse sont - habituellement exprim�es de cette fa�on : - SELECT * - FROM table - WHERE lower(colonne) = 'abc'; - - Ceci n'utilisera pas un index standard. N�anmoins, si vous cr�ez un - index fonctionnel, celui-ci sera utilis� : - CREATE INDEX tableindex ON table (lower(colonne)); - - 4.13) Comment puis-je d�tecter si un champ est NULL dans une requ�te ? - - Il vous suffit de tester la colonne avec IS NULL ou IS NOT NULL. - - 4.14) Quelle sont les diff�rences entre les nombreux types de caract�res ? - -Type Nom interne Notes --------------------------------------------------- -VARCHAR(n) varchar n sp�cifie la taille maximum, sans remplissage -CHAR(n) bpchar des espaces sont ajout�s pour obtenir la - longueur fixe sp�cifi�e -TEXT text pas de limite sup�rieure pour la taille -BYTEA bytea tableau d'octets (accepte les octets nuls) -"char" char un caract�re - - Vous verrez le nom interne en examinant les catalogues syst�me et dans - quelques messages d'erreur. - - Les quatres premiers types du dessus sont des types "varlena" - (c'est-�-dire que les quatre premiers octets correspondent � la - taille, suivi des donn�es). Donc, l'espace r�ellement utilis� est - l�g�rement plus grand que la taille d�clar�e. N�anmoins, ces types de - donn�es sont aussi sujet � la compression ou � un enregistrement en - dehors de la table avec TOAST, donc l'espace occup� sur disque - pourrait aussi �tre moindre que ce qu'on pourrait attendre. - - VARCHAR(n) est bien mieux pour enregistrer des cha�nes de longueurs - variables tout en limitant la taille de cette cha�ne. TEXT est utile - pour les cha�nes de longueur illimit�e, avec malgr� tout un maximum de - 1 Go. - - CHAR(n) est int�ressant pour stocker des cha�nes de taille identique. - CHAR(n) compl�te avec des espaces pour arriver � la taille sp�cifi�e - alors que VARCHAR(n) n'enregistre que les caract�res donn�s. BYTEA - sert � stocker des donn�es binaires, particuli�rement les donn�es - incluant des octets NULL. Tous les types d�crits ici ont des - performances similaires. - - 4.15.1) Comment puis-je cr�er un champ s�rie, c'est-�-dire s'incr�mentant - automatiquement ? - - PostgreSQL supporte un type de donn�es SERIAL. Il cr�e automatiquement - une s�quence. Par exemple, ceci : - CREATE TABLE personne ( - id SERIAL, - nom TEXT - ); - - est automatiquement traduit en ceci : - CREATE SEQUENCE personne_id_seq; - CREATE TABLE personne ( - id INT4 NOT NULL DEFAULT nextval('personne_id_seq'), - nom TEXT - ); - - Voir la page man de create_sequence pour plus d'informations sur les - s�quences. Vous pouvez aussi utiliser le champ OID de chaque ligne - comme valeur unique. N�anmoins, si vous avez besoin de sauvegarder - puis recharger la base de donn�es, vous devrez utiliser l'option -o ou - l'option COPY WITH OIDS de pg_dump pour conserver les OIDs. - - 4.15.2) Comment puis-je obtenir la valeur d'un SERIAL suite � une - insertion ? - - Une approche pour r�cup�rer la prochaine valeur SERIAL � partir de - l'objet s�quence est d'utiliser la fonction nextval() avant - l'insertion et de l'ins�rer ensuite explicitement. En utilisant la - table d'exemple de la section 4.15.1, un exemple dans un - pseudo-langage ressemblerait � ceci : - nouvelle_id = execute("SELECT nextval('personne_id_seq')"); - execute("INSERT INTO personne (id, nom) VALUES (nouvelle_id, 'Blaise Pascal')"); - - Vous pourriez ensuite utiliser la nouvelle valeur stock�e dans - nouvelle_id avec d'autres requ�tes (c'est-�-dire en tant que cl� - �trang�re de la table personne). Notez que le nom de la SEQUENCE - automatiquement cr��e sera <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 1459e5a08c..0000000000 --- a/doc/FAQ_german +++ /dev/null @@ -1,978 +0,0 @@ - - H�ufig gestellte Fragen (FAQ) zu PostgreSQL - - Current maintainer: Bruce Momjian (bruce@momjian.us). - - Deutsche �bersetzung von Ian Barwick (barwick@gmail.com). - - Letzte Aktualisierung der deutschen �bersetzung: Fr., den 19.10.2007, - 17:00 MEZ - - Die aktuellste Version dieses Dokuments liegt auf der - PostgreSQL-Website: - * http://www.postgresql.org/docs/faqs.FAQ.html (engl.) - * http://www.postgresql.org/docs/faqs.FAQ_german.html (dt.) - - �bersetzungen dieses Dokuments in anderen Sprachen sowie plattform- - spezifische FAQs k�nnen unter http://www.postgresql.org/docs/faq/ - eingesehen werden. - _________________________________________________________________ - - Allgemeine Fragen - - 1.1) Was ist PostgreSQL? Wie wird es ausgesprochen? - 1.2) Wer kontrolliert PostgreSQL? - 1.3) Welchem Copyright unterliegt PostgreSQL? - 1.4) Auf welchen Plattformen l�uft PostgreSQL? - 1.5) Woher bekomme ich PostgreSQL? - 1.6) Was ist die neueste Version von PostgreSQL? - 1.7) Wo bekomme ich Support f�r PostgreSQL? - 1.8) Wie kann ich einen Fehlerbericht abgeben? - 1.9) Wie erfahre ich von bekannten Bugs oder fehlenden Features? - 1.10) Welche Dokumentation ist f�r PostgreSQL verf�gbar? - 1.11) Wie kann ich SQL lernen? - 1.12) Wie kann ich im Entwicklerteam mitarbeiten? - 1.13) Wie l�uft PostgreSQL im Vergleich zu anderen Datenbanksystemen? - 1.14) Kommt PostgreSQL mit den Anpassungen der Sommerzeit in - verschiedenen L�ndern klar? - - Fragen zu Benutzerprogrammen - - 2.1) Welche Schnittstellen gibt es f�r PostgreSQL? - 2.2) Wie kann man PostgreSQL mit einer Website nutzen? - 2.3) Hat PostgreSQL eine grafische Benutzerschnittstelle? - - Administrative Fragen - - 3.1) Wie installiere ich PostgreSQL woanders als in /usr/local/pgsql? - 3.2) Wie regle ich Zugriffe von anderen Rechnern? - 3.3) Wie kann ich eine bessere Performanz erreichen? - 3.4) Welche Debugging-Funktionen sind f�r PostgreSQL verf�gbar? - 3.5) Ich bekomme die Meldung "Sorry, too many clients", wenn ich eine - Verbindung aufzubauen versuche. Warum? - 3.6) Wie wird PostgreSQL aktualisiert? - 3.7) Welche Hardware eignet sich f�r den Betrieb mit PostgreSQL? - - Fragen zum Betrieb - - 4.1) Wie w�hle ich per SELECT-Anweisung nur die ersten paar Zeilen - bzw. eine beliebige Zeile in einer Abfrage aus? - 4.2) Wie finde ich heraus, welche Tabellen, Indexe, Datenbanken oder - Benutzer in der Datenbank definiert sind? Wie bekomme ich die von psql - verwendeten Abfragen? - 4.3) Wie �ndere ich den Datentyp einer Spalte? - 4.4) Was ist die Maximalgr��e f�r eine Zeile, eine Tabelle, eine - Datenbank? - 4.5) Wieviel Plattenplatz wird ben�tigt, um die Daten aus einer - typischen Textdatei abzuspeichern? - 4.6) Meine Abfragen sind langsam oder benutzen die Indexe nicht. - Warum? - 4.7) Auf welche Weise kann ich sehen, wie der Abfrage-Optimierer meine - Abfrage auswertet? - 4.8) Wie verfahre ich bei der Suche mit regul�ren Ausdr�cken und bei - einer Suche, bei der Gro�- und Kleinschreibweisen ignoriert werden? - Wie verwende ich einen Index bei solchen Suchabfragen? - 4.9) Wie ermittle ich in einer Abfrage, ob ein Feld NULL ist? - 4.10) Was ist der Unterschied zwischen den verschiedenen CHAR-Typen? - 4.11.1) Wie erzeuge ich ein serielles Feld mit automatischer Erh�hung - des Wertes? - 4.11.2) Wie bekomme ich den Wert einer SERIAL-Sequenz? - 4.11.3) F�hrt currval() zu einer Race-Condition mit anderen Nutzern? - 4.11.4) Warum werden die Sequenzwerte nach einem Transaktionsabbruch - nicht zur�ckgesetzt? Warum gibt es L�cken in der Nummerierung meiner - Sequenz-/SERIAL-Spalte? - 4.12) Was ist ein OID? Was ist ein CTID? - 4.13) Wieso bekomme ich den Fehler: "FATAL: Memory exhausted in - AllocSetAlloc()"? - 4.14) Wie kann ich feststellen, welche PostgreSQL-Version bei mir - l�uft? - 4.15) Wie kann ich eine Spalte erstellen, deren Default-Wert immer die - aktuelle Uhrzeit enthalten soll? - 4.16) Wie f�hre ich eine OUTER JOIN durch? - 4.17) Wie kann ich Abfragen �ber mehrere Datenbanken hinweg ausf�hren? - 4.18) Wie kann ich mehrere Zeilen bzw. Spalten von einer Funktion - zur�ckgeben lassen? - 4.19) Warum bekomme ich eine Fehlermeldung wie - "relation with OID ##### does not exist" wenn ich tempor�re Tabellen - in - PL/PgSQL-Funktionen benutze? - 4.20) Welche Replikationsl�sungen gibt es? - 4.21) Warum werden die Tabellen- und Spaltennamen in meiner Abfrage - nicht erkannt? Warum werden Gro�buchstaben umgewandelt? - _________________________________________________________________ - - Allgemeine Fragen - - 1.1) Was ist PostgreSQL? Wie wird es ausgesprochen? - - Die (englische) Aussprache ist "Post-Gres-Q-L". Im allgemeinen - Sprachgebrauch hat sich die Kurzform "Postgres" auch durchgesetzt. - (F�r diejenigen, die es interessiert: eine MP3-Datei mit der - amerikanischen Aussprache befindet sich hier: - http://www.postgresql.org/files/postgresql.mp3 - - PostgreSQL ist ein objektrelationales Datenbanksystem, das die Vorz�ge - von kommerziellen Datenbanksystemen mit zukunftsweisenden Innovationen - kombiniert. PostgreSQL ist freie Software und dessen kompletter - Quellcode ist �ffentlich verf�gbar. - - Die PostgreSQL-Entwicklung wird von einem Team von meist freiwilligen - Entwicklern durchgef�hrt. Dieses Team ist f�r die Gesamtentwicklung - von PostgreSQL verantwortlich. Es handelt sich um ein - Gemeinschaftsprojekt, das nicht von einer bestimmten Firma - kontrolliert wird. Lesen Sie die Entwickler-FAQ: - http://www.postgresql.org/docs/faqs.FAQ_DEV.html wenn Sie an einer - Mitarbeit interessiert sind. - - 1.2) Wer kontrolliert PostgreSQL? - - Falls Sie nach dem Namen eines etwaigen Inhabers bzw. nach einem - allm�chtigen Zentralkommittee suchen - sparen Sie sich die M�he, sowas - existiert gar nicht. Es gibt zwar das "Core Committee" sowie - Entwickler, die CVS-Schreibberechtigung haben, jedoch haben diese - Gruppen eher nur eine administrative Rolle. Das Projekt wird durch die - Community gesteuert, die aus den Entwicklern sowie nat�rlich auch den - Nutzern besteht - jeder kann daran teilnehmen. (Lesen Sie die - Entwickler-FAQ: http://www.postgresql.org/docs/faqs.FAQ_DEV.html wenn - Sie an der PostgreSQL-Entwicklung teilnehmen m�chten). - - 1.3) Welchem Copyright unterliegt PostgreSQL? - - PostgreSQL wird unter der klassischen BSD-Lizenz herausgegeben. Im - Grunde genommen erlaubt diese den Nutzern, beliebig mit dem Code - umzugehen, auch der Weiterverkauf von Bin�rversionen ohne Quellcode - ist erlaubt. Die einzige Einschr�nkung besteht darin, dass PostgreSQL - auf keinen Fall f�r etwaige Probleme mit der Software haftet. Au�erdem - mu� der Copyright- Text in allen Kopien der Software enthalten sein. - Dies ist der Originaltext der BSD-Lizenz: - - PostgreSQL Data Base Management System - - Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group - Portions Copyright (c) 1994-6 Regents of the University of California - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose, without fee, and without a written - agreement is hereby granted, provided that the above copyright notice - and this paragraph and the following two paragraphs appear in all - copies. - - IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY - FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, - INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND - ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN - ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, - INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE - PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF - CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, - UPDATES, ENHANCEMENTS, OR MODIFICATIONS. - - Es gilt die Copyright-Klausel im Original! - - 1.4) Auf welchen Plattformen l�uft PostgreSQL? - - Normalerweise kann PostgreSQL auf jeder modernen UNIX-kompatiblen - Plattform eingesetzt werden. Diejenigen Plattformen, die bei der - jeweiligen Versionsfreigabe getestet wurden, sind in den - Installationsanleitungen aufgelistet. - - PostgreSQL l�uft auch auf Microsoft NT-basierten Betriebssystemen wie - Windows 2000 SP4, XP und Server 2003. Ein vorgefertigtes - Installationspaket kann von http://pgfoundry.org/projects/pginstaller - heruntergeladen werden. DOS-basierte Windows-Versionen (Win95, Win98, - WinMe) k�nnen PostgreSQL nur mit Hilfe der Cygwin-Umgebung ausf�hren. - - Eine Portierung f�r Novell Netware 6 gibt es unter - http://forge.novell.com sowie eine OS/2 (eComStation) version unter - http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgre - SQL&stype=all&sort=type&dir=%2F. - - 1.5) Woher bekomme ich PostgreSQL? - - Per Web-Browser hier: http://www.postgresql.org/ftp/ und per FTP hier: - ftp://ftp.postgresql.org/pub/. - - 1.6) Was ist die neueste Version von PostgreSQL? - - Die neueste Version von PostgreSQL ist 8.2.5. - - Die Freigabe einer neuen Hauptversion erfolgt in der Regel j�hrlich, - kleinere Korrekturversionen alle paar Monaten. - - 1.7) Wo bekomme ich Support f�r PostgreSQL? - - Die PostgreSQL-Community bietet Unterst�tzung per Mailing-Liste. Die - Web-Seite http://www.postgresql.org/community/lists/ bietet einen - �berblick. Die Listen general und bugs bieten einen guten Einstieg. - - Eine deutschsprachige Mailing-Liste gibt es hier: - http://archives.postgresql.org/pgsql-de-allgemein/. - - Der wichtigsten IRC-Channel ist #postgresql auf Freenode - (irc.freenode.net). Unter UNIX/Linux k�nnen Sie mit z.B. irc -c - '#postgresql' "$USER" irc.freenode.net. daran teilnehmen. Auf Freenode - gibt es einen spanischsprachigen Channel #postgresql-es, einen - franz�sischen, #postgresqlfr sowie einen brasilianischen, - #postgresql-br . Es gibt au�erdem einen PostgreSQL-Channel bei EFNet. - - Eine Liste von Unternehmen, die Support f�r PostgreSQL auf - kommerzieller Basis leisten, kann unter - http://www.postgresql.org/support/professional_support eingesehen - werden. - - 1.8) Wie kann ich einen Fehlerbericht abgeben? - - Nutzen Sie das Formular unter - http://www.postgresql.org/support/submitbug. Schauen Sie aber vorher - unter ftp://ftp.postgresql.org/pub/ nach, ob es mittlerweile eine - neuere PostgreSQL-Version gibt, in der der Fehler behoben wurde. - - Bugs, die �ber das Formular bzw. eine der Mailing-Listen - bekanntgegeben wurden, erhalten typischerweise einer der folgenden - Reaktionen: - * es ist kein Bug, der Grund wird benannt - * es ist ein bereits bekannter Bug, der bereits auf der TODO-Liste - aufgenommen wurde - * der Bug wurde in der aktuellen Version behoben - * der Bug wurde bereits behoben, befindet sich aber noch nicht in - einer offiziell ver�ffentlichten Version - * es wird um eingehendere Informationen gebeten, z.B.: - + Betriebssystem - + PostgreSQL-Version - + reproduzierbarer Fallbeispiel - + Debugging-Information - + Debugger-Backtrace-Ausgabe - * der Bug ist neu. Folgendes k�nnte passieren: - + ein Patch wird erstellt und in der n�chsten Version - eingebaut; - + oder der Bug kann nicht sofort behoben werden und wird auf - die TODO-Liste gesetzt - - 1.9) Wie erfahre ich von bekannten Bugs oder fehlenden Features? - - PostgreSQL unterst�tzt eine erweiterte Teilmenge von SQL:2003. Siehe - unsere TODO-Liste unter http://www.postgresql.org/docs/faqs.TODO.html - f�r eine Auflistung der bekannten Bugs, fehlenden Features und - zuk�nftigen Pl�ne. - - Eine Anfrage nach einem neuen Feature f�hrt normalerweise zu einer der - folgenden Antworten: - * das Feature ist bereits auf der TODO-Liste - * das Feature ist nicht w�nschenswert, weil: - + es vorhandene Funktionalit�t dupliziert, welche bereits dem - SQL-Standard folgt - + es w�rde die Komplexit�t der Code-Basis erh�hen, ohne - nennenswerte Vorteile zu bringen - + es w�re unsicher bzw. unzuverl�ssig - * das neue Feature wird der TODO-Liste hinzugef�gt - - PostgreSQL verwendet kein Bugtracking-System, da es sich als - effizienter erwiesen hat, E-Mails direkt zu beantworten und die - TODO-Liste aktuell zu halten. In der Praxis werden Bugs sehr schnell - beseitigt, und diejenigen Bugs, die Auswirkungen auf eine gro�e Anzahl - von Nutzern haben, werden meist kurzfristig korrigiert. Der einzige - �berblick �ber alle �nderungen, Verbesserungen und Korrekturen in - einer PostgreSQL-Version befindet sich in den CVS-Log-Meldungen. Auch - die Release-Notes listen nicht jede �nderung in der Software auf. - - 1.10) Welche Dokumentation ist f�r PostgreSQL verf�gbar? - - PostgreSQL bietet umfangreiche Dokumentation, darunter ein gro�es - Handbuch, man-Pages und einige kleine Testprogramme. Siehe das /doc- - Verzeichnis. Ausserdem sind alle Handb�cher online unter - http://www.postgresql.org/docs/ verf�gbar. - - Zwei B�cher zu PostgreSQL sind online verf�gbar unter - http://www.postgresql.org/docs/books/awbook.html und - http://www.commandprompt.com/ppbook/ . - - Eine Liste lieferbarer PostgreSQL-B�cher befindet sich unter - http://www.postgresql.org/docs/books Diverse technische Artikel - befinden sich unter http://www.postgresql.org/docs/techdocs . - - psql hat einige n�tzliche \d-Befehle, um Informationen �ber Typen, - Operatoren, Funktionen, Aggregate, usw. zu zeigen. - - Die PostgreSQL-Website enth�lt noch mehr Dokumentation. - - 1.11) Wie kann ich SQL lernen? - - Die oben erw�hnten PostgreSQL-spezifische B�cher bieten einen guten - Einstieg. Viele PostgreSQL-Anwender m�gen "The Practical SQL Handbook" - (Bowman et al., Addison Wesley). Andere dagegen m�gen "The Complete - Reference SQL" (Groff et al., McGraw-Hill). - - Es gibt ausserdem einige n�tzliche Online-Tutorials: - * http://www.intermedia.net/support/sql/sqltut.shtm - * http://sqlcourse.com - * http://www.w3schools.com/sql/default.asp - * http://mysite.verizon.net/Graeme_Birchall/id1.html - - 1.12) Wie kann ich im Entwicklerteam mitarbeiten? - - Lesen Sie in der Entwickler-FAQ unter - http://www.postgresql.org/docs/faqs.FAQ_DEV.html nach. - - 1.13) Wie l�uft PostgreSQL im Vergleich zu anderen Datenbanksystemen? - - Es gibt verschiedene Methoden, Software zu messen: Eigenschaften, - Performanz, Zuverl�ssigkeit, Support und Preis. - - Eigenschaften - PostgreSQL besitzt die meisten Eigenschaften - wie - Transaktionen, Unterabfragen (Subqueries), Trigger, Views, - referenzielle Integrit�t bei Fremdschl�sseln und verfeinertes - Locking - die bei gro�en kommerziellen DBMS vorhanden sind. Es - bietet au�erdem einige anderen Eigenschaften, die diese nicht - immer haben, wie benutzerbestimmte Typen, Vererbung, Regeln, - und die Multi-Versionen-Steuerung zum Verringern - konkurrierender Locks. - - Performanz - Die Performanz von PostgreSQL ist mit der von kommerziellen und - anderen Open-Source-Datenbanken vergleichbar. In manchen - Bereichen ist es schneller, in anderen langsamer. In der Regel - betr�gt der Unterschied +/-10%. - - Zuverl�ssigkeit - Es ist selbstredend, dass ein DBMS wertlos ist, wenn es nicht - zuverl�ssig arbeitet. Daher bem�hen wir uns, nur streng - gepr�ften und best�ndigen Code freizugeben, der nur ein Minimum - an Programmfehlern aufweist. Jede Freigabe hat mindestens einen - Monat Betatest-Phase hinter sich, und unsere Freigabehistorie - beweist, dass wir stabile und solide Versionen freigeben, die - im Produktionsbetrieb genutzt werden k�nnen. Wir glauben, dass - wir im Vergleich mit anderer Datenbanksoftware vorteilhaft - dastehen. - - Support - Unsere Mailinglisten bieten die M�glichkeit, gemeinsam mit - einer gro�en Gruppe von Entwicklern und Benutzern m�gliche - Probleme zu l�sen. Wir k�nnen nicht immer eine Fehlerbehebung - garantieren, kommerzielle DBMS tun dies aber auch nicht. Der - direkte Kontakt zur Entwickler- und Benutzergemeinschaft und - der Zugriff auf die Handb�cher und den Quellcode erm�glicht - einen im Vergleich zu anderen DBMS h�herwertigeren Support. Es - gibt jedoch auch Anbieter von kommerziellen Support-Leistungen - (siehe FAQ-Punkt 1.7). - - Preis - PostgreSQL ist frei verf�gbar, sowohl f�r die kommerzielle wie - auch f�r die nicht-kommerzielle Nutzung. Sie k�nnen den - PostgreSQL-Code ohne Einschr�nkungen (au�er denjenigen, die in - der oben angegebene BSD-artigen Lizenz erw�hnt werden) in Ihr - Produkt integrieren. - - 1.14) Kommt PostgreSQL mit den Anpassungen der Sommerzeit in verschiedenen - L�ndern klar? - - �nderungen bei der US-Sommerzeit sind ab PostgreSQL Version 8.0.4 - ber�cksichtigt. �nderungen in Canada und Western Australia sind ab - 8.0.10 bzw. 8.1.6 ber�cksichtigt. PostgreSQL-Versionen vor 8.0 nutzen - die Zeitzonendatenbank des Betriebssystems, um die Sommerzeit zu - berechnen. - - Fragen zu Benutzerprogrammen - - 2.1) Welche Schnittstellen gibt es f�r PostgreSQL? - - Die PostgreSQL-Installation stellt nur Schnittstellen f�r C und - Embedded C bereit. Alle weitere Schnittstellen sind unabh�ngige - Projekte, die einzeln heruntergeladen werden werden m�ssen. Diese - Trennung erm�glicht individuelle Entwickler-Teams und - Entwicklungszyklen f�r die jeweiligen Projekte. - - Einige Programmiersprachen wie PHP haben eine PostgreSQL- - Schnittstelle bereits eingebaut. Schnittstellen f�r Sprachen wie Perl, - TCL, Python und viele anderen sind unter http://gborg.postgresql.org - im Bereich Drivers/Interfaces verf�gbar sowie per Internet-Suche. - - 2.2) Wie kann man PostgreSQL in einer Website nutzen? - - Eine nette Einf�hrung zu datenbank-gest�tzten Webseiten kann unter - http://www.webreview.com (engl.) eingesehen werden. - - F�r die Web-Integration ist PHP eine ausgezeichnete Schnittstelle. PHP - gibt es bei http://www.php.net - - F�r komplexere Aufgaben bietet sich die Perl-Schnittstelle mit CGI.pm - oder mod_perl. - - 2.3) Hat PostgreSQL eine grafische Benutzerschnittstelle? - - Es gibt eine gro�e Anzahl von GUI-Programmen f�r PostgreSQL - sowohl - kommerziell als auch Open-Source. Eine ausf�hrliche Liste befindet - sich unter http://www.postgresql.org/docs/techdocs.54 . - _________________________________________________________________ - - Administrative Fragen - - 3.1) Wie installiere ich PostgreSQL woanders als in /usr/local/pgsql? - - Bei der Ausf�hrung von configure die Option --prefix mit dem - Zielverzeichnis angeben. - - 3.2) Wie regle ich Zugriffe von anderen Rechnern? - - PostgreSQL ist standardm��ig so eingestellt, dass Verbindungen nur vom - lokalen Rechner �ber Unix Domain Sockets bzw. TCP/IP m�glich sind. - Verbindungen von anderen Rechnern werden erst dann erm�glicht, wenn - Sie in der Datei postgresql.conf die Einstellung listen_addresses - anpassen, in der Datei $PGDATA/pg_hba.conf host-basierte - Authentifizierung einschalten und den Server neu starten. - - 3.3) Wie kann ich eine bessere Performanz erreichen? - - Es gibt drei gro�e Bereiche, in denen Performanzverbesserungen erzielt - werden k�nnen: - - Abfrageoptimierung - Die Modifizierung von Abfragen kann eine bessere Performanz - erzielen: - - + Erstellung von Indexen, einschliesslich partieller Indexe - sowie Expressionsindexe - + Einsatz von COPY anstelle multipler INSERT-Anweisungen - + Gruppierung von mehreren Abfragen innerhalb einer - Transaktion, um Aufwand beim Abschluss von Transaktionen - einzusparen - + Einsatz von CLUSTER beim Holen von einer gro�en Anzahl von - Datenreihen aus einem Index - + Einsatz von LIMIT, um eine Untermenge der Abfragen- - ergebnisse zur�ckzuliefern - + Einsatz von vorbereiteten Befehlen (prepared queries) - + Einsatz von ANALYZE, um die Datenbankstatistik f�r den - Abfragenplaner aktuell zu halten - + Regelm��iger Einsatz von VACUUM bzw. pg_autovacuum - + Bei gro�en Datenver�nderungen die L�schung von Indexen - - Server-Konfiguration - Einige Einstellungen in der Datei postgresql.conf wirken auf - die Performanz aus. Das Handbuch enth�lt unter - http://www.postgresql.org/docs/current/static/runtime-config.ht - ml eine komplette Auflistung. Kommentare zu den jeweiligen - Einstellungen gibt es unter - http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_co - nf_e.html und - http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html. - - Hardware-Auswahl - Die Auswirkung von Hardware auf Performanz wird unter - http://momjian.us/main/writings/pgsql/hw_performance/index.html - und http://www.powerpostgresql.com/PerfList/ erl�utert. - - 3.4) Welche Debugging-Funktionen sind f�r PostgreSQL verf�gbar? - - Unter den Optionen f�r die Server-Konfigurierung gibt es zahlreiche - log_*-Variablen, die die Ausgabe von Abfrage- und Prozessstatistiken - erm�glichen. Diese k�nnen f�r Debugging-Zwecke sowie Performanz-Tests - sehr n�tzlich sein. - - 3.5) Ich bekomme die Meldung "Sorry, too many clients", wenn ich eine - Verbindung aufzubauen versuche. Warum? - - Ihr System hat die maximal zul�ssige Anzahl von Datenbankverbindungen - erreicht (Voreinstellung 100). Sie m�ssen die maximale Anzahl der - gleichzeitig ausf�hrbaren Backend-Prozesse hochsetzen, indem Sie in - postgresql.conf den Wert max_connections �ndern und den Server - neustarten. - - 3.6) Wie wird PostgreSQL aktualisiert? - - Allgemeine Informationen zur Aktualisierung von PostgreSQL gibt es auf - der Seite http://www.postgresql.org/support/versioning. Detaillierte - technische Informationen gibt es auf der Seite - http://www.postgresql.org/docs/current/static/install-upgrading.html - - 3.7) Welche Hardware eignet sich f�r den Betrieb mit PostgreSQL? - - PostgreSQL l�uft auf fast jeder Hardware-Kombination. Im PC-Bereich - gibt es allerdings sehr gro�e Abweichungen in der Qualit�t. F�r einen - Arbeitsplatz- oder Entwicklungsrechner mag dies nicht so bedeutend - sein, im Server-Betrieb jedoch lohnt sich auf jeden Fall die - Investition in teurere Bestandteile (Stichw�rter ECC-Speicher, SCSI, - Hauptplatinen und Netzteile von namhaften Herstellern). Nutzen Sie - unsere Mailing-Listen, um Hardware-Optionen zu diskutieren. - _________________________________________________________________ - - Fragen zum Betrieb - - 4.1) Wie w�hle ich per SELECT-Anweisung nur die ersten paar Zeilen bzw. eine - beliebige Zeile in einer Abfrage aus? - - Wenn Sie bei der Ausf�hrung der Abfrage die Anzahl der anzufordenden - Reihen bereits kennen, nutzen Sie LIMIT. Wenn die ORDER BY- Anweisung - mit einem Index verwendet wird, ist es m�glich, dass die gesamte - Abfrage nicht ausgef�hrt werden muss. Wenn Sie die Anzahl der der - anzufordenden Reihen nicht kennen, verwenden Sie einen Cursor und - FETCH. - - Um eine beliebige Zeile auszuw�hlen, nutzen Sie ORDER BY random(): - SELECT spalte - FROM tabelle - ORDER BY random() - LIMIT 1 - - - 4.2) Wie finde ich heraus, welche Tabellen, Indexe, Datenbanken oder Benutzer - in der Datenbank definiert sind? Wie bekomme ich die von psql verwendeten - Abfragen? - - In psql zeigt der Befehl \dt eine Liste der Datenbanktabellen. Weitere - psql-Befehle lassen sich mit \? anzeigen. Sie k�nnen sich die Datei - pgsql/src/bin/psql/describe.c mit dem Quellcode f�r psql ansehen. Sie - enth�lt die SQL-Abfragen, die die Backslash-Kommandos (\) ausf�hren. - Sie k�nnen psql auch mit der -E Option starten. Danach gibt psql die - Abfragen aus, die es bei der Ausf�hrung der Befehle benutzt. Au�erdem - biete PostgreSQL ein SQL-kompatibles INFORMATION SCHEMA, das - Metainformation �ber die Datenbank zur Verf�gung stellt. - - Mit psql -l k�nnen Sie alle Datenbanken anzeigen lassen. - - Die Datei pgsql/src/tutorial/syscat.source enth�lt au�erdem viele - SELECT- Abfragen, mit deren Hilfe man Information �ber die - Systemtabellen erhalten kann. - - 4.3) Wie �ndere ich den Datentyp einer Spalte? - - Ab Version 8.0 kann der Datentyp einer Spalte mit ALTER TABLE ALTER - COLUMN TYPE ge�ndert werden, sofern der neue Datentyp die Werte des - alten Datentype aufnehmen kann. - - Bei fr�heren Versionen gehen Sie wie folgt vor: - BEGIN; - ALTER TABLE tabelle ADD COLUMN neue_spalte neuer_datentyp; - UPDATE tabelle SET neue_spalte = CAST(alte_spalte AS neuer_datentyp); - ALTER TABLE tabelle DROP COLUMN alte_spalte; - COMMIT; - - - Um den Speicherplatz freizugeben, der von der gel�schten Spalte - verwendet wurde, f�hren Sie VACUUM FULL aus. - - 4.4) Was ist die Maximalgr��e f�r eine Zeile, eine Tabelle, eine Datenbank? - - Es bestehen folgende Obergrenzen: - Maximale Gr��e eine Datenbank? unbeschr�nkt (es existieren - Datenbanken mit 32 TB) - Maximale Gr��e einer Tabelle? 32 TB - Maximale Gr��e einer Zeile? 400 GB - Maximale Gr��e einer Spalte? 1 GB - Maximale Anzahl von Zeilen in einer Tabelle? - unbeschr�nkt - Maximale Anzahl von Spalten in einer Tabelle? - 250-1600 je nach Spaltentyp - Maximale Anzahl von Indexen f�r eine Tabelle? - unbeschr�nkt - - Selbstverst�ndlich sind dies theoretische Werte, die oft durch die - verf�gbaren Platten- und Speicherressourcen beschr�nkt werden. Extreme - Gr��en k�nnen zu Leistungseinbu�en f�hren. - - Die maximale Tabellengr��e von 32 TB ben�tigt keine - Large-File-Unterst�tzung im Betriebssystem. Gro�e Tabellen werden in - Dateien mit einer Gr��e von je 1 GB aufgeteilt, wodurch etwaige - dateisystem-bedingte Beschr�nkungen nicht relevant sind. - - Die maximale Tabellengr��e und die maximale Anzahl von Spalten k�nnen - vervierfacht werden, indem man die Default-Blockgr��e auf 32 KB - heraufsetzt. Die Tabellengr��e kann auch durch Tabellenpartitionierung - vergr��ert werden. - - Eine Einschr�nkung ist, dass Indexe nur auf Spalten erstellt werden - k�nnen, die bis etwa 2.000 Zeichen gro� sind. Um auf gr��ere Spalten - eine UNIQUE-Constraint setzen zu k�nnen, nutzen Sie einen funktionalen - Index mit dem MD5-Hash-Wert der Spalte. Um innerhalb einer gro�en, mit - Text belegten Spalte suchen zu k�nnen, verwenden Sie einen - Volltext-Index. - - 4.5) Wieviel Plattenplatz wird ben�tigt, um die Daten aus einer typischen - Textdatei abzuspeichern? - - Eine PostgreSQL-Datenbank kann beim Abspeichern einer einfachen - Textdatei bis zu f�nfmal mehr Platz gegen�ber der eigentlichen Gr��e - der Datei beanspruchen. - - Betrachten wir eine Datei mit 100.000 Zeilen mit einem Integer und - einer Textbeschreibung pro Zeile. Gehen wir davon aus, dass die - durchschnittliche L�nge der Textbeschreibung 20 Byte betr�gt. Die - einfache Datei w�rde 2,8 MB gro� sein. Die Gr��e der - PostgreSQL-Datenbankdatei, die diese Daten enth�lt, liegt ungef�hr bei - 5,2 MB: - 24 Bytes: jeder Zeilenkopf (ungef�hr) - +24 Bytes: ein Integer-Feld und ein Textfeld - + 4 Bytes: Zeiger auf der Datenseite auf den Tupel - ----------------------------------------------- - 52 Bytes pro Zeile - - Die Gr��e einer Datenseite in PostgreSQL betr�gt 8192 Bytes (8 KB), - also: - 8192 Bytes pro Seite - --------------------- = 146 Zeilen pro Seite (abgerundet) - 52 Bytes pro Zeile - - 100.000 Datenzeilen - ------------------------ = 685 Datenbankseiten (aufgerundet) - 158 Zeilen pro Seite - - 633 Datenbankseiten * 8192 Bytes pro Seite = 5,185,536 bytes (5,2 MB) - - Indexe beanspruchen nicht so viel Platz. Da sie jedoch die Daten - beinhalten, die sie indizieren, k�nnen auch sie sehr gro� werden. - - NULL-Werte werden als Bitmaps gespeichert, wodurch sie sehr wenig - Platz in Anspruch nehmen. - - 4.6) Meine Abfragen sind langsam oder benutzen die Indexe nicht. Warum? - - Indexe werden nicht automatisch bei jeder Abfrage verwendet. Indexe - werden nur dann verwendet, wenn die abzufragende Tabelle eine - bestimmte Gr��e �bersteigt, und die Abfrage nur eine kleine - Prozentzahl der Tabellenzeilen abfragt. Der Grund hierf�r ist der, - dass die durch einen Index verursachten Festplattenzugriffe manchmal - l�nger dauern w�rden als ein einfaches Auslesen aller Tabellenzeilen - (sequentieller Scan). - - Um festzustellen, ob ein Index verwendet werden soll, braucht - PostgreSQL Statistiken �ber die Tabelle. Diese Statistiken werden - durch die Anweisungen VACUUM ANALYZE bzw. ANALYZE berechnet. Anhand - der Statistiken kennt der Abfragenoptimierer die Anzahl der - Tabellenzeilen und kann besser entscheiden, ob Indexe verwendet werden - sollen. Statistiken sind auch bei der Ermittlung der optimalen - JOIN-Reihenfolgen und -Methoden wertvoll. Daher sollten diese - regelm�ssig durchgef�hrt werden, da sich der Inhalt einer Tabelle ja - auch ver�ndert. - - Indexe werden normalerweise nicht in ORDER BY-Abfrage oder in JOINs - verwendet. Ein sequentieller Scan mit anschlie�endem explizitem - Sortiervorgang ist normalerweise schneller als ein Index-Scan einer - gro�en Tabelle. Jedoch wird bei einer Abfrage, in der LIMIT zusammen - mit ORDER BY verwendet wird, oftmals ein Index verwendet, da nur ein - kleiner Abschnitt der Tabelle zur�ckgeliefert wird. - - Sollte es danach aussehen, also ob der Optimierer irrt�mlich einen - sequentiellen Scan ausf�hrt, f�hren Sie SET enable_seqscan TO 'off' - aus und pr�fen Sie, ob die Indexabfrage dadurch scheller geworden ist. - - Bei der Nutzung von Wildcard-Operatoren wie LIKE oder ~, k�nnen Indexe - nur unter bestimmten Umst�nden verwendet werden: - * Das Suchmuster muss sich an Anfang des Strings befinden, d.h.: - + LIKE-Suchmuster d�rfen nicht mit % anfangen; - + ~ (regul�re Ausdr�cke) m�ssen mit ^ anfangen. - * Das Suchmuster darf nicht mit einer Zeichenklasse (z.B. [a-e]) - beginnen. - * Suchmuster, die Gross- und Kleinschreibung nicht ber�cksichtigen - (z.B. ILIKE bzw. ~*), verwenden keine Indexe. Stattdessen k�nnen - funktionale Indexe verwendet werden, die im Punkt 4.8 beschrieben - werden. - * Die Standard-Locale "C" muss w�hrend der Datenbank-Initialisierung - mit initdb verwendet worden sein, da andere locales den - n�chstgr��ten Wert nicht ermitteln k�nnen. Es ist allerdings - m�glich, einen besonderen text_pattern_ops-Index f�r solche F�lle - zu erstellen. - - In Versionen vor 8.0 werden Indexe oft nicht benutzt, wenn die - jeweiligen Datentypen nicht genau �bereinstimmen. Dies gilt besonders - f�r Indexe auf Spalten mit den Datentypen INT2, INT8 und NUMERIC - - 4.7) Auf welche Weise kann ich sehen, wie der Abfrage-Optimierer meine - Abfrage auswertet? - - Vgl. die EXPLAIN Man-Page. - - 4.8) Wie verfahre ich bei der Suche mit regul�ren Ausdr�cken und bei einer - Suche, bei der Gro�- und Kleinschreibweisen ignoriert werden? Wie verwende - ich einen Index bei solchen Suchabfragen? - - Der Operator ~ wendet einen regul�ren Ausdruck an und ~* wendet ihn - an, ohne die Gro�- und Kleinschreibung zu beachten. Ebenso beachtet - LIKE die Gro�- und Kleinschreibung, und ILIKE nicht. - - Gleichheitsvergleiche, die Gro�- und Kleinschreibung ignorieren, - werden in der Regel so ausgedruckt: - SELECT * - FROM tabelle - WHERE LOWER(spalte) = 'abc' - - Hier wird kein normaler Index benutzt. Legt man hingegen einen - funktionalen Index an, so wird er auf jeden Fall verwendet: - CREATE INDEX tabelle_index ON tabelle (LOWER(spalte)) - - Falls der obige Index als einen UNIQUE-Index angelegt wird, k�nnen - keine Werte in die Spalte eingef�gt werden, die sich nur durch ihre - Gro�- und Kleinschreibung unterscheiden. Um Fehler zu vermeiden mu� - ein CHECK-Constraint oder ein Trigger eingesetzt werden. - - 4.9) Wie ermittle ich in einer Abfrage, ob ein Feld NULL ist? Kann nach der - NULL-Belegung sortiert werden? - - Testen Sie die Spalte mit IS NULL bzw. IS NOT NULL. - SELECT * - FROM tabelle - WHERE spalte IS NULL - - Um die Spalte danach zu sortieren, ob sie mit NULL belegt ist oder - nicht, verwenden Sie die Bedingungen IS NULL bzw. IS NOT NULL in der - ORDER BY-Klausel. Da Bedingungen, die wahr sind, h�her als das - Gegenteil sortiert werden, bewirkt die folgende Abfrage, dass die - NULL-Spalten zuerst gelistet werden: - SELECT * - FROM tabelle - ORDER BY (spalte IS NOT NULL) - - 4.10) Was ist der Unterschied zwischen den verschiedenen CHAR-Typen? - -Typ interner Name Bemerkungen -------------------------------------------------- -VARCHAR(n) varchar die Gr��e legt die Maximall�nge fest; kein - Auff�llen mit Leerzeichen -CHAR(n) bpchar mit Leerzeichen gef�llt bis zur angegebenen L�nge -TEXT text keine obere Schranke f�r die L�nge -BYTEA bytea Bytearray mit variabler L�nge (auch f�r - '\0'-Bytes geeignet) -"char" char 1 Zeichen - - Der interne Name kommt vor allem in den Systemkatalogen und in manchen - Fehlermeldungen vor. - - Die ersten vier Typen sind "varlena"-Typen (d.h. die ersten vier Bytes - geben die L�nge an, gefolgt von den Daten). Daher ist der tats�chlich - belegte Platz immer etwas mehr als die deklarierte Feldgr��e. - Allerdings wird unter Umst�nden auf diese Datentypen Datenkompression - durch das TOAST- Verfahren angewendet, womit der tats�chlich belegte - Platz auch geringer als erwartet ausfallen kann. - - F�r die Speicherung von Zeichenketten variabler L�nge empfiehlt sich - VARCHAR(n). Die maximale L�nge eines VARCHAR(n)-Felds wird bei der - Tabellendefinition festgelegt. TEXT setzt keine L�ngengrenze, - allerdings gibt es eine systembedingte Obergrenze von 1 GB. - - CHAR(n) ist geeignet f�r die Speicherung von Zeichenketten, die alle - die gleiche L�nge haben. Bitte beachten Sie, dass CHAR(n) automatisch - Zeichenketten bis zur definierten Feldl�nge mit Leerzeichen ausf�llt, - w�hrend bei VARCHAR(n) nur die tats�chlich eingegebene Zeichenkette - gespeichert wird. - - BYTEA ist f�r bin�re Daten, besonders f�r Werte, die NULL-Bytes haben. - - Alle der hier erw�hnten Typen weisen �hnliche Performanzeigenschaften - auf. - - 4.11.1) Wie erzeuge ich ein serielles Feld mit automatischer Erh�hung des - Wert? - - PostgreSQL bietet einen SERIAL-Datentyp. Dieser erzeugt automatisch - eine Sequenz auf die angegebene Spalte. Zum Beispiel: - CREATE TABLE person ( - id SERIAL, - name TEXT - ) - - wird automatisch in: - CREATE SEQUENCE person_id_seq; - CREATE TABLE person ( - id INT4 NOT NULL DEFAULT nextval('person_id_seq'), - name TEXT - ); - - umgewandelt. - - Die create_sequence Man-Page liefert weitere Informationen �ber - Sequenzen. - - 4.11.2) Wie bekomme ich den Wert einer SERIAL-Sequenz? - - Eine M�glichkeit w�re, mit der nextval()-Funktion den n�chsten - SERIAL-Wert von dem Sequenzobjekt vor der Auszuf�hrung einer - INSERT-Anweisung anzufordern und ihn dann explizit in die - INSERT-Anweisung einzubinden. Anhand der Beispieltabelle in 4.11.1 - k�nnte dieser Vorgang in einer Pseudosprache so aussehen: - new_id = output of execute("SELECT nextval('person_id_seq')"); - execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')"); - - Danach st�nde der neue Wert in der Variablen new_id f�r die Verwendung - in weiteren Abfragen zur Verf�gung, zum Beispiel als Fremdschl�ssel - zur Tabelle 'person'). Bitte beachten Sie, dass der Name des - automatisch erstellten SEQUENCE-Objektes folgenden Name hat: - �table�_�serialcolumn�_seq wobei 'table' und 'serialcolumn' die Namen - der jeweils betreffenden Tabelle / Spalte darstellen. - - Als weitere M�glichkeit k�nnen Sie nach einer INSERT-Anweisung den - automatisch eingef�gten SERIAL-Wert mit der currval()-Funktion - zur�ckgeben lassen: - execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')"); - new_id = output of execute("SELECT currval('person_id_seq')"); - - 4.11.3) F�hrt currval() zu einer Race-Condition mit anderen Nutzern? - - Nein. currval() liefert einen Wert zur�ck, der von Ihrer - Datenbank-Session bestimmt wird, und der anderen Sessionen nicht zur - Verf�gung steht. - - 4.11.4) Warum werden die Sequenzwerte nach einem Transaktionsabbruch nicht - zur�ckgesetzt? Warum gibt es L�cken in der Nummerierung meiner - Sequenz-/SERIAL-Spalte? - - Um die gleichzeitige Abarbeitung von Transaktionen zu verbessern, - werden Sequenzen gerade nicht f�r andere Transaktionen gesperrt, - sondern die Sequenznummern werden den laufenden Transaktionen sofort - zugeteilt. L�cken in der Sequenznummerierung werden durch abgebrochene - Transaktionen verursacht. - - 4.12) Was ist ein OID? Was ist ein CTID? - - Jede Zeile, die in PostgreSQL erzeugt wird, bekommt eine eindeutige - OID, sofern die Tabelle nicht mit der Option WITHOUT OIDS angelegt - wurde. OIDs sind automatisch zugewiesene 4-Byte-Integer, die innerhalb - der gesamten Datenbank einmalig sind. Allerdings laufen sie bei einem - Wert von ungef�hr 4 Milliarden �ber. PostgreSQL verwendet OIDs, um - seine interne Systemtabellen zu verbinden. - - Um einmalige Idenfikatoren in Datentabellen zu erstellen, wird - allerdings empfohlen, statt OIDs Werte zu verwenden, die vonSERIAL- - Sequenzen erzeugt werden. SERIAL-Sequenzen sind innerhalb einer - Tabelle einmalig und daher weniger anf�llig f�r �berl�ufe. Au�erdem - k�nnen 8-Byte-Sequenzwerte mit SERIAL8 erzeugt werden. - - CTIDs werden benutzt, um bestimmte physikalische Zeilen durch Block - und Offset Werte zu identifizieren. CTIDs ver�ndern sich, sobald - Zeilen ver�ndert oder zur�ckgeladen werden. Sie werden in - Indexeintr�gen benutzt um auf die physikalischen Zeilen zu zeigen. - - 4.13) Wieso bekomme ich einen Fehler: "ERROR: Memory exhausted in - AllocSetAlloc()"? - - Wahrscheinlich gibt es keinen virtuellen Speicher mehr in Ihrem System - oder Ihr Kernel hat niedrige H�chstgrenzen f�r bestimmte Ressourcen. - Probieren Sie vor dem Start von postmaster folgendes: - ulimit -d 262144 - limit datasize 256m - - Je nach benutzter Shell wird nur einer dieser Befehle erfolgreich - ausgef�hrt werden. Auf jedem Fall wird die Grenze des Datensegments - f�r Prozesse erh�ht werden und eventuell die erfolgreiche Ausf�hrung - der Abfrage erm�glichen. Falls Sie ein Problem mit dem SQL-CLient - haben, weil das Backend zu viele Daten zur�ckliefert, versuchen Sie - dies vor dem Start des SQL-Clients. - - 4.14) Wie kann ich feststellen, welche PostgreSQL-Version bei mir l�uft? - - Geben Sie in psql SELECT VERSION(); ein. - - 4.15) Wie kann ich eine Spalte erstellen, deren Default-Wert immer die - aktuelle Uhrzeit enthalten soll? - - Dazu verwenden Sie CURRENT_TIMESTAMP: - CREATE TABLE test (x INT, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); - - 4.16) Wie f�hre ich eine OUTER JOIN durch? - - PostgreSQL unterst�tzt OUTER JOINs nach dem SQL- Standardsyntax. Hier - zwei Beispiele: - SELECT * - FROM tabelle_1 t1 - LEFT OUTER JOIN tabelle_2 t2 ON (t1.spalte = t2.spalte) - - bzw.: - SELECT * - FROM tabelle_1 t1 - LEFT OUTER JOIN tabelle_2 t2 USING (spalte) - - Diese identischen Abfragen verkn�pfen tabelle_1 mit tabelle_2 �ber die - Spalte 'spalte' und geben au�erdem alle unverkn�pften Zeilen in - tabelle_1 (diejenigen, die keine Entsprechung in tabelle_2 haben) - zur�ck. Ein RIGHT JOIN w�rde hingegen alle unverkn�pften Zeilen in - tabelle_2 hinzuf�gen und ein FULL JOIN w�rde alle verkn�pften Zeilen - sowie jeweils alle unverkn�pften Zeilen aus den beiden Tabellen - zur�ckliefern. Die Angabe von OUTER ist nicht zwingend und kann in - LEFT, RIGHT und FULL-Verkn�pfungen weggelassen werden. Normale - Verkn�pfungen sind INNER JOINs. - - 4.17) Wie kann ich Abfragen �ber mehrere Datenbanken hinweg ausf�hren? - - Es gibt keinen Weg, innerhalb einer Abfrage auf mehr als eine - Datenbank zuzugreifen. Da PostgreSQL datenbank-spezifische - Systemkataloge l�dt, ist eine datenbank�bergreifende Abfrage nicht - m�glich. - - contrib/dblink ist eine Erweiterung, die datenbank�bergreifende - Abfragen �ber Funktionsaufrufe erm�glicht. - - 4.18) Wie kann ich mehrere Zeilen bzw. Spalten von einer Funktion zur�ckgeben - lassen? - - Funktionen k�nnen mehrere Zeilen und Spalten zur�ckgeben, vgl.: - http://www.postgresql.org/docs/techdocs.17. - - 4.19) Warum bekomme ich eine Fehlermeldung wie "relation with OID ##### does - not exist" wenn ich tempor�re Tabellen in PL/PgSQL-Funktionen benutze? - - In PostgreSQL-Versionen vor 8.3 verarbeitet PL/PgSQL Funktionen in - einer Cache. Dies hat eine unangenehme Nebenwirkung, n�mlich dass wenn - eine PL/PgSQL-Funktion auf eine tempor�re Tabelle zugreift, und diese - Tabelle anschlie�end gel�scht bzw. neu erstellt wird, die Funktion - fehlschlagen wird, da die gecachten Funktionsinhalte noch auf die alte - tempor�re Tabelle zeigen. Die L�sung f�r diese Probleme besteht darin, - in der PL/PgSQL- Funktion mittels EXECUTE auf tempor�re Tabellen - zuzugreifen. Dies bewirkt, dass bei jedem Funktionsruf die betreffende - Abfrage neu geparst wird. - - Dieses Problem taucht in PostgreSQL 8.3 und sp�teren Versionen nicht - mehr auf. - - 4.20) Welche Replikationsl�sungen gibt es? - - Der Begriff "replikation" umfasst mehrere verschiedene Technologien, - jede mit eigenen Vor- und Nachteilen. - - Mit "Master/slave"-Replikation werden �nderungen in einer - Hauptdatenbank durchgef�hrt und an "Sklaven" verteilt, die im - Nur-Lese-Modus arbeiten. Die popul�rste L�sung f�r PostgreSQL ist - Slony-I. - - "Multi-master replication" erm�glicht sowohl lesende als auch - schreibende Zugriffe �ber mehrere Datenbank-Server hinweg. Allerdings - hat diese Art von Replikation eine negative Auswirkung auf die - Performanz durch die Notwendigkeit, �nderungen zwischen Servern zu - synchronisieren. Pgcluster ist die popul�rste freie L�sung f�r - PostgreSQL. - - Es gibt auch einige kommerzielle und hardware-basierte - Replikationsl�sungen f�r verschiedene Arten der Replikation. - - 4.21) Warum werden die Tabellen- und Spaltennamen in meiner Abfrage nicht - erkannt? Warum werden Gro�buchstaben umgewandelt? - - Die h�ufigste Ursache ist die Verwendung von G�nsef��chen bei der - Anlegung von Tabellen, z.B.: - CREATE TABLE "Tabelle" - ("SPALTE1" INT) - - Dadurch werden Tabellen- und Spaltennamen (sog. Identifikatoren) in - genau der Schreibweise gespeichert (vgl. Dokumentation), was dazu - f�hrt, dass man sie danach immer in G�nsef��chen angeben muss. Im - obigen Beispiel muss man also immer etwa SELECT * FROM "Tabelle" - verwenden. Um dieses Problem zu vermeiden, m�ssen Sie immer eines der - folgenden Punkte beachten: - * bei der Tabellenanlegung keine G�nsef��chen verwenden; - * in Identifikatoren nur Kleinschreibung verwenden; - * immer Identifikatoren mit G�nsef��chen versehen - _________________________________________________________________ - - Anmerkungen des �bersetzers - - Die englische Vorlage dieser FAQ wird st�ndig �berarbeitet. Daher - liegt die �bersetzung nicht immer auf dem aktuellsten Stand. - - Die aktuellste Version der deutschen �bersetzung befindet sich immer - unter http://sql-info.de/de/postgresql/FAQ_german.html. Diese - "Arbeitsversion" enth�lt eventuell �nderungen, die noch nicht auf der - PostgreSQL-Website eingebunden worden sind. - - �ber Verbesserungshinweise und Korrekturvorschl�ge sowie - Verst�ndnisfragen zum Inhalt der FAQ freue ich mich. Ich nehme auch - allgemeine Fragen zu PostgreSQL gerne entgegen, verweise jedoch auf - die Mailing-Listen als schnelle und zuverl�ssige Anlaufstellen. diff --git a/doc/FAQ_hungarian b/doc/FAQ_hungarian deleted file mode 100644 index 99f5ba4c63..0000000000 --- a/doc/FAQ_hungarian +++ /dev/null @@ -1,1234 +0,0 @@ - PostgreSQL GyIK - - Utolso modos�t�s d�tuma: 2005 m�jus 9. - - Ford�t�s aktualiz�l�sa: 2005 j�nius - - A GyIK karbantartoja: Bruce Momjian (pgman@candle.pha.pa.us) - - Ford�to: Horny�k L�szlo - (laszlo.hornyak.nospam@gmail.com) - - A legfrissebb verzio itt �rhet� el (angol): - - http://www.PostgreSQL.org/docs/faq-english.html. - - Legfrissebb magyar nyelv� verzio: - - http://hackers.forgeahead.hu/space/PostgreSQL/GYIK - - Platform specifikus k�rd�sek: - - http://www.PostgreSQL.org/users-lounge/docs/faq.html. - - ---------------------------------------------------------------------- - -�ltal�nos k�rd�sek - - 1.1 Mi a PostgreSQL? Hogy kell kimondani? - 1.2 Mik a PostgreSQL felhaszn�l�si felt�telei? - 1.3 Milyen UNIX oper�cios rendszereken fut PostgreSQL? - 1.4 Milyen nem UNIX oper�cios rendszerek el�rhet�ek? - 1.5 Hogyan tudok PostgreSQL-t szerezni? - 1.6 Hogyan kapok term�kt�mogat�st? - 1.7 Melyik a legfrissebb kiad�s? - 1.8 Milyen dokument�cio �ll rendelkez�sre? - 1.9 Hogyan tal�lok inform�ciot hib�krol vagy hi�nyzo funkcional�t�srol? - 1.10 Hogy tanuljam meg az SQL nyelvet? - 1.11 A PostgreSQL 2000. �v kompatibilis? - 1.12 Hogyan lehet csatlakozni a fejleszt� csapathoz? - 1.13 Hogyan k�ldjek hibajelent�st? - 1.14 Milyen a PostgreSQL m�s DBMS-ekkel �sszehasonl�tva? - 1.15 Hogyan tudom �zletileg segiteni a PostgreSQL-t? - 1.16 Ki ir�ny�tja a PostgreSQL-t? - -Felhaszn�loi kliens k�rd�sek - - 2.1 Van ODBC meghajto PostgreSQL-hez? - 2.2 Milyen eszk�z�k �llnak rendelkez�sre PostgreSQL Web fejleszt�sekhez? - 2.3 Van a PostgreSQL-hez grafikus felhaszn�loi fel�let ? Riport gener�tor? - Be�gyazott lek�rdez� nyelv fel�let? - 2.4 Milyen programoz�si nyelvekkel lehet el�rni a PostgreSQL szervert? - -Adminisztr�cios k�rd�sek - - 3.1 Hogyan tudom a PostgreSQL-t /usr/local/pgsql -t�l elt�r� helyre - install�lni? - 3.2 AMikor elind�tom a postmaster-t, egy "Bad System Call"-t vagy core - dump-ot kapok. Mi�rt? - 3.3 Amikor megprob�lom inditani a postmaster-t, "IpcMemoryCreate" hib�kat - kapok. Mi�rt? - 3.4 Amikor megprob�lom inditani a postmaster-t, "IpcSemaphoreCreate" - hib�kat kapok. Mi�rt? - 3.5 Hogyan tudom kontroll�lni a m�s g�pekr�l �rkez� kapcsolat k�r�seket? - 3.6 Hogyan tudom nagyobb teljes�tm�nyre hangolni az adatb�zisomat? - 3.7 Milyen hibakeres� lehet�s�gek �rhet�ek el? - 3.8 Mi�rt kapok "Sorry, too many clients" hib�t csatlakoz�sn�l? - 3.9 Mi van pgsql_tmp k�nyvt�rban? - 3.10 Mi�rt kell dumpolni �s �jrat�lteni PostgreSQL kiad�s v�lt�s�n�l? - -M�k�dtet�si k�rd�sek - - 4.1 Mi a k�l�nbs�g a bin�ris �s a norm�l kurzorok k�z�tt? - 4.2 Hogyan tudom select-elni a lek�rdez�s els� p�r sor�t? - 4.3 Hogy tudom kilist�zni a t�bl�kat vagy m�s dolgokat a PostgreSQL-ben? - 4.4 Hogyan tudok elt�vol�tani egy oszlopot egy t�bl�bol? - 4.5 Mi a maxim�lis m�rete egy sornak, egy t�bl�nak vagy egy adatb�zisnak? - 4.6 Mekkora adatb�zis lemez ter�let sz�ks�ges egy tipikus sz�veg �llom�ny - t�rol�s�hoz? - 4.7 Hogy tudhatom meg milyen t�bl�k, indexek, adatb�zisok vagy - felhaszn�lok vannak defini�lva? - 4.8 A lek�rdez�seim lass�ak, vagy nem haszn�lj�k az indexeket. Mi�rt? - 4.9 Hogy tudom ellen�rizni, hogy optimaliz�lta a lek�rdez�s optimaliz�lo a - lek�rdez�sem? - 4.10 Mi az R-tree index? - 4.11 Mi a Genetic Query Optimizer? - 4.12 Hogyan tudok regexp keres�st �s case-insensitive regexp keres�st - haszn�lni? Hogyan tudok indexet haszn�lni case-insensitive keres�shez? - 4.13 Hogyan tudom �szlelni egy lek�rdez�sban, ha egy mez� NULL? - 4.14 Mi a k�l�nbs�g a k�l�nb�z� karaktert�pusok k�z�tt? - 4.15.1 Hogyan tudok l�trehozni automatikusan n�vekv� �rt�k� mez�t? - 4.15.2 Hogyan kaphatom meg egy SERIAL besz�r�s �rt�k�t? - 4.15.3 A currval() �s a nextval() nem teremt holtpont vesz�lyes helyzetet - a felhaszn�lok k�z�tt? - 4.15.4 Mi�rt nem haszn�lodnak fel �jra a sequence sz�mok tranzakcio abort - eset�n? Mi�rt vannak probl�m�k a serial oszlopok sz�moz�s�val? - 4.16 Mi a OID? Mi a TID? - 4.17 Mi a PostgreSQL-ben haszn�lt kifejez�sek jelent�se? - 4.18 Mi�rt kapom ezt a hib�t: "ERROR: Memory exhausted in - AllocSetAlloc()"? - 4.19 Hogyan tudhatom meg PostgreSQL, milyen verziot futtatok? - 4.20 Mi�rt kapok "invalid large obj descriptor" hib�t nagy objektumok - kezel�s�n�l? - 4.21 Hogy hozhatok l�tre olyan oszlopot, aminek alap�rtelmezett �r�tke a - jelenlegi id�? - 4.22 Mi�rt olyan lass�ak az al-lek�rdez�seim IN-nel? - 4.23 Hogyan tudok outer join-t v�grehajtani? - 4.24 Hogyan tudok t�bb adatb�zison v�grehajtani lek�rdez�st? - 4.25 Hogy tudok t�bb soros vagy oszlopos eredm�nyt visszaadni egy - funkciobol? - 4.26 Mi�rt nem tudom megbizhatoan l�trehozni �s t�r�lni az �tmeneti - t�bl�kat a PL/pgSQL funkciokban? - 4.27 Milyen replik�cios lehet�s�gek vannak? - 4.28 Milyen kodol�si lehet�s�gek vannak? - -A PostgreSQL kiterjeszt�se - - 5.1) �rtam egy felhaszn�loi funkciot. Mi�rt core dumpol az adatb�zis - amikor haszn�lom? - 5.2) Hogyan lehet �j adatt�pusokat �s funkciokat hozz�adni a PostgreSQL - disztrib�ciohoz? - 5.3) Hogyan lehet olyan C funkciot �rni, ami Tuple-t ad vissza? (t�bb - soros t�bb oszlopos eredm�nyek) - 5.4) Megv�ltoztattam egy forr�s �llom�nyt. Mi�rt nem v�ltozik a bin�ris - �jraford�t�s ut�n? - - ---------------------------------------------------------------------- - -�ltal�nos k�rd�sek - - 1.1 Mi a PostgreSQL? Hogy kell kimondani? - - �gy ejstd ki: Post-Gres-Q-L. - - (Vagy tal�n ink�bb t�ltsd le a kis mp3-at a PostgreSQL homepage-r�l) - - A PostgreSQL a POSTGRES adatb�zis management rendszer egy kieg�sz�t�se, - ami egy k�vetkez� gener�cios DBMS kutat�si protot�pus. Megtartja a - POSTGRES adatmodell�t �s gazdag adatt�pus v�laszt�k�t, de a PostQuel - lek�rdez� nyelvet az SQL egy kiterjesztett verzioj�val helyettes�ti. A - PostgreSQL szabad �s a teljes forr�skod hozz�f�rhet�. - - A PostgreSQL fejleszt�s�t egy csapat v�gzi, amelynek minden tagja - megtal�lhato a PostgreSQL fejleszt�i levelez�si list�n. A jelenlegi - koordin�tor Marc G. Fournier (scrappyp@PostgreSQL.org). Ez a csapat - felel�s minden fejleszt�s�rt. <>A PostgreSQL 1.01 alkotoi Andrew Yu �s - Jolly Chen voltak. Sokan j�rultak hozz� portol�ssal, tesztel�ssel, - hibakeres�ssel �s fejleszt�ssel. Az eredeti Postgres kod, amib�l a - PostgreSQL sz�rmazik Michael Stonebraker professzor ir�ny�t�sa alatt - fejlesztettek az egyetem programozoi, tanuloi �s v�gzett tanuloi. <> - - A szoftver eredeti neve Postgres volt. Amikor SQL funkcional�t�ssal - eg�sz�tett�k ki 1995-ben, a nev�t Postgres95-re v�ltoztatt�k. 1996 v�g�n - kapta mai nev�t. - - 1.2 Mik a PostgreSQL felhaszn�l�si felt�telei? - - Az eredeti angol copyright sz�veg: - - -------------------- - - PostgreSQL is subject to the following COPYRIGHT: - - PostgreSQL Data Base Management System - - Portions copyright (c) 1996-2002, PostgreSQL Global Development Group - - Portions Copyright (c) 1994-6 Regents of the University of California - - Permission to use, copy, modify, and distribute this software and its - - documentation for any purpose, without fee, and without a written - - agreement is hereby granted, provided that the above copyright notice - - and this paragraph and the following two paragraphs appear in all - - copies. - - IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY - - FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, - - INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND - - ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN - - ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, - - INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - - MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE - - PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF - - CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, - - UPDATES, ENHANCEMENTS, OR MODIFICATIONS. - - -------------------- - - Ami nagyon leegyszer�s�tve azt jelenti, hogy jogod van haszn�lni a - szoftvert mindenf�le ellenszolg�ltat�s (p�nz, stb) n�lk�l, a forr�s kodot - modos�thatod, �s tov�bbadhatod, DE semmilyen, a szoftver haszn�lat�bol - k�vetkez� k�rosod�s�rt nem v�llal garanci�t a fejleszt�. A fenti a BSD - licensz, egy klasszikus nyilt-forr�skod licensz. Nem tartalmaz - megszor�t�sokat arra, hogy a forr�skodot hogyan haszn�lod fel. - - Kedvelj�k ezt a licensz form�t �s nem �ll sz�nd�kunkban megv�ltoztatni. - - 1.3 Milyen UNIX oper�cios rendszereken fut PostgreSQL? - - �ltal�ban minden UNIX-kompatibilis oper�cios rendszer k�pes arra hogy - futtassa a PostgreSQL-t. Azokat a platformokat, amiken tesztelt�k a - kiad�st megtal�lhatod a install�cios utas�t�sok k�z�tt. - - 1.4 Milyen nem UNIX oper�cios rendszerek el�rhet�ek? - - Kliens - - A libpq C f�ggv�nyk�nyvt�rat, a psql-t �s m�s fel�leteket le lehet �gy - ford�tani, hogy fussanak MS Windows oper�cios rendszereken. Ebben az - esetben a kliens MS Windows-on fut �s TCP/IP seg�ts�g�vel kommunik�l a - Unixon futo szerverrel. A "win32.mak" �llom�ny a kiad�s r�sze, ennek - seg�ts�g�vel lehet Win32 platformokra leford�tani a libpq-t �s a psql-t. A - PostgreSQL ODBC kliensekkel is k�pes kommunik�lni. - - Szerver - - <>Az adatb�zis szerver Cygwin seg�ts�g�vel fut Windows NT �s Win2k - rendszereken. Tov�bbi inform�cio tal�lhato a pgsql/doc/FAQ_MSWIN - �llom�nyban �s a MS Windows FAQ-ban a k�vetkez� helyen: - http://www.PostgreSQL.org/docs/faq-mswin.html. Nat�v MS Windows - NT/2000/XP portok jelenleg fejleszt�s alatt �llnak. - - 1.5 Hogyan tudok PostgreSQL-t szerezni? - - Az els�dleges anonim ftp oldal: ftp://ftp.PostgreSQL.org/pub. - - A t�k�r oldalak list�ja megtal�lhato a f� weboldalunkon. - - 1.6 Hogyan kapok term�kt�mogat�st? - - Az els�dleges lista a pgsql-general@postgresql.org. Ez haszn�lhato a - PostgreSQL-lel kapcsolatos p�rbesz�dekre. Ha fel szeretn�l �ratkozni, - k�ldj egy levelet a k�vetkez� tartalommal (nem t�rggyal) a - pgsql-general-request@postgresql.org c�mre: - - subscribe - - end - - Van egy hib�kkal kapcsolatos levelez�si lista is: - pgsql-bugs-request@PostgreSQL.org a k�vetkez� tartalommal: - - subscribe - - end - - A fejleszto"i levelez�si lista: pgsql-hackers-request@PostgreSQL.org a - k�vetkez� tartalommal: - - subscribe - - end - - Egy�b levelez�si list�k tal�lhatoak a weboldalunkon: - http://www.PostgreSQL.org - - Van egy IRC csatorna is #PostgreSQL n�ven ahol felteheted k�r�dseid. A - k�vetkez� unix paranccsal csatlakozhatsz: - - irc -c '#PostgreSQL' "$USER" irc.phoenix.net. - - A kereskedelmi term�kt�mogat�st ny�jto c�gek list�ja el�rhet� itt: - http://www.PostgreSQL.org/users-lounge/commercial-support.html - - Magyar nyelvu" levelez�si lista nincs, de ha tudok segiteni a fenit e-mail - cimemen el�rheto" vagyok. - - 1.7 Melyik a legfrissebb kiad�s? - - A legfrissebb PostgreSQL kiad�s a 8.0. - - A tervek szerint minden �vben lesz egy nagyobb fejleszt�seket tartalmazo - kiad�s, m�g a kisebb fejleszt�seket n�h�ny havonta adjuk ki. - - 1.8 Milyen dokument�cio �ll rendelkez�sre? - - Sz�mos k�zik�nyv, man oldalak �s kis teszt p�ld�k tal�lhatoak a kiad�sban - a doc/ k�nyvt�r alatt. Az interneten is olvashatod a dokument�ciot a - k�vetkez� c�men: - - http://www.PostgreSQL.org/users-lounge/docs/. - - K�t PostgreSQL k�nyv �rhet� el az interneten a - http://www.PostgreSQL.org/docs/awbook.html �s a - http://www.commandprompt.com/ppbook/ c�meken. A megv�s�rolhato k�nyvek - list�ja itt tal�lhato: http://www.ca.PostgreSQL.org/books/. A - PostgreSQL-lel kapcsolatos technikai jelleg� cikkek gy�jtem�nye: - http://techdocs.PostgreSQL.org/. - - A psql parancs rendelkezik n�h�ny \d utas�t�ssal, amellyekkel list�zhatoak - az oper�torok, a funkciok, stb. - - A website is tartalmaz tov�bbi dokument�ciokat. - - 1.9 Hogyan tal�lok inform�ciot hib�krol vagy hi�nyzo funkcional�t�srol? - - A PostgreSQLaz SQL-92 szabv�ny egy kieg�sz�t�se. N�zd meg a TODO list�kat - ha �rdekelnek az ismert hib�k. - - 1.10 Hogy tanuljam meg az SQL nyelvet? - - A PostgreSQL k�nyv a http://www.PostgreSQL.org/docs/awbook.html c�men - tartalmaz SQL alapokat. El�rhet� egy m�sik SQL k�nyv is a - http://www.commandprompt.com/ppbook c�men. Egy sz�p oktato anyag tal�lhato - a http://www.intermedia.net/support/sql/sqltut.shtm, a - http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM �s a - http://sqlcourse.com oldalakon. - - Egy m�sik lehet�s�g a "Tan�tsd magad 21 nap alatt SQL-re, m�sodik kiad�s" - a http://members.tripod.com/er4ebus/sql/index.htm. - - Sok felhaszn�lonak tetszett a gyakorlati SQL k�nyv ("The Practical SQL - Handbook"). - - 1.11 A PostgreSQL 2000. �v kompatibilis? - - Igen, k�nnyed�n kezeli a 2000 ut�ni �s id�sz�m�t�sunk el�tt 2000 el�tti - d�tumokat is. - - 1.12 Hogyan lehet csatlakozni a fejleszt� csapathoz? - - El�ssz�r is t�ltsd le a forr�skodot, �s olvasd el a PostgreSQL - fejleszt�i dokumnet�ciot a web oldalunkon vagy a kiad�sban. Ezut�n - �ratkozz fel a pgsql-hackers �s a pgsql-patches levelez�si list�kra. - V�g�l pedig k�ldj be magas szinvonal� patch-eket a pgsql-patches list�ra. - - Van egy p�r ember, akiknek commit privil�giumuk a PostgreSQL CVS f�n. - �k olyan sok magas szinvonal� patch-et k�ldtek be, hogy az addigi - csapat m�r nem tudta k�vetni, �s nem volt k�ts�g�nk arrol, hogy a - patch-ek amiket �k k�ldenek jo min�s�g�. - - 1.13 Hogyan k�ldjek hibajelent�st? - - L�togass el a BugTool oldalra: - http://www.PostgreSQL.org/bugs/bugs.php - Itt megtal�lod k�vetend� utas�t�sokat. - - Ellen�rizd az ftp oldalunkon is, hogy nincs-e �jabb verzio vagy folt. - ftp://ftp.PostgreSQL.org/pub - - 1.14 Milyen a PostgreSQL m�s DBMS-ekkel �sszehasonl�tva? - - Sz�mos n�z�pontbol lehet vizsg�lni a szoftvert: k�pess�gek, teljes�tm�ny - megb�zhatos�g, t�mogatotts�g �s �r. - - K�pess�gek: A PostgreSQL rendelkezik a nagy, kereskedelmi DBMS-ek - k�pess�geivel: tranzakciok, al-lek�rdez�sek, triggerek, n�zetek, k�ls� - kulcsok, integr�t�s �s kifinoult z�rmechanizmusok. Van n�h�ny k�pess�ge, - ami a kereskedelmi adatb�zisokbol hi�nyzik, mint p�ld�ul a felhaszn�lo - �ltal defini�lt t�pusok, �r�kl�d�s, szab�lyok �s verzio kontroll a - z�rol�si vit�k reduk�l�s��rt. - - Teljes�tm�ny: A PostgreSQL teljes�tm�nye hasonl�t a kereskedelmi �s m�s - ny�lt adatb�zis szerverek�hez. Lehet bizonyos esetekben lassabb, m�sokban - gyorsabb. A MySQL nev� tanulo RDBMS p�ld�ul gyorsabban hajt v�gre - insert/update m�veleteket, mivel a tranzakciokat elsum�kolja. Persze a - MySQL nem rendelkezik a k�pess�gek r�szben felsoroltak nagy r�sz�vel. Mi a - megb�zhatos�gra �s a k�pess�gekre �p�t�nk, b�r a teljes�tm�ny is n� minden - kiad�ssal. Van egy �rdekes oldal a MySQL �s a PostgreSQL - �sszehasonl�t�s�val a http://openacs.org/philosophy/why-not-mysql.html - c�men. - - Megb�zhatos�g: Tudjuk hogy ha egy DBMS nem megb�zhato, akkor teljesen - haszontalan. Igyeksz�nk jol tesztelt, stabil kodot kiadni, amiben a lehet� - legkevesebb hiba van. Minden kiad�s el�tt eltellik legal�bb 1 honap b�ta - teszt, �s a kiad�si t�rt�net is azt mutatja, hogy stabil kodot adunk ki, - ami k�szen �ll a produkt�v felhaszn�l�sra. �gy gondoljuk, fel�lm�lunk m�s - adatb�zis szoftvereket ezen a t�ren. - - T�mogat�s: A levelez�si list�ink kapcsolatot teremtenek a fejleszt�k �s - felhaszn�lok csoportj�val , akik seg�tenek a probl�m�k megold�s�ban. B�r - nem tudjuk garant�lni hogy ki tudjuk jav�tani a hib�t, m�s, kereskedelmi - adatb�zis c�gek sem tudj�k. A fejleszt� csoport k�zvetlen el�r�si - lehet�s�ge, a k�z�ss�g, a dokument�cio �s a forr�skod gyakran t�mogat�st - biztos�t, mint m�s adatb�zisokn�l. Van kereskedelmi, alkalmi t�mogat�s - azoknak, akiknek sz�ks�ge van r� (l�sd: 1.6). - - �r: A PostgreSQL szabad b�rmilyen felhaszn�l�sra, ak�r kereskedelmire is. - A term�khez hozz�adhatod a saj�t forr�skodjaidat korl�toz�s n�lk�l. - - 1.15 Hogyan tudom �zletileg segiteni a PostgreSQL-t? - - A PostgreSQL els� oszt�ly� infrastrukt�r�val rendelkezik, amit 1996-ban - ind�tottunk el. Mindent Marc Fourniernek k�sz�nhet�nk, aki l�trehozta �s - karbantartja a rendszert. - - A min�s�gi infrastrukt�ra nagyon fontos egy nyilt forr�s� szoftver - eset�ben. Megv�d az olyan fennakad�soktol, amelyek komoly k�s�seket - okoznak a fejleszt�sekben. Term�szetesen ez az infrastrukt�ra nem olcso. - Sz�mos havi �s �llando kiad�sunk van. Ha a c�gednek van p�nze, amivel - t�mogatn� er�fesz�t�seinket, k�rlek l�togass el a - http://store.pgsql.com/shopping/ oldalra. - - B�r a weboldal "PostgreSQL, Inc"-k�nt eml�ti, a hozz�j�rul�sok kiz�rolag a - PostgreSQL fejleszt�sre �rtendoek, �s nem egy meghat�rozott c�gnek. Ha - jobban tetszik, k�ldhetsz csekket is a kapcsolati c�mek b�rmelyik�re. - - 1.16 Ki ir�ny�tja a PostgreSQL-t? - - Ha k�zponti bizotts�got, ellen�rzo" c�get keresel a PostgreSQL m�g�tt, add - fel, nincs ilyesmi. L�tezik egy mag �s CVS commiter csoport, de ez ink�b - adminisztrativ mint ellen�rzo" c�l�. A projectet fejleszto"k �s - felhaszn�lok k�z�ss�ge ir�ny�tja, amihez b�rki csatlakozhat. Csup�n annyit - kell tenned hogy fel�ratkozol a levelezo"list�kra �s r�szt veszel a - besz�lget�sekben. - - ---------------------------------------------------------------------- - -Felhaszn�loi kliens k�rd�sek - - 2.1 Van ODBC meghajto PostgreSQL-hez? - - K�t ODBC meghajto �rhet� el: PsqlODBC �s a OpenLink ODBC. - - A PsqlODBC a PostgreSQL kiad�s r�sze. Tov�bbi inform�cio tal�lhato a - ftp://ftp.PostgreSQL.org/pub/odbc/ oldalon. - - Az OpenLink ODBC-t a http://www.openlinksw.com c�mr�l t�ltheted le. Ez az - � szabv�nyos ODBC kliens szoftver�kkel m�k�dik, �gy minden - - �ltaluk t�mogatott platformon (Win, Mac, Unix, VMS) el�rhet� lesz a - PostgreSQL szerver. - - Tal�n olyan vev�knek fogj�k eladni, akik kereskedelmi min�s�g� term�ket - szeretn�nek kapni, de a freeware verzio mindig el�rhet� lesz. K�rd�seidet - a term�kkel kapcsolatban a postgres95@openlink.co.uk c�men teheted fel. - - Olvasd el az ODBC fejezetet is a programozok k�zik�nyv�ben! - - 2.2 Milyen eszk�z�k �llnak rendelkez�sre PostgreSQL Web fejleszt�sekhez? - - Egy sz�p bemutato olvashato az adatb�zissal t�mogatott web oldalanrol a - http://www.webreview.com weboldalon. - - A web integr�ciohoz a PHP egy kiv�llo szoftver. Let�lthet� a - http://www.php.net c�mr�l. - - Komplexebb esetekre sokan haszn�lj�k a Perl fel�letet �s a CGI.pm vagy a - mod_perl-t. - - 2.3 Van a PostgreSQL-hez grafikus felhaszn�loi fel�let? - - Van egy sz�p PgAccess nev� grafikus fel�let�nk, ami riport gener�tork�nt - is haszn�lhato. A weboldal�t megtal�lod a http://www.pgaccess.org/ c�men. - - A http://techdocs.postgresql.org/guides/GUITools oldalon tal�lhatsz egy - pontos �s r�szltes list�t. - - 2.4 Milyen programoz�si nyelvekkel lehet el�rni a PostgreSQL szervert? - - A k�vetkez�k: - - * C (libpq) - * C++ (libpq++) - * Embedded C (ecpg) - * Java (jdbc) - * Perl (DBD::Pg and perl5) - * ODBC (odbc) - * Python (PyGreSQL) - * TCL (libpgtcl) - * C Easy API (libpgeasy) - * PHP ('pg_' functions, Pear::DB) - Tov�bbi programoz�si fel�letek �rhet�ek el a - http://www.PostgreSQL.org/interfaces.html �s a - http://gborg.PostgreSQL.org oldalakon. - - ---------------------------------------------------------------------- - -Adminisztr�cios k�rd�sek - - 3.1 Hogyan tudom a PostgreSQL-t /usr/local/pgsql -t�l elt�r� helyre - install�lni? - - A configure script --prefix param�ter�nek haszn�lat�val. - - 3.2 AMikor elind�tom a postmaster-t, egy "Bad System Call"-t vagy core - dump-ot kapok. Mi�rt? - - Sz�mos probl�ma lehet, de legel�ssz�r ellen�rizd le, hogy a kerneled - System V kieg�sz�t�sekkel rendelkezik-e. A PostgreSQL haszn�lja a kernel - osztott memoria �s szemafor API-j�t. - - 3.3 Amikor megprob�lom inditani a postmaster-t, "IpcMemoryCreate" hib�kat - kapok. Mi�rt? - - Vagy nincs megfelel�en konfigur�lva a kerneled osztott memoria t�mogat�sa - vagy meg kell nagyobb�tanod a maxim�lis osztott memoria m�retet. - - A pontos m�ret sz�ks�glet f�gg az architekt�r�dtol �s attol hogy h�ny - buffert �s processzt konfigur�lsz a postmasternek. Legal�bb 1 MB ter�letre - sz�ks�ged van. A PostgreSQL Adminisztr�cio k�zik�nyvben olvashatsz - r�szletesebb inform�ciokat az osztott memori�rol �s a szemaforokrol. - - 3.4) Amikor megprob�lom inditani a postmaster-t, "IpcSemaphoreCreate" - hib�kat kapok. Mi�rt? - - Ha a hiba�zenet ez: " IpcSemaphoreCreate: semget failed (No space left on - device)", akkor a kerneled konfigur�cioja nem tesz lehet�v� elegend� - szemafort. A PostgreSQL szerver processzenk�nt 1 szemafort ig�nyel. Egy - �tmeneti megold�s lehet az hogy a postmastert kevesebb maxim�lis processz - sz�mmal inditod el. Haszn�ld a -D param�tert. Egy sokkal megfelel�bb - megold�s az ha n�veled a kerneled SEMMNS �s SEMMNI param�tereit. - - A hib�s szemaforok is adat�zis lerobban�s�hoz is vezethet nagy terhel�s - eset�n.Ha a hiba�zenet valami m�s, lehet hogy nincs szemaforok t�mogat�s - - forditva a kerneledbe. Olvasd el a PostgreSQL adminisztr�torok - k�zik�nyv�ben az osztott memori�rol �s a szemaforokrol szolo fejezetet. - - 3.5) Hogyan tudom kontroll�lni a m�s g�pekr�l �rkez� kapcsolat k�r�seket? - - Alap�rtelmez�sben a PostgreSQL a helyi kapcsolatokat Unix socketekkel - valos�tja meg. M�s g�pek nem lesznek k�pesek csatlakozni, ha nem - enged�lyezed azt -i opcioval a postmasternek, �s nem �ll�tod be host a - alap� azonos�t�st a pg_hba.conf �llom�nyban. Ezzel v�lnak lehet�v� a - TCP/IP kapcsolatok. - - 3.6) Hogyan tudom nagyobb teljes�tm�nyre hangolni az adatb�zisomat? - - Az indexel�s felt�tlen�l gyors�tja a lek�rdez�seket. Az EXPLAIN parancs - lehet�v� teszi hogy l�sd, hogy a PostgreSQL mik�nt interpret�lja a - lek�rdez�st �s melyik indexet haszn�lja. - - Ha sok INSERT m�veletet hajtassz v�gre, csin�ld nagy k�tegekben a COPY - paranccsal. Ez sokkal gyorsabb mint az egyedi INSERT parancsok. M�sodszor: - Azok a m�veletek, amelyek nincsenek tranzakcio blokkon bel�l, azok saj�t - tranzakciot ind�tanak. Sok m�veletet �rdemes egy tranzakcion bel�l - v�grehajtani. Ez cs�kkenti a tranzakcio kezel�s t�bbletidej�t. Az - indexeket javasolt a nagy adatv�ltoz�sok el�tt elt�vol�tani, majd �jra - l�trehozni. - - Sz�mos teljes�tm�ny jav�to lehet�s�g van. Kikapcsolhatod az fsync() - m�veletet a postmaster -o -F opciokval valo ind�t�sakor. �gy nem fog az - amugy lass� fsync() f�ggv�ny megh�vodni minden tranzakcio v�g�n. - - Haszn�lhatod a postmaster -B opcioj�t is az osztott memoria szegmens - m�ret�nek n�vel�s�hez. Ha az �rt�ket t�l magasra �ll�tod, lehet hogy a - postmaster nem indul el, mert t�ll�pted az oper�cios rendszer �ltal - megengedett m�retet. Minden buffer 8K m�ret� �s alap�rtelmez�sban 64 - buffer van. - - A -S opcioval n�velheted a szerver �tmeneti rendez�sekre fenntartott - memoria ter�let�t. Az �rt�ket kilobyteban add meg. Az alap�rtelmezett - �rt�k 512K. - - Haszn�lhatod a CLUSTER utas�t�st is, hogy a t�bl�kat egy indexnek - megfelel�en csoportos�tsd. Olvasd el a CLUSTER k�zik�nyv oldalt tov�bbi - r�szletek�rt. - - Hardver kiv�laszt�s�ban seg�thet: - http://candle.pha.pa.us/main/writings/pgsql/hw_performance/index.html �s - http://www.powerpostgresql.com/PerfList/. - - A postgresql.conf be�llit�saival kapcsolatos tudnivalok: - http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html - �s http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html. - - 3.7) Milyen hibakeres� lehet�s�gek �rhet�ek el? - - A PostgreSQL sz�mos lehet�s�ggel rendelkezik ami �rt�kes lehet a - hibakeres�sn�l. - - El�ssz�r is, futtathatod a configure scriptet --enable-cassert opcioval, - sok assert() funkciohiv�s ellen�rzi a program fut�s�t �s meg�llitja ha - valami v�ratlan hiba t�rt�nik. - - Mind a postmaster �s a postgres sz�mos hibakeres� lehet�s�ggel - rendelkezik. Mindig amikor elinditod a postmastert, gy�z�dj meg rola, hogy - a kimenetet log �llom�nyba k�ld�d. Igy: - - cd /usr/local/pgsql - - ./bin/postmaster >server.log 2>&1 & - - Ez egy server.log �llom�nyt hoz l�tre a fels� PostgreSQL k�nyvt�rban. Ez - az �llom�ny tartlamaz majd sz�mos hasznos inform�ciot a szerverrel - kapcsolatos probl�m�krol �s hib�krol. A postmaster -d opcioj�val lehet - r�szletesebb hibakeres� inform�ciot kapni. A -d opciohoz meg kell - hat�rozni egy hiba szintet. Vigy�zz, a magas hibakeres� szint nagy log - �llom�nyt okozhat. - - Ha a postmaster nem fut, akkor futtathatod a postgres szervert - parancssorbol is, �s az SQL kifejez�st k�zvetlen�l ennek adhatod �t. Ez - csak hibakeres�s eset�ben javasolt. Az �j sor a kifejez�s v�g�t jelenti, - nem a pontosvessz�. Ha hibakeres� opciokkal forditottad a szervert, - haszn�lhatsz egy debuggert is hogy l�sd hogy mi t�rt�nik. Mivel igy a - szervert nem a postmaster inditotta, nem t�bbfelhaszn�los k�rnyezetk�nt - fut, igy a z�rol�si �s a szerverek k�z�tti kommunik�cios hiba jelens�gek - nem jelentkeznek. - - Ha m�r fut a postmaster, indits egy psql-t, �s n�zd meg a szerver processz - PID-j�t! Egy debuggert haszn�lhatsz a processzhez csatlakoz�shoz. - Be�llithatsz t�r�spontokat �s elindithatsz lek�rdez�seket. Ha a postgres - indit�sban keresel hib�t, a PGOPTIONS k�rnyezeti v�ltozot �llitsd be "-W - n" �rt�kre. Ez n m�sodperc v�rakoz�st id�z el�, igy tudsz csatlakozni a - processzhez, el tdsz hejezni t�r�spontokat, majd folytathatod a ind�t�st. - - A postgres program -s, -A �s -t opcioi is nagyon hasznosak lehetnek - hibakeres�sn�l �s teljes�tm�ny m�r�sn�l. - - Profiling leht�s�ggel is fordithatod a szervert, hogy l�sd melyik funkciok - foglalj�k el a fut�si id�t. A szerver profile �llom�nyai a - pgsql/data/base/dbname k�nzvt�rba ker�lnek, a kliens profile �llom�nyok az - aktu�lis k�nyvt�rba. Linuxon ehhez sz�ks�ges a -DLINUX_PROFILE ford�t�si - direktiva. - - 3.8) Mi�rt kapok "Sorry, too many clients" (T�l sok kliens) - hib�t csatlakoz�sn�l? - - N�velned kell a postmaster egyidej�leg futtatott szerver processz sz�m - korl�tj�t. - - Az alap�rtelmezett korl�t 32 processz. Ezt n�velhetjed �gy, hogy - �jrainditod a postmastert �s -N opcioval meghat�rotod az �j �rt�ket, vagy - modositod a postgresql.conf-ot. - - Ne felejtsd el, hogy ha n�veled a szerver processzek maxim�lis sz�m�t, - akkor bufferek sz�m�t is n�velned kell, legal�bb a processzek sz�m�nak - k�tszeres�re. Nagy processz sz�mokeset�ben valoszin�leg a Unix - konfigur�cios param�tereken is n�velni kell. Ellen�rizd a SHMMAX (az - osztott memoria szegmensek maxim�lis m�rete), a SEMMNS �s a SEMMNI (a - szemaforok maxim�lis sz�ma), az NPROC (a processzek maxim�lis sz�ma), a - MAXUPRC (felhaszn�lonk�nti maxim�lis processz sz�m) �s a NFILE �s NINODE - (a megnzitott �llom�nzok maxim�lis sz�ma) param�tereket. A PostgreSQL - az�rt korl�tozza k�l�n a processz sz�mot, hogy a rendszeredet ne - terhelhesse meg t�ls�gosan. - - A PostgreSQL 6.5 verzioban a maxim�lis szerver processz sz�m 64 volt �s a - modosit�shoz bele kellett irni a include/storage/sinvaladt.h �llom�nyba �s - �jra kellett forditani a servert. - - 3.9) Mi van pgsql_tmp k�nyvt�rban? - - Ez a k�nyvt�r a lek�rdez�s v�grehajto �ltal l�trehezott �tmeneti - �llom�nyokat tartalmazza. P�ld�ul ha egy rendez�st kell v�grehajtani egy - ORDER BY kifejez�s miatt �s a m?velet t�bb memori�t vesz ig�nybe, mint - amennyit a -S param�ter megenged, akkor az �tmeneti k�nyvt�rban hoz l�tre - egy �llom�nyt a fennmarado adat t�rol�s�ra. - - Az �tmeneti �llom�nyok t�bbnyire t�rl?dnek, de meg is maradhat ha p�ld�ul - v�ratlan hib�val le�ll a szerver egy rendez�s k�zben. Indit�skor �s - le�llit�skor ezeket az �llom�nyokat t�rli a postmaster. - - 3.10) Mi�rt kell dumpolni �s �jrat�lteni PostgreSQL kiad�s v�lt�s�n�l? - - A PostgreSQL csapat csak aprobb v�ltoztat�sokat hajt v�gre a kisebb - kiad�sok k�z�tt, igy ha 7.2 verziorol �llsz �t 7.2.1 verziora, akkor nem - sz�ks�ges kidumplonod az adatb�zist. A nagy kiad�sok eset�ben (p�ld�ul - verziorol 7.3-ra �tt�r�sn�l) v�ltozik a belsi� adatstrukt�r�k �s - adat�llom�nyok form�tuma. Ezek a v�ltoz�sok gyakran nagyon �sszetettek, - ez�rt ink�b nem tartunk fenn visszafel� kompatibilit�st. A dump az adatot - �ltal�nos form�tumban irja ki, majd az �j form�tumban lehet azt - visszat�leni. - - Azokban a kiad�sokban, amelyek k�z�tt az adat form�tum nem v�ltozik, a - pg_upgrade program haszn�lhato dumpol�s �s helyre�llit�s n�lk�l. - - ---------------------------------------------------------------------- - -M�k�dtet�si k�rd�sek - - 4.1) Mi a k�l�nbs�g a bin�ris �s a norm�l kurzorok k�z�tt? - - N�zd meg a DECLARE dokument�cioj�t. - - 4.2) Hogyan tudom select-elni a lek�rdez�s els� p�r sor�t? - - Olvasd el a FETCH dokument�cioj�t, vagy haszn�ld a SELECT LIMIT-et. - - Az eg�sz lek�rdez�st v�gre kell hajtani, m�g akkor is, ha csak az els� p�r - sort akarod megkapni. Gondolj arra, hogy a lek�rdez�sben lehet ORDER BY - is. Ha van olyan index, ami megfelel az ORDER BY kifejez�sednek, a - PostgreSQL k�pes lehet az els� n�h�ny rekord visszaad�s�ra, vagy a teljes - lek�rdez�snek le kell futnia, amig a k�rt rekordok le nem gener�lodnak. - - 4.3) Hogy tudom kilist�zni a t�bl�kat vagy m�s dolgokat a PostgreSQL-ben? - - Elolvashatod a psql forr�s kodj�ban a pgsql/src/bin/psql/describe.c - �llom�nyban. Ez SQL parancsokat tartalmaz, amelyek azokat a kimeneteket - �llitj�k el�, amiket a per jellel kezd�d� parancsok adnak vissza. - - 4.4) Hogyan tudok elt�vol�tani egy oszlopot egy t�bl�bol? - - Ez a funkcionalit�s a 7.3 verziot�l kezdve �rhet� el az ALTER TABLE DROP - COLUMN -nal. A r�gebbi vertiokban igy lehet v�grehajtani: - - BEGIN; - - LOCK TABLE old_table; - - SELECT ... -- minden oszlopot, kiv�tel amit t�r�lni szeretn�l - - INTO TABLE new_table - - FROM old_table; - - DROP TABLE old_table; - - ALTER TABLE new_table RENAME TO old_table; - - COMMIT; - - 4.5) Mi a maxim�lis m�rete egy sornak, egy t�bl�nak vagy egy adatb�zisnak? - - A korl�tok: - - * adatb�zis: korl�tlan (1 TB az �ltalunk ismert lagnagyobb) - - * t�bla: 16 TB - - * rekord/sor 1.6TB - - * mez� 1 GB - - * a t�bla sorainak sz�ma: korl�tlan - - * a t�bla oszlopainak sz�ma: 250-1600 az oszlop nevekt�l f�gg�en - - * A t�bla indexeinek sz�ma: korl�tlan - - Term�szetesen nem igaz�n korl�tlan, de a t�rter�let, memoria �s egy�b - k�ls� t�nyez�k korl�tozz�k. A teljesitm�ny romolhat, ha ezek az �rt�kek - szokatlanul nagyok. - - A 16 TB-os legnagyobb t�bla m�ret nem ig�nyel nagy �llom�ny t�mogat�st. A - nagy t�bl�k t�bb 1 GB m�ret� �llom�nyba ker�lnek, igy az �llom�ny rendszer - korl�tai nem l�nyegesek. - - A maxim�lis t�bla m�ret �s az oszlopok maxim�lis oszlop sz�m n�velhet�, ha - az alap�rtelmezett blokkm�retet 32k-ra n�veled. - - 4.6) Mekkora adatb�zis lemez ter�let sz�ks�ges egy tipikus sz�veg �llom�ny - t�rol�s�hoz? - - A PostgreSQL ak�r a sz�veg �llom�ny helyig�ny�nek �tsz�r�s�t is - elfoglalhatja. - - K�pzelj el p�ld�ul, egy 100.000 soros sz�veget, aminek minde sora egy - sz�mbol �s egy sz�vegb�l �ll. Tegy�k el, hogy �tlagosan 20 byte hossz� - sz�vegek. Ez a sz�veg�llom�ny k�r�lbel�l 2.8 MB helyet foglalna el. A - t�bla ami a fenti adatszerkezetet elt�roln�, k�r�lbel�l 6.4 MB-os lenne. - Ezt a k�vetkez�k�ppen sz�molhatjuk ki: - - 36 byte: sor fejl�c - - 24 byte: egy int mez� + egy sz�veg mez� - - 4 byte: mutato - - --------------------------------------- - - 64 byte soronkent. - - Az adat oldal m�rete a PostgreSQL-ben 8192 byte, igy 8192 / 64 = 128 - rekord adatb�zis oldalank�nt (lefel� kerekitve). - - 100000 rekord / 128 rekord oldalank�nt = 782 adat oldal - (felel� kerekitve). - - 782 adatb�zis oldal * 8192 byte olalank�nt = 6,406,144 - byte (6.4 MB) - - Az indexek nem foglalnak t�l sokat, de tartalmazz�k az indexelt adatot, - igy ezek is lehetnek nagyok. - - A NULL �rt�kek bitt�rk�pben vannak t�rolva, igy kev�s helyet foglanak. - - 4.7) Hogy tudhatom meg milyen t�bl�k, indexek, adatb�zisok vagy - felhaszn�lok - - vannak defini�lva? - - A psql-ben tal�lsz sz�mos '\' karakterrel kezd�d� utas�t�st az ilyen - inform�ciok list�z�s�ra. A '\?' segits�g�vel tudot kilist�zni ezeketa - parancsokat. Ezen kiv�l vannak rendszer t�bl�k, amelyek nevei 'pg_'-vel - kezd�dnek. - - Prob�ld ki a pgsql/src/tutorial/syscat.source �llom�nyt is. Ez sok p�ld�t - tartalmaz az rendszert�bl�kon v�grehajtott SELECT-ekr�l. - - 4.8) A lek�rdez�seim lass�ak, vagy nem haszn�lj�k az indexeket. Mi�rt? - - Az indexeket nem haszn�lja a szerver minden lek�rdez�sn�l automatikusan. - Csak akkor haszn�l indexet, ha a t�bla m�rete egy megadott also hat�r - felett van, �s a lek�rdez�s csak a sorok egy kis r�sz�t �rinti. Ez az�rt - van, mert a v�letlen hozz�f�r�s m�g mindig lassabb lehet mint az t�bla - szekvenci�lis olvas�sa. - - Hogy a PostgreSQL meg tudja hat�rozni hogy kell-e indexet haszn�lni, - l�teznie kell egy statisztik�nak a t�bl�rol. Ez a statisztikai adatok a - VAACUM ANALYZE vagy az egyszer� ANALYZE m�veletek sor�n j�nnek l�tre. A - statisztikai adatok felhaszn�l�s�val az optimaliz�lo meg tudja hat�rozni, - hogy h�ny sor van a t�bl�ban, �s el tudja d�nteni, hogy haszn�ljon-e - indexet. A statisztiaki adatgy�jt�st id�nk�nt v�gre kell hajtani, ahogy a - t�bla adatai v�ltoznak. - - Az indexeket norm�lis esetben nem haszn�lja az ORDER BY vagy az OUTER - JOIN. A szekvenci�lis olvas�s �ltal�ban gyorsabb, mint az index keres�s - egy nagy t�bl�ban. B�r a LIMIT az ORDER BY-val kombin�lva haszn�lhat - indexet, mert a t�bla csak kis r�sze �rintett. B�r a MIN �s MAX SQL - funkciok sem haszn�lj�k az indexeket, ezeket az �rt�keket egy ORDER BY + - LIMIT lek�rdez�ssel is le lehet k�rdezni: - - SELECT col - - FROM tab - - ORDER BY col [ DESC ] - - LIMIT 1; - - Amikor helyettes�t� jel oper�torokat haszn�lsz, mint a LIKE kulcsszo vagy - a ~, az indexeket csak bizonyos k�r�lm�nyek k�z�tt lehet haszn�lni: - - A keres� string kezdete a keres�si minta elej�n kell hogy legyen. P�ld�ul: - - * A LIKE mint�k nem kezd�dhetnek % jellel. - * ~ (regexp) kifejez�sek nem kezd�dhetnek ^ jellel. - * A keres�si kifejez�s nem kezd�dhet karakter oszt�llyal. - * A case-insensitive keres�s (ILIKE, ~*) nem haszn�lnak indexet ehelyett - funkcion�lis indexet haszn�lnak, amit a 4.12 pontban tal�lhatsz. - * Az alap�rtelmezett C hellyel kell futtatni az initdb-t. - 4.9) Hogy tudom ellen�rizni, hogy optimaliz�lta a lek�rdez�s optimaliz�lo - a lek�rdez�sem? - - Olvasd el a dokument�cio EXPLAIN-rol szolo r�sz�t. - - 4.10) Mi az R-tree index? - - Az R-tree index a t�rbeli adat indexel�s�re alkalmas. Egy hash index nem - k�pes tartom�ny keres�sekre. A B-tree index csak egy dimenzion kezeli a - tartom�ny keres�seket. P�ld�ul ha az indexet egy pont (point adatt�pus) - t�pus� mez.re �p�tj�k, gyorsabban kezeli az olyan jelleg� lek�rdez�seket, - mint egy adott k�rben - - tal�lhato pontok. - - Az R-tree tervez�si mint�t eredetileg le�ro sz�veg: Guttman, A. "R-trees: - A Dynamic Index Structure for Spatial Searching." Proceedings of the 1984 - ACM SIGMOD Int'l Conf on Mgmt of Data, 45-57. - - Ezt olvashatod Stonebraker "Readings in Database Systems" c. k�nyv�ben. - - A be�p�tett R-tree kezelni tudj�k a soksz�geket (polygon adatt�pus) �s a - dobozokat (box). Elm�letileg, az R-tree kiterjeszthet� tov�bbi dimenziokra - is. Gyakorlatilag ezen dolgoznod kell egy kicsit, �s m�g nincs - dokument�cionk arrol hogy az hogyan m�k�dik. - - 4.11) Mi a Genetic Query Optimizer? - - A GEQO modul a lek�rdez�s optimaliz�cio sebess�g�t n�veli nagy mennyis�g� - t�bla �sszekapcsol�sa eset�n. Lehet�v� teszi a nagy lek�rdez�sek - v�grehajt�s�t nem teljes keres�ssel. - - 4.12) Hogyan tudok regexp keres�st �s case-insensitive regexp keres�st - haszn�lni? Hogyan tudok indexet haszn�lni case-insensitive keres�shez? - - A ~ oper�tor hajt v�gre regul�ris kifejez�s (regexp) �rtelmez�st, a ~* - ennek case-insensitive v�ltozata. A LIKE case-insensitive v�ltozata az - ILIKE. - - A case-insensitive egyenl�s�g m�veleteket �ltal�ban igy hajtjuk v�gre: - - SELECT * - - FROM tab - - WHERE lower(col) = 'abc'; - - Ez nem fog indexet haszn�lni, b�r l�trehozhatsz egy funkcio indexet: - - CREATE INDEX tabindex ON tab (lower(col)); - - 4.13) Hogyan tudom �szlelni egy lek�rdez�sben, ha egy mez� NULL? - - Haszn�ld "IS NULL"-t �s az "IS NOT NULL"-t. - - 4.14) Mi a k�l�nbs�g a k�l�nb�z� karaktert�pusok k�z�tt? - - * "char" egy karakter hossz� string - * CHAR(n) bpchar �res hellyel a megadott n hossz�s�gig - * VARCHAR(n) varchar m�ret maxim�lis hossz meghat�roz�s�val, a lefogllat - ter�let is v�ltozo hossz� lesz - * TEXT nincs meghat�rozott felso" korl�t - * BYTEA v�ltozo hossz�s�g� byte-t�mb - - L�tni fogod a bels� elnevez�s�ket, ha tanulm�nyozod a rendszert�bl�kat�s - n�h�ny hiba�zenetet. - - Az utobbi n�gy a "varlena" t�pusok, ami a t�rol�suk modj�ra utal: az els� - 4 byte a lemezen a hossz�s�g, a t�bbi az adat. A valodi m�ret teh�t - nagyobb mint a deklar�lt hossz�s�g.Ezek azadatok t�m�ritve t�rolodnak el, - igy kevesebb helyet foglalnek el az el�re sz�mitottn�l. - - A CHAR(n) a legjobb megold�s, ha stabil hossz�s�g� stringet t�rolsz. A - VARCHAR(n) jo arra az esetekre, ha a hossz�s�g v�ltozik, de van fels� - korl�tja. A TEXT t�pus korl�tlan hossz�s�g� (1 GB-ig) sz�vegek t�rol�s�ra - alklamas. A BYTEA bin�ris adatok t�rol�s�ra van. A teljesitm�ny mutatoi - hasonloak ezenek a t�pusoknak. - - 4.15.1) Hogyan tudok l�trehozni automatikusan n�vekv� �rt�k� mez�t? - - A PostgreSQL rendelkezik egy SERIAL adatt�pussal. Ez egy szekvenci�t �s - egy indexet hoz l�tre az oszlopon. P�ld�ul ez: - - CREATE TABLE person ( - - id SERIAL, - - name TEXT - - ); - - ugyanezt jelenti: - - CREATE SEQUENCE person_id_seq; - - CREATE TABLE person ( - - id INT4 NOT NULL DEFAULT nextval('person_id_seq'), - - name TEXT - - ); - - CREATE UNIQUE INDEX person_id_key ON person ( id ); - - A szekvenci�kkal kapcsolatban olvasd el a create_sequence man oldalt. A - sor OID-j�t is haszn�lhatod egyedi azonositok�nt, b�r ebben az esetben - figyelj a pg_gump haszn�lat�n�l a -o opciora (COPY WITH OIDS, m�sol�s - OID-dal), hogy meg?rizd az �rt�keket. - - 4.15.2) Hogyan kaphatom meg egy SERIAL besz�r�s �rt�k�t? - - Egy megold�s erre az, ha a nextval() funkcioval megszerzed az �rt�ket m�g - miel�tt besz�rn�d az adatot a t�bl�ba. Erre itt l�thatsz egy p�ld�t: - - new_id = execute("SELECT nextval('person_id_seq')"); - - execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise - Pascal')"); - - Esetleg lek�rdezheted a szekvencia �llapot�t a sor besz�r�sa ut�n. - - execute("INSERT INTO person (name) VALUES ('Blaise Pascal')"); - - new_id = execute("SELECT currval('person_id_seq')"); - - V�g�l pedig, haszn�lhatod a visszaadott OID �rt�ket is, b�r ez a lehet� - legkev�sb� portolhato. Perl DBI-ben, Edmund Mergl DBD::Pg modulj�ban az - OID �rt�k haszn�lhato a $sth->execute() ut�n ($sth->{pg_oid_status}). - - 4.15.3) A currval() �s a nextval() nem teremt holtpont vesz�lyes helyzetet - a felhaszn�lok k�z�tt? - - Nem. A currval() funkcio a szerver processzed �ltal adott �rt�ket adja - vissza, nem pedig a t�bbi szerver processz �ltal adottat. - - 4.15.4) Mi�rt nem haszn�lodnak fel �jra a sequence sz�mok tranzakcio abort - eset�n? - - Mi�rt vannak probl�m�k a serial oszlopok sz�moz�s�val? - - A p�rhuzamoss�g fejleszt�se �rdek�ben a sorozat sz�mokat k�r�sre adja ki a - szerver futo tranzakcioknak, �s azokat nem z�rja, amig a tranzakcio v�get - nem �r. Ez jukakat okoz a sz�moz�sokban a visszaforditott tranzakciok - miatt. - - 4.16) Mi a OID? Mi a TID? - - Az OID a PostgreSQL egyedi sor azonositoja. Minden sor, ami l�trej�n a - szerveren, kap egy OID-t. Minden OID, amit az initdb alatt j�n l�tre 16384 - alatt van (l�sd include/access/transam.h). Minden, felhaszn�lo �ltal - l�trehozott OID legal�bb ennyi. Alap�rtelmez�sben, az OID nem csak a - t�bl�ban vagy az adatb�zisban egyedi, hanem a teljes PostgreSQL adatb�zis - rendszerben. - - A PostgreSQL az OID-okat a bels� t�bl�iban haszn�lja a sorok t�bl�k k�z�tt - �sszekapcsol�s�hoz. Ezek az OID-k haszn�lhatoak a rekordok azonosit�s�ra - is amikor t�bl�kat csatol �ssze a szerver (JOIN). Az OID-ot haszn�lhatod - mez� t�pusk�nt is, �s indexelheted is. - - Az OID �rt�k egy k�zponti ter�letr�l sz�rmazik, amit minden szerver - processz haszn�l. Ha az OID-ot valami m�sra szeretn�d cser�lni: - - CREATE TABLE new_table(old_oid oid, mycol int); - - SELECT old_oid, mycol INTO new FROM old; - - COPY new TO '/tmp/pgtable'; - - DELETE FROM new; - - COPY new WITH OIDS FROM '/tmp/pgtable'; - - Az OID 4 byte-os integer �rt�kk�nt t�rolodik, igy 4 milli�rdn�l - t�lcsordul. M�g soha senki nem jelezte hogy ez t�rt�nt volna, �s ezt a - korl�tot igyeksz�nk elt�volitani, m�g miel�tt b�rki �szrevenn�. - - A TID a fizikai sorok blokk �s offszet c�mmel valo azonosit�s�ra szolg�l. - A TID v�ltozik minden rekord modosit�s �s t�rl�s alkalm�val. Ezeket az - indexek haszn�lj�k hogy a fizikai sort gyorsan megtal�lj�k. - - 4.17) Mi a PostgreSQL-ben haszn�lt kifejez�sek jelent�se? - - N�hol a forr�s kodban �s a dokumnet�cioban tal�lhatoak kifejez�sek, - amelyek �ltal�nosabb jelent�ssel b�rnak. Itt van n�h�ny: - - * t�bla (table), rel�cio (relation), oszt�ly (class) - * sor (row), rekord (record), tuple (nincs magyar jelent�s) - * oszlop (column), mez� (field), attributum (attribute) - * retrieve, select - * helyettesit (replace), modosit (update) - * hozz�f�z (append), besz�r (insert) - * OID, sorozat �rt�k (serial value) - * portal, cursor - * range variable, t�bla n�v, t�bla alias - Az �ltal�nos adatb�zis kifejez�sek �sszefoglaloj�t itt olvashato: - - http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.html - - 4.18) Mi�rt kapom ezt a hib�t: "ERROR: Memory exhausted in - AllocSetAlloc()"? - - Lehet hogy elfogyott a virtu�lis memori�d, vagy a kerneled er�forr�s - korl�tai alacsonyak. Prob�ld ki ezt miel�tt elinditan�d a postmastert: - - ulimit -d 262144 - - limit datasize 256m - - A shellt�l f�gg�en ezek k�z�l csak az egyik fut majd le, de a processzek - adatszegmens�t sokkal magasabbra �llitja, ami tal�n el�g lesz a lek�rdez�s - v�grehajt�s�hoz. Ez az utas�t�s a jelenlegi processzre (a shelled) - �rv�nyes, �s minden �ltala l�trehozott processzre. Ha probl�m�d van az SQL - klienssel, mert a szerver t�l nagy adatot k�ld vissza, prob�ld meg e - klienssel is ugyanezt. - - 4.19) Hogyan tudhatom meg PostgreSQL, milyen verziot futtatok? - - A psql programban select version(); - - 4.20) Mi�rt kapok "invalid large obj descriptor" hib�t nagy objektumok - kezel�s�n�l? - - A nagy objektumok kezel�s�t egy tranzakcios blokkban helyezd el. (BEGIN �s - COMMIT k�z�tt) - - Jelenleg a PostgreSQL ezt a szab�lyt azzal teszi k�telez�v�, hogy a - tranzakcio v�g�n a nagy objektumokat lez�rja, igy a tranzakcio ut�n az - els� m�velet amit az objektumon v�grahajtan�l hib�s lesz. - - Ha olyan programoz�si fel�letet haszn�lsz mint az ODBC vagy a JDBC akkor - valoszin�leg ki kell kapcsolnod az auto-commit-ot. - - 4.21) Hogy hozhatok l�tre olyan oszlopot, aminek alap�rtelmezett �r�tke a - jelenlegi id�? - - Haszn�ld a CURRENT_TIMESTAMP -ot: - - CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP ); - - 4.22) Mi�rt olyan lass�ak az al-lek�rdez�seim IN-nel? - - Jelenleg az al-lek�rdez�seket a k�ls� lek�rdez�shez csatoljuk. Ha az - allek�rdez�s csak kev�s sort eredm�nyez �s a k�ls� lek�rdez�s sokat, akkor - az IN is gyors. Az EXISTS kulcsszo haszn�lat�val gyorsithatod a - lek�rdez�seket. - - SELECT * - - FROM tab - - WHERE col IN (SELECT subcol FROM subtab); - - EXISTS haszn�lat�val: - - SELECT * - - FROM tab - - WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col); - - Ahhoz hogy ez gyorsan fusson le, a subcol indexelt oszlopnak kell hogy - legyen. Rem�lj�k ezt a korl�tot siker�l hamarosan legy�zn�nk. - - 4.23) Hogyan tudok outer join-t v�grehajtani? - - A PostgreSQL a szabv�nyos SQL szintaktik�t k�veti. Itt van k�t p�lda: - - SELECT * - - FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col); - - vagy - - SELECT * - - FROM t1 LEFT OUTER JOIN t2 USING (col); - - Ezek az identikus lek�rdez�sek �sszekapcsolj�k a t1.col �s a t2.col - mez�ket, �s a t1 b�rmelyik kapcsolatlan sor�t is visszadj�k. A RIGHT JOIN - a t2 kapcsolatlan sorait adta volna vissza, a FULL JOIN pedig a kapcsolt, - �s mindk�t t�bla kapcsolatlan sorait adja. Az OUTER kulcsszo opcion�lis, a - LEFT, RIGHT �s FULL JOIN szintaktikailag helyes. Az �tlagos - �sszekapcsol�sokat INNER JOIN-nak nevezz�k. - - Az el�z� kiad�sokban a OUTER JOIN lek�rdez�seket UNION �s NOT IN - kulcsszavakkal lehetett szimul�lni. P�ld�ul a tab1 �s a tab2 - �sszekapcsol�sa: - - SELECT tab1.col1, tab2.col2 - - FROM tab1, tab2 - - WHERE tab1.col1 = tab2.col1 - - UNION ALL - - SELECT tab1.col1, NULL - - FROM tab1 - - WHERE tab1.col1 NOT IN (SELECT tab2.col1 FROM tab2) - - ORDER BY col1 - - 4.24) Hogyan tudok t�bb adatb�zison v�grehajtani lek�rdez�st? - - Arra nincs lehet�s�g, hogy m�s adatb�zisbol k�rdezz le adatot.Mivel a - PostgreSQL adatb�zis specifikus rendszer t�bl�kat t�ltbe, bizonytalan hogy - egy adatb�zisok k�z�tti lek�rdez�snek hogyankellene viselkednie. - - A contrib/dblink k�nyvt�rban tal�lsz egy megold�st erre, ami funkcio - hiv�sok segits�g�vel m�k�dik. Persze, a kliens hozhat l�treszimult�n - kapcsolatot t�bb adatb�zissal, �s �sszef�s�lheti az eredm�nyeket. - - 4.25) Hogy tudok t�bb soros vagy oszlopos eredm�nyt visszaadni egy - funkciobol? - - A PL/pgSQL t�rolt elj�r�s nyelvvel refcursor haszn�lat�val. R�szletesen - itt: - - http://www.PostgreSQL.org/idocs/index.php?plpgsql-cursors.html - - 4.26) Mi�rt nem tudom megbizhatoan l�trehozni �s t�r�lni az �tmeneti - t�bl�kat a PL/pgSQL funkciokban? - - A PL/pgSQL cacheli a funkciok tartalm�t, aminek az a szerencs�tlen - mell�khat�sa, hogy ha egy PL/pgSQL funkcio haszn�l egy �tmeneti t�bl�t, - ami k�so"bb t�rl�dik majd ujra l�trej�n, akkor az �jra lefuto funkcio nem - fogja megtal�lni a t�bl�t, mert a cache v�ltozat a r�gi t�bl�ra tartalmaz - mutatot. A megold�s erre az EXECUTE haszn�lata az �tmeneti t�bl�k - kezel�s�re PL/pgSQL-ben. Ez a lek�rdez�s �jraford�t�s�t fogja el�id�zni - minden alkalommal. - - 4.27) Milyen replik�cios lehet�s�gek vannak? - - B�r a replik�cio egyetlen ter�let, t�bb technologia l�tezik replik�ciora, - term�szetesen mindnek meg vannak a maga elo"nyei �s h�tr�nyai. - - A master/slave replik�cios megold�ssal a master adatb�zison hajthatunk - v�gre modos�t�sokat, m�g a slave adatb�zisokon csak lek�rdez�seket. A - PostgreSQL legn�pszeru"bb master/slave replik�cios megold�sa a Solny-I. - - Sz�mos m�s master/slave replik�cios lehet�s�g l�tezik.Egy List�t - olvashatsz ezekr�l itt: - - http://gborg.PostgreSQL.org/genpage?replication_research - - A multi-master replik�cio leheto"v� teszi t�bb master adatb�zis - haszn�lat�t, b�r ez a technologia drasztikusan cs�kkenti az adatb�zis - teljes�tm�ny�t a sok szinkorniz�cio miatt. A PGCluster a legelterjedtebb - ilyen megold�s. - - Egy t�bbfelhaszn�los replik�cios rendszer k�sz�l itt: - - http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php. - - 4.28) Milyen kodol�si lehet�s�gek vannak? - - * A contrib/pgcrypto tartlamaz sz�mos SQL lek�rdez�sben haszn�lhato - kodol�st. - * A kliens-szerver kommunik�cio rejtjelez�s�re a hostssl haszn�lhato. - Ezt a pg_hba.conf-ben enged�lyeztheted. - * Az adatb�zis felhszn�lok jelszavait t�rol�skor kodolja a rendszer. - * R�gebbi verziokban a PASSWORD_ENCRYPTION opcioval lehetett - bekapcsolni. - * A szerveren haszn�lhatsz kodolt f�jrendszert. - - ---------------------------------------------------------------------- - -A PostgreSQL kiterjeszt�se - - 5.1) �rtam egy felhaszn�loi funkciot. Mi�rt core dumpol az adatb�zis - amikor haszn�lom? - - Sz�mos probl�ma lehet. El�bb prob�ld ki a funkciodat egy k�l�n�llo - alkalmaz�sban. - - 5.2) Hogyan lehet �j adatt�pusokat �s funkciokat hozz�adni a PostgreSQL - disztrib�ciohoz? - - K�ldd el a kieg�sz�t�seid a pgsql-hackers levelez�si list�ra �s a - forr�skodjaid v�g�l a contrib-ban k�tnek ki. - - 5.3) Hogyan lehet olyan C funkciot �rni, ami Tuple-t ad vissza? - - A 7.3 verziotol kezdve a PostgreSQL t�mogatja a t�bl�zatokat viszzaado - funkciokat C, PL/pgSQL �s SQL nyelveken. B�vebb dokument�ciot a Programozo - k�zik�nyvben tal�lsz. Egy C p�lda funkcio tal�lhato a contrib/tablefunc - k�nyvt�rban. - - 5.4) Megv�ltoztattam egy forr�s �llom�nyt. Mi�rt nem v�ltozik a bin�ris - �jraford�t�s ut�n? - - A Makefile-ok nem ismerik a include �llom�nyok megfelel� f�gg�s�geit. - V�gre kell hajtanod egy make clean-t, majd �jra egy make-t. Ha GCC-t - haszn�lsz felhaszn�lhatod a configure script --enable-depend opcioj�t, �gy - a compiler maga fogja ellen�rizni a f�gg�s�geket. diff --git a/doc/FAQ_japanese b/doc/FAQ_japanese deleted file mode 100644 index ca2618f8ba..0000000000 --- a/doc/FAQ_japanese +++ /dev/null @@ -1,1126 +0,0 @@ -PostgreSQL(�ݥ��ȥ��쥹�����塼������)�ˤĤ��Ƥ褯�������Ȥ��β���(FAQ) - -��ʸ�ǽ�������: Thu Jan 01 14:01:00 EDT 2009 - -���ߤΰݻ�������: Bruce Momjian (bruce@momjian.us) -Maintainer of Japanese Translation: Jun Kuwamura (juk at postgresql.jp) - -����ʸ��κǿ��Ǥ� http://www.postgresql.org/docs/faqs.FAQ.html �Ǹ��뤳�Ȥ��� -���ޤ��� - -�ץ�åȥۡ������ͭ�μ���ˤĤ��Ƥ�: http://www.postgresql.org/docs/faq/ -�˲���������ޤ��� - -(�ʲ������Ԥˤ������� [������ �� ] �ȤǰϤ�ǵ����ޤ���) -[������ - ���ܸ��Ǥ�FAQ�ϡ� - http://www.postgresql.org/docs/faqs.FAQ_japanese.html - �ˤ���ޤ��� - �ǿ������ܸ��ǤˤĤ��Ƥϡ�����ʸ��κǸ�ˤ�������ܸ��ǤˤĤ��ơפ�������� - -] - -������������������������������������������������������������������������������ - - ����Ū�ʼ��� - -1.1) PostgreSQL�Ȥϲ��Ǥ��������θƤ����ϡ� Postgres�Ȥϡ� -1.2) ï�� PostgreSQL ��ȥ����뤷�Ƥ��ޤ����� -1.3) PostgreSQL������Ϥɤ��ʤäƤޤ����� -1.4) PostgreSQL�ݡ��Ȥ���ץ�åȥۡ���ϡ� -1.5) PostgreSQL�Ϥɤ���������Ǥ��ޤ����� -1.6) �ǿ��Υ����Ϥɤ�Ǥ����� -1.7) ���ݡ��ȤϤɤ��Ǽ������ޤ����� -1.8) �Х���ݡ��ȤϤɤΤ褦��ȯ�����ޤ����� -1.9) ���ΤΥХ���̤��̵����ǽ�Ϥɤ���äƸ��Ĥ��ޤ����� -1.10) �ɤΤ褦��ʸ����ޤ����� -1.11) SQL�Ϥɤ�����гؤ٤ޤ����� -1.12) �ѥå��������ꡢ��ȯ������ä���ˤϤɤ�����Ф褤�Ǥ����� -1.13) ¾��DBMS����٤�PostgreSQL �Ϥɤ��ʤΤǤ����� PostgreSQL���Ȥ߹��ߤ˻Ȥ� -�ޤ����� -1.14) PostgreSQL�Ϲ���κǿ��βƻ��֤��ѹ����ޤ����� -1.15) PostgreSQL�Υ��ꥹ�Ȥι��ɤ����ˤϤɤ�����Ф褤�Ǥ������ޤ� -���Żҥ����ʣ���Ƽ������ʤ��褦�ˤ���ˤϤɤ����ޤ����� - - �桼�������饤����Ȥμ��� - -2.1) PostgreSQL �ˤϤɤ�ʥ����ե��������Ȥ��ޤ����� -2.2) PostgreSQL �� Web �ڡ�����Ϣ�Ȥ�����ˤϤɤ�ʥġ��뤬����ޤ����� -2.3) PostgreSQL �˥���ե����롦�桼�������ե������Ϥ���ޤ����� - - ������μ��� - -3.1) �ɤ�����С�PostgreSQL��/usr/local/pgsql �ʳ��ξ��˥��ȡ���Ǥ��ޤ� -���� -3.2) ¾�Υۥ��Ȥ������³�ϤɤΤ褦�����椷�ޤ����� -3.3) ����ɤ���ǽ�����뤿��ˤϡ��ǡ����١����������ɤΤ褦��Ĵ�����ޤ��� -�� -3.4) �ɤΤ褦�ʥǥХ���ǽ���Ȥ��ޤ����� -3.5) ��³���褦�Ȥ���Ȥ��� 'Sorry, too many clients' ���Ф�ΤϤʤ��Ǥ����� -3.6) PostgreSQL�Υ��åץ��졼�ɤμ��Ϥɤ��ʤ�ޤ����� -3.7) �ϡ��ɥ������ˤϤɤΤ褦�ʥ���ԥ塼����Ȥ��Ф褤�Ǥ����� - - ����μ��� - -4.1) �ǽ�Τ����Ĥ��Υ����Τߤ� select ����ˤϤɤ����ޤ�����������ʥ����� -4.2) ������줿�ơ��֥롢����ǥå������ǡ����١���������ӡ��桼����ɤΤ褦�� -���Ƹ��Ĥ��Ф��ޤ����� -4.3) �����Υǡ��������פ��ѹ�����ˤϤɤ����ޤ����� -4.4) �������ơ��֥롢�ǡ����١����κ��祵�����ϡ� -4.5) ����Ū�ʥƥ����ȥե�����Υǡ�������¸����ˤϡ��ǡ����١����Υǥ��������� -�ϤɤΤ��餤ɬ�פǤ����� -4.6) �����꤬�٤��ΤϤʤ��Ǥ��礦���ʤ�������ǥå������Ȥ��ʤ��ΤǤ��礦���� -4.7) �����ꥪ�ץƥ��ޥ��������ɤΤ褦�˥������ɾ�����Ƥ�������ˤϤɤ����� -������ -4.8) ����ɽ���Ǥθ�������ʸ���Ⱦ�ʸ���Ȥ���̤��ʤ�����ɽ�������ϤɤΤ褦�˼¸� -���ޤ�������ʸ���Ⱦ�ʸ���Ȥ���̤��ʤ������Τ���Υ���ǥå����ϤɤΤ褦�˻Ȥ� -�ޤ����� -4.9) ���������ǡ��ե�����ɤ� NULL �Ǥ��뤳�ȤФ���ˤϤɤ����ޤ����� -NULL�β�ǽ���Τ����Τ�ɤΤ褦�����Ϣ��Ǥ��ޤ���? �ե�����ɤ�NULL���ɤ��� -�ǤɤΤ褦�˥����Ȥ��Ǥ��ޤ����� -4.10) ����������ʸ�����Τ��줾��ΰ㤤�ϲ��Ǥ����� -4.11.1) ����(serial)����ư��ʬ�ե�����ɤϤɤΤ褦�ˤĤ���ޤ����� -4.11.2) SERIAL�ǡ�����������������ͤϡ��ɤ�����������ޤ����� -4.11.3) currval() ��¾�Υ桼���Ȥζ�����֤˴٤뤳�ȤϤʤ��Ǥ����� -4.11.4) �ȥ����������Ǥ����Ȥ��ˤ⤦�����ɥ��������ֹ椬�Ȥ��ʤ��� -�Ϥʤ��Ǥ�������������SERIAL�����˶���������ΤϤʤ��Ǥ����� -4.12) OID �Ȥϲ��Ǥ����� TID �Ȥϲ��Ǥ����� -4.13) ���顼��å����� "ERROR: Memory exhausted in AllocSetAlloc()"���Ф�ΤϤ� -���Ǥ����� -4.14) �ɤΥС������� PostgreSQL �����餻�Ƥ���Τ���Ĵ�٤�ˤϤɤ����ޤ����� -4.15) ���ߤλ��郎�ǥե���ȤȤʤ�褦�ʥ����ϤɤΤ褦�ˤĤ���ޤ����� -4.16) �������(outer join)�ϤɤΤ褦�˼¸����ޤ���? -4.17) ʣ���Υǡ����١�����Ȥ��䤤��碌�ϤɤΤ褦�ˤ���ФǤ��ޤ����� -4.18) �ؿ�����ʣ���Υ����ޤ��ϥ������֤��ˤϤɤ����ޤ����� -4.19) PL/PgSQL �δؿ�����ǰ���ơ��֥�˥�����������Ȥ����ɤ����� "relation -with OID ##### does not exist" �Ȥ������顼��������ΤǤ��礦���� -4.20) �ɤΤ褦�ʥ�ץꥱ�������Υ���塼�������ޤ����� -4.21) �ơ��֥�ȥ�����̾��������������ǧ������ʤ��ΤϤʤ��Ǥ������ʤ��� -ʸ����(����ԥ��饤��)�ϲ�¸����ʤ��ΤǤ���? - - ���ܸ�˴ؤ������ - -5.1) ���ܸ줬���ޤ������ʤ��ΤϤʤ��Ǥ����� -5.2) psql ��Windows���饢�����������Ȥ��ˡ����ܸ줬ʸ����������ΤǤ����� -5.3) PostgreSQL�����ܸ����ʸ�����ϤǤ��ޤ����� -������������������������������������������������������������������������������ - - ����Ū�ʼ��� - -1.1) PostgreSQL�Ȥϲ��Ǥ��������θƤ����ϡ� Postgres�Ȥϡ� - -PostgreSQL��Post-Gres-Q-L(�ݥ��ȡ����쥹�����塼������) ��ȯ�����ޤ��������ä� -��Ǥ�ñ��� Postgres �ȸƤФ�뤳�Ȥ⤢��ޤ�����"PostgreSQL"��ɤ�ȯ�����뤫 -���ˤʤ�ͤΤ���ˡ������ե�������Ѱդ��Ƥ���ޤ��� - -PostgreSQL �ϥ��֥�������-��졼����ʥ�ǡ����١��������ƥ�ǡ�����Ū�ʾ��ѥ� -�����١��������ƥ�ˡ�������DBMS�����ƥ�˸�����褦�ʲ��ɤ��ܤ��줿��ħ��ͭ -���ޤ���PostgreSQL�ϡ�̵���Ǵ����ʥ����������ɤ�������뤳�Ȥ��Ǥ��ޤ��� - -PostgreSQL �γ�ȯ�ϡ��ۤȤ�ɤ���������ˤҤ����ä��ܥ��ƥ����γ�ȯ�Ԥˤ�ä� -�������ͥåȤ��̤������ߥ�˥��������ˤ�äƹԤ��Ƥ��ޤ������ߥ�˥ƥ� -�ˤ��ץ��������ȤǤ��뤿�ᡢ�ɤδ�Ȥ�����⤦���ޤ���ȯ�˻��ä�������� -�� http://www.postgresql.org/docs/faqs.FAQ_DEV.html �ˤ��볫ȯ�Ԥ�FAQ�Ƥ��� -������ - -Postgres��PostgreSQL�ι����Ȥ��Ƥ��밦�ΤǤ����ޤ����С����졼�ǤΥץ������� -�ȤǤ�Ȥ�ȻȤ��Ƥ���̾���ǡ��ۤ��Τ�����ΰ��Τ���٤Ƥ��ڤ��˹��ޤ����Ǥ� -��'PostgreSQL' ��ȯ�������Ȼפ��ΤǤ���С����Τ����� 'Postgres' �ȸƤ֤� -���ˤ��ޤ��礦�� - -1.2) ï�� PostgreSQL ��ȥ����뤷�Ƥ��ޤ����� - -PostgreSQL�����֡�����Ѱ����뤤�ϡ�����ȥ�������Ҥ�õ�����Ȥ��Ƥ� -�����ᤶ��� ---- ¸�ߤ��ʤ��ΤǤ����桹�ϡ��濴�Ȥʤ륳�ߥåƥ���CVS���ߥ� -��������ޤ����������Υ��롼�פϥ���ȥ����뤹�뤿��Ȥ������⡢������Τ� -�ΤǤ��������Ǥϡ��ץ��������Ȥϡ�����Ǥ⻲�ä��Ǥ��볫ȯ�Ԥȥ桼���Υ��ߥ�� -�ƥ��ˤ�������դ����ޤ����ɼԤ����ʤ���Фʤ�ʤ����Ȥϡ����ꥹ�� -�֥����饤�֤��ơ������˻��ä��뤳�ȤǤ�����Developer's FAQ�ˤϡ�PostgreSQL -��ȯ�˲ä�����ˤĤ��Ƥξ�����ޤ����� - -1.3) PostgreSQL ������Ϥɤ��ʤäƤޤ����� - -PostgreSQL �ϲ���������˽����ޤ��� - -PostgreSQL�ϸŤ������BSD�饤���β������ۤ���Ƥ��ޤ�������ϴ���Ū�ˤϡ��� -�ѼԤ����Υ����ɤ���������Ѥ��뤳�Ȥ�������Ƥ��ޤ������¤�����Ȥ���С� -���Υ��եȥ�������ȼ�������ʤ�����ˤ����Ƥ�ˡŪ����Ǥ��桹����碌�뤳�Ȥ��� -���ʤ��Ȥ������ȤǤ����ޤ����������ɽ�������Υ��եȥ������Τ��٤Ƥ�ʣ����ɽ -�����뤳�Ȥ�ɬ�פǤ����ʲ��ˡ��桹���ºݤ˻ȤäƤ���BSD���ѵ�������ޤ��� - - [������ - ��ʸ�ϱѸ�Ǥ������ͤȤ��ơ���ʸ��ʻ���Ǻܤ��ޤ��� - ] - - -PostgreSQL Data Base Management System - -Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group Portions -Copyright (c) 1994-1996 Regents of the University of California - -Permission to use, copy, modify, and distribute this software and its -documentation for any purpose, without fee, and without a written agreement is -hereby granted, provided that the above copyright notice and this paragraph and -the following two paragraphs appear in all copies. - -IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST -PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF -THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A -PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND -THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, -SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. - - POSTGRESQL �ǡ����١������������ƥ� - - ��ʬŪ��� (c) 1996-2009, PostgreSQL��ݳ�ȯ���롼�� - ��ʬŪ��� (c) 1994-1996 ����ե���˥�����ܹ� - - - �ܥ��եȥ���������Ӥ���ʸ��켰�Ͼ嵭�����ɽ���ȡ�����ʸ�� - ����Ӥ����³����Ĥ�������Ƥ�ʣ����ź�դ���Ƥ���¤�ˤ��� - �ơ����ѡ�ʣ����������������դε��Ĥ����ʤ���Ū�Ǥ��äƤ⡢ - ̵���Ǥ���Ʊ�ս�̵���˹Ԥʤ��뤳�Ȥ���ǧ��ޤ��� - - ����ե���˥���ؤϡ������ʤ������Ԥˤ������Ƥ⡢���פβ����� - �ޤࡢľ��Ū������Ū�����̡��������뤤��ɬ��Ū�ˤ�����餺������ - »���ˤĤ��ơ����Ȥ�����ե���˥���ؤ�������»���ˤĤ������� - ������Ƥ����Ȥ��Ƥ⡢���ڤ���Ǥ���餤�ޤ��� - - ����ե���˥���ؤϡ�������Ū�ˤ�������ۤ��ݾڤȡ�������Ū�� - ��Ŭ�����˴ؤ��ƤϤ�Ȥ�ꡢ�����˸¤餺�������ʤ��ݾڤ������� - �뤳�Ȥ��������ޤ����ʲ����Ѱդ��줿���եȥ������ϡ֤��Τޤޡפ� - ���ܸ����Ȥ�������ե���˥���ؤϤ����ݻ����ٱ硢���������ɤ� - �뤤�Ͻ��������̳���餤�ޤ��� - - [������ - ����˴ؤ�����ʸ�Ͼ嵭�αѸ�ˤ��ɽ���Ǥ������ܸ����Ϥ����ޤ� - �������٤Ȥ��Ƥ��������� - ] - - -1.4) PostgreSQL�ݡ��Ȥ���ץ�åȥۡ���ϡ� - -����Ū�ˡ��Ƕ��Unix�ߴ��ץ�åȥۡ���Ǥ����PostgreSQL���Ư��������Ϥ��� -���������λ����Ǽºݤ˥ƥ��Ȥ�Ԥʤä����Ȥ���𤬤ʤ��줿�ץ�åȥۡ���� -�Ĥ��Ƥϥ��ȡ����������Ƥ���ޤ��� - -PostgreSQL �ϡ�Win2000 SP4, WinXP, �����ơ�Win2003 �ʤ� Microsoft Windows NT�� -�����Υ��ڥ졼�ƥ������ƥ�ǡ��ͥ��ƥ��֤�����ޤ������餫����ѥå������� -���줿���ȡ��餬 http://www.postgresql.org/download/windows ������������ -�ɤǤ��ޤ��� MSDOS�١�����Windows�ΥС������(Win95, Win98, WinMe)�Ǥϡ�Cygwin -��Ȥä� PostgreSQL �����餻�뤳�Ȥ��Ǥ��ޤ��� - - [���� - ���ܸ�Ǥξ���ϡ����� Windows�Ǥ˴ؤ���FAQ����������� - ���ʤ��Ť��Ǥ��ˡ� - http://old.postgresql.jp/wg/jpugdoc/FAQ_windows.ja.html - ] - - -���Υ����Ȥ� Novell Netware 6 �ؤΰܿ��Ǥ⤢��ޤ��� http:// -developer.novell.com/wiki/index.php/Postgresql �ޤ���OS/2 (eComStation) �С��� -���ϡ� http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key= -postgreSQL&stype=all&sort=type&dir=%2F�ˤ���ޤ��� - - -1.5) PostgreSQL �Ϥɤ���������Ǥ��ޤ����� - -Web�֥饦����ͳ���ȡ� http://www.postgresql.org/ftp/�����줫�顢ftp��ͳ���ȡ� -ftp://ftp.postgresql.org/pub/ ��Ȥ��ޤ��� - -1.6) �ǿ��Υ����Ϥɤ�Ǥ����� - -PostgreSQL �κǿ��ǤϥС������ 8.3.5 �Ǥ��� - -�桹�ϡ�1ǯ��˥�㡼����������ȤΥޥ��ʡ�������Ԥʤ����Ȥ�� -�褷�Ƥ��ޤ��� - - [���� - �С�������ֹ�� x.y.z �κǽ�� x.y ����㡼�������ֹ���� - �������Ǹ�� z ���ޥ��ʡ��������ֹ�ˤʤ�ޤ�����㡼�� - �����ֹ椬Ʊ���Ǥ���С��ǡ����١��������饹���˸ߴ���������ޤ��� - ] - - -1.7) ���ݡ��ȤϤɤ��Ǽ������ޤ����� - -PostgreSQL ���ߥ�˥ƥ���¿���Υ桼���Τ���ˡ��Żҥ���ͳ�λٱ�����Ƥ� -�ޤ����Żҥ��ꥹ�Ȥ֥����饤�֤��뤿��Υᥤ��Ȥʤ륦���֥����Ȥ� -http://www.postgresql.org/community/lists/�Ǥ������줫�顢�Ϥ��ΤǤ���� -general �ޤ��ϡ�bugs �Ȥ��ä��ꥹ�Ȥ��褤�Ǥ��礦�� - -��㡼��IRC �����ͥ�ϡ�Freenode (irc.freenode.net)�� #postgresql �Ȥ����� -���ͥ�Ǥ���UNIX ���ޥ�ɤǤϡ� irc -c '#PostgreSQL' "$USER" irc.freenode.net -��Ȥäƻ��äǤ��ޤ���Ʊ���ͥåȥ���ˡ����ڥ����Υ����ͥ� (# -postgresql-es)���ե��Υ����ͥ� (#postgresqlfr)���֥饸�������ͥ� (# -postgresql-br) �⤢��ޤ����ޤ���EFNet�ˤ�PostgreSQL�����ͥ뤬����ޤ��� - - [����: - 1999ǯ7��23�������ܥݥ��ȥ��쥹�桼������ά��JPUG����Ω����ޤ����� - JPUG ��������ȿ��ǡ�PostgreSQL�����Ѥ����ã����߶��Ϥξ�ȤʤäƤ��ޤ��� - (2006ǯ �����������ư(NPO)ˡ������PostgreSQL�桼����ˤʤ�ޤ����� - Web�����������β����̵���Ǥ�������������β���Ȳ���ι��� - ��ϱ��Ĥ���Ƥ��ޤ���) - �ܤ����ϡ�JPUG ��Web ������: - http://www.postgresql.jp/ - ��������� - - ���ܸ��IRC�����ͥ� '#PostgreSQL:*.jp' ��¸�ߤ��ޤ��� - ] - - -���ѥ��ݡ��Ȳ�ҤΥꥹ�Ȥ� http://www.postgresql.org/support/ -professional_support�ˤ���ޤ��� - -1.8) �Х���ݡ��ȤϤɤΤ褦��ȯ�����ޤ����� - -http://www.postgresql.org/support/submitbug ��PostgreSQL �Х��ե������ˬ��Ƥ� -���������Х���ݡ��Ȥ���Ф�������ˤĤ��Ƥμ���Ȼؿˤ�����ޤ��� - -�����Ʊ���� ftp ������ ftp://ftp.postgresql.org/pub/ �ǡ��ǿ��С������� -PostgreSQL ��õ���ƤߤƤ��������� - -1.9) ���ΤΥХ���̤��̵����ǽ�Ϥɤ���äƸ��Ĥ��ޤ����� - -PostgreSQL�ϳ�ĥ���줿SQL:2003�Υ��֥��åȤݡ��Ȥ��ޤ����桹�Υڡ����� TODO -�ꥹ�Ȥˡ����ΤΥХ�����ǽ�侭��ײ�ˤĤ��Ƥε��Ҥ�����ޤ��� - -��ħ��������̼��Τ����줫�β�������ˤ���ޤ��� - - �� ���ˤ����ˤ��뵡ǽ�ϡ� TODO �ꥹ�ȤǤ� - �� ���Τ褦�ʵ�ǽ�������ޤ�Ƥ��ޤ�����ϡ� - �� SQL���ʤ˽ऺ���¸�ε�ǽ�Ƚ�ʣ������ - �� �����ɤ�ʣ�����Ф������ơ������Τ����ʤ���ǽ - �� ���������Τ���ʤ���ǽ - �� ��������ǽ�ϡ� TODO �Υꥹ�Ȥ˲ä������ޤ��� - -�桹�ϡ�PostgreSQL �˴ؤ��ơ��Żҥ���ľ���б����� TODO �ꥹ�Ȥ�ǿ��˹����� -�Ƥ椯�ۤ���������Ū�Ǥ��뤳�Ȥ��ΤäƤ��ޤ��Τǡ��Х����ץ����ƥ�ϻȤ��ޤ� -���¤ˡ����Υ��եȥ���������ǥХ��Ϥ���ۤ�Ĺ���Ϥ�³���ޤ���¿���Υ� -�����˱ƶ�����Х�����ޤ˽�������ޤ���PostgreSQL�Υ����ǡ����٤Ƥ��ѹ��� -���������������ơ����������Τꤿ����С� CVS �Υ�����å������Ƥ����������� -����Ρ��Ȥˤ��������Υ��եȥ������˲ä���줿���٤Ƥ��ѹ��������夵��Ƥ��� -���� - -1.10) �ɤΤ褦��ʸ����ޤ����� - -���դ���ˡ������Ĥ��Υޥ˥奢��ȥ���饤�ޥ˥奢��(�ޥ˥奢�롦�ڡ���)�� -��Ӥ����Ĥ��ξ����ʥƥ������꤬�ޤޤ�ޤ��� /doc�ǥ��쥯�ȥ��������� -�ޤ����ޥ˥奢��ϡ� http://www.postgresql.org/docs/�ǥ���饤��Ǥ�����Ǥ��� -���� - - [����: - JPUG ʸ���Ҵ�Ϣʬ�ʲ���������줿�ޥ˥奢��⤢��ޤ��� - - http://www.postgresql.jp/document/pg830doc/ - ����ץ쥹���顢 - - PostgreSQL���ե������ޥ˥奢��Ȥ��ƽ��Ǥ���Ƥ��ޤ��� - ] - - -����饤��ǻ��ȤǤ��� PostgreSQL ���ܤ�2������ޤ��� http://www.postgresql.org -/docs/books/awbook.html - - [����: - �����ܤϡ�JPUG��PostgreSQL Book����ʬ�ʲ�� - ���������졢�ԥ����� - �֤Ϥ���Ƥ�PostgreSQL�פȤ��ƽ��Ǥ���Ƥ��ޤ��� - ] - - -����ӡ� http://www.commandprompt.com/ppbook/�Ǥ��� - - [����: - ˮ���ϡּ��� PostgreSQL�� - �����饤�������Ǥ���Ƥ��ޤ��� - ] - - -������ǽ�ʽ��Ҥ���Ͽ�ϡ�http://www.postgresql.org/docs/books/ �ˤ���ޤ��� -PostgreSQL ���Ѿ����⡢http://wiki.postgresql.org/wiki/ -Community_Generated_Articles%2C_Guides%2C_and_Documentation �ˤ���ޤ��� - - [����: - ���ܸ�ν������ˤĤ��Ƥϡ�����PostgreSQL�桼����Ρ�http://www.postgresql.jp/PostgreSQL/references.html - �⤴��������� - ] - - -���ޥ�ɥ饤��Υ��饤����ȥץ������psql �ˤ⡢�����黻�ҡ��ؿ���������¾ -�ξ����Ĵ�٤뤿��ˡ������餷�� \d ���ޥ�ɤ������Ĥ�����ޤ��� \? �����Ϥ��� -�����Ѳ�ǽ�ʥ��ޥ�ɤ�ɽ������ޤ��� - -�桹�� Web �����Ȥˤϡ������������ʸ����ޤ��� - - [����: - 2008ǯ11��18����PostgreSQL��ڤΤ���˰��̸����ξ���� - ��Let's Postgres�פȤ����ݡ����륵���Ȥ������ץޤ�����http://lets.postgresql.jp/ - ] - - -1.11) SQL �Ϥɤ�����гؤ٤ޤ����� - -�ޤ����嵭�ǽҤ٤� PostgreSQL �ˤĤ��Ƥ��ܤ��ɤळ�Ȥ�Ƥ���Ƥ��������� The -Practical SQL Handbook, Bowman Judith S. et al., Addison-Wesley ��¿���Υ桼�� -�˹�ɾ�Ǥ����ۤ��Ǥϡ�The Complete Reference SQL, Groff et al., McGraw-Hill �� -��ɾ�Ǥ��� - -�����餷�������ϡ� - -http://www.intermedia.net/support/sql/sqltut.shtm -http://sqlcourse.com -http://www.w3schools.com/sql/default.asp -http://mysite.verizon.net/Graeme_Birchall/id1.html -http://sqlzoo.net �ˤ���ޤ��� - - [����: - ����PostgreSQL�桼��������ܸ�λ���ʸ���ξҲ�ڡ��� - -http://www.postgresql.jp/PostgreSQL/references.html - ������ޤ��� - �����ѱѻ�Ρ�PostgreSQL���ܸ�ޥ˥奢��� - http://www.net-newbie.com/ - �Ǥϥ���饤��ޥ˥奢��θ������Ǥ��ޤ��� - �ݻ��������UNIX �ǡ����١������� - http://www.wakhok.ac.jp/DB/DB.html - �⥪��饤����ɤळ�Ȥ��Ǥ��ޤ��� - Nikkei BP IT Pro �ˤ����а�ã��� PostgreSQL �����å� - �Ǥ�����������Ȥꤢ���Ƥ��ޤ��� - ] - - -1.12) �ѥå��������ꡢ��ȯ������ä���ˤϤɤ�����Ф褤�Ǥ����� - -�ʳ�ȯ�Ը����Ρ�Developer's FAQ��������� - -1.13) ¾��DBMS�����PostgreSQL�Ϥɤ��ʤΤǤ����� PostgreSQL���Ȥ߹��ߤ˻Ȥ��ޤ� -���� - -���եȥ�������ɾ��������ˡ�ˤϤ����Ĥ�����ޤ�����ǽ����ǽ�ȿ������ȥ��ݡ��Ȥ� -���ʤǤ��� - -��ǽ(Features) - PostgreSQL�ϡ��ȥ��������֥����ꡢ�ȥꥬ�����ӥ塼�������������� - �����ȡ�����ӡ��������줿���å������ʤɡ��絬�Ͼ��� DBMS�����ĵ�ǽ��ۤȤ� - �ɻ��äƤ��ޤ�������� PostgreSQL�ϡ��桼����������Ѿ����롼�롢���줫�顢 - ���å������̾�����ޥ���С������Ʊ��������ʤɡ�����DBMS�������碌�� - ���褦�ʵ�ǽ���Ĥ�������碌�Ƥ��ޤ��� -��ǽ(Performance) - PostgreSQL��¾�ξ��Ѥ��뤤�ϥ����ץ����Υǡ����١����ȸ߳Ѥ���ǽ����� - �ޤ��������̤ǤϤ���ᤫ�ä��ꡢ�ۤ����̤ǤϤ���٤��ä��ꤷ�ޤ���¾�Υǡ� - ���١�������٤���ǽ�ϡ��դĤ� +/-10% ���餤�Ǥ��礦�� -������(Reliability) - �桹�ϡ�DBMS�ο��������⤯�ʤ��ƤϤ��β��ͤ�̵�����Ȥ����Ƥޤ�����ʬ�� - ���Ȥ��ơ����ꤷ�������ɤ�Х���Ǿ��ˤ��Ƥ����������褦���ؤ�Ƥޤ� - �����줾��Υ����Ͼ��ʤ��Ȥ�1 ����ʾ�Υ١������ƥ��Ȥ�Ԥʤ�������� - �ǤΥ��������������ǤȤ��ư��ꤷ�����Ǥʥ����Ǥ��뤳�Ȥ�ʪ��� - �Ƥ��ޤ�������ʬ��Ǥϡ�¾�Υǡ����١�������٤Ƥ�½�����ʤ����Ȥ˼������ - �äƤ��ޤ��� -���ݡ���(Support) - �桹�Υ��ꥹ�Ȥϡ��������뤤���ʤ�����ˤĤ��Ƥ���ؤμ������ - �Ƥ���롢��ȯ�Ԥ�桼�����礭�ʽ��ޤ�ؤ����������Ƥ��ޤ����桹������ - �β����ݾڤ��뤳�ȤϤǤ��ޤ������ѥǡ����١����Ǥ��äƤ��˲�褵�� - ��櫓�ǤϤ���ޤ���ȯ�Ԥ䡢�桼�������ߥ�˥ƥ����ޥ˥奢���ࡢ����� - �������������ɤʤɤ�ľ�ܥ��������Ǥ��뤳�Ȥˤ�äơ�PostgreSQL�Υ��ݡ��Ȥ� - ��¾��DBMS ���ݡ��Ȥ���ͥ�줿��ΤȤʤäƤ��ޤ�������˾�������ơ�������� - ���ѥ��ݡ��Ȥʤɤ⤢��ޤ���FAQ1.7���������ˡ� -����(Price) - PostgreSQL�����Ѥϡ����ѤǤ����ѤǤ⡢���٤�̵���Ǥ����嵭�˼����Ƥ���BSD - ��������λ��ѵ����˳���ʤ��¤ꡢPostgreSQL�Υ����ɤ�����̵���Ǿ��ʤ��Ȥ� - ���ळ�Ȥ��Ǥ��ޤ��� - -PostgreSQL�ϥ��饤����ȡ������С��������ƥ�������߷פ���Ƥ��ơ����饤����� -�ȥ����Ф���Ӥ����������뤤�������ʥץ��������̡������뤳�Ȥ��ᤵ��ޤ��� -¿�����Ȥ߹��ߥ������ƥ�����Ϥ��Τ褦����ݡ��Ȳ�ǽ�Ǥ��������������Ȥ� -�ˤʤäƤ����Ȥ߹��ߥ������ƥ�����ˤ�äƤϡ��ǡ����١��������Ф����ץꥱ���� -��ץ�������������뤳�Ȥ��ᤵ����礬���ꡢPostgres��Ȥ����ȤϤǤ��� -���Τǡ����̤Υǡ����١�������塼���������٤��Ǥ��� - -1.14) PostgreSQL�Ϲ���κǿ��βƻ��֤��ѹ����ޤ����� - -�罣��βƻ��֤��ѹ��ϡ�PostgreSQL�Υ���8.0.4�ʹ�[4+]�ȡ����θ�Υ�㡼�� -��������Ȥ��� 8.1 �ˤϴޤޤ�Ƥ��ޤ������ʥ��ȥ����������ȥ�ꥢ���ѹ��ϡ� -8.0.[10+], 8.1.[6+] ����ӡ����θ�Υ�㡼�����Τ��٤Ƥ˴ޤޤ�ޤ���8.0�� -������PosrgreSQL�Ǥϥ��ڥ졼�ƥ������ƥ�Υ����ॾ����ǡ����١�����ƻ��� -����Τ���˻ȤäƤ��ޤ��� - -������������������������������������������������������������������������������ - -1.15) PostgreSQL�Υ��ꥹ�Ȥι��ɤ����ˤϤɤ�����Ф褤�Ǥ������ޤ� -���Żҥ����ʣ���Ƽ������ʤ��褦�ˤ���ˤϤɤ����ޤ����� - -PostgreSQL��Majordomo �ڡ������顢PostgreSQL�˴ؤ���ʣ���Υ��ꥹ�Ȥι� -�ɤγ��Ϥ���ߤ��Ǥ���褦�ˤʤäƤ��ޤ����ʥ������뤿��ˤ�Majaordomo���� -��������ܿͤΥѥ���ɤ�ɬ�פˤʤ�ޤ����� - -PostgreSQLno���٤ƤΥ��ꥹ�ȤǤϡ��ֿ��ϥ��ꥹ�ȤȤ��ĸ��Υ -�����ƼԤ�������褦�˹������Ƥ���ޤ�������ˤ����ѼԤϡ���äȤ��®�˥� -����ؤ��ֿ����������褦�ˤʤäƤ��ޤ�������ľ�ܼ�����äƤ������ -���Ȥ����ʣ���Ƽ�����ꤿ���ʤ����ϡ�Majordomo ��Change Settings�ڡ������顢 -eliminatecc������å����ޤ����ޤ���selfcopy�Υ����å���Ϥ������Ȥǡ���ʬ������ -�����Υ��ԡ���������ʤ��褦�ˤ�Ǥ��ޤ��� - - �桼�������饤����Ȥμ��� - -2.1) PostgreSQL �ˤϤɤ�ʥ����ե��������Ȥ��ޤ����� - -PostgreSQL �Υ��ȡ���˴ޤޤ��ʪ��C���ȹ��� C�Υ����ե����������Ǥ��� -����¾�Υ����ե���������Ω�����ץ��������Ȥǡ��̡��˥���������ɤ���ޤ��� -ʬ����뤳�Ȥǡ����줾��γ�ȯ�����ब�ȼ��Υ����������塼�����Ĥ��Ȥ��� -����ޤ��� - -PHP �Τ褦�ʤ����Ĥ��Υץ�����ߥ���ϡ� PostgreSQL�Υ����ե�������ޤ� -�Ǥ��ޤ���Perl, TCL, Python, �����ơ����Τۤ������Ѳ�ǽ�ʸ���Υ����ե����� -�ϡ�http://pgfoundry.org �� Drivers/Interfaces �������ȥ����ͥåȤθ����� -�ߤĤ����ޤ��� - -2.2) PostgreSQL �� Web �ڡ�����Ϣ�Ȥ�����ˤϤɤ�ʥġ��뤬����ޤ����� - -�ǡ����١������˻��� Web �ڡ����ˤĤ��Ƥ������餷���Ҳ𤬡� -http://www.webreview.com�ˤ���ޤ��� - -Web �ؤγ�ĥ�Τ���ˤϡ�PHP(http://www.php.net/) ����ۤ��������ե������Ȥ� -�äƤ��ޤ��� - - [����: - PHP�˴ؤ������ܸ�ξ���ϡ�2000ǯ4��19����ȯ��������PHP�桼����Υ����� - http://www.php.gr.jp/ - ���뤤�ϡ�ע�� �व��Υ����� - http://www.geocities.jp/rui_hirokawa/php/ - �ˤ��ʤ�ޤȤ���Ƥ��ޤ��� - ] - - -������ʣ���ʾ�硢¿���οͤ� Perl �����ե������� CGI.pm �� mod_perl ��Ȥ� -�ޤ��� - -2.3) PostgreSQL �˥���ե����롦�桼�������ե������Ϥ���ޤ����� - -���Ѥȥ����ץ�����ȯ�Ԥˤ����ξ���ǡ�PostgreSQL�ˤ�¿����GUI�ġ��뤬���� -��ǽ�ǡ��ܺ٤ʥꥹ�Ȥϡ� PostgreSQL GUI �ġ���ˤĤ��ƤΥ��ߥ�˥ƥ������ɤˤ� -����������� - - [����: - pgAdmin3 ��PostgreSQLɸ��GUI�����ġ���ǡ�Windows��(PostgreSQL - for Windows) ��Ʊ������Ƥ��ޤ����ܤ�������ϡ� - http://www.pgadmin.org/�ˤ���ޤ��� - ] - - -������������������������������������������������������������������������������ - - ������μ��� - -3.1) �ɤΤ褦�ˤ���� /usr/local/pgsql �ʳ��ξ��˥��ȡ���Ǥ��ޤ����� - -��ñ����ˡ�ϡ� configure �����餻��Ȥ��� --prefix ���ץ�������ꤹ�뤳�ȤǤ� -�� - -3.2) ¾�Υۥ��Ȥ������³�ϤɤΤ褦�����椷�ޤ����� - -�����ͤǤϡ�PostgreSQL �� Unix �ɥᥤ���åȡ��ޤ��ϡ�TCP/IP��³�Υ�������� -�������³���������ޤ���postgresql.conf ����� listen_addresses ������ -�����ġ�$PGDATA/pg_hba.conf �ե������Ŭ�ڤ�ľ�����ǡ����١��������Ф�Ƶ�ư�� -�ơ��ۥ��ȥ١�����ǧ�ڤ�ͭ���ˤ��ʤ�������ϡ�¾�Υޥ������³�Ǥ��ʤ��Ǥ� -�礦�� - -3.3) ����ɤ���ǽ�����뤿��ˤϡ��ǡ����١����������ɤΤ褦��Ĵ�����ޤ��� -�� - -��ǽ�����β�ǽ���Τ��ꤽ���ʼ���ΰ褬3�Ĥ���ޤ��� - -��������ѹ� - ������������Ƥ���ɤ���ǽ�����뤳�Ȥ�ޤߤޤ��� - �� ���������ʬ����ǥå�����ޤࡢ����ǥå�������� - �� ʣ����INSERT�Τ�����COPY����� - �� ʣ����ʸ�롼�ײ�����1�ĤΥȥ�������ˤ��ƥ��ߥåȤΥ����Хإ� - �ɤ�︺ - �� ����ǥå������餫�������Υ�������Ф��Ȥ���CLUSTER����� - �� ������ν��ϤΥ��֥��åȤ��֤������LIMIT����� - �� ��������Ƥ��륯�������� - �� ���ץƥ��ޥ��������Τ����פ�ݻ����뤿���ANALYZE����� - �� VACUUM �ޤ��� pg_autovacuum �ξ��� - �� �礭�ʥǡ����ѹ��Τ���Ȥ��ϥ���ǥå������� - - -�����й��� - postgresql.conf������Τ����Ĥ�����ǽ�˱ƶ����ޤ����ܤ����ϡ� - Administration Guide/Server Run-time Environment/Run-time Configuration �� - ����ꥹ�Ȥ������( JPUG�����Ȥ����ܸ��ǡ������Фι���)�������ơ��� - ��Ȥ��ơ� http://www.varlena.com/varlena/GeneralBits/Tidbits/ - annotated_conf_e.html ����ӡ� http://www.varlena.com/varlena/GeneralBits/ - Tidbits/perf.html ��������� - -�ϡ��ɥ����������� - ��ǽ�ˤ�����ϡ��ɥ������αƶ��� http://www.powerpostgresql.com/PerfList/ - �ȡ� http://momjian.us/main/writings/pgsql/hw_performance/index.html (JPUG - �����Ȥ����ܸ���) �˽Ҥ٤��Ƥ��ޤ��� - - - [����: - JPUG����Ĺ���Ҳ�͵����ˤ�롢�ֺ������Ǥ���PostgreSQL���塼�˥� - �Ȥ��������ʡ��� ThinkIT �����Ȥˤ��ꡢ�º�Ȥλ��ͤˤʤ�ޤ��� - http://www.thinkit.co.jp/free/tech/10/1/1.html - ] - - -3.4) �ɤΤ褦�ʥǥХ���ǽ���Ȥ��ޤ����� - -�����й����ѿ��ˤĤ��Ƥϡ� href="http://www.postgresql.org/docs/current/ -interactive/runtime-config-logging.html">http://www.postgresql.org/docs/current -/interactive/runtime-config-logging.html �˼������褦��¿���� log_* �����ꡢ -������ȥץ����������������Ϥ��뤳�Ȥ��Ǥ����ǥХ�����ǽ¬��ˤϤȤƤ����� -�Ǥ��� - -3.5) ��³���褦�Ȥ���Ȥ��� 'Sorry, too many clients' ���Ф�ΤϤʤ��Ǥ����� - -����Ǥ����¤Ǥ��� 100 �Υǡ����١������å�����ã���Ƥ��ޤäƤ��ޤ��������С� -��Ʊ����³�Ǥ���Хå�����ɥץ������������ͤ����䤹ɬ�פ�����ޤ��� -postgresql.conf �����max_connections ���ͤ��ѹ����ƥ����Ф�Ƶ�ư���뤳�ȤDz� -ǽ�ˤʤ�ޤ��� - -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 �ϤۤȤ�ɤΥϡ��ɥ������Dz�Ư���ޤ����� -����������ǽ�����פʾ��ϡ�������Υϡ��ɥ������Υ��ץ����ˤĤ���Ĵ�����뤳 -�Ȥ������Ǥ����Хåƥ�Хå����å��դ��Υ���å������ĥǥ���������ȥ����� -�����Ω���ޤ����桹�Υ��ꥹ�Ⱦ�Ǥ�ϡ��ɥ��������ץ����Υȥ졼�ɥ� -�դˤĤ��Ƶ������뤳�Ȥ��Ǥ��ޤ��� - -������������������������������������������������������������������������������ - - ����μ��� - -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 ff50ec26e3..0000000000 --- a/doc/FAQ_polish +++ /dev/null @@ -1,1279 +0,0 @@ - - Frequently Asked Questions (FAQ) o PostgreSQL - - Ostatnia aktualizacja: Sobota Luty 7 22:16:21 EST 2004 - - Ostatnia aktualizacja tl/umaczenia: Piatek Marzec 5 19:31:12 EST 2004 - - Obecny maintainer: Bruce Momjian (pgman@candle.pha.pa.us) - - Tl/umaczenie: Marcin Mazurek (m.mazurek@netsync.pl) - - Najbardziej aktualna wersje tego dokumentu mozna znalezc pod adresem: - http://www.PostgreSQL.org/docs/faqs/FAQ.html. - - Odpowiedzi na pytania dotyczace konkretnych system�w operacyjnych - mozna znalezc pod adresem: http://www.PostgreSQL.org/docs/index.html. - _________________________________________________________________ - - Pytania og�lne - - 1.1) Co to jest PostgreSQL? Jak to wymawiac? - 1.2) Jaka licencja chroniony jest PostgreSQL? - 1.3) Na jakich systemach Unixowych dzial/a PostreSQL? - 1.4) Na jakich nie-Unixowych systemach dzial/a PostgreSQL? - 1.5) Skad moge sciagnac PostgreSQL? - 1.6) Gdzie mozna szukac wsparcia technicznego? - 1.7) Jaka jest ostatnia dostepna wersja? - 1.8) Jaka dokumentacja jest dostepna? - 1.9) Gdzie moge znalezc informacje o znanych bl/edach czy brakujacych - rozwiazanich? - 1.10) Jak moge sie nauczyc SQL? - 1.11) Czy PostgreSQL ma rozwiazany problem Y2K? - 1.12) Jak moge sie przyl/aczyc do grupy os�b bezposrednio pracujacych - nad rozwojem PostgreSQL? - 1.13) Jak moge zgl/aszac bl/edy? - 1.14) Jak mozna por�wnac PostgreSQL w stosunku do innych DBMS? - 1.15) W jaki spos�b moge wesprzec finansowo PostgreSQL? - - Pytania uzytkownik�w - - 2.1) Czy sa jakies driwery ODBC dla PostgreSQL? - 2.2) Jakie istnieja narzedzia pozwalajace na dostep do PostgreSQL - przez www? - 2.3) Czy istnieje jakies GUI dla PostgreSQL? - 2.4) Za pomoca jakich jezyk�w programowania mozna sie komunikowac z - PostgreSQL? - - Pytania dotyczace administracji - - 3.1) Jak moge zainstalowac PostgreSQL w innej lokalizacji niz - /usr/local/pgsql? - 3.2) Podczas startu postmaster'a, otrzymuje komunikat: Bad System Call - lub "core dumped". Dlaczego? - 3.3) Podczas startu postmaster'a, otrzymuje komunikat o bl/edzie: - IpcMemoryCreate. Dlaczego? - 3.4) Podczas startu postmaster'a, otrzymuje komunikat o bl/edzie: - IpcSemaphoreCreate. Dlaczego? - 3.5) W jaki spos�b moge kontrolowac pol/aczenia z innych host�w? - 3.6) Jak powinienem skonfigurowac system baz danych aby uzyskac lepsza - wydajnosc? - 3.7) Jakie sa mozliwosci wyszukiwania bl/ed�w? - 3.8) Skad sie bierze komunikat: "Sorry, too many clients" podczas - pr�by pol/aczenia sie z baza danych? - 3.9) Jakie pliki znajduja sie w pg_temp? - 3.10) Dlaczego konieczne jest przy upgradzie PostgreSQL korzystanie ze - skrypt�w dump i restore? - - Pytania dotyczace uzytkowania - - 4.1) Jaka jest r�znica pomiedzy kursorami binarnymi (binary cursors) i - zwykl/ymi kursorami (normal cursors)? - 4.2) Jak moge pobrac za pomoca SELECT jedynie kilka pierwszych wynik�w - zapytania? - 4.3) Jak moge uzyskac liste wszystkich tabel czy innych rzeczy pod - psql? - 4.4) Jak usunac kolumne z tabeli lub zmienic jej typ? - 4.5) Jaki jest maksymalny rozmiar dla rzedu, tabeli i bazy danych? - 4.6) Jak duzo miejsca w bazie danych jest potrzebne aby przechowac - dane ze zwyczajnego pliku tekstowego? - 4.7) Jak moge sprawdzic jakie tabele, klucze, bazy danych i - uzytkownicy sa utworzeni? - 4.8) Moje zapytania sa wolne lub nie uzywaja kluczy. Dlaczego? - 4.9) Jak moge sprawdzic w jakis spos�b "query optimizer" wykonuje moje - zapytanie? - 4.10) Co to jest "R-tree index"? - 4.11) Co to jest "Genetic Query Optimizer"? - 4.12) Jak moge uzywac wyrazen regularnych w zapytaniach i zapytan - case-insensitive w wyrazeniach regularnych? Jak korzystac z indeks�w - dla zapytan case-insensitive? - 4.13) Jak sprawdzic w zapytaniu czy pole ma wartosc NULL? - 4.14) Jaka jest r�znica pomiedzy r�znymi typami tekstowymi (character - types)? - 4.15.1) Jak moge utworzyc pole typu int, kt�re samo zwieksza swoja - wartosc? - 4.15.2) Jak pobrac wartosc pola typu SERIAL po wykonaniu insert'u? - 4.15.3) Czy uzycie currval() i nextval() nie doprowadzi do "race - condition" z innymi uzytkownikami? - 4.15.4) Dlaczego numery sekwencji nie sa ponownie uzywane przy - przerwaniu transakcji? Skad sie biora luki w numerowaniu kolumny - tabeli sekwencjami/SERIALem? - 4.16) Co to jest OID? Co to jest TID? - 4.17) Jakie jest znaczenie niekt�rych termin�w w PostgreSQL? - 4.18) Skad bierze sie ten bl/ad: "ERROR: Memory exhausted in - AllocSetAlloc()"? - 4.19) Jak sprawdzic jakiej wersji PostgreSQL uzywam? - 4.20) Dlaczego operacje, kt�re wykonuje na duzych obiektach - "large-object" zwracaja komunikat: "invalid large obj descriptor"? - 4.21) Jak stworzyc kolumne kt�rej domyslna wartoscia bedzie biezacy - czas? - 4.22) Dlaczego zapytania uzywajace IN sa takie wolne? - 4.23) Jak wykonac "outer join"? - 4.24) Jak wykonywac zapytanie uzywajace kilku baz danych jednoczesnie? - 4.25) Jak zwr�cic w funkcji wiele rzed�w lub kolumn? - 4.26) Dlaczego nie moge w spos�b pewny tworzyc/usuwac tabel - tymczasowych w funkcjach PL/PgSQL? - 4.27) Jakie sa mozliwosci replikacji w PostgreSQL? - 4.28) Jakie mozliwosci szyfrowania oferuje PostgreSQL? - - Rozwijanie PostgreSQL - - 5.1) Napisal/em wl/asna funkcje. Kiedy uzyje jej w psql, program - zrzuca pamiec (dump core)? - 5.2) Jak moge dodac/zgl/osic nowe typy czy funkcje do PostgreSQL? - 5.3) Jak napisac funkcje C zwracajaca krotke (tuple)? - 5.4) Zmienil/em plik zr�dl/owy. Dlaczego po rekompilacji nie widac - zmiany? - _________________________________________________________________ - - Pytania og�lne - - 1.1) Co to jest PostgreSQL? Jak to wymawiac? - - PostgreSQL wymawia sie Post-Gres-kju-el. Czesto podczas rozm�w uzywany - jest termin "Postgres" - - PostgreSQL jest rozszerzeniem systemu zarzadzania bazami danych - - POSTGRES, kolejna generacja rozwojowego prototypu DBMS. Mimo, ze - PostgreSQL zachowal/ bardzo dobrze zbudowany model danych (data model) - i bogaty zestaw typ�w danych POSTGRES'a, zastapil/ PostQuel'owy jezyk - zapytan z rozbudowanym podzbiorem jezyka SQL. PostgreSQL jest - oprogramowaniem darmowym z dostepnymi cal/ymi zr�dl/ami. - - Rozw�j PostgreSQL jest prowadzony przez grupe ludzi z Internetu, - komunikujacych sie poprzez mailowe listy dyskusyjne PostgreSQL. - Obecnym koordynatorem jest Marc G. Fournier (scrappy@PostgreSQL.org). - (Zobacz pytanie 1.6 jak sie przyl/aczyc). Ta grupa ludzi jest - odpowiedzialna za cal/y rozw�j PostgreSQL. PostgreSQL jest projektem - nie kontrolowanym przez zadna firme, aby wziac udzial/ w jego rozwoju - sprawdz, http://www.PostgreSQL.org/docs/faqs/FAQ_DEV.html - - Autorami PostgreSQL 1.01 byli Andrew Yu and Jolly Chen. Wiele innych - os�b pomogl/o przy portowaniu, testowaniu, debugowaniu i rozwijaniu - kodu. Oryginalny kod Postgresa, na kt�rym zostal/ oparty PostgreSQL, - byl/ wysil/kiem student�w oraz pracownik�w pracujacych pod - kierownictwem profesora Michael'a Stonebraker'a z University of - California w Berkeley. - - Oryginalna nazwa oprogramowania w Berkeley byl/ Postgres. Po dodaniu - obsl/ugi SQL w 1995, nazwa zostal/a zmieniona na Postgres95. Pod - koniec roku 1996 nazwa zostal/a zmieniona na PostgreSQL. - - 1.2) Jaka licencja chroniony jest PostgreSQL? - - PostgreSQL objety jest nastepujaca licencja: - - PostgreSQL Data Base Management System - - Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group - Portions Copyright (c) 1994-6 Regents of the University of California - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose, without fee, and without a written - agreement is hereby granted, provided that the above copyright notice - and this paragraph and the following two paragraphs appear in all - copies. - - IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY - FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, - INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND - ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN - ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, - INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE - PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF - CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, - UPDATES, ENHANCEMENTS, OR MODIFICATIONS. - - Tekst powyzej, jest klasyczna licencja BSD. Nie posiada ona zadnych - restrykcji co do uzywania kodu zr�dl/owego. Podoba nam sie i nie - zamierzamy jej zmieniac. - - 1.3) Na jakich systemach Unixowych dzial/a PostreSQL? - - PostgreSQL powinien dzial/ac na wszystkich nowych Unix-podobnych - systemach. Platformy, kt�re zostal/y szczeg�l/owo przetestowane - podczas publikowania PostgreSQL sa wymienione w dokumentacji - opisujacej instalacje. - - 1.4) Na jakich nie-Unixowych systemach dzial/a PostgreSQL? - - Klient - - Mozliwa jest kompilacja bibliteki C libpq, psql oraz innych - interfejs�w i uruchamianie ich na platformie MS Windows. W tym wypadku - klient jest uruchamiany na MS Windows a z serwerem komunikuje sie - poprzez TCP/IP. Serwer moze dzial/ac na dowolnej wspieranej platformie - Unixowej. Plik win32.mak jest dol/aczony do zr�del/, aby mozna byl/o - stworzyc biblioteke libpq oraz program psql dzial/ajace w srodowisku - Win32. PostgreSQL moze sie takze komunikowac z klientami ODBC. - - Serwer - - Serwer moze byc uruchamiany na Windows NT i Win2k uzywajac bibliotek - Cygwin, Cygnus Unix/NT. W pliku pgsql/doc/FAQ_MSWIN znajdujacym sie w - zr�dl/ach lub pod adresem: - http://www.PostgreSQL.org/docs/faqs/text/FAQ_MSWIN na naszych - stronach. - - Obecnie prowadzone sa prace nad stworzeniem wersji dla MS Win - NT/200/XP. Jesli chcesz sie dowiedziec o obecnym statusie tych prac - zobacz http://techdocs.postgresql.org/guides/Windows and - http://momjian.postgresql.org/main/writings/pgsql/win32.html. - - Istnieje takze port pod Novell Netware 6 dostepny pod adresem - http://forge.novell.com. - - 1.5) Skad mozna sciagnac PostgreSQL? - - Gl/�wny serwer ftp z dostepem "anonymous" dla PostgreSQL znajduje sie - ftp://ftp.PostgreSQL.org/pub. jesli szukasz mirror�w sprawdz nasza - gl/�wna strone www. - - 1.6) Gdzie mozna szukac wsparcia technicznego? - - Adres gl/�wnej listy mailowej: pgsql-general@PostgreSQL.org. Jest ona - przeznaczona dyskusjom dotyczacym spraw zwiazanych z PostgreSQL. Zeby - zapisac sie na liste, wyslij email z nastepujacymi liniami w tresci - maila (nie w temacie): - subscribe - end - - na adres: pgsql-general-request@PostgreSQL.org. - - Dostepna jest takze lista wysyl/ajaca digesty. Aby zapisac sie na nia, - wyslij email na adres: pgsql-general-digest-request@PostgreSQL.org z - trescia maila zawierajaca: - subscribe - end - - Digesty sa wysyl/ane do czl/onk�w listy, kiedy na gl/�wna liste dotrze - ok 30k wiadomosci. - - Dostepna jest takze lista poswiecona bl/edom znalezionym w PostgreSQL. - Aby zapisac sie na nia wyslij email na adres: - pgsql-bugs-request@PostgreSQL.org z trescia maila zawierajaca: - subscribe - end - - Lista poswiecona dyskusjom developer�w jest dostepna pod adresem: - pgsql-hackers-request@PostgreSQL.org Aby sie na nia zapisac wyslij na - jej adres mail z trescia: - subscribe - end - - Dodatkowe informacje o listach mailowych dotyczacych PostgreSQL mozna - znalezc na stronach WWW PostgreSQL pod adresem: - - http://www.PostgreSQL.org - - W sieci EFNet istnieje kanal/ IRC #PostgreSQL. Ja, do pol/aczenia sie - z kanal/em uzywam Unixowego polecenia irc -c '#PostgreSQL' "$USER" - irc.phoenix.net. - - Lista firm oferujacych wsparcie na zasadach komercyjnych znajduje sie - pod adresem: http://techdocs.postgresql.org/companies.php. - - 1.7) Jaka jest ostatnia dostepna wersja? - - Ostatnia dostepna wersja PostgreSQL to 7.4.1. - - Planujemy publikowanie kolejnych wersji co szesc do osmiu miesiecy. - - 1.8) Jaka dokumentacja jest dostepna? - - Kilka manuali, stron podecznika man, oraz kilka przykl/ad�w do - testowania sa zal/aczone w samej dystrybucji. Znajduja sie one w - katalogu /doc. Manual moze byc takze przegladany poprzez strony www - pod adresem http://www.PostgreSQL.org/docs. - - Istnieja takze dwie ksiazki dostepne online pod adresami - http://www.PostgreSQL.org/docs/awbook.html i - http://www.commandprompt.com/ppbook/. Lista ksiazek o PostgreSQL, - kt�re mozna kupic znajduje sie pod adresem - http://techdocs.PostgreSQL.org/techdocs/bookreviews.php. Zbi�r - technicznych artykul/�w o PostgreSQL znajduje sie pod adresem - http://techdocs.postgresql.org/. - - psql posiada kilka wbudowanych polecen \d, za pomoca kt�rych mozna - sprawdzic informacje dotyczace typ�w, operator�w, funkcji, agregat�w - itd. - - Na naszej stronie mozna znalezc duzo wiecej dokumentacji. - - 1.9) Gdzie mozna znalezc informacje o znanych bl/edach czy brakujacych - rozwiazanich? - - PostgreSQL wspiera rozszerzony podzbi�r standardu SQL-92. Sprawdz - nasza liste TODO aby znalezc informacje o znanych problemach, - brakujacych rozwiazaniach czy przyszl/ych planach. - - 1.10) Jak moge sie nauczyc SQL? - - Ksiazka o PostgreSQL http://www.PostgreSQL.org/docs/awbook.html uczy - SQL. Jest jeszcze inna ksiazka o PostgreSQL dostepna pod adresem: - http://www.commandprompt.com/ppbook. Dobry tutorial mozesz znalezc pod - adresem: http://www.intermedia.net/support/sql/sqltut.shtm, oraz - http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM, - i http://sqlcourse.com. - - Jeszcze inny to "Teach Yourself SQL in 21 Days, Second Edition" pod - adresem: http://members.tripod.com/er4ebus/sql/index.htm - - Wielu z naszych uzytkownik�w poleca The Practical SQL Handbook, - Bowman, Judith S., et al., Addison-Wesley. Inni polecaja The Complete - Reference SQL, Groff et al., McGraw-Hill. - - 1.11) Czy PostgreSQL ma rozwiazany problem Y2K? - - Tak, bez problemu radzimy sobie z datami po roku 2000 AD, oraz przed - rokiem 2000 BC. - - 1.12) Jak moge sie przyl/aczyc do grupy os�b bezposrednio pracujacych nad - rozwojem PostgreSQL? - - Przede wszystkim sciagnij ostatnie dostepne zr�dl/a i przeczytaj - dokumentacje przeznaczona dla developer�w na naszej stronie www lub - dostepna takze w zr�dl/ach PostgreSQL. Nastepnie zapisz sie na listy - mailowe pgsql-hackers i pgsql-patches. I na koniec, wysyl/aj nam - wysokiej jakosci patch'e na liste pgsql-patches. - - Jest okol/o 12 os�b, kt�re maja uprawnienia do commit'owania w CVS - PostgreSQL'a. Kazdy z nich submitowal/ tak wiele wysokiej jakosci - patchy, ze stal/o sie niemozliwe dla obecnych commiter�w byc z nimi na - biezaco, wiec musielismy im ufac i miec pewnosc, ze ich poprawki sa - wysokiej jakosci. - - 1.13) Jak moge zgl/aszac bl/edy? - - Zajrzyj na strone PostgreSQL BugTool, na kt�rej opisane sa wskaz�wki - jak zgl/aszac informacje o bl/edach. - - Zajrzyj takze na nasz ftp ftp://ftp.PostgreSQL.org/pub, aby sprawdzic - czy nie ma nowszych wersji PostgreSQL czy patchy. - - 1.14) Jak mozna por�wnac PostgreSQL w stosunku do innych DBMS? - - Jest kilka sposob�w oceny softwaru: mozliwosci, wydajnosc, stabilnosc, - wsparcie i cena. - - Mozliwosci - PostgreSQL posiada mozliwosci dostepne w duzych, komercyjnych - systemach DBMS, takie jak transakcje, podzapytania - (subselects), triggery, widoki, klucze obce, referential - integrity, oraz wyrafinowany system blokowania. Mamy takze - wl/asciowsci kt�rych inni nie posiadaja, jak typy definiowane - przez uzytkownika, dziedziczenie, rules, multi-version - concurrency control, kt�ra redukuje problemy z blokowaniem - (lock contention). - - Wydajnosc - Wydajnosc PostgreSQL jest podobna do innych komercyjnych i open - source baz danych. W niekt�rych sytuacjach jest szybszy w - niekt�rych wolniejszy. W por�wnianiu do MySQL lub mniejszych - baz danych jestesmy szybsi przy wielu uzytkownikach, - skomplikowaych zapytaniach i duzym obciazeniu podczas. MySQL - jest szybszy dla prostych SELECT�w wykonywanych przez niewielu - uzytkownik�w. Spowodowane jest to narzutem, kt�ry sie pojawia - przy transakcjach. Oczywiscie MySQL nie ma wiekszosci z - rozwiazan opisanych powyzej w sekcji Mozliwosci . PostgreSQL - zostal/ stworzony z mysla o stabilnosci, oraz szerokiej gamie - mozliwosci, ale mimo to staramy sie w kazdej wersji poprawiac - jego wydajnosc. Ciekawe por�wnanie PostgreSQL i MySQL mozna - znalezc pod adresem - http://openacs.org/philosophy/why-not-mysql.html Dodatkowo, - MySQL jest firma, kt�ra dystrybuuje jej produkty poprzez zasade - Open Source i wymaga wykupienia licencji w przypadku tworzenia - close-source software, co ie ma miejsca w przypadku PostgreSQL. - - Stabilnosc - Zdajemy sobie sprawe, ze DBMS musi byc stabilny, w przeciwnym - wypadku jest bez wartosci. Staramy sie publikowac kod stabilny, - dobrze przetestowany, z minimum mozliwych bl/ed�w. Kazde - wydanie poprzedza co najmniej miesiac test�w wersji beta. - Patrzac na historie wydan PostgreSQL widac, ze dostarczamy - stabilne, dobrze sprawdzone wersje, kt�re sa gotowe do uzycia w - srodowisku produkcyjnym. Myslimy, ze proces publikowania - kolejnych wersji opracowany przez nas jest jednym z lepszych - wsr�d innych tw�rc�w oprogramowania bazodanowego. - - Wsparcie - Dzieki naszym listom mailowym masz dostep do duzej liczby - programist�w i uzytkownik�w, kt�rzy pomagaja rozwiazac kazdy - napotkany problem. Chociaz nie mozemy gwarantowac znalezienia - rozwiazania danego problemu, nie r�znimy sie w tym od innych - komercyjnych system�w DBMS. Bezposredni kontakt z - programistami, uzytkownikami, dokumentacja i kodem zr�dl/owym - sprawiaja, ze wsparcie oferowane PostgreSQL niejednokrotnie - jest lepsze niz w innych systemach DBMS. Istnieje takze - mozliwosc skorzystania z komercyjnego wsparcia dla tych, - kt�rych takiego rozwiazania potrzebuja. (Sprawdz ten punkt - FAQ.) - - Cena - Korzystanie z PostgreSQL jest darmowe, zar�wno w przypadku - komercyjnym jak i niekomercyjnym. Mozesz korzystac z naszego - kodu zr�dl/owego w Twoim produkcie bez zadnych ograniczen, poza - tymi wymienionymi w licencji BSD przytoczonej powyzej. - - 1.15) W jaki spos�b moge wesprzec finansowo PostgreSQL? - - PostgreSQL korzysta z najlepszej infrastruktury od samego poczatku - istnienia projektu, czyli roku 1996 kiedy rozpoczelismy prace. - Wszystko to zawdzieczamy Marc'owi Fournier'owi, kt�ry stworzyl/ ta - infrastrukture i zarzadza nia od lat. - - Wysokiej jakosci infrastruktura jest bardzo wazna dla kazdego projektu - open-source. Zapobiega przerwom w rozwoju projektu i jakimkolwiek - przestojom. - - Oczywiscie korzystanie z wysokiej jakosci infrastruktury nie jest - tanie. Istnieje wiele r�znych miesiecznych, czy jednorazowych - wydatk�w, kt�re trzeba ponosic aby wszystko dzial/al/o jak nalezy. - Jesli Ty, badz Twoja firma moze wspom�c finansowo rozw�j PostgreSQL - odwiedz adres: http://store.pgsql.com/shopping/ gdzie opisane jest jak - to zrobic. - - Chociaz na stronie wspomniana jest nazwa PostgreSQL Inc, "datki" sa - przeznaczone jedynie na rozw�j projektu PostgreSQL i nie sa - przeznaczane na finansowanie jakiejkolwiek firmy. Jesli wolisz, mozesz - wysl/ac czek na adres kontaktowy. - _________________________________________________________________ - - Jesli mozesz sie pochwalic udanymi wdrozeniami PostgreSQL, prosimy - abys zgl/osil/ nam to na stronie: http://advocacy.postgresql.org. - - User Client Questions - - 2.1) Czy sa jakies driwery ODBC dla PostgreSQL? - - Dostepne sa dwa driwery ODBC: PsqlODBC i OpenLink ODBC. - - Mozesz pobrac PsqlODBC z adresu - http://gborg.postgresql.org/project/psqlodbc/projdisplay.php - - OpenLink ODBC moze byc pobrany z adresu: http://www.openlinksw.com. - Wsp�l/pracuje ze standardowym oprogramowaniem klienckim ODBC wiec w - ten spos�b mozesz korzystac z PostgreSQL ODBC dostepnego na kazdej - pltaformie kt�ra wspiera (Win, Mac, Unix, VMS). - - Autorzy beda prawdopodobnie sprzedawac ten produkt osobom kt�re - wymagaja komercyjnego wsparcia, ale wersja darmowa bedzie zawsze - dostepna. Wszystkie pytania mozesz wysyl/ac na adres: - postgres95@openlink.co.uk. - - 2.2) Jakie istnieja narzedzia pozwalajace na dostep do PostgreSQL przez - www? - - Dobry podrecznik dla poczatkujacych o dostepie do bazy danych przez - www mozesz znalezc pod adresem: http://www.webreview.com - - Do integracji z www, swietnym rozwiazaniem jest PHP. Mozesz znalezc - wiecej informacji na ten temat pod adresem http://www.php.net. - - Wiele os�b w przypadku skomplikowanych rozwiazan uzywa Perl'a i - modul/u CGI.pl lub mod_perl. - - 2.3) Czy istnieje jakies GUI dla PostgreSQL? - - Tak, istnieje kilka interfejs�w graficznych dla PostgreSQL. Wsr�d nich - PgAccess ( http://www.pgaccess.org), PgAdmin III - (http://www.pgadmin.org), RHDB Admin (http://sources.redhat.com/rhdb/ - ) oraz Rekall ( http://www.thekompany.com/products/rekall/, - komercyjny). Istnieje takze PHPPgAdmin ( - http://phppgadmin.sourceforge.net/ ), webowy interfejs dla PostgreSQL. - - Wiecej informacji na ten temat znajduje sie pod adresem See - http://techdocs.postgresql.org/guides/GUITools. - - 2.4) Za pomoca jakich jezyk�w programowania mozna sie komunikowac z - PostgreSQL? - - Najbardziej popularne jezyki posiiadaja wl/asny interfejs dla - PostgreSQL. Sprawdz liste rozszerzen dla intersujacego Ciebie jezyka - programowania. - - Ze zr�dl/ami PostreSQL dystrubuowane sa interfejsy dla nastepujacych - jezyk�w programowania: - * C (libpq) - * Embedded C (ecpg) - * Java (jdbc) - * Python (PyGreSQL) - * TCL (libpgtcl) - - Inne interfejsy sa dostepne pod adresem: http://gborg.postgresql.org w - sekcji Drivers/Interfaces. - _________________________________________________________________ - - Pytania dotyczace administracji - - 3.1) Jak moge zainstalowac PostgreSQL w innej lokalizacji niz - /usr/local/pgsql? - - Uzyj opcji --prefix podczas uruchamiania skryptu configure. - - 3.2) Podczas startu postmaster'a, otrzymuje komunikat o bl/edzie: Bad - System Call lub "core dumped". Dlaczego? - - Ten bl/ad moze byc wynikiem wielu problem�w, ale na poczatek sprawdz - czy masz zainstalowane rozszerzenia systemu V w jadrze systemu. - PostgreSQL wymaga do pracy zainstalowanej obsl/ugi pamieci dzielonej i - semafor�w. - - 3.3) Podczas startu postmaster'a, otrzymuje komunikat o bl/edzie: - IpcMemoryCreate. Dlaczego? - - Albo nie masz poprawnie skonfigurowanej obsl/ugi pamieci dzielonej w - jadrze systemu, albo musisz zwiekszyc jej dostepny rozmiar. Dokl/adna - ilosc jaka potrzebujesz jest zalezna od architektury systemu na jakim - pracujesz, jak duzo bufor�w oraz jak duzo proces�w backendu - skonfigurowal/es dla postmaster'a. Dla wiekszosci system�w, z domyslna - liczba bufor�w i proces�w potrzebujesz minimum w przyblizeniu 1MB. - Zobacz PostgreSQL Administrator's Guide gdzie szczeg�l/owo zostal/o - opisane wykorzystanie pamieci dzielonej i semafor�w. - - 3.4) Podczas startu postmaster'a, otrzymuje komunikat o bl/edzie: - IpcSemaphoreCreate. Dlaczego? - - Jesli tresc bl/edu brzmi: IpcSemaphoreCreate: semget failed (No space - left on device) oznacza to, ze jadro systemu nie jest skonfigurowane - do obsl/ugi wystarczajacej liczby semafor�w. Postgres wymaga jednego - semafor'a na potencjalny jeden proces backend. Tymczasowym - rozwiazaniem jest uruchomienie programu postmaster z mniejsza - maksymalna liczba proces�w backend. Uzyj opcji -N z parameterem - mniejszym od domyslnego - 32. Bardziej trwal/ym rozwiazaniem jest - zwiekszenie parametr�w SEMMNS i SEMMNI jadra twojego systemu. - - Niedzial/ajace semafory moga spowodowac niepoprawne zamkniecie systemu - w czasie intensywnego korzystania z bazy. - - Jesli tresc bl/edu jest inna, moze to oznaczac, ze obsl/uga semafor�w - nie zostal/a wl/aczona do jadra wcale. Zobacz PostgreSQL - Administrator's Guide po bardziej szczeg�l/owe informacje o pamieci - dzielonej i semaforach. - - 3.5) W jaki spos�b moge kontrolowac pol/aczenia z innych host�w? - - Domyslnie PostgreSQL pozwala jedynie na pol/aczenia za pomoca socket�w - Unixowych z lokalnego hosta. Inne hosty nie beda mogl/y sie pol/aczyc - z serwerem dop�ki nie zostanie dodana opcja -i do postmaster'a, oraz - nie umozliwi sie autoryzacji na podstawie adresu host�w modyfikujac - odpowiednio plik $PGDATA/pg_hba.conf. To zmiany pozwola na pol/aczenia - TCP/IP. - - 3.6) Jak powinienem skonfigurowac system baz danych aby uzyskac lepsza - wydajnosc? - - Indeksy bez watpienia moga przyspieszyc wykonywanie zapytan. Polecenie - EXPLAIN pozwala zobaczyc jak PostgreSQL interpretuje Twoje zapytanie i - kt�re indeksy sa uzywane. - - Jesli wykonujesz bardzo duzo INSERT�w, moze warto je wykonac za pomoca - jednego duzego pliku uzywajac polecenia COPY. Jest to duzo szybsze niz - pojedyncze INSERTy. Po drugie polecenia SQL nie zawarte w bloku - okreslajacym transakcje - BEGIN WORK/COMMIT, sa traktowane jako - pojedyncza transakcja. Rozwaz wykonanie kilku polecen/zdan SQL w - jednym bloku transakcji. To redukuje narzut nakl/adany przez - transakcje. Przy duzych zmianach w danych, warto usunac i stworzyc na - nowo indeksy. - - Jest kilka opcji pozwalajacych na poprawienie wydajnosci. Mozesz - wyl/aczyc fsync() poprzez uruchomienie postmaster'a z opcjami -o -F. - To spowoduje, ze fsync() nie bedzie zrzucal/ danych na dysk po kazdej - transakcji. - - Mozesz takze uruchomic postmaster'a z opcja -B aby zwiekszyc wielkosc - pamieci dzielonej uzywanej przez procesy backend�w. Jesli ustawisz ta - wartosc zbyt wysoko i przekroczysz limity ustawione przez kernel na - pamiec dzielona, postmaster moze sie nie uruchomic. Kazdy bufor - zajmuje 8K a domyslna ilosc bufor�w to 64. - - Mozesz takze uzyc opcji -S dla backendu aby zwiekszyc maksymalna - wartosc pamieci uzywana przez proces backendu podczas sortowania. - Opcja -S jest ustawiana wartoscia podawana w kilobajtach, domyslna - wartosc to 512K. - - Mozesz takze uzyc polecenia CLUSTER aby pogrupowac dane w tabelach wg - indeksu. Zobacz opis polecenia CLUSTER w manualu zeby dowiedziec sie - wiecej. - - 3.7) Jakie sa mozliwosci wyszukiwania bl/ed�w? - - PostgreSQL ma kilka mozliwosci na raportowanie informacji o jego - statusie, kt�re moga byc przydatne przy debugowaniu procesu. - - Przede wszystkim uruchom skrypt configure z opcja --enable-cassert, - wiele funkcji assert() monitoruja postep procesu backend i zatrzymuja - program kiedy wydarzy sie cos nieoczekiwanego. - - Zar�wno postmaster jak i postgres maja kilka opcji do debugowania. Za - kazdym razem kiedy uruchamiasz postmaster'a, upewnij sie, ze wysyl/asz - standardowe wyjscie i error do pliku z logami, np. w ten spos�b: - cd /usr/local/pgsql - ./bin/postmaster >server.log 2>&1 & - - To utworzy plik server.log w gl/�wnym katalogu PostgreSQL. Ten plik - zawiera pozyteczne informacje o problemach i bl/edach, kt�re - wydarzyl/y sie podczas pracy serwera. Postmaster posiada opcje -d, - kt�ra pozwala na raportowanie bardzo szczeg�lowych informacji. Do - opcji -d podajemy liczbe, kt�ra okresla szczeg�l/owosc wysyl/anych - informacji. Musisz miec swiadomosc, ze wysoki poziom logowania bedzie - powodowal/ tworzenie bardzo duzych plik�w z logami. - - Jesli postmaster nie zostal/ uruchomiony, mozesz uruchomic - postgres'owy backend z linii polecen, i uruchomic Twoje polecenie SQL - bezposrednio na nim. Taki spos�b jest polecany jedynie w przypadku - debugowania. Zwr�c uwage, ze w tym wypadku zapytanie konczy znak nowej - linii a nie srednik. Jesli skompilowal/es z opcjami debugowania mozesz - uzyc debuggera aby sprawdzic co sie dzieje. Poniewz backend nie - zostal/ uruchomiony przez postmaster'a, nie dzial/a w identycznym - srodowisku, co oznacza ze powt�rzenie warunk�w w jakich wystapil/y - problemy moze byc problemem. - - Jesli postmaster dzial/a, uruchom psql w jednym z okien, nastepnie - znajdz PID procesu postgres uzywanego przez psql. Uzyj debuggera aby - do PID'u postgres'a. Mozesz ustawiac pul/apki (breakpoints) w - debuggerze i wykonywac zapytania z psql. Jesli debugujesz uruchamianie - postgres'a, mozesz ustawic zmienna PGOPTIONS="-W n", nastepnie - uruchomic psql. Opcja ta pozwoli spowolnic uruchomienie na n sekund - abys m�gl/ sie pol/aczyc z procesem za pomoca debugera, ustawic - jakiekolwiek pul/apki i kontynuowac proces uruchamiania. - - postgres moze byc uruchamiany z opcjami -s, -A i -t, kt�re moga byc - bardzo przydatne przy debuggowaniu i ocenie wydajnosci. - - Mozesz takze skompilowac z profilingiem aby zobaczyc jakie funkcje ile - czasu wykonuja sie. Pliki profilowane dla backendu zostana umieszczone - w katalogu pgsql/data/base/dbname. Pliki profilu klienta zostana - umieszczone w biezacym katalogu klienta. Linux wymaga aby kompilowac z - opcja -DLINUX_PROFILE aby profilowanie odbywal/o sie poprawnie. - - 3.8) Skad sie bierze komunikat: "Sorry, too many clients" podczas pr�by - pol/aczenia sie z baza danych? - - Musisz zwiekszyc limit ilosci jednoczesnych proces�w bacekendu dla - procesu postmaster'a. - - Domyslny limit to 32 procesy. Mozesz go zwiekszyc przez restart - postmaster z odpowiednia wartoscia ustawiana opcje -N w pliku - postgresql.conf. - - Wez pod uwage, ze jesli zwiekszysz wartosc podana w opcji -N na wiecej - niz 32 musisz takze zwiekszyc wartosc w opcji -B ponad jej domyslna - wartosc 64; wartosc -B musi byc co najmniej dwa razy wieksza od - wartosci podanej w opcji -N, a prawdopodobnie powinna byc w - rzeczywistosci jeszcze wieksza dla optymalnej wydajnosci. Dla duzej - liczby proces�w backendu na pewno zauwazysz, ze trzeba zwiekszyc r�zne - parametry jadra Unixa. Rzeczy, kt�re pownienes sprawdzic to maksymalna - liczba blok�w pamieci dzielonej, SHMMAX; maksymalna liczba semafor�w, - SEMMNS oraz SEMMNI; maksymalna liczba proces�w, NPROC; maksymalna - liczba proces�w na jednego uzytkownika, MAXUPRC; i maksymalna liczba - otwartych plik�w, NFILE oraz NINODE. Pow�d dla kt�rego PostgreSQL ma - limit na maksymalna liczbe proces�w backendu to obawa o wyczerpanie - zasob�w systemu. - - 3.9) Jakie pliki znajduja sie w pg_temp? - - Katalog ten zawiera tymczasowe pliki utworzone przez executor. Dla - przykl/adu, jesli jakas operacja sortowania jest wymagana do wykonania - ORDER BY, a samo sortowanie wymaga wiecej miejsca niz parametr - backendu -S ustawil/ do wykorzystania, wtedy tymczasowe pliki sa - uzywane do przechowywania tych danych. - - Pliki tymczasowe powinny byc usuniete automatycznie, ale mogl/o sie to - nie stac jesli proces backendu w miedzyczasie nie zakonczyl/ sie - poprawnie podczas operacji sortowania. Jesli w danym momencie nie - dzial/aja zadne procesy backend�w mozesz spokojnie usunac pliki - pg_tempNNN.NN. - - 3.9) Dlaczego konieczne jest przy upgradzie PostgreSQL korzystanie ze - skrypt�w dump i restore? - - Tw�rcy PostgreSQL dokonuja jedynie mal/ych zmian pomiedzy mal/ymi - upgradami wersji, np z 7.2 do 7.2.1, wtedy upgrade nie wymaga - korzystania z dump i restore. Przy wiekszych zmianach, np. z wersji - 7.2 do 7.3, czesto zmianymaja wpl/yw na format przechowywanych danych. - Zmiany te sa na tyle skomplikowane, ze nie utrzymujemy zgodosci z - poprzednimi wersjami PostgreSQL. dump pozwala na wydostanie danych w - takiej postaci, w kt�rej l/atwe jest ich zaimportowanie do nowszych - wersji bez kl/opotu. - - W wydaniach gdzie zmiany nie dotycza formatu danych na dysku, mozna - wykorzystac skryptu pg_upgrade, do upgradu bez uzycia dump/restore. - Dokumentacja do danego wydania zawiera informacje czy mozliwe jest - uzycie pg_upgrade. - _________________________________________________________________ - - Pytania dotyczace uzywania - - 4.1) Jaka jest r�znica pomiedzy kursorami binarnymi (binary cursors) i - zwykl/ymi kursorami (normal cursors)? - - Zobacz w manualu opis polecenia DECLARE. - - 4.2) Jak moge pobrac za pomoca SELECT jedynie kilka pierwszych wynik�w - zapytania? - - Zobacz w manualu opis polecenia FETCH lub uzyj polecenia SELECT ... - LIMIT.... - - Nawet jesli chesz pobrac kilka pierwszych rzed�w z wyniku zapytania, - cal/e zapytanie musi zostac wykonane. Byc moze powinienes skorzystac z - polecenia ORDER BY. Jesli istnieje indeks kt�ry odpowiada polom - okreslonym przez ORDER BY, PostgreSQL moze wykorzystac jedynie kilka - pierwszych rzed�w, byc moze bedzie koniecznosc wykonania zapytania do - momentu az zostana znalezione pozadane wyniki. - - Aby otrzymac losowy rzad, uzyj: - SELECT col - FROM tab - ORDER BY random() - LIMIT 1; - - - 4.3) Jak moge uzyskac liste wszystkich tabel czy innych rzeczy pod psql? - - Mozesz sprawdzic zawartosc zr�del/ psql, a konkretnie plik - pgsql/src/bin/psql/describe.c. Zawiera on polecenia SQL kt�re generuja - wyniki komend z backslashem. Mozesz takze uruchomic psql z opcja -E - wtedy po wykonaniu polecenia z backslashem wyswietlane bedzie - zapytanie, kt�re w rzeczywistosci jest wykonywane. - - 4.4) Jak usunac kolumne z tabeli lub zmienic jej typ? - - DROP COLUMNT zostal/o dodane w wersji 7.3 przy poleceniu ALTER TABLE - DROP COLUMN. We wczesniejszych wersjach mozesz zrobic tak: - BEGIN; - LOCAL TABLE old_table; - SELECT ... -- wybierz wszystkie kolumny poza ta jedna kt�rej chcesz sie pozbyc - INTO TABLE new_table - FROM old_table; - DROP TABLE old_table; - ALTER TABLE new_table RENAME TO old_table; - - Aby zmienic typ danych kolumny mozesz zrobic tak: - BEGIN; - ALTER TABLE tab ADD COLUMN new_col new_data_type; - UPDATE tab SET new_col = CAST(old_col AS new_data_type); - ALTER TABLE tab DROP COLUMN old_col; - COMMIT; - - 4.5) Jaki jest maksymalny rozmiar dla rzedu, tabeli i bazy danych? - - Oto wszystkie ograniczenia: - Maksymalny rozmiar dla bazdy danych? nieograniczony ( istnieja - bazy danych o wielkosci 32 TB databases ) - Maksymalny rozmiar dla tabeli? 32 TB - Maksymalny rozmiar dla rzedu? 1.6 TB - Maksymalny rozmiar pola? 1 GB - Maksymalna liczba rzed�w w tabeli? nieograniczona - Maksymalna liczba kolumn w tabeli? 250-1600 w zalezonosci od typ�w kolumn - Makasymalna liczba indeks�w na tabeli? nieograniczona - - Oczywiscie "nieograniczony" nie jest prawda tak do konca, istnieja - ograniczenia wynikajace z dostepnego miejsca na dysku, pamieci/swapa. - Kiedy wielkosci te beda bardzo duze moze odbic sie to na wydajnosci. - - Maksymalny rozmiar tabeli, czyli 32 TB nie wymaga od systemu - operacyjnego wsparcia dla duzych plik�w. Duze tabele sa przechowywane - jako pliki o rozmiarze 1 GB, wiec ograniczenia co do wielkosci plik�w - narzucone przez system plik�w nie sa istotne. - - Masymalny rozmiar tabeli i maksymalna liczba kolumn moze byc - zwiekszona jesli zwiekszymy domyslny rozmiar bloku (block size) do - 32k. - - 4.6) Jak duzo miejsca w bazie danych jest konieczne aby przechowywac dane - ze zwyczajnego pliku tekstowego? - - Baza danych PostgreSQL moze potrzebowac do pieciu razy wiecej miejsca - na przechowywanie danych z plik�w tekstowych niz ich objetosc. - - Jako przykl/ad mozemy rozwazyc plik skl/adajacy sie z 100,000 linii - zbudowanych z liczby cal/kowitej oraz opisu tekstowego w kazdej. - Zal/�zmy, ze srednio kazdy l/ancuch tekstu w linii zajmuje 20 bajt�w. - Cal/y plik powinien zajmowac ok. 2.8 MB. Rozmiar pliku bazy danych w - PostgreSQL zawierajacego te dane mozna oszacowac na okol/o 6.4MB: - 36 bajt�w: nagl/�wek kazdego rzedu w przyblizeniu) - 24 bajty: jedno pole int i jedno pole typu text - + 4 bajty: wkaznik na stronie do krotki - -------------------------------------------------- - 64 bajty w jednym rzedzie - - Strona danych w PostgreSQL zajmuje 8192 bajt�w (8 KB), wiec: - - 8192 bajt�w na strone - --------------------- = 128 rzed�w na jedna strone w bazie (zaokraglone w d�l/) - 64 bajt�w na rzad - - 100000 rzed�w danych - ----------------------- = 782 stron w bazie danych (zaokraglone w g�re) - 128 rzed�w na strone - -782 stron w bazie * 8192 bajt�w na strone = 6,406,144 bajt�w (6.4 MB) - - Indeksy nie powoduja duzego narzutu na zajmowane miejsce, ale - zawieraja pewne dane, wiec w pewnych przypadkach moga byc cal/kiem - duze. - - NULLe sa przechowywane jako mapy bitowe, wiec uzywaja bardzo mal/o - miejsca. - - 4.7) Jak moge sprawdzic jakie tabele, klucze, bazy danych i uzytkownicy sa - utworzeni? - - psql ma cal/kiem duza ilosc polecen z backslashem aby wydobyc takie - informacje. Wprowadz \? aby zobaczyc ich spis. Istnieja takze tablice - systemowe rozpoczynajace sie od pg_, zawierajace interesujace Ciebie - informacje. Wykonanie psql -l pokaze spis wszystkich baz danych. - - Obejrzyj takze plik pgsql/src/tutorial/syscat.source. Zawiera on wiele - z zapytan typu SELECT, kt�re sa potrzebne aby wydobyc informacje z - tablic systemowych. - - 4.8) Moje zapytania sa wolne lub nie uzywaja kluczy. Dlaczego? - - Indeksy nie sa uzywane automatycznie przez kazde z zapytan. Ideksy sa - uzywane jedynie gdy tabela jest odpowiedniego rozmiaru, wiekszego niz - wymagany minimalny, a zapytanie wybiera jedynie mal/y procent - zawartosci tabeli. Wynika to z tego, ze losowy dostep do dysku - powodowany przez ideksowane poszukiwanie jest czasami wolniejsze niz - poszukiwanie sekwencyjne bez uzycia kluczy. - - Zeby zdecydowac czy indeks powinien byc uzywany, PostgreSQL musi miec - statystyki dotyczace danej tabeli. Sa one gromadzone przez uzycie - polecenia VACUUM ANALYZE, lub poprostu ANALYZE. uzywajac statystyk, - optymalizator wie ile rzed�w jest w tabeli i moze lepiej okreslic czy - indeksy powinny byc uzyte. Statystyki moga byc takze pomocne w - okresleniu najlepszej kolejnosci wykonania zl/aczenia (join) i jego - sposobu. Gromadzenie statystyk powinno sie odbywac w okreslonych - interwal/ach czasu poniewaz dane w tabelach zmieniaja sie. - - Indeksy nie sa zazwyczaj uzywane przez ORDER BY lub przy wykonywaniu - zl/aczen (join). Sekwencyjne przeszukiwanie po kt�rym nastepuje - sortowanie jest zazwyczaj szybsze nie wyszukiwanie za pomoca indeksu - na duzej tabeli. - - Jakkolwiek LIMIT w pol/aczeniu z ORDER BY czesto bedzie wykorzystywal/ - indeksy poniewaz jedynie mal/a czesc z tabeli jest zwracana. W - rzeczywistosci, chociaz MAX() i MIN() nie uzywaja indeks�w, mozliwe - jest aby zwr�cic te wartosci uzywajac indeks�w poprzez uzycie ORDER BY - i LIMIT. - SELECT col - FROM tab - ORDER BY col [ DESC ] - LIMIT 1; - - Jesli uwazasz, ze optimizer myli sie wybierajac sequential scan, uzyj - SET enable_seqscan TO 'off' i uruchom testy aby sprawdzic czy wtym - wypadku zapytanie bedzie szybciej wykonywane. - - Kiedy uzywa sie operator�w dopasujacych takich jak LIKE lub ~, indeksy - beda uzywane jedynie w pewnych wypadkach: - * Poczatek wyszukiwania jest oparty na poczatku l/ancucha tekstu. - + wzorce LIKE nie moga sie zaczynac % - + dopasowania operatorem ~ (dopasowania regularne) musza sie - zaczynac znakiem specjalnym ^. - * Poczatek wyszukiwania nie moze sie zaczynac od klas znak�w, np. - [a-e]. - * Case-insensitive searches such as ILIKE and ~* do not utilise - indexes. Instead, use functional indexes, which are described in - section 4.12. - * Standardowe locale C musi byc uzyte przy wykonywaniu initdb - - 4.9) Jak moge sprawdzic w jakis spos�b "query optimizer" wykonuje moje - zapytanie? - - Zobacz manual dla polecenia EXPLAIN. - - 4.10) Co to jest "R-tree index"? - - Indeks R-tree jest uzywany do indeksowania danych przestrzennych. - Indeks hasuujacy nie nadaje sie do wyszukiwania odlegl/osci. Natomiast - indeks typu B-tree moze wyszukiwac odleglosci jedynie w - jednowymiarowych przestrzeniach. R-tree indeks radzi sobie z - przestrzeniami wielo-wymiarowymi. Dla przykl/adu, jesli zostanie - zal/ozony indeks typu R-tree na polu typu point, system moze bardziej - wydajnie odpowiadac na zapytania typu "select all points within a - bounding rectangle." - - Zr�dl/owym dokumentem opisujacym oryginalnie projektowanie R-tree - indeks�w jest: - - Guttman, A. "R-trees: A Dynamic Index Structure for Spatial - Searching." Proceedings of the 1984 ACM SIGMOD Int'l Conf on Mgmt of - Data, 45-57. - - Ten dokument mozesz znalezc takze w pracy Stonebraker'a "Readings in - Database Systems". - - Wbudowane indeksy R-trees radza sobie w wielobokami i boxes. - Teoretycznie, indeksy R-tree moga byc rozszerzone o mozliwosci - indeksowania w wiecej wymiarowych przestrzeniach. W praktyce, - rozbudowa indeks�w R-tree wymaga troche pracy, a w tej chwili nie - dysponujemy jakakolwiek dokumentacja jak to zrobic. - - 4.11) Co to jest "Genetic Query Optimizer"? - - Modul/ GEQO ma za zadanie przyspieszenie optymalizacji zapytan l/aczac - wiele tabel za pomoca algorytm�w genetycznych (Genetic Algorithm - (GA)). Pozwala na uzywanie duzych zapytan l/aczacych tabele (join - queries) bez wykorzystywania zasobozernego wyszukiwania. - - 4.12) Jak moge uzywac wyrazen regularnych w zapytaniach i zapytan - case-insensitive w wyrazeniach regularnych? Jak korzystac z indeks�w dla - zapytan case-insensitive? - - Operator ~ moze byc wykorzystywany do wyszukiwania za pomoca wyrazen - regularnych, a ~* do wyszukiwania case-insensitive z wyrazeniami - regularnymi. Wariant case-insensitive dla LIKE zostal/ nazwany ILIKE. - - Por�wnania case-insensitive sa zazwyczaj wykonywane w nastepujacy - spos�b: - SELECT * - FROM tab - WHERE lower(col) = 'abc' - - W tym wypadku standardowe indeksy nie beda uzywane. Mozesz utworzyc - indeks funkcyjny, poprzez: - CREATE INDEX tabindex on tab (lower(col)); - - 4.13) Jak sprawdzic w zapytaniu czy pole ma wartosc NULL? - - Mozesz to sprawdzic, testujac wartosc kolumny warunkiem IS NULL albo - IS NOT NULL. - - 4.14) Jaka jest r�znica pomiedzy r�znymi typami tekstowymi (character - types)? - -Type Nazwa wewnetrzna Uwagi --------------------------------------------------- -VARCHAR(n) varchar rozmiar okresla maksymalna dl/ugosc, nie matutaj wypel/niania -CHAR(n) bpchar wypel/niane pustymi znakami do podanej dl/ugosci -TEXT text bez limitu na dl/ugosc l/ancucha -BYTEA bytea zmiennej dl/ugosci tablica bajt�w (null-byte safe) -"char" char 1 znak - - Jesli bedziesz przegladac katalogi systemowe lub komunikaty o bl/edach - czesto spotkasz sie z podanymi powyzej nazwami wewnetrznymi. - - Pierwsze cztery typy powyzej to tzw typy "varlena" (np. pierwsze - cztery bajty na dysku to dl/ugosc, po kt�rych jest data). Dlatego - faktyczna dl/ugosc takiego l/ancucha jest troche wieksza niz - zadeklarowany rozmiar. Te typy takze podlegaja kompresji lub moga byc - przechowywane out-of-line jako TOAST, wiec faktyczne zuzycie miejsca - na dysku moze byc mniejsze niz oczekiwane. - - VARCHAR(n) jest najodpowiedniejszy do przechowywania l/ancuch�w o - r�znej dl/ugosci ale okresla on maksymalna jego dl/ugosc. TEXT jest - najlepszy dla l/ancuch�w o dowolnej dl/ugosci, nie przekraczajacej - 1GB. - - CHAR(n) jast najlepszym typem do przechowywania l/ancuch�w o tej samej - dl/ugosci. CHAR(n) wypel/nia dane do zadanej dl/ugosci, podczas gdy - VARCHAR(n) przechowuje jedynie dane dostarczone. BYTEA sl/uzy do - przechowywania danych binarnych, w szczeg�lnosci dla danych - zawierajacych NULL bajty. Wszystkie typy opisane tutaj maja podobne - charakterystyki jesli chodzi o wydajnosc. - - 4.15.1) Jak moge utworzyc pole kt�re samo zwieksza swoja wartosc? - - PostgreSQL ma zaimplementowany typ SERIAL. Automatycznie tworzy - sekwencje i indeks na tej kolumnie. Dla przykladu: - CREATE TABLE person ( - id SERIAL, - name TEXT - ); - - zostanie automatycznie prztl/umaczone na: - CREATE SEQUENCE person_id_seq; - CREATE TABLE person ( - id INT4 NOT NULL DEFAULT nextval('person_id_seq'), - name TEXT - ); - CREATE UNIQUE INDEX person_id_key ON person ( id ); - - Wiecej informacji o sekwencjach znajdziesz w manualu o - create_sequence. Mozesz takze uzyc pola OID jako unikalnej wartosci - dla kazdego rzedu danych. Jesli bedziesz potrzebowal/ z backupowac - dane robiac dump bazy i odtworzyc ja, musisz uzyc pg_dump z opcja -o - lub polecenia COPY WITH OIDS aby zachowac OIDy. - - 4.15.2) Jak pobrac wartosc pola typu SERIAL po wykonaniu insert'u? - - Jednym z podejsc jest pobranie kolejnej wartosci typu SERIAL z - sekwencji za pomoca funkcji nextval() zanim zostanie wstawiona, a - p�zniej nalezy jej uzyc. Uzywajac przykl/adu z tabeli z punktu 4.15.1, - moze to wygladac w Perlu na przykl/ad w ten spos�b: - new_id = output of "SELECT nextval('person_id_seq')" - INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal'); - - Bedziesz mial/ wtedy ta wartosc przechowana w zmiennej new_id do - uzytku w innych zapytaniach (np. jako klucz obcy do tabeli person). - Warto zwr�cic uwage, ze nazwa automatycznie utworzonej sekwencji - SEQUENCE bedzie nastepujaca: <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 a361767ccc..0000000000 --- a/doc/FAQ_russian +++ /dev/null @@ -1,988 +0,0 @@ - - Otvety na chasto zadavaemye voprosy po PostgreSQL - - Data poslednego obnovleniya: Sreda 25 iyunya 23:54:14 EDT 2008 - - Anglijskij variant soprovozhdaet: Bryus Mom'yan (Bruce Momjian) - (bruce@monjian.us) - - Pereviol na russkij: Viktor Vislobokov (admin@postgresql.ru.net) - - Samuyu svezhuyu anglijskuyu versiyu dokumenta mozhno najti na - http://www.postgresql.org/files/documentation/faqs/FAQ.html. - - Samuyu svezhuyu russkuyu versiyu dokumenta mozhno najti na - http://postgresql.ru.net/docs/FAQ_russian.html. - - Otvety na voprosy specifichnye dlya konkretnyh platform mozhno najti - na http://www.postgresql.org/docs/faq/. - _________________________________________________________________ - - Obschie voprosy - - 1.1) CHto takoe PostgreSQL? Kak proiznositsya `eto nazvanie? CHto - takoe Postgres? - 1.2) Kto upravlyaet PostgreSQL? - 1.3) Kakovy avtorskie prava na PostgreSQL? - 1.4) Na kakih platformah rabotaet PostgreSQL? - 1.5) Gde mozhno vzyat' PostgreSQL? - 1.6) Kakaya versiya naibolee svezhaya? - 1.7) Gde poluchit' podderzhku? - 1.8) Kak mne soobschit' ob oshibke? - 1.9) Kak najti informaciyu ob izvestnyh oshibkah ili otsutstvuyuschih - vozmozhnostyah? - 1.10) Kakaya dokumentaciya imeetsya v nalichii? - 1.11) Kak nauchit'sya SQL? - 1.12) Kak mne otpravit' ispravlenie ili prisoedinitsya k komande - razrabotchikov? - 1.13) Kak sravnit' PostgreSQL s drugimi SUBD? Mozhet li PostgreSQL - byt' vstroennoj? - 1.14) Budet li PostgreSQL rabotat' s poslednimi izmeneniyami, v raznyh - stranyh, kasayuschimisya dnevnogo vremeni? - 1.15) Kak mne otpisat'sya ot spiskov rassylki PostgreSQL? Kak - izbezhat' polucheniya dubliruyuschihsya soobschenij? - - Voprosy pol'zovatelej po klientskoj chasti - - 2.1) Kakie interfejsy est' dlya PostgreSQL? - 2.2) Kakie instrumenty suschestvuyut dlya ispol'zovaniya PostgreSQL - cherez Web? - 2.3) Est' li u PostgreSQL graficheskij interfejs pol'zovatelya? - - Voprosy administrirovaniya - - 3.1) Kak mne ustanovit' PostgreSQL v mesto otlichnoe ot - /usr/local/pgsql? - 3.2) Kak mne upravlyat' soedineniyami ot drugih komp'yuterov? - 3.3) Kakie nastrojki mne nuzhno sdelat' dlya uluchsheniya - proizvoditel'nosti? - 3.4) Kakie vozmozhnosti dlya otladki est' v nalichii? - 3.5) Pochemu ya poluchayu soobschenie "Sorry, too many clients" kogda - pytayus' podklyuchit'sya k baze? - 3.6) Kak vypolnit' obnovlenie PostgreSQL? - 3.7) Kakoe komp'yuternoe "zhelezo" ya dolzhen ispol'zovat'? - - Voprosy `ekspluatacii - - 4.1) Kak vypolnit' SELECT tol'ko dlya neskol'kih pervyh strochek - zaprosa? Dlya proizvol'noj stroki? - 4.2) Kak mne najti kakie tablicy, indeksy, bazy dannyh i pol'zovateli - suschestvuyut? Kak mne uvidet' zaprosy, kotorye ispol'zuet psql dlya - polucheniya `etoj informacii? - 4.3) Kak izmenit' tip dannyh kolonki? - 4.4) Kakovy maksimal'nye razmery dlya strok v tablice, tablic i bazy - dannyh? - 4.5) Kak mnogo diskovogo prostranstva v baze dannyh nuzhno dlya - sohraneniya dannyh iz obychnogo tekstovogo fajla? - 4.6) Pochemu moi zaprosy rabotayut medleno? Pochemu oni ne ispol'zuyut - moi indeksy? - 4.7) Kak posmotret' na to, kak optimizator vypolnyaet moj zapros? - 4.8) Kak mne vypolnit' poisk regulyarnogo vyrazheniya i poisk - nezavisimyj ot registra bukv poisk regulyarnogo vyrazheniya? Kak mne - ispol'zovat' indeks dlya poiska nezavisimogo ot registra bukv? - 4.9) Kak mne opredelit', chto znachenie polya v kakom-libo zaprose - ravno NULL? Kak mne soedinit' vozmozhnye NULL? Mogu ya sortirovat' - polya NULL ili net? - 4.10) Kakovy otlichiya mezhdu raznymi simvol'nymi tipami? - 4.11.1) Kak mne sozdat' pole serial/s-avto-uvelicheniem? - 4.11.2) Kak mne poluchit' znachenie pri vstavke SERIAL? - 4.11.3) Ne mozhet li poluchit'sya tak, chto ispol'zovanie currval() i - nextval() privedet k zaciklirovaniyu s drugimi pol'zovatelyami? - 4.11.4) Pochemu chisla iz moej posledovatel'nosti ne ispol'zuyutsya - snova pri otmene tranzakcii? Pochemu sozdayutsya razryvy pri numeracii - v kolonke, gde ya ispol'zuyu posledovatel'nost'/SERIAL? - 4.12) CHto takoe OID? CHto takoe CTID? - 4.13) Pochemu ya poluchayu oshibku "ERROR: Memory exhausted in - AllocSetAlloc()"? - 4.14) Kak mne uznat', kakaya versiya PostgreSQL zapuschena? - 4.15) Kak mne sozdat' kolonku kotoraya po umolchaniyu budet soderzhat' - tekuschee vremya? - 4.16) Kak vypolnit' vneshnee svyazyvanie? - 4.17) Kak vypolnyat' zaprosy, ispol'zuyuschie neskol'ko baz dannyh? - 4.18) Kak mne vernut' iz funkcii neskol'ko strok tablicy? - 4.19) Pochemu ya poluchayu oshibku "relation with OID #### ne - suschestvuet", kogda obraschayuts' k vremennym tablicam v funkciyah - PL/PgSQL? - 4.20) Kakie est' resheniya dlya replikacii? - 4.21) Pochemu imena tablicy i kolonok ne raspoznayutsya v v moiom - zaprose? Pochemu ne sohranyayutsya zaglavnye bukvy? - _________________________________________________________________ - - Obschie voprosy - - 1.1) CHto takoe PostgreSQL? Kak proiznositsya `eto nazvanie? CHto takoe - Postgres? - - PostgreSQL proiznositsya Post-Gres-Q-L (Post-Gres-K'yu-`El). (Dlya - osobo lyubopytstvuyuschih kak proiznosit' "PostgreSQL", suschestvuet - audio-fajl). - - PostgreSQL - `eto ob"ektno-relyacionnaya sistema upravleniya bazami - dannyh (SUBD), kotoraya imeet tradicionnye vozmozhnosti kommercheskih - SUBD s rasshireniyami, kotorye est' v SUBD novogo pokoleniya. - PostgreSQL - `eto svobodnoe i polnost'yu otkrytoe programmnoe - obespechenie. - - Razrabotku PostgreSQL vypolnyaet komanda razrabotchikov, razbrosannaya - po vsemu miru i svyazannaya cherez Internet. Razrabotka yavlyaetsya - obschestvennym proektom i ne upravlyaetsya kakoj-libo kompaniej. - Podrobnosti smotrite v FAQ dlya razrabotchikov, - http://www.postgresql.org/docs/faqs.FAQ_DEV.html - - Postgres -- `eto shiroko ispol'zuemoe sokraschenie dlya PostgreSQL. - Pervonachal'nym imenem proekta v Berkli bylo Postgres i `etot nik - teper' naibolee populyaren v razgovorah o PostgreSQL po sravneniyu s - drugimi. Esli vam trudno polnost'yu progovarivat' 'PostgreSQL', mozhno - prosto govorit' 'Postgres'. - - 1.2) Kto upravlyaet PostgreSQL? - - Esli vy ischite kakogo-to osobennogo cheloveka, central'nyj komitet - ili upravlyayuschuyu kompaniyu, to naprasno --- ih net. U nas est' - yadro komiteta i razrabotchikov, rabotayuschih s CVS, no `eti gruppy - sluzhat bol'she dlya administrativnyh celej, chem dlya upravleniya. - Proekt napryamuyu funkcioniruet s pomosch'yu soobschestva - razrabotchikov i pol'zovatelej, k kotoromu mozhet prisoedinitsya - kazhdyj. Vsio chto nuzhno -- `eto podpisat'sya na spiski rassylki i - uchastvovat' v diskussiyah. (Podrobnosti o tom kak vklyuchit'sya v - razrabotku PostgreSQL smotrite v FAQ dlya razrabotchikov.) - - 1.3) Kakovy avtorskie prava na PostgreSQL? - - PostgreSQL rasprostranyaetsya po klassicheskoj licenzii BSD. `Eta - licenziya ne soderzhit ogranichenij na to, kak budet ispol'zovat'sya - ishodnyj kod. Nam nravitsya `eta licenziya i u nas net namerenij eio - menyat'. Vot `eta licenziya BSD, kotoruyu my ispol'zuem: - - Sistema Upravleniya Bazami Dannyh PostgreSQL - - Portions copyright (c) 1996-2008, PostgreSQL Global Development Group - Portions Copyright (c) 1994-1996 Regents of the University of - California - - Predostavlyayutsya prava na ispol'zovanie, kopirovanie, izmenenie i - rasprostranenie dannogo programmnogo obespecheniya i ego dokumentacii - dlya lyubyh celej, besplatno i bez podpisaniya kakogo-libo - soglasheniya, pri uslovii chto dlya kazhdoj kopii budut predostavleny - dannoe vyshe zamechanie ob avtorskih pravah, tekuschij paragraf i dva - sleduyuschih paragrafa. - - KALIFORNIJSKIJ UNIVERSITET NE NESET NIKAKOJ OTVETSTVENNOSTI ZA LYUBYE - POVREZHDENIYA, VKLYUCHAYA POTERYU DOHODA, NANESENNYE PRYAMYM ILI - NEPRYAMYM, SPECIAL'NYM ILI SLUCHAJNYM ISPOL'ZOVANIEM DANNOGO - PROGRAMMNOGO OBESPECHENIYA ILI EGO DOKUMENTACII, DAZHE ESLI - KALIFORNIJSKIJ UNIVERSITET BYL IZVESCHEN O VOZMOZHNOSTI TAKIH - POVREZHDENIJ. - - KALIFORNIJSKIJ UNIVERSITET SPECIAL'NO OTKAZYVAZYVAETSYA PREDOSTAVLYAT' - LYUBYE GARANTII, VKLYUCHAYA, NO NE OGRANICHIVAYAS' TOL'KO `ETIMI - GARANTIYAMI: NEYAVNYE GARANTII PRIGODNOSTI TOVARA ILI PRIGODNOSTI DLYA - OTDEL'NOJ CELI. DANNOE PROGRAMMNOE OBESPECHENIE PREDOSTAVLYAETSYA NA - OSNOVE PRICIPA "KAK EST'" I KALIFORNIJSKIJ UNIVERSITET NE OBYAZAN - PREDOSTAVLYAT' SOPROVOZHDENIE, PODDERZHKU, OBNOVLENIYA, RASSHIRENIYA - ILI IZMENENIYA. - - 1.4) Na kakih platformah rabotaet PostgreSQL? - - Obychno, PostgreSQL mozhet rabotat' na lyuboj sovremennoj platforme - sovmestimoj s Unix. V instrukcii po ustanovke, vy najdete spisok teh - platform, na kotoryh byli provedeny testovye zapuski PostgreSQL k - momentu vyhoda dannoj versii. - - PostgreSQL takzhe rabotaet na operacionnyh sistemah Microsoft Windows, - osnovannyh na NT, takih kak Win2000 SP4, WinXP i Win2003. Paket - installyatora dostupen po adresu - http://www.postgresql.org/download/windows. Versii Windows, osnovannye - na MS-DOS (Win95, Win98, WinMe) mogut zapuskat' PostgreSQL s - pomosch'yu Cygwin. - - Takzhe suschestvuet versiya sportirovannaya pod Novell Netware 6 na - http://developer.novell.com/wiki/index.php/Postgresql, i versiya dlya - OS/2 (eComStation) na - http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgre - SQL&stype=all&sort=type&dir=%2F. - - 1.5) Gde mozhno vzyat' PostgreSQL? - - CHerez brauzer, ispol'zuya http://www.postgresql.org/ftp/ i cherez - ftp, ispol'zuya ftp://ftp.postgresql.org/pub/. - - 1.6) Kakaya versiya naibolee svezhaya? - - Poslednij vypusk PostgreSQL - `eto versiya 8.3.3 - - My planiruem vypuskat' novye starshie versii kazhdyj god, a mladshie - versii kazhdye neskol'ko mesyacev. - - 1.7) Gde poluchit' podderzhku? - - Soobschestvo PostgreSQL predostavlyaet pomosch' mnozhestvu - pol'zovatelej cherez E-mail. Osnovnoj web-sajt dlya podpiski na spiski - rassylki po E-mail `eto: http://www.postgresql.org/community/lists/. - Horoshim mestom dlya togo, chtoby nachat' zadavat' voprosy - yavlyayutsya spiski general (obschie voprosy) ili bugs (oshibki). - - Glavnym IRC kanalom yavlyaetsya #postgreql, raspolozhennyj na servere - Freenode (irc.freenode.net). CHtoby podklyuchit'sya, vy mozhete - ispol'zovat' v Unix vyzov programmy irc -c '#postgresql' "$USER" - irc.freenode.net ili lyuboj drugoj IRC klient. Na `etom zhe servere - suschestvuyut kanaly na ispanskom (#postgresql-es), francuzskom - (#postgresqlfr) i brazil'skom (#postgresql-br) yazykah. Takzhe - suschestvuet kanal po PostgreSQL na servere EFNet. - - Spisok kommercheskoj podderzhki kompanij dostupen na - http://www.postgresql.org/support/professional_support. - - 1.8) Kak mne soobschit' ob oshibke? - - Posetite stranichku so special'noj formoj otchiota ob oshibke v - PostgreSQL po adresu: http://www.postgresql.org/support/submitbug. - Takzhe prover'te nalichie bolee svezhej versii PostgreSQL na nashem - FTP sajte ftp://ftp.postgresql.org/pub/. - - Na oshibki, uvedomlenie o kotoryh byli sdelany cherez special'nuyu - formu ili otpravlennye v kakoj-libo spisok rassylki PostgreSQL, - obychno generiruetsya odin iz sleduyuschih otvetov: - * `Eto ne oshibka i pochemu - * `Eto izvestnaya oshibka i ona uzhe est' v spiske TODO - * Dannaya oshibka byla ispravlena v tekuschem vypuske - * Dannaya oshibka byla ispravlena, no ispravlenie poka ne popalo v - oficial'nyj vypusk - * Zaprashivaetsya bolee detal'naya informaciya: - + Operacionnaya sistema - + Versiya PostgreSQL - + Test, vosproizvodyaschij oshibku - + Otladochnaya informaciya - + Vyvod backtrace otladchika - * `Eto novaya oshibka. Mozhet proizojti sleduyuschee: - + Budet sozdano ispravlenie, kotoroe budet vklyucheno v - sleduyuschij vypusk - + Oshibka ne mozhet byt' ispravlena nemedlenno i budet - dobavlena v spisok TODO - - 1.9) Kak najti informaciyu ob izvestnyh oshibkah ili otsutstvuyuschih - vozmozhnostyah? - - PostgreSQL podderzhivaet rasshirennyj podklass SQL:2003. Smotrite nash - spisok TODO na predmet izvestnyh oshibok, otsutstvuyuschih - vozmozhnostej i buduschih planov. - - Na zapros kakoj-libo vozmozhnosti obychno prihodyat sleduyuschie - otvety: - * Dannaya vozmozhnost' uzhe est' v spiske TODO - * Dannaya vozmozhnost' nezhelatel'na potomu chto: - + Ona dubliruet suschestvuyuschuyu funkcional'nost', kotoraya - sleduet standartu SQL - + Dannaya vozmozhnost' sil'no uslozhnila by kod, no dala by - malen'kuyu vygodu - + Dannaya vozmozhnost' nebezopasna ili nenadiozhna - * Dannaya novaya vozmozhnost' dobavlena v spisok TODO - - PostgreSQL ne ispol'zuet kakuyu-libo sistemu otslezhivaniya oshibok, - potomu chto my obnaruzhili, chto ispol'zovanie pryamogo obrascheniya - po `elektronnoj pochte i obnovlyaemogo spiska TODO yavlyaetsya bolee - `effektivnym. Na praktike, oshibki v programmnom obespechenii - sohranyayutsya ochen' nedolgo, a oshibki, kotorye vazhny bol'shomu - kolichestvu pol'zovatelej ispravlyayutsya momental'no. Est' tol'ko - odno mesto, gde mozhno najti vse izmeneniya, uluchsheniya i - ispravleniya, sdelannye v vypuske PostgreSQL - `eto zhurnaly - soobschenij sistemy kontrolya versij CVS. Dazhe zamechaniya k vypuskam - ne soderzhat vse izmeneniya, sdelannye v programmnom obespechenii. - - 1.10) Kakaya dokumentaciya imeetsya v nalichii? - - PostgreSQL soderzhit mnogo dokumentacii, vklyuchaya bol'shoe - rukovodstvo, stranicy `elektronnogo rukovodstva man i nekotorye - malen'kie testovye primery. Smotrite v katalog /doc. Vy takzhe mozhete - prosmatrivat' dokumentaciyu v Internet po adresu - http://www.postgresql.org/docs. - - Suschestvuet dve knigi po PostgreSQL dostupnye po adresam - http://www.PostgreSQL.org/docs/books/awbook.html i - http://www.commandprompt.com/ppbook/. Est' neskol'ko knig po - PostgreSQL, kotorye mozhno kupit'. Odnu iz naibolee populyarnyh - napisal Korri Duglas (Korry Douglas). Spisok obzorov po `etim knigam - dostupen po adresu http://www.postgresql.org/docs/books/. Krome togo, - po adresu - http://wiki.postgresql.org/wiki/Community_Generated_Articles%2C_Guides - %2C_and_Documentation vy mozhete najti kollekciyu tehnicheskih statej, - posveschennyh PostgreSQL. - - Klient komandnoj stroki psql imeet neskol'ko komand \d dlya - otobrazheniya informacii po tipam, operatoram, funkciyam, agregatam i - t.d. - ispol'zujte \? dlya polucheniya spiska dostupnyh komand. - - Nash sajt soderzhit esche bol'she informacii. - - 1.11) Kak mne nauchit'sya SQL? - - Vo-pervyh, voz'mite odnu iz knig po PostgreSQL, o kotoryh govorilos' - vyshe. Mnogim iz nashih pol'zovatelej takzhe nravitsya kniga The - Practical SQL Handbook, Bowman, Judith S., et al., Addison-Wesley. - Drugim nravitsya The Complete Reference SQL, Groff et al., - McGraw-Hill. - - Suschestvuet takzhe mnozhestvo prekrasnyh uchebnikov dostupnyh v - online: - * http://www.intermedia.net/support/sql/sqltut.shtm, - * http://sqlcourse.com. - * http://www.w3school.com/sql/default.asp - * http://mysite.verizon.net/Graeme_Birchall/id1.html - - 1.12) Kak mne prislat' ispravlenie ili prisoedinitsya k komande - razrabotchikov? - - Smotrite FAQ dlya razrabotchikov. - - 1.13) Kak sravnit' PostgreSQL s drugimi SUBD? Mozhet li PostgreSQL byt' - vstroennym? - - Suschestvuet neskol'ko metodov sravneniya programmnogo obespecheniya: - vozmozhnosti, proizvoditel'nost', nadezhnost', podderzhka i cena. - - Vozmozhnosti - PostgreSQL imeet bol'shinstvo vozmozhnostej predstavlennyh v - bol'shih kommercheskih SUBD, takie kak: tranzakcii, podzaprosy, - triggery, predstavleniya, ssylochnoj celostnosti vtorichnogo - klyucha i raznye blokirovki. U nas est' nekotorye vozmozhnosti, - kotoryh net u nih: tipy, opredelyaemye pol'zovatelem, mehanizm - nasledovaniya, pravila i konkuretnoe mnogoversionnoe upravlenie - dlya raboty s soderzhimym blokirovok. - - Proizvoditel'nost' - Proizvoditel'nost' PostgreSQL shodna s drugimi kommercheskimi - SUBD i s SUBD s otkrytym ishodnym kodom. V kakih-to veschah my - bystree, v kakih-to medlennee. Nasha proizvoditel'nosti obychno - +/-10% po sravneniyu s drugimi SUBD. - - Nadezhnost' - My ponimali, chto nasha SUBD dolzhna byt' nadezhnoj ili ona - nichego ne budet stoit'. My staraemsya vypuskat' horosho - proverennyj, stabil'nyj kod, kotoryj soderzhit minimum oshibok. - Kazhdyj vypusk prohodit stadiyu beta-testirovaniya po krajnej - mere v techenii odnogo mesyaca i nasha istoriya vypuskov - pokazyvaet chto my mozhem predostavlyat' stabil'nye, monolitnye - vypuski, kotorye gotovy k produktivnomu ispol'zovaniyu. My - verim, chto my proizvodim proverku ne huzhe, chem u drugih - SUBD. - - Podderzhka - Nash spisok rassylki predostavlyaet vozmozhmozhnost' obscheniya - s bol'shoj gruppoj razrabotchikov i pol'zovatelej, kotorye - mogut pomoch' reshit' lyubye voznikshie problemy. V to zhe - vremya, my ne garantiruem kakie-libo ispravleniya, no i - razrabotchiki kommercheskih SUBD ne vsegda delayut - ispravleniya. Pryamoj dostup k razrabotchikam, soobschestvu - pol'zovatelej, rukovodstvam i ishodnym tekstam chasto delayut - podderzhku PostgreSQL prevoshodyaschej drugie SUBD. - Suschestvuet kommercheskaya podderzhka po rezul'tam voznikshih - incidentov, kotoraya dostupna dlya teh komu ona nuzhna. - (Smotrite Sekciyu 1.7.) - - Cena - Nash produkt besplaten kak dlya kommercheskogo tak, i ne dlya - kommercheskogo ispol'zovaniya. Vy mozhete dobavlyat' svoj kod v - nash produkt bez ogranichenij, za isklyucheniem teh, chto - opisyvayutsya v nashej licenzii stilya BSD, kotoraya privedena - vyshe. - - PostgreSQL razrabatyvaetsya po arhitekture klient/server, kotoraya - trebuet otdel'nyh processov dlya kazhdogo klienta i servera, a takzhe - neskol'ko vspomogatel'nyh processov. Mnogie vstraivaemye arhitektury - mogut sootvetstvovat' takim trebovaniyam. Odnako, esli vasha - vstraivaemaya arhitektura trebuet server baz dannyh dlya zapuska - vnutri prikladnogo processa, vy ne mozhete ispol'zovat' Postgres i vam - luchshe by vybrat' dlya bazy dannyh kakoe-libo drugoe oblegchennoe - reshenie. - - 1.14) Budet li PostgreSQL rabotat' s poslednimi izmeneniyami, v raznyh - stranyh, kasayuschimisya dnevnogo vremeni? - - Izmeneniya v sohranenii dnevnogo vremeni v SSHA vklyucheny v - PostgreSQL versii 8.0.[4+] i vo vse sleduyuschie vypuski, naprimer v - 8.1. Izmeneniya po Kanade i Zapadnoj Avstralii vklyucheny v 8.0.[10+], - 8.1.[6+] i vse sleduyuschie vypuski. Vypuski PostgreSQL do 8.0 - ispol'zuyut informaciyu o sohranenii dnevnogo vremeni iz bazy dannyh - vremennyh zon v operacionnoj sisteme. - _________________________________________________________________ - - 1.15) Kak mne otpisat'sya ot spiskov rassylki PostgreSQL? Kak izbezhat' - polucheniya dubliruyuschih soobschenij? - - Stranica Majordomo na sajte PostgreSQL pozvolyaet podpisat'sya ili - otpisat'sya ot lyubogo iz spiskov rassylki PostgreSQL. (Vam mozhet - ponadobitsya vash parol' dlya Majordomo, kotoryj otpravlyaetsya na - vash E-mail, chtoby vojti v upravlenie vashimi podpiskami.) - - Vse spiski rassylki PostgreSQL nastarivayutsya tak, chtoby gruppovoj - otvet uhodil na adres spiska i na adres avtora soobscheniya. Tak - sdelano, chtoby pol'zovateli poluchali otvety na E-mail kak mozhno - bystree. Esli vy ne hotite poluchat' dubliruyuschie E-mail - soobscheniya iz spiska, v sluchayah kogda vy uzhe poluchili `eti - soobscheniya napryamuyu, ustanovite flazhok eliminatecc na stranice - Change Settings v Majordomo. Vy takzhe mozhete izbezhat' polucheniya - kopij svoih soobschenij dlya samogo sebya, esli snimite flazhok - selfcopy. - _________________________________________________________________ - - Voprosy pol'zovatelej po klientskoj chasti - - 2.1) Kakie interfejsy est' dlya PostgreSQL? - - Ustanovka PostgreSQL vklyuchaet tol'ko C i vstroennyj (embedded) C - interfejsy. Vse drugie interfejsy yavlyayutsya nezavisimymi proektami - i zagruzhayutsya otdel'no; samostoyatel'nost' proektov pozvolyaet im - organizovat' sobstvennoe raspisanie vypuskov novyh versij i imet' - sobstvennuyu komandu razrabotchikov. - - Nekotorye yazyki programmirovaniya, takie kak PHP vklyuchayut v sebya - interfejs k PostgreSQL. Interfejsy dlya takih yazykov kak Perl, TCL, - Python i mnogih drugih, dostupny na http://pgfoundry.org. - - 2.2) Kakie instrumenty suschestvuyut dlya ispol'zovaniya PostgreSQL cherez - Web? - - Prekrasnoe vvedenie vo vzaimodejstvie baz dannyh i Web mozhno najti - na: http://www.webreview.com - - Dlya integracii s Web, PHP http://www.php.net yavlyaetsya neplohim - interfejsom. - - V slozhnyh sluchayah, mnogie pol'zuyutsya Perl i DBD::Pg s CGI.pm ili - mod_perl. - - 2.3) Est' li u PostgreSQL graficheskij interfejs pol'zovatelya? - - Dlya PostgreSQL suschestvuet bol'shoe kolichestvo instrumentov s - graficheskim interfejsom kak kommercheskih, tak i otkrytyh. - Podrobnosti mozhno najti v Dokumentacii soobschestva dlya GUI - istrumentov PostgreSQL - _________________________________________________________________ - - Voprosy administrirovaniya - - 3.1) Kak mne ustanovit' PostgreSQL v mesto otlichnoe ot /usr/local/pgsql? - - Zadajte opciyu --prefix kogda zapuskaete configure. - - 3.2) Kak mne upravlyat' soedineniyami ot drugih komp'yuterov? - - Po umolchaniyu, PostgreSQL razreshaet tol'ko soedineniya na lokal'noj - mashine cherez sokety domena Unix ili TCP/IP soedineniya. Dlya togo, - chtoby drugie mashiny smogli podklyuchit'sya k baze vy dolzhny - izmenit' listen_addresses v postgresql.conf, razreshit' - host-avtorizaciya v fajle $PGDATA/pg_hba.conf i perestartovat' server - SUBD. - - 3.3) Kakie nastrojki mne nuzhno sdelat' dlya uluchsheniya proizvoditel'nosti? - - Suschestvuet tri glavnyh oblasti, kotorye potencial'no mogut - uvelichit' proizvoditel'nost': - - Izmenenie zaprosa - `Eto oznachaet modifikaciyu zaprosov dlya polucheniya luchshej - proizvoditel'nosti: - - + Sozdanie indeksov, vklyuchaya indeksy vyrazhenij i - chastichnye indeksy - + Ispol'zovanie COPY vmesto mnozhestva INSERT - + Gruppirovka neskol'kih operatorov v edinuyu tranzakciyu dlya - umen'sheniya nagruzki pri vypolnenii zaversheniya tranzakcii - + Ispol'zovanie CLUSTER, kogda iz indeksa beriotsya mnozhestvo - strok - + Ispol'zovanie LIMIT dlya togo, chtoby vozvraschalas' tol'ko - chast' vyvoda ot zaprosa - + Ispol'zovanie Podgotovlennyh (Prepared) zaprosov - + Ispol'zovanie ANALYZE dlya obsluzhivaniya statistiki - optimizatora - + Regulyarnoe ispol'zovanie VACUUM ili pg_autovacuum - + Udalenie indeksov vo vremya bol'shih izmenenij dannyh - - Nastrojka servera - Nekotorye ustanovki v postgresql.conf vliyayut na - proizvoditel'nost'. Podrobnyj polnyj spisok ustanovok sm. v - Administration Guide/Server Run-time Environment/Run-time - Configuration, a kommentarii sm. v - http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_co - nf_e.html i - http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html. - - Vybor "zheleza" - apparatnogo obespecheniya - Vliyanie "zheleza" na proizvoditel'nost' podrobno opisano v - http://www.powerpostgresql.com/PerfList/ i - http://momjian.us/main/writings/pgsql/hw_performance/index.html - . - - 3.4) Kakie vozmozhnosti dlya otladki est' v nalichii? - - Est' mnozhestvo ustanovok v nastrojkah servera, nachinayuschihsya na - log_* na - http://www.postgresql.org/docs/current/interactive/runtime-config-logg - ing.html, pozvolyayuschih protokolirovat' zaprosy i statistiku raboty - processa, kotoraya ochen' polezna dlya otladki i izmereniya - proizvoditel'nosti. - - 3.5) Pochemu ya poluchayu soobschenie "Sorry, too many clients" kogda - pytayus' podklyuchit'sya k baze? - - Vy dostigli ustanovlennogo po umolchaniyu ogranicheniya v 100 sessij - podklyucheniya k baze dannyh. Vam neobhodimo uvelichit' limit na - kolichestvo konkurentnyh backend processov dlya vashego servera BD, - izmeniv znachenie max_connections v fajle postgresql.conf i - perestartovat' server BD. - - 3.6) Kak vypolnit' obnovlenie PostgreSQL? - - Sm. informaciyu ob obnovlenii v - http://www.postgresql.org/support/versioning i special'nye instrukcii - v - http://www.postgresql.org/docs/current/static/install-upgrading.html. - - 3.7) Kakoe komp'yuternoe "zhelezo" ya dolzhen ispol'zovat'? - - Poskol'ku "zhelezo" personal'nyh komp'yuterov yavlyaetsya naibolee - sovmestimym, lyudi sklonny verit', chto takoe "zhelezo" imeet - odinakovoe kachestvo. `Eto ne tak. Pamyat' ECC, SCSI i kachestvennye - materinskie platy yavlyayutsya bolee nadiozhnymi i imeyut bolee - luchshuyu proizvoditel'nost', chem menee dorogoe "zhelezo". PostgreSQL - budet rabotat' na lyubom "zheleze", no esli dlya vas vazhny - nadiozhnost' i proizvoditel'nost', to s vashej storony budet mudro - postavit' sootvetstvuyuschee "zhelezo". Obsudit' raznoe "zhelezo" - mozhno v nashih spiskah rassylki. - _________________________________________________________________ - - Voprosy `ekspluatacii - - 4.1) Kak vypolnit' SELECT tol'ko dlya neskol'kih pervyh strochek zaprosa? - Proizvol'noj stroki? - - Dlya polucheniya tol'ko neskol'kih strok, esli vy znaete ih - kolichestvo na moment vypolneniya SELECT ispol'zujte LIMIT. - Esli est' kakoj-libo indeks, kotoryj sovpadaet s ORDER BY, to - vozmozhno, chto ves' zapros vypolnen i ne budet. Esli vy ne znaete - kolichestva neobhodimyh strok na moment vypolneniya SELECT, - ispol'zujte kursor i FETCH. - - To SELECT a random row, use: - SELECT col - FROM tab - ORDER BY random() - LIMIT 1; - - 4.2) Kak mne najti kakie tablicy, indeksy, bazy dannyh i pol'zovateli - suschestvuyut? Kak mne uvidet' zaprosy, kotorye ispol'zuet psql dlya - polucheniya `etoj informacii? - - CHtoby prosmatrivat' tablicy v psql, ispol'zujte komandu \dt. Polnyj - spisok komand v psql vy mozhete poluchit', ispol'zuya \?. Krome togo, - vy mozhete posmotret' ishodnyj kod psql v fajle - pgsql/src/bin/psql/describe.c. On soderzhit komandy SQL kotorye - generiruyutsya pri vvode v psql komand, nachinayuschihsya s obratnoj - kosoj cherty. Vy takzhe mozhete zapustit' psql s opciej -E tak, chtoby - `eta programma vydavala zaprosy, kotorye ona ispol'zuet dlya - vypolneniya zadannyh vami komand. PostgreSQL takzhe predostavlyaet SQL - sovmestimyj s INFORMATION SCHEMA interfejs, s pomosch'yu kotorogo, vy - mozhete sformirovat' zapros na poluchenie informacii o baze dannyh. - - Takzhe suschestvuyut sistemnye tablicy, nachinayuschiesya s pg_. - - Ispol'zujte psql -l dlya polucheniya spiska vseh baz dannyh. - - Takzhe posmotrite fajl pgsql/src/tutorial/syscat.source. On pokazyvaet - mnogie iz operatorov SELECT neobhodimyh dlya polucheniya informacii iz - sistemnyh tablic bazy dannyh. - - 4.3) Kak izmenit' tip dannyh kolonki? - - V 8.0 i bolee pozdnih versiyah, izmenenie tipa kolonki vypolnyaetsya - ochen' legko cherez ALTER TABLE ALTER COLUMN TYPE. - - V bolee rannih versiyah sdelajte tak: - BEGIN; - ALTER TABLE tab ADD COLUMN new_col new_data_type; - UPDATE tab SET new_col = CAST(old_col AS new_data_type); - ALTER TABLE tab DROP COLUMN old_col; - COMMIT; - - 4.4) Kakovy maksimal'nye razmery dlya strok v tablice, tablic i bazy dannyh? - - Suschestvuyut sleduyuschie ogranicheniya: - - Maksimal'nyj razmer bazy? neogranichen (suschestvuyut bazy na 32 TB) - Maksimal'nyj razmer tablicy? 32 TB - Maksimal'nyj razmer stroki? 400 Gb - Maksimal'nyj razmer polya? 1 GB - Maksimal'noe kolichestvo strok v tablice? neogranicheno - Maksimal'noe kolichestvo kolonok v tablice? 250-1600 v zavisimosti ot - tipa - Maksimal'noe kolichestvo indeksov v tablice? neogranicheno - - Razumeetsya, ponyatie "neogranicheno" na samom dele ogranichivaetsya - dostupnym diskovym prostranistvom i razmerami pamyati/svoppinga. Kogda - znacheniya perechislennye vyshe neopravdano bol'shie, mozhet - postradat' proizvoditel'nost'. - - Maksimal'nyj razmer tablicy v 32 TB ne trebuet chtoby operacionnaya - sistema podderzhivala fajly bol'shih razmerov. Bol'shie tablicy - hranyatsya kak mnozhestvo fajlov razmerom v 1 GB, tak chto - ogranicheniya, kotorye nakladyvaet fajlovaya sistema ne vazhny. - - Maksimal'nyj razmer tablicy i maksimal'noe kolichestvo kolonok mogut - byt' uvelicheny v chetyre raza, esli razmer bloka po umolchaniyu budet - uvelichen do 32k. - - Suschestvuet ogranichenie, po kotoromu indeksy ne mogut sozdavat'sya - dlya kolonok dlinnee chem 2,000 simvolov. K schast'yu takie indeksy - vryad li dejstvitel'no komu-to nuzhny. Unikal'nost' garantiruetsya - nailuchim obrazom, s pomosch'yu funkcional'nogo indeksa iz h`esha MD5 - dlinnoj kolonki, a polnotekstovoe indeksirovanie pozvolyaet iskat' - slova vnutri kolonki. - - 4.5) Kak mnogo diskovogo prostranstva v baze dannyh nuzhno dlya sohraneniya - dannyh iz obychnogo tekstovogo fajla? - - SUBD PostgreSQL mozhet potrebovat'sya diskovogo prostranstva do 5 raz - bol'she dlya sohraneniya dannyh iz prostogo tekstovogo fajla. - - V kachestve primera, rassmotrim fajl v 100,000 strok v kazhdoj, iz - kotoryh celoe chislo i tekstovoe opisanie. Pri `etom dlina teksta, v - srednem, sostavlyaet 20 bajt. Razmer prostogo fajla sostavit 2.8 MB. - Razmer bazy PostgreSQL, soderzhaschej `eti zhe dannye sostavit - priblizitel'no 5.2 MB iz kotoryh: - 24 bajt: na kazhdyj zagolovok stroki v tablice (priblizitel'no) - + 24 bajta: odno pole s celochislennym tipom i odno tekstovoe pole - + 4 bajta: ukazatel' na stranice dlya vsej tablichnoj stroki - ---------------------------------------- - 56 bajt na stroku v tablice - - Razmer stranicy dannyh v PostgreSQL sostavlyaet 8192 bajt (8 KB), tak chto: - - 8192 bajt na stranicu - --------------------- = 158 strok v tablice na stranicu BD (okruglionno) - 52 bajt na stroku v tablice - - 100000 strok dannyh - ----------------------- = 633 stranic v BD (okruglionno) - 158 strok v tablice na stranicu - - 633 stranic BD * 8192 bajt na stranicu = 5,185,536 bajt (5.2 MB) - - Indeksy ne trebuyut tak mnogo, no poskol'ku oni sozdayutsya dlya - bol'shogo kolichestva dannyh, oni takzhe mogut byt' veliki. - - Znacheniya NULL hranyatsya kak bitovye karty i po`etomu oni zanimayut - ochen' malo mesta. - - 4.6) Pochemu moi zaprosy rabotayut medleno? Pochemu oni ne ispol'zuyut moi - indeksy? - - Indeksy ne ispol'zuyutsya dlya kazhdogo zaprosa. Oni ispol'zuyutsya - tol'ko esli tablica bol'she minimal'nogo razmera i zapros vybiraet - tol'ko malen'kij procent strok v tablice. Tak ustroeno, potomu chto - dostup k disku s primeneniem randomizacii pri skanirovanii indeksov - mozhet byt' medlennee, chem prostoe chtenie tablicy ili ee - posledovatel'noe skanirovanie. - - CHtoby opredelit' neobhodimost' ispol'zovaniya indeksa dlya kakoj-libo - tablicy, PostgreSQL dolzhen imet' statistiku po `etoj tablice. `Eta - statistika sobiraetsya pri ispol'zovanii VACUUM ANALYZE ili prosto - ANALYZE. Ispol'zuya statistiku, optimizator uznaet o tom kak mnogo - strok v tablice i esli on dolzhen ispol'zovat' indeksy, to on mozhet - prinimat' luchshie resheniya. Statistika takzhe vliyaet na opredelenie - optimal'nogo poryadka svyazyvaniya i metoda svyazyvaniya. Pri - izmenenii soderzhimogo tablicy dolzhen periodicheski vypolnyatsya sbor - statistiki. - - Obychno indeksy ne ispol'zuyutsya dlya ORDER BY ili dlya vypolneniya - svyazyvanij. Posledovatel'nyj perebor sleduyuschij za yavnoj - sortirovkoj obychno bystree, chem poisk po indeksam v bol'shoj - tablice. Odnako, ORDER BY chasto kombiniruetsya s LIMIT i v `etom - sluchae indeks budet ispol'zovat'sya, poskol'ku pri vypolnenii budet - vozvraschat'sya nebol'shaya chast' tablicy. - - Esli vam kazhetsya, chto optimizator nekorrektno vybiraet - posledovatel'nyj perebor, ispol'zujte SET enable_seqscan TO 'off' i - zapustite zapros snova, chtoby uvidet', dejstvitel'no li skanirovanie - indeksov bystree. - - Kogda ispol'zuyutsya operacii s shablonami, naprimer LIKE ili ~, - indeksy mogut byt' ispol'zovany v sleduyuschih sluchayah: - * Nachalo stroki poiska dolzhno sovpadat' s nachalom iskomoj stroki, - t.e.: - + LIKE shablony ne dolzhny nachinat'sya s %.. - + ~ shablony regulyarnyh vyrazhenij dolzhna nachinat'sya na ^. - * Stroka poiska ne dolzhna nachinat'sya s simvola klassa, t.e. - [a-e]. - * Poisk nezavisimyj ot registra, takoj kak ILIKE i ~* ne ispol'zuet - indeksy. Vmesto nego, ispol'zujte indeksy vyrazhenij, kotorye - opisyvayutsya v sekcii 4.8. - * Vo vremya initdb dolzhna ispol'zovat'sya lokal' po umolchaniyu C, - potomu chto ne suschestvuet vozmozhnosti uznat' sleduyuschij - naibol'shij simvol dlya ne-C lokali. Vy mozhete dlya takih - sluchaev sozdat' special'nyj indeks text_pattern_ops kotoryj - rabotaet tol'ko dlya LIKE indeksirovaniya. Dlya poiska slov takzhe - mozhno ispol'zovat' polnotekstovyj indeks. - - 4.7) Kak posmotret' na to, kak optimizator vypolnyaet moj zapros? - - Smotrite stranicu rukovodstva posvyaschennuyu EXPLAIN. - - 4.8) Kak mne vypolnit' poisk regulyarnogo vyrazheniya i poisk nezavisimyj ot - registra bukv poisk regulyarnogo vyrazheniya? Kak mne ispol'zovat' indeks - dlya poiska nezavisimogo ot registra bukv? - - Operator ~ proizvodit poisk regulyarnogo vyrazheniya, a operator ~* - proizvodit nezavisimyj ot registra bukv poisk regulyarnogo - vyrazheniya. Nezavisimyj ot registra variant LIKE nazyvaetsya ILIKE. - - Nezavisimoe ot registra sravnenie obychno vyrazhaetsya tak: - SELECT * - FROM tab - WHERE lower(col) = 'abc'; - - `Eta konstrukciya ne budet ispol'zovat' standartnyj indeks. Odnako, - esli vy sozdadite indeks vyrazheniya, on budet ispol'zovan: - CREATE INDEX tabindex ON tab (lower(col)); - - Esli vysheukazannyj indeks sozdaiotsya kak UNIQUE, to kolonka, dlya - kotoroj on sozdaiotsya mozhet hranit' simvoly i v verhnem, i v nizhnem - registre, indes ne mozhet imet' identichnyh znachenij, kotorye - otlichayutsya tol'ko registrom. CHtoby v kolonke mozhno bylo hranit' - simvoly tol'ko v opredelionnom registre, ispol'zujte ogranichenie - CHECK ili proverku cherez trigger. - - 4.9) Kak mne opredelit', chto znachenie polya v kakom-libo zaprose ravno - NULL? Kak mne soedinit' vozmozhnye NULL? Mogu ya sortirovat' polya NULL ili - net? - - Vy prosto sravnivaete znachenie s IS NULL i IS NOT NULL, kak zdes': - SELECT * - FROM tab - WHERE col IS NULL; - - CHtoby soedinit' s vozmozhnymi znacheniyami NULL, ispol'zujte - COALESCE() kak zdes': - SELECT COALESCE(col1, '') || COALESCE(col2, '') - FROM tab - - CHtoby otsortirovat' dannye po znacheniyu ispol'zujte modifikatory IS - NULL i IS NOT NULL v vyrazhenii ORDER BY. Kogda oni budut generirovat' - znacheniya istina, to pri sortirovke oni budut vyshe, chem znacheniya - lozh', tak chto zapisi s NULL budut v otsortirovannom spiske sverhu: - SELECT * - FROM tab - ORDER BY (col IS NOT NULL); - - 4.10) Kakovy otlichiya mezhdu raznymi simvol'nymi tipami? - - Tip Vnutrennee imya Zamechaniya - VARCHAR(n) varchar razmer zadaet maksimal'nuyu dlinu, net zapolneniya - CHAR(n) bpchar zapolnyaetsya pustotoj do fiksirovannoj dliny - TEXT text net zadavaemogo verhnego ogranicheniya ili dliny - BYTEA bytea massiv bajt peremennoj dliny (mozhno ispol'zovat' - null-bajt bez opaski) - "char" char odin simvol - - Vnutrennee imya vy mozhete uvidet', kogda smotrite sistemnye katalogi - i v nekotoryh soobscheniyah ob oshibkah. - - Pervye chetyre tipa yavlyayutsya "varlena" tipami (t.e., pervye - chetyre bajta na diske yavlyayutsya dlinnoj, za kotoroj sleduyut - dannye). Takim obrazom, fakticheski ispol'zuemoe prostranstvo bol'she, - chem oboznachennyj razmer. Odnako, dlinnye znacheniya takzhe - szhimayutsya, tak chto zanimaemoe diskovoe prostranstvo mozhet takzhe - byt' i men'she, chem ozhidalos'. - VARCHAR(n) - `eto luchshee reshenie, kogda nuzhno hranit' stroki - peremennoj dliny, ne prevyshayuschie opredelennogo razmera. TEXT - - `eto luchshee reshenie dlya strok neogranichennoj dliny, s maksimal'no - dopustimoj dlinoj v 1 gigabajt. - - CHAR(n) - `eto luchshee reshenie dlya hraneniya strok, kotorye obychno - imeyut odinakovuyu dlinu. CHAR(n) zapolnyaetsya pustotoj do zadannoj - dliny, v to vremya kak VARCHAR(n) hranit tol'ko simvoly, iz kotoryh - sostoit stroka. BYTEA ispol'zuetsya dlya hraneniya binarnyh dannyh, - znacheniya kotoryh mogut vklyuchat' NULL bajty. Vse tipy opisannye - zdes', imeyut shodnye harakteristiki proizvoditel'nosti. - - 4.11.1) Kak mne sozdat' pole serial/s-avto-uvelicheniem? - - PostgreSQL podderzhivaet tip dannyh SERIAL. On avtomaticheski sozdaet - posledovatel'nost'. Naprimer: - CREATE TABLE person ( - id SERIAL, - name TEXT - ); - - avtomaticheski transliruetsya v: - CREATE SEQUENCE person_id_seq; - CREATE TABLE person ( - id INT4 NOT NULL DEFAULT nextval('person_id_seq'), - name TEXT - ); - - Avtomaticheski sozdannaya posledovatel'nost' imeet imya vida - <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 d1c886d2a9..0000000000 --- a/doc/FAQ_turkish +++ /dev/null @@ -1,1192 +0,0 @@ - - PostgreSQL i�in S�k�a Sorulan Sorular (SSS) - - Son g�ncelleme : 15 Kas�m 2004 Pazartesi - 15:03:23 - - Current maintainer: Bruce Momjian (pgman@candle.pha.pa.us) - - �evirenler : Devrim G�nd�z (devrim@tdmsoft.com) - Nicolai Tufar (ntufar@tdmsoft.com) - Volkan YAZICI (volkany@phreaker.net) - - Bu belgenin en g�ncel hali, - http://www.PostgreSQL.org/docs/faqs/FAQ_turkish.html ve - http://www.gunduz.org/seminer/pg/FAQ_turkish.html adreslerinde - g�r�lebilir. - - Platforma �zel sorular�n�z, http://www.PostgreSQL.org/docs/index.html - adresinde yan�tlan�r. - _________________________________________________________________ - - Genel Sorular - - 1.1) PostgreSQL nedir? Nas�l okunur? - 1.2) PostgreSQL'in haklar� nedir? - 1.3) PostgreSQL, hangi Unix platformlar�nda �al���r? - 1.4) Hangi Unix olmayan uyarlamalar� bulunmaktad�r? - 1.5) PostgreSQL'i nereden indirebilirim? - 1.6) Deste�i nereden alabilirim? - 1.7) En son s�r�m� nedir? - 1.8) Hangi belgelere ula�abilirim? - 1.9) Bilinen hatalar ya da eksik �zelliklere nereden ulasabilirim? - 1.10) Nas�l SQL ��renebilirim? - 1.11) PostgreSQL 2000 y�l�na uyumlu mudur? - 1.12) Geli�tirme tak�m�na nas�l kat�labilirim?? - 1.13) Bir hata raporunu nas�l g�nderebilirim? - 1.14) PostgreSQL, di�er VTYS(DBMS) lerle nas�l kar��la�t�r�labilir? - 1.15) PostgreSQL'e maddi a��dan nas�l destek olabilirim? - - Kullan�c�/istemci Sorular� - - 2.1) PostgreSQL i�in ODBC s�r�c�leri var m�? - 2.2) PostgreSQL'i web sayfalar�nda kullanabilmek i�in hangi ara�lar - bulunmaktad�r? - 2.3) PostgreSQL'in grafik kullan�c� arabirimi var m�d�r? - 2.4) PostgreSQL ile ileti�imi kurabilmek i�in hangi dilleri - kullanabilirim? - - Y�netimsel Sorular - - 3.1) PostgreSQL'i /usr/local/pgsql dizininden ba�ka dizinlere nas�l - kurabilirim? - 3.2) Postmaster'� ba�latt���mda Bad System Call ya da core dumped - mesaj� al�yorum. Neden? - 3.3) Postmaster'� ba�latt���mda, IpcMemoryCreate hatas� al�yorum. - Neden? - 3.4) Postmaster'�, ba�latt���mda, IpcSemaphoreCreate hatas� al�yorum. - Neden? - 3.5) Di�er bilgisayarlar�n benim PostgreSQL veritaban� sunucuma - ba�lant�lar�n� nas�l kontrol edebilirim? - 3.6) Veritaban� motorunu daha iyi ba�ar�m icin nas�l ayarlayabilirim? - 3.7) Hangi hata ay�klama �zellikleri bulunmaktad�r? - 3.8) Ba�lanmaya �al���rken, neden "Sorry, too many clients" hatas�n� - al�yorum. Neden? - 3.9) pgsql_tmpdizinin i�indeki dosyalar nelerdir? - 3.10) PostgreSQL s�r�mlerini y�kseltmek i�in neden bir dump/reload - i�lemi ger�ekle�tirmek zorunday�m? - 3.11) Nas�l bir donan�m kullanmal�y�m?br> - - ��letimsel Sorular - - 4.1) Binary cursor ve normal cursor aras�ndaki fark ned�r? - 4.2) Sorgunun sadece ilk birka� sat�r�n� nas�l SELECT edebilirim? - 4.3) psql'in i�inde g�rd�g�m tablolar�n ya da di�er �eylerin listesini - nas�l alabilirim? - 4.4) Bir tablodan bir kolonu nas�l kald�rabilirim? - 4.5) Bir sat�r, tablo ve veritaban� i�in en fazla b�y�kl�k nedir? - 4.6) Tipik bir metin dosyas�ndaki veriyi saklamak i�in ne kadar disk - alan� gereklidir? - 4.7) Veritaban�nda hangi tablo ya da index'lerin tan�mland���n� nas�l - g�rebilirim? - 4.8) Sorgular�m cok yava�, ya da index'lerimi kullanm�yorlar. Neden? - 4.9) Query-optimizer'�n sorgular�m� nas�l de�erlendirdi�ini, i�leme - soktu�unu nas�l g�rebilirim? - 4.10) R-tree index nedir? - 4.11) Genetic Query Optimizer nedir? - 4.12) D�zenli ifade (Regular Expression) aramalar�n� ve b�y�k/k���k - harfe duyars�z aramalar� nas�l yapabilirim? Bu b�y�k/k���k harfe - duyarl� aramalar i�in index'i nas�l kullanabilirim? - 4.13) Bir sorguda, bir alan�n NULL oldu�unu nas�l ortaya - ��karabilirim? - 4.14) �esitli karakter tipleri aras�ndaki farklar nelerdir? - 4.15.1) Nas�l serial/otomatik artan (auto-incrementing) bir alan - yaratabilirim? - 4.15.2) Serial giri�inin de�erini nas�l alabilirim? - 4.15.3) currval() ve nextval() di�er kullan�c�lara sorun yaratmaz m�? - 4.15.4) Neden sequence say�lar�n transaction i�leminin iptalinden - sonra yeniden kullan�l�yor? Neden sequence/SERIAL kolonumdaki - say�larda atlamalar oluyor? - 4.16) OID nedir? TID nedir? - 4.17) PostgreSQL' de kullan�lan baz� terimlerin anlamlar� nelerdir? - 4.18) Neden "ERROR: Memory exhausted in AllocSetAlloc()" hatas�n� - al�yorum? - 4.19) Hangi PostgreSQL s�r�m�n� �al�st�rd���m� nas�l g�rebilirim? - 4.20) Neden large-object i�lemlerim, "invalid large obj descriptor" - hatas�n� veriyor? - 4.21) �u andaki zaman� �ntan�ml� de�er olarak kabul eden kolonu nas�l - yarat�r�m? - 4.22) Neden IN kullanan subquery'lerim �ok yava�? - 4.23) Outer join i�lemini nas�l yapabilirim? - 4.24) Ayn� anda birden fazla veritaban�nda nas�l i�lem yapabilirim? - 4.25) Bir fonksiyondan nas�l �oklu sat�r ya da kolon d�nd�rebilirim? - 4.26) Neden Pl/PgSQL fonksiyonlar� i�inden g�venli bir �ekilde tablo - yaratma/kald�rma i�lemlerini yapam�yoruz? - 4.27) Hangi �ifreleme se�enekleri bulunmaktad�r? - - PostgreSQL �zelliklerini Geni�letmek - - 5.1) Kullan�c�-tan�ml� bir fonksiyon yazd�m. psql'de �al��t�rd���m - zaman neden core dump ediyor? - 5.2) PostgreSQL'e nas�l yeni veri tipleri/fonksiyonlar ekleyebilirim? - 5.3) Bir tuple d�nd�rmek i�in bir C fonksiyonunu nas�l yazar�m? - 5.4) Bir kaynak dosyas�nda de�i�iklik yapt�m. Yeniden derlememe ra�men - de�i�iklik ge�erli olmuyor. Neden? - _________________________________________________________________ - - Genel Sorular - - 1.1) PostgreSQL nedir? Nas�l okunur? - - PostgreSQL, Post-Gres-Q-L. olarak okunur - - PostgreSQL, yeni-nesil VTYS ara�t�rma prototipi olan POSTGRES - veritaban� y�netim sisteminin geli�tirilmesidir. POSTGRES'in zengin - veri tiplerini ve g��l� veri modelini tutarken, SQL'in geli�tirilmi� - alt k�mesi olan PostQuel dilini kullan�r. PostgreSQL �cretsizdir ve - kaynak kodu a��k da��t�l�r. - - PostgreSQL, PostgreSQL geli�tirme listesine �ye olan bir Internet - geli�tirici tak�m� taraf�ndan geli�tirilir. �u andaki koordinat�r, - Marc G. Fournier (scrappy@PostgreSQL.org). (Bu tak�ma nas�l - kat�lacag�n�z� ��renmek i�in 1.6 numaral� maddeyi okuyunuz.) Bu tak�m, - t�m PostgreSQL geli�iminden sorumludur. - - PostgreSQL 1.01 s�r�m�n�n yazarlar� Andrew Yu ve Jolly Chen idi. - Bunlar�n d���nda bir ka� kisi de uyarlama, hata ay�klama ve kodun - geli�tirilmesi i�in �al�sm��t�. PostgreSQL'in t�redi�i orijinal - Postgres kodu, lisans, lisans�st� ve akademisyenler taraf�ndan, - Professor Michael Stonebraker (University of California, Berkeley) - koordinat�rl�g�nde yaz�lm��t�r. - - Berkley'deki yaz�l�m�n ad� Postgres idi. SQL uyumlulu�u 1995'te - eklenince, ad� Postgres 95 oldu. 1996 y�l�n�n sonlar�nda ad� - PostgreSQL olarak de�i�tirildi. - - 1.2) PostgreSQL'in haklar� nedir? - - PostgreSQL Data Base Management System - - Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group - Portions Copyright (c) 1994-6 Regents of the University of California - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose, without fee, and without a written - agreement is hereby granted, provided that the above copyright notice - and this paragraph and the following two paragraphs appear in all - copies. - - IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY - FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, - INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND - ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN - ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, - INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE - PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF - CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, - UPDATES, ENHANCEMENTS, OR MODIFICATIONS. - - �stteki metin klasik a��k-kod lisans� olan BSD lisans�d�r. Kaynak - kodun nas�l kullan�labilece�ine dair s�n�rlamalar� yoktur. Bu lisans� - seviyoruz. De�i�tirme niyetimiz bulunmamaktad�r. - - 1.3) PostgreSQL, hangi Unix platforlar�nda �al���r? - - Genel olarak, modern bir Unix-uyumlu platform PostgreSQL'i - �al��t�racakt�r. Ayr�nt�l� bilgi i�in kurulum belgelerine - bakabilirsiniz. - - 1.4) Hangi Unix olmayan uyarlamalar� bulunmaktad�r? - - PostgreSQL 8.0 s�r�m� ile , PostgreSQL art�k Win2000, WinXP ve Win2003 - gibi Microsoft Windows NT tabanl� i�letim sistemlerinde do�al olarak - �al��maya ba�lam��t�r. Paketlenmi� bir kurulum program�, - http://pgfoundry.org/projects/pginstaller. adresinden indirilebilir. - - Ayr�ca, http://forge.novell.com adresinde Novell Netware 6 portu - bulunmaktad�r. - - 1.5) PostgreSQL'i nereden indirebilirim? - - PostgreSQL i�in ana anonim ftp sitesi ftp://ftp.PostgreSQL.org/pub - adresidir. Yans�lar i�in, ana web sayfam�za bakabilirsiniz. - - 1.6) Nereden destek alabilirim? - - Ana e-posta listesi : pgsql-general@PostgreSQL.org. PostgreSQL - konusundaki tart��malara a��kt�r. �ye olmak i�in, a�a��daki sat�rlar� - e-postan�z�n body k�sm�na (konu k�sm�na de�il) yaz�p, - pgsql-general-request@PostgreSQL.org adresine g�nderin: -subscribe -end - - Ayn� zamanda, bir digest listesi bulunmaktad�r. Bu listeye �ye olmak - i�in, pgsql-general-digest-request@PostgreSQL.org adresine, body - k�sm�nda -subscribe -end - - yazan bir e-posta atman�z yeterli olacakt�r. - - Digest postalar, ana liste 30k civar�nda e-postaya ula�t���nda �yelere - g�nderilmektedir. - - Bug'lar i�in bir e-posta listesi bulunmaktad�r. Bu listeye �ye olmak - i�in, pgsql-bugs-request@PostgreSQL.org adresine, body k�sm�nda -subscribe -end - - yazan bir e-posta atman�z yeterli olacakt�r. - - Ayn� zamanda, geli�tiriciler i�in tart��ma listesi bulunmaktad�r. Bu - listeye �ye olmak i�in, pgsql-hackers-request@PostgreSQL.org adresine, - body k�sm�nda -subscribe -end - - yazan bir e-posta atman�z yeterli olacakt�r. - - Bunun d���ndaki e-posta listelerine ve PostgreSQL hakk�nda bilgiye, - PostgreSQL WWW ana sayfas�ndan ulasabilirsiniz: - http://www.PostgreSQL.org - - Ayn� zamanda, EFNet �zerinde, #PostgreSQL adl� bir IRC kanal� - bulunmaktad�r. Bunun i�in, irc -c '#PostgreSQL' "$USER" - irc.phoenix.net Unix komutunu kullanabilirsiniz. - - Ticari destek veren firmalar�n listesine - - http://www.postgresql.org/users-lounge/commercial-support.html - - adresinden ula�bilirsiniz. - - 1.7) En son s�r�m nedir? - - PostgreSQL'in son s�r�m� 7.4.6'd�r. - - Her 6-8 ayda ana s�r�m ��kar�lmas� planlanmaktad�r. - - 1.8) Hangi belgelere ula�abilirim? - - Da��t�m�n i�inde, kitap��klar, kitap��k sayfalar� ve baz� k���k - �rnekler verilmektedir. /doc dizinine bak�n�z. Ayr�ca, bu el - kitap��klar�n� online olarak http://www.PostgreSQL.org/docs/ - adresinden inceleyebilirsiniz. - - http://www.PostgreSQL.org/docs/awbook.html ve - http://www.commandprompt.com/ppbook adreslerinde PostgreSQL kitaplar� - bulunmaktad�r. PostgreSQL kitablar�n�n listesine, - http://www.ca.PostgreSQL.org/books/ adresinden ula�aiblirsiniz. - Ayr�ca, PostgreSQL konusundaki teknik makalelere de - http://techdocs.PostgreSQL.org/ adresinden ula�abilirsiniz. - - psql'in, \d ile baslayan veri tipler, operatorler, fonksiyonlar, - aggregate'ler, vb. ile ilgili g�zel komutlar� vard�r. - - Web sitemiz daha fazla belgeyi i�ermektedir. - - 1.9) Bilinen hatalar ya da eksik �zelliklere nereden ula�abilirim? - - PostgreSQL SQL-92 uyumlulu�u i�indedir, standartlardan fazla da - �zellikleri bulunmaktad�r. Bilinen hatalar, eksik �zellikler ve - gelecek ile ilgili planlar i�in TODO listesine bak�n�z. - - 1.10) Nas�l SQL ��renebilirim? - - http:/www.PostgreSQL.org/docs/awbook.html adresindeki kitap SQL - �gretecektir. http://www.commandprompt.com/ppbook adresinde de bir - baska PostgreSQL kitab� bulunmaktad�r. - - http://www.intermedia.net/support/sql/sqltut.shtm, - http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM - http://sqlcourse.com ve http://sqlcourse2.com adreslerinde de g�zel - belgeler bulunmaktad�r. - - Bir ba�kas� da, http://members.tripod.com/er4ebus/sql/index.htm - adresinde bulunan "Teach Yourself SQL in 21 Days, Second Edition" - kitab�d�r. - - Baz� kullan�c�lar�m�z da �u kitab� �nermektedirler: "The Practical SQL - Handbook, Bowman, Judith S., et al.,Addison-Wesley". Baz�lar� ise "The - Complete Reference SQL, Groff et al., McGraw-Hill" kitab�n� - �nermektedirler. - - 1.11) PostgreSQL 2000 y�l�na uyumlu mudur? - - Evet. - - 1.12) Geli�tirme tak�m�na nas�l kat�labilirim? - - �ncelikle, en son kaynak kodunu indirin ve web sitemizdeki ya da - da��t�m�n i�indeki PostgreSQL Developer belgesini okuyun. Ard�ndan, - pgsql-hackers ve pgsql-patches listelerine �ye olun. ���nc� olarak da, - pgsql-pacthes listesine y�ksek kalitede yamalar g�nderin. - - PostgreSQL CVS ar�ivine eri�im izni olan, 10 kadar geli�tirici - bulunmaktad�r. Hepsi defalarca, di�er ki�ilerin yapt���ndan �ok daha - y�ksek-kaliteli yamalar g�ndermi�lerdir. Ayr�ca biz de bu - geli�tiricilerin ekledikleri yamalar�n y�ksek kalitede oldu�una - g�veniyoruz. - - 1.13) Bir hata raporunu nas�l g�nderebilirim? - - PostgreSQL BugTool sayfas�na gidiniz. O sayfada bir bug bildirmek i�in - neleri yapman�z gerekti�i anlat�lm��t�r. - - Ayr�ca, ftp://ftp.PostgreSQL.org/pub ftp adresimizde, yeni bir - PostgreSQL s�r�m� ya da yamas� olup olmad���ni kontrol ediniz. - - 1.14) PostgreSQL, diger DBMS'lerle nas�l kar��last�r�labilir? - - Bir yaz�l�m�n g�c�n� �l�mek i�in �e�itli yollar vard�r: Yaz�l�m�n - �zellikleri, ba�ar�m�, g�venilirli�i, deste�i ve �creti. - - �zellikler: - - PostgreSQL mevcut b�y�k ticari veritabanlar�n�n, transaction, - subselect, trigger, view, foreign key referential integrity ve - sophisticated locking gibi (user-defined types), rules, inheritance ve - lock cak��malar�n� d���rmek i�in multi-version uyumluluk �zellikleri - bulunmaktad�r. - - Performans (Ba�ar�m): - - PostgreSQL, di�er ticari ve a��k kaynak kodlu veritabanlar�yla yak�n - ba�ar�m� sa�lar. Baz� a��lardan daha h�zl�d�r, di�er a��lardan da - yava�t�r. MySQL ya da daha zay�f veritabanlar� ile - kar��la�t�r�ld���nda, INSERT/UPDATE i�lemlerinde, transaction bazl� - �al�st���m�z i�in daha yava��z. MySQL, yukar�daki "�zellikler" - k�sm�nda belirtilenlerden hi� birine sahip de�ildir. Biz, ba�ar�m�m�z� - her s�r�mde artt�rsak da, esneklik ve geli�mi� �zellikler i�in - yap�lanm�� durumday�z. PostgreSQL'i MySQL ile kar��la�t�ran �u web - sitesine bakabilirsiniz: http://openacs.org/why-not-mysql.html - - G�venilirlik: - - DBMS'lerin g�venilir olmas� gerketi�i, yoksa de�erleri olmayaca��n� - d���n�yoruz. �ok iyi test edilmi�, dengeli �al�san minimum say�da hata - i�eren kod sunmaya �al���yoruz. Her bir s�r�m en az 1 ayl�k beta - testlerinden ge�irilmektedir. S�r�m ge�mi�ine bakarsan�z, �retime - haz�r, dengeli ve kararl� kodlar sundu�umuzu g�rebilirsiniz. Bu - alanda, di�er veritaban� yaz�l�mlar�na �st�nl���m�z oldu�una - inanmaktay�z. - - Destek: - - E-posta listemiz, olu�an herhangi bir sorunu ��zebilecek b�y�k say�da - kullan�c� ve geli�tirici grubunu i�erir. Sorununuz i�in, en az bir - ticari veritaban� kadar rahat ��z�m bulabilirsiniz. Gelistiricilere, - kullan�c� grubuna, belgelere ve kaynak koda direk olarak eri�ebilme, - PostgreSQL deste�ini, di�er DBMS'lere g�re daha �nemli k�lar. - Gereksinimi olanlara, ticari destek verilebilir. (Destek i�in 1.6 - b�l�m�ne bak�n�z.) - - Fiyat: - - Ticari ve ticari olmayan t�m kullan�mlar�n�z i�in PostgreSQL - �cretsizdir. Kodumuzu, yukar�da belirtilen BSD-stili lisanstaki - s�n�rlamalar hari�, �r�n�n�z�n i�ine ekleyebilirsiniz. - - 1.15) PostgreSQL'e maddi a��dan nas�l destek olabilirim? - - PostgreSQL, 1996 y�l�ndan beri 1. s�n�f altyap�ya sahiptir. Bunun - i�in, y�llar boyu �al���p bu altyap�y� olu�turup y�neten Marc - Fournier'e te�ekk�rler. - - Bir a��k kaynak kodlu proje i�in, kaliteli altyap� �ok �nemlidir. Bu - altyap�, projenin kesilmesini �nler ve projenin ilerlemesini - h�zland�r�r. - - Tabii ki bu altyap� ucuz de�ildir. ��lerin y�r�mesi i�in �e�itli y�l�k - ve anl�k harcamalar�m�z olmaktad�r. E�er siz ya da �irketinizin bu - �abam�za ba���ta bulunabilecek paras� varsa, l�tfen - http://store.pgsql.com/ adresine gidiniz ve ba���ta, hibede bulununuz. - - Web sayfas�n�n 'PostgreSQL Inc.' den bahsetmesine ra�men, "katk�da - bulunanlar" (contributors) maddesi sadece PostgreSQL projesini - desteklemek i�indir ve belirli bir �irketin para kayna�� de�ildir. - isterseniz, ba�lant� adresine bir �ek g�nderebilirsiniz. - _________________________________________________________________ - - Kullan�c�/�stemci Sorular� - - 2.1) PostgreSQL icin ODBC s�r�c�leri var m�? - - iki tane ODBC s�r�c�s� bulunmaktad�r: PsqlODBC ve OpenLink ODBC. - - PsqlODBC'i - http://gborg.postgresql.org/project/psqlodbc/projdisplay.php - adresinden indirebilirsiniz. - - OpenLink ODBC http://www.openlinksw.com adresinden al�nabilir.Bu - s�r�c�, kendi standart ODBC istemci yaz�l�m� ile �al�st���ndan, - destekledikleri her platformda (Win, Mac, Unix, VMS) PostgreSQL ODBC - bulunmalidir. - - �cretsiz s�r�m� olmakla beraber, ticari kalitede destek almak - isteyenlere satmak isteyeceklerdir. Sorular�n�z� l�tfen - postgres95@openlink.co.uk adresine g�nderiniz. - - 2.2) PostgreSQL'i web sayfalar�nda kullanabilmek i�in hangi ara�lar - bulunmaktad�r? - - http://www.webreview.com/ adresinde, arka planda veritaban� �al�st�ran - Web sayfalar� i�in giri� seviyesinde bilgi bulunmaktad�r. - - Web ile b�t�nle�me i�in, PHP () m�kemmel bir arabirim sunar. - - Karma��k sorunlar i�in, �o�u kisi Perl arabirimini ve CGI.pm ya da - mod_perl kullan�r. - - 2.3) PostgreSQL'in grafik kullan�c� arabirimi var m�d�r? - - �e�itli grafik arabirimlerimiz bulunmaktad�r. Bunlar�n aras�nda, - PgAccess (http://www.pgaccess.org/), PgAdmin II - (http://www.pgadmin.org/, sadece Win32 i�in), RHDB Admin - (http://sources.redhat.com/rhdb/) ve Rekall - (http://www.thekompany.com/products/rekall/) bulunmaktad�r. Ayr�ca, - PostgreSQL i�in web tabanl� bir arabirim olan PHPPgAdmin - (http://phppgadmin.sourceforge.net/) bulunmaktad�r. - - Daha ayr�nt�l� liste i�in - http://techdocs.postgresql.org/guides/GUITools adresine - bakabilirsiniz. - - 2.4) PostgreSQL ile ileti�imi kurabilmek i�in hangi dilleri kullanabilirim? - - * C (libpq) - * Embedded C (ecpg) - * Java (jdbc) - * Python (PyGreSQL) - * TCL (libpgtcl) - - Di�erleri i�in, http://gborg.postgresql.org adresindeki - Drivers/Interfaces b�l�m�ne bakabilirsiniz. - _________________________________________________________________ - - Y�netimsel Sorular - - 3.1) PostgreSQL'i, /usr/local/pgsql dizininden ba�ka dizinlere nas�l - kurabilirim? - - configure beti�ini �al�st�r�rken, --prefix se�ene�ini veriniz. - - 3.2) postmaster'i baslatt�g�mda, a Bad System Call ya da core dumped mesaj� - al�yorum. Neden? - - Bunun bir�ok nedeni olabilir. Ancak ilk kontrol edilmesi gereken sey, - �ekirdeginize System V uzant�lar�n�n kurulu olup olmad�g�n� kontrol - etmek olabilir. PostgreSQL shared memory ve semaphores i�in �ekirdek - destegine gereksinim duyar. - - 3.3) postmaster'i ba�latt���mda, �pcMemoryCreate hatas� al�yorum. Neden? - - Ya �ekirde�inizde shared memory deste�iniz d�zg�nce - yap�land�r�lmam��t�r, ya da �ekirde�inizdeki mevcut shared memory - miktar�n� b�y�tmeniz gerekecektir. Gereksinim duyaca��n�z miktar, - mimarinize ve postmaster i�in ayarlad�g�n�z tampon ile backend i�lemi - say�s�na ba�l�d�r. T�m sistemler i�in, tamponlar ve i�lemlerde - �ntan�ml� say�larla, ~ 1MB kadar yere gereksinmeniz olacakt�r. - PostgreSQL 7.3.2 Sistem Y�neticileri Rehberi'ne, shared memory ve - semaphorelar hakk�ndaki ayr�nt�l� bilgi i�in bakabilirsiniz. - - 3.4) postmaster'� ba�latt���mda, �pcSemaphoreCreate hatas� al�yorum. Neden? - - E�er hata, "�pcSemaphoreCreate: semget failed (No space left on - device)" ise, �ekirde�iniz yeterli semaphore ile yap�land�r�lmam�� - demektir. Postgres, her bir potansiyel backend i�in bir semaphore - gereksinimi duyar. Ge�ici bir ��z�m, postmaster� backend i�lemleri - i�in daha az miktarda s�n�rla ba�latmak olabilir. -N'i varsay�lan - de�er olan 32'den k���k bir de�erle ba�lat�n�z. Daha kal�c� bir ��z�m, - �ekirde�inizin SEMMNS ve SEMMNI parametrelerini y�kseltmek olacakt�r. - - �al��mayan semaphore'lar a��r veritaban� i�lemlerinde ��kme - yaratabilirler. - - E�er hata mesaj�n�z ba�ka bir �ey ise, �ekirde�inizde semaphore - deste�ini yap�land�rmam�� olabilirsiniz. Shared memory ve - semaphore'lar hakk�ndaki daha ayr�nt�l� bilgi i�in PostgreSQL 7.3.2 - Sistem Y�neticileri Rehberi'ne bakabilirsiniz. - - 3.5) Diger bilgisayarlar�n benim PostgreSQL veritaban� sunucuma - ba�lant�lar�n� nas�l kontrol edebilirim? - - �n tan�ml� olarak, PostgreSQL sadece yerel makineden Unix domain - sockets kullanarak ba�lan�lmas�na izin verir. Diger makineler, - postmaster'a -i etiketini ge�irmezseniz ve $PGDATA/pg_hba.conf - dosyas�n� d�zenleyerek host-based authentication'a olanak vermezseniz, - ba�lant� yapamayacaklard�r. - - 3.6) Veritabani motorunu daha iyi ba�ar�m i�in nas�l ayarlayabilirim? - - Index'ler sorgular� h�zland�rabilir. EXPLAIN komutu, PostgreSQL'in - sorgunuzu nas�l yorumlad���n� ve hangi index'leri kulland���n� - g�rmenize izin verir. - - E�er cok fazla INSERT i�lemi yap�yorsan�z, bunlar� b�y�k bir toplu - i�lem dosyas�kullan�p COPY komutu ile veritaban�na girmeyi deneyiniz. - Bu, tekil INSERT'lerden daha h�zl�d�r. �kinci olarak, BEGIN - WORK/COMMIT transaction blo�u i�inde olmayan ifadeler kendi - transaction'lar�ndaym�� gibi d���n�l�r. �oklu ifadeleri tek bir - transaction blo�u i�inde yapabilirsiniz. Bu, transaction overhead'ini - d���recektir. Tek bir transaction blo�u i�inde birden �ok ifadeyi - �al��t�rmay� deneyebilirsiniz. Bu da ayn� �ekilde, transaction - overhead'ini d���r�r. - - �e�itli ayarlama se�enekleri mevcuttur. fsync() i�lemini, postmaster'� - -o -F se�ene�i ile ba�latarak devre d��� b�rakabilirsiniz. Bu i�lem, - fsync()'lerin her transactiondan sonra diski flush etmesini - engelleyecektir. - - Ayn� zamanda, postmaster'i -B se�ene�i ile ba�lat�p, backend i�lemleri - taraf�ndan kullan�lan shared memory buffers say�lar�n� - artt�rabilirsiniz. E�er bu parametreyi �ok y�ksek tutarsan�z, - �ekirde�inizin shared memory b�lgesindeki limiti a�ma olas�l���n�z - y�z�nden postmaster ba�layamayabilir. Her bir tampon (buffer) 8K'd�r. - �ntan�ml� say� ise 64 tampondur. - - Ayn� �ekilde, backend'in -S se�ene�ini ge�ici s�ralamalar i�in backend - s�re�leri taraf�ndan kullan�lacak haf�zay� artt�rmak amac�yla - kullanabilirsiniz. -S se�ene�i kilobayt cinsinden de�er al�r ve �n - tan�ml� de�eri 512'dir (512 K) - - Tablolardaki veriyi bir index'e e�lemek amac�yla gruplama i�in CLUSTER - komutunu kullanabilirsiniz. Ayr�nt�l� bilgi i�in CLUSTER komutunun - yard�m sayfas�na bakabilirsiniz. - - 3.7) Hangi hata ay�klama �zellikleri bulunmaktad�r? - - PostgreSQL, hata ay�klama amac�yla kullan�labilecek durum bilgisi - rapor eden �e�itli �zeliklere sahiptir. - - �ncelikle, configure beti�ini --enable-cassert se�ene�iyle - �al��t�r�rsan�z, bir �ok assert() backend cal��mas�n� g�zlemler ve - beklenmeyen bir durumda program� durdurur. - - Postmaster ve postgres �e�itli hata ay�klama se�eneklerine sahiptir. - �ncelikle, postmaster'� ba�latt���n�zda, standart ��kt�y� ve hatalar� - bir log dosyas�na y�nlendirdi�inize emin olun: -cd /usr/local/pgsql -./bin/postmaster >server.log 2>&1 & - - Bu i�lem PostgreSQL ana dizinine server.log dosyas� yerle�tirecektir. - Bu dosya sunucunun ya�ad��� sorunlar ya da hatalar hakk�nda yararl� - bilgiler i�erir. -d se�ene�i, hata ay�klama seviyesini belirten bir - rakam ile kullan�l�r. Y�ksek hata ay�klama seviyelerinin b�y�k log - dosyalar� olu�turaca��n� unutmay�n�z. - - E�er postmaster �al��m�yorsa, postgres backend'ini komut sat�r�ndan - �al��t�rabilir ve SQL ifadenizi direk olarak yazabilirsiniz. Bu sadece - hata ay�klama amac�yla �nerilir. Burada, noktal� virg�l�n de�il de - yeni bir sat�r�n sorguyu sonland�rd���n� unutmay�n�z. E�er hata - ay�klama sembolleri ile derlediyseniz, ne oldu�unu g�rmek i�in bir - hata ay�klay�c� kullanabilirsiniz. backend postmaster'dan - ba�lat�lmad���ndan, e�de�er bir ortamda �al��mamaktad�r ve - locking/backend etkile�im sorunlar� artabilir. - - E�er postmaster �al���yorsa, bir pencerede psql'i �al��t�r�n ve psql - taraf�ndan kullan�lan postgres s�recinin s�re� numaras�n� (PID) bulun. - Postgres s�reci ile ili�kilendirmek i�in bir hata ay�klar�c� kullan�n. - Sorgular� psql arac�l��� ile �al��t�rabilirsiniz. E�er postgres - ba�lang�c�nda hata ay�klamak istiyorsan�z, PGOPTIONS="-W n" se�ene�ini - ayarlayabilir ve psql'i ba�latabilirsiniz. Bu i�lem, ba�lang�c�n n - saniye kadar gecikmesini sa�layacakt�r; b�ylece hata ay�klay�c�y� - s�rece ili�kilendirdikten sonra ba�lang�� s�recinin devam etmesini - sa�layabilirsiniz. - - postgres program� hata ay�klama ve ba�ar�m �l��mleri i�in -s, -A ve -t - se�eneklerine sahiptir. - - 3.8) Ba�lanmaya �al���rken, neden "Sorry, too many clients" hatas�n� - al�yorum? - - Postmaster'�n e�zamanl� olarak ba�latabilece�i backend s�re�leri - s�n�rlar�n� artt�rman�z gerekmektedir. - - �n tan�ml� de�er 32 s�re�tir. Bunu, postmaster'� uygun -N de�eri ile - ya da postgresql.conf dosyas�n� d�zenleyerek yeniden ba�latmakla - artt�rabilirsiniz. - - E�er -N de�erini 32'den b�y�k yapacaksan�z, ayn� zamanda -B de�erini - de de�i�tirmeniz gerekti�ini unutmay�n. -B, -N'nin en az 2 kat� kadar - olmal�d�r; daha iyi ba�ar�m i�in bu say�y� daha da artt�rmal�s�n�z. - Y�ksek say�daki backend s�re�leri i�in, �e�itli �ekirdek yap�land�rma - parametrelerini artt�rman�z gerekecektir. Yap�lmas� gerekenler, - SHMMAX, SEMMNS, SEMMNI, NPROC, MAXUPRC ve a��labilecek dosyalar�n - maksimum say�s� olan NFILE ve NINODE de�erlerini kar��t�rmakt�r. Bunun - nedeni, PostgreSQL'in izin verilen backend s�re�lerinin say�s� - �zerinde bir s�n�r� olmas�d�r. B�ylelikle sistem kaynaklar�n�n d���na - ��k�lmayacakt�r. - - PostgreSQL'in 6.5 s�r�m�ne kadar, en fazla backend say�s� 64 idi ve - bunu de�i�tirmek i�in include/storage/sinvaladt.h dosyas� i�indeki - MaxBAckendid sabitini de�i�tirdek sonra yaz�l�m� yeniden derlemek - gerekiyordu. - - 3.9) pgsql_tmp dizinin i�indeki dosyalar nelerdir? - - Sorgu �al�st�r�c� (query executer) taraf�ndan yarat�lan ge�ici - dosyalard�r. �rnegin, bir s�ralama ORDER BY ile yap�lacaksa ve - s�ralama backend'in -s parametresinin izin verdi�inden daha fazla - alana gereksinim duyuyorsa, ekstra veriyi tutmak i�in ge�ici dosyalar - yarat�l�r. - - Ge�ici dosyalar, e�er s�ralama s�ras�nda backend g��mezse otomatik - olarak silinecektir. E�er �al��an durumda bir backend'iniz yoksa, - pg_tempNNN.NN dosyalar�n� silmeniz g�venlidir. - - 3.10) PostgreSQL s�r�mlerini y�kseltmek i�in neden bir dump/reload i�lemi - ger�ekle�tirmek zorunday�m? - - PostgreSQL tak�m� ara s�r�mlerde sadece k���k de�i�iklikler - yapmaktad�r; bu y�zden 7.2 s�r�m�nden 7.2.1'e y�kseltmek dump/restore - i�lemi gerekmemektedir. Ancak, esas s�r�mlerde (�rnek: 7.2'den 7.3'e) - �o�unlukla sistem tablolar�n�n ve veri dosyalar�n�n i� yap�s� - de�i�tirilir. Bu de�i�iklikler �o�unlukla karma��kt�r; dolay�s�yla - veri dosyalar�n�n geriye d�n�k uyumlulu�u i�lemlerini yapm�yoruz. Dump - i�lemi, veriyi genel bi�imde alaca��ndan yeniden y�kleme esnas�nda - veri, yeni i� bi�ime uygun �ekilde yerle�tirilecektir. - - Disk bi�iminin de�i�medi�i s�r�mlerde, pg_upgrade beti�i g�ncellemenin - bir dump/restore gerektirmeden yap�lmas�n� sa�layacakt�r. pg_upgrade - beti�inin o s�r�m i�in bulunup bulunmad���n� s�r�m notlar� i�inde - bulabilirsiniz. - - 3.11) Nas�l bir donan�m kullanmal�y�m? - - PC donan�m� tamamen uyumlu oldu�u i�in, insanlar t�m PC donan�mlar�n�n - ayn� kalitede oldu�unu d���n�rler. Oysa b�yle de�ildir. ECC RAM, SCSI - ve kaliteli anakartlar daha ucuz donan�mlara g�re daha �ok - g�venilirlerdir ve ba�ar�mlar� daha y�ksektir. PostgreSQL hemen hemen - t�m donan�mda �al��abilmektedir, ancak g�venilirlik ve ba�ar�m �nemli - ise donan�m se�eneklerini �ok iyi ara�t�rmak gereklidir. E-posta - listelerimi donan�mlarla ilgili sorular ve de ticaret i�in - kullan�labilir. - _________________________________________________________________ - - ��letimsel Sorular - - 4.1) Binary cursor ve normal cursor aras�ndaki fark nedir? - - DECLARE yard�m sayfas�na bak�n�z. - - 4.2) Sorgunun sadece ilk birka� sat�r�n� nas�l SELECT edebilirim? - - FETCH yard�m sayfas�na bak�n�z, ya da SELECT ... LIMIT ... kullan�n�z. - - �lk birka� sat�r� almak isteseniz bile, t�m sorgu de�erlendirilmek - durumunda kal�nabilir. ORDER BY i�eren bir sorgu d���n�n. E�er ORDER - BY i�e e�le�en bir index varsa, PostgreSQL istenen ilk birka� sat�r� - i�leyebilir, ya da t�m sorgu istenen sat�rlar �retilene kadar - i�lenebilir. - - 4.3) psql'in i�inde g�rd�g�m tablolar�n ya da di�er �eylerin listesini - nas�l alabilirim? - - pgsql/src/bin/psql/describe.c i�indeki psql kaynak kodunu - okuyabilirsiniz. Bu kod, psql'in \ ile ba�layan komutlar�n�n ��kt�s�n� - olusturan SQL komutlar�n� i�erir. Ayn� zamanda, psql'i -E se�ene�i ile - ba�lat�p, verdi�iniz komutlar� �al��t�rmak i�in yapt��� sorgular�n - ��kt�lar�n� g�rebilirsiniz. - - 4.4) Bir tablodan bir kolonu nas�l kald�rabilirim? - - Bu �zellik (ALTER TABLE DROP COLUMN) 7.3 s�r�m� ile gelmi�tir. Eski - s�r�mlerde a�a��dakileri uygulamal�s�n�z: -BEGIN; -LOCK TABLE old_table; -SELECT ... -- select all columns but the one you want to remove -INTO TABLE new_table -FROM old_table; -DROP TABLE old_table; -ALTER TABLE new_table RENAME TO old_table; -COMMIT; - - 4.5) Bir sat�r, tablo ve veritaban� i�in en fazla b�y�kl�k nedir? - - S�n�rlar: - - Veritaban� i�in en fazla b�y�kl�k nedir? - S�n�rs�z (32 TB'l�k veritaban� bulunmaktad�r) - Bir tablo i�in en fazla b�y�kl�k nedir? - 32 TB - Bir sat�r i�in en fazla b�y�kl�k nedir? - 1.6 TB - Bir alan i�in en fazla b�y�kl�k nedir? - 1 GB - Tabloda en fazla sat�r say�s� ka�t�r? - S�n�rs�z - Bir tabloda olabilecek en fazla kolon say�s� ka�t�r? - Kolon tiplerine ba�l� olarak 250-1600 - Bir tabloda olabilecek en fazla index say�s� ka�t�r? - S�n�rs�z - - Tabii ki bunlar asl�nda s�n�rs�z degildir. Burada belirtilen s�n�rlar, - fiziksel s�n�rlar�n haricindeki s�n�rlard�r. Bo� disk alan�, - haf�za/takas alan� na ba�l� s�n�rlamalar vard�r. Ba�ar�m, s�n�r - de�erlere yakla�t�k�a, ya da de�erler �ok b�y�k oldu�unda d��ebilir. - - Bir tablo i�in b�y�kl�k s�n�r� olan 32 TB, i�letim sisteminin b�y�k - dosya deste�i olup olmamas�ndan ba��ms�zd�r. B�y�k tablolar, 1 GB'lik - dosyalarda sakland��� i�in, dosya sistemi s�n�rlar�nin bir �nemi - yoktur. - - Tablo ve kolon say�s� b�y�kl�kleri, �n tan�ml� blok b�y�kl��� 32k ya - ��kar�larak artt�r�labilir. - - 4.6) Tipik bir metin dosyas�ndaki veriyi saklamak i�in ne kadar disk alan� - gereklidir? - - Bir PostgreSQL veritaban�, veriyi "flat" metin dosyas�nda saklamak - i�in gereken alan�n 5 kat fazla disk alan�na gereksinim duyabilir. - - Her sat�r�nda bir tamsay� ve metin (text) i�eren, 100.000 sat�rl�k bir - dosya d���n�n. Her sat�r�n ortalama 20 byte oldu�unu farzedelim. Metin - dosyas� 2.8 MB olacakt�r. Bu veriyi tutan PostgreSQL veritaban� - yakla��k 6.4 MB yer kaplayacakt�r. - 36 byte: Her bir sat�r ba�l��� (yakla��k) -+ 24 byte: Bir tamsay� (int) alan� ve bir metin (text) alan� -+ 4 byte: Sayfada tuple a pointer ----------------------------------------- - 64 byte -> kay�t ba��na - - PostgreSQL'de veri sayfas� (data page) b�y�kl��� 8192 byte (8k)d�r, - dolay�s�yla: -8192 byte -> page ba��na -------------------------- = Her bir veritaban� page'� ba��na 128 sat�r (yakla��k) - Sat�r ba��na 64 byte - -100000 veri sat�r� --------------------- = 782 veritaban� sayfas� - 128 sat�r - - 782 veritaban� sayfas� * sayfa ba��na 8192 byte = 6,406,144 bytes (6.4 - MB) - - Index'ler �ok fazla yere gereksinim duymazlar, ama index'lenmi� veriyi - tutacaklar�ndan b�y�k olabilirler. - - NULL de�erler bitmapler i�inde tutulur; dolay�s�yla �ok az yer - kaplarlar. - - 4.7) Veritaban�nda hangi tablo ya da index'lerin tan�mland���n� nas�l - g�rebilirim? - - psql, bu t�r bilgileri g�stermek i�in, \ ile ba�layan bir �ok komut - sunmaktad�r. \? komutu ile bu komutlar� g�rebilirsiniz. Ayr�ca, - bunlar� a��klayan ve pg_ ile ba�layan �ok say�da sistem tablosu - bulunmaktad�r. Ayn� zamanda, psql -l ile t�m veritabanlar�n� - listeyelebirsiniz. - - Ayr�ca, pgsql/src/tutorial/syscat.source kodunu inceleyebilirsiniz. Bu - dosya, veritaban� sistem dosyalar�ndan bilgiyi almak i�in gereksinim - duyulan bir �ok SELECT'leri g�sterir. - - 4.8) Sorgular�m cok yava�, ya da index'lerimi kullanm�yorlar. Neden? - - Indexler her sorgu taraf�ndan otomatik olarak kullan�lmazlar. Indexler - e�er bir tablonun b�y�kl��� minimum bir b�y�kl�kten fazla ise ve sorgu - tablodaki sat�rlar�n sadece k���k bir y�zdesini se�iyorsa kullan�l�r. - Bunun nedeni, index eri�iminin neden oldu�u raslansal disk eri�imi nin - diskin ya da tablonun s�ral� okunmas�ndan daha yavas olabilmesidir. - - Bir index'in kullan�l�p kullan�lmayaca��n� belirlemek i�in, PostgreSQL - tablo hakk�ndaki istatistiklere gereksinmesi vard�r. Bu istatistikler, - VACUUM ANALYZE kullan�larak toplan�rlar. Optimizer, istatistikleri - kullanarak, tabloda ka� sat�r oldu�unu ve bilir ve indexin kullan�l�p - kullan�lmayaca��na daha iyi karar verir. Istatistikler, ayn� zamanda - en uygun join s�ras�n� ve y�ntemini belirlemekte �ok �nemlidir. - �statistik toplanmas�, tablo i�erikleri de�i�tik�e periyodik olarak - yap�lmal�d�r. - - Indexler normalde ORDER BY sorgular� ya da join i�lemlerini - ger�ekle�tirmek i�in kullan�lmazlar. A��k bir s�ralamay� takip eden - s�ral� bir arama (sequential scan), b�y�k bir tabloda index aramas� - yapmaktan genelde daha h�zl�d�r. - Ancak, ORDER BY ile birle�mi� LIMIT genellikle bir index - kullanacakt�r; ��nk� tablonun sadece belirli bir miktar� - d�nd�r�lecektir. Asl�nda, MAX() ve MIN() fonksiyonlar�n�n index - kullanmamalar�ndan dolay�, bu gibi de�erleri ORDER BY ve LIMIT - kullanarak da almak olas�d�r: - SELECT col - FROM tab - ORDER BY col [ DESC ] - LIMIT 1; - - E�er optimizer'�n s�ral� arama yapmas�n�n yanl�� oldu�una - inan�yorsan�z, SET enable_seqscan TO 'off' kullan�n ve index kullanan - aramalar�n hala daha h�zl� olup olmad���n� g�r�n. - - LIKE ya da ~ gibi operat�rler kullan�yorsan�z, index'ler sadece - a�a��daki ko�ullarda kullan�labilir: - * Arama dizininin ba��, dizinin ba�� ile ba�lanmal�d�r. Yani, - + LIKE sorgular� % ile ba�lamamal�d�r. - + D�zenli ifade sorgular� ^ i�e ba�lamamal�d�r. - * Arama metni bir karakter s�n�f� ile ba�layamaz. �rnek: [a-e] - * ILIKE ve ~* gibi b�y�k/k���k harfe duyars�z aramalar index'lerden - yararlanmazlar. Onun yerine, b�l�m 4.12'de anlat�lan fonksiyonel - index'leri kullanabilirsiniz. - * initdb s�ras�nda �ntan�ml� C locale'i kullan�lmal�d�r. - - 4.9) query-optimizer'�n sorgular�m� nas�l de�erlendirdi�ini, i�leme - soktu�unu nas�l g�rebilirim? - - EXPLAIN yard�m sayfas�na bak�n�z. - - 4.10) R-tree index nedir? - - R-tree index, uzaysal (spatial) verileri indexlemek i�in kullan�l�r. - Bir hash index, dizi aramalar�nda (range search) kullan�lamaz. B-tree - index dizi aramalar�nda sadece tek boyutlu �al��maktad�r. R-tree, �ok - boyutlu veriyi destekler. �rne�in, e�er bir R-tree index point veri - tipi �zerinde in�a edililebilirse, sistem "select all points within a - bounding rectangle" gibi sorgulara daha verimli yan�tlar verecektir. - - Orijinal R-tree tasar�m�n� a��klayan belge: - - Guttman, A. "R-trees: A Dynamic Index Structure for Spatial - Searching." Proceedings of the 1984 ACM SIGMOD Int'l Conf on Mgmt of - Data, 45-57. - - Bu belgeyi, Stonebraker'�n "Readings in Database Systems" kitab�nda - bulabilirsiniz. - - G�m�l� R-tree indexleri poligon ve boxlar� kullanabilir. Teorik - olarak, R-tree indexlerin �zelliklerini geni�letmek bir miktar �aba - gerektirir ve bunun nas�l yap�laca��na dair bir belgemiz hen�z - bulunmamaktad�r. - - 4.11) Genetic Query Optimizer nedir? - - GEQO mod�l�, Genetic Algorithm(GA) kullan�larak tablolar - birle�tirildi�inde sorgu optimizasyonunu h�zland�r�r. - - 4.12) D�zenli ifade (Regular Expression) aramalar�n� ve b�y�k/k���k harfe - duyars�z aramalar� nas�l yapabilirim? Bu b�y�k(k���k harfe duyarl� aramalar - i�in index'i nas�l kullanabilirim? - - ~ operat�r� d�zenli ifade e�le�mesi ve ~* b�y�k/k���k harfe duyars�z - d�zenli ifade e�le�mesi yapar. B�y�k/k���k harfe duyarl� olan LIKE'�n - b�y�k/k���k harfe duyars�z olan bi�imi ILIKE't�r ve PostgreSQL 7.1 - s�r�m� ile birlikte gelmi�tir. - - B�y�k-k���k harfe duyars�z e�itlik kar��la�t�rmalar� a�a��daki gibi - ifade edilir: -SELECT * -FROM tab -WHERE lower(col) = 'abc' - - Bu standart bir index yaratmayacakt�r. Ancak e�er fonksiyonel bir - index yarat�rsan�z; o kullan�lacakt�r: -CREATE INDEX tabindex on tab (lower(col)); - - 4.13) Bir sorguda, bir alanin "NULL" oldu�unu nas�l ortaya ��karabilirim? - - Kolonu, IS NULL ve IS NOT NULL ile test edebilirsiniz. - - 4.14) �esitli karakter tipleri aras�ndaki farklar nelerdir? - -Veri Tipi �� Ad� Not --------------------------------------------------- -VARCHAR(n) varchar boyut en b�y�k uzunlu�u verir; sadece verilen kadar veri tutulur. -CHAR(n) bpchar belirtilen uzunlu�a kadar sonuna bo�luk eklenir. -TEXT text uzunlukta herhangi bir �st s�n�r yoktur. -BYTEA bytea variable-length byte array (null-byte safe) -"char" char bir karakter - - �� adlar� (internal name) sistem kataloglar�n� ve baz� hata - mesajlar�n� incelerken g�receksiniz. - - �lk d�rt veri tipi "varlena" tipidir (yani, diskteki ilk 4 bayt - uzunluktur; devam� da veridir.) Dolay�s�yla, kullan�lan ger�ek alan, - belirtilen alandan biraz daha b�y�kt�r. Ancak, bu veri tipleri, - s�k��t�r�lmaya tabi tutulabilir; dolay�s�yla disk alan� beklenilenden - k���k olabilir. VARCHAR(n) b�y�kl��� artabilen ama en b�y�k uzunlu�u - s�n�rl� olan verileri saklamak i�in en uygun y�ntemdir. TEXT, 1 GB - b�y�kl��e kadar olan verileri tutmak i�in kullan�l�r. - - CHAR(n), ayn� uzunluktaki dizilerin saklanmas� i�in kullan�m�r. - CHAR(n) belirtilen uzunlu�a kadar bo�luk ile doldurur; ancak - VARCHAR(n) sadece verilen karakterleri saklar. BYTEA binary veri - saklamak i�indir; ayr�ca "NULL" bayt i�eren de�erleri de saklar. - Burada anlat�lan �� veri tipi de benzer ba�ar�m karakteristiklere - sahiptir. - - 4.15.1) Nas�l serial/otomatik artan (auto-incrementing) bir alan - yaratabilirim? - - PostgreSQL'de SERIAL veri tipi vard�r. Bu veri tipi bir sequence ve - kolon �zerinde bir index yarat�r. - - �rnek, a�a��daki sorgu: -CREATE TABLE person ( - id SERIAL, - name TEXT -); - - buna �evrilir: -CREATE SEQUENCE person_id_seq; -CREATE TABLE person ( - id INT4 NOT NULL DEFAULT nextval('person_id_seq'), - name TEXT -); -CREATE UNIQUE INDEX person_id_key ON person ( id ); - - Sequenceler hakk�nda daha fazla bilgi i�in create_sequence yard�m - sayfas�na bakabilirsiniz. Her sat�r�n OID alan�n� tekil bir say� - olarak alabilirsiniz. Ancak, veritaban�n�z�n dump'�n� al�p yeniden - y�klerseniz, OID de�erlerini koruyabilmek i�in pg_dump'�n -o - parametresini ya da "COPY WITH OIDS" se�ene�ini kullanman�z - gerekecektir. - - 4.15.2) SERIAL giri�inin degerini nas�l alabilirim? - - Bir yakla��m, sequence nesnesindeki SERIAL de�erini, veriyi girmeden - �nce nextval() ile al�p, ald���n�z de�eri kendinizin girmesidir. - 4.15.1'deki �rnek tabloyu kullanarak bir �rnek verelim: -new_id = execute("SELECT nextval('person_id_seq')"); - - execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')"); - - Di�er sorgular i�in new_id'de yeni de�erin saklanmas� gerekir. - Otomatik olarak yarat�lan SEQUENE nesnesinin ad�, <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 159553873a..0000000000 --- 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 35e7c051e0..0000000000 --- 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 db0a0c306a..0000000000 --- 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 9a56180a08..0000000000 --- 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 39c26974e5..0000000000 --- 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 b304095b75..0000000000 --- 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 12f33422e2..0000000000 --- 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 bd3f868956..0000000000 --- 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 af03d0cbbc..0000000000 --- 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 9aa6b7e805..0000000000 --- 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> 上記の型のうち最初の4つの型は "varlena" 型です(すなわち、ディス - クの最初の4バイトがデータ長で、それの後に実際のデータが続きます)。 - このように実際の空間は宣言された大きさよりも少し大きくなります。しか - し、長い値は圧縮されるので、ディスク上の空間は思ったよりも小さくなります。</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 f0364198d3..0000000000 --- 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 e92ce71c06..0000000000 --- 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 6327029c75..0000000000 --- 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 c3e78e0b31..0000000000 --- a/doc/src/FAQ/README +++ /dev/null @@ -1,4 +0,0 @@ -The FAQ* files in this directory are the master versions, and the -../../FAQ* text files are created using lynx: - - lynx -force_html -dont_wrap_pre -dump -hiddenlinks=ignore -nolist FAQ*