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:
@ -1,82 +0,0 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="content-type"
|
||||
content="text/html; charset=ISO-8859-1">
|
||||
<title>PostgreSQL Native Win32 Status Report</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1 style="text-align: center;">Compiling PostgreSQL On Native Win32 FAQ<br>
|
||||
</h1>
|
||||
<P>Last updated: Thu Oct 14 18:22:57 EDT 2004</P>
|
||||
<P>Current maintainer: Bruce Momjian <<A href=
|
||||
"mailto:bruce@momjian.us">bruce@momjian.us</A>><BR>
|
||||
</P>
|
||||
|
||||
<P>The most recent version of this document can be viewed at <A href=
|
||||
"http://www.postgresql.org/docs/faqs.FAQ_MINGW.html">
|
||||
http://www.postgresql.org/docs/faqs.FAQ_MINGW.html</A>.</P>
|
||||
|
||||
<P>The FAQ Running & Installing PostgreSQL On Native Windows is at <A href=
|
||||
"http://pginstaller.projects.postgresql.org/faq/FAQ_windows.html">
|
||||
http://pginstaller.projects.postgresql.org/faq/FAQ_windows.html</A>.</P>
|
||||
|
||||
<p>The native Win32 port is built from source using MinGW tools.
|
||||
There is also a precompiled binary installer called <span
|
||||
style="font-style: italic;">pginstaller</span> which you can find at
|
||||
from <a href="http://pgfoundry.org/projects/pginstaller">http://pgfoundry.org/projects/pginstaller</a>.
|
||||
It is a fully native build and uses no additional software like MinGW.
|
||||
The ready-made installer files are available on the main PostgreSQL ftp servers
|
||||
in the binary/win32 directory.
|
||||
<br>
|
||||
</p>
|
||||
<h2>Tools for Building Binaries<br>
|
||||
</h2>
|
||||
<p> The native Win32 port requires a 32-bit NT-based Microsoft
|
||||
operating
|
||||
system, like Windows NT 4, Windows 2000/2003, or Windows XP. (NT 4
|
||||
is no longer supported since version 8.2) Earlier
|
||||
operating systems do not have sufficient infrastructure. Building the
|
||||
port also
|
||||
requires MinGW and Msys, which can be downloaded from <a
|
||||
href="http://www.mingw.org/">http://www.mingw.org/</a>. MinGW is
|
||||
a Unix-like build environment for Microsoft operating systems.
|
||||
Msys is a collection of unix tools required to run shell scripts like <i>configure.
|
||||
</i>Neither is required to run the resulting binaries; they are
|
||||
needed only for creating the binaries. Work is in progress to support
|
||||
building using Visual C++ in a future version.<br>
|
||||
</p>
|
||||
<h2>Steps For Building Binaries<br>
|
||||
</h2>
|
||||
<ul>
|
||||
<li>Download the nightly snapshot tarball from <a
|
||||
href="ftp://ftp.postgresql.org/pub/dev">ftp://ftp.postgresql.org/pub/dev</a>
|
||||
or checkout via CVS (you will need <i>bison, flex,</i> and <i>perl</i>
|
||||
installed to build from CVS)<br>
|
||||
</li>
|
||||
<li>Run <i>configure</i> (you might need to add the --without-zlib
|
||||
argument, depending on whether you have installed <span
|
||||
style="font-style: italic;">zlib
|
||||
</span>on MinGW)</li>
|
||||
<li>Run <i>make install</i></li>
|
||||
</ul>
|
||||
Note: it is suggested that you run <i>psql</i> under <i>CMD.EXE.</i>,
|
||||
as the Msys console has buffering issues.<br>
|
||||
<br>
|
||||
If you make a change that you want to contribute, make a context diff
|
||||
and send
|
||||
it to the mailing list. <br>
|
||||
<h2>Resources</h2>
|
||||
There are several resources that helped us complete this port:<br>
|
||||
<ul>
|
||||
<li>PeerDirect port of PostgreSQL 7.2 to Win32 (<a
|
||||
href="ftp://momjian.postgresql.org/pub/postgresql/win32/PeerDirect">ftp://momjian.postgresql.org/pub/postgresql/win32/PeerDirect</a>)</li>
|
||||
<li>CONNX Win32 signal code(<a
|
||||
href="ftp://momjian.postgresql.org/pub/postgresql/win32/CONNX">ftp://momjian.postgresql.org/pub/postgresql/win32/CONNX</a>)</li>
|
||||
<li>SRA port of PostgreSQL to Win32 (unfortunately, this is not
|
||||
publically available because the threaded portion is proprietary)</li>
|
||||
<li>CHM help files (<a
|
||||
href="http://www.pgadmin.org/snapshots/help/en_US/pgadmin3.chm">http://www.pgadmin.org/snapshots/help/en_US/pgadmin3.chm</a>)</li>
|
||||
</ul>
|
||||
</body>
|
||||
</html>
|
@ -1,942 +0,0 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||
<HTML>
|
||||
<HEAD>
|
||||
<META name="generator" content="HTML Tidy, see www.w3.org">
|
||||
<META http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
|
||||
<TITLE>FAQ do PostgreSQL</TITLE>
|
||||
</HEAD>
|
||||
|
||||
<BODY bgcolor="#ffffff" text="#000000" link="#ff0000" vlink="#a00000"
|
||||
alink="#0000ff">
|
||||
<H1>Perguntas Frequentes (FAQ) sobre PostgreSQL</H1>
|
||||
|
||||
<P>Última atualização: Sex Nov 16 10:53:50 EST 2007</P>
|
||||
|
||||
<P>Mantenedor atual: Bruce Momjian (<A href=
|
||||
"mailto:bruce@momjian.us">bruce@momjian.us</A>)
|
||||
</P>
|
||||
|
||||
<P>Traduzido por: Euler Taveira de Oliveira (<A href=
|
||||
"mailto:euler@timbira.com">euler@timbira.com</A>)</P>
|
||||
|
||||
<P>A versão mais recente desse documento pode ser vista em <A href=
|
||||
"http://www.postgresql.org/files/documentation/faqs/FAQ.html">
|
||||
http://www.postgresql.org/files/documentation/faqs/FAQ.html</A> (EN).<BR>
|
||||
<A href="http://www.postgresql.org/files/documentation/faqs/FAQ_brazilian.html">
|
||||
http://www.postgresql.org/files/documentation/faqs/FAQ_brazilian.html</A> (pt_BR).</P>
|
||||
|
||||
<P>Perguntas sobre plataformas específicas são respondidas em <A href=
|
||||
"http://www.postgresql.org/docs/faq/">http://www.postgresql.org/docs/faq/</A>.</P>
|
||||
<HR>
|
||||
|
||||
<H2 align="center">Perguntas Gerais</H2>
|
||||
<A href="#item1.1">1.1</A>) O que é PostgreSQL? Como ele é pronunciado?
|
||||
O que é Postgres?<BR>
|
||||
<A href="#item1.2">1.2</A>) Quem controla o PostgreSQL?<BR>
|
||||
<A href="#item1.3">1.3</A>) Qual é a licença do PostgreSQL?<BR>
|
||||
<A href="#item1.4">1.4</A>) Quais plataformas o PostgreSQL pode ser executado?<BR>
|
||||
<A href="#item1.5">1.5</A>) Onde eu posso conseguir o PostgreSQL?<BR>
|
||||
<A href="#item1.6">1.6</A>) Qual é a última versão?<BR>
|
||||
<A href="#item1.7">1.7</A>) Onde eu posso conseguir suporte?<BR>
|
||||
<A href="#item1.8">1.8</A>) Como eu posso submeter um relato de um bug?<BR>
|
||||
<A href="#item1.9">1.9</A>) Como eu posso saber quais são os bugs conhecidos ou características ausentes?<BR>
|
||||
<A href="#item1.10">1.10</A>) Que documentação está disponível?<BR>
|
||||
<A href="#item1.11">1.11</A>) Como eu posso aprender <SMALL>SQL</SMALL>?<BR>
|
||||
<A href="#item1.12">1.12</A>) Como posso submeter uma correção (patch) ou me juntar a equipe de desenvolvimento?<BR>
|
||||
<A href="#item1.13">1.13</A>) Como é o PostgreSQL comparado a outros <SMALL>SGBD</SMALL>s?<BR>
|
||||
<A href="#item1.14">1.14</A>) O PostgreSQL gerenciar<61> as mudanças de horário devido ao horário de verão em vários países?<BR>
|
||||
|
||||
|
||||
<H2 align="center">Perguntas sobre Clientes</H2>
|
||||
<A href="#item2.1">2.1</A>) Quais interfaces estão disponíveis para PostgreSQL?<BR>
|
||||
<A href="#item2.2">2.2</A>) Quais ferramentas estão disponíveis para utilizar o PostgreSQL com páginas Web?<BR>
|
||||
<A href="#item2.3">2.3</A>) O PostgreSQL tem interfaces gráficas para interagir com usuário?<BR>
|
||||
|
||||
|
||||
<H2 align="center">Perguntas Administrativas</H2>
|
||||
<A href="#item3.1">3.1</A>) Como eu instalo o PostgreSQL em um local diferente de <I>/usr/local/pgsql</I>?<BR>
|
||||
<A href="#item3.2">3.2</A>) Como eu controlo conexões de outras máquinas?<BR>
|
||||
<A href="#item3.3">3.3</A>) Como eu ajusto o servidor de banco de dados para obter uma performance melhor?<BR>
|
||||
<A href="#item3.4">3.4</A>) Quais características de depuração estão disponíveis?<BR>
|
||||
<A href="#item3.5">3.5</A>) Por que eu recebo <I>"Sorry, too many clients"</I> quando eu tento conectar?<BR>
|
||||
<A href="#item3.6">3.6</A>) Qual é o processo de atualização do PostgreSQL?<BR>
|
||||
<A href="#item3.7">3.7</A>) Que tipo de hardware eu devo usar?<BR>
|
||||
|
||||
|
||||
<H2 align="center">Perguntas Operacionais</H2>
|
||||
<A href="#item4.1">4.1</A>) Como eu faço um <SMALL>SELECT</SMALL> somente dos primeiros registros de uma consulta? Um registro randômico?<BR>
|
||||
<A href="#item4.2">4.2</A>) Como eu descubro quais tabelas, índices, bancos de dados e usuários estão definidos? Como eu vejo as consultas utilizadas pelo <I>psql</I> para mostrá-los?<BR>
|
||||
<A href="#item4.3">4.3</A>) Como você muda o tipo de dado de uma coluna?<BR>
|
||||
<A href="#item4.4">4.4</A>) Qual é o tamanho máximo de um registro, uma tabela e um banco de dados?<BR>
|
||||
<A href="#item4.5">4.5</A>) Quanto espaço em disco é necessário para armazenar dados de um arquivo texto?<BR>
|
||||
<A href="#item4.6">4.6</A>) Por que minhas consultas estão lentas? Por que elas não estão utilizando meus índices?<BR>
|
||||
<A href="#item4.7">4.7</A>) Como eu vejo como o otimizador de consultas está avaliando minha consulta?<BR>
|
||||
<A href="#item4.8">4.8</A>) Como eu faço buscas com expressões regulares e buscas com expressões regulares sem diferenciar mauúsculas de minúsculas? Como eu utilizo um índice para buscas sem distinguir maiúsculas de minúsculas?<BR>
|
||||
<A href="#item4.9">4.9</A>) Em uma consulta, como eu detecto se um campo é <SMALL>NULL</SMALL>? Como eu posso concatenar possíveis <SMALL>NULL</SMALL>s? Como eu posso ordenar por um campo que é <SMALL>NULL</SMALL> ou não?<BR>
|
||||
<A href="#item4.10">4.10</A>) Qual é a diferença entre os vários tipos de dado de caracteres?<BR>
|
||||
<A href="#item4.11.1">4.11.1</A>) Como eu crio um campo serial/auto incremento?<BR>
|
||||
<A href="#item4.11.2">4.11.2</A>) Como eu consigo o valor de um campo
|
||||
<SMALL>SERIAL</SMALL>?<BR>
|
||||
<A href="#item4.11.3">4.11.3</A>) <I>currval()</I> não lida com condição de corrida com outros usuários?<BR>
|
||||
<A href="#item4.11.4">4.11.4</A>) Por que os números da minha sequência não são reutilizados quando uma transação é abortada? Por que há intervalos nos números da minha sequência/coluna SERIAL?<BR>
|
||||
<A href="#item4.12">4.12</A>) O que é um <SMALL>OID</SMALL>? O que é um <SMALL>CTID</SMALL>?<BR>
|
||||
<A href="#item4.13">4.13</A>) Por que eu recebo o erro <I>"ERROR: Memory exhausted in AllocSetAlloc()"</I>?<BR>
|
||||
<A href="#item4.14">4.14</A>) Como eu informo qual versão do PostgreSQL eu estou utilizando?<BR>
|
||||
<A href="#item4.15">4.15</A>) Como eu crio uma coluna que conterá por padrão a hora atual?<BR>
|
||||
<A href="#item4.16">4.16</A>) Como eu faço uma junção externa (outer join)?<BR>
|
||||
<A href="#item4.17">4.17</A>) Como eu faço consultas utilizando múltiplos bancos de dados?<BR>
|
||||
<A href="#item4.18">4.18</A>) Como eu retorno múltiplos registros ou colunas de uma função?<BR>
|
||||
<A href="#item4.19">4.19</A>) Por que eu obtenho erros "relation with OID ######
|
||||
does not exist" ao acessar tabelas temporárias em funções PL/PgSQL?<BR>
|
||||
<A href="#item4.20">4.20</A>) Quais soluções de replicação estão disponíveis?<BR>
|
||||
<A href="#item4.21">4.21</A>) Por que os nomes de minhas tabelas e colunas não
|
||||
são reconhecidos em minha consulta? Por que as maiúsculas não são preservadas?<BR>
|
||||
|
||||
|
||||
<HR>
|
||||
|
||||
<H2 align="center">Perguntas Gerais</H2>
|
||||
|
||||
<H3 id="item1.1">1.1) O que é PostgreSQL? Como ele é pronunciado? O que é Postgres?</H3>
|
||||
|
||||
<P>PostgreSQL é pronunciado <I>Post-Gres-Q-L</I>.
|
||||
(Para os curiosos que querem saber como se diz "PostgreSQL", um
|
||||
<a href="http://www.postgresql.org/files/postgresql.mp3">arquivo de áudio</a> está disponível).</P>
|
||||
|
||||
<P>O PostgreSQL é um sistema de banco de dados objeto-relacional que tem as
|
||||
características de sistemas de bancos de dados comerciais tradicionais com
|
||||
melhoramentos encontrados nos sistemas <SMALL>SGBD</SMALL>s de próxima geração.
|
||||
PostgreSQL é livre e o código-fonte completo está disponível.</P>
|
||||
|
||||
<P>O desenvolvimento do PostgreSQL é feito por um grupo de desenvolvedores
|
||||
voluntários (na sua maioria) espalhados pelo mundo e que se comunicam via
|
||||
Internet. É um projeto da comunidade e não é controlado por nenhuma
|
||||
empresa. Para se envolver, veja a FAQ do desenvolvedor em <A href=
|
||||
"http://www.postgresql.org/docs/faqs.FAQ_DEV.html">
|
||||
http://www.postgresql.org/docs/faqs.FAQ_DEV.html</A>
|
||||
</P>
|
||||
|
||||
<P>Postgres é um apelido para o PostgreSQL amplamente utilizado. Era o nome original do
|
||||
projeto em Berkeley e dentre os outros apelidos é o preferido. Se você acha
|
||||
'PostgreSQL' difícil de pronunciar, diga apenas 'Postgres'.</P>
|
||||
|
||||
<H3 id="item1.2">1.2) Quem controla o PostgreSQL?<BR></H3>
|
||||
|
||||
<P>Se você está procurando por um mantenedor, comitê central ou empresa
|
||||
controladora do PostgreSQL, desista --- não há um(a). Nós temos um
|
||||
comitê core e committers CVS, mas estes grupos são mais para questões
|
||||
administrativas do que controle. O projeto é direcionado pela comunidade
|
||||
de desenvolvedores e usuários, que qualquer um pode se juntar. Tudo o que
|
||||
você precisa é se inscrever nas listas de discussão e participar das
|
||||
discussões. Veja a <a href="http://www.postgresql.org/docs/faqs.FAQ_DEV.html">
|
||||
FAQ do desenvolvedor</A> para obter informações como se envolver com o
|
||||
desenvolvimento do PostgreSQL.</P>
|
||||
|
||||
<H3 id="item1.3">1.3) Qual é a licença do PostgreSQL?</H3>
|
||||
|
||||
<P>O PostgreSQL é distribuído sob a licença BSD clássica. Basicamente,
|
||||
ela permite que usuários façam qualquer coisa com o código, incluindo
|
||||
revender os binários sem o código-fonte. A única restrição é que você
|
||||
não nos responsabilize legalmente por problemas com o programa de computador.
|
||||
Há também a exigência de que esta licença apareça em todas as cópias
|
||||
do programa de computador. Aqui está a licença BSD que usamos atualmente:</P>
|
||||
<P>PostgreSQL está sujeito a seguinte licença:</P>
|
||||
|
||||
<P>PostgreSQL Data Base Management System</P>
|
||||
|
||||
<P>Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group
|
||||
Portions Copyright (c) 1994-1996 Regents of the University of California</P>
|
||||
|
||||
<P>Permission to use, copy, modify, and distribute this software
|
||||
and its documentation for any purpose, without fee, and without a
|
||||
written agreement is hereby granted, provided that the above
|
||||
copyright notice and this paragraph and the following two
|
||||
paragraphs appear in all copies.</P>
|
||||
|
||||
<P>IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY
|
||||
PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL
|
||||
DAMAGES, INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS
|
||||
SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
|
||||
CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</P>
|
||||
|
||||
<P>THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY
|
||||
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE
|
||||
SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE
|
||||
UNIVERSITY OF CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE,
|
||||
SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.</P>
|
||||
|
||||
<H3 id="item1.4">1.4) Quais plataformas o PostgreSQL pode ser executado?</H3>
|
||||
|
||||
<P>Em geral, qualquer plataforma moderna compatível com Unix deve ser capaz de executar o PostgreSQL. As plataformas que foram testadas antes do lançamento de uma versão são listadas nas instruções de instalação.</P>
|
||||
|
||||
<P>O PostgreSQL também executa nativamente nos sistemas operacionais Microsoft Windows
|
||||
baseados no NT tais como Win200 SP4, WinXP e Win2003. Um instalador pré-empacotado está
|
||||
disponível em <a href= "http://pgfoundry.org/projects/pginstaller">
|
||||
http://pgfoundry.org/projects/pginstaller</a>. Versões do Windows baseadas no MS-DOS
|
||||
(Win95, Win98, WinMe) podem executar o PostgreSQL utilizando o Cygwin.</P>
|
||||
|
||||
<p>Há também uma versão para o Novell Netware 6 em
|
||||
<a href="http://forge.novell.com">http://forge.novell.com</a>
|
||||
e uma versão para OS/2 (eComStation) em <a href=
|
||||
"http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2F">
|
||||
http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2F</a>.</p>
|
||||
|
||||
<H3 id="item1.5">1.5) Onde eu posso conseguir o PostgreSQL?</H3>
|
||||
|
||||
<P>Via navegador web, utilize <a href="http://www.postgresql.org/ftp/">
|
||||
http://www.postgresql.org/ftp/</a> e via ftp, utilize
|
||||
<A href="ftp://ftp.postgresql.org/pub/">
|
||||
ftp://ftp.postgresql.org/pub/</A>.</P>
|
||||
|
||||
|
||||
<H3 id="item1.6">1.6) Qual é a última versão?</H3>
|
||||
|
||||
<P>A última versão do PostgreSQL é a versão 8.2.5.</P>
|
||||
|
||||
<P>Nós planejamos lançar versões novas a cada ano com versões
|
||||
corretivas em alguns meses.</P>
|
||||
|
||||
<H3 id="item1.7">1.7) Onde eu posso conseguir suporte?</H3>
|
||||
|
||||
<P>A comunidade do PostgreSQL fornece assistência a muitos de seus
|
||||
usuários via e-mail. O principal sítio web para inscrição nas listas
|
||||
de e-mail é <a href="http://www.postgresql.org/community/lists/">
|
||||
http://www.postgresql.org/community/lists/</a>. As listas <I>general</I>
|
||||
e <I>bugs</I> são um bom lugar para início.</P>
|
||||
|
||||
<P>O principal canal de IRC é o <I>#postgresql</I> na Freenode (<I>irc.freenode.net</I>). Para se conectar você pode utilizar o comando Unix <code>irc -c '#postgresql' "$USER" irc.freenode.net</code> ou utilizar qualquer outro cliente de IRC. Um canal hispânico (<I>#postgresql-es</I>) e um francês (<I>#postgresqlfr</I>) também existem na mesma rede. Há também um canal PostgreSQL na EFNet.</P>
|
||||
|
||||
<P>Uma lista de empresas que prestam suporte comercial está disponível em <A href=
|
||||
"http://www.postgresql.org/support/professional_support">
|
||||
http://www.postgresql.org/support/professional_support</A>.</P>
|
||||
|
||||
<H3 id="item1.8">1.8) Como eu informo a existência de um bug?</H3>
|
||||
|
||||
<P>Visite o formulário que reporta bugs do PostgreSQL em <A href=
|
||||
"http://www.postgresql.org/support/submitbug">http://www.postgresql.org/support/submitbug</A>.</P>
|
||||
<P>Verifique também o nosso ftp <A href=
|
||||
"ftp://ftp.postgresql.org/pub">ftp://ftp.postgresql.org/pub</A> para
|
||||
ver se há uma versão mais recente do PostgreSQL.</P>
|
||||
|
||||
<P>Bugs submetidos utilizando o formulário ou informado a qualquer
|
||||
lista de discussão do PostgreSQL tipicamente gera uma das seguintes
|
||||
respostas:</P>
|
||||
<ul>
|
||||
<li>Não é um bug e o porquê</li>
|
||||
<li>É um bug conhecido e já está na lista de
|
||||
<A href="http://www.postgresql.org/docs/faqs.TODO.html">AFAZERES</A></li>
|
||||
<li>O bug foi corrigido na versão atual</li>
|
||||
<li>O bug foi corrigido mas não foi empacotado em um versão oficial</li>
|
||||
<li>Um pedido foi feito para obter informações detalhadas:
|
||||
<ul>
|
||||
<li>Sistema Operacional</li>
|
||||
<li>Versão do PostgreSQL</li>
|
||||
<li>Exemplo de teste que reproduz o bug</li>
|
||||
<li>Informações sobre depuração</li>
|
||||
<li>Saída reconstituidora de vestígios (backtrace) do depurador</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>O bug é novo. O seguinte pode ocorrer:
|
||||
<ul>
|
||||
<li>Uma correção é criada e será incluída na próxima versão</li>
|
||||
<li>O bug não pode ser corrigido imediatamente e é adicionado
|
||||
a lista de <A href="http://www.postgresql.org/docs/faqs.TODO.html">AFAZERES</A></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<H3 id="item1.9">1.9) Como eu posso saber quais são os bugs conhecidos
|
||||
ou funcionalidades ausentes?</H3>
|
||||
|
||||
<P>O PostgreSQL suporta um subconjunto extendido do <SMALL>SQL:2003</SMALL>.
|
||||
Veja nossa lista de <A href="http://www.postgresql.org/docs/faqs.TODO.html">AFAZERES</A>
|
||||
que contém bugs conhecidos, funcionalidades ausentes e planos futuros.</P>
|
||||
|
||||
<P>Uma solicitação de funcionalidade geralmente resulta em uma das
|
||||
seguintes respostas:</P>
|
||||
<ul>
|
||||
<li>A funcionalidade já está na lista de <A href="http://www.postgresql.org/docs/faqs.TODO.html">AFAZERES</A></li>
|
||||
<li>A funcionalidade não é desejável porque:
|
||||
<ul>
|
||||
<li>Ela duplica uma funcionalidade existente que já segue o
|
||||
padrão SQL</li>
|
||||
<li>A funcionalidade aumentará a complexidade do código mas
|
||||
adicionará pouco benefício</li>
|
||||
<li>A funcionalidade será insegura ou não-confiável</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>A nova funcionalidade é adicionada a lista de
|
||||
<A href="http://www.postgresql.org/docs/faqs.TODO.html">AFAZERES</A></li>
|
||||
</ul>
|
||||
|
||||
<P>O PostgreSQL não utiliza sistema de acompanhamento de bugs porque
|
||||
nós achamos mais eficiente responder diretamente o e-mail e manter a
|
||||
lista de <A href="http://www.postgresql.org/docs/faqs.TODO.html">AFAZERES</A>
|
||||
atualizada. Na prática, bugs não duram muito no programa; e bugs que afetam
|
||||
uma grande quantidade de usuários são corrigidos rapidamente. O único lugar
|
||||
para encontrar todas as mudanças, melhorias e correções em uma versão do
|
||||
PostgreSQL é ler as mensagens de log do
|
||||
<a href="http://www.postgresql.org/developer/sourcecode/">CVS</a>. Até mesmo
|
||||
as notas de lançamento não listam todas as mudanças feitas no programa.</P>
|
||||
|
||||
<H3 id="item1.10">1.10) Que documentação está disponível?</H3>
|
||||
|
||||
<P>O PostgreSQL inclui vasta documentação, incluindo um manual extenso,
|
||||
páginas de manuais (man pages) e alguns exemplos teste. Veja o diretório
|
||||
<I>/doc</I>. Você também pode pesquisar os manuais online em <A href=
|
||||
"http://www.postgresql.org/docs">http://www.postgresql.org/docs</A>.
|
||||
</P>
|
||||
|
||||
<P>Há dois livros sobre PostgreSQL disponíveis online em <A href=
|
||||
"http://www.postgresql.org/docs/books/awbook.html">http://www.postgresql.org/docs/books/awbook.html</A>
|
||||
e <A href=
|
||||
"http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook/</A>.
|
||||
Há uma lista de livros sobre PostgreSQL disponíveis para compra. Um dos mais
|
||||
populares é o do Korry Douglas. Uma lista de análise sobre os livros pode ser
|
||||
encontrada em <A href=
|
||||
"http://www.postgresql.org/docs/books/">http://www.postgresql.org/docs/books/</A>.
|
||||
Há também uma coleção de artigos técnicos sbore PostgreSQL em <A href="http://www.postgresql.org/docs/techdocs/">http://www.postgresql.org/docs/techdocs/</A>.</P>
|
||||
|
||||
<P>O programa cliente de linha de comando <I>psql</I> tem alguns comandos \d para
|
||||
mostrar informações sobre tipos, operadores, funções, agregações, etc. - utilize \?
|
||||
para mostrar os comandos disponíveis.</P>
|
||||
|
||||
<P>Nosso sítio web contém ainda mais documentação.</P>
|
||||
|
||||
<H3 id="item1.11">1.11) Como eu posso aprender <SMALL>SQL</SMALL>?</H3>
|
||||
|
||||
<P>Primeiro, considere os livros específicos sobre PostgreSQL mencionados
|
||||
acima. Muitos de nossos usuários gostam do <I>The Practical SQL Handbook</I>,
|
||||
Bowman, Judith S., et al., Addison-Wesley. Outros do <I>The
|
||||
Complete Reference SQL</I>, Groff et al., McGraw-Hill.</P>
|
||||
|
||||
<P>Há também bons tutoriais disponíveis online:
|
||||
<UL>
|
||||
<LI> <A href="http://www.intermedia.net/support/sql/sqltut.shtm">http://www.intermedia.net/support/sql/sqltut.shtm</A>
|
||||
</LI>
|
||||
<LI>
|
||||
<A href="http://sqlcourse.com/">http://sqlcourse.com</A>
|
||||
</LI>
|
||||
<LI>
|
||||
<A href="http://www.w3schools.com/sql/default.asp">http://www.w3schools.com/sql/default.asp</A>
|
||||
</LI>
|
||||
<LI><A href=
|
||||
"http://mysite.verizon.net/Graeme_Birchall/id1.html">http://mysite.verizon.net/Graeme_Birchall/id1.html</A>
|
||||
</LI>
|
||||
</UL>
|
||||
|
||||
<H3 id="item1.12">1.12) Como posso submeter uma correção (patch) ou me juntar a equipe de desenvolvimento?</H3>
|
||||
|
||||
<P>Veja a <a href="http://www.postgresql.org/docs/faqs.FAQ_DEV.html">
|
||||
FAQ do Desenvolvedor</A>.</P>
|
||||
|
||||
<H3 id="item1.13">1.13) Como é o PostgreSQL comparado a outros <SMALL>SGBD</SMALL>s?</H3>
|
||||
|
||||
<P>Há várias maneiras de se medir um software: funcionalidades, performance, confiabilidade, suporte e preço.</P>
|
||||
|
||||
<DL>
|
||||
<DT><B>Funcionalidades</B></DT>
|
||||
|
||||
<DD>PostgreSQL tem muitas características presentes em muitos <SMALL>SGBD</SMALL>s comerciais como transações, subconsultas, gatilhos, visões, integridade referencial de chave estrangeira e bloqueio (lock) sofisticado. Nós temos algumas funcionalidades que eles não tem, como tipos definidos pelo usuário, herança, regras e controle de concorrência de múltiplas versões para reduzir bloqueios (locks).<BR>
|
||||
<BR>
|
||||
</DD>
|
||||
|
||||
<DT><B>Performance</B></DT>
|
||||
|
||||
<DD>A performance do PostgreSQL é comparável a outros bancos de dados comerciais e de código livre. Ele é mais rápido em algumas coisas, mais lento em outras. Nossa performance é geralmente +/- 10% comparada a de outros bancos de dados.
|
||||
<BR>
|
||||
</DD>
|
||||
|
||||
<DT><B>Confiabilidade</B></DT>
|
||||
|
||||
<DD>Nós sabemos que um <SMALL>SGBD</SMALL> deve ser confiável ou ele é inútil. Nós empenhamos em lançar versões bem testadas, de código estável e que tenha o mínimo de bugs. Cada versão tem no mínimo um mês de teste em versão beta, e nosso histórico de versões mostra que nós podemos fornecer versões estáveis e sólidas que estão prontas para uso em produção. Nós acreditamos que somos comparados a nosso favor com outros sistemas de bancos de dados nessa área.<BR>
|
||||
<BR>
|
||||
</DD>
|
||||
|
||||
<DT><B>Suporte</B></DT>
|
||||
|
||||
<DD>Nossas listas de discussão fornecem contato com um grupo de desenvolvedores e usuários para ajudar a resolver muitos problemas encontrados. Enquanto nós não podemos garantir o conserto, <SMALL>SGBD</SMALL>s comerciais nem sempre fornecem também. Com acesso direto aos desenvolvedores, a comunidade de usuários, manuais e o código fonte faz com que o suporte do PostgreSQL seja superior ao de outros <SMALL>SGBD</SMALL>s. Há suporte comercial por incidente disponíveis para aqueles que precisam de um. (Veja <A href="#item1.7">seção 1.7 da FAQ</A>).<BR>
|
||||
<BR>
|
||||
</DD>
|
||||
|
||||
<DT><B>Preço</B></DT>
|
||||
|
||||
<DD>Nós somos livres para uso dele tanto comercial quanto não comercial. Você pode adicionar nosso código ao seu produto sem limitações, exceto aquelas descritas na nossa licença BSD mencionada acima.<BR>
|
||||
<BR>
|
||||
</DD>
|
||||
</DL>
|
||||
|
||||
<H3 id="item1.14">1.14) O PostgreSQL gerenciará mudanças no horário devido ao horário de verão em vários países?</H3>
|
||||
|
||||
<P>Mudanças no horário de verão dos USA foram incluídas nas versões 8.0 .[4+] do PostgreSQL e em todas as versões grandes, i.e. 8.1. Mudanças no Canadá e Austrália Oeste foram incluídas na 8.0.[10+], 8.1.[6+] e em todas as versões grandes subsequentes. Versões do PostgreSQL anteriores a 8.0 utilizam o banco de dados de zona horária do sistema operacional para informações sobre horário de verão.</P>
|
||||
|
||||
<HR>
|
||||
|
||||
<H2 align="center">Perguntas sobre Clientes</H2>
|
||||
|
||||
<H3 id="item2.1">2.1) Quais interfaces estão disponíveis para PostgreSQL?</H3>
|
||||
|
||||
<p>A instalação do PostgreSQL inclui somente as interfaces <SMALL>C</SMALL> e
|
||||
<SMALL>C</SMALL> embutida. Todas as outras interfaces são projetos independentes
|
||||
que podem ser obtidos separadamente; sendo separados permitem que eles tenham
|
||||
suas próprias datas de lançamento e time de desenvolvedores.</P>
|
||||
|
||||
<P>Algumas linguagens de programação como <SMALL>PHP</SMALL> incluem uma
|
||||
interface para PostgreSQL. Interfaces para linguagens como Perl,
|
||||
<SMALL>TCL</SMALL>, Python e muitas outras estão disponíveis em
|
||||
<a href="http://www.pgfoundry.org">http://www.pgfoundry.org</A>.
|
||||
</P>
|
||||
|
||||
<H3 id="item2.2">2.2) Quais ferramentas estão disponíveis para utilizar o PostgreSQL com páginas Web?</H3>
|
||||
|
||||
<P>Uma boa introdução para páginas web que utilizam bancos de dados pode ser vista em:
|
||||
<A href="http://www.webreview.com">http://www.webreview.com</A></P>
|
||||
|
||||
<P>Para integração na Web, PHP (<A
|
||||
href="http://www.php.net">http://www.php.net</A>)
|
||||
é uma excelente interface.</P>
|
||||
|
||||
<P>Para casos complexos, muitos usam a Interface Perl e DBD::Pg com CGI.pm
|
||||
ou mod_perl.</P>
|
||||
|
||||
<H3 id="item2.3">2.3) O PostgreSQL tem interfaces gráficas para iteragir com o usuário?</H3>
|
||||
|
||||
<P>Há um vasto número de Ferramentas Gráficas (GUI), que estão disponíveis
|
||||
para o PostgreSQL, comerciais e de desenvolvedores de código aberto. Uma
|
||||
lista detalhada pode ser encontrada em <A href="http://www.postgresql.org/docs/techdocs.54">
|
||||
Documentação da Comunidade PostgreSQL</A></P>
|
||||
|
||||
<HR>
|
||||
|
||||
<H2 align="center">Perguntas Administrativas</H2>
|
||||
|
||||
<H3 id="item3.1">3.1) Como eu instalo o PostgreSQL em um local diferente de <I>/usr/local/pgsql</I>?</H3>
|
||||
|
||||
<P>Especifique a opção <I>--prefix</I> quando executar o <I>configure</I>.</P>
|
||||
|
||||
<H3 id="item3.2">3.2) Como eu controlo conexões de outras máquinas?</H3>
|
||||
|
||||
<P>Por padrão, o PostgreSQL só permite conexões da máquina local utilizando soquetes de domínio Unix ou conexões TCP/IP. Outras máquinas não poderão conectar-se a menos que você modifique <I>listen_addresses</I> no <I>postgresql.conf</I>, habilite a autenticação por máquina modificando o arquivo <I>$PGDATA/pg_hba.conf</I> e reinicie o servidor PostgreSQL.</P>
|
||||
|
||||
<H3 id="item3.3">3.3) Como eu ajusto o servidor de banco de dados para obter uma performance melhor?</H3>
|
||||
|
||||
<P>Há três grandes áreas para melhorar a performance em potencial:</P>
|
||||
|
||||
<DL>
|
||||
<DT><B>Mudança de Consultas</B></DT>
|
||||
|
||||
<DD>Isto involve modificar consultas para obter melhor performance:
|
||||
<ul>
|
||||
<li>Criação de índices, incluir expressões e índices parciais</li>
|
||||
<li>Utilização o COPY ao invés de múltiplos comandos <SMALL>INSERT</SMALL>s</li>
|
||||
<li>Agrupamento de múltiplos comandos em uma única transação para diminuir
|
||||
a despesa com efetivações (commit)</li>
|
||||
<li>Utilização do <SMALL>CLUSTER</SMALL> quando recuperar vários registros de
|
||||
um índice</li>
|
||||
<li>Utilização do <SMALL>LIMIT</SMALL> para retornar um subconjunto da saída
|
||||
da consulta</li>
|
||||
<li>Utilização de Consultas preparadas</li>
|
||||
<li>Utilização de <SMALL>ANALYZE</SMALL> para manter as estatísticas do
|
||||
otimizador corretas</li>
|
||||
<li>Utilização regular do <SMALL>VACUUM</SMALL> ou <I>pg_autovacuum</I></li>
|
||||
<li>Remoção de índices durante grande mudança de dados</li>
|
||||
</ul><BR>
|
||||
<BR>
|
||||
</DD>
|
||||
|
||||
<DT><B>Configuração do Servidor</B></DT>
|
||||
|
||||
<DD>Um grande número de configurações que afetam a performance.
|
||||
Para obter detalhes adicionais, veja <a href=
|
||||
"http://www.postgresql.org/docs/current/static/runtime-config.html">
|
||||
Administration Guide/Server Run-time Environment/Run-time
|
||||
Configuration</a> para listagem completa, e para
|
||||
comentários veja <a href=
|
||||
"http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html">
|
||||
http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html</a>
|
||||
e <a href="http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html">
|
||||
http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html</a>.
|
||||
<BR>
|
||||
<BR>
|
||||
</DD>
|
||||
|
||||
<DT><B>Seleção do Hardware</B></DT>
|
||||
|
||||
<DD>O efeito do hardware na performance é detalhado em
|
||||
<a href="http://www.powerpostgresql.com/PerfList/">
|
||||
http://www.powerpostgresql.com/PerfList/</a> e <a
|
||||
href="http://momjian.us/main/writings/pgsql/hw_performance/index.html">
|
||||
http://momjian.us/main/writings/pgsql/hw_performance/index.html</a>.
|
||||
<BR>
|
||||
<BR>
|
||||
</DD>
|
||||
</DL>
|
||||
|
||||
<H3 id="item3.4">3.4) Quais características de depuração estão disponíveis?</H3>
|
||||
|
||||
<P>Há muitas variáveis de configuração do servidor <CODE>log_*</CODE>
|
||||
que habilitam a exibição de consultas e estatísticas que podem ser
|
||||
muito úteis para depuração e medidas de performance.</P>
|
||||
|
||||
<H3 id="item3.5">3.5) Por que eu recebo <I>"Sorry, too many clients"</I> quando eu tento conectar?</H3>
|
||||
|
||||
<P>Você atingiu o limite padrão de 100 sessões. Você
|
||||
precisa aumentar o limite do servidor PostgreSQL, que diz
|
||||
quantos processos servidor concorrentes ele pode iniciar, alterando
|
||||
o valor <I>max_connections</I> no <I>postgresql.conf</I> e
|
||||
reiniciando o <I>postmaster</I>.</P>
|
||||
|
||||
<H3 id="item3.6">3.6) Qual é o processo de atualização do PostgreSQL?</H3>
|
||||
|
||||
<P>Veja <a
|
||||
href="http://www.postgresql.org/support/versioning">http://www.postgresql.org/support/versioning</a>
|
||||
para discuss<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ções específicas.</P>
|
||||
|
||||
<H3 id="item3.7">3.7) Que tipo de hardware eu devo usar?</H3>
|
||||
|
||||
<P>Por causa do hardware de PC ser em sua maioria compatível, pessoas tendem a acreditar que todos os hardwares de PC são de mesma qualidade. Não é verdade. ECC RAM, SCSI e placas mãe de qualidade são mais confiáveis e têm uma melhor performance do que hardwares mais baratos. O PostgreSQL executará em quase todo hardware, mas se a confiabilidade e a performance forem importantes é prudente pesquisar sobre as opções de hardware. Nossas listas de discussão podem ser usadas para discutir opções de hardware e dilemas.</P>
|
||||
|
||||
<HR>
|
||||
|
||||
<H2 align="center">Perguntas Operacionais</H2>
|
||||
|
||||
<H3 id="item4.1">4.1) Como eu faço um <SMALL>SELECT</SMALL> somente dos primeiros registros de uma consulta? Um registro randômico?</H3>
|
||||
|
||||
<P>Para obter somente alguns registros, se você sabe o número de
|
||||
registros necessários ao executar o <SMALL>SELECT</SMALL> utilize
|
||||
o <SMALL>LIMIT</SMALL>. Se um índice corresponde no <SMALL>ORDER
|
||||
BY</SMALL> é possível que a consulta toda não tenha que ser
|
||||
executada. Se você não sabe o número de registros ao executar o
|
||||
<SMALL>SELECT</SMALL>, utilize um cursor e o <SMALL>FETCH</SMALL>.</P>
|
||||
|
||||
<P>Para <SMALL>obter</SMALL> um registro randômico, utilize:</P>
|
||||
<PRE>
|
||||
SELECT col
|
||||
FROM tab
|
||||
ORDER BY random()
|
||||
LIMIT 1;
|
||||
</PRE>
|
||||
|
||||
<H3 id="item4.2">4.2) Como eu descubro quais tabelas, índices, bancos de dados e usuários estão definidos? Como eu vejo as consultas utilizadas pelo <I>psql</I> para mostrá-los?</H3>
|
||||
|
||||
<P>Utilize o comando \dt para ver tabelas no <I>psql</I>. Para obter
|
||||
uma lista completa dos comandos no psql você pode utilizar \?.
|
||||
Alternativamente, você pode ler o código-fonte do <I>psql</I> no arquivo
|
||||
<I>pgsql/src/bin/psql/describe.c</I>, ele contém os comandos <SMALL>SQL</SMALL>
|
||||
que geram a saída para os comandos de contrabarra do <I>psql</I>. Você
|
||||
também pode iniciar o <I>psql</I> com a opção <I>-E</I> para que as consultas
|
||||
utilizadas para executar os comandos que você informou seja exibida.
|
||||
O PostgreSQL também fornece uma inteface compatível com <SMALL>SQL</SMALL> do
|
||||
INFORMATION SCHEMA que você pode consultar para obter informação sobre o
|
||||
banco de dados.</P>
|
||||
|
||||
<P>Há também tabelas do sistema que começam com <I>pg_</I> que os descrevem
|
||||
também.</P>
|
||||
|
||||
<P>Utilizando o <I>psql -l</I> listará todos os bancos de dados.</P>
|
||||
|
||||
<P>Veja também o arquivo <I>pgsql/src/tutorial/syscat.source</I>. Ele
|
||||
ilustra muitos dos comandos <SMALL>SELECT</SMALL>s necessários para obter
|
||||
informação das tabelas de sistema do banco de dados.</P>
|
||||
|
||||
<H3 id="item4.3">4.3) Como você muda o tipo de dado de uma coluna?</H3>
|
||||
|
||||
<P>Mudar o tipo de dado de uma coluna pode ser feito facilmente na versão 8.0
|
||||
ou superior com <SMALL>ALTER TABLE ALTER COLUMN TYPE</SMALL>.</P>
|
||||
|
||||
<P>Em versões anteriores, faça isso:</P>
|
||||
<PRE>
|
||||
BEGIN;
|
||||
ALTER TABLE tab ADD COLUMN col_nova <i>novo_tipo_dado</i>;
|
||||
UPDATE tab SET col_nova = CAST(col_antiga AS <i>novo_tipo_dado</i>);
|
||||
ALTER TABLE tab DROP COLUMN col_antiga;
|
||||
COMMIT;
|
||||
</PRE>
|
||||
<P>Você pode então querer fazer um <I>VACUUM FULL tab</I> para recuperar
|
||||
o espaço em disco utilizado pelos registros expirados.</P>
|
||||
|
||||
<H3 id="item4.4">4.4) Qual é o tamanho máximo de um registro, uma tabela e um banco de dados?</H3>
|
||||
|
||||
<P>Estes são os limites:</P>
|
||||
<BLOCKQUOTE>
|
||||
<TABLE>
|
||||
<TR><TD>Tamanho máximo de um banco de dados?</TD><TD>ilimitado (existem bancos de dados de 32 TB)</TD></TR>
|
||||
<TR><TD>Tamanho máximo de uma tabela?</TD><TD>32 TB</TD></TR>
|
||||
<TR><TD>Tamanho máximo de um registro?</TD><TD>400 GB</TD></TR>
|
||||
<TR><TD>Tamanho máximo de um campo?</TD><TD>1 GB</TD></TR>
|
||||
<TR><TD>Número máximo de registros em uma tabela?</TD><TD>ilimitado</TD></TR>
|
||||
<TR><TD>Número máximo de colunas em uma tabela?</TD><TD>250-1600 dependendo dos tipos das colunas</TD></TR>
|
||||
<TR><TD>Número máximo de índices em uma tabela?</TD><TD>ilimitado</TD></TR>
|
||||
</TABLE>
|
||||
</BLOCKQUOTE>
|
||||
|
||||
<P>É claro, que eles não são ilimitados, mas limitados
|
||||
ao espaço em disco disponível e espaço em memória/swap.
|
||||
A Performance será penalizada quando estes valores se tornarem grandes.</P>
|
||||
|
||||
<P>O tamanho máximo de uma tabela com 32 TB não requer suporte a
|
||||
arquivos grandes do sistema operacional. Tabelas grandes são armazenadas
|
||||
como múltiplos arquivos de 1 GB então o limite do sistema de
|
||||
arquivos não é importante.</P>
|
||||
|
||||
<P>O tamanho máximo de uma tabela, o tamanho de um registro e o número
|
||||
máximo de colunas podem ser quadruplicados aumentando-se o tamanho padrão
|
||||
do bloco para 32k. O tamanho máximo de uma tabela pode também ser aumentado utilizando
|
||||
particionamento de tabela.</P>
|
||||
|
||||
<P>Uma limitação é que índices não podem ser criados em colunas maiores do que
|
||||
2.000 caracteres. Felizmente, tais índices são raramente necessários. Unicidade é
|
||||
melhor garantida por um índice de uma função de um hash MD5 de uma coluna longa, e
|
||||
indexação de texto longo permite a busca de palavras dentro da coluna.</P>
|
||||
|
||||
<H3 id="item4.5">4.5) Quanto espaço em disco é necessário para armazenar dados de um arquivo texto?</H3>
|
||||
|
||||
<P>Um banco de dados PostgreSQL irá requerer até cinco vezes a quantidade de espaço requerida para armazenar dados em um arquivo texto.</P>
|
||||
|
||||
<P>Como um exemplo, considere um arquivo com 100.000 linhas contendo um inteiro e uma descrição em cada linha. Suponha que o tamanho médio da descrição é de vinte bytes. O arquivo terá 2,8 MB. O tamanho do arquivo do banco de dados PostgreSQL que contém esses dados pode ser estimado em 5,2 MB:</P>
|
||||
<PRE>
|
||||
24 bytes: cada cabeçalho de registro (aproximadamente)
|
||||
24 bytes: um campo int e um campo texto
|
||||
+ 4 bytes: ponteiro na página para a tupla
|
||||
-------------------------------------------
|
||||
52 bytes por registro
|
||||
|
||||
O tamanho de uma página de dados no PostgreSQL é 8192 bytes (8 KB), então:
|
||||
|
||||
8192 bytes por página
|
||||
------------------------ = 158 registros por página do banco de dados (arredondado para baixo)
|
||||
52 bytes por registro
|
||||
|
||||
100000 registros de dados
|
||||
---------------------------- = 633 páginas do banco de dados (arredondado para cima)
|
||||
158 registros por página
|
||||
|
||||
633 páginas do banco de dados * 8192 bytes por página = 5.185.536 bytes (5,2 MB)
|
||||
</PRE>
|
||||
|
||||
<P>Índices não requerem muito espaço, mas contém
|
||||
dados que foram indexados, então eles podem ocupar algum espaço.</P>
|
||||
|
||||
<P><SMALL>NULL</SMALL>s são armazenados como bitmaps, então eles
|
||||
utilizam muito pouco espaço.</P>
|
||||
|
||||
<H3 id="item4.6">4.6) Por que minhas consultas estão lentas? Por que elas não estão utilizando meus índices?</H3>
|
||||
|
||||
<P>Índices não são utilizados por toda consulta. Índices são utilizados somente
|
||||
se a tabela é maior do que um tamanho mínimo, e a consulta seleciona somente uma
|
||||
pequena porcentagem dos registros da tabela. Isto porque o acesso randômico ao
|
||||
disco causado pela busca indexada pode ser mais lento do que uma leitura ao longo
|
||||
da tabela ou busca sequencial.</P>
|
||||
|
||||
<P>Para determinar se um índice deveria ser utilizado, o PostgreSQL deve ter
|
||||
estatísticas sobre a tabela. Estas estatísticas são coletadas utilizando o
|
||||
<SMALL>VACUUM ANALYZE</SMALL> ou simplesmente o <SMALL>ANALYZE</SMALL>.
|
||||
Utilizando estatísticas, o otimizador sbae quantos registros estão na tabela,
|
||||
e pode melhor determinar se índices deveriam ser utilizados.
|
||||
Estatísticas também são úteis para determinar a ordem de junção ótima e métodos
|
||||
de junção. Coleção de estatísticas deveriam ser feitas periodicamente a
|
||||
medida que o conteúdo da tabela muda.</P>
|
||||
|
||||
<P>Índices não são normalmente utilizados para <SMALL>ORDER BY</SMALL> ou para
|
||||
fazer junções. Uma busca sequencial seguido por uma ordenação explícita é
|
||||
geralmente mais rápida do que uma busca indexada em uma tabela grande.
|
||||
Contudo, <SMALL>LIMIT</SMALL> combinado com <SMALL>ORDER BY</SMALL>
|
||||
frequentemente utilizará índice porque somente uma pequena porção da tabela
|
||||
será retornada.</P>
|
||||
|
||||
<P>Se você acredita que o otimizador está incorreto ao escolher uma busca
|
||||
sequencial, utilize <CODE>SET enable_seqscan TO 'off'</CODE> e execute a
|
||||
consulta novamente para ver se uma busca indexada é realmente mais rápida.</P>
|
||||
|
||||
<P>Ao utilizar operadores curinga tais como <SMALL>LIKE</SMALL> ou <I>~</I>,
|
||||
índices podem ser utilizados somente em algumas condições:</P>
|
||||
<UL>
|
||||
<LI>O início da cadeia de caracteres da busca deve ser iniciar com uma
|
||||
cadeia de caracteres, i.e.
|
||||
<UL>
|
||||
<LI>modelos <SMALL>LIKE</SMALL> não devem iniciar com <I>%</I>.</LI>
|
||||
<LI>modelos <I>~</I> (expressões regulares) devem iniciar com <I>^</I>.</LI>
|
||||
</UL></LI>
|
||||
<LI>A cadeia de caracteres utilizada na busca não pode iniciar com a classe de
|
||||
caracteres e.g. [a-e].</LI>
|
||||
<LI>Busca que não diferenciam maiúsculas de minúsculas tais como <SMALL>ILIKE</SMALL> e
|
||||
<I>~*</I> não utilizam índices. Em vez disso, utilize índice de expressão, que
|
||||
é descrito na seção <a href="#item4.8">4.8</a>.</LI>
|
||||
<LI>O idioma padrão <I>C</I> deve ser usando durante o <i>initdb</i>
|
||||
porque não é possível saber o próximo caracter em idiomas que não sejam o C.
|
||||
Você pode criar um índice especial <CODE>text_pattern_ops</CODE> para tais casos
|
||||
que funcionam somente para indexação com <SMALL>LIKE</SMALL>. Também é
|
||||
possível utilizar indexação de busca textual para buscas por palavras.
|
||||
</LI>
|
||||
</UL>
|
||||
|
||||
<P>Em versões anteriores a 8.0, índices frequentemente não podem ser utilizados
|
||||
a menos que os tipos de dados correspondam aos tipos de coluna do índice. Isto era
|
||||
particularmente verdadeiro para índices de coluna int2, int8 e numeric.</P>
|
||||
|
||||
<H3 id="item4.7">4.7) Como eu vejo como o otimizador de consulta está avaliando a minha consulta?</H3>
|
||||
|
||||
<P>Veja o comando <SMALL>EXPLAIN</SMALL> no manual.</P>
|
||||
|
||||
<H3 id="item4.8">4.8) Como eu faço buscas com expressões regulares
|
||||
e buscas com expressões regulares sem diferenciar maiúsculas de minúsculas? Como eu
|
||||
utilizo um índice para buscas que não diferenciam maiúsculas de minúsculas?</H3>
|
||||
|
||||
<P>O operador <I>~</I> faz avaliação de expressões regulares,
|
||||
e <I>~*</I> faz avaliação não sensível a maiúsculas
|
||||
de expressões regulares. A variante não sensível a maiúsculas
|
||||
do <SMALL>LIKE</SMALL> é chamada de <SMALL>ILIKE</SMALL>.</P>
|
||||
|
||||
<P>Comparações de igualdade não sensíveis a maiúsculas
|
||||
são normalmente expressadas como:</P>
|
||||
<PRE>
|
||||
SELECT *
|
||||
FROM tab
|
||||
WHERE lower(col) = 'abc';
|
||||
</PRE>
|
||||
Isso não irá utilizar o índice padrão. Contudo, se
|
||||
você criar um índice de expressão, ele será utilizado:
|
||||
<PRE>
|
||||
CREATE INDEX tabindex ON tab (lower(col));
|
||||
</PRE>
|
||||
<P>Se o índice acima é criado como <SMALL>UNIQUE</SMALL>, embora a
|
||||
coluna possa armazenar caracteres maiúsculos e minúsculos, ele não
|
||||
pode ter valores idênticos que diferem apenas em letras maiúsculas e minúsculas.
|
||||
Para forçar uma letra maiúscula ou minúscula a ser armazenada na coluna, utilize
|
||||
uma restrição <SMALL>CHECK</SMALL> ou um gatilho.</P>
|
||||
|
||||
<H3 id="item4.9">4.9) Em uma consulta, como eu detecto se um campo é <SMALL>NULL</SMALL>? Como eu posso concatenar possíveis <SMALL>NULL</SMALL>s? Como eu posso ordenar por um campo que é <SMALL>NULL</SMALL> ou não?</H3>
|
||||
|
||||
<P>Você testa a coluna com <SMALL>IS NULL</SMALL> e <SMALL>IS
|
||||
NOT NULL</SMALL>, como a seguir:</P>
|
||||
|
||||
<PRE>
|
||||
SELECT *
|
||||
FROM tab
|
||||
WHERE col IS NULL;
|
||||
</PRE>
|
||||
|
||||
<P>Para concatenar com possíveis <SMALL>NULL</SMALL>s, utilize <I>COALESCE()</I>, assim:</P>
|
||||
<PRE>
|
||||
SELECT COALESCE(col1, '') || COALESCE(col2, '')
|
||||
FROM tab
|
||||
</PRE>
|
||||
|
||||
<P>Para ordenar pelo status <SMALL>NULL</SMALL>, utilize os modificadores
|
||||
<SMALL>IS NULL</SMALL> e <SMALL>IS NOT NULL</SMALL> na sua cláusula
|
||||
<SMALL>ORDER BY</SMALL>. Coisas que são <I>verdadeiro</I> serão ordenadas acima
|
||||
das coisas que são <I>falso</I>, então a consulta a seguir irá colocar
|
||||
entradas NULL no início da lista de resultados:</P>
|
||||
|
||||
<PRE>
|
||||
SELECT *
|
||||
FROM tab
|
||||
ORDER BY (col IS NOT NULL)
|
||||
</PRE>
|
||||
|
||||
<H3 id="item4.10">4.10) Qual é a diferença entre os vários tipos de dado de caracteres?</H3>
|
||||
<BLOCKQUOTE>
|
||||
<TABLE>
|
||||
<TR><TH>Tipo</TH><TH>Nome Interno</TH><TH>Observação</TH></TR>
|
||||
<TR><TD>VARCHAR(n)</TD><TD>varchar</TD><TD>tamanho especifica o tamanho
|
||||
máximo, sem preenchimento</TD></TR>
|
||||
<TR><TD>CHAR(n)</TD><TD>bpchar</TD><TD>preenchimento em branco para
|
||||
comprimento fixo específico</TD></TR>
|
||||
<TR><TD>TEXT</TD><TD>text</TD><TD>nenhum limite superior específico no
|
||||
comprimento</TD></TR>
|
||||
<TR><TD>BYTEA</TD><TD>bytea</TD><TD>vetor de bytes de comprimento variável
|
||||
(seguro a byte nulo)</TD></TR>
|
||||
<TR><TD>"char"</TD><TD>char</TD><TD>um caracter</TD></TR>
|
||||
</TABLE>
|
||||
</BLOCKQUOTE>
|
||||
|
||||
<P>Você verá o nome interno quando examinar o catálogo do sistema e em algumas mensagens de erro.</P>
|
||||
|
||||
<P>Os primeiros quatro tipos acima são do tipo "varlena" (i.e., os primeiros quatro bytes no disco são o comprimento seguido pelos dados). Consequentemente o espaço atual utilizado é ligeiramente maior do que o tamanho declarado. Contudo, valores longos são também sujeitos a compressão, então o espaço em disco pode também ser bem menor do que o esperado.</P>
|
||||
|
||||
<SMALL>VARCHAR(n)</SMALL> é melhor quando está armazenando cadeias de caracteres de comprimento variável e há um limite de tamanho desta cadeia. <SMALL>TEXT</SMALL> é para cadeias de caracteres de comprimento ilimitado, com o máximo de um gigabyte.
|
||||
<P><SMALL>CHAR(n)</SMALL> é para armazenar cadeias de caracteres que são todas do mesmo tamanho. <SMALL>CHAR(n)</SMALL> preenche com espaços em branco até o tamanho especificado, enquanto o <SMALL>VARCHAR(n)</SMALL> armazena somente os caracteres fornecidos. <SMALL>BYTEA</SMALL> é para armazenar dados binários, particularmente valores que incluem bytes <SMALL>NULL</SMALL>. Todos os tipos descritos aqui tem características de performance similares.</P>
|
||||
|
||||
<H3 id="item4.11.1">4.11.1) Como eu crio um campo serial/auto incremento?</H3>
|
||||
|
||||
<P>PostgreSQL suporta o tipo de dados <SMALL>SERIAL</SMALL>. Ele cria
|
||||
automaticamente uma sequência. Por exemplo:</P>
|
||||
<PRE>
|
||||
CREATE TABLE pessoa (
|
||||
id SERIAL,
|
||||
nome TEXT
|
||||
);
|
||||
</PRE>
|
||||
|
||||
é automaticamente traduzido em:
|
||||
<PRE>
|
||||
CREATE SEQUENCE pessoa_id_seq;
|
||||
CREATE TABLE pessoa (
|
||||
id INT4 NOT NULL DEFAULT nextval('pessoa_id_seq'),
|
||||
nome TEXT
|
||||
);
|
||||
</PRE>
|
||||
|
||||
<P>Sequências automaticamente criadas são nomeadas como
|
||||
<<i>tabela</i>>_<<i>colunaserial</i>>_<i>seq</i>, onde
|
||||
<i>tabela</i> e <i>colunaserial</i> são os nomes da tabela e
|
||||
da coluna serial, respectivamente. Veja a página sobre
|
||||
<I>create_sequence</I> no manual para obter informações
|
||||
adicionais sobre sequências.
|
||||
|
||||
<H3 id="item4.11.2">4.11.2) Como eu consigo o valor de um campo
|
||||
<SMALL>SERIAL</SMALL>?</H3>
|
||||
|
||||
<P>A maneira mais simples de obter o próximo valor <SMALL>SERIAL</SMALL>
|
||||
de uma sequência é com <SMALL>RETURNING</SMALL>. Utilizando o
|
||||
exemplo da tabela em <A href="#item4.11.1">4.11.1</A>, ele ficaria assim:
|
||||
|
||||
<PRE>
|
||||
INSERT INTO pessoa (nome) VALUES ('Blaise Pascal') RETURNING id;
|
||||
</PRE>
|
||||
|
||||
Você também pode chamar <I>nextval()</I> e utilizar o valor no
|
||||
<SMALL>INSERT</SMALL> ou chamar <I>currval()</I> <I>após</I> o
|
||||
<SMALL>INSERT</SMALL>.
|
||||
|
||||
<H3 id="item4.11.3">4.11.3) <I>currval()</I> não lida com condição de corrida com outros usuários?</H3>
|
||||
|
||||
<P>Não. <I>currval()</I> retorna o valor atual atribuido pela sua sessão, e não por todas as sessões.</P>
|
||||
|
||||
<H3 id="item4.11.4">4.11.4) Por que os números da minha sequência não são reutilizados quando uma transação é abortada? Por que há intervalos nos números da minha sequência/coluna SERIAL?</H3>
|
||||
|
||||
<P>Para melhorar a concorrência, valores da sequência são atribuídos a transações correntes e não são travados até que a transação seja finalizada. Isso causa intervalos na numeração por causa de transações abortadas.</P>
|
||||
|
||||
<H3 id="item4.12">4.12) O que é um <SMALL>OID</SMALL>? O que é um <SMALL>CTID</SMALL>?</H3>
|
||||
|
||||
<P>Se uma tabela é criada com <SMALL>WITH OIDS</SMALL>, cada registro recebe um <SMALL>OID</SMALL> único.
|
||||
O<SMALL>ID</SMALL>s são automaticamente atribuídos como inteiros de 4 bytes
|
||||
que são únicos ao longo de toda instalação. Contudo, eles são limitados em
|
||||
4 bilhões e, então, os O<SMALL>ID</SMALL>s começam a ser duplicados. O PostgreSQL
|
||||
utiliza <SMALL>OID</SMALL>s para ligar as tabelas do sistema.</P>
|
||||
|
||||
<P>Para numerar registros nas tabelas do usuários, é melhor utilizar
|
||||
<SMALL>SERIAL</SMALL> ao invés de O<SMALL>ID</SMALL>s porque
|
||||
sequências <SMALL>SERIAL</SMALL> são únicas somente em uma tabela; e
|
||||
são menos propícias a atingir o limite.
|
||||
<SMALL>SERIAL8</SMALL> está disponível para armazenar valores de sequências
|
||||
com oito bytes.</P>
|
||||
|
||||
<P>C<SMALL>TID</SMALL>s são utilizados para identificar registros físicos
|
||||
específicos com valores de block e deslocamento. C<SMALL>TID</SMALL>s mudam
|
||||
após registros serem modificados ou recarregados. Eles são utilizados por
|
||||
índices para apontar registros físicos.</P>
|
||||
|
||||
<H3 id="item4.13">4.13) Por que eu recebo o erro <I>"ERROR: Memory exhausted in AllocSetAlloc()"</I>?</H3>
|
||||
|
||||
<P>Você provavelmente está sem memória virtual no seu sistema, ou o seu núcleo (kernel) tem um limite baixo para certos recursos. Tente isto antes de iniciar o servidor PostgreSQL:</P>
|
||||
<PRE>
|
||||
ulimit -d 262144
|
||||
limit datasize 256m
|
||||
</PRE>
|
||||
|
||||
Dependendo da sua shell, somente um desses comando terá sucesso, mas ele definirá o segmento de dados do seu processo com um limite maior e talvez permita que a consulta seja feita. Este comando é aplicado ao processo atual e todos os subprocessos criados depois do comando ser executado. Se você tiver problemas com o cliente <SMALL>SQL</SMALL> porque o processo servidor retornou muitos dados, tente-o antes de iniciar o cliente.
|
||||
|
||||
<H3 id="item4.14">4.14) Como eu informo qual versão do PostgreSQL eu estou utilizando?</H3>
|
||||
|
||||
<P>No <I>psql</I>, digite <CODE>SELECT version();</CODE></P>
|
||||
|
||||
<H3 id="item4.15">4.15) Como eu crio uma coluna que conterá por padrão a hora atual?</H3>
|
||||
|
||||
<P>Utilize <I>CURRENT_TIMESTAMP</I>:</P>
|
||||
<PRE>
|
||||
CREATE TABLE teste (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
|
||||
</PRE>
|
||||
|
||||
<H3 id="item4.16">4.16) Como eu faço uma junção externa (outer join)?</H3>
|
||||
|
||||
<P>PostgreSQL suporta junções externas utilizando a sintaxe padrão do SQL. Aqui temos dois exemplos:</P>
|
||||
<PRE>
|
||||
SELECT *
|
||||
FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
|
||||
</PRE>
|
||||
or
|
||||
<PRE>
|
||||
SELECT *
|
||||
FROM t1 LEFT OUTER JOIN t2 USING (col);
|
||||
</PRE>
|
||||
|
||||
<P>Essas duas consultas indênticas juntam t1.col com t2.col, e também
|
||||
retornam qualquer registro que não foi juntado em t1 (aqueles que não
|
||||
combinaram com t2). Uma junção a direita <SMALL>RIGHT</SMALL>
|
||||
adicionaria registros que não foram juntados da tabela t2.
|
||||
Uma junção completa (<SMALL>FULL</SMALL>) retornaria os registros
|
||||
combinados mais todos os registros não combinados de t1 e t2.
|
||||
A palavra <SMALL>OUTER</SMALL> é opcional e é assumida nas
|
||||
junções <SMALL>LEFT</SMALL>, <SMALL>RIGHT</SMALL> e <SMALL>FULL</SMALL>.
|
||||
Junções ordinárias são chamadas junções
|
||||
internas (<SMALL>INNER</SMALL>).</P>
|
||||
|
||||
<H3 id="item4.17">4.17) Como eu faço consultas utilizando múltiplos bancos de dados?</H3>
|
||||
|
||||
<P>Não há outra maneira de consultar um banco de dados caso ele
|
||||
não seja o atual. Porque o PostgreSQL carrega catálogos do sistema
|
||||
específicos do banco de dados, é incerto como uma consulta em banco
|
||||
de dados distintos pode se comportar.</P>
|
||||
|
||||
<P><I>contrib/dblink</I> permite consultas em bancos de dados distintos utilizando
|
||||
chamadas de funções. É claro, que um cliente pode fazer
|
||||
conexões simultâneas em bancos de dados diferentes e juntar os
|
||||
resultados no cliente.</P>
|
||||
|
||||
<H3 id="item4.18">4.18) Como eu retorno múltiplos registros ou colunas de uma função?</H3>
|
||||
|
||||
<P>É fácil utilizando funções que retornam conjunto,
|
||||
<a href="http://www.postgresql.org/docs/techdocs.17">
|
||||
http://www.postgresql.org/docs/techdocs.17</a>.</P>
|
||||
|
||||
<H3 id="item4.19">4.19) Por que eu obtenho erros "relation with OID ######
|
||||
does not exist" ao acessar tabelas temporárias em funções PL/PgSQL?</H3>
|
||||
|
||||
<P>Em versões do PostgreSQL < 8.3, PL/PgSQL armazena o conteúdo da função, e o efeito indesejado é que se uma função PL/PgSQL acessa uma tabela temporária, e aquela tabela é removida e criada novamente, e a função é chamada novamente, a função irá falhar porque o conteúdo armazenado da função ainda apontará para a tabela temporária antiga. A solução é utilizar o <SMALL>EXECUTE</SMALL> para acesso a tabelas temporárias no PL/PgSQL. Isto irá fazer com que a consulta seja avaliada toda vez.</P>
|
||||
|
||||
<P>Este problema não ocorre no PostgreSQL 8.3 ou superior.</P>
|
||||
|
||||
<H3 id="item4.20">4.20) Quais soluções de replicação estão disponíveis?</H3>
|
||||
|
||||
<P>Embora "replicação" seja um termo simples, há várias tecnologias para fazer
|
||||
replicação, com vantagens e desvantagens para cada um.</P>
|
||||
|
||||
<P>Replicação mestre/escravo permite que um mestre receba consultas de leitura e
|
||||
escrita, enquanto os escravos só podem aceitar leitura/consultas <SMALL>SELECT</SMALL>.
|
||||
A solução mais popular de replicação mestre-escravo para PostgreSQL disponível livremente
|
||||
é <A href="http://main.slony.info">Slony-I</A>.</P>
|
||||
|
||||
<P>Replicação com múltiplos mestres permite que consultas leitura/escrita sejam
|
||||
enviadas para múltiplos computadores replicadores. Esta capacidade também tem
|
||||
um sério impacto na performance por causa da necessidade de sincronizar as mudanças
|
||||
entre os servidores. <A href="http://pgfoundry.org/projects/pgcluster/">PGCluster</a>
|
||||
é a solução mais popular disponível livremente para PostgreSQL.</P>
|
||||
|
||||
<P>Há também soluções de replicação comerciais e baseadas em hardware disponíveis
|
||||
que suportam uma variedade de modelos de replicação.</P>
|
||||
|
||||
<H3 id="item4.21">4.21) Por que os nomes de minhas tabelas e colunas não
|
||||
são reconhecidos em minha consulta? Por que as maiúsculas não são preservadas?</H3>
|
||||
|
||||
<P>A causa mais comum de nomes desconhecidos é o uso de aspas ao redor dos nomes da tabela ou coluna
|
||||
durante a criação da tabela. Ao utilizar aspas, nomes de tabela e coluna
|
||||
(chamados de identificadores) são armazenados <a
|
||||
href="http://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS">
|
||||
como especificado</a>, significando que você deve utilizar aspas quando se
|
||||
referir aos nomes na consulta. Algumas interfaces, como pgAdmin,
|
||||
automaticamente colocam aspas nos identificadores durante a criação da tabela.
|
||||
Então, para identificadores serem reconhecidos, você deve:
|
||||
<UL>
|
||||
<LI>Evitar colocar aspas no identificador ao criar tabelas</LI>
|
||||
<LI>Utilizar somente caracteres minúsculos em identificadores</LI>
|
||||
<LI>Colocar aspas em identificadores ao referenciá-los nas consultas</LI>
|
||||
</UL>
|
||||
|
||||
</BODY>
|
||||
</HTML>
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -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
@ -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*
|
Reference in New Issue
Block a user