~ubuntu-branches/ubuntu/lucid/postgresql-8.4/lucid-proposed

« back to all changes in this revision

Viewing changes to doc/src/FAQ/FAQ_brazilian.html

  • Committer: Bazaar Package Importer
  • Author(s): Martin Pitt
  • Date: 2009-09-06 14:11:13 UTC
  • mfrom: (1.1.5 upstream)
  • Revision ID: james.westby@ubuntu.com-20090906141113-qf5f3hkw7n036jfy
Tags: 8.4.1-1
* Urgency medium due to security fix.
* New upstream security/bug fix release:
  - Disallow "RESET ROLE" and "RESET SESSION AUTHORIZATION" inside
    security-definer functions. This covers a case that was missed in the
    previous patch that disallowed "SET ROLE" and "SET SESSION
    AUTHORIZATION" inside security-definer functions. [CVE-2007-6600]
  - Fix WAL page header initialization at the end of archive recovery.
    This could lead to failure to process the WAL in a subsequent archive
    recovery.
  - Fix "cannot make new WAL entries during recovery" error.
  - Fix problem that could make expired rows visible after a crash.
    This bug involved a page status bit potentially not being set
    correctly after a server crash.
  - Make "LOAD" of an already-loaded loadable module into a no-op.
    Formerly, "LOAD" would attempt to unload and re-load the module,
    but this is unsafe and not all that useful.
  - Make window function PARTITION BY and ORDER BY items always be
    interpreted as simple expressions.
    In 8.4.0 these lists were parsed following the rules used for
    top-level GROUP BY and ORDER BY lists. But this was not correct per
    the SQL standard, and it led to possible circularity.
  - Fix several errors in planning of semi-joins. These led to wrong query
    results in some cases where IN or EXISTS was used together with another
    join.
  - Fix handling of whole-row references to subqueries that are within
    an outer join. An example is SELECT COUNT(ss.-) FROM ... LEFT JOIN
    (SELECT ...) ss ON .... Here, ss.- would be treated as
    ROW(NULL,NULL,...) for null-extended join rows, which is not the same as
    a simple NULL.  Now it is treated as a simple NULL.
  - Fix locale handling with plperl. This bug could cause the server's
    locale setting to change when a plperl function is called, leading to
    data corruption.
  - Fix handling of reloptions to ensure setting one option doesn't
    force default values for others.
  - Ensure that a "fast shutdown" request will forcibly terminate open
    sessions, even if a "smart shutdown" was already in progress.
  - Avoid memory leak for array_agg() in GROUP BY queries.
  - Treat to_char(..., 'TH') as an uppercase ordinal suffix with
    'HH'/'HH12'.  It was previously handled as 'th'.
  - Include the fractional part in the result of EXTRACT(second) and
    EXTRACT(milliseconds) for time and time with time zone inputs.
    This has always worked for floating-point datetime configurations,
    but was broken in the integer datetime code.
  - Fix overflow for INTERVAL 'x ms' when "x" is more than 2 million
    and integer datetimes are in use.
  - Improve performance when processing toasted values in index scans.
    This is particularly useful for PostGIS.
  - Fix a typo that disabled commit_delay.
  - Output early-startup messages to "postmaster.log" if the server is
    started in silent mode. Previously such error messages were discarded,
    leading to difficulty in debugging.
  - Remove translated FAQs. They are now on the wiki. The main FAQ was moved
    to the wiki some time ago.
  - Fix pg_ctl to not go into an infinite loop if "postgresql.conf" is
    empty.
  - Fix several errors in pg_dump's --binary-upgrade mode. pg_dump
    --binary-upgrade is used by pg_migrator.
  - Fix "contrib/xml2"'s xslt_process() to properly handle the maximum
    number of parameters (twenty).
  - Improve robustness of libpq's code to recover from errors during
    "COPY FROM STDIN".
  - Avoid including conflicting readline and editline header files when
    both libraries are installed.
  - Work around gcc bug that causes "floating-point exception" instead
    of "division by zero" on some platforms.
* debian/control: Bump Standards-Version to 3.8.3 (no changes necessary).

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2
 
<HTML>
3
 
  <HEAD>
4
 
    <META name="generator" content="HTML Tidy, see www.w3.org">
5
 
    <META http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
6
 
    <TITLE>FAQ do PostgreSQL</TITLE>
7
 
  </HEAD>
8
 
 
9
 
  <BODY bgcolor="#ffffff" text="#000000" link="#ff0000" vlink="#a00000"
10
 
  alink="#0000ff">
11
 
    <H1>Perguntas Frequentes (FAQ) sobre PostgreSQL</H1>
12
 
 
13
 
    <P>&Uacute;ltima atualiza&ccedil;&atilde;o: Sex Nov 16 10:53:50 EST 2007</P>
14
 
 
15
 
    <P>Mantenedor atual: Bruce Momjian (<A href=
16
 
    "mailto:bruce@momjian.us">bruce@momjian.us</A>)
17
 
    </P>
18
 
 
19
 
    <P>Traduzido por: Euler Taveira de Oliveira (<A href=
20
 
    "mailto:euler@timbira.com">euler@timbira.com</A>)</P>
21
 
 
22
 
    <P>A vers&atilde;o mais recente desse documento pode ser vista em <A href=
23
 
    "http://www.postgresql.org/files/documentation/faqs/FAQ.html">
24
 
    http://www.postgresql.org/files/documentation/faqs/FAQ.html</A> (EN).<BR>
25
 
    <A href="http://www.postgresql.org/files/documentation/faqs/FAQ_brazilian.html">
26
 
    http://www.postgresql.org/files/documentation/faqs/FAQ_brazilian.html</A> (pt_BR).</P>
27
 
 
28
 
     <P>Perguntas sobre plataformas espec&iacute;ficas s&atilde;o respondidas em <A href=
29
 
    "http://www.postgresql.org/docs/faq/">http://www.postgresql.org/docs/faq/</A>.</P>
30
 
    <HR>
31
 
 
32
 
    <H2 align="center">Perguntas Gerais</H2>
33
 
     <A href="#item1.1">1.1</A>) O que &eacute; PostgreSQL? Como ele &eacute; pronunciado?
34
 
     O que &eacute; Postgres?<BR>
35
 
     <A href="#item1.2">1.2</A>) Quem controla o PostgreSQL?<BR>
36
 
     <A href="#item1.3">1.3</A>) Qual &eacute; a licen&ccedil;a do PostgreSQL?<BR>
37
 
     <A href="#item1.4">1.4</A>) Quais plataformas o PostgreSQL pode ser executado?<BR>
38
 
     <A href="#item1.5">1.5</A>) Onde eu posso conseguir o PostgreSQL?<BR>
39
 
     <A href="#item1.6">1.6</A>) Qual &eacute; a &uacute;ltima vers&atilde;o?<BR>
40
 
     <A href="#item1.7">1.7</A>) Onde eu posso conseguir suporte?<BR>
41
 
         <A href="#item1.8">1.8</A>) Como eu posso submeter um relato de um bug?<BR>
42
 
     <A href="#item1.9">1.9</A>) Como eu posso saber quais s&atilde;o os bugs conhecidos ou caracter&iacute;sticas ausentes?<BR>
43
 
     <A href="#item1.10">1.10</A>) Que documenta&ccedil;&atilde;o est&aacute; dispon&iacute;vel?<BR>
44
 
     <A href="#item1.11">1.11</A>) Como eu posso aprender <SMALL>SQL</SMALL>?<BR>
45
 
     <A href="#item1.12">1.12</A>) Como posso submeter uma corre&ccedil;&atilde;o (patch) ou me juntar a equipe de desenvolvimento?<BR>
46
 
     <A href="#item1.13">1.13</A>) Como &eacute; o PostgreSQL comparado a outros <SMALL>SGBD</SMALL>s?<BR>
47
 
                 <A href="#item1.14">1.14</A>) O PostgreSQL gerenciar� as mudan&ccedil;as de hor&aacute;rio devido ao hor&aacute;rio de ver&atilde;o em v&aacute;rios pa&iacute;ses?<BR>
48
 
     
49
 
 
50
 
     <H2 align="center">Perguntas sobre Clientes</H2>
51
 
         <A href="#item2.1">2.1</A>) Quais interfaces est&atilde;o dispon&iacute;veis para PostgreSQL?<BR>
52
 
     <A href="#item2.2">2.2</A>) Quais ferramentas est&atilde;o dispon&iacute;veis para utilizar o PostgreSQL com p&aacute;ginas Web?<BR>
53
 
     <A href="#item2.3">2.3</A>) O PostgreSQL tem interfaces gr&aacute;ficas para interagir com usu&aacute;rio?<BR>
54
 
     
55
 
 
56
 
    <H2 align="center">Perguntas Administrativas</H2>
57
 
    <A href="#item3.1">3.1</A>) Como eu instalo o PostgreSQL em um local diferente de <I>/usr/local/pgsql</I>?<BR>
58
 
        <A href="#item3.2">3.2</A>) Como eu controlo conex&otilde;es de outras m&aacute;quinas?<BR>
59
 
    <A href="#item3.3">3.3</A>) Como eu ajusto o servidor de banco de dados para obter uma performance melhor?<BR>
60
 
    <A href="#item3.4">3.4</A>) Quais caracter&iacute;sticas de depura&ccedil;&atilde;o est&atilde;o dispon&iacute;veis?<BR>
61
 
    <A href="#item3.5">3.5</A>) Por que eu recebo <I>"Sorry, too many clients"</I> quando eu tento conectar?<BR>
62
 
    <A href="#item3.6">3.6</A>) Qual &eacute; o processo de atualiza&ccedil;&atilde;o do PostgreSQL?<BR>
63
 
    <A href="#item3.7">3.7</A>) Que tipo de hardware eu devo usar?<BR>
64
 
 
65
 
 
66
 
     <H2 align="center">Perguntas Operacionais</H2>
67
 
     <A href="#item4.1">4.1</A>) Como eu fa&ccedil;o um <SMALL>SELECT</SMALL> somente dos primeiros registros de uma consulta? Um registro rand&ocirc;mico?<BR>
68
 
         <A href="#item4.2">4.2</A>) Como eu descubro quais tabelas, &iacute;ndices, bancos de dados e usu&aacute;rios est&atilde;o definidos? Como eu vejo as consultas utilizadas pelo <I>psql</I> para mostr&aacute;-los?<BR>
69
 
     <A href="#item4.3">4.3</A>) Como voc&ecirc; muda o tipo de dado de uma coluna?<BR>
70
 
     <A href="#item4.4">4.4</A>) Qual &eacute; o tamanho m&aacute;ximo de um registro, uma tabela e um banco de dados?<BR>
71
 
     <A href="#item4.5">4.5</A>) Quanto espa&ccedil;o em disco &eacute; necess&aacute;rio para armazenar dados de um arquivo texto?<BR>
72
 
     <A href="#item4.6">4.6</A>) Por que minhas consultas est&atilde;o lentas? Por que elas n&atilde;o est&atilde;o utilizando meus &iacute;ndices?<BR>
73
 
     <A href="#item4.7">4.7</A>) Como eu vejo como o otimizador de consultas est&aacute; avaliando minha consulta?<BR>
74
 
         <A href="#item4.8">4.8</A>) Como eu fa&ccedil;o buscas com express&otilde;es regulares e buscas com express&otilde;es regulares sem diferenciar mau&uacute;sculas de min&uacute;sculas? Como eu utilizo um &iacute;ndice para buscas sem distinguir mai&uacute;sculas de min&uacute;sculas?<BR>
75
 
         <A href="#item4.9">4.9</A>) Em uma consulta, como eu detecto se um campo &eacute; <SMALL>NULL</SMALL>? Como eu posso concatenar poss&iacute;veis <SMALL>NULL</SMALL>s? Como eu posso ordenar por um campo que &eacute; <SMALL>NULL</SMALL> ou n&atilde;o?<BR>
76
 
    <A href="#item4.10">4.10</A>) Qual &eacute; a diferen&ccedil;a entre os v&aacute;rios tipos de dado de caracteres?<BR>
77
 
        <A href="#item4.11.1">4.11.1</A>) Como eu crio um campo serial/auto incremento?<BR>
78
 
    <A href="#item4.11.2">4.11.2</A>) Como eu consigo o valor de um campo
79
 
    <SMALL>SERIAL</SMALL>?<BR>
80
 
    <A href="#item4.11.3">4.11.3</A>) <I>currval()</I> n&atilde;o lida com condi&ccedil;&atilde;o de corrida com outros usu&aacute;rios?<BR>
81
 
    <A href="#item4.11.4">4.11.4</A>) Por que os n&uacute;meros da minha sequ&ecirc;ncia n&atilde;o s&atilde;o reutilizados quando uma transa&ccedil;&atilde;o &eacute; abortada? Por que h&aacute; intervalos nos n&uacute;meros da minha sequ&ecirc;ncia/coluna SERIAL?<BR>
82
 
    <A href="#item4.12">4.12</A>) O que &eacute; um <SMALL>OID</SMALL>? O que &eacute; um <SMALL>CTID</SMALL>?<BR>
83
 
    <A href="#item4.13">4.13</A>) Por que eu recebo o erro <I>"ERROR: Memory exhausted in AllocSetAlloc()"</I>?<BR>
84
 
    <A href="#item4.14">4.14</A>) Como eu informo qual vers&atilde;o do PostgreSQL eu estou utilizando?<BR>
85
 
    <A href="#item4.15">4.15</A>) Como eu crio uma coluna que conter&aacute; por padr&atilde;o a hora atual?<BR>
86
 
    <A href="#item4.16">4.16</A>) Como eu fa&ccedil;o uma jun&ccedil;&atilde;o externa (outer join)?<BR>
87
 
    <A href="#item4.17">4.17</A>) Como eu fa&ccedil;o consultas utilizando m&uacute;ltiplos bancos de dados?<BR>
88
 
    <A href="#item4.18">4.18</A>) Como eu retorno m&uacute;ltiplos registros ou colunas de uma fun&ccedil;&atilde;o?<BR>
89
 
        <A href="#item4.19">4.19</A>) Por que eu obtenho erros "relation with OID ######
90
 
        does not exist" ao acessar tabelas tempor&aacute;rias em fun&ccedil;&otilde;es PL/PgSQL?<BR>
91
 
    <A href="#item4.20">4.20</A>) Quais solu&ccedil;&otilde;es de replica&ccedil;&atilde;o est&atilde;o dispon&iacute;veis?<BR>
92
 
        <A href="#item4.21">4.21</A>) Por que os nomes de minhas tabelas e colunas n&atilde;o
93
 
        s&atilde;o reconhecidos em minha consulta? Por que as mai&uacute;sculas n&atilde;o s&atilde;o preservadas?<BR>
94
 
     
95
 
 
96
 
    <HR>
97
 
 
98
 
    <H2 align="center">Perguntas Gerais</H2>
99
 
 
100
 
    <H3 id="item1.1">1.1) O que &eacute; PostgreSQL? Como ele &eacute; pronunciado? O que &eacute; Postgres?</H3>
101
 
 
102
 
                <P>PostgreSQL &eacute; pronunciado <I>Post-Gres-Q-L</I>.
103
 
        (Para os curiosos que querem saber como se diz "PostgreSQL", um
104
 
        <a href="http://www.postgresql.org/files/postgresql.mp3">arquivo de &aacute;udio</a> est&aacute; dispon&iacute;vel).</P>
105
 
 
106
 
        <P>O PostgreSQL &eacute; um sistema de banco de dados objeto-relacional que tem as
107
 
        caracter&iacute;sticas de sistemas de bancos de dados comerciais tradicionais com
108
 
        melhoramentos encontrados nos sistemas <SMALL>SGBD</SMALL>s de pr&oacute;xima gera&ccedil;&atilde;o.
109
 
        PostgreSQL &eacute; livre e o c&oacute;digo-fonte completo est&aacute; dispon&iacute;vel.</P>
110
 
 
111
 
        <P>O desenvolvimento do PostgreSQL &eacute; feito por um grupo de desenvolvedores
112
 
        volunt&aacute;rios (na sua maioria) espalhados pelo mundo e que se comunicam via
113
 
        Internet. &Eacute; um projeto da comunidade e n&atilde;o &eacute; controlado por nenhuma
114
 
        empresa. Para se envolver, veja a FAQ do desenvolvedor em <A href=
115
 
        "http://www.postgresql.org/docs/faqs.FAQ_DEV.html">
116
 
        http://www.postgresql.org/docs/faqs.FAQ_DEV.html</A>
117
 
        </P>
118
 
 
119
 
        <P>Postgres &eacute; um apelido para o PostgreSQL amplamente utilizado. Era o nome original do
120
 
        projeto em Berkeley e dentre os outros apelidos &eacute; o preferido. Se voc&ecirc; acha
121
 
        'PostgreSQL' dif&iacute;cil de pronunciar, diga apenas 'Postgres'.</P>
122
 
 
123
 
        <H3 id="item1.2">1.2) Quem controla o PostgreSQL?<BR></H3>
124
 
 
125
 
        <P>Se voc&ecirc; est&aacute; procurando por um mantenedor, comit&ecirc; central ou empresa
126
 
        controladora do PostgreSQL, desista --- n&atilde;o h&aacute; um(a). N&oacute;s temos um
127
 
        comit&ecirc; core e committers CVS, mas estes grupos s&atilde;o mais para quest&otilde;es
128
 
        administrativas do que controle. O projeto &eacute; direcionado pela comunidade
129
 
        de desenvolvedores e usu&aacute;rios, que qualquer um pode se juntar. Tudo o que
130
 
        voc&ecirc; precisa &eacute; se inscrever nas listas de discuss&atilde;o e participar das
131
 
        discuss&otilde;es. Veja a <a href="http://www.postgresql.org/docs/faqs.FAQ_DEV.html">
132
 
        FAQ do desenvolvedor</A> para obter informa&ccedil;&otilde;es como se envolver com o
133
 
        desenvolvimento do PostgreSQL.</P>
134
 
 
135
 
    <H3 id="item1.3">1.3) Qual &eacute; a licen&ccedil;a do PostgreSQL?</H3>
136
 
 
137
 
        <P>O PostgreSQL &eacute; distribu&iacute;do sob a licen&ccedil;a BSD cl&aacute;ssica. Basicamente,
138
 
        ela permite que usu&aacute;rios fa&ccedil;am qualquer coisa com o c&oacute;digo, incluindo
139
 
        revender os bin&aacute;rios sem o c&oacute;digo-fonte. A &uacute;nica restri&ccedil;&atilde;o &eacute; que voc&ecirc;
140
 
        n&atilde;o nos responsabilize legalmente por problemas com o programa de computador.
141
 
        H&aacute; tamb&eacute;m a exig&ecirc;ncia de que esta licen&ccedil;a apare&ccedil;a em todas as c&oacute;pias
142
 
        do programa de computador. Aqui est&aacute; a licen&ccedil;a BSD que usamos atualmente:</P>
143
 
    <P>PostgreSQL est&aacute; sujeito a seguinte licen&ccedil;a:</P>
144
 
 
145
 
    <P>PostgreSQL Data Base Management System</P>
146
 
 
147
 
    <P>Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group
148
 
    Portions Copyright (c) 1994-1996 Regents of the University of California</P>
149
 
 
150
 
    <P>Permission to use, copy, modify, and distribute this software
151
 
    and its documentation for any purpose, without fee, and without a
152
 
    written agreement is hereby granted, provided that the above
153
 
    copyright notice and this paragraph and the following two
154
 
    paragraphs appear in all copies.</P>
155
 
 
156
 
    <P>IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY
157
 
    PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL
158
 
    DAMAGES, INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS
159
 
    SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
160
 
    CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</P>
161
 
 
162
 
    <P>THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY
163
 
    WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
164
 
    OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE
165
 
    SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE
166
 
    UNIVERSITY OF CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE,
167
 
    SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.</P>
168
 
 
169
 
    <H3 id="item1.4">1.4) Quais plataformas o PostgreSQL pode ser executado?</H3>
170
 
 
171
 
    <P>Em geral, qualquer plataforma moderna compat&iacute;vel com Unix deve ser capaz de executar o PostgreSQL. As plataformas que foram testadas antes do lan&ccedil;amento de uma vers&atilde;o s&atilde;o listadas nas instru&ccedil;&otilde;es de instala&ccedil;&atilde;o.</P>
172
 
 
173
 
        <P>O PostgreSQL tamb&eacute;m executa nativamente nos sistemas operacionais Microsoft Windows
174
 
        baseados no NT tais como Win200 SP4, WinXP e Win2003. Um instalador pr&eacute;-empacotado est&aacute;
175
 
        dispon&iacute;vel em <a href= "http://pgfoundry.org/projects/pginstaller">
176
 
        http://pgfoundry.org/projects/pginstaller</a>. Vers&otilde;es do Windows baseadas no MS-DOS
177
 
        (Win95, Win98, WinMe) podem executar o PostgreSQL utilizando o Cygwin.</P>
178
 
 
179
 
        <p>H&aacute; tamb&eacute;m uma vers&atilde;o para o Novell Netware 6 em
180
 
        <a href="http://forge.novell.com">http://forge.novell.com</a>
181
 
        e uma vers&atilde;o para OS/2 (eComStation) em <a href=
182
 
        "http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&amp;button=Search&amp;key=postgreSQL&amp;stype=all&amp;sort=type&amp;dir=%2F">
183
 
        http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&amp;button=Search&amp;key=postgreSQL&amp;stype=all&amp;sort=type&amp;dir=%2F</a>.</p>
184
 
 
185
 
    <H3 id="item1.5">1.5) Onde eu posso conseguir o PostgreSQL?</H3>
186
 
 
187
 
        <P>Via navegador web, utilize <a href="http://www.postgresql.org/ftp/">
188
 
        http://www.postgresql.org/ftp/</a> e via ftp, utilize
189
 
        <A href="ftp://ftp.postgresql.org/pub/">
190
 
        ftp://ftp.postgresql.org/pub/</A>.</P>
191
 
 
192
 
 
193
 
    <H3 id="item1.6">1.6) Qual &eacute; a &uacute;ltima vers&atilde;o?</H3>
194
 
 
195
 
    <P>A &uacute;ltima vers&atilde;o do PostgreSQL &eacute; a vers&atilde;o 8.2.5.</P>
196
 
 
197
 
        <P>N&oacute;s planejamos lan&ccedil;ar vers&otilde;es novas a cada ano com vers&otilde;es
198
 
        corretivas em alguns meses.</P>
199
 
 
200
 
    <H3 id="item1.7">1.7) Onde eu posso conseguir suporte?</H3>
201
 
 
202
 
        <P>A comunidade do PostgreSQL fornece assist&ecirc;ncia a muitos de seus
203
 
        usu&aacute;rios via e-mail. O principal s&iacute;tio web para inscri&ccedil;&atilde;o nas listas
204
 
        de e-mail &eacute; <a href="http://www.postgresql.org/community/lists/">
205
 
        http://www.postgresql.org/community/lists/</a>. As listas <I>general</I>
206
 
        e <I>bugs</I> s&atilde;o um bom lugar para in&iacute;cio.</P>
207
 
 
208
 
    <P>O principal canal de IRC &eacute; o <I>#postgresql</I> na Freenode (<I>irc.freenode.net</I>). Para se conectar voc&ecirc; pode utilizar o comando Unix <code>irc -c '#postgresql' "$USER" irc.freenode.net</code> ou utilizar qualquer outro cliente de IRC. Um canal hisp&acirc;nico (<I>#postgresql-es</I>) e um franc&ecirc;s (<I>#postgresqlfr</I>) tamb&eacute;m existem na mesma rede. H&aacute; tamb&eacute;m um canal PostgreSQL na EFNet.</P>
209
 
 
210
 
    <P>Uma lista de empresas que prestam suporte comercial est&aacute; dispon&iacute;vel em <A href=
211
 
        "http://www.postgresql.org/support/professional_support">
212
 
        http://www.postgresql.org/support/professional_support</A>.</P>
213
 
 
214
 
    <H3 id="item1.8">1.8) Como eu informo a exist&ecirc;ncia de um bug?</H3>
215
 
 
216
 
    <P>Visite o formul&aacute;rio que reporta bugs do PostgreSQL em <A href=
217
 
    "http://www.postgresql.org/support/submitbug">http://www.postgresql.org/support/submitbug</A>.</P>
218
 
    <P>Verifique tamb&eacute;m o nosso ftp <A href=
219
 
    "ftp://ftp.postgresql.org/pub">ftp://ftp.postgresql.org/pub</A> para
220
 
    ver se h&aacute; uma vers&atilde;o mais recente do PostgreSQL.</P>
221
 
 
222
 
        <P>Bugs submetidos utilizando o formul&aacute;rio ou informado a qualquer
223
 
        lista de discuss&atilde;o do PostgreSQL tipicamente gera uma das seguintes
224
 
        respostas:</P>
225
 
        <ul>
226
 
        <li>N&atilde;o &eacute; um bug e o porqu&ecirc;</li>
227
 
        <li>&Eacute; um bug conhecido e j&aacute; est&aacute; na lista de
228
 
        <A href="http://www.postgresql.org/docs/faqs.TODO.html">AFAZERES</A></li>
229
 
        <li>O bug foi corrigido na vers&atilde;o atual</li>
230
 
        <li>O bug foi corrigido mas n&atilde;o foi empacotado em um vers&atilde;o oficial</li>
231
 
        <li>Um pedido foi feito para obter informa&ccedil;&otilde;es detalhadas:
232
 
                <ul>
233
 
        <li>Sistema Operacional</li>
234
 
        <li>Vers&atilde;o do PostgreSQL</li>
235
 
        <li>Exemplo de teste que reproduz o bug</li>
236
 
        <li>Informa&ccedil;&otilde;es sobre depura&ccedil;&atilde;o</li>
237
 
        <li>Sa&iacute;da reconstituidora de vest&iacute;gios (backtrace) do depurador</li>
238
 
        </ul>
239
 
        </li>
240
 
        <li>O bug &eacute; novo. O seguinte pode ocorrer:
241
 
                <ul>
242
 
        <li>Uma corre&ccedil;&atilde;o &eacute; criada e ser&aacute; inclu&iacute;da na pr&oacute;xima vers&atilde;o</li>
243
 
        <li>O bug n&atilde;o pode ser corrigido imediatamente e &eacute; adicionado
244
 
        a lista de <A href="http://www.postgresql.org/docs/faqs.TODO.html">AFAZERES</A></li>
245
 
        </ul>
246
 
        </li>
247
 
        </ul>
248
 
 
249
 
        <H3 id="item1.9">1.9) Como eu posso saber quais s&atilde;o os bugs conhecidos
250
 
        ou funcionalidades ausentes?</H3>
251
 
 
252
 
        <P>O PostgreSQL suporta um subconjunto extendido do <SMALL>SQL:2003</SMALL>.
253
 
        Veja nossa lista de <A href="http://www.postgresql.org/docs/faqs.TODO.html">AFAZERES</A>
254
 
        que cont&eacute;m bugs conhecidos, funcionalidades ausentes e planos futuros.</P>
255
 
 
256
 
        <P>Uma solicita&ccedil;&atilde;o de funcionalidade geralmente resulta em uma das
257
 
        seguintes respostas:</P>
258
 
        <ul>
259
 
        <li>A funcionalidade j&aacute; est&aacute; na lista de <A href="http://www.postgresql.org/docs/faqs.TODO.html">AFAZERES</A></li>
260
 
        <li>A funcionalidade n&atilde;o &eacute; desej&aacute;vel porque:
261
 
                <ul>
262
 
                <li>Ela duplica uma funcionalidade existente que j&aacute; segue o
263
 
                padr&atilde;o SQL</li>
264
 
                <li>A funcionalidade aumentar&aacute; a complexidade do c&oacute;digo mas
265
 
                adicionar&aacute; pouco benef&iacute;cio</li>
266
 
                <li>A funcionalidade ser&aacute; insegura ou n&atilde;o-confi&aacute;vel</li>
267
 
                </ul>
268
 
        </li>
269
 
        <li>A nova funcionalidade &eacute; adicionada a lista de
270
 
        <A href="http://www.postgresql.org/docs/faqs.TODO.html">AFAZERES</A></li>
271
 
        </ul>
272
 
 
273
 
        <P>O PostgreSQL n&atilde;o utiliza sistema de acompanhamento de bugs porque
274
 
        n&oacute;s achamos mais eficiente responder diretamente o e-mail e manter a
275
 
        lista de <A href="http://www.postgresql.org/docs/faqs.TODO.html">AFAZERES</A>
276
 
        atualizada. Na pr&aacute;tica, bugs n&atilde;o duram muito no programa; e bugs que afetam
277
 
        uma grande quantidade de usu&aacute;rios s&atilde;o corrigidos rapidamente. O &uacute;nico lugar
278
 
        para encontrar todas as mudan&ccedil;as, melhorias e corre&ccedil;&otilde;es em uma vers&atilde;o do
279
 
        PostgreSQL &eacute; ler as mensagens de log do
280
 
        <a href="http://www.postgresql.org/developer/sourcecode/">CVS</a>. At&eacute; mesmo
281
 
        as notas de lan&ccedil;amento n&atilde;o listam todas as mudan&ccedil;as feitas no programa.</P>
282
 
 
283
 
    <H3 id="item1.10">1.10) Que documenta&ccedil;&atilde;o est&aacute; dispon&iacute;vel?</H3>
284
 
 
285
 
        <P>O PostgreSQL inclui vasta documenta&ccedil;&atilde;o, incluindo um manual extenso,
286
 
        p&aacute;ginas de manuais (man pages) e alguns exemplos teste. Veja o diret&oacute;rio
287
 
        <I>/doc</I>. Voc&ecirc; tamb&eacute;m pode pesquisar os manuais online em <A href=
288
 
        "http://www.postgresql.org/docs">http://www.postgresql.org/docs</A>.
289
 
        </P>
290
 
 
291
 
        <P>H&aacute; dois livros sobre PostgreSQL dispon&iacute;veis online em <A href=
292
 
        "http://www.postgresql.org/docs/books/awbook.html">http://www.postgresql.org/docs/books/awbook.html</A>
293
 
        e <A href=
294
 
        "http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook/</A>.
295
 
        H&aacute; uma lista de livros sobre PostgreSQL dispon&iacute;veis para compra. Um dos mais
296
 
        populares &eacute; o do Korry Douglas. Uma lista de an&aacute;lise sobre os livros pode ser
297
 
        encontrada em <A href=
298
 
        "http://www.postgresql.org/docs/books/">http://www.postgresql.org/docs/books/</A>.
299
 
        H&aacute; tamb&eacute;m uma cole&ccedil;&atilde;o de artigos t&eacute;cnicos sbore PostgreSQL em <A href="http://www.postgresql.org/docs/techdocs/">http://www.postgresql.org/docs/techdocs/</A>.</P>
300
 
 
301
 
        <P>O programa cliente de linha de comando <I>psql</I> tem alguns comandos \d para
302
 
        mostrar informa&ccedil;&otilde;es sobre tipos, operadores, fun&ccedil;&otilde;es, agrega&ccedil;&otilde;es, etc. - utilize \?
303
 
        para mostrar os comandos dispon&iacute;veis.</P>
304
 
 
305
 
        <P>Nosso s&iacute;tio web cont&eacute;m ainda mais documenta&ccedil;&atilde;o.</P>
306
 
 
307
 
    <H3 id="item1.11">1.11) Como eu posso aprender <SMALL>SQL</SMALL>?</H3>
308
 
 
309
 
        <P>Primeiro, considere os livros espec&iacute;ficos sobre PostgreSQL mencionados
310
 
        acima. Muitos de nossos usu&aacute;rios gostam do <I>The Practical SQL Handbook</I>,
311
 
        Bowman, Judith S., et al., Addison-Wesley. Outros do <I>The
312
 
        Complete Reference SQL</I>, Groff et al., McGraw-Hill.</P>
313
 
 
314
 
        <P>H&aacute; tamb&eacute;m bons tutoriais dispon&iacute;veis online:
315
 
        <UL>
316
 
        <LI> <A href="http://www.intermedia.net/support/sql/sqltut.shtm">http://www.intermedia.net/support/sql/sqltut.shtm</A>
317
 
    </LI>
318
 
    <LI>
319
 
    <A href="http://sqlcourse.com/">http://sqlcourse.com</A>
320
 
    </LI>
321
 
    <LI>
322
 
    <A href="http://www.w3schools.com/sql/default.asp">http://www.w3schools.com/sql/default.asp</A>
323
 
    </LI>
324
 
    <LI><A href=
325
 
    "http://mysite.verizon.net/Graeme_Birchall/id1.html">http://mysite.verizon.net/Graeme_Birchall/id1.html</A>
326
 
    </LI>
327
 
    </UL>
328
 
 
329
 
    <H3 id="item1.12">1.12) Como posso submeter uma corre&ccedil;&atilde;o (patch) ou me juntar a equipe de desenvolvimento?</H3>
330
 
 
331
 
        <P>Veja a <a href="http://www.postgresql.org/docs/faqs.FAQ_DEV.html">
332
 
        FAQ do Desenvolvedor</A>.</P>
333
 
 
334
 
    <H3 id="item1.13">1.13) Como &eacute; o PostgreSQL comparado a outros <SMALL>SGBD</SMALL>s?</H3>
335
 
 
336
 
        <P>H&aacute; v&aacute;rias maneiras de se medir um software: funcionalidades, performance, confiabilidade, suporte e pre&ccedil;o.</P>
337
 
 
338
 
    <DL>
339
 
      <DT><B>Funcionalidades</B></DT>
340
 
 
341
 
          <DD>PostgreSQL tem muitas caracter&iacute;sticas presentes em muitos <SMALL>SGBD</SMALL>s comerciais como transa&ccedil;&otilde;es, subconsultas, gatilhos, vis&otilde;es, integridade referencial de chave estrangeira e bloqueio (lock) sofisticado. N&oacute;s temos algumas funcionalidades que eles n&atilde;o tem, como tipos definidos pelo usu&aacute;rio, heran&ccedil;a, regras e controle de concorr&ecirc;ncia de m&uacute;ltiplas vers&otilde;es para reduzir bloqueios (locks).<BR>
342
 
      <BR>
343
 
      </DD>
344
 
 
345
 
      <DT><B>Performance</B></DT>
346
 
 
347
 
          <DD>A performance do PostgreSQL &eacute; compar&aacute;vel a outros bancos de dados comerciais e de c&oacute;digo livre. Ele &eacute; mais r&aacute;pido em algumas coisas, mais lento em outras. Nossa performance &eacute; geralmente +/- 10% comparada a de outros bancos de dados.
348
 
      <BR>
349
 
      </DD>
350
 
 
351
 
      <DT><B>Confiabilidade</B></DT>
352
 
 
353
 
      <DD>N&oacute;s sabemos que um <SMALL>SGBD</SMALL> deve ser confi&aacute;vel ou ele &eacute; in&uacute;til. N&oacute;s empenhamos em lan&ccedil;ar vers&otilde;es bem testadas, de c&oacute;digo est&aacute;vel e que tenha o m&iacute;nimo de bugs. Cada vers&atilde;o tem no m&iacute;nimo um m&ecirc;s de teste em vers&atilde;o beta, e nosso hist&oacute;rico de vers&otilde;es mostra que n&oacute;s podemos fornecer vers&otilde;es est&aacute;veis e s&oacute;lidas que est&atilde;o prontas para uso em produ&ccedil;&atilde;o. N&oacute;s acreditamos que somos comparados a nosso favor com outros sistemas de bancos de dados nessa &aacute;rea.<BR>
354
 
      <BR>
355
 
      </DD>
356
 
 
357
 
      <DT><B>Suporte</B></DT>
358
 
 
359
 
      <DD>Nossas listas de discuss&atilde;o fornecem contato com um grupo de desenvolvedores e usu&aacute;rios para ajudar a resolver muitos problemas encontrados. Enquanto n&oacute;s n&atilde;o podemos garantir o conserto, <SMALL>SGBD</SMALL>s comerciais nem sempre fornecem tamb&eacute;m. Com acesso direto aos desenvolvedores, a comunidade de usu&aacute;rios, manuais e o c&oacute;digo fonte faz com que o suporte do PostgreSQL seja superior ao de outros <SMALL>SGBD</SMALL>s. H&aacute; suporte comercial por incidente dispon&iacute;veis para aqueles que precisam de um. (Veja <A href="#item1.7">se&ccedil;&atilde;o 1.7 da FAQ</A>).<BR>
360
 
      <BR>
361
 
      </DD>
362
 
 
363
 
      <DT><B>Pre&ccedil;o</B></DT>
364
 
 
365
 
      <DD>N&oacute;s somos livres para uso dele tanto comercial quanto n&atilde;o comercial. Voc&ecirc; pode adicionar nosso c&oacute;digo ao seu produto sem limita&ccedil;&otilde;es, exceto aquelas descritas na nossa licen&ccedil;a BSD mencionada acima.<BR>
366
 
      <BR>
367
 
      </DD>
368
 
    </DL>
369
 
 
370
 
                <H3 id="item1.14">1.14) O PostgreSQL gerenciar&aacute; mudan&ccedil;as no hor&aacute;rio devido ao hor&aacute;rio de ver&atilde;o em v&aacute;rios pa&iacute;ses?</H3>
371
 
 
372
 
                <P>Mudan&ccedil;as no hor&aacute;rio de ver&atilde;o dos USA foram inclu&iacute;das nas vers&otilde;es 8.0 .[4+] do PostgreSQL e em todas as vers&otilde;es grandes, i.e. 8.1. Mudan&ccedil;as no Canad&aacute; e Austr&aacute;lia Oeste foram inclu&iacute;das na 8.0.[10+], 8.1.[6+] e em todas as vers&otilde;es grandes subsequentes. Vers&otilde;es do PostgreSQL anteriores a 8.0 utilizam o banco de dados de zona hor&aacute;ria do sistema operacional para informa&ccedil;&otilde;es sobre hor&aacute;rio de ver&atilde;o.</P>
373
 
 
374
 
    <HR>
375
 
 
376
 
    <H2 align="center">Perguntas sobre Clientes</H2>
377
 
 
378
 
        <H3 id="item2.1">2.1) Quais interfaces est&atilde;o dispon&iacute;veis para PostgreSQL?</H3>
379
 
 
380
 
        <p>A instala&ccedil;&atilde;o do PostgreSQL inclui somente as interfaces <SMALL>C</SMALL> e
381
 
        <SMALL>C</SMALL> embutida. Todas as outras interfaces s&atilde;o projetos independentes
382
 
        que podem ser obtidos separadamente; sendo separados permitem que eles tenham
383
 
        suas pr&oacute;prias datas de lan&ccedil;amento e time de desenvolvedores.</P>
384
 
 
385
 
        <P>Algumas linguagens de programa&ccedil;&atilde;o como <SMALL>PHP</SMALL> incluem uma
386
 
        interface para PostgreSQL. Interfaces para linguagens como Perl,
387
 
        <SMALL>TCL</SMALL>, Python e muitas outras est&atilde;o dispon&iacute;veis em
388
 
        <a href="http://www.pgfoundry.org">http://www.pgfoundry.org</A>.
389
 
        </P>
390
 
 
391
 
    <H3 id="item2.2">2.2) Quais ferramentas est&atilde;o dispon&iacute;veis para utilizar o PostgreSQL com p&aacute;ginas Web?</H3>
392
 
 
393
 
    <P>Uma boa introdu&ccedil;&atilde;o para p&aacute;ginas web que utilizam bancos de dados pode ser vista em:
394
 
    <A href="http://www.webreview.com">http://www.webreview.com</A></P>
395
 
 
396
 
        <P>Para integra&ccedil;&atilde;o na Web, PHP (<A
397
 
        href="http://www.php.net">http://www.php.net</A>)
398
 
        &eacute; uma excelente interface.</P>
399
 
 
400
 
        <P>Para casos complexos, muitos usam a Interface Perl e DBD::Pg com CGI.pm
401
 
        ou mod_perl.</P>
402
 
 
403
 
    <H3 id="item2.3">2.3) O PostgreSQL tem interfaces gr&aacute;ficas para iteragir com o usu&aacute;rio?</H3>
404
 
 
405
 
        <P>H&aacute; um vasto n&uacute;mero de Ferramentas Gr&aacute;ficas (GUI), que est&atilde;o dispon&iacute;veis
406
 
        para o PostgreSQL, comerciais e de desenvolvedores de c&oacute;digo aberto. Uma
407
 
        lista detalhada pode ser encontrada em <A href="http://www.postgresql.org/docs/techdocs.54">
408
 
        Documenta&ccedil;&atilde;o da Comunidade PostgreSQL</A></P>
409
 
 
410
 
    <HR>
411
 
 
412
 
    <H2 align="center">Perguntas Administrativas</H2>
413
 
 
414
 
    <H3 id="item3.1">3.1) Como eu instalo o PostgreSQL em um local diferente de <I>/usr/local/pgsql</I>?</H3>
415
 
 
416
 
    <P>Especifique a op&ccedil;&atilde;o <I>--prefix</I> quando executar o <I>configure</I>.</P>
417
 
 
418
 
    <H3 id="item3.2">3.2) Como eu controlo conex&otilde;es de outras m&aacute;quinas?</H3>
419
 
 
420
 
        <P>Por padr&atilde;o, o PostgreSQL s&oacute; permite conex&otilde;es da m&aacute;quina local utilizando soquetes de dom&iacute;nio Unix ou conex&otilde;es TCP/IP. Outras m&aacute;quinas n&atilde;o poder&atilde;o conectar-se a menos que voc&ecirc; modifique <I>listen_addresses</I> no <I>postgresql.conf</I>, habilite a autentica&ccedil;&atilde;o por m&aacute;quina modificando o arquivo <I>$PGDATA/pg_hba.conf</I> e reinicie o servidor PostgreSQL.</P>
421
 
 
422
 
    <H3 id="item3.3">3.3) Como eu ajusto o servidor de banco de dados para obter uma performance melhor?</H3>
423
 
 
424
 
        <P>H&aacute; tr&ecirc;s grandes &aacute;reas para melhorar a performance em potencial:</P>
425
 
 
426
 
        <DL>
427
 
        <DT><B>Mudan&ccedil;a de Consultas</B></DT>
428
 
 
429
 
        <DD>Isto involve modificar consultas para obter melhor performance:
430
 
        <ul>
431
 
        <li>Cria&ccedil;&atilde;o de &iacute;ndices, incluir express&otilde;es e &iacute;ndices parciais</li>
432
 
        <li>Utiliza&ccedil;&atilde;o o COPY ao inv&eacute;s de m&uacute;ltiplos comandos <SMALL>INSERT</SMALL>s</li>
433
 
        <li>Agrupamento de m&uacute;ltiplos comandos em uma &uacute;nica transa&ccedil;&atilde;o para diminuir
434
 
        a despesa com efetiva&ccedil;&otilde;es (commit)</li>
435
 
        <li>Utiliza&ccedil;&atilde;o do <SMALL>CLUSTER</SMALL> quando recuperar v&aacute;rios registros de
436
 
        um &iacute;ndice</li>
437
 
        <li>Utiliza&ccedil;&atilde;o do <SMALL>LIMIT</SMALL> para retornar um subconjunto da sa&iacute;da
438
 
        da consulta</li>
439
 
        <li>Utiliza&ccedil;&atilde;o de Consultas preparadas</li>
440
 
        <li>Utiliza&ccedil;&atilde;o de <SMALL>ANALYZE</SMALL> para manter as estat&iacute;sticas do
441
 
        otimizador corretas</li>
442
 
        <li>Utiliza&ccedil;&atilde;o regular do <SMALL>VACUUM</SMALL> ou <I>pg_autovacuum</I></li>
443
 
        <li>Remo&ccedil;&atilde;o de &iacute;ndices durante grande mudan&ccedil;a de dados</li>
444
 
        </ul><BR>
445
 
        <BR>
446
 
        </DD>
447
 
 
448
 
        <DT><B>Configura&ccedil;&atilde;o do Servidor</B></DT>
449
 
 
450
 
        <DD>Um grande n&uacute;mero de configura&ccedil;&otilde;es que afetam a performance.
451
 
        Para obter detalhes adicionais, veja <a href=
452
 
        "http://www.postgresql.org/docs/current/static/runtime-config.html">
453
 
    Administration Guide/Server Run-time Environment/Run-time
454
 
        Configuration</a> para listagem completa, e para
455
 
        coment&aacute;rios veja <a href=
456
 
        "http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html">
457
 
    http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html</a>
458
 
    e <a href="http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html">
459
 
    http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html</a>.
460
 
    <BR>
461
 
    <BR>
462
 
    </DD>
463
 
 
464
 
        <DT><B>Sele&ccedil;&atilde;o do Hardware</B></DT>
465
 
 
466
 
        <DD>O efeito do hardware na performance &eacute; detalhado em
467
 
    <a href="http://www.powerpostgresql.com/PerfList/">
468
 
    http://www.powerpostgresql.com/PerfList/</a> e <a
469
 
    href="http://momjian.us/main/writings/pgsql/hw_performance/index.html">
470
 
    http://momjian.us/main/writings/pgsql/hw_performance/index.html</a>.
471
 
    <BR>
472
 
    <BR>
473
 
    </DD>
474
 
    </DL>
475
 
 
476
 
    <H3 id="item3.4">3.4) Quais caracter&iacute;sticas de depura&ccedil;&atilde;o est&atilde;o dispon&iacute;veis?</H3>
477
 
 
478
 
        <P>H&aacute; muitas vari&aacute;veis de configura&ccedil;&atilde;o do servidor <CODE>log_*</CODE>
479
 
        que habilitam a exibi&ccedil;&atilde;o de consultas e estat&iacute;sticas que podem ser
480
 
        muito &uacute;teis para depura&ccedil;&atilde;o e medidas de performance.</P>
481
 
 
482
 
    <H3 id="item3.5">3.5) Por que eu recebo <I>"Sorry, too many clients"</I> quando eu tento conectar?</H3>
483
 
 
484
 
        <P>Voc&ecirc; atingiu o limite padr&atilde;o de 100 sess&otilde;es. Voc&ecirc;
485
 
        precisa aumentar o limite do servidor PostgreSQL, que diz
486
 
        quantos processos servidor concorrentes ele pode iniciar, alterando
487
 
        o valor <I>max_connections</I> no <I>postgresql.conf</I> e
488
 
        reiniciando o <I>postmaster</I>.</P>
489
 
 
490
 
        <H3 id="item3.6">3.6) Qual &eacute; o processo de atualiza&ccedil;&atilde;o do PostgreSQL?</H3>
491
 
 
492
 
        <P>Veja <a
493
 
        href="http://www.postgresql.org/support/versioning">http://www.postgresql.org/support/versioning</a>
494
 
        para discuss�o geral sobre atualiza��es e <a href=
495
 
        "http://www.postgresql.org/docs/current/static/install-upgrading.html">
496
 
        http://www.postgresql.org/docs/current/static/install-upgrading.html</a>
497
 
        para instru&ccedil;&otilde;es espec&iacute;ficas.</P>
498
 
 
499
 
    <H3 id="item3.7">3.7) Que tipo de hardware eu devo usar?</H3>
500
 
 
501
 
    <P>Por causa do hardware de PC ser em sua maioria compat&iacute;vel, pessoas tendem a acreditar que todos os hardwares de PC s&atilde;o de mesma qualidade. N&atilde;o &eacute; verdade. ECC RAM, SCSI e placas m&atilde;e de qualidade s&atilde;o mais confi&aacute;veis e t&ecirc;m uma melhor performance do que hardwares mais baratos. O PostgreSQL executar&aacute; em quase todo hardware, mas se a confiabilidade e a performance forem importantes &eacute; prudente pesquisar sobre as op&ccedil;&otilde;es de hardware. Nossas listas de discuss&atilde;o podem ser usadas para discutir op&ccedil;&otilde;es de hardware e dilemas.</P>
502
 
 
503
 
    <HR>
504
 
 
505
 
    <H2 align="center">Perguntas Operacionais</H2>
506
 
 
507
 
    <H3 id="item4.1">4.1) Como eu fa&ccedil;o um <SMALL>SELECT</SMALL> somente dos primeiros registros de uma consulta? Um registro rand&ocirc;mico?</H3>
508
 
 
509
 
        <P>Para obter somente alguns registros, se voc&ecirc; sabe o n&uacute;mero de
510
 
        registros necess&aacute;rios ao executar o <SMALL>SELECT</SMALL> utilize
511
 
        o <SMALL>LIMIT</SMALL>. Se um &iacute;ndice corresponde no <SMALL>ORDER
512
 
        BY</SMALL> &eacute; poss&iacute;vel que a consulta toda n&atilde;o tenha que ser
513
 
        executada. Se voc&ecirc; n&atilde;o sabe o n&uacute;mero de registros ao executar o
514
 
        <SMALL>SELECT</SMALL>, utilize um cursor e o <SMALL>FETCH</SMALL>.</P>
515
 
        
516
 
        <P>Para <SMALL>obter</SMALL> um registro rand&ocirc;mico, utilize:</P>
517
 
<PRE>
518
 
    SELECT col
519
 
    FROM tab
520
 
    ORDER BY random()
521
 
    LIMIT 1;
522
 
</PRE>
523
 
 
524
 
         <H3 id="item4.2">4.2) Como eu descubro quais tabelas, &iacute;ndices, bancos de dados e usu&aacute;rios est&atilde;o definidos? Como eu vejo as consultas utilizadas pelo <I>psql</I> para mostr&aacute;-los?</H3>
525
 
 
526
 
         <P>Utilize o comando \dt para ver tabelas no <I>psql</I>. Para obter
527
 
         uma lista completa dos comandos no psql voc&ecirc; pode utilizar \?.
528
 
         Alternativamente, voc&ecirc; pode ler o c&oacute;digo-fonte do <I>psql</I> no arquivo
529
 
         <I>pgsql/src/bin/psql/describe.c</I>, ele cont&eacute;m os comandos <SMALL>SQL</SMALL>
530
 
         que geram a sa&iacute;da para os comandos de contrabarra do <I>psql</I>. Voc&ecirc;
531
 
         tamb&eacute;m pode iniciar o <I>psql</I> com a op&ccedil;&atilde;o <I>-E</I> para que as consultas
532
 
         utilizadas para executar os comandos que voc&ecirc; informou seja exibida.
533
 
         O PostgreSQL tamb&eacute;m fornece uma inteface compat&iacute;vel com <SMALL>SQL</SMALL> do
534
 
         INFORMATION SCHEMA que voc&ecirc; pode consultar para obter informa&ccedil;&atilde;o sobre o
535
 
         banco de dados.</P>
536
 
 
537
 
         <P>H&aacute; tamb&eacute;m tabelas do sistema que come&ccedil;am com <I>pg_</I> que os descrevem
538
 
         tamb&eacute;m.</P>
539
 
 
540
 
         <P>Utilizando o <I>psql -l</I> listar&aacute; todos os bancos de dados.</P>
541
 
 
542
 
         <P>Veja tamb&eacute;m o arquivo <I>pgsql/src/tutorial/syscat.source</I>. Ele
543
 
         ilustra muitos dos comandos <SMALL>SELECT</SMALL>s necess&aacute;rios para obter
544
 
         informa&ccedil;&atilde;o das tabelas de sistema do banco de dados.</P>
545
 
 
546
 
         <H3 id="item4.3">4.3) Como voc&ecirc; muda o tipo de dado de uma coluna?</H3>
547
 
 
548
 
         <P>Mudar o tipo de dado de uma coluna pode ser feito facilmente na vers&atilde;o 8.0
549
 
         ou superior com <SMALL>ALTER TABLE ALTER COLUMN TYPE</SMALL>.</P>
550
 
 
551
 
         <P>Em vers&otilde;es anteriores, fa&ccedil;a isso:</P>
552
 
<PRE>
553
 
    BEGIN;
554
 
    ALTER TABLE tab ADD COLUMN col_nova <i>novo_tipo_dado</i>;
555
 
    UPDATE tab SET col_nova = CAST(col_antiga AS <i>novo_tipo_dado</i>);
556
 
    ALTER TABLE tab DROP COLUMN col_antiga;
557
 
    COMMIT;
558
 
</PRE>
559
 
         <P>Voc&ecirc; pode ent&atilde;o querer fazer um <I>VACUUM FULL tab</I> para recuperar
560
 
         o espa&ccedil;o em disco utilizado pelos registros expirados.</P>
561
 
 
562
 
    <H3 id="item4.4">4.4) Qual &eacute; o tamanho m&aacute;ximo de um registro, uma tabela e um banco de dados?</H3>
563
 
 
564
 
    <P>Estes s&atilde;o os limites:</P>
565
 
<BLOCKQUOTE>
566
 
<TABLE>
567
 
<TR><TD>Tamanho m&aacute;ximo de um banco de dados?</TD><TD>ilimitado (existem bancos de dados de 32 TB)</TD></TR>
568
 
<TR><TD>Tamanho m&aacute;ximo de uma tabela?</TD><TD>32 TB</TD></TR>
569
 
<TR><TD>Tamanho m&aacute;ximo de um registro?</TD><TD>400 GB</TD></TR>
570
 
<TR><TD>Tamanho m&aacute;ximo de um campo?</TD><TD>1 GB</TD></TR>
571
 
<TR><TD>N&uacute;mero m&aacute;ximo de registros em uma tabela?</TD><TD>ilimitado</TD></TR>
572
 
<TR><TD>N&uacute;mero m&aacute;ximo de colunas em uma tabela?</TD><TD>250-1600 dependendo dos tipos das colunas</TD></TR>
573
 
<TR><TD>N&uacute;mero m&aacute;ximo de &iacute;ndices em uma tabela?</TD><TD>ilimitado</TD></TR>
574
 
</TABLE>
575
 
</BLOCKQUOTE>
576
 
 
577
 
        <P>&Eacute; claro, que eles n&atilde;o s&atilde;o ilimitados, mas limitados
578
 
        ao espa&ccedil;o em disco dispon&iacute;vel e espa&ccedil;o em mem&oacute;ria/swap.
579
 
        A Performance ser&aacute; penalizada quando estes valores se tornarem grandes.</P>
580
 
 
581
 
        <P>O tamanho m&aacute;ximo de uma tabela com 32 TB n&atilde;o requer suporte a
582
 
        arquivos grandes do sistema operacional. Tabelas grandes s&atilde;o armazenadas
583
 
        como m&uacute;ltiplos arquivos de 1 GB ent&atilde;o o limite do sistema de
584
 
        arquivos n&atilde;o &eacute; importante.</P>
585
 
 
586
 
        <P>O tamanho m&aacute;ximo de uma tabela, o tamanho de um registro e o n&uacute;mero
587
 
        m&aacute;ximo de colunas podem ser quadruplicados aumentando-se o tamanho padr&atilde;o
588
 
        do bloco para 32k. O tamanho m&aacute;ximo de uma tabela pode tamb&eacute;m ser aumentado utilizando
589
 
        particionamento de tabela.</P>
590
 
 
591
 
        <P>Uma limita&ccedil;&atilde;o &eacute; que &iacute;ndices n&atilde;o podem ser criados em colunas maiores do que
592
 
        2.000 caracteres. Felizmente, tais &iacute;ndices s&atilde;o raramente necess&aacute;rios. Unicidade &eacute;
593
 
        melhor garantida por um &iacute;ndice de uma fun&ccedil;&atilde;o de um hash MD5 de uma coluna longa, e
594
 
        indexa&ccedil;&atilde;o de texto longo permite a busca de palavras dentro da coluna.</P>
595
 
 
596
 
    <H3 id="item4.5">4.5) Quanto espa&ccedil;o em disco &eacute; necess&aacute;rio para armazenar dados de um arquivo texto?</H3>
597
 
 
598
 
    <P>Um banco de dados PostgreSQL ir&aacute; requerer at&eacute; cinco vezes a quantidade de espa&ccedil;o requerida para armazenar dados em um arquivo texto.</P>
599
 
 
600
 
    <P>Como um exemplo, considere um arquivo com 100.000 linhas contendo um inteiro e uma descri&ccedil;&atilde;o em cada linha. Suponha que o tamanho m&eacute;dio da descri&ccedil;&atilde;o &eacute; de vinte bytes. O arquivo ter&aacute; 2,8 MB. O tamanho do arquivo do banco de dados PostgreSQL que cont&eacute;m esses dados pode ser estimado em 5,2 MB:</P>
601
 
<PRE>
602
 
    24 bytes: cada cabe&ccedil;alho de registro (aproximadamente)
603
 
    24 bytes: um campo int e um campo texto
604
 
   + 4 bytes: ponteiro na p&aacute;gina para a tupla
605
 
   -------------------------------------------
606
 
    52 bytes por registro
607
 
 
608
 
   O tamanho de uma p&aacute;gina de dados no PostgreSQL &eacute; 8192 bytes (8 KB), ent&atilde;o:
609
 
 
610
 
   8192 bytes por p&aacute;gina
611
 
   ------------------------   =  158 registros por p&aacute;gina do banco de dados (arredondado para baixo)
612
 
     52 bytes por registro
613
 
 
614
 
   100000 registros de dados
615
 
   ----------------------------  =  633 p&aacute;ginas do banco de dados (arredondado para cima)
616
 
      158 registros por p&aacute;gina
617
 
 
618
 
633 p&aacute;ginas do banco de dados * 8192 bytes por p&aacute;gina  =  5.185.536 bytes (5,2 MB)
619
 
</PRE>
620
 
 
621
 
        <P>&Iacute;ndices n&atilde;o requerem muito espa&ccedil;o, mas cont&eacute;m
622
 
        dados que foram indexados, ent&atilde;o eles podem ocupar algum espa&ccedil;o.</P> 
623
 
 
624
 
        <P><SMALL>NULL</SMALL>s s&atilde;o armazenados como bitmaps, ent&atilde;o eles
625
 
        utilizam muito pouco espa&ccedil;o.</P>
626
 
 
627
 
    <H3 id="item4.6">4.6) Por que minhas consultas est&atilde;o lentas? Por que elas n&atilde;o est&atilde;o utilizando meus &iacute;ndices?</H3>
628
 
 
629
 
        <P>&Iacute;ndices n&atilde;o s&atilde;o utilizados por toda consulta. &Iacute;ndices s&atilde;o utilizados somente
630
 
        se a tabela &eacute; maior do que um tamanho m&iacute;nimo, e a consulta seleciona somente uma
631
 
        pequena porcentagem dos registros da tabela. Isto porque o acesso rand&ocirc;mico ao
632
 
        disco causado pela busca indexada pode ser mais lento do que uma leitura ao longo
633
 
        da tabela ou busca sequencial.</P>
634
 
 
635
 
        <P>Para determinar se um &iacute;ndice deveria ser utilizado, o PostgreSQL deve ter
636
 
        estat&iacute;sticas sobre a tabela. Estas estat&iacute;sticas s&atilde;o coletadas utilizando o
637
 
        <SMALL>VACUUM ANALYZE</SMALL> ou simplesmente o <SMALL>ANALYZE</SMALL>.
638
 
        Utilizando estat&iacute;sticas, o otimizador sbae quantos registros est&atilde;o na tabela,
639
 
        e pode melhor determinar se &iacute;ndices deveriam ser utilizados.
640
 
        Estat&iacute;sticas tamb&eacute;m s&atilde;o &uacute;teis para determinar a ordem de jun&ccedil;&atilde;o &oacute;tima e m&eacute;todos
641
 
        de jun&ccedil;&atilde;o. Cole&ccedil;&atilde;o de estat&iacute;sticas deveriam ser feitas periodicamente a
642
 
        medida que o conte&uacute;do da tabela muda.</P>
643
 
 
644
 
        <P>&Iacute;ndices n&atilde;o s&atilde;o normalmente utilizados para <SMALL>ORDER BY</SMALL> ou para
645
 
        fazer jun&ccedil;&otilde;es. Uma busca sequencial seguido por uma ordena&ccedil;&atilde;o expl&iacute;cita &eacute;
646
 
        geralmente mais r&aacute;pida do que uma busca indexada em uma tabela grande.
647
 
        Contudo, <SMALL>LIMIT</SMALL> combinado com <SMALL>ORDER BY</SMALL>
648
 
        frequentemente utilizar&aacute; &iacute;ndice porque somente uma pequena por&ccedil;&atilde;o da tabela
649
 
        ser&aacute; retornada.</P>
650
 
 
651
 
        <P>Se voc&ecirc; acredita que o otimizador est&aacute; incorreto ao escolher uma busca
652
 
        sequencial, utilize <CODE>SET enable_seqscan TO 'off'</CODE> e execute a
653
 
        consulta novamente para ver se uma busca indexada &eacute; realmente mais r&aacute;pida.</P>
654
 
 
655
 
        <P>Ao utilizar operadores curinga tais como <SMALL>LIKE</SMALL> ou <I>~</I>,
656
 
        &iacute;ndices podem ser utilizados somente em algumas condi&ccedil;&otilde;es:</P>
657
 
        <UL>
658
 
        <LI>O in&iacute;cio da cadeia de caracteres da busca deve ser iniciar com uma
659
 
        cadeia de caracteres, i.e.
660
 
        <UL>
661
 
        <LI>modelos <SMALL>LIKE</SMALL> n&atilde;o devem iniciar com <I>%</I>.</LI>
662
 
        <LI>modelos <I>~</I> (express&otilde;es regulares) devem iniciar com <I>^</I>.</LI>
663
 
        </UL></LI>
664
 
        <LI>A cadeia de caracteres utilizada na busca n&atilde;o pode iniciar com a classe de
665
 
        caracteres e.g. [a-e].</LI>
666
 
        <LI>Busca que n&atilde;o diferenciam mai&uacute;sculas de min&uacute;sculas tais como <SMALL>ILIKE</SMALL> e 
667
 
        <I>~*</I> n&atilde;o utilizam &iacute;ndices. Em vez disso, utilize &iacute;ndice de express&atilde;o, que
668
 
        &eacute; descrito na se&ccedil;&atilde;o <a href="#item4.8">4.8</a>.</LI>
669
 
        <LI>O idioma padr&atilde;o <I>C</I> deve ser usando durante o <i>initdb</i>
670
 
        porque n&atilde;o &eacute; poss&iacute;vel saber o pr&oacute;ximo caracter em idiomas que n&atilde;o sejam o C.
671
 
        Voc&ecirc; pode criar um &iacute;ndice especial <CODE>text_pattern_ops</CODE> para tais casos
672
 
        que funcionam somente para indexa&ccedil;&atilde;o com <SMALL>LIKE</SMALL>. Tamb&eacute;m &eacute;
673
 
        poss&iacute;vel utilizar indexa&ccedil;&atilde;o de busca textual para buscas por palavras.
674
 
        </LI>
675
 
        </UL>
676
 
 
677
 
        <P>Em vers&otilde;es anteriores a 8.0, &iacute;ndices frequentemente n&atilde;o podem ser utilizados
678
 
        a menos que os tipos de dados correspondam aos tipos de coluna do &iacute;ndice. Isto era
679
 
        particularmente verdadeiro para &iacute;ndices de coluna int2, int8 e numeric.</P>
680
 
 
681
 
    <H3 id="item4.7">4.7) Como eu vejo como o otimizador de consulta est&aacute; avaliando a minha consulta?</H3>
682
 
 
683
 
    <P>Veja o comando <SMALL>EXPLAIN</SMALL> no manual.</P>
684
 
 
685
 
    <H3 id="item4.8">4.8) Como eu fa&ccedil;o buscas com express&otilde;es regulares
686
 
    e buscas com express&otilde;es regulares sem diferenciar mai&uacute;sculas de min&uacute;sculas? Como eu
687
 
    utilizo um &iacute;ndice para buscas que n&atilde;o diferenciam mai&uacute;sculas de min&uacute;sculas?</H3>
688
 
 
689
 
        <P>O operador <I>~</I> faz avalia&ccedil;&atilde;o de express&otilde;es regulares,
690
 
        e <I>~*</I> faz avalia&ccedil;&atilde;o n&atilde;o sens&iacute;vel a mai&uacute;sculas
691
 
        de express&otilde;es regulares. A variante n&atilde;o sens&iacute;vel a mai&uacute;sculas
692
 
        do <SMALL>LIKE</SMALL> &eacute; chamada de <SMALL>ILIKE</SMALL>.</P>
693
 
 
694
 
        <P>Compara&ccedil;&otilde;es de igualdade n&atilde;o sens&iacute;veis a mai&uacute;sculas
695
 
        s&atilde;o normalmente expressadas como:</P>
696
 
<PRE>
697
 
    SELECT *
698
 
    FROM tab
699
 
    WHERE lower(col) = 'abc';
700
 
</PRE>
701
 
        Isso n&atilde;o ir&aacute; utilizar o &iacute;ndice padr&atilde;o. Contudo, se
702
 
        voc&ecirc; criar um &iacute;ndice de express&atilde;o, ele ser&aacute; utilizado:
703
 
<PRE>
704
 
    CREATE INDEX tabindex ON tab (lower(col));
705
 
</PRE>
706
 
        <P>Se o &iacute;ndice acima &eacute; criado como <SMALL>UNIQUE</SMALL>, embora a
707
 
        coluna possa armazenar caracteres mai&uacute;sculos e min&uacute;sculos, ele n&atilde;o
708
 
        pode ter valores id&ecirc;nticos que diferem apenas em letras mai&uacute;sculas e min&uacute;sculas.
709
 
        Para for&ccedil;ar uma letra mai&uacute;scula ou min&uacute;scula a ser armazenada na coluna, utilize
710
 
        uma restri&ccedil;&atilde;o <SMALL>CHECK</SMALL> ou um gatilho.</P>
711
 
 
712
 
        <H3 id="item4.9">4.9) Em uma consulta, como eu detecto se um campo &eacute; <SMALL>NULL</SMALL>? Como eu posso concatenar poss&iacute;veis <SMALL>NULL</SMALL>s? Como eu posso ordenar por um campo que &eacute; <SMALL>NULL</SMALL> ou n&atilde;o?</H3>
713
 
 
714
 
    <P>Voc&ecirc; testa a coluna com <SMALL>IS NULL</SMALL> e <SMALL>IS
715
 
    NOT NULL</SMALL>, como a seguir:</P>
716
 
 
717
 
<PRE>
718
 
   SELECT *
719
 
   FROM tab
720
 
   WHERE col IS NULL;
721
 
</PRE>
722
 
 
723
 
        <P>Para concatenar com poss&iacute;veis <SMALL>NULL</SMALL>s, utilize <I>COALESCE()</I>, assim:</P>
724
 
<PRE>
725
 
   SELECT COALESCE(col1, '') || COALESCE(col2, '')
726
 
   FROM tab
727
 
</PRE>
728
 
 
729
 
        <P>Para ordenar pelo status <SMALL>NULL</SMALL>, utilize os modificadores
730
 
        <SMALL>IS NULL</SMALL> e <SMALL>IS NOT NULL</SMALL> na sua cl&aacute;usula
731
 
        <SMALL>ORDER BY</SMALL>. Coisas que s&atilde;o <I>verdadeiro</I> ser&atilde;o ordenadas acima
732
 
        das coisas que s&atilde;o <I>falso</I>, ent&atilde;o a consulta a seguir ir&aacute; colocar
733
 
        entradas NULL no in&iacute;cio da lista de resultados:</P>
734
 
 
735
 
<PRE>
736
 
   SELECT *
737
 
   FROM tab
738
 
   ORDER BY (col IS NOT NULL)
739
 
</PRE>
740
 
 
741
 
    <H3 id="item4.10">4.10) Qual &eacute; a diferen&ccedil;a entre os v&aacute;rios tipos de dado de caracteres?</H3>
742
 
<BLOCKQUOTE>
743
 
<TABLE>
744
 
<TR><TH>Tipo</TH><TH>Nome Interno</TH><TH>Observa&ccedil;&atilde;o</TH></TR>
745
 
<TR><TD>VARCHAR(n)</TD><TD>varchar</TD><TD>tamanho especifica o tamanho
746
 
m&aacute;ximo, sem preenchimento</TD></TR>
747
 
<TR><TD>CHAR(n)</TD><TD>bpchar</TD><TD>preenchimento em branco para
748
 
comprimento fixo espec&iacute;fico</TD></TR>
749
 
<TR><TD>TEXT</TD><TD>text</TD><TD>nenhum limite superior espec&iacute;fico no
750
 
comprimento</TD></TR>
751
 
<TR><TD>BYTEA</TD><TD>bytea</TD><TD>vetor de bytes de comprimento vari&aacute;vel
752
 
(seguro a byte nulo)</TD></TR>
753
 
<TR><TD>"char"</TD><TD>char</TD><TD>um caracter</TD></TR>
754
 
</TABLE>
755
 
</BLOCKQUOTE>
756
 
 
757
 
        <P>Voc&ecirc; ver&aacute; o nome interno quando examinar o cat&aacute;logo do sistema e em algumas mensagens de erro.</P>
758
 
 
759
 
        <P>Os primeiros quatro tipos acima s&atilde;o do tipo "varlena" (i.e., os primeiros quatro bytes no disco s&atilde;o o comprimento seguido pelos dados). Consequentemente o espa&ccedil;o atual utilizado &eacute; ligeiramente maior do que o tamanho declarado. Contudo, valores longos s&atilde;o tamb&eacute;m sujeitos a compress&atilde;o, ent&atilde;o o espa&ccedil;o em disco pode tamb&eacute;m ser bem menor do que o esperado.</P>
760
 
 
761
 
        <SMALL>VARCHAR(n)</SMALL> &eacute; melhor quando est&aacute; armazenando cadeias de caracteres de comprimento vari&aacute;vel e h&aacute; um limite de tamanho desta cadeia. <SMALL>TEXT</SMALL> &eacute; para cadeias de caracteres de comprimento ilimitado, com o m&aacute;ximo de um gigabyte.
762
 
        <P><SMALL>CHAR(n)</SMALL> &eacute; para armazenar cadeias de caracteres que s&atilde;o todas do mesmo tamanho. <SMALL>CHAR(n)</SMALL> preenche com espa&ccedil;os em branco at&eacute; o tamanho especificado, enquanto o <SMALL>VARCHAR(n)</SMALL> armazena somente os caracteres fornecidos. <SMALL>BYTEA</SMALL> &eacute; para armazenar dados bin&aacute;rios, particularmente valores que incluem bytes <SMALL>NULL</SMALL>. Todos os tipos descritos aqui tem caracter&iacute;sticas de performance similares.</P>
763
 
 
764
 
    <H3 id="item4.11.1">4.11.1) Como eu crio um campo serial/auto incremento?</H3>
765
 
 
766
 
        <P>PostgreSQL suporta o tipo de dados <SMALL>SERIAL</SMALL>. Ele cria
767
 
        automaticamente uma sequ&ecirc;ncia. Por exemplo:</P>
768
 
<PRE>
769
 
    CREATE TABLE pessoa ( 
770
 
        id   SERIAL, 
771
 
        nome TEXT 
772
 
    );
773
 
</PRE>
774
 
 
775
 
        &eacute; automaticamente traduzido em:
776
 
<PRE>
777
 
    CREATE SEQUENCE pessoa_id_seq;
778
 
    CREATE TABLE pessoa ( 
779
 
        id   INT4 NOT NULL DEFAULT nextval('pessoa_id_seq'),
780
 
        nome TEXT 
781
 
    );
782
 
</PRE>
783
 
 
784
 
        <P>Sequ&ecirc;ncias automaticamente criadas s&atilde;o nomeadas como
785
 
        &lt;<i>tabela</i>&gt;_&lt;<i>colunaserial</i>&gt;_<i>seq</i>, onde
786
 
        <i>tabela</i> e <i>colunaserial</i> s&atilde;o os nomes da tabela e
787
 
        da coluna serial, respectivamente. Veja a p&aacute;gina sobre
788
 
        <I>create_sequence</I> no manual para obter informa&ccedil;&otilde;es
789
 
        adicionais sobre sequ&ecirc;ncias.
790
 
 
791
 
    <H3 id="item4.11.2">4.11.2) Como eu consigo o valor de um campo
792
 
    <SMALL>SERIAL</SMALL>?</H3>
793
 
 
794
 
    <P>A maneira mais simples de obter o pr&oacute;ximo valor <SMALL>SERIAL</SMALL>
795
 
    de uma sequ&ecirc;ncia &eacute; com <SMALL>RETURNING</SMALL>. Utilizando o
796
 
    exemplo da tabela em <A href="#item4.11.1">4.11.1</A>, ele ficaria assim:
797
 
 
798
 
<PRE>
799
 
    INSERT INTO pessoa (nome) VALUES ('Blaise Pascal') RETURNING id;
800
 
</PRE>
801
 
 
802
 
    Voc&ecirc; tamb&eacute;m pode chamar <I>nextval()</I> e utilizar o valor no
803
 
    <SMALL>INSERT</SMALL> ou chamar <I>currval()</I> <I>ap&oacute;s</I> o
804
 
    <SMALL>INSERT</SMALL>.
805
 
 
806
 
    <H3 id="item4.11.3">4.11.3) <I>currval()</I> n&atilde;o lida com condi&ccedil;&atilde;o de corrida com outros usu&aacute;rios?</H3>
807
 
 
808
 
    <P>N&atilde;o. <I>currval()</I> retorna o valor atual atribuido pela sua sess&atilde;o, e n&atilde;o por todas as sess&otilde;es.</P>
809
 
 
810
 
    <H3 id="item4.11.4">4.11.4) Por que os n&uacute;meros da minha sequ&ecirc;ncia n&atilde;o s&atilde;o reutilizados quando uma transa&ccedil;&atilde;o &eacute; abortada? Por que h&aacute; intervalos nos n&uacute;meros da minha sequ&ecirc;ncia/coluna SERIAL?</H3>
811
 
 
812
 
    <P>Para melhorar a concorr&ecirc;ncia, valores da sequ&ecirc;ncia s&atilde;o atribu&iacute;dos a transa&ccedil;&otilde;es correntes e n&atilde;o s&atilde;o travados at&eacute; que a transa&ccedil;&atilde;o seja finalizada. Isso causa intervalos na numera&ccedil;&atilde;o por causa de transa&ccedil;&otilde;es abortadas.</P>
813
 
 
814
 
    <H3 id="item4.12">4.12) O que &eacute; um <SMALL>OID</SMALL>? O que &eacute; um <SMALL>CTID</SMALL>?</H3>
815
 
 
816
 
        <P>Se uma tabela &eacute; criada com <SMALL>WITH OIDS</SMALL>, cada registro recebe um <SMALL>OID</SMALL> &uacute;nico.
817
 
        O<SMALL>ID</SMALL>s s&atilde;o automaticamente atribu&iacute;dos como inteiros de 4 bytes
818
 
        que s&atilde;o &uacute;nicos ao longo de toda instala&ccedil;&atilde;o. Contudo, eles s&atilde;o limitados em
819
 
        4 bilh&otilde;es e, ent&atilde;o, os O<SMALL>ID</SMALL>s come&ccedil;am a ser duplicados. O PostgreSQL
820
 
        utiliza <SMALL>OID</SMALL>s para ligar as tabelas do sistema.</P>
821
 
 
822
 
        <P>Para numerar registros nas tabelas do usu&aacute;rios, &eacute; melhor utilizar
823
 
        <SMALL>SERIAL</SMALL> ao inv&eacute;s de O<SMALL>ID</SMALL>s porque
824
 
        sequ&ecirc;ncias <SMALL>SERIAL</SMALL> s&atilde;o &uacute;nicas somente em uma tabela; e
825
 
        s&atilde;o menos prop&iacute;cias a atingir o limite.
826
 
        <SMALL>SERIAL8</SMALL> est&aacute; dispon&iacute;vel para armazenar valores de sequ&ecirc;ncias
827
 
        com oito bytes.</P>
828
 
 
829
 
        <P>C<SMALL>TID</SMALL>s s&atilde;o utilizados para identificar registros f&iacute;sicos
830
 
        espec&iacute;ficos com valores de block e deslocamento. C<SMALL>TID</SMALL>s mudam
831
 
        ap&oacute;s registros serem modificados ou recarregados. Eles s&atilde;o utilizados por
832
 
        &iacute;ndices para apontar registros f&iacute;sicos.</P>
833
 
 
834
 
    <H3 id="item4.13">4.13) Por que eu recebo o erro <I>"ERROR: Memory exhausted in AllocSetAlloc()"</I>?</H3>
835
 
 
836
 
    <P>Voc&ecirc; provavelmente est&aacute; sem mem&oacute;ria virtual no seu sistema, ou o seu n&uacute;cleo (kernel) tem um limite baixo para certos recursos. Tente isto antes de iniciar o servidor PostgreSQL:</P>
837
 
<PRE>
838
 
    ulimit -d 262144
839
 
    limit datasize 256m
840
 
</PRE>
841
 
 
842
 
    Dependendo da sua shell, somente um desses comando ter&aacute; sucesso, mas ele definir&aacute; o segmento de dados do seu processo com um limite maior e talvez permita que a consulta seja feita. Este comando &eacute; aplicado ao processo atual e todos os subprocessos criados depois do comando ser executado. Se voc&ecirc; tiver problemas com o cliente <SMALL>SQL</SMALL> porque o processo servidor retornou muitos dados, tente-o antes de iniciar o cliente.
843
 
 
844
 
    <H3 id="item4.14">4.14) Como eu informo qual vers&atilde;o do PostgreSQL eu estou utilizando?</H3>
845
 
 
846
 
    <P>No <I>psql</I>, digite <CODE>SELECT version();</CODE></P>
847
 
 
848
 
    <H3 id="item4.15">4.15) Como eu crio uma coluna que conter&aacute; por padr&atilde;o a hora atual?</H3>
849
 
 
850
 
    <P>Utilize <I>CURRENT_TIMESTAMP</I>:</P>
851
 
<PRE>
852
 
        CREATE TABLE teste (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
853
 
</PRE>
854
 
 
855
 
    <H3 id="item4.16">4.16) Como eu fa&ccedil;o uma jun&ccedil;&atilde;o externa (outer join)?</H3>
856
 
 
857
 
    <P>PostgreSQL suporta jun&ccedil;&otilde;es externas utilizando a sintaxe padr&atilde;o do SQL. Aqui temos dois exemplos:</P>
858
 
<PRE>
859
 
    SELECT *
860
 
    FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
861
 
</PRE>
862
 
    or 
863
 
<PRE>
864
 
    SELECT *
865
 
    FROM t1 LEFT OUTER JOIN t2 USING (col);
866
 
</PRE>
867
 
 
868
 
        <P>Essas duas consultas ind&ecirc;nticas juntam t1.col com t2.col, e tamb&eacute;m
869
 
        retornam qualquer registro que n&atilde;o foi juntado em t1 (aqueles que n&atilde;o
870
 
        combinaram com t2). Uma jun&ccedil;&atilde;o a direita <SMALL>RIGHT</SMALL>
871
 
        adicionaria registros que n&atilde;o foram juntados da tabela t2.
872
 
        Uma jun&ccedil;&atilde;o completa (<SMALL>FULL</SMALL>) retornaria os registros
873
 
        combinados mais todos os registros n&atilde;o combinados de t1 e t2.
874
 
        A palavra <SMALL>OUTER</SMALL> &eacute; opcional e &eacute; assumida nas
875
 
        jun&ccedil;&otilde;es <SMALL>LEFT</SMALL>, <SMALL>RIGHT</SMALL> e <SMALL>FULL</SMALL>.
876
 
        Jun&ccedil;&otilde;es ordin&aacute;rias s&atilde;o chamadas jun&ccedil;&otilde;es
877
 
        internas (<SMALL>INNER</SMALL>).</P>
878
 
 
879
 
        <H3 id="item4.17">4.17) Como eu fa&ccedil;o consultas utilizando m&uacute;ltiplos bancos de dados?</H3>
880
 
 
881
 
        <P>N&atilde;o h&aacute; outra maneira de consultar um banco de dados caso ele
882
 
        n&atilde;o seja o atual. Porque o PostgreSQL carrega cat&aacute;logos do sistema
883
 
        espec&iacute;ficos do banco de dados, &eacute; incerto como uma consulta em banco
884
 
        de dados distintos pode se comportar.</P>
885
 
 
886
 
        <P><I>contrib/dblink</I> permite consultas em bancos de dados distintos utilizando
887
 
        chamadas de fun&ccedil;&otilde;es. &Eacute; claro, que um cliente pode fazer
888
 
        conex&otilde;es simult&acirc;neas em bancos de dados diferentes e juntar os
889
 
        resultados no cliente.</P>
890
 
 
891
 
    <H3 id="item4.18">4.18) Como eu retorno m&uacute;ltiplos registros ou colunas de uma fun&ccedil;&atilde;o?</H3>
892
 
 
893
 
        <P>&Eacute; f&aacute;cil utilizando fun&ccedil;&otilde;es que retornam conjunto,
894
 
        <a href="http://www.postgresql.org/docs/techdocs.17">
895
 
        http://www.postgresql.org/docs/techdocs.17</a>.</P>
896
 
 
897
 
        <H3 id="item4.19">4.19) Por que eu obtenho erros "relation with OID ######
898
 
        does not exist" ao acessar tabelas tempor&aacute;rias em fun&ccedil;&otilde;es PL/PgSQL?</H3>
899
 
 
900
 
    <P>Em vers&otilde;es do PostgreSQL &lt; 8.3, PL/PgSQL armazena o conte&uacute;do da fun&ccedil;&atilde;o, e o efeito indesejado &eacute; que se uma fun&ccedil;&atilde;o PL/PgSQL acessa uma tabela tempor&aacute;ria, e aquela tabela &eacute; removida e criada novamente, e a fun&ccedil;&atilde;o &eacute; chamada novamente, a fun&ccedil;&atilde;o ir&aacute; falhar porque o conte&uacute;do armazenado da fun&ccedil;&atilde;o ainda apontar&aacute; para a tabela tempor&aacute;ria antiga. A solu&ccedil;&atilde;o &eacute; utilizar o <SMALL>EXECUTE</SMALL> para acesso a tabelas tempor&aacute;rias no PL/PgSQL. Isto ir&aacute; fazer com que a consulta seja avaliada toda vez.</P>
901
 
 
902
 
    <P>Este problema n&atilde;o ocorre no PostgreSQL 8.3 ou superior.</P>
903
 
 
904
 
    <H3 id="item4.20">4.20) Quais solu&ccedil;&otilde;es de replica&ccedil;&atilde;o est&atilde;o dispon&iacute;veis?</H3>
905
 
 
906
 
        <P>Embora "replica&ccedil;&atilde;o" seja um termo simples, h&aacute; v&aacute;rias tecnologias para fazer
907
 
        replica&ccedil;&atilde;o, com vantagens e desvantagens para cada um.</P>
908
 
 
909
 
        <P>Replica&ccedil;&atilde;o mestre/escravo permite que um mestre receba consultas de leitura e
910
 
        escrita, enquanto os escravos s&oacute; podem aceitar leitura/consultas <SMALL>SELECT</SMALL>.
911
 
        A solu&ccedil;&atilde;o mais popular de replica&ccedil;&atilde;o mestre-escravo para PostgreSQL dispon&iacute;vel livremente
912
 
        &eacute; <A href="http://main.slony.info">Slony-I</A>.</P>
913
 
 
914
 
        <P>Replica&ccedil;&atilde;o com m&uacute;ltiplos mestres permite que consultas leitura/escrita sejam
915
 
        enviadas para m&uacute;ltiplos computadores replicadores. Esta capacidade tamb&eacute;m tem
916
 
        um s&eacute;rio impacto na performance por causa da necessidade de sincronizar as mudan&ccedil;as
917
 
        entre os servidores. <A href="http://pgfoundry.org/projects/pgcluster/">PGCluster</a>
918
 
        &eacute; a solu&ccedil;&atilde;o mais popular dispon&iacute;vel livremente para PostgreSQL.</P>
919
 
 
920
 
        <P>H&aacute; tamb&eacute;m solu&ccedil;&otilde;es de replica&ccedil;&atilde;o comerciais e baseadas em hardware dispon&iacute;veis
921
 
        que suportam uma variedade de modelos de replica&ccedil;&atilde;o.</P>
922
 
 
923
 
        <H3 id="item4.21">4.21) Por que os nomes de minhas tabelas e colunas n&atilde;o
924
 
        s&atilde;o reconhecidos em minha consulta? Por que as mai&uacute;sculas n&atilde;o s&atilde;o preservadas?</H3>
925
 
 
926
 
        <P>A causa mais comum de nomes desconhecidos &eacute; o uso de aspas ao redor dos nomes da tabela ou coluna
927
 
        durante a cria&ccedil;&atilde;o da tabela. Ao utilizar aspas, nomes de tabela e coluna
928
 
        (chamados de identificadores) s&atilde;o armazenados <a
929
 
        href="http://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS">
930
 
        como especificado</a>, significando que voc&ecirc; deve utilizar aspas quando se
931
 
        referir aos nomes na consulta. Algumas interfaces, como pgAdmin,
932
 
        automaticamente colocam aspas nos identificadores durante a cria&ccedil;&atilde;o da tabela.
933
 
        Ent&atilde;o, para identificadores serem reconhecidos, voc&ecirc; deve:
934
 
        <UL>
935
 
        <LI>Evitar colocar aspas no identificador ao criar tabelas</LI>
936
 
        <LI>Utilizar somente caracteres min&uacute;sculos em identificadores</LI>
937
 
        <LI>Colocar aspas em identificadores ao referenci&aacute;-los nas consultas</LI>
938
 
        </UL>
939
 
 
940
 
  </BODY>
941
 
</HTML>
942