diff options
author | Peter Eisentraut <peter_e@gmx.net> | 2009-07-21 19:20:33 +0000 |
---|---|---|
committer | Peter Eisentraut <peter_e@gmx.net> | 2009-07-21 19:20:33 +0000 |
commit | f3f45c87d23b800913fb8ea88fe2d713f6b9dd74 (patch) | |
tree | fc823ac6d3faebdf23dd8bb4fff7c35a4ab6a136 | |
parent | f7ad9cab30aad86d60c5826cceeb7a6be4298cc8 (diff) | |
download | postgresql-f3f45c87d23b800913fb8ea88fe2d713f6b9dd74.tar.gz postgresql-f3f45c87d23b800913fb8ea88fe2d713f6b9dd74.zip |
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
-rw-r--r-- | doc/FAQ_brazilian | 922 | ||||
-rw-r--r-- | doc/FAQ_chinese_simp | 801 | ||||
-rw-r--r-- | doc/FAQ_chinese_trad | 793 | ||||
-rw-r--r-- | doc/FAQ_czech | 849 | ||||
-rw-r--r-- | doc/FAQ_farsi | 1256 | ||||
-rw-r--r-- | doc/FAQ_french | 1289 | ||||
-rw-r--r-- | doc/FAQ_german | 978 | ||||
-rw-r--r-- | doc/FAQ_hungarian | 1234 | ||||
-rw-r--r-- | doc/FAQ_japanese | 1126 | ||||
-rw-r--r-- | doc/FAQ_polish | 1279 | ||||
-rw-r--r-- | doc/FAQ_russian | 988 | ||||
-rw-r--r-- | doc/FAQ_turkish | 1192 | ||||
-rw-r--r-- | doc/src/FAQ/FAQ_MINGW.html | 82 | ||||
-rw-r--r-- | doc/src/FAQ/FAQ_brazilian.html | 942 | ||||
-rw-r--r-- | doc/src/FAQ/FAQ_chinese_simp.html | 1011 | ||||
-rw-r--r-- | doc/src/FAQ/FAQ_chinese_trad.html | 1003 | ||||
-rw-r--r-- | doc/src/FAQ/FAQ_czech.html | 645 | ||||
-rw-r--r-- | doc/src/FAQ/FAQ_farsi.html | 1533 | ||||
-rw-r--r-- | doc/src/FAQ/FAQ_french.html | 1466 | ||||
-rw-r--r-- | doc/src/FAQ/FAQ_german.html | 1067 | ||||
-rw-r--r-- | doc/src/FAQ/FAQ_hungarian.html | 1668 | ||||
-rw-r--r-- | doc/src/FAQ/FAQ_japanese.html | 1399 | ||||
-rw-r--r-- | doc/src/FAQ/FAQ_polish.html | 1572 | ||||
-rw-r--r-- | doc/src/FAQ/FAQ_russian.html | 1197 | ||||
-rw-r--r-- | doc/src/FAQ/FAQ_turkish.html | 1019 | ||||
-rw-r--r-- | doc/src/FAQ/README | 4 |
26 files changed, 0 insertions, 27315 deletions
diff --git a/doc/FAQ_brazilian b/doc/FAQ_brazilian deleted file mode 100644 index 16d47428b3c..00000000000 --- a/doc/FAQ_brazilian +++ /dev/null @@ -1,922 +0,0 @@ - - Perguntas Frequentes (FAQ) sobre PostgreSQL - - ltima atualizao: 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 verso 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 especficas so 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 licena do PostgreSQL? - 1.4) Quais plataformas o PostgreSQL pode ser executado? - 1.5) Onde eu posso conseguir o PostgreSQL? - 1.6) Qual a ltima verso? - 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 so os bugs conhecidos ou - caractersticas ausentes? - 1.10) Que documentao est disponvel? - 1.11) Como eu posso aprender SQL? - 1.12) Como posso submeter uma correo (patch) ou me juntar a equipe - de desenvolvimento? - 1.13) Como o PostgreSQL comparado a outros SGBDs? - 1.14) O PostgreSQL gerenciar as mudanas de horrio devido ao horrio - de vero em vrios pases? - - Perguntas sobre Clientes - - 2.1) Quais interfaces esto disponveis para PostgreSQL? - 2.2) Quais ferramentas esto disponveis para utilizar o PostgreSQL - com pginas Web? - 2.3) O PostgreSQL tem interfaces grficas para interagir com usurio? - - Perguntas Administrativas - - 3.1) Como eu instalo o PostgreSQL em um local diferente de - /usr/local/pgsql? - 3.2) Como eu controlo conexes de outras mquinas? - 3.3) Como eu ajusto o servidor de banco de dados para obter uma - performance melhor? - 3.4) Quais caractersticas de depurao esto disponveis? - 3.5) Por que eu recebo "Sorry, too many clients" quando eu tento - conectar? - 3.6) Qual o processo de atualizao do PostgreSQL? - 3.7) Que tipo de hardware eu devo usar? - - Perguntas Operacionais - - 4.1) Como eu fao um SELECT somente dos primeiros registros de uma - consulta? Um registro randmico? - 4.2) Como eu descubro quais tabelas, ndices, bancos de dados e - usurios esto 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 mximo de um registro, uma tabela e um banco de - dados? - 4.5) Quanto espao em disco necessrio para armazenar dados de um - arquivo texto? - 4.6) Por que minhas consultas esto lentas? Por que elas no esto - utilizando meus ndices? - 4.7) Como eu vejo como o otimizador de consultas est avaliando minha - consulta? - 4.8) Como eu fao buscas com expresses regulares e buscas com - expresses regulares sem diferenciar mausculas de minsculas? Como eu - utilizo um ndice para buscas sem distinguir maisculas de minsculas? - 4.9) Em uma consulta, como eu detecto se um campo NULL? Como eu - posso concatenar possveis NULLs? Como eu posso ordenar por um campo - que NULL ou no? - 4.10) Qual a diferena entre os vrios 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() no lida com condio de corrida com outros - usurios? - 4.11.4) Por que os nmeros da minha sequncia no so reutilizados - quando uma transao abortada? Por que h intervalos nos nmeros da - minha sequncia/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 verso do PostgreSQL eu estou utilizando? - 4.15) Como eu crio uma coluna que conter por padro a hora atual? - 4.16) Como eu fao uma juno externa (outer join)? - 4.17) Como eu fao consultas utilizando mltiplos bancos de dados? - 4.18) Como eu retorno mltiplos registros ou colunas de uma funo? - 4.19) Por que eu obtenho erros "relation with OID ###### does not - exist" ao acessar tabelas temporrias em funes PL/PgSQL? - 4.20) Quais solues de replicao esto disponveis? - 4.21) Por que os nomes de minhas tabelas e colunas no so - reconhecidos em minha consulta? Por que as maisculas no so - 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 disponvel). - - O PostgreSQL um sistema de banco de dados objeto-relacional que tem - as caractersticas de sistemas de bancos de dados comerciais - tradicionais com melhoramentos encontrados nos sistemas SGBDs de - prxima gerao. PostgreSQL livre e o cdigo-fonte completo est - disponvel. - - O desenvolvimento do PostgreSQL feito por um grupo de - desenvolvedores voluntrios (na sua maioria) espalhados pelo mundo e - que se comunicam via Internet. um projeto da comunidade e no - 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' difcil 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 --- no h um(a). Ns temos um - comit core e committers CVS, mas estes grupos so mais para questes - administrativas do que controle. O projeto direcionado pela - comunidade de desenvolvedores e usurios, que qualquer um pode se - juntar. Tudo o que voc precisa se inscrever nas listas de discusso - e participar das discusses. Veja a FAQ do desenvolvedor para obter - informaes como se envolver com o desenvolvimento do PostgreSQL. - - 1.3) Qual a licena do PostgreSQL? - - O PostgreSQL distribudo sob a licena BSD clssica. Basicamente, - ela permite que usurios faam qualquer coisa com o cdigo, incluindo - revender os binrios sem o cdigo-fonte. A nica restrio que voc - no nos responsabilize legalmente por problemas com o programa de - computador. H tambm a exigncia de que esta licena aparea em todas - as cpias do programa de computador. Aqui est a licena BSD que - usamos atualmente: - - PostgreSQL est sujeito a seguinte licena: - - 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 compatvel com Unix deve ser - capaz de executar o PostgreSQL. As plataformas que foram testadas - antes do lanamento de uma verso so listadas nas instrues de - instalao. - - O PostgreSQL tambm executa nativamente nos sistemas operacionais - Microsoft Windows baseados no NT tais como Win200 SP4, WinXP e - Win2003. Um instalador pr-empacotado est disponvel em - http://pgfoundry.org/projects/pginstaller. Verses do Windows baseadas - no MS-DOS (Win95, Win98, WinMe) podem executar o PostgreSQL utilizando - o Cygwin. - - H tambm uma verso para o Novell Netware 6 em - http://forge.novell.com e uma verso 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 verso? - - A ltima verso do PostgreSQL a verso 8.2.5. - - Ns planejamos lanar verses novas a cada ano com verses corretivas - em alguns meses. - - 1.7) Onde eu posso conseguir suporte? - - A comunidade do PostgreSQL fornece assistncia a muitos de seus - usurios via e-mail. O principal stio web para inscrio nas listas - de e-mail http://www.postgresql.org/community/lists/. As listas - general e bugs so um bom lugar para incio. - - 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 hispnico (#postgresql-es) e um francs - (#postgresqlfr) tambm existem na mesma rede. H tambm um canal - PostgreSQL na EFNet. - - Uma lista de empresas que prestam suporte comercial est disponvel em - http://www.postgresql.org/support/professional_support. - - 1.8) Como eu informo a existncia de um bug? - - Visite o formulrio que reporta bugs do PostgreSQL em - http://www.postgresql.org/support/submitbug. - - Verifique tambm o nosso ftp ftp://ftp.postgresql.org/pub para ver se - h uma verso mais recente do PostgreSQL. - - Bugs submetidos utilizando o formulrio ou informado a qualquer lista - de discusso do PostgreSQL tipicamente gera uma das seguintes - respostas: - * No um bug e o porqu - * um bug conhecido e j est na lista de AFAZERES - * O bug foi corrigido na verso atual - * O bug foi corrigido mas no foi empacotado em um verso oficial - * Um pedido foi feito para obter informaes detalhadas: - + Sistema Operacional - + Verso do PostgreSQL - + Exemplo de teste que reproduz o bug - + Informaes sobre depurao - + Sada reconstituidora de vestgios (backtrace) do depurador - * O bug novo. O seguinte pode ocorrer: - + Uma correo criada e ser includa na prxima verso - + O bug no pode ser corrigido imediatamente e adicionado a - lista de AFAZERES - - 1.9) Como eu posso saber quais so os bugs conhecidos ou funcionalidades - ausentes? - - O PostgreSQL suporta um subconjunto extendido do SQL:2003. Veja nossa - lista de AFAZERES que contm bugs conhecidos, funcionalidades ausentes - e planos futuros. - - Uma solicitao de funcionalidade geralmente resulta em uma das - seguintes respostas: - * A funcionalidade j est na lista de AFAZERES - * A funcionalidade no desejvel porque: - + Ela duplica uma funcionalidade existente que j segue o - padro SQL - + A funcionalidade aumentar a complexidade do cdigo mas - adicionar pouco benefcio - + A funcionalidade ser insegura ou no-confivel - * A nova funcionalidade adicionada a lista de AFAZERES - - O PostgreSQL no utiliza sistema de acompanhamento de bugs porque ns - achamos mais eficiente responder diretamente o e-mail e manter a lista - de AFAZERES atualizada. Na prtica, bugs no duram muito no programa; - e bugs que afetam uma grande quantidade de usurios so corrigidos - rapidamente. O nico lugar para encontrar todas as mudanas, melhorias - e correes em uma verso do PostgreSQL ler as mensagens de log do - CVS. At mesmo as notas de lanamento no listam todas as mudanas - feitas no programa. - - 1.10) Que documentao est disponvel? - - O PostgreSQL inclui vasta documentao, incluindo um manual extenso, - pginas de manuais (man pages) e alguns exemplos teste. Veja o - diretrio /doc. Voc tambm pode pesquisar os manuais online em - http://www.postgresql.org/docs. - - H dois livros sobre PostgreSQL disponveis online em - http://www.postgresql.org/docs/books/awbook.html e - http://www.commandprompt.com/ppbook/. H uma lista de livros sobre - PostgreSQL disponveis para compra. Um dos mais populares o do Korry - Douglas. Uma lista de anlise sobre os livros pode ser encontrada em - http://www.postgresql.org/docs/books/. H tambm uma coleo de - artigos tcnicos sbore PostgreSQL em - http://www.postgresql.org/docs/techdocs/. - - O programa cliente de linha de comando psql tem alguns comandos \d - para mostrar informaes sobre tipos, operadores, funes, agregaes, - etc. - utilize \? para mostrar os comandos disponveis. - - Nosso stio web contm ainda mais documentao. - - 1.11) Como eu posso aprender SQL? - - Primeiro, considere os livros especficos sobre PostgreSQL mencionados - acima. Muitos de nossos usurios 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 tambm bons tutoriais disponveis 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 correo (patch) ou me juntar a equipe de - desenvolvimento? - - Veja a FAQ do Desenvolvedor. - - 1.13) Como o PostgreSQL comparado a outros SGBDs? - - H vrias maneiras de se medir um software: funcionalidades, - performance, confiabilidade, suporte e preo. - - Funcionalidades - PostgreSQL tem muitas caractersticas presentes em muitos SGBDs - comerciais como transaes, subconsultas, gatilhos, vises, - integridade referencial de chave estrangeira e bloqueio (lock) - sofisticado. Ns temos algumas funcionalidades que eles no - tem, como tipos definidos pelo usurio, herana, regras e - controle de concorrncia de mltiplas verses para reduzir - bloqueios (locks). - - Performance - A performance do PostgreSQL comparvel a outros bancos de - dados comerciais e de cdigo livre. Ele mais rpido em - algumas coisas, mais lento em outras. Nossa performance - geralmente +/- 10% comparada a de outros bancos de dados. - - Confiabilidade - Ns sabemos que um SGBD deve ser confivel ou ele intil. Ns - empenhamos em lanar verses bem testadas, de cdigo estvel e - que tenha o mnimo de bugs. Cada verso tem no mnimo um ms de - teste em verso beta, e nosso histrico de verses mostra que - ns podemos fornecer verses estveis e slidas que esto - prontas para uso em produo. Ns acreditamos que somos - comparados a nosso favor com outros sistemas de bancos de dados - nessa rea. - - Suporte - Nossas listas de discusso fornecem contato com um grupo de - desenvolvedores e usurios para ajudar a resolver muitos - problemas encontrados. Enquanto ns no podemos garantir o - conserto, SGBDs comerciais nem sempre fornecem tambm. Com - acesso direto aos desenvolvedores, a comunidade de usurios, - manuais e o cdigo fonte faz com que o suporte do PostgreSQL - seja superior ao de outros SGBDs. H suporte comercial por - incidente disponveis para aqueles que precisam de um. (Veja - seo 1.7 da FAQ). - - Preo - Ns somos livres para uso dele tanto comercial quanto no - comercial. Voc pode adicionar nosso cdigo ao seu produto sem - limitaes, exceto aquelas descritas na nossa licena BSD - mencionada acima. - - 1.14) O PostgreSQL gerenciar mudanas no horrio devido ao horrio de vero - em vrios pases? - - Mudanas no horrio de vero dos USA foram includas nas verses 8.0 - .[4+] do PostgreSQL e em todas as verses grandes, i.e. 8.1. Mudanas - no Canad e Austrlia Oeste foram includas na 8.0.[10+], 8.1.[6+] e - em todas as verses grandes subsequentes. Verses do PostgreSQL - anteriores a 8.0 utilizam o banco de dados de zona horria do sistema - operacional para informaes sobre horrio de vero. - _________________________________________________________________ - - Perguntas sobre Clientes - - 2.1) Quais interfaces esto disponveis para PostgreSQL? - - A instalao do PostgreSQL inclui somente as interfaces C e C - embutida. Todas as outras interfaces so projetos independentes que - podem ser obtidos separadamente; sendo separados permitem que eles - tenham suas prprias datas de lanamento e time de desenvolvedores. - - Algumas linguagens de programao como PHP incluem uma interface para - PostgreSQL. Interfaces para linguagens como Perl, TCL, Python e muitas - outras esto disponveis em http://www.pgfoundry.org. - - 2.2) Quais ferramentas esto disponveis para utilizar o PostgreSQL com - pginas Web? - - Uma boa introduo para pginas web que utilizam bancos de dados pode - ser vista em: http://www.webreview.com - - Para integrao 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 grficas para iteragir com o usurio? - - H um vasto nmero de Ferramentas Grficas (GUI), que esto - disponveis para o PostgreSQL, comerciais e de desenvolvedores de - cdigo aberto. Uma lista detalhada pode ser encontrada em Documentao - da Comunidade PostgreSQL - _________________________________________________________________ - - Perguntas Administrativas - - 3.1) Como eu instalo o PostgreSQL em um local diferente de /usr/local/pgsql? - - Especifique a opo --prefix quando executar o configure. - - 3.2) Como eu controlo conexes de outras mquinas? - - Por padro, o PostgreSQL s permite conexes da mquina local - utilizando soquetes de domnio Unix ou conexes TCP/IP. Outras - mquinas no podero conectar-se a menos que voc modifique - listen_addresses no postgresql.conf, habilite a autenticao por - mquina 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 trs grandes reas para melhorar a performance em potencial: - - Mudana de Consultas - Isto involve modificar consultas para obter melhor performance: - - + Criao de ndices, incluir expresses e ndices parciais - + Utilizao o COPY ao invs de mltiplos comandos INSERTs - + Agrupamento de mltiplos comandos em uma nica transao para - diminuir a despesa com efetivaes (commit) - + Utilizao do CLUSTER quando recuperar vrios registros de um - ndice - + Utilizao do LIMIT para retornar um subconjunto da sada da - consulta - + Utilizao de Consultas preparadas - + Utilizao de ANALYZE para manter as estatsticas do - otimizador corretas - + Utilizao regular do VACUUM ou pg_autovacuum - + Remoo de ndices durante grande mudana de dados - - Configurao do Servidor - Um grande nmero de configuraes que afetam a performance. - Para obter detalhes adicionais, veja Administration - Guide/Server Run-time Environment/Run-time Configuration para - listagem completa, e para comentrios veja - http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_co - nf_e.html e - http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html. - - Seleo 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 caractersticas de depurao esto disponveis? - - H muitas variveis de configurao do servidor log_* que habilitam a - exibio de consultas e estatsticas que podem ser muito teis para - depurao e medidas de performance. - - 3.5) Por que eu recebo "Sorry, too many clients" quando eu tento conectar? - - Voc atingiu o limite padro de 100 sesses. 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 atualizao do PostgreSQL? - - Veja http://www.postgresql.org/support/versioning para discusso geral - sobre atualizaes e - http://www.postgresql.org/docs/current/static/install-upgrading.html - para instrues especficas. - - 3.7) Que tipo de hardware eu devo usar? - - Por causa do hardware de PC ser em sua maioria compatvel, pessoas - tendem a acreditar que todos os hardwares de PC so de mesma - qualidade. No verdade. ECC RAM, SCSI e placas me de qualidade so - mais confiveis e tm 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 opes de hardware. Nossas listas de discusso podem ser - usadas para discutir opes de hardware e dilemas. - _________________________________________________________________ - - Perguntas Operacionais - - 4.1) Como eu fao um SELECT somente dos primeiros registros de uma consulta? - Um registro randmico? - - Para obter somente alguns registros, se voc sabe o nmero de - registros necessrios ao executar o SELECT utilize o LIMIT. Se um - ndice corresponde no ORDER BY possvel que a consulta toda no - tenha que ser executada. Se voc no sabe o nmero de registros ao - executar o SELECT, utilize um cursor e o FETCH. - - Para obter um registro randmico, utilize: - SELECT col - FROM tab - ORDER BY random() - LIMIT 1; - - 4.2) Como eu descubro quais tabelas, ndices, bancos de dados e usurios - esto 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 cdigo-fonte do psql no arquivo - pgsql/src/bin/psql/describe.c, ele contm os comandos SQL que geram a - sada para os comandos de contrabarra do psql. Voc tambm pode - iniciar o psql com a opo -E para que as consultas utilizadas para - executar os comandos que voc informou seja exibida. O PostgreSQL - tambm fornece uma inteface compatvel com SQL do INFORMATION SCHEMA - que voc pode consultar para obter informao sobre o banco de dados. - - H tambm tabelas do sistema que comeam com pg_ que os descrevem - tambm. - - Utilizando o psql -l listar todos os bancos de dados. - - Veja tambm o arquivo pgsql/src/tutorial/syscat.source. Ele ilustra - muitos dos comandos SELECTs necessrios para obter informao 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 verso - 8.0 ou superior com ALTER TABLE ALTER COLUMN TYPE. - - Em verses anteriores, faa 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 ento querer fazer um VACUUM FULL tab para recuperar o - espao em disco utilizado pelos registros expirados. - - 4.4) Qual o tamanho mximo de um registro, uma tabela e um banco de dados? - - Estes so os limites: - - Tamanho mximo de um banco de dados? ilimitado (existem bancos de - dados de 32 TB) - Tamanho mximo de uma tabela? 32 TB - Tamanho mximo de um registro? 400 GB - Tamanho mximo de um campo? 1 GB - Nmero mximo de registros em uma tabela? ilimitado - Nmero mximo de colunas em uma tabela? 250-1600 dependendo dos tipos - das colunas - Nmero mximo de ndices em uma tabela? ilimitado - - claro, que eles no so ilimitados, mas limitados ao espao em disco - disponvel e espao em memria/swap. A Performance ser penalizada - quando estes valores se tornarem grandes. - - O tamanho mximo de uma tabela com 32 TB no requer suporte a arquivos - grandes do sistema operacional. Tabelas grandes so armazenadas como - mltiplos arquivos de 1 GB ento o limite do sistema de arquivos no - importante. - - O tamanho mximo de uma tabela, o tamanho de um registro e o nmero - mximo de colunas podem ser quadruplicados aumentando-se o tamanho - padro do bloco para 32k. O tamanho mximo de uma tabela pode tambm - ser aumentado utilizando particionamento de tabela. - - Uma limitao que ndices no podem ser criados em colunas maiores - do que 2.000 caracteres. Felizmente, tais ndices so raramente - necessrios. Unicidade melhor garantida por um ndice de uma funo - de um hash MD5 de uma coluna longa, e indexao de texto longo permite - a busca de palavras dentro da coluna. - - 4.5) Quanto espao em disco necessrio para armazenar dados de um arquivo - texto? - - Um banco de dados PostgreSQL ir requerer at cinco vezes a quantidade - de espao requerida para armazenar dados em um arquivo texto. - - Como um exemplo, considere um arquivo com 100.000 linhas contendo um - inteiro e uma descrio em cada linha. Suponha que o tamanho mdio da - descrio de vinte bytes. O arquivo ter 2,8 MB. O tamanho do - arquivo do banco de dados PostgreSQL que contm esses dados pode ser - estimado em 5,2 MB: - 24 bytes: cada cabealho de registro (aproximadamente) - 24 bytes: um campo int e um campo texto - + 4 bytes: ponteiro na pgina para a tupla - ------------------------------------------- - 52 bytes por registro - - O tamanho de uma pgina de dados no PostgreSQL 8192 bytes (8 KB), ento: - - 8192 bytes por pgina - ------------------------ = 158 registros por pgina do banco de dados (arredondado para baixo) - 52 bytes por registro - - 100000 registros de dados - ---------------------------- = 633 pginas do banco de dados (arredondadopara cima) - 158 registros por pgina - -633 pginas do banco de dados * 8192 bytes por pgina = 5.185.536 bytes (5,2MB) - - ndices no requerem muito espao, mas contm dados que foram - indexados, ento eles podem ocupar algum espao. - - NULLs so armazenados como bitmaps, ento eles utilizam muito pouco - espao. - - 4.6) Por que minhas consultas esto lentas? Por que elas no esto utilizando - meus ndices? - - ndices no so utilizados por toda consulta. ndices so utilizados - somente se a tabela maior do que um tamanho mnimo, e a consulta - seleciona somente uma pequena porcentagem dos registros da tabela. - Isto porque o acesso randmico 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 estatsticas sobre a tabela. Estas estatsticas so coletadas - utilizando o VACUUM ANALYZE ou simplesmente o ANALYZE. Utilizando - estatsticas, o otimizador sbae quantos registros esto na tabela, e - pode melhor determinar se ndices deveriam ser utilizados. - Estatsticas tambm so teis para determinar a ordem de juno tima - e mtodos de juno. Coleo de estatsticas deveriam ser feitas - periodicamente a medida que o contedo da tabela muda. - - ndices no so normalmente utilizados para ORDER BY ou para fazer - junes. Uma busca sequencial seguido por uma ordenao explcita - geralmente mais rpida do que uma busca indexada em uma tabela grande. - Contudo, LIMIT combinado com ORDER BY frequentemente utilizar ndice - porque somente uma pequena poro 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 rpida. - - Ao utilizar operadores curinga tais como LIKE ou ~, ndices podem ser - utilizados somente em algumas condies: - * O incio da cadeia de caracteres da busca deve ser iniciar com uma - cadeia de caracteres, i.e. - + modelos LIKE no devem iniciar com %. - + modelos ~ (expresses regulares) devem iniciar com ^. - * A cadeia de caracteres utilizada na busca no pode iniciar com a - classe de caracteres e.g. [a-e]. - * Busca que no diferenciam maisculas de minsculas tais como ILIKE - e ~* no utilizam ndices. Em vez disso, utilize ndice de - expresso, que descrito na seo 4.8. - * O idioma padro C deve ser usando durante o initdb porque no - possvel saber o prximo caracter em idiomas que no sejam o C. - Voc pode criar um ndice especial text_pattern_ops para tais - casos que funcionam somente para indexao com LIKE. Tambm - possvel utilizar indexao de busca textual para buscas por - palavras. - - Em verses anteriores a 8.0, ndices frequentemente no 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 fao buscas com expresses regulares e buscas com expresses - regulares sem diferenciar maisculas de minsculas? Como eu utilizo um ndice - para buscas que no diferenciam maisculas de minsculas? - - O operador ~ faz avaliao de expresses regulares, e ~* faz avaliao - no sensvel a maisculas de expresses regulares. A variante no - sensvel a maisculas do LIKE chamada de ILIKE. - - Comparaes de igualdade no sensveis a maisculas so normalmente - expressadas como: - SELECT * - FROM tab - WHERE lower(col) = 'abc'; - - Isso no ir utilizar o ndice padro. Contudo, se voc criar um - ndice de expresso, ele ser utilizado: - CREATE INDEX tabindex ON tab (lower(col)); - - Se o ndice acima criado como UNIQUE, embora a coluna possa - armazenar caracteres maisculos e minsculos, ele no pode ter valores - idnticos que diferem apenas em letras maisculas e minsculas. Para - forar uma letra maiscula ou minscula a ser armazenada na coluna, - utilize uma restrio CHECK ou um gatilho. - - 4.9) Em uma consulta, como eu detecto se um campo NULL? Como eu posso - concatenar possveis NULLs? Como eu posso ordenar por um campo que NULL ou - no? - - Voc testa a coluna com IS NULL e IS NOT NULL, como a seguir: - SELECT * - FROM tab - WHERE col IS NULL; - - Para concatenar com possveis 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 clusula ORDER BY. Coisas que so verdadeiro sero - ordenadas acima das coisas que so falso, ento a consulta a seguir - ir colocar entradas NULL no incio da lista de resultados: - SELECT * - FROM tab - ORDER BY (col IS NOT NULL) - - 4.10) Qual a diferena entre os vrios tipos de dado de caracteres? - - Tipo Nome Interno Observao - VARCHAR(n) varchar tamanho especifica o tamanho mximo, sem - preenchimento - CHAR(n) bpchar preenchimento em branco para comprimento fixo - especfico - TEXT text nenhum limite superior especfico no comprimento - BYTEA bytea vetor de bytes de comprimento varivel (seguro a byte - nulo) - "char" char um caracter - - Voc ver o nome interno quando examinar o catlogo do sistema e em - algumas mensagens de erro. - - Os primeiros quatro tipos acima so do tipo "varlena" (i.e., os - primeiros quatro bytes no disco so o comprimento seguido pelos - dados). Consequentemente o espao atual utilizado ligeiramente maior - do que o tamanho declarado. Contudo, valores longos so tambm - sujeitos a compresso, ento o espao em disco pode tambm ser bem - menor do que o esperado. - VARCHAR(n) melhor quando est armazenando cadeias de caracteres de - comprimento varivel e h um limite de tamanho desta cadeia. TEXT - para cadeias de caracteres de comprimento ilimitado, com o mximo de - um gigabyte. - - CHAR(n) para armazenar cadeias de caracteres que so todas do mesmo - tamanho. CHAR(n) preenche com espaos em branco at o tamanho - especificado, enquanto o VARCHAR(n) armazena somente os caracteres - fornecidos. BYTEA para armazenar dados binrios, particularmente - valores que incluem bytes NULL. Todos os tipos descritos aqui tem - caractersticas 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 sequncia. 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 - ); - - Sequncias automaticamente criadas so nomeadas como - <tabela>_<colunaserial>_seq, onde tabela e colunaserial so os nomes - da tabela e da coluna serial, respectivamente. Veja a pgina sobre - create_sequence no manual para obter informaes adicionais sobre - sequncias. - - 4.11.2) Como eu consigo o valor de um campo SERIAL? - - A maneira mais simples de obter o prximo valor SERIAL de uma - sequncia com RETURNING. Utilizando o exemplo da tabela em 4.11.1, - ele ficaria assim: - INSERT INTO pessoa (nome) VALUES ('Blaise Pascal') RETURNING id; - - Voc tambm pode chamar nextval() e utilizar o valor no INSERT ou - chamar currval() aps o INSERT. - - 4.11.3) currval() no lida com condio de corrida com outros usurios? - - No. currval() retorna o valor atual atribuido pela sua sesso, e no - por todas as sesses. - - 4.11.4) Por que os nmeros da minha sequncia no so reutilizados quando uma - transao abortada? Por que h intervalos nos nmeros da minha - sequncia/coluna SERIAL? - - Para melhorar a concorrncia, valores da sequncia so atribudos a - transaes correntes e no so travados at que a transao seja - finalizada. Isso causa intervalos na numerao por causa de transaes - 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 so automaticamente atribudos como inteiros de 4 bytes - que so nicos ao longo de toda instalao. Contudo, eles so - limitados em 4 bilhes e, ento, os OIDs comeam a ser duplicados. O - PostgreSQL utiliza OIDs para ligar as tabelas do sistema. - - Para numerar registros nas tabelas do usurios, melhor utilizar - SERIAL ao invs de OIDs porque sequncias SERIAL so nicas somente em - uma tabela; e so menos propcias a atingir o limite. SERIAL8 est - disponvel para armazenar valores de sequncias com oito bytes. - - CTIDs so utilizados para identificar registros fsicos especficos - com valores de block e deslocamento. CTIDs mudam aps registros serem - modificados ou recarregados. Eles so utilizados por ndices para - apontar registros fsicos. - - 4.13) Por que eu recebo o erro "ERROR: Memory exhausted in AllocSetAlloc()"? - - Voc provavelmente est sem memria virtual no seu sistema, ou o seu - ncleo (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 verso do PostgreSQL eu estou utilizando? - - No psql, digite SELECT version(); - - 4.15) Como eu crio uma coluna que conter por padro a hora atual? - - Utilize CURRENT_TIMESTAMP: - CREATE TABLE teste (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP); - - 4.16) Como eu fao uma juno externa (outer join)? - - PostgreSQL suporta junes externas utilizando a sintaxe padro 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 indnticas juntam t1.col com t2.col, e tambm - retornam qualquer registro que no foi juntado em t1 (aqueles que no - combinaram com t2). Uma juno a direita RIGHT adicionaria registros - que no foram juntados da tabela t2. Uma juno completa (FULL) - retornaria os registros combinados mais todos os registros no - combinados de t1 e t2. A palavra OUTER opcional e assumida nas - junes LEFT, RIGHT e FULL. Junes ordinrias so chamadas junes - internas (INNER). - - 4.17) Como eu fao consultas utilizando mltiplos bancos de dados? - - No h outra maneira de consultar um banco de dados caso ele no seja - o atual. Porque o PostgreSQL carrega catlogos do sistema especficos - 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 funes. claro, que um cliente pode fazer - conexes simultneas em bancos de dados diferentes e juntar os - resultados no cliente. - - 4.18) Como eu retorno mltiplos registros ou colunas de uma funo? - - fcil utilizando funes 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 temporrias em funes PL/PgSQL? - - Em verses do PostgreSQL < 8.3, PL/PgSQL armazena o contedo da - funo, e o efeito indesejado que se uma funo PL/PgSQL acessa uma - tabela temporria, e aquela tabela removida e criada novamente, e a - funo chamada novamente, a funo ir falhar porque o contedo - armazenado da funo ainda apontar para a tabela temporria antiga. A - soluo utilizar o EXECUTE para acesso a tabelas temporrias no - PL/PgSQL. Isto ir fazer com que a consulta seja avaliada toda vez. - - Este problema no ocorre no PostgreSQL 8.3 ou superior. - - 4.20) Quais solues de replicao esto disponveis? - - Embora "replicao" seja um termo simples, h vrias tecnologias para - fazer replicao, com vantagens e desvantagens para cada um. - - Replicao mestre/escravo permite que um mestre receba consultas de - leitura e escrita, enquanto os escravos s podem aceitar - leitura/consultas SELECT. A soluo mais popular de replicao - mestre-escravo para PostgreSQL disponvel livremente Slony-I. - - Replicao com mltiplos mestres permite que consultas leitura/escrita - sejam enviadas para mltiplos computadores replicadores. Esta - capacidade tambm tem um srio impacto na performance por causa da - necessidade de sincronizar as mudanas entre os servidores. PGCluster - a soluo mais popular disponvel livremente para PostgreSQL. - - H tambm solues de replicao comerciais e baseadas em hardware - disponveis que suportam uma variedade de modelos de replicao. - - 4.21) Por que os nomes de minhas tabelas e colunas no so reconhecidos em - minha consulta? Por que as maisculas no so preservadas? - - A causa mais comum de nomes desconhecidos o uso de aspas ao redor - dos nomes da tabela ou coluna durante a criao da tabela. Ao utilizar - aspas, nomes de tabela e coluna (chamados de identificadores) so - 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 criao da tabela. Ento, para identificadores serem - reconhecidos, voc deve: - * Evitar colocar aspas no identificador ao criar tabelas - * Utilizar somente caracteres minsculos em identificadores - * Colocar aspas em identificadores ao referenci-los nas consultas diff --git a/doc/FAQ_chinese_simp b/doc/FAQ_chinese_simp deleted file mode 100644 index fde161fa103..00000000000 --- a/doc/FAQ_chinese_simp +++ /dev/null @@ -1,801 +0,0 @@ - - PostgreSQL 常FAQ - - 2007 年 1 30 17:37:01 EST - 2007 年 2 1 12:55:04 CST - - 维人Bruce Momjian (pgman@candle.pha.pa.us) - 维人Daojing.Zhoudoudou586@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? - - PostgreSQLBSD许使PostgreSQL - 以PostgreSQL代 以就 软件 - 们追责任就软件中 - 须以声就们使BSD声容 - - PostgreSQL管系 - - c1996-2005PostgreSQL c1994-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 - SP4WinXP Win2003已 - http://pgfoundry.org/projects/pginstaller载MSDOSWindows - Win95Win98WinMeCygwin模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件表个好 - - 主IRCFreeNode(irc.freenode.net)#postgresql为 - 以使UNIXirc令 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表 - 访ftpftp://ftp.PostgreSQL.org/pub/ - PostgreSQL补 - - 使Bug交表 PostgreSQL件表Bug常以 - - * 交容个BugBug - * 交容个已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 - 以线PostgreSQLhttp://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(缺)CC项 - 载项好 - 们以计 - - 语 - PHP访PostgreSQLPerlTCLPython以 - http://gborg.postgresql.orgDrivers/Interfaces - 并Internet容索 - - 2.2) 工以PostgreSQL Web 页 - - 个以为http://www.webreview.com - - 对 Web PHP 个好http://www.php.net/ - - 对任人 Perl 使CGI.pmDBD::Pg mod_perl - - 2.3)PostgreSQL形 - - 人PostgreSQLGUI形工软件 - 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个容SQLINFORMATION 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个表中 - 就以 溢就常 - SERIAL88 - - CTID 带移 CTID - 记被载索使们 - - 4.13) 为误信ERROR: Memory exhausted in AllocSetAlloc() - - 系 对 - postmaster 令 - ulimit -d 262144 - limit datasize 256m - - - shell令 段设 - 许让询令以令 - - SQL客端 为太请 - 客端述令 - - 4.14) PostgreSQL - - psql SELECT version();令 - - 4.15) 建个缺段 - - 使 CURRENT_TIMESTAMP - CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); - - 4.16) outer join - - PostgreSQL SQL 两个 - SELECT * - FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col); - - - SELECT * - FROM t1 LEFT OUTER JOIN t2 USING (col); - - 两个价询 t1.col t2.col 并 t1 中 - t2 没 []RIGHT OUTER - JOIN t2 FULL OUTER JOIN t1 t2 - OUTER 左[][][]中 - 被称为INNER JOIN - - 4.17) 使个询 - - 没询 - 为PostgreSQL 载系系表 - 跨询 - - 模contrib/dblink许跨询以 - 询客端并 - - 4.18) 让 - - 记容使详 - http://techdocs.postgresql.org/guides/SetReturningFunctions - - 4.19) 为使PL/PgSQL临表误信relation with - OID ##### does not exist - - PL/PgSQL容带个好个 - PL/PgSQL - 访个临表该表被 并建次该 - 失败 为容临表解 PL/PgSQL - EXECUTE - 对临表访 询被解 - - 4.20) - - 个好 缺 - - 主/许个主读/请个 - /SELECT询请 费主/PostgreSQL - Slony-I - - 个主许读/请计 - - 带严失Pgcluster 中 - 好以费载 - - 费硬件述模 - - 4.21) 为询示表询为大 - - 常 建表对表使使 - 称为 符 大 - 询表使工软件pgAdmin - 建表令个 符 - 为 符 该 - * 建表 符使起 - * 符使 - * 为已 符询使 符起 diff --git a/doc/FAQ_chinese_trad b/doc/FAQ_chinese_trad deleted file mode 100644 index b1908535777..00000000000 --- a/doc/FAQ_chinese_trad +++ /dev/null @@ -1,793 +0,0 @@ - - PostgreSQL 常FAQ - - 2007 年 2 8 22:43:13 EST - 2007 年 2 12 12:00:04 CST - - 人Bruce Momjian (pgman@candle.pha.pa.us) - 人(ChaoYi, Kuo)kuo.chaoyi@gmail.com - - 以 - http://www.postgresql.org/files/documentation/faqs/FAQ.html - - 系統平 http://www.postgresql.org/docs/faq/ - 裡 - _________________________________________________________________ - -常 - - 1.1)PostgreSQL 麼該麼 - 1.2)誰管PostgreSQL - 1.3)PostgreSQL麼 - 1.4)PostgreSQL以系統平 - 1.5)裡PostgreSQL - 1.6) PostgreSQL 麼 - 1.7)裡 PostgreSQL - 1.8)交 BUG - 1.9)解已 BUG 缺 - 1.10) - 1.11)該樣 SQL - 1.12)交 - 1.13)PostgreSQL 庫系統起 - 1.14)PostgreSQL 以家 - -客端 - - 2.1)以麼 PostgreSQL - 2.2)麼工以 PostgreSQL Web - 2.3)PostgreSQL 形(GUI) - -系統管 - - 3.1)樣 PostgreSQL /usr/local/pgsql 以 - 3.2) - 3.3)樣調庫伺以好 - 3.4)PostgreSQL 裡以麼樣調試 - 3.5)麼試Sorry, too many clients - 3.6)PostgreSQL 容 - 3.7)(使 PostgreSQL )使麼硬 - - - - 4.1) 詢 幾 - 4.2) 表索庫以義 psql - 裡詢令並顯示 - 4.3) - 4.4) 表庫大 - 4.5) 件裡空 - 4.6) 麼詢麼詢索 - 4.7) 詢樣估詢 - 4.8) 樣表索大寫 - 表樣索大寫 - 4.9) 詢裡樣檢測 - NULL確NULL - 4.10) 種符麼 - 4.11.1) 樣建 - 4.11.2) - 4.11.3) 使 currval() - 4.11.4) 麼常麼中 - - 4.12) 麼 OID麼 CTID - 4.13) 麼誤ERROR: Memory exhausted in - AllocSetAlloc() - 4.14) PostgreSQL - 4.15) 建 - 4.16) outer join詢 - 4.17) 庫詢 - 4.18) - 4.19) 麼使 PL/PgSQL 表誤relation - with OID ##### does not exist - 4.20) 寫(replication) - 4.21) 詢顯示表詢中 - 大寫 - _________________________________________________________________ - -常 - - 1.1) PostgreSQL 麼該麼 - - PostgreSQL Post-Gres-Q-L簡稱Postgres - 人裡件 MP3 - - PostgreSQL 庫系統統業 - 庫系統代 DBMS - 系統使強PostgreSQL - 費並代碼以 - - PostgreSQL - 主並網繫社 - 被任 - 人常FAQ - http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html - - 1.2) 誰 PostgreSQL - - PostgreSQL人麼中 - 央麼屬 --- - 確 CVS管工設 - 主管工PostgreSQLPostgreSQL - 任人 - 人社 就件表 - PostgreSQL詳 人常 (Developer's FAQ) - - 1.3) PostgreSQL 麼? - - PostgreSQL BSD 許使 - PostgreSQL 以 PostgreSQL - 代碼以就 身追訴 - 責任就 以 - 就使BSD容 - - PostgreSQL 庫管系統 - - c1996-2005PostgreSQL c1994-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 SP4WinXP Win2003已製 - http://pgfoundry.org/projects/pginstallerMSDOSWindows業 - 系統 Win95Win98WinMeCygwin模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 PerlTCLPython - 以 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 形 - - 人 PostgreSQLGUI 形工 - PostgreSQL社 詳細表 - _________________________________________________________________ - -系統管 - - 3.1)樣 PostgreSQL /usr/local/pgsql 以 - - configure --prefix - - 3.2) - - PostgreSQL 許 unix TCP/IP - 修置件 postgresql.conf - listen_addresses置件 $PGDATA/pg_hba.conf - host-based 身份並 - PostgreSQL PostgreSQL 伺 - - 3.3) 樣調庫以好 - - 主以 PostgreSQL - - 詢 - 主修詢以好: - - + 建索表索 - + 使 COPY 代 Insert - + SQL以交 - + 索使 CLUSTER - + 詢使 LIMIT - + 使 編詢Prepared Query) - + 使 ANALYZE 以精確統 - + 使 VACUUM pg_autovacuum - + 大索建索 - - 伺置 - 置件 postgres.conf 設 - 置影表 - 管/庫伺/庫伺置 - 解http://www.varlena.com/varlena/GeneralBits/Tidb - its/annotated_conf_e.html - http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html - - 硬 - 硬影覽 - http://candle.pha.pa.us/main/writings/pgsql/hw_performance/inde - x.html http://www.powerpostgresql.com/PerfList/ - - 3.4)PostgreSQL 裡以麼樣調試 - - PostgreSQL 似 log_* - 伺置詢統工調試測試 - 幫 - - 3.5) 麼試Sorry, too many - clients已太 - - 表示 已 100 並() 修 - postgresql.conf 件 max_connections postmaster - 併修 postmaster - - 3.6)PostgreSQL 容 - - PostgreSQL 次主 Bug 修工 - 7.4.8 7.4.9 dump restore - 庫伺伺 - - PostgreSQL該 使主快 - 管次風PostgreSQL 修 - Bug - 碼以風PostgreSQL社 - 風 - - 主 7.3 7.4常修系統表表 - 件容 中 - dump/中 - reload主 - - 3.7)(使 PostgreSQL )使麼硬 - - 硬大容人總信硬質 - 實 ECC RAM帶 SCSI - 硬質主便貨 好 - PostgreSQL 幾以任硬 - 系統 就 究 硬 - 件表 硬置 - _________________________________________________________________ - - - - 4.1) 詢 幾 - - 幾並 詢中 - 確 以使 LIMIT 索 ORDER BY 中 - 件PostgreSQL 就 幾 - 詢詢確 - 使游(cursor)FETCH - - 使以 - SELECT cols - FROM tab - ORDER BY random() - LIMIT 1 ; - - 4.2) - 表索庫以義psql裡詢令並顯示 - - - psql使 \dt 令顯示表義解 psql 中 - 令表使 \? 以 psql 代碼 件 - pgsql/src/bin/psql/describe.c psql 令輸 SQL - 令 以帶 -E psql 樣 psql 中 - 給令實使 SQL - 詢PostgreSQL容 SQL INFORMATION SCHEMA - 以裡庫 - - 系統以 pg_ 系統表述表義 - - 使 psql -l 令以庫 - - 以覽 pgsql/src/tutorial/syscat.source - 件庫系統表SELECT - - 4.3) - - 8.0裡容使 ALTER TABLE ALTER COLUMN - TYPE - - 以以樣 - BEGIN; - ALTER TABLE tab ADD COLUMN new_col new_data_type; - UPDATE tab SET new_col = CAST(old_col AS new_data_type); - ALTER TABLE tab DROP COLUMN old_col; - COMMIT; - - 以使 VACUUM FULL tab 令使系統空 - - 4.4) 表庫大 - - - - 庫大尺寸 已 32TB 庫 - 表大尺寸 32 TB - 大尺寸 1.6 TB - 大尺寸? 1 GB - 表裡大 - 表裡大 250-1600 - 表裡大索 - - 實空/交 - 實述常大系統大影 - - 表大大 32 TB 業 - 系統件麼大大表 1 GB 件 - 件系統大 - - 大 32K 大表大大以 - - 就大2000 - 建索幸樣索 - 容MD5索 - 並檢索許索 - - 4.5) 件裡空 - - Postgres 庫 - 件空件身大5空 - - - 100,000 件述 設 - 串平度20(Byte)件 2.8 MB - PostgreSQL庫件大 5.2 MB: - 24 : 大 - 24 : - + 4 : - ---------------------------------------- - 52 - - PostgreSQL 大 8192 (8 KB) - - 8192 - ------------------- = 158 / - 52 - - 100000 - -------------------- = 633 - 146 / - - 633 * 8192 / = 5,185,536 5.2 MB - - 索麼確實被索 - 大 - - 空 NULL 空 - - 4.6) 麼詢麼詢索 - - 並詢使索表大並詢 - 表索 索起 - 表 - - 使索PostgreSQL - 表統統以使 VACUUM ANALYZE ANALYZE - 使統表中 - 就 好索 - 統確 表容 - 統 - - 索常 ORDER BY - 大表次 次常索快 - LIMIT ORDER BY - 起使話常使索 表 - - 確信PostgreSQL使 確 以使SET - enable_seqscan TO 'off'令 - 次詢 就以使索確實快 - - 使符 LIKE ~ 索使 - * 符串 符串就說 - + LIKE 模以 % - + ~ 表模 以 ^ - * 符串以符模 [a-e] - * 大寫 ILIKE ~* 使索以 4.8 - 述表索 - * initdb 置 C - locale 系統 C locale 大符麼 - 種 以建 text_pattern_ops 索 - LIKE 索 - - 8.0 中 - 詢索索常被 - int2, int8 索 - - 4.7) 詢樣估詢 - - EXPLAIN - - 4.8) 樣表索大寫 - 表樣索大寫 - - 符 ~ 表 ~* 大寫表大寫 - LIKE 種 ILIKE - - 大寫常寫 - SELECT * - FROM tab - WHERE lower(col) = 'abc'; - - 樣使索以建種使表索 - : - CREATE INDEX tabindex ON tab (lower(col)); - - 述索建 UNIQUE 索身容以 - 大寫容 UNIQUE - 容大寫 - 種以使 CHECK 件觸 - - 4.9) 詢裡樣檢測 NULL - 確 NULL - - IS NULL IS NOT NULL 測試 - SELECT * - FROM tab - WHERE col IS NULL; - - NULL ORDER BY 件使 IS NULL IS NOT - NULL 修飾符件 true 件 false - 就 NULL - SELECT * - FROM tab - ORDER BY (col IS NOT NULL) - - 4.10) 種符麼 - - 稱 說 - VARCHAR(n) varchar 大度 - 符串足義度 - CHAR(n) bpchar 符串實足義度以空 - TEXT text 大度 - BYTEA bytea 使NULL符許 - "char" char 符 - - 系統表誤裡 稱 - - 種 "varlena"就說 - 度 實空大 - 義以被縮 - 空 - - VARCHAR(n) 大度符串好 TEXT - 大 1G 左義度符串 - - CHAR(n) 度符串 - CHAR(n) 給度以空 足足容 - VARCHAR(n) 給容 BYTEA 尤 - NULL 差 - - 4.11.1) 樣建 - - PostgreSQL SERIAL - 義SERIAL建 - CREATE TABLE person ( - id SERIAL, - name TEXT - ); - - 以SQL - CREATE SEQUENCE person_id_seq; - CREATE TABLE person ( - id INT4 NOT NULL DEFAULT nextval('person_id_seq'), - name TEXT - ); - - create_sequence - - 4.11.2) - - 種 nextval() 象裡檢索 SERIAL - 精確使 4.11.1 裡表碼樣述 - new_id = execute("SELECT nextval('person_id_seq')"); - execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')"); - - 樣詢使 new_id 裡 person - 表 注建 SEQUENCE 象稱 - <table>_<serialcolumn>_seq 裡 table serialcolumn - 表稱 SERIAL 稱 - - 似 SERIAL 象 以 currval() 檢索賦 - SERIAL - execute("INSERT INTO person (name) VALUES ('Blaise Pascal')"); - new_id = execute("SELECT currval('person_id_seq')"); - - 4.11.3) 使 currval() - - currval() 次話賦 - - 4.11.4) 麼常麼 - - 併賦 - 並 就常中 - - - 4.12) 麼 OID 麼 CTID - - PostgreSQL 裡建 OID建表使 - WITHOUT OIDS OID 建 4 OID - PostgreSQL 伺 40溢 OID - PostgreSQL 系統表裡使 OID - 表建繫 - - 表好使 SERIAl 代 OID SERIAL - 表就以樣溢就常 - SERIAL8 8 - - CTID 帶移 CTID - 被索使 - - 4.13) 麼誤ERROR: Memory exhausted in AllocSetAlloc() - - 系統 - postmaster 試試令 - ulimit -d 262144 - limit datasize 256m - - 決 - shell令 段 - 許詢令以令建 - - SQL客端 太客 - 述令 - - 4.14) PostgreSQL - - psql 裡輸 SELECT version();令 - - 4.15) 建 - - 使 CURRENT_TIMESTAMP - CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); - - 4.16) 樣 outer join - - PostgreSQL SQL 裡 - SELECT * - FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col); - - - SELECT * - FROM t1 LEFT OUTER JOIN t2 USING (col); - - 詢 t1.col t2.col 並 t1 中 - t2 []RIGHT OUTER - JOIN t2 FULL OUTER JOIN t1 t2 - OUTER 左[][][]中 - 被稱INNER JOIN - - 4.17) 使庫詢 - - 辦詢庫庫 - PostgreSQL 庫系統系統表 - 跨庫詢 - - 模 contrib/dblink - 許調實跨庫詢以庫 - 詢客端併 - - 4.18) - - 容使詳 - http://techdocs.postgresql.org/guides/SetReturningFunctions - - 4.19) 麼使 PL/PgSQL 表誤relation with OID - ##### does not exist - - PL/PgSQL 緩容帶好 - PL/PgSQL - 訪表該表被並建次調該 - 緩容表解決 PL/PgSQL 中 - EXECUTE 表訪樣詢總被解 - - 4.20) 寫(replication) - - 寫好幾種寫種缺 - - 主/寫許主伺/寫伺 - /SELECT詢 費主/PostgreSQL寫 - Slony-I - - 主伺寫許/寫給主種 - 伺 帶失Pgcluster - 種好並以費 - - 費硬寫述種寫模 - - 4.21) 詢顯示表詢大寫 - - 常 建表表使( ' ' - )使表稱符 大寫 - 詢表使工 pgAdmin - 建表令符 - 符統 該 - * 建表符使起 - * 符使寫 - * 已符詢使符起 diff --git a/doc/FAQ_czech b/doc/FAQ_czech deleted file mode 100644 index 99120e60606..00000000000 --- a/doc/FAQ_czech +++ /dev/null @@ -1,849 +0,0 @@ - - Frequently Asked Questions - - Casto kladen dotazy (FAQ) PostgreSQL - - Posledn aktualizace: 29. rjna 2007 (aktualizovno pro PostgreSQL - 8.3) - - Soucasn sprvce: Bruce Momjian (bruce@momjian.us) - - Prelozil: Pavel Stehule (pavel.stehule@gmail.com) - - Nejaktulnejs verzi tohoto dokumentu naleznete na adrese - http://www.postgresql.org/files/documentation/faqs/FAQ.html - - Odpovedi na otzky vzan na konkrtn platformy naleznete na adrese - http://www.postgresql.org/docs/faq/. - _________________________________________________________________ - - Obecn otzky - - 1.1) Co je to PostgreSQL? Jak je sprvn vslovnost slova PostgreSQL? - 1.2) Kdo rd vvoj PostgreSQL? - 1.3) Pod jakou licenc je PostgreSQL? - 1.4) Na kterch platformch lze provozovat PostgreSQL? - 1.5) Kde mohu zskat PostgreSQL? - 1.6) Jak je posledn verze? - 1.7) Kde mohu zskat podporu? - 1.8) Jak a kam hlsit chyby? - 1.9) Kde najdu informace o znmch chybch nebo nepodporovanch - vlastnostech? - 1.10) Jak je dostupn dokumentace? - 1.11) Jak se mohu naucit SQL? - 1.12) Jak se mohu pripojit k tmu vvojru? - 1.13) Jak je na tom PostgreSQL v porovnn s jinmi databzemi? - 1.14) Je PostgreSQL pripraven na aktuln zavden letnho casu v - nekterch zemch? - - Dotazy na klientsk rozhran - - 2.1) Kter rozhran jsou pouziteln pro PostgreSQL? - 2.2) Jak nstroje lze pouzt 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 prstup z jinch stanic? - 3.3) Jak vyladit databzi na vyss vkon? - 3.4) Jak mm ladc prostredky? - 3.5) Co znamen "Sorry, too many clients", kdyz se zkousm pripojit? - 3.6) Proc je nutn dump a obnoven (load) databze pri upgradu - PostgreSQL? - 3.7) Jak hardware bych mel pouzvat? - - Provozn dotazy - - 4.1) Jak zskat pouze prvn rdek dotazu? Nhodn rdek? - 4.2) Jak zskm seznam tabulek, indexu, databz, a definovanch - uzivatelu. Mohu videt dotazy, kter pouzv psql pro zobrazen techto - informac? - 4.3) Jak zmenit datov typ sloupce? - 4.4) Jak je maximln velikost rdku, tabulky a databze? - 4.5) Kolik diskovho prostoru je potreba k ulozen dat z normlnho - textovho souboru? - 4.6) Muj dotaz je pomal a nepouzv vytvoren indexy. Proc? - 4.7) Jak zjistm, jak se vyhodnocuje muj dotaz? - 4.8) Jak pouzt case-(in)sensitive regulrn vraz? Jak pouzt index - pro case insensitive hledn? - 4.9) Jak v dotazu detekovat, ze polozka je NULL? Jak bezpecne spojit - dva retezce, pokud mohou obsahovat NULL? Lze trdit podle toho, jestli - je polozka NULL nebo ne? - 4.10) Jak jsou rozdly mezi ruznmi znakovmi typy? - 4.11.1) Jak vytvorit serial/auto-increment polozku? - 4.11.2) Jak zskat hodnotu SERIAL po vlozen rdku? - 4.11.3) Nezpusob currval() a nextval() problmy ve vce uzivatelskm - prostred? - 4.11.4) Proc nen vygenerovan cslo pouzito pri prerusen - transakce?Proc vznikaj dry v cslovn prostrednictvm sekvence nebo - typu SERIAL? - 4.12) Co to je OID? Co je to CTID? - 4.13) Co znamen chybov hlsen "ERROR: Memory exhausted in - AllocSetAlloc()"? - 4.14) Jak zjistm, kterou verzi PostgreSQL pouzvm? - 4.15) Jak vytvorit sloupec, kter bude implicitne obsahovat aktuln - cas? - 4.16) Jak provst vnejs spojen (outer join)? - 4.17) Jak provst dotaz naprc nekolika databzemi? - 4.18) Muze funkce vrtit vce rdku nebo sloupcu? - 4.19) Co je prcinou chyby "relation with OID xxxxx does not exist"? - 4.20) Jak jsou moznosti replikace databz? - 4.21) Proc v dotazu nejsou rozpoznny nzvy mch tabulek nebo funkc? - Proc jsou velk psmena v nzvech automaticky prevedena na mal - psmena? - _________________________________________________________________ - - Obecn otzky - - 1.1) Co je to PostgreSQL? Jak je sprvn vslovnost slova PostgreSQL? - - Vslovnost PostgreSQL je Post-Gres-Q-L , nebo zjednodusene Postgres . - V rade jazyku je slovo PostgreSQL obtzne vysloviteln, proto se v - hovoru casto pouzv zjednodusen forma nzvu. Pro ty, kter by si - rdi poslechli vslovnost, je k dispozici audiozznam v MP3 formtu. - - PostgreSQL je relacn databze s nektermi objektovmi rysy, kter m - moznosti tradicnch komercnch databzovch systmu s nekolika - rozsrenmi, kter lze najt v DBMS systmech prst generace. - Pouzvn PostgreSQL nen omezen a vesker zdrojov kdy jsou volne - dostupn. - - Za vvojem PostgreSQL je mezinrodn skupina nezvislch vvojru - navzjem komunikujcch prostrednictvm internetu. Tento projekt nen - rzen zdnou obchodn organizac. Pokud se chcete pridat k projektu, - prectete si vvojrsk FAQ na adrese - http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html . - - 1.2) Kdo rd vvoj PostgreSQL? - - Pokud budete hledat organizaci rdc vvoj PostgreSQL, budete - zklamni. Nic takovho neexistuje. Existuj pouze "core" a CVS skupiny - uzivatelu, ale ty existuj vce z administrtorskch duvodu nez z - organizacnch. Projekt je smerovn komunitou vvojru a uzivatelu, ke - kter se kdokoliv muze pripojit. Jedin co potrebuje, je prihlsit se - do elektronick konference. Vce ve vvojrskm FAQ. - - 1.3) Pod jakou licenc je PostgreSQL? - - PostgreSQL je predmetem nsledujcch autorskch prv: - - Dlc Copyright (c) 1996-2009, PostgreSQL Global Development Group - Dlc Copyright (c) 1994-6, Regents of the University of California - - Udeluje se oprvnen k uzit, rozmnozovn, provden prav a - rozsirovn tohoto softwaru a dokumentace k nemu, pro jakkoli cely, - bez licencnho poplatku a bez psemn licencn smlouvy, za podmnky, - ze na vsech jeho kopich je uvedeno oznmen o vse uvedench prvech, - jakoz i obsah tohoto a dvou nsledujcch odstavcu. - - THE UNIVERSITY OF CALIFORNIA ("KALIFORNSK UNIVERZITA") NEN V ZDNM - PRPADE ODPOVEDNA ZDN TRET OSOBE ZA PRMOU, NEPRMOU, ZVLSTN, - NAHODILOU NEBO VSLEDNOU SKODU, VCETNE USLHO ZISKU, ZPUSOBENOU UZITM - TOHOTO SOFTWARU A DOKUMENTACE K NEMU, A TO I V PRPADE, ZE THE - UNIVERSITY OF CALIFORNIA BYLA INFORMOVNA O MOZNOSTI VZNIKU TAKOV - SKODY. - - THE UNIVERSITY OF CALIFORNIA ZEJMNA NEPOSKYTUJE JAKKOLI ZRUKY, A TO - NEJEN ZRUKY OBCHODOVATELNOSTI A VHODNOSTI TOHOTO VROBKU KE - SPECIFICKM CELUM. NZE UVEDEN SOFTWARE JE POSKYTNUT "JAK STOJ A - LEZ" A THE UNIVERSITY OF CALIFORNIA NEN POVINNA ZAJISTIT JEHO - DRZBU, PODPORU, AKTUALIZACI, VYLEPSEN NEBO MODIFIKACI. - - Vse uveden je BSD licence, bezn licence otevrenho zdroje. Nen zde - zdn omezen ohledne uzit kdu zdroje. Jsme s tm spokojeni a nemme - v myslu na tto skutecnosti cokoli menit. - - 1.4) Na kterch platformch lze provozovat PostgreSQL? - - Strucne receno, PostgreSQL bez na vsech modernch unixovch - systmech. Seznam tech, u kterch probehlo testovn, naleznete v - instalacnch instrukcch. - - PostreSQL tak bez nativne na vsech Microsof Windows systmech - odvozench z Microsoft Windows NT jako jsou Windows 2000SP4, WindowsXP - a Windows2003. Instalacn balcek naleznete na adrese - http://pgfoundry.org/projects/pginstaller. Na starsch systmech s - jeste MS-DOS jdrem lze spustit PostgreSQL s emulacnm programem - Cygwin. - - Dle 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 zskat PostgreSQL? - - Pomoc webovho 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 plnu je uvolnovat kazdorocne jednu velkou verzi a kazdch nekolik - mescu mal verze. - - 1.7) Kde mohu zskat podporu? - - Nejcastejs forma podpory uzivatelum PostgreSQL komunitou je - prostrednictvm e-mailu. Na nasem webovm serveru naleznete odkaz na - strnky,kde se muzete prihlsit do elektronick konference. Pro - zactek jsou doporucen konference general nebo bugs. - - Dals cestou je IRC kanl #postgresql na Freenode (irc.freenode.net). - K pripojen pouzijte Unixov prkaz irc -x '#postgresql' "$USER" - irc.freenode.net nebo jakkoholiv jinho IRC klienta. V tto sti - existuje jeste spanelsk (#postgresql-es) a francouzsk - (#postgresqlfr) verze. Dals PostgreSQL kanl naleznete na EFNet. - - Seznam spolecnost poskytujc komercn podporu naleznete na adrese - http://techdocs.postgresql.org/companies.php. - - 1.8) Jak a kam hlsit chyby? - - Vyplnte formulr na adrese - http://www.postgresql.org/support/submitbug. Na nasem ftp serveru - ftp://ftp.postgresql.org/pub/ si overte, ze pouzvte aktuln verzi - PostreSQL. - - Chyby reportovan prostrednictvm chybovho formulre nebo zaslnm - mailu do PostgreSQL konference obvykle generuje nsledujc odezvu: - * Nejedn se o chybu, a proc - * Jedn se o znmou chybu, kter je jiz v seznamu kolu TODO - * Tato chyba byla opravena v aktuln verzi - * Tato chyba byla jiz opravena ve verzi, kter zatm nebyla - oficilne uvolnena - * Pozadavek na dals doplnujc informace: - + Operacn systm - + Verze PostgreSQL - + Test reprodukujc chybu - + Ladc informace - + Backtrace vstup debuggeru - * Jedn se o zatm nezjistenou chybu, pak muzete cekat - + Zplatu odstranujc chybu, kter bude vlozena do dals velk - nebo mal verze - + Informaci, ze se jedn o chybu, kterou nelze okamzite resit a - je proto pridna do TODO - - 1.9) Kde najdu informace o znmch chybch nebo nepodporovanch vlastnostech? - - PostgreSQL podporuje rozsrenou podmnozinu SQL:2003. V nasem TODO - naleznete seznam znmch chyb, chybejcch vlastnost, a plny do - budoucna. - - Odezva na pozadavek na novou vlastnost PostgreSQL je obvykle: - * Pozadavek je jiz v TODO - * Pozadovan funkce nen chten protoze - + Duplikuje jiz existujc funkci, kter respektuje SQL - standard - + Implementac funkce by se prlis zkomplikoval kd bez - relevantnho prnosu - + Funkce by mohla bt nebezpecn nebo nespolehliv - * Pozadavek je pridn do TODO - - PostgreSQL nepozv systm pro sledovn chyb, protoze jsme zjistili, - ze je efektivnejs prmo reagovat na maily a udrzovat aktuln TODO. V - praxi je snaha o co nejrychlejs resen chyb, a chyby, kter by se - mohly projevit u mnoha uzivatelu jsou opravovny velice rychle. Jedin - msto, kde lze dohledat vsechny zmeny, rozsren a opravy v PostgreSQL - je CVS log. Poznmky k verzi "Release notes" nezachycuj vsechny - zmeny, k nemz doslo. - - 1.10) Jak je dostupn dokumentace? - - PostgreSQL obsahuje vynikajc dokumentaci zahrnujc manul, - manulov strnky a testovac prklady. Podvejte se do adresre /doc. - Manul je prstupn online na http://www.postgresql.org/docs. - - K dispozici jsou zdarma dve online knihy na adresch - http://www.postgresql.org/docs/books/awbook.html a - http://www.commandprompt.com/ppbook/. Dals literaturu lze zakoupit. - Nejpopulrnejs je od Kerryho Douglase. Seznam dostupn literatury je - na http://techdocs.postgresql.org/techdocs/bookreviews.php. Jeste je - kolekce technicky orientovanch clnku tematicky spojench s - PostgreSQL na adrese http://techdocs.postgresql.org/. - - Rdkov klient psql m \d prkazy pro zobrazen informac o typech, - opertorech, funkcch, agregacnch funkc, atd. Pouzijte \? pro - zobrazen dostupnch prkazu. - - Dals dokumentaci najdete na nasem webu. - - 1.11) Jak se mohu naucit SQL? - - Podvejte se do vse 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 tutorily jsou dostupn na adresch: - * 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 tmu vvojru? - - Prostudujte si Developer's FAQ. - - 1.13) Jak je na tom PostgreSQL v porovnn s jinmi databzemi? - - Software muzeme porovnvat z nekolika ruznch pohledu: vlastnosti, - vkon, spolehlivost, podpora a cena. - - Vlastnosti - - PostgreSQL nabz vetsinu funkc funkcionality velkch komercnch DBMS - systmu jako jsou: transakce, vnoren dotazy, spouste, referencn - integrita a sofistikovan systm zamykn. Poskytujeme urcit funkce, - kter ostatn systmy bezne nepodporuj. Napr. uzivatelem definovan - typy, dedicnost, pravidla (rules), a MVCC architekturu. - - Vkon - - Vkon PostgreSQL je srovnateln s ostatnmi komercnmi nebo Open - Source databzemi. V nekterch prpadech je rychlejs, jindy - pomalejs. Ns vkon je obvykle +/-10% vuci ostatnm databzm. - - Spolehlivost - - Uvedomujeme si, ze databze mus bt stoprocentne spolehliv, jinak je - nepouziteln. Snazme se, aby kazd verze byla dobre otestovna a - obsahovala minimum chyb. Kazd verze je minimlne nekolik mescu v - beta testovacm rezimu. Do produkcnho rezimu se dostane, az kdyz - nedochz k dalsm zmenm nebo opravm. Verme, ze jsem vce nez - srovnateln s ostatnmi databzemi v tto oblasti. - - Podpora - - Na nasich internetovch konferencch se setkv velk skupina vvojru - a uzivatelu pri resen vyskytujcch se problmu. Nase internetov - konference umoznuj kontakt velk skupiny vvojru a uzivatelu. - Nemuzeme garantovat opravu chyby, ale komercn DBMSs tak vzdy - negarantuj resen problmu. Verme ale, ze dky prmmu kontaktu na - vvojre, nasi uzivatelskou komunitu, manulum, a dostupnm zdrojovm - kdum mme leps podporu nez ostatn DBMSs. Pro ty, kter preferuj - komercn "per-incident" podporu, existuje spolecnost, kter ji - nabzej (FAQ sekce 1.7.) - - Cena - - PostgreSQL lze pouzvat bezplatne (a to i pro komercn pouzit). Tak - muzete neomezene pouzvat ns kd ve svch produktech s vjimkami - specifikovanmi v nas licenci (prebrme BSD licenci). - - 1.14) Je PostgreSQL pripraven na aktuln zavden letnho casu v nekterch - zemch? - - Pocnaje verz 8.0.[4+] podporuje PostgreSQL letn cas tak pro USA. - Podpora letnho casu (daylight saving time) pro Kanadu a Zpadn - Austrlii je obsazena ve verzch 8.0.[10+] a 8.1.[6+] a vsech - nsledujcch verzch. Stars verze pouzvaly systmovou databzi - casovch zn obsahujc, krome jinho, informaci o tom, zda se pro - danou casovou znu rozlisuje mezi letnm a zimnm casem. - _________________________________________________________________ - - Dotazy na klientsk rozhran - - 2.1) Kter rozhran jsou pouziteln pro PostgreSQL? - - PostgreSQL se distribuuje pouze s rozhranm pro jazyk C a embedded C. - Vsechna dals rozhran predstavuj nezvisl projekty, kter je treba - sthnout z internetu samostatne. Osamostatnen techto projektu - umoznuje nezvislost vvojovch tmu a moznost vydvat nov verze bez - ohledu na vydn nov verze PostgreSQL. - - Nekter programovac jazyky jako je napr. PHP obsahuj rozhran pro - PostgreSQL. Rozhran pro jazyky jako je Perl, Tcl, Python a mnoho - dalsch jsou dostupn na adrese: http://gborg.postgresql.org v sekci - Drivers/Interfaces. - - 2.2) Jak nstroje lze pouzt pro PostgreSQL a web? - - Dobrm vodem do problematiky databz v prostred webovch strnek - muze bt web http://www.webreview.com. - - PHP (http://www.php.net) je vynikajcm rozhranm pro tvorbu webu. - - Pro slozitejs lohy se casto pouzv 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 grafickch nstroju podporujcch PostgreSQL a to - od komercnch nebo open source vvojru. 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 prstup z jinch stanic? - - Ve vchoz konfiguraci, PostgreSQL umoznuje pouze pripojen z - loklnho uzivatele prostrednictvm 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 ostatnch stanic. Zmena vse zmnench parametru vyzaduje - restart databzovho serveru. - - 3.3) Jak vyladit databzi na vyss vkon? - - Vkon systmu muzete ovlivnit ve trech oblastech: - - Zmeny dotazu - - * Pouzitm indexu vcetne cstecnch a funkcionlnch - * Pouzitm COPY msto opakovanch INSERTu - * Sloucenm mnoha SQL prkazu do jedn transakce snzenm rezie na - commit - * Pouzvnm CLUSTERU, pokud nactte vets pocet rdek podle indexu - * Pouzitm klauzule LIMIT v poddotazech - * Pouzitm predpripravench dotazu - * Pouzvnm ANALYZE. Tento prkaz aktualizuje statistiky, kter se - pouzvaj pri optimalizaci dotazu - * Pravideln pouzit VACUUM nebo pouzvn pg_autovacuum - * Odstranenm indexu pred rozshlmi zmenami v datech - - Konfigurace serveru - - Urcit parametry v souboru postgresql.conf maj vliv na vkon serveru. - Detaily naleznete v prrucce Administrtora v Server Run-time - Environment/Run-time Configuration. Dals komentre naleznete v - http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.ht - ml a http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html. - - Vber hardware - - Vliv hardware na vkon serveru je popsn v dokumentech - http://candle.pha.pa.us/main/writings/pgsql/hw_performance/index.html - a http://www.powerpostgresql.com/PerfList/. - - 3.4) Jak mm ladc prostredky? - - Nastavenm log_* promennch v konfiguraci serveru si vynutte logovn - dotazu a procesnch statistik, kter Vm mohou pomoci pri laden a - optimalizaci vkonu. - - 3.5) Co znamen "Sorry, too many clients", kdyz se zkousm pripojit? - - Prekrocil jste vchoz limit, kter je 100 soucasne pripojench - 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) databze pri upgradu PostgreSQL? - - Zpusob cslovn je popsn v dokumentaci na - http://www.postgresql.org/support/versioning. Instrukce k proveden - migrace na vyss verzi jsou taktz v dokumentaci na adrese - http://www.postgresql.org/docs/current/static/install-upgrading.html. - - 3.7) Jak hardware bych mel pouzvat? - - Jelikoz PC jsou vetsinou kompatibiln, lid maj tendence verit, ze - vsechna PC jsou stejne kvalitn. Coz nen pravda. Pameti ECC, SCSI a - kvalitn zkladn desky jsou mnohem spolehlivejs a vkonnejs nez - lacinejs hardware. PostgreSQL pobez na vetsine hardwaru, nicmne - pokud je pro Vs spolehlivost a vkon systmu dulezit, je dobr - venovat cas nalezen vhodn hardwarov konfigurace. Na nasich - elektronickch konferencch muzete diskutovat o vhodnch konfiguracch - a znackch. - _________________________________________________________________ - - Provozn dotazy - - 4.1) Jak zskat pouze prvn rdek dotazu? Nhodn rdek? - - Pokud potrebujete pouze nekolik rdku a pokud vte kolik, pouzijte - SELECT LIMIT. Pokud bude mozn pouzt index shodujc se s ORDER BY, - je mozn, ze se nebude provdet cel dotaz. Pokud neznte pocet - zznamu, pouzijte kurzor a prkaz FETCH. - - Pro vber nhodnho rdku pouzijte prkaz ve tvaru: -SELECT col -FROM tab -ORDER BY random() -LIMIT 1; - - 4.2) Jak zskm seznam tabulek, indexu, databz, a definovanch uzivatelu. - Mohu videt dotazy, kter pouzv psql pro zobrazen techto informac? - - V psql prkazem \dt zskte seznam tabulek. pln seznam prkazu psql - zskte prkazem \?. Alternativne si muzete prostudovat zdrojov kd - psql - soubor pgsql/src/bin/psql/describe.c, kter obsahuje SQL - prkazy, kter jsou generovny pro zskn vstupu psql "backslash" - prkazu. Tak muzete nastartovat psql s parametrem -E, kter zpusob - zobrazen vsech SQL prkazu, kter se odeslaj na server. PostgreSQL - tak podporuje SQL standard INFORMACN SCHMATA (standardn systmov - tabulky). Klasickm dotazem do systmovch tabulek zskte pozadovan - informace o strukture databze. - - Systmov tabulky PostgreSQL (mimo rmec SQL standardu) pouzvaj - prefix pg_. Pro zjisten struktury databze je muzete pouzt tak, i - kdyz preferovny jsou dotazy do informacnho schmatu. - - Seznam vsech databz zskte prkazem psql -l - - Dals inspiraci najdete v souboru pgsql/src/tutorial/syscat.source. - Obsahuje ilustracn SELECTy potrebn k zskn informac z systmovch - tabulek databze. - - 4.3) Jak zmenit datov typ sloupce? - - Ve verzch 8.0 a pozdejsch jednoduse: -ALTER TABLE ALTER COLUMN TYPE - - V starsch verzch: -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 prkaz VACUUM FULL, aby doslo k uvolnen diskovho - prostoru pouzitho v tu chvli jiz neplatnmi zznamy. - - 4.4) Jak je maximln velikost rdku, tabulky a databze? - - PostgreSQL m tato omezen: - - Maximln velikost databze: neomezena (existuj 32TB db) - Maximln velikost tabulky: 32 TB - Maximln velikost rdky: 480GB - Maximln velikost polozky 1 GB - Maximln pocet rdku v tabulce: neomezeno - Maximln pocet sloupcu v tabulce: 250-1600 podle typu - Maximln pocet indexu na tabulce: neomezeno - - Ve skutecnosti nic nen neomezeno, limitem bv vzdy dostupn diskov - pamet nebo velikost operacn pameti. Pokud mte nekterou z techto - hodnot neobvykle velkou, muze dojt ke snzen vkonu. - - Maximln velikost tabulky je 32 TB a nevyzaduje podporu velkch - souboru operacnm systmem. Velk tabulky se ukldaj do nekolika 1 GB - souboru takze limity souborovho systmu nejsou podstatn. - - Maximln velikost tabulky a maximln pocet sloupcu muzeme - zectyrnsobit nastavenm velikosti bloku na 32K. - - Indexy jsou povolen pouze na sloupcch jejichz dlka je mens nez - 2000 znaku. Pokud tuto dlku prekrocme a index potrebujeme pro - zajisten jednoznacnosti, je vhodnejs pouzt funkcionln index nad - MD5 funkc nebo fulltextov index. - - 4.5) Kolik diskovho prostoru je potreba k ulozen dat z normlnho textovho - souboru? - - PostgreSQL vyzaduje az petinsobek diskovho prostoru k ulozen dat z - textovho souboru. - - Naprklad, uvazujme soubor se 100 tisci rdky obsahujc na kazd - rdce cel cslo a textov popis. Text je v prumerne dvacet bytu - dlouh. Textov soubor bude 2.8 MB dlouh. Velikost databze - obsahujc odpovdajc data bude zhruba 5.2 MB. - 24 bytu: hlavicka rdku (priblizne) - 24 bytu: jedna celocseln polozka a jedna textov - + 4 byty: ukazatel na strnku k entici - ------------------------------------------------------ - 52 bytu na rdek - - Velikost datov strnky PostgreSQL je 8192 bytu (8KB) - 8192 bytu na strnce ----------------------- = 158 rdek na strnku - 52 bytu za rdek - -100000 rdek ------------------------ = 633 strnek (zaokrouhleno nahoru) - 158 rdek na strnce - -633 datovch strnek * 8192 bytu na kazdou strnku = 5,185,536 bytu (5.2 MB) - - Indexy nemaj tak velkou rezii, ale mohou bt tak velk, protoze - obsahuj indexovan data. - - Hodnoty NULL jsou ulozeny v bitmapch, takze zabraj jen velmi mlo - diskovho prostoru. - - 4.6) Muj dotaz je pomal a nepouzv vytvoren indexy. Proc? - - Kazd dotaz nemus nutne pouzt existujc indexy. Index se pouzije - tehdy, kdyz je tabulka vets nez urcit minimln velikost, a dotaz - vybr pouze procentulne malou cst rdku tabulky. To proto, ze - nhodn prstup k disku dan ctenm indexu muze bt pomalejs nez - linern cten tabulky nebo sekvencn cten. - - PostgreSQL rozhoduje o pouzit indexu na zklade statistiky prstupu k - tabulce. Tyto statistiky se shromazduj prkazy VACUUM ANALYZE nebo - ANALYZE. Dky statistikm m optimizer informaci o poctu rdek v - tabulce a muze lpe rozhodnout o pouzit indexu. Statistiky se uplatn - pri urcen optimlnho porad a metody spojen tabulek. Statistiky by - se meli aktualizovat opakovane, tak jak se men obsah tabulek. - - Indexy nejsou obycejne pouzity pro setrden nebo spojen tabulek. - Sekvencn zpracovn nsledovan explicitnm trdenm je obycejne - rychlejs nez pouzit indexu na velk tabulce. - - Jinak je tomu v prpade pouzit LIMIT a ORDER BY, pri kterm se - vetsinou index pouzije, jelikoz je vsledkem pouze mal cst tabulky. - - Pokud si myslte, ze optimizer mylne zvolil sekvencn prohledvn - tabulky, pouzijte prkaz SET enable_seqscan TO 'off' a zkuste zda je - prohledvn s indexem rychlejs. - - Pri vyhledvn na zklade vzoru jako je napr. opertor LIKE nebo ~ se - indexy pouzij pouze za urcitch skutecnost: - * zactek hledanho vzoru mus bt ukotven k zactku, tj. - + vzor LIKE nesm zacnat % - + ~ regulrn vraz mus zacnat ^ - * vzor nesm zacnat intervalem, napr. [a-e] - * vyhledvan, kter nen Case sensitiv jako je ILIKE nebo ~* - nepouzv indexy. Muzete ale pouzt funkcionln indexy, kter - jsou popsny v sekci 4.8 - * pri inicializaci databze (initdb) mus bt pouzito C locale nebo - vytvorte speciln text_pattern_index, kter umozn, pri - respektovn zmnench podmnek pouzit indexu operac LIKE. Pro - vyhledvn celch slov je mozn a vhodn pouzt fulltext. - - 4.7) Jak zjistm, jak se vyhodnocuje muj dotaz? - - Podvejte se do npovedy k prkazu EXPLAIN. - - 4.8) Jak pouzt case-(in)sensitive regulrn vraz? Jak pouzt index pro case - insensitive hledn? - - Vyhledvn prostrednictvm regulrnch vzoru zajistuje opertor ~, - kter je case-sensitive. Jeho case-insensitive varianta je opertor - ~*. Case-insensitive variac opertoru LIKE je opertor ILIKE. - - Case-insensitive vyhledn se res: -SELECT * -FROM tab -WHERE lower(col) = 'abc'; - - Tento dotaz nepouzije standardn index. Muste pouzt tzv. - funkcionln index: -CREATE INDEX tabindex ON tab (lower(col)); - - Pokud index vytvorme jako uniktn, tak muzeme ukldat retezce - obsahujc mal i velk psmena, ale nikoliv retezce, kter se od sebe - odlisuj jen v malch a velkch psmenech. K zajisten zpisu retezce - obsahujc pouze mal nebo pouze velk psmena 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 trdit podle toho, jestli je polozka - NULL nebo ne? - - Pokud chcete testovat hodnotu NULL pouzijte opertor IS: - SELECT * - FROM tab - WHERE col IS NULL; - - K spojen retezcu, kter mohou obsahovat hodnotu NULL, pouzvejte - funkci COALESCE(), napr.: - SELECT COALESCE(col1, '') || COALESCE(col2, '') - FROM tab - - Pokud chcete trdit podle hodnoty NULL, pouzijte vraz 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 zznamy s NULL budou na zactku setrdench dat. - - 4.10) Jak jsou rozdly mezi ruznmi znakovmi typy? - - Typ Intern nzev Poznmky - VARCHAR(n) varchar n urcuje maximln dlku - CHAR(n) bpchar retezec je do dan dlky rozsren mezerami - TEXT text bez omezen dlky - BYTEA bytea pole bytu nespecifikovan dlky - "char" char jeden znak - - Na intern nzvy muzete narazit v systmovm katalogu nebo v nekterch - chybovch hlsench. - - Ctyri prvn typy jsou tzv. varlena typy (prvn ctyri byty na disku - jsou obsahuj dlku, ostatn obsahuj vlastn data). Skutecne obsazen - prostor je tedy o neco mlo vets nez deklarovan velikost. Na druhou - stranu, dels retezce jsou komprimovny, takze obsazen prostor na - disku muze bt mens nez se cek. - - VARCHAR(n) je vhodn pro ukldn ruzne dlouhch retezcu u kterch - znme dlkov omezen, TEXT pro retezce bez omezen dlky (maximum je - jeden gigabyte). - - CHAR(n) se pouzv pro ulozen stejne dlouhch retezcu. CHAR(n) dopln - mezerami na specifikovanou dlku, VARCHAR(n) hodnoty se ukldaj tak - jak jsou. BYTEA je pro ukldn binrnch dat - non ASCII hodnot. - Vsechny zmnen typy maj podobn vkonov charakteristiky. - - 4.11.1) Jak vytvorit serial/auto-increment polozku? - - V PostgreSQL muzete pouzt datov typ SERIAL. Jeho pouzitm se - automaticky vytvor sekvence. Naprklad: -CREATE TABLE person ( - id SERIAL, - name TEXT -); - - je automaticky transformovno na: -CREATE SEQUENCE person_id_seq; -CREATE TABLE person ( - id INT4 NOT NULL DEFAULT nextval('person_id_seq'), - name TEXT -); - - Podrobnejs informace najdete v manulu v popisu prkazu - create_sequence. - - 4.11.2) Jak zskat hodnotu SERIAL po vlozen rdku? - - Nejjednodussm zpusob, jak zskat vygenerovanou hodnotu typu SERIAL, - je vyuzt klauzuli RETURNING. Pro tabulku z 4.11.1 vypad takto: -INSERT INTO person (name) VALUES ('Blaise Pascal') RETURNING id; - - Tak muzete pouzt funkci nextvall() a jej vsledek pouzt v prkazu - INSERT, nebo zavolat currval() po proveden prkazu INSERT. - - 4.11.3) Nezpusob currval() a nextval() problmy ve vce uzivatelskm - prostred? - - Ne, currval vrac vzdy hodnotu, kter byla vygenerovna pro vs. - - 4.11.4) Proc nen vygenerovan cslo pouzito pri prerusen transakce?Proc - vznikaj dry v cslovn prostrednictvm sekvence nebo typu SERIAL? - - Pot co sekvence vygeneruje nov cslo, tak se nedochz k zamcen - sekvence a necek se na spesn nebo nespesn dokoncen transakce. - Odvolnm transakce, kter si vyzdala csla sekvence se tato csla - nenvratne ztrat. - - 4.12) Co to je OID? Co je to CTID? - - V prpade, ze tabulku nezalozme s atributem WITHOUT OIDS, tak m - kazd rdek uniktn identifikacn cslo OID. Toto cslo je 4 bajtov - cel cslo, kter je jedinecn v cel instalaci. Pretece po 4 - miliardch rdku. PostgreSQL pouzv OIDs jako intern linky v - internch systmovch tabulkch. - - K zskn uniktnho csla v nesystmovch tabulkch je vhodnejs - pouzit typu SERIAL nez OID, jelikoz sekvence SERIAL se pouzv pouze - pro jednu tabulku a je tudz mne nchyln na pretecen. Pokud byste - se toho obvali, pouzijte typ SERIAL8. - - CTID se pouzv k identifikaci konkrtnho fyzickho rdku. CTID se - men pokud je rdek modifikovn nebo znovu nacten. Pouzvaj ho indexy - jako adresaci fyzickch rdku. - - 4.13) Co znamen chybov hlsen "ERROR: Memory exhausted in - AllocSetAlloc()"? - - Pravdepodobne jste vycerpal dostupnou virtuln pamet, nebo tvuj - kernel m prlis nzk limity u urcitch zdroju. Pred startem - PostgreSQL vyzkousejte: -ulimit -d 262144 -limit datasize 256m - - Mozn, ze se projde pouze jeden prkaz - zlez to na vasem shellu. - Mel by zvednout limity datovch segmentu vasich procesu na dostatecne - velkou hodnotu a snad umoznit dokoncen dotazu. Zmena limitu se bude - aplikovat pouze na aktuln proces a na vsechny nove vytvoren - procesy. Jestlize mte problm s SQL klientem, protoze vm server - vrtil prlis dat, zkuste to pred startem klienta. - - 4.14) Jak zjistm, kterou verzi PostgreSQL pouzvm? - - V psql napiste: -SELECT version(); - - 4.15) Jak vytvorit sloupec, kter bude implicitne obsahovat aktuln cas? - - Pouzijte CURRENT_TIMESTAMP: -CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); - - 4.16) Jak provst vnejs spojen (outer join)? - - PostgreSQL podporuje standardn SQL syntaxi pro vnejs spojen. Zde - jsou dva prklady: -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 - vrt vsechny nesprovan rdky t2 (ty, kter nedohled v t2). RIGHT - JOIN by pripojil vsechny nesprovan rdky z t2. FULL JOIN vrt - vsechny sprovan rdky i vsechny zbvajc rdky z obou tabulek. - Klcov slovo OUTER je voliteln. Bezn operace JOIN se tak oznacuje - jako vnitrn spojen. - - 4.17) Jak provst dotaz naprc nekolika databzemi? - - Neexistuje zdn zpusob, jak se v dotazu odkazovat na tabulky z jin - nez aktuln databze. A to protoze m systmov tabulky ulozen - nezvisle v kazd databzi a nen tak plne zrejm, jak by se dotaz - proveden naprc databzemi mel chovat. - - Jeden z doplnku dblink umoznuje dotaz nad nekolika tabulkami pomoc - funkc. Druh zpusob je simultln pripojen klienta ke vsem - relevantnm databzm a sloucen vsledku na strane klienta. - - 4.18) Muze funkce vrtit vce rdku nebo sloupcu? - - Jde to jednoduse pomoc set-returning funkce. Vce na - http://www.postgresql.org/docs/techdocs.17. - - 4.19) Co je prcinou chyby "relation with OID xxxxx does not exist"? - - Nechtenm vedlejsm efektem kesovn SQL dotazu v PL/pgSQL funkci je - problm s neplatnmi odkazy na docasn tabulky, kter byly od prvnho - spusten funkce zruseny a znovu vytvoreny pred dalsm spustenm - PL/pgSQL funkce. Resenm je pouzt prkaz EXECUTE a to proto, ze - provdec pln SQL prkazu spoustenho prkazem EXECUTE se vytvr - pokazd znovu (neukld se do cache). - - Tento problm by se nemel vyskytovat u PostgreSQL verze 8.3 a vyssch - verzch. - - 4.20) Jak jsou moznosti replikace databz? - - Replikaci databze umoznuje nekolik technoligi. Kazd m urcit - vhody a nevhody. - - Master/Slave replikaci podporuje jeden hlavn server, kter prijm - pozadavky na zpis a cten, a nekolik podrzench serveru, kter - umoznuj pouze cten (SELECT). Nejrozsrenejsm volne dostupnm - resenm tohoto typu je Slony-I. - - Replikace typu Multi-master podporuje existenci nekolika serveru s - povolenm zpisem na vce replikovanch serverech. Toto resen zvysuje - ztez serveru, protoze je nutn synchronizace serveru. - Nejrozsrenejsm volne dostupnm resenm je PGCluster. - - Jeste existuje nekolik komercnch a hardware resen replikac - podporujcch ruzn modely replikace. - - 4.21) Proc v dotazu nejsou rozpoznny nzvy mch tabulek nebo funkc? Proc - jsou velk psmena v nzvech automaticky prevedena na mal psmena? - - Nejcastejsm duvodem nerozpoznn nzvu objektu bylo pouzit vlozen - nzvu sloupce nebo tabulky mezi uvozovky pri zakldn tabulky. Pokud - se nzev zapse mezi uvozovky, pak je case sensitive, a v dusledku - toho je nutn nzvy techto sloupcu nebo tabulek v SQL prkazech tak - vkldat mezi uvozovky (pokud obsahuj velk psmena). Nekter - programy, jako je naprklad pgAdmin, automaticky pouzvaj uvozovky. - Takze pokud chcete, aby systm identifikoval identifiktor, muste: - * nepouzvat uvozovky v prkazu CREATE TABLE - * v identifiktoru pouzt pouze mal psmena - * v dotazech vkldat identifiktory do uvozovek diff --git a/doc/FAQ_farsi b/doc/FAQ_farsi deleted file mode 100644 index 95b28bb9b65..00000000000 --- a/doc/FAQ_farsi +++ /dev/null @@ -1,1256 +0,0 @@ -PostgreSQL FAQسوالاتي كه اغلب در مورد PostgreSQL‌ -پرسيده مي شوند -تاريخ آخرين Ø§ØµÙ„Ø§Ø Ø§ÙŠÙ† ÙØ§ÙŠÙ„: 28 شهریور 1383 هجری -شمسی -نگهدارنده اصلي ÙØ§ÙŠÙ„ (زبان انگليسي)در ØØ§Ù„ -ØØ§Ø¶Ø± : Bruce Momjian pgman@candle.pha.pa.us -نگهدارنده ÙØ§ÙŠÙ„ به زبان ÙØ§Ø±Ø³ÙŠ: m.taghizadeh@imenafzar.net - Ù…ØÙ…ود تقي‌زاده مهرجردی - -آخرين نسخه اين ÙØ§ÙŠÙ„ را مي‌توانيد از اين -آدرس بگيريد http://www.PostgreSQL.org/docs/faqs/FAQ.html -سوالاتي كه در مورد يك سکوی(Ù¾Ù„ØªÙØ±Ù…) خاص است در -اين آدرس جواب داده شده اند -http://www.PostgreSQL.org/docs/index.html - - - -سوالات عمومي -1.1) PostgreSQL چيست Ùˆ چگونه بايد آن را ØªÙ„ÙØ¸ كرد؟ -1.2) قانون كپي رايت‌ (ØÙ‚وق معنوي) در مورد -PostgreSQL به Ú†Ù‡ صورت است؟ -1.3) PostgreSQL‌ روي Ú†Ù‡ نوع يونيكسهايي اجرا -مي‌شود؟ -1.4) روي Ú†Ù‡ Ù…ØÙŠØ·Ù‡Ø§ÙŠ ØºÙŠØ± يونيكسي مي‌توان آن را -اجرا كرد؟ -1.5) PostgreSQL را از كجا مي‌توانم بگيرم؟ -1.6) از كجا خدمات پشتيباني بگيرم؟ -1.7) آخرين نسخه اعلام شده چيست؟ -1.8) Ú†Ù‡ مستندات Ùˆ راهنمائيهايي وجود دارند؟ -1.9) چگونه مي‌توانم ازاشكالات شناخته شده Ùˆ يا -امكاناتي كه در اين پايگاه داده وجود ندارد -مطلع شوم؟ -1.10) چگونه مي‌توانم زبان SQL را ياد بگيرم؟ -1.11) آيا PostgreSQL مشكل Y2K‌ دارد يا خير؟ -1.12) چگونه مي‌توانم به تيم برنامه نويس PostgreSQL -ملØÙ‚ شوم؟ -1.13) چگونه مي‌توانم يك اشكال را به گروه -برنامه نويس اعلام كنم؟ -1.14) وضعيت PostgreSQL‌ در مقايسه با ساير DBMSها به -Ú†Ù‡ صورت است؟ -1.15) من چگونه مي‌توانم از نظر مالي به PostgreSQL -كمك كنم؟ - -سوالات مربوط به Ø§Ø³ØªÙØ§Ø¯Ù‡ از پايگاه داده -2.1) آيا هيچ درايور ODBC‌ براي PostgreSQL وجود دارد؟ -2.2) Ú†Ù‡ ابزارهايي براي Ø§Ø³ØªÙØ§Ø¯Ù‡ از PostgreSQL‌ با -ØµÙØØ§Øª وب وجود دارد؟ -2.3) آيا PostgreSQL‌ يك واسط كاربري گراÙيكي دارد؟ -2.4) با Ú†Ù‡ زبانهاي برنامه‌نويسي مي‌توان با -PostgreSQL‌ ارتباط برقرار كرد؟ - -سوالات مربوط به راهبري -3.1) چگونه مي‌توانم PostgreSQL‌ را در شاخه‌اي غير -از /usr/local/pgsql/ نصب كنم؟ -3.2) چرا موقعي كه من برنامه postmaster‌ را اجرا مي -كنم پيام Bad system call‌ Ùˆ يا core dump ‌مي‌گيرم؟ -3.3) چرا موقعي كه من سعي مي‌كنم برنامه postmaster‌ -را اجرا كنم خطاي IpcMemoryCreate مي‌گيرم؟ -3.4) چرا موقعي كه من سعي مي‌كنم برنامه postmaster‌ -را اجرا كنم خطاي IpcSemaphoreCreate مي‌گيرم؟ -3.5) چگونه مي‌توانم اتصالات ساير ماشينها را -كنترل كنم؟ -3.6) براي كارايي بالاتر Ùˆ بهتر پايگاه داده من -Ú†Ù‡ تنظيماتي را بايد انجام دهم؟ -3.7) Ú†Ù‡ امكاناتي براي پيدا كردن اشكال‌ وجود -دارد؟ -3.8) چرا موقعي كه من مي‌خواهم به پايگاه داده -وصل شوم پيام "Sorry, too many clients" ‌مي‌گيرم؟ -3.9) در شاخه pgsql_tmp Ú†Ù‡ چيزي قرار دارد؟ -3.10) چرا براي به روز كردن نسخه پايگاه داده من -بايد كل داده ها را dump‌ Ùˆ مجدداً restore كنم؟ -3.11) از Ú†Ù‡ سخت Ø§ÙØ²Ø§Ø±ÙŠ Ø¨Ø§ÙŠØ¯ Ø§Ø³ØªÙØ§Ø¯Ù‡ كنم؟ - -سوالات عملياتي -4.1) ØªÙØ§ÙˆØª بين binary cursors Ùˆ Normal cursors چيست؟ -4.2) من چگونه مي‌توانم Ùقط روي چند ردي٠اول يا -يك ردي٠تصادÙÙŠ درخواست SELECT‌ بزنم؟ -4.3) من چگونه مي‌توانم ليستي از جداول يا ساير -چيزهايي كه در psql‌ وجود دارد را ببينم؟ -4.4) چگونه يك ستون جدول را ØØ°Ù مي‌كنيد؟ چگونه -نوع داده آن را عوض كنيم؟ -4.5) ØØ¯Ø§ÙƒØ«Ø± اندازه يك Ø±Ø¯ÙŠÙØŒâ€Œ جدول Ùˆ خود -پايگاه داده چقدر است؟ -4.6) چقدر ÙØ¶Ø§ÙŠ Ø¯ÙŠØ³Ùƒ سخت براي ذخيره كردن -داده‌‌هاي يك ÙØ§ÙŠÙ„ متني مورد نياز است؟ -4.7) چگونه مي‌توانم بÙهمم كه Ú†Ù‡ كاربران،‌ -پايگاه داده،‌ نمايه Ùˆ جداولي در سيستم تعري٠-شده است؟ -4.8) چرا درخواستهاي من كند اجرا مي‌شوند يا -چرا از نمايه ها Ø§Ø³ØªÙØ§Ø¯Ù‡ نمي‌كنند؟ -4.9) چگونه مي‌توانم Ù†ØÙˆÙ‡ بررسي درخواست را -توسط بهينه‌ساز درخواستها مشاهده كنم؟ -4.10) نمايه R-tree‌ چيست؟ -4.11) بهينه ساز تكويني درخواست چيست؟ (Genetic Query -Optimizer) -4.12) چگونه از عبارات منظم براي جستجو Ø§Ø³ØªÙØ§Ø¯Ù‡ -كنم؟ چگونه جستجويي انجام دهم كه ØØ³Ø§Ø³ به متن -نباشد؟ چگونه براي يك جستجوي غير ØØ³Ø§Ø³ به متن -از نمايه Ø§Ø³ØªÙØ§Ø¯Ù‡ كنم؟ -4.13) چگونه مي‌توانم در يك درخواست تشخيص دهم -كه يك Ùيلد NULL‌ است؟ -4.14) ØªÙØ§ÙˆØª بين گونه‌هاي مختل٠character چيست؟ -4.15.1) چگونه مي‌توانم يك Ùيلد سريال يا -Ø§ÙØ²Ø§ÙŠØ´ÙŠ Ø§ÙŠØ¬Ø§Ø¯ كنم؟ -4.15.2) چگونه مي‌توانم مقدار يك درج سريالي را -بدانم؟ -4.15.3) آیا توابع ()nextval Ùˆ ()currval منجر به ایجاد -شرایط race برای سایر کاربران Ù…ÛŒ شوند؟ -4.15.4) چرا اعداد سریالی مربوط به تراکنشهای abort -شده مجدداً Ø§Ø³ØªÙØ§Ø¯Ù‡ نمی شود؟ چرا بین اعداد -سریالی یک ÙØ§ØµÙ„Ù‡ خالی ایجاد Ù…ÛŒ شود؟ -4.16) OID Ùˆ TID Ú†Ù‡ هستند؟ -4.17) معني بعضي از ترمها Ùˆ كلماتي كه در PostgreSQL‌ -Ø§Ø³ØªÙØ§Ø¯Ù‡ مي‌شود چيست؟ -4.18) چرا من خطاي "ERROR: Memory exhausted in AllocSetAlloc" -مي‌گيرم؟ -4.19) از كجا تشخيص دهم كه ويرايش يا نسخه -PostgreSQLيي كه من Ø§Ø³ØªÙØ§Ø¯Ù‡ مي‌كنم چيست؟ -4.20) چرا در ØÛŒÙ† اجرای عملیات روی large-objectها -خطای "invalid large obj descriptor"به وجود Ù…ÛŒ آید؟ -4.21) چگونه يك ستون ايجاد كنم كه مقدار زمان -جاري را به عنوان مقدار Ù¾ÙŠØ´â€ŒÙØ±Ø¶ داشته باشد؟ -4.22) چرا زير درخواستهايي كه از IN Ø§Ø³ØªÙØ§Ø¯Ù‡ -مي‌كنند كند هستند؟ -4.23) چگونه مي‌توانم يك Ø§Ù„ØØ§Ù‚ خارجي (outer join) -انجام دهم؟ -4.24) چگونه مي‌توان درخواستهايي از چند پايگاه -داده توليد كرد؟ -4.25) چگونه خروجي يك تابع مي‌تواند چند ردي٠-يا ستون باشد؟ -4.26) در توابع PL/PgSQL چرا نمي‌توان با اطمينان -جداول موقت را ايجاد يا ØØ°Ù كرد؟ -4.27) Ú†Ù‡ گزينه‌هايي براي تكرار (replication) وجود -دارد؟ -4.28) Ú†Ù‡ گزينه‌هايي براي رمزنگاري وجود دارد؟ - -توسعه PostgreSQL -5.1) من يك تابع نوشته‌ام. چگونه آن را در psql -اجرا كنم؟ چرا با اجراي آن core dump مي‌گيرم؟ -5.2) چگونه مي‌توانم در توليد نوع‌ها Ùˆ توابع -جديد Ùˆ جالب براي PostgreSQL‌ همكاري Ùˆ مشاركت -داشته باشم. -5.3) چگونه مي‌توانم يك تابع به زبان C بنويسم -كه خروجي آن يك ‌tuple (چند تايي) باشد؟ -5.4) من يك ÙØ§ÙŠÙ„ منبع را عوض كرده ام چرا در -عمليات كامپيل مجدد آن تغيير ديده نمي‌شود؟ - - - - -سوالات عمومي -1.1) PostgreSQL چيست Ùˆ چگونه آن را بايد ØªÙ„ÙØ¸ كرد؟ -PostgreSQL به صورت Post-Gres-Q-L‌ ØªÙ„ÙØ¸ مي‌شود. يك ÙØ§ÙŠÙ„ -صوتي در آدرس http://www.postfresql.org/postgresql.mp3‌ براي -كساني كه مايلند ØªÙ„ÙØ¸ صØÙŠØ را بشنوند وجود -دارد. -PostgreSQL از روي سيستم مديريت پايگاه داده POSTGRES -توسعه داده شده است (هنوز هم بعضي مواقع براي -سادگي به آن Postgres Ú¯ÙØªÙ‡ مي‌شود) كه يك نمونه -تØÙ‚يقاتي از پايگاه داده‌هاي نسل بعد است. -PostgreSQL همان الگوي داده قوي Ùˆ انواع داده را -ØÙظ كرده است ولي زبان PostQuel را با يك -زيرمجموعه Ù¾ÙŠØ´Ø±ÙØªÙ‡ از SQL جايگزين كرده است. -PostgreSQL متن باز بوده Ùˆ متن كامل آن در دسترس -است. -PostgreSQL توسط يك تيم برنامه‌نويس كه همگي در -گروه پست الكترونيك برنامه‌نويسان PostgreSQL -عضو هستند، انجام مي‌شود. هماهنگ كننده اصلي -در ØØ§Ù„ ØØ§Ø¶Ø± Marc G. Fournier‌ به آدرس scrappy@PostgreSQL.org -مي‌باشد. (براي ديدن Ù†ØÙˆÙ‡ ملØÙ‚ شدن به اين تيم -قسمت 1.6 را ببينيد). اين تيم در ØØ§Ø¶Ø± مسئوليت -تمام مسائل مربوط به برنامه‌نويسي PostgreSQL را -بر عهده دارد. اين يك پروژه گروهي است Ùˆ ØªØØª -كنترل هيچ شركتي نيست. براي اطلاعات بيشتر در -مورد اين تيم به آدرس -http://www.PostgreSQL.org/docs/faqs/FAQ_DEV.html مراجعه كنيد. -اولين نسخه PostgreSQL‌ توسط Andrew Yu and Jolly Chen به -وجود آمد. Ø§ÙØ±Ø§Ø¯ بسياري در توسعه Ùˆ Ø±ÙØ¹ اشكال Ùˆ -انتقال آن شركت كرده‌اند. متن اصلي Postgres كه -PostgreSQL از روي آن نوشته شده است، توسط تعداد -زيادي دانشجوي كارشناسي ارشدو دانشجوي -كارشناسي Ùˆ تيم برنامه‌نويسي كه ØªØØª نظر -Ù¾Ø±ÙˆÙØ³ÙˆØ± Michael Stonebrake در دانشگاه -Ø¨Ø±ÙƒÙ„ÙŠØŒâ€ŒÙƒØ§Ù„ÙŠÙØ±Ù†ÙŠØ§ كار مي‌كرده‌اند نوشته -شده است. -نام اصلي نرم Ø§ÙØ²Ø§Ø± در دانشگاه بركلي Postgres‌ -بود. در سال 1995 بعد از اضاÙÙ‡ شدن SQL نام آن به -Postgres95 تغيير داده شد. در سال 1996 نام آن به -PostgreSQL تغيير داده شد. -1.2) قوانين كپي رايت در مورد PostgreSQL به Ú†Ù‡ صورت -است؟ -PostgreSQL ØªØØª قانون كپي رايت زير قرار دارد: -PostgreSQL Data Base Management System -Portions copyright (c) 1996-2004, PostgreSQL Global Development Group Portions -Copyright (c) 1994-6 Regents of the University of California -Permission to use, copy, modify, and distribute this software and its -documentation for any purpose, without fee, and without a written agreement is -hereby granted, provided that the above copyright notice and this paragraph and -the following two paragraphs appear in all copies. -IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST -PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF -THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A -PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND -THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, -UPDATES, ENHANCEMENTS, OR MODIFICATIONS. -قانون بالا ليسانس BSD كه يك ليسانس كلاسيك -براي متن‌هاي باز است مي‌باشد. هيچ Ù…ØØ¯ÙˆØ¯ÙŠØªÙŠ -در مورد Ù†ØÙˆÙ‡ Ø§Ø³ØªÙØ§Ø¯Ù‡ از متن در آن ديده -نمي‌شود. ما آن را دوست داريم Ùˆ هيچ قصدي براي -تغيير آن نداريم. -1.3) PostgreSQL‌ روي Ú†Ù‡ نوع يونيكسهايي اجرا -مي‌شود؟ -در ØØ§Ù„ت كلي PostgreSQL روي هر Ù¾Ù„ØªÙØ±Ù… (سكوي) سازگار -با يونيكس اجرا مي‌شود. ليست Ù¾Ù„ØªÙØ±Ù…هايي كه -تاكنون PostgreSQL‌ روي آنها نصب Ùˆ تست شده است -درقسمت دستورالعملهاي نصب آمده است. -1.4) روي Ú†Ù‡ Ù…ØÙŠØ·Ù‡Ø§ÙŠ ØºÙŠØ± يونيكسي مي‌توان آن را -اجرا كرد؟ -Client -مي‌توان psql, كتابخانه libpq Ùˆ ساير واسطها Ùˆ -برنامه‌هاي كاربردي را طوري كامپيل كرد كه -روي Ù…ØÙŠØ·Ù‡Ø§ÙŠ ÙˆÙŠÙ†Ø¯ÙˆØ² نيز اجرا شوند. در اين -ØØ§Ù„ت Client روي ويندوز اجرا مي‌شود Ùˆ از طربق -شبكه Ùˆ پروتكل TCP/IP با يك سرور كه روي يك Ù¾Ù„ØªÙØ±Ù… -لينوكس در ØØ§Ù„ اجراست ارتباط برقرار -مي‌كند.يك ÙØ§ÙŠÙ„ win32.mak همراه با كدهاي PostgreSQL -وجود دارد كه براي كامپيل كردن كتابخانه libpq Ùˆ -برنامه psql مي‌باشد. P‌ostgreSQL‌ همچنين امكان -ارتباط به صورت ODBC‌ را نيز دارد. -Server -با Ø§Ø³ØªÙØ§Ø¯Ù‡ از Cygwin‌ Ùˆ كتابخانه Cygnus مي‌توان -پايگاه داده را روي ويندوز NT Ùˆ يا Win2K اجرا -كرد.براي ديدن اطلاعات بيشتر ÙØ§ÙŠÙ„ pgsql/doc/FAQ_MSWIN -‌را كه بهمراه توزبع‌هاي PostgreSQL آمده است -ببينيد Ùˆ يا اينكه به اين ØµÙØÙ‡ -http://www.PostgreSQL.org/docs/faqs/text/FAQ_MSWIN مراجعه كنيد. -در ØØ§Ù„ ØØ§Ø¶Ø± يك عمليات انتقال PostgreSQL به روي -سكوهاي Win NT/2000/XP در جريان است. براي ديدن وضعيت -اين پروژه به سايت‌هاي -http://momjian.postgresql.org/main/writings/pgsql/win32.htm Ùˆ -http://techdocs.postgresql.org/guides/Windows مراجعه كنيد. -همچنين يك عمليات انتقال بر روي Novell Netware 6 نيز -در ØØ§Ù„ انجام است كه در سايت http://forge.novell.com -مي‌توانيد اطلاعات بيشتر را ببينيد. -1.5) PostgreSQL را از كجا مي‌توانم بگيرم؟ -PostgreSQL‌ را از سايت اصلي آن ftp://ftp.PostgreSQL.org/pub -مي‌توانيد بگيريد. در ØµÙØÙ‡ اصلي سايت ليست -ساير آدرسهايي كه مي‌توانيد PostgreSQL‌ را از -آنها بگيريد آمده است. -1.6) از كجا خدمات پشتيباني بگيرم؟ -گروه پستي اصلي pgsql-general@PostgreSQL.org مي‌باشد. اين -گروه براي Ø¨ØØ« در مورد موضوعات مختل٠در زمينه -PostgreSQL است. براي عضو شدن در اين گروه پستي يك -نامه الكترونيكي به آدرس گروه با Ù…ØØªÙˆÙŠØ§ØªÛŒ كه -در ادامه آمده است ارسال كنيد. در قسمت Subject -چيزي ننويسيد. - subscribe - end -آدرس گروه: pgsql-general-request@PostgreSQL.org -همچنين يك گروه پستي هم به صورت ارسال چكيده -پيامها وجود دارد. براي عضو شدن در اين گروه يك -نامه با Ù…ØØªÙˆÙŠØ§Øª زير به این آدرس ارسال كنيد. -pgsql-general-digest-request@PostgreSQL.org - subscribe - end -در اين گروه هر موقع ØØ¬Ù… نامه‌ها به 30 -كيلوبايت رسيد براي تمام اعضاء ارسال مي‌شود. -گروه پستي بررسي Ø§ÙØ´ÙƒØ§Ù„ات هم وجود دارد. براي -عضو شدن در اين گروه يك نامه با Ù…ØØªÙˆÙŠØ§Øª زير به -pgsql-bugs-request@PostgreSQL.org ارسال كنيد. - subscribe - end -گروه پستي مخصوص توسعه دهندگان -(برنامه‌نويسان) نيز وجوددارد. براي عضويت در -اين گروه يك نامه به آدرس زير با Ù…ØØªÙˆÙŠØ§Øª مشخص -شده ارسال كنيد. pgsql-hackers-request@PostgreSQL.org - subscribe - end -گروههاي پستي ديگري نيز در زمينه PostgreSQL‌ وجود -دارد كه مي‌توانيد در سايت http://www.postgresql.org -ببينيد. -همچنين يك كانال IRC روي Freenode Ùˆ EFNet بنام PostgreSQL# -وجود دارد. شما مي‌توانيد از ÙØ±Ù…ان يونيكسي irc --c '#PostgreSQL' "$USER" irc.phoenix.net. يا irc -c '#PostgreSQL' "$USER" -irc.freenode.net Ø§Ø³ØªÙØ§Ø¯Ù‡ كنيد. -ليست شركتهايي كه از طريق آنها مي‌توانيد -خدمات پشتيباني تجاري در زمينه PostgreSQL Ø¯Ø±ÙŠØ§ÙØª -كنيد در اين آدرس http://techdocs.postgresql.org/companies.php -موجود است. -1.7) آخرين نسخه اعلام شده چيست؟ -آخرين نسخه PostgreSQL‌ كه وجود دارد 7.4.3 است. -هد٠ما آن است كه هر 6 ماه تا 8 ماه يك نسخه جديد -ارائه شود. -1.8) Ú†Ù‡ مستندات Ùˆ راهنمائيهايي وجود دارند؟ -چندين كتابچه Ùˆ ØµÙØØ§Øª راهنما Ùˆ مثالهاي كوچك -همراه با متن اصلي PostgreSQL‌ در شاخه doc وجود -دارد. براي ديدن ØµÙØØ§Øª راهنما مي‌توانيد به -سايت http://www.PostgreSQL.org/docs نيز مراجعه نماييد. -دو كتاب در زمينه PostgreSQL‌ در آدرس‌هاي -http://www.PostgreSQL.org/docs/awbook.htm Ùˆ http://www.commandprompt.com/ppbook -وجود دارد. ليستي از كتابهايي كه قابل خريد -است در آدرس http://techdocs.PostgreSQL.org/techdocs/bookreviews.php -وجود دارد. همچنين ليستي از مقالات Ùني در -مورد PostgreSQL در آدرس http://techdocs.PostgreSQL.org وجود -دارد. -برنامه psql يك دستور d\ دارد كه اطلاعاتي در -مورد انواع داده‌هاي قابل تعري٠و عملگر‌ها -Ùˆ توابع Ùˆ ... به ما نشان مي‌دهد. در سايت اصلي -ما اطلاعات بيشتري را مي‌توانيد پيدا كنيد. -1.9) چگونه مي‌توانم ازاشكالات شناخته شده Ùˆ يا -امكاناتي كه در اين پايگاه داده وجود ندارد -مطلع شوم؟ -PostgreSQL يك زير مجموعه Ù¾ÙŠØ´Ø±ÙØªÙ‡ از SQL-92 را -پشتيباني مي‌كند. در ليست TODO Ø§ÙØ´ÙƒØ§Ù„ات -شناخته شده يا امكاناتي كه وجود ندارد Ùˆ يا -برنامه‌‌هاي آينده آمده است. -1.10) چگونه مي‌توانم زبان SQL را ياد بگيرم؟ -كتاب PostgreSQL در آدرس SQL http://www.PostgreSQL.org/docs/awbook.html -‌را آموزش مي‌دهد. همچنين يك كتاب در آدرس -http://www.commandprompt.com/ppbook وجود دارد. يك راهنماي -خيلي خوب هم در سايت‌هاي -http://www.intermedia.net/support/sql/sqltut.shtm Ùˆ -http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM Ùˆ -http://sqlcourse.com در مورد SQL وجود دارد. -كتاب ديگري كه مي‌توان براي يادگيري SQL از آن -Ø§Ø³ØªÙØ§Ø¯Ù‡ كرد كتاب "SQL را در 21 روز ياد بگيريد،‌ -ويرايش دوم" در سايت -http://members.tripod.com/er4ebus/sql/index.htm مي‌باشد. -تعداد زيادي از كاربران كتاب The Practical SQL را -ØªØ±Ø¬ÙŠØ Ù…ÙŠâ€ŒØ¯Ù‡Ù†Ø¯. كتاب ديگر The Complete Refrence SQL -انتشارات McGraw-Hill مي‌باشد. -1.11) آيا PostgreSQL مشكل Y2K‌ دارد يا خير؟ -خير،‌PostgreSQL‌ با تاريخ‌هاي قبل Ùˆ بعد از 2000 -مشكلي ندارد. -1.12) چگونه مي‌توانم به تيم برنامه نويس PostgreSQL -ملØÙ‚ شوم؟ -ابتدا،‌آخرين سورس را دونلود كرده Ùˆ مستندات -مربوط به برنامه‌نويسي PostgreSQL را در سايت -مطالعه كنيد. سپس به گروههاي پستي ‌ pgsql-patches Ùˆ -pgsql-hackers عضو شويد. در مرØÙ„Ù‡ آخر وصله‌هاي با -كيÙيت بالا را به pgsql-patches ارسال كنيد. -تعداد زيادي از برنامه‌نويسان وجود دارند كه -امتياز انجام تغييرات در cvs‌ را دارند. هر -كدام از آنها تعداد زيادي وصله‌‌ با كيÙيت -بالا به گروه ارسال كرده‌اند كه اعتماد -گردانندگان PostgreSQL را به دست آورده‌اند. -1.13) چگونه مي‌توانم يك Ø§ÙØ´ÙƒØ§Ù„ را به گروه -برنامه نويس اعلام كنم؟ -Ù„Ø·ÙØ§Ù‹ ØµÙØÙ‡ مربوط به Ø§ÙØ´ÙƒØ§Ù„ات PostgreSQL را در -سايت http://www.PostgreSQL.org/bugs/bugs.php مشاهده‌ كنيد. در -اين سايت Ù†ØÙˆÙ‡ گزارش Ùˆ ارسال يك اشكال ØªÙˆØ¶ÙŠØ -داده شده است. - همچنين براي ديدن نسخه‌هاي جديدتر PostgreSQL Ùˆ -يا وجود يك وصله جديد از سايت ftp://ftp.PostgreSQL.org/pub -بازديد كنيد. -1.14) وضعيت PostgreSQL‌ در مقايسه با ساير DBMSها به -Ú†Ù‡ صورت است؟ -راههاي مختلÙÙŠ براي اندازه‌گيري Ùˆ مقايسه -Ù†Ø±Ù…â€ŒØ§ÙØ²Ø§Ø±Ù‡Ø§ وجود دارد كه عبارتند از -امكانات، كارايي، قابليت اعتماد، پشتيباني Ùˆ -قيمت - امكانات - PostgreSQL بيشتر امكانات موجود در سيستم‌هاي - پايگاه داده تجاري بزرگ نظير transactions, subselets, - triggers, views, foreign key referential integrity Ùˆ sophisticated - locking‌ را دارد. در PostgreSQL‌‌ امكاناتي وجود - دارد كه پايگاههاي داده ديگر آن را ندارند - نظير user-defined types‌و Inheritance‌و rules‌و multi-version - concurrency control - - كارايي - كارايي PostgreSQL در ØØ¯ بقيه سيستم‌هاي - تجاري Ùˆ متن باز است. در بعضي موارد سريعتر Ùˆ - در بعضي موارد از آنها كندتر است. در مقايسه - با MySQL براي كاربران بيشتر Ùˆ درخواست‌هاي - پيچيده Ùˆ بار زياد خواندن/نوشتن سريعتر است. - در درخواست‌هاي ساده SELECT‌ از MySQL كندتر است. - البته MySQL خيلي از امكانات PostgreSQL كه در بالا - به آن اشاره شد را ندارد. هد٠اصلي ما امكانات - Ùˆ قابليت اعتماد بالاست در ضمن آنكه تلاش - مي‌كنيم تا كارايي آن نيز بهبود يابد. در - آدرس http://openacs.org/philosophy/why-not-mysql.html يك مقايسه - جالب بين MySQL Ùˆ PostgreSQL وجود دارد. از طر٠ديگر - MySQL‌ يك شركت است كه Ù…ØØµÙˆÙ„ خود را به صورت متن - باز ارائه مي‌كند ولي براي Ù†Ø±Ù…â€ŒØ§ÙØ²Ø§Ø± غير - متن باز خود Ø§ØØªÙŠØ§Ø¬ به ليسانس تجاري دارد بر - خلا٠PostgreSQL كه يك گروه كاملاً متن باز هستند. - - قابليت اطمينان - ما Ùكر مي‌كنيم كه يك سيستم پايگاه - داده‌اي كه مطمئن نباشد ارزشي ندارد. ما - تمام تلاشمان را براي ارائه كدهاي پايداري - كه به خوبي تست شده باشند Ùˆ كمترين Ø§ÙØ´ÙƒØ§Ù„ات - را داشته باشند مي‌كنيم. هر نسخه جديدي كه - ارائه مي‌شود ØØ¯Ø§Ù‚Ù„ يك ماه را در مرØÙ„Ù‡ تست - بتا مي‌گذراند. ما بر اين باور هستيم كه - قابليت اطمينان PostgreSQL‌ در مقايسه با ساير - سيستم‌هاي پايگاه داده قابل توجه است Ùˆ - نسخه‌هايي كه تاكنون ارائه شده است نشان - مي‌دهد كه ما توانايي ارائه يك سيستم قوي Ùˆ - Ù…ØÙƒÙ… Ùˆ مطمئن را كه آماده بهره‌برداري است - داريم. - پشتيباني - گروههاي پستي ما امكان ارتباط Ùˆ تماس به - گروه بزرگي از برنامه نويسان Ùˆ كاربران را - مي‌دهد كه مي‌توانند در ØÙ„ مشكلات به - ديگران كمك كنند. دسترسي مستقيم به - برنامه‌نويسان Ùˆ گروههاي كاربران Ùˆ - راهنماها Ùˆ كداصلي باعث مي‌شود كه - پشتيباني PostgreSQL نسبت به ساير پايگاههاي - داده به Ù†ØÙˆ بهتري انجام شود. همچنين امكان - ارائه خدمات پشتيباني به صورت تجاري نيز - وجود دارد. براي ديدن اطلاعات بيشتر به FAQ - section 1.6 مراجعه كنيد. - قيمت - هم براي Ø§Ø³ØªÙØ§Ø¯Ù‡ تجاري Ùˆ هم غير تجاري هيچ - هزينه‌اي نبايد پرداخت شود. هيچ Ù…ØØ¯ÙˆØ¯ÙŠØªÙŠ - براي انجام تغييرات در PostgreSQL توسط Ø§Ø³ØªÙØ§Ø¯Ù‡ - كنندگان وجود ندارد به جز مواردي كه در - ليسانس BSD به آن اشاره شده است. -1.15) من چگونه مي‌توانم از نظر مالي به PostgreSQL -كمك كنم؟ -PostgreSQL داراي يك ساختار تشكيلاتي درجه اول است -كه آن را مديون Marc Fournier‌ است كه اين ساختار را -ايجاد كرده است. -كيÙيت يك ساختار براي يك پروژه متن باز بسيار -اهميت دارد. يك ساختار خوب مي‌تواند مانع از -ØÙˆØ§Ø¯Ø«ÙŠ Ø´ÙˆØ¯ كه در ØØ±ÙƒØª روبه‌جلوي پروژه خللي -وارد مي‌كنند. -البته اين ساختار تشكيلاتي ارزان نيست. -هزينه‌هاي ثابت ماهانه Ùˆ روزمره براي -نگهداري Ùˆ ØÙظ اين ساختار مورد نياز است. اگر -شما يا شركت شما مايل است كه از نظر مالي به -اين ØØ±ÙƒØª كمك كند Ù„Ø·ÙØ§Ù‹ به سايت -http://store.pgsql.com/shopping مراجعه كرده Ùˆ كمك خود را -اهدا كنيد. -هر چند در ØµÙØÙ‡ اصلي عبارت PostgreSQL,Inc‌ ذكر شده -است ولي مشاركت عمدتاً براي پشتيباني از -پروژه PostgreSQL‌ مي باشد Ùˆ نه براي يك شركت مشخص. -اگر ØªØ±Ø¬ÙŠØ Ù…ÙŠâ€ŒØ¯Ù‡ÙŠØ¯ مي‌توانيد يك Ú†Ùƒ به آدرس -مشخص شده ارسال كنيد. -اگر يك Ø§Ø³ØªÙØ§Ø¯Ù‡ موÙÙ‚ از PostgreSQL سراغ داريد -Ù„Ø·ÙØ§Ù‹ آن را به سايت http://advocacy.postgresql.org گزارش -دهيد. - - - -سوالات مربوط به Ø§Ø³ØªÙØ§Ø¯Ù‡ از پايگاه داده -2.1) آيا هيچ درايور ODBC‌ براي PostgreSQL وجود دارد؟ -دو درايور ODBC بنامهاي psqlODBC‌ Ùˆ OpenLink براي -PostgreSQL‌ وجود دارد. -براي Ú¯Ø±ÙØªÙ† psqlODBC به سايت -http://gborg.postgresql.org/project/psqlodbc/projdisplay.php مراجعه -كنيد. -OpenLlink را از اين سايت http://www.openlinksw.com -مي‌توانيد بگيريد. اين درايور با -Ù†Ø±Ù…â€ŒØ§ÙØ²Ø§Ø±Ù‡Ø§ÙŠ Ù…Ø®ØªÙ„Ù ODBC كار مي‌كند بنابراين -شما قادر خواهيد بود با Ø§Ø³ØªÙØ§Ø¯Ù‡ از OpenLink روي -اكثر سكو‌هايي كه Ù†Ø±Ù…â€ŒØ§ÙØ²Ø§Ø±ODBC‌دارند بدون -مشكل به PostgreSQL نيز متصل شويد. -اين Ù…ØØµÙˆÙ„ به كساني كه Ø§ØØªÙŠØ§Ø¬ به خدمات -پشتيباني تجاري دارند ÙØ±ÙˆØ®ØªÙ‡ مي‌شود. ولي -نسخه آزاد اين Ù†Ø±Ù…â€ŒØ§ÙØ²Ø§Ø± هميشه در درسترس -مي‌باشد. براي كسب اطلاعات بيشتر سوالات خود -را به آدرس postgres95@openlink.co.uk ‌ارسال نماييد. -2.2) Ú†Ù‡ ابزارهايي براي Ø§Ø³ØªÙØ§Ø¯Ù‡ از PostgreSQL‌ با -ØµÙØØ§Øª وب وجود دارد؟ -در سايت http://www.webreview.com براي Ø§Ø³ØªÙØ§Ø¯Ù‡ از -PostgreSQL‌ در ØµÙØØ§Øª وب راهنماييهاي خوبي وجود -دارد. -براي تركيب Ùˆ Ø§Ø³ØªÙØ§Ø¯Ù‡ در ØµÙØØ§Øª وب زبان PHP‌ يك -واسط بسيار مناسب است. اطلاعات بيشتر راجع به -PHP‌در سايت http://www.php.net وجود دارد. -مثالهايي نيز با Ø§Ø³ØªÙØ§Ø¯Ù‡ از Perl‌ Ùˆ CGI.pm Ùˆ mod_perl -وجود دارد. -2.3) آيا PostgreSQL‌ يك واسط كاربري گراÙيكي دارد؟ -چند نرم Ø§ÙØ²Ø§Ø± گراÙيكي براي PostgreSQL‌ وجود دارد -كه شامل pgAccess درسايت http://www.pgaccess.org Ùˆ pgAdmin III در -سايت http://www.pgadmin.org Ùˆ RHDB Admin در سايت -http://sources.redhat.com/rhdb Ùˆ Rekall در سايت -http://www.thekompany.com/products/rekall مي‌باشد. همچنين يك -phpPgAdmin هم در سايت http://phppgadmin.sourceforge.net وجود -دارد كه يك واسط وبي براي مديريت PostgreSQL -مي‌باشد. -براي ديدن اطلاعات بيشتر راجع به -Ù†Ø±Ù…â€ŒØ§ÙØ²Ø§Ø±Ù‡Ø§ÙŠ Ú¯Ø±Ø§Ùيكي براي PostgreSQL به آدرس -http://techdocs.postgresql.org/guides/GUITools مراجعه كنيد. -2.4) با Ú†Ù‡ زبانهاي برنامه‌نويسي مي‌توان با -PostgreSQL‌ ارتباط برقرار كرد؟ -بيشتر زبانهاي برنامه‌نويسي مي‌توانند با -PostgreSQL‌ ارتباط برقرار كنند. به همراه سورس -PostgreSQL تعدادي از واسطهاي مورد نياز براي -ارتباط با پايگاه داده از طريق زبانهاي مختل٠-آمده است كه در زير ليست آنها را مشاهده -مي‌كنيد. - C (libpq) - Embedded C (ecpg) - Java (jdbc) - Python (PyGreSQL) - TCL (libpgtcl) -واسطهاي ديگر در سايت http://gborg.postgresql.org در قسمت -Drivers/Interfaces وجود دارد. - - - -سوالات مديريتي -3.1) چگونه مي‌توانم PostgreSQL‌ را در شاخه‌اي غير -از /usr/local/pgsql/ نصب كنم؟ -موقع اجراي دستور configure از گزينه prefix-- Ø§Ø³ØªÙØ§Ø¯Ù‡ -كنيد. -3.2) چرا موقعي كه من برنامه postmaster‌ را اجرا مي -كنم پيام Bad system call‌ Ùˆ يا core dump ‌مي‌گيرم؟ -به دلايل مختل٠ممكن است اين Ø§ØªÙØ§Ù‚ Ø¨ÙŠÙØªØ¯. اما -در قدم اول شما مطمئن شويد كه كه امكانات -اضاÙÙ‡ System V‌ در كرنل شما نصب شده باشد. PostgreSQL -براي اجرا شدن نياز به Ø§Ø³ØªÙØ§Ø¯Ù‡ از امكانات -ØØ§Ùظه مشترك Ùˆ سماÙورها دارد. -3.3) چرا موقعي كه من سعي مي‌كنم برنامه postmaster‌ -را اجرا كنم خطاي IpcMemoryCreate مي‌گيرم؟ -Ø§ØØªÙ…الاً‌ قسمت ايجاد ØØ§Ùظه مشترك در كرنل به -درستي تنظيم نشده است Ùˆ يا اينكه بايد ÙØ¶Ø§ÙŠ -ØØ§Ùظه اشتراكي در كرنل را زياد كرد. ميزان -دقيق ØØ§Ùظه مشترك مورد نياز بسته به معماري Ùˆ -Ù†ØÙˆÙ‡ Ø§Ø³ØªÙØ§Ø¯Ù‡ از Ø¨Ø§ÙØ±Ù‡Ø§ توسط برنامه postmaster -دارد. براي بيشتر سيستم‌ها كه با تنظيمات -Ù¾ÙŠØ´â€ŒÙØ±Ø¶ كار مي‌كنند مقدار اين ØØ§Ùظه ØØ¯ÙˆØ¯ 1 -مگابايت است. براي ديدن اطلاعات بيشتر راجع به -ØØ§Ùظه مشترك Ùˆ سماÙور به PostgreSQL Administrator's Guide -مراجعه كنيد. -3.4) چرا موقعي كه من سعي مي‌كنم برنامه postmaster‌ -را اجرا كنم خطاي IpcSemaphoreCreate مي‌گيرم؟ -اگر پيغام خطا (‌pcSemaphoreCreate: semget failed (No space left on -device باشد به اين معني است كه تعداد سماÙورهاي -تنظيم شده در كرنل كاÙÙŠ نيست. PostgreSQL‌ براي هر -ÙØ±Ø§ÙŠÙ†Ø¯ÙŠ ÙƒÙ‡ در backend اجرا مي‌شود به يك سماÙور -نياز دارد. يك راه ØÙ„ موقت براي اين مسئله آن -است كه postmaster را با اعمال Ù…ØØ¯ÙˆØ¯ÙŠØª روي تعداد -ÙØ±Ø§ÙŠÙ†Ø¯Ù‡Ø§ÙŠÙŠ ÙƒÙ‡ مي‌تواند ايجاد كند اجرا كنيم. -براي اينكار از گزينه N- Ùˆ يك عدد كمتر از 32 -Ø§Ø³ØªÙØ§Ø¯Ù‡ كنيد. راه ØÙ„ دائمي اين مشكل آن است كه -پارامترهاي SEMMNS, SEMMNI كرنل را Ø§ÙØ²Ø§ÙŠØ´ دهيم. -در زمان دسترسي خيلي زياد به پايگاه داده، ‌ -سماÙورهاي نامعتبر مي‌توانند باعث crash‌ كردن -سيستم شوند. -اگر پيغام خطا چيز ديگري باشد Ø§ØØªÙ…الاً به -دليل آن است كه كرنل از سماÙورها پشتيباني -نمي‌كند. براي ديدن اطلاعات بيشتر راهنماي -مديريتي PostgreSQL را مطالعه كنيد. -3.5) چگونه مي‌توانم اتصالات ساير ماشينها را -كنترل كنم؟ -به صورت پيش ÙØ±Ø¶ Ùقط از ماشيني كه PostgreSQL روي آن -در ØØ§Ù„ اجراست مي‌توان با Ø§Ø³ØªÙØ§Ø¯Ù‡ از -سوكت‌هاي يونيكسي به آن متصل شد. ساير -ماشين‌ها قادر نيستند به PostgreSQL متصل شوند مگر -آنكه گزينه tcp_sockets در ÙØ§ÙŠÙ„ postgresql.conf ÙØ¹Ø§Ù„ شده Ùˆ -همچنين با Ø§ØµÙ„Ø§Ø ÙØ§ÙŠÙ„ PGDATA/ph_hba.conf هويت‌شناسي -مبتني بر ميزبان نيز ÙØ¹Ø§Ù„ شود. با اين كار -مي‌توان اتصالات TCP/IP به PostgreSQL‌ ايجاد كرد. -3.6) براي كارايي بالاتر Ùˆ بهتر پايگاه داده من -Ú†Ù‡ تنظيماتي را بايد انجام دهم؟ -به طور ØØªÙ… Ø§Ø³ØªÙØ§Ø¯Ù‡ از انديس‌ها باعث بالا -Ø±ÙØªÙ† سرعت پاسخ‌گويي به درخواست‌ها خواهد -شد. دستور EXPLAIN ANALYZE به شما امكان ديدن Ù†ØÙˆÙ‡ -پردازش يك دستور توسط PostgreSQL را مي‌دهد. -اگر شما تعداد زيادي INSERT‌ داريد سعي كنيد -آنها را با قرار دادن در يك ÙØ§ÙŠÙ„ با دستور COPY‌ -اجرا كنيد. اين دستور به مراتب از INSERT سريعتر -است. ØØªÙŠâ€ŒØ§Ù„امكان سعي كنيد از تراكنشها -Ø§Ø³ØªÙØ§Ø¯Ù‡ نكنيد. تراكنشها مجموعه دستوراتي -هستند كه بيند BEGIN Ùˆ â€COMMIT مي‌آيند. اگر يك -دستور به صورت عادي اجرا شود PostgreSQL خود آن -دستور را به صورت يك تراكنش مستقل نگاه كرده Ùˆ -اجرا مي‌كند. موقعی كه تغييرات زيادي در -پايگاه داده انجام مي‌شود انديسهاي قبلي را -ØØ°Ù Ùˆ مجدداً‌ ايجاد كنيد. -Ø§Ø³ØªÙØ§Ø¯Ù‡ از گزينه o -F- در ÙØ±Ù…ان postmaster باعث غير -ÙØ¹Ø§Ù„ كردن ()fsync مي‌شود. اين دستور بعد از هر -تراكنش اطلاعات را روي هاردديسك منتقل -مي‌كند. -براي Ø§ÙØ²Ø§ÙŠØ´ تعداد Ø¨Ø§ÙØ±Ù‡Ø§ÙŠ ØØ§Ùظه اشتراكي از -گزينه B- به همراه ÙØ±Ù…ان postmaster Ø§Ø³ØªÙØ§Ø¯Ù‡ كنيد. -توجه كنيد كه اگر اين عدد خيلي بزرگ باشد ممكن -است postmaster اصلاً‌ اجرا نشود. هر Ø¨Ø§ÙØ± 8 كيلو -بايت ØØ§Ùظه نياز دارد Ùˆ تعداد Ø¨Ø§ÙØ±Ù‡Ø§ به طور -پيش ÙØ±Ø¶ 64 است. -همچنين مي‌توان با گزينه S- ميزان ØØ§Ùظه‌اي -كه براي مرتب‌سازي‌هاي موقت توسط PostgreSQL -Ø§Ø³ØªÙØ§Ø¯Ù‡ مي‌شود را Ø§ÙØ²Ø§ÙŠØ´ داد. مقدار پيش ÙØ±Ø¶ -512 كيلو بايت است. -Ø§Ø³ØªÙØ§Ø¯Ù‡ از دستور CLUSTER نيز براي بالا بردن -كارايي موثر ا ست. دستور راهنماي CLUSTER اطلاعات -بيشتري در اين زمينه به شما مي‌دهد. -3.7) Ú†Ù‡ امكاناتي براي پيدا كردن اشكال‌ وجود -دارد؟ -PostgerSQL‌ امكانات مختلÙÙŠ براي گزارش دادن -وضعيت خود دارد كه براي اشكال زدايي مي‌توان -از آنها Ø§Ø³ØªÙØ§Ø¯Ù‡ كرد. -با Ø§Ø³ØªÙØ§Ø¯Ù‡ از گزينه enable-assert-- تعداد زيادي -()assert براي مونيتور كردن Ùˆ توق٠برنامه در صورت -بروز خطاهاي ناخواسته ÙØ¹Ø§Ù„ مي‌شود. -هم Postmaster Ùˆ هم postgres گزينه‌هاي زيادي براي -اشكال زدايي دارند. موقعي كه postmaster را اجرا -مي‌كنيد خروجي استاندارد Ùˆ خطا را سمت ÙØ§ÙŠÙ„ log -ارسال كنيد. - cd /usr/local/pgsql - ./bin/postmaster >server.log 2>&1 & -اين كار يك ÙØ§ÙŠÙ„ log در بالاترين شاخه PostgreSQL‌ -ايجاد مي‌كند. اين ÙØ§ÙŠÙ„ ØØ§ÙˆÙŠ Ø§Ø·Ù„Ø§Ø¹Ø§Øª Ù…Ùيدي -در مورد مسائل Ùˆ خطاهايي است كه براي سرور -Ø§ØªÙØ§Ù‚ Ø§ÙØªØ§Ø¯Ù‡ است. براي ديدن جزئيات بيشتر -مي‌توان از d- به همراه ÙØ±Ù…ان postmaster‌ Ø§Ø³ØªÙØ§Ø¯Ù‡ -كرد. گزينه d- همچنين يك عدد مي‌گيرد كه نشان -دهنده Ø³Ø·Ø Ø¬Ø²Ø¦ÙŠØ§ØªÙŠ است كه در Logâ€ŒÙØ§ÙŠÙ„ نوشته -مي‌شود. با بالابردن اين عدد ØØ¬Ù… اطلاعات -توليد شده در LogÙØ§ÙŠÙ„ نيز Ø§ÙØ²Ø§ÙŠØ´ مي‌يابد. -اگر postmaster در ØØ§Ù„ اجرا نباشد، مي‌توانيم postgres -را به طور مستقيم از خط ÙØ±Ù…ان اجرا كرده Ùˆ -دستورات SQL را به آن بدهيم. اين كار Ùقط براي -اشكال‌يابي توصيه مي‌شود. توجه كنيد كه در -اين ØØ§Ù„ت يك دستور با كاراكتر newline خاتمه پيدا -مي‌كند Ùˆ نه با ;. اگر postmaster را با امكانات -اشكال‌يابي كامپيل كرده باشيد مي‌توانيد با -Ø§Ø³ØªÙØ§Ø¯Ù‡ از يك برنامه اشكال‌ياب اجراي -برنامه را مونيتور كنيد. -اگر postmaster در ØØ§Ù„ اجرا باشد با دستور psql -مي‌توان به postgres متصل شد. با پيدا كردن PID -ÙØ±Ø§ÙŠÙ†Ø¯ postgres كه psql به آن متصل شده است مي‌توان -آن را مونيتور كرد. براي اينكار بايد يك -برنامه اشكال‌ياب را به آن pid متصل كرد. اگر -بخواهيم بالا آمدن postgres را مونيتور كنيم كاÙÙŠ -است "PGOPTIONS="-W n Ùˆ psql را اجرا كنيم. اين كار باعث -مي‌شود كه postgres با n ثانيه تاخير اجرا شود Ùˆ در -اين ÙØ§ØµÙ„Ù‡ شما مي‌توانيد برنامه اشكال‌ياب -را به آن متصل كرده Ùˆ با قرار دادن يك نقطه -توق٠روند اجراي آن را مونيتور كنيد. -postgres گزينه‌هاي s-‌ Ùˆ A- Ùˆ t-‌ دارد كه براي -پيدا كردن اشكالات بسيار مناسب هستند. -شما مي‌توانيد postgreSQL را با امكانات profiling -كامپيل كنيد. اين كار باعث مي‌شود كه زمان -اجراي دقيق هر تابع در برنامه مشخص شود. -خروجي‌هاي توليد شده در اين ØØ§Ù„ت در ÙØ§ÙŠÙ„ -DLINUX_PROFILE. ريخته مي‌شود. -3.8) چرا موقعي كه من مي‌خواهم به پايگاه داده -وصل شوم پيام "Sorry, too many clients" ‌مي‌گيرم؟ -شما بايد ØØ¯Ø§ÙƒØ«Ø± تعداد ÙØ±Ø§ÙŠÙ†Ø¯Ù‡Ø§ÙŠ Ù‡Ù…Ø²Ù…Ø§Ù† -postmaster را Ø§ÙØ²Ø§ÙŠØ´ دهيد. مقدار پيش ÙØ±Ø¶ 32 است. -براي Ø§ÙØ²Ø§ÙŠØ´ آن مي‌توان از گزينه N- Ø§Ø³ØªÙØ§Ø¯Ù‡ -كرد Ùˆ يا ÙØ§ÙŠÙ„ postgresql.conf را Ø§ØµÙ„Ø§Ø Ù†Ù…ÙˆØ¯ -توجه كنيد كه اگر N- مقداري بيشتر از 32 داشته -باشد بايد مقدار B- را نيز Ø§ÙØ²Ø§ÙŠØ´ دهيم. اين -مقدار بايد ØØ¯Ø§Ù‚Ù„ دو برابر مقدار N-‌ باشد. -براي اعداد خيلي بالا بايد بعضي از -پارامترهاي كرنل را نيز Ø§ØµÙ„Ø§Ø ÙƒØ±Ø¯. -پارامترهايي نظير ØØ¯Ø§ÙƒØ«Ø± اندازه ØØ§Ùظه -اشتراكي SHMMAX ØŒ ØØ¯Ø§ÙƒØ«Ø± تعداد سماÙورها SEMMNI‌ Ùˆ -SEMMNS ØŒ ØØ¯Ø§ÙƒØ«Ø± تعداد ÙØ±Ø§ÙŠÙ†Ø¯Ù‡Ø§ NPROCØŒ ØØ¯Ø§ÙƒØ«Ø± -ÙØ±Ø§ÙŠÙ†Ø¯Ù‡Ø§ÙŠ ÙŠÙƒ كاربر MAXUPRC Ùˆ ØØ¯Ø§ÙƒØ«Ø± ÙØ§ÙŠÙ„هاي باز -NFILE Ùˆ NINODE. يكي از دلايلي كه تعداد اتصالات -همزمان postgreSQL Ù…ØØ¯ÙˆØ¯ است آن است كه نيازهاي -PostgreSQL بيش از منابع موجود سيستم نباشد. -3.9) در شاخه pgsql_tmp Ú†Ù‡ چيزي قرار دارد؟ -دراين شاخه ÙØ§ÙŠÙ„هاي موقتي قرار دارد كه با -اجراي درخواستها به وجود آمده است. به عنوان -مثال اگر براي اجراي دستور order by نياز به انجام -مرتب سازي باشد Ùˆ در صورتي كه ØØ§Ùظه مشخص شده -با گزينه S- براي اينكار كاÙÙŠ نباشد سيستم يك -ÙØ§ÙŠÙ„ موقت در اين شاخه ايجاد مي‌كند تا عمل -مرتب سازي را انجام دهد. -ÙØ§ÙŠÙ„هاي موقت معمولاً به صورت اتوماتيك پاك -مي‌شود اما اگر postgreSQL در ØÙŠÙ† مرتب سازي crash‌ -كند آن ÙØ§ÙŠÙ„ها باقي مي‌مانند. با stop Ùˆ start كردن -برنامه postmaster اين ÙØ§ÙŠÙ„ها پاك مي‌شوند. -3.10) چرا براي به روز كردن نسخه پايگاه داده من -بايد كل داده ها را dump‌ Ùˆ مجدداً restore كنم؟ -تيم برنامه نويس postgreSQL در نسخه‌هاي ارائه شده -كه Ùقط minor آنها Ù…ØªÙØ§ÙˆØª است Ùقط تغييرات كوچكي -اعمال مي‌كنند؛ بنابراين براي به روز كردن از -نسخه 7.2‌به 7.2.1 نيازي به dump Ùˆ restore نيست. اما در -نسخه‌هايي كه major آنها تغيير مي‌كند غالباً -ساختار داخلي جداول Ùˆ ÙØ§ÙŠÙ„هاي داده تغيير -مي‌كند. اين تغييرات معمولاً‌ پيچيده هستند. -براي انتقال داده‌هاي موجود در پايگاه داده -در اين ØØ§Ù„ت بايد ‌از dump Ùˆ restore Ø§Ø³ØªÙØ§Ø¯Ù‡ كرد. -در نسخه‌هايي كه ساختار روي ديسك تغييري -نمي‌كند مي توان از برنامه pg_upgrade براي به روز -كردن پايگاه داده Ø§Ø³ØªÙØ§Ø¯Ù‡ كرد بدون اينكه -نيازي به Ø§Ø³ØªÙØ§Ø¯Ù‡ از dump Ùˆ restore باشد. در -يادداشتي كه به همراه هر توزيع مي‌آيد ذكر -شده است كه آيا برنامه pg_upgrade براي اين توزيع -وجود دارد يا خير. -3.11) از Ú†Ù‡ سخت Ø§ÙØ²Ø§Ø±ÙŠ Ø¨Ø§ÙŠØ¯ Ø§Ø³ØªÙØ§Ø¯Ù‡ كنم؟ - -چون اكثر Ø³Ø®Øªâ€ŒØ§ÙØ²Ø§Ø±Ù‡Ø§ÙŠ PC سازگار هستند مردم -Ùكر مي‌كنند كه كيÙيت آنها نيز يكسان است. در -ØØ§Ù„يكه اينطور نيست. Ø§Ø³ØªÙØ§Ø¯Ù‡ از هاردهاي SCSI Ùˆ -ØØ§Ùظه‌هاي ECC Ùˆ مادربردهاي با كيÙيت بالا -نسبت به سخت Ø§ÙØ²Ø§Ø±Ù‡Ø§ÙŠ Ø§Ø±Ø²Ø§Ù†ØªØ± نتايج بهتري از -نظر كارايي Ùˆ پايداري سيستم بهمراه خواهد -داشت. PostgreSQL روي بيشتر سخت Ø§ÙØ²Ø§Ø±Ù‡Ø§ اجرا -مي‌شود اما اگر كارايي Ùˆ اطمينان ÙØ§ÙƒØªÙˆØ±Ù‡Ø§ÙŠ -مهمي هستند بايد سخت Ø§ÙØ²Ø§Ø± مناسب Ø§Ø³ØªÙØ§Ø¯Ù‡ شود. -در گروههاي پستي در مورد سخت Ø§ÙØ²Ø§Ø± مناسب Ùˆ -انتخاب آن Ø¨ØØ« شده است. - - - -سوالات عملياتي -4.1) ØªÙØ§ÙˆØª بين binary cursors Ùˆ Normal cursors چيست؟ -راهنماي دستور DECLARE‌ را مطالعه كنيد. -4.2) من چگونه مي‌توانم Ùقط روي چند ردي٠اول يا -يك ردي٠تصادÙÙŠ درخواست SELECT‌ بزنم؟ -راهنماي دستور FETCH يا SELECT...LIMIT را ببينيد. -در واقع كل درخواست بايد بررسي Ùˆ ارزيابي شود -ØØªÙŠ Ø§Ú¯Ø± شما Ùقط چند ردي٠اول را بخواهيد. براي -مثال درخواست ORDER BY را در نظر بگيريد. اگر -انديس يا نمايه‌اي براي ORDER BY وجود داشته -باشد،‌postgreSQL‌ ممكن است بتواند Ùقط چند سطر -اول درخواستي را ارزيابي كند Ùˆ يا اينكه كل -درخواست پردازش شود تا تعداد رديÙ‌هاي -درخواستي توليد شود. -براي انتخاب يك سطر تصادÙÙŠ به روش زير عمل -مي‌كنيم: - SELECT col - FROM tab - ORDER BY random() - LIMIT 1; -4.3) من چگونه مي‌توانم ليستي از جداول يا ساير -چيزهايي كه در psql‌ وجود دارد را ببينم؟ -براي ديدن ليست جداول دستور dt\ را در برنامه -psql‌ Ø§Ø³ØªÙØ§Ø¯Ù‡ كنيد. براي ديدن ليست كامل -ÙØ±Ù…انها ?\ را اجرا كنيد. راه ديگر خواندن متن -برنامه psql‌ است كه در شاخه pgsql/src/bin/psql/describe.c -‌قرار دارد. اين ÙØ§ÙŠÙ„ ØØ§ÙˆÙŠ ÙØ±Ø§Ù…ين SQLيي است كه -خروجي را براي دستوراتي كه با \‌در psql شروع -مي‌شوند توليد مي‌كنند. راه ديگر اجراي psql با -گزينه E-‌است. اينكار باعث مي‌شود كه psql قبل -از اجرا هر دستور SQL‌متناظر آن را نشان دهد. -PostgreSQL‌همچنين يك برنامه SQLi دارد كه مي‌توان -با Ø§Ø³ØªÙØ§Ø¯Ù‡ از آن اطلاعات داخلي پايگاه داده -را استخراج كرد. -4.4) چگونه يك ستون جدول را ØØ°Ù مي‌كنيد؟ چگونه -نوع داده آن را عوض كنيم؟ -ØØ°Ù يك ستون در توزيع 7.3 با Ø§Ø³ØªÙØ§Ø¯Ù‡ از دستور -ALTER TABLE DROP COLUMN اضاÙÙ‡ شده است. در نسخه‌هاي -قبلي به روش زير عمل كنيد: - BEGIN; - LOCK TABLE old_table; - SELECT ... -- تمام ستونها غير از ستوني كه مي‌خواهيد آن را ØØ°Ù كنيد را در اينجا بياوريد - INTO TABLE new_table - FROM old_table; - DROP TABLE old_table; - ALTER TABLE new_table RENAME TO old_table; - COMMIT; -براي عوض كردن نوع داده يك ستون به روش زير عمل -كنيد: - BEGIN; - ALTER TABLE tab ADD COLUMN new_col new_data_type; - UPDATE tab SET new_col = CAST(old_col AS new_data_type); - ALTER TABLE tab DROP COLUMN old_col; - COMMIT; -4.5) ØØ¯Ø§ÙƒØ«Ø± اندازه يك Ø±Ø¯ÙŠÙØŒâ€Œ جدول Ùˆ خود -پايگاه داده چقدر است؟ -Ù…ØØ¯ÙˆØ¯ÙŠØªÙ‡Ø§ عبارتند از: - ØØ¯Ø§ÙƒØ«Ø± اندازه پايگاه داده Ù†Ø§Ù…ØØ¯ÙˆØ¯ (تا 32 ترابايت وجود دارد) - ØØ¯Ø§ÙƒØ«Ø± اندازه يك جدول 32 ترابايت - ØØ¯Ø§ÙƒØ«Ø± ا ندازه يك ردي٠1.6 ترابايت - ØØ¯Ø§ÙƒØ«Ø± اندازه يك Ùيلد 1 گيگا بايت - ØØ¯Ø§ÙƒØ«Ø± اندازه رديÙهاي يك جدول نا Ù…ØØ¯ÙˆØ¯ - ØØ¯Ø§ÙƒØ«Ø± ستونهاي يك جدول بسته به نوع جدول بين 250 تا 6000 - ØØ¯Ø§ÙƒØ«Ø± انديسهاي يك جدول نا Ù…ØØ¯ÙˆØ¯ -البته در ØØ§Ù„ت Ù†Ø§Ù…ØØ¯ÙˆØ¯ نيز ما Ù…ØØ¯ÙˆØ¯ به ØØ¬Ù… -هاردديسك Ùˆ ÙØ¶Ø§ÙŠ ØØ§Ùظه خواهيم بود. در صورتي -Ú©Ù‡ مقادير مشخص شده به عنوان Ù†Ø§Ù…ØØ¯ÙˆØ¯ به صورت -غير معمولي بزرك شوند كارايي سيستم كاهش -خواهد ÙŠØ§ÙØª. -براي ذخيره كردن جداول با اندازه خيلي بزرگ -نيازي نيست كه سيستم عامل امكان ايجاد -ÙØ§ÙŠÙ„هاي بزرگ را داشته باشد. بلكه جداول خيلي -بزرگ به صورت ÙØ§ÙŠÙ„هايي به ØØ¬Ù… يك گيگا بايت -نگاهداري مي‌شوند. -اگر اندازه بلوكهاي داده را برابر 32 كيلو بايت -قرار دهيم ØØ¯Ø§ÙƒØ«Ø± اندازه جدول Ùˆ ØØ¯Ø§ÙƒØ«Ø± تعداد -ستونها 4 برابر خواهد شد. -4.6) چقدر ÙØ¶Ø§ÙŠ Ø¯ÙŠØ³Ùƒ سخت براي ذخيره كردن -داده‌‌هاي يك ÙØ§ÙŠÙ„ متني مورد نياز است؟ -يك پايگاه داده PostgreSQL‌ تا 5 برابر ÙØ¶Ø§ÙŠÙŠ Ø±ÙˆÙŠ -هاردديسك براي نگاهداري يك ÙØ§ÙŠÙ„ متني نياز -دارد. -به عنوان مثال يك ÙØ§ÙŠÙ„ با 100000 خط را در نظر -بگيريد كه در هر خط يك عدد صØÙŠØ Ùˆ يك ØªÙˆØ¶ÙŠØ -متني آمده است. ÙØ±Ø¶ كنيد كه رشته متني به طور -متوسط 20 بايت باشد. اندازه ÙØ§ÙŠÙ„ برابر 2.8 مگا -بايت خواهد بود ولي PostgreSQL براي نگاهداري اين -ÙØ§ÙŠÙ„ به 6.4 مگا بايت اطلاعات نياز خواهد داشت. - 32 bytes: اندازه سرايند هر خط به طور تقريبي - 24 bytes: يك عدد صØÙŠØ Ùˆ يك رشته 24 بايتي - + 4 bytes: اشاره گر روي ØµÙØÙ‡ به يك چندتايي - ---------------------------------------- - 60 bytes در هر ردي٠- -اندازه ØµÙØØ§Øª داده در PostgreSQL برابر با 8 كيلو بايت است - 8192 تعداد بايت‌ها در هر ØµÙØÙ‡ - ------------------- = 136 تعداد رديÙ‌ها در يك ØµÙØÙ‡ پايگاه داده - 60 تعداد بايت‌هاي هر ردي٠- - 100000 تعداد رديÙها - -------------------- = ØªØ¹Ø¯Ø§Ø¯ØµÙØØ§Øª پايگاه داده - 128 تعداد رديÙها در هر ØµÙØÙ‡ - -735 تعداد ØµÙØØ§Øª * 8192 تعداد بايت‌هاي هر ØµÙØÙ‡ = 6,021,120 مگا بايت -سربار انديسها يا نمايه‌ها از اين مقدار كمتر -است ولي چون شامل خود داده‌ها هم هست ممکن است -اندازه آنها هم بزرگ شود. -NULLها به صورت bitmap ذخيره مي‌شوند Ùˆ از اينرو -ÙØ¶Ø§ÙŠ Ø¨Ø³ÙŠØ§Ø± كمي را اشغال مي‌كنند. -4.7) چگونه مي‌توانم بÙهمم كه Ú†Ù‡ كاربران،‌ -پايگاه داده،‌ نمايه Ùˆ جداولي در سيستم تعري٠-شده است؟ -psql تعداد زيادي دستور دارد كه با \ شروع -مي‌شوند Ùˆ اين اطلاعات را در اختيار ما قرار -مي‌دهند. براي ديدن آنها دستور ?\ را اجرا -كنيد. همچنين جداول سيستمي كه با نام آنها pg_ -‌شروع مي‌شود نيز اين اطلاعات را در خود -دارند. اجراي برنامه psql با گزينه l- نيز باعث -نشان دادن ليست تمام پايگاههاي داده مي‌شود. -همچنين ÙØ§ÙŠÙ„ pgsql/src/tutorial/syscat.source نيز ÙØ±Ù…انهاي -SELECT كه با Ø§Ø³ØªÙØ§Ø¯Ù‡ از آن مي‌توان اطلاعات -پايگاه داده را استخراج كرد Ø´Ø±Ø Ø¯Ø§Ø¯Ù‡ است. -4.8) چرا درخواستهاي من كند اجرا مي‌شوند يا -چرا از نمايه ها Ø§Ø³ØªÙØ§Ø¯Ù‡ نمي‌كنند؟ -به طور معمول براي درخواستها از نمايه‌ها -Ø§Ø³ØªÙØ§Ø¯Ù‡ نمي‌شود. تنها در صورتي از نمايه‌ها -Ø§Ø³ØªÙØ§Ø¯Ù‡ مي‌شود كه اندازه جدول از يك اندازه -ØØ¯Ø§Ù‚Ù„ بزرگتر باشد Ùˆ درخواست هم Ùقط قسمتي از -رديÙ‌هاي جدول را انتخاب كرده باشد. دليل اين -كار آن است كه دسترسي‌هاي تصادÙÙŠ به هاردديسك -كه به خاطر نمايه‌ها ايجاد مي‌شود ممكن است -از خواندن مستقيم جدول يا خواندن ترتيبي -ركوردها كندتر باشد. -براي تعيين اينكه از نمايه Ø§Ø³ØªÙØ§Ø¯Ù‡ شود يا -خير، PostgreSQL بايد اطلاعات آماري را در مورد يك -جدول بداند. اين اطلاعات توسط دستور ANALYZE Ùˆ VACUUM -ANALYZE به دست مي‌آيد. با Ø§Ø³ØªÙØ§Ø¯Ù‡ از اين -اطلاعات،‌ بهينه ساز از تعداد رديÙ‌هاي يك -جدول اطلاع پيدا مي‌كند Ùˆ بهتر مي‌تواند -تعيين كند كه آيا از نمايه Ø§Ø³ØªÙØ§Ø¯Ù‡ شود يا خير. -اطلاعات آماري همچنين براي تعيين ترتيب Ø§Ù„ØØ§Ù‚ -Ùˆ روشهاي Ø§Ù„ØØ§Ù‚ به صورت بهينه نيز كاربر دارد. -جمع آوري اطلاعات آماري بايد به صورت دوره‌اي -همزمان با تغيير داده‌هاي جدول انجام شود. -نمايه‌ها به طور معمول همراه با دستور ORDER BY -به كار برده نمي‌شوند. براي يك جدول بزرگ يك -پيمايش ترتيبي همراه با دستور مرتب سازي از به -كار بردن نمايه‌ها سريعتر خواهد بود. -اما اگر همراه با ORDER BY‌ از LIMIT Ø§Ø³ØªÙØ§Ø¯Ù‡ شود -اغلب از نمايه‌ها Ø§Ø³ØªÙØ§Ø¯Ù‡ مي‌شود چون Ùقط -قسمتي از جدول Ø§Ø³ØªÙØ§Ø¯Ù‡ مي‌شود. در ØÙ‚يقت هر -چند توابع ()MIN‌ Ùˆ ()MAX از نمايه‌ها Ø§Ø³ØªÙØ§Ø¯Ù‡ -نمي‌كنند ولي مي‌توانيم با Ø§Ø³ØªÙØ§Ø¯Ù‡ از دستور -زير با Ø§Ø³ØªÙØ§Ø¯Ù‡ از نمايه‌ها Ùˆ دستور ORDER BY Ùˆ -LIMIT‌ آنها را به دست آوريم. - SELECT col - FROM tab - ORDER BY col [ DESC ] - LIMIT 1; -اگر شما Ùكر مي‌كنيد كه بهينه ساز سيستم در -انتخاب پيمايش ترتيبي اشتباه كرده است با -دستور 'SET enable_seqscan TO 'off' مي‌توانيد ببينيد آيا -Ø§Ø³ØªÙØ§Ø¯Ù‡ از نمايه‌ها باعث Ø§ÙØ²Ø§ÙŠØ´ سرعت -درخواست‌ها خواهد شد. -Ø§Ø³ØªÙØ§Ø¯Ù‡ از نمايه‌ها هنگامي كه از علائم ويژه -نظير LIKE Ùˆ ~ Ø§Ø³ØªÙØ§Ø¯Ù‡ مي‌كنيد Ùقط در بعضي -شرايط خاصي كه در اينجا ذكر شده است ممكن است: - ابتداي رشته جستجو بايد به طور ØµØ±ÙŠØ Ù…Ø´Ø®Øµ - باشد براي مثال: - دستورات LIKE نبايد با علامت % شروع شوند - الگوهاي منظمي كه با ~ مي‌ايد ØØªÙ…اً بايد با - علامت ^ شروع شود - رشته جستجو نبايد با يك مجموعه از - كاراكتر‌ها مثل [a-e] شروع شود - جستجوهاي ØºÙŠØ±ØØ³Ø§Ø³ به متن مثل ILIKE‌ Ùˆ *~ از - نمايه‌ها Ø§Ø³ØªÙØ§Ø¯Ù‡ نمي‌كنند. در عوض از - توابع نمايه‌اي كه در قسمت 4.12 ØªÙˆØ¶ÙŠØ Ø¯Ø§Ø¯Ù‡ شد - Ø§Ø³ØªÙØ§Ø¯Ù‡ مي‌كنند. - مقدار پيش ÙØ±Ø¶ locale‌ بايد در initdb Ø§Ø³ØªÙØ§Ø¯Ù‡ شود. - -4.9) چگونه مي‌توانم Ù†ØÙˆÙ‡ بررسي درخواست را -توسط بهينه‌ساز درخواستها مشاهده كنم؟ -راهنماي دستور EXPLAIN را نگاه كنيد. -4.10) نمايه R-tree‌ چيست؟ -از نمايه R-Tree براي انديس كردن داده‌هاي -ÙØ§ØµÙ„ه‌اي Ø§Ø³ØªÙØ§Ø¯Ù‡ مي‌شود. يك نمايه hash -نمي‌توانند جستجوهاي Ù…ØØ¯ÙˆØ¯Ù‡â€ŒØ§ÙŠ Ø±Ø§ انجام -دهد. نمايه "B-tree" نيز براي انجام جستجوي -Ù…ØØ¯ÙˆØ¯Ù‡â€ŒØ§ÙŠ Ø¯Ø± يك جهت قابل Ø§Ø³ØªÙØ§Ø¯Ù‡ است. اما -R-Tree مي‌تواند داده‌هاي چند بعدي را نيز -پشتيباني كند. براي مثال Ø§Ø³ØªÙØ§Ø¯Ù‡ اگر از نمايه -R-tree‌ براي گونه Point Ø§Ø³ØªÙØ§Ø¯Ù‡ شود سرعت -درخواست‌هايي نظير "select all points within a bounding -rectangle" به مراتب Ø§ÙØ²Ø§ÙŠØ´ مي‌يابد. -مقاله‌اي كه طراØÙŠ R-tree را ØªÙˆØ¶ÙŠØ Ø¯Ø§Ø¯Ù‡ است -Guttman, A. "R-trees: A Dynamic Index Structure for Spatial Searching." -Proceedings of the 1984 ACM SIGMOD Int'l Conf on Mgmt of Data, 45-57. -R-tree‌ مي‌تواند چندضلعيها Ùˆ چند وجهي را -پشتيباني كند. در تئوري R-tree مي‌تواند تعداد -بعدهاي بالاتر ري نيز پشتيباني كند. در عمل -توسعه R-tree‌ نياز به كار بيشتري دارد. -4.11) بهينه ساز تكويني درخواست چيست؟ (Genetic Query -Optimizer) -Ø§Ø³ØªÙØ§Ø¯Ù‡ از GEQO سرعت بهينه سازي درخواست را -هنگاميكه تعداد زيادي جدول را با Ø§Ø³ØªÙØ§Ø¯Ù‡ از -الگوريتم ژنتيك Ø§Ù„ØØ§Ù‚ مي‌كنيم Ø§ÙØ²Ø§ÙŠØ´ -مي‌دهد. -4.12) چگونه از عبارات منظم براي جستجو Ø§Ø³ØªÙØ§Ø¯Ù‡ -كنم؟ چگونه جستجويي انجام دهم كه ØØ³Ø§Ø³ به متن -نباشد؟ چگونه براي يك جستجوي غير ØØ³Ø§Ø³ به متن -از نمايه Ø§Ø³ØªÙØ§Ø¯Ù‡ كنم؟ -براي جستجوي عبارت منظم از عملگر ~‌ Ø§Ø³ØªÙØ§Ø¯Ù‡ -مي‌كنيم. براي جستجوي غير ØØ³Ø§Ø³ به متن از -عملگر *~ Ùˆ يا ILIKE‌ Ø§Ø³ØªÙØ§Ø¯Ù‡ مي‌كنيم. -روش ديگر انجام جستجوي غير ØØ³Ø§Ø³ به متن در زير -نشان داده شده است. - SELECT * - FROM tab - WHERE lower(col) = 'abc'; -اين از نمايه‌هاي استاندارد Ø§Ø³ØªÙØ§Ø¯Ù‡ -نمي‌كند. ولي شما مي توانيد با دستور زير يك -نمايه ايجاد كنيد Ùˆ از آن Ø§Ø³ØªÙØ§Ø¯Ù‡ كنيد. - CREATE INDEX tabindex ON tab (lower(col)); -4.13) Iچگونه مي‌توانم در يك درخواست تشخيص دهم -كه يك Ùيلد NULL‌ است؟ -با Ø§Ø³ØªÙØ§Ø¯Ù‡ از توابع IS NULL Ùˆ IS NOT NULL مي‌توانيم -NULL بودن يك Ùيلد را تست كنيم. -4.14) ØªÙØ§ÙˆØª بين گونه‌هاي مختل٠character چيست؟ -Type Internal Name Notes --------------------------------------------------- -VARCHAR(n) varchar اندازه، ØØ¯Ø§ÙƒØ«Ø± طول را نشان مي دهد بدون اضاÙÙ‡ شدن كاراكتر اضاÙÙ‡ -CHAR(n) bpchar كاراكترهاي بلانك براي پر شدن طول مشخص شده Ø§Ø³ØªÙØ§Ø¯Ù‡ مي‌شود -TEXT text ØØ¯Ø§ÙƒØ«Ø± طول را مشخص نمي‌كند -BYTEA bytea آرايه‌اي از بايت با طول متغير -"char" char يك كاراكتر -نام داخلي گونه‌ها را در system catalogue ‌و بعضي از -پيغامهاي خطا مي‌توان ديد. -چهار گونه اول همگي از نوع varlena هستند (4 بايت -اول روي ديسك طول را مشخص مي‌كند كه به دنبال -آن داده‌ها قرار دارند.)‌بنابراين ÙØ¶Ø§ÙŠ -واقعي Ø§Ø³ØªÙØ§Ø¯Ù‡ شده روي ديسك از اندازه تعري٠-شده بيشتر است. اما اين گونه‌ها را مي‌توان -ÙØ´Ø±Ø¯Ù‡ كرد كه اينكار باعث مي‌شود ÙØ¶Ø§ÙŠ ÙƒÙ…ØªØ±ÙŠ -روي ديسك اشغال كنند. -براي ذخيره رشته‌هاي با طول متغير(VARCHAR(n‌ -بهترين انتخاب است. در اين گونه ØØ¯Ø§ÙƒØ«Ø± طول -رشته Ù…ØØ¯ÙˆØ¯ است بر خلا٠text كه هيچ Ù…ØØ¯ÙˆØ¯ÙŠØªÙŠ -روي ØØ¯Ø§ÙƒØ«Ø± اندازه رشته نمي‌گذارد.(در اين -گونه ØØ¯Ø§ÙƒØ«Ø± طول يك رشته يك گيگا بايت خواهد -بود) -گونه (CHAR(n براي ذخيره داده‌هاي با طول يكسان -است.يك گونه‌ي (CHAR(n با كاراكترهاي بلانك -(خالي) پر مي‌شود تا به طول مشخص شده برسد در -ØØ§Ù„يكه گونه VARCHAR كاراكترها را به همان صورت -كه هستند ذخيره مي‌كند. گونه BYTEA براي ذخيره -داده‌هاي باينري است به خصوص داده‌هاي -باينتري كه شامل بايت‌هاي NULL هستند. از نظر -كارايي تمام اين گونه‌ها يكسان هستند. -4.15.1) چگونه مي‌توانم يك Ùيلد سريال يا -Ø§ÙØ²Ø§ÙŠØ´ÙŠ Ø§ÙŠØ¬Ø§Ø¯ كنم؟ -PostgreSQL از داده‌هاي سريال پشتيباني مي‌كند. -براي ايجاد يك Ùيلد سريال (براي داشتن يك Ùيلد -Ù…Ù†ØØµØ± به ÙØ±Ø¯ براي هر ردي٠)به روش زير عمل -كنيد: - CREATE TABLE person ( - id SERIAL, - name TEXT - ); -دستور بالا به طور اتوماتيک به دستور زير -تبديل مي‌شود: - CREATE SEQUENCE person_id_seq; - CREATE TABLE person ( - id INT4 NOT NULL DEFAULT nextval('person_id_seq'), - name TEXT - ); -براي ديدن اطلاعات بيشتر به راهنماي دستور -create_sequence مراجعه كنيد. همچنين مي‌توان از -OID‌هر ردي٠به عنوان يك مقدار Ù…Ù†ØØµØ± به ÙØ±Ø¯ -Ø§Ø³ØªÙØ§Ø¯Ù‡ كرد. اما در اين ØØ§Ù„ت براي dump كردن Ùˆ -reload‌كردن پايگاه داده بايد دستور pg_dumps‌ را -با گزينه o-‌ اجرا كنيد. -4.15.2) چگونه مي‌توانم مقدار يك درج سريالي را -بدانم؟ -يك روش براي Ú¯Ø±ÙØªÙ† مقدار بعدي يك Ùيلد سريال -Ø§Ø³ØªÙØ§Ø¯Ù‡ از تابع ()nextval است. در شبه ÙƒÙØ¯ÙŠ ÙƒÙ‡ در -ادامه آمده است روش انجام اين كار نشان داده -شده است: - new_id = execute("SELECT nextval('person_id_seq')"); - execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')"); -با اجرا دستور Ùوق مقدار جديد را در متغير new_id -نيز خواهيدداشت كه مي‌توانيد آن را در بقيه -درخواست‌هاي نيز Ø§Ø³ØªÙØ§Ø¯Ù‡ كنيد. توجه داشته -باشيد كه نام SEQUENCEيي كه به طور اتوماتيك ايجاد -شده است به صورت table_serialcolumn_seq‌ خواهد بود. كه -در آن table‌ نام جدول Ùˆ serialcolumn نام Ùيلد سريال -جدول مي‌باشد. -براي ديدن مقدار نسبت داده شده به Ùيلد سريال -نيز مي‌توان از تابع () currval به صورت زير -Ø§Ø³ØªÙØ§Ø¯Ù‡ كرد. - execute("INSERT INTO person (name) VALUES ('Blaise Pascal')"); - new_id = execute("SELECT currval('person_id_seq')"); -Ùˆ سرانجام شما مي‌توانيد از مقدار OID كه خروجي -دستور INSERT است براي ديدن مقدار پيش ÙØ±Ø¶ -Ø§Ø³ØªÙØ§Ø¯Ù‡ كنيد. هر چند اين روش در همه Ù¾Ù„ØªÙØ±Ù…ها -قابل Ø§Ø³ØªÙØ§Ø¯Ù‡ نيست Ùˆ ضمن اينكه Ùيلد oid‌ بعد -از عدد 4 ميليارد دوباره ØµÙØ± مي‌شود. در زبان -perl با Ø§Ø³ØªÙØ§Ø¯Ù‡ از DBI Ùˆ DBD::Pg مقدار oid‌را -مي‌توانيد به شكل زير استخراج كنيد: بعد از -اجراي ()st->execute$ مقدار oid‌ در متغير sth->pg_oid_status$ -ذخيره خواهد شد. -4.15.3) آیا توابع ()nextval Ùˆ ()currval منجر به ایجاد -شرایط race برای سایر کاربران Ù…ÛŒ شوند؟ -خیر، Ø§Ø³ØªÙØ§Ø¯Ù‡ از این توابع شرایط race را به -وجود نمی آورد. -4.15.4) چرا اعداد سریالی مربوط به تراکنشهای abort -شده مجدداً Ø§Ø³ØªÙØ§Ø¯Ù‡ نمی شود؟ چرا بین اعداد -سریالی یک ÙØ§ØµÙ„Ù‡ خالی ایجاد Ù…ÛŒ شود؟ -برای بالا بردن امکان اجرای همزمان تراکنشها، -اعداد سریالی به Ù…ØØ¶ اجرای تراکنش به آنها -تخصیص Ù…ÛŒ یابد در این ØØ§Ù„ت اگر بعضی از -تراکنشها abort شوند بین اعداد سریالی Ø§Ø³ØªÙØ§Ø¯Ù‡ -شده یک ÙØ§ØµÙ„Ù‡ خالی به وجود Ù…ÛŒ آید. -4.16) OID Ùˆ TID Ú†Ù‡ هستند؟ -OID راه ØÙ„ PostgreSQL برای داشتن یک شناسه Ù…Ù†ØØµØ± به -ÙØ±Ø¯ برای هر ردی٠است. هر ردی٠جدیدی Ú©Ù‡ ایجاد -Ù…ÛŒ شود یک OID Ù…Ù†ØØµØ± به ÙØ±Ø¯ به آن اختصاص Ù…ÛŒ -یابد. تمام OIDهایی Ú©Ù‡ در ØÛŒÙ† initdb ایجاد Ù…ÛŒ شوند -از 16384 کمتر هستند Ùˆ OIDهایی بعداً تولید Ù…ÛŒ شود -از این عدد بزرگتر خواهد بود. نکته مهم آن است -Ú©Ù‡ OIDها نه تنها در یک جدول شبیه نیستند بلکه -در Ú©Ù„ پایگاه داده هیچ دو ردیÙÛŒ دارای OID یکسان -نخواهد بود. -PostgreSQL از OID در سیستم داخلی خود برای ایجاد -ارتباط بین ردیÙهای جداول Ù…Ø®ØªÙ„Ù Ø§Ø³ØªÙØ§Ø¯Ù‡ Ù…ÛŒ -کند. توصیه Ù…ÛŒ شود Ú©Ù‡ یک ستون از نوع OID برای -ذخیره این Ùیلد در جدول ایجاد کنید. ساختن یک -نمایه برای این Ùیلد باعث دسترسی سریعتر به آن -خواهد شد. -تمام پایگاههای داده در PostgreSQL برای Ú¯Ø±ÙØªÙ† OID -جدید از یک ناØÛŒÙ‡ مرکزی Ø§Ø³ØªÙØ§Ø¯Ù‡ Ù…ÛŒ کند. ولی -اگر بخواهیم OID را به روش دیگری بگیریم Ùˆ یا -اینکه در ØÛŒÙ† Ú©Ù¾ÛŒ کردن یک جدول بخواهیم OIDهای -اصلی آن تغییر نکند به روش زیر Ù…ÛŒ توانیم عمل -کنیم: - - CREATE TABLE new_table(mycol int); - SELECT oid AS old_oid, mycol INTO tmp_table FROM old_table; - COPY tmp_table TO '/tmp/pgtable'; - COPY new_table WITH OIDS FROM '/tmp/pgtable'; - DROP TABLE tmp_table; -OID یک عدد صØÛŒØ 4 بایتی است Ùˆ بنابراین ØØ¯Ø§Ú©Ø«Ø± -مقدار آن 4 میلیارد خواهد بود Ùˆ بعد از آن -مقدار آن سرریز خواهد شد. البته تا کنون برای -کسی این Ø§ØªÙØ§Ù‚ Ù†ÛŒÙØªØ§Ø¯Ù‡ است Ùˆ تصمیم گرداندگان -PostgreSQL آن است Ú©Ù‡ قبل از آنکه این Ø§ØªÙØ§Ù‚ رخ دهد -این مشکل را برطر٠کنند. -TIDها برای شناسایی Ù…ØÙ„ Ùیزیکی یک ردی٠بر اساس -بلوک Ùˆ Ø¢ÙØ³Øª Ù…ÛŒ باشد. TIDها بعد از تغییر پیدا -کردن یک ردی٠و یا بازخوانی آن عوض Ù…ÛŒ شوند. -TIDها توسط نمایه ها Ø§Ø³ØªÙØ§Ø¯Ù‡ Ù…ÛŒ شوند. -4.17) معني بعضي از ترمها Ùˆ كلماتي كه در PostgreSQL‌ -Ø§Ø³ØªÙØ§Ø¯Ù‡ مي‌شود چيست؟ -لیست برخی از ترمها Ùˆ کلماتی Ú©Ù‡ Ø§Ø³ØªÙØ§Ø¯Ù‡ Ù…ÛŒ -شوند: - table, relation, class :کلاس، رابطه، جدول - row, record, tuple چندتایی، رکورد، ردی٠- column, field, attribute ØµÙØªØŒ Ùیلد، ستون - retrieve, select انتخاب، خواندن - replace, updateبه روز کردن، جایگزینی - append, insert درج، اضاÙÙ‡ کردن - OID, serial value مقدار سریال - portal, cursor - range variable, table name, table alias -یک لیست عمومی از ترمهای مورد Ø§Ø³ØªÙØ§Ø¯Ù‡ در -پایگاه داده در آدرس -http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.htm -وجود دارد. -4.18) چرا من خطاي "ERROR: Memory exhausted in AllocSetAlloc" -مي‌گيرم؟ -این خطا Ø§ØØªÙ…الاً یا به خاطر تمام شدن ØØ§Ùظه -مجازی سیستم شماست Ùˆ یا اینکه کرنل برای -برنامه ها در مورد میزان Ø§Ø³ØªÙØ§Ø¯Ù‡ از ØØ§Ùظه -مجازی Ù…ØØ¯ÙˆØ¯ÛŒØª اعمال کرده است. قبل از اجرای -برنامه اصلی یکی از دستورات زیر را اجرا کنید. - ulimit -d 262144 - limit datasize 256m -بسته به نوع شل یکی از این دستورات ممکن است با -موÙقیت اجرا شود. با اجرای آن دستور Ù…ØØ¯ÙˆØ¯ÛŒØª -ØØ§Ùظه مجازی برای برنامه ها برداشته شده Ùˆ با -این کار Ø§ØØªÙ…الاً درخواستی Ú©Ù‡ قبلاً خطا Ù…ÛŒ -داده است اجرا خواهد شد. -4.19) از كجا تشخيص دهم كه ويرايش يا نسخه -PostgreSQLيي كه من Ø§Ø³ØªÙØ§Ø¯Ù‡ مي‌كنم چيست؟ -با اجرای دستور ()SELECT version -4.20) چرا در ØÛŒÙ† اجرای عملیات روی large-objectها -خطای "invalid large obj descriptor"به وجود Ù…ÛŒ آید؟ -شما باید قبل از شروع دستوراتی Ú©Ù‡ با large-objectها -کار Ù…ÛŒ کنند از BEGIN Ùˆ بعد از آنها هم یک END -بگذارید. در ØØ§Ù„ ØØ§Ø¶Ø± PostgreSQL هندل large-objectها را -در زمان نهایی شدن تراکنش (commitشدن) Ù…ÛŒ بندد. به -همین دلیل اولین تلاش برای انجام هر کاری با -هندل منجر به خطای invalid large obj descriptor خواهد شد. -برای جلوگیری از این خطا ØØªÙ…اً باید از یک -تراکنش Ø§Ø³ØªÙØ§Ø¯Ù‡ کنید. این کار همانطور Ú©Ù‡ -قبلاً Ú¯ÙØªÙ‡ شد با Ø§Ø³ØªÙØ§Ø¯Ù‡ از قرار دادن BEGIN Ùˆ END -در ابتدا Ùˆ انتهای دستورات انجام Ù…ÛŒ شود. -اگر این خطا را در ØÛŒÙ† Ø§Ø³ØªÙØ§Ø¯Ù‡ از یک درایور ODBC -Ø¯Ø±ÛŒØ§ÙØª کردید Ø§ØØªÙ…الاً باید این دستور را -اجرا کنید: set auto-commit off -4.21) چگونه يك ستون ايجاد كنم كه مقدار زمان -جاري را به عنوان مقدار Ù¾ÙŠØ´â€ŒÙØ±Ø¶ داشته باشد؟ -از CURRENT_TIMESTAMP Ø§Ø³ØªÙØ§Ø¯Ù‡ کنید در مثال زیر Ù†ØÙˆÙ‡ -انجام این کار نشان داده شده است: -CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP ); - -4.22) چرا "زير درخواستهايي" كه از IN Ø§Ø³ØªÙØ§Ø¯Ù‡ -مي‌كنند كند هستند؟ -در نسخه های قبل از 7.4 عمل Ø§Ù„ØØ§Ù‚ زیر درخواست Ùˆ -درخواست اصلی به این صورت انجام Ù…ÛŒ شود Ú©Ù‡ -نتایج به دست آمده از زیر درخواست به صورت -ترتیبی برای هر ردی٠اعمال Ù…ÛŒ شود. اگر -زیردرخواست ردی٠های Ú©Ù…ÛŒ را به عنوان خروجی -برگرداند Ùˆ درخواست بیرونی ردی٠های زیادی را -شامل شود Ø§Ø³ØªÙØ§Ø¯Ù‡ از IN بهترین روش است در غیر -اینصورت بهتر است از EXISTS Ø§Ø³ØªÙØ§Ø¯Ù‡ شود - SELECT * - FROM tab - WHERE col IN (SELECT subcol FROM subtab); -به: - SELECT * - FROM tab - WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col); -برای اجرای سریع این درخواست باید برای ستون -subcol نمایه ایجاد شده باشد. -در نسخه های بعد از 7.4 IN برای Ø§Ù„ØØ§Ù‚ از همان -تکنیک پیچیده مورد Ø§Ø³ØªÙØ§Ø¯Ù‡ در دستورات معمولی -Ø§Ø³ØªÙØ§Ø¯Ù‡ Ù…ÛŒ کند Ùˆ بنابراین Ø§Ø³ØªÙØ§Ø¯Ù‡ از آن نسبت -به EXISTS ارجØÛŒØª دارد. -4.23) چگونه مي‌توانم يك Ø§Ù„ØØ§Ù‚ خارجي (outer join) -انجام دهم؟ -برای انجام Ø§Ù„ØØ§Ù‚ خارجی به روش زیر عمل کنید: - SELECT * - FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col); -یا - SELECT * - FROM t1 LEFT OUTER JOIN t2 USING (col); -درخواستهای بالا t1.col , t2.col را به هم Ø§Ù„ØØ§Ù‚ Ù…ÛŒ -کند Ùˆ همچنین ردیÙهای t1 Ú©Ù‡ نظیر آنها در t2 -نبوده است را نیز برمی گرداند. اگر از RIGHT -Ø§Ø³ØªÙØ§Ø¯Ù‡ شود نتیجه بر عکس است. یعنی ردیÙهای t2 -Ú©Ù‡ نظیر آنها در t1 نباشد را نشان Ù…ÛŒ دهد Ùˆ اگر -از FULL Ø§Ø³ØªÙØ§Ø¯Ù‡ شود نتیجه هم شامل ردیÙهای t1 -است Ùˆ هم شامل ردیÙهای t2. Ø§Ø³ØªÙØ§Ø¯Ù‡ از کلمه OUTER -اختیاری است چرا Ú©Ù‡ این کلمه به طور ضمنی -دستورهای LEFT, RIGHT, FULL وجود دارد. -در نسخه های قبلی پایگاه داده Ù…ÛŒ توانیم Ø§Ù„ØØ§Ù‚ -خارجی را به Ú©Ù…Ú© دستورهای UNION, NOT IN شبیه سازی -کنیم. این کار در مثال زیر نشان داده شده است: - - SELECT tab1.col1, tab2.col2 - FROM tab1, tab2 - WHERE tab1.col1 = tab2.col1 - UNION ALL - SELECT tab1.col1, NULL - FROM tab1 - WHERE tab1.col1 NOT IN (SELECT tab2.col1 FROM tab2) - ORDER BY col1 -4.24) چگونه مي‌توان درخواستهايي از چند پايگاه -داده توليد كرد؟ -در ØØ§Ù„ ØØ§Ø¶Ø± این کار امکان پذیر نیست. PostgreSQL -Ùقط امکان درخواست از پایگاه داده ای را Ù…ÛŒ -دهد Ú©Ù‡ در ØØ§Ù„ ØØ§Ø¶Ø± به آن متصل باشید Ùˆ نمی -توان به طور همزمان از دو پایگاه داده Ø§Ø³ØªÙØ§Ø¯Ù‡ -کرد. البته یک برنامه کاربردی خود Ù…ÛŒ تواند به -طور همزمان دو پایگاه داده را مورد Ø§Ø³ØªÙØ§Ø¯Ù‡ -قرار داده Ùˆ نتایج را با هم ترکیب کند ولی نمی -تواند در یک درخواست به هر دو پایگاه داده -رجوع کند. -4.25) چگونه خروجي يك تابع مي‌تواند چند ردي٠-يا ستون باشد؟ -در نسخه 7.3 خروجی یک تابع Ù…ÛŒ تواند چند ردی٠یا -چند ستون باشد. برای دیدن اطلاعات بیشتر به -سایت زیر مراجعه -کنید:http://techdocs.postgresql.org/guides/SetReturningFunctions -4.26) در توابع PL/PgSQL چرا نمي‌توان با اطمينان -جداول موقت را ايجاد يا ØØ°Ù كرد؟ -PL/PgSQL Ù…ØØªÙˆØ§ÛŒ توابع را ذخیره (cache) Ù…ÛŒ کند. یک -اثر بد جانبی این کار آن است Ú©Ù‡ اگر در تابع از -یک جدول موقت Ø§Ø³ØªÙØ§Ø¯Ù‡ شود Ùˆ بعداً آن جدول ØØ°Ù -Ùˆ یک جدول جدید به جای آن ایجاد شود، در -ÙØ±Ø§Ø®ÙˆØ§Ù†ÛŒ مجدد آن تابع، Ù…ØØªÙˆØ§ÛŒ ذخیره شده -تابع هنوز به جدول قدیمی اشاره Ù…ÛŒ کند Ùˆ -بنابراین اجرای تابع با اشکال مواجه Ù…ÛŒ شود. -راه ØÙ„ این مشکل آن است Ú©Ù‡ برای جداول موقت از -دستور EXECUTE Ø§Ø³ØªÙØ§Ø¯Ù‡ شود Ú©Ù‡ این کار سبب Ù…ÛŒ شود -Ú©Ù‡ درخواست برای هر بار اجرا مجدداً پیمایش Ùˆ -ØªÙØ³ÛŒØ± شود. -4.27) Ú†Ù‡ گزينه‌هايي براي تكرار (replication) وجود -دارد؟ -There are several master/slave replication options available. These allow only -the master to make database changes and the slave can only do database reads. -The bottom of http://gborg.PostgreSQL.org/genpage?replication_research lists -them. A multi-master replication solution is being worked on at -http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php. -4.28) Ú†Ù‡ گزينه‌هايي براي رمزنگاري وجود دارد؟ - contrib/pgcrypto شامل توابع رمزنگاری زیادی است Ú©Ù‡ - Ù…ÛŒ توان از آنها در دستورات SQL Ø§Ø³ØªÙØ§Ø¯Ù‡ کرد. - برای رمز کردن ارتباط بین client Ùˆ server ØŒ پایگاه - داده ØØªÙ…اً گزینه SSL را بر روی پایگاه داده - ÙØ¹Ø§Ù„ کنیم. - در نسخه 7.3 به بعد کلمات عبور کاربران به طور - اتوماتیک به صورت رمز شده ذخیره Ù…ÛŒ شود ولی - در نسخه های قبلی باید گزینه PASSWORD_ENCRYPTION در - ÙØ§ÛŒÙ„postgresql.conf ÙØ¹Ø§Ù„ کنیم. - Ù…ÛŒ توان پایگاههای داده را روی یک ÙØ§ÛŒÙ„ سیستم - رمزشده نگاهداری کرد - - - -Extending PostgreSQL -5.1) من يك تابع نوشته‌ام. چگونه آن را در psql -اجرا كنم؟ چرا با اجراي آن core dump مي‌گيرم؟ -دلایل مختلÙÛŒ Ù…ÛŒ تواند باعث بروز این مشکل -شود. اما قبل از همه تابع خود را به صورت جدا -تست کنید. -5.2) چگونه مي‌توانم در توليد نوع‌ها Ùˆ توابع -جديد Ùˆ جالب براي PostgreSQL‌ همكاري Ùˆ مشاركت -داشته باشم؟ -کد خود را به گروه پستی pgsql-hackers ارسال کنید. -5.3) چگونه مي‌توانم يك تابع به زبان C بنويسم -كه خروجي آن يك ‌tuple (چند تايي) باشد؟ -در نسخه های 7.3 به بعد یک تابع Ù…ÛŒ تواند یک جدول -را به عنوان خروجی برگرداند. این ویژگی در -توابعی Ú©Ù‡ به زبانهای C Ùˆ PL/PgSQL نوشته Ù…ÛŒ شوند -به طور کامل وجود دارد. راهنما برنامه نویسان -را مطالعه کنید. یک مثال از Ù†ØÙˆÙ‡ برگرداندن یک -جدول به عنوان خروجی در contrib/tablefunc آمده است. -5.4) من يك ÙØ§ÙŠÙ„ منبع را عوض كرده ام چرا در -عمليات كامپيل مجدد آن تغيير ديده نمي‌شود؟ -Makefile برای ÙØ§ÛŒÙ„های include شده وابستگیها را به -درستی نشان نمی دهد. برای اطمینان از اینکه -ÙØ§ÛŒÙ„ÛŒ Ú©Ù‡ عوض کرده اید ØØªÙ…اً دوباره کامپیل Ù…ÛŒ -شود دستور make clean را اجرا کنید. اگر از کامپیلر -gcc Ø§Ø³ØªÙØ§Ø¯Ù‡ Ù…ÛŒ کنید Ù…ÛŒ توانید از گزینه -enable-depend-- در موقع اجرای برنامه configure Ø§Ø³ØªÙØ§Ø¯Ù‡ -کنید این گزینه باعث Ù…ÛŒ شود Ú©Ù‡ وابستگیها به -طور اتوماتیک تولید شود.
\ No newline at end of file diff --git a/doc/FAQ_french b/doc/FAQ_french deleted file mode 100644 index 71f19f0095d..00000000000 --- a/doc/FAQ_french +++ /dev/null @@ -1,1289 +0,0 @@ - - Foire Aux Questions (FAQ) pour PostgreSQL - - Dernire mise jour : vendredi 14 novembre 2004 16:32:47 - - Mainteneur actuel : Bruce Momjian (pgman@candle.pha.pa.us) - - La plus rcente version de ce document est disponible sur - http://www.PostgreSQL.org/docs/faqs/FAQ.html. - - Les questions spcifiques la plateforme sont rpondues sur - http://www.PostgreSQL.org/docs/index.html. - _________________________________________________________________ - - Questions gnrales - - 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 dernire version ? - 1.8) Quelle documentation est disponible ? - 1.9) Comment savoir quels sont les bogues connus ou les - fonctionnalits 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 dveloppement ? - 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 financirement 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 contrler les connexions d'autres machines ? - 3.6) Comment rgler le moteur de la base de donnes pour de meilleures - performances ? - 3.7) Quelles fonctionalits de dboguage 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 rpertoire 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 matriels dois-je utiliser ? - - Questions fonctionnelles - - 4.1) Quelle est la diffrence entre curseur binaire et curseur - normal ? - 4.2) Comment faire un SELECT seulement sur les premires lignes d'une - requte ? Sur une ligne alatoire ? - 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 donnes ? - 4.5) Quelle est la taille maximale pour une ligne, une table et une - base de donnes ? - 4.6) Combien d'espace disque faut-il pour stocker les donnes d'un - fichier texte typique ? - 4.7) Comment puis-je savoir quels index, tables, bases de donnes et - utilisateurs sont dfinis ? - 4.8) Mes requtes sont lentes ou ne font pas usage des index. - Pourquoi ? - 4.9) Comment puis-je savoir si l'optimiseur value mes requtes ? - 4.10) Qu'est-ce qu'un index R-tree ? - 4.11) Qu'est-ce que l'optimiseur gntique de requtes ? - 4.12) Comment puis-je raliser 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 dtecter si un champ est NULL dans une requte ? - 4.14) Quelle sont les diffrences entre les nombreux types de - caractres ? - 4.15.1) Comment puis-je crer un champ srie, c'est--dire - s'incrmentant 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'amnent pas des problmes - lorsque plusieurs utilisateurs les lancent en mme temps ? - 4.15.4) Pourquoi mes numros de squences ne sont pas r-utiliss lors - d'une annulation de transaction ? Pourquoi existe-t'il des trous dans - la numrotation de ma colonne squentielle (SERIAL) ? - 4.16) Qu'est-ce qu'un OID? Qu'est-ce qu'un TID ? - 4.17) A quoi correspond certains termes utiliss avec PostgreSQL ? - 4.18) Pourquoi ai-je l'erreur ERROR: Memory exhausted in - AllocSetAlloc() ? - 4.19) Comment puis-je connatre la version de PostgreSQL que - j'utilise ? - 4.20) Pourquoi ai-je invalid large obj descriptor lors d'oprations - avec des gros objets ? - 4.21) Comment puis-je crer une colonne qui aura par dfaut l'heure - actuelle comme valeur ? - 4.22) Pourquoi mes sous-requtes utilisant IN sont-elles si lentes ? - 4.23) Comment puis-je raliser une jointure externe ? - 4.24) Comment puis-je lancer des requtes utilisant plusieurs bases de - donnes ?? - 4.25) Comment puis-je renvoyer plusieurs lignes ou colonnes partir - d'une fonction ? - 4.26) Pourquoi ne puis-je pas crer/supprimer des tables temporaires - dans les fonctions PL/PgSQL de faon stable ? - 4.27) Quelles options de cryptage sont disponibles ? - - Etendre PostgreSQL - - 5.1) J'ai crit une fonction utilisateur. Lorsque je l'excute 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 rcuprer une ligne ? - 5.4) J'ai modifi un fichier source. Pourquoi la modification - n'est-elle pas visible aprs la recompilation ? - _________________________________________________________________ - - Questions gnrales - - 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 amlioration du systme de gestion de bases de - donnes POSTGRES (et est toujours quelque fois appel "Postgres"), un - prototype de recherche de SGBD de prochaine gnration. PostgreSQL - garde le puissant modle de donnes et les types de donnes riches de - POSTGRES, mais remplace le langage de requtes PostQuel par un - sous-ensemble tendu de SQL. PostgreSQL est gratuit et les sources - complets sont disponibles. - - PostgreSQL est crit par une quipe de dveloppeurs qui sont tous - inscrits la liste de diffusion de dveloppement de PostgreSQL. Le - coordinateur actuel est Marc G. Fournier (scrappy@PostgreSQL.org et - voir la section 1.6 pour contacter les dveloppeurs). Cette quipe est - responsable de tout le dveloppement de PostgreSQL. C'est un projet - soutenu par une communaut sans tre contrl par une socit. Pour y - contribuer, voir la FAQ des dveloppeurs 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 - dboguage et l'amlioration du code. Le code de Postgres original, - duquel PostgreSQL est driv, tait le fruit de l'effort de nombreux - tudiants diplms et non diplms, 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 gnral, tout environnement compatible Unix moderne devrait pouvoir - faire fonctionner PostgreSQL. Les environnements qui ont t tests - explicitement sont lists 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 - systmes 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 envoys aux membres de cette liste ds que la liste - principale a reu 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 dveloppeurs 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 socits pouvant fournir un support commercial est - disponible sur http://techdocs.postgresql.org/companies.php. - - 1.7) Quelle est la dernire version ? - - La dernire 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 rpertoire /doc. Vous - pouvez aussi accder 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 achets 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 possde des commandes \d pratiques montrant des informations sur - les types, oprateurs, fonctions, aggrgats, etc. - - Notre site web contient encore plus de documentations. - - 1.9) Comment savoir quels sont les bogues connus ou les fonctionnalits - manquantes ? - - PostgreSQL supporte un sous-ensemble tendu de SQL-92. Voir notre - liste TODO pour les bogues connus, les fonctionnalits 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 aprs et avant l'an 2000. - - 1.12) Comment puis-je rejoindre l'quipe de dveloppement ? - - Tout d'abord, tlchargez les derniers sources et lisez la - documentation pour les dveloppeurs 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 dveloppeurs - 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 faon de soumettre un rapport de bogue. - - De mme, vrifiez notre site ftp ftp://ftp.PostgreSQL.org/pub pour - voir s'il existe une version PostgreSQL plus rcente ou des - correctifs. - - 1.14) Comment PostgreSQL se compare-til d'autres SGBD ? - - Il y a plusieurs manires de mesurer un logiciel : les - fonctionnalits, les performances, la fiabilit, le support, et le - prix. - - Fonctionnalits - PostgreSQL possde la plupart des fonctionnalits prsentes - dans les SGBD commerciaux, comme les transactions, les requtes - imbriques, les dclencheurs, les vues, l'intgrit - rfrentielle par cls trangres, et le verrouillage - sophistiqu. Nous avons des fonctionnalits qu'ils n'ont pas, - comme les types dfinis par l'utilisateur, l'hritage, les - rgles, et le contrle de concurrence par multi-versionnage - pour rduire les contentions de verrouillage. - - Performances - PostgreSQL a des performances similaires aux autres bases de - donnes commerciales et open source. Il est plus rapide pour - certaines oprations, plus lent pour d'autres. Par rapport - MySQL ou d'autres SGBD plus lger, nous sommes plus rapides - pour de nombreux utilisateurs, des requtes complexes et une - charge pour les requtes de lecture/criture. MySQL est plus - rapide pour des requtes SELECT simples effectues par quelques - utilisateurs. Bien sr, MySQL ne possde aucune des - fonctionnalits de la section Fonctionnalits ci-dessus. - PostgreSQL est construit pour la fiabilit et les - fonctionnalits et nous continuons amliorer les performances - chaque version. Il y a une page web intressante qui compare - PostgreSQL MySQL sur - http://openacs.org/philosophy/why-not-mysql.html. De plus, - MySQL est une socit qui distribue son produit via l'open - source et requiert une licence commerciale pour les logiciels - propritaires, donc pas une communaut de dveloppement 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 testes, 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, prtes pour une utilisation en - environnement de production. Nous pensons que nous nous - comparons favorablement aux autres bases de donnes dans ce - domaine. - - Support - Nos listes de diffusion offrent un contact avec un large groupe - de dveloppeurs et d'utilisateurs afin d'aider la rsolution - des problmes rencontrs. Nous ne pouvons garantir un correctif - mais les SGBD commerciaux ne le garantissent pas toujours non - plus. L'accs direct aux dveloppeurs, la communaut - d'utilisateurs, aux manuels, et au code source, fait du support - pour PostgreSQL un support suprieur 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, exceptes celles cites dans notre licence de - type BSD donne plus haut. - - 1.15) Comment puis-je aider financirement PostgreSQL ? - - PostgreSQL possde une infrastructure de premire classe depuis le - dbut en 1996. Ceci grce Marc Fournier, qui a cr et gr cette - infrastructure des annes durant. - - Une infrastructure de qualit est importante pour un projet - open-source. Cela permet d'empcher l'parpillement qui ralentirait - beaucoup l'avancement du projet. - - Bien sr, cette infrastructure n'est pas donne. Elle requiert un - certain nombre de dpenses mensuelles ou ponctuelles. Si vous ou votre - socit 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 utilises pour soutenir le projet PostgreSQL et ne - soutiennent aucune socit que ce soit. Si vous le prfrez, vous - pouvez aussi envoyer un chque l'adresse de contact. - _________________________________________________________________ - - De plus, si vous avez une histoire de succs avec PostgreSQL, merci de - la soumettre notre site d'vanglisation 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 tlcharger 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 adosss une base de donnes se - trouve http://www.webreview.com - - Pour l'intgration 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/, propritaire). - 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 dtaille. - - 2.4) Quels langages sont disponibles pour communiquer avec PostgreSQL ? - - La plupart des langages de programmation couramment utiliss ont une - interface pour PostgreSQL. Vrifiez 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 supplmentaires 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 spcifier 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 varit de problmes mais vrifiez d'abord que - vous avez les extensions System V installes pour votre noyau. - PostgreSQL ncessite le support noyau pour la mmoire partage et les - smaphores. - - 3.3) Quand je lance postmaster, j'obtiens des erreurs IpcMemoryCreate. - Pourquoi ? - - Soit vous n'avez pas configur correctement la mmoire partage dans - votre noyau, soit vous devez augmenter la mmoire partage disponible - dans le noyau. Le montant exact dont vous avez besoin dpend de votre - architecture et du nombre de tampons et de processus que vous avez - configur pour postmaster. Pour la plupart des systmes avec un nombre - par dfaut 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 dtailles sur la mmoire partage et les - smaphores. - - 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 smaphores. PostgreSQL a besoin d'un smaphore 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 paramtre infrieur au choix par - dfaut de 32. Une solution permanente est d'augmenter les paramtres - SEMMNS et SEMMNI de votre noyau. - - Des smaphores inoprantes peuvent aussi provoquer des plantages - pendant de gros accs la base de donnes. - - Si le message d'erreur est autre chose, vous n'avez peut-tre pas du - tout le support des smaphores dans votre noyau. Voir le chapitre - Administration du manuel PostgreSQL pour des informations plus - dtailles sur la mmoire partage et les smaphores. - - 3.5) Comment contrler les connexions d'autres machines ? - - Par dfaut, 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 base sur l'hte en modifiant le fichier - $PGDATA/pg_hba.conf en accord. - - 3.6) Comment rgler le moteur de la base de donnes pour de meilleures - performances ? - - Des index acclreront les requtes. La commande EXPLAIN ANALYZE vous - permet de voir comment PostgreSQL traite votre requte et quels index - sont utiliss. - - 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. Deuximent, les - requtes qui ne sont pas dans des blocs de transaction BEGIN - WORK/COMMIT sont considrs comme tant dans leur propre transaction. - Envisagez de faire plusieurs instructions dans un seul bloc de - transaction. Ceci rduira la surcharge apporte par les transactions. - Aussi, envisagez d'abandonner et de recrer des index lors de grosses - modifications de donnes. - - Il y a plusieurs options d'optimisations. Vous pouvez dsactiver - fsync() en lanant postmaster avec l'option -o -F. Ceci empchera les - fsync()s d'crire sur disque aprs toute transaction. - - Vous pouvez utiliser l'option -B de postmaster pour augmenter le - nombre de tampons de mmoire partage utiliss par les processus - serveurs. Si vous fixez ce paramtre trop haut, postmaster ne se - lancera pas car vous avez dpass la limite de votre noyau sur la - quantit de mmoire partage. Chaque tampon fait 8 Ko et le choix par - dfaut est de 64 tampons. - - Vous pouvez utiliser l'option serveur -S pour augmenter la quantit - maximale de mmoire utilise par les processus serveurs pour des tris - temporaires. La valeur de -S est mesur en kilooctets et le choix par - dfaut est de 512 (c'est--dire 512 Ko). - - Vous pouvez utiliser la commande CLUSTER pour regrouper vos donnes en - tables pour correspondre un index. Voir la page de manual CLUSTER - pour plus de dtails. - - 3.7) Quelles fonctionalits de dboguage sont disponibles ? - - PostgreSQL a plusieurs fonctionalits qui permettent de recueillir des - informations de statut qui peuvent tre utile pour des intentions de - dboguage. - - D'abord, en lanant configure avec l'option --enable-cassert, beaucoup - d'assert()s surveillent le serveur et arrtent le programme quand - quelque chose d'inattendu arrive. - - Postmaster et postgres ont tous deux plusieurs options de dboguage de - disponible. D'abord, quand vous lancez postmaster, vrifiez 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 crer un fichier server.log dans le rpertoire racine de - PostgreSQL. Ce fichier contient des informations utiles sur les - problmes ou erreurs rencontrs par le serveur. Postmaster dispose - d'une option -d qui permet de rapporter des informations encore plus - dtailles d'tre rapportes. L'option -d prend un numro qui spcifie - le niveau de dboguage. Faites attention au fait que des valeurs - lves de niveau de dboguage gnerent des fichiers de traces - volumineux. - - Si postmaster ne tourne pas, vous pouvez lancer le serveur postgres de - la ligne de commande et taper votre requte SQL directement. Ceci est - recommand seulement pour des fonctions de dboguage. Notez qu'un - retour chariot termine la requte, pas un point-virgule. Si vous - compilez avec les symboles de dboguage, vous pouvez utiliser un - dbogueur 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 problmes d'interaction de verrouillage/serveur ne peuvent tre - dupliqus. - - Si postmaster est en train de tourner, lancez psql dans une fentre - puis trouvez le PID du processus postgres utilis par psql. Utilisez - un dbogueur pour l'attacher au PID postgres. Vous pouvez mettre un - point d'arrt dans le dbogueur et envoyez des requtes de psql. Si - vous dboguez le dmarrage de postgres, vous pouvez mettre - PGOPTIONS="-W n", puis lancez psql. Ceci va retarder le dmarrage de n - secondes pour que vous puissiez attacher un dbogueur au processus, - fixer des points d'arrt et continuer la squence de dmarrage. - - Le programme postgres a les options -s, -A et -t qui peuvent tre - utile pour des mesures de dboguage et de performance. - - Vous pouvez compiler avec les options de performance pour voir quelles - fonctions prennent du temps d'excution. Les fichiers de gestion du - serveur seront dposs dans le rpertoire pgsql/data/base/nom_db. Les - fichiers de gestion clients seront mis dans le rpertoire 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 dfaut est de 32 processus. Vous pouvez l'augmenter en - relanant postmaster avec une valeur -N approprie 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 dfaut 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 vrifier incluent la taille maximale des - blocs de mmoire partage, SHMMAX ; le nombre maximal de smaphores, - 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 autoriss - est pour que votre systme ne tombe pas court de ressources. - - 3.9) Que contient le rpertoire pgsql_tmp ? - - Ce rpertoire contient des fichiers temporaires gnrs par le moteur - de requte. Par exemple, si un tri doit tre fait pour satisfaire un - ORDER BY et que ce tri requiert plus de place que le paramtre -S du - serveur n'autorise, alors des fichiers temporaires seront crs pour - contenir les donnes ncessaires. - - Les fichiers temporaires sont d'habitude effacs automatiquement mais - peuvent rester si un serveur s'arrte brutalement pendant un tri. Un - arrt et un redmarrage de postmaster effacera les fichiers dans ces - rpertoires. - - 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 ncessitera - 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 systmes et des fichiers de donnes. Ces modifications sont - souvent complexes alors nous ne gardons pas de compatibilit - descendante pour les fichiers de donnes. Une sauvegarde exportera les - donnes dans un format gnrique 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 prcisent si pg_upgrade - est disponible pour la sortie. - - 3.11) Quels matriels dois-je utiliser ? - - Comme le matriel PC est compatible en grosse partie, les gens ont - tendance croire que tous les matriels PC sont de mme qualit. Ce - n'est pas le cas. La RAM ECC, le SCSI et les cartes-mre de qualit - sont plus fiables et ont de meilleurs performances qu'un matriel - moins coteux. PostgreSQL fonctionnera sur peu prs tout matriel - mais si la fiabilit et la performance sont importantes pour vous, il - est rus de bien considrer les options matrielles. Nos listes de - diffusion peuvent tre utilises pour discuter des options matriels. - _________________________________________________________________ - - Questions fonctionnelles - - 4.1) Quelle est la diffrence entre curseur binaire et curseur normal ? - - Voir la page DECLARE du manuel pour une description. - - 4.2) Comment faire un SELECT seulement sur les premires lignes d'une - requte ? Sur une ligne alatoire ? - - Voir la page FETCH du manuel ou utiliser SELECT ... LIMIT.... - - Il se peut que l'intgralit de la requte doive tre value, mme si - vous voulez seulement les premires lignes. Envisagez d'utiliser une - requte avec une clause ORDER BY. S'il existe un index correspondant - l'ORDER BY, PostgreSQL peut n'valuer que les premires lignes, sinon - l'intgralit de la requte peut tre value, jusqu' gnrer les - lignes dsires. - - Pour faire un SELECT sur une ligne alatoire : - 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 complte de commandes l'intrieur 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 gnrent le contenu des commandes anti-slash de psql. Vous - pouvez aussi lancer psql avec l'option -E, afin qu'il imprime les - requtes qu'il utilise pour excuter les commandes que vous lui - passez. PostgreSQL fournit aussi une interface d'informations sur le - schma compatible avec SQLi que vous pouvez interroger des - informations sur la base de donnes. - - 4.4) Comment supprime-t-on une colonne d'une table, ou comment change-t-on - son type de donnes ? - - La fonction DROP COLUMN a t ajoute dans la version 7.3 avec ALTER - TABLE DROP COLUMN. Pour les versions prcdentes, vous pouvez faire : - BEGIN; - LOCK TABLE ancienne_table; - SELECT ... -- slectionnez 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 donnes 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; - - Aprs, vous pouvez faire VACUUM FULL tab pour rcuprer l'espace - disque utilis par les lignes expires. - - 4.5) Quelle est la taille maximale pour une ligne, une table, une base de - donnes ? - - Les limites sont : - Taille maximum pour une base de donnes illimite (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 sr, ces valeurs ne sont pas vraiment illimite, elles sont - limites par l'espace disque disponible, ainsi que par l'espace de - mmoire et de swap. Les performances peuvent se dgrader si ces - valeurs sont inhabituellement grandes. - - La taille maximum des tables (32 To) ne ncessite pas que le systme - d'exploitation supporte les grands fichiers. Les grandes tables sont - stockes sous forme de fichiers multiples de 1 Go, donc les limites de - taille du systme de fichier ne sont pas importantes. - - La taille maximum des tables et le nombre maximum de colonnes peuvent - tre quadripls, si la taille des blocs par dfaut est augmente - 32 Ko. - - 4.6) Combien d'espace disque faut-il pour stocker les donnes d'un fichier - texte typique ? - - Une base de donnes PostgreSQL peut utiliser jusqu' cinq fois - l'espace ncessaire pour stocker les donnes d'un fichier texte. - - A titre d'exemple, considrez un fichier de 100 000 lignes, comportant - un entier et une chane de description sur chaque ligne. Supposons que - la chane soit longue en moyenne de 20 octets. Le fichier texte serait - de 2,8 Mo. La taille du fichier d'une base de donnes PostgreSQL peut - tre estime 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 donnes dans PostgreSQL est de 8192 octets (8 KO), donc : - - 8192 octets par page - ---------------------- = 136 lignes par page de base de donnes (arrondi l'entier infrieur) - 60 octets par ligne - - 100000 lignes de donnes - ------------------------- = 735 pages de base de donnes (arrondi l'entier suprieur) - 128 lignes par page - -735 pages de base de donnes * 8192 octets par page = 6 021 120 octets (6,4 Mo) - - Les index utilisent moins d'espace, mais ils contiennent les donnes - indexes, ils peuvent donc galement tre grands. - - Les NULL sont stocks sous forme de bitmap, aussi utilisent-ils trs - peu d'espace. - - 4.7) Comment puis-je savoir quels index, tables, bases de donnes et - utilisateurs sont dfinis ? - - psql dispose de plusieurs commandes commenant par un anti-slash pour - retrouver ces informations. Utilisez \? pour les connatre. Il existe - aussi des tables systmes, qui commencent par pg_ et qui les dcrivent - galement. Aussi, psql -l liste toutes les bases de donnes. - - Essayez galement le fichier pgsql/src/tutorial/syscat.source. Il - illustre un grand nombre de commandes SELECT ncessaires pour - rcuprer l'information des tables systme de la base de donnes. - - 4.8) Mes requtes sont lentes ou ne font pas usage des index. Pourquoi ? - - Les index ne sont pas automatiquement utiliss par chaque requte. Ils - sont utiliss uniquement si la table est plus grande qu'une certaine - taille, et si la requte slectionne seulement un faible pourcentage - des lignes de la table. Ceci est d au fait qu'un accs disque - alatoire caus par un parcours d'index peut tre plus lent qu'une - simple lecture de la table, ou parcours squentiel - - Pour dterminer si un index devrait tre utilis, PostgreSQL a besoin - des statistiques de la table. Ces statistiques sont collectes en - lanant VACUUM ANALYZE ou simplement ANALYZE. Avec les statistiques, - l'optimiseur sait combien de lignes se trouvent dans la table et peut - mieux dterminer s'il faut utiliser l'index. Les statistiques sont - galement utiles pour dterminer l'ordre optimal des oprations de - jointure. La collecte des statistiques devrait tre effectue - rgulirement lorsque le contenu de la table change. - - Les index ne sont normalement pas utiliss pour les clauses ORDER BY - ou pour les jointures. Un parcours squentiel 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 - renvoye. 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 caractres joker tels que LIKE ou ~, les - index peuvent seulement tre utiliss dans certaines circonstances : - * Le dbut de la chane de recherche doit tre ancr au dpart de la - chane, c'est--dire - + Les modles pour LIKE ne doivent pas commencer par %. - + Les modles d'expression rgulire pour ~ doivent commencer - par ^. - * La chane de recherche ne peut pas commencer par une classe de - caractres, c'est--dire [a-e]. - * Les recherches sans casse comme ILIKE et ~* n'utilisent pas les - index. Utilisez plutt les index fonctionnels, dcrit dans la - section 4.12. - * La locale C par dfaut doit tre utilise lors de initdb. - - Dans les versions antrieures la 8.0, les indexs ne peuvent souvent - pas tre utiliss sauf si les types de donnes correspondent - exactement au type de la colonne de l'index. Ceci est particulirement - vrai pour les index de colonnes de type int2, int8 et numeric. - - 4.9) Comment puis-je savoir si l'optimiseur value mes requtes ? - - 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 donnes 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 donnes multi-dimensionnelles. Par - exemple, si un index R-tree peut tre construit sur un attribut de - type point, le systme peut plus efficacement grer les requtes du - type "Slection de tous les points d'un rectangle". - - L'article de rfrence qui dcrit le systme 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 intgrs peuvent prendre en charge les polygnes et - les botes. En thorie, 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 faon de procder. - - 4.11) Qu'est-ce que l'optimiseur gntique de requtes ? - - Le module GEQO (acronyme de GEnetic Query Optimizer) acclre - l'optimisation des requtes lors de jointures de nombreuses tables par - un algorithme gntique (GA). Il permet la gestion des grosses - requtes de jointures en utilisant une recherche non exhaustive. - - 4.12) Comment puis-je raliser 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'oprateur ~ ralise 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 exprimes de cette faon : - SELECT * - FROM table - WHERE lower(colonne) = 'abc'; - - Ceci n'utilisera pas un index standard. Nanmoins, si vous crez un - index fonctionnel, celui-ci sera utilis : - CREATE INDEX tableindex ON table (lower(colonne)); - - 4.13) Comment puis-je dtecter si un champ est NULL dans une requte ? - - Il vous suffit de tester la colonne avec IS NULL ou IS NOT NULL. - - 4.14) Quelle sont les diffrences entre les nombreux types de caractres ? - -Type Nom interne Notes --------------------------------------------------- -VARCHAR(n) varchar n spcifie la taille maximum, sans remplissage -CHAR(n) bpchar des espaces sont ajouts pour obtenir la - longueur fixe spcifie -TEXT text pas de limite suprieure pour la taille -BYTEA bytea tableau d'octets (accepte les octets nuls) -"char" char un caractre - - Vous verrez le nom interne en examinant les catalogues systme 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 donnes). Donc, l'espace rellement utilis est - lgrement plus grand que la taille dclare. Nanmoins, ces types de - donnes 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 chanes de longueurs - variables tout en limitant la taille de cette chane. TEXT est utile - pour les chanes de longueur illimite, avec malgr tout un maximum de - 1 Go. - - CHAR(n) est intressant pour stocker des chanes de taille identique. - CHAR(n) complte avec des espaces pour arriver la taille spcifie - alors que VARCHAR(n) n'enregistre que les caractres donns. BYTEA - sert stocker des donnes binaires, particulirement les donnes - incluant des octets NULL. Tous les types dcrits ici ont des - performances similaires. - - 4.15.1) Comment puis-je crer un champ srie, c'est--dire s'incrmentant - automatiquement ? - - PostgreSQL supporte un type de donnes SERIAL. Il cre automatiquement - une squence. 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 - squences. Vous pouvez aussi utiliser le champ OID de chaque ligne - comme valeur unique. Nanmoins, si vous avez besoin de sauvegarder - puis recharger la base de donnes, 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 rcuprer la prochaine valeur SERIAL partir de - l'objet squence est d'utiliser la fonction nextval() avant - l'insertion et de l'insrer 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 stocke dans - nouvelle_id avec d'autres requtes (c'est--dire en tant que cl - trangre de la table personne). Notez que le nom de la SEQUENCE - automatiquement cre sera <table>_<colonneserial>_seq, o table et - colonneserial sont les noms respectifs de votre table et de votre - colonne SERIAL. - - Autrement, vous pouvez rcuprer la valeur SERIAL affecte avec la - fonction currval() aprs qu'elle ait t insre par dfaut, - 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 rcuprer la valeur par dfaut bien que cela soit l'appoche la - moins portable et la valeur de l'OID se rinitialisera 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} - aprs un $sth->execute(). - - 4.15.3) Est-ce que currval() et nextval() n'amnent pas des problmes - lorsque plusieurs utilisateurs les lancent en mme temps ? - - Non. currval() renvoie la valeur actuelle affecte par votre - processus, et non pas par tous les utilisateurs. - - 4.15.4) Pourquoi mes numros de squences ne sont pas r-utiliss lors - d'une annulation de transaction ? Pourquoi existe-t'il des trous dans la - numrotation de ma colonne squentielle (SERIAL) ? - - Pour amliorer les accs concurrents, les valeurs de squences sont - donnes aux transactions qui en ont besoin et ne sont pas bloques - jusqu' la fin de la transaction. Ceci cre des trous dans le - numrotage pour les transactions annules. - - 4.16) Qu'est-ce qu'un OID ? Qu'est-ce qu'un TID ? - - Les OID sont la rponse de PostgreSQL aux identifiants de lignes - uniques. Chaque ligne cre dans PostgreSQL obtient un OID unique. - Tous les OID gnrs pendant initdb sont infrieurs 16384 (voir - include/access/transam.h). Tous les OID crs par un utilisateur sont - suprieurs ou gaux ceci. Par dfaut, tous ces OID sont uniques non - seulement dans une table ou une base mais unique l'intrieur d'une - installation PostgreSQL entire. - - PostgreSQL utilise les OID dans ses tables systme interne pour lier - les lignes entre tables. Ces OID peuvent tre utiliss pour identifier - des lignes utilisateurs spcifiques et utiliss dans des jointures. Il - est recommand que vous utilisiez le type de colonne OID pour stocker - des valeurs OID. Vous pouvez crer un index sur le champ OID pour un - accs plus rapide. - - Les OID sont attribus pour toute ligne d'un endroit central qui est - utilis par toutes les bases de donnes. 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 stocks en tant qu'entiers de quatre octets et - dborderont quatre milliards. Personne n'a jamais rapport un tel - cas et nous avons prvu de retirer la limite avant que cela ne se - produise. - - Les TIDs sont utiliss pour identifier des lignes physiques - spcifiques avec des valeurs de bloc et dcalage. Les TID changent - aprs que les lignes aient t modifis ou rechargs. Ils sont - utiliss par des entres d'index pour pointer vers des lignes - physiques. - - 4.17) A quoi correspond certains termes utiliss 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 - * rcupre, slectionne (select) - * remplace (replace), met jour (update) - * ajoute (append), insre (insert) - * OID, valeur squentielle (serial value) - * portal, curseur - * range variable, table name, table alias - - Une liste des termes gnraux pour le domaine des bases de donnes 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 mmoire virtuelle sur votre systme 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 russir mais cela - configurera d'une faon plus importante la taille du segment de - donnes de votre processus. Cette commande s'applique au processus - actuel et tous les processus lanc par celui-ci. Si vous avez des - problmes avec le client SQL parce que le processus serveur renvoie - trop de donnes, essayez a avant de lancer le client. - - 4.19) Comment puis-je connatre 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'oprations 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 rgle en fermant les gros objets - lors de la transaction. Donc, le premier essai d'oprations 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), gnrera 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 crer une colonne qui aura par dfaut l'heure - actuelle comme valeur ? - - Utilisez CURRENT_TIMESTAMP: -CREATE TABLE test (x int, heuremodif timestamp DEFAULT CURRENT_TIMESTAMP ); - - 4.22) Pourquoi mes sous-requtes utilisant IN sont-elles si lentes ? - - Dans les versions prcdant la 7.4, les sous-requtes ont t jointes - avec des jointures externes en parcourant squentiellement le rsultat - de la sous-requte pour chaque ligne de la requte externe. Si la - sous-requte renvoit quelques lignes et que la requte externe en - renvoit plein, IN sera plus rapide. Pour acclrer les autres - requtes, 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 indexe. - - A partir de la version 7.4, IN utilise actuellement les mmes - techniques sophistiques de jointures comme des requtes normales et - est prfr l'utilisation de EXISTS. - - 4.23) Comment puis-je raliser 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 requtes 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 complte (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 appeles des jointures INNER. - - Lors des prcdentes versions, les jointures externes peuvent tre - simules en utilisant UNION et NOT IN. Par exemple, lors d'une - jointure de tab1 et tab2, la requte suivante ralise 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 requtes utilisant plusieurs bases de - donnes ? - - Il n'existe pas de moyens de lancer des requtes sur une autre base - que la courante. Comme PostgreSQL charge des catalogues systmes - spcifiques la base de donnes, sa raction aux requtes inter-base - de donnes est incertaine. - - contrib/dblink permet les requtes entre bases de donnes en utilisant - des fonctions. Bien sr un client peut raliser des connexions - simultanes plusieurs bases de donnes et joindre les rsultats du - ct 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 crer/supprimer des tables temporaires dans - les fonctions PL/PgSQL de faon stable ? - - PL/PgSQL cache le contenu des fonctions et un effet de bord malheureux - est que si une fonction PL/PgSQL accde une table temporaire, que - cette table est ensuite supprime et recre, et que la fonction est - appele de nouveau, la fonction chouera car le contenu de la fonction - cache pointera toujours vers l'ancienne table temporaire. La solution - revient utiliser EXECUTE pour l'accs aux tables temporaires avec - PL/PgSQL. Ceci obligera l'analyse de la requte chaque fois. - - 4.27) Quelles options de cryptage sont disponibles ? - - * contrib/pgcrypto contient de nombreuses fonctions de cryptage, - utiliser dans des requtes 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 dsactive. Notez qu'il est aussi possible d'utiliser un - transport crypt d'une troisime partie, tel que stunnel ou ssh, - plutt que les connexions SSL natives de PostgreSQL. - * Les mots de passe des utilisateurs sont automatiquement crypts - depuis la version 7.3. Pour les versions prcdentes, vous devez - activer l'option PASSWORD_ENCRYPTION dans postgresql.conf. - * Le serveur peut fonctionner avec un systme de fichiers crypts. - _________________________________________________________________ - - Etendre PostgreSQL - - 5.1) J'ai crit une fonction utilisateur. Lorsque je l'excute 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-rpertoire 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 supportes en C, PL/PgSQL, et SQL. - Voir le Guide du Programmeur pour plus d'information. Un exemple de - fonction renvoyant une table dfinie 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 dpendances adquates pour les fichiers - d'en-tte. 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 dpendances - automatiquement. diff --git a/doc/FAQ_german b/doc/FAQ_german deleted file mode 100644 index 1459e5a08c4..00000000000 --- a/doc/FAQ_german +++ /dev/null @@ -1,978 +0,0 @@ - - Hufig 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 knnen 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 luft PostgreSQL? - 1.5) Woher bekomme ich PostgreSQL? - 1.6) Was ist die neueste Version von PostgreSQL? - 1.7) Wo bekomme ich Support fr 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 fr PostgreSQL verfgbar? - 1.11) Wie kann ich SQL lernen? - 1.12) Wie kann ich im Entwicklerteam mitarbeiten? - 1.13) Wie luft PostgreSQL im Vergleich zu anderen Datenbanksystemen? - 1.14) Kommt PostgreSQL mit den Anpassungen der Sommerzeit in - verschiedenen Lndern klar? - - Fragen zu Benutzerprogrammen - - 2.1) Welche Schnittstellen gibt es fr 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 fr PostgreSQL verfgbar? - 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 fr den Betrieb mit PostgreSQL? - - Fragen zum Betrieb - - 4.1) Wie whle 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 Maximalgre fr eine Zeile, eine Tabelle, eine - Datenbank? - 4.5) Wieviel Plattenplatz wird bentigt, 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 regulren Ausdrcken 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 Erhhung - des Wertes? - 4.11.2) Wie bekomme ich den Wert einer SERIAL-Sequenz? - 4.11.3) Fhrt currval() zu einer Race-Condition mit anderen Nutzern? - 4.11.4) Warum werden die Sequenzwerte nach einem Transaktionsabbruch - nicht zurckgesetzt? Warum gibt es Lcken 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 - luft? - 4.15) Wie kann ich eine Spalte erstellen, deren Default-Wert immer die - aktuelle Uhrzeit enthalten soll? - 4.16) Wie fhre ich eine OUTER JOIN durch? - 4.17) Wie kann ich Abfragen ber mehrere Datenbanken hinweg ausfhren? - 4.18) Wie kann ich mehrere Zeilen bzw. Spalten von einer Funktion - zurckgeben lassen? - 4.19) Warum bekomme ich eine Fehlermeldung wie - "relation with OID ##### does not exist" wenn ich temporre Tabellen - in - PL/PgSQL-Funktionen benutze? - 4.20) Welche Replikationslsungen gibt es? - 4.21) Warum werden die Tabellen- und Spaltennamen in meiner Abfrage - nicht erkannt? Warum werden Grobuchstaben 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. - (Fr 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 Vorzge - von kommerziellen Datenbanksystemen mit zukunftsweisenden Innovationen - kombiniert. PostgreSQL ist freie Software und dessen kompletter - Quellcode ist ffentlich verfgbar. - - Die PostgreSQL-Entwicklung wird von einem Team von meist freiwilligen - Entwicklern durchgefhrt. Dieses Team ist fr 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 - allmchtigen Zentralkommittee suchen - sparen Sie sich die Mhe, 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 natrlich 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 mchten). - - 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 Binrversionen ohne Quellcode - ist erlaubt. Die einzige Einschrnkung besteht darin, dass PostgreSQL - auf keinen Fall fr etwaige Probleme mit der Software haftet. Auerdem - 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 luft 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 luft 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) knnen PostgreSQL nur mit Hilfe der Cygwin-Umgebung ausfhren. - - Eine Portierung fr 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 jhrlich, - kleinere Korrekturversionen alle paar Monaten. - - 1.7) Wo bekomme ich Support fr PostgreSQL? - - Die PostgreSQL-Community bietet Untersttzung 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 knnen Sie mit z.B. irc -c - '#postgresql' "$USER" irc.freenode.net. daran teilnehmen. Auf Freenode - gibt es einen spanischsprachigen Channel #postgresql-es, einen - franzsischen, #postgresqlfr sowie einen brasilianischen, - #postgresql-br . Es gibt auerdem einen PostgreSQL-Channel bei EFNet. - - Eine Liste von Unternehmen, die Support fr 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 verffentlichten Version - * es wird um eingehendere Informationen gebeten, z.B.: - + Betriebssystem - + PostgreSQL-Version - + reproduzierbarer Fallbeispiel - + Debugging-Information - + Debugger-Backtrace-Ausgabe - * der Bug ist neu. Folgendes knnte passieren: - + ein Patch wird erstellt und in der nchsten 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 untersttzt eine erweiterte Teilmenge von SQL:2003. Siehe - unsere TODO-Liste unter http://www.postgresql.org/docs/faqs.TODO.html - fr eine Auflistung der bekannten Bugs, fehlenden Features und - zuknftigen Plne. - - Eine Anfrage nach einem neuen Feature fhrt normalerweise zu einer der - folgenden Antworten: - * das Feature ist bereits auf der TODO-Liste - * das Feature ist nicht wnschenswert, weil: - + es vorhandene Funktionalitt dupliziert, welche bereits dem - SQL-Standard folgt - + es wrde die Komplexitt der Code-Basis erhhen, ohne - nennenswerte Vorteile zu bringen - + es wre unsicher bzw. unzuverlssig - * das neue Feature wird der TODO-Liste hinzugefgt - - 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 groe 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 fr PostgreSQL verfgbar? - - PostgreSQL bietet umfangreiche Dokumentation, darunter ein groes - Handbuch, man-Pages und einige kleine Testprogramme. Siehe das /doc- - Verzeichnis. Ausserdem sind alle Handbcher online unter - http://www.postgresql.org/docs/ verfgbar. - - Zwei Bcher zu PostgreSQL sind online verfgbar unter - http://www.postgresql.org/docs/books/awbook.html und - http://www.commandprompt.com/ppbook/ . - - Eine Liste lieferbarer PostgreSQL-Bcher befindet sich unter - http://www.postgresql.org/docs/books Diverse technische Artikel - befinden sich unter http://www.postgresql.org/docs/techdocs . - - psql hat einige ntzliche \d-Befehle, um Informationen ber Typen, - Operatoren, Funktionen, Aggregate, usw. zu zeigen. - - Die PostgreSQL-Website enthlt noch mehr Dokumentation. - - 1.11) Wie kann ich SQL lernen? - - Die oben erwhnten PostgreSQL-spezifische Bcher bieten einen guten - Einstieg. Viele PostgreSQL-Anwender mgen "The Practical SQL Handbook" - (Bowman et al., Addison Wesley). Andere dagegen mgen "The Complete - Reference SQL" (Groff et al., McGraw-Hill). - - Es gibt ausserdem einige ntzliche 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 luft PostgreSQL im Vergleich zu anderen Datenbanksystemen? - - Es gibt verschiedene Methoden, Software zu messen: Eigenschaften, - Performanz, Zuverlssigkeit, Support und Preis. - - Eigenschaften - PostgreSQL besitzt die meisten Eigenschaften - wie - Transaktionen, Unterabfragen (Subqueries), Trigger, Views, - referenzielle Integritt bei Fremdschlsseln und verfeinertes - Locking - die bei groen kommerziellen DBMS vorhanden sind. Es - bietet auerdem 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 - betrgt der Unterschied +/-10%. - - Zuverlssigkeit - Es ist selbstredend, dass ein DBMS wertlos ist, wenn es nicht - zuverlssig arbeitet. Daher bemhen wir uns, nur streng - geprften und bestndigen 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 knnen. Wir glauben, dass - wir im Vergleich mit anderer Datenbanksoftware vorteilhaft - dastehen. - - Support - Unsere Mailinglisten bieten die Mglichkeit, gemeinsam mit - einer groen Gruppe von Entwicklern und Benutzern mgliche - Probleme zu lsen. Wir knnen nicht immer eine Fehlerbehebung - garantieren, kommerzielle DBMS tun dies aber auch nicht. Der - direkte Kontakt zur Entwickler- und Benutzergemeinschaft und - der Zugriff auf die Handbcher und den Quellcode ermglicht - einen im Vergleich zu anderen DBMS hherwertigeren Support. Es - gibt jedoch auch Anbieter von kommerziellen Support-Leistungen - (siehe FAQ-Punkt 1.7). - - Preis - PostgreSQL ist frei verfgbar, sowohl fr die kommerzielle wie - auch fr die nicht-kommerzielle Nutzung. Sie knnen den - PostgreSQL-Code ohne Einschrnkungen (auer denjenigen, die in - der oben angegebene BSD-artigen Lizenz erwhnt werden) in Ihr - Produkt integrieren. - - 1.14) Kommt PostgreSQL mit den Anpassungen der Sommerzeit in verschiedenen - Lndern klar? - - nderungen bei der US-Sommerzeit sind ab PostgreSQL Version 8.0.4 - bercksichtigt. nderungen in Canada und Western Australia sind ab - 8.0.10 bzw. 8.1.6 bercksichtigt. PostgreSQL-Versionen vor 8.0 nutzen - die Zeitzonendatenbank des Betriebssystems, um die Sommerzeit zu - berechnen. - - Fragen zu Benutzerprogrammen - - 2.1) Welche Schnittstellen gibt es fr PostgreSQL? - - Die PostgreSQL-Installation stellt nur Schnittstellen fr C und - Embedded C bereit. Alle weitere Schnittstellen sind unabhngige - Projekte, die einzeln heruntergeladen werden werden mssen. Diese - Trennung ermglicht individuelle Entwickler-Teams und - Entwicklungszyklen fr die jeweiligen Projekte. - - Einige Programmiersprachen wie PHP haben eine PostgreSQL- - Schnittstelle bereits eingebaut. Schnittstellen fr Sprachen wie Perl, - TCL, Python und viele anderen sind unter http://gborg.postgresql.org - im Bereich Drivers/Interfaces verfgbar sowie per Internet-Suche. - - 2.2) Wie kann man PostgreSQL in einer Website nutzen? - - Eine nette Einfhrung zu datenbank-gesttzten Webseiten kann unter - http://www.webreview.com (engl.) eingesehen werden. - - Fr die Web-Integration ist PHP eine ausgezeichnete Schnittstelle. PHP - gibt es bei http://www.php.net - - Fr komplexere Aufgaben bietet sich die Perl-Schnittstelle mit CGI.pm - oder mod_perl. - - 2.3) Hat PostgreSQL eine grafische Benutzerschnittstelle? - - Es gibt eine groe Anzahl von GUI-Programmen fr PostgreSQL - sowohl - kommerziell als auch Open-Source. Eine ausfhrliche 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 Ausfhrung von configure die Option --prefix mit dem - Zielverzeichnis angeben. - - 3.2) Wie regle ich Zugriffe von anderen Rechnern? - - PostgreSQL ist standardmig so eingestellt, dass Verbindungen nur vom - lokalen Rechner ber Unix Domain Sockets bzw. TCP/IP mglich sind. - Verbindungen von anderen Rechnern werden erst dann ermglicht, 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 groe Bereiche, in denen Performanzverbesserungen erzielt - werden knnen: - - 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 groen Anzahl von - Datenreihen aus einem Index - + Einsatz von LIMIT, um eine Untermenge der Abfragen- - ergebnisse zurckzuliefern - + Einsatz von vorbereiteten Befehlen (prepared queries) - + Einsatz von ANALYZE, um die Datenbankstatistik fr den - Abfragenplaner aktuell zu halten - + Regelmiger Einsatz von VACUUM bzw. pg_autovacuum - + Bei groen Datenvernderungen die Lschung von Indexen - - Server-Konfiguration - Einige Einstellungen in der Datei postgresql.conf wirken auf - die Performanz aus. Das Handbuch enthlt 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/ erlutert. - - 3.4) Welche Debugging-Funktionen sind fr PostgreSQL verfgbar? - - Unter den Optionen fr die Server-Konfigurierung gibt es zahlreiche - log_*-Variablen, die die Ausgabe von Abfrage- und Prozessstatistiken - ermglichen. Diese knnen fr Debugging-Zwecke sowie Performanz-Tests - sehr ntzlich sein. - - 3.5) Ich bekomme die Meldung "Sorry, too many clients", wenn ich eine - Verbindung aufzubauen versuche. Warum? - - Ihr System hat die maximal zulssige Anzahl von Datenbankverbindungen - erreicht (Voreinstellung 100). Sie mssen die maximale Anzahl der - gleichzeitig ausfhrbaren 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 fr den Betrieb mit PostgreSQL? - - PostgreSQL luft auf fast jeder Hardware-Kombination. Im PC-Bereich - gibt es allerdings sehr groe Abweichungen in der Qualitt. Fr einen - Arbeitsplatz- oder Entwicklungsrechner mag dies nicht so bedeutend - sein, im Server-Betrieb jedoch lohnt sich auf jeden Fall die - Investition in teurere Bestandteile (Stichwrter 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 whle ich per SELECT-Anweisung nur die ersten paar Zeilen bzw. eine - beliebige Zeile in einer Abfrage aus? - - Wenn Sie bei der Ausfhrung der Abfrage die Anzahl der anzufordenden - Reihen bereits kennen, nutzen Sie LIMIT. Wenn die ORDER BY- Anweisung - mit einem Index verwendet wird, ist es mglich, dass die gesamte - Abfrage nicht ausgefhrt werden muss. Wenn Sie die Anzahl der der - anzufordenden Reihen nicht kennen, verwenden Sie einen Cursor und - FETCH. - - Um eine beliebige Zeile auszuwhlen, 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 knnen sich die Datei - pgsql/src/bin/psql/describe.c mit dem Quellcode fr psql ansehen. Sie - enthlt die SQL-Abfragen, die die Backslash-Kommandos (\) ausfhren. - Sie knnen psql auch mit der -E Option starten. Danach gibt psql die - Abfragen aus, die es bei der Ausfhrung der Befehle benutzt. Auerdem - biete PostgreSQL ein SQL-kompatibles INFORMATION SCHEMA, das - Metainformation ber die Datenbank zur Verfgung stellt. - - Mit psql -l knnen Sie alle Datenbanken anzeigen lassen. - - Die Datei pgsql/src/tutorial/syscat.source enthlt auerdem 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 gendert werden, sofern der neue Datentyp die Werte des - alten Datentype aufnehmen kann. - - Bei frheren 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 gelschten Spalte - verwendet wurde, fhren Sie VACUUM FULL aus. - - 4.4) Was ist die Maximalgre fr eine Zeile, eine Tabelle, eine Datenbank? - - Es bestehen folgende Obergrenzen: - Maximale Gre eine Datenbank? unbeschrnkt (es existieren - Datenbanken mit 32 TB) - Maximale Gre einer Tabelle? 32 TB - Maximale Gre einer Zeile? 400 GB - Maximale Gre einer Spalte? 1 GB - Maximale Anzahl von Zeilen in einer Tabelle? - unbeschrnkt - Maximale Anzahl von Spalten in einer Tabelle? - 250-1600 je nach Spaltentyp - Maximale Anzahl von Indexen fr eine Tabelle? - unbeschrnkt - - Selbstverstndlich sind dies theoretische Werte, die oft durch die - verfgbaren Platten- und Speicherressourcen beschrnkt werden. Extreme - Gren knnen zu Leistungseinbuen fhren. - - Die maximale Tabellengre von 32 TB bentigt keine - Large-File-Untersttzung im Betriebssystem. Groe Tabellen werden in - Dateien mit einer Gre von je 1 GB aufgeteilt, wodurch etwaige - dateisystem-bedingte Beschrnkungen nicht relevant sind. - - Die maximale Tabellengre und die maximale Anzahl von Spalten knnen - vervierfacht werden, indem man die Default-Blockgre auf 32 KB - heraufsetzt. Die Tabellengre kann auch durch Tabellenpartitionierung - vergrert werden. - - Eine Einschrnkung ist, dass Indexe nur auf Spalten erstellt werden - knnen, die bis etwa 2.000 Zeichen gro sind. Um auf grere Spalten - eine UNIQUE-Constraint setzen zu knnen, nutzen Sie einen funktionalen - Index mit dem MD5-Hash-Wert der Spalte. Um innerhalb einer groen, mit - Text belegten Spalte suchen zu knnen, verwenden Sie einen - Volltext-Index. - - 4.5) Wieviel Plattenplatz wird bentigt, um die Daten aus einer typischen - Textdatei abzuspeichern? - - Eine PostgreSQL-Datenbank kann beim Abspeichern einer einfachen - Textdatei bis zu fnfmal mehr Platz gegenber der eigentlichen Gre - 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 Lnge der Textbeschreibung 20 Byte betrgt. Die - einfache Datei wrde 2,8 MB gro sein. Die Gre der - PostgreSQL-Datenbankdatei, die diese Daten enthlt, liegt ungefhr bei - 5,2 MB: - 24 Bytes: jeder Zeilenkopf (ungefhr) - +24 Bytes: ein Integer-Feld und ein Textfeld - + 4 Bytes: Zeiger auf der Datenseite auf den Tupel - ----------------------------------------------- - 52 Bytes pro Zeile - - Die Gre einer Datenseite in PostgreSQL betrgt 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, knnen 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 Gre bersteigt, und die Abfrage nur eine kleine - Prozentzahl der Tabellenzeilen abfragt. Der Grund hierfr ist der, - dass die durch einen Index verursachten Festplattenzugriffe manchmal - lnger dauern wrden 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 - regelmssig durchgefhrt werden, da sich der Inhalt einer Tabelle ja - auch verndert. - - Indexe werden normalerweise nicht in ORDER BY-Abfrage oder in JOINs - verwendet. Ein sequentieller Scan mit anschlieendem explizitem - Sortiervorgang ist normalerweise schneller als ein Index-Scan einer - groen 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 zurckgeliefert wird. - - Sollte es danach aussehen, also ob der Optimierer irrtmlich einen - sequentiellen Scan ausfhrt, fhren Sie SET enable_seqscan TO 'off' - aus und prfen Sie, ob die Indexabfrage dadurch scheller geworden ist. - - Bei der Nutzung von Wildcard-Operatoren wie LIKE oder ~, knnen Indexe - nur unter bestimmten Umstnden verwendet werden: - * Das Suchmuster muss sich an Anfang des Strings befinden, d.h.: - + LIKE-Suchmuster drfen nicht mit % anfangen; - + ~ (regulre Ausdrcke) mssen mit ^ anfangen. - * Das Suchmuster darf nicht mit einer Zeichenklasse (z.B. [a-e]) - beginnen. - * Suchmuster, die Gross- und Kleinschreibung nicht bercksichtigen - (z.B. ILIKE bzw. ~*), verwenden keine Indexe. Stattdessen knnen - funktionale Indexe verwendet werden, die im Punkt 4.8 beschrieben - werden. - * Die Standard-Locale "C" muss whrend der Datenbank-Initialisierung - mit initdb verwendet worden sein, da andere locales den - nchstgrten Wert nicht ermitteln knnen. Es ist allerdings - mglich, einen besonderen text_pattern_ops-Index fr solche Flle - zu erstellen. - - In Versionen vor 8.0 werden Indexe oft nicht benutzt, wenn die - jeweiligen Datentypen nicht genau bereinstimmen. Dies gilt besonders - fr 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 regulren Ausdrcken und bei einer - Suche, bei der Gro- und Kleinschreibweisen ignoriert werden? Wie verwende - ich einen Index bei solchen Suchabfragen? - - Der Operator ~ wendet einen regulren 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, knnen - keine Werte in die Spalte eingefgt 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, hher 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 Gre legt die Maximallnge fest; kein - Auffllen mit Leerzeichen -CHAR(n) bpchar mit Leerzeichen gefllt bis zur angegebenen Lnge -TEXT text keine obere Schranke fr die Lnge -BYTEA bytea Bytearray mit variabler Lnge (auch fr - '\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 Lnge an, gefolgt von den Daten). Daher ist der tatschlich - belegte Platz immer etwas mehr als die deklarierte Feldgre. - Allerdings wird unter Umstnden auf diese Datentypen Datenkompression - durch das TOAST- Verfahren angewendet, womit der tatschlich belegte - Platz auch geringer als erwartet ausfallen kann. - - Fr die Speicherung von Zeichenketten variabler Lnge empfiehlt sich - VARCHAR(n). Die maximale Lnge eines VARCHAR(n)-Felds wird bei der - Tabellendefinition festgelegt. TEXT setzt keine Lngengrenze, - allerdings gibt es eine systembedingte Obergrenze von 1 GB. - - CHAR(n) ist geeignet fr die Speicherung von Zeichenketten, die alle - die gleiche Lnge haben. Bitte beachten Sie, dass CHAR(n) automatisch - Zeichenketten bis zur definierten Feldlnge mit Leerzeichen ausfllt, - whrend bei VARCHAR(n) nur die tatschlich eingegebene Zeichenkette - gespeichert wird. - - BYTEA ist fr binre Daten, besonders fr Werte, die NULL-Bytes haben. - - Alle der hier erwhnten Typen weisen hnliche Performanzeigenschaften - auf. - - 4.11.1) Wie erzeuge ich ein serielles Feld mit automatischer Erhhung 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 Mglichkeit wre, mit der nextval()-Funktion den nchsten - SERIAL-Wert von dem Sequenzobjekt vor der Auszufhrung einer - INSERT-Anweisung anzufordern und ihn dann explizit in die - INSERT-Anweisung einzubinden. Anhand der Beispieltabelle in 4.11.1 - knnte 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 stnde der neue Wert in der Variablen new_id fr die Verwendung - in weiteren Abfragen zur Verfgung, zum Beispiel als Fremdschlssel - 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 Mglichkeit knnen Sie nach einer INSERT-Anweisung den - automatisch eingefgten SERIAL-Wert mit der currval()-Funktion - zurckgeben 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) Fhrt currval() zu einer Race-Condition mit anderen Nutzern? - - Nein. currval() liefert einen Wert zurck, der von Ihrer - Datenbank-Session bestimmt wird, und der anderen Sessionen nicht zur - Verfgung steht. - - 4.11.4) Warum werden die Sequenzwerte nach einem Transaktionsabbruch nicht - zurckgesetzt? Warum gibt es Lcken in der Nummerierung meiner - Sequenz-/SERIAL-Spalte? - - Um die gleichzeitige Abarbeitung von Transaktionen zu verbessern, - werden Sequenzen gerade nicht fr andere Transaktionen gesperrt, - sondern die Sequenznummern werden den laufenden Transaktionen sofort - zugeteilt. Lcken 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 ungefhr 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 anfllig fr berlufe. Auerdem - knnen 8-Byte-Sequenzwerte mit SERIAL8 erzeugt werden. - - CTIDs werden benutzt, um bestimmte physikalische Zeilen durch Block - und Offset Werte zu identifizieren. CTIDs verndern sich, sobald - Zeilen verndert oder zurckgeladen werden. Sie werden in - Indexeintrgen 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 Hchstgrenzen fr 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 - ausgefhrt werden. Auf jedem Fall wird die Grenze des Datensegments - fr Prozesse erhht werden und eventuell die erfolgreiche Ausfhrung - der Abfrage ermglichen. Falls Sie ein Problem mit dem SQL-CLient - haben, weil das Backend zu viele Daten zurckliefert, versuchen Sie - dies vor dem Start des SQL-Clients. - - 4.14) Wie kann ich feststellen, welche PostgreSQL-Version bei mir luft? - - 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 fhre ich eine OUTER JOIN durch? - - PostgreSQL untersttzt 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 verknpfen tabelle_1 mit tabelle_2 ber die - Spalte 'spalte' und geben auerdem alle unverknpften Zeilen in - tabelle_1 (diejenigen, die keine Entsprechung in tabelle_2 haben) - zurck. Ein RIGHT JOIN wrde hingegen alle unverknpften Zeilen in - tabelle_2 hinzufgen und ein FULL JOIN wrde alle verknpften Zeilen - sowie jeweils alle unverknpften Zeilen aus den beiden Tabellen - zurckliefern. Die Angabe von OUTER ist nicht zwingend und kann in - LEFT, RIGHT und FULL-Verknpfungen weggelassen werden. Normale - Verknpfungen sind INNER JOINs. - - 4.17) Wie kann ich Abfragen ber mehrere Datenbanken hinweg ausfhren? - - Es gibt keinen Weg, innerhalb einer Abfrage auf mehr als eine - Datenbank zuzugreifen. Da PostgreSQL datenbank-spezifische - Systemkataloge ldt, ist eine datenbankbergreifende Abfrage nicht - mglich. - - contrib/dblink ist eine Erweiterung, die datenbankbergreifende - Abfragen ber Funktionsaufrufe ermglicht. - - 4.18) Wie kann ich mehrere Zeilen bzw. Spalten von einer Funktion zurckgeben - lassen? - - Funktionen knnen mehrere Zeilen und Spalten zurckgeben, vgl.: - http://www.postgresql.org/docs/techdocs.17. - - 4.19) Warum bekomme ich eine Fehlermeldung wie "relation with OID ##### does - not exist" wenn ich temporre Tabellen in PL/PgSQL-Funktionen benutze? - - In PostgreSQL-Versionen vor 8.3 verarbeitet PL/PgSQL Funktionen in - einer Cache. Dies hat eine unangenehme Nebenwirkung, nmlich dass wenn - eine PL/PgSQL-Funktion auf eine temporre Tabelle zugreift, und diese - Tabelle anschlieend gelscht bzw. neu erstellt wird, die Funktion - fehlschlagen wird, da die gecachten Funktionsinhalte noch auf die alte - temporre Tabelle zeigen. Die Lsung fr diese Probleme besteht darin, - in der PL/PgSQL- Funktion mittels EXECUTE auf temporre Tabellen - zuzugreifen. Dies bewirkt, dass bei jedem Funktionsruf die betreffende - Abfrage neu geparst wird. - - Dieses Problem taucht in PostgreSQL 8.3 und spteren Versionen nicht - mehr auf. - - 4.20) Welche Replikationslsungen gibt es? - - Der Begriff "replikation" umfasst mehrere verschiedene Technologien, - jede mit eigenen Vor- und Nachteilen. - - Mit "Master/slave"-Replikation werden nderungen in einer - Hauptdatenbank durchgefhrt und an "Sklaven" verteilt, die im - Nur-Lese-Modus arbeiten. Die populrste Lsung fr PostgreSQL ist - Slony-I. - - "Multi-master replication" ermglicht 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 populrste freie Lsung fr - PostgreSQL. - - Es gibt auch einige kommerzielle und hardware-basierte - Replikationslsungen fr verschiedene Arten der Replikation. - - 4.21) Warum werden die Tabellen- und Spaltennamen in meiner Abfrage nicht - erkannt? Warum werden Grobuchstaben umgewandelt? - - Die hufigste Ursache ist die Verwendung von Gnsefchen 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 - fhrt, dass man sie danach immer in Gnsefchen angeben muss. Im - obigen Beispiel muss man also immer etwa SELECT * FROM "Tabelle" - verwenden. Um dieses Problem zu vermeiden, mssen Sie immer eines der - folgenden Punkte beachten: - * bei der Tabellenanlegung keine Gnsefchen verwenden; - * in Identifikatoren nur Kleinschreibung verwenden; - * immer Identifikatoren mit Gnsefchen versehen - _________________________________________________________________ - - Anmerkungen des bersetzers - - Die englische Vorlage dieser FAQ wird stndig 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" enthlt eventuell nderungen, die noch nicht auf der - PostgreSQL-Website eingebunden worden sind. - - ber Verbesserungshinweise und Korrekturvorschlge sowie - Verstndnisfragen 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 zuverlssige Anlaufstellen. diff --git a/doc/FAQ_hungarian b/doc/FAQ_hungarian deleted file mode 100644 index 99f5ba4c630..00000000000 --- a/doc/FAQ_hungarian +++ /dev/null @@ -1,1234 +0,0 @@ - PostgreSQL GyIK - - Utolso modosts dtuma: 2005 mjus 9. - - Fordts aktualizlsa: 2005 jnius - - A GyIK karbantartoja: Bruce Momjian (pgman@candle.pha.pa.us) - - Fordto: Hornyk Lszlo - (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 krdsek: - - http://www.PostgreSQL.org/users-lounge/docs/faq.html. - - ---------------------------------------------------------------------- - -ltalnos krdsek - - 1.1 Mi a PostgreSQL? Hogy kell kimondani? - 1.2 Mik a PostgreSQL felhasznlsi felttelei? - 1.3 Milyen UNIX opercios rendszereken fut PostgreSQL? - 1.4 Milyen nem UNIX opercios rendszerek elrhetek? - 1.5 Hogyan tudok PostgreSQL-t szerezni? - 1.6 Hogyan kapok termktmogatst? - 1.7 Melyik a legfrissebb kiads? - 1.8 Milyen dokumentcio ll rendelkezsre? - 1.9 Hogyan tallok informciot hibkrol vagy hinyzo funkcionaltsrol? - 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 kldjek hibajelentst? - 1.14 Milyen a PostgreSQL ms DBMS-ekkel sszehasonltva? - 1.15 Hogyan tudom zletileg segiteni a PostgreSQL-t? - 1.16 Ki irnytja a PostgreSQL-t? - -Felhasznloi kliens krdsek - - 2.1 Van ODBC meghajto PostgreSQL-hez? - 2.2 Milyen eszkzk llnak rendelkezsre PostgreSQL Web fejlesztsekhez? - 2.3 Van a PostgreSQL-hez grafikus felhasznloi fellet ? Riport genertor? - Begyazott lekrdez nyelv fellet? - 2.4 Milyen programozsi nyelvekkel lehet elrni a PostgreSQL szervert? - -Adminisztrcios krdsek - - 3.1 Hogyan tudom a PostgreSQL-t /usr/local/pgsql -tl eltr helyre - installlni? - 3.2 AMikor elindtom a postmaster-t, egy "Bad System Call"-t vagy core - dump-ot kapok. Mirt? - 3.3 Amikor megproblom inditani a postmaster-t, "IpcMemoryCreate" hibkat - kapok. Mirt? - 3.4 Amikor megproblom inditani a postmaster-t, "IpcSemaphoreCreate" - hibkat kapok. Mirt? - 3.5 Hogyan tudom kontrolllni a ms gpekrl rkez kapcsolat krseket? - 3.6 Hogyan tudom nagyobb teljestmnyre hangolni az adatbzisomat? - 3.7 Milyen hibakeres lehetsgek rhetek el? - 3.8 Mirt kapok "Sorry, too many clients" hibt csatlakozsnl? - 3.9 Mi van pgsql_tmp knyvtrban? - 3.10 Mirt kell dumpolni s jratlteni PostgreSQL kiads vltsnl? - -Mkdtetsi krdsek - - 4.1 Mi a klnbsg a binris s a norml kurzorok kztt? - 4.2 Hogyan tudom select-elni a lekrdezs els pr sort? - 4.3 Hogy tudom kilistzni a tblkat vagy ms dolgokat a PostgreSQL-ben? - 4.4 Hogyan tudok eltvoltani egy oszlopot egy tblbol? - 4.5 Mi a maximlis mrete egy sornak, egy tblnak vagy egy adatbzisnak? - 4.6 Mekkora adatbzis lemez terlet szksges egy tipikus szveg llomny - trolshoz? - 4.7 Hogy tudhatom meg milyen tblk, indexek, adatbzisok vagy - felhasznlok vannak definilva? - 4.8 A lekrdezseim lassak, vagy nem hasznljk az indexeket. Mirt? - 4.9 Hogy tudom ellenrizni, hogy optimalizlta a lekrdezs optimalizlo a - lekrdezsem? - 4.10 Mi az R-tree index? - 4.11 Mi a Genetic Query Optimizer? - 4.12 Hogyan tudok regexp keresst s case-insensitive regexp keresst - hasznlni? Hogyan tudok indexet hasznlni case-insensitive keresshez? - 4.13 Hogyan tudom szlelni egy lekrdezsban, ha egy mez NULL? - 4.14 Mi a klnbsg a klnbz karaktertpusok kztt? - 4.15.1 Hogyan tudok ltrehozni automatikusan nvekv rtk mezt? - 4.15.2 Hogyan kaphatom meg egy SERIAL beszrs rtkt? - 4.15.3 A currval() s a nextval() nem teremt holtpont veszlyes helyzetet - a felhasznlok kztt? - 4.15.4 Mirt nem hasznlodnak fel jra a sequence szmok tranzakcio abort - esetn? Mirt vannak problmk a serial oszlopok szmozsval? - 4.16 Mi a OID? Mi a TID? - 4.17 Mi a PostgreSQL-ben hasznlt kifejezsek jelentse? - 4.18 Mirt kapom ezt a hibt: "ERROR: Memory exhausted in - AllocSetAlloc()"? - 4.19 Hogyan tudhatom meg PostgreSQL, milyen verziot futtatok? - 4.20 Mirt kapok "invalid large obj descriptor" hibt nagy objektumok - kezelsnl? - 4.21 Hogy hozhatok ltre olyan oszlopot, aminek alaprtelmezett rtke a - jelenlegi id? - 4.22 Mirt olyan lassak az al-lekrdezseim IN-nel? - 4.23 Hogyan tudok outer join-t vgrehajtani? - 4.24 Hogyan tudok tbb adatbzison vgrehajtani lekrdezst? - 4.25 Hogy tudok tbb soros vagy oszlopos eredmnyt visszaadni egy - funkciobol? - 4.26 Mirt nem tudom megbizhatoan ltrehozni s trlni az tmeneti - tblkat a PL/pgSQL funkciokban? - 4.27 Milyen replikcios lehetsgek vannak? - 4.28 Milyen kodolsi lehetsgek vannak? - -A PostgreSQL kiterjesztse - - 5.1) rtam egy felhasznloi funkciot. Mirt core dumpol az adatbzis - amikor hasznlom? - 5.2) Hogyan lehet j adattpusokat s funkciokat hozzadni a PostgreSQL - disztribciohoz? - 5.3) Hogyan lehet olyan C funkciot rni, ami Tuple-t ad vissza? (tbb - soros tbb oszlopos eredmnyek) - 5.4) Megvltoztattam egy forrs llomnyt. Mirt nem vltozik a binris - jrafordts utn? - - ---------------------------------------------------------------------- - -ltalnos krdsek - - 1.1 Mi a PostgreSQL? Hogy kell kimondani? - - gy ejstd ki: Post-Gres-Q-L. - - (Vagy taln inkbb tltsd le a kis mp3-at a PostgreSQL homepage-rl) - - A PostgreSQL a POSTGRES adatbzis management rendszer egy kiegsztse, - ami egy kvetkez genercios DBMS kutatsi prototpus. Megtartja a - POSTGRES adatmodellt s gazdag adattpus vlasztkt, de a PostQuel - lekrdez nyelvet az SQL egy kiterjesztett verziojval helyettesti. A - PostgreSQL szabad s a teljes forrskod hozzfrhet. - - A PostgreSQL fejlesztst egy csapat vgzi, amelynek minden tagja - megtallhato a PostgreSQL fejleszti levelezsi listn. A jelenlegi - koordintor Marc G. Fournier (scrappyp@PostgreSQL.org). Ez a csapat - felels minden fejlesztsrt. <>A PostgreSQL 1.01 alkotoi Andrew Yu s - Jolly Chen voltak. Sokan jrultak hozz portolssal, tesztelssel, - hibakeresssel s fejlesztssel. Az eredeti Postgres kod, amibl a - PostgreSQL szrmazik Michael Stonebraker professzor irnytsa alatt - fejlesztettek az egyetem programozoi, tanuloi s vgzett tanuloi. <> - - A szoftver eredeti neve Postgres volt. Amikor SQL funkcionaltssal - egsztettk ki 1995-ben, a nevt Postgres95-re vltoztattk. 1996 vgn - kapta mai nevt. - - 1.2 Mik a PostgreSQL felhasznlsi felttelei? - - Az eredeti angol copyright szveg: - - -------------------- - - 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 leegyszerstve azt jelenti, hogy jogod van hasznlni a - szoftvert mindenfle ellenszolgltats (pnz, stb) nlkl, a forrs kodot - modosthatod, s tovbbadhatod, DE semmilyen, a szoftver hasznlatbol - kvetkez krosodsrt nem vllal garancit a fejleszt. A fenti a BSD - licensz, egy klasszikus nyilt-forrskod licensz. Nem tartalmaz - megszortsokat arra, hogy a forrskodot hogyan hasznlod fel. - - Kedveljk ezt a licensz formt s nem ll szndkunkban megvltoztatni. - - 1.3 Milyen UNIX opercios rendszereken fut PostgreSQL? - - ltalban minden UNIX-kompatibilis opercios rendszer kpes arra hogy - futtassa a PostgreSQL-t. Azokat a platformokat, amiken teszteltk a - kiadst megtallhatod a installcios utastsok kztt. - - 1.4 Milyen nem UNIX opercios rendszerek elrhetek? - - Kliens - - A libpq C fggvnyknyvtrat, a psql-t s ms felleteket le lehet gy - fordtani, hogy fussanak MS Windows opercios rendszereken. Ebben az - esetben a kliens MS Windows-on fut s TCP/IP segtsgvel kommunikl a - Unixon futo szerverrel. A "win32.mak" llomny a kiads rsze, ennek - segtsgvel lehet Win32 platformokra lefordtani a libpq-t s a psql-t. A - PostgreSQL ODBC kliensekkel is kpes kommuniklni. - - Szerver - - <>Az adatbzis szerver Cygwin segtsgvel fut Windows NT s Win2k - rendszereken. Tovbbi informcio tallhato a pgsql/doc/FAQ_MSWIN - llomnyban s a MS Windows FAQ-ban a kvetkez helyen: - http://www.PostgreSQL.org/docs/faq-mswin.html. Natv MS Windows - NT/2000/XP portok jelenleg fejleszts alatt llnak. - - 1.5 Hogyan tudok PostgreSQL-t szerezni? - - Az elsdleges anonim ftp oldal: ftp://ftp.PostgreSQL.org/pub. - - A tkr oldalak listja megtallhato a f weboldalunkon. - - 1.6 Hogyan kapok termktmogatst? - - Az elsdleges lista a pgsql-general@postgresql.org. Ez hasznlhato a - PostgreSQL-lel kapcsolatos prbeszdekre. Ha fel szeretnl ratkozni, - kldj egy levelet a kvetkez tartalommal (nem trggyal) a - pgsql-general-request@postgresql.org cmre: - - subscribe - - end - - Van egy hibkkal kapcsolatos levelezsi lista is: - pgsql-bugs-request@PostgreSQL.org a kvetkez tartalommal: - - subscribe - - end - - A fejleszto"i levelezsi lista: pgsql-hackers-request@PostgreSQL.org a - kvetkez tartalommal: - - subscribe - - end - - Egyb levelezsi listk tallhatoak a weboldalunkon: - http://www.PostgreSQL.org - - Van egy IRC csatorna is #PostgreSQL nven ahol felteheted krdseid. A - kvetkez unix paranccsal csatlakozhatsz: - - irc -c '#PostgreSQL' "$USER" irc.phoenix.net. - - A kereskedelmi termktmogatst nyjto cgek listja elrhet itt: - http://www.PostgreSQL.org/users-lounge/commercial-support.html - - Magyar nyelvu" levelezsi lista nincs, de ha tudok segiteni a fenit e-mail - cimemen elrheto" vagyok. - - 1.7 Melyik a legfrissebb kiads? - - A legfrissebb PostgreSQL kiads a 8.0. - - A tervek szerint minden vben lesz egy nagyobb fejlesztseket tartalmazo - kiads, mg a kisebb fejlesztseket nhny havonta adjuk ki. - - 1.8 Milyen dokumentcio ll rendelkezsre? - - Szmos kziknyv, man oldalak s kis teszt pldk tallhatoak a kiadsban - a doc/ knyvtr alatt. Az interneten is olvashatod a dokumentciot a - kvetkez cmen: - - http://www.PostgreSQL.org/users-lounge/docs/. - - Kt PostgreSQL knyv rhet el az interneten a - http://www.PostgreSQL.org/docs/awbook.html s a - http://www.commandprompt.com/ppbook/ cmeken. A megvsrolhato knyvek - listja itt tallhato: http://www.ca.PostgreSQL.org/books/. A - PostgreSQL-lel kapcsolatos technikai jelleg cikkek gyjtemnye: - http://techdocs.PostgreSQL.org/. - - A psql parancs rendelkezik nhny \d utastssal, amellyekkel listzhatoak - az opertorok, a funkciok, stb. - - A website is tartalmaz tovbbi dokumentciokat. - - 1.9 Hogyan tallok informciot hibkrol vagy hinyzo funkcionaltsrol? - - A PostgreSQLaz SQL-92 szabvny egy kiegsztse. Nzd meg a TODO listkat - ha rdekelnek az ismert hibk. - - 1.10 Hogy tanuljam meg az SQL nyelvet? - - A PostgreSQL knyv a http://www.PostgreSQL.org/docs/awbook.html cmen - tartalmaz SQL alapokat. Elrhet egy msik SQL knyv is a - http://www.commandprompt.com/ppbook cmen. Egy szp oktato anyag tallhato - 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 msik lehetsg a "Tantsd magad 21 nap alatt SQL-re, msodik kiads" - a http://members.tripod.com/er4ebus/sql/index.htm. - - Sok felhasznlonak tetszett a gyakorlati SQL knyv ("The Practical SQL - Handbook"). - - 1.11 A PostgreSQL 2000. v kompatibilis? - - Igen, knnyedn kezeli a 2000 utni s idszmtsunk eltt 2000 eltti - dtumokat is. - - 1.12 Hogyan lehet csatlakozni a fejleszt csapathoz? - - Elsszr is tltsd le a forrskodot, s olvasd el a PostgreSQL - fejleszti dokumnetciot a web oldalunkon vagy a kiadsban. Ezutn - ratkozz fel a pgsql-hackers s a pgsql-patches levelezsi listkra. - Vgl pedig kldj be magas szinvonal patch-eket a pgsql-patches listra. - - Van egy pr ember, akiknek commit privilgiumuk a PostgreSQL CVS fn. - k olyan sok magas szinvonal patch-et kldtek be, hogy az addigi - csapat mr nem tudta kvetni, s nem volt ktsgnk arrol, hogy a - patch-ek amiket k kldenek jo minsg. - - 1.13 Hogyan kldjek hibajelentst? - - Ltogass el a BugTool oldalra: - http://www.PostgreSQL.org/bugs/bugs.php - Itt megtallod kvetend utastsokat. - - Ellenrizd az ftp oldalunkon is, hogy nincs-e jabb verzio vagy folt. - ftp://ftp.PostgreSQL.org/pub - - 1.14 Milyen a PostgreSQL ms DBMS-ekkel sszehasonltva? - - Szmos nzpontbol lehet vizsglni a szoftvert: kpessgek, teljestmny - megbzhatosg, tmogatottsg s r. - - Kpessgek: A PostgreSQL rendelkezik a nagy, kereskedelmi DBMS-ek - kpessgeivel: tranzakciok, al-lekrdezsek, triggerek, nzetek, kls - kulcsok, integrts s kifinoult zrmechanizmusok. Van nhny kpessge, - ami a kereskedelmi adatbzisokbol hinyzik, mint pldul a felhasznlo - ltal definilt tpusok, rklds, szablyok s verzio kontroll a - zrolsi vitk reduklsrt. - - Teljestmny: A PostgreSQL teljestmnye hasonlt a kereskedelmi s ms - nylt adatbzis szerverekhez. Lehet bizonyos esetekben lassabb, msokban - gyorsabb. A MySQL nev tanulo RDBMS pldul gyorsabban hajt vgre - insert/update mveleteket, mivel a tranzakciokat elsumkolja. Persze a - MySQL nem rendelkezik a kpessgek rszben felsoroltak nagy rszvel. Mi a - megbzhatosgra s a kpessgekre ptnk, br a teljestmny is n minden - kiadssal. Van egy rdekes oldal a MySQL s a PostgreSQL - sszehasonltsval a http://openacs.org/philosophy/why-not-mysql.html - cmen. - - Megbzhatosg: Tudjuk hogy ha egy DBMS nem megbzhato, akkor teljesen - haszontalan. Igyeksznk jol tesztelt, stabil kodot kiadni, amiben a lehet - legkevesebb hiba van. Minden kiads eltt eltellik legalbb 1 honap bta - teszt, s a kiadsi trtnet is azt mutatja, hogy stabil kodot adunk ki, - ami kszen ll a produktv felhasznlsra. gy gondoljuk, fellmlunk ms - adatbzis szoftvereket ezen a tren. - - Tmogats: A levelezsi listink kapcsolatot teremtenek a fejlesztk s - felhasznlok csoportjval , akik segtenek a problmk megoldsban. Br - nem tudjuk garantlni hogy ki tudjuk javtani a hibt, ms, kereskedelmi - adatbzis cgek sem tudjk. A fejleszt csoport kzvetlen elrsi - lehetsge, a kzssg, a dokumentcio s a forrskod gyakran tmogatst - biztost, mint ms adatbzisoknl. Van kereskedelmi, alkalmi tmogats - azoknak, akiknek szksge van r (lsd: 1.6). - - r: A PostgreSQL szabad brmilyen felhasznlsra, akr kereskedelmire is. - A termkhez hozzadhatod a sajt forrskodjaidat korltozs nlkl. - - 1.15 Hogyan tudom zletileg segiteni a PostgreSQL-t? - - A PostgreSQL els osztly infrastruktrval rendelkezik, amit 1996-ban - indtottunk el. Mindent Marc Fourniernek ksznhetnk, aki ltrehozta s - karbantartja a rendszert. - - A minsgi infrastruktra nagyon fontos egy nyilt forrs szoftver - esetben. Megvd az olyan fennakadsoktol, amelyek komoly ksseket - okoznak a fejlesztsekben. Termszetesen ez az infrastruktra nem olcso. - Szmos havi s llando kiadsunk van. Ha a cgednek van pnze, amivel - tmogatn erfesztseinket, krlek ltogass el a - http://store.pgsql.com/shopping/ oldalra. - - Br a weboldal "PostgreSQL, Inc"-knt emlti, a hozzjrulsok kizrolag a - PostgreSQL fejlesztsre rtendoek, s nem egy meghatrozott cgnek. Ha - jobban tetszik, kldhetsz csekket is a kapcsolati cmek brmelyikre. - - 1.16 Ki irnytja a PostgreSQL-t? - - Ha kzponti bizottsgot, ellenrzo" cget keresel a PostgreSQL mgtt, add - fel, nincs ilyesmi. Ltezik egy mag s CVS commiter csoport, de ez inkb - adminisztrativ mint ellenrzo" cl. A projectet fejleszto"k s - felhasznlok kzssge irnytja, amihez brki csatlakozhat. Csupn annyit - kell tenned hogy felratkozol a levelezo"listkra s rszt veszel a - beszlgetsekben. - - ---------------------------------------------------------------------- - -Felhasznloi kliens krdsek - - 2.1 Van ODBC meghajto PostgreSQL-hez? - - Kt ODBC meghajto rhet el: PsqlODBC s a OpenLink ODBC. - - A PsqlODBC a PostgreSQL kiads rsze. Tovbbi informcio tallhato a - ftp://ftp.PostgreSQL.org/pub/odbc/ oldalon. - - Az OpenLink ODBC-t a http://www.openlinksw.com cmrl tltheted le. Ez az - szabvnyos ODBC kliens szoftverkkel mkdik, gy minden - - ltaluk tmogatott platformon (Win, Mac, Unix, VMS) elrhet lesz a - PostgreSQL szerver. - - Taln olyan vevknek fogjk eladni, akik kereskedelmi minsg termket - szeretnnek kapni, de a freeware verzio mindig elrhet lesz. Krdseidet - a termkkel kapcsolatban a postgres95@openlink.co.uk cmen teheted fel. - - Olvasd el az ODBC fejezetet is a programozok kziknyvben! - - 2.2 Milyen eszkzk llnak rendelkezsre PostgreSQL Web fejlesztsekhez? - - Egy szp bemutato olvashato az adatbzissal tmogatott web oldalanrol a - http://www.webreview.com weboldalon. - - A web integrciohoz a PHP egy kivllo szoftver. Letlthet a - http://www.php.net cmrl. - - Komplexebb esetekre sokan hasznljk a Perl felletet s a CGI.pm vagy a - mod_perl-t. - - 2.3 Van a PostgreSQL-hez grafikus felhasznloi fellet? - - Van egy szp PgAccess nev grafikus felletnk, ami riport genertorknt - is hasznlhato. A weboldalt megtallod a http://www.pgaccess.org/ cmen. - - A http://techdocs.postgresql.org/guides/GUITools oldalon tallhatsz egy - pontos s rszltes listt. - - 2.4 Milyen programozsi nyelvekkel lehet elrni a PostgreSQL szervert? - - A kvetkezk: - - * 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) - Tovbbi programozsi felletek rhetek el a - http://www.PostgreSQL.org/interfaces.html s a - http://gborg.PostgreSQL.org oldalakon. - - ---------------------------------------------------------------------- - -Adminisztrcios krdsek - - 3.1 Hogyan tudom a PostgreSQL-t /usr/local/pgsql -tl eltr helyre - installlni? - - A configure script --prefix paramternek hasznlatval. - - 3.2 AMikor elindtom a postmaster-t, egy "Bad System Call"-t vagy core - dump-ot kapok. Mirt? - - Szmos problma lehet, de legelsszr ellenrizd le, hogy a kerneled - System V kiegsztsekkel rendelkezik-e. A PostgreSQL hasznlja a kernel - osztott memoria s szemafor API-jt. - - 3.3 Amikor megproblom inditani a postmaster-t, "IpcMemoryCreate" hibkat - kapok. Mirt? - - Vagy nincs megfelelen konfigurlva a kerneled osztott memoria tmogatsa - vagy meg kell nagyobbtanod a maximlis osztott memoria mretet. - - A pontos mret szksglet fgg az architektrdtol s attol hogy hny - buffert s processzt konfigurlsz a postmasternek. Legalbb 1 MB terletre - szksged van. A PostgreSQL Adminisztrcio kziknyvben olvashatsz - rszletesebb informciokat az osztott memorirol s a szemaforokrol. - - 3.4) Amikor megproblom inditani a postmaster-t, "IpcSemaphoreCreate" - hibkat kapok. Mirt? - - Ha a hibazenet ez: " IpcSemaphoreCreate: semget failed (No space left on - device)", akkor a kerneled konfigurcioja nem tesz lehetv elegend - szemafort. A PostgreSQL szerver processzenknt 1 szemafort ignyel. Egy - tmeneti megolds lehet az hogy a postmastert kevesebb maximlis processz - szmmal inditod el. Hasznld a -D paramtert. Egy sokkal megfelelbb - megolds az ha nveled a kerneled SEMMNS s SEMMNI paramtereit. - - A hibs szemaforok is adatzis lerobbanshoz is vezethet nagy terhels - esetn.Ha a hibazenet valami ms, lehet hogy nincs szemaforok tmogats - - forditva a kerneledbe. Olvasd el a PostgreSQL adminisztrtorok - kziknyvben az osztott memorirol s a szemaforokrol szolo fejezetet. - - 3.5) Hogyan tudom kontrolllni a ms gpekrl rkez kapcsolat krseket? - - Alaprtelmezsben a PostgreSQL a helyi kapcsolatokat Unix socketekkel - valostja meg. Ms gpek nem lesznek kpesek csatlakozni, ha nem - engedlyezed azt -i opcioval a postmasternek, s nem lltod be host a - alap azonostst a pg_hba.conf llomnyban. Ezzel vlnak lehetv a - TCP/IP kapcsolatok. - - 3.6) Hogyan tudom nagyobb teljestmnyre hangolni az adatbzisomat? - - Az indexels felttlenl gyorstja a lekrdezseket. Az EXPLAIN parancs - lehetv teszi hogy lsd, hogy a PostgreSQL miknt interpretlja a - lekrdezst s melyik indexet hasznlja. - - Ha sok INSERT mveletet hajtassz vgre, csinld nagy ktegekben a COPY - paranccsal. Ez sokkal gyorsabb mint az egyedi INSERT parancsok. Msodszor: - Azok a mveletek, amelyek nincsenek tranzakcio blokkon bell, azok sajt - tranzakciot indtanak. Sok mveletet rdemes egy tranzakcion bell - vgrehajtani. Ez cskkenti a tranzakcio kezels tbbletidejt. Az - indexeket javasolt a nagy adatvltozsok eltt eltvoltani, majd jra - ltrehozni. - - Szmos teljestmny javto lehetsg van. Kikapcsolhatod az fsync() - mveletet a postmaster -o -F opciokval valo indtsakor. gy nem fog az - amugy lass fsync() fggvny meghvodni minden tranzakcio vgn. - - Hasznlhatod a postmaster -B opciojt is az osztott memoria szegmens - mretnek nvelshez. Ha az rtket tl magasra lltod, lehet hogy a - postmaster nem indul el, mert tllpted az opercios rendszer ltal - megengedett mretet. Minden buffer 8K mret s alaprtelmezsban 64 - buffer van. - - A -S opcioval nvelheted a szerver tmeneti rendezsekre fenntartott - memoria terlett. Az rtket kilobyteban add meg. Az alaprtelmezett - rtk 512K. - - Hasznlhatod a CLUSTER utastst is, hogy a tblkat egy indexnek - megfelelen csoportostsd. Olvasd el a CLUSTER kziknyv oldalt tovbbi - rszletekrt. - - Hardver kivlasztsban segthet: - http://candle.pha.pa.us/main/writings/pgsql/hw_performance/index.html s - http://www.powerpostgresql.com/PerfList/. - - A postgresql.conf bellitsaival 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 lehetsgek rhetek el? - - A PostgreSQL szmos lehetsggel rendelkezik ami rtkes lehet a - hibakeressnl. - - Elsszr is, futtathatod a configure scriptet --enable-cassert opcioval, - sok assert() funkciohivs ellenrzi a program futst s megllitja ha - valami vratlan hiba trtnik. - - Mind a postmaster s a postgres szmos hibakeres lehetsggel - rendelkezik. Mindig amikor elinditod a postmastert, gyzdj meg rola, hogy - a kimenetet log llomnyba kldd. Igy: - - cd /usr/local/pgsql - - ./bin/postmaster >server.log 2>&1 & - - Ez egy server.log llomnyt hoz ltre a fels PostgreSQL knyvtrban. Ez - az llomny tartlamaz majd szmos hasznos informciot a szerverrel - kapcsolatos problmkrol s hibkrol. A postmaster -d opciojval lehet - rszletesebb hibakeres informciot kapni. A -d opciohoz meg kell - hatrozni egy hiba szintet. Vigyzz, a magas hibakeres szint nagy log - llomnyt okozhat. - - Ha a postmaster nem fut, akkor futtathatod a postgres szervert - parancssorbol is, s az SQL kifejezst kzvetlenl ennek adhatod t. Ez - csak hibakeress esetben javasolt. Az j sor a kifejezs vgt jelenti, - nem a pontosvessz. Ha hibakeres opciokkal forditottad a szervert, - hasznlhatsz egy debuggert is hogy lsd hogy mi trtnik. Mivel igy a - szervert nem a postmaster inditotta, nem tbbfelhasznlos krnyezetknt - fut, igy a zrolsi s a szerverek kztti kommunikcios hiba jelensgek - nem jelentkeznek. - - Ha mr fut a postmaster, indits egy psql-t, s nzd meg a szerver processz - PID-jt! Egy debuggert hasznlhatsz a processzhez csatlakozshoz. - Bellithatsz trspontokat s elindithatsz lekrdezseket. Ha a postgres - inditsban keresel hibt, a PGOPTIONS krnyezeti vltozot llitsd be "-W - n" rtkre. Ez n msodperc vrakozst idz el, igy tudsz csatlakozni a - processzhez, el tdsz hejezni trspontokat, majd folytathatod a indtst. - - A postgres program -s, -A s -t opcioi is nagyon hasznosak lehetnek - hibakeressnl s teljestmny mrsnl. - - Profiling lehtsggel is fordithatod a szervert, hogy lsd melyik funkciok - foglaljk el a futsi idt. A szerver profile llomnyai a - pgsql/data/base/dbname knzvtrba kerlnek, a kliens profile llomnyok az - aktulis knyvtrba. Linuxon ehhez szksges a -DLINUX_PROFILE fordtsi - direktiva. - - 3.8) Mirt kapok "Sorry, too many clients" (Tl sok kliens) - hibt csatlakozsnl? - - Nvelned kell a postmaster egyidejleg futtatott szerver processz szm - korltjt. - - Az alaprtelmezett korlt 32 processz. Ezt nvelhetjed gy, hogy - jrainditod a postmastert s -N opcioval meghatrotod az j rtket, vagy - modositod a postgresql.conf-ot. - - Ne felejtsd el, hogy ha nveled a szerver processzek maximlis szmt, - akkor bufferek szmt is nvelned kell, legalbb a processzek szmnak - ktszeresre. Nagy processz szmokesetben valoszinleg a Unix - konfigurcios paramtereken is nvelni kell. Ellenrizd a SHMMAX (az - osztott memoria szegmensek maximlis mrete), a SEMMNS s a SEMMNI (a - szemaforok maximlis szma), az NPROC (a processzek maximlis szma), a - MAXUPRC (felhasznlonknti maximlis processz szm) s a NFILE s NINODE - (a megnzitott llomnzok maximlis szma) paramtereket. A PostgreSQL - azrt korltozza kln a processz szmot, hogy a rendszeredet ne - terhelhesse meg tlsgosan. - - A PostgreSQL 6.5 verzioban a maximlis szerver processz szm 64 volt s a - modositshoz bele kellett irni a include/storage/sinvaladt.h llomnyba s - jra kellett forditani a servert. - - 3.9) Mi van pgsql_tmp knyvtrban? - - Ez a knyvtr a lekrdezs vgrehajto ltal ltrehezott tmeneti - llomnyokat tartalmazza. Pldul ha egy rendezst kell vgrehajtani egy - ORDER BY kifejezs miatt s a m?velet tbb memorit vesz ignybe, mint - amennyit a -S paramter megenged, akkor az tmeneti knyvtrban hoz ltre - egy llomnyt a fennmarado adat trolsra. - - Az tmeneti llomnyok tbbnyire trl?dnek, de meg is maradhat ha pldul - vratlan hibval lell a szerver egy rendezs kzben. Inditskor s - lellitskor ezeket az llomnyokat trli a postmaster. - - 3.10) Mirt kell dumpolni s jratlteni PostgreSQL kiads vltsnl? - - A PostgreSQL csapat csak aprobb vltoztatsokat hajt vgre a kisebb - kiadsok kztt, igy ha 7.2 verziorol llsz t 7.2.1 verziora, akkor nem - szksges kidumplonod az adatbzist. A nagy kiadsok esetben (pldul - verziorol 7.3-ra ttrsnl) vltozik a belsi adatstruktrk s - adatllomnyok formtuma. Ezek a vltozsok gyakran nagyon sszetettek, - ezrt inkb nem tartunk fenn visszafel kompatibilitst. A dump az adatot - ltalnos formtumban irja ki, majd az j formtumban lehet azt - visszatleni. - - Azokban a kiadsokban, amelyek kztt az adat formtum nem vltozik, a - pg_upgrade program hasznlhato dumpols s helyrellits nlkl. - - ---------------------------------------------------------------------- - -Mkdtetsi krdsek - - 4.1) Mi a klnbsg a binris s a norml kurzorok kztt? - - Nzd meg a DECLARE dokumentciojt. - - 4.2) Hogyan tudom select-elni a lekrdezs els pr sort? - - Olvasd el a FETCH dokumentciojt, vagy hasznld a SELECT LIMIT-et. - - Az egsz lekrdezst vgre kell hajtani, mg akkor is, ha csak az els pr - sort akarod megkapni. Gondolj arra, hogy a lekrdezsben lehet ORDER BY - is. Ha van olyan index, ami megfelel az ORDER BY kifejezsednek, a - PostgreSQL kpes lehet az els nhny rekord visszaadsra, vagy a teljes - lekrdezsnek le kell futnia, amig a krt rekordok le nem generlodnak. - - 4.3) Hogy tudom kilistzni a tblkat vagy ms dolgokat a PostgreSQL-ben? - - Elolvashatod a psql forrs kodjban a pgsql/src/bin/psql/describe.c - llomnyban. Ez SQL parancsokat tartalmaz, amelyek azokat a kimeneteket - llitjk el, amiket a per jellel kezdd parancsok adnak vissza. - - 4.4) Hogyan tudok eltvoltani egy oszlopot egy tblbol? - - Ez a funkcionalits a 7.3 verziotl kezdve rhet el az ALTER TABLE DROP - COLUMN -nal. A rgebbi vertiokban igy lehet vgrehajtani: - - BEGIN; - - LOCK TABLE old_table; - - SELECT ... -- minden oszlopot, kivtel amit trlni szeretnl - - INTO TABLE new_table - - FROM old_table; - - DROP TABLE old_table; - - ALTER TABLE new_table RENAME TO old_table; - - COMMIT; - - 4.5) Mi a maximlis mrete egy sornak, egy tblnak vagy egy adatbzisnak? - - A korltok: - - * adatbzis: korltlan (1 TB az ltalunk ismert lagnagyobb) - - * tbla: 16 TB - - * rekord/sor 1.6TB - - * mez 1 GB - - * a tbla sorainak szma: korltlan - - * a tbla oszlopainak szma: 250-1600 az oszlop nevektl fggen - - * A tbla indexeinek szma: korltlan - - Termszetesen nem igazn korltlan, de a trterlet, memoria s egyb - kls tnyezk korltozzk. A teljesitmny romolhat, ha ezek az rtkek - szokatlanul nagyok. - - A 16 TB-os legnagyobb tbla mret nem ignyel nagy llomny tmogatst. A - nagy tblk tbb 1 GB mret llomnyba kerlnek, igy az llomny rendszer - korltai nem lnyegesek. - - A maximlis tbla mret s az oszlopok maximlis oszlop szm nvelhet, ha - az alaprtelmezett blokkmretet 32k-ra nveled. - - 4.6) Mekkora adatbzis lemez terlet szksges egy tipikus szveg llomny - trolshoz? - - A PostgreSQL akr a szveg llomny helyignynek tszrst is - elfoglalhatja. - - Kpzelj el pldul, egy 100.000 soros szveget, aminek minde sora egy - szmbol s egy szvegbl ll. Tegyk el, hogy tlagosan 20 byte hossz - szvegek. Ez a szvegllomny krlbell 2.8 MB helyet foglalna el. A - tbla ami a fenti adatszerkezetet eltroln, krlbell 6.4 MB-os lenne. - Ezt a kvetkezkppen szmolhatjuk ki: - - 36 byte: sor fejlc - - 24 byte: egy int mez + egy szveg mez - - 4 byte: mutato - - --------------------------------------- - - 64 byte soronkent. - - Az adat oldal mrete a PostgreSQL-ben 8192 byte, igy 8192 / 64 = 128 - rekord adatbzis oldalanknt (lefel kerekitve). - - 100000 rekord / 128 rekord oldalanknt = 782 adat oldal - (felel kerekitve). - - 782 adatbzis oldal * 8192 byte olalanknt = 6,406,144 - byte (6.4 MB) - - Az indexek nem foglalnak tl sokat, de tartalmazzk az indexelt adatot, - igy ezek is lehetnek nagyok. - - A NULL rtkek bittrkpben vannak trolva, igy kevs helyet foglanak. - - 4.7) Hogy tudhatom meg milyen tblk, indexek, adatbzisok vagy - felhasznlok - - vannak definilva? - - A psql-ben tallsz szmos '\' karakterrel kezdd utastst az ilyen - informciok listzsra. A '\?' segitsgvel tudot kilistzni ezeketa - parancsokat. Ezen kivl vannak rendszer tblk, amelyek nevei 'pg_'-vel - kezddnek. - - Probld ki a pgsql/src/tutorial/syscat.source llomnyt is. Ez sok pldt - tartalmaz az rendszertblkon vgrehajtott SELECT-ekrl. - - 4.8) A lekrdezseim lassak, vagy nem hasznljk az indexeket. Mirt? - - Az indexeket nem hasznlja a szerver minden lekrdezsnl automatikusan. - Csak akkor hasznl indexet, ha a tbla mrete egy megadott also hatr - felett van, s a lekrdezs csak a sorok egy kis rszt rinti. Ez azrt - van, mert a vletlen hozzfrs mg mindig lassabb lehet mint az tbla - szekvencilis olvassa. - - Hogy a PostgreSQL meg tudja hatrozni hogy kell-e indexet hasznlni, - lteznie kell egy statisztiknak a tblrol. Ez a statisztikai adatok a - VAACUM ANALYZE vagy az egyszer ANALYZE mveletek sorn jnnek ltre. A - statisztikai adatok felhasznlsval az optimalizlo meg tudja hatrozni, - hogy hny sor van a tblban, s el tudja dnteni, hogy hasznljon-e - indexet. A statisztiaki adatgyjtst idnknt vgre kell hajtani, ahogy a - tbla adatai vltoznak. - - Az indexeket normlis esetben nem hasznlja az ORDER BY vagy az OUTER - JOIN. A szekvencilis olvass ltalban gyorsabb, mint az index keress - egy nagy tblban. Br a LIMIT az ORDER BY-val kombinlva hasznlhat - indexet, mert a tbla csak kis rsze rintett. Br a MIN s MAX SQL - funkciok sem hasznljk az indexeket, ezeket az rtkeket egy ORDER BY + - LIMIT lekrdezssel is le lehet krdezni: - - SELECT col - - FROM tab - - ORDER BY col [ DESC ] - - LIMIT 1; - - Amikor helyettest jel opertorokat hasznlsz, mint a LIKE kulcsszo vagy - a ~, az indexeket csak bizonyos krlmnyek kztt lehet hasznlni: - - A keres string kezdete a keressi minta elejn kell hogy legyen. Pldul: - - * A LIKE mintk nem kezddhetnek % jellel. - * ~ (regexp) kifejezsek nem kezddhetnek ^ jellel. - * A keressi kifejezs nem kezddhet karakter osztllyal. - * A case-insensitive keress (ILIKE, ~*) nem hasznlnak indexet ehelyett - funkcionlis indexet hasznlnak, amit a 4.12 pontban tallhatsz. - * Az alaprtelmezett C hellyel kell futtatni az initdb-t. - 4.9) Hogy tudom ellenrizni, hogy optimalizlta a lekrdezs optimalizlo - a lekrdezsem? - - Olvasd el a dokumentcio EXPLAIN-rol szolo rszt. - - 4.10) Mi az R-tree index? - - Az R-tree index a trbeli adat indexelsre alkalmas. Egy hash index nem - kpes tartomny keressekre. A B-tree index csak egy dimenzion kezeli a - tartomny keresseket. Pldul ha az indexet egy pont (point adattpus) - tpus mez.re ptjk, gyorsabban kezeli az olyan jelleg lekrdezseket, - mint egy adott krben - - tallhato pontok. - - Az R-tree tervezsi mintt eredetileg lero szveg: 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. knyvben. - - A beptett R-tree kezelni tudjk a sokszgeket (polygon adattpus) s a - dobozokat (box). Elmletileg, az R-tree kiterjeszthet tovbbi dimenziokra - is. Gyakorlatilag ezen dolgoznod kell egy kicsit, s mg nincs - dokumentcionk arrol hogy az hogyan mkdik. - - 4.11) Mi a Genetic Query Optimizer? - - A GEQO modul a lekrdezs optimalizcio sebessgt nveli nagy mennyisg - tbla sszekapcsolsa esetn. Lehetv teszi a nagy lekrdezsek - vgrehajtst nem teljes keresssel. - - 4.12) Hogyan tudok regexp keresst s case-insensitive regexp keresst - hasznlni? Hogyan tudok indexet hasznlni case-insensitive keresshez? - - A ~ opertor hajt vgre regulris kifejezs (regexp) rtelmezst, a ~* - ennek case-insensitive vltozata. A LIKE case-insensitive vltozata az - ILIKE. - - A case-insensitive egyenlsg mveleteket ltalban igy hajtjuk vgre: - - SELECT * - - FROM tab - - WHERE lower(col) = 'abc'; - - Ez nem fog indexet hasznlni, br ltrehozhatsz egy funkcio indexet: - - CREATE INDEX tabindex ON tab (lower(col)); - - 4.13) Hogyan tudom szlelni egy lekrdezsben, ha egy mez NULL? - - Hasznld "IS NULL"-t s az "IS NOT NULL"-t. - - 4.14) Mi a klnbsg a klnbz karaktertpusok kztt? - - * "char" egy karakter hossz string - * CHAR(n) bpchar res hellyel a megadott n hosszsgig - * VARCHAR(n) varchar mret maximlis hossz meghatrozsval, a lefogllat - terlet is vltozo hossz lesz - * TEXT nincs meghatrozott felso" korlt - * BYTEA vltozo hosszsg byte-tmb - - Ltni fogod a bels elnevezsket, ha tanulmnyozod a rendszertblkats - nhny hibazenetet. - - Az utobbi ngy a "varlena" tpusok, ami a trolsuk modjra utal: az els - 4 byte a lemezen a hosszsg, a tbbi az adat. A valodi mret teht - nagyobb mint a deklarlt hosszsg.Ezek azadatok tmritve trolodnak el, - igy kevesebb helyet foglalnek el az elre szmitottnl. - - A CHAR(n) a legjobb megolds, ha stabil hosszsg stringet trolsz. A - VARCHAR(n) jo arra az esetekre, ha a hosszsg vltozik, de van fels - korltja. A TEXT tpus korltlan hosszsg (1 GB-ig) szvegek trolsra - alklamas. A BYTEA binris adatok trolsra van. A teljesitmny mutatoi - hasonloak ezenek a tpusoknak. - - 4.15.1) Hogyan tudok ltrehozni automatikusan nvekv rtk mezt? - - A PostgreSQL rendelkezik egy SERIAL adattpussal. Ez egy szekvencit s - egy indexet hoz ltre az oszlopon. Pldul 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 szekvencikkal kapcsolatban olvasd el a create_sequence man oldalt. A - sor OID-jt is hasznlhatod egyedi azonositoknt, br ebben az esetben - figyelj a pg_gump hasznlatnl a -o opciora (COPY WITH OIDS, msols - OID-dal), hogy meg?rizd az rtkeket. - - 4.15.2) Hogyan kaphatom meg egy SERIAL beszrs rtkt? - - Egy megolds erre az, ha a nextval() funkcioval megszerzed az rtket mg - mieltt beszrnd az adatot a tblba. Erre itt lthatsz egy pldt: - - new_id = execute("SELECT nextval('person_id_seq')"); - - execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise - Pascal')"); - - Esetleg lekrdezheted a szekvencia llapott a sor beszrsa utn. - - execute("INSERT INTO person (name) VALUES ('Blaise Pascal')"); - - new_id = execute("SELECT currval('person_id_seq')"); - - Vgl pedig, hasznlhatod a visszaadott OID rtket is, br ez a lehet - legkevsb portolhato. Perl DBI-ben, Edmund Mergl DBD::Pg moduljban az - OID rtk hasznlhato a $sth->execute() utn ($sth->{pg_oid_status}). - - 4.15.3) A currval() s a nextval() nem teremt holtpont veszlyes helyzetet - a felhasznlok kztt? - - Nem. A currval() funkcio a szerver processzed ltal adott rtket adja - vissza, nem pedig a tbbi szerver processz ltal adottat. - - 4.15.4) Mirt nem hasznlodnak fel jra a sequence szmok tranzakcio abort - esetn? - - Mirt vannak problmk a serial oszlopok szmozsval? - - A prhuzamossg fejlesztse rdekben a sorozat szmokat krsre adja ki a - szerver futo tranzakcioknak, s azokat nem zrja, amig a tranzakcio vget - nem r. Ez jukakat okoz a szmozsokban a visszaforditott tranzakciok - miatt. - - 4.16) Mi a OID? Mi a TID? - - Az OID a PostgreSQL egyedi sor azonositoja. Minden sor, ami ltrejn a - szerveren, kap egy OID-t. Minden OID, amit az initdb alatt jn ltre 16384 - alatt van (lsd include/access/transam.h). Minden, felhasznlo ltal - ltrehozott OID legalbb ennyi. Alaprtelmezsben, az OID nem csak a - tblban vagy az adatbzisban egyedi, hanem a teljes PostgreSQL adatbzis - rendszerben. - - A PostgreSQL az OID-okat a bels tbliban hasznlja a sorok tblk kztt - sszekapcsolshoz. Ezek az OID-k hasznlhatoak a rekordok azonositsra - is amikor tblkat csatol ssze a szerver (JOIN). Az OID-ot hasznlhatod - mez tpusknt is, s indexelheted is. - - Az OID rtk egy kzponti terletrl szrmazik, amit minden szerver - processz hasznl. Ha az OID-ot valami msra szeretnd cserlni: - - 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 rtkknt trolodik, igy 4 millirdnl - tlcsordul. Mg soha senki nem jelezte hogy ez trtnt volna, s ezt a - korltot igyeksznk eltvolitani, mg mieltt brki szrevenn. - - A TID a fizikai sorok blokk s offszet cmmel valo azonositsra szolgl. - A TID vltozik minden rekord modosits s trls alkalmval. Ezeket az - indexek hasznljk hogy a fizikai sort gyorsan megtalljk. - - 4.17) Mi a PostgreSQL-ben hasznlt kifejezsek jelentse? - - Nhol a forrs kodban s a dokumnetcioban tallhatoak kifejezsek, - amelyek ltalnosabb jelentssel brnak. Itt van nhny: - - * tbla (table), relcio (relation), osztly (class) - * sor (row), rekord (record), tuple (nincs magyar jelents) - * oszlop (column), mez (field), attributum (attribute) - * retrieve, select - * helyettesit (replace), modosit (update) - * hozzfz (append), beszr (insert) - * OID, sorozat rtk (serial value) - * portal, cursor - * range variable, tbla nv, tbla alias - Az ltalnos adatbzis kifejezsek sszefoglalojt itt olvashato: - - http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.html - - 4.18) Mirt kapom ezt a hibt: "ERROR: Memory exhausted in - AllocSetAlloc()"? - - Lehet hogy elfogyott a virtulis memorid, vagy a kerneled erforrs - korltai alacsonyak. Probld ki ezt mieltt elinditand a postmastert: - - ulimit -d 262144 - - limit datasize 256m - - A shelltl fggen ezek kzl csak az egyik fut majd le, de a processzek - adatszegmenst sokkal magasabbra llitja, ami taln elg lesz a lekrdezs - vgrehajtshoz. Ez az utasts a jelenlegi processzre (a shelled) - rvnyes, s minden ltala ltrehozott processzre. Ha problmd van az SQL - klienssel, mert a szerver tl nagy adatot kld vissza, probld meg e - klienssel is ugyanezt. - - 4.19) Hogyan tudhatom meg PostgreSQL, milyen verziot futtatok? - - A psql programban select version(); - - 4.20) Mirt kapok "invalid large obj descriptor" hibt nagy objektumok - kezelsnl? - - A nagy objektumok kezelst egy tranzakcios blokkban helyezd el. (BEGIN s - COMMIT kztt) - - Jelenleg a PostgreSQL ezt a szablyt azzal teszi ktelezv, hogy a - tranzakcio vgn a nagy objektumokat lezrja, igy a tranzakcio utn az - els mvelet amit az objektumon vgrahajtanl hibs lesz. - - Ha olyan programozsi felletet hasznlsz mint az ODBC vagy a JDBC akkor - valoszinleg ki kell kapcsolnod az auto-commit-ot. - - 4.21) Hogy hozhatok ltre olyan oszlopot, aminek alaprtelmezett rtke a - jelenlegi id? - - Hasznld a CURRENT_TIMESTAMP -ot: - - CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP ); - - 4.22) Mirt olyan lassak az al-lekrdezseim IN-nel? - - Jelenleg az al-lekrdezseket a kls lekrdezshez csatoljuk. Ha az - allekrdezs csak kevs sort eredmnyez s a kls lekrdezs sokat, akkor - az IN is gyors. Az EXISTS kulcsszo hasznlatval gyorsithatod a - lekrdezseket. - - SELECT * - - FROM tab - - WHERE col IN (SELECT subcol FROM subtab); - - EXISTS hasznlatval: - - 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. Remljk ezt a korltot sikerl hamarosan legyznnk. - - 4.23) Hogyan tudok outer join-t vgrehajtani? - - A PostgreSQL a szabvnyos SQL szintaktikt kveti. Itt van kt plda: - - 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 lekrdezsek sszekapcsoljk a t1.col s a t2.col - mezket, s a t1 brmelyik kapcsolatlan sort is visszadjk. A RIGHT JOIN - a t2 kapcsolatlan sorait adta volna vissza, a FULL JOIN pedig a kapcsolt, - s mindkt tbla kapcsolatlan sorait adja. Az OUTER kulcsszo opcionlis, a - LEFT, RIGHT s FULL JOIN szintaktikailag helyes. Az tlagos - sszekapcsolsokat INNER JOIN-nak nevezzk. - - Az elz kiadsokban a OUTER JOIN lekrdezseket UNION s NOT IN - kulcsszavakkal lehetett szimullni. Pldul a tab1 s a tab2 - sszekapcsolsa: - - 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 tbb adatbzison vgrehajtani lekrdezst? - - Arra nincs lehetsg, hogy ms adatbzisbol krdezz le adatot.Mivel a - PostgreSQL adatbzis specifikus rendszer tblkat tltbe, bizonytalan hogy - egy adatbzisok kztti lekrdezsnek hogyankellene viselkednie. - - A contrib/dblink knyvtrban tallsz egy megoldst erre, ami funkcio - hivsok segitsgvel mkdik. Persze, a kliens hozhat ltreszimultn - kapcsolatot tbb adatbzissal, s sszefslheti az eredmnyeket. - - 4.25) Hogy tudok tbb soros vagy oszlopos eredmnyt visszaadni egy - funkciobol? - - A PL/pgSQL trolt eljrs nyelvvel refcursor hasznlatval. Rszletesen - itt: - - http://www.PostgreSQL.org/idocs/index.php?plpgsql-cursors.html - - 4.26) Mirt nem tudom megbizhatoan ltrehozni s trlni az tmeneti - tblkat a PL/pgSQL funkciokban? - - A PL/pgSQL cacheli a funkciok tartalmt, aminek az a szerencstlen - mellkhatsa, hogy ha egy PL/pgSQL funkcio hasznl egy tmeneti tblt, - ami kso"bb trldik majd ujra ltrejn, akkor az jra lefuto funkcio nem - fogja megtallni a tblt, mert a cache vltozat a rgi tblra tartalmaz - mutatot. A megolds erre az EXECUTE hasznlata az tmeneti tblk - kezelsre PL/pgSQL-ben. Ez a lekrdezs jrafordtst fogja elidzni - minden alkalommal. - - 4.27) Milyen replikcios lehetsgek vannak? - - Br a replikcio egyetlen terlet, tbb technologia ltezik replikciora, - termszetesen mindnek meg vannak a maga elo"nyei s htrnyai. - - A master/slave replikcios megoldssal a master adatbzison hajthatunk - vgre modostsokat, mg a slave adatbzisokon csak lekrdezseket. A - PostgreSQL legnpszeru"bb master/slave replikcios megoldsa a Solny-I. - - Szmos ms master/slave replikcios lehetsg ltezik.Egy Listt - olvashatsz ezekrl itt: - - http://gborg.PostgreSQL.org/genpage?replication_research - - A multi-master replikcio leheto"v teszi tbb master adatbzis - hasznlatt, br ez a technologia drasztikusan cskkenti az adatbzis - teljestmnyt a sok szinkornizcio miatt. A PGCluster a legelterjedtebb - ilyen megolds. - - Egy tbbfelhasznlos replikcios rendszer kszl itt: - - http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php. - - 4.28) Milyen kodolsi lehetsgek vannak? - - * A contrib/pgcrypto tartlamaz szmos SQL lekrdezsben hasznlhato - kodolst. - * A kliens-szerver kommunikcio rejtjelezsre a hostssl hasznlhato. - Ezt a pg_hba.conf-ben engedlyeztheted. - * Az adatbzis felhsznlok jelszavait trolskor kodolja a rendszer. - * Rgebbi verziokban a PASSWORD_ENCRYPTION opcioval lehetett - bekapcsolni. - * A szerveren hasznlhatsz kodolt fjrendszert. - - ---------------------------------------------------------------------- - -A PostgreSQL kiterjesztse - - 5.1) rtam egy felhasznloi funkciot. Mirt core dumpol az adatbzis - amikor hasznlom? - - Szmos problma lehet. Elbb probld ki a funkciodat egy klnllo - alkalmazsban. - - 5.2) Hogyan lehet j adattpusokat s funkciokat hozzadni a PostgreSQL - disztribciohoz? - - Kldd el a kiegsztseid a pgsql-hackers levelezsi listra s a - forrskodjaid vgl a contrib-ban ktnek ki. - - 5.3) Hogyan lehet olyan C funkciot rni, ami Tuple-t ad vissza? - - A 7.3 verziotol kezdve a PostgreSQL tmogatja a tblzatokat viszzaado - funkciokat C, PL/pgSQL s SQL nyelveken. Bvebb dokumentciot a Programozo - kziknyvben tallsz. Egy C plda funkcio tallhato a contrib/tablefunc - knyvtrban. - - 5.4) Megvltoztattam egy forrs llomnyt. Mirt nem vltozik a binris - jrafordts utn? - - A Makefile-ok nem ismerik a include llomnyok megfelel fggsgeit. - Vgre kell hajtanod egy make clean-t, majd jra egy make-t. Ha GCC-t - hasznlsz felhasznlhatod a configure script --enable-depend opciojt, gy - a compiler maga fogja ellenrizni a fggsgeket. diff --git a/doc/FAQ_japanese b/doc/FAQ_japanese deleted file mode 100644 index ca2618f8baa..00000000000 --- a/doc/FAQ_japanese +++ /dev/null @@ -1,1126 +0,0 @@ -PostgreSQL(ݥȥ쥹塼)ˤĤƤ褯Ȥβ(FAQ) - -ʸǽ: Thu Jan 01 14:01:00 EDT 2009 - -ߤΰݻ: Bruce Momjian (bruce@momjian.us) -Maintainer of Japanese Translation: Jun Kuwamura (juk at postgresql.jp) - -ʸκǿǤ http://www.postgresql.org/docs/faqs.FAQ.html Ǹ뤳Ȥ -ޤ - -ץåȥۡͭμˤĤƤ: http://www.postgresql.org/docs/faq/ -˲ޤ - -(ʲԤˤ [ ] ȤǰϤǵޤ) -[ - ܸǤFAQϡ - http://www.postgresql.org/docs/faqs.FAQ_japanese.html - ˤޤ - ǿܸǤˤĤƤϡʸκǸˤܸǤˤĤơפ - -] - - - - Ūʼ - -1.1) PostgreSQLȤϲǤθƤϡ PostgresȤϡ -1.2) ï PostgreSQL ȥ뤷Ƥޤ -1.3) PostgreSQLϤɤʤäƤޤ -1.4) PostgreSQLݡȤץåȥۡϡ -1.5) PostgreSQLϤɤǤޤ -1.6) ǿΥϤɤǤ -1.7) ݡȤϤɤǼޤ -1.8) ХݡȤϤɤΤ褦ȯޤ -1.9) ΤΥХ̵̤ǽϤɤäƸĤޤ -1.10) ɤΤ褦ʸޤ -1.11) SQLϤɤгؤ٤ޤ -1.12) ѥåꡢȯäˤϤɤФ褤Ǥ -1.13) ¾DBMS٤PostgreSQL ϤɤʤΤǤ PostgreSQLȤ߹ߤ˻Ȥ -ޤ -1.14) PostgreSQLϹκǿβƻ֤ѹޤ -1.15) PostgreSQLΥꥹȤιɤˤϤɤФ褤Ǥޤ -ŻҥʣƼʤ褦ˤˤϤɤޤ - - 桼饤Ȥμ - -2.1) PostgreSQL ˤϤɤʥեȤޤ -2.2) PostgreSQL Web ڡϢȤˤϤɤʥġ뤬ޤ -2.3) PostgreSQL ˥ե롦桼եϤޤ - - μ - -3.1) ɤСPostgreSQL/usr/local/pgsql ʳξ˥ȡǤޤ - -3.2) ¾ΥۥȤ³ϤɤΤ褦椷ޤ -3.3) ɤǽ뤿ˤϡǡ١ɤΤ褦Ĵޤ - -3.4) ɤΤ褦ʥǥХǽȤޤ -3.5) ³褦ȤȤ 'Sorry, too many clients' ФΤϤʤǤ -3.6) PostgreSQLΥåץ졼ɤμϤɤʤޤ -3.7) ϡɥˤϤɤΤ褦ʥԥ塼ȤФ褤Ǥ - - μ - -4.1) ǽΤĤΥΤߤ select ˤϤɤޤʥ -4.2) 줿ơ֥롢ǥåǡ١ӡ桼ɤΤ褦 -ƸĤФޤ -4.3) ΥǡפѹˤϤɤޤ -4.4) ơ֥롢ǡ١κ祵ϡ -4.5) ŪʥƥȥեΥǡ¸ˤϡǡ١Υǥ -ϤɤΤ餤ɬפǤ -4.6) ꤬٤ΤϤʤǤ礦ʤǥåȤʤΤǤ礦 -4.7) ꥪץƥޥɤΤ褦˥ɾƤˤϤɤ - -4.8) ɽǤθʸȾʸȤ̤ʤɽϤɤΤ褦˼¸ -ޤʸȾʸȤ̤ʤΤΥǥåϤɤΤ褦˻Ȥ -ޤ -4.9) ǡեɤ NULL Ǥ뤳ȤФˤϤɤޤ -NULLβǽΤΤɤΤ褦ϢǤޤ? եɤNULLɤ -ǤɤΤ褦˥ȤǤޤ -4.10) ʸΤ줾ΰ㤤ϲǤ -4.11.1) (serial)ưʬեɤϤɤΤ褦ˤĤޤ -4.11.2) SERIALǡͤϡɤޤ -4.11.3) currval() ¾Υ桼Ȥζ֤˴٤뤳ȤϤʤǤ -4.11.4) ȥǤȤˤ⤦ɥֹ椬Ȥʤ -ϤʤǤSERIAL˶ΤϤʤǤ -4.12) OID ȤϲǤ TID ȤϲǤ -4.13) 顼å "ERROR: Memory exhausted in AllocSetAlloc()"ФΤϤ -Ǥ -4.14) ɤΥС PostgreSQL 餻ƤΤĴ٤ˤϤɤޤ -4.15) ߤλ郎ǥեȤȤʤ褦ʥϤɤΤ褦ˤĤޤ -4.16) (outer join)ϤɤΤ褦˼¸ޤ? -4.17) ʣΥǡ١Ȥ䤤碌ϤɤΤ褦ˤФǤޤ -4.18) ؿʣΥޤϥ֤ˤϤɤޤ -4.19) PL/PgSQL δؿǰơ֥˥Ȥɤ "relation -with OID ##### does not exist" Ȥ顼ΤǤ礦 -4.20) ɤΤ褦ʥץꥱΥ塼ޤ -4.21) ơ֥ȥ̾ǧʤΤϤʤǤʤ -ʸ(ԥ饤)ϲ¸ʤΤǤ? - - ܸ˴ؤ - -5.1) ܸ줬ޤʤΤϤʤǤ -5.2) psql Windows饢Ȥˡܸ줬ʸΤǤ -5.3) PostgreSQLܸʸϤǤޤ - - - Ūʼ - -1.1) PostgreSQLȤϲǤθƤϡ PostgresȤϡ - -PostgreSQLPost-Gres-Q-L(ݥȡ쥹塼) ȯޤä -Ǥñ Postgres ȸƤФ뤳Ȥ⤢ޤ"PostgreSQL"ɤȯ뤫 -ˤʤͤΤˡեѰդƤޤ - -PostgreSQL ϥ֥-졼ʥǡ١ƥǡŪʾѥ -١ƥˡDBMSƥ˸褦ʲɤܤ줿ħͭ -ޤPostgreSQLϡ̵Ǵʥɤ뤳ȤǤޤ - -PostgreSQL γȯϡۤȤɤˤҤäܥƥγȯԤˤä -ͥåȤ̤ߥ˥ˤäƹԤƤޤߥ˥ƥ -ˤץȤǤ뤿ᡢɤδȤ⤦ޤȯ˻ä - http://www.postgresql.org/docs/faqs.FAQ_DEV.html ˤ볫ȯԤFAQƤ - - -PostgresPostgreSQLιȤƤ밦ΤǤޤС졼ǤΥץ -ȤǤȤȻȤƤ̾ǡۤΤΰΤ٤Ƥڤ˹ޤǤ -'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ǯ723ܥݥȥ쥹桼ά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 - - [: - ܤϡJPUGPostgreSQL 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ǯ1118PostgreSQLڤΤ˰̸ξ - 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) ¾DBMSPostgreSQLϤɤʤΤǤ 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ΥꥹȤιɤˤϤɤФ褤Ǥޤ -ŻҥʣƼʤ褦ˤˤϤɤޤ - -PostgreSQLMajordomo ڡ顢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ǯ419ȯ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.18.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 ~* Τ褦ʸȾʸ̤ʤϻȤޤΤ - FAQ4.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ǯ108 - : ¼ (Jun KUWAMURA <juk at postgresql.jp>) - - FAQκˤ궨ϤƤä(ɾΤάƤޤ): - - ̭(Minoru TANAKA <Tanaka.Minoru at keiken.co.jp>) - а ã(Tatsuo ISHII <ishii at sraoss.co.jp>) - ƣ ο(Tomohito SAITOH <tomos at elelab.nsc.co.jp>) - Ͼ ȥ(Hajime BABA <baba at kusastro.kyoto-u.ac.jp>) - 칬(Kazuyuki OKAMOTO <kaz-okamoto at hitachi-system.co.jp>) - (Shoichi Kosuge <s-kosuge at str.hitachi.co.jp>) - Ƿ(Yoshiyuki YAMASHITA <dica at eurus.dti.ne.jp>) - Ϻ(Sintaro SAKAI <s_sakai at mxn.mesh.ne.jp>) - (Masami OGOSHI <ogochan at zetabits.com>) - ӹ(Toshiyuki ISHIKAWA <tosiyuki at gol.com>) - й(Shigehiro HONDA <fwif0083 at mb.infoweb.ne.jp>) - (Jun SESE <sesejun at linet.gr.jp>) - ë ѹ(Hidetaka KAMIYA <hkamiya at catvmics.ne.jp>) - (Atsushi SUGAWARA <asugawar at f3.dion.ne.jp>) - (Kaori Inaba <i-kaori at sraoss.co.jp>) - ˧ (Yasufumi Haga <yasufumi.haga at nifty.com>) - - Ϥᡢݥȥ쥹˴ؤ˭٤ܸPostgreSQLꥹȡ - ΤääƤ줿ꡢĤåƤ - JF(Linux Japanese FAQ)ץȡFreeBSD ɥơץ - 줫顢ľܤ뤤ϴŪˤäƤ뤹٤ƤΥץ - ߥ˥ƥΤߤʤޤ˴դޤ - - - ʸ ܲ "Frequently Asked Questions" Υڡ "Japanese FAQ" - ȤܤǤޤ - - ޤǿǤϰʲΥȤˤޤ - http://www.postgresql.jp/wg/jpugdoc/ JPUGʸҴϢʬʲ - http://www.linux.or.jp/JF/JFdocs/INDEX-database.html Linux JFץȡ http://www.linet.gr.jp/~juk/pgsql/ PostgreSQL Notes for Japaneseסԥڡ - - ʤ˴ؤ뤴ո(juk at postgresql.jp)ޤǤ - ʢ 륢ɥ쥹 " at " ŬڤľƤȾѤ "@" Ǥ -] - diff --git a/doc/FAQ_polish b/doc/FAQ_polish deleted file mode 100644 index ff50ec26e32..00000000000 --- a/doc/FAQ_polish +++ /dev/null @@ -1,1279 +0,0 @@ - - Frequently Asked Questions (FAQ) o PostgreSQL - - Ostatnia aktualizacja: Sobota Luty 7 22:16:21 EST 2004 - - Ostatnia aktualizacja tl/umaczenia: Piatek Marzec 5 19:31:12 EST 2004 - - Obecny maintainer: Bruce Momjian (pgman@candle.pha.pa.us) - - Tl/umaczenie: Marcin Mazurek (m.mazurek@netsync.pl) - - Najbardziej aktualna wersje tego dokumentu mozna znalezc pod adresem: - http://www.PostgreSQL.org/docs/faqs/FAQ.html. - - Odpowiedzi na pytania dotyczace konkretnych systemw operacyjnych - mozna znalezc pod adresem: http://www.PostgreSQL.org/docs/index.html. - _________________________________________________________________ - - Pytania oglne - - 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 osb bezposrednio pracujacych - nad rozwojem PostgreSQL? - 1.13) Jak moge zgl/aszac bl/edy? - 1.14) Jak mozna porwnac PostgreSQL w stosunku do innych DBMS? - 1.15) W jaki sposb moge wesprzec finansowo PostgreSQL? - - Pytania uzytkownikw - - 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 jezykw 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 sposb moge kontrolowac pol/aczenia z innych hostw? - 3.6) Jak powinienem skonfigurowac system baz danych aby uzyskac lepsza - wydajnosc? - 3.7) Jakie sa mozliwosci wyszukiwania bl/edw? - 3.8) Skad sie bierze komunikat: "Sorry, too many clients" podczas - prby 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 - skryptw dump i restore? - - Pytania dotyczace uzytkowania - - 4.1) Jaka jest rznica pomiedzy kursorami binarnymi (binary cursors) i - zwykl/ymi kursorami (normal cursors)? - 4.2) Jak moge pobrac za pomoca SELECT jedynie kilka pierwszych wynikw - 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 sposb "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 indeksw - dla zapytan case-insensitive? - 4.13) Jak sprawdzic w zapytaniu czy pole ma wartosc NULL? - 4.14) Jaka jest rznica pomiedzy rznymi typami tekstowymi (character - types)? - 4.15.1) Jak moge utworzyc pole typu int, ktre 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 niektrych terminw 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, ktre wykonuje na duzych obiektach - "large-object" zwracaja komunikat: "invalid large obj descriptor"? - 4.21) Jak stworzyc kolumne ktrej 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 zwrcic w funkcji wiele rzedw lub kolumn? - 4.26) Dlaczego nie moge w sposb 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 zrdl/owy. Dlaczego po rekompilacji nie widac - zmiany? - _________________________________________________________________ - - Pytania oglne - - 1.1) Co to jest PostgreSQL? Jak to wymawiac? - - PostgreSQL wymawia sie Post-Gres-kju-el. Czesto podczas rozmw 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 typw danych POSTGRES'a, zastapil/ PostQuel'owy jezyk - zapytan z rozbudowanym podzbiorem jezyka SQL. PostgreSQL jest - oprogramowaniem darmowym z dostepnymi cal/ymi zrdl/ami. - - Rozwj 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 rozwj 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 - osb pomogl/o przy portowaniu, testowaniu, debugowaniu i rozwijaniu - kodu. Oryginalny kod Postgresa, na ktrym zostal/ oparty PostgreSQL, - byl/ wysil/kiem studentw oraz pracownikw 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 zrdl/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, ktre zostal/y szczegl/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 - interfejsw 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 zrdel/, 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 - zrdl/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 mirrorw 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/onkw 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 developerw 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/adw 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, - ktre mozna kupic znajduje sie pod adresem - http://techdocs.PostgreSQL.org/techdocs/bookreviews.php. Zbir - technicznych artykul/w o PostgreSQL znajduje sie pod adresem - http://techdocs.postgresql.org/. - - psql posiada kilka wbudowanych polecen \d, za pomoca ktrych mozna - sprawdzic informacje dotyczace typw, operatorw, funkcji, agregatw - 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 podzbir 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 uzytkownikw 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 osb bezposrednio pracujacych nad - rozwojem PostgreSQL? - - Przede wszystkim sciagnij ostatnie dostepne zrdl/a i przeczytaj - dokumentacje przeznaczona dla developerw na naszej stronie www lub - dostepna takze w zrdl/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 osb, ktre 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 commiterw 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 ktrej opisane sa wskazwki - 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 porwnac PostgreSQL w stosunku do innych DBMS? - - Jest kilka sposobw 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 ktrych inni nie posiadaja, jak typy definiowane - przez uzytkownika, dziedziczenie, rules, multi-version - concurrency control, ktra redukuje problemy z blokowaniem - (lock contention). - - Wydajnosc - Wydajnosc PostgreSQL jest podobna do innych komercyjnych i open - source baz danych. W niektrych sytuacjach jest szybszy w - niektrych wolniejszy. W porwnianiu do MySQL lub mniejszych - baz danych jestesmy szybsi przy wielu uzytkownikach, - skomplikowaych zapytaniach i duzym obciazeniu podczas. MySQL - jest szybszy dla prostych SELECTw wykonywanych przez niewielu - uzytkownikw. Spowodowane jest to narzutem, ktry 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 porwnanie PostgreSQL i MySQL mozna - znalezc pod adresem - http://openacs.org/philosophy/why-not-mysql.html Dodatkowo, - MySQL jest firma, ktra 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/edw. Kazde - wydanie poprzedza co najmniej miesiac testw wersji beta. - Patrzac na historie wydan PostgreSQL widac, ze dostarczamy - stabilne, dobrze sprawdzone wersje, ktre sa gotowe do uzycia w - srodowisku produkcyjnym. Myslimy, ze proces publikowania - kolejnych wersji opracowany przez nas jest jednym z lepszych - wsrd innych twrcw oprogramowania bazodanowego. - - Wsparcie - Dzieki naszym listom mailowym masz dostep do duzej liczby - programistw i uzytkownikw, ktrzy pomagaja rozwiazac kazdy - napotkany problem. Chociaz nie mozemy gwarantowac znalezienia - rozwiazania danego problemu, nie rznimy sie w tym od innych - komercyjnych systemw DBMS. Bezposredni kontakt z - programistami, uzytkownikami, dokumentacja i kodem zrdl/owym - sprawiaja, ze wsparcie oferowane PostgreSQL niejednokrotnie - jest lepsze niz w innych systemach DBMS. Istnieje takze - mozliwosc skorzystania z komercyjnego wsparcia dla tych, - ktrych takiego rozwiazania potrzebuja. (Sprawdz ten punkt - FAQ.) - - Cena - Korzystanie z PostgreSQL jest darmowe, zarwno w przypadku - komercyjnym jak i niekomercyjnym. Mozesz korzystac z naszego - kodu zrdl/owego w Twoim produkcie bez zadnych ograniczen, poza - tymi wymienionymi w licencji BSD przytoczonej powyzej. - - 1.15) W jaki sposb 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, ktry 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 rznych miesiecznych, czy jednorazowych - wydatkw, ktre trzeba ponosic aby wszystko dzial/al/o jak nalezy. - Jesli Ty, badz Twoja firma moze wspomc finansowo rozwj 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 rozwj 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. - Wspl/pracuje ze standardowym oprogramowaniem klienckim ODBC wiec w - ten sposb mozesz korzystac z PostgreSQL ODBC dostepnego na kazdej - pltaformie ktra wspiera (Win, Mac, Unix, VMS). - - Autorzy beda prawdopodobnie sprzedawac ten produkt osobom ktre - 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 osb 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 interfejsw graficznych dla PostgreSQL. Wsrd 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 jezykw programowania mozna sie komunikowac z - PostgreSQL? - - Najbardziej popularne jezyki posiiadaja wl/asny interfejs dla - PostgreSQL. Sprawdz liste rozszerzen dla intersujacego Ciebie jezyka - programowania. - - Ze zrdl/ami PostreSQL dystrubuowane sa interfejsy dla nastepujacych - jezykw 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 problemw, ale na poczatek sprawdz - czy masz zainstalowane rozszerzenia systemu V w jadrze systemu. - PostgreSQL wymaga do pracy zainstalowanej obsl/ugi pamieci dzielonej i - semaforw. - - 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 buforw oraz jak duzo procesw backendu - skonfigurowal/es dla postmaster'a. Dla wiekszosci systemw, z domyslna - liczba buforw i procesw potrzebujesz minimum w przyblizeniu 1MB. - Zobacz PostgreSQL Administrator's Guide gdzie szczegl/owo zostal/o - opisane wykorzystanie pamieci dzielonej i semaforw. - - 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 semaforw. Postgres wymaga jednego - semafor'a na potencjalny jeden proces backend. Tymczasowym - rozwiazaniem jest uruchomienie programu postmaster z mniejsza - maksymalna liczba procesw backend. Uzyj opcji -N z parameterem - mniejszym od domyslnego - 32. Bardziej trwal/ym rozwiazaniem jest - zwiekszenie parametrw 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 semaforw - nie zostal/a wl/aczona do jadra wcale. Zobacz PostgreSQL - Administrator's Guide po bardziej szczegl/owe informacje o pamieci - dzielonej i semaforach. - - 3.5) W jaki sposb moge kontrolowac pol/aczenia z innych hostw? - - Domyslnie PostgreSQL pozwala jedynie na pol/aczenia za pomoca socketw - Unixowych z lokalnego hosta. Inne hosty nie beda mogl/y sie pol/aczyc - z serwerem dopki nie zostanie dodana opcja -i do postmaster'a, oraz - nie umozliwi sie autoryzacji na podstawie adresu hostw 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 - ktre indeksy sa uzywane. - - Jesli wykonujesz bardzo duzo INSERTw, 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 backendw. 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 buforw 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/edw? - - PostgreSQL ma kilka mozliwosci na raportowanie informacji o jego - statusie, ktre 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. - - Zarwno 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 sposb: - 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, ktre - wydarzyl/y sie podczas pracy serwera. Postmaster posiada opcje -d, - ktra pozwala na raportowanie bardzo szczeglowych informacji. Do - opcji -d podajemy liczbe, ktra okresla szczegl/owosc wysyl/anych - informacji. Musisz miec swiadomosc, ze wysoki poziom logowania bedzie - powodowal/ tworzenie bardzo duzych plikw z logami. - - Jesli postmaster nie zostal/ uruchomiony, mozesz uruchomic - postgres'owy backend z linii polecen, i uruchomic Twoje polecenie SQL - bezposrednio na nim. Taki sposb jest polecany jedynie w przypadku - debugowania. Zwrc 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 powtrzenie warunkw 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 mgl/ 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, ktre 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 prby - pol/aczenia sie z baza danych? - - Musisz zwiekszyc limit ilosci jednoczesnych procesw 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 procesw backendu na pewno zauwazysz, ze trzeba zwiekszyc rzne - parametry jadra Unixa. Rzeczy, ktre pownienes sprawdzic to maksymalna - liczba blokw pamieci dzielonej, SHMMAX; maksymalna liczba semaforw, - SEMMNS oraz SEMMNI; maksymalna liczba procesw, NPROC; maksymalna - liczba procesw na jednego uzytkownika, MAXUPRC; i maksymalna liczba - otwartych plikw, NFILE oraz NINODE. Powd dla ktrego PostgreSQL ma - limit na maksymalna liczbe procesw backendu to obawa o wyczerpanie - zasobw 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 backendw mozesz spokojnie usunac pliki - pg_tempNNN.NN. - - 3.9) Dlaczego konieczne jest przy upgradzie PostgreSQL korzystanie ze - skryptw dump i restore? - - Twrcy 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 ktrej 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 rznica 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 wynikw - zapytania? - - Zobacz w manualu opis polecenia FETCH lub uzyj polecenia SELECT ... - LIMIT.... - - Nawet jesli chesz pobrac kilka pierwszych rzedw z wyniku zapytania, - cal/e zapytanie musi zostac wykonane. Byc moze powinienes skorzystac z - polecenia ORDER BY. Jesli istnieje indeks ktry odpowiada polom - okreslonym przez ORDER BY, PostgreSQL moze wykorzystac jedynie kilka - pierwszych rzedw, 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 zrdel/ psql, a konkretnie plik - pgsql/src/bin/psql/describe.c. Zawiera on polecenia SQL ktre generuja - wyniki komend z backslashem. Mozesz takze uruchomic psql z opcja -E - wtedy po wykonaniu polecenia z backslashem wyswietlane bedzie - zapytanie, ktre 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 ktrej 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 rzedw w tabeli? nieograniczona - Maksymalna liczba kolumn w tabeli? 250-1600 w zalezonosci od typw kolumn - Makasymalna liczba indeksw 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 plikw. Duze tabele sa przechowywane - jako pliki o rozmiarze 1 GB, wiec ograniczenia co do wielkosci plikw - narzucone przez system plikw 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 plikw 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 bajtw. - 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 bajtw: 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 bajtw (8 KB), wiec: - - 8192 bajtw na strone - --------------------- = 128 rzedw na jedna strone w bazie (zaokraglone w dl/) - 64 bajtw na rzad - - 100000 rzedw danych - ----------------------- = 782 stron w bazie danych (zaokraglone w gre) - 128 rzedw na strone - -782 stron w bazie * 8192 bajtw na strone = 6,406,144 bajtw (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, ktre 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 rzedw 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 ktrym 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 indeksw, mozliwe - jest aby zwrcic te wartosci uzywajac indeksw 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 operatorw 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 znakw, 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 sposb "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." - - Zrdl/owym dokumentem opisujacym oryginalnie projektowanie R-tree - indeksw 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 indeksw 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 algorytmw 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 indeksw 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. - - Porwnania case-insensitive sa zazwyczaj wykonywane w nastepujacy - sposb: - 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 rznica pomiedzy rznymi 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 bajtw (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 ktrych 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/ancuchw o - rznej dl/ugosci ale okresla on maksymalna jego dl/ugosc. TEXT jest - najlepszy dla l/ancuchw o dowolnej dl/ugosci, nie przekraczajacej - 1GB. - - CHAR(n) jast najlepszym typem do przechowywania l/ancuchw 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 szczeglnosci dla danych - zawierajacych NULL bajty. Wszystkie typy opisane tutaj maja podobne - charakterystyki jesli chodzi o wydajnosc. - - 4.15.1) Jak moge utworzyc pole ktre 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 - pzniej nalezy jej uzyc. Uzywajac przykl/adu z tabeli z punktu 4.15.1, - moze to wygladac w Perlu na przykl/ad w ten sposb: - 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 zwrcic 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 Twj backend, a - nie przez wszystkich uzytkownikw. - - 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 - dopki 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 numerw - rzedw. 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 rwne 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 OIDw 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 rzedw 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 miliardw. 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 ofsetw. TIDy zmieniaja sie wraz ze zmianami rzedw. Sa - uzywane przez indeksy, aby wskazywac do fizycznych rzedw. - - 4.17) Jakie jest znaczenie niektrych terminw w PostgreSQL? - - W czesci kodu zrdl/owego i starszej dokumentacji uzywamy terminw, - ktre maja bardziej oglne znaczenie. Oto niektre 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 terminw 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 Twj kernel ma zbyt nisko ustawione limity dla pewnych - zasobw. Sprbuj 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 podprocesw - utworzonych po wykonaniu polecenia. Jesli ten problem wystepuje z - klientem SQL, poniewaz backend zwraca zbyt duzo danych, sprbuj - wykonac to polecenie przed uruchomieniem klienta. - - 4.19) Jak sprawdzic jakiej wersji PostgreSQL uzywam? - - W psql, wpisz select version(); - - 4.20) Dlaczego operacje, ktre 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 prba zrobienia czegokolwiek - z uchwytem spowoduje wypisanie: invalid large obj descriptor. Kod, - ktry 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 ktrej 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 wynikw podzapytania dla - kazdego rzedu z outer query. Jesli podzapytanie zwraca jedynie kilka - rzedw 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 pzniejszych, 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 zwrca niepol/aczone rzedy w t1 (te, ktre nie pasuja w t2). - RIGHT join dodal/by niepol/aczone rzedy z tabeli t2. FULL join - zwrcil/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 - rznymi bazami danych powinno sie zachowywac. - - contrib/dblink pozwala na wykonywanie zapytan poprzez rzne bazy - danych wywol/ujac odpowiednie funkcje. Oczywiscie klient moze l/aczyc - sie z rznymi bazami danych i l/aczyc informacje w ten sposb uzyskana - po stronie klienta. - - 4.25) Jak zwrcic w funkcji wiele rzedw lub kolumn? - - Mozesz w l/atwy sposb zwracac wiele rzedw lub kolumn uzywajac - funkcji z: - http://techdocs.postgresql.org/guides/SetReturningFunctions. - - 4.26) Dlaczego nie moge w sposb 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, ktre - sa pzniej 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, ktrych 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 zwrcic uwage, - ze mozliwe jest takze uzywanie transportw szyfrujacw przez - strony trzecie, takie jak stunnel lub ssh, poza natywnym wsparciem - dla SSL przez PostgreSQL). - * Hasl/a uzytkownikw 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 plikw. - - 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. Sprbuj - 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 Twj 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 zrdl/owy. Dlaczego po rekompilacji nie widac zmiany? - - Pliki Makefiles nie maja dorzuconych odpowiednich zaleznosci dla - plikw 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 mgl/ - okreslic zaleznosci samodzielnie. diff --git a/doc/FAQ_russian b/doc/FAQ_russian deleted file mode 100644 index a361767ccc5..00000000000 --- a/doc/FAQ_russian +++ /dev/null @@ -1,988 +0,0 @@ - - Otvety na chasto zadavaemye voprosy po PostgreSQL - - Data poslednego obnovleniya: Sreda 25 iyunya 23:54:14 EDT 2008 - - Anglijskij variant soprovozhdaet: Bryus Mom'yan (Bruce Momjian) - (bruce@monjian.us) - - Pereviol na russkij: Viktor Vislobokov (admin@postgresql.ru.net) - - Samuyu svezhuyu anglijskuyu versiyu dokumenta mozhno najti na - http://www.postgresql.org/files/documentation/faqs/FAQ.html. - - Samuyu svezhuyu russkuyu versiyu dokumenta mozhno najti na - http://postgresql.ru.net/docs/FAQ_russian.html. - - Otvety na voprosy specifichnye dlya konkretnyh platform mozhno najti - na http://www.postgresql.org/docs/faq/. - _________________________________________________________________ - - Obschie voprosy - - 1.1) CHto takoe PostgreSQL? Kak proiznositsya `eto nazvanie? CHto - takoe Postgres? - 1.2) Kto upravlyaet PostgreSQL? - 1.3) Kakovy avtorskie prava na PostgreSQL? - 1.4) Na kakih platformah rabotaet PostgreSQL? - 1.5) Gde mozhno vzyat' PostgreSQL? - 1.6) Kakaya versiya naibolee svezhaya? - 1.7) Gde poluchit' podderzhku? - 1.8) Kak mne soobschit' ob oshibke? - 1.9) Kak najti informaciyu ob izvestnyh oshibkah ili otsutstvuyuschih - vozmozhnostyah? - 1.10) Kakaya dokumentaciya imeetsya v nalichii? - 1.11) Kak nauchit'sya SQL? - 1.12) Kak mne otpravit' ispravlenie ili prisoedinitsya k komande - razrabotchikov? - 1.13) Kak sravnit' PostgreSQL s drugimi SUBD? Mozhet li PostgreSQL - byt' vstroennoj? - 1.14) Budet li PostgreSQL rabotat' s poslednimi izmeneniyami, v raznyh - stranyh, kasayuschimisya dnevnogo vremeni? - 1.15) Kak mne otpisat'sya ot spiskov rassylki PostgreSQL? Kak - izbezhat' polucheniya dubliruyuschihsya soobschenij? - - Voprosy pol'zovatelej po klientskoj chasti - - 2.1) Kakie interfejsy est' dlya PostgreSQL? - 2.2) Kakie instrumenty suschestvuyut dlya ispol'zovaniya PostgreSQL - cherez Web? - 2.3) Est' li u PostgreSQL graficheskij interfejs pol'zovatelya? - - Voprosy administrirovaniya - - 3.1) Kak mne ustanovit' PostgreSQL v mesto otlichnoe ot - /usr/local/pgsql? - 3.2) Kak mne upravlyat' soedineniyami ot drugih komp'yuterov? - 3.3) Kakie nastrojki mne nuzhno sdelat' dlya uluchsheniya - proizvoditel'nosti? - 3.4) Kakie vozmozhnosti dlya otladki est' v nalichii? - 3.5) Pochemu ya poluchayu soobschenie "Sorry, too many clients" kogda - pytayus' podklyuchit'sya k baze? - 3.6) Kak vypolnit' obnovlenie PostgreSQL? - 3.7) Kakoe komp'yuternoe "zhelezo" ya dolzhen ispol'zovat'? - - Voprosy `ekspluatacii - - 4.1) Kak vypolnit' SELECT tol'ko dlya neskol'kih pervyh strochek - zaprosa? Dlya proizvol'noj stroki? - 4.2) Kak mne najti kakie tablicy, indeksy, bazy dannyh i pol'zovateli - suschestvuyut? Kak mne uvidet' zaprosy, kotorye ispol'zuet psql dlya - polucheniya `etoj informacii? - 4.3) Kak izmenit' tip dannyh kolonki? - 4.4) Kakovy maksimal'nye razmery dlya strok v tablice, tablic i bazy - dannyh? - 4.5) Kak mnogo diskovogo prostranstva v baze dannyh nuzhno dlya - sohraneniya dannyh iz obychnogo tekstovogo fajla? - 4.6) Pochemu moi zaprosy rabotayut medleno? Pochemu oni ne ispol'zuyut - moi indeksy? - 4.7) Kak posmotret' na to, kak optimizator vypolnyaet moj zapros? - 4.8) Kak mne vypolnit' poisk regulyarnogo vyrazheniya i poisk - nezavisimyj ot registra bukv poisk regulyarnogo vyrazheniya? Kak mne - ispol'zovat' indeks dlya poiska nezavisimogo ot registra bukv? - 4.9) Kak mne opredelit', chto znachenie polya v kakom-libo zaprose - ravno NULL? Kak mne soedinit' vozmozhnye NULL? Mogu ya sortirovat' - polya NULL ili net? - 4.10) Kakovy otlichiya mezhdu raznymi simvol'nymi tipami? - 4.11.1) Kak mne sozdat' pole serial/s-avto-uvelicheniem? - 4.11.2) Kak mne poluchit' znachenie pri vstavke SERIAL? - 4.11.3) Ne mozhet li poluchit'sya tak, chto ispol'zovanie currval() i - nextval() privedet k zaciklirovaniyu s drugimi pol'zovatelyami? - 4.11.4) Pochemu chisla iz moej posledovatel'nosti ne ispol'zuyutsya - snova pri otmene tranzakcii? Pochemu sozdayutsya razryvy pri numeracii - v kolonke, gde ya ispol'zuyu posledovatel'nost'/SERIAL? - 4.12) CHto takoe OID? CHto takoe CTID? - 4.13) Pochemu ya poluchayu oshibku "ERROR: Memory exhausted in - AllocSetAlloc()"? - 4.14) Kak mne uznat', kakaya versiya PostgreSQL zapuschena? - 4.15) Kak mne sozdat' kolonku kotoraya po umolchaniyu budet soderzhat' - tekuschee vremya? - 4.16) Kak vypolnit' vneshnee svyazyvanie? - 4.17) Kak vypolnyat' zaprosy, ispol'zuyuschie neskol'ko baz dannyh? - 4.18) Kak mne vernut' iz funkcii neskol'ko strok tablicy? - 4.19) Pochemu ya poluchayu oshibku "relation with OID #### ne - suschestvuet", kogda obraschayuts' k vremennym tablicam v funkciyah - PL/PgSQL? - 4.20) Kakie est' resheniya dlya replikacii? - 4.21) Pochemu imena tablicy i kolonok ne raspoznayutsya v v moiom - zaprose? Pochemu ne sohranyayutsya zaglavnye bukvy? - _________________________________________________________________ - - Obschie voprosy - - 1.1) CHto takoe PostgreSQL? Kak proiznositsya `eto nazvanie? CHto takoe - Postgres? - - PostgreSQL proiznositsya Post-Gres-Q-L (Post-Gres-K'yu-`El). (Dlya - osobo lyubopytstvuyuschih kak proiznosit' "PostgreSQL", suschestvuet - audio-fajl). - - PostgreSQL - `eto ob"ektno-relyacionnaya sistema upravleniya bazami - dannyh (SUBD), kotoraya imeet tradicionnye vozmozhnosti kommercheskih - SUBD s rasshireniyami, kotorye est' v SUBD novogo pokoleniya. - PostgreSQL - `eto svobodnoe i polnost'yu otkrytoe programmnoe - obespechenie. - - Razrabotku PostgreSQL vypolnyaet komanda razrabotchikov, razbrosannaya - po vsemu miru i svyazannaya cherez Internet. Razrabotka yavlyaetsya - obschestvennym proektom i ne upravlyaetsya kakoj-libo kompaniej. - Podrobnosti smotrite v FAQ dlya razrabotchikov, - http://www.postgresql.org/docs/faqs.FAQ_DEV.html - - Postgres -- `eto shiroko ispol'zuemoe sokraschenie dlya PostgreSQL. - Pervonachal'nym imenem proekta v Berkli bylo Postgres i `etot nik - teper' naibolee populyaren v razgovorah o PostgreSQL po sravneniyu s - drugimi. Esli vam trudno polnost'yu progovarivat' 'PostgreSQL', mozhno - prosto govorit' 'Postgres'. - - 1.2) Kto upravlyaet PostgreSQL? - - Esli vy ischite kakogo-to osobennogo cheloveka, central'nyj komitet - ili upravlyayuschuyu kompaniyu, to naprasno --- ih net. U nas est' - yadro komiteta i razrabotchikov, rabotayuschih s CVS, no `eti gruppy - sluzhat bol'she dlya administrativnyh celej, chem dlya upravleniya. - Proekt napryamuyu funkcioniruet s pomosch'yu soobschestva - razrabotchikov i pol'zovatelej, k kotoromu mozhet prisoedinitsya - kazhdyj. Vsio chto nuzhno -- `eto podpisat'sya na spiski rassylki i - uchastvovat' v diskussiyah. (Podrobnosti o tom kak vklyuchit'sya v - razrabotku PostgreSQL smotrite v FAQ dlya razrabotchikov.) - - 1.3) Kakovy avtorskie prava na PostgreSQL? - - PostgreSQL rasprostranyaetsya po klassicheskoj licenzii BSD. `Eta - licenziya ne soderzhit ogranichenij na to, kak budet ispol'zovat'sya - ishodnyj kod. Nam nravitsya `eta licenziya i u nas net namerenij eio - menyat'. Vot `eta licenziya BSD, kotoruyu my ispol'zuem: - - Sistema Upravleniya Bazami Dannyh PostgreSQL - - Portions copyright (c) 1996-2008, PostgreSQL Global Development Group - Portions Copyright (c) 1994-1996 Regents of the University of - California - - Predostavlyayutsya prava na ispol'zovanie, kopirovanie, izmenenie i - rasprostranenie dannogo programmnogo obespecheniya i ego dokumentacii - dlya lyubyh celej, besplatno i bez podpisaniya kakogo-libo - soglasheniya, pri uslovii chto dlya kazhdoj kopii budut predostavleny - dannoe vyshe zamechanie ob avtorskih pravah, tekuschij paragraf i dva - sleduyuschih paragrafa. - - KALIFORNIJSKIJ UNIVERSITET NE NESET NIKAKOJ OTVETSTVENNOSTI ZA LYUBYE - POVREZHDENIYA, VKLYUCHAYA POTERYU DOHODA, NANESENNYE PRYAMYM ILI - NEPRYAMYM, SPECIAL'NYM ILI SLUCHAJNYM ISPOL'ZOVANIEM DANNOGO - PROGRAMMNOGO OBESPECHENIYA ILI EGO DOKUMENTACII, DAZHE ESLI - KALIFORNIJSKIJ UNIVERSITET BYL IZVESCHEN O VOZMOZHNOSTI TAKIH - POVREZHDENIJ. - - KALIFORNIJSKIJ UNIVERSITET SPECIAL'NO OTKAZYVAZYVAETSYA PREDOSTAVLYAT' - LYUBYE GARANTII, VKLYUCHAYA, NO NE OGRANICHIVAYAS' TOL'KO `ETIMI - GARANTIYAMI: NEYAVNYE GARANTII PRIGODNOSTI TOVARA ILI PRIGODNOSTI DLYA - OTDEL'NOJ CELI. DANNOE PROGRAMMNOE OBESPECHENIE PREDOSTAVLYAETSYA NA - OSNOVE PRICIPA "KAK EST'" I KALIFORNIJSKIJ UNIVERSITET NE OBYAZAN - PREDOSTAVLYAT' SOPROVOZHDENIE, PODDERZHKU, OBNOVLENIYA, RASSHIRENIYA - ILI IZMENENIYA. - - 1.4) Na kakih platformah rabotaet PostgreSQL? - - Obychno, PostgreSQL mozhet rabotat' na lyuboj sovremennoj platforme - sovmestimoj s Unix. V instrukcii po ustanovke, vy najdete spisok teh - platform, na kotoryh byli provedeny testovye zapuski PostgreSQL k - momentu vyhoda dannoj versii. - - PostgreSQL takzhe rabotaet na operacionnyh sistemah Microsoft Windows, - osnovannyh na NT, takih kak Win2000 SP4, WinXP i Win2003. Paket - installyatora dostupen po adresu - http://www.postgresql.org/download/windows. Versii Windows, osnovannye - na MS-DOS (Win95, Win98, WinMe) mogut zapuskat' PostgreSQL s - pomosch'yu Cygwin. - - Takzhe suschestvuet versiya sportirovannaya pod Novell Netware 6 na - http://developer.novell.com/wiki/index.php/Postgresql, i versiya dlya - OS/2 (eComStation) na - http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgre - SQL&stype=all&sort=type&dir=%2F. - - 1.5) Gde mozhno vzyat' PostgreSQL? - - CHerez brauzer, ispol'zuya http://www.postgresql.org/ftp/ i cherez - ftp, ispol'zuya ftp://ftp.postgresql.org/pub/. - - 1.6) Kakaya versiya naibolee svezhaya? - - Poslednij vypusk PostgreSQL - `eto versiya 8.3.3 - - My planiruem vypuskat' novye starshie versii kazhdyj god, a mladshie - versii kazhdye neskol'ko mesyacev. - - 1.7) Gde poluchit' podderzhku? - - Soobschestvo PostgreSQL predostavlyaet pomosch' mnozhestvu - pol'zovatelej cherez E-mail. Osnovnoj web-sajt dlya podpiski na spiski - rassylki po E-mail `eto: http://www.postgresql.org/community/lists/. - Horoshim mestom dlya togo, chtoby nachat' zadavat' voprosy - yavlyayutsya spiski general (obschie voprosy) ili bugs (oshibki). - - Glavnym IRC kanalom yavlyaetsya #postgreql, raspolozhennyj na servere - Freenode (irc.freenode.net). CHtoby podklyuchit'sya, vy mozhete - ispol'zovat' v Unix vyzov programmy irc -c '#postgresql' "$USER" - irc.freenode.net ili lyuboj drugoj IRC klient. Na `etom zhe servere - suschestvuyut kanaly na ispanskom (#postgresql-es), francuzskom - (#postgresqlfr) i brazil'skom (#postgresql-br) yazykah. Takzhe - suschestvuet kanal po PostgreSQL na servere EFNet. - - Spisok kommercheskoj podderzhki kompanij dostupen na - http://www.postgresql.org/support/professional_support. - - 1.8) Kak mne soobschit' ob oshibke? - - Posetite stranichku so special'noj formoj otchiota ob oshibke v - PostgreSQL po adresu: http://www.postgresql.org/support/submitbug. - Takzhe prover'te nalichie bolee svezhej versii PostgreSQL na nashem - FTP sajte ftp://ftp.postgresql.org/pub/. - - Na oshibki, uvedomlenie o kotoryh byli sdelany cherez special'nuyu - formu ili otpravlennye v kakoj-libo spisok rassylki PostgreSQL, - obychno generiruetsya odin iz sleduyuschih otvetov: - * `Eto ne oshibka i pochemu - * `Eto izvestnaya oshibka i ona uzhe est' v spiske TODO - * Dannaya oshibka byla ispravlena v tekuschem vypuske - * Dannaya oshibka byla ispravlena, no ispravlenie poka ne popalo v - oficial'nyj vypusk - * Zaprashivaetsya bolee detal'naya informaciya: - + Operacionnaya sistema - + Versiya PostgreSQL - + Test, vosproizvodyaschij oshibku - + Otladochnaya informaciya - + Vyvod backtrace otladchika - * `Eto novaya oshibka. Mozhet proizojti sleduyuschee: - + Budet sozdano ispravlenie, kotoroe budet vklyucheno v - sleduyuschij vypusk - + Oshibka ne mozhet byt' ispravlena nemedlenno i budet - dobavlena v spisok TODO - - 1.9) Kak najti informaciyu ob izvestnyh oshibkah ili otsutstvuyuschih - vozmozhnostyah? - - PostgreSQL podderzhivaet rasshirennyj podklass SQL:2003. Smotrite nash - spisok TODO na predmet izvestnyh oshibok, otsutstvuyuschih - vozmozhnostej i buduschih planov. - - Na zapros kakoj-libo vozmozhnosti obychno prihodyat sleduyuschie - otvety: - * Dannaya vozmozhnost' uzhe est' v spiske TODO - * Dannaya vozmozhnost' nezhelatel'na potomu chto: - + Ona dubliruet suschestvuyuschuyu funkcional'nost', kotoraya - sleduet standartu SQL - + Dannaya vozmozhnost' sil'no uslozhnila by kod, no dala by - malen'kuyu vygodu - + Dannaya vozmozhnost' nebezopasna ili nenadiozhna - * Dannaya novaya vozmozhnost' dobavlena v spisok TODO - - PostgreSQL ne ispol'zuet kakuyu-libo sistemu otslezhivaniya oshibok, - potomu chto my obnaruzhili, chto ispol'zovanie pryamogo obrascheniya - po `elektronnoj pochte i obnovlyaemogo spiska TODO yavlyaetsya bolee - `effektivnym. Na praktike, oshibki v programmnom obespechenii - sohranyayutsya ochen' nedolgo, a oshibki, kotorye vazhny bol'shomu - kolichestvu pol'zovatelej ispravlyayutsya momental'no. Est' tol'ko - odno mesto, gde mozhno najti vse izmeneniya, uluchsheniya i - ispravleniya, sdelannye v vypuske PostgreSQL - `eto zhurnaly - soobschenij sistemy kontrolya versij CVS. Dazhe zamechaniya k vypuskam - ne soderzhat vse izmeneniya, sdelannye v programmnom obespechenii. - - 1.10) Kakaya dokumentaciya imeetsya v nalichii? - - PostgreSQL soderzhit mnogo dokumentacii, vklyuchaya bol'shoe - rukovodstvo, stranicy `elektronnogo rukovodstva man i nekotorye - malen'kie testovye primery. Smotrite v katalog /doc. Vy takzhe mozhete - prosmatrivat' dokumentaciyu v Internet po adresu - http://www.postgresql.org/docs. - - Suschestvuet dve knigi po PostgreSQL dostupnye po adresam - http://www.PostgreSQL.org/docs/books/awbook.html i - http://www.commandprompt.com/ppbook/. Est' neskol'ko knig po - PostgreSQL, kotorye mozhno kupit'. Odnu iz naibolee populyarnyh - napisal Korri Duglas (Korry Douglas). Spisok obzorov po `etim knigam - dostupen po adresu http://www.postgresql.org/docs/books/. Krome togo, - po adresu - http://wiki.postgresql.org/wiki/Community_Generated_Articles%2C_Guides - %2C_and_Documentation vy mozhete najti kollekciyu tehnicheskih statej, - posveschennyh PostgreSQL. - - Klient komandnoj stroki psql imeet neskol'ko komand \d dlya - otobrazheniya informacii po tipam, operatoram, funkciyam, agregatam i - t.d. - ispol'zujte \? dlya polucheniya spiska dostupnyh komand. - - Nash sajt soderzhit esche bol'she informacii. - - 1.11) Kak mne nauchit'sya SQL? - - Vo-pervyh, voz'mite odnu iz knig po PostgreSQL, o kotoryh govorilos' - vyshe. Mnogim iz nashih pol'zovatelej takzhe nravitsya kniga The - Practical SQL Handbook, Bowman, Judith S., et al., Addison-Wesley. - Drugim nravitsya The Complete Reference SQL, Groff et al., - McGraw-Hill. - - Suschestvuet takzhe mnozhestvo prekrasnyh uchebnikov dostupnyh v - online: - * http://www.intermedia.net/support/sql/sqltut.shtm, - * http://sqlcourse.com. - * http://www.w3school.com/sql/default.asp - * http://mysite.verizon.net/Graeme_Birchall/id1.html - - 1.12) Kak mne prislat' ispravlenie ili prisoedinitsya k komande - razrabotchikov? - - Smotrite FAQ dlya razrabotchikov. - - 1.13) Kak sravnit' PostgreSQL s drugimi SUBD? Mozhet li PostgreSQL byt' - vstroennym? - - Suschestvuet neskol'ko metodov sravneniya programmnogo obespecheniya: - vozmozhnosti, proizvoditel'nost', nadezhnost', podderzhka i cena. - - Vozmozhnosti - PostgreSQL imeet bol'shinstvo vozmozhnostej predstavlennyh v - bol'shih kommercheskih SUBD, takie kak: tranzakcii, podzaprosy, - triggery, predstavleniya, ssylochnoj celostnosti vtorichnogo - klyucha i raznye blokirovki. U nas est' nekotorye vozmozhnosti, - kotoryh net u nih: tipy, opredelyaemye pol'zovatelem, mehanizm - nasledovaniya, pravila i konkuretnoe mnogoversionnoe upravlenie - dlya raboty s soderzhimym blokirovok. - - Proizvoditel'nost' - Proizvoditel'nost' PostgreSQL shodna s drugimi kommercheskimi - SUBD i s SUBD s otkrytym ishodnym kodom. V kakih-to veschah my - bystree, v kakih-to medlennee. Nasha proizvoditel'nosti obychno - +/-10% po sravneniyu s drugimi SUBD. - - Nadezhnost' - My ponimali, chto nasha SUBD dolzhna byt' nadezhnoj ili ona - nichego ne budet stoit'. My staraemsya vypuskat' horosho - proverennyj, stabil'nyj kod, kotoryj soderzhit minimum oshibok. - Kazhdyj vypusk prohodit stadiyu beta-testirovaniya po krajnej - mere v techenii odnogo mesyaca i nasha istoriya vypuskov - pokazyvaet chto my mozhem predostavlyat' stabil'nye, monolitnye - vypuski, kotorye gotovy k produktivnomu ispol'zovaniyu. My - verim, chto my proizvodim proverku ne huzhe, chem u drugih - SUBD. - - Podderzhka - Nash spisok rassylki predostavlyaet vozmozhmozhnost' obscheniya - s bol'shoj gruppoj razrabotchikov i pol'zovatelej, kotorye - mogut pomoch' reshit' lyubye voznikshie problemy. V to zhe - vremya, my ne garantiruem kakie-libo ispravleniya, no i - razrabotchiki kommercheskih SUBD ne vsegda delayut - ispravleniya. Pryamoj dostup k razrabotchikam, soobschestvu - pol'zovatelej, rukovodstvam i ishodnym tekstam chasto delayut - podderzhku PostgreSQL prevoshodyaschej drugie SUBD. - Suschestvuet kommercheskaya podderzhka po rezul'tam voznikshih - incidentov, kotoraya dostupna dlya teh komu ona nuzhna. - (Smotrite Sekciyu 1.7.) - - Cena - Nash produkt besplaten kak dlya kommercheskogo tak, i ne dlya - kommercheskogo ispol'zovaniya. Vy mozhete dobavlyat' svoj kod v - nash produkt bez ogranichenij, za isklyucheniem teh, chto - opisyvayutsya v nashej licenzii stilya BSD, kotoraya privedena - vyshe. - - PostgreSQL razrabatyvaetsya po arhitekture klient/server, kotoraya - trebuet otdel'nyh processov dlya kazhdogo klienta i servera, a takzhe - neskol'ko vspomogatel'nyh processov. Mnogie vstraivaemye arhitektury - mogut sootvetstvovat' takim trebovaniyam. Odnako, esli vasha - vstraivaemaya arhitektura trebuet server baz dannyh dlya zapuska - vnutri prikladnogo processa, vy ne mozhete ispol'zovat' Postgres i vam - luchshe by vybrat' dlya bazy dannyh kakoe-libo drugoe oblegchennoe - reshenie. - - 1.14) Budet li PostgreSQL rabotat' s poslednimi izmeneniyami, v raznyh - stranyh, kasayuschimisya dnevnogo vremeni? - - Izmeneniya v sohranenii dnevnogo vremeni v SSHA vklyucheny v - PostgreSQL versii 8.0.[4+] i vo vse sleduyuschie vypuski, naprimer v - 8.1. Izmeneniya po Kanade i Zapadnoj Avstralii vklyucheny v 8.0.[10+], - 8.1.[6+] i vse sleduyuschie vypuski. Vypuski PostgreSQL do 8.0 - ispol'zuyut informaciyu o sohranenii dnevnogo vremeni iz bazy dannyh - vremennyh zon v operacionnoj sisteme. - _________________________________________________________________ - - 1.15) Kak mne otpisat'sya ot spiskov rassylki PostgreSQL? Kak izbezhat' - polucheniya dubliruyuschih soobschenij? - - Stranica Majordomo na sajte PostgreSQL pozvolyaet podpisat'sya ili - otpisat'sya ot lyubogo iz spiskov rassylki PostgreSQL. (Vam mozhet - ponadobitsya vash parol' dlya Majordomo, kotoryj otpravlyaetsya na - vash E-mail, chtoby vojti v upravlenie vashimi podpiskami.) - - Vse spiski rassylki PostgreSQL nastarivayutsya tak, chtoby gruppovoj - otvet uhodil na adres spiska i na adres avtora soobscheniya. Tak - sdelano, chtoby pol'zovateli poluchali otvety na E-mail kak mozhno - bystree. Esli vy ne hotite poluchat' dubliruyuschie E-mail - soobscheniya iz spiska, v sluchayah kogda vy uzhe poluchili `eti - soobscheniya napryamuyu, ustanovite flazhok eliminatecc na stranice - Change Settings v Majordomo. Vy takzhe mozhete izbezhat' polucheniya - kopij svoih soobschenij dlya samogo sebya, esli snimite flazhok - selfcopy. - _________________________________________________________________ - - Voprosy pol'zovatelej po klientskoj chasti - - 2.1) Kakie interfejsy est' dlya PostgreSQL? - - Ustanovka PostgreSQL vklyuchaet tol'ko C i vstroennyj (embedded) C - interfejsy. Vse drugie interfejsy yavlyayutsya nezavisimymi proektami - i zagruzhayutsya otdel'no; samostoyatel'nost' proektov pozvolyaet im - organizovat' sobstvennoe raspisanie vypuskov novyh versij i imet' - sobstvennuyu komandu razrabotchikov. - - Nekotorye yazyki programmirovaniya, takie kak PHP vklyuchayut v sebya - interfejs k PostgreSQL. Interfejsy dlya takih yazykov kak Perl, TCL, - Python i mnogih drugih, dostupny na http://pgfoundry.org. - - 2.2) Kakie instrumenty suschestvuyut dlya ispol'zovaniya PostgreSQL cherez - Web? - - Prekrasnoe vvedenie vo vzaimodejstvie baz dannyh i Web mozhno najti - na: http://www.webreview.com - - Dlya integracii s Web, PHP http://www.php.net yavlyaetsya neplohim - interfejsom. - - V slozhnyh sluchayah, mnogie pol'zuyutsya Perl i DBD::Pg s CGI.pm ili - mod_perl. - - 2.3) Est' li u PostgreSQL graficheskij interfejs pol'zovatelya? - - Dlya PostgreSQL suschestvuet bol'shoe kolichestvo instrumentov s - graficheskim interfejsom kak kommercheskih, tak i otkrytyh. - Podrobnosti mozhno najti v Dokumentacii soobschestva dlya GUI - istrumentov PostgreSQL - _________________________________________________________________ - - Voprosy administrirovaniya - - 3.1) Kak mne ustanovit' PostgreSQL v mesto otlichnoe ot /usr/local/pgsql? - - Zadajte opciyu --prefix kogda zapuskaete configure. - - 3.2) Kak mne upravlyat' soedineniyami ot drugih komp'yuterov? - - Po umolchaniyu, PostgreSQL razreshaet tol'ko soedineniya na lokal'noj - mashine cherez sokety domena Unix ili TCP/IP soedineniya. Dlya togo, - chtoby drugie mashiny smogli podklyuchit'sya k baze vy dolzhny - izmenit' listen_addresses v postgresql.conf, razreshit' - host-avtorizaciya v fajle $PGDATA/pg_hba.conf i perestartovat' server - SUBD. - - 3.3) Kakie nastrojki mne nuzhno sdelat' dlya uluchsheniya proizvoditel'nosti? - - Suschestvuet tri glavnyh oblasti, kotorye potencial'no mogut - uvelichit' proizvoditel'nost': - - Izmenenie zaprosa - `Eto oznachaet modifikaciyu zaprosov dlya polucheniya luchshej - proizvoditel'nosti: - - + Sozdanie indeksov, vklyuchaya indeksy vyrazhenij i - chastichnye indeksy - + Ispol'zovanie COPY vmesto mnozhestva INSERT - + Gruppirovka neskol'kih operatorov v edinuyu tranzakciyu dlya - umen'sheniya nagruzki pri vypolnenii zaversheniya tranzakcii - + Ispol'zovanie CLUSTER, kogda iz indeksa beriotsya mnozhestvo - strok - + Ispol'zovanie LIMIT dlya togo, chtoby vozvraschalas' tol'ko - chast' vyvoda ot zaprosa - + Ispol'zovanie Podgotovlennyh (Prepared) zaprosov - + Ispol'zovanie ANALYZE dlya obsluzhivaniya statistiki - optimizatora - + Regulyarnoe ispol'zovanie VACUUM ili pg_autovacuum - + Udalenie indeksov vo vremya bol'shih izmenenij dannyh - - Nastrojka servera - Nekotorye ustanovki v postgresql.conf vliyayut na - proizvoditel'nost'. Podrobnyj polnyj spisok ustanovok sm. v - Administration Guide/Server Run-time Environment/Run-time - Configuration, a kommentarii sm. v - http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_co - nf_e.html i - http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html. - - Vybor "zheleza" - apparatnogo obespecheniya - Vliyanie "zheleza" na proizvoditel'nost' podrobno opisano v - http://www.powerpostgresql.com/PerfList/ i - http://momjian.us/main/writings/pgsql/hw_performance/index.html - . - - 3.4) Kakie vozmozhnosti dlya otladki est' v nalichii? - - Est' mnozhestvo ustanovok v nastrojkah servera, nachinayuschihsya na - log_* na - http://www.postgresql.org/docs/current/interactive/runtime-config-logg - ing.html, pozvolyayuschih protokolirovat' zaprosy i statistiku raboty - processa, kotoraya ochen' polezna dlya otladki i izmereniya - proizvoditel'nosti. - - 3.5) Pochemu ya poluchayu soobschenie "Sorry, too many clients" kogda - pytayus' podklyuchit'sya k baze? - - Vy dostigli ustanovlennogo po umolchaniyu ogranicheniya v 100 sessij - podklyucheniya k baze dannyh. Vam neobhodimo uvelichit' limit na - kolichestvo konkurentnyh backend processov dlya vashego servera BD, - izmeniv znachenie max_connections v fajle postgresql.conf i - perestartovat' server BD. - - 3.6) Kak vypolnit' obnovlenie PostgreSQL? - - Sm. informaciyu ob obnovlenii v - http://www.postgresql.org/support/versioning i special'nye instrukcii - v - http://www.postgresql.org/docs/current/static/install-upgrading.html. - - 3.7) Kakoe komp'yuternoe "zhelezo" ya dolzhen ispol'zovat'? - - Poskol'ku "zhelezo" personal'nyh komp'yuterov yavlyaetsya naibolee - sovmestimym, lyudi sklonny verit', chto takoe "zhelezo" imeet - odinakovoe kachestvo. `Eto ne tak. Pamyat' ECC, SCSI i kachestvennye - materinskie platy yavlyayutsya bolee nadiozhnymi i imeyut bolee - luchshuyu proizvoditel'nost', chem menee dorogoe "zhelezo". PostgreSQL - budet rabotat' na lyubom "zheleze", no esli dlya vas vazhny - nadiozhnost' i proizvoditel'nost', to s vashej storony budet mudro - postavit' sootvetstvuyuschee "zhelezo". Obsudit' raznoe "zhelezo" - mozhno v nashih spiskah rassylki. - _________________________________________________________________ - - Voprosy `ekspluatacii - - 4.1) Kak vypolnit' SELECT tol'ko dlya neskol'kih pervyh strochek zaprosa? - Proizvol'noj stroki? - - Dlya polucheniya tol'ko neskol'kih strok, esli vy znaete ih - kolichestvo na moment vypolneniya SELECT ispol'zujte LIMIT. - Esli est' kakoj-libo indeks, kotoryj sovpadaet s ORDER BY, to - vozmozhno, chto ves' zapros vypolnen i ne budet. Esli vy ne znaete - kolichestva neobhodimyh strok na moment vypolneniya SELECT, - ispol'zujte kursor i FETCH. - - To SELECT a random row, use: - SELECT col - FROM tab - ORDER BY random() - LIMIT 1; - - 4.2) Kak mne najti kakie tablicy, indeksy, bazy dannyh i pol'zovateli - suschestvuyut? Kak mne uvidet' zaprosy, kotorye ispol'zuet psql dlya - polucheniya `etoj informacii? - - CHtoby prosmatrivat' tablicy v psql, ispol'zujte komandu \dt. Polnyj - spisok komand v psql vy mozhete poluchit', ispol'zuya \?. Krome togo, - vy mozhete posmotret' ishodnyj kod psql v fajle - pgsql/src/bin/psql/describe.c. On soderzhit komandy SQL kotorye - generiruyutsya pri vvode v psql komand, nachinayuschihsya s obratnoj - kosoj cherty. Vy takzhe mozhete zapustit' psql s opciej -E tak, chtoby - `eta programma vydavala zaprosy, kotorye ona ispol'zuet dlya - vypolneniya zadannyh vami komand. PostgreSQL takzhe predostavlyaet SQL - sovmestimyj s INFORMATION SCHEMA interfejs, s pomosch'yu kotorogo, vy - mozhete sformirovat' zapros na poluchenie informacii o baze dannyh. - - Takzhe suschestvuyut sistemnye tablicy, nachinayuschiesya s pg_. - - Ispol'zujte psql -l dlya polucheniya spiska vseh baz dannyh. - - Takzhe posmotrite fajl pgsql/src/tutorial/syscat.source. On pokazyvaet - mnogie iz operatorov SELECT neobhodimyh dlya polucheniya informacii iz - sistemnyh tablic bazy dannyh. - - 4.3) Kak izmenit' tip dannyh kolonki? - - V 8.0 i bolee pozdnih versiyah, izmenenie tipa kolonki vypolnyaetsya - ochen' legko cherez ALTER TABLE ALTER COLUMN TYPE. - - V bolee rannih versiyah sdelajte tak: - BEGIN; - ALTER TABLE tab ADD COLUMN new_col new_data_type; - UPDATE tab SET new_col = CAST(old_col AS new_data_type); - ALTER TABLE tab DROP COLUMN old_col; - COMMIT; - - 4.4) Kakovy maksimal'nye razmery dlya strok v tablice, tablic i bazy dannyh? - - Suschestvuyut sleduyuschie ogranicheniya: - - Maksimal'nyj razmer bazy? neogranichen (suschestvuyut bazy na 32 TB) - Maksimal'nyj razmer tablicy? 32 TB - Maksimal'nyj razmer stroki? 400 Gb - Maksimal'nyj razmer polya? 1 GB - Maksimal'noe kolichestvo strok v tablice? neogranicheno - Maksimal'noe kolichestvo kolonok v tablice? 250-1600 v zavisimosti ot - tipa - Maksimal'noe kolichestvo indeksov v tablice? neogranicheno - - Razumeetsya, ponyatie "neogranicheno" na samom dele ogranichivaetsya - dostupnym diskovym prostranistvom i razmerami pamyati/svoppinga. Kogda - znacheniya perechislennye vyshe neopravdano bol'shie, mozhet - postradat' proizvoditel'nost'. - - Maksimal'nyj razmer tablicy v 32 TB ne trebuet chtoby operacionnaya - sistema podderzhivala fajly bol'shih razmerov. Bol'shie tablicy - hranyatsya kak mnozhestvo fajlov razmerom v 1 GB, tak chto - ogranicheniya, kotorye nakladyvaet fajlovaya sistema ne vazhny. - - Maksimal'nyj razmer tablicy i maksimal'noe kolichestvo kolonok mogut - byt' uvelicheny v chetyre raza, esli razmer bloka po umolchaniyu budet - uvelichen do 32k. - - Suschestvuet ogranichenie, po kotoromu indeksy ne mogut sozdavat'sya - dlya kolonok dlinnee chem 2,000 simvolov. K schast'yu takie indeksy - vryad li dejstvitel'no komu-to nuzhny. Unikal'nost' garantiruetsya - nailuchim obrazom, s pomosch'yu funkcional'nogo indeksa iz h`esha MD5 - dlinnoj kolonki, a polnotekstovoe indeksirovanie pozvolyaet iskat' - slova vnutri kolonki. - - 4.5) Kak mnogo diskovogo prostranstva v baze dannyh nuzhno dlya sohraneniya - dannyh iz obychnogo tekstovogo fajla? - - SUBD PostgreSQL mozhet potrebovat'sya diskovogo prostranstva do 5 raz - bol'she dlya sohraneniya dannyh iz prostogo tekstovogo fajla. - - V kachestve primera, rassmotrim fajl v 100,000 strok v kazhdoj, iz - kotoryh celoe chislo i tekstovoe opisanie. Pri `etom dlina teksta, v - srednem, sostavlyaet 20 bajt. Razmer prostogo fajla sostavit 2.8 MB. - Razmer bazy PostgreSQL, soderzhaschej `eti zhe dannye sostavit - priblizitel'no 5.2 MB iz kotoryh: - 24 bajt: na kazhdyj zagolovok stroki v tablice (priblizitel'no) - + 24 bajta: odno pole s celochislennym tipom i odno tekstovoe pole - + 4 bajta: ukazatel' na stranice dlya vsej tablichnoj stroki - ---------------------------------------- - 56 bajt na stroku v tablice - - Razmer stranicy dannyh v PostgreSQL sostavlyaet 8192 bajt (8 KB), tak chto: - - 8192 bajt na stranicu - --------------------- = 158 strok v tablice na stranicu BD (okruglionno) - 52 bajt na stroku v tablice - - 100000 strok dannyh - ----------------------- = 633 stranic v BD (okruglionno) - 158 strok v tablice na stranicu - - 633 stranic BD * 8192 bajt na stranicu = 5,185,536 bajt (5.2 MB) - - Indeksy ne trebuyut tak mnogo, no poskol'ku oni sozdayutsya dlya - bol'shogo kolichestva dannyh, oni takzhe mogut byt' veliki. - - Znacheniya NULL hranyatsya kak bitovye karty i po`etomu oni zanimayut - ochen' malo mesta. - - 4.6) Pochemu moi zaprosy rabotayut medleno? Pochemu oni ne ispol'zuyut moi - indeksy? - - Indeksy ne ispol'zuyutsya dlya kazhdogo zaprosa. Oni ispol'zuyutsya - tol'ko esli tablica bol'she minimal'nogo razmera i zapros vybiraet - tol'ko malen'kij procent strok v tablice. Tak ustroeno, potomu chto - dostup k disku s primeneniem randomizacii pri skanirovanii indeksov - mozhet byt' medlennee, chem prostoe chtenie tablicy ili ee - posledovatel'noe skanirovanie. - - CHtoby opredelit' neobhodimost' ispol'zovaniya indeksa dlya kakoj-libo - tablicy, PostgreSQL dolzhen imet' statistiku po `etoj tablice. `Eta - statistika sobiraetsya pri ispol'zovanii VACUUM ANALYZE ili prosto - ANALYZE. Ispol'zuya statistiku, optimizator uznaet o tom kak mnogo - strok v tablice i esli on dolzhen ispol'zovat' indeksy, to on mozhet - prinimat' luchshie resheniya. Statistika takzhe vliyaet na opredelenie - optimal'nogo poryadka svyazyvaniya i metoda svyazyvaniya. Pri - izmenenii soderzhimogo tablicy dolzhen periodicheski vypolnyatsya sbor - statistiki. - - Obychno indeksy ne ispol'zuyutsya dlya ORDER BY ili dlya vypolneniya - svyazyvanij. Posledovatel'nyj perebor sleduyuschij za yavnoj - sortirovkoj obychno bystree, chem poisk po indeksam v bol'shoj - tablice. Odnako, ORDER BY chasto kombiniruetsya s LIMIT i v `etom - sluchae indeks budet ispol'zovat'sya, poskol'ku pri vypolnenii budet - vozvraschat'sya nebol'shaya chast' tablicy. - - Esli vam kazhetsya, chto optimizator nekorrektno vybiraet - posledovatel'nyj perebor, ispol'zujte SET enable_seqscan TO 'off' i - zapustite zapros snova, chtoby uvidet', dejstvitel'no li skanirovanie - indeksov bystree. - - Kogda ispol'zuyutsya operacii s shablonami, naprimer LIKE ili ~, - indeksy mogut byt' ispol'zovany v sleduyuschih sluchayah: - * Nachalo stroki poiska dolzhno sovpadat' s nachalom iskomoj stroki, - t.e.: - + LIKE shablony ne dolzhny nachinat'sya s %.. - + ~ shablony regulyarnyh vyrazhenij dolzhna nachinat'sya na ^. - * Stroka poiska ne dolzhna nachinat'sya s simvola klassa, t.e. - [a-e]. - * Poisk nezavisimyj ot registra, takoj kak ILIKE i ~* ne ispol'zuet - indeksy. Vmesto nego, ispol'zujte indeksy vyrazhenij, kotorye - opisyvayutsya v sekcii 4.8. - * Vo vremya initdb dolzhna ispol'zovat'sya lokal' po umolchaniyu C, - potomu chto ne suschestvuet vozmozhnosti uznat' sleduyuschij - naibol'shij simvol dlya ne-C lokali. Vy mozhete dlya takih - sluchaev sozdat' special'nyj indeks text_pattern_ops kotoryj - rabotaet tol'ko dlya LIKE indeksirovaniya. Dlya poiska slov takzhe - mozhno ispol'zovat' polnotekstovyj indeks. - - 4.7) Kak posmotret' na to, kak optimizator vypolnyaet moj zapros? - - Smotrite stranicu rukovodstva posvyaschennuyu EXPLAIN. - - 4.8) Kak mne vypolnit' poisk regulyarnogo vyrazheniya i poisk nezavisimyj ot - registra bukv poisk regulyarnogo vyrazheniya? Kak mne ispol'zovat' indeks - dlya poiska nezavisimogo ot registra bukv? - - Operator ~ proizvodit poisk regulyarnogo vyrazheniya, a operator ~* - proizvodit nezavisimyj ot registra bukv poisk regulyarnogo - vyrazheniya. Nezavisimyj ot registra variant LIKE nazyvaetsya ILIKE. - - Nezavisimoe ot registra sravnenie obychno vyrazhaetsya tak: - SELECT * - FROM tab - WHERE lower(col) = 'abc'; - - `Eta konstrukciya ne budet ispol'zovat' standartnyj indeks. Odnako, - esli vy sozdadite indeks vyrazheniya, on budet ispol'zovan: - CREATE INDEX tabindex ON tab (lower(col)); - - Esli vysheukazannyj indeks sozdaiotsya kak UNIQUE, to kolonka, dlya - kotoroj on sozdaiotsya mozhet hranit' simvoly i v verhnem, i v nizhnem - registre, indes ne mozhet imet' identichnyh znachenij, kotorye - otlichayutsya tol'ko registrom. CHtoby v kolonke mozhno bylo hranit' - simvoly tol'ko v opredelionnom registre, ispol'zujte ogranichenie - CHECK ili proverku cherez trigger. - - 4.9) Kak mne opredelit', chto znachenie polya v kakom-libo zaprose ravno - NULL? Kak mne soedinit' vozmozhnye NULL? Mogu ya sortirovat' polya NULL ili - net? - - Vy prosto sravnivaete znachenie s IS NULL i IS NOT NULL, kak zdes': - SELECT * - FROM tab - WHERE col IS NULL; - - CHtoby soedinit' s vozmozhnymi znacheniyami NULL, ispol'zujte - COALESCE() kak zdes': - SELECT COALESCE(col1, '') || COALESCE(col2, '') - FROM tab - - CHtoby otsortirovat' dannye po znacheniyu ispol'zujte modifikatory IS - NULL i IS NOT NULL v vyrazhenii ORDER BY. Kogda oni budut generirovat' - znacheniya istina, to pri sortirovke oni budut vyshe, chem znacheniya - lozh', tak chto zapisi s NULL budut v otsortirovannom spiske sverhu: - SELECT * - FROM tab - ORDER BY (col IS NOT NULL); - - 4.10) Kakovy otlichiya mezhdu raznymi simvol'nymi tipami? - - Tip Vnutrennee imya Zamechaniya - VARCHAR(n) varchar razmer zadaet maksimal'nuyu dlinu, net zapolneniya - CHAR(n) bpchar zapolnyaetsya pustotoj do fiksirovannoj dliny - TEXT text net zadavaemogo verhnego ogranicheniya ili dliny - BYTEA bytea massiv bajt peremennoj dliny (mozhno ispol'zovat' - null-bajt bez opaski) - "char" char odin simvol - - Vnutrennee imya vy mozhete uvidet', kogda smotrite sistemnye katalogi - i v nekotoryh soobscheniyah ob oshibkah. - - Pervye chetyre tipa yavlyayutsya "varlena" tipami (t.e., pervye - chetyre bajta na diske yavlyayutsya dlinnoj, za kotoroj sleduyut - dannye). Takim obrazom, fakticheski ispol'zuemoe prostranstvo bol'she, - chem oboznachennyj razmer. Odnako, dlinnye znacheniya takzhe - szhimayutsya, tak chto zanimaemoe diskovoe prostranstvo mozhet takzhe - 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 d1c886d2a91..00000000000 --- a/doc/FAQ_turkish +++ /dev/null @@ -1,1192 +0,0 @@ - - PostgreSQL iin Ska Sorulan Sorular (SSS) - - Son gncelleme : 15 Kasm 2004 Pazartesi - 15:03:23 - - Current maintainer: Bruce Momjian (pgman@candle.pha.pa.us) - - evirenler : Devrim Gndz (devrim@tdmsoft.com) - Nicolai Tufar (ntufar@tdmsoft.com) - Volkan YAZICI (volkany@phreaker.net) - - Bu belgenin en gncel hali, - http://www.PostgreSQL.org/docs/faqs/FAQ_turkish.html ve - http://www.gunduz.org/seminer/pg/FAQ_turkish.html adreslerinde - grlebilir. - - Platforma zel sorularnz, http://www.PostgreSQL.org/docs/index.html - adresinde yantlanr. - _________________________________________________________________ - - Genel Sorular - - 1.1) PostgreSQL nedir? Nasl okunur? - 1.2) PostgreSQL'in haklar nedir? - 1.3) PostgreSQL, hangi Unix platformlarnda alr? - 1.4) Hangi Unix olmayan uyarlamalar bulunmaktadr? - 1.5) PostgreSQL'i nereden indirebilirim? - 1.6) Destei nereden alabilirim? - 1.7) En son srm nedir? - 1.8) Hangi belgelere ulaabilirim? - 1.9) Bilinen hatalar ya da eksik zelliklere nereden ulasabilirim? - 1.10) Nasl SQL renebilirim? - 1.11) PostgreSQL 2000 ylna uyumlu mudur? - 1.12) Gelitirme takmna nasl katlabilirim?? - 1.13) Bir hata raporunu nasl gnderebilirim? - 1.14) PostgreSQL, dier VTYS(DBMS) lerle nasl karlatrlabilir? - 1.15) PostgreSQL'e maddi adan nasl destek olabilirim? - - Kullanc/istemci Sorular - - 2.1) PostgreSQL iin ODBC srcleri var m? - 2.2) PostgreSQL'i web sayfalarnda kullanabilmek iin hangi aralar - bulunmaktadr? - 2.3) PostgreSQL'in grafik kullanc arabirimi var mdr? - 2.4) PostgreSQL ile iletiimi kurabilmek iin hangi dilleri - kullanabilirim? - - Ynetimsel Sorular - - 3.1) PostgreSQL'i /usr/local/pgsql dizininden baka dizinlere nasl - kurabilirim? - 3.2) Postmaster' balattmda Bad System Call ya da core dumped - mesaj alyorum. Neden? - 3.3) Postmaster' balattmda, IpcMemoryCreate hatas alyorum. - Neden? - 3.4) Postmaster', balattmda, IpcSemaphoreCreate hatas alyorum. - Neden? - 3.5) Dier bilgisayarlarn benim PostgreSQL veritaban sunucuma - balantlarn nasl kontrol edebilirim? - 3.6) Veritaban motorunu daha iyi baarm icin nasl ayarlayabilirim? - 3.7) Hangi hata ayklama zellikleri bulunmaktadr? - 3.8) Balanmaya alrken, neden "Sorry, too many clients" hatasn - alyorum. Neden? - 3.9) pgsql_tmpdizinin iindeki dosyalar nelerdir? - 3.10) PostgreSQL srmlerini ykseltmek iin neden bir dump/reload - ilemi gerekletirmek zorundaym? - 3.11) Nasl bir donanm kullanmalym?br> - - letimsel Sorular - - 4.1) Binary cursor ve normal cursor arasndaki fark nedr? - 4.2) Sorgunun sadece ilk birka satrn nasl SELECT edebilirim? - 4.3) psql'in iinde grdgm tablolarn ya da dier eylerin listesini - nasl alabilirim? - 4.4) Bir tablodan bir kolonu nasl kaldrabilirim? - 4.5) Bir satr, tablo ve veritaban iin en fazla byklk nedir? - 4.6) Tipik bir metin dosyasndaki veriyi saklamak iin ne kadar disk - alan gereklidir? - 4.7) Veritabannda hangi tablo ya da index'lerin tanmlandn nasl - grebilirim? - 4.8) Sorgularm cok yava, ya da index'lerimi kullanmyorlar. Neden? - 4.9) Query-optimizer'n sorgularm nasl deerlendirdiini, ileme - soktuunu nasl grebilirim? - 4.10) R-tree index nedir? - 4.11) Genetic Query Optimizer nedir? - 4.12) Dzenli ifade (Regular Expression) aramalarn ve byk/kk - harfe duyarsz aramalar nasl yapabilirim? Bu byk/kk harfe - duyarl aramalar iin index'i nasl kullanabilirim? - 4.13) Bir sorguda, bir alann NULL olduunu nasl ortaya - karabilirim? - 4.14) esitli karakter tipleri arasndaki farklar nelerdir? - 4.15.1) Nasl serial/otomatik artan (auto-incrementing) bir alan - yaratabilirim? - 4.15.2) Serial giriinin deerini nasl alabilirim? - 4.15.3) currval() ve nextval() dier kullanclara sorun yaratmaz m? - 4.15.4) Neden sequence saylarn transaction ileminin iptalinden - sonra yeniden kullanlyor? Neden sequence/SERIAL kolonumdaki - saylarda atlamalar oluyor? - 4.16) OID nedir? TID nedir? - 4.17) PostgreSQL' de kullanlan baz terimlerin anlamlar nelerdir? - 4.18) Neden "ERROR: Memory exhausted in AllocSetAlloc()" hatasn - alyorum? - 4.19) Hangi PostgreSQL srmn alstrdm nasl grebilirim? - 4.20) Neden large-object ilemlerim, "invalid large obj descriptor" - hatasn veriyor? - 4.21) u andaki zaman ntanml deer olarak kabul eden kolonu nasl - yaratrm? - 4.22) Neden IN kullanan subquery'lerim ok yava? - 4.23) Outer join ilemini nasl yapabilirim? - 4.24) Ayn anda birden fazla veritabannda nasl ilem yapabilirim? - 4.25) Bir fonksiyondan nasl oklu satr ya da kolon dndrebilirim? - 4.26) Neden Pl/PgSQL fonksiyonlar iinden gvenli bir ekilde tablo - yaratma/kaldrma ilemlerini yapamyoruz? - 4.27) Hangi ifreleme seenekleri bulunmaktadr? - - PostgreSQL zelliklerini Geniletmek - - 5.1) Kullanc-tanml bir fonksiyon yazdm. psql'de altrdm - zaman neden core dump ediyor? - 5.2) PostgreSQL'e nasl yeni veri tipleri/fonksiyonlar ekleyebilirim? - 5.3) Bir tuple dndrmek iin bir C fonksiyonunu nasl yazarm? - 5.4) Bir kaynak dosyasnda deiiklik yaptm. Yeniden derlememe ramen - deiiklik geerli olmuyor. Neden? - _________________________________________________________________ - - Genel Sorular - - 1.1) PostgreSQL nedir? Nasl okunur? - - PostgreSQL, Post-Gres-Q-L. olarak okunur - - PostgreSQL, yeni-nesil VTYS aratrma prototipi olan POSTGRES - veritaban ynetim sisteminin gelitirilmesidir. POSTGRES'in zengin - veri tiplerini ve gl veri modelini tutarken, SQL'in gelitirilmi - alt kmesi olan PostQuel dilini kullanr. PostgreSQL cretsizdir ve - kaynak kodu ak datlr. - - PostgreSQL, PostgreSQL gelitirme listesine ye olan bir Internet - gelitirici takm tarafndan gelitirilir. u andaki koordinatr, - Marc G. Fournier (scrappy@PostgreSQL.org). (Bu takma nasl - katlacagnz renmek iin 1.6 numaral maddeyi okuyunuz.) Bu takm, - tm PostgreSQL geliiminden sorumludur. - - PostgreSQL 1.01 srmnn yazarlar Andrew Yu ve Jolly Chen idi. - Bunlarn dnda bir ka kisi de uyarlama, hata ayklama ve kodun - gelitirilmesi iin alsmt. PostgreSQL'in tredii orijinal - Postgres kodu, lisans, lisansst ve akademisyenler tarafndan, - Professor Michael Stonebraker (University of California, Berkeley) - koordinatrlgnde yazlmtr. - - Berkley'deki yazlmn ad Postgres idi. SQL uyumluluu 1995'te - eklenince, ad Postgres 95 oldu. 1996 ylnn sonlarnda ad - PostgreSQL olarak deitirildi. - - 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 ak-kod lisans olan BSD lisansdr. Kaynak - kodun nasl kullanlabileceine dair snrlamalar yoktur. Bu lisans - seviyoruz. Deitirme niyetimiz bulunmamaktadr. - - 1.3) PostgreSQL, hangi Unix platforlarnda alr? - - Genel olarak, modern bir Unix-uyumlu platform PostgreSQL'i - altracaktr. Ayrntl bilgi iin kurulum belgelerine - bakabilirsiniz. - - 1.4) Hangi Unix olmayan uyarlamalar bulunmaktadr? - - PostgreSQL 8.0 srm ile , PostgreSQL artk Win2000, WinXP ve Win2003 - gibi Microsoft Windows NT tabanl iletim sistemlerinde doal olarak - almaya balamtr. Paketlenmi bir kurulum program, - http://pgfoundry.org/projects/pginstaller. adresinden indirilebilir. - - Ayrca, http://forge.novell.com adresinde Novell Netware 6 portu - bulunmaktadr. - - 1.5) PostgreSQL'i nereden indirebilirim? - - PostgreSQL iin ana anonim ftp sitesi ftp://ftp.PostgreSQL.org/pub - adresidir. Yanslar iin, ana web sayfamza bakabilirsiniz. - - 1.6) Nereden destek alabilirim? - - Ana e-posta listesi : pgsql-general@PostgreSQL.org. PostgreSQL - konusundaki tartmalara aktr. ye olmak iin, aadaki satrlar - e-postanzn body ksmna (konu ksmna deil) yazp, - pgsql-general-request@PostgreSQL.org adresine gnderin: -subscribe -end - - Ayn zamanda, bir digest listesi bulunmaktadr. Bu listeye ye olmak - iin, pgsql-general-digest-request@PostgreSQL.org adresine, body - ksmnda -subscribe -end - - yazan bir e-posta atmanz yeterli olacaktr. - - Digest postalar, ana liste 30k civarnda e-postaya ulatnda yelere - gnderilmektedir. - - Bug'lar iin bir e-posta listesi bulunmaktadr. Bu listeye ye olmak - iin, pgsql-bugs-request@PostgreSQL.org adresine, body ksmnda -subscribe -end - - yazan bir e-posta atmanz yeterli olacaktr. - - Ayn zamanda, gelitiriciler iin tartma listesi bulunmaktadr. Bu - listeye ye olmak iin, pgsql-hackers-request@PostgreSQL.org adresine, - body ksmnda -subscribe -end - - yazan bir e-posta atmanz yeterli olacaktr. - - Bunun dndaki e-posta listelerine ve PostgreSQL hakknda bilgiye, - PostgreSQL WWW ana sayfasndan ulasabilirsiniz: - http://www.PostgreSQL.org - - Ayn zamanda, EFNet zerinde, #PostgreSQL adl bir IRC kanal - bulunmaktadr. Bunun iin, irc -c '#PostgreSQL' "$USER" - irc.phoenix.net Unix komutunu kullanabilirsiniz. - - Ticari destek veren firmalarn listesine - - http://www.postgresql.org/users-lounge/commercial-support.html - - adresinden ulabilirsiniz. - - 1.7) En son srm nedir? - - PostgreSQL'in son srm 7.4.6'dr. - - Her 6-8 ayda ana srm karlmas planlanmaktadr. - - 1.8) Hangi belgelere ulaabilirim? - - Datmn iinde, kitapklar, kitapk sayfalar ve baz kk - rnekler verilmektedir. /doc dizinine baknz. Ayrca, bu el - kitapklarn 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 - bulunmaktadr. PostgreSQL kitablarnn listesine, - http://www.ca.PostgreSQL.org/books/ adresinden ulaaiblirsiniz. - Ayrca, PostgreSQL konusundaki teknik makalelere de - http://techdocs.PostgreSQL.org/ adresinden ulaabilirsiniz. - - psql'in, \d ile baslayan veri tipler, operatorler, fonksiyonlar, - aggregate'ler, vb. ile ilgili gzel komutlar vardr. - - Web sitemiz daha fazla belgeyi iermektedir. - - 1.9) Bilinen hatalar ya da eksik zelliklere nereden ulaabilirim? - - PostgreSQL SQL-92 uyumluluu iindedir, standartlardan fazla da - zellikleri bulunmaktadr. Bilinen hatalar, eksik zellikler ve - gelecek ile ilgili planlar iin TODO listesine baknz. - - 1.10) Nasl SQL renebilirim? - - http:/www.PostgreSQL.org/docs/awbook.html adresindeki kitap SQL - gretecektir. http://www.commandprompt.com/ppbook adresinde de bir - baska PostgreSQL kitab bulunmaktadr. - - 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 gzel - belgeler bulunmaktadr. - - Bir bakas da, http://members.tripod.com/er4ebus/sql/index.htm - adresinde bulunan "Teach Yourself SQL in 21 Days, Second Edition" - kitabdr. - - Baz kullanclarmz da u kitab nermektedirler: "The Practical SQL - Handbook, Bowman, Judith S., et al.,Addison-Wesley". Bazlar ise "The - Complete Reference SQL, Groff et al., McGraw-Hill" kitabn - nermektedirler. - - 1.11) PostgreSQL 2000 ylna uyumlu mudur? - - Evet. - - 1.12) Gelitirme takmna nasl katlabilirim? - - ncelikle, en son kaynak kodunu indirin ve web sitemizdeki ya da - datmn iindeki PostgreSQL Developer belgesini okuyun. Ardndan, - pgsql-hackers ve pgsql-patches listelerine ye olun. nc olarak da, - pgsql-pacthes listesine yksek kalitede yamalar gnderin. - - PostgreSQL CVS arivine eriim izni olan, 10 kadar gelitirici - bulunmaktadr. Hepsi defalarca, dier kiilerin yaptndan ok daha - yksek-kaliteli yamalar gndermilerdir. Ayrca biz de bu - gelitiricilerin ekledikleri yamalarn yksek kalitede olduuna - gveniyoruz. - - 1.13) Bir hata raporunu nasl gnderebilirim? - - PostgreSQL BugTool sayfasna gidiniz. O sayfada bir bug bildirmek iin - neleri yapmanz gerektii anlatlmtr. - - Ayrca, ftp://ftp.PostgreSQL.org/pub ftp adresimizde, yeni bir - PostgreSQL srm ya da yamas olup olmadni kontrol ediniz. - - 1.14) PostgreSQL, diger DBMS'lerle nasl karlastrlabilir? - - Bir yazlmn gcn lmek iin eitli yollar vardr: Yazlmn - zellikleri, baarm, gvenilirlii, destei ve creti. - - zellikler: - - PostgreSQL mevcut byk ticari veritabanlarnn, transaction, - subselect, trigger, view, foreign key referential integrity ve - sophisticated locking gibi (user-defined types), rules, inheritance ve - lock cakmalarn drmek iin multi-version uyumluluk zellikleri - bulunmaktadr. - - Performans (Baarm): - - PostgreSQL, dier ticari ve ak kaynak kodlu veritabanlaryla yakn - baarm salar. Baz alardan daha hzldr, dier alardan da - yavatr. MySQL ya da daha zayf veritabanlar ile - karlatrldnda, INSERT/UPDATE ilemlerinde, transaction bazl - alstmz iin daha yavaz. MySQL, yukardaki "zellikler" - ksmnda belirtilenlerden hi birine sahip deildir. Biz, baarmmz - her srmde arttrsak da, esneklik ve gelimi zellikler iin - yaplanm durumdayz. PostgreSQL'i MySQL ile karlatran u web - sitesine bakabilirsiniz: http://openacs.org/why-not-mysql.html - - Gvenilirlik: - - DBMS'lerin gvenilir olmas gerketii, yoksa deerleri olmayacan - dnyoruz. ok iyi test edilmi, dengeli alsan minimum sayda hata - ieren kod sunmaya alyoruz. Her bir srm en az 1 aylk beta - testlerinden geirilmektedir. Srm gemiine bakarsanz, retime - hazr, dengeli ve kararl kodlar sunduumuzu grebilirsiniz. Bu - alanda, dier veritaban yazlmlarna stnlmz olduuna - inanmaktayz. - - Destek: - - E-posta listemiz, oluan herhangi bir sorunu zebilecek byk sayda - kullanc ve gelitirici grubunu ierir. Sorununuz iin, en az bir - ticari veritaban kadar rahat zm bulabilirsiniz. Gelistiricilere, - kullanc grubuna, belgelere ve kaynak koda direk olarak eriebilme, - PostgreSQL desteini, dier DBMS'lere gre daha nemli klar. - Gereksinimi olanlara, ticari destek verilebilir. (Destek iin 1.6 - blmne baknz.) - - Fiyat: - - Ticari ve ticari olmayan tm kullanmlarnz iin PostgreSQL - cretsizdir. Kodumuzu, yukarda belirtilen BSD-stili lisanstaki - snrlamalar hari, rnnzn iine ekleyebilirsiniz. - - 1.15) PostgreSQL'e maddi adan nasl destek olabilirim? - - PostgreSQL, 1996 ylndan beri 1. snf altyapya sahiptir. Bunun - iin, yllar boyu alp bu altyapy oluturup yneten Marc - Fournier'e teekkrler. - - Bir ak kaynak kodlu proje iin, kaliteli altyap ok nemlidir. Bu - altyap, projenin kesilmesini nler ve projenin ilerlemesini - hzlandrr. - - Tabii ki bu altyap ucuz deildir. lerin yrmesi iin eitli ylk - ve anlk harcamalarmz olmaktadr. Eer siz ya da irketinizin bu - abamza bata bulunabilecek paras varsa, ltfen - http://store.pgsql.com/ adresine gidiniz ve bata, hibede bulununuz. - - Web sayfasnn 'PostgreSQL Inc.' den bahsetmesine ramen, "katkda - bulunanlar" (contributors) maddesi sadece PostgreSQL projesini - desteklemek iindir ve belirli bir irketin para kayna deildir. - isterseniz, balant adresine bir ek gnderebilirsiniz. - _________________________________________________________________ - - Kullanc/stemci Sorular - - 2.1) PostgreSQL icin ODBC srcleri var m? - - iki tane ODBC srcs bulunmaktadr: PsqlODBC ve OpenLink ODBC. - - PsqlODBC'i - http://gborg.postgresql.org/project/psqlodbc/projdisplay.php - adresinden indirebilirsiniz. - - OpenLink ODBC http://www.openlinksw.com adresinden alnabilir.Bu - src, kendi standart ODBC istemci yazlm ile alstndan, - destekledikleri her platformda (Win, Mac, Unix, VMS) PostgreSQL ODBC - bulunmalidir. - - cretsiz srm olmakla beraber, ticari kalitede destek almak - isteyenlere satmak isteyeceklerdir. Sorularnz ltfen - postgres95@openlink.co.uk adresine gnderiniz. - - 2.2) PostgreSQL'i web sayfalarnda kullanabilmek iin hangi aralar - bulunmaktadr? - - http://www.webreview.com/ adresinde, arka planda veritaban alstran - Web sayfalar iin giri seviyesinde bilgi bulunmaktadr. - - Web ile btnleme iin, PHP () mkemmel bir arabirim sunar. - - Karmak sorunlar iin, ou kisi Perl arabirimini ve CGI.pm ya da - mod_perl kullanr. - - 2.3) PostgreSQL'in grafik kullanc arabirimi var mdr? - - eitli grafik arabirimlerimiz bulunmaktadr. Bunlarn arasnda, - PgAccess (http://www.pgaccess.org/), PgAdmin II - (http://www.pgadmin.org/, sadece Win32 iin), RHDB Admin - (http://sources.redhat.com/rhdb/) ve Rekall - (http://www.thekompany.com/products/rekall/) bulunmaktadr. Ayrca, - PostgreSQL iin web tabanl bir arabirim olan PHPPgAdmin - (http://phppgadmin.sourceforge.net/) bulunmaktadr. - - Daha ayrntl liste iin - http://techdocs.postgresql.org/guides/GUITools adresine - bakabilirsiniz. - - 2.4) PostgreSQL ile iletiimi kurabilmek iin hangi dilleri kullanabilirim? - - * C (libpq) - * Embedded C (ecpg) - * Java (jdbc) - * Python (PyGreSQL) - * TCL (libpgtcl) - - Dierleri iin, http://gborg.postgresql.org adresindeki - Drivers/Interfaces blmne bakabilirsiniz. - _________________________________________________________________ - - Ynetimsel Sorular - - 3.1) PostgreSQL'i, /usr/local/pgsql dizininden baka dizinlere nasl - kurabilirim? - - configure betiini alstrrken, --prefix seeneini veriniz. - - 3.2) postmaster'i baslattgmda, a Bad System Call ya da core dumped mesaj - alyorum. Neden? - - Bunun birok nedeni olabilir. Ancak ilk kontrol edilmesi gereken sey, - ekirdeginize System V uzantlarnn kurulu olup olmadgn kontrol - etmek olabilir. PostgreSQL shared memory ve semaphores iin ekirdek - destegine gereksinim duyar. - - 3.3) postmaster'i balattmda, pcMemoryCreate hatas alyorum. Neden? - - Ya ekirdeinizde shared memory desteiniz dzgnce - yaplandrlmamtr, ya da ekirdeinizdeki mevcut shared memory - miktarn bytmeniz gerekecektir. Gereksinim duyacanz miktar, - mimarinize ve postmaster iin ayarladgnz tampon ile backend ilemi - saysna baldr. Tm sistemler iin, tamponlar ve ilemlerde - ntanml saylarla, ~ 1MB kadar yere gereksinmeniz olacaktr. - PostgreSQL 7.3.2 Sistem Yneticileri Rehberi'ne, shared memory ve - semaphorelar hakkndaki ayrntl bilgi iin bakabilirsiniz. - - 3.4) postmaster' balattmda, pcSemaphoreCreate hatas alyorum. Neden? - - Eer hata, "pcSemaphoreCreate: semget failed (No space left on - device)" ise, ekirdeiniz yeterli semaphore ile yaplandrlmam - demektir. Postgres, her bir potansiyel backend iin bir semaphore - gereksinimi duyar. Geici bir zm, postmaster backend ilemleri - iin daha az miktarda snrla balatmak olabilir. -N'i varsaylan - deer olan 32'den kk bir deerle balatnz. Daha kalc bir zm, - ekirdeinizin SEMMNS ve SEMMNI parametrelerini ykseltmek olacaktr. - - almayan semaphore'lar ar veritaban ilemlerinde kme - yaratabilirler. - - Eer hata mesajnz baka bir ey ise, ekirdeinizde semaphore - desteini yaplandrmam olabilirsiniz. Shared memory ve - semaphore'lar hakkndaki daha ayrntl bilgi iin PostgreSQL 7.3.2 - Sistem Yneticileri Rehberi'ne bakabilirsiniz. - - 3.5) Diger bilgisayarlarn benim PostgreSQL veritaban sunucuma - balantlarn nasl kontrol edebilirim? - - n tanml olarak, PostgreSQL sadece yerel makineden Unix domain - sockets kullanarak balanlmasna izin verir. Diger makineler, - postmaster'a -i etiketini geirmezseniz ve $PGDATA/pg_hba.conf - dosyasn dzenleyerek host-based authentication'a olanak vermezseniz, - balant yapamayacaklardr. - - 3.6) Veritabani motorunu daha iyi baarm iin nasl ayarlayabilirim? - - Index'ler sorgular hzlandrabilir. EXPLAIN komutu, PostgreSQL'in - sorgunuzu nasl yorumladn ve hangi index'leri kullandn - grmenize izin verir. - - Eer cok fazla INSERT ilemi yapyorsanz, bunlar byk bir toplu - ilem dosyaskullanp COPY komutu ile veritabanna girmeyi deneyiniz. - Bu, tekil INSERT'lerden daha hzldr. kinci olarak, BEGIN - WORK/COMMIT transaction blou iinde olmayan ifadeler kendi - transaction'larndaym gibi dnlr. oklu ifadeleri tek bir - transaction blou iinde yapabilirsiniz. Bu, transaction overhead'ini - drecektir. Tek bir transaction blou iinde birden ok ifadeyi - altrmay deneyebilirsiniz. Bu da ayn ekilde, transaction - overhead'ini drr. - - eitli ayarlama seenekleri mevcuttur. fsync() ilemini, postmaster' - -o -F seenei ile balatarak devre d brakabilirsiniz. Bu ilem, - fsync()'lerin her transactiondan sonra diski flush etmesini - engelleyecektir. - - Ayn zamanda, postmaster'i -B seenei ile balatp, backend ilemleri - tarafndan kullanlan shared memory buffers saylarn - arttrabilirsiniz. Eer bu parametreyi ok yksek tutarsanz, - ekirdeinizin shared memory blgesindeki limiti ama olaslnz - yznden postmaster balayamayabilir. Her bir tampon (buffer) 8K'dr. - ntanml say ise 64 tampondur. - - Ayn ekilde, backend'in -S seeneini geici sralamalar iin backend - sreleri tarafndan kullanlacak hafzay arttrmak amacyla - kullanabilirsiniz. -S seenei kilobayt cinsinden deer alr ve n - tanml deeri 512'dir (512 K) - - Tablolardaki veriyi bir index'e elemek amacyla gruplama iin CLUSTER - komutunu kullanabilirsiniz. Ayrntl bilgi iin CLUSTER komutunun - yardm sayfasna bakabilirsiniz. - - 3.7) Hangi hata ayklama zellikleri bulunmaktadr? - - PostgreSQL, hata ayklama amacyla kullanlabilecek durum bilgisi - rapor eden eitli zeliklere sahiptir. - - ncelikle, configure betiini --enable-cassert seeneiyle - altrrsanz, bir ok assert() backend calmasn gzlemler ve - beklenmeyen bir durumda program durdurur. - - Postmaster ve postgres eitli hata ayklama seeneklerine sahiptir. - ncelikle, postmaster' balattnzda, standart kty ve hatalar - bir log dosyasna ynlendirdiinize emin olun: -cd /usr/local/pgsql -./bin/postmaster >server.log 2>&1 & - - Bu ilem PostgreSQL ana dizinine server.log dosyas yerletirecektir. - Bu dosya sunucunun yaad sorunlar ya da hatalar hakknda yararl - bilgiler ierir. -d seenei, hata ayklama seviyesini belirten bir - rakam ile kullanlr. Yksek hata ayklama seviyelerinin byk log - dosyalar oluturacan unutmaynz. - - Eer postmaster almyorsa, postgres backend'ini komut satrndan - altrabilir ve SQL ifadenizi direk olarak yazabilirsiniz. Bu sadece - hata ayklama amacyla nerilir. Burada, noktal virgln deil de - yeni bir satrn sorguyu sonlandrdn unutmaynz. Eer hata - ayklama sembolleri ile derlediyseniz, ne olduunu grmek iin bir - hata ayklayc kullanabilirsiniz. backend postmaster'dan - balatlmadndan, edeer bir ortamda almamaktadr ve - locking/backend etkileim sorunlar artabilir. - - Eer postmaster alyorsa, bir pencerede psql'i altrn ve psql - tarafndan kullanlan postgres srecinin sre numarasn (PID) bulun. - Postgres sreci ile ilikilendirmek iin bir hata ayklarc kullann. - Sorgular psql aracl ile altrabilirsiniz. Eer postgres - balangcnda hata ayklamak istiyorsanz, PGOPTIONS="-W n" seeneini - ayarlayabilir ve psql'i balatabilirsiniz. Bu ilem, balangcn n - saniye kadar gecikmesini salayacaktr; bylece hata ayklaycy - srece ilikilendirdikten sonra balang srecinin devam etmesini - salayabilirsiniz. - - postgres program hata ayklama ve baarm lmleri iin -s, -A ve -t - seeneklerine sahiptir. - - 3.8) Balanmaya alrken, neden "Sorry, too many clients" hatasn - alyorum? - - Postmaster'n ezamanl olarak balatabilecei backend sreleri - snrlarn arttrmanz gerekmektedir. - - n tanml deer 32 sretir. Bunu, postmaster' uygun -N deeri ile - ya da postgresql.conf dosyasn dzenleyerek yeniden balatmakla - arttrabilirsiniz. - - Eer -N deerini 32'den byk yapacaksanz, ayn zamanda -B deerini - de deitirmeniz gerektiini unutmayn. -B, -N'nin en az 2 kat kadar - olmaldr; daha iyi baarm iin bu sayy daha da arttrmalsnz. - Yksek saydaki backend sreleri iin, eitli ekirdek yaplandrma - parametrelerini arttrmanz gerekecektir. Yaplmas gerekenler, - SHMMAX, SEMMNS, SEMMNI, NPROC, MAXUPRC ve alabilecek dosyalarn - maksimum says olan NFILE ve NINODE deerlerini kartrmaktr. Bunun - nedeni, PostgreSQL'in izin verilen backend srelerinin says - zerinde bir snr olmasdr. Bylelikle sistem kaynaklarnn dna - klmayacaktr. - - PostgreSQL'in 6.5 srmne kadar, en fazla backend says 64 idi ve - bunu deitirmek iin include/storage/sinvaladt.h dosyas iindeki - MaxBAckendid sabitini deitirdek sonra yazlm yeniden derlemek - gerekiyordu. - - 3.9) pgsql_tmp dizinin iindeki dosyalar nelerdir? - - Sorgu alstrc (query executer) tarafndan yaratlan geici - dosyalardr. rnegin, bir sralama ORDER BY ile yaplacaksa ve - sralama backend'in -s parametresinin izin verdiinden daha fazla - alana gereksinim duyuyorsa, ekstra veriyi tutmak iin geici dosyalar - yaratlr. - - Geici dosyalar, eer sralama srasnda backend gmezse otomatik - olarak silinecektir. Eer alan durumda bir backend'iniz yoksa, - pg_tempNNN.NN dosyalarn silmeniz gvenlidir. - - 3.10) PostgreSQL srmlerini ykseltmek iin neden bir dump/reload ilemi - gerekletirmek zorundaym? - - PostgreSQL takm ara srmlerde sadece kk deiiklikler - yapmaktadr; bu yzden 7.2 srmnden 7.2.1'e ykseltmek dump/restore - ilemi gerekmemektedir. Ancak, esas srmlerde (rnek: 7.2'den 7.3'e) - ounlukla sistem tablolarnn ve veri dosyalarnn i yaps - deitirilir. Bu deiiklikler ounlukla karmaktr; dolaysyla - veri dosyalarnn geriye dnk uyumluluu ilemlerini yapmyoruz. Dump - ilemi, veriyi genel biimde alacandan yeniden ykleme esnasnda - veri, yeni i biime uygun ekilde yerletirilecektir. - - Disk biiminin deimedii srmlerde, pg_upgrade betii gncellemenin - bir dump/restore gerektirmeden yaplmasn salayacaktr. pg_upgrade - betiinin o srm iin bulunup bulunmadn srm notlar iinde - bulabilirsiniz. - - 3.11) Nasl bir donanm kullanmalym? - - PC donanm tamamen uyumlu olduu iin, insanlar tm PC donanmlarnn - ayn kalitede olduunu dnrler. Oysa byle deildir. ECC RAM, SCSI - ve kaliteli anakartlar daha ucuz donanmlara gre daha ok - gvenilirlerdir ve baarmlar daha yksektir. PostgreSQL hemen hemen - tm donanmda alabilmektedir, ancak gvenilirlik ve baarm nemli - ise donanm seeneklerini ok iyi aratrmak gereklidir. E-posta - listelerimi donanmlarla ilgili sorular ve de ticaret iin - kullanlabilir. - _________________________________________________________________ - - letimsel Sorular - - 4.1) Binary cursor ve normal cursor arasndaki fark nedir? - - DECLARE yardm sayfasna baknz. - - 4.2) Sorgunun sadece ilk birka satrn nasl SELECT edebilirim? - - FETCH yardm sayfasna baknz, ya da SELECT ... LIMIT ... kullannz. - - lk birka satr almak isteseniz bile, tm sorgu deerlendirilmek - durumunda kalnabilir. ORDER BY ieren bir sorgu dnn. Eer ORDER - BY ie eleen bir index varsa, PostgreSQL istenen ilk birka satr - ileyebilir, ya da tm sorgu istenen satrlar retilene kadar - ilenebilir. - - 4.3) psql'in iinde grdgm tablolarn ya da dier eylerin listesini - nasl alabilirim? - - pgsql/src/bin/psql/describe.c iindeki psql kaynak kodunu - okuyabilirsiniz. Bu kod, psql'in \ ile balayan komutlarnn ktsn - olusturan SQL komutlarn ierir. Ayn zamanda, psql'i -E seenei ile - balatp, verdiiniz komutlar altrmak iin yapt sorgularn - ktlarn grebilirsiniz. - - 4.4) Bir tablodan bir kolonu nasl kaldrabilirim? - - Bu zellik (ALTER TABLE DROP COLUMN) 7.3 srm ile gelmitir. Eski - srmlerde aadakileri uygulamalsnz: -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 satr, tablo ve veritaban iin en fazla byklk nedir? - - Snrlar: - - Veritaban iin en fazla byklk nedir? - Snrsz (32 TB'lk veritaban bulunmaktadr) - Bir tablo iin en fazla byklk nedir? - 32 TB - Bir satr iin en fazla byklk nedir? - 1.6 TB - Bir alan iin en fazla byklk nedir? - 1 GB - Tabloda en fazla satr says katr? - Snrsz - Bir tabloda olabilecek en fazla kolon says katr? - Kolon tiplerine bal olarak 250-1600 - Bir tabloda olabilecek en fazla index says katr? - Snrsz - - Tabii ki bunlar aslnda snrsz degildir. Burada belirtilen snrlar, - fiziksel snrlarn haricindeki snrlardr. Bo disk alan, - hafza/takas alan na bal snrlamalar vardr. Baarm, snr - deerlere yaklatka, ya da deerler ok byk olduunda debilir. - - Bir tablo iin byklk snr olan 32 TB, iletim sisteminin byk - dosya destei olup olmamasndan bamszdr. Byk tablolar, 1 GB'lik - dosyalarda sakland iin, dosya sistemi snrlarnin bir nemi - yoktur. - - Tablo ve kolon says byklkleri, n tanml blok bykl 32k ya - karlarak arttrlabilir. - - 4.6) Tipik bir metin dosyasndaki veriyi saklamak iin ne kadar disk alan - gereklidir? - - Bir PostgreSQL veritaban, veriyi "flat" metin dosyasnda saklamak - iin gereken alann 5 kat fazla disk alanna gereksinim duyabilir. - - Her satrnda bir tamsay ve metin (text) ieren, 100.000 satrlk bir - dosya dnn. Her satrn ortalama 20 byte olduunu farzedelim. Metin - dosyas 2.8 MB olacaktr. Bu veriyi tutan PostgreSQL veritaban - yaklak 6.4 MB yer kaplayacaktr. - 36 byte: Her bir satr bal (yaklak) -+ 24 byte: Bir tamsay (int) alan ve bir metin (text) alan -+ 4 byte: Sayfada tuple a pointer ----------------------------------------- - 64 byte -> kayt bana - - PostgreSQL'de veri sayfas (data page) bykl 8192 byte (8k)dr, - dolaysyla: -8192 byte -> page bana -------------------------- = Her bir veritaban page' bana 128 satr (yaklak) - Satr bana 64 byte - -100000 veri satr --------------------- = 782 veritaban sayfas - 128 satr - - 782 veritaban sayfas * sayfa bana 8192 byte = 6,406,144 bytes (6.4 - MB) - - Index'ler ok fazla yere gereksinim duymazlar, ama index'lenmi veriyi - tutacaklarndan byk olabilirler. - - NULL deerler bitmapler iinde tutulur; dolaysyla ok az yer - kaplarlar. - - 4.7) Veritabannda hangi tablo ya da index'lerin tanmlandn nasl - grebilirim? - - psql, bu tr bilgileri gstermek iin, \ ile balayan bir ok komut - sunmaktadr. \? komutu ile bu komutlar grebilirsiniz. Ayrca, - bunlar aklayan ve pg_ ile balayan ok sayda sistem tablosu - bulunmaktadr. Ayn zamanda, psql -l ile tm veritabanlarn - listeyelebirsiniz. - - Ayrca, pgsql/src/tutorial/syscat.source kodunu inceleyebilirsiniz. Bu - dosya, veritaban sistem dosyalarndan bilgiyi almak iin gereksinim - duyulan bir ok SELECT'leri gsterir. - - 4.8) Sorgularm cok yava, ya da index'lerimi kullanmyorlar. Neden? - - Indexler her sorgu tarafndan otomatik olarak kullanlmazlar. Indexler - eer bir tablonun bykl minimum bir byklkten fazla ise ve sorgu - tablodaki satrlarn sadece kk bir yzdesini seiyorsa kullanlr. - Bunun nedeni, index eriiminin neden olduu raslansal disk eriimi nin - diskin ya da tablonun sral okunmasndan daha yavas olabilmesidir. - - Bir index'in kullanlp kullanlmayacan belirlemek iin, PostgreSQL - tablo hakkndaki istatistiklere gereksinmesi vardr. Bu istatistikler, - VACUUM ANALYZE kullanlarak toplanrlar. Optimizer, istatistikleri - kullanarak, tabloda ka satr olduunu ve bilir ve indexin kullanlp - kullanlmayacana daha iyi karar verir. Istatistikler, ayn zamanda - en uygun join srasn ve yntemini belirlemekte ok nemlidir. - statistik toplanmas, tablo ierikleri deitike periyodik olarak - yaplmaldr. - - Indexler normalde ORDER BY sorgular ya da join ilemlerini - gerekletirmek iin kullanlmazlar. Ak bir sralamay takip eden - sral bir arama (sequential scan), byk bir tabloda index aramas - yapmaktan genelde daha hzldr. - Ancak, ORDER BY ile birlemi LIMIT genellikle bir index - kullanacaktr; nk tablonun sadece belirli bir miktar - dndrlecektir. Aslnda, MAX() ve MIN() fonksiyonlarnn index - kullanmamalarndan dolay, bu gibi deerleri ORDER BY ve LIMIT - kullanarak da almak olasdr: - SELECT col - FROM tab - ORDER BY col [ DESC ] - LIMIT 1; - - Eer optimizer'n sral arama yapmasnn yanl olduuna - inanyorsanz, SET enable_seqscan TO 'off' kullann ve index kullanan - aramalarn hala daha hzl olup olmadn grn. - - LIKE ya da ~ gibi operatrler kullanyorsanz, index'ler sadece - aadaki koullarda kullanlabilir: - * Arama dizininin ba, dizinin ba ile balanmaldr. Yani, - + LIKE sorgular % ile balamamaldr. - + Dzenli ifade sorgular ^ ie balamamaldr. - * Arama metni bir karakter snf ile balayamaz. rnek: [a-e] - * ILIKE ve ~* gibi byk/kk harfe duyarsz aramalar index'lerden - yararlanmazlar. Onun yerine, blm 4.12'de anlatlan fonksiyonel - index'leri kullanabilirsiniz. - * initdb srasnda ntanml C locale'i kullanlmaldr. - - 4.9) query-optimizer'n sorgularm nasl deerlendirdiini, ileme - soktuunu nasl grebilirim? - - EXPLAIN yardm sayfasna baknz. - - 4.10) R-tree index nedir? - - R-tree index, uzaysal (spatial) verileri indexlemek iin kullanlr. - Bir hash index, dizi aramalarnda (range search) kullanlamaz. B-tree - index dizi aramalarnda sadece tek boyutlu almaktadr. R-tree, ok - boyutlu veriyi destekler. rnein, eer bir R-tree index point veri - tipi zerinde ina edililebilirse, sistem "select all points within a - bounding rectangle" gibi sorgulara daha verimli yantlar verecektir. - - Orijinal R-tree tasarmn aklayan 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" kitabnda - bulabilirsiniz. - - Gml R-tree indexleri poligon ve boxlar kullanabilir. Teorik - olarak, R-tree indexlerin zelliklerini geniletmek bir miktar aba - gerektirir ve bunun nasl yaplacana dair bir belgemiz henz - bulunmamaktadr. - - 4.11) Genetic Query Optimizer nedir? - - GEQO modl, Genetic Algorithm(GA) kullanlarak tablolar - birletirildiinde sorgu optimizasyonunu hzlandrr. - - 4.12) Dzenli ifade (Regular Expression) aramalarn ve byk/kk harfe - duyarsz aramalar nasl yapabilirim? Bu byk(kk harfe duyarl aramalar - iin index'i nasl kullanabilirim? - - ~ operatr dzenli ifade elemesi ve ~* byk/kk harfe duyarsz - dzenli ifade elemesi yapar. Byk/kk harfe duyarl olan LIKE'n - byk/kk harfe duyarsz olan biimi ILIKE'tr ve PostgreSQL 7.1 - srm ile birlikte gelmitir. - - Byk-kk harfe duyarsz eitlik karlatrmalar aadaki gibi - ifade edilir: -SELECT * -FROM tab -WHERE lower(col) = 'abc' - - Bu standart bir index yaratmayacaktr. Ancak eer fonksiyonel bir - index yaratrsanz; o kullanlacaktr: -CREATE INDEX tabindex on tab (lower(col)); - - 4.13) Bir sorguda, bir alanin "NULL" olduunu nasl ortaya karabilirim? - - Kolonu, IS NULL ve IS NOT NULL ile test edebilirsiniz. - - 4.14) esitli karakter tipleri arasndaki farklar nelerdir? - -Veri Tipi Ad Not --------------------------------------------------- -VARCHAR(n) varchar boyut en byk uzunluu verir; sadece verilen kadar veri tutulur. -CHAR(n) bpchar belirtilen uzunlua kadar sonuna boluk eklenir. -TEXT text uzunlukta herhangi bir st snr yoktur. -BYTEA bytea variable-length byte array (null-byte safe) -"char" char bir karakter - - adlar (internal name) sistem kataloglarn ve baz hata - mesajlarn incelerken greceksiniz. - - lk drt veri tipi "varlena" tipidir (yani, diskteki ilk 4 bayt - uzunluktur; devam da veridir.) Dolaysyla, kullanlan gerek alan, - belirtilen alandan biraz daha byktr. Ancak, bu veri tipleri, - sktrlmaya tabi tutulabilir; dolaysyla disk alan beklenilenden - kk olabilir. VARCHAR(n) bykl artabilen ama en byk uzunluu - snrl olan verileri saklamak iin en uygun yntemdir. TEXT, 1 GB - bykle kadar olan verileri tutmak iin kullanlr. - - CHAR(n), ayn uzunluktaki dizilerin saklanmas iin kullanmr. - CHAR(n) belirtilen uzunlua kadar boluk ile doldurur; ancak - VARCHAR(n) sadece verilen karakterleri saklar. BYTEA binary veri - saklamak iindir; ayrca "NULL" bayt ieren deerleri de saklar. - Burada anlatlan veri tipi de benzer baarm karakteristiklere - sahiptir. - - 4.15.1) Nasl serial/otomatik artan (auto-incrementing) bir alan - yaratabilirim? - - PostgreSQL'de SERIAL veri tipi vardr. Bu veri tipi bir sequence ve - kolon zerinde bir index yaratr. - - rnek, aadaki 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 hakknda daha fazla bilgi iin create_sequence yardm - sayfasna bakabilirsiniz. Her satrn OID alann tekil bir say - olarak alabilirsiniz. Ancak, veritabannzn dump'n alp yeniden - yklerseniz, OID deerlerini koruyabilmek iin pg_dump'n -o - parametresini ya da "COPY WITH OIDS" seeneini kullanmanz - gerekecektir. - - 4.15.2) SERIAL giriinin degerini nasl alabilirim? - - Bir yaklam, sequence nesnesindeki SERIAL deerini, veriyi girmeden - nce nextval() ile alp, aldnz deeri 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')"); - - Dier sorgular iin new_id'de yeni deerin saklanmas gerekir. - Otomatik olarak yaratlan SEQUENE nesnesinin ad, <tablo ad>_<serial - kolonu ad>_seq eklinde olacaktr (< > iaretleri olmadan). - - Alternatif olarak, atanm SERIAL deerini, deer 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 tanml deeri bulmak iin INSERT ifadesinden dnen OID - deerini kullanabilirsiniz; ancak bu en az tanabilir zm - olacaktr. Perl'de, Edmund Mergl'in DBD:Pg mdl ile birlikte DBI - kullanarak, OID deeri $sth->execute() altrldktan sonra - $sth->(pg_oid_status) ile alnabilir. - - 4.15.3) currval() ve nextval() dier kullanclara sorun yaratmaz m? - - Hayr. curval(), tm kullanclar deil, backend tarafndan atanan - geerli deeri dndrr. - - 4.15.4) Neden sequence saylar transaction ileminin iptalinden sonra - yeniden kullanlyor? Neden sequence/SERIAL kolonumdaki saylarda atlamalar - oluyor? - - Uyumluluu arttrmak iin, sequence deerleri alan transaction'lara - gerektii ekilde aktarlr ve transaction bitene kadar o deer - kilitlenmez. Bu, iptal edilen transaction ilemleri nedeniyle - boluklara neden olur. - - 4.16) OID nedir? TID nedir? - - OIDler, tekil satr numaralarna PostgreSQL'in yantdr. - PostgreSQL'de yaratlan her say, tekil bir OID alr. initdb ilemi - srasnda yaratlan tm OID'ler 16384'ten kktr - (backend/access/transam.h). Kullanclar tarafndan yaratlan tm - OID'ler bu sayya eit ya da bu saydan byktr. Varsaylan durumda, - tm bu OIDler sadece bir tablo ya da veritabannda deil, tm - PostgreSQL kurulumunda tekildir. - - PostgreSQL OIDleri, tablolar arasnda satrlar ilikilendirmek iin - kendi i tablolarnda kullanr. Bu OIDler belirli kullanc - satrlarn belirtmek iin kullanabilir ve join ilemlerinde - kullanlr. OID deerlerini saklamak iin OID kolon tipini kullanmanz - nerinir. Daha hzl bir eriim iin, OID alannda bir index - yaratabilirsiniz. - - OID'ler yeni satrlara, tm veritabanlar tarafnda kullanlan ortak - bir alandan atanrlar. Eer OID'i baka bir deere eitlemek - isterseniz ya da tablonun bir kopyasn orijinal OIDler ile karmak - isterseniz, bu mmkndr: - 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 saklanrlar ve 4 milyarda overflow - olacaktr. Kimse bu sayya ulatna dair bir bilgi iletmedi ve bu - snr kimse bu snra ulamadan kaldracaz. - - TIDler, belirli fiziksel satrlar block ve offset deerleri ile - belirtmekte kullanlr. TIDler, satrlar deitiinde ya da yeniden - yklendiinde deiirler. Index girdileri tarafndan fiziksel - satrlar gstermek iin kullanlrlar. - - 4.17) PostgreSQL'de kullanlan baz terimlerin anlamlar nelerdir? - - Kaynak kodun bir ksm ve eski belgeler, daha geni kullanm alan - olan terimleri kullanrlar. Bunlarn bazlar: - * 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()" hatasn alyorum? - - Sisteminizde sanal belleinizi tketmi olabilirsiniz, ya da - ekirdeiniz belli kaynaklar icin dk bir snra sahip olabilir. - postmaster' balatmadan nce aadakileri deneyebilirsiniz: -ulimit -d 262144 -limit datasize 256m - - Kabuunuza bal olarak, bunlardan sadece biri olumlu sonu - verecektir, ama bu ilem veri segment snrnz arttracak, ve belki - de sorgunuzun tamamlanmasn salayacaktr. Bu komut, varolan ileme - (current process) ve komut altrldktan sonraki tm alt ilemlere - uygulanr. Eer SQL istemcinizle, backend'in ok fazla veri dndrmesi - nedeniyle bir sorun yayorsanz, bunu istemciyi balatmadan nce - deneyiniz. - - 4.19) Hangi PostgreSQL srmn altrdm nasl grebilirim? - - psql arabiriminde, select version(); yaznz. - - 4.20) Neden large-object ilemlerim, "invalid large obj descriptor" - hatasn veriyor? - - Large object ilemlerinizin ularna, yani lo_open ... lo_close - komutlarnn evresine, BEGIN WORK ve COMMIT koymanz gerekmektedir; - - u anda, PostgreSQL kurallar large objectleri transaction commit - edildiinde kapatarak uygulamaktadr. Dolaysyla handle ile yaplacak - ilk ey invalid large obj descriptor hatas ile - sonulanacaktr.Dolaysyla alan kodunuz eer transaction - kullanmazsanz hata mesajlar retecektir. - - Eer ODBC gibi bir istemci arabirimi kullanyorsanz, auto-commit'i - kapatmanz gerekebilir. - - 4.21) u andaki zaman ntanml deer 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 srmnden nce, subqueryler. Eer subquery sadece birka satr ve - outer query bol sayda satr dndryorsa, IN en hzlsdr. Sorgular - hzlandrmak iin IN yerine EXISTS kullann: -SELECT * - FROM tab - WHERE col1 IN (SELECT col2 FROM TAB2) - - sorgusunu, aadaki ile deitirin: -SELECT * - FROM tab - WHERE EXISTS (SELECT col2 FROM TAB2 WHERE col1 = col2) - - Bu ilemin hzl olmas iin, subcol'un indexlenmi bir kolon olmas - gerekmektedir. - - 7.4 srm ve sonrasnda, IN aslnda normal sorgularla ayn karmak - join tekniklerini kullanr ve EXISTS'e tercih edilir. - - 4.23) Outer join ilemini nasl yapabilirim? - - PostgreSQL outer joins islemlerini SQL standartlarn kullanarak - gerekletirmektedir. Aada 2 rnek bulunmaktadr: -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 satrlar (t2'de elenmemi olanlarla) dndrrler. - RIGHT JOIN t2'nin unjoined satrlarn ekleyecektir. Bir FULL join, - elemi btn satrlar ve t1 ile t2'den tm balanmam (unjoined) - satrlar alr. OUTER szc seimseldir ve LEFT, RIGHT ve FULL join - ilemlerinde olduu kabul edilir. Sradan join ilemleri INNER JOIN - olarak adlandrlr. - - nceki srmlerde, OUTER JOINler UNION ve NOT IN kullanlarak simle - edilebiliyordu. rnein, tab1 ve tab2'yi birletirirken, aadaki - sorgu iki tablonun dtan balanmasn salar: -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 veritabannda nasl ilem yapabilirim? - - Mevcut veritabannz dndaki baka bir veritabannz sorgulamanzn - bir yolu bulunmamaktadr. Bunun nedeni, PostgreSQL'in veritabanna - zel sistem kataloglar yklemesidir. Bu nedenle, cross-database bir - sorgunun nasl davranacan kestirmek zordur. - - contrib/dblink fonksiyon arlarn kullanarak cross-database - sorgulara izin verir. Tabii ki, bir istemci deiik veritabanlarna - ayn anda eriim salayabilir ve bilgiyi bu ekilde birletirebilir. - - 4.25) Bir fonksiyondan nasl oklu satr ya da kolon dndrebilirim? - - 7.3 srmnde, bir fonksiyondan kolaylkla oklu satr ya da stun - dndrebilirsiniz. - (http://techdocs.postgresql.org/guides/SetReturningFunctions) - - 4.26) Neden Pl/PgSQL fonksiyonlar iinden gvenli bir ekilde tablo - yaratma/kaldrma ilemlerini yapamyoruz? - - PL/PgSQL fonksiyon ierikleri cache'ler. Bunun istenmeyen bir taraf, - eer bir PL/PgSQL fonksiyonu geici bir tabloya eriiyorsa ve bu tablo - ileride kaldrlp yeniden oluturulduktan sonra fonksiyon yeniden - arlrsa, fonksiyon almayacaktr; nk cache'lenmi fonksiyon - hala eski geici tabloyu gsteriyor olacaktr. zm, geici tablo - eriimleri iin PL/PgSQL'de EXECUTE kullanmaktr. Bu, sorgunun her - seferinde yeniden ilenmesini salayacaktr. - - 4.27) 4.28) Hangi ifreleme seenekleri bulunmaktadr? - - * contrib/pgcrypto SQL sorgularnda kullanlabilmesi iin ifreleme - fonksiyonlar iermektedir. - * stemciden sunucuya iletiimi ifrelemek iin, sunucuda ssl - seenei postgresql.conf iinde ak olmaldr. Ayrca,pg_hba.conf - dosyas iinde host ya da hostssl kayd mutlaka olmaldr ve - istemci sslmode kapatlmamaldr. (Ayn zamanda,PostgreSQL'in - doal SSL balantlar dnda ssh ya da ssl gibi 3.parti - ifrelenmi veri iletimi de mmkndr.) - * Veritaban kullanc ad ve ifreleri 7.3 srm ile birlikte - otomatik olarak ifrelenirler. nceki srmlerde, postgresql.conf - iindeki PASSWORD_ENCRYPTION seeneini aktif hale getirmeniz - gerekmektedir. - * Sunucunun kendisini ifreli dosya sistemi zerinde - altrabilirsiniz. - _________________________________________________________________ - - PostgreSQL zelliklerini Geniletmek - - 5.1) Kullanc-tanml bir fonksiyon yazdm. psql'de altrdm zaman - neden core dump ediyor? - - Sorunun nedeni birden fazla ey olabilir. Kullanc-tanml - fonksiyonunuzu stand-alone bir programda altrmay deneyiniz. - - 5.2) PostgreSQL'e nasl yeni tipler/fonksiyonlar ekleyebilirim? - - almalarnz pgsql-hackers e-posta listesine gnderiniz. Kodunuz - incelendikten sonra contrib dizinine konacaktr. - - 5.3) Bir tuple dondrmek icin bir C fonksiyonunu nasil yazarm? - - PostgreSQL 7.3 srm ile birlikte, C, PL/PgSQL ve SQL kullanlarak - tablo-dndren fonksiyonlar tamamen desteklenmektedir. Ayrntl bilgi - iin PostgreSQL 7.3.2 Kullanc Rehberi'ne bakabilrisiniz. Bir rnei - contrib/tablefunc iinde bulabilirsiniz. - - 5.4) Bir kaynak dosyasnda deiiklik yaptm. Yeniden derlememe ramen - deiiklik geerli olmuyor. Neden? - - Makefile'lar include dosyalar iin tam bir bamllk iermezler. - ncelikle make clean, ardndan da baska bir make ilemi yapmanz - gerekir. GCC kullanyorsanz, configure betiinin --enable-depend - seeneini, derleyicinin bamllklar otomatik olarak hesaplamas - iin kullanabilirsiniz. diff --git a/doc/src/FAQ/FAQ_MINGW.html b/doc/src/FAQ/FAQ_MINGW.html deleted file mode 100644 index 159553873ab..00000000000 --- 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 35e7c051e02..00000000000 --- 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 discusso geral sobre atualizaes 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 db0a0c306a0..00000000000 --- 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 9a56180a084..00000000000 --- 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 39c26974e58..00000000000 --- 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 b304095b750..00000000000 --- 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 12f33422e26..00000000000 --- 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>Dernire 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 rcente 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 spcifiques la plateforme sont rpondues sur <A href= - "http://www.PostgreSQL.org/docs/index.html">http://www.PostgreSQL.org/docs/index.html</A>.</P> - <HR> - - <H2 align="center">Questions gnrales</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 dernire 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 fonctionnalits 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 dveloppement ?<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 financirement 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 contrler les connexions d'autres machines ?<BR> - <A href="#3.6">3.6</A>) Comment rgler le moteur de la base de donnes pour de meilleures performances ?<BR> - <A href="#3.7">3.7</A>) Quelles fonctionalits de dboguage 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 rpertoire <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 matriels dois-je utiliser ?<BR> - - - <H2 align="center">Questions fonctionnelles</H2> - <A href="#4.1">4.1</A>) Quelle est la diffrence entre curseur binaire - et curseur normal ?<BR> - <A href="#4.2">4.2</A>) Comment faire un <SMALL>SELECT</SMALL> seulement - sur les premires lignes d'une requte ? Sur une ligne alatoire ?<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 donnes ?<BR> - <A href="#4.5">4.5</A>) Quelle est la taille maximale pour une ligne, - une table et une base de donnes ?<BR> - <A href="#4.6">4.6</A>) Combien d'espace disque faut-il pour stocker - les donnes d'un fichier texte typique ?<BR> - <A href="#4.7">4.7</A>) Comment puis-je savoir quels index, tables, - bases de donnes et utilisateurs sont dfinis ?<BR> - <A href="#4.8">4.8</A>) Mes requtes 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 requtes ?<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 gntique de - requtes ?<BR> - <A href="#4.12">4.12</A>) Comment puis-je raliser 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 dtecter si un champ est - <SMALL>NULL</SMALL> dans une requte ?<BR> - <A href="#4.14">4.14</A>) Quelle sont les diffrences entre les nombreux - types de caractres ?<BR> - <A href="#4.15.1">4.15.1</A>) Comment puis-je crer un champ srie, - c'est--dire s'incrmentant 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'amnent pas des problmes lorsque plusieurs utilisateurs - les lancent en mme temps ?<BR> - <A href="#4.15.4">4.15.4</A>) Pourquoi mes numros de squences ne sont pas - r-utiliss lors d'une annulation de transaction ? Pourquoi - existe-t'il des trous dans la numrotation de ma colonne squentielle - (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 utiliss 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 connatre 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'oprations avec des gros objets ?<BR> - <A href="#4.21">4.21</A>) Comment puis-je crer une colonne qui aura par - dfaut l'heure actuelle comme valeur ?<BR> - <A href="#4.22">4.22</A>) Pourquoi mes sous-requtes utilisant - <CODE><SMALL>IN</SMALL></CODE> sont-elles si lentes ?<BR> - <A href="#4.23">4.23</A>) Comment puis-je raliser une jointure - externe ?<BR> - <A href="#4.24">4.24</A>) Comment puis-je lancer des requtes utilisant - plusieurs bases de donnes ??<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 crer/supprimer des - tables temporaires dans les fonctions PL/PgSQL de faon 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'excute 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 rcuprer une - ligne ?<BR> - <A href="#5.4">5.4</A>) J'ai modifi un fichier source. Pourquoi la modification - n'est-elle pas visible aprs la recompilation ?<BR> - - <HR> - - <H2 align="center">Questions gnrales</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 amlioration du systme de gestion de bases - de donnes POSTGRES (et est toujours quelque fois appel "Postgres"), - un prototype de recherche de - <SMALL>SGBD</SMALL> de prochaine gnration. PostgreSQL garde le - puissant modle de donnes et les types de donnes riches de - POSTGRES, mais remplace le langage de requtes 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 dveloppeurs qui sont - tous inscrits la liste de diffusion de dveloppement 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 - dveloppeurs). Cette quipe est responsable de tout le - dveloppement de PostgreSQL. C'est un projet soutenu par une - communaut sans tre contrl par une socit. Pour y contribuer, - voir la FAQ des dveloppeurs 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 dboguage et l'amlioration du code. Le code de Postgres - original, duquel PostgreSQL est driv, tait le fruit de - l'effort de nombreux tudiants diplms et non diplms, 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 gnral, tout environnement compatible Unix moderne devrait - pouvoir faire fonctionner PostgreSQL. Les environnements qui ont t - tests explicitement sont lists 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 - systmes 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 envoys aux membres de cette liste ds que la - liste principale a reu 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 dveloppeurs 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 socits 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 dernire version ?</H4> - - <P>La dernire 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 rpertoire - <I>/doc</I>. Vous pouvez aussi accder 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 achets 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> possde des commandes \d pratiques montrant des - informations sur les types, oprateurs, fonctions, aggrgats, 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 fonctionnalits 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 fonctionnalits 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 aprs et avant l'an 2000.</P> - - <H4><A name="1.12">1.12</A>) Comment puis-je rejoindre l'quipe de dveloppement ?</H4> - - <P>Tout d'abord, tlchargez les derniers sources et lisez la - documentation pour les dveloppeurs 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 dveloppeurs 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 faon de soumettre un rapport de bogue.</P> - - <P>De mme, vrifiez 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 rcente 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 manires de mesurer un logiciel : les fonctionnalits, - les performances, la fiabilit, le support, et le prix.</P> - - <DL> - <DT><B>Fonctionnalits</B></DT> - - <DD>PostgreSQL possde la plupart des fonctionnalits prsentes - dans les <SMALL>SGBD</SMALL> commerciaux, comme les - transactions, les requtes imbriques, les dclencheurs, - les vues, l'intgrit rfrentielle par cls trangres, et le - verrouillage sophistiqu. Nous avons des fonctionnalits qu'ils - n'ont pas, comme les types dfinis par l'utilisateur, - l'hritage, les rgles, et le contrle de concurrence par - multi-versionnage pour rduire les contentions de verrouillage.<BR> - <BR> - </DD> - - <DT><B>Performances</B></DT> - - <DD>PostgreSQL a des performances similaires aux autres bases de - donnes commerciales et open source. Il est plus rapide pour - certaines oprations, plus lent pour d'autres. Par rapport - MySQL ou d'autres <SMALL>SGBD</small> plus lger, nous sommes - plus rapides pour de nombreux utilisateurs, des requtes complexes et - une charge pour les requtes de lecture/criture. MySQL est plus rapide - pour des requtes SELECT simples effectues par quelques utilisateurs. - Bien sr, MySQL ne possde aucune des fonctionnalits de la section - <I>Fonctionnalits</I> ci-dessus. PostgreSQL est construit pour la - fiabilit et les fonctionnalits et nous continuons amliorer les - performances chaque version. Il y a une page web intressante - 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 socit qui distribue son produit via l'open source et requiert - une licence commerciale pour les logiciels propritaires, donc pas une - communaut de dveloppement 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 testes, 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, prtes pour une - utilisation en environnement de production. Nous pensons que - nous nous comparons favorablement aux autres bases de donnes - dans ce domaine.<BR> - <BR> - </DD> - - <DT><B>Support</B></DT> - - <DD>Nos listes de diffusion offrent un contact avec un large - groupe de dveloppeurs et d'utilisateurs afin d'aider la - rsolution des problmes rencontrs. Nous ne pouvons garantir - un correctif mais les <SMALL>SGBD</SMALL> commerciaux ne le - garantissent pas toujours non plus. L'accs direct aux - dveloppeurs, la communaut d'utilisateurs, aux manuels, et - au code source, fait du support pour PostgreSQL un support - suprieur 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, exceptes celles cites dans notre - licence de type BSD donne plus haut.<BR> - <BR> - </DD> - </DL> - - <H4><A name="1.15">1.15</A>) Comment puis-je aider financirement - PostgreSQL ?</H4> - - <P>PostgreSQL possde une infrastructure de premire classe depuis - le dbut en 1996. Ceci grce Marc Fournier, qui a cr et gr - cette infrastructure des annes durant.</P> - - <P>Une infrastructure de qualit est importante pour un projet - open-source. Cela permet d'empcher l'parpillement qui ralentirait - beaucoup l'avancement du projet.</P> - - <P>Bien sr, cette infrastructure n'est pas donne. Elle requiert - un certain nombre de dpenses mensuelles ou ponctuelles. Si vous - ou votre socit 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 utilises pour soutenir le - projet PostgreSQL et ne soutiennent aucune socit que ce soit. Si - vous le prfrez, vous pouvez aussi envoyer un chque l'adresse - de contact.</P> - <HR> - - <P>De plus, si vous avez une histoire de succs avec PostgreSQL, - merci de la soumettre notre site d'vanglisation 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 tlcharger 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 adosss une base de donnes se - trouve <A href="http://www.webreview.com">http://www.webreview.com</A></P> - - <P>Pour l'intgration 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>, propritaire). 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 dtaille.</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 utiliss ont - une interface pour PostgreSQL. Vrifiez 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 supplmentaires 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 spcifier 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 varit de problmes mais vrifiez d'abord que - vous avez les extensions System V installes pour votre noyau. PostgreSQL - ncessite le support noyau pour la mmoire partage et les smaphores.</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 mmoire partage dans - votre noyau, soit vous devez augmenter la mmoire partage disponible dans - le noyau. Le montant exact dont vous avez besoin dpend de votre - architecture et du nombre de tampons et de processus que vous avez - configur pour <I>postmaster</I>. Pour la plupart des systmes avec un - nombre par dfaut 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 dtailles sur la mmoire partage et les smaphores.</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 smaphores. PostgreSQL a besoin d'un smaphore 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 paramtre infrieur au choix par dfaut de 32. Une - solution permanente est d'augmenter les paramtres - <SMALL>SEMMNS</SMALL> et <SMALL>SEMMNI</SMALL> de votre noyau.</P> - - <P>Des smaphores inoprantes peuvent aussi provoquer des plantages pendant de gros accs la base de donnes.</P> - - <P>Si le message d'erreur est autre chose, vous n'avez peut-tre pas du tout le support des - smaphores 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 dtailles sur la mmoire partage et les smaphores.</P> - - <H4><A name="3.5">3.5</A>) Comment contrler les connexions d'autres machines ?</H4> - - <p>Par dfaut, 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 base - sur l'hte en modifiant le fichier <i>$PGDATA/pg_hba.conf</i> en accord.</p> - - <H4><A name="3.6">3.6</A>) Comment rgler le moteur de la base de donnes pour de meilleures performances ?</H4> - - <P>Des index acclreront les requtes. La commande - <SMALL>EXPLAIN ANALYZE</SMALL> vous permet de voir comment PostgreSQL traite - votre requte et quels index sont utiliss.</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. Deuximent, - les requtes qui ne sont pas dans des blocs de transaction <SMALL>BEGIN WORK/COMMIT</SMALL> - sont considrs comme tant dans leur propre transaction. Envisagez de faire - plusieurs instructions dans un seul bloc de transaction. Ceci rduira la - surcharge apporte par les transactions. Aussi, envisagez d'abandonner et - de recrer des index lors de grosses modifications de donnes.</P> - - <P>Il y a plusieurs options d'optimisations. Vous pouvez dsactiver - <I>fsync()</I> en lanant <I>postmaster</I> avec l'option <I>-o -F</I>. - Ceci empchera les <I>fsync()</I>s d'crire sur disque aprs toute - transaction.</P> - - <P>Vous pouvez utiliser l'option <I>-B</I> de <I>postmaster</I> pour - augmenter le nombre de tampons de mmoire partage utiliss par les - processus serveurs. Si vous fixez ce paramtre trop haut, - <I>postmaster</I> ne se lancera pas car vous avez dpass la limite de - votre noyau sur la quantit de mmoire partage. Chaque tampon fait 8 Ko et - le choix par dfaut est de 64 tampons.</P> - - <P>Vous pouvez utiliser l'option serveur <I>-S</I> pour augmenter la - quantit maximale de mmoire utilise par les processus serveurs pour des - tris temporaires. La valeur de <I>-S</I> est mesur en kilooctets et le - choix par dfaut est de 512 (c'est--dire 512 Ko).</P> - - <P>Vous pouvez utiliser la commande <SMALL>CLUSTER</SMALL> pour regrouper - vos donnes en tables pour correspondre un index. Voir la page de manual - <SMALL>CLUSTER</SMALL> pour plus de dtails.</P> - - <H4><A name="3.7">3.7</A>) Quelles fonctionalits de dboguage sont disponibles ?</H4> - - <P>PostgreSQL a plusieurs fonctionalits qui permettent de recueillir des - informations de statut qui peuvent tre utile pour des intentions de - dboguage.</P> - - <P>D'abord, en lanant <I>configure</I> avec l'option --enable-cassert, - beaucoup d'<I>assert()</I>s surveillent le serveur et arrtent le programme - quand quelque chose d'inattendu arrive.</P> - - <P><I>Postmaster</I> et <I>postgres</I> ont tous deux plusieurs options de - dboguage de disponible. D'abord, quand vous lancez <I>postmaster</I>, - vrifiez 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 crer un fichier server.log dans le rpertoire racine de - PostgreSQL. Ce fichier contient des informations utiles sur les problmes - ou erreurs rencontrs par le serveur. <I>Postmaster</I> dispose d'une - option <I>-d</I> qui permet de rapporter des informations encore plus - dtailles d'tre rapportes. L'option <I>-d</I> prend un numro qui - spcifie le niveau de dboguage. Faites attention au fait que des valeurs - lves de niveau de dboguage gnerent 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 requte - <SMALL>SQL</SMALL> directement. Ceci est recommand <B>seulement</B> pour - des fonctions de dboguage. Notez qu'un retour chariot termine la requte, - pas un point-virgule. Si vous compilez avec les symboles de dboguage, vous - pouvez utiliser un dbogueur 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 problmes d'interaction de verrouillage/serveur ne peuvent - tre dupliqus.</P> - - <P>Si <I>postmaster</I> est en train de tourner, lancez <I>psql</I> dans - une fentre puis trouvez le <SMALL>PID</SMALL> du processus <I>postgres</I> - utilis par <I>psql</I>. Utilisez un dbogueur pour l'attacher au - <SMALL>PID</SMALL> <I>postgres</I>. Vous pouvez mettre un point d'arrt - dans le dbogueur et envoyez des requtes de <I>psql</I>. Si vous dboguez - le dmarrage de <I>postgres</I>, vous pouvez mettre PGOPTIONS="-W n", puis - lancez <I>psql</I>. Ceci va retarder le dmarrage de <I>n</I> secondes - pour que vous puissiez attacher un dbogueur au processus, fixer des points - d'arrt et continuer la squence de dmarrage.</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 dboguage et de performance.</P> - - <P>Vous pouvez compiler avec les options de performance pour voir quelles - fonctions prennent du temps d'excution. Les fichiers de gestion du serveur - seront dposs dans le rpertoire <I>pgsql/data/base/nom_db</I>. Les - fichiers de gestion clients seront mis dans le rpertoire 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 dfaut est de 32 processus. Vous pouvez l'augmenter en - relanant <I>postmaster</I> avec une valeur <I>-N</I> approprie 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 dfaut 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 vrifier incluent la taille maximale des blocs de - mmoire partage, <SMALL>SHMMAX</SMALL> ; le nombre maximal de - smaphores, <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 autoriss est pour que votre systme ne tombe pas court de - ressources.</P> - - <H4><A name="3.9">3.9</A>) Que contient le rpertoire <I>pgsql_tmp</I> ?</H4> - - <P>Ce rpertoire contient des fichiers temporaires gnrs par le moteur de - requte. 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 paramtre - <I>-S</I> du serveur n'autorise, alors des fichiers temporaires seront crs - pour contenir les donnes ncessaires.</P> - - <P>Les fichiers temporaires sont d'habitude effacs automatiquement mais - peuvent rester si un serveur s'arrte brutalement pendant un tri. Un arrt - et un redmarrage de <I>postmaster</I> effacera les fichiers dans ces - rpertoires.</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 ncessitera 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 - systmes et des fichiers de donnes. Ces modifications sont souvent - complexes alors nous ne gardons pas de compatibilit descendante pour les - fichiers de donnes. Une sauvegarde exportera les donnes dans un format - gnrique 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 prcisent si <I>pg_upgrade</I> - est disponible pour la sortie.</P> - - <H4><A name="3.11">3.11</A>) Quels matriels dois-je utiliser ?</H4> - - <P>Comme le matriel PC est compatible en grosse partie, les gens ont - tendance croire que tous les matriels PC sont de mme qualit. Ce n'est - pas le cas. La RAM ECC, le SCSI et les cartes-mre de qualit sont plus - fiables et ont de meilleurs performances qu'un matriel moins coteux. - PostgreSQL fonctionnera sur peu prs tout matriel mais si la fiabilit et - la performance sont importantes pour vous, il est rus de bien considrer - les options matrielles. Nos listes de diffusion peuvent tre utilises pour - discuter des options matriels.</P> - - <HR> - - <H2 align="center">Questions fonctionnelles</H2> - - <H4><A name="4.1">4.1</A>) Quelle est la diffrence 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 premires lignes d'une requte ? Sur une ligne alatoire ?</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'intgralit de la requte doive tre value, - mme si vous voulez seulement les premires lignes. Envisagez - d'utiliser une requte avec une clause <SMALL>ORDER - BY</SMALL>. S'il existe un index correspondant l'<SMALL>ORDER - BY</SMALL>, PostgreSQL peut n'valuer que les premires lignes, sinon - l'intgralit de la requte peut tre value, jusqu' gnrer les lignes - dsires.</P> - - <P>Pour faire un <SMALL>SELECT</SMALL> sur une ligne alatoire :</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 complte de commandes l'intrieur 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 gnrent 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 requtes qu'il utilise pour excuter - les commandes que vous lui passez. PostgreSQL fournit aussi une interface - d'informations sur le schma compatible avec <I>SQLi</I> que vous pouvez - interroger des informations sur la base de donnes.</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 donnes ?</H4> - - <P>La fonction <SMALL>DROP COLUMN</SMALL> a t ajoute dans la version 7.3 - avec <SMALL>ALTER TABLE DROP COLUMN</SMALL>. Pour les versions prcdentes, - vous pouvez faire :</P> -<PRE> - BEGIN; - LOCK TABLE ancienne_table; - SELECT ... -- slectionnez 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 donnes 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>Aprs, vous pouvez faire <I>VACUUM FULL tab</I> pour rcuprer l'espace - disque utilis par les lignes expires.</P> - - <H4><A name="4.5">4.5</A>) Quelle est la taille maximale pour une ligne, - une table, une base de donnes ?</H4> - - <P>Les limites sont :</P> -<PRE> - Taille maximum pour une base de donnes illimite (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 sr, ces valeurs ne sont pas vraiment illimite, elles sont limites - par l'espace disque disponible, ainsi que par l'espace de mmoire et de swap. - Les performances peuvent se dgrader si ces valeurs sont inhabituellement - grandes.</P> - - <P>La taille maximum des tables (32 To) ne ncessite pas que le systme - d'exploitation supporte les grands fichiers. Les grandes tables sont stockes - sous forme de fichiers multiples de 1 Go, donc les limites de taille du - systme de fichier ne sont pas importantes.</P> - - <P>La taille maximum des tables et le nombre maximum de colonnes peuvent - tre quadripls, si la taille des blocs par dfaut est augmente 32 Ko.</P> - - <H4><A name="4.6">4.6</A>) Combien d'espace disque faut-il pour stocker - les donnes d'un fichier texte typique ?</H4> - - <P>Une base de donnes PostgreSQL peut utiliser jusqu' cinq fois - l'espace ncessaire pour stocker les donnes d'un fichier texte.</P> - - <P>A titre d'exemple, considrez un fichier de 100 000 lignes, comportant - un entier et une chane de description sur chaque ligne. Supposons que la - chane soit longue en moyenne de 20 octets. Le fichier texte serait de 2,8 Mo. - La taille du fichier d'une base de donnes PostgreSQL peut tre - estime 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 donnes dans PostgreSQL est de 8192 octets (8 KO), donc : - - 8192 octets par page - ---------------------- = 136 lignes par page de base de donnes (arrondi l'entier infrieur) - 60 octets par ligne - - 100000 lignes de donnes - ------------------------- = 735 pages de base de donnes (arrondi l'entier suprieur) - 128 lignes par page - -735 pages de base de donnes * 8192 octets par page = 6 021 120 octets (6,4 Mo) -</PRE> - - <P>Les index utilisent moins d'espace, mais ils contiennent les donnes indexes, - ils peuvent donc galement tre grands.</P> - - <P>Les <SMALL>NULL</SMALL> sont stocks sous forme de bitmap, aussi - utilisent-ils trs peu d'espace.</P> - - <H4><A name="4.7">4.7</A>) Comment puis-je savoir quels index, tables, - bases de donnes et utilisateurs sont dfinis ?</H4> - - <P><I>psql</I> dispose de plusieurs commandes commenant par un anti-slash - pour retrouver ces informations. Utilisez \? pour les connatre. Il existe - aussi des tables systmes, qui commencent par <I>pg_</I> et qui les - dcrivent galement. Aussi, <I>psql -l</I> liste toutes les bases de - donnes.</P> - - <P>Essayez galement le fichier <I>pgsql/src/tutorial/syscat.source</I>. Il - illustre un grand nombre de commandes <SMALL>SELECT</SMALL> ncessaires pour - rcuprer l'information des tables systme de la base de donnes.</P> - - <H4><A name="4.8">4.8</A>) Mes requtes sont lentes ou ne font pas usage - des index. Pourquoi ?</H4> - - <P>Les index ne sont pas automatiquement utiliss par chaque requte. Ils - sont utiliss uniquement si la table est plus grande qu'une certaine taille, - et si la requte slectionne seulement un faible pourcentage des lignes de la - table. Ceci est d au fait qu'un accs disque alatoire caus par un parcours - d'index peut tre plus lent qu'une simple lecture de la table, ou parcours - squentiel</P> - - <P>Pour dterminer si un index devrait tre utilis, PostgreSQL a besoin - des statistiques de la table. Ces statistiques sont collectes en lanant - <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 dterminer s'il faut utiliser l'index. - Les statistiques sont galement utiles pour dterminer l'ordre optimal - des oprations de jointure. La collecte des statistiques devrait tre - effectue rgulirement lorsque le contenu de la table change.</P> - - <P>Les index ne sont normalement pas utiliss pour les clauses <SMALL>ORDER BY</SMALL> - ou pour les jointures. Un parcours squentiel 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 - renvoye. 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 caractres joker tels que <SMALL>LIKE</SMALL> ou - <I>~</I>, les index peuvent seulement tre utiliss dans certaines circonstances :</P> - <UL> - <LI>Le dbut de la chane de recherche doit tre ancr au dpart de la chane, c'est--dire - <UL> - <LI>Les modles pour <SMALL>LIKE</SMALL> ne doivent pas commencer par <I>%</I>.</LI> - <LI>Les modles d'expression rgulire pour <I>~</I> doivent commencer par - <I>^</I>.</LI> - </UL></LI> - <LI>La chane de recherche ne peut pas commencer par une classe de caractres, c'est--dire - [a-e].</LI> - <LI>Les recherches sans casse comme <SMALL>ILIKE</SMALL> et - <I>~*</I> n'utilisent pas les index. Utilisez plutt les index fonctionnels, - dcrit dans la section <a href="#4.12">4.12</a>.</LI> - <LI>La locale <I>C</I> par dfaut doit tre utilise lors de - <i>initdb</i>.</LI> - </UL> - - <p>Dans les versions antrieures la 8.0, les indexs ne peuvent souvent - pas tre utiliss sauf si les types de donnes correspondent exactement au - type de la colonne de l'index. Ceci est particulirement 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 requtes ?</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 donnes 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 donnes multi-dimensionnelles. Par exemple, si un index - R-tree peut tre construit sur un attribut de type <I>point</I>, - le systme peut plus efficacement grer les requtes du type - "Slection de tous les points d'un rectangle".</P> - - <P>L'article de rfrence qui dcrit le systme 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 intgrs peuvent prendre en charge les polygnes et les botes. - En thorie, 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 faon de procder.</P> - - <H4><A name="4.11">4.11</A>) Qu'est-ce que l'optimiseur gntique de - requtes ?</H4> - - <P>Le module <SMALL>GEQO</SMALL> (acronyme de <i>GEnetic Query - Optimizer</i>) acclre l'optimisation des requtes lors de jointures de - nombreuses tables par un algorithme gntique (GA). Il permet la - gestion des grosses requtes de jointures en utilisant une recherche non - exhaustive.</P> - - <H4><A name="4.12">4.12</A>) Comment puis-je raliser 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'oprateur <I>~</I> ralise 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 - exprimes de cette faon :</P> -<PRE> - SELECT * - FROM table - WHERE lower(colonne) = 'abc'; -</PRE> - - <P>Ceci n'utilisera pas un index standard. Nanmoins, si vous crez 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 dtecter si un champ est - <SMALL>NULL</SMALL> dans une requte ?</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 diffrences entre les nombreux - types de caractres ?</H4> -<PRE> -Type Nom interne Notes --------------------------------------------------- -VARCHAR(n) varchar n spcifie la taille maximum, sans remplissage -CHAR(n) bpchar des espaces sont ajouts pour obtenir la - longueur fixe spcifie -TEXT text pas de limite suprieure pour la taille -BYTEA bytea tableau d'octets (accepte les octets nuls) -"char" char un caractre -</PRE> - - <P>Vous verrez le nom interne en examinant les catalogues systme 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 donnes). Donc, l'espace rellement utilis est lgrement plus - grand que la taille dclare. Nanmoins, ces types de donnes 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 chanes de - longueurs variables tout en limitant la taille de cette chane. - <SMALL>TEXT</SMALL> est utile pour les chanes de longueur illimite, avec - malgr tout un maximum de 1 Go.</P> - - <P><SMALL>CHAR(n)</SMALL> est intressant pour stocker des chanes de taille - identique. <SMALL>CHAR(n)</SMALL> complte avec des espaces pour arriver - la taille spcifie alors que <SMALL>VARCHAR(n)</SMALL> n'enregistre que les - caractres donns. <SMALL>BYTEA</SMALL> sert stocker des donnes binaires, - particulirement les donnes incluant des octets <SMALL>NULL</SMALL>. Tous - les types dcrits ici ont des performances similaires.</P> - - <H4><A name="4.15.1">4.15.1</A>) Comment puis-je crer un champ srie, - c'est--dire s'incrmentant automatiquement ?</H4> - - <P>PostgreSQL supporte un type de donnes <SMALL>SERIAL</SMALL>. Il cre - automatiquement une squence. 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 squences. Vous pouvez aussi utiliser le champ <I>OID</I> de chaque - ligne comme valeur unique. Nanmoins, si vous avez besoin de sauvegarder - puis recharger la base de donnes, 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 rcuprer la prochaine valeur <SMALL>SERIAL</SMALL> - partir de l'objet squence est d'utiliser la fonction <I>nextval()</I> - <I>avant</I> l'insertion et de l'insrer 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 stocke dans - <CODE>nouvelle_id</CODE> avec d'autres requtes (c'est--dire en tant que - cl trangre de la table <CODE>personne</CODE>). Notez que le nom de la - <SMALL>SEQUENCE</SMALL> automatiquement cre 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 rcuprer la valeur <SMALL>SERIAL</SMALL> affecte - avec la fonction <I>currval()</I> <I>aprs</I> qu'elle ait t insre par - dfaut, 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 rcuprer la valeur par dfaut - bien que cela soit l'appoche la moins portable et la valeur de l'OID se - rinitialisera 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> aprs 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'amnent pas des problmes lorsque plusieurs utilisateurs - les lancent en mme temps ?</H4> - - <P>Non. <I>currval()</I> renvoie la valeur actuelle affecte par votre - processus, et non pas par tous les utilisateurs.</P> - - <H4><A name="4.15.4">4.15.4</A>) Pourquoi mes numros de squences ne sont pas - r-utiliss lors d'une annulation de transaction ? Pourquoi - existe-t'il des trous dans la numrotation de ma colonne squentielle - (SERIAL) ?</H4> - - <P>Pour amliorer les accs concurrents, les valeurs de squences sont - donnes aux transactions qui en ont besoin et ne sont pas bloques jusqu' - la fin de la transaction. Ceci cre des trous dans le numrotage pour les - transactions annules.</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 rponse de PostgreSQL aux identifiants de - lignes uniques. Chaque ligne cre dans PostgreSQL obtient un - <SMALL>OID</SMALL> unique. Tous les <SMALL>OID</SMALL> gnrs pendant - <I>initdb</I> sont infrieurs 16384 (voir <I>include/access/transam.h</I>). - Tous les <SMALL>OID</SMALL> crs par un utilisateur sont suprieurs ou - gaux ceci. Par dfaut, tous ces <SMALL>OID</SMALL> sont uniques non - seulement dans une table ou une base mais unique l'intrieur d'une - installation PostgreSQL entire.</P> - - <P>PostgreSQL utilise les <SMALL>OID</SMALL> dans ses tables systme interne - pour lier les lignes entre tables. Ces <SMALL>OID</SMALL> peuvent tre - utiliss pour identifier des lignes utilisateurs spcifiques et utiliss 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 crer un index sur le champ <SMALL>OID</SMALL> pour un accs - plus rapide.</P> - - <P>Les <SMALL>OID</SMALL> sont attribus pour toute ligne d'un endroit - central qui est utilis par toutes les bases de donnes. 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 stocks en tant qu'entiers de quatre octets - et dborderont quatre milliards. Personne n'a jamais rapport un tel cas - et nous avons prvu de retirer la limite avant que cela ne se produise.</P> - - <P>Les <SMALL>TID</SMALL>s sont utiliss pour identifier des lignes - physiques spcifiques avec des valeurs de bloc et dcalage. Les - <SMALL>TID</SMALL> changent aprs que les lignes aient t modifis ou - rechargs. Ils sont utiliss par des entres d'index pour pointer vers des - lignes physiques.</P> - - <H4><A name="4.17">4.17</A>) A quoi correspond certains termes utiliss 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>rcupre, slectionne (select)</LI> - <LI>remplace (replace), met jour (update)</LI> - <LI>ajoute (append), insre (insert)</LI> - <LI><SMALL>OID</SMALL>, valeur squentielle (serial value)</LI> - <LI>portal, curseur</LI> - <LI>range variable, table name, table alias</LI> - </UL> - - <P>Une liste des termes gnraux pour le domaine des bases de donnes 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 mmoire virtuelle sur votre systme 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 russir mais cela configurera - d'une faon plus importante la taille du segment de donnes de votre - processus. Cette commande s'applique au processus actuel et tous les - processus lanc par celui-ci. Si vous avez des problmes avec le client - <SMALL>SQL</SMALL> parce que le processus serveur renvoie trop de donnes, - essayez a avant de lancer le client. - - <H4><A name="4.19">4.19</A>) Comment puis-je connatre 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'oprations 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 rgle en fermant les gros objets - lors de la transaction. Donc, le premier essai d'oprations 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), gnrera 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 crer une colonne qui aura par - dfaut 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-requtes utilisant - <CODE><SMALL>IN</SMALL></CODE> sont-elles si lentes ?</H4> - - <P>Dans les versions prcdant la 7.4, les sous-requtes ont t jointes avec - des jointures externes en parcourant squentiellement le rsultat de la - sous-requte pour chaque ligne de la requte externe. Si la sous-requte - renvoit quelques lignes et que la requte externe en renvoit plein, - <CODE><SMALL>IN</SMALL></CODE> sera plus rapide. Pour acclrer les autres - requtes, 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 - indexe. - - <P>A partir de la version 7.4, <CODE>IN</CODE> utilise actuellement les mmes - techniques sophistiques de jointures comme des requtes normales et est - prfr l'utilisation de <CODE>EXISTS</CODE>.</P> - - <H4><A name="4.23">4.23</A>) Comment puis-je raliser 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 requtes 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 complte (<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 appeles des jointures <SMALL>INNER</SMALL>.</P> - - <P>Lors des prcdentes versions, les jointures externes peuvent tre - simules 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 requte - suivante ralise 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 requtes utilisant - plusieurs bases de donnes ?</H4> - - <P>Il n'existe pas de moyens de lancer des requtes sur une autre base que - la courante. Comme PostgreSQL charge des catalogues systmes spcifiques - la base de donnes, sa raction aux requtes inter-base de donnes est - incertaine.</P> - - <P><I>contrib/dblink</I> permet les requtes entre bases de donnes en - utilisant des fonctions. Bien sr un client peut raliser des connexions - simultanes plusieurs bases de donnes et joindre les rsultats du ct - 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 crer/supprimer des - tables temporaires dans les fonctions PL/PgSQL de faon stable ?</H4> - <P>PL/PgSQL cache le contenu des fonctions et un effet de bord malheureux est - que si une fonction PL/PgSQL accde une table temporaire, que cette table - est ensuite supprime et recre, et que la fonction est appele de nouveau, - la fonction chouera car le contenu de la fonction cache pointera toujours - vers l'ancienne table temporaire. La solution revient utiliser - <SMALL>EXECUTE</SMALL> pour l'accs aux tables temporaires avec PL/PgSQL. - Ceci obligera l'analyse de la requte 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 requtes <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>dsactive</I>. Notez qu'il est aussi possible d'utiliser un - transport crypt d'une troisime partie, tel que stunnel ou ssh, plutt que - les connexions SSL natives de PostgreSQL.</LI> - <LI>Les mots de passe des utilisateurs sont automatiquement crypts depuis - la version 7.3. Pour les versions prcdentes, vous devez activer l'option - <I>PASSWORD_ENCRYPTION</I> dans <I>postgresql.conf</I>.</LI> - <LI>Le serveur peut fonctionner avec un systme de fichiers crypts.</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'excute 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-rpertoire <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 supportes en C, PL/PgSQL, et SQL. Voir - le Guide du Programmeur pour plus d'information. Un exemple de fonction - renvoyant une table dfinie 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 dpendances adquates pour les - fichiers d'en-tte. 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 dpendances 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 bd3f8689564..00000000000 --- 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 af03d0cbbcb..00000000000 --- 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 9aa6b7e8051..00000000000 --- 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 f0364198d30..00000000000 --- 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 e92ce71c062..00000000000 --- 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 6327029c75d..00000000000 --- 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 c3e78e0b312..00000000000 --- 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* |