1
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
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>
9
<BODY bgcolor="#ffffff" text="#000000" link="#ff0000" vlink="#a00000"
11
<H1>Perguntas Frequentes (FAQ) sobre PostgreSQL</H1>
13
<P>Última atualização: Sex Nov 16 10:53:50 EST 2007</P>
15
<P>Mantenedor atual: Bruce Momjian (<A href=
16
"mailto:bruce@momjian.us">bruce@momjian.us</A>)
19
<P>Traduzido por: Euler Taveira de Oliveira (<A href=
20
"mailto:euler@timbira.com">euler@timbira.com</A>)</P>
22
<P>A versã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>
28
<P>Perguntas sobre plataformas específicas são respondidas em <A href=
29
"http://www.postgresql.org/docs/faq/">http://www.postgresql.org/docs/faq/</A>.</P>
32
<H2 align="center">Perguntas Gerais</H2>
33
<A href="#item1.1">1.1</A>) O que é PostgreSQL? Como ele é pronunciado?
34
O que é Postgres?<BR>
35
<A href="#item1.2">1.2</A>) Quem controla o PostgreSQL?<BR>
36
<A href="#item1.3">1.3</A>) Qual é a licenç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 é a última versã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ão os bugs conhecidos ou características ausentes?<BR>
43
<A href="#item1.10">1.10</A>) Que documentação está disponí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ção (patch) ou me juntar a equipe de desenvolvimento?<BR>
46
<A href="#item1.13">1.13</A>) Como é o PostgreSQL comparado a outros <SMALL>SGBD</SMALL>s?<BR>
47
<A href="#item1.14">1.14</A>) O PostgreSQL gerenciar� as mudanças de horário devido ao horário de verão em vários países?<BR>
50
<H2 align="center">Perguntas sobre Clientes</H2>
51
<A href="#item2.1">2.1</A>) Quais interfaces estão disponíveis para PostgreSQL?<BR>
52
<A href="#item2.2">2.2</A>) Quais ferramentas estão disponíveis para utilizar o PostgreSQL com páginas Web?<BR>
53
<A href="#item2.3">2.3</A>) O PostgreSQL tem interfaces gráficas para interagir com usuário?<BR>
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ões de outras má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ísticas de depuração estão disponí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 é o processo de atualização do PostgreSQL?<BR>
63
<A href="#item3.7">3.7</A>) Que tipo de hardware eu devo usar?<BR>
66
<H2 align="center">Perguntas Operacionais</H2>
67
<A href="#item4.1">4.1</A>) Como eu faço um <SMALL>SELECT</SMALL> somente dos primeiros registros de uma consulta? Um registro randômico?<BR>
68
<A href="#item4.2">4.2</A>) Como eu descubro quais tabelas, índices, bancos de dados e usuários estão definidos? Como eu vejo as consultas utilizadas pelo <I>psql</I> para mostrá-los?<BR>
69
<A href="#item4.3">4.3</A>) Como você muda o tipo de dado de uma coluna?<BR>
70
<A href="#item4.4">4.4</A>) Qual é o tamanho máximo de um registro, uma tabela e um banco de dados?<BR>
71
<A href="#item4.5">4.5</A>) Quanto espaço em disco é necessário para armazenar dados de um arquivo texto?<BR>
72
<A href="#item4.6">4.6</A>) Por que minhas consultas estão lentas? Por que elas não estão utilizando meus índices?<BR>
73
<A href="#item4.7">4.7</A>) Como eu vejo como o otimizador de consultas está avaliando minha consulta?<BR>
74
<A href="#item4.8">4.8</A>) Como eu faço buscas com expressões regulares e buscas com expressões regulares sem diferenciar mauúsculas de minúsculas? Como eu utilizo um índice para buscas sem distinguir maiúsculas de minúsculas?<BR>
75
<A href="#item4.9">4.9</A>) Em uma consulta, como eu detecto se um campo é <SMALL>NULL</SMALL>? Como eu posso concatenar possíveis <SMALL>NULL</SMALL>s? Como eu posso ordenar por um campo que é <SMALL>NULL</SMALL> ou não?<BR>
76
<A href="#item4.10">4.10</A>) Qual é a diferença entre os vá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ão lida com condição de corrida com outros usuários?<BR>
81
<A href="#item4.11.4">4.11.4</A>) Por que os números da minha sequência não são reutilizados quando uma transação é abortada? Por que há intervalos nos números da minha sequência/coluna SERIAL?<BR>
82
<A href="#item4.12">4.12</A>) O que é um <SMALL>OID</SMALL>? O que é 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ão do PostgreSQL eu estou utilizando?<BR>
85
<A href="#item4.15">4.15</A>) Como eu crio uma coluna que conterá por padrão a hora atual?<BR>
86
<A href="#item4.16">4.16</A>) Como eu faço uma junção externa (outer join)?<BR>
87
<A href="#item4.17">4.17</A>) Como eu faço consultas utilizando múltiplos bancos de dados?<BR>
88
<A href="#item4.18">4.18</A>) Como eu retorno múltiplos registros ou colunas de uma funçã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árias em funções PL/PgSQL?<BR>
91
<A href="#item4.20">4.20</A>) Quais soluções de replicação estão disponíveis?<BR>
92
<A href="#item4.21">4.21</A>) Por que os nomes de minhas tabelas e colunas não
93
são reconhecidos em minha consulta? Por que as maiúsculas não são preservadas?<BR>
98
<H2 align="center">Perguntas Gerais</H2>
100
<H3 id="item1.1">1.1) O que é PostgreSQL? Como ele é pronunciado? O que é Postgres?</H3>
102
<P>PostgreSQL é 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 áudio</a> está disponível).</P>
106
<P>O PostgreSQL é um sistema de banco de dados objeto-relacional que tem as
107
características de sistemas de bancos de dados comerciais tradicionais com
108
melhoramentos encontrados nos sistemas <SMALL>SGBD</SMALL>s de próxima geração.
109
PostgreSQL é livre e o código-fonte completo está disponível.</P>
111
<P>O desenvolvimento do PostgreSQL é feito por um grupo de desenvolvedores
112
voluntários (na sua maioria) espalhados pelo mundo e que se comunicam via
113
Internet. É um projeto da comunidade e não é 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>
119
<P>Postgres é um apelido para o PostgreSQL amplamente utilizado. Era o nome original do
120
projeto em Berkeley e dentre os outros apelidos é o preferido. Se você acha
121
'PostgreSQL' difícil de pronunciar, diga apenas 'Postgres'.</P>
123
<H3 id="item1.2">1.2) Quem controla o PostgreSQL?<BR></H3>
125
<P>Se você está procurando por um mantenedor, comitê central ou empresa
126
controladora do PostgreSQL, desista --- não há um(a). Nós temos um
127
comitê core e committers CVS, mas estes grupos são mais para questões
128
administrativas do que controle. O projeto é direcionado pela comunidade
129
de desenvolvedores e usuários, que qualquer um pode se juntar. Tudo o que
130
você precisa é se inscrever nas listas de discussão e participar das
131
discussões. Veja a <a href="http://www.postgresql.org/docs/faqs.FAQ_DEV.html">
132
FAQ do desenvolvedor</A> para obter informações como se envolver com o
133
desenvolvimento do PostgreSQL.</P>
135
<H3 id="item1.3">1.3) Qual é a licença do PostgreSQL?</H3>
137
<P>O PostgreSQL é distribuído sob a licença BSD clássica. Basicamente,
138
ela permite que usuários façam qualquer coisa com o código, incluindo
139
revender os binários sem o código-fonte. A única restrição é que você
140
não nos responsabilize legalmente por problemas com o programa de computador.
141
Há também a exigência de que esta licença apareça em todas as cópias
142
do programa de computador. Aqui está a licença BSD que usamos atualmente:</P>
143
<P>PostgreSQL está sujeito a seguinte licença:</P>
145
<P>PostgreSQL Data Base Management System</P>
147
<P>Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group
148
Portions Copyright (c) 1994-1996 Regents of the University of California</P>
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>
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>
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>
169
<H3 id="item1.4">1.4) Quais plataformas o PostgreSQL pode ser executado?</H3>
171
<P>Em geral, qualquer plataforma moderna compatível com Unix deve ser capaz de executar o PostgreSQL. As plataformas que foram testadas antes do lançamento de uma versão são listadas nas instruções de instalação.</P>
173
<P>O PostgreSQL também executa nativamente nos sistemas operacionais Microsoft Windows
174
baseados no NT tais como Win200 SP4, WinXP e Win2003. Um instalador pré-empacotado está
175
disponível em <a href= "http://pgfoundry.org/projects/pginstaller">
176
http://pgfoundry.org/projects/pginstaller</a>. Versões do Windows baseadas no MS-DOS
177
(Win95, Win98, WinMe) podem executar o PostgreSQL utilizando o Cygwin.</P>
179
<p>Há também uma versão para o Novell Netware 6 em
180
<a href="http://forge.novell.com">http://forge.novell.com</a>
181
e uma versão para OS/2 (eComStation) em <a href=
182
"http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2F">
183
http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2F</a>.</p>
185
<H3 id="item1.5">1.5) Onde eu posso conseguir o PostgreSQL?</H3>
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>
193
<H3 id="item1.6">1.6) Qual é a última versão?</H3>
195
<P>A última versão do PostgreSQL é a versão 8.2.5.</P>
197
<P>Nós planejamos lançar versões novas a cada ano com versões
198
corretivas em alguns meses.</P>
200
<H3 id="item1.7">1.7) Onde eu posso conseguir suporte?</H3>
202
<P>A comunidade do PostgreSQL fornece assistência a muitos de seus
203
usuários via e-mail. O principal sítio web para inscrição nas listas
204
de e-mail é <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ão um bom lugar para início.</P>
208
<P>O principal canal de IRC é o <I>#postgresql</I> na Freenode (<I>irc.freenode.net</I>). Para se conectar você pode utilizar o comando Unix <code>irc -c '#postgresql' "$USER" irc.freenode.net</code> ou utilizar qualquer outro cliente de IRC. Um canal hispânico (<I>#postgresql-es</I>) e um francês (<I>#postgresqlfr</I>) também existem na mesma rede. Há também um canal PostgreSQL na EFNet.</P>
210
<P>Uma lista de empresas que prestam suporte comercial está disponível em <A href=
211
"http://www.postgresql.org/support/professional_support">
212
http://www.postgresql.org/support/professional_support</A>.</P>
214
<H3 id="item1.8">1.8) Como eu informo a existência de um bug?</H3>
216
<P>Visite o formulá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ém o nosso ftp <A href=
219
"ftp://ftp.postgresql.org/pub">ftp://ftp.postgresql.org/pub</A> para
220
ver se há uma versão mais recente do PostgreSQL.</P>
222
<P>Bugs submetidos utilizando o formulário ou informado a qualquer
223
lista de discussão do PostgreSQL tipicamente gera uma das seguintes
226
<li>Não é um bug e o porquê</li>
227
<li>É um bug conhecido e já está 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ão atual</li>
230
<li>O bug foi corrigido mas não foi empacotado em um versão oficial</li>
231
<li>Um pedido foi feito para obter informações detalhadas:
233
<li>Sistema Operacional</li>
234
<li>Versão do PostgreSQL</li>
235
<li>Exemplo de teste que reproduz o bug</li>
236
<li>Informações sobre depuração</li>
237
<li>Saída reconstituidora de vestígios (backtrace) do depurador</li>
240
<li>O bug é novo. O seguinte pode ocorrer:
242
<li>Uma correção é criada e será incluída na próxima versão</li>
243
<li>O bug não pode ser corrigido imediatamente e é adicionado
244
a lista de <A href="http://www.postgresql.org/docs/faqs.TODO.html">AFAZERES</A></li>
249
<H3 id="item1.9">1.9) Como eu posso saber quais são os bugs conhecidos
250
ou funcionalidades ausentes?</H3>
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ém bugs conhecidos, funcionalidades ausentes e planos futuros.</P>
256
<P>Uma solicitação de funcionalidade geralmente resulta em uma das
257
seguintes respostas:</P>
259
<li>A funcionalidade já está na lista de <A href="http://www.postgresql.org/docs/faqs.TODO.html">AFAZERES</A></li>
260
<li>A funcionalidade não é desejável porque:
262
<li>Ela duplica uma funcionalidade existente que já segue o
263
padrão SQL</li>
264
<li>A funcionalidade aumentará a complexidade do código mas
265
adicionará pouco benefício</li>
266
<li>A funcionalidade será insegura ou não-confiável</li>
269
<li>A nova funcionalidade é adicionada a lista de
270
<A href="http://www.postgresql.org/docs/faqs.TODO.html">AFAZERES</A></li>
273
<P>O PostgreSQL não utiliza sistema de acompanhamento de bugs porque
274
nó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ática, bugs não duram muito no programa; e bugs que afetam
277
uma grande quantidade de usuários são corrigidos rapidamente. O único lugar
278
para encontrar todas as mudanças, melhorias e correções em uma versão do
279
PostgreSQL é ler as mensagens de log do
280
<a href="http://www.postgresql.org/developer/sourcecode/">CVS</a>. Até mesmo
281
as notas de lançamento não listam todas as mudanças feitas no programa.</P>
283
<H3 id="item1.10">1.10) Que documentação está disponível?</H3>
285
<P>O PostgreSQL inclui vasta documentação, incluindo um manual extenso,
286
páginas de manuais (man pages) e alguns exemplos teste. Veja o diretório
287
<I>/doc</I>. Você também pode pesquisar os manuais online em <A href=
288
"http://www.postgresql.org/docs">http://www.postgresql.org/docs</A>.
291
<P>Há dois livros sobre PostgreSQL disponíveis online em <A href=
292
"http://www.postgresql.org/docs/books/awbook.html">http://www.postgresql.org/docs/books/awbook.html</A>
294
"http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook/</A>.
295
Há uma lista de livros sobre PostgreSQL disponíveis para compra. Um dos mais
296
populares é o do Korry Douglas. Uma lista de aná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á também uma coleção de artigos técnicos sbore PostgreSQL em <A href="http://www.postgresql.org/docs/techdocs/">http://www.postgresql.org/docs/techdocs/</A>.</P>
301
<P>O programa cliente de linha de comando <I>psql</I> tem alguns comandos \d para
302
mostrar informações sobre tipos, operadores, funções, agregações, etc. - utilize \?
303
para mostrar os comandos disponíveis.</P>
305
<P>Nosso sítio web contém ainda mais documentação.</P>
307
<H3 id="item1.11">1.11) Como eu posso aprender <SMALL>SQL</SMALL>?</H3>
309
<P>Primeiro, considere os livros específicos sobre PostgreSQL mencionados
310
acima. Muitos de nossos usuá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>
314
<P>Há também bons tutoriais disponíveis online:
316
<LI> <A href="http://www.intermedia.net/support/sql/sqltut.shtm">http://www.intermedia.net/support/sql/sqltut.shtm</A>
319
<A href="http://sqlcourse.com/">http://sqlcourse.com</A>
322
<A href="http://www.w3schools.com/sql/default.asp">http://www.w3schools.com/sql/default.asp</A>
325
"http://mysite.verizon.net/Graeme_Birchall/id1.html">http://mysite.verizon.net/Graeme_Birchall/id1.html</A>
329
<H3 id="item1.12">1.12) Como posso submeter uma correção (patch) ou me juntar a equipe de desenvolvimento?</H3>
331
<P>Veja a <a href="http://www.postgresql.org/docs/faqs.FAQ_DEV.html">
332
FAQ do Desenvolvedor</A>.</P>
334
<H3 id="item1.13">1.13) Como é o PostgreSQL comparado a outros <SMALL>SGBD</SMALL>s?</H3>
336
<P>Há várias maneiras de se medir um software: funcionalidades, performance, confiabilidade, suporte e preço.</P>
339
<DT><B>Funcionalidades</B></DT>
341
<DD>PostgreSQL tem muitas características presentes em muitos <SMALL>SGBD</SMALL>s comerciais como transações, subconsultas, gatilhos, visões, integridade referencial de chave estrangeira e bloqueio (lock) sofisticado. Nós temos algumas funcionalidades que eles não tem, como tipos definidos pelo usuário, herança, regras e controle de concorrência de múltiplas versões para reduzir bloqueios (locks).<BR>
345
<DT><B>Performance</B></DT>
347
<DD>A performance do PostgreSQL é comparável a outros bancos de dados comerciais e de código livre. Ele é mais rápido em algumas coisas, mais lento em outras. Nossa performance é geralmente +/- 10% comparada a de outros bancos de dados.
351
<DT><B>Confiabilidade</B></DT>
353
<DD>Nós sabemos que um <SMALL>SGBD</SMALL> deve ser confiável ou ele é inútil. Nós empenhamos em lançar versões bem testadas, de código estável e que tenha o mínimo de bugs. Cada versão tem no mínimo um mês de teste em versão beta, e nosso histórico de versões mostra que nós podemos fornecer versões estáveis e sólidas que estão prontas para uso em produção. Nós acreditamos que somos comparados a nosso favor com outros sistemas de bancos de dados nessa área.<BR>
357
<DT><B>Suporte</B></DT>
359
<DD>Nossas listas de discussão fornecem contato com um grupo de desenvolvedores e usuários para ajudar a resolver muitos problemas encontrados. Enquanto nós não podemos garantir o conserto, <SMALL>SGBD</SMALL>s comerciais nem sempre fornecem também. Com acesso direto aos desenvolvedores, a comunidade de usuários, manuais e o código fonte faz com que o suporte do PostgreSQL seja superior ao de outros <SMALL>SGBD</SMALL>s. Há suporte comercial por incidente disponíveis para aqueles que precisam de um. (Veja <A href="#item1.7">seção 1.7 da FAQ</A>).<BR>
363
<DT><B>Preço</B></DT>
365
<DD>Nós somos livres para uso dele tanto comercial quanto não comercial. Você pode adicionar nosso código ao seu produto sem limitações, exceto aquelas descritas na nossa licença BSD mencionada acima.<BR>
370
<H3 id="item1.14">1.14) O PostgreSQL gerenciará mudanças no horário devido ao horário de verão em vários países?</H3>
372
<P>Mudanças no horário de verão dos USA foram incluídas nas versões 8.0 .[4+] do PostgreSQL e em todas as versões grandes, i.e. 8.1. Mudanças no Canadá e Austrália Oeste foram incluídas na 8.0.[10+], 8.1.[6+] e em todas as versões grandes subsequentes. Versões do PostgreSQL anteriores a 8.0 utilizam o banco de dados de zona horária do sistema operacional para informações sobre horário de verão.</P>
376
<H2 align="center">Perguntas sobre Clientes</H2>
378
<H3 id="item2.1">2.1) Quais interfaces estão disponíveis para PostgreSQL?</H3>
380
<p>A instalação do PostgreSQL inclui somente as interfaces <SMALL>C</SMALL> e
381
<SMALL>C</SMALL> embutida. Todas as outras interfaces são projetos independentes
382
que podem ser obtidos separadamente; sendo separados permitem que eles tenham
383
suas próprias datas de lançamento e time de desenvolvedores.</P>
385
<P>Algumas linguagens de programaçã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ão disponíveis em
388
<a href="http://www.pgfoundry.org">http://www.pgfoundry.org</A>.
391
<H3 id="item2.2">2.2) Quais ferramentas estão disponíveis para utilizar o PostgreSQL com páginas Web?</H3>
393
<P>Uma boa introdução para páginas web que utilizam bancos de dados pode ser vista em:
394
<A href="http://www.webreview.com">http://www.webreview.com</A></P>
396
<P>Para integração na Web, PHP (<A
397
href="http://www.php.net">http://www.php.net</A>)
398
é uma excelente interface.</P>
400
<P>Para casos complexos, muitos usam a Interface Perl e DBD::Pg com CGI.pm
403
<H3 id="item2.3">2.3) O PostgreSQL tem interfaces gráficas para iteragir com o usuário?</H3>
405
<P>Há um vasto número de Ferramentas Gráficas (GUI), que estão disponíveis
406
para o PostgreSQL, comerciais e de desenvolvedores de código aberto. Uma
407
lista detalhada pode ser encontrada em <A href="http://www.postgresql.org/docs/techdocs.54">
408
Documentação da Comunidade PostgreSQL</A></P>
412
<H2 align="center">Perguntas Administrativas</H2>
414
<H3 id="item3.1">3.1) Como eu instalo o PostgreSQL em um local diferente de <I>/usr/local/pgsql</I>?</H3>
416
<P>Especifique a opção <I>--prefix</I> quando executar o <I>configure</I>.</P>
418
<H3 id="item3.2">3.2) Como eu controlo conexões de outras máquinas?</H3>
420
<P>Por padrão, o PostgreSQL só permite conexões da máquina local utilizando soquetes de domínio Unix ou conexões TCP/IP. Outras máquinas não poderão conectar-se a menos que você modifique <I>listen_addresses</I> no <I>postgresql.conf</I>, habilite a autenticação por máquina modificando o arquivo <I>$PGDATA/pg_hba.conf</I> e reinicie o servidor PostgreSQL.</P>
422
<H3 id="item3.3">3.3) Como eu ajusto o servidor de banco de dados para obter uma performance melhor?</H3>
424
<P>Há três grandes áreas para melhorar a performance em potencial:</P>
427
<DT><B>Mudança de Consultas</B></DT>
429
<DD>Isto involve modificar consultas para obter melhor performance:
431
<li>Criação de índices, incluir expressões e índices parciais</li>
432
<li>Utilização o COPY ao invés de múltiplos comandos <SMALL>INSERT</SMALL>s</li>
433
<li>Agrupamento de múltiplos comandos em uma única transação para diminuir
434
a despesa com efetivações (commit)</li>
435
<li>Utilização do <SMALL>CLUSTER</SMALL> quando recuperar vários registros de
436
um índice</li>
437
<li>Utilização do <SMALL>LIMIT</SMALL> para retornar um subconjunto da saída
439
<li>Utilização de Consultas preparadas</li>
440
<li>Utilização de <SMALL>ANALYZE</SMALL> para manter as estatísticas do
441
otimizador corretas</li>
442
<li>Utilização regular do <SMALL>VACUUM</SMALL> ou <I>pg_autovacuum</I></li>
443
<li>Remoção de índices durante grande mudança de dados</li>
448
<DT><B>Configuração do Servidor</B></DT>
450
<DD>Um grande número de configuraçõ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á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>.
464
<DT><B>Seleção do Hardware</B></DT>
466
<DD>O efeito do hardware na performance é 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>.
476
<H3 id="item3.4">3.4) Quais características de depuração estão disponíveis?</H3>
478
<P>Há muitas variáveis de configuração do servidor <CODE>log_*</CODE>
479
que habilitam a exibição de consultas e estatísticas que podem ser
480
muito úteis para depuração e medidas de performance.</P>
482
<H3 id="item3.5">3.5) Por que eu recebo <I>"Sorry, too many clients"</I> quando eu tento conectar?</H3>
484
<P>Você atingiu o limite padrão de 100 sessões. Você
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>
490
<H3 id="item3.6">3.6) Qual é o processo de atualização do PostgreSQL?</H3>
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ções específicas.</P>
499
<H3 id="item3.7">3.7) Que tipo de hardware eu devo usar?</H3>
501
<P>Por causa do hardware de PC ser em sua maioria compatível, pessoas tendem a acreditar que todos os hardwares de PC são de mesma qualidade. Não é verdade. ECC RAM, SCSI e placas mãe de qualidade são mais confiáveis e têm uma melhor performance do que hardwares mais baratos. O PostgreSQL executará em quase todo hardware, mas se a confiabilidade e a performance forem importantes é prudente pesquisar sobre as opções de hardware. Nossas listas de discussão podem ser usadas para discutir opções de hardware e dilemas.</P>
505
<H2 align="center">Perguntas Operacionais</H2>
507
<H3 id="item4.1">4.1) Como eu faço um <SMALL>SELECT</SMALL> somente dos primeiros registros de uma consulta? Um registro randômico?</H3>
509
<P>Para obter somente alguns registros, se você sabe o número de
510
registros necessários ao executar o <SMALL>SELECT</SMALL> utilize
511
o <SMALL>LIMIT</SMALL>. Se um índice corresponde no <SMALL>ORDER
512
BY</SMALL> é possível que a consulta toda não tenha que ser
513
executada. Se você não sabe o número de registros ao executar o
514
<SMALL>SELECT</SMALL>, utilize um cursor e o <SMALL>FETCH</SMALL>.</P>
516
<P>Para <SMALL>obter</SMALL> um registro randômico, utilize:</P>
524
<H3 id="item4.2">4.2) Como eu descubro quais tabelas, índices, bancos de dados e usuários estão definidos? Como eu vejo as consultas utilizadas pelo <I>psql</I> para mostrá-los?</H3>
526
<P>Utilize o comando \dt para ver tabelas no <I>psql</I>. Para obter
527
uma lista completa dos comandos no psql você pode utilizar \?.
528
Alternativamente, você pode ler o código-fonte do <I>psql</I> no arquivo
529
<I>pgsql/src/bin/psql/describe.c</I>, ele contém os comandos <SMALL>SQL</SMALL>
530
que geram a saída para os comandos de contrabarra do <I>psql</I>. Você
531
também pode iniciar o <I>psql</I> com a opção <I>-E</I> para que as consultas
532
utilizadas para executar os comandos que você informou seja exibida.
533
O PostgreSQL também fornece uma inteface compatível com <SMALL>SQL</SMALL> do
534
INFORMATION SCHEMA que você pode consultar para obter informação sobre o
537
<P>Há também tabelas do sistema que começam com <I>pg_</I> que os descrevem
540
<P>Utilizando o <I>psql -l</I> listará todos os bancos de dados.</P>
542
<P>Veja também o arquivo <I>pgsql/src/tutorial/syscat.source</I>. Ele
543
ilustra muitos dos comandos <SMALL>SELECT</SMALL>s necessários para obter
544
informação das tabelas de sistema do banco de dados.</P>
546
<H3 id="item4.3">4.3) Como você muda o tipo de dado de uma coluna?</H3>
548
<P>Mudar o tipo de dado de uma coluna pode ser feito facilmente na versão 8.0
549
ou superior com <SMALL>ALTER TABLE ALTER COLUMN TYPE</SMALL>.</P>
551
<P>Em versões anteriores, faça isso:</P>
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;
559
<P>Você pode então querer fazer um <I>VACUUM FULL tab</I> para recuperar
560
o espaço em disco utilizado pelos registros expirados.</P>
562
<H3 id="item4.4">4.4) Qual é o tamanho máximo de um registro, uma tabela e um banco de dados?</H3>
564
<P>Estes são os limites:</P>
567
<TR><TD>Tamanho máximo de um banco de dados?</TD><TD>ilimitado (existem bancos de dados de 32 TB)</TD></TR>
568
<TR><TD>Tamanho máximo de uma tabela?</TD><TD>32 TB</TD></TR>
569
<TR><TD>Tamanho máximo de um registro?</TD><TD>400 GB</TD></TR>
570
<TR><TD>Tamanho máximo de um campo?</TD><TD>1 GB</TD></TR>
571
<TR><TD>Número máximo de registros em uma tabela?</TD><TD>ilimitado</TD></TR>
572
<TR><TD>Número máximo de colunas em uma tabela?</TD><TD>250-1600 dependendo dos tipos das colunas</TD></TR>
573
<TR><TD>Número máximo de índices em uma tabela?</TD><TD>ilimitado</TD></TR>
577
<P>É claro, que eles não são ilimitados, mas limitados
578
ao espaço em disco disponível e espaço em memória/swap.
579
A Performance será penalizada quando estes valores se tornarem grandes.</P>
581
<P>O tamanho máximo de uma tabela com 32 TB não requer suporte a
582
arquivos grandes do sistema operacional. Tabelas grandes são armazenadas
583
como múltiplos arquivos de 1 GB então o limite do sistema de
584
arquivos não é importante.</P>
586
<P>O tamanho máximo de uma tabela, o tamanho de um registro e o número
587
máximo de colunas podem ser quadruplicados aumentando-se o tamanho padrão
588
do bloco para 32k. O tamanho máximo de uma tabela pode também ser aumentado utilizando
589
particionamento de tabela.</P>
591
<P>Uma limitação é que índices não podem ser criados em colunas maiores do que
592
2.000 caracteres. Felizmente, tais índices são raramente necessários. Unicidade é
593
melhor garantida por um índice de uma função de um hash MD5 de uma coluna longa, e
594
indexação de texto longo permite a busca de palavras dentro da coluna.</P>
596
<H3 id="item4.5">4.5) Quanto espaço em disco é necessário para armazenar dados de um arquivo texto?</H3>
598
<P>Um banco de dados PostgreSQL irá requerer até cinco vezes a quantidade de espaço requerida para armazenar dados em um arquivo texto.</P>
600
<P>Como um exemplo, considere um arquivo com 100.000 linhas contendo um inteiro e uma descrição em cada linha. Suponha que o tamanho médio da descrição é de vinte bytes. O arquivo terá 2,8 MB. O tamanho do arquivo do banco de dados PostgreSQL que contém esses dados pode ser estimado em 5,2 MB:</P>
602
24 bytes: cada cabeçalho de registro (aproximadamente)
603
24 bytes: um campo int e um campo texto
604
+ 4 bytes: ponteiro na página para a tupla
605
-------------------------------------------
606
52 bytes por registro
608
O tamanho de uma página de dados no PostgreSQL é 8192 bytes (8 KB), então:
610
8192 bytes por página
611
------------------------ = 158 registros por página do banco de dados (arredondado para baixo)
612
52 bytes por registro
614
100000 registros de dados
615
---------------------------- = 633 páginas do banco de dados (arredondado para cima)
616
158 registros por página
618
633 páginas do banco de dados * 8192 bytes por página = 5.185.536 bytes (5,2 MB)
621
<P>Índices não requerem muito espaço, mas contém
622
dados que foram indexados, então eles podem ocupar algum espaço.</P>
624
<P><SMALL>NULL</SMALL>s são armazenados como bitmaps, então eles
625
utilizam muito pouco espaço.</P>
627
<H3 id="item4.6">4.6) Por que minhas consultas estão lentas? Por que elas não estão utilizando meus índices?</H3>
629
<P>Índices não são utilizados por toda consulta. Índices são utilizados somente
630
se a tabela é maior do que um tamanho mínimo, e a consulta seleciona somente uma
631
pequena porcentagem dos registros da tabela. Isto porque o acesso randô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>
635
<P>Para determinar se um índice deveria ser utilizado, o PostgreSQL deve ter
636
estatísticas sobre a tabela. Estas estatísticas são coletadas utilizando o
637
<SMALL>VACUUM ANALYZE</SMALL> ou simplesmente o <SMALL>ANALYZE</SMALL>.
638
Utilizando estatísticas, o otimizador sbae quantos registros estão na tabela,
639
e pode melhor determinar se índices deveriam ser utilizados.
640
Estatísticas também são úteis para determinar a ordem de junção ótima e métodos
641
de junção. Coleção de estatísticas deveriam ser feitas periodicamente a
642
medida que o conteúdo da tabela muda.</P>
644
<P>Índices não são normalmente utilizados para <SMALL>ORDER BY</SMALL> ou para
645
fazer junções. Uma busca sequencial seguido por uma ordenação explícita é
646
geralmente mais rápida do que uma busca indexada em uma tabela grande.
647
Contudo, <SMALL>LIMIT</SMALL> combinado com <SMALL>ORDER BY</SMALL>
648
frequentemente utilizará índice porque somente uma pequena porção da tabela
649
será retornada.</P>
651
<P>Se você acredita que o otimizador está 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 é realmente mais rápida.</P>
655
<P>Ao utilizar operadores curinga tais como <SMALL>LIKE</SMALL> ou <I>~</I>,
656
índices podem ser utilizados somente em algumas condições:</P>
658
<LI>O início da cadeia de caracteres da busca deve ser iniciar com uma
659
cadeia de caracteres, i.e.
661
<LI>modelos <SMALL>LIKE</SMALL> não devem iniciar com <I>%</I>.</LI>
662
<LI>modelos <I>~</I> (expressões regulares) devem iniciar com <I>^</I>.</LI>
664
<LI>A cadeia de caracteres utilizada na busca não pode iniciar com a classe de
665
caracteres e.g. [a-e].</LI>
666
<LI>Busca que não diferenciam maiúsculas de minúsculas tais como <SMALL>ILIKE</SMALL> e
667
<I>~*</I> não utilizam índices. Em vez disso, utilize índice de expressão, que
668
é descrito na seção <a href="#item4.8">4.8</a>.</LI>
669
<LI>O idioma padrão <I>C</I> deve ser usando durante o <i>initdb</i>
670
porque não é possível saber o próximo caracter em idiomas que não sejam o C.
671
Você pode criar um índice especial <CODE>text_pattern_ops</CODE> para tais casos
672
que funcionam somente para indexação com <SMALL>LIKE</SMALL>. Também é
673
possível utilizar indexação de busca textual para buscas por palavras.
677
<P>Em versões anteriores a 8.0, índices frequentemente não podem ser utilizados
678
a menos que os tipos de dados correspondam aos tipos de coluna do índice. Isto era
679
particularmente verdadeiro para índices de coluna int2, int8 e numeric.</P>
681
<H3 id="item4.7">4.7) Como eu vejo como o otimizador de consulta está avaliando a minha consulta?</H3>
683
<P>Veja o comando <SMALL>EXPLAIN</SMALL> no manual.</P>
685
<H3 id="item4.8">4.8) Como eu faço buscas com expressões regulares
686
e buscas com expressões regulares sem diferenciar maiúsculas de minúsculas? Como eu
687
utilizo um índice para buscas que não diferenciam maiúsculas de minúsculas?</H3>
689
<P>O operador <I>~</I> faz avaliação de expressões regulares,
690
e <I>~*</I> faz avaliação não sensível a maiúsculas
691
de expressões regulares. A variante não sensível a maiúsculas
692
do <SMALL>LIKE</SMALL> é chamada de <SMALL>ILIKE</SMALL>.</P>
694
<P>Comparações de igualdade não sensíveis a maiúsculas
695
são normalmente expressadas como:</P>
699
WHERE lower(col) = 'abc';
701
Isso não irá utilizar o índice padrão. Contudo, se
702
você criar um índice de expressão, ele será utilizado:
704
CREATE INDEX tabindex ON tab (lower(col));
706
<P>Se o índice acima é criado como <SMALL>UNIQUE</SMALL>, embora a
707
coluna possa armazenar caracteres maiúsculos e minúsculos, ele não
708
pode ter valores idênticos que diferem apenas em letras maiúsculas e minúsculas.
709
Para forçar uma letra maiúscula ou minúscula a ser armazenada na coluna, utilize
710
uma restrição <SMALL>CHECK</SMALL> ou um gatilho.</P>
712
<H3 id="item4.9">4.9) Em uma consulta, como eu detecto se um campo é <SMALL>NULL</SMALL>? Como eu posso concatenar possíveis <SMALL>NULL</SMALL>s? Como eu posso ordenar por um campo que é <SMALL>NULL</SMALL> ou não?</H3>
714
<P>Você testa a coluna com <SMALL>IS NULL</SMALL> e <SMALL>IS
715
NOT NULL</SMALL>, como a seguir:</P>
723
<P>Para concatenar com possíveis <SMALL>NULL</SMALL>s, utilize <I>COALESCE()</I>, assim:</P>
725
SELECT COALESCE(col1, '') || COALESCE(col2, '')
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áusula
731
<SMALL>ORDER BY</SMALL>. Coisas que são <I>verdadeiro</I> serão ordenadas acima
732
das coisas que são <I>falso</I>, então a consulta a seguir irá colocar
733
entradas NULL no início da lista de resultados:</P>
738
ORDER BY (col IS NOT NULL)
741
<H3 id="item4.10">4.10) Qual é a diferença entre os vários tipos de dado de caracteres?</H3>
744
<TR><TH>Tipo</TH><TH>Nome Interno</TH><TH>Observação</TH></TR>
745
<TR><TD>VARCHAR(n)</TD><TD>varchar</TD><TD>tamanho especifica o tamanho
746
máximo, sem preenchimento</TD></TR>
747
<TR><TD>CHAR(n)</TD><TD>bpchar</TD><TD>preenchimento em branco para
748
comprimento fixo específico</TD></TR>
749
<TR><TD>TEXT</TD><TD>text</TD><TD>nenhum limite superior específico no
750
comprimento</TD></TR>
751
<TR><TD>BYTEA</TD><TD>bytea</TD><TD>vetor de bytes de comprimento variável
752
(seguro a byte nulo)</TD></TR>
753
<TR><TD>"char"</TD><TD>char</TD><TD>um caracter</TD></TR>
757
<P>Você verá o nome interno quando examinar o catálogo do sistema e em algumas mensagens de erro.</P>
759
<P>Os primeiros quatro tipos acima são do tipo "varlena" (i.e., os primeiros quatro bytes no disco são o comprimento seguido pelos dados). Consequentemente o espaço atual utilizado é ligeiramente maior do que o tamanho declarado. Contudo, valores longos são também sujeitos a compressão, então o espaço em disco pode também ser bem menor do que o esperado.</P>
761
<SMALL>VARCHAR(n)</SMALL> é melhor quando está armazenando cadeias de caracteres de comprimento variável e há um limite de tamanho desta cadeia. <SMALL>TEXT</SMALL> é para cadeias de caracteres de comprimento ilimitado, com o máximo de um gigabyte.
762
<P><SMALL>CHAR(n)</SMALL> é para armazenar cadeias de caracteres que são todas do mesmo tamanho. <SMALL>CHAR(n)</SMALL> preenche com espaços em branco até o tamanho especificado, enquanto o <SMALL>VARCHAR(n)</SMALL> armazena somente os caracteres fornecidos. <SMALL>BYTEA</SMALL> é para armazenar dados binários, particularmente valores que incluem bytes <SMALL>NULL</SMALL>. Todos os tipos descritos aqui tem características de performance similares.</P>
764
<H3 id="item4.11.1">4.11.1) Como eu crio um campo serial/auto incremento?</H3>
766
<P>PostgreSQL suporta o tipo de dados <SMALL>SERIAL</SMALL>. Ele cria
767
automaticamente uma sequência. Por exemplo:</P>
769
CREATE TABLE pessoa (
775
é automaticamente traduzido em:
777
CREATE SEQUENCE pessoa_id_seq;
778
CREATE TABLE pessoa (
779
id INT4 NOT NULL DEFAULT nextval('pessoa_id_seq'),
784
<P>Sequências automaticamente criadas são nomeadas como
785
<<i>tabela</i>>_<<i>colunaserial</i>>_<i>seq</i>, onde
786
<i>tabela</i> e <i>colunaserial</i> são os nomes da tabela e
787
da coluna serial, respectivamente. Veja a página sobre
788
<I>create_sequence</I> no manual para obter informações
789
adicionais sobre sequências.
791
<H3 id="item4.11.2">4.11.2) Como eu consigo o valor de um campo
792
<SMALL>SERIAL</SMALL>?</H3>
794
<P>A maneira mais simples de obter o próximo valor <SMALL>SERIAL</SMALL>
795
de uma sequência é com <SMALL>RETURNING</SMALL>. Utilizando o
796
exemplo da tabela em <A href="#item4.11.1">4.11.1</A>, ele ficaria assim:
799
INSERT INTO pessoa (nome) VALUES ('Blaise Pascal') RETURNING id;
802
Você também pode chamar <I>nextval()</I> e utilizar o valor no
803
<SMALL>INSERT</SMALL> ou chamar <I>currval()</I> <I>após</I> o
804
<SMALL>INSERT</SMALL>.
806
<H3 id="item4.11.3">4.11.3) <I>currval()</I> não lida com condição de corrida com outros usuários?</H3>
808
<P>Não. <I>currval()</I> retorna o valor atual atribuido pela sua sessão, e não por todas as sessões.</P>
810
<H3 id="item4.11.4">4.11.4) Por que os números da minha sequência não são reutilizados quando uma transação é abortada? Por que há intervalos nos números da minha sequência/coluna SERIAL?</H3>
812
<P>Para melhorar a concorrência, valores da sequência são atribuídos a transações correntes e não são travados até que a transação seja finalizada. Isso causa intervalos na numeração por causa de transações abortadas.</P>
814
<H3 id="item4.12">4.12) O que é um <SMALL>OID</SMALL>? O que é um <SMALL>CTID</SMALL>?</H3>
816
<P>Se uma tabela é criada com <SMALL>WITH OIDS</SMALL>, cada registro recebe um <SMALL>OID</SMALL> único.
817
O<SMALL>ID</SMALL>s são automaticamente atribuídos como inteiros de 4 bytes
818
que são únicos ao longo de toda instalação. Contudo, eles são limitados em
819
4 bilhões e, então, os O<SMALL>ID</SMALL>s começam a ser duplicados. O PostgreSQL
820
utiliza <SMALL>OID</SMALL>s para ligar as tabelas do sistema.</P>
822
<P>Para numerar registros nas tabelas do usuários, é melhor utilizar
823
<SMALL>SERIAL</SMALL> ao invés de O<SMALL>ID</SMALL>s porque
824
sequências <SMALL>SERIAL</SMALL> são únicas somente em uma tabela; e
825
são menos propícias a atingir o limite.
826
<SMALL>SERIAL8</SMALL> está disponível para armazenar valores de sequências
829
<P>C<SMALL>TID</SMALL>s são utilizados para identificar registros físicos
830
específicos com valores de block e deslocamento. C<SMALL>TID</SMALL>s mudam
831
após registros serem modificados ou recarregados. Eles são utilizados por
832
índices para apontar registros físicos.</P>
834
<H3 id="item4.13">4.13) Por que eu recebo o erro <I>"ERROR: Memory exhausted in AllocSetAlloc()"</I>?</H3>
836
<P>Você provavelmente está sem memória virtual no seu sistema, ou o seu núcleo (kernel) tem um limite baixo para certos recursos. Tente isto antes de iniciar o servidor PostgreSQL:</P>
842
Dependendo da sua shell, somente um desses comando terá sucesso, mas ele definirá o segmento de dados do seu processo com um limite maior e talvez permita que a consulta seja feita. Este comando é aplicado ao processo atual e todos os subprocessos criados depois do comando ser executado. Se você tiver problemas com o cliente <SMALL>SQL</SMALL> porque o processo servidor retornou muitos dados, tente-o antes de iniciar o cliente.
844
<H3 id="item4.14">4.14) Como eu informo qual versão do PostgreSQL eu estou utilizando?</H3>
846
<P>No <I>psql</I>, digite <CODE>SELECT version();</CODE></P>
848
<H3 id="item4.15">4.15) Como eu crio uma coluna que conterá por padrão a hora atual?</H3>
850
<P>Utilize <I>CURRENT_TIMESTAMP</I>:</P>
852
CREATE TABLE teste (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
855
<H3 id="item4.16">4.16) Como eu faço uma junção externa (outer join)?</H3>
857
<P>PostgreSQL suporta junções externas utilizando a sintaxe padrão do SQL. Aqui temos dois exemplos:</P>
860
FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
865
FROM t1 LEFT OUTER JOIN t2 USING (col);
868
<P>Essas duas consultas indênticas juntam t1.col com t2.col, e também
869
retornam qualquer registro que não foi juntado em t1 (aqueles que não
870
combinaram com t2). Uma junção a direita <SMALL>RIGHT</SMALL>
871
adicionaria registros que não foram juntados da tabela t2.
872
Uma junção completa (<SMALL>FULL</SMALL>) retornaria os registros
873
combinados mais todos os registros não combinados de t1 e t2.
874
A palavra <SMALL>OUTER</SMALL> é opcional e é assumida nas
875
junções <SMALL>LEFT</SMALL>, <SMALL>RIGHT</SMALL> e <SMALL>FULL</SMALL>.
876
Junções ordinárias são chamadas junções
877
internas (<SMALL>INNER</SMALL>).</P>
879
<H3 id="item4.17">4.17) Como eu faço consultas utilizando múltiplos bancos de dados?</H3>
881
<P>Não há outra maneira de consultar um banco de dados caso ele
882
não seja o atual. Porque o PostgreSQL carrega catálogos do sistema
883
específicos do banco de dados, é incerto como uma consulta em banco
884
de dados distintos pode se comportar.</P>
886
<P><I>contrib/dblink</I> permite consultas em bancos de dados distintos utilizando
887
chamadas de funções. É claro, que um cliente pode fazer
888
conexões simultâneas em bancos de dados diferentes e juntar os
889
resultados no cliente.</P>
891
<H3 id="item4.18">4.18) Como eu retorno múltiplos registros ou colunas de uma função?</H3>
893
<P>É fácil utilizando funções que retornam conjunto,
894
<a href="http://www.postgresql.org/docs/techdocs.17">
895
http://www.postgresql.org/docs/techdocs.17</a>.</P>
897
<H3 id="item4.19">4.19) Por que eu obtenho erros "relation with OID ######
898
does not exist" ao acessar tabelas temporárias em funções PL/PgSQL?</H3>
900
<P>Em versões do PostgreSQL < 8.3, PL/PgSQL armazena o conteúdo da função, e o efeito indesejado é que se uma função PL/PgSQL acessa uma tabela temporária, e aquela tabela é removida e criada novamente, e a função é chamada novamente, a função irá falhar porque o conteúdo armazenado da função ainda apontará para a tabela temporária antiga. A solução é utilizar o <SMALL>EXECUTE</SMALL> para acesso a tabelas temporárias no PL/PgSQL. Isto irá fazer com que a consulta seja avaliada toda vez.</P>
902
<P>Este problema não ocorre no PostgreSQL 8.3 ou superior.</P>
904
<H3 id="item4.20">4.20) Quais soluções de replicação estão disponíveis?</H3>
906
<P>Embora "replicação" seja um termo simples, há várias tecnologias para fazer
907
replicação, com vantagens e desvantagens para cada um.</P>
909
<P>Replicação mestre/escravo permite que um mestre receba consultas de leitura e
910
escrita, enquanto os escravos só podem aceitar leitura/consultas <SMALL>SELECT</SMALL>.
911
A solução mais popular de replicação mestre-escravo para PostgreSQL disponível livremente
912
é <A href="http://main.slony.info">Slony-I</A>.</P>
914
<P>Replicação com múltiplos mestres permite que consultas leitura/escrita sejam
915
enviadas para múltiplos computadores replicadores. Esta capacidade também tem
916
um sério impacto na performance por causa da necessidade de sincronizar as mudanças
917
entre os servidores. <A href="http://pgfoundry.org/projects/pgcluster/">PGCluster</a>
918
é a solução mais popular disponível livremente para PostgreSQL.</P>
920
<P>Há também soluções de replicação comerciais e baseadas em hardware disponíveis
921
que suportam uma variedade de modelos de replicação.</P>
923
<H3 id="item4.21">4.21) Por que os nomes de minhas tabelas e colunas não
924
são reconhecidos em minha consulta? Por que as maiúsculas não são preservadas?</H3>
926
<P>A causa mais comum de nomes desconhecidos é o uso de aspas ao redor dos nomes da tabela ou coluna
927
durante a criação da tabela. Ao utilizar aspas, nomes de tabela e coluna
928
(chamados de identificadores) sã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ê deve utilizar aspas quando se
931
referir aos nomes na consulta. Algumas interfaces, como pgAdmin,
932
automaticamente colocam aspas nos identificadores durante a criação da tabela.
933
Então, para identificadores serem reconhecidos, você deve:
935
<LI>Evitar colocar aspas no identificador ao criar tabelas</LI>
936
<LI>Utilizar somente caracteres minúsculos em identificadores</LI>
937
<LI>Colocar aspas em identificadores ao referenciá-los nas consultas</LI>