1
0
mirror of https://github.com/postgres/postgres.git synced 2025-07-28 23:42:10 +03:00

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
This commit is contained in:
Peter Eisentraut
2009-07-21 19:21:02 +00:00
parent 10e8b3fae3
commit 71fa5977da
26 changed files with 0 additions and 27315 deletions

View File

@ -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 &lt;<A href=
"mailto:bruce@momjian.us">bruce@momjian.us</A>&gt;<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.&nbsp;
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>.&nbsp;
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)&nbsp; 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.&nbsp;
</i>Neither is required to run the resulting binaries;&nbsp; they are
needed only for creating the binaries.&nbsp; 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:&nbsp; 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>

View File

@ -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>&Uacute;ltima atualiza&ccedil;&atilde;o: Sex Nov 16 10:53:50 EST 2007</P>
<P>Mantenedor atual: Bruce Momjian (<A href=
"mailto:bruce@momjian.us">bruce@momjian.us</A>)
</P>
<P>Traduzido por: Euler Taveira de Oliveira (<A href=
"mailto:euler@timbira.com">euler@timbira.com</A>)</P>
<P>A vers&atilde;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&iacute;ficas s&atilde;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 &eacute; PostgreSQL? Como ele &eacute; pronunciado?
O que &eacute; Postgres?<BR>
<A href="#item1.2">1.2</A>) Quem controla o PostgreSQL?<BR>
<A href="#item1.3">1.3</A>) Qual &eacute; a licen&ccedil;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 &eacute; a &uacute;ltima vers&atilde;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&atilde;o os bugs conhecidos ou caracter&iacute;sticas ausentes?<BR>
<A href="#item1.10">1.10</A>) Que documenta&ccedil;&atilde;o est&aacute; dispon&iacute;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&ccedil;&atilde;o (patch) ou me juntar a equipe de desenvolvimento?<BR>
<A href="#item1.13">1.13</A>) Como &eacute; o PostgreSQL comparado a outros <SMALL>SGBD</SMALL>s?<BR>
<A href="#item1.14">1.14</A>) O PostgreSQL gerenciar<61> as mudan&ccedil;as de hor&aacute;rio devido ao hor&aacute;rio de ver&atilde;o em v&aacute;rios pa&iacute;ses?<BR>
<H2 align="center">Perguntas sobre Clientes</H2>
<A href="#item2.1">2.1</A>) Quais interfaces est&atilde;o dispon&iacute;veis para PostgreSQL?<BR>
<A href="#item2.2">2.2</A>) Quais ferramentas est&atilde;o dispon&iacute;veis para utilizar o PostgreSQL com p&aacute;ginas Web?<BR>
<A href="#item2.3">2.3</A>) O PostgreSQL tem interfaces gr&aacute;ficas para interagir com usu&aacute;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&otilde;es de outras m&aacute;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&iacute;sticas de depura&ccedil;&atilde;o est&atilde;o dispon&iacute;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 &eacute; o processo de atualiza&ccedil;&atilde;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&ccedil;o um <SMALL>SELECT</SMALL> somente dos primeiros registros de uma consulta? Um registro rand&ocirc;mico?<BR>
<A href="#item4.2">4.2</A>) Como eu descubro quais tabelas, &iacute;ndices, bancos de dados e usu&aacute;rios est&atilde;o definidos? Como eu vejo as consultas utilizadas pelo <I>psql</I> para mostr&aacute;-los?<BR>
<A href="#item4.3">4.3</A>) Como voc&ecirc; muda o tipo de dado de uma coluna?<BR>
<A href="#item4.4">4.4</A>) Qual &eacute; o tamanho m&aacute;ximo de um registro, uma tabela e um banco de dados?<BR>
<A href="#item4.5">4.5</A>) Quanto espa&ccedil;o em disco &eacute; necess&aacute;rio para armazenar dados de um arquivo texto?<BR>
<A href="#item4.6">4.6</A>) Por que minhas consultas est&atilde;o lentas? Por que elas n&atilde;o est&atilde;o utilizando meus &iacute;ndices?<BR>
<A href="#item4.7">4.7</A>) Como eu vejo como o otimizador de consultas est&aacute; avaliando minha consulta?<BR>
<A href="#item4.8">4.8</A>) Como eu fa&ccedil;o buscas com express&otilde;es regulares e buscas com express&otilde;es regulares sem diferenciar mau&uacute;sculas de min&uacute;sculas? Como eu utilizo um &iacute;ndice para buscas sem distinguir mai&uacute;sculas de min&uacute;sculas?<BR>
<A href="#item4.9">4.9</A>) Em uma consulta, como eu detecto se um campo &eacute; <SMALL>NULL</SMALL>? Como eu posso concatenar poss&iacute;veis <SMALL>NULL</SMALL>s? Como eu posso ordenar por um campo que &eacute; <SMALL>NULL</SMALL> ou n&atilde;o?<BR>
<A href="#item4.10">4.10</A>) Qual &eacute; a diferen&ccedil;a entre os v&aacute;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&atilde;o lida com condi&ccedil;&atilde;o de corrida com outros usu&aacute;rios?<BR>
<A href="#item4.11.4">4.11.4</A>) Por que os n&uacute;meros da minha sequ&ecirc;ncia n&atilde;o s&atilde;o reutilizados quando uma transa&ccedil;&atilde;o &eacute; abortada? Por que h&aacute; intervalos nos n&uacute;meros da minha sequ&ecirc;ncia/coluna SERIAL?<BR>
<A href="#item4.12">4.12</A>) O que &eacute; um <SMALL>OID</SMALL>? O que &eacute; 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&atilde;o do PostgreSQL eu estou utilizando?<BR>
<A href="#item4.15">4.15</A>) Como eu crio uma coluna que conter&aacute; por padr&atilde;o a hora atual?<BR>
<A href="#item4.16">4.16</A>) Como eu fa&ccedil;o uma jun&ccedil;&atilde;o externa (outer join)?<BR>
<A href="#item4.17">4.17</A>) Como eu fa&ccedil;o consultas utilizando m&uacute;ltiplos bancos de dados?<BR>
<A href="#item4.18">4.18</A>) Como eu retorno m&uacute;ltiplos registros ou colunas de uma fun&ccedil;&atilde;o?<BR>
<A href="#item4.19">4.19</A>) Por que eu obtenho erros "relation with OID ######
does not exist" ao acessar tabelas tempor&aacute;rias em fun&ccedil;&otilde;es PL/PgSQL?<BR>
<A href="#item4.20">4.20</A>) Quais solu&ccedil;&otilde;es de replica&ccedil;&atilde;o est&atilde;o dispon&iacute;veis?<BR>
<A href="#item4.21">4.21</A>) Por que os nomes de minhas tabelas e colunas n&atilde;o
s&atilde;o reconhecidos em minha consulta? Por que as mai&uacute;sculas n&atilde;o s&atilde;o preservadas?<BR>
<HR>
<H2 align="center">Perguntas Gerais</H2>
<H3 id="item1.1">1.1) O que &eacute; PostgreSQL? Como ele &eacute; pronunciado? O que &eacute; Postgres?</H3>
<P>PostgreSQL &eacute; 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 &aacute;udio</a> est&aacute; dispon&iacute;vel).</P>
<P>O PostgreSQL &eacute; um sistema de banco de dados objeto-relacional que tem as
caracter&iacute;sticas de sistemas de bancos de dados comerciais tradicionais com
melhoramentos encontrados nos sistemas <SMALL>SGBD</SMALL>s de pr&oacute;xima gera&ccedil;&atilde;o.
PostgreSQL &eacute; livre e o c&oacute;digo-fonte completo est&aacute; dispon&iacute;vel.</P>
<P>O desenvolvimento do PostgreSQL &eacute; feito por um grupo de desenvolvedores
volunt&aacute;rios (na sua maioria) espalhados pelo mundo e que se comunicam via
Internet. &Eacute; um projeto da comunidade e n&atilde;o &eacute; 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 &eacute; um apelido para o PostgreSQL amplamente utilizado. Era o nome original do
projeto em Berkeley e dentre os outros apelidos &eacute; o preferido. Se voc&ecirc; acha
'PostgreSQL' dif&iacute;cil de pronunciar, diga apenas 'Postgres'.</P>
<H3 id="item1.2">1.2) Quem controla o PostgreSQL?<BR></H3>
<P>Se voc&ecirc; est&aacute; procurando por um mantenedor, comit&ecirc; central ou empresa
controladora do PostgreSQL, desista --- n&atilde;o h&aacute; um(a). N&oacute;s temos um
comit&ecirc; core e committers CVS, mas estes grupos s&atilde;o mais para quest&otilde;es
administrativas do que controle. O projeto &eacute; direcionado pela comunidade
de desenvolvedores e usu&aacute;rios, que qualquer um pode se juntar. Tudo o que
voc&ecirc; precisa &eacute; se inscrever nas listas de discuss&atilde;o e participar das
discuss&otilde;es. Veja a <a href="http://www.postgresql.org/docs/faqs.FAQ_DEV.html">
FAQ do desenvolvedor</A> para obter informa&ccedil;&otilde;es como se envolver com o
desenvolvimento do PostgreSQL.</P>
<H3 id="item1.3">1.3) Qual &eacute; a licen&ccedil;a do PostgreSQL?</H3>
<P>O PostgreSQL &eacute; distribu&iacute;do sob a licen&ccedil;a BSD cl&aacute;ssica. Basicamente,
ela permite que usu&aacute;rios fa&ccedil;am qualquer coisa com o c&oacute;digo, incluindo
revender os bin&aacute;rios sem o c&oacute;digo-fonte. A &uacute;nica restri&ccedil;&atilde;o &eacute; que voc&ecirc;
n&atilde;o nos responsabilize legalmente por problemas com o programa de computador.
H&aacute; tamb&eacute;m a exig&ecirc;ncia de que esta licen&ccedil;a apare&ccedil;a em todas as c&oacute;pias
do programa de computador. Aqui est&aacute; a licen&ccedil;a BSD que usamos atualmente:</P>
<P>PostgreSQL est&aacute; sujeito a seguinte licen&ccedil;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&iacute;vel com Unix deve ser capaz de executar o PostgreSQL. As plataformas que foram testadas antes do lan&ccedil;amento de uma vers&atilde;o s&atilde;o listadas nas instru&ccedil;&otilde;es de instala&ccedil;&atilde;o.</P>
<P>O PostgreSQL tamb&eacute;m executa nativamente nos sistemas operacionais Microsoft Windows
baseados no NT tais como Win200 SP4, WinXP e Win2003. Um instalador pr&eacute;-empacotado est&aacute;
dispon&iacute;vel em <a href= "http://pgfoundry.org/projects/pginstaller">
http://pgfoundry.org/projects/pginstaller</a>. Vers&otilde;es do Windows baseadas no MS-DOS
(Win95, Win98, WinMe) podem executar o PostgreSQL utilizando o Cygwin.</P>
<p>H&aacute; tamb&eacute;m uma vers&atilde;o para o Novell Netware 6 em
<a href="http://forge.novell.com">http://forge.novell.com</a>
e uma vers&atilde;o para OS/2 (eComStation) em <a href=
"http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&amp;button=Search&amp;key=postgreSQL&amp;stype=all&amp;sort=type&amp;dir=%2F">
http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&amp;button=Search&amp;key=postgreSQL&amp;stype=all&amp;sort=type&amp;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 &eacute; a &uacute;ltima vers&atilde;o?</H3>
<P>A &uacute;ltima vers&atilde;o do PostgreSQL &eacute; a vers&atilde;o 8.2.5.</P>
<P>N&oacute;s planejamos lan&ccedil;ar vers&otilde;es novas a cada ano com vers&otilde;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&ecirc;ncia a muitos de seus
usu&aacute;rios via e-mail. O principal s&iacute;tio web para inscri&ccedil;&atilde;o nas listas
de e-mail &eacute; <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&atilde;o um bom lugar para in&iacute;cio.</P>
<P>O principal canal de IRC &eacute; o <I>#postgresql</I> na Freenode (<I>irc.freenode.net</I>). Para se conectar voc&ecirc; pode utilizar o comando Unix <code>irc -c '#postgresql' "$USER" irc.freenode.net</code> ou utilizar qualquer outro cliente de IRC. Um canal hisp&acirc;nico (<I>#postgresql-es</I>) e um franc&ecirc;s (<I>#postgresqlfr</I>) tamb&eacute;m existem na mesma rede. H&aacute; tamb&eacute;m um canal PostgreSQL na EFNet.</P>
<P>Uma lista de empresas que prestam suporte comercial est&aacute; dispon&iacute;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&ecirc;ncia de um bug?</H3>
<P>Visite o formul&aacute;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&eacute;m o nosso ftp <A href=
"ftp://ftp.postgresql.org/pub">ftp://ftp.postgresql.org/pub</A> para
ver se h&aacute; uma vers&atilde;o mais recente do PostgreSQL.</P>
<P>Bugs submetidos utilizando o formul&aacute;rio ou informado a qualquer
lista de discuss&atilde;o do PostgreSQL tipicamente gera uma das seguintes
respostas:</P>
<ul>
<li>N&atilde;o &eacute; um bug e o porqu&ecirc;</li>
<li>&Eacute; um bug conhecido e j&aacute; est&aacute; na lista de
<A href="http://www.postgresql.org/docs/faqs.TODO.html">AFAZERES</A></li>
<li>O bug foi corrigido na vers&atilde;o atual</li>
<li>O bug foi corrigido mas n&atilde;o foi empacotado em um vers&atilde;o oficial</li>
<li>Um pedido foi feito para obter informa&ccedil;&otilde;es detalhadas:
<ul>
<li>Sistema Operacional</li>
<li>Vers&atilde;o do PostgreSQL</li>
<li>Exemplo de teste que reproduz o bug</li>
<li>Informa&ccedil;&otilde;es sobre depura&ccedil;&atilde;o</li>
<li>Sa&iacute;da reconstituidora de vest&iacute;gios (backtrace) do depurador</li>
</ul>
</li>
<li>O bug &eacute; novo. O seguinte pode ocorrer:
<ul>
<li>Uma corre&ccedil;&atilde;o &eacute; criada e ser&aacute; inclu&iacute;da na pr&oacute;xima vers&atilde;o</li>
<li>O bug n&atilde;o pode ser corrigido imediatamente e &eacute; 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&atilde;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&eacute;m bugs conhecidos, funcionalidades ausentes e planos futuros.</P>
<P>Uma solicita&ccedil;&atilde;o de funcionalidade geralmente resulta em uma das
seguintes respostas:</P>
<ul>
<li>A funcionalidade j&aacute; est&aacute; na lista de <A href="http://www.postgresql.org/docs/faqs.TODO.html">AFAZERES</A></li>
<li>A funcionalidade n&atilde;o &eacute; desej&aacute;vel porque:
<ul>
<li>Ela duplica uma funcionalidade existente que j&aacute; segue o
padr&atilde;o SQL</li>
<li>A funcionalidade aumentar&aacute; a complexidade do c&oacute;digo mas
adicionar&aacute; pouco benef&iacute;cio</li>
<li>A funcionalidade ser&aacute; insegura ou n&atilde;o-confi&aacute;vel</li>
</ul>
</li>
<li>A nova funcionalidade &eacute; adicionada a lista de
<A href="http://www.postgresql.org/docs/faqs.TODO.html">AFAZERES</A></li>
</ul>
<P>O PostgreSQL n&atilde;o utiliza sistema de acompanhamento de bugs porque
n&oacute;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&aacute;tica, bugs n&atilde;o duram muito no programa; e bugs que afetam
uma grande quantidade de usu&aacute;rios s&atilde;o corrigidos rapidamente. O &uacute;nico lugar
para encontrar todas as mudan&ccedil;as, melhorias e corre&ccedil;&otilde;es em uma vers&atilde;o do
PostgreSQL &eacute; ler as mensagens de log do
<a href="http://www.postgresql.org/developer/sourcecode/">CVS</a>. At&eacute; mesmo
as notas de lan&ccedil;amento n&atilde;o listam todas as mudan&ccedil;as feitas no programa.</P>
<H3 id="item1.10">1.10) Que documenta&ccedil;&atilde;o est&aacute; dispon&iacute;vel?</H3>
<P>O PostgreSQL inclui vasta documenta&ccedil;&atilde;o, incluindo um manual extenso,
p&aacute;ginas de manuais (man pages) e alguns exemplos teste. Veja o diret&oacute;rio
<I>/doc</I>. Voc&ecirc; tamb&eacute;m pode pesquisar os manuais online em <A href=
"http://www.postgresql.org/docs">http://www.postgresql.org/docs</A>.
</P>
<P>H&aacute; dois livros sobre PostgreSQL dispon&iacute;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&aacute; uma lista de livros sobre PostgreSQL dispon&iacute;veis para compra. Um dos mais
populares &eacute; o do Korry Douglas. Uma lista de an&aacute;lise sobre os livros pode ser
encontrada em <A href=
"http://www.postgresql.org/docs/books/">http://www.postgresql.org/docs/books/</A>.
H&aacute; tamb&eacute;m uma cole&ccedil;&atilde;o de artigos t&eacute;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&ccedil;&otilde;es sobre tipos, operadores, fun&ccedil;&otilde;es, agrega&ccedil;&otilde;es, etc. - utilize \?
para mostrar os comandos dispon&iacute;veis.</P>
<P>Nosso s&iacute;tio web cont&eacute;m ainda mais documenta&ccedil;&atilde;o.</P>
<H3 id="item1.11">1.11) Como eu posso aprender <SMALL>SQL</SMALL>?</H3>
<P>Primeiro, considere os livros espec&iacute;ficos sobre PostgreSQL mencionados
acima. Muitos de nossos usu&aacute;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&aacute; tamb&eacute;m bons tutoriais dispon&iacute;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&ccedil;&atilde;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 &eacute; o PostgreSQL comparado a outros <SMALL>SGBD</SMALL>s?</H3>
<P>H&aacute; v&aacute;rias maneiras de se medir um software: funcionalidades, performance, confiabilidade, suporte e pre&ccedil;o.</P>
<DL>
<DT><B>Funcionalidades</B></DT>
<DD>PostgreSQL tem muitas caracter&iacute;sticas presentes em muitos <SMALL>SGBD</SMALL>s comerciais como transa&ccedil;&otilde;es, subconsultas, gatilhos, vis&otilde;es, integridade referencial de chave estrangeira e bloqueio (lock) sofisticado. N&oacute;s temos algumas funcionalidades que eles n&atilde;o tem, como tipos definidos pelo usu&aacute;rio, heran&ccedil;a, regras e controle de concorr&ecirc;ncia de m&uacute;ltiplas vers&otilde;es para reduzir bloqueios (locks).<BR>
<BR>
</DD>
<DT><B>Performance</B></DT>
<DD>A performance do PostgreSQL &eacute; compar&aacute;vel a outros bancos de dados comerciais e de c&oacute;digo livre. Ele &eacute; mais r&aacute;pido em algumas coisas, mais lento em outras. Nossa performance &eacute; geralmente +/- 10% comparada a de outros bancos de dados.
<BR>
</DD>
<DT><B>Confiabilidade</B></DT>
<DD>N&oacute;s sabemos que um <SMALL>SGBD</SMALL> deve ser confi&aacute;vel ou ele &eacute; in&uacute;til. N&oacute;s empenhamos em lan&ccedil;ar vers&otilde;es bem testadas, de c&oacute;digo est&aacute;vel e que tenha o m&iacute;nimo de bugs. Cada vers&atilde;o tem no m&iacute;nimo um m&ecirc;s de teste em vers&atilde;o beta, e nosso hist&oacute;rico de vers&otilde;es mostra que n&oacute;s podemos fornecer vers&otilde;es est&aacute;veis e s&oacute;lidas que est&atilde;o prontas para uso em produ&ccedil;&atilde;o. N&oacute;s acreditamos que somos comparados a nosso favor com outros sistemas de bancos de dados nessa &aacute;rea.<BR>
<BR>
</DD>
<DT><B>Suporte</B></DT>
<DD>Nossas listas de discuss&atilde;o fornecem contato com um grupo de desenvolvedores e usu&aacute;rios para ajudar a resolver muitos problemas encontrados. Enquanto n&oacute;s n&atilde;o podemos garantir o conserto, <SMALL>SGBD</SMALL>s comerciais nem sempre fornecem tamb&eacute;m. Com acesso direto aos desenvolvedores, a comunidade de usu&aacute;rios, manuais e o c&oacute;digo fonte faz com que o suporte do PostgreSQL seja superior ao de outros <SMALL>SGBD</SMALL>s. H&aacute; suporte comercial por incidente dispon&iacute;veis para aqueles que precisam de um. (Veja <A href="#item1.7">se&ccedil;&atilde;o 1.7 da FAQ</A>).<BR>
<BR>
</DD>
<DT><B>Pre&ccedil;o</B></DT>
<DD>N&oacute;s somos livres para uso dele tanto comercial quanto n&atilde;o comercial. Voc&ecirc; pode adicionar nosso c&oacute;digo ao seu produto sem limita&ccedil;&otilde;es, exceto aquelas descritas na nossa licen&ccedil;a BSD mencionada acima.<BR>
<BR>
</DD>
</DL>
<H3 id="item1.14">1.14) O PostgreSQL gerenciar&aacute; mudan&ccedil;as no hor&aacute;rio devido ao hor&aacute;rio de ver&atilde;o em v&aacute;rios pa&iacute;ses?</H3>
<P>Mudan&ccedil;as no hor&aacute;rio de ver&atilde;o dos USA foram inclu&iacute;das nas vers&otilde;es 8.0 .[4+] do PostgreSQL e em todas as vers&otilde;es grandes, i.e. 8.1. Mudan&ccedil;as no Canad&aacute; e Austr&aacute;lia Oeste foram inclu&iacute;das na 8.0.[10+], 8.1.[6+] e em todas as vers&otilde;es grandes subsequentes. Vers&otilde;es do PostgreSQL anteriores a 8.0 utilizam o banco de dados de zona hor&aacute;ria do sistema operacional para informa&ccedil;&otilde;es sobre hor&aacute;rio de ver&atilde;o.</P>
<HR>
<H2 align="center">Perguntas sobre Clientes</H2>
<H3 id="item2.1">2.1) Quais interfaces est&atilde;o dispon&iacute;veis para PostgreSQL?</H3>
<p>A instala&ccedil;&atilde;o do PostgreSQL inclui somente as interfaces <SMALL>C</SMALL> e
<SMALL>C</SMALL> embutida. Todas as outras interfaces s&atilde;o projetos independentes
que podem ser obtidos separadamente; sendo separados permitem que eles tenham
suas pr&oacute;prias datas de lan&ccedil;amento e time de desenvolvedores.</P>
<P>Algumas linguagens de programa&ccedil;&atilde;o como <SMALL>PHP</SMALL> incluem uma
interface para PostgreSQL. Interfaces para linguagens como Perl,
<SMALL>TCL</SMALL>, Python e muitas outras est&atilde;o dispon&iacute;veis em
<a href="http://www.pgfoundry.org">http://www.pgfoundry.org</A>.
</P>
<H3 id="item2.2">2.2) Quais ferramentas est&atilde;o dispon&iacute;veis para utilizar o PostgreSQL com p&aacute;ginas Web?</H3>
<P>Uma boa introdu&ccedil;&atilde;o para p&aacute;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&ccedil;&atilde;o na Web, PHP (<A
href="http://www.php.net">http://www.php.net</A>)
&eacute; 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&aacute;ficas para iteragir com o usu&aacute;rio?</H3>
<P>H&aacute; um vasto n&uacute;mero de Ferramentas Gr&aacute;ficas (GUI), que est&atilde;o dispon&iacute;veis
para o PostgreSQL, comerciais e de desenvolvedores de c&oacute;digo aberto. Uma
lista detalhada pode ser encontrada em <A href="http://www.postgresql.org/docs/techdocs.54">
Documenta&ccedil;&atilde;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&ccedil;&atilde;o <I>--prefix</I> quando executar o <I>configure</I>.</P>
<H3 id="item3.2">3.2) Como eu controlo conex&otilde;es de outras m&aacute;quinas?</H3>
<P>Por padr&atilde;o, o PostgreSQL s&oacute; permite conex&otilde;es da m&aacute;quina local utilizando soquetes de dom&iacute;nio Unix ou conex&otilde;es TCP/IP. Outras m&aacute;quinas n&atilde;o poder&atilde;o conectar-se a menos que voc&ecirc; modifique <I>listen_addresses</I> no <I>postgresql.conf</I>, habilite a autentica&ccedil;&atilde;o por m&aacute;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&aacute; tr&ecirc;s grandes &aacute;reas para melhorar a performance em potencial:</P>
<DL>
<DT><B>Mudan&ccedil;a de Consultas</B></DT>
<DD>Isto involve modificar consultas para obter melhor performance:
<ul>
<li>Cria&ccedil;&atilde;o de &iacute;ndices, incluir express&otilde;es e &iacute;ndices parciais</li>
<li>Utiliza&ccedil;&atilde;o o COPY ao inv&eacute;s de m&uacute;ltiplos comandos <SMALL>INSERT</SMALL>s</li>
<li>Agrupamento de m&uacute;ltiplos comandos em uma &uacute;nica transa&ccedil;&atilde;o para diminuir
a despesa com efetiva&ccedil;&otilde;es (commit)</li>
<li>Utiliza&ccedil;&atilde;o do <SMALL>CLUSTER</SMALL> quando recuperar v&aacute;rios registros de
um &iacute;ndice</li>
<li>Utiliza&ccedil;&atilde;o do <SMALL>LIMIT</SMALL> para retornar um subconjunto da sa&iacute;da
da consulta</li>
<li>Utiliza&ccedil;&atilde;o de Consultas preparadas</li>
<li>Utiliza&ccedil;&atilde;o de <SMALL>ANALYZE</SMALL> para manter as estat&iacute;sticas do
otimizador corretas</li>
<li>Utiliza&ccedil;&atilde;o regular do <SMALL>VACUUM</SMALL> ou <I>pg_autovacuum</I></li>
<li>Remo&ccedil;&atilde;o de &iacute;ndices durante grande mudan&ccedil;a de dados</li>
</ul><BR>
<BR>
</DD>
<DT><B>Configura&ccedil;&atilde;o do Servidor</B></DT>
<DD>Um grande n&uacute;mero de configura&ccedil;&otilde;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&aacute;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&ccedil;&atilde;o do Hardware</B></DT>
<DD>O efeito do hardware na performance &eacute; 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&iacute;sticas de depura&ccedil;&atilde;o est&atilde;o dispon&iacute;veis?</H3>
<P>H&aacute; muitas vari&aacute;veis de configura&ccedil;&atilde;o do servidor <CODE>log_*</CODE>
que habilitam a exibi&ccedil;&atilde;o de consultas e estat&iacute;sticas que podem ser
muito &uacute;teis para depura&ccedil;&atilde;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&ecirc; atingiu o limite padr&atilde;o de 100 sess&otilde;es. Voc&ecirc;
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 &eacute; o processo de atualiza&ccedil;&atilde;o do PostgreSQL?</H3>
<P>Veja <a
href="http://www.postgresql.org/support/versioning">http://www.postgresql.org/support/versioning</a>
para discuss<73>o geral sobre atualiza<7A><61>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&ccedil;&otilde;es espec&iacute;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&iacute;vel, pessoas tendem a acreditar que todos os hardwares de PC s&atilde;o de mesma qualidade. N&atilde;o &eacute; verdade. ECC RAM, SCSI e placas m&atilde;e de qualidade s&atilde;o mais confi&aacute;veis e t&ecirc;m uma melhor performance do que hardwares mais baratos. O PostgreSQL executar&aacute; em quase todo hardware, mas se a confiabilidade e a performance forem importantes &eacute; prudente pesquisar sobre as op&ccedil;&otilde;es de hardware. Nossas listas de discuss&atilde;o podem ser usadas para discutir op&ccedil;&otilde;es de hardware e dilemas.</P>
<HR>
<H2 align="center">Perguntas Operacionais</H2>
<H3 id="item4.1">4.1) Como eu fa&ccedil;o um <SMALL>SELECT</SMALL> somente dos primeiros registros de uma consulta? Um registro rand&ocirc;mico?</H3>
<P>Para obter somente alguns registros, se voc&ecirc; sabe o n&uacute;mero de
registros necess&aacute;rios ao executar o <SMALL>SELECT</SMALL> utilize
o <SMALL>LIMIT</SMALL>. Se um &iacute;ndice corresponde no <SMALL>ORDER
BY</SMALL> &eacute; poss&iacute;vel que a consulta toda n&atilde;o tenha que ser
executada. Se voc&ecirc; n&atilde;o sabe o n&uacute;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&ocirc;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, &iacute;ndices, bancos de dados e usu&aacute;rios est&atilde;o definidos? Como eu vejo as consultas utilizadas pelo <I>psql</I> para mostr&aacute;-los?</H3>
<P>Utilize o comando \dt para ver tabelas no <I>psql</I>. Para obter
uma lista completa dos comandos no psql voc&ecirc; pode utilizar \?.
Alternativamente, voc&ecirc; pode ler o c&oacute;digo-fonte do <I>psql</I> no arquivo
<I>pgsql/src/bin/psql/describe.c</I>, ele cont&eacute;m os comandos <SMALL>SQL</SMALL>
que geram a sa&iacute;da para os comandos de contrabarra do <I>psql</I>. Voc&ecirc;
tamb&eacute;m pode iniciar o <I>psql</I> com a op&ccedil;&atilde;o <I>-E</I> para que as consultas
utilizadas para executar os comandos que voc&ecirc; informou seja exibida.
O PostgreSQL tamb&eacute;m fornece uma inteface compat&iacute;vel com <SMALL>SQL</SMALL> do
INFORMATION SCHEMA que voc&ecirc; pode consultar para obter informa&ccedil;&atilde;o sobre o
banco de dados.</P>
<P>H&aacute; tamb&eacute;m tabelas do sistema que come&ccedil;am com <I>pg_</I> que os descrevem
tamb&eacute;m.</P>
<P>Utilizando o <I>psql -l</I> listar&aacute; todos os bancos de dados.</P>
<P>Veja tamb&eacute;m o arquivo <I>pgsql/src/tutorial/syscat.source</I>. Ele
ilustra muitos dos comandos <SMALL>SELECT</SMALL>s necess&aacute;rios para obter
informa&ccedil;&atilde;o das tabelas de sistema do banco de dados.</P>
<H3 id="item4.3">4.3) Como voc&ecirc; muda o tipo de dado de uma coluna?</H3>
<P>Mudar o tipo de dado de uma coluna pode ser feito facilmente na vers&atilde;o 8.0
ou superior com <SMALL>ALTER TABLE ALTER COLUMN TYPE</SMALL>.</P>
<P>Em vers&otilde;es anteriores, fa&ccedil;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&ecirc; pode ent&atilde;o querer fazer um <I>VACUUM FULL tab</I> para recuperar
o espa&ccedil;o em disco utilizado pelos registros expirados.</P>
<H3 id="item4.4">4.4) Qual &eacute; o tamanho m&aacute;ximo de um registro, uma tabela e um banco de dados?</H3>
<P>Estes s&atilde;o os limites:</P>
<BLOCKQUOTE>
<TABLE>
<TR><TD>Tamanho m&aacute;ximo de um banco de dados?</TD><TD>ilimitado (existem bancos de dados de 32 TB)</TD></TR>
<TR><TD>Tamanho m&aacute;ximo de uma tabela?</TD><TD>32 TB</TD></TR>
<TR><TD>Tamanho m&aacute;ximo de um registro?</TD><TD>400 GB</TD></TR>
<TR><TD>Tamanho m&aacute;ximo de um campo?</TD><TD>1 GB</TD></TR>
<TR><TD>N&uacute;mero m&aacute;ximo de registros em uma tabela?</TD><TD>ilimitado</TD></TR>
<TR><TD>N&uacute;mero m&aacute;ximo de colunas em uma tabela?</TD><TD>250-1600 dependendo dos tipos das colunas</TD></TR>
<TR><TD>N&uacute;mero m&aacute;ximo de &iacute;ndices em uma tabela?</TD><TD>ilimitado</TD></TR>
</TABLE>
</BLOCKQUOTE>
<P>&Eacute; claro, que eles n&atilde;o s&atilde;o ilimitados, mas limitados
ao espa&ccedil;o em disco dispon&iacute;vel e espa&ccedil;o em mem&oacute;ria/swap.
A Performance ser&aacute; penalizada quando estes valores se tornarem grandes.</P>
<P>O tamanho m&aacute;ximo de uma tabela com 32 TB n&atilde;o requer suporte a
arquivos grandes do sistema operacional. Tabelas grandes s&atilde;o armazenadas
como m&uacute;ltiplos arquivos de 1 GB ent&atilde;o o limite do sistema de
arquivos n&atilde;o &eacute; importante.</P>
<P>O tamanho m&aacute;ximo de uma tabela, o tamanho de um registro e o n&uacute;mero
m&aacute;ximo de colunas podem ser quadruplicados aumentando-se o tamanho padr&atilde;o
do bloco para 32k. O tamanho m&aacute;ximo de uma tabela pode tamb&eacute;m ser aumentado utilizando
particionamento de tabela.</P>
<P>Uma limita&ccedil;&atilde;o &eacute; que &iacute;ndices n&atilde;o podem ser criados em colunas maiores do que
2.000 caracteres. Felizmente, tais &iacute;ndices s&atilde;o raramente necess&aacute;rios. Unicidade &eacute;
melhor garantida por um &iacute;ndice de uma fun&ccedil;&atilde;o de um hash MD5 de uma coluna longa, e
indexa&ccedil;&atilde;o de texto longo permite a busca de palavras dentro da coluna.</P>
<H3 id="item4.5">4.5) Quanto espa&ccedil;o em disco &eacute; necess&aacute;rio para armazenar dados de um arquivo texto?</H3>
<P>Um banco de dados PostgreSQL ir&aacute; requerer at&eacute; cinco vezes a quantidade de espa&ccedil;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&ccedil;&atilde;o em cada linha. Suponha que o tamanho m&eacute;dio da descri&ccedil;&atilde;o &eacute; de vinte bytes. O arquivo ter&aacute; 2,8 MB. O tamanho do arquivo do banco de dados PostgreSQL que cont&eacute;m esses dados pode ser estimado em 5,2 MB:</P>
<PRE>
24 bytes: cada cabe&ccedil;alho de registro (aproximadamente)
24 bytes: um campo int e um campo texto
+ 4 bytes: ponteiro na p&aacute;gina para a tupla
-------------------------------------------
52 bytes por registro
O tamanho de uma p&aacute;gina de dados no PostgreSQL &eacute; 8192 bytes (8 KB), ent&atilde;o:
8192 bytes por p&aacute;gina
------------------------ = 158 registros por p&aacute;gina do banco de dados (arredondado para baixo)
52 bytes por registro
100000 registros de dados
---------------------------- = 633 p&aacute;ginas do banco de dados (arredondado para cima)
158 registros por p&aacute;gina
633 p&aacute;ginas do banco de dados * 8192 bytes por p&aacute;gina = 5.185.536 bytes (5,2 MB)
</PRE>
<P>&Iacute;ndices n&atilde;o requerem muito espa&ccedil;o, mas cont&eacute;m
dados que foram indexados, ent&atilde;o eles podem ocupar algum espa&ccedil;o.</P>
<P><SMALL>NULL</SMALL>s s&atilde;o armazenados como bitmaps, ent&atilde;o eles
utilizam muito pouco espa&ccedil;o.</P>
<H3 id="item4.6">4.6) Por que minhas consultas est&atilde;o lentas? Por que elas n&atilde;o est&atilde;o utilizando meus &iacute;ndices?</H3>
<P>&Iacute;ndices n&atilde;o s&atilde;o utilizados por toda consulta. &Iacute;ndices s&atilde;o utilizados somente
se a tabela &eacute; maior do que um tamanho m&iacute;nimo, e a consulta seleciona somente uma
pequena porcentagem dos registros da tabela. Isto porque o acesso rand&ocirc;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 &iacute;ndice deveria ser utilizado, o PostgreSQL deve ter
estat&iacute;sticas sobre a tabela. Estas estat&iacute;sticas s&atilde;o coletadas utilizando o
<SMALL>VACUUM ANALYZE</SMALL> ou simplesmente o <SMALL>ANALYZE</SMALL>.
Utilizando estat&iacute;sticas, o otimizador sbae quantos registros est&atilde;o na tabela,
e pode melhor determinar se &iacute;ndices deveriam ser utilizados.
Estat&iacute;sticas tamb&eacute;m s&atilde;o &uacute;teis para determinar a ordem de jun&ccedil;&atilde;o &oacute;tima e m&eacute;todos
de jun&ccedil;&atilde;o. Cole&ccedil;&atilde;o de estat&iacute;sticas deveriam ser feitas periodicamente a
medida que o conte&uacute;do da tabela muda.</P>
<P>&Iacute;ndices n&atilde;o s&atilde;o normalmente utilizados para <SMALL>ORDER BY</SMALL> ou para
fazer jun&ccedil;&otilde;es. Uma busca sequencial seguido por uma ordena&ccedil;&atilde;o expl&iacute;cita &eacute;
geralmente mais r&aacute;pida do que uma busca indexada em uma tabela grande.
Contudo, <SMALL>LIMIT</SMALL> combinado com <SMALL>ORDER BY</SMALL>
frequentemente utilizar&aacute; &iacute;ndice porque somente uma pequena por&ccedil;&atilde;o da tabela
ser&aacute; retornada.</P>
<P>Se voc&ecirc; acredita que o otimizador est&aacute; 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 &eacute; realmente mais r&aacute;pida.</P>
<P>Ao utilizar operadores curinga tais como <SMALL>LIKE</SMALL> ou <I>~</I>,
&iacute;ndices podem ser utilizados somente em algumas condi&ccedil;&otilde;es:</P>
<UL>
<LI>O in&iacute;cio da cadeia de caracteres da busca deve ser iniciar com uma
cadeia de caracteres, i.e.
<UL>
<LI>modelos <SMALL>LIKE</SMALL> n&atilde;o devem iniciar com <I>%</I>.</LI>
<LI>modelos <I>~</I> (express&otilde;es regulares) devem iniciar com <I>^</I>.</LI>
</UL></LI>
<LI>A cadeia de caracteres utilizada na busca n&atilde;o pode iniciar com a classe de
caracteres e.g. [a-e].</LI>
<LI>Busca que n&atilde;o diferenciam mai&uacute;sculas de min&uacute;sculas tais como <SMALL>ILIKE</SMALL> e
<I>~*</I> n&atilde;o utilizam &iacute;ndices. Em vez disso, utilize &iacute;ndice de express&atilde;o, que
&eacute; descrito na se&ccedil;&atilde;o <a href="#item4.8">4.8</a>.</LI>
<LI>O idioma padr&atilde;o <I>C</I> deve ser usando durante o <i>initdb</i>
porque n&atilde;o &eacute; poss&iacute;vel saber o pr&oacute;ximo caracter em idiomas que n&atilde;o sejam o C.
Voc&ecirc; pode criar um &iacute;ndice especial <CODE>text_pattern_ops</CODE> para tais casos
que funcionam somente para indexa&ccedil;&atilde;o com <SMALL>LIKE</SMALL>. Tamb&eacute;m &eacute;
poss&iacute;vel utilizar indexa&ccedil;&atilde;o de busca textual para buscas por palavras.
</LI>
</UL>
<P>Em vers&otilde;es anteriores a 8.0, &iacute;ndices frequentemente n&atilde;o podem ser utilizados
a menos que os tipos de dados correspondam aos tipos de coluna do &iacute;ndice. Isto era
particularmente verdadeiro para &iacute;ndices de coluna int2, int8 e numeric.</P>
<H3 id="item4.7">4.7) Como eu vejo como o otimizador de consulta est&aacute; avaliando a minha consulta?</H3>
<P>Veja o comando <SMALL>EXPLAIN</SMALL> no manual.</P>
<H3 id="item4.8">4.8) Como eu fa&ccedil;o buscas com express&otilde;es regulares
e buscas com express&otilde;es regulares sem diferenciar mai&uacute;sculas de min&uacute;sculas? Como eu
utilizo um &iacute;ndice para buscas que n&atilde;o diferenciam mai&uacute;sculas de min&uacute;sculas?</H3>
<P>O operador <I>~</I> faz avalia&ccedil;&atilde;o de express&otilde;es regulares,
e <I>~*</I> faz avalia&ccedil;&atilde;o n&atilde;o sens&iacute;vel a mai&uacute;sculas
de express&otilde;es regulares. A variante n&atilde;o sens&iacute;vel a mai&uacute;sculas
do <SMALL>LIKE</SMALL> &eacute; chamada de <SMALL>ILIKE</SMALL>.</P>
<P>Compara&ccedil;&otilde;es de igualdade n&atilde;o sens&iacute;veis a mai&uacute;sculas
s&atilde;o normalmente expressadas como:</P>
<PRE>
SELECT *
FROM tab
WHERE lower(col) = 'abc';
</PRE>
Isso n&atilde;o ir&aacute; utilizar o &iacute;ndice padr&atilde;o. Contudo, se
voc&ecirc; criar um &iacute;ndice de express&atilde;o, ele ser&aacute; utilizado:
<PRE>
CREATE INDEX tabindex ON tab (lower(col));
</PRE>
<P>Se o &iacute;ndice acima &eacute; criado como <SMALL>UNIQUE</SMALL>, embora a
coluna possa armazenar caracteres mai&uacute;sculos e min&uacute;sculos, ele n&atilde;o
pode ter valores id&ecirc;nticos que diferem apenas em letras mai&uacute;sculas e min&uacute;sculas.
Para for&ccedil;ar uma letra mai&uacute;scula ou min&uacute;scula a ser armazenada na coluna, utilize
uma restri&ccedil;&atilde;o <SMALL>CHECK</SMALL> ou um gatilho.</P>
<H3 id="item4.9">4.9) Em uma consulta, como eu detecto se um campo &eacute; <SMALL>NULL</SMALL>? Como eu posso concatenar poss&iacute;veis <SMALL>NULL</SMALL>s? Como eu posso ordenar por um campo que &eacute; <SMALL>NULL</SMALL> ou n&atilde;o?</H3>
<P>Voc&ecirc; 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&iacute;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&aacute;usula
<SMALL>ORDER BY</SMALL>. Coisas que s&atilde;o <I>verdadeiro</I> ser&atilde;o ordenadas acima
das coisas que s&atilde;o <I>falso</I>, ent&atilde;o a consulta a seguir ir&aacute; colocar
entradas NULL no in&iacute;cio da lista de resultados:</P>
<PRE>
SELECT *
FROM tab
ORDER BY (col IS NOT NULL)
</PRE>
<H3 id="item4.10">4.10) Qual &eacute; a diferen&ccedil;a entre os v&aacute;rios tipos de dado de caracteres?</H3>
<BLOCKQUOTE>
<TABLE>
<TR><TH>Tipo</TH><TH>Nome Interno</TH><TH>Observa&ccedil;&atilde;o</TH></TR>
<TR><TD>VARCHAR(n)</TD><TD>varchar</TD><TD>tamanho especifica o tamanho
m&aacute;ximo, sem preenchimento</TD></TR>
<TR><TD>CHAR(n)</TD><TD>bpchar</TD><TD>preenchimento em branco para
comprimento fixo espec&iacute;fico</TD></TR>
<TR><TD>TEXT</TD><TD>text</TD><TD>nenhum limite superior espec&iacute;fico no
comprimento</TD></TR>
<TR><TD>BYTEA</TD><TD>bytea</TD><TD>vetor de bytes de comprimento vari&aacute;vel
(seguro a byte nulo)</TD></TR>
<TR><TD>"char"</TD><TD>char</TD><TD>um caracter</TD></TR>
</TABLE>
</BLOCKQUOTE>
<P>Voc&ecirc; ver&aacute; o nome interno quando examinar o cat&aacute;logo do sistema e em algumas mensagens de erro.</P>
<P>Os primeiros quatro tipos acima s&atilde;o do tipo "varlena" (i.e., os primeiros quatro bytes no disco s&atilde;o o comprimento seguido pelos dados). Consequentemente o espa&ccedil;o atual utilizado &eacute; ligeiramente maior do que o tamanho declarado. Contudo, valores longos s&atilde;o tamb&eacute;m sujeitos a compress&atilde;o, ent&atilde;o o espa&ccedil;o em disco pode tamb&eacute;m ser bem menor do que o esperado.</P>
<SMALL>VARCHAR(n)</SMALL> &eacute; melhor quando est&aacute; armazenando cadeias de caracteres de comprimento vari&aacute;vel e h&aacute; um limite de tamanho desta cadeia. <SMALL>TEXT</SMALL> &eacute; para cadeias de caracteres de comprimento ilimitado, com o m&aacute;ximo de um gigabyte.
<P><SMALL>CHAR(n)</SMALL> &eacute; para armazenar cadeias de caracteres que s&atilde;o todas do mesmo tamanho. <SMALL>CHAR(n)</SMALL> preenche com espa&ccedil;os em branco at&eacute; o tamanho especificado, enquanto o <SMALL>VARCHAR(n)</SMALL> armazena somente os caracteres fornecidos. <SMALL>BYTEA</SMALL> &eacute; para armazenar dados bin&aacute;rios, particularmente valores que incluem bytes <SMALL>NULL</SMALL>. Todos os tipos descritos aqui tem caracter&iacute;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&ecirc;ncia. Por exemplo:</P>
<PRE>
CREATE TABLE pessoa (
id SERIAL,
nome TEXT
);
</PRE>
&eacute; 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&ecirc;ncias automaticamente criadas s&atilde;o nomeadas como
&lt;<i>tabela</i>&gt;_&lt;<i>colunaserial</i>&gt;_<i>seq</i>, onde
<i>tabela</i> e <i>colunaserial</i> s&atilde;o os nomes da tabela e
da coluna serial, respectivamente. Veja a p&aacute;gina sobre
<I>create_sequence</I> no manual para obter informa&ccedil;&otilde;es
adicionais sobre sequ&ecirc;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&oacute;ximo valor <SMALL>SERIAL</SMALL>
de uma sequ&ecirc;ncia &eacute; 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&ecirc; tamb&eacute;m pode chamar <I>nextval()</I> e utilizar o valor no
<SMALL>INSERT</SMALL> ou chamar <I>currval()</I> <I>ap&oacute;s</I> o
<SMALL>INSERT</SMALL>.
<H3 id="item4.11.3">4.11.3) <I>currval()</I> n&atilde;o lida com condi&ccedil;&atilde;o de corrida com outros usu&aacute;rios?</H3>
<P>N&atilde;o. <I>currval()</I> retorna o valor atual atribuido pela sua sess&atilde;o, e n&atilde;o por todas as sess&otilde;es.</P>
<H3 id="item4.11.4">4.11.4) Por que os n&uacute;meros da minha sequ&ecirc;ncia n&atilde;o s&atilde;o reutilizados quando uma transa&ccedil;&atilde;o &eacute; abortada? Por que h&aacute; intervalos nos n&uacute;meros da minha sequ&ecirc;ncia/coluna SERIAL?</H3>
<P>Para melhorar a concorr&ecirc;ncia, valores da sequ&ecirc;ncia s&atilde;o atribu&iacute;dos a transa&ccedil;&otilde;es correntes e n&atilde;o s&atilde;o travados at&eacute; que a transa&ccedil;&atilde;o seja finalizada. Isso causa intervalos na numera&ccedil;&atilde;o por causa de transa&ccedil;&otilde;es abortadas.</P>
<H3 id="item4.12">4.12) O que &eacute; um <SMALL>OID</SMALL>? O que &eacute; um <SMALL>CTID</SMALL>?</H3>
<P>Se uma tabela &eacute; criada com <SMALL>WITH OIDS</SMALL>, cada registro recebe um <SMALL>OID</SMALL> &uacute;nico.
O<SMALL>ID</SMALL>s s&atilde;o automaticamente atribu&iacute;dos como inteiros de 4 bytes
que s&atilde;o &uacute;nicos ao longo de toda instala&ccedil;&atilde;o. Contudo, eles s&atilde;o limitados em
4 bilh&otilde;es e, ent&atilde;o, os O<SMALL>ID</SMALL>s come&ccedil;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&aacute;rios, &eacute; melhor utilizar
<SMALL>SERIAL</SMALL> ao inv&eacute;s de O<SMALL>ID</SMALL>s porque
sequ&ecirc;ncias <SMALL>SERIAL</SMALL> s&atilde;o &uacute;nicas somente em uma tabela; e
s&atilde;o menos prop&iacute;cias a atingir o limite.
<SMALL>SERIAL8</SMALL> est&aacute; dispon&iacute;vel para armazenar valores de sequ&ecirc;ncias
com oito bytes.</P>
<P>C<SMALL>TID</SMALL>s s&atilde;o utilizados para identificar registros f&iacute;sicos
espec&iacute;ficos com valores de block e deslocamento. C<SMALL>TID</SMALL>s mudam
ap&oacute;s registros serem modificados ou recarregados. Eles s&atilde;o utilizados por
&iacute;ndices para apontar registros f&iacute;sicos.</P>
<H3 id="item4.13">4.13) Por que eu recebo o erro <I>"ERROR: Memory exhausted in AllocSetAlloc()"</I>?</H3>
<P>Voc&ecirc; provavelmente est&aacute; sem mem&oacute;ria virtual no seu sistema, ou o seu n&uacute;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&aacute; sucesso, mas ele definir&aacute; o segmento de dados do seu processo com um limite maior e talvez permita que a consulta seja feita. Este comando &eacute; aplicado ao processo atual e todos os subprocessos criados depois do comando ser executado. Se voc&ecirc; 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&atilde;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&aacute; por padr&atilde;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&ccedil;o uma jun&ccedil;&atilde;o externa (outer join)?</H3>
<P>PostgreSQL suporta jun&ccedil;&otilde;es externas utilizando a sintaxe padr&atilde;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&ecirc;nticas juntam t1.col com t2.col, e tamb&eacute;m
retornam qualquer registro que n&atilde;o foi juntado em t1 (aqueles que n&atilde;o
combinaram com t2). Uma jun&ccedil;&atilde;o a direita <SMALL>RIGHT</SMALL>
adicionaria registros que n&atilde;o foram juntados da tabela t2.
Uma jun&ccedil;&atilde;o completa (<SMALL>FULL</SMALL>) retornaria os registros
combinados mais todos os registros n&atilde;o combinados de t1 e t2.
A palavra <SMALL>OUTER</SMALL> &eacute; opcional e &eacute; assumida nas
jun&ccedil;&otilde;es <SMALL>LEFT</SMALL>, <SMALL>RIGHT</SMALL> e <SMALL>FULL</SMALL>.
Jun&ccedil;&otilde;es ordin&aacute;rias s&atilde;o chamadas jun&ccedil;&otilde;es
internas (<SMALL>INNER</SMALL>).</P>
<H3 id="item4.17">4.17) Como eu fa&ccedil;o consultas utilizando m&uacute;ltiplos bancos de dados?</H3>
<P>N&atilde;o h&aacute; outra maneira de consultar um banco de dados caso ele
n&atilde;o seja o atual. Porque o PostgreSQL carrega cat&aacute;logos do sistema
espec&iacute;ficos do banco de dados, &eacute; 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&ccedil;&otilde;es. &Eacute; claro, que um cliente pode fazer
conex&otilde;es simult&acirc;neas em bancos de dados diferentes e juntar os
resultados no cliente.</P>
<H3 id="item4.18">4.18) Como eu retorno m&uacute;ltiplos registros ou colunas de uma fun&ccedil;&atilde;o?</H3>
<P>&Eacute; f&aacute;cil utilizando fun&ccedil;&otilde;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&aacute;rias em fun&ccedil;&otilde;es PL/PgSQL?</H3>
<P>Em vers&otilde;es do PostgreSQL &lt; 8.3, PL/PgSQL armazena o conte&uacute;do da fun&ccedil;&atilde;o, e o efeito indesejado &eacute; que se uma fun&ccedil;&atilde;o PL/PgSQL acessa uma tabela tempor&aacute;ria, e aquela tabela &eacute; removida e criada novamente, e a fun&ccedil;&atilde;o &eacute; chamada novamente, a fun&ccedil;&atilde;o ir&aacute; falhar porque o conte&uacute;do armazenado da fun&ccedil;&atilde;o ainda apontar&aacute; para a tabela tempor&aacute;ria antiga. A solu&ccedil;&atilde;o &eacute; utilizar o <SMALL>EXECUTE</SMALL> para acesso a tabelas tempor&aacute;rias no PL/PgSQL. Isto ir&aacute; fazer com que a consulta seja avaliada toda vez.</P>
<P>Este problema n&atilde;o ocorre no PostgreSQL 8.3 ou superior.</P>
<H3 id="item4.20">4.20) Quais solu&ccedil;&otilde;es de replica&ccedil;&atilde;o est&atilde;o dispon&iacute;veis?</H3>
<P>Embora "replica&ccedil;&atilde;o" seja um termo simples, h&aacute; v&aacute;rias tecnologias para fazer
replica&ccedil;&atilde;o, com vantagens e desvantagens para cada um.</P>
<P>Replica&ccedil;&atilde;o mestre/escravo permite que um mestre receba consultas de leitura e
escrita, enquanto os escravos s&oacute; podem aceitar leitura/consultas <SMALL>SELECT</SMALL>.
A solu&ccedil;&atilde;o mais popular de replica&ccedil;&atilde;o mestre-escravo para PostgreSQL dispon&iacute;vel livremente
&eacute; <A href="http://main.slony.info">Slony-I</A>.</P>
<P>Replica&ccedil;&atilde;o com m&uacute;ltiplos mestres permite que consultas leitura/escrita sejam
enviadas para m&uacute;ltiplos computadores replicadores. Esta capacidade tamb&eacute;m tem
um s&eacute;rio impacto na performance por causa da necessidade de sincronizar as mudan&ccedil;as
entre os servidores. <A href="http://pgfoundry.org/projects/pgcluster/">PGCluster</a>
&eacute; a solu&ccedil;&atilde;o mais popular dispon&iacute;vel livremente para PostgreSQL.</P>
<P>H&aacute; tamb&eacute;m solu&ccedil;&otilde;es de replica&ccedil;&atilde;o comerciais e baseadas em hardware dispon&iacute;veis
que suportam uma variedade de modelos de replica&ccedil;&atilde;o.</P>
<H3 id="item4.21">4.21) Por que os nomes de minhas tabelas e colunas n&atilde;o
s&atilde;o reconhecidos em minha consulta? Por que as mai&uacute;sculas n&atilde;o s&atilde;o preservadas?</H3>
<P>A causa mais comum de nomes desconhecidos &eacute; o uso de aspas ao redor dos nomes da tabela ou coluna
durante a cria&ccedil;&atilde;o da tabela. Ao utilizar aspas, nomes de tabela e coluna
(chamados de identificadores) s&atilde;o armazenados <a
href="http://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS">
como especificado</a>, significando que voc&ecirc; deve utilizar aspas quando se
referir aos nomes na consulta. Algumas interfaces, como pgAdmin,
automaticamente colocam aspas nos identificadores durante a cria&ccedil;&atilde;o da tabela.
Ent&atilde;o, para identificadores serem reconhecidos, voc&ecirc; deve:
<UL>
<LI>Evitar colocar aspas no identificador ao criar tabelas</LI>
<LI>Utilizar somente caracteres min&uacute;sculos em identificadores</LI>
<LI>Colocar aspas em identificadores ao referenci&aacute;-los nas consultas</LI>
</UL>
</BODY>
</HTML>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,645 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>PostgreSQL FAQ</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-language" content="cs">
<meta name="description" lang="en" content="Czech translation of FAQ for PostgreSQL">
<meta name="description" lang="cs" content="Český překlad FAQ PostgreSQL">
</head>
<body bgcolor="#ffffff" text="#000000" link="#ff0000" vlink="#a00000" alink="#0000ff">
<h1>Frequently Asked Questions</h1>
<p><i>Často kladené dotazy (FAQ) PostgreSQL</i>
</p>
<p>Poslední aktualizace: 29. října 2007 (aktualizováno pro PostgreSQL 8.3)
</p>
<p>Současný správce: Bruce Momjian (bruce@momjian.us)
</p>
<p>Přeložil: Pavel Stěhule (pavel.stehule@gmail.com)
</p>
<p>Nejaktuálnější verzi tohoto dokumentu naleznete na adrese
<a href="http://www.postgresql.org/files/documentation/faqs/FAQ.html" title="http://www.postgresql.org/files/documentation/faqs/FAQ.html">http://www.postgresql.org/files/documentation/faqs/FAQ.html</a>
</p>
<p>Odpovědi na otázky vázané na konkrétní platformy naleznete na
adrese <a href="http://www.postgresql.org/docs/faq/" title="http://www.postgresql.org/docs/faq/">http://www.postgresql.org/docs/faq/</a>.
</p>
<hr>
<h2 align="center">Obecné otázky</h2>
<a href="#item1.1">1.1</a>) Co je to PostgreSQL? Jaká je správná výslovnost slova PostgreSQL?<br>
<a href="#item1.2">1.2</a>) Kdo řídí vývoj PostgreSQL?<br>
<a href="#item1.3">1.3</a>) Pod jakou licencí je PostgreSQL?<br>
<a href="#item1.4">1.4</a>) Na kterých platformách lze provozovat PostgreSQL?<br>
<a href="#item1.5">1.5</a>) Kde mohu získat PostgreSQL?<br>
<a href="#item1.6">1.6</a>) Jaká je poslední verze?<br>
<a href="#item1.7">1.7</a>) Kde mohu získat podporu?<br>
<a href="#item1.8">1.8</a>) Jak a kam hlásit chyby?<br>
<a href="#item1.9">1.9</a>) Kde najdu informace o známých chybách nebo nepodporovaných vlastnostech?<br>
<a href="#item1.10">1.10</a>) Jaká je dostupná dokumentace?<br>
<a href="#item1.11">1.11</a>) Jak se mohu naučit SQL?<br>
<a href="#item1.12">1.12</a>) Jak se mohu připojit k týmu vývojářů?<br>
<a href="#item1.13">1.13</a>) Jak je na tom PostgreSQL v porovnání s jinými databázemi?<br>
<a href="#item1.14">1.14</a>) Je PostgreSQL připraven na aktuální zavádění letního času v některých zemích?<br>
<h2 align="center">Dotazy na klientská rozhraní</h2>
<a href="#item2.1">2.1</a>) Která rozhraní jsou použitelná pro PostgreSQL?<br>
<a href="#item2.2">2.2</a>) Jaké nástroje lze použít pro PostgreSQL a web?<br>
<a href="#item2.3">2.3</a>) Existuje grafické rozhraní pro PostgreSQL?<br>
<h2 align="center">Administrativní dotazy</h2>
<a href="#item3.1">3.1</a>) Jak nainstalovat PostgreSQL jinam než do /usr/local/pgsql?<br>
<a href="#item3.2">3.2</a>) Jak nastavit pravidla pro přístup z jiných stanic?<br>
<a href="#item3.3">3.3</a>) Jak vyladit databázi na vyšší výkon?<br>
<a href="#item3.4">3.4</a>) Jaké mám ladící prostředky?<br>
<a href="#item3.5">3.5</a>) Co znamená "Sorry, too many clients", když se zkouším připojit?<br>
<a href="#item3.6">3.6</a>) Proč je nutný dump a obnovení (load) databáze při upgradu PostgreSQL?<br>
<a href="#item3.7">3.7</a>) Jaký hardware bych měl používat?<br>
<h2 align="center">Provozní dotazy</h2>
<a href="#item4.1">4.1</a>) Jak získat pouze první řádek dotazu? Náhodný řádek?<br>
<a href="#item4.2">4.2</a>) Jak získám seznam tabulek, indexů, databází, a definovaných uživatelů. Mohu vidět dotazy, které používá psql pro zobrazení těchto informací?<br>
<a href="#item4.3">4.3</a>) Jak změnit datový typ sloupce?<br>
<a href="#item4.4">4.4</a>) Jaká je maximální velikost řádku, tabulky a databáze?<br>
<a href="#item4.5">4.5</a>) Kolik diskového prostoru je potřeba k uložení dat z normálního textového souboru?<br>
<a href="#item4.6">4.6</a>) Můj dotaz je pomalý a nepoužívá vytvořené indexy. Proč?<br>
<a href="#item4.7">4.7</a>) Jak zjistím, jak se vyhodnocuje můj dotaz?<br>
<a href="#item4.8">4.8</a>) Jak použít case-(in)sensitive regulární výraz? Jak použít index pro case insensitive hledání?<br>
<a href="#item4.9">4.9</a>) Jak v dotazu detekovat, že položka je NULL? Jak bezpečně spojit dva řetězce, pokud mohou obsahovat NULL? Lze třídit podle toho, jestli je položka NULL nebo ne?<br>
<a href="#item4.10">4.10</a>) Jaké jsou rozdíly mezi různými znakovými typy?<br>
<a href="#item4.11.1">4.11.1</a>) Jak vytvořit serial/auto-increment položku?<br>
<a href="#item4.11.2">4.11.2</a>) Jak získat hodnotu SERIAL po vložení řádku?<br>
<a href="#item4.11.3">4.11.3</a>) Nezpůsobí currval() a nextval() problémy ve více uživatelském prostředí?<br>
<a href="#item4.11.4">4.11.4</a>) Proč není vygenerované číslo použito při přerušení transakce?Proč vznikají díry v číslování prostřednictvím sekvence nebo typu SERIAL?<br>
<a href="#item4.12">4.12</a>) Co to je OID? Co je to CTID?<br>
<a href="#item4.13">4.13</a>) Co znamená chybové hlášení "ERROR: Memory exhausted in AllocSetAlloc()"?<br>
<a href="#item4.14">4.14</a>) Jak zjistím, kterou verzi PostgreSQL používám?<br>
<a href="#item4.15">4.15</a>) Jak vytvořit sloupec, který bude implicitně obsahovat aktuální čas?<br>
<a href="#item4.16">4.16</a>) Jak provést vnější spojení (outer join)?<br>
<a href="#item4.17">4.17</a>) Jak provést dotaz napříč několika databázemi?<br>
<a href="#item4.18">4.18</a>) Může funkce vrátit více řádků nebo sloupců?<br>
<a href="#item4.19">4.19</a>) Co je příčinou chyby "relation with OID xxxxx does not exist"?<br>
<a href="#item4.20">4.20</a>) Jaké jsou možnosti replikace databází?<br>
<a href="#item4.21">4.21</a>) Proč v dotazu nejsou rozpoznány názvy mých tabulek nebo funkcí? Proč jsou velká písmena v názvech automaticky převedena na malá písmena?<br>
<hr>
<h2 align="center">Obecné otázky</h2>
<h3><a name="item1.1">1.1</a>) Co je to PostgreSQL? Jaká je správná výslovnost slova PostgreSQL?</h3>
<p>Výslovnost PostgreSQL je <i>Post-Gres-Q-L</i>
, nebo zjednodušeně <i>Postgres</i>
. V řadě jazyků je slovo PostgreSQL obtížně vyslovitelný, proto se v hovoru často používá zjednodušená forma názvu. Pro ty, kteří by si rádi poslechli výslovnost, je k dispozici audiozáznam v <a href="http://www.postgresql.org/files/postgresql.mp3" title="http://www.postgresql.org/files/postgresql.mp3">MP3 formátu</a>.
</p>
<p>PostgreSQL je relační databáze s některými objektovými rysy, která má možnosti tradičních
komerčních databázových systémů s několika rozšířeními, které lze najít v DBMS
systémech příští generace. Používání PostgreSQL není omezené a veškeré zdrojové kódy jsou
volně dostupné.
</p>
<p>Za vývojem PostgreSQL je mezinárodní skupina nezávislých vývojářů navzájem komunikujících
prostřednictvím internetu. Tento projekt není řízen žádnou obchodní organizací. Pokud se chcete
přidat k projektu, přečtěte si vývojářské FAQ na adrese <a href="http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html" title="http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html">http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html</a> .
</p>
<h3><a name="item1.2">1.2</a>) Kdo řídí vývoj PostgreSQL?</h3>
<p>Pokud budete hledat organizaci řídící vývoj PostgreSQL, budete zklamáni. Nic takového
neexistuje. Existují pouze "core" a CVS skupiny uživatelů, ale ty existují více z administrátorských
důvodů než z organizačních. Projekt je směrován komunitou vývojářů a uživatelů, ke které se
kdokoliv může připojit. Jediné co potřebuje, je přihlásit se do elektronické konference. Více ve
<a href="http://www.postgresql.org/docs/faqs.FAQ_DEV.html" title="http://www.postgresql.org/docs/faqs.FAQ_DEV.html">vývojářském FAQ</a>.
</p>
<h3><a name="item1.3">1.3</a>) Pod jakou licencí je PostgreSQL?</h3>
<p>PostgreSQL je předmětem následujících autorských práv:
</p>
<p>Dílčí Copyright (c) 1996-2009, PostgreSQL Global Development Group<br>
Dílčí Copyright (c) 1994-6, Regents of the University of California
</p>
<p>Uděluje se oprávnění k užití, rozmnožování, provádění úprav a
rozšiřování tohoto softwaru a dokumentace k němu, pro jakékoli účely,
bez licenčního poplatku a bez písemné licenční smlouvy, za podmínky,
že na všech jeho kopiích je uvedeno oznámení o výše uvedených právech,
jakož i obsah tohoto a dvou následujících odstavců.
</p>
<p>THE UNIVERSITY OF CALIFORNIA ("KALIFORNSKÁ UNIVERZITA") NENÍ V ŽÁDNÉM
PŘÍPADĚ ODPOVĚDNA ŽÁDNÉ TŘETÍ OSOBĚ ZA PŘÍMOU, NEPŘÍMOU, ZVLÁŠTNÍ,
NAHODILOU NEBO VÝSLEDNOU ŠKODU, VČETNĚ UŠLÉHO ZISKU, ZPŮSOBENOU UŽITÍM
TOHOTO SOFTWARU A DOKUMENTACE K NĚMU, A TO I V PŘÍPADĚ, ŽE THE
UNIVERSITY OF CALIFORNIA BYLA INFORMOVÁNA O MOŽNOSTI VZNIKU TAKOVÉ
ŠKODY.
</p>
<p>THE UNIVERSITY OF CALIFORNIA ZEJMÉNA NEPOSKYTUJE JAKÉKOLI ZÁRUKY, A TO
NEJEN ZÁRUKY OBCHODOVATELNOSTI A VHODNOSTI TOHOTO VÝROBKU KE
SPECIFICKÝM ÚČELŮM. NÍŽE UVEDENÝ SOFTWARE JE POSKYTNUT "JAK STOJÍ A
LEŽÍ" A THE UNIVERSITY OF CALIFORNIA NENÍ POVINNA ZAJISTIT JEHO
ÚDRŽBU, PODPORU, AKTUALIZACI, VYLEPŠENÍ NEBO MODIFIKACI.
</p>
<p>Výše uvedené je BSD licence, běžná licence otevřeného zdroje. Není zde
žádné omezení ohledně užití kódu zdroje. Jsme s tím spokojeni a nemáme
v úmyslu na této skutečnosti cokoli měnit.
</p>
<h3><a name="item1.4">1.4</a>) Na kterých platformách lze provozovat PostgreSQL?</h3>
<p>Stručně řečeno, PostgreSQL běží na všech moderních unixových systémech. Seznam těch, u kterých proběhlo testování, naleznete v instalačních instrukcích.
</p>
<p>PostreSQL také běží nativně na všech Microsof Windows systémech odvozených z Microsoft Windows NT jako jsou Windows 2000SP4, WindowsXP a Windows2003. Instalační balíček naleznete na adrese <a href="http://pgfoundry.org/projects/pginstaller" title="http://pgfoundry.org/projects/pginstaller">http://pgfoundry.org/projects/pginstaller</a>. Na starších systémech s ještě MS-DOS jádrem lze spustit PostgreSQL s emulačním programem Cygwin.
</p>
<p>Dále existuje port pro Novell Netware 6 port na adrese <a href="http://forge.novell.com" title="http://forge.novell.com">http://forge.novell.com</a>, a pro OS/2 verze (eComStation) na adrese <a href="http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2F" title="http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2F">http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2F</a> .
</p>
<h3><a name="item1.5">1.5</a>) Kde mohu získat PostgreSQL?</h3>
<p>Pomocí webového klienta z adresy <a href="http://www.postgresql.org/ftp/" title="http://www.postgresql.org/ftp/">http://www.postgresql.org/ftp/</a> nebo klienta ftp z adresy <a href="ftp://ftp.postgresql.org/pub/" title="ftp://ftp.postgresql.org/pub/">ftp://ftp.postgresql.org/pub/</a>.
</p>
<h3><a name="item1.6">1.6</a>) Jaká je poslední verze?</h3>
<p>Nejnovější verzí PostgreSQL je verze 8.2.5
</p>
<p>V plánu je uvolňovat každoročně jednu velkou verzi a každých několik měsíců malé verze.
</p>
<h3><a name="item1.7">1.7</a>) Kde mohu získat podporu?</h3>
<p>Nejčastější forma podpory uživatelům PostgreSQL komunitou je prostřednictvím e-mailů. Na našem webovém serveru naleznete <a href="http://www.postgresql.org/community/lists/" title="http://www.postgresql.org/community/lists/">odkaz</a> na stránky,kde se můžete přihlásit do elektronické konference. Pro začátek jsou doporučené konference general nebo bugs.
</p>
<p>Další cestou je IRC kanál #postgresql na Freenode (irc.freenode.net). K připojení použijte Unixový příkaz irc -x '#postgresql' "$USER" irc.freenode.net nebo jakékoholiv jiného IRC klienta. V této síti existuje ještě španělská (#postgresql-es) a francouzská (#postgresqlfr) verze. Další PostgreSQL kanál naleznete na EFNet.
</p>
<p>Seznam společností poskytující komerční podporu naleznete na adrese <a href="http://techdocs.postgresql.org/companies.php" title="http://techdocs.postgresql.org/companies.php">http://techdocs.postgresql.org/companies.php</a>.
</p>
<h3><a name="item1.8">1.8</a>) Jak a kam hlásit chyby?</h3>
<p>Vyplňte formulář na adrese <a href="http://www.postgresql.org/support/submitbug" title="http://www.postgresql.org/support/submitbug">http://www.postgresql.org/support/submitbug</a>. Na našem ftp serveru <a href="ftp://ftp.postgresql.org/pub/" title="ftp://ftp.postgresql.org/pub/">ftp://ftp.postgresql.org/pub/</a> si ověřte, že používáte aktuální verzi PostreSQL.
</p>
<p>Chyby reportované prostřednictvím chybového formuláře nebo zasláním mailu do PostgreSQL konference obvykle generuje následující odezvu:
</p>
<ul><li> Nejedná se o chybu, a proč
</li>
<li> Jedná se o známou chybu, která je již v seznamu úkolů <a href="http://www.postgresql.org/docs/faqs.TODO.html" title="http://www.postgresql.org/docs/faqs.TODO.html">TODO</a>
</li>
<li> Tato chyba byla opravena v aktuální verzi
</li>
<li> Tato chyba byla již opravena ve verzi, která zatím nebyla oficiálně uvolněna
</li>
<li> Požadavek na další doplňující informace:
<ul><li> Operační systém
</li>
<li> Verze PostgreSQL
</li>
<li> Test reprodukující chybu
</li>
<li> Ladící informace
</li>
<li> Backtrace výstup debuggeru
</li>
</ul>
</li>
<li> Jedná se o zatím nezjištěnou chybu, pak můžete čekat
<ul><li> Záplatu odstraňující chybu, která bude vložena do další velké nebo malé verze
</li>
<li> Informaci, že se jedná o chybu, kterou nelze okamžitě řešit a je proto přidána do <a href="http://www.postgresql.org/docs/faqs.TODO.html" title="http://www.postgresql.org/docs/faqs.TODO.html">TODO</a>
</li>
</ul>
</li>
</ul>
<h3><a name="item1.9">1.9</a>) Kde najdu informace o známých chybách nebo nepodporovaných vlastnostech?</h3>
<p>PostgreSQL podporuje rozšířenou podmnožinu SQL:2003. V našem <a href="http://www.postgresql.org/docs/faqs.TODO.html" title="http://www.postgresql.org/docs/faqs.TODO.html">TODO</a> naleznete seznam známých chyb, chybějících vlastností, a plány do budoucna.
</p>
<p>Odezva na požadavek na novou vlastnost PostgreSQL je obvykle:
</p>
<ul><li> Požadavek je již v <a href="http://www.postgresql.org/docs/faqs.TODO.html" title="http://www.postgresql.org/docs/faqs.TODO.html">TODO</a>
</li>
<li> Požadovaná funkce není chtěná protože
<ul><li> Duplikuje již existující funkci, která respektuje SQL standard
</li>
<li> Implementací funkce by se příliš zkomplikoval kód bez relevantního přínosu
</li>
<li> Funkce by mohla být nebezpečná nebo nespolehlivá
</li>
</ul>
</li>
<li> Požadavek je přidán do <a href="http://www.postgresql.org/docs/faqs.TODO.html" title="http://www.postgresql.org/docs/faqs.TODO.html">TODO</a>
</li>
</ul>
<p>PostgreSQL nepožívá systém pro sledování chyb, protože jsme zjistili, že je efektivnější přímo reagovat na maily a udržovat aktuální <a href="http://www.postgresql.org/docs/faqs.TODO.html" title="http://www.postgresql.org/docs/faqs.TODO.html">TODO</a>. V praxi je snaha o co nejrychlejší řešení chyb, a chyby, které by se mohly projevit u mnoha uživatelů jsou opravovány velice rychle. Jediné místo, kde lze dohledat všechny změny, rozšíření a opravy v PostgreSQL je CVS log. Poznámky k verzi "Release notes" nezachycují všechny změny, k němž došlo.
</p>
<h3><a name="item1.10">1.10</a>) Jaká je dostupná dokumentace?</h3>
<p>PostgreSQL obsahuje vynikající dokumentaci zahrnující manuál, manuálové stránky a testovací příklady. Podívejte se do adresáře /doc. Manuál je přístupný online na <a href="http://www.postgresql.org/docs" title="http://www.postgresql.org/docs">http://www.postgresql.org/docs</a>.
</p>
<p>K dispozici jsou zdarma dvě online knihy na adresách <a href="http://www.postgresql.org/docs/books/awbook.html" title="http://www.postgresql.org/docs/books/awbook.html">http://www.postgresql.org/docs/books/awbook.html</a> a <a href="http://www.commandprompt.com/ppbook/" title="http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook/</a>. Další literaturu lze zakoupit. Nejpopulárnější je od Kerryho Douglase. Seznam dostupné literatury je na <a href="http://techdocs.postgresql.org/techdocs/bookreviews.php" title="http://techdocs.postgresql.org/techdocs/bookreviews.php">http://techdocs.postgresql.org/techdocs/bookreviews.php</a>. Ještě je kolekce technicky orientovaných článků tematicky spojených s PostgreSQL na adrese <a href="http://techdocs.postgresql.org/" title="http://techdocs.postgresql.org/">http://techdocs.postgresql.org/</a>.
</p>
<p>Řádkový klient psql má \d příkazy pro zobrazení informací o typech, operátorech, funkcích, agregačních funkcí, atd. Použijte \? pro zobrazení dostupných příkazů.
</p>
<p>Další dokumentaci najdete na našem webu.
</p>
<h3><a name="item1.11">1.11</a>) Jak se mohu naučit SQL?</h3>
<p>Podívejte se do výše uvedené dokumentace. Další online knihou je "Teach Yourself SQL in 21 Days, Second Edition" na adrese <a href="http://members.tripod.com/er4ebus/sql/index.htm" title="http://members.tripod.com/er4ebus/sql/index.htm">http://members.tripod.com/er4ebus/sql/index.htm</a>. Mnoho našich uživatelů doporučuje knihu The Practical SQL Handbook, Bowman, Judith S., et al., Addison-Wesley. Další The Complete Reference SQL, Groff et al., McGraw-Hill.
</p>
<p>Další online tutoriály jsou dostupné na adresách:
</p>
<ul><li> <a href="http://www.intermedia.net/support/sql/sqltut.shtm" title="http://www.intermedia.net/support/sql/sqltut.shtm">http://www.intermedia.net/support/sql/sqltut.shtm</a>
</li>
<li> <a href="http://sqlcourse.com" title="http://sqlcourse.com">http://sqlcourse.com</a>
</li>
<li> <a href="http://www.w3schools.com/sql/default.asp" title="http://www.w3schools.com/sql/default.asp">http://www.w3schools.com/sql/default.asp</a>
</li>
<li> <a href="http://mysite.verizon.net/Graeme_Birchall/id1.html" title="http://mysite.verizon.net/Graeme_Birchall/id1.html">http://mysite.verizon.net/Graeme_Birchall/id1.html</a>
</li>
</ul>
<h3><a name="item1.12">1.12</a>) Jak se mohu připojit k týmu vývojářů?</h3>
<p>Prostudujte si <a href="http://www.postgresql.org/docs/faqs.FAQ_DEV.html" title="http://www.postgresql.org/docs/faqs.FAQ_DEV.html">Developer's FAQ</a>.
</p>
<h3><a name="item1.13">1.13</a>) Jak je na tom PostgreSQL v porovnání s jinými databázemi?</h3>
<p>Software můžeme porovnávat z několika různých pohledů: vlastnosti, výkon, spolehlivost, podpora a cena.
</p>
<script></script>
<h4> Vlastnosti </h4>
<p>PostgreSQL nabízí většinu funkcí funkcionality velkých komerčních DBMS systémů jako jsou: transakce, vnořené dotazy, spouště, referenční integrita a sofistikovaný systém zamykání. Poskytujeme určité funkce, které ostatní systémy běžně nepodporují. Např. uživatelem definované typy, dědičnost, pravidla (rules), a MVCC architekturu.
</p>
<h4> Výkon </h4>
<p>Výkon PostgreSQL je srovnatelný s ostatními komerčními nebo Open Source databázemi. V některých případech je rychlejší, jindy pomalejší. Náš výkon je obvykle +/-10% vůči ostatním databázím.
</p>
<h4> Spolehlivost </h4>
<p>Uvědomujeme si, že databáze musí být stoprocentně spolehlivá, jinak je nepoužitelná. Snažíme se, aby každá verze byla dobře otestována a obsahovala minimum chyb. Každá verze je minimálně několik měsíců v beta testovacím režimu. Do produkčního režimu se dostane, až když nedochází k dalším změnám nebo opravám. Věříme, že jsem více než srovnatelní s ostatními databázemi v této oblasti.
</p>
<h4> Podpora </h4>
<p>Na našich internetových konferencích se setkává velká skupina vývojářů a uživatelů při řešení vyskytujících se problémů.
Naše internetové konference umožňují kontakt velké skupiny vývojářů a uživatelů. Nemůžeme garantovat opravu chyby, ale komerční DBMSs také vždy negarantují řešení problémů. Věříme ale, že díky přímému kontaktu na vývojáře, naši uživatelskou komunitu, manuálům, a dostupným zdrojovým kódům máme lepší podporu než ostatní DBMSs. Pro ty, kteří preferují komerční "per-incident" podporu, existuje společností, kteří ji nabízejí (FAQ sekce 1.7.)
</p>
<h4> Cena </h4>
<p>PostgreSQL lze používat bezplatně (a to i pro komerční použití). Také můžete neomezeně používat náš kód ve svých produktech s výjimkami specifikovanými v naší licenci (přebíráme BSD licenci).
</p>
<h3><a name="item1.14">1.14</a>) Je PostgreSQL připraven na aktuální zavádění letního času v některých zemích?</h3>
<p>Počínaje verzí 8.0.[4+] podporuje PostgreSQL letní čas také pro USA. Podpora letního času (daylight saving time) pro Kanadu a Západní Austrálii je obsažena ve verzích 8.0.[10+] a 8.1.[6+] a všech následujících verzích. Starší verze používaly systémovou databázi časových zón obsahující, kromě jiného, informaci o tom, zda se pro danou časovou zónu rozlišuje mezi letním a zimním časem.
</p>
<hr>
<h2 align="center">Dotazy na klientská rozhraní</h2>
<h3><a name="item2.1">2.1</a>) Která rozhraní jsou použitelná pro PostgreSQL?</h3>
<p>PostgreSQL se distribuuje pouze s rozhraním pro jazyk C a embedded C. Všechna další rozhraní představují nezávislé projekty, které je třeba stáhnout z internetu samostatně. Osamostatnění těchto projektů umožňuje nezávislost vývojových týmů a možnost vydávat nové verze bez ohledu na vydání nové verze PostgreSQL.
</p>
<p>Některé programovací jazyky jako je např. PHP obsahují rozhraní pro PostgreSQL. Rozhraní pro jazyky jako je Perl, Tcl, Python a mnoho dalších jsou dostupné na adrese: <a href="http://gborg.postgresql.org" title="http://gborg.postgresql.org">http://gborg.postgresql.org</a> v sekci Drivers/Interfaces.
</p>
<h3><a name="item2.2">2.2</a>) Jaké nástroje lze použít pro PostgreSQL a web?</h3>
<p>Dobrým úvodem do problematiky databází v prostředí webových stránek může být web <a href="http://www.webreview.com" title="http://www.webreview.com">http://www.webreview.com</a>.
</p>
<p>PHP (<a href="http://www.php.net" title="http://www.php.net">http://www.php.net</a>) je vynikajícím rozhraním pro tvorbu webů.
</p>
<p>Pro složitější úlohy se často používá Perl a jeho BDB:Pg rozhraní s podporou CGI - CGI.pm nebo mod_perl(u).
</p>
<h3><a name="item2.3">2.3</a>) Existuje grafické rozhraní pro PostgreSQL?</h3>
<p>K dispozici je řada grafických nástrojů podporujících PostgreSQL a to od komerčních nebo open source vývojářů. Podrobný seznam naleznete na adrese
<a href="http://www.postgresql.org/docs/techdocs.54" title="http://www.postgresql.org/docs/techdocs.54">http://www.postgresql.org/docs/techdocs.54</a>.
</p>
<hr>
<h2 align="center">Administrativní dotazy</h2>
<h3><a name="item3.1">3.1</a>) Jak nainstalovat PostgreSQL jinam než do /usr/local/pgsql?</h3>
<p>Při spouštění configure nastavte parametr --prefix
</p>
<h3><a name="item3.2">3.2</a>) Jak nastavit pravidla pro přístup z jiných stanic?</h3>
<p>Ve výchozí konfiguraci, PostgreSQL umožňuje pouze připojení z lokálního uživatele prostřednictvím Unix domain sockets nebo TCP/IP spojení. Bez modifikace listen_addresses v souboru postgresql.conf, a povolení adresy v souboru $PGDATA/pg_hba.conf se nelze připojit k PostgreSQL z ostatních stanic. Změna výše zmíněných parametrů vyžaduje restart databázového serveru.
</p>
<h3><a name="item3.3">3.3</a>) Jak vyladit databázi na vyšší výkon?</h3>
<p>Výkon systému můžete ovlivnit ve třech oblastech:
</p>
<h4> Změny dotazu </h4>
<ul><li> Použitím indexů včetně částečných a funkcionálních
</li>
<li> Použitím COPY místo opakovaných INSERTů
</li>
<li> Sloučením mnoha SQL příkazů do jedné transakce snížením režie na commit
</li>
<li> Používáním CLUSTERU, pokud načítáte větší počet řádek podle indexu
</li>
<li> Použitím klauzule LIMIT v poddotazech
</li>
<li> Použitím předpřipravených dotazů
</li>
<li> Používáním ANALYZE. Tento příkaz aktualizuje statistiky, které se používají při optimalizaci dotazu
</li>
<li> Pravidelné použití VACUUM nebo používání pg_autovacuum
</li>
<li> Odstraněním indexů před rozsáhlými změnami v datech
</li>
</ul>
<h4> Konfigurace serveru </h4>
<p>Určité parametry v souboru postgresql.conf mají vliv na výkon serveru. Detaily naleznete v příručce Administrátora v Server Run-time Environment/Run-time Configuration. Další komentáře naleznete v <a href="http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html" title="http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html">http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html</a> a <a href="http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html" title="http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html">http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html</a>.
</p>
<h4> Výběr hardware </h4>
<p>Vliv hardware na výkon serveru je popsán v dokumentech <a href="http://candle.pha.pa.us/main/writings/pgsql/hw_performance/index.html" title="http://candle.pha.pa.us/main/writings/pgsql/hw_performance/index.html">http://candle.pha.pa.us/main/writings/pgsql/hw_performance/index.html</a> a <a href="http://www.powerpostgresql.com/PerfList/" title="http://www.powerpostgresql.com/PerfList/">http://www.powerpostgresql.com/PerfList/</a>.
</p>
<h3><a name="item3.4">3.4</a>) Jaké mám ladící prostředky?</h3>
<p>Nastavením log_* proměnných v konfiguraci serveru si vynutíte logování dotazů a procesních statistik, které Vám mohou pomoci při ladění a optimalizaci výkonu.
</p>
<h3><a name="item3.5">3.5</a>) Co znamená "Sorry, too many clients", když se zkouším připojit?</h3>
<p>Překročil jste výchozí limit, který je 100 současně připojených uživatelů. V konfiguraci serveru v postgresql.conf tuto hodnotu můžete zvětšit změnou hodnoty max_connection. Nezapomeňte restartovat server.
</p>
<h3><a name="item3.6">3.6</a>) Proč je nutný dump a obnovení (load) databáze při upgradu PostgreSQL?</h3>
<p>Způsob číslování je popsán v dokumentaci na <a href="http://www.postgresql.org/support/versioning" title="http://www.postgresql.org/support/versioning">http://www.postgresql.org/support/versioning</a>. Instrukce k provedení migrace na vyšší verzi jsou taktéž v dokumentaci na adrese <a href="http://www.postgresql.org/docs/current/static/install-upgrading.html" title="http://www.postgresql.org/docs/current/static/install-upgrading.html">http://www.postgresql.org/docs/current/static/install-upgrading.html</a>.
</p>
<h3><a name="item3.7">3.7</a>) Jaký hardware bych měl používat?</h3>
<p>Jelikož PC jsou většinou kompatibilní, lidé mají tendence věřit, že všechna PC jsou stejně kvalitní. Což není pravda. Paměti ECC, SCSI a kvalitní základní desky jsou mnohem spolehlivější a výkonnější než lacinější hardware. PostgreSQL poběží na většině hardwaru, nicméně pokud je pro Vás spolehlivost a výkon systému důležitá, je dobré věnovat čas nalezení vhodné hardwarové konfigurace. Na našich elektronických konferencích můžete diskutovat o vhodných konfiguracích a značkách.
</p>
<hr>
<h2 align="center">Provozní dotazy</h2>
<h3><a name="item4.1">4.1</a>) Jak získat pouze první řádek dotazu? Náhodný řádek?</h3>
<p>Pokud potřebujete pouze několik řádků a pokud víte kolik, použijte
SELECT LIMIT. Pokud bude možné použít index shodující se s ORDER BY,
je možné, že se nebude provádět celý dotaz. Pokud neznáte počet záznamů,
použijte kurzor a příkaz FETCH.
</p>
<p>Pro výběr náhodného řádku použijte příkaz ve tvaru:
</p>
<pre>
SELECT col
FROM tab
ORDER BY random()
LIMIT 1;
</pre>
<h3><a name="item4.2">4.2</a>) Jak získám seznam tabulek, indexů, databází, a definovaných uživatelů. Mohu vidět dotazy, které používá psql pro zobrazení těchto informací?</h3>
<p>V psql příkazem \dt získáte seznam tabulek. Úplný seznam příkazů psql získáte příkazem \?. Alternativně si můžete prostudovat zdrojový kód psql - soubor pgsql/src/bin/psql/describe.c, který obsahuje SQL příkazy, které jsou generovány pro získání výstupu psql "backslash" příkazů. Také můžete nastartovat psql s parametrem -E, který způsobí zobrazení všech SQL příkazů, které se odesílají na server. PostgreSQL také podporuje SQL standard INFORMAČNÍ SCHÉMATA (standardní systémové tabulky). Klasickým dotazem do systémových tabulek získáte požadované informace o struktuře databáze.
</p>
<p>Systémové tabulky PostgreSQL (mimo rámec SQL standardů) používají prefix pg_. Pro zjištění struktury databáze je můžete použít také, i když preferovány jsou dotazy do informačního schématu.
</p>
<p>Seznam všech databází získáte příkazem psql -l
</p>
<p>Další inspiraci najdete v souboru pgsql/src/tutorial/syscat.source. Obsahuje ilustrační SELECTy potřebné k získání informací z systémových tabulek databáze.
</p>
<h3><a name="item4.3">4.3</a>) Jak změnit datový typ sloupce?</h3>
<p>Ve verzích 8.0 a pozdějších jednoduše:
</p>
<pre>
ALTER TABLE ALTER COLUMN TYPE
</pre><p>V starších verzích:
</p>
<pre>
BEGIN;
ALTER TABLE tab ADD COLUMN new_col new_data_type;
UPDATE tab SET new_col = CAST(old_col AS new_data_type);
ALTER TABLE tab DROP COLUMN old_col;
COMMIT;
</pre><p>Po změně spusťte příkaz VACUUM FULL, aby došlo k uvolnění diskového prostoru použitého v tu chvíli již neplatnými záznamy.
</p>
<h3><a name="item4.4">4.4</a>) Jaká je maximální velikost řádku, tabulky a databáze?</h3>
<p>PostgreSQL má tato omezení:
</p>
<table border="0">
<tr><td> Maximální velikost databáze: </td><td> neomezena (existují 32TB db)
</td></tr>
<tr><td> Maximální velikost tabulky: </td><td> 32 TB
</td></tr>
<tr><td> Maximální velikost řádky: </td><td> 480GB
</td></tr>
<tr><td> Maximální velikost položky </td><td> 1 GB
</td></tr>
<tr><td> Maximální počet řádků v tabulce: </td><td> neomezeno
</td></tr>
<tr><td> Maximální počet sloupců v tabulce: </td><td> 250-1600 podle typů
</td></tr>
<tr><td> Maximální počet indexů na tabulce: </td><td> neomezeno
</td></tr>
</table>
<p>Ve skutečnosti nic není neomezeno, limitem bývá vždy dostupná disková
paměť nebo velikost operační paměti. Pokud máte některou z těchto
hodnot neobvykle velkou, může dojít ke snížení výkonu.
</p>
<p>Maximální velikost tabulky je 32 TB a nevyžaduje podporu velkých
souborů operačním systémem. Velké tabulky se ukládají do několika 1 GB
souborů takže limity souborového systému nejsou podstatné.
</p>
<p>Maximální velikost tabulky a maximální počet sloupců můžeme
zečtyřnásobit nastavením velikosti bloku na 32K.
</p>
<p>Indexy jsou povolené pouze na sloupcích jejichž délka je menší než 2000 znaků. Pokud tuto délku překročíme a index potřebujeme pro zajištění jednoznačnosti, je vhodnější použít funkcionální index nad MD5 funkcí nebo fulltextový index.
</p>
<h3><a name="item4.5">4.5</a>) Kolik diskového prostoru je potřeba k uložení dat z normálního textového souboru?</h3>
<p>PostgreSQL vyžaduje až pětinásobek diskového prostoru k uložení dat z
textového souboru.
</p>
<p>Například, uvažujme soubor se 100 tisíci řádky obsahující na každé
řádce celé číslo a textový popis. Text je v průměrně dvacet bytů
dlouhý. Textový soubor bude 2.8 MB dlouhý. Velikost databáze
obsahující odpovídající data bude zhruba 5.2 MB.
</p>
<pre>
24 bytů: hlavička řádku (přibližně)
24 bytů: jedna celočíselná položka a jedna textová
+ 4 byty: ukazatel na stránku k entici
------------------------------------------------------
52 bytů na řádek
</pre><p>Velikost datové stránky PostgreSQL je 8192 bytů (8KB)
</p>
<pre>
8192 bytů na stránce
---------------------- = 158 řádek na stránku
52 bytů za řádek
100000 řádek
----------------------- = 633 stránek (zaokrouhleno nahoru)
158 řádek na stránce
633 datových stránek * 8192 bytů na každou stránku = 5,185,536 bytů (5.2 MB)
</pre><p>Indexy nemají tak velkou režii, ale mohou být také velké, protože
obsahují indexovaná data.
</p>
<p>Hodnoty NULL jsou uloženy v bitmapách, takže zabírají jen velmi málo
diskového prostoru.
</p>
<h3><a name="item4.6">4.6</a>) Můj dotaz je pomalý a nepoužívá vytvořené indexy. Proč?</h3>
<p>Každý dotaz nemusí nutně použít existující indexy. Index se použije
tehdy, když je tabulka větší než určitá minimální velikost, a dotaz
vybírá pouze procentuálně malou část řádků tabulky. To proto, že
náhodný přístup k disku daný čtením indexu může být pomalejší než
lineární čtení tabulky nebo sekvenční čtení.
</p>
<p>PostgreSQL rozhoduje o použití indexů na základě statistiky přístupů k
tabulce. Tyto statistiky se shromažďují příkazy VACUUM ANALYZE nebo
ANALYZE. Díky statistikám má optimizer informaci o počtu řádek v
tabulce a může lépe rozhodnout o použití indexů. Statistiky se uplatní
při určení optimálního pořadí a metody spojení tabulek. Statistiky by
se měli aktualizovat opakovaně, tak jak se mění obsah tabulek.
</p>
<p>Indexy nejsou obyčejně použity pro setřídění nebo spojení tabulek.
Sekvenční zpracování následované explicitním tříděním je obyčejně
rychlejší než použití indexu na velké tabulce.
</p>
<p>Jinak je tomu v případě použití LIMIT a ORDER BY, při kterém se
většinou index použije, jelikož je výsledkem pouze malá část tabulky.
</p>
<p>Pokud si myslíte, že optimizer mylně zvolil sekvenční prohledávání
tabulky, použijte příkaz SET enable_seqscan TO 'off' a zkuste zda je
prohledávání s indexem rychlejší.
</p>
<p>Při vyhledávání na základě vzoru jako je např. operátor LIKE nebo ~ se
indexy použijí pouze za určitých skutečností:
</p>
<ul><li> začátek hledaného vzoru musí být ukotven k začátku, tj.
<ul><li> vzor LIKE nesmí začínat %
</li>
<li> ~ regulární výraz musí začínat ^
</li>
</ul>
</li>
<li> vzor nesmí začínat intervalem, např. [a-e]
</li>
<li> vyhledávaní, které není Case sensitiv jako je ILIKE nebo ~* nepoužívá indexy. Můžete ale použít funkcionální indexy, které jsou popsány v sekci 4.8
</li>
<li> při inicializaci databáze (initdb) musí být použito C locale nebo vytvořte speciální text_pattern_index, který umožní, při respektování zmíněných podmínek použití indexu operací LIKE. Pro vyhledávání celých slov je možné a výhodné použít fulltext.
</li>
</ul>
<h3><a name="item4.7">4.7</a>) Jak zjistím, jak se vyhodnocuje můj dotaz?</h3>
<p>Podívejte se do nápovědy k příkazu EXPLAIN.
</p>
<h3><a name="item4.8">4.8</a>) Jak použít case-(in)sensitive regulární výraz? Jak použít index pro case insensitive hledání?</h3>
<p>Vyhledávání prostřednictvím regulárních vzorů zajišťuje operátor ~, který je case-sensitive. Jeho case-insensitive varianta je operátor ~*. Case-insensitive variací operátoru LIKE je operátor ILIKE.
</p>
<p>Case-insensitive vyhledání se řeší:
</p>
<pre>
SELECT *
FROM tab
WHERE lower(col) = 'abc';
</pre><p>Tento dotaz nepoužije standardní index. Musíte použít tzv. funkcionální index:
</p>
<pre>
CREATE INDEX tabindex ON tab (lower(col));
</pre><p>Pokud index vytvoříme jako unikátní, tak můžeme ukládat řetězce obsahující malá i velká písmena, ale nikoliv řetězce, které se od sebe odlišují jen v malých a velkých písmenech. K zajištění zápisu řetězce obsahující pouze malá nebo pouze velká písmena použijte CHECK kontroly nebo triggery.
</p>
<h3><a name="item4.9">4.9</a>) Jak v dotazu detekovat, že položka je NULL? Jak bezpečně spojit dva řetězce, pokud mohou obsahovat NULL? Lze třídit podle toho, jestli je položka NULL nebo ne?</h3>
<p>Pokud chcete testovat hodnotu NULL použijte operátor IS:
</p>
<pre>
SELECT *
FROM tab
WHERE col IS NULL;
</pre><p>K spojení řetězců, které mohou obsahovat hodnotu NULL, používejte funkci COALESCE(), např.:
</p>
<pre>
SELECT COALESCE(col1, '') || COALESCE(col2, '')
FROM tab
</pre><p>Pokud chcete třídit podle hodnoty NULL, použijte výraz IS NULL nebo IS NOT NULL v klauzuli ORDER. Hodnota pravda má přednost před hodnotou false a tedy pokud použijete:
</p>
<pre>
SELECT *
FROM tab
ORDER BY (col IS NOT NULL)
</pre><p>tak záznamy s NULL budou na začátku setříděných dat.
</p>
<h3><a name="item4.10">4.10</a>) Jaké jsou rozdíly mezi různými znakovými typy?</h3>
<table border="0">
<tr><td>Typ </td><td> Interní název </td><td> Poznámky
</td></tr>
<tr><td> VARCHAR(n)</td><td> varchar</td><td> n určuje maximální délku
</td></tr>
<tr><td> CHAR(n)</td><td> bpchar </td><td> řetězec je do dané délky rozšířen mezerami
</td></tr>
<tr><td> TEXT</td><td> text</td><td> bez omezení délky
</td></tr>
<tr><td> BYTEA</td><td> bytea</td><td> pole bytů nespecifikované délky
</td></tr>
<tr><td> "char"</td><td> char</td><td> jeden znak
</td></tr>
</table>
<p>Na interní názvy můžete narazit v systémovém katalogu nebo v některých chybových hlášeních.
</p>
<p>Čtyři první typy jsou tzv. varlena typy (první čtyři byty na disku jsou obsahují délku, ostatní obsahují vlastní data). Skutečně obsazený prostor je tedy o něco málo větší než deklarovaná velikost. Na druhou stranu, delší řetězce jsou komprimovány, takže obsazený prostor na disku může být menší než se čeká.
</p>
<p>VARCHAR(n) je vhodný pro ukládání různě dlouhých řetězců u kterých známe délkové omezení, TEXT pro řetězce bez omezení délky (maximum je jeden gigabyte).
</p>
<p>CHAR(n) se používá pro uložení stejně dlouhých řetězců. CHAR(n) doplní mezerami na specifikovanou délku, VARCHAR(n) hodnoty se ukládají tak jak jsou. BYTEA je pro ukládání binárních dat - non ASCII hodnot. Všechny zmíněné typy mají podobné výkonové charakteristiky.
</p>
<h3><a name="item4.11.1">4.11.1</a>) Jak vytvořit serial/auto-increment položku?</h3>
<p>V PostgreSQL můžete použít datový typ SERIAL. Jeho použitím se automaticky vytvoří sekvence.
Například:
</p>
<pre>
CREATE TABLE person (
id SERIAL,
name TEXT
);
</pre><p>je automaticky transformováno na:
</p>
<pre>
CREATE SEQUENCE person_id_seq;
CREATE TABLE person (
id INT4 NOT NULL DEFAULT nextval('person_id_seq'),
name TEXT
);
</pre><p>Podrobnější informace najdete v manuálu v popisu příkazu create_sequence.
</p>
<h3><a name="item4.11.2">4.11.2</a>) Jak získat hodnotu SERIAL po vložení řádku?</h3>
<p>Nejjednodušším způsob, jak získat vygenerovanou hodnotu typu SERIAL, je využít klauzuli RETURNING. Pro tabulku z 4.11.1 vypadá takto:
</p>
<pre>
INSERT INTO person (name) VALUES ('Blaise Pascal') RETURNING id;
</pre><p>Také můžete použít funkci nextvall() a její výsledek použít v příkazu INSERT, nebo zavolat currval() po provedení příkazu INSERT.
</p>
<h3><a name="item4.11.3">4.11.3</a>) Nezpůsobí currval() a nextval() problémy ve více uživatelském prostředí?</h3>
<p>Ne, currval vrací vždy hodnotu, která byla vygenerována pro vás.
</p>
<h3><a name="item4.11.4">4.11.4</a>) Proč není vygenerované číslo použito při přerušení transakce?Proč vznikají díry v číslování prostřednictvím sekvence nebo typu SERIAL?</h3>
<p>Poté co sekvence vygeneruje nové číslo, tak se nedochází k zamčení sekvence a nečeká se na úspěšné nebo neúspěšné dokončení transakce. Odvoláním transakce, která si vyžádala čísla sekvence se tato čísla nenávratně ztratí.
</p>
<h3><a name="item4.12">4.12</a>) Co to je OID? Co je to CTID?</h3>
<p>V případě, že tabulku nezaložíme s atributem WITHOUT OIDS, tak má každý řádek unikátní identifikační číslo OID. Toto číslo je 4 bajtové celé číslo, které je jedinečné v celé instalaci. Přeteče po 4 miliardách řádků. PostgreSQL používá OIDs jako interní linky v interních systémových tabulkách.
</p>
<p>K získání unikátního čísla v nesystémových tabulkách je vhodnější použití typu SERIAL než OID, jelikož sekvence SERIAL se používá pouze pro jednu tabulku a je tudíž méně náchylná na přetečení. Pokud byste se toho obávali, použijte typ SERIAL8.
</p>
<p>CTID se používá k identifikaci konkrétního fyzického řádku. CTID se mění pokud je řádek modifikován nebo znovu načten. Používají ho indexy jako adresaci fyzických řádků.
</p>
<h3><a name="item4.13">4.13</a>) Co znamená chybové hlášení "ERROR: Memory exhausted in AllocSetAlloc()"?</h3>
<p>Pravděpodobně jste vyčerpal dostupnou virtuální paměť, nebo tvůj kernel
má příliš nízké limity u určitých zdrojů. Před startem PostgreSQL vyzkoušejte:
</p>
<pre>
ulimit -d 262144
limit datasize 256m
</pre><p>Možná, že se projde pouze jeden příkaz - záleží to na vašem shellu.
Měl by zvednout limity datových segmentů vašich procesů na dostatečně velkou
hodnotu a snad umožnit dokončení dotazu. Změna limitů se bude aplikovat
pouze na aktuální proces a na všechny nově vytvořené procesy. Jestliže máte
problém s SQL klientem, protože vám server vrátil příliš dat, zkuste to
před startem klienta.
</p>
<h3><a name="item4.14">4.14</a>) Jak zjistím, kterou verzi PostgreSQL používám?</h3>
<p>V psql napište:
</p>
<pre>
SELECT version();
</pre>
<h3><a name="item4.15">4.15</a>) Jak vytvořit sloupec, který bude implicitně obsahovat aktuální čas?</h3>
<p>Použijte CURRENT_TIMESTAMP:
</p>
<pre>
CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
</pre>
<h3><a name="item4.16">4.16</a>) Jak provést vnější spojení (outer join)?</h3>
<p>PostgreSQL podporuje standardní SQL syntaxi pro vnější spojení. Zde jsou
dva příklady:
</p>
<pre>
SELECT *
FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
</pre><p>nebo
</p>
<pre>
SELECT *
FROM t1 LEFT OUTER JOIN t2 USING (col);
</pre><p>Tyto identické dotazy spojí sloupec t1.col k sloupci t2.col, a ještě vrátí všechny nespárované řádky t2 (ty, které nedohledá v t2). RIGHT JOIN by připojil všechny nespárované řádky z t2. FULL JOIN vrátí všechny spárované řádky i všechny zbývající řádky z obou tabulek. Klíčové slovo OUTER je volitelné. Běžná operace JOIN se také označuje jako vnitřní spojení.
</p>
<h3><a name="item4.17">4.17</a>) Jak provést dotaz napříč několika databázemi?</h3>
<p>Neexistuje žádný způsob, jak se v dotazu odkazovat na tabulky z jiné než aktuální databáze. A to protože má systémové tabulky uložené nezávisle v každé databázi a není tak úplně zřejmé, jak by se dotaz provedený napříč databázemi měl chovat.
</p>
<p>Jeden z doplňků dblink umožňuje dotaz nad několika tabulkami pomocí funkcí. Druhý způsob je simultální připojení klienta ke všem relevantním databázím a sloučení výsledku na straně klienta.
</p>
<h3><a name="item4.18">4.18</a>) Může funkce vrátit více řádků nebo sloupců?</h3>
<p>Jde to jednoduše pomocí set-returning funkce. Více na
<a href="http://www.postgresql.org/docs/techdocs.17" title="http://www.postgresql.org/docs/techdocs.17">http://www.postgresql.org/docs/techdocs.17</a>.
</p>
<h3><a name="item4.19">4.19</a>) Co je příčinou chyby "relation with OID xxxxx does not exist"?</h3>
<p>Nechtěným vedlejším efektem kešování SQL dotazů v PL/pgSQL funkci je problém s neplatnými odkazy na dočasné tabulky, které byly od prvního spuštění funkce zrušeny a znovu vytvořeny před dalším spuštěním PL/pgSQL funkce. Řešením je použít příkaz EXECUTE a to proto, že prováděcí plán SQL příkazu spouštěného příkazem EXECUTE se vytváří pokaždé znovu (neukládá se do cache).
</p>
<p>Tento problém by se neměl vyskytovat u PostgreSQL verze 8.3 a vyšších verzích.
</p>
<h3><a name="item4.20">4.20</a>) Jaké jsou možnosti replikace databází?</h3>
<p>Replikaci databáze umožňuje několik technoligií. Každá má určité výhody a nevýhody.
</p>
<p>Master/Slave replikaci podporuje jeden hlavní server, který přijímá požadavky na zápis a čtení, a několik podřízených serverů, které umožňují pouze čtení (SELECT). Nejrozšířenějším volně dostupným řešením tohoto typu je <a href="http://main.slony.info/" title="http://main.slony.info/">Slony-I</a>.
</p>
<p>Replikace typu Multi-master podporuje existenci několika serverů s povoleným zápisem na více replikovaných serverech. Toto řešení zvyšuje zátěž serverů, protože je nutná synchronizace serverů. Nejrozšířenějším volně dostupným řešením je <a href="http://pgfoundry.org/projects/pgcluster/" title="http://pgfoundry.org/projects/pgcluster/">PGCluster</a>.
</p>
<p>Ještě existuje několik komerčních a hardware řešení replikací podporujících různé modely replikace.
</p>
<h3><a name="item4.21">4.21</a>) Proč v dotazu nejsou rozpoznány názvy mých tabulek nebo funkcí? Proč jsou velká písmena v názvech automaticky převedena na malá písmena?</h3>
<p>Nejčastějším důvodem nerozpoznání názvu objektu bylo použití vložení názvu sloupce nebo tabulky mezi uvozovky při zakládání tabulky. Pokud se název zapíše mezi uvozovky, pak je case sensitive, a v důsledku toho je nutné názvy těchto sloupců nebo tabulek v SQL příkazech také vkládat mezi uvozovky (pokud obsahují velká písmena). Některé programy, jako je například pgAdmin, automaticky používají uvozovky. Takže pokud chcete, aby systém identifikoval identifikátor, musíte:
</p>
<ul><li> nepoužívat uvozovky v příkazu CREATE TABLE
</li>
<li> v identifikátoru použít pouze malá písmena
</li>
<li> v dotazech vkládat identifikátory do uvozovek
</li>
</ul>
</body>
</htm>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -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*