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

« back to all changes in this revision

Viewing changes to doc/FAQ_brazilian

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