diff options
author | Peter Eisentraut | 2009-07-21 19:20:33 +0000 |
---|---|---|
committer | Peter Eisentraut | 2009-07-21 19:20:33 +0000 |
commit | f3f45c87d23b800913fb8ea88fe2d713f6b9dd74 (patch) | |
tree | fc823ac6d3faebdf23dd8bb4fff7c35a4ab6a136 /doc/src | |
parent | f7ad9cab30aad86d60c5826cceeb7a6be4298cc8 (diff) |
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
Diffstat (limited to 'doc/src')
-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 |
14 files changed, 0 insertions, 14608 deletions
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:[email protected]">[email protected]</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:[email protected]">[email protected]</A>) - </P> - - <P>Traduzido por: Euler Taveira de Oliveira (<A href= - "mailto:[email protected]">[email protected]</A>)</P> - - <P>A versão mais recente desse documento pode ser vista em <A href= - "http://www.postgresql.org/files/documentation/faqs/FAQ.html"> - http://www.postgresql.org/files/documentation/faqs/FAQ.html</A> (EN).<BR> - <A href="http://www.postgresql.org/files/documentation/faqs/FAQ_brazilian.html"> - http://www.postgresql.org/files/documentation/faqs/FAQ_brazilian.html</A> (pt_BR).</P> - - <P>Perguntas sobre plataformas específicas são respondidas em <A href= - "http://www.postgresql.org/docs/faq/">http://www.postgresql.org/docs/faq/</A>.</P> - <HR> - - <H2 align="center">Perguntas Gerais</H2> - <A href="#item1.1">1.1</A>) O que é PostgreSQL? Como ele é pronunciado? - O que é Postgres?<BR> - <A href="#item1.2">1.2</A>) Quem controla o PostgreSQL?<BR> - <A href="#item1.3">1.3</A>) Qual é a licença do PostgreSQL?<BR> - <A href="#item1.4">1.4</A>) Quais plataformas o PostgreSQL pode ser executado?<BR> - <A href="#item1.5">1.5</A>) Onde eu posso conseguir o PostgreSQL?<BR> - <A href="#item1.6">1.6</A>) Qual é a última versão?<BR> - <A href="#item1.7">1.7</A>) Onde eu posso conseguir suporte?<BR> - <A href="#item1.8">1.8</A>) Como eu posso submeter um relato de um bug?<BR> - <A href="#item1.9">1.9</A>) Como eu posso saber quais são os bugs conhecidos ou características ausentes?<BR> - <A href="#item1.10">1.10</A>) Que documentação está disponível?<BR> - <A href="#item1.11">1.11</A>) Como eu posso aprender <SMALL>SQL</SMALL>?<BR> - <A href="#item1.12">1.12</A>) Como posso submeter uma correção (patch) ou me juntar a equipe de desenvolvimento?<BR> - <A href="#item1.13">1.13</A>) Como é o PostgreSQL comparado a outros <SMALL>SGBD</SMALL>s?<BR> - <A href="#item1.14">1.14</A>) O PostgreSQL gerenciar� as mudanças de horário devido ao horário de verão em vários países?<BR> - - - <H2 align="center">Perguntas sobre Clientes</H2> - <A href="#item2.1">2.1</A>) Quais interfaces estão disponíveis para PostgreSQL?<BR> - <A href="#item2.2">2.2</A>) Quais ferramentas estão disponíveis para utilizar o PostgreSQL com páginas Web?<BR> - <A href="#item2.3">2.3</A>) O PostgreSQL tem interfaces gráficas para interagir com usuário?<BR> - - - <H2 align="center">Perguntas Administrativas</H2> - <A href="#item3.1">3.1</A>) Como eu instalo o PostgreSQL em um local diferente de <I>/usr/local/pgsql</I>?<BR> - <A href="#item3.2">3.2</A>) Como eu controlo conexões de outras máquinas?<BR> - <A href="#item3.3">3.3</A>) Como eu ajusto o servidor de banco de dados para obter uma performance melhor?<BR> - <A href="#item3.4">3.4</A>) Quais características de depuração estão disponíveis?<BR> - <A href="#item3.5">3.5</A>) Por que eu recebo <I>"Sorry, too many clients"</I> quando eu tento conectar?<BR> - <A href="#item3.6">3.6</A>) Qual é o processo de atualização do PostgreSQL?<BR> - <A href="#item3.7">3.7</A>) Que tipo de hardware eu devo usar?<BR> - - - <H2 align="center">Perguntas Operacionais</H2> - <A href="#item4.1">4.1</A>) Como eu faço um <SMALL>SELECT</SMALL> somente dos primeiros registros de uma consulta? Um registro randômico?<BR> - <A href="#item4.2">4.2</A>) Como eu descubro quais tabelas, índices, bancos de dados e usuários estão definidos? Como eu vejo as consultas utilizadas pelo <I>psql</I> para mostrá-los?<BR> - <A href="#item4.3">4.3</A>) Como você muda o tipo de dado de uma coluna?<BR> - <A href="#item4.4">4.4</A>) Qual é o tamanho máximo de um registro, uma tabela e um banco de dados?<BR> - <A href="#item4.5">4.5</A>) Quanto espaço em disco é necessário para armazenar dados de um arquivo texto?<BR> - <A href="#item4.6">4.6</A>) Por que minhas consultas estão lentas? Por que elas não estão utilizando meus índices?<BR> - <A href="#item4.7">4.7</A>) Como eu vejo como o otimizador de consultas está avaliando minha consulta?<BR> - <A href="#item4.8">4.8</A>) Como eu faço buscas com expressões regulares e buscas com expressões regulares sem diferenciar mauúsculas de minúsculas? Como eu utilizo um índice para buscas sem distinguir maiúsculas de minúsculas?<BR> - <A href="#item4.9">4.9</A>) Em uma consulta, como eu detecto se um campo é <SMALL>NULL</SMALL>? Como eu posso concatenar possíveis <SMALL>NULL</SMALL>s? Como eu posso ordenar por um campo que é <SMALL>NULL</SMALL> ou não?<BR> - <A href="#item4.10">4.10</A>) Qual é a diferença entre os vários tipos de dado de caracteres?<BR> - <A href="#item4.11.1">4.11.1</A>) Como eu crio um campo serial/auto incremento?<BR> - <A href="#item4.11.2">4.11.2</A>) Como eu consigo o valor de um campo - <SMALL>SERIAL</SMALL>?<BR> - <A href="#item4.11.3">4.11.3</A>) <I>currval()</I> não lida com condição de corrida com outros usuários?<BR> - <A href="#item4.11.4">4.11.4</A>) Por que os números da minha sequência não são reutilizados quando uma transação é abortada? Por que há intervalos nos números da minha sequência/coluna SERIAL?<BR> - <A href="#item4.12">4.12</A>) O que é um <SMALL>OID</SMALL>? O que é um <SMALL>CTID</SMALL>?<BR> - <A href="#item4.13">4.13</A>) Por que eu recebo o erro <I>"ERROR: Memory exhausted in AllocSetAlloc()"</I>?<BR> - <A href="#item4.14">4.14</A>) Como eu informo qual versão do PostgreSQL eu estou utilizando?<BR> - <A href="#item4.15">4.15</A>) Como eu crio uma coluna que conterá por padrão a hora atual?<BR> - <A href="#item4.16">4.16</A>) Como eu faço uma junção externa (outer join)?<BR> - <A href="#item4.17">4.17</A>) Como eu faço consultas utilizando múltiplos bancos de dados?<BR> - <A href="#item4.18">4.18</A>) Como eu retorno múltiplos registros ou colunas de uma função?<BR> - <A href="#item4.19">4.19</A>) Por que eu obtenho erros "relation with OID ###### - does not exist" ao acessar tabelas temporárias em funções PL/PgSQL?<BR> - <A href="#item4.20">4.20</A>) Quais soluções de replicação estão disponíveis?<BR> - <A href="#item4.21">4.21</A>) Por que os nomes de minhas tabelas e colunas não - são reconhecidos em minha consulta? Por que as maiúsculas não são preservadas?<BR> - - - <HR> - - <H2 align="center">Perguntas Gerais</H2> - - <H3 id="item1.1">1.1) O que é PostgreSQL? Como ele é pronunciado? O que é Postgres?</H3> - - <P>PostgreSQL é pronunciado <I>Post-Gres-Q-L</I>. - (Para os curiosos que querem saber como se diz "PostgreSQL", um - <a href="http://www.postgresql.org/files/postgresql.mp3">arquivo de áudio</a> está disponível).</P> - - <P>O PostgreSQL é um sistema de banco de dados objeto-relacional que tem as - características de sistemas de bancos de dados comerciais tradicionais com - melhoramentos encontrados nos sistemas <SMALL>SGBD</SMALL>s de próxima geração. - PostgreSQL é livre e o código-fonte completo está disponível.</P> - - <P>O desenvolvimento do PostgreSQL é feito por um grupo de desenvolvedores - voluntários (na sua maioria) espalhados pelo mundo e que se comunicam via - Internet. É um projeto da comunidade e não é controlado por nenhuma - empresa. Para se envolver, veja a FAQ do desenvolvedor em <A href= - "http://www.postgresql.org/docs/faqs.FAQ_DEV.html"> - http://www.postgresql.org/docs/faqs.FAQ_DEV.html</A> - </P> - - <P>Postgres é um apelido para o PostgreSQL amplamente utilizado. Era o nome original do - projeto em Berkeley e dentre os outros apelidos é o preferido. Se você acha - 'PostgreSQL' difícil de pronunciar, diga apenas 'Postgres'.</P> - - <H3 id="item1.2">1.2) Quem controla o PostgreSQL?<BR></H3> - - <P>Se você está procurando por um mantenedor, comitê central ou empresa - controladora do PostgreSQL, desista --- não há um(a). Nós temos um - comitê core e committers CVS, mas estes grupos são mais para questões - administrativas do que controle. O projeto é direcionado pela comunidade - de desenvolvedores e usuários, que qualquer um pode se juntar. Tudo o que - você precisa é se inscrever nas listas de discussão e participar das - discussões. Veja a <a href="http://www.postgresql.org/docs/faqs.FAQ_DEV.html"> - FAQ do desenvolvedor</A> para obter informações como se envolver com o - desenvolvimento do PostgreSQL.</P> - - <H3 id="item1.3">1.3) Qual é a licença do PostgreSQL?</H3> - - <P>O PostgreSQL é distribuído sob a licença BSD clássica. Basicamente, - ela permite que usuários façam qualquer coisa com o código, incluindo - revender os binários sem o código-fonte. A única restrição é que você - não nos responsabilize legalmente por problemas com o programa de computador. - Há também a exigência de que esta licença apareça em todas as cópias - do programa de computador. Aqui está a licença BSD que usamos atualmente:</P> - <P>PostgreSQL está sujeito a seguinte licença:</P> - - <P>PostgreSQL Data Base Management System</P> - - <P>Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group - Portions Copyright (c) 1994-1996 Regents of the University of California</P> - - <P>Permission to use, copy, modify, and distribute this software - and its documentation for any purpose, without fee, and without a - written agreement is hereby granted, provided that the above - copyright notice and this paragraph and the following two - paragraphs appear in all copies.</P> - - <P>IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY - PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL - DAMAGES, INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS - SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF - CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</P> - - <P>THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY - WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE - SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE - UNIVERSITY OF CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, - SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.</P> - - <H3 id="item1.4">1.4) Quais plataformas o PostgreSQL pode ser executado?</H3> - - <P>Em geral, qualquer plataforma moderna compatível com Unix deve ser capaz de executar o PostgreSQL. As plataformas que foram testadas antes do lançamento de uma versão são listadas nas instruções de instalação.</P> - - <P>O PostgreSQL também executa nativamente nos sistemas operacionais Microsoft Windows - baseados no NT tais como Win200 SP4, WinXP e Win2003. Um instalador pré-empacotado está - disponível em <a href= "http://pgfoundry.org/projects/pginstaller"> - http://pgfoundry.org/projects/pginstaller</a>. Versões do Windows baseadas no MS-DOS - (Win95, Win98, WinMe) podem executar o PostgreSQL utilizando o Cygwin.</P> - - <p>Há também uma versão para o Novell Netware 6 em - <a href="http://forge.novell.com">http://forge.novell.com</a> - e uma versão para OS/2 (eComStation) em <a href= - "http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2F"> - http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2F</a>.</p> - - <H3 id="item1.5">1.5) Onde eu posso conseguir o PostgreSQL?</H3> - - <P>Via navegador web, utilize <a href="http://www.postgresql.org/ftp/"> - http://www.postgresql.org/ftp/</a> e via ftp, utilize - <A href="ftp://ftp.postgresql.org/pub/"> - ftp://ftp.postgresql.org/pub/</A>.</P> - - - <H3 id="item1.6">1.6) Qual é a última versão?</H3> - - <P>A última versão do PostgreSQL é a versão 8.2.5.</P> - - <P>Nós planejamos lançar versões novas a cada ano com versões - corretivas em alguns meses.</P> - - <H3 id="item1.7">1.7) Onde eu posso conseguir suporte?</H3> - - <P>A comunidade do PostgreSQL fornece assistência a muitos de seus - usuários via e-mail. O principal sítio web para inscrição nas listas - de e-mail é <a href="http://www.postgresql.org/community/lists/"> - http://www.postgresql.org/community/lists/</a>. As listas <I>general</I> - e <I>bugs</I> são um bom lugar para início.</P> - - <P>O principal canal de IRC é o <I>#postgresql</I> na Freenode (<I>irc.freenode.net</I>). Para se conectar você pode utilizar o comando Unix <code>irc -c '#postgresql' "$USER" irc.freenode.net</code> ou utilizar qualquer outro cliente de IRC. Um canal hispânico (<I>#postgresql-es</I>) e um francês (<I>#postgresqlfr</I>) também existem na mesma rede. Há também um canal PostgreSQL na EFNet.</P> - - <P>Uma lista de empresas que prestam suporte comercial está disponível em <A href= - "http://www.postgresql.org/support/professional_support"> - http://www.postgresql.org/support/professional_support</A>.</P> - - <H3 id="item1.8">1.8) Como eu informo a existência de um bug?</H3> - - <P>Visite o formulário que reporta bugs do PostgreSQL em <A href= - "http://www.postgresql.org/support/submitbug">http://www.postgresql.org/support/submitbug</A>.</P> - <P>Verifique também o nosso ftp <A href= - "ftp://ftp.postgresql.org/pub">ftp://ftp.postgresql.org/pub</A> para - ver se há uma versão mais recente do PostgreSQL.</P> - - <P>Bugs submetidos utilizando o formulário ou informado a qualquer - lista de discussão do PostgreSQL tipicamente gera uma das seguintes - respostas:</P> - <ul> - <li>Não é um bug e o porquê</li> - <li>É um bug conhecido e já está na lista de - <A href="http://www.postgresql.org/docs/faqs.TODO.html">AFAZERES</A></li> - <li>O bug foi corrigido na versão atual</li> - <li>O bug foi corrigido mas não foi empacotado em um versão oficial</li> - <li>Um pedido foi feito para obter informações detalhadas: - <ul> - <li>Sistema Operacional</li> - <li>Versão do PostgreSQL</li> - <li>Exemplo de teste que reproduz o bug</li> - <li>Informações sobre depuração</li> - <li>Saída reconstituidora de vestígios (backtrace) do depurador</li> - </ul> - </li> - <li>O bug é novo. O seguinte pode ocorrer: - <ul> - <li>Uma correção é criada e será incluída na próxima versão</li> - <li>O bug não pode ser corrigido imediatamente e é adicionado - a lista de <A href="http://www.postgresql.org/docs/faqs.TODO.html">AFAZERES</A></li> - </ul> - </li> - </ul> - - <H3 id="item1.9">1.9) Como eu posso saber quais são os bugs conhecidos - ou funcionalidades ausentes?</H3> - - <P>O PostgreSQL suporta um subconjunto extendido do <SMALL>SQL:2003</SMALL>. - Veja nossa lista de <A href="http://www.postgresql.org/docs/faqs.TODO.html">AFAZERES</A> - que contém bugs conhecidos, funcionalidades ausentes e planos futuros.</P> - - <P>Uma solicitação de funcionalidade geralmente resulta em uma das - seguintes respostas:</P> - <ul> - <li>A funcionalidade já está na lista de <A href="http://www.postgresql.org/docs/faqs.TODO.html">AFAZERES</A></li> - <li>A funcionalidade não é desejável porque: - <ul> - <li>Ela duplica uma funcionalidade existente que já segue o - padrão SQL</li> - <li>A funcionalidade aumentará a complexidade do código mas - adicionará pouco benefício</li> - <li>A funcionalidade será insegura ou não-confiável</li> - </ul> - </li> - <li>A nova funcionalidade é adicionada a lista de - <A href="http://www.postgresql.org/docs/faqs.TODO.html">AFAZERES</A></li> - </ul> - - <P>O PostgreSQL não utiliza sistema de acompanhamento de bugs porque - nós achamos mais eficiente responder diretamente o e-mail e manter a - lista de <A href="http://www.postgresql.org/docs/faqs.TODO.html">AFAZERES</A> - atualizada. Na prática, bugs não duram muito no programa; e bugs que afetam - uma grande quantidade de usuários são corrigidos rapidamente. O único lugar - para encontrar todas as mudanças, melhorias e correções em uma versão do - PostgreSQL é ler as mensagens de log do - <a href="http://www.postgresql.org/developer/sourcecode/">CVS</a>. Até mesmo - as notas de lançamento não listam todas as mudanças feitas no programa.</P> - - <H3 id="item1.10">1.10) Que documentação está disponível?</H3> - - <P>O PostgreSQL inclui vasta documentação, incluindo um manual extenso, - páginas de manuais (man pages) e alguns exemplos teste. Veja o diretório - <I>/doc</I>. Você também pode pesquisar os manuais online em <A href= - "http://www.postgresql.org/docs">http://www.postgresql.org/docs</A>. - </P> - - <P>Há dois livros sobre PostgreSQL disponíveis online em <A href= - "http://www.postgresql.org/docs/books/awbook.html">http://www.postgresql.org/docs/books/awbook.html</A> - e <A href= - "http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook/</A>. - Há uma lista de livros sobre PostgreSQL disponíveis para compra. Um dos mais - populares é o do Korry Douglas. Uma lista de análise sobre os livros pode ser - encontrada em <A href= - "http://www.postgresql.org/docs/books/">http://www.postgresql.org/docs/books/</A>. - Há também uma coleção de artigos técnicos sbore PostgreSQL em <A href="http://www.postgresql.org/docs/techdocs/">http://www.postgresql.org/docs/techdocs/</A>.</P> - - <P>O programa cliente de linha de comando <I>psql</I> tem alguns comandos \d para - mostrar informações sobre tipos, operadores, funções, agregações, etc. - utilize \? - para mostrar os comandos disponíveis.</P> - - <P>Nosso sítio web contém ainda mais documentação.</P> - - <H3 id="item1.11">1.11) Como eu posso aprender <SMALL>SQL</SMALL>?</H3> - - <P>Primeiro, considere os livros específicos sobre PostgreSQL mencionados - acima. Muitos de nossos usuários gostam do <I>The Practical SQL Handbook</I>, - Bowman, Judith S., et al., Addison-Wesley. Outros do <I>The - Complete Reference SQL</I>, Groff et al., McGraw-Hill.</P> - - <P>Há também bons tutoriais disponíveis online: - <UL> - <LI> <A href="http://www.intermedia.net/support/sql/sqltut.shtm">http://www.intermedia.net/support/sql/sqltut.shtm</A> - </LI> - <LI> - <A href="http://sqlcourse.com/">http://sqlcourse.com</A> - </LI> - <LI> - <A href="http://www.w3schools.com/sql/default.asp">http://www.w3schools.com/sql/default.asp</A> - </LI> - <LI><A href= - "http://mysite.verizon.net/Graeme_Birchall/id1.html">http://mysite.verizon.net/Graeme_Birchall/id1.html</A> - </LI> - </UL> - - <H3 id="item1.12">1.12) Como posso submeter uma correção (patch) ou me juntar a equipe de desenvolvimento?</H3> - - <P>Veja a <a href="http://www.postgresql.org/docs/faqs.FAQ_DEV.html"> - FAQ do Desenvolvedor</A>.</P> - - <H3 id="item1.13">1.13) Como é o PostgreSQL comparado a outros <SMALL>SGBD</SMALL>s?</H3> - - <P>Há várias maneiras de se medir um software: funcionalidades, performance, confiabilidade, suporte e preço.</P> - - <DL> - <DT><B>Funcionalidades</B></DT> - - <DD>PostgreSQL tem muitas características presentes em muitos <SMALL>SGBD</SMALL>s comerciais como transações, subconsultas, gatilhos, visões, integridade referencial de chave estrangeira e bloqueio (lock) sofisticado. Nós temos algumas funcionalidades que eles não tem, como tipos definidos pelo usuário, herança, regras e controle de concorrência de múltiplas versões para reduzir bloqueios (locks).<BR> - <BR> - </DD> - - <DT><B>Performance</B></DT> - - <DD>A performance do PostgreSQL é comparável a outros bancos de dados comerciais e de código livre. Ele é mais rápido em algumas coisas, mais lento em outras. Nossa performance é geralmente +/- 10% comparada a de outros bancos de dados. - <BR> - </DD> - - <DT><B>Confiabilidade</B></DT> - - <DD>Nós sabemos que um <SMALL>SGBD</SMALL> deve ser confiável ou ele é inútil. Nós empenhamos em lançar versões bem testadas, de código estável e que tenha o mínimo de bugs. Cada versão tem no mínimo um mês de teste em versão beta, e nosso histórico de versões mostra que nós podemos fornecer versões estáveis e sólidas que estão prontas para uso em produção. Nós acreditamos que somos comparados a nosso favor com outros sistemas de bancos de dados nessa área.<BR> - <BR> - </DD> - - <DT><B>Suporte</B></DT> - - <DD>Nossas listas de discussão fornecem contato com um grupo de desenvolvedores e usuários para ajudar a resolver muitos problemas encontrados. Enquanto nós não podemos garantir o conserto, <SMALL>SGBD</SMALL>s comerciais nem sempre fornecem também. Com acesso direto aos desenvolvedores, a comunidade de usuários, manuais e o código fonte faz com que o suporte do PostgreSQL seja superior ao de outros <SMALL>SGBD</SMALL>s. Há suporte comercial por incidente disponíveis para aqueles que precisam de um. (Veja <A href="#item1.7">seção 1.7 da FAQ</A>).<BR> - <BR> - </DD> - - <DT><B>Preço</B></DT> - - <DD>Nós somos livres para uso dele tanto comercial quanto não comercial. Você pode adicionar nosso código ao seu produto sem limitações, exceto aquelas descritas na nossa licença BSD mencionada acima.<BR> - <BR> - </DD> - </DL> - - <H3 id="item1.14">1.14) O PostgreSQL gerenciará mudanças no horário devido ao horário de verão em vários países?</H3> - - <P>Mudanças no horário de verão dos USA foram incluídas nas versões 8.0 .[4+] do PostgreSQL e em todas as versões grandes, i.e. 8.1. Mudanças no Canadá e Austrália Oeste foram incluídas na 8.0.[10+], 8.1.[6+] e em todas as versões grandes subsequentes. Versões do PostgreSQL anteriores a 8.0 utilizam o banco de dados de zona horária do sistema operacional para informações sobre horário de verão.</P> - - <HR> - - <H2 align="center">Perguntas sobre Clientes</H2> - - <H3 id="item2.1">2.1) Quais interfaces estão disponíveis para PostgreSQL?</H3> - - <p>A instalação do PostgreSQL inclui somente as interfaces <SMALL>C</SMALL> e - <SMALL>C</SMALL> embutida. Todas as outras interfaces são projetos independentes - que podem ser obtidos separadamente; sendo separados permitem que eles tenham - suas próprias datas de lançamento e time de desenvolvedores.</P> - - <P>Algumas linguagens de programação como <SMALL>PHP</SMALL> incluem uma - interface para PostgreSQL. Interfaces para linguagens como Perl, - <SMALL>TCL</SMALL>, Python e muitas outras estão disponíveis em - <a href="http://www.pgfoundry.org">http://www.pgfoundry.org</A>. - </P> - - <H3 id="item2.2">2.2) Quais ferramentas estão disponíveis para utilizar o PostgreSQL com páginas Web?</H3> - - <P>Uma boa introdução para páginas web que utilizam bancos de dados pode ser vista em: - <A href="http://www.webreview.com">http://www.webreview.com</A></P> - - <P>Para integração na Web, PHP (<A - href="http://www.php.net">http://www.php.net</A>) - é uma excelente interface.</P> - - <P>Para casos complexos, muitos usam a Interface Perl e DBD::Pg com CGI.pm - ou mod_perl.</P> - - <H3 id="item2.3">2.3) O PostgreSQL tem interfaces gráficas para iteragir com o usuário?</H3> - - <P>Há um vasto número de Ferramentas Gráficas (GUI), que estão disponíveis - para o PostgreSQL, comerciais e de desenvolvedores de código aberto. Uma - lista detalhada pode ser encontrada em <A href="http://www.postgresql.org/docs/techdocs.54"> - Documentação da Comunidade PostgreSQL</A></P> - - <HR> - - <H2 align="center">Perguntas Administrativas</H2> - - <H3 id="item3.1">3.1) Como eu instalo o PostgreSQL em um local diferente de <I>/usr/local/pgsql</I>?</H3> - - <P>Especifique a opção <I>--prefix</I> quando executar o <I>configure</I>.</P> - - <H3 id="item3.2">3.2) Como eu controlo conexões de outras máquinas?</H3> - - <P>Por padrão, o PostgreSQL só permite conexões da máquina local utilizando soquetes de domínio Unix ou conexões TCP/IP. Outras máquinas não poderão conectar-se a menos que você modifique <I>listen_addresses</I> no <I>postgresql.conf</I>, habilite a autenticação por máquina modificando o arquivo <I>$PGDATA/pg_hba.conf</I> e reinicie o servidor PostgreSQL.</P> - - <H3 id="item3.3">3.3) Como eu ajusto o servidor de banco de dados para obter uma performance melhor?</H3> - - <P>Há três grandes áreas para melhorar a performance em potencial:</P> - - <DL> - <DT><B>Mudança de Consultas</B></DT> - - <DD>Isto involve modificar consultas para obter melhor performance: - <ul> - <li>Criação de índices, incluir expressões e índices parciais</li> - <li>Utilização o COPY ao invés de múltiplos comandos <SMALL>INSERT</SMALL>s</li> - <li>Agrupamento de múltiplos comandos em uma única transação para diminuir - a despesa com efetivações (commit)</li> - <li>Utilização do <SMALL>CLUSTER</SMALL> quando recuperar vários registros de - um índice</li> - <li>Utilização do <SMALL>LIMIT</SMALL> para retornar um subconjunto da saída - da consulta</li> - <li>Utilização de Consultas preparadas</li> - <li>Utilização de <SMALL>ANALYZE</SMALL> para manter as estatísticas do - otimizador corretas</li> - <li>Utilização regular do <SMALL>VACUUM</SMALL> ou <I>pg_autovacuum</I></li> - <li>Remoção de índices durante grande mudança de dados</li> - </ul><BR> - <BR> - </DD> - - <DT><B>Configuração do Servidor</B></DT> - - <DD>Um grande número de configurações que afetam a performance. - Para obter detalhes adicionais, veja <a href= - "http://www.postgresql.org/docs/current/static/runtime-config.html"> - Administration Guide/Server Run-time Environment/Run-time - Configuration</a> para listagem completa, e para - comentários veja <a href= - "http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html"> - http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html</a> - e <a href="http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html"> - http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html</a>. - <BR> - <BR> - </DD> - - <DT><B>Seleção do Hardware</B></DT> - - <DD>O efeito do hardware na performance é detalhado em - <a href="http://www.powerpostgresql.com/PerfList/"> - http://www.powerpostgresql.com/PerfList/</a> e <a - href="http://momjian.us/main/writings/pgsql/hw_performance/index.html"> - http://momjian.us/main/writings/pgsql/hw_performance/index.html</a>. - <BR> - <BR> - </DD> - </DL> - - <H3 id="item3.4">3.4) Quais características de depuração estão disponíveis?</H3> - - <P>Há muitas variáveis de configuração do servidor <CODE>log_*</CODE> - que habilitam a exibição de consultas e estatísticas que podem ser - muito úteis para depuração e medidas de performance.</P> - - <H3 id="item3.5">3.5) Por que eu recebo <I>"Sorry, too many clients"</I> quando eu tento conectar?</H3> - - <P>Você atingiu o limite padrão de 100 sessões. Você - precisa aumentar o limite do servidor PostgreSQL, que diz - quantos processos servidor concorrentes ele pode iniciar, alterando - o valor <I>max_connections</I> no <I>postgresql.conf</I> e - reiniciando o <I>postmaster</I>.</P> - - <H3 id="item3.6">3.6) Qual é o processo de atualização do PostgreSQL?</H3> - - <P>Veja <a - href="http://www.postgresql.org/support/versioning">http://www.postgresql.org/support/versioning</a> - para discuss�o geral sobre atualiza��es e <a href= - "http://www.postgresql.org/docs/current/static/install-upgrading.html"> - http://www.postgresql.org/docs/current/static/install-upgrading.html</a> - para instruções específicas.</P> - - <H3 id="item3.7">3.7) Que tipo de hardware eu devo usar?</H3> - - <P>Por causa do hardware de PC ser em sua maioria compatível, pessoas tendem a acreditar que todos os hardwares de PC são de mesma qualidade. Não é verdade. ECC RAM, SCSI e placas mãe de qualidade são mais confiáveis e têm uma melhor performance do que hardwares mais baratos. O PostgreSQL executará em quase todo hardware, mas se a confiabilidade e a performance forem importantes é prudente pesquisar sobre as opções de hardware. Nossas listas de discussão podem ser usadas para discutir opções de hardware e dilemas.</P> - - <HR> - - <H2 align="center">Perguntas Operacionais</H2> - - <H3 id="item4.1">4.1) Como eu faço um <SMALL>SELECT</SMALL> somente dos primeiros registros de uma consulta? Um registro randômico?</H3> - - <P>Para obter somente alguns registros, se você sabe o número de - registros necessários ao executar o <SMALL>SELECT</SMALL> utilize - o <SMALL>LIMIT</SMALL>. Se um índice corresponde no <SMALL>ORDER - BY</SMALL> é possível que a consulta toda não tenha que ser - executada. Se você não sabe o número de registros ao executar o - <SMALL>SELECT</SMALL>, utilize um cursor e o <SMALL>FETCH</SMALL>.</P> - - <P>Para <SMALL>obter</SMALL> um registro randômico, utilize:</P> -<PRE> - SELECT col - FROM tab - ORDER BY random() - LIMIT 1; -</PRE> - - <H3 id="item4.2">4.2) Como eu descubro quais tabelas, índices, bancos de dados e usuários estão definidos? Como eu vejo as consultas utilizadas pelo <I>psql</I> para mostrá-los?</H3> - - <P>Utilize o comando \dt para ver tabelas no <I>psql</I>. Para obter - uma lista completa dos comandos no psql você pode utilizar \?. - Alternativamente, você pode ler o código-fonte do <I>psql</I> no arquivo - <I>pgsql/src/bin/psql/describe.c</I>, ele contém os comandos <SMALL>SQL</SMALL> - que geram a saída para os comandos de contrabarra do <I>psql</I>. Você - também pode iniciar o <I>psql</I> com a opção <I>-E</I> para que as consultas - utilizadas para executar os comandos que você informou seja exibida. - O PostgreSQL também fornece uma inteface compatível com <SMALL>SQL</SMALL> do - INFORMATION SCHEMA que você pode consultar para obter informação sobre o - banco de dados.</P> - - <P>Há também tabelas do sistema que começam com <I>pg_</I> que os descrevem - também.</P> - - <P>Utilizando o <I>psql -l</I> listará todos os bancos de dados.</P> - - <P>Veja também o arquivo <I>pgsql/src/tutorial/syscat.source</I>. Ele - ilustra muitos dos comandos <SMALL>SELECT</SMALL>s necessários para obter - informação das tabelas de sistema do banco de dados.</P> - - <H3 id="item4.3">4.3) Como você muda o tipo de dado de uma coluna?</H3> - - <P>Mudar o tipo de dado de uma coluna pode ser feito facilmente na versão 8.0 - ou superior com <SMALL>ALTER TABLE ALTER COLUMN TYPE</SMALL>.</P> - - <P>Em versões anteriores, faça isso:</P> -<PRE> - BEGIN; - ALTER TABLE tab ADD COLUMN col_nova <i>novo_tipo_dado</i>; - UPDATE tab SET col_nova = CAST(col_antiga AS <i>novo_tipo_dado</i>); - ALTER TABLE tab DROP COLUMN col_antiga; - COMMIT; -</PRE> - <P>Você pode então querer fazer um <I>VACUUM FULL tab</I> para recuperar - o espaço em disco utilizado pelos registros expirados.</P> - - <H3 id="item4.4">4.4) Qual é o tamanho máximo de um registro, uma tabela e um banco de dados?</H3> - - <P>Estes são os limites:</P> -<BLOCKQUOTE> -<TABLE> -<TR><TD>Tamanho máximo de um banco de dados?</TD><TD>ilimitado (existem bancos de dados de 32 TB)</TD></TR> -<TR><TD>Tamanho máximo de uma tabela?</TD><TD>32 TB</TD></TR> -<TR><TD>Tamanho máximo de um registro?</TD><TD>400 GB</TD></TR> -<TR><TD>Tamanho máximo de um campo?</TD><TD>1 GB</TD></TR> -<TR><TD>Número máximo de registros em uma tabela?</TD><TD>ilimitado</TD></TR> -<TR><TD>Número máximo de colunas em uma tabela?</TD><TD>250-1600 dependendo dos tipos das colunas</TD></TR> -<TR><TD>Número máximo de índices em uma tabela?</TD><TD>ilimitado</TD></TR> -</TABLE> -</BLOCKQUOTE> - - <P>É claro, que eles não são ilimitados, mas limitados - ao espaço em disco disponível e espaço em memória/swap. - A Performance será penalizada quando estes valores se tornarem grandes.</P> - - <P>O tamanho máximo de uma tabela com 32 TB não requer suporte a - arquivos grandes do sistema operacional. Tabelas grandes são armazenadas - como múltiplos arquivos de 1 GB então o limite do sistema de - arquivos não é importante.</P> - - <P>O tamanho máximo de uma tabela, o tamanho de um registro e o número - máximo de colunas podem ser quadruplicados aumentando-se o tamanho padrão - do bloco para 32k. O tamanho máximo de uma tabela pode também ser aumentado utilizando - particionamento de tabela.</P> - - <P>Uma limitação é que índices não podem ser criados em colunas maiores do que - 2.000 caracteres. Felizmente, tais índices são raramente necessários. Unicidade é - melhor garantida por um índice de uma função de um hash MD5 de uma coluna longa, e - indexação de texto longo permite a busca de palavras dentro da coluna.</P> - - <H3 id="item4.5">4.5) Quanto espaço em disco é necessário para armazenar dados de um arquivo texto?</H3> - - <P>Um banco de dados PostgreSQL irá requerer até cinco vezes a quantidade de espaço requerida para armazenar dados em um arquivo texto.</P> - - <P>Como um exemplo, considere um arquivo com 100.000 linhas contendo um inteiro e uma descrição em cada linha. Suponha que o tamanho médio da descrição é de vinte bytes. O arquivo terá 2,8 MB. O tamanho do arquivo do banco de dados PostgreSQL que contém esses dados pode ser estimado em 5,2 MB:</P> -<PRE> - 24 bytes: cada cabeçalho de registro (aproximadamente) - 24 bytes: um campo int e um campo texto - + 4 bytes: ponteiro na página para a tupla - ------------------------------------------- - 52 bytes por registro - - O tamanho de uma página de dados no PostgreSQL é 8192 bytes (8 KB), então: - - 8192 bytes por página - ------------------------ = 158 registros por página do banco de dados (arredondado para baixo) - 52 bytes por registro - - 100000 registros de dados - ---------------------------- = 633 páginas do banco de dados (arredondado para cima) - 158 registros por página - -633 páginas do banco de dados * 8192 bytes por página = 5.185.536 bytes (5,2 MB) -</PRE> - - <P>Índices não requerem muito espaço, mas contém - dados que foram indexados, então eles podem ocupar algum espaço.</P> - - <P><SMALL>NULL</SMALL>s são armazenados como bitmaps, então eles - utilizam muito pouco espaço.</P> - - <H3 id="item4.6">4.6) Por que minhas consultas estão lentas? Por que elas não estão utilizando meus índices?</H3> - - <P>Índices não são utilizados por toda consulta. Índices são utilizados somente - se a tabela é maior do que um tamanho mínimo, e a consulta seleciona somente uma - pequena porcentagem dos registros da tabela. Isto porque o acesso randômico ao - disco causado pela busca indexada pode ser mais lento do que uma leitura ao longo - da tabela ou busca sequencial.</P> - - <P>Para determinar se um índice deveria ser utilizado, o PostgreSQL deve ter - estatísticas sobre a tabela. Estas estatísticas são coletadas utilizando o - <SMALL>VACUUM ANALYZE</SMALL> ou simplesmente o <SMALL>ANALYZE</SMALL>. - Utilizando estatísticas, o otimizador sbae quantos registros estão na tabela, - e pode melhor determinar se índices deveriam ser utilizados. - Estatísticas também são úteis para determinar a ordem de junção ótima e métodos - de junção. Coleção de estatísticas deveriam ser feitas periodicamente a - medida que o conteúdo da tabela muda.</P> - - <P>Índices não são normalmente utilizados para <SMALL>ORDER BY</SMALL> ou para - fazer junções. Uma busca sequencial seguido por uma ordenação explícita é - geralmente mais rápida do que uma busca indexada em uma tabela grande. - Contudo, <SMALL>LIMIT</SMALL> combinado com <SMALL>ORDER BY</SMALL> - frequentemente utilizará índice porque somente uma pequena porção da tabela - será retornada.</P> - - <P>Se você acredita que o otimizador está incorreto ao escolher uma busca - sequencial, utilize <CODE>SET enable_seqscan TO 'off'</CODE> e execute a - consulta novamente para ver se uma busca indexada é realmente mais rápida.</P> - - <P>Ao utilizar operadores curinga tais como <SMALL>LIKE</SMALL> ou <I>~</I>, - índices podem ser utilizados somente em algumas condições:</P> - <UL> - <LI>O início da cadeia de caracteres da busca deve ser iniciar com uma - cadeia de caracteres, i.e. - <UL> - <LI>modelos <SMALL>LIKE</SMALL> não devem iniciar com <I>%</I>.</LI> - <LI>modelos <I>~</I> (expressões regulares) devem iniciar com <I>^</I>.</LI> - </UL></LI> - <LI>A cadeia de caracteres utilizada na busca não pode iniciar com a classe de - caracteres e.g. [a-e].</LI> - <LI>Busca que não diferenciam maiúsculas de minúsculas tais como <SMALL>ILIKE</SMALL> e - <I>~*</I> não utilizam índices. Em vez disso, utilize índice de expressão, que - é descrito na seção <a href="#item4.8">4.8</a>.</LI> - <LI>O idioma padrão <I>C</I> deve ser usando durante o <i>initdb</i> - porque não é possível saber o próximo caracter em idiomas que não sejam o C. - Você pode criar um índice especial <CODE>text_pattern_ops</CODE> para tais casos - que funcionam somente para indexação com <SMALL>LIKE</SMALL>. Também é - possível utilizar indexação de busca textual para buscas por palavras. - </LI> - </UL> - - <P>Em versões anteriores a 8.0, índices frequentemente não podem ser utilizados - a menos que os tipos de dados correspondam aos tipos de coluna do índice. Isto era - particularmente verdadeiro para índices de coluna int2, int8 e numeric.</P> - - <H3 id="item4.7">4.7) Como eu vejo como o otimizador de consulta está avaliando a minha consulta?</H3> - - <P>Veja o comando <SMALL>EXPLAIN</SMALL> no manual.</P> - - <H3 id="item4.8">4.8) Como eu faço buscas com expressões regulares - e buscas com expressões regulares sem diferenciar maiúsculas de minúsculas? Como eu - utilizo um índice para buscas que não diferenciam maiúsculas de minúsculas?</H3> - - <P>O operador <I>~</I> faz avaliação de expressões regulares, - e <I>~*</I> faz avaliação não sensível a maiúsculas - de expressões regulares. A variante não sensível a maiúsculas - do <SMALL>LIKE</SMALL> é chamada de <SMALL>ILIKE</SMALL>.</P> - - <P>Comparações de igualdade não sensíveis a maiúsculas - são normalmente expressadas como:</P> -<PRE> - SELECT * - FROM tab - WHERE lower(col) = 'abc'; -</PRE> - Isso não irá utilizar o índice padrão. Contudo, se - você criar um índice de expressão, ele será utilizado: -<PRE> - CREATE INDEX tabindex ON tab (lower(col)); -</PRE> - <P>Se o índice acima é criado como <SMALL>UNIQUE</SMALL>, embora a - coluna possa armazenar caracteres maiúsculos e minúsculos, ele não - pode ter valores idênticos que diferem apenas em letras maiúsculas e minúsculas. - Para forçar uma letra maiúscula ou minúscula a ser armazenada na coluna, utilize - uma restrição <SMALL>CHECK</SMALL> ou um gatilho.</P> - - <H3 id="item4.9">4.9) Em uma consulta, como eu detecto se um campo é <SMALL>NULL</SMALL>? Como eu posso concatenar possíveis <SMALL>NULL</SMALL>s? Como eu posso ordenar por um campo que é <SMALL>NULL</SMALL> ou não?</H3> - - <P>Você testa a coluna com <SMALL>IS NULL</SMALL> e <SMALL>IS - NOT NULL</SMALL>, como a seguir:</P> - -<PRE> - SELECT * - FROM tab - WHERE col IS NULL; -</PRE> - - <P>Para concatenar com possíveis <SMALL>NULL</SMALL>s, utilize <I>COALESCE()</I>, assim:</P> -<PRE> - SELECT COALESCE(col1, '') || COALESCE(col2, '') - FROM tab -</PRE> - - <P>Para ordenar pelo status <SMALL>NULL</SMALL>, utilize os modificadores - <SMALL>IS NULL</SMALL> e <SMALL>IS NOT NULL</SMALL> na sua cláusula - <SMALL>ORDER BY</SMALL>. Coisas que são <I>verdadeiro</I> serão ordenadas acima - das coisas que são <I>falso</I>, então a consulta a seguir irá colocar - entradas NULL no início da lista de resultados:</P> - -<PRE> - SELECT * - FROM tab - ORDER BY (col IS NOT NULL) -</PRE> - - <H3 id="item4.10">4.10) Qual é a diferença entre os vários tipos de dado de caracteres?</H3> -<BLOCKQUOTE> -<TABLE> -<TR><TH>Tipo</TH><TH>Nome Interno</TH><TH>Observação</TH></TR> -<TR><TD>VARCHAR(n)</TD><TD>varchar</TD><TD>tamanho especifica o tamanho -máximo, sem preenchimento</TD></TR> -<TR><TD>CHAR(n)</TD><TD>bpchar</TD><TD>preenchimento em branco para -comprimento fixo específico</TD></TR> -<TR><TD>TEXT</TD><TD>text</TD><TD>nenhum limite superior específico no -comprimento</TD></TR> -<TR><TD>BYTEA</TD><TD>bytea</TD><TD>vetor de bytes de comprimento variável -(seguro a byte nulo)</TD></TR> -<TR><TD>"char"</TD><TD>char</TD><TD>um caracter</TD></TR> -</TABLE> -</BLOCKQUOTE> - - <P>Você verá o nome interno quando examinar o catálogo do sistema e em algumas mensagens de erro.</P> - - <P>Os primeiros quatro tipos acima são do tipo "varlena" (i.e., os primeiros quatro bytes no disco são o comprimento seguido pelos dados). Consequentemente o espaço atual utilizado é ligeiramente maior do que o tamanho declarado. Contudo, valores longos são também sujeitos a compressão, então o espaço em disco pode também ser bem menor do que o esperado.</P> - - <SMALL>VARCHAR(n)</SMALL> é melhor quando está armazenando cadeias de caracteres de comprimento variável e há um limite de tamanho desta cadeia. <SMALL>TEXT</SMALL> é para cadeias de caracteres de comprimento ilimitado, com o máximo de um gigabyte. - <P><SMALL>CHAR(n)</SMALL> é para armazenar cadeias de caracteres que são todas do mesmo tamanho. <SMALL>CHAR(n)</SMALL> preenche com espaços em branco até o tamanho especificado, enquanto o <SMALL>VARCHAR(n)</SMALL> armazena somente os caracteres fornecidos. <SMALL>BYTEA</SMALL> é para armazenar dados binários, particularmente valores que incluem bytes <SMALL>NULL</SMALL>. Todos os tipos descritos aqui tem características de performance similares.</P> - - <H3 id="item4.11.1">4.11.1) Como eu crio um campo serial/auto incremento?</H3> - - <P>PostgreSQL suporta o tipo de dados <SMALL>SERIAL</SMALL>. Ele cria - automaticamente uma sequência. Por exemplo:</P> -<PRE> - CREATE TABLE pessoa ( - id SERIAL, - nome TEXT - ); -</PRE> - - é automaticamente traduzido em: -<PRE> - CREATE SEQUENCE pessoa_id_seq; - CREATE TABLE pessoa ( - id INT4 NOT NULL DEFAULT nextval('pessoa_id_seq'), - nome TEXT - ); -</PRE> - - <P>Sequências automaticamente criadas são nomeadas como - <<i>tabela</i>>_<<i>colunaserial</i>>_<i>seq</i>, onde - <i>tabela</i> e <i>colunaserial</i> são os nomes da tabela e - da coluna serial, respectivamente. Veja a página sobre - <I>create_sequence</I> no manual para obter informações - adicionais sobre sequências. - - <H3 id="item4.11.2">4.11.2) Como eu consigo o valor de um campo - <SMALL>SERIAL</SMALL>?</H3> - - <P>A maneira mais simples de obter o próximo valor <SMALL>SERIAL</SMALL> - de uma sequência é com <SMALL>RETURNING</SMALL>. Utilizando o - exemplo da tabela em <A href="#item4.11.1">4.11.1</A>, ele ficaria assim: - -<PRE> - INSERT INTO pessoa (nome) VALUES ('Blaise Pascal') RETURNING id; -</PRE> - - Você também pode chamar <I>nextval()</I> e utilizar o valor no - <SMALL>INSERT</SMALL> ou chamar <I>currval()</I> <I>após</I> o - <SMALL>INSERT</SMALL>. - - <H3 id="item4.11.3">4.11.3) <I>currval()</I> não lida com condição de corrida com outros usuários?</H3> - - <P>Não. <I>currval()</I> retorna o valor atual atribuido pela sua sessão, e não por todas as sessões.</P> - - <H3 id="item4.11.4">4.11.4) Por que os números da minha sequência não são reutilizados quando uma transação é abortada? Por que há intervalos nos números da minha sequência/coluna SERIAL?</H3> - - <P>Para melhorar a concorrência, valores da sequência são atribuídos a transações correntes e não são travados até que a transação seja finalizada. Isso causa intervalos na numeração por causa de transações abortadas.</P> - - <H3 id="item4.12">4.12) O que é um <SMALL>OID</SMALL>? O que é um <SMALL>CTID</SMALL>?</H3> - - <P>Se uma tabela é criada com <SMALL>WITH OIDS</SMALL>, cada registro recebe um <SMALL>OID</SMALL> único. - O<SMALL>ID</SMALL>s são automaticamente atribuídos como inteiros de 4 bytes - que são únicos ao longo de toda instalação. Contudo, eles são limitados em - 4 bilhões e, então, os O<SMALL>ID</SMALL>s começam a ser duplicados. O PostgreSQL - utiliza <SMALL>OID</SMALL>s para ligar as tabelas do sistema.</P> - - <P>Para numerar registros nas tabelas do usuários, é melhor utilizar - <SMALL>SERIAL</SMALL> ao invés de O<SMALL>ID</SMALL>s porque - sequências <SMALL>SERIAL</SMALL> são únicas somente em uma tabela; e - são menos propícias a atingir o limite. - <SMALL>SERIAL8</SMALL> está disponível para armazenar valores de sequências - com oito bytes.</P> - - <P>C<SMALL>TID</SMALL>s são utilizados para identificar registros físicos - específicos com valores de block e deslocamento. C<SMALL>TID</SMALL>s mudam - após registros serem modificados ou recarregados. Eles são utilizados por - índices para apontar registros físicos.</P> - - <H3 id="item4.13">4.13) Por que eu recebo o erro <I>"ERROR: Memory exhausted in AllocSetAlloc()"</I>?</H3> - - <P>Você provavelmente está sem memória virtual no seu sistema, ou o seu núcleo (kernel) tem um limite baixo para certos recursos. Tente isto antes de iniciar o servidor PostgreSQL:</P> -<PRE> - ulimit -d 262144 - limit datasize 256m -</PRE> - - Dependendo da sua shell, somente um desses comando terá sucesso, mas ele definirá o segmento de dados do seu processo com um limite maior e talvez permita que a consulta seja feita. Este comando é aplicado ao processo atual e todos os subprocessos criados depois do comando ser executado. Se você tiver problemas com o cliente <SMALL>SQL</SMALL> porque o processo servidor retornou muitos dados, tente-o antes de iniciar o cliente. - - <H3 id="item4.14">4.14) Como eu informo qual versão do PostgreSQL eu estou utilizando?</H3> - - <P>No <I>psql</I>, digite <CODE>SELECT version();</CODE></P> - - <H3 id="item4.15">4.15) Como eu crio uma coluna que conterá por padrão a hora atual?</H3> - - <P>Utilize <I>CURRENT_TIMESTAMP</I>:</P> -<PRE> - CREATE TABLE teste (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP ); -</PRE> - - <H3 id="item4.16">4.16) Como eu faço uma junção externa (outer join)?</H3> - - <P>PostgreSQL suporta junções externas utilizando a sintaxe padrão do SQL. Aqui temos dois exemplos:</P> -<PRE> - SELECT * - FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col); -</PRE> - or -<PRE> - SELECT * - FROM t1 LEFT OUTER JOIN t2 USING (col); -</PRE> - - <P>Essas duas consultas indênticas juntam t1.col com t2.col, e também - retornam qualquer registro que não foi juntado em t1 (aqueles que não - combinaram com t2). Uma junção a direita <SMALL>RIGHT</SMALL> - adicionaria registros que não foram juntados da tabela t2. - Uma junção completa (<SMALL>FULL</SMALL>) retornaria os registros - combinados mais todos os registros não combinados de t1 e t2. - A palavra <SMALL>OUTER</SMALL> é opcional e é assumida nas - junções <SMALL>LEFT</SMALL>, <SMALL>RIGHT</SMALL> e <SMALL>FULL</SMALL>. - Junções ordinárias são chamadas junções - internas (<SMALL>INNER</SMALL>).</P> - - <H3 id="item4.17">4.17) Como eu faço consultas utilizando múltiplos bancos de dados?</H3> - - <P>Não há outra maneira de consultar um banco de dados caso ele - não seja o atual. Porque o PostgreSQL carrega catálogos do sistema - específicos do banco de dados, é incerto como uma consulta em banco - de dados distintos pode se comportar.</P> - - <P><I>contrib/dblink</I> permite consultas em bancos de dados distintos utilizando - chamadas de funções. É claro, que um cliente pode fazer - conexões simultâneas em bancos de dados diferentes e juntar os - resultados no cliente.</P> - - <H3 id="item4.18">4.18) Como eu retorno múltiplos registros ou colunas de uma função?</H3> - - <P>É fácil utilizando funções que retornam conjunto, - <a href="http://www.postgresql.org/docs/techdocs.17"> - http://www.postgresql.org/docs/techdocs.17</a>.</P> - - <H3 id="item4.19">4.19) Por que eu obtenho erros "relation with OID ###### - does not exist" ao acessar tabelas temporárias em funções PL/PgSQL?</H3> - - <P>Em versões do PostgreSQL < 8.3, PL/PgSQL armazena o conteúdo da função, e o efeito indesejado é que se uma função PL/PgSQL acessa uma tabela temporária, e aquela tabela é removida e criada novamente, e a função é chamada novamente, a função irá falhar porque o conteúdo armazenado da função ainda apontará para a tabela temporária antiga. A solução é utilizar o <SMALL>EXECUTE</SMALL> para acesso a tabelas temporárias no PL/PgSQL. Isto irá fazer com que a consulta seja avaliada toda vez.</P> - - <P>Este problema não ocorre no PostgreSQL 8.3 ou superior.</P> - - <H3 id="item4.20">4.20) Quais soluções de replicação estão disponíveis?</H3> - - <P>Embora "replicação" seja um termo simples, há várias tecnologias para fazer - replicação, com vantagens e desvantagens para cada um.</P> - - <P>Replicação mestre/escravo permite que um mestre receba consultas de leitura e - escrita, enquanto os escravos só podem aceitar leitura/consultas <SMALL>SELECT</SMALL>. - A solução mais popular de replicação mestre-escravo para PostgreSQL disponível livremente - é <A href="http://main.slony.info">Slony-I</A>.</P> - - <P>Replicação com múltiplos mestres permite que consultas leitura/escrita sejam - enviadas para múltiplos computadores replicadores. Esta capacidade também tem - um sério impacto na performance por causa da necessidade de sincronizar as mudanças - entre os servidores. <A href="http://pgfoundry.org/projects/pgcluster/">PGCluster</a> - é a solução mais popular disponível livremente para PostgreSQL.</P> - - <P>Há também soluções de replicação comerciais e baseadas em hardware disponíveis - que suportam uma variedade de modelos de replicação.</P> - - <H3 id="item4.21">4.21) Por que os nomes de minhas tabelas e colunas não - são reconhecidos em minha consulta? Por que as maiúsculas não são preservadas?</H3> - - <P>A causa mais comum de nomes desconhecidos é o uso de aspas ao redor dos nomes da tabela ou coluna - durante a criação da tabela. Ao utilizar aspas, nomes de tabela e coluna - (chamados de identificadores) são armazenados <a - href="http://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS"> - como especificado</a>, significando que você deve utilizar aspas quando se - referir aos nomes na consulta. Algumas interfaces, como pgAdmin, - automaticamente colocam aspas nos identificadores durante a criação da tabela. - Então, para identificadores serem reconhecidos, você deve: - <UL> - <LI>Evitar colocar aspas no identificador ao criar tabelas</LI> - <LI>Utilizar somente caracteres minúsculos em identificadores</LI> - <LI>Colocar aspas em identificadores ao referenciá-los nas consultas</LI> - </UL> - - </BODY> -</HTML> - diff --git a/doc/src/FAQ/FAQ_chinese_simp.html b/doc/src/FAQ/FAQ_chinese_simp.html deleted file mode 100644 index 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:[email protected]">[email protected]</a>)<br/>
- 中文版维护人员:Daojing.Zhou(<a href="mailto:[email protected]">[email protected]</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:[email protected]">[email protected]</a>)<br/>
- 正體中文版維護人員:郭朝益(ChaoYi, Kuo)(<a href="mailto:[email protected]">[email protected]</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 ([email protected]) -</p> -<p>Přeložil: Pavel Stěhule ([email protected]) -</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:[email protected]">[email protected]</A></font></P> -<P dir="rtl"><span lang="fa"><font face="Tahoma">نگهدارنده فايل به زبان فارسي: -</font></span><font face="Tahoma"><a href="mailto:[email protected]"> [email protected]</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:[email protected]"> [email protected]</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:[email protected]">[email protected]</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:[email protected]"> [email protected]</A></font></P> -<P dir="rtl"><font face="Tahoma">همچنين يك گروه پستي هم به صورت ارسال چكيده -پيامها وجود دارد. براي عضو شدن در اين گروه يك نامه با محتويات زير به این آدرس -ارسال كنيد. <A -href="mailto:[email protected]"> -</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:[email protected]"> -ارسال كنيد.</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:[email protected]"><font size="3">[email protected]</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:[email protected]">[email protected]</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>Derni�re mise � jour : vendredi 14 novembre 2004 16:32:47</P> - - <P>Mainteneur actuel : Bruce Momjian (<A href= - "mailto:[email protected]">[email protected]</A>)<BR> - </P> - - <P>La plus r�cente version de ce document est disponible sur <A - href= - "http://www.PostgreSQL.org/docs/faqs/FAQ.html">http://www.PostgreSQL.org/docs/faqs/FAQ.html</A>.</P> - - <P>Les questions sp�cifiques � la plateforme sont r�pondues sur <A href= - "http://www.PostgreSQL.org/docs/index.html">http://www.PostgreSQL.org/docs/index.html</A>.</P> - <HR> - - <H2 align="center">Questions g�n�rales</H2> - <A href="#1.1">1.1</A>) Qu'est ce que PostgreSQL ? Comment le prononcer ?<BR> - <A href="#1.2">1.2</A>) Quelle est la licence de PostgreSQL ?<BR> - <A href="#1.3">1.3</A>) Sous quels environnements Unix PostgreSQL tourne-t-il ?<BR> - <A href="#1.4">1.4</A>) Sous quels environnements non-Unix PostgreSQL tourne-t-il ?<BR> - <A href="#1.5">1.5</A>) O� puis-je me procurer PostgreSQL ?<BR> - <A href="#1.6">1.6</A>) O� puis-je obtenir du support ?<BR> - <A href="#1.7">1.7</A>) Quelle est la derni�re version ?<BR> - <A href="#1.8">1.8</A>) Quelle documentation est disponible ?<BR> - <A href="#1.9">1.9</A>) Comment savoir quels sont les bogues connus ou les fonctionnalit�s manquantes ?<BR> - <A href="#1.10">1.10</A>) Comment puis-je apprendre le <SMALL>SQL</SMALL> ?<BR> - <A href="#1.11">1.11</A>) PostgreSQL est-il compatible an 2000 ?<BR> - <A href="#1.12">1.12</A>) Comment puis-je rejoindre l'�quipe de d�veloppement ?<BR> - <A href="#1.13">1.13</A>) Comment dois-je soumettre un rapport de - bogue ?<BR> - <A href="#1.14">1.14</A>) Comment PostgreSQL se compare-t'il � d'autres - <SMALL>SGBD</SMALL> ?<BR> - <A href="#1.15">1.15</A>) Comment puis-je aider financi�rement PostgreSQL ?<BR> - - - <H2 align="center">Questions sur le client utilisateur</H2> - <A href="#2.1">2.1</A>) Y a-t-il des pilotes <SMALL>ODBC</SMALL> pour - PostgreSQL ?<BR> - <A href="#2.2">2.2</A>) Quels outils sont disponibles pour utiliser - PostgreSQL avec des pages Web ?<BR> - <A href="#2.3">2.3</A>) PostgreSQL a-t-il une interface graphique ?<BR> - <A href="#2.4">2.4</A>) Quels langages sont disponibles pour - communiquer avec PostgreSQL ?<BR> - - - <H2 align="center">Questions administratives</H2> - <A href="#3.1">3.1</A>) Comment installer PostgreSQL ailleurs que sous <I>/usr/local/pgsql</I> ?<BR> - <A href="#3.2">3.2</A>) Quand je lance <I>postmaster</I>, j'obtiens un <I>Bad System Call</I> ou un message <I>core dumped</I>. Pourquoi ?<BR> - <A href="#3.3">3.3</A>) Quand je lance <I>postmaster</I>, j'obtiens des erreurs <I>IpcMemoryCreate</I>. Pourquoi ?<BR> - <A href="#3.4">3.4</A>) Quand je lance <I>postmaster</I>, j'obtiens des erreurs <I>IpcSemaphoreCreate</I>. Pourquoi ?<BR> - <A href="#3.5">3.5</A>) Comment contr�ler les connexions d'autres machines ?<BR> - <A href="#3.6">3.6</A>) Comment r�gler le moteur de la base de donn�es pour de meilleures performances ?<BR> - <A href="#3.7">3.7</A>) Quelles fonctionalit�s de d�boguage sont disponibles ?<BR> - <A href="#3.8">3.8</A>) Pourquoi est-ce que j'obtiens des messages <I>Sorry, too many clients</I> quand je me connecte ?<BR> - <A href="#3.9">3.9</A>) Que contient le r�pertoire <I>pgsql_tmp</I> ?<BR> - <A href="#3.10">3.10</A>) Pourquoi ai-je besoin de faire une sauvegarde des bases et de restaurer pour mettre a jour les versions de PostgreSQL ?<BR> - <A href="#3.11">3.11</A>) Quels mat�riels dois-je utiliser ?<BR> - - - <H2 align="center">Questions fonctionnelles</H2> - <A href="#4.1">4.1</A>) Quelle est la diff�rence entre curseur binaire - et curseur normal ?<BR> - <A href="#4.2">4.2</A>) Comment faire un <SMALL>SELECT</SMALL> seulement - sur les premi�res lignes d'une requ�te ? Sur une ligne al�atoire ?<BR> - <A href="#4.3">4.3</A>) Comment obtenir une liste des tables ou - d'autres choses que je vois dans <I>psql</I> ?<BR> - <A href="#4.4">4.4</A>) Comment supprime-t-on une colonne d'une table, - ou comment change-t-on son type de donn�es ?<BR> - <A href="#4.5">4.5</A>) Quelle est la taille maximale pour une ligne, - une table et une base de donn�es ?<BR> - <A href="#4.6">4.6</A>) Combien d'espace disque faut-il pour stocker - les donn�es d'un fichier texte typique ?<BR> - <A href="#4.7">4.7</A>) Comment puis-je savoir quels index, tables, - bases de donn�es et utilisateurs sont d�finis ?<BR> - <A href="#4.8">4.8</A>) Mes requ�tes sont lentes ou ne font pas usage - des index. Pourquoi ?<BR> - <A href="#4.9">4.9</A>) Comment puis-je savoir si l'optimiseur �value - mes requ�tes ?<BR> - <A href="#4.10">4.10</A>) Qu'est-ce qu'un index R-tree ?<BR> - <A href="#4.11">4.11</A>) Qu'est-ce que l'optimiseur g�n�tique de - requ�tes ?<BR> - <A href="#4.12">4.12</A>) Comment puis-je r�aliser des recherches par des - expressions rationnelles ainsi que des recherches non sensibles � la - casse ? Comment puis-je utiliser un index lors de recherches non - sensibles � la casse ?<BR> - <A href="#4.13">4.13</A>) Comment puis-je d�tecter si un champ est - <SMALL>NULL</SMALL> dans une requ�te ?<BR> - <A href="#4.14">4.14</A>) Quelle sont les diff�rences entre les nombreux - types de caract�res ?<BR> - <A href="#4.15.1">4.15.1</A>) Comment puis-je cr�er un champ s�rie, - c'est-�-dire s'incr�mentant automatiquement ?<BR> - <A href="#4.15.2">4.15.2</A>) Comment puis-je obtenir la valeur d'un - <SMALL>SERIAL</SMALL> suite � une insertion ?<BR> - <A href="#4.15.3">4.15.3</A>) Est-ce que <I>currval()</I> et - <I>nextval()</I> n'am�nent pas des probl�mes lorsque plusieurs utilisateurs - les lancent en m�me temps ?<BR> - <A href="#4.15.4">4.15.4</A>) Pourquoi mes num�ros de s�quences ne sont pas - r�-utilis�s lors d'une annulation de transaction ? Pourquoi - existe-t'il des trous dans la num�rotation de ma colonne s�quentielle - (SERIAL) ?<BR> - <A href="#4.16">4.16</A>) Qu'est-ce qu'un <SMALL>OID</SMALL>? Qu'est-ce qu'un <SMALL>TID</SMALL> ?<BR> - <A href="#4.17">4.17</A>) A quoi correspond certains termes utilis�s avec - PostgreSQL ?<BR> - <A href="#4.18">4.18</A>) Pourquoi ai-je l'erreur <I>ERROR: - Memory exhausted in AllocSetAlloc()</I> ?<BR> - <A href="#4.19">4.19</A>) Comment puis-je conna�tre la version de - PostgreSQL que j'utilise ?<BR> - <A href="#4.20">4.20</A>) Pourquoi ai-je <I>invalid large obj - descriptor</I> lors d'op�rations avec des gros objets ?<BR> - <A href="#4.21">4.21</A>) Comment puis-je cr�er une colonne qui aura par - d�faut l'heure actuelle comme valeur ?<BR> - <A href="#4.22">4.22</A>) Pourquoi mes sous-requ�tes utilisant - <CODE><SMALL>IN</SMALL></CODE> sont-elles si lentes ?<BR> - <A href="#4.23">4.23</A>) Comment puis-je r�aliser une jointure - externe ?<BR> - <A href="#4.24">4.24</A>) Comment puis-je lancer des requ�tes utilisant - plusieurs bases de donn�es ??<BR> - <A href="#4.25">4.25</A>) Comment puis-je renvoyer plusieurs lignes ou - colonnes � partir d'une fonction ?<BR> - <A href="#4.26">4.26</A>) Pourquoi ne puis-je pas cr�er/supprimer des - tables temporaires dans les fonctions PL/PgSQL de fa�on stable ?<BR> - <A href="#4.27">4.27</A>) Quelles options de cryptage sont - disponibles ?<BR> - - <H2 align="center">Etendre PostgreSQL</H2> - <A href="#5.1">5.1</A>) J'ai �crit une fonction utilisateur. Lorsque je l'ex�cute avec - <I>psql</I>, pourquoi cela finit-il avec un "dump core" ?<BR> - <A href="#5.2">5.2</A>) Comment puis-je contribuer avec de nouveaux types et fonctions - pour PostgreSQL ?<BR> - <A href="#5.3">5.3</A>) Comment puis-je �crire une fonction C pour r�cup�rer une - ligne ?<BR> - <A href="#5.4">5.4</A>) J'ai modifi� un fichier source. Pourquoi la modification - n'est-elle pas visible apr�s la recompilation ?<BR> - - <HR> - - <H2 align="center">Questions g�n�rales</H2> - - <H4><A name="1.1">1.1</A>) Qu'est ce que PostgreSQL ? Comment - le prononcer ?</H4> - - <P>PostgreSQL se prononce <I>Post-Gres-Q-L</I>. Un fichier audio est - disponible sur <A - href="http://www.postgresql.org/postgresql.mp3">http://www.postgresql.org/postgresql.mp3</A> - pour ceux souhaitant entendre la prononciation.</P> - - <P>PostgreSQL est une am�lioration du syst�me de gestion de bases - de donn�es POSTGRES (et est toujours quelque fois appel� "Postgres"), - un prototype de recherche de - <SMALL>SGBD</SMALL> de prochaine g�n�ration. PostgreSQL garde le - puissant mod�le de donn�es et les types de donn�es riches de - POSTGRES, mais remplace le langage de requ�tes PostQuel par un - sous-ensemble �tendu de <SMALL>SQL</SMALL>. PostgreSQL est gratuit - et les sources complets sont disponibles.</P> - - <P> PostgreSQL est �crit par une �quipe de d�veloppeurs qui sont - tous inscrits � la liste de diffusion de d�veloppement de - PostgreSQL. Le coordinateur actuel est Marc G. Fournier (<A href= - "mailto:[email protected]">[email protected]</A> et voir - la section <a href="#1.6">1.6</a> pour contacter les - d�veloppeurs). Cette �quipe est responsable de tout le - d�veloppement de PostgreSQL. C'est un projet soutenu par une - communaut� sans �tre contr�l� par une soci�t�. Pour y contribuer, - voir la FAQ des d�veloppeurs sur <A - href="http://www.postgresql.org/docs/faqs/FAQ_DEV.html">http://www.postgresql.org/docs/faqs/FAQ_DEV.html</A>.</P> - - <P>Les auteurs de PostgreSQL 1.01 �taient Andrew Yu et Jolly Chen. - Beaucoup d'autres personnes ont contribu� au portage, aux tests, - au d�boguage et � l'am�lioration du code. Le code de Postgres - original, duquel PostgreSQL est d�riv�, �tait le fruit de - l'effort de nombreux �tudiants dipl�m�s et non dipl�m�s, et de - programmeurs travaillant sous la direction du Professeur Michael - Stonebraker � l'universit� de Californie, Berkeley.</P> - - <P>Le nom original du logiciel � Berkeley �tait Postgres. Quand le - <SMALL>SQL</SMALL> fut ajout� en 1995, le nom a d� �tre chang� en - Postgres95. Fin 1996, le nom fut chang� en PostgreSQL.</P> - - <H4><A name="1.2">1.2</A>) Quelle est la licence de PostgreSQL ?</H4> - - <P>PostgreSQL est distribu� sous la licence suivante :</P> - - <P>PostgreSQL Data Base Management System</P> - - <P>Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group - Portions Copyright (c) 1994-6 Regents of the University of California</P> - - <P>Permission to use, copy, modify, and distribute this software - and its documentation for any purpose, without fee, and without a - written agreement is hereby granted, provided that the above - copyright notice and this paragraph and the following two - paragraphs appear in all copies.</P> - - <P>IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY - PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL - DAMAGES, INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS - SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF - CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</P> - - <P>THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY - WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE - SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE - UNIVERSITY OF CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, - SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.</P> - - <P>La licence ci-dessus est la licence BSD, une licence open-source - classique.</P> - - <H4><A name="1.3">1.3</A>) Sous quels environnements Unix PostgreSQL tourne-t-il ?</H4> - - <P>En g�n�ral, tout environnement compatible Unix moderne devrait - pouvoir faire fonctionner PostgreSQL. Les environnements qui ont �t� - test�s explicitement sont list�s dans les instructions - d'installation.</P> - - <H4><A name="1.4">1.4</A>) Sous quels environnements non Unix PostgreSQL fonctionne-t'il ?</H4> - - - <p>� partir de la version 8.0, PostgreSQL fonctionne nativement sur les - syst�mes d'exploitation Microsoft Windows � base NT comme Win2000, WinXP et Win2003. - Un installeur est disponible sur - <a href="http://pgfoundry.org/projects/pginstaller">http://pgfoundry.org/projects/pginstaller</a>.</p> - - <p>Il existe aussi un port sur Novell Netware sur - <a href="http://forge.novell.com">http://forge.novell.com</a>.</p> - - <H4><A name="1.5">1.5</A>) O� puis-je me procurer PostgreSQL ?</H4> - - <P>Le site FTP anonyme principal de PostgreSQL est <A href= - "ftp://ftp.PostgreSQL.org/pub">ftp://ftp.PostgreSQL.org/pub</A>. - Pour les sites miroirs, voir notre site web principal.</P> - - <H4><A name="1.6">1.6</A>) O� puis-je obtenir du support ?</H4> - - <P>La liste de diffusion principale est <A href= - "mailto:[email protected]">[email protected]</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:[email protected]">[email protected]</A>.</P> - - <P>Il existe aussi un recueil de la liste. Pour s'y inscrire, - envoyez un courriel � <A href= - "mailto:[email protected]">[email protected]</A> - avec dans le corps :</P> -<PRE> - subscribe - end -</PRE> - - Les recueils sont envoy�s aux membres de cette liste d�s que la - liste principale a re�u 30 Ko de messages. - - <P>Une liste de diffusion de bogues est disponible. Pour s'y inscrire, - envoyer un courriel � <A href= - "mailto:[email protected]">[email protected]</A> - avec dans le corps :</P> -<PRE> - subscribe - end -</PRE> - - Une liste de diffusion pour les d�veloppeurs est aussi disponible. Pour s'y - inscrire, envoyez un courriel � <A href= - "mailto:[email protected]">[email protected]</A> - avec dans le corps : -<PRE> - subscribe - end -</PRE> - - <P>Vous pouvez trouver d'autres listes et informations sur - PostgreSQL sur le site web de PostgreSQL :</P> - - <BLOCKQUOTE> - <p><A href="http://www.PostgreSQL.org">http://www.PostgreSQL.org</A></p> - </BLOCKQUOTE> - - <P>Il y a aussi un canal IRC sur Freenode et EFNet, le canal - <I>#PostgreSQL</I>. Vous pouvez utiliser la commande Unix - <CODE>irc -c '#PostgreSQL' "$USER" irc.phoenix.net</CODE> ou - <CODE>irc -c '#PostgreSQL' "$USER" irc.freenode.net</CODE>.</P> - - <P>Une liste de soci�t�s pouvant fournir un support commercial - est disponible sur <A href= - "http://techdocs.postgresql.org/companies.php">http://techdocs.postgresql.org/companies.php</A>.</P> - - <H4><A name="1.7">1.7</A>) Quelle est la derni�re version ?</H4> - - <P>La derni�re version de PostgreSQL est la version 7.4.5.</P> - - <P>Nous projetons de sortir une version majeure tous les six � huit - mois.</P> - - <H4><A name="1.8">1.8</A>) Quelle documentation est disponible ?</H4> - - <P>Plusieurs manuels, pages de manuel ainsi que des petits exemples de - test sont inclus dans la distribution. Voir le r�pertoire - <I>/doc</I>. Vous pouvez aussi acc�der aux manuels en ligne sur <A href= - "http://www.PostgreSQL.org/docs">http://www.PostgreSQL.org/docs</A>.</P> - - <P>Deux livres sur PostgreSQL sont disponibles en ligne sur <A href= - "http://www.PostgreSQL.org/docs/awbook.html">http://www.PostgreSQL.org/docs/awbook.html</A> - et <A href= - "http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook/</A>. - Il y a une liste de livres sur PostgreSQL pouvant �tre achet�s sur <A - href= - "http://techdocs.postgresql.org/techdocs/bookreviews.php">http://techdocs.PostgreSQL.org/techdocs/bookreviews.php</A>. - Il y a aussi une collection d'articles techniques sur PostgreSQL sur <A - href= - "http://techdocs.PostgreSQL.org/">http://techdocs.PostgreSQL.org/</A>.</P> - - <P><I>psql</I> poss�de des commandes \d pratiques montrant des - informations sur les types, op�rateurs, fonctions, aggr�gats, etc.</P> - - <P>Notre site web contient encore plus de documentations.</P> - - <H4><A name="1.9">1.9</A>) Comment savoir quels sont les bogues connus ou les fonctionnalit�s manquantes ?</H4> - - <P>PostgreSQL supporte un sous-ensemble �tendu de <SMALL>SQL</SMALL>-92. - Voir notre liste <A href="http://www.postgresql.org/docs/faqs.TODO.html">TODO</A> - pour les bogues connus, les fonctionnalit�s manquantes et les - plans pour le futur.</P> - - <H4><A name="1.10">1.10</A>) Comment puis-je apprendre le <SMALL>SQL</SMALL> ?</H4> - - <P>Le livre PostgreSQL sur <A href= - "http://www.PostgreSQL.org/docs/awbook.html">http://www.PostgreSQL.org/docs/awbook.html</A> - enseigne le <SMALL>SQL</SMALL>. Il existe un autre livre PostgreSQL sur <A - href= - "http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook.</A> - Il existe de bons tutoriels sur <A href= - "http://www.intermedia.net/support/sql/sqltut.shtm">http://www.intermedia.net/support/sql/sqltut.shtm,</A> - <A href= - "http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM"> - http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM</A> - et <A href= - "http://sqlcourse.com/">http://sqlcourse.com.</A></P> - - <P>Un autre (en anglais uniquement) "Teach Yourself SQL in 21 Days, Second Edition" - se trouve sur <A href= - "http://members.tripod.com/er4ebus/sql/index.htm">http://members.tripod.com/er4ebus/sql/index.htm</A></P> - - <P>Nombre de nos utilisateurs aiment <I>The Practical SQL Handbook</I>, - Bowman, Judith S., et al., Addison-Wesley. D'autres aiment <I>The - Complete Reference SQL</I>, Groff et al., McGraw-Hill.</P> - - <H4><A name="1.11">1.11</A>) PostgreSQL est-il compatible an 2000 ?</H4> - - <P>Oui, nous manipulons facilement les dates apr�s et avant l'an 2000.</P> - - <H4><A name="1.12">1.12</A>) Comment puis-je rejoindre l'�quipe de d�veloppement ?</H4> - - <P>Tout d'abord, t�l�chargez les derniers sources et lisez la - documentation pour les d�veloppeurs sur notre site web ou bien - dans la distribution. Ensuite, inscrivez-vous aux listes de - diffusion <I>pgsql-hackers</I> et <I>pgsql-patches</I>. Et pour finir, - soumettez des correctifs de grande qualit� sur <i>pgsql-patches</i>.</P> - - <P>Environ une douzaine de personnes ont des droits de modification - sur l'archive <SMALL>CVS</SMALL> de PostgreSQL. Ils ont chacun - soumis tellement de correctifs de qualit� qu'il �tait devenu - impossible aux d�veloppeurs de tenir la cadence et nous avions - confiance dans le qualit� des correctifs qu'ils soumettaient.</P> - - <H4><A name="1.13">1.13</A>) Comment dois-je soumettre un rapport de - bogue ?</H4> - - <P>Merci de visiter la page PostgreSQL BugTool sur <A href= - "http://www.PostgreSQL.org/bugs/bugs.php">http://www.PostgreSQL.org/bugs/bugs.php</A>, - qui donne des indications sur la fa�on de soumettre un rapport de bogue.</P> - - <P>De m�me, v�rifiez notre site ftp <A href= - "ftp://ftp.PostgreSQL.org/pub">ftp://ftp.PostgreSQL.org/pub</A> pour - voir s'il existe une version PostgreSQL plus r�cente ou des - correctifs.</P> - - <H4><A name="1.14">1.14</A>) Comment PostgreSQL se compare-til � - d'autres <SMALL>SGBD</SMALL> ?</H4> - - <P>Il y a plusieurs mani�res de mesurer un logiciel : les fonctionnalit�s, - les performances, la fiabilit�, le support, et le prix.</P> - - <DL> - <DT><B>Fonctionnalit�s</B></DT> - - <DD>PostgreSQL poss�de la plupart des fonctionnalit�s pr�sentes - dans les <SMALL>SGBD</SMALL> commerciaux, comme les - transactions, les requ�tes imbriqu�es, les d�clencheurs, - les vues, l'int�grit� r�f�rentielle par cl�s �trang�res, et le - verrouillage sophistiqu�. Nous avons des fonctionnalit�s qu'ils - n'ont pas, comme les types d�finis par l'utilisateur, - l'h�ritage, les r�gles, et le contr�le de concurrence par - multi-versionnage pour r�duire les contentions de verrouillage.<BR> - <BR> - </DD> - - <DT><B>Performances</B></DT> - - <DD>PostgreSQL a des performances similaires aux autres bases de - donn�es commerciales et open source. Il est plus rapide pour - certaines op�rations, plus lent pour d'autres. Par rapport � - MySQL ou d'autres <SMALL>SGBD</small> plus l�ger, nous sommes - plus rapides pour de nombreux utilisateurs, des requ�tes complexes et - une charge pour les requ�tes de lecture/�criture. MySQL est plus rapide - pour des requ�tes SELECT simples effectu�es par quelques utilisateurs. - Bien s�r, MySQL ne poss�de aucune des fonctionnalit�s de la section - <I>Fonctionnalit�s</I> ci-dessus. PostgreSQL est construit pour la - fiabilit� et les fonctionnalit�s et nous continuons � am�liorer les - performances � chaque version. Il y a une page web int�ressante - qui compare PostgreSQL � MySQL sur <A - href="http://openacs.org/philosophy/why-not-mysql.html"> - http://openacs.org/philosophy/why-not-mysql.html</A>. De plus, MySQL - est une soci�t� qui distribue son produit via l'open source et requiert - une licence commerciale pour les logiciels propri�taires, donc pas une - communaut� de d�veloppement open source comme PostgreSQL.<BR> - - <BR> - </DD> - - <DT><B>Fiabilit�</B></DT> - - <DD>Nous somme conscients qu'un <SMALL>SGBD</SMALL> doit �tre - fiable ou bien il est inutile. Nous faisons le maximum pour - sortir des versions bien test�es, du code stable ne contenant qu'un - minimum de bogues. Chaque version a au moins un mois de tests, - et notre historique de versions montre que nous pouvons - fournir des versions stables et robustes, pr�tes pour une - utilisation en environnement de production. Nous pensons que - nous nous comparons favorablement aux autres bases de donn�es - dans ce domaine.<BR> - <BR> - </DD> - - <DT><B>Support</B></DT> - - <DD>Nos listes de diffusion offrent un contact avec un large - groupe de d�veloppeurs et d'utilisateurs afin d'aider � la - r�solution des probl�mes rencontr�s. Nous ne pouvons garantir - un correctif mais les <SMALL>SGBD</SMALL> commerciaux ne le - garantissent pas toujours non plus. L'acc�s direct aux - d�veloppeurs, � la communaut� d'utilisateurs, aux manuels, et - au code source, fait du support pour PostgreSQL un support - sup�rieur aux autres <SMALL>SGBD</SMALL>. Un support commercial par - incident est disponible pour ceux qui en ont le besoin (voir - la <A - href="#1.6">section 1.6 de la FAQ</A>).<BR> - <BR> - </DD> - - <DT><B>Prix</B></DT> - - <DD>Nous sommes gratuits pour tous les usages, commerciaux et - non commerciaux. Vous pouvez inclure notre code dans vos - produits sans limitation, except�es celles cit�es dans notre - licence de type BSD donn�e plus haut.<BR> - <BR> - </DD> - </DL> - - <H4><A name="1.15">1.15</A>) Comment puis-je aider financi�rement - PostgreSQL ?</H4> - - <P>PostgreSQL poss�de une infrastructure de premi�re classe depuis - le d�but en 1996. Ceci gr�ce � Marc Fournier, qui a cr�� et g�r� - cette infrastructure des ann�es durant.</P> - - <P>Une infrastructure de qualit� est importante pour un projet - open-source. Cela permet d'emp�cher l'�parpillement qui ralentirait - beaucoup l'avancement du projet.</P> - - <P>Bien s�r, cette infrastructure n'est pas donn�e. Elle requiert - un certain nombre de d�penses mensuelles ou ponctuelles. Si vous - ou votre soci�t� peut donner de l'argent pour soutenir cet effort, - merci de consulter la page web <A - href="http://store.pgsql.com/shopping/">http://store.pgsql.com/shopping/</A> - et de faire une donation.</P> - - <P>Bien que la page web mentionne PostgreSQL, Inc, les - contributions sont exclusivement utilis�es pour soutenir le - projet PostgreSQL et ne soutiennent aucune soci�t� que ce soit. Si - vous le pr�f�rez, vous pouvez aussi envoyer un ch�que � l'adresse - de contact.</P> - <HR> - - <P>De plus, si vous avez une histoire de succ�s avec PostgreSQL, - merci de la soumettre � notre site d'�vang�lisation sur <a - href="http://advocacy.postgresql.org"> - http://advocacy.postgresql.org</a>.</P> - - - - <H2 align="center">Questions sur le client utilisateur</H2> - - <H4><A name="2.1">2.1</A>) Existe-t'il des pilotes <SMALL>ODBC</SMALL> pour - PostgreSQL ?</H4> - - <P>Il y a deux pilotes <SMALL>ODBC</SMALL> disponibles, PsqlODBC - et OpenLink <SMALL>ODBC</SMALL>.</P> - - <P>Vous pouvez t�l�charger PsqlOBDC depuis <A href= - "http://gborg.postgresql.org/project/psqlodbc/projdisplay.php"> - http://gborg.postgresql.org/project/psqlodbc/projdisplay.php</A>.</P> - - <P>OpenLink <SMALL>ODBC</SMALL> peut �tre obtenu depuis <A href= - "http://www.openlinksw.com/">http://www.openlinksw.com</A>. Il fonctionne - avec leur logiciel client <SMALL>ODBC</SMALL> standard, vous aurez - donc PostgreSQL <SMALL>ODBC</SMALL> sur toutes les plateformes - client qu'ils supportent (Win, Mac, Unix, VMS).</P> - - <P>Ils vendront probablement ce produit aux gens qui recherchent - une qualit� de support professionnelle mais une version freeware sera - toujours disponible. Merci d'envoyer vos questions � <A href= - "mailto:[email protected]">[email protected]</A>.</P> - - <H4><A name="2.2">2.2</A>) Quels outils sont disponibles pour utiliser - PostgreSQL avec des pages Web ?</H4> - - <P>Une bonne introduction aux pages Web adoss�s � une base de donn�es se - trouve � <A href="http://www.webreview.com">http://www.webreview.com</A></P> - - <P>Pour l'int�gration Web, PHP est une excellente interface. Elle se trouve � <A - href="http://www.php.net">http://www.php.net</A>.</P> - - <P>Pour les cas complexes, beaucoup utilisent l'interface Perl et CGI.pm ou mod_perl.</P> - - <H4><A name="2.3">2.3</A>) PostgreSQL a-t-il une interface graphique ?</H4> - - <P>Oui, il y a plusieurs interfaces graphiques disponibles pour PostgreSQL, - dont PgAccess <a href="http://www.pgaccess.org"> - http://www.pgaccess.org</a>), PgAdmin III (<a - href="http://www.pgadmin.org">http://www.pgadmin.org</a>), - RHDB Admin (<a - href="http://sources.redhat.com/rhdb/">http://sources.redhat.com/rhdb/ - </a> et Rekall (<a href="http://www.thekompany.com/products/rekall/"> - http://www.thekompany.com/products/rekall/</a>, propri�taire). Il y a - aussi PhpPgAdmin (<a href="http://phppgadmin.sourceforge.net/"> - http://phppgadmin.sourceforge.net/ </a>), une interface Web pour - PostgreSQL.</P> - - <P>Voir <a href="http://techdocs.postgresql.org/guides/GUITools">http://techdocs.postgresql.org/guides/GUITools</a> pour une liste plus d�taill�e.</P> - - <H4><A name="2.4">2.4</A>) Quels langages sont disponibles pour - communiquer avec PostgreSQL ?</H4> - - <P>La plupart des langages de programmation couramment utilis�s ont - une interface pour PostgreSQL. V�rifiez la liste des modules de votre - langage.</P> - - <P>Les interfaces ci-dessous sont incluses dans la distribution :</P> - - <UL> - <LI>C (libpq)</LI> - - <LI>Embedded C (ecpg)</LI> - - <LI>Java (jdbc)</LI> - - <LI>Python (PyGreSQL)</LI> - - <LI>TCL (libpgtcl)</LI> - - </UL> - <P>Interfaces suppl�mentaires disponibles sur - <a href="http://gborg.postgresql.org">http://gborg.postgresql.org</A> - dans la section <I>Drivers/Interfaces</I> - </P> - <HR> - - <H2 align="center">Questions Administratives</H2> - - <H4><A name="3.1">3.1</A>) Comment installer PostgreSQL ailleurs que sous <I>/usr/local/pgsql</I> ?</H4> - - <P>Il faut sp�cifier l'option <I>--prefix</I> lors du lancement de <I>configure</I>.</P> - - <H4><A name="3.2">3.2</A>) Quand je lance <I>postmaster</I>, j'obtiens un <I>Bad System Call</I> ou un message <i>core dumped</i> . Pourquoi ?</H4> - - <P>Cela peut �tre d� � une vari�t� de probl�mes mais v�rifiez d'abord que - vous avez les extensions System V install�es pour votre noyau. PostgreSQL - n�cessite le support noyau pour la m�moire partag�e et les s�maphores.</P> - - <H4><A name="3.3">3.3</A>) Quand je lance <I>postmaster</I>, j'obtiens des erreurs <I>IpcMemoryCreate</I>. Pourquoi ?</H4> - - <P>Soit vous n'avez pas configur� correctement la m�moire partag�e dans - votre noyau, soit vous devez augmenter la m�moire partag�e disponible dans - le noyau. Le montant exact dont vous avez besoin d�pend de votre - architecture et du nombre de tampons et de processus que vous avez - configur� pour <I>postmaster</I>. Pour la plupart des syst�mes avec un - nombre par d�faut de tampons et de processus, vous aurez besoin d'un minimum - d'environ 1 Mo. Voir le chapitre <A href= - "http://www.PostgreSQL.org/docs/view.php?version=current&idoc=1&file=kernel-resources.html">Administration - du manuel PostgreSQL</A> pour des informations plus d�taill�es sur la m�moire partag�e et les s�maphores.</P> - - <H4><A name="3.4">3.4</A>) Quand je lance <I>postmaster</I>, j'obtiens des erreurs <I>IpcSemaphoreCreate</I>. Pourquoi ?</H4> - - <P>Si le message d'erreur est <I>IpcSemaphoreCreate: semget failed (No - space left on device)</I> alors votre noyau n'est pas configur� avec - suffisamment de s�maphores. PostgreSQL a besoin d'un s�maphore par processus - serveur potentiel. Une solution provisoire est de lancer <I>postmaster</I> - avec une plus petite limite sur le nombre de processus serveur. Utilisez l'option - <I>-N</I> avec un param�tre inf�rieur au choix par d�faut de 32. Une - solution permanente est d'augmenter les param�tres - <SMALL>SEMMNS</SMALL> et <SMALL>SEMMNI</SMALL> de votre noyau.</P> - - <P>Des s�maphores inop�rantes peuvent aussi provoquer des plantages pendant de gros acc�s � la base de donn�es.</P> - - <P>Si le message d'erreur est autre chose, vous n'avez peut-�tre pas du tout le support des - s�maphores dans votre noyau. Voir le - chapitre <A href= - "http://www.PostgreSQL.org/docs/view.php?version=current&idoc=1&file=kernel-resources.html">Administration - du manuel PostgreSQL</A> pour des informations plus d�taill�es sur la m�moire partag�e et les s�maphores.</P> - - <H4><A name="3.5">3.5</A>) Comment contr�ler les connexions d'autres machines ?</H4> - - <p>Par d�faut, PostgreSQL autorise seulement les connexions de la machine - locale en utilisant les sockets de domaine Unix ou les connexions TCP/IP. - D'autres machines ne seront pas capables de se connecter sauf si vous modifiez - listen_addresses dans postgresql.conf et activez une authentification bas�e - sur l'h�te en modifiant le fichier <i>$PGDATA/pg_hba.conf</i> en accord.</p> - - <H4><A name="3.6">3.6</A>) Comment r�gler le moteur de la base de donn�es pour de meilleures performances ?</H4> - - <P>Des index acc�l�reront les requ�tes. La commande - <SMALL>EXPLAIN ANALYZE</SMALL> vous permet de voir comment PostgreSQL traite - votre requ�te et quels index sont utilis�s.</P> - - <P>Si vous faites beaucoup d'insertions (instruction <SMALL>INSERT</SMALL>), - envisagez de les faire en une fois en utilisant la commande <SMALL>COPY</SMALL>. Ceci - est plus rapide que des commandes <SMALL>INSERTS</SMALL> individuelles. Deuxi�ment, - les requ�tes qui ne sont pas dans des blocs de transaction <SMALL>BEGIN WORK/COMMIT</SMALL> - sont consid�r�s comme �tant dans leur propre transaction. Envisagez de faire - plusieurs instructions dans un seul bloc de transaction. Ceci r�duira la - surcharge apport�e par les transactions. Aussi, envisagez d'abandonner et - de recr�er des index lors de grosses modifications de donn�es.</P> - - <P>Il y a plusieurs options d'optimisations. Vous pouvez d�sactiver - <I>fsync()</I> en lan�ant <I>postmaster</I> avec l'option <I>-o -F</I>. - Ceci emp�chera les <I>fsync()</I>s d'�crire sur disque apr�s toute - transaction.</P> - - <P>Vous pouvez utiliser l'option <I>-B</I> de <I>postmaster</I> pour - augmenter le nombre de tampons de m�moire partag�e utilis�s par les - processus serveurs. Si vous fixez ce param�tre trop haut, - <I>postmaster</I> ne se lancera pas car vous avez d�pass� la limite de - votre noyau sur la quantit� de m�moire partag�e. Chaque tampon fait 8 Ko et - le choix par d�faut est de 64 tampons.</P> - - <P>Vous pouvez utiliser l'option serveur <I>-S</I> pour augmenter la - quantit� maximale de m�moire utilis�e par les processus serveurs pour des - tris temporaires. La valeur de <I>-S</I> est mesur� en kilooctets et le - choix par d�faut est de 512 (c'est-�-dire 512 Ko).</P> - - <P>Vous pouvez utiliser la commande <SMALL>CLUSTER</SMALL> pour regrouper - vos donn�es en tables pour correspondre � un index. Voir la page de manual - <SMALL>CLUSTER</SMALL> pour plus de d�tails.</P> - - <H4><A name="3.7">3.7</A>) Quelles fonctionalit�s de d�boguage sont disponibles ?</H4> - - <P>PostgreSQL a plusieurs fonctionalit�s qui permettent de recueillir des - informations de statut qui peuvent �tre utile pour des intentions de - d�boguage.</P> - - <P>D'abord, en lan�ant <I>configure</I> avec l'option --enable-cassert, - beaucoup d'<I>assert()</I>s surveillent le serveur et arr�tent le programme - quand quelque chose d'inattendu arrive.</P> - - <P><I>Postmaster</I> et <I>postgres</I> ont tous deux plusieurs options de - d�boguage de disponible. D'abord, quand vous lancez <I>postmaster</I>, - v�rifiez que vous envoyez les sorties standard et d'erreur dans un fichier - de traces comme :</P> -<PRE> - cd /usr/local/pgsql - ./bin/postmaster >server.log 2>&1 & -</PRE> - - <P>Ceci va cr�er un fichier server.log dans le r�pertoire racine de - PostgreSQL. Ce fichier contient des informations utiles sur les probl�mes - ou erreurs rencontr�s par le serveur. <I>Postmaster</I> dispose d'une - option <I>-d</I> qui permet de rapporter des informations encore plus - d�taill�es d'�tre rapport�es. L'option <I>-d</I> prend un num�ro qui - sp�cifie le niveau de d�boguage. Faites attention au fait que des valeurs - �l�v�es de niveau de d�boguage g�nerent des fichiers de traces volumineux.</P> - - <P>Si <I>postmaster</I> ne tourne pas, vous pouvez lancer le serveur - <I>postgres</I> de la ligne de commande et taper votre requ�te - <SMALL>SQL</SMALL> directement. Ceci est recommand� <B>seulement</B> pour - des fonctions de d�boguage. Notez qu'un retour chariot termine la requ�te, - pas un point-virgule. Si vous compilez avec les symboles de d�boguage, vous - pouvez utiliser un d�bogueur pour voir ce qui se passe. Parce que le serveur - n'a pas �t� lanc� par <I>postmaster</I>, il ne tourne pas dans un environnement - identique et les probl�mes d'interaction de verrouillage/serveur ne peuvent - �tre dupliqu�s.</P> - - <P>Si <I>postmaster</I> est en train de tourner, lancez <I>psql</I> dans - une fen�tre puis trouvez le <SMALL>PID</SMALL> du processus <I>postgres</I> - utilis� par <I>psql</I>. Utilisez un d�bogueur pour l'attacher au - <SMALL>PID</SMALL> <I>postgres</I>. Vous pouvez mettre un point d'arr�t - dans le d�bogueur et envoyez des requ�tes de <I>psql</I>. Si vous d�boguez - le d�marrage de <I>postgres</I>, vous pouvez mettre PGOPTIONS="-W n", puis - lancez <I>psql</I>. Ceci va retarder le d�marrage de <I>n</I> secondes - pour que vous puissiez attacher un d�bogueur au processus, fixer des points - d'arr�t et continuer la s�quence de d�marrage.</P> - - <P>Le programme <I>postgres</I> a les options <I>-s, -A</I> et <I>-t</I> - qui peuvent �tre utile pour des mesures de d�boguage et de performance.</P> - - <P>Vous pouvez compiler avec les options de performance pour voir quelles - fonctions prennent du temps d'ex�cution. Les fichiers de gestion du serveur - seront d�pos�s dans le r�pertoire <I>pgsql/data/base/nom_db</I>. Les - fichiers de gestion clients seront mis dans le r�pertoire actuel du client. - Linux requiert une compilation avec <I>-DLINUX_PROFILE</I> pour une - meilleure gestion.</P> - - <H4><A name="3.8">3.8</A>) Pourquoi est-ce que j'obtiens des messages <I>Sorry, too many clients</I> quand je me connecte ?</H4> - - <P>Vous pouvez augmenter la limite de <I>postmaster</I> sur le nombre de - processus serveur concurrents qu'il peut lancer.</P> - - <P>La limite par d�faut est de 32 processus. Vous pouvez l'augmenter en - relan�ant <I>postmaster</I> avec une valeur <I>-N</I> appropri�e ou - en modifiant <I>postgresql.conf</I>.</P> - - <P>Tenez compte du fait que si vous fixez <I>-N</I> plus grand que 32, vous - devez aussi augmenter <I>-B</I> au-dela de sa valeur par d�faut 64 ; - <I>-B</I> doit valoir au moins deux fois <I>-N</I> et probablement plus pour - une meilleure performance. Pour de grand nombres de processus serveurs vous - aurez probablement aussi augmenter plusieurs parametres de configuration du - noyau Unix. Les choses a v�rifier incluent la taille maximale des blocs de - m�moire partag�e, <SMALL>SHMMAX</SMALL> ; le nombre maximal de - s�maphores, <SMALL>SEMMNS</SMALL> et <SMALL>SEMMNI</SMALL> ; le - nombre maximal de processus, <SMALL>NPROC</SMALL> ; le nombre maximal - de processus par utilisateur, <SMALL>MAXUPRC</SMALL> ; et le nombre - maximal de fichiers ouverts, <SMALL>NFILE</SMALL> et <SMALL>NINODE</SMALL>. - La raison pour laquelle PostgreSQL a une limite sur le nombre de processus - serveurs autoris�s est pour que votre syst�me ne tombe pas � court de - ressources.</P> - - <H4><A name="3.9">3.9</A>) Que contient le r�pertoire <I>pgsql_tmp</I> ?</H4> - - <P>Ce r�pertoire contient des fichiers temporaires g�n�r�s par le moteur de - requ�te. Par exemple, si un tri doit �tre fait pour satisfaire un - <SMALL>ORDER BY</SMALL> et que ce tri requiert plus de place que le param�tre - <I>-S</I> du serveur n'autorise, alors des fichiers temporaires seront cr��s - pour contenir les donn�es n�cessaires.</P> - - <P>Les fichiers temporaires sont d'habitude effac�s automatiquement mais - peuvent rester si un serveur s'arr�te brutalement pendant un tri. Un arr�t - et un red�marrage de <I>postmaster</I> effacera les fichiers dans ces - r�pertoires.</P> - - <H4><A name="3.10">3.10</A>) Pourquoi est-ce que j'ai besoin de faire une - sauvegarde des bases et de restaurer pour mettre a jour les versions de - PostgreSQL ?</H4> - - <P>L'�quipe PostgreSQL ne fait que des changements mineurs entre des - versions mineurs, donc mettre � jour de 7.2 vers 7.2.1 ne n�cessitera pas - de sauvegarde et de restauration. Par contre, les sorties majeures - (c'est-�-dire de 7.2 vers 7.3) changent souvent le format interne des tables - syst�mes et des fichiers de donn�es. Ces modifications sont souvent - complexes alors nous ne gardons pas de compatibilit� descendante pour les - fichiers de donn�es. Une sauvegarde exportera les donn�es dans un format - g�n�rique qui peut ensuite �tre charg� dans le nouveau format interne.</P> - - <P>Dans les sorties o� le format sur disque ne change pas, le script - <I>pg_upgrade</I> peut �tre utilis� pour mettre � jour sans - sauvegarde/restauration. Les notes de sorties pr�cisent si <I>pg_upgrade</I> - est disponible pour la sortie.</P> - - <H4><A name="3.11">3.11</A>) Quels mat�riels dois-je utiliser ?</H4> - - <P>Comme le mat�riel PC est compatible en grosse partie, les gens ont - tendance � croire que tous les mat�riels PC sont de m�me qualit�. Ce n'est - pas le cas. La RAM ECC, le SCSI et les cartes-m�re de qualit� sont plus - fiables et ont de meilleurs performances qu'un mat�riel moins co�teux. - PostgreSQL fonctionnera sur � peu pr�s tout mat�riel mais si la fiabilit� et - la performance sont importantes pour vous, il est rus� de bien consid�rer - les options mat�rielles. Nos listes de diffusion peuvent �tre utilis�es pour - discuter des options mat�riels.</P> - - <HR> - - <H2 align="center">Questions fonctionnelles</H2> - - <H4><A name="4.1">4.1</A>) Quelle est la diff�rence entre curseur binaire - et curseur normal ?</H4> - - <P>Voir la page <SMALL>DECLARE</SMALL> du manuel pour une description.</P> - - <H4><A name="4.2">4.2</A>) Comment faire un <SMALL>SELECT</SMALL> seulement - sur les premi�res lignes d'une requ�te ? Sur une ligne al�atoire ?</H4> - - <P>Voir la page <SMALL>FETCH</SMALL> du manuel ou utiliser - <SMALL>SELECT</SMALL> ... <SMALL>LIMIT</SMALL>....</P> - - <P>Il se peut que l'int�gralit� de la requ�te doive �tre �valu�e, - m�me si vous voulez seulement les premi�res lignes. Envisagez - d'utiliser une requ�te avec une clause <SMALL>ORDER - BY</SMALL>. S'il existe un index correspondant � l'<SMALL>ORDER - BY</SMALL>, PostgreSQL peut n'�valuer que les premi�res lignes, sinon - l'int�gralit� de la requ�te peut �tre �valu�e, jusqu'� g�n�rer les lignes - d�sir�es.</P> - - <P>Pour faire un <SMALL>SELECT</SMALL> sur une ligne al�atoire :</P> -<PRE> - SELECT colonne - FROM table - ORDER BY random() - LIMIT 1; -</PRE> - - <H4><A name="4.3">4.3</A>) Comment obtenir une liste des tables ou - d'autres objets que je vois dans <I>psql</I> ?</H4> - - <P>Utilisez la commande \dt pour voir les tables dans <I>psql</I>. Pour - une liste compl�te de commandes � l'int�rieur de psql, vous pouvez utiliser - \?. Autrement, vous pouvez lire le code source de <I>psql</I> dans le fichier - <I>pgsql/src/bin/psql/describe.c</I>. Il contient des commandes - <SMALL>SQL</SMALL> qui g�n�rent le contenu des commandes anti-slash de - psql. Vous pouvez aussi lancer <I>psql</I> avec l'option - <I>-E</I>, afin qu'il imprime les requ�tes qu'il utilise pour ex�cuter - les commandes que vous lui passez. PostgreSQL fournit aussi une interface - d'informations sur le sch�ma compatible avec <I>SQLi</I> que vous pouvez - interroger des informations sur la base de donn�es.</P> - - <H4><A name="4.4">4.4</A>) Comment supprime-t-on une colonne d'une table, - ou comment change-t-on son type de donn�es ?</H4> - - <P>La fonction <SMALL>DROP COLUMN</SMALL> a �t� ajout�e dans la version 7.3 - avec <SMALL>ALTER TABLE DROP COLUMN</SMALL>. Pour les versions pr�c�dentes, - vous pouvez faire :</P> -<PRE> - BEGIN; - LOCK TABLE ancienne_table; - SELECT ... -- s�lectionnez toutes les colonnes sauf celle � supprimer - INTO TABLE nouvelle_table - FROM ancienne_table; - DROP TABLE ancienne_table; - ALTER TABLE nouvelle_table RENAME TO ancienne_table; - COMMIT; -</PRE> - - <P>Pour changer le type de donn�es d'une colonne, faites :</P> - -<PRE> - BEGIN; - ALTER TABLE table ADD COLUMN nouvelle_colonne <i>nouveau_type_de_donnees</i>; - UPDATE table SET nouvelle_colonne = CAST(ancienne_colonne AS <i>nouveau_type_de_donnees</i>); - ALTER TABLE table DROP COLUMN ancienne_colonne; - COMMIT; -</PRE> - - <P>Apr�s, vous pouvez faire <I>VACUUM FULL tab</I> pour r�cup�rer l'espace - disque utilis� par les lignes expir�es.</P> - - <H4><A name="4.5">4.5</A>) Quelle est la taille maximale pour une ligne, - une table, une base de donn�es ?</H4> - - <P>Les limites sont :</P> -<PRE> - Taille maximum pour une base de donn�es illimit�e (il existe des bases de 32 To) - Taille maximum pour une table 32 To - Taille maximum pour une ligne 1,6 To - Taille maximum pour un champ 1 Go - Nombre maximum de lignes dans une table illimit� - Nombre maximum de colonnes dans une table 250-1600, selon le type de colonnes - Nombre maximum d'index sur une table illimit� -</PRE> - - <P>Bien s�r, ces valeurs ne sont pas vraiment illimit�e, elles sont limit�es - par l'espace disque disponible, ainsi que par l'espace de m�moire et de swap. - Les performances peuvent se d�grader si ces valeurs sont inhabituellement - grandes.</P> - - <P>La taille maximum des tables (32 To) ne n�cessite pas que le syst�me - d'exploitation supporte les grands fichiers. Les grandes tables sont stock�es - sous forme de fichiers multiples de 1 Go, donc les limites de taille du - syst�me de fichier ne sont pas importantes.</P> - - <P>La taille maximum des tables et le nombre maximum de colonnes peuvent - �tre quadripl�s, si la taille des blocs par d�faut est augment�e � 32 Ko.</P> - - <H4><A name="4.6">4.6</A>) Combien d'espace disque faut-il pour stocker - les donn�es d'un fichier texte typique ?</H4> - - <P>Une base de donn�es PostgreSQL peut utiliser jusqu'� cinq fois - l'espace n�cessaire pour stocker les donn�es d'un fichier texte.</P> - - <P>A titre d'exemple, consid�rez un fichier de 100 000 lignes, comportant - un entier et une cha�ne de description sur chaque ligne. Supposons que la - cha�ne soit longue en moyenne de 20 octets. Le fichier texte serait de 2,8 Mo. - La taille du fichier d'une base de donn�es PostgreSQL peut �tre - estim�e � 6,4 Mo :</P> -<PRE> - 32 octets: chaque ligne (approximation) - 24 octets: un champ 'entier' et un champ 'texte' - + 4 octets: pointeur vers le tuple sur la page - ---------------------------------------- - 60 octets par ligne - - La taille des pages de donn�es dans PostgreSQL est de 8192 octets (8 KO), donc : - - 8192 octets par page - ---------------------- = 136 lignes par page de base de donn�es (arrondi � l'entier inf�rieur) - 60 octets par ligne - - 100000 lignes de donn�es - ------------------------- = 735 pages de base de donn�es (arrondi � l'entier sup�rieur) - 128 lignes par page - -735 pages de base de donn�es * 8192 octets par page = 6 021 120 octets (6,4 Mo) -</PRE> - - <P>Les index utilisent moins d'espace, mais ils contiennent les donn�es index�es, - ils peuvent donc �galement �tre grands.</P> - - <P>Les <SMALL>NULL</SMALL> sont stock�s sous forme de bitmap, aussi - utilisent-ils tr�s peu d'espace.</P> - - <H4><A name="4.7">4.7</A>) Comment puis-je savoir quels index, tables, - bases de donn�es et utilisateurs sont d�finis ?</H4> - - <P><I>psql</I> dispose de plusieurs commandes commen�ant par un anti-slash - pour retrouver ces informations. Utilisez \? pour les conna�tre. Il existe - aussi des tables syst�mes, qui commencent par <I>pg_</I> et qui les - d�crivent �galement. Aussi, <I>psql -l</I> liste toutes les bases de - donn�es.</P> - - <P>Essayez �galement le fichier <I>pgsql/src/tutorial/syscat.source</I>. Il - illustre un grand nombre de commandes <SMALL>SELECT</SMALL> n�cessaires pour - r�cup�rer l'information des tables syst�me de la base de donn�es.</P> - - <H4><A name="4.8">4.8</A>) Mes requ�tes sont lentes ou ne font pas usage - des index. Pourquoi ?</H4> - - <P>Les index ne sont pas automatiquement utilis�s par chaque requ�te. Ils - sont utilis�s uniquement si la table est plus grande qu'une certaine taille, - et si la requ�te s�lectionne seulement un faible pourcentage des lignes de la - table. Ceci est d� au fait qu'un acc�s disque al�atoire caus� par un parcours - d'index peut �tre plus lent qu'une simple lecture de la table, ou parcours - s�quentiel</P> - - <P>Pour d�terminer si un index devrait �tre utilis�, PostgreSQL a besoin - des statistiques de la table. Ces statistiques sont collect�es en lan�ant - <SMALL>VACUUM ANALYZE</SMALL> ou simplement <SMALL>ANALYZE</SMALL>. - Avec les statistiques, l'optimiseur sait combien de lignes se trouvent - dans la table et peut mieux d�terminer s'il faut utiliser l'index. - Les statistiques sont �galement utiles pour d�terminer l'ordre optimal - des op�rations de jointure. La collecte des statistiques devrait �tre - effectu�e r�guli�rement lorsque le contenu de la table change.</P> - - <P>Les index ne sont normalement pas utilis�s pour les clauses <SMALL>ORDER BY</SMALL> - ou pour les jointures. Un parcours s�quentiel suivi d'un tri explicite est - habituellement plus rapide qu'un parcours d'index pour une table importante. - Toutefois, <SMALL>LIMIT</SMALL> combin� avec <SMALL>ORDER BY</SMALL> - utilisera souvent un index parce que seulement une petite partie de la table est - renvoy�e. En fait, bien que MAX() et MIN() n'utilisent pas les index, - il est possible de retrouver ces valeurs en utilisant un index avec - ORDER BY et LIMIT :</P> - -<PRE> - SELECT colonne - FROM table - ORDER BY colonne [ DESC ] - LIMIT 1; -</PRE> - - <P>Si vous pensez que l'optimiseur choisit par erreur un parcours sequentiel, - utilisez <CODE>SET enable_seqscan TO 'off'</CODE> et - lancez des tests pour voir si le parcours d'index est effectivement plus rapide.</P> - - <P>Lorsque vous utilisez des caract�res joker tels que <SMALL>LIKE</SMALL> ou - <I>~</I>, les index peuvent seulement �tre utilis�s dans certaines circonstances :</P> - <UL> - <LI>Le d�but de la cha�ne de recherche doit �tre ancr� au d�part de la cha�ne, c'est-�-dire - <UL> - <LI>Les mod�les pour <SMALL>LIKE</SMALL> ne doivent pas commencer par <I>%</I>.</LI> - <LI>Les mod�les d'expression r�guli�re pour <I>~</I> doivent commencer par - <I>^</I>.</LI> - </UL></LI> - <LI>La cha�ne de recherche ne peut pas commencer par une classe de caract�res, c'est-�-dire - [a-e].</LI> - <LI>Les recherches sans casse comme <SMALL>ILIKE</SMALL> et - <I>~*</I> n'utilisent pas les index. Utilisez plut�t les index fonctionnels, - d�crit dans la section <a href="#4.12">4.12</a>.</LI> - <LI>La locale <I>C</I> par d�faut doit �tre utilis�e lors de - <i>initdb</i>.</LI> - </UL> - - <p>Dans les versions ant�rieures � la 8.0, les indexs ne peuvent souvent - pas �tre utilis�s sauf si les types de donn�es correspondent exactement au - type de la colonne de l'index. Ceci est particuli�rement vrai pour les - index de colonnes de type int2, int8 et numeric.</p> - - <H4><A name="4.9">4.9</A>) Comment puis-je savoir si l'optimiseur �value - mes requ�tes ?</H4> - - <P>Voir la page <SMALL>EXPLAIN</SMALL> du manuel.</P> - - <H4><A name="4.10">4.10</A>) Qu'est-ce qu'un index R-tree ?</H4> - - <P>Un index R-tree est utilis� pour l'indexation des donn�es spatiales. Un - index de hachage ne permet pas les recherches par plage. Un index B-tree peut - seulement faire des recherches sur une dimension. Les index R-tree - peuvent traiter des donn�es multi-dimensionnelles. Par exemple, si un index - R-tree peut �tre construit sur un attribut de type <I>point</I>, - le syst�me peut plus efficacement g�rer les requ�tes du type - "S�lection de tous les points d'un rectangle".</P> - - <P>L'article de r�f�rence qui d�crit le syst�me R-tree original est :</P> - - <P>Guttman, A. "R-trees: A Dynamic Index Structure for Spatial - Searching." Proceedings of the 1984 ACM SIGMOD Int'l Conf on Mgmt - of Data, 45-57.</P> - - <P>Vous pouvez �galement trouver ce papier dans le livre de Stonebraker - "Readings in Database Systems".</P> - - <P>Les index R-tree int�gr�s peuvent prendre en charge les polyg�nes et les bo�tes. - En th�orie, les R-trees peuvent �tre �tendus � un plus grand nombre de dimensions. - En pratique, l'extension des R-trees requiert pas mal de travail et nous - n'avons pour le moment aucune documentation sur la fa�on de proc�der.</P> - - <H4><A name="4.11">4.11</A>) Qu'est-ce que l'optimiseur g�n�tique de - requ�tes ?</H4> - - <P>Le module <SMALL>GEQO</SMALL> (acronyme de <i>GEnetic Query - Optimizer</i>) acc�l�re l'optimisation des requ�tes lors de jointures de - nombreuses tables par un algorithme g�n�tique (GA). Il permet la - gestion des grosses requ�tes de jointures en utilisant une recherche non - exhaustive.</P> - - <H4><A name="4.12">4.12</A>) Comment puis-je r�aliser des recherches sur des - expressions rationnelles ainsi que des recherches non sensibles � la - casse ? Comment puis-je utiliser un index lors de recherches non - sensibles � la casse ?</H4> - - <P>L'op�rateur <I>~</I> r�alise des recherches d'expressions rationnelles - et <I>~*</I> le fait sans tenir compte de la casse. La variante de - <SMALL>LIKE</SMALL> non sensible � la casse est - <SMALL>ILIKE</SMALL>.</P> - - <P>Des comparaisons d'�galit� non sensibles � la casse sont habituellement - exprim�es de cette fa�on :</P> -<PRE> - SELECT * - FROM table - WHERE lower(colonne) = 'abc'; -</PRE> - - <P>Ceci n'utilisera pas un index standard. N�anmoins, si vous cr�ez un index - fonctionnel, celui-ci sera utilis� :</P> -<PRE> - CREATE INDEX tableindex ON table (lower(colonne)); -</PRE> - - <H4><A name="4.13">4.13</A>) Comment puis-je d�tecter si un champ est - <SMALL>NULL</SMALL> dans une requ�te ?</H4> - - <P>Il vous suffit de tester la colonne avec <SMALL>IS NULL</SMALL> ou <SMALL>IS - NOT NULL</SMALL>.</P> - - <H4><A name="4.14">4.14</A>) Quelle sont les diff�rences entre les nombreux - types de caract�res ?</H4> -<PRE> -Type Nom interne Notes --------------------------------------------------- -VARCHAR(n) varchar n sp�cifie la taille maximum, sans remplissage -CHAR(n) bpchar des espaces sont ajout�s pour obtenir la - longueur fixe sp�cifi�e -TEXT text pas de limite sup�rieure pour la taille -BYTEA bytea tableau d'octets (accepte les octets nuls) -"char" char un caract�re -</PRE> - - <P>Vous verrez le nom interne en examinant les catalogues syst�me et dans - quelques messages d'erreur.</P> - - <P>Les quatres premiers types du dessus sont des types "varlena" - (c'est-�-dire que les quatre premiers octets correspondent � la taille, - suivi des donn�es). Donc, l'espace r�ellement utilis� est l�g�rement plus - grand que la taille d�clar�e. N�anmoins, ces types de donn�es sont aussi - sujet � la compression ou � un enregistrement en dehors de la table avec - <SMALL>TOAST</SMALL>, donc l'espace occup� sur disque pourrait aussi �tre - moindre que ce qu'on pourrait attendre.</P> - - <P><SMALL>VARCHAR(n)</SMALL> est bien mieux pour enregistrer des cha�nes de - longueurs variables tout en limitant la taille de cette cha�ne. - <SMALL>TEXT</SMALL> est utile pour les cha�nes de longueur illimit�e, avec - malgr� tout un maximum de 1 Go.</P> - - <P><SMALL>CHAR(n)</SMALL> est int�ressant pour stocker des cha�nes de taille - identique. <SMALL>CHAR(n)</SMALL> compl�te avec des espaces pour arriver � - la taille sp�cifi�e alors que <SMALL>VARCHAR(n)</SMALL> n'enregistre que les - caract�res donn�s. <SMALL>BYTEA</SMALL> sert � stocker des donn�es binaires, - particuli�rement les donn�es incluant des octets <SMALL>NULL</SMALL>. Tous - les types d�crits ici ont des performances similaires.</P> - - <H4><A name="4.15.1">4.15.1</A>) Comment puis-je cr�er un champ s�rie, - c'est-�-dire s'incr�mentant automatiquement ?</H4> - - <P>PostgreSQL supporte un type de donn�es <SMALL>SERIAL</SMALL>. Il cr�e - automatiquement une s�quence. Par exemple, - ceci :</P> -<PRE> - CREATE TABLE personne ( - id SERIAL, - nom TEXT - ); -</PRE> - - est automatiquement traduit en ceci : -<PRE> - CREATE SEQUENCE personne_id_seq; - CREATE TABLE personne ( - id INT4 NOT NULL DEFAULT nextval('personne_id_seq'), - nom TEXT - ); -</PRE> - - Voir la page man de <I>create_sequence</I> pour plus d'informations - sur les s�quences. Vous pouvez aussi utiliser le champ <I>OID</I> de chaque - ligne comme valeur unique. N�anmoins, si vous avez besoin de sauvegarder - puis recharger la base de donn�es, vous devrez utiliser l'option - <I>-o</I> ou l'option <SMALL>COPY WITH OIDS</SMALL> de - <I>pg_dump</I> pour conserver les <SMALL>OID</SMALL>s. - - <H4><A name="4.15.2">4.15.2</A>) Comment puis-je obtenir la valeur d'un - <SMALL>SERIAL</SMALL> suite � une insertion ?</H4> - - <P>Une approche pour r�cup�rer la prochaine valeur <SMALL>SERIAL</SMALL> � - partir de l'objet s�quence est d'utiliser la fonction <I>nextval()</I> - <I>avant</I> l'insertion et de l'ins�rer ensuite explicitement. En utilisant - la table d'exemple de la section <A href="#4.15.1">4.15.1</A>, un exemple - dans un pseudo-langage ressemblerait � ceci :</P> -<PRE> - nouvelle_id = execute("SELECT nextval('personne_id_seq')"); - execute("INSERT INTO personne (id, nom) VALUES (nouvelle_id, 'Blaise Pascal')"); -</PRE> - - Vous pourriez ensuite utiliser la nouvelle valeur stock�e dans - <CODE>nouvelle_id</CODE> avec d'autres requ�tes (c'est-�-dire en tant que - cl� �trang�re de la table <CODE>personne</CODE>). Notez que le nom de la - <SMALL>SEQUENCE</SMALL> automatiquement cr��e sera - <<I>table</I>>_<<I>colonneserial</I>>_<I>seq</I>, o� - <I>table</I> et <I>colonneserial</I> sont les noms respectifs de votre table - et de votre colonne <SMALL>SERIAL</SMALL>. - - <P>Autrement, vous pouvez r�cup�rer la valeur <SMALL>SERIAL</SMALL> affect�e - avec la fonction <I>currval()</I> <I>apr�s</I> qu'elle ait �t� ins�r�e par - d�faut, c'est-�-dire,</P> -<PRE> - execute("INSERT INTO personne (nom) VALUES ('Blaise Pascal')"); - nouvelle_id = execute("SELECT currval('personne_id_seq')"); -</PRE> - - Enfin, vous pouvez utiliser l'<A href="#4.16"><SMALL>OID</SMALL></A> renvoy� - par l'instruction <SMALL>INSERT</SMALL> pour r�cup�rer la valeur par d�faut - bien que cela soit l'appoche la moins portable et la valeur de l'OID se - r�initialisera aux environs de quatre milliards. En Perl, avec DBI et le - module DBD:Pg d'Edmund Mergl, l'ancienne valeur est disponible via - <I>$sth->{pg_oid_status}</I> apr�s un <I>$sth->execute()</I>. - - <H4><A name="4.15.3">4.15.3</A>) Est-ce que <I>currval()</I> et - <I>nextval()</I> n'am�nent pas des probl�mes lorsque plusieurs utilisateurs - les lancent en m�me temps ?</H4> - - <P>Non. <I>currval()</I> renvoie la valeur actuelle affect�e par votre - processus, et non pas par tous les utilisateurs.</P> - - <H4><A name="4.15.4">4.15.4</A>) Pourquoi mes num�ros de s�quences ne sont pas - r�-utilis�s lors d'une annulation de transaction ? Pourquoi - existe-t'il des trous dans la num�rotation de ma colonne s�quentielle - (SERIAL) ?</H4> - - <P>Pour am�liorer les acc�s concurrents, les valeurs de s�quences sont - donn�es aux transactions qui en ont besoin et ne sont pas bloqu�es jusqu'� - la fin de la transaction. Ceci cr�e des trous dans le num�rotage pour les - transactions annul�es.</P> - - <H4><A name="4.16">4.16</A>) Qu'est-ce qu'un <SMALL>OID</SMALL> ? - Qu'est-ce qu'un <SMALL>TID</SMALL> ?</H4> - - <P>Les <SMALL>OID</SMALL> sont la r�ponse de PostgreSQL aux identifiants de - lignes uniques. Chaque ligne cr��e dans PostgreSQL obtient un - <SMALL>OID</SMALL> unique. Tous les <SMALL>OID</SMALL> g�n�r�s pendant - <I>initdb</I> sont inf�rieurs � 16384 (voir <I>include/access/transam.h</I>). - Tous les <SMALL>OID</SMALL> cr��s par un utilisateur sont sup�rieurs ou - �gaux � ceci. Par d�faut, tous ces <SMALL>OID</SMALL> sont uniques non - seulement dans une table ou une base mais unique � l'int�rieur d'une - installation PostgreSQL enti�re.</P> - - <P>PostgreSQL utilise les <SMALL>OID</SMALL> dans ses tables syst�me interne - pour lier les lignes entre tables. Ces <SMALL>OID</SMALL> peuvent �tre - utilis�s pour identifier des lignes utilisateurs sp�cifiques et utilis�s dans - des jointures. Il est recommand� que vous utilisiez le type de colonne - <SMALL>OID</SMALL> pour stocker des valeurs <SMALL>OID</SMALL>. - Vous pouvez cr�er un index sur le champ <SMALL>OID</SMALL> pour un acc�s - plus rapide.</P> - - <P>Les <SMALL>OID</SMALL> sont attribu�s pour toute ligne d'un endroit - central qui est utilis� par toutes les bases de donn�es. Si vous voulez - changer l'<SMALL>OID</SMALL> en quelque chose d'autre ou si vous voulez - faire une copie de la table avec les <SMALL>OID</SMALL> originaux, il - n'y a pas de raisons pour ne pas le faire :</P> -<PRE> - CREATE TABLE nouvelle_table (macolonne int); - SELECT oid AS ancienne_oid, macolonne INTO table_temporaire FROM ancienne_table; - COPY table_temporaire FROM '/tmp/tablepg'; - COPY nouvelle_table WITH OIDS FROM '/tmp/tablepg'; - DROP TABLE table_temporaire; -</PRE> - - <P>Les <SMALL>OID</SMALL> sont stock�s en tant qu'entiers de quatre octets - et d�borderont � quatre milliards. Personne n'a jamais rapport� un tel cas - et nous avons pr�vu de retirer la limite avant que cela ne se produise.</P> - - <P>Les <SMALL>TID</SMALL>s sont utilis�s pour identifier des lignes - physiques sp�cifiques avec des valeurs de bloc et d�calage. Les - <SMALL>TID</SMALL> changent apr�s que les lignes aient �t� modifi�s ou - recharg�s. Ils sont utilis�s par des entr�es d'index pour pointer vers des - lignes physiques.</P> - - <H4><A name="4.17">4.17</A>) A quoi correspond certains termes utilis�s avec - PostgreSQL ?</H4> - - <P>Une partie du code source et de l'ancienne documentation utilisent des - termes dont l'usage est plus commun. Voici quelques exemples :</P> - - <UL> - <LI>table, relation, classe</LI> - <LI>ligne (row), enregistrement (record), tuple</LI> - <LI>colonne (column), champ (field), attribut</LI> - <LI>r�cup�re, s�lectionne (select)</LI> - <LI>remplace (replace), met � jour (update)</LI> - <LI>ajoute (append), ins�re (insert)</LI> - <LI><SMALL>OID</SMALL>, valeur s�quentielle (serial value)</LI> - <LI>portal, curseur</LI> - <LI>range variable, table name, table alias</LI> - </UL> - - <P>Une liste des termes g�n�raux pour le domaine des bases de donn�es est - disponible sur : <A href= - "http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.html">http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.html</A></P> - - <H4><A name="4.18">4.18</A>) Pourquoi ai-je l'erreur <I>ERROR: - Memory exhausted in AllocSetAlloc()</I> ?</H4> - - <P>Vous manquez probablement de m�moire virtuelle sur votre syst�me ou votre - noyau a une limite assez basse pour certaines ressources. Essayez ceci avant - de lancer <I>postmaster</I> :</P> -<PRE> - ulimit -d 262144 - limit datasize 256m -</PRE> - - Suivant votre shell, seul un d'eux pourrait r�ussir mais cela configurera - d'une fa�on plus importante la taille du segment de donn�es de votre - processus. Cette commande s'applique au processus actuel et � tous les - processus lanc� par celui-ci. Si vous avez des probl�mes avec le client - <SMALL>SQL</SMALL> parce que le processus serveur renvoie trop de donn�es, - essayez �a avant de lancer le client. - - <H4><A name="4.19">4.19</A>) Comment puis-je conna�tre la version de - PostgreSQL que j'utilise ?</H4> - - <P>A partir de <I>psql</I>, tapez <CODE>SELECT version();</CODE></P> - - <H4><A name="4.20">4.20</A>) Pourquoi ai-je <I>invalid large obj - descriptor</I> lors d'op�rations sur des gros objects ?</H4> - - <P>Vous avez besoin de placer <CODE>BEGIN WORK</CODE> et <CODE>COMMIT</CODE> - autour de chaque utilisateur de gros objets, c'est-�-dire pour entourer - <CODE>lo_open</CODE> ... <CODE>lo_close.</CODE></P> - - <P>Actuellement, PostgreSQL force cette r�gle en fermant les gros objets - lors de la transaction. Donc, le premier essai d'op�rations sur ces objets, - fonctionnant habituellement (au moins la plupart du temps) aura un - <I>invalid large obj descriptor</I>. Donc le code, auparavant fonctionnel - (au moins la plupart du temps), g�n�rera maintenant un message d'erreur si - vous n'utilisez pas de transaction.</P> - - <P>Si vous utilisez une interface client interface comme - <SMALL>ODBC</SMALL>, vous aurez peut-�tre besoin de lancer - <CODE>auto-commit off.</CODE></P> - - <H4><A name="4.21">4.21</A>) Comment puis-je cr�er une colonne qui aura par - d�faut l'heure actuelle comme valeur ?</H4> - - <P>Utilisez <I>CURRENT_TIMESTAMP</I>:</P> -<PRE> -<CODE>CREATE TABLE test (x int, heuremodif timestamp DEFAULT CURRENT_TIMESTAMP ); -</CODE> -</PRE> - - <H4><A name="4.22">4.22</A>) Pourquoi mes sous-requ�tes utilisant - <CODE><SMALL>IN</SMALL></CODE> sont-elles si lentes ?</H4> - - <P>Dans les versions pr�c�dant la 7.4, les sous-requ�tes ont �t� jointes avec - des jointures externes en parcourant s�quentiellement le r�sultat de la - sous-requ�te pour chaque ligne de la requ�te externe. Si la sous-requ�te - renvoit quelques lignes et que la requ�te externe en renvoit plein, - <CODE><SMALL>IN</SMALL></CODE> sera plus rapide. Pour acc�l�rer les autres - requ�tes, remplacez <CODE>IN</CODE> avec <CODE>EXISTS</CODE> :</P> -<PRE> SELECT * - FROM table - WHERE colonne IN (SELECT souscolonne FROM soustable); -</PRE> - to: -<PRE> SELECT * - FROM table - WHERE EXISTS (SELECT souscolonne FROM soustable WHERE souscolonne = colonne); -</PRE> - - Pour que ceci soit rapide, <CODE>souscolonne</CODE> doit �tre une colonne - index�e. - - <P>A partir de la version 7.4, <CODE>IN</CODE> utilise actuellement les m�mes - techniques sophistiqu�es de jointures comme des requ�tes normales et est - pr�f�r� � l'utilisation de <CODE>EXISTS</CODE>.</P> - - <H4><A name="4.23">4.23</A>) Comment puis-je r�aliser une jointure - externe ?</H4> - - <P>PostgreSQL supporte les jointures externes en utilisant la syntaxe SQL - standard. Voici deux exemples :</P> -<PRE> - SELECT * - FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col); -</PRE> - or -<PRE> - SELECT * - FROM t1 LEFT OUTER JOIN t2 USING (col); -</PRE> - - <P>Ces requ�tes identiques joignent t1.col � t2.col et renvoient toute - colonne non jointe de t1 (celles sans correspondance dans t2). Une jointure - droite (<SMALL>RIGHT join</SMALL>) ajoutera les lignes non jointes de t2. - Une jointure compl�te (<SMALL>FULL join</SMALL>) renverra les lignes - correspondantes ainsi que les lignes non jointes de t1 et t2. Le mot cl� - <SMALL>OUTER</SMALL> est optionnelle et assum� dans le cas de jointure - <SMALL>LEFT</SMALL>, <SMALL>RIGHT</SMALL> et <SMALL>FULL</SMALL>. Les - jointures ordinaires sont appel�es des jointures <SMALL>INNER</SMALL>.</P> - - <P>Lors des pr�c�dentes versions, les jointures externes peuvent �tre - simul�es en utilisant <SMALL>UNION</SMALL> et <SMALL>NOT IN</SMALL>. Par - exemple, lors d'une jointure de <I>tab1</I> et <I>tab2</I>, la requ�te - suivante r�alise une jointure externe, <I>outer</I>, des deux tables :<BR> - <BR> - </P> -<PRE> - SELECT tab1.col1, tab2.col2 - FROM tab1, tab2 - WHERE tab1.col1 = tab2.col1 - UNION ALL - SELECT tab1.col1, NULL - FROM tab1 - WHERE tab1.col1 NOT IN (SELECT tab2.col1 FROM tab2) - ORDER BY col1 -</PRE> - - <H4><A name="4.24">4.24</A>) Comment puis-je lancer des requ�tes utilisant - plusieurs bases de donn�es ?</H4> - - <P>Il n'existe pas de moyens de lancer des requ�tes sur une autre base que - la courante. Comme PostgreSQL charge des catalogues syst�mes sp�cifiques � - la base de donn�es, sa r�action aux requ�tes inter-base de donn�es est - incertaine.</P> - - <P><I>contrib/dblink</I> permet les requ�tes entre bases de donn�es en - utilisant des fonctions. Bien s�r un client peut r�aliser des connexions - simultan�es � plusieurs bases de donn�es et joindre les r�sultats du c�t� - client.</P> - - <H4><A name="4.25">4.25</A>) Comment puis-je renvoyer plusieurs lignes ou - colonnes � partir d'une fonction?</H4> - - <P>A partir de la 7.3, vous pouvez facilement renvoyer plusieurs lignes ou - colonnes � partir d'une fonction, - <a href="http://techdocs.postgresql.org/guides/SetReturningFunctions"> - http://techdocs.postgresql.org/guides/SetReturningFunctions</a>.</P> - - <H4><A name="4.26">4.26</A>) Pourquoi ne puis-je pas cr�er/supprimer des - tables temporaires dans les fonctions PL/PgSQL de fa�on stable ?</H4> - <P>PL/PgSQL cache le contenu des fonctions et un effet de bord malheureux est - que si une fonction PL/PgSQL acc�de � une table temporaire, que cette table - est ensuite supprim�e et recr��e, et que la fonction est appel�e de nouveau, - la fonction �chouera car le contenu de la fonction cach�e pointera toujours - vers l'ancienne table temporaire. La solution revient � utiliser - <SMALL>EXECUTE</SMALL> pour l'acc�s aux tables temporaires avec PL/PgSQL. - Ceci obligera l'analyse de la requ�te � chaque fois.</P> - - <H4><A name="4.27">4.27</A>) Quelles options de cryptage sont - disponibles ? - </H4> - <UL> - <LI><I>contrib/pgcrypto</I> contient de nombreuses fonctions de cryptage, � - utiliser dans des requ�tes <SMALL>SQL</SMALL>.</LI> - <LI>Pour crypter une transmission entre le client et le serveur, le serveur - doit avoir positionn� l'option <I>ssl</I> � <I>true</I> dans <I>postgresql.conf, - </I> et un enregistrement applicable <I>host</I> ou <I>hostssl</I> doit - exister dans <I>pg_hba.conf</I>, et le <I>sslmode</I> du client ne doit pas - �tre <I>d�sactiv�e</I>. Notez qu'il est aussi possible d'utiliser un - transport crypt� d'une troisi�me partie, tel que stunnel ou ssh, plut�t que - les connexions SSL natives de PostgreSQL.</LI> - <LI>Les mots de passe des utilisateurs sont automatiquement crypt�s depuis - la version 7.3. Pour les versions pr�c�dentes, vous devez activer l'option - <I>PASSWORD_ENCRYPTION</I> dans <I>postgresql.conf</I>.</LI> - <LI>Le serveur peut fonctionner avec un syst�me de fichiers crypt�s.</LI> - </UL> - - <HR> - - <H2 align="center">Etendre PostgreSQL</H2> - - <H4><A name="5.1">5.1</A>) J'ai �crit une fonction utilisateur. Lorsque je l'ex�cute avec - <I>psql</I>, pourquoi cela finit-il avec un <I>dump core</I> ?</H4> - - <P>Il peut y avoir plusieurs raisons. Essayez tout d'abord votre fonction utilisateur - dans un programme de test.</P> - - <H4><A name="5.2">5.2</A>) Comment puis-je ajouter de bons nouveaux - types ou fonctions � PostgreSQL ?</H4> - - <P>Envoyez vos extensions � la liste de diffusion <I>pgsql-hackers</I>, - elles atterriront �ventuellement dans le sous-r�pertoire <I>contrib/</I>.</P> - - <H4><A name="5.3">5.3</A>) Comment faire pour �crire une fonction C - qui renvoie un tuple ?</H4> - - <P>Dans les versions de PostgreSQL � partir de 7.3, les fonctions qui - renvoient une table sont totalement support�es en C, PL/PgSQL, et SQL. Voir - le Guide du Programmeur pour plus d'information. Un exemple de fonction - renvoyant une table d�finie en C se trouve � - <I>contrib/tablefunc</I>.</P> - - <H4><A name="5.4">5.4</A>) J'ai modifi� un fichier source. Pourquoi - ma recompilation ne voit-elle pas les modifications ?</H4> - - <P>Les <I>Makefiles</I> n'ont pas les d�pendances ad�quates pour les - fichiers d'en-t�te. Il vous faut faire <I>make clean</I> puis un autre - <I>make</I>. Si vous utilisez <SMALL>GCC</SMALL>, vous pouvez utiliser - l'option <I>--enable-depend</I> de <I>configure</I> pour que le - compilateur calcule les d�pendances automatiquement.</P> - </BODY> -</HTML> - diff --git a/doc/src/FAQ/FAQ_german.html b/doc/src/FAQ/FAQ_german.html deleted file mode 100644 index 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:[email protected]">[email protected]</a>).</p> - - <p>Deutsche Übersetzung von Ian Barwick (<a href="mailto:[email protected]">[email protected]</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:[email protected]">[email protected]</a>)</pre> -<pre>Fordító: Hornyák László<br>(<a - href="mailto:[email protected]">[email protected]</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 ([email protected]). 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:[email protected]">[email protected]</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:%[email protected]"> [email protected]</a> címre:</p> -<pre> -subscribe</pre> -<pre> -end </pre> -<br> -Van egy hibákkal kapcsolatos levelezési lista is: [email protected] a következõ tartalommal:<br> -<br> -<pre> -subscribe</pre> -<pre> -end -</pre> -<p>A fejlesztői levelezési lista:<a - href="mailto:[email protected]"> [email protected]</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 [email protected] -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:[email protected]">[email protected]</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:[email protected]">[email protected]</A>)<BR> - </P> - <P>Tłumaczenie: Marcin Mazurek (<A href= - "mailto:[email protected]">[email protected]</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:[email protected]">[email protected]</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:[email protected]">[email protected]</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:[email protected]">[email protected]</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:[email protected]">[email protected]</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:[email protected]">[email protected]</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:[email protected]">[email protected]</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:[email protected]">[email protected]</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:[email protected]">[email protected]</A>) - </P> - <P>Перевёл на русский: Виктор Вислобоков (<A href= - "mailto:[email protected]">[email protected]</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:[email protected]">[email protected]</a>)<br></p> -<p>Çevirenler : Devrim Gündüz (<a href="mailto:[email protected]">[email protected]</a>)<br>Nicolai Tufar -(<a href="mailto:[email protected]">[email protected]</a>)<BR>Volkan YAZICI (<a href="mailto:[email protected]">[email protected]</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:[email protected]">[email protected]</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 : [email protected]. 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, [email protected] 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, - [email protected] 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, - [email protected] 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, [email protected] 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 [email protected] 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* |