FAQ_brazilian.html 56.7 KB
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
  <HEAD>
    <META name="generator" content="HTML Tidy, see www.w3.org">
    <META http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <TITLE>FAQ do PostgreSQL</TITLE>
  </HEAD>

  <BODY bgcolor="#ffffff" text="#000000" link="#ff0000" vlink="#a00000"
  alink="#0000ff">
    <H1>Perguntas Frequentes (FAQ) sobre PostgreSQL</H1>

    <P>&Uacute;ltima atualiza&ccedil;&atilde;o: Qui Set 27 02:14:24 EDT 2007</P>

    <P>Mantenedor atual: Bruce Momjian (<A href=
    "mailto:bruce@momjian.us">bruce@momjian.us</A>)
    </P>

    <P>Traduzido por: Euler Taveira de Oliveira (<A href=
    "mailto:euler@timbira.com">euler@timbira.com</A>)</P>

    <P>A vers&atilde;o mais recente desse documento pode ser vista em <A href=
    "http://www.postgresql.org/files/documentation/faqs/FAQ.html">
    http://www.postgresql.org/files/documentation/faqs/FAQ.html</A> (EN).<BR>
    <A href="http://www.postgresql.org/files/documentation/faqs/FAQ_brazilian.html">
    http://www.postgresql.org/files/documentation/faqs/FAQ_brazilian.html</A> (pt_BR).</P>

     <P>Perguntas sobre plataformas espec&iacute;ficas s&atilde;o respondidas em <A href=
    "http://www.postgresql.org/docs/faq/">http://www.postgresql.org/docs/faq/</A>.</P>
    <HR>

    <H2 align="center">Perguntas Gerais</H2>
     <A href="#item1.1">1.1</A>) O que &eacute; PostgreSQL? Como ele &eacute; pronunciado?<BR>
     <A href="#item1.2">1.2</A>) Quem controla o PostgreSQL?<BR>
     <A href="#item1.3">1.3</A>) Qual &eacute; a licen&ccedil;a do PostgreSQL?<BR>
     <A href="#item1.4">1.4</A>) Quais plataformas o PostgreSQL pode ser executado?<BR>
     <A href="#item1.5">1.5</A>) Onde eu posso conseguir o PostgreSQL?<BR>
     <A href="#item1.6">1.6</A>) Qual &eacute; a &uacute;ltima vers&atilde;o?<BR>
     <A href="#item1.7">1.7</A>) Onde eu posso conseguir suporte?<BR>
	 <A href="#item1.8">1.8</A>) Como eu posso submeter um relato de um bug?<BR>
     <A href="#item1.9">1.9</A>) Como eu posso saber quais s&atilde;o os bugs conhecidos ou caracter&iacute;sticas ausentes?<BR>
     <A href="#item1.10">1.10</A>) Que documenta&ccedil;&atilde;o est&aacute; dispon&iacute;vel?<BR>
     <A href="#item1.11">1.11</A>) Como eu posso aprender <SMALL>SQL</SMALL>?<BR>
     <A href="#item1.12">1.12</A>) Como posso submeter uma corre&ccedil;&atilde;o (patch) ou me juntar a equipe de desenvolvimento?<BR>
     <A href="#item1.13">1.13</A>) Como &eacute; o PostgreSQL comparado a outros <SMALL>SGBD</SMALL>s?<BR>
		 <A href="#item1.14">1.14</A>) O PostgreSQL gerenciará as mudan&ccedil;as de hor&aacute;rio devido ao hor&aacute;rio de ver&atilde;o em v&aacute;rios pa&iacute;ses?<BR>
     

     <H2 align="center">Perguntas sobre Clientes</H2>
	 <A href="#item2.1">2.1</A>) Quais interfaces est&atilde;o dispon&iacute;veis para PostgreSQL?<BR>
     <A href="#item2.2">2.2</A>) Quais ferramentas est&atilde;o dispon&iacute;veis para utilizar o PostgreSQL com p&aacute;ginas Web?<BR>
     <A href="#item2.3">2.3</A>) O PostgreSQL tem interfaces gr&aacute;ficas para interagir com usu&aacute;rio?<BR>
     

    <H2 align="center">Perguntas Administrativas</H2>
    <A href="#item3.1">3.1</A>) Como eu instalo o PostgreSQL em um local diferente de <I>/usr/local/pgsql</I>?<BR>
	<A href="#item3.2">3.2</A>) Como eu controlo conex&otilde;es de outras m&aacute;quinas?<BR>
    <A href="#item3.3">3.3</A>) Como eu ajusto o servidor de banco de dados para obter uma performance melhor?<BR>
    <A href="#item3.4">3.4</A>) Quais caracter&iacute;sticas de depura&ccedil;&atilde;o est&atilde;o dispon&iacute;veis?<BR>
    <A href="#item3.5">3.5</A>) Por que eu recebo <I>"Sorry, too many clients"</I> quando eu tento conectar?<BR>
    <A href="#item3.6">3.6</A>) Qual &eacute; o processo de atualiza&ccedil;&atilde;o do PostgreSQL?<BR>
    <A href="#item3.7">3.7</A>) Que tipo de hardware eu devo usar?<BR>


     <H2 align="center">Perguntas Operacionais</H2>
     <A href="#item4.1">4.1</A>) Como eu fa&ccedil;o um <SMALL>SELECT</SMALL> somente dos primeiros registros de uma consulta? Um registro rand&ocirc;mico?<BR>
	 <A href="#item4.2">4.2</A>) Como eu descubro quais tabelas, &iacute;ndices, bancos de dados e usu&aacute;rios est&atilde;o definidos? Como eu vejo as consultas utilizadas pelo <I>psql</I> para mostr&aacute;-los?<BR>
     <A href="#item4.3">4.3</A>) Como voc&ecirc; muda o tipo de dado de uma coluna?<BR>
     <A href="#item4.4">4.4</A>) Qual &eacute; o tamanho m&aacute;ximo de um registro, uma tabela e um banco de dados?<BR>
     <A href="#item4.5">4.5</A>) Quanto espa&ccedil;o em disco &eacute; necess&aacute;rio para armazenar dados de um arquivo texto?<BR>
     <A href="#item4.6">4.6</A>) Por que minhas consultas est&atilde;o lentas? Por que elas n&atilde;o est&atilde;o utilizando meus &iacute;ndices?<BR>
     <A href="#item4.7">4.7</A>) Como eu vejo como o otimizador de consultas est&aacute; avaliando minha consulta?<BR>
	 <A href="#item4.8">4.8</A>) Como eu fa&ccedil;o buscas com express&otilde;es regulares e buscas com express&otilde;es regulares sem diferenciar mau&uacute;sculas de min&uacute;sculas? Como eu utilizo um &iacute;ndice para buscas sem distinguir mai&uacute;sculas de min&uacute;sculas?<BR>
	 <A href="#item4.9">4.9</A>) Em uma consulta, como eu detecto se um campo &eacute; <SMALL>NULL</SMALL>? Como eu posso concatenar poss&iacute;veis <SMALL>NULL</SMALL>s? Como eu posso ordenar por um campo que &eacute; <SMALL>NULL</SMALL> ou n&atilde;o?<BR>
    <A href="#item4.10">4.10</A>) Qual &eacute; a diferen&ccedil;a entre os v&aacute;rios tipos de dado de caracteres?<BR>
	<A href="#item4.11.1">4.11.1</A>) Como eu crio um campo serial/auto incremento?<BR>
    <A href="#item4.11.2">4.11.2</A>) Como eu consigo o valor de um campo
    <SMALL>SERIAL</SMALL>?<BR>
    <A href="#item4.11.3">4.11.3</A>) <I>currval()</I> n&atilde;o lida com condi&ccedil;&atilde;o de corrida com outros usu&aacute;rios?<BR>
    <A href="#item4.11.4">4.11.4</A>) Por que os n&uacute;meros da minha sequ&ecirc;ncia n&atilde;o s&atilde;o reutilizados quando uma transa&ccedil;&atilde;o &eacute; abortada? Por que h&aacute; intervalos nos n&uacute;meros da minha sequ&ecirc;ncia/coluna SERIAL?<BR>
    <A href="#item4.12">4.12</A>) O que &eacute; um <SMALL>OID</SMALL>? O que &eacute; um <SMALL>CTID</SMALL>?<BR>
    <A href="#item4.13">4.13</A>) Por que eu recebo o erro <I>"ERROR: Memory exhausted in AllocSetAlloc()"</I>?<BR>
    <A href="#item4.14">4.14</A>) Como eu informo qual vers&atilde;o do PostgreSQL eu estou utilizando?<BR>
    <A href="#item4.15">4.15</A>) Como eu crio uma coluna que conter&aacute; por padr&atilde;o a hora atual?<BR>
    <A href="#item4.16">4.16</A>) Como eu fa&ccedil;o uma jun&ccedil;&atilde;o externa (outer join)?<BR>
    <A href="#item4.17">4.17</A>) Como eu fa&ccedil;o consultas utilizando m&uacute;ltiplos bancos de dados?<BR>
    <A href="#item4.18">4.18</A>) Como eu retorno m&uacute;ltiplos registros ou colunas de uma fun&ccedil;&atilde;o?<BR>
	<A href="#item4.19">4.19</A>) Por que eu obtenho erros "relation with OID ######
	does not exist" ao acessar tabelas tempor&aacute;rias em fun&ccedil;&otilde;es PL/PgSQL?<BR>
    <A href="#item4.20">4.20</A>) Quais solu&ccedil;&otilde;es de replica&ccedil;&atilde;o est&atilde;o dispon&iacute;veis?<BR>
	<A href="#item4.21">4.21</A>) Por que os nomes de minhas tabelas e colunas n&atilde;o
	s&atilde;o reconhecidos em minha consulta? Por que as mai&uacute;sculas n&atilde;o s&atilde;o preservadas?<BR>
     

    <HR>

    <H2 align="center">Perguntas Gerais</H2>

    <H3 id="item1.1">1.1) O que &eacute; PostgreSQL? Como ele &eacute; pronunciado?</H3>

		<P>PostgreSQL &eacute; pronunciado <I>Post-Gres-Q-L</I>, mas tamb&eacute;m pode ser referido apenas como <I>Postgres</I> principalmente em conversa&ccedil;&otilde;es.
	(Para os curiosos que querem saber como se diz "PostgreSQL", um
	<a href="http://www.postgresql.org/files/postgresql.mp3">arquivo de &aacute;udio</a> est&aacute; dispon&iacute;vel).</P>

	<P>O PostgreSQL &eacute; um sistema de banco de dados objeto-relacional que tem as
	caracter&iacute;sticas de sistemas de bancos de dados comerciais tradicionais com
	melhoramentos encontrados nos sistemas <SMALL>SGBD</SMALL>s de pr&oacute;xima gera&ccedil;&atilde;o.
	PostgreSQL &eacute; livre e o c&oacute;digo-fonte completo est&aacute; dispon&iacute;vel.</P>

	<P>O desenvolvimento do PostgreSQL &eacute; feito por um grupo de desenvolvedores
	volunt&aacute;rios (na sua maioria) espalhados pelo mundo e que se comunicam via
	Internet. &Eacute; um projeto da comunidade e n&atilde;o &eacute; controlado por nenhuma
	empresa. Para se envolver, veja a FAQ do desenvolvedor em <A href=
	"http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html">
	http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html</A>
	</P>

	<H3 id="item1.2">1.2) Quem controla o PostgreSQL?<BR></H3>

	<P>Se voc&ecirc; est&aacute; procurando por um mantenedor, comit&ecirc; central ou empresa
	controladora do PostgreSQL, desista --- n&atilde;o h&aacute; um(a). N&oacute;s temos um
	comit&ecirc; core e committers CVS, mas estes grupos s&atilde;o mais para quest&otilde;es
	administrativas do que controle. O projeto &eacute; direcionado pela comunidade
	de desenvolvedores e usu&aacute;rios, que qualquer um pode se juntar. Tudo o que
	voc&ecirc; precisa &eacute; se inscrever nas listas de discuss&atilde;o e participar das
	discuss&otilde;es. Veja a <a href="http://www.postgresql.org/docs/faqs.FAQ_DEV.html">
	FAQ do desenvolvedor</A> para obter informa&ccedil;&otilde;es como se envolver com o
	desenvolvimento do Postgres.</P>

    <H3 id="item1.3">1.3) Qual &eacute; a licen&ccedil;a do PostgreSQL?</H3>

	<P>O PostgreSQL &eacute; distribu&iacute;do sob a licen&ccedil;a BSD cl&aacute;ssica. Basicamente,
	ela permite que usu&aacute;rios fa&ccedil;am qualquer coisa com o c&oacute;digo, incluindo
	revender os bin&aacute;rios sem o c&oacute;digo-fonte. A &uacute;nica restri&ccedil;&atilde;o &eacute; que voc&ecirc;
	n&atilde;o nos responsabilize legalmente por problemas com o programa de computador.
	H&aacute; tamb&eacute;m a exig&ecirc;ncia de que esta licen&ccedil;a apare&ccedil;a em todas as c&oacute;pias
	do programa de computador. Aqui est&aacute; a licen&ccedil;a BSD que usamos atualmente:</P>
    <P>PostgreSQL est&aacute; sujeito a seguinte licen&ccedil;a:</P>

    <P>PostgreSQL Data Base Management System</P>

    <P>Portions Copyright (c) 1996-2007, PostgreSQL Global Development Group
    Portions Copyright (c) 1994-1996 Regents of the University of California</P>

    <P>Permission to use, copy, modify, and distribute this software
    and its documentation for any purpose, without fee, and without a
    written agreement is hereby granted, provided that the above
    copyright notice and this paragraph and the following two
    paragraphs appear in all copies.</P>

    <P>IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY
    PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL
    DAMAGES, INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS
    SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
    CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</P>

    <P>THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY
    WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
    OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE
    SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE
    UNIVERSITY OF CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE,
    SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.</P>

    <H3 id="item1.4">1.4) Quais plataformas o PostgreSQL pode ser executado?</H3>

    <P>Em geral, qualquer plataforma moderna compat&iacute;vel com Unix deve ser capaz de executar o PostgreSQL. As plataformas que foram testadas antes do lan&ccedil;amento de uma vers&atilde;o s&atilde;o listadas nas instru&ccedil;&otilde;es de instala&ccedil;&atilde;o.</P>

	<P>O PostgreSQL tamb&eacute;m executa nativamente nos sistemas operacionais Microsoft Windows
	baseados no NT tais como Win200 SP4, WinXP e Win2003. Um instalador pr&eacute;-empacotado est&aacute;
	dispon&iacute;vel em <a href= "http://pgfoundry.org/projects/pginstaller">
	http://pgfoundry.org/projects/pginstaller</a>. Vers&otilde;es do Windows baseadas no MS-DOS
	(Win95, Win98, WinMe) podem executar o Postgres utilizando o Cygwin.</P>

	<p>H&aacute; tamb&eacute;m uma vers&atilde;o para o Novell Netware 6 em
	<a href="http://forge.novell.com">http://forge.novell.com</a>
	e uma vers&atilde;o para OS/2 (eComStation) em <a href=
	"http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&amp;button=Search&amp;key=postgreSQL&amp;stype=all&amp;sort=type&amp;dir=%2F">
	http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&amp;button=Search&amp;key=postgreSQL&amp;stype=all&amp;sort=type&amp;dir=%2F</a>.</p>

    <H3 id="item1.5">1.5) Onde eu posso conseguir o PostgreSQL?</H3>

	<P>Via navegador web, utilize <a href="http://www.postgresql.org/ftp/">
	http://www.postgresql.org/ftp/</a> e via ftp, utilize
	<A href="ftp://ftp.postgresql.org/pub/">
	ftp://ftp.postgresql.org/pub/</A>.</P>


    <H3 id="item1.6">1.6) Qual &eacute; a &uacute;ltima vers&atilde;o?</H3>

    <P>A &uacute;ltima vers&atilde;o do PostgreSQL &eacute; a vers&atilde;o 8.2.5.</P>

	<P>N&oacute;s planejamos lan&ccedil;ar vers&otilde;es novas a cada ano com vers&otilde;es
	corretivas em alguns meses.</P>

    <H3 id="item1.7">1.7) Onde eu posso conseguir suporte?</H3>

	<P>A comunidade do PostgreSQL fornece assist&ecirc;ncia a muitos de seus
	usu&aacute;rios via e-mail. O principal s&iacute;tio web para inscri&ccedil;&atilde;o nas listas
	de e-mail &eacute; <a href="http://www.postgresql.org/community/lists/">
	http://www.postgresql.org/community/lists/</a>. As listas <I>general</I>
	e <I>bugs</I> s&atilde;o um bom lugar para in&iacute;cio.</P>

    <P>O principal canal de IRC &eacute; o <I>#postgresql</I> na Freenode (<I>irc.freenode.net</I>). Para se conectar voc&ecirc; pode utilizar o comando Unix <code>irc -c '#postgresql' "$USER" irc.freenode.net</code> ou utilizar qualquer outro cliente de IRC. Um canal hisp&acirc;nico (<I>#postgresql-es</I>) e um franc&ecirc;s (<I>#postgresqlfr</I>) tamb&eacute;m existem na mesma rede. H&aacute; tamb&eacute;m um canal PostgreSQL na EFNet.</P>

    <P>Uma lista de empresas que prestam suporte comercial est&aacute; dispon&iacute;vel em <A href=
	"http://www.postgresql.org/support/professional_support">
	http://www.postgresql.org/support/professional_support</A>.</P>

    <H3 id="item1.8">1.8) Como eu informo a exist&ecirc;ncia de um bug?</H3>

    <P>Visite o formul&aacute;rio que reporta bugs do PostgreSQL em <A href=
    "http://www.postgresql.org/support/submitbug">http://www.postgresql.org/support/submitbug</A>.</P>
    <P>Verifique tamb&eacute;m o nosso ftp <A href=
    "ftp://ftp.postgresql.org/pub">ftp://ftp.postgresql.org/pub</A> para
    ver se h&aacute; uma vers&atilde;o mais recente do Postgres.</P>

	<P>Bugs submetidos utilizando o formul&aacute;rio ou informado a qualquer
	lista de discuss&atilde;o do PostgreSQL tipicamente gera uma das seguintes
	respostas:</P>
	<ul>
	<li>N&atilde;o &eacute; um bug e o porqu&ecirc;</li>
	<li>&Eacute; um bug conhecido e j&aacute; est&aacute; na lista de
	<A href="http://www.postgresql.org/docs/faqs.TODO.html">AFAZERES</A></li>
	<li>O bug foi corrigido na vers&atilde;o atual</li>
	<li>O bug foi corrigido mas n&atilde;o foi empacotado em um vers&atilde;o oficial</li>
	<li>Um pedido foi feito para obter informa&ccedil;&otilde;es detalhadas:
		<ul>
	<li>Sistema Operacional</li>
	<li>Vers&atilde;o do PostgreSQL</li>
	<li>Exemplo de teste que reproduz o bug</li>
	<li>Informa&ccedil;&otilde;es sobre depura&ccedil;&atilde;o</li>
	<li>Sa&iacute;da reconstituidora de vest&iacute;gios (backtrace) do depurador</li>
	</ul>
	</li>
	<li>O bug &eacute; novo. O seguinte pode ocorrer:
		<ul>
	<li>Uma corre&ccedil;&atilde;o &eacute; criada e ser&aacute; inclu&iacute;da na pr&oacute;xima vers&atilde;o</li>
	<li>O bug n&atilde;o pode ser corrigido imediatamente e &eacute; adicionado
	a lista de <A href="http://www.postgresql.org/docs/faqs.TODO.html">AFAZERES</A></li>
	</ul>
	</li>
	</ul>

	<H3 id="item1.9">1.9) Como eu posso saber quais s&atilde;o os bugs conhecidos
	ou funcionalidades ausentes?</H3>

	<P>O PostgreSQL suporta um subconjunto extendido do <SMALL>SQL:2003</SMALL>.
	Veja nossa lista de <A href="http://www.postgresql.org/docs/faqs.TODO.html">AFAZERES</A>
	que cont&eacute;m bugs conhecidos, funcionalidades ausentes e planos futuros.</P>

	<P>Uma solicita&ccedil;&atilde;o de funcionalidade geralmente resulta em uma das
	seguintes respostas:</P>
	<ul>
	<li>A funcionalidade j&aacute; est&aacute; na lista de <A href="http://www.postgresql.org/docs/faqs.TODO.html">AFAZERES</A></li>
	<li>A funcionalidade n&atilde;o &eacute; desej&aacute;vel porque:
		<ul>
		<li>Ela duplica uma funcionalidade existente que j&aacute; segue o
		padr&atilde;o SQL</li>
		<li>A funcionalidade aumentar&aacute; a complexidade do c&oacute;digo mas
		adicionar&aacute; pouco benef&iacute;cio</li>
		<li>A funcionalidade ser&aacute; insegura ou n&atilde;o-confi&aacute;vel</li>
		</ul>
	</li>
	<li>A nova funcionalidade &eacute; adicionada a lista de
	<A href="http://www.postgresql.org/docs/faqs.TODO.html">AFAZERES</A></li>
	</ul>

	<P>O PostgreSQL n&atilde;o utiliza sistema de acompanhamento de bugs porque
	n&oacute;s achamos mais eficiente responder diretamente o e-mail e manter a
	lista de <A href="http://www.postgresql.org/docs/faqs.TODO.html">AFAZERES</A>
	atualizada. Na pr&aacute;tica, bugs n&atilde;o duram muito no programa; e bugs que afetam
	uma grande quantidade de usu&aacute;rios s&atilde;o corrigidos rapidamente. O &uacute;nico lugar
	para encontrar todas as mudan&ccedil;as, melhorias e corre&ccedil;&otilde;es em uma vers&atilde;o do
	Postgres &eacute; ler as mensagens de log do
	<a href="http://www.postgresql.org/developer/sourcecode/">CVS</a>. At&eacute; mesmo
	as notas de lan&ccedil;amento n&atilde;o listam todas as mudan&ccedil;as feitas no programa.</P>

    <H3 id="item1.10">1.10) Que documenta&ccedil;&atilde;o est&aacute; dispon&iacute;vel?</H3>

	<P>O PostgreSQL inclui vasta documenta&ccedil;&atilde;o, incluindo um manual extenso,
	p&aacute;ginas de manuais (man pages) e alguns exemplos teste. Veja o diret&oacute;rio
	<I>/doc</I>. Voc&ecirc; tamb&eacute;m pode pesquisar os manuais online em <A href=
	"http://www.postgresql.org/docs">http://www.postgresql.org/docs</A>.
	</P>

	<P>H&aacute; dois livros sobre PostgreSQL dispon&iacute;veis online em <A href=
	"http://www.postgresql.org/docs/books/awbook.html">http://www.postgresql.org/docs/books/awbook.html</A>
	e <A href=
	"http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook/</A>.
	H&aacute; uma lista de livros sobre PostgreSQL dispon&iacute;veis para compra. Um dos mais
	populares &eacute; o do Korry Douglas. Uma lista de an&aacute;lise sobre os livros pode ser
	encontrada em <A href=
	"http://techdocs.postgresql.org/techdocs/bookreviews.php">http://techdocs.postgresql.org/techdocs/bookreviews.php</A>.
	H&aacute; tamb&eacute;m uma cole&ccedil;&atilde;o de artigos t&eacute;cnicos sbore PostgreSQL em <A href="http://techdocs.postgresql.org/">http://techdocs.postgresql.org/</A>.</P>

	<P>O programa cliente de linha de comando <I>psql</I> tem alguns comandos \d para
	mostrar informa&ccedil;&otilde;es sobre tipos, operadores, fun&ccedil;&otilde;es, agrega&ccedil;&otilde;es, etc. - utilize \?
	para mostrar os comandos dispon&iacute;veis.</P>

	<P>Nosso s&iacute;tio web cont&eacute;m ainda mais documenta&ccedil;&atilde;o.</P>

    <H3 id="item1.11">1.11) Como eu posso aprender <SMALL>SQL</SMALL>?</H3>

	<P>Primeiro, considere os livros espec&iacute;ficos sobre PostgreSQL mencionados
	acima. Outro &eacute; o "Teach Yourself SQL in 21 Days, Second Edition" e <A href=
	"http://members.tripod.com/er4ebus/sql/index.htm">http://members.tripod.com/er4ebus/sql/index.htm</A>.
	Muitos de nossos usu&aacute;rios gostam do <I>The Practical SQL Handbook</I>,
	Bowman, Judith S., et al., Addison-Wesley. Outros do <I>The
	Complete Reference SQL</I>, Groff et al., McGraw-Hill.</P>

	<P>H&aacute; tamb&eacute;m bons tutoriais dispon&iacute;veis online:
	<UL>
	<LI> <A href="http://www.intermedia.net/support/sql/sqltut.shtm">http://www.intermedia.net/support/sql/sqltut.shtm</A>
    </LI>
    <LI>
    <A href="http://sqlcourse.com/">http://sqlcourse.com</A>
    </LI>
    <LI>
    <A href="http://www.w3schools.com/sql/default.asp">http://www.w3schools.com/sql/default.asp</A>
    </LI>
    <LI><A href=
    "http://mysite.verizon.net/Graeme_Birchall/id1.html">http://mysite.verizon.net/Graeme_Birchall/id1.html</A>
    </LI>
    </UL>

    <H3 id="item1.12">1.12) Como posso submeter uma corre&ccedil;&atilde;o (patch) ou me juntar a equipe de desenvolvimento?</H3>

	<P>Veja a <a href="http://www.postgresql.org/docs/faqs.FAQ_DEV.html">
	FAQ do Desenvolvedor</A>.</P>

    <H3 id="item1.13">1.13) Como &eacute; o PostgreSQL comparado a outros <SMALL>SGBD</SMALL>s?</H3>

	<P>H&aacute; v&aacute;rias maneiras de se medir um software: funcionalidades, performance, confiabilidade, suporte e pre&ccedil;o.</P>

    <DL>
      <DT><B>Funcionalidades</B></DT>

	  <DD>PostgreSQL tem muitas caracter&iacute;sticas presentes em muitos <SMALL>SGBD</SMALL>s comerciais como transa&ccedil;&otilde;es, subconsultas, gatilhos, vis&otilde;es, integridade referencial de chave estrangeira e bloqueio (lock) sofisticado. N&oacute;s temos algumas funcionalidades que eles n&atilde;o tem, como tipos definidos pelo usu&aacute;rio, heran&ccedil;a, regras e controle de concorr&ecirc;ncia de m&uacute;ltiplas vers&otilde;es para reduzir bloqueios (locks).<BR>
      <BR>
      </DD>

      <DT><B>Performance</B></DT>

	  <DD>A performance do PostgreSQL &eacute; compar&aacute;vel a outros bancos de dados comerciais e de c&oacute;digo livre. Ele &eacute; mais r&aacute;pido em algumas coisas, mais lento em outras. Nossa performance &eacute; geralmente +/- 10% comparada a de outros bancos de dados.
      <BR>
      </DD>

      <DT><B>Confiabilidade</B></DT>

      <DD>N&oacute;s sabemos que um <SMALL>SGBD</SMALL> deve ser confi&aacute;vel ou ele &eacute; in&uacute;til. N&oacute;s empenhamos em lan&ccedil;ar vers&otilde;es bem testadas, de c&oacute;digo est&aacute;vel e que tenha o m&iacute;nimo de bugs. Cada vers&atilde;o tem no m&iacute;nimo um m&ecirc;s de teste em vers&atilde;o beta, e nosso hist&oacute;rico de vers&otilde;es mostra que n&oacute;s podemos fornecer vers&otilde;es est&aacute;veis e s&oacute;lidas que est&atilde;o prontas para uso em produ&ccedil;&atilde;o. N&oacute;s acreditamos que somos comparados a nosso favor com outros sistemas de bancos de dados nessa &aacute;rea.<BR>
      <BR>
      </DD>

      <DT><B>Suporte</B></DT>

      <DD>Nossas listas de discuss&atilde;o fornecem contato com um grupo de desenvolvedores e usu&aacute;rios para ajudar a resolver muitos problemas encontrados. Enquanto n&oacute;s n&atilde;o podemos garantir o conserto, <SMALL>SGBD</SMALL>s comerciais nem sempre fornecem tamb&eacute;m. Com acesso direto aos desenvolvedores, a comunidade de usu&aacute;rios, manuais e o c&oacute;digo fonte faz com que o suporte do PostgreSQL seja superior ao de outros <SMALL>SGBD</SMALL>s. H&aacute; suporte comercial por incidente dispon&iacute;veis para aqueles que precisam de um. (Veja <A href="#item1.7">se&ccedil;&atilde;o 1.7 da FAQ</A>).<BR>
      <BR>
      </DD>

      <DT><B>Pre&ccedil;o</B></DT>

      <DD>N&oacute;s somos livres para uso dele tanto comercial quanto n&atilde;o comercial. Voc&ecirc; pode adicionar nosso c&oacute;digo ao seu produto sem limita&ccedil;&otilde;es, exceto aquelas descritas na nossa licen&ccedil;a BSD mencionada acima.<BR>
      <BR>
      </DD>
    </DL>

		<H3 id="item1.14">1.14) O PostgreSQL gerenciar&aacute; mudan&ccedil;as no hor&aacute;rio devido ao hor&aacute;rio de ver&atilde;o em v&aacute;rios pa&iacute;ses?</H3>

		<P>Mudan&ccedil;as no hor&aacute;rio de ver&atilde;o dos USA foram inclu&iacute;das nas vers&otilde;es 8.0 .[4+] do PostgreSQL e em todas as vers&otilde;es grandes, i.e. 8.1. Mudan&ccedil;as no Canad&aacute; e Austr&aacute;lia Oeste foram inclu&iacute;das na 8.0.[10+], 8.1.[6+] e em todas as vers&otilde;es grandes subsequentes. Vers&otilde;es do PostgreSQL anteriores a 8.0 utilizam o banco de dados de zona hor&aacute;ria do sistema operacional para informa&ccedil;&otilde;es sobre hor&aacute;rio de ver&atilde;o.</P>

    <HR>

    <H2 align="center">Perguntas sobre Clientes</H2>

	<H3 id="item2.1">2.1) Quais interfaces est&atilde;o dispon&iacute;veis para PostgreSQL?</H3>

	<p>A instala&ccedil;&atilde;o do PostgreSQL inclui somente as interfaces <SMALL>C</SMALL> e
	<SMALL>C</SMALL> embutida. Todas as outras interfaces s&atilde;o projetos independentes
	que podem ser obtidos separadamente; sendo separados permitem que eles tenham
	suas pr&oacute;prias datas de lan&ccedil;amento e time de desenvolvedores.</P>

	<P>Algumas linguagens de programa&ccedil;&atilde;o como <SMALL>PHP</SMALL> incluem uma
	interface para PostgreSQL. Interfaces para linguagens como Perl,
	<SMALL>TCL</SMALL>, Python e muitas outras est&atilde;o dispon&iacute;veis em
	<a href="http://gborg.postgresql.org">http://gborg.postgresql.org</A>
	na se&ccedil;&atilde;o de <I>Drivers/Interfaces</I> ou via busca na Internet.
	</P>

    <H3 id="item2.2">2.2) Quais ferramentas est&atilde;o dispon&iacute;veis para utilizar o PostgreSQL com p&aacute;ginas Web?</H3>

    <P>Uma boa introdu&ccedil;&atilde;o para p&aacute;ginas web que utilizam bancos de dados pode ser vista em:
    <A href="http://www.webreview.com">http://www.webreview.com</A></P>

	<P>Para integra&ccedil;&atilde;o na Web, PHP (<A
	href="http://www.php.net">http://www.php.net</A>)
	&eacute; uma excelente interface.</P>

	<P>Para casos complexos, muitos usam a Interface Perl e DBD::Pg com CGI.pm
	ou mod_perl.</P>

    <H3 id="item2.3">2.3) O PostgreSQL tem interfaces gr&aacute;ficas para iteragir com o usu&aacute;rio?</H3>

	<P>H&aacute; um vasto n&uacute;mero de Ferramentas Gr&aacute;ficas (GUI), que est&atilde;o dispon&iacute;veis
	para o PostgreSQL, comerciais e de desenvolvedores de c&oacute;digo aberto. Uma
	lista detalhada pode ser encontrada em <A href="http://www.postgresql.org/docs/techdocs.54">
	Documenta&ccedil;&atilde;o da Comunidade PostgreSQL</A></P>

    <HR>

    <H2 align="center">Perguntas Administrativas</H2>

    <H3 id="item3.1">3.1) Como eu instalo o PostgreSQL em um local diferente de <I>/usr/local/pgsql</I>?</H3>

    <P>Especifique a op&ccedil;&atilde;o <I>--prefix</I> quando executar o <I>configure</I>.</P>

    <H3 id="item3.2">3.2) Como eu controlo conex&otilde;es de outras m&aacute;quinas?</H3>

	<P>Por padr&atilde;o, o PostgreSQL s&oacute; permite conex&otilde;es da m&aacute;quina local utilizando soquetes de dom&iacute;nio Unix ou conex&otilde;es TCP/IP. Outras m&aacute;quinas n&atilde;o poder&atilde;o conectar-se a menos que voc&ecirc; modifique <I>listen_addresses</I> no <I>postgresql.conf</I>, habilite a autentica&ccedil;&atilde;o por m&aacute;quina modificando o arquivo <I>$PGDATA/pg_hba.conf</I> e reinicie o servidor PostgreSQL.</P>

    <H3 id="item3.3">3.3) Como eu ajusto o servidor de banco de dados para obter uma performance melhor?</H3>

	<P>H&aacute; tr&ecirc;s grandes &aacute;reas para melhorar a performance em potencial:</P>

	<DL>
	<DT><B>Mudan&ccedil;a de Consultas</B></DT>

	<DD>Isto involve modificar consultas para obter melhor performance:
	<ul>
	<li>Cria&ccedil;&atilde;o de &iacute;ndices, incluir express&otilde;es e &iacute;ndices parciais</li>
	<li>Utiliza&ccedil;&atilde;o o COPY ao inv&eacute;s de m&uacute;ltiplos comandos <SMALL>INSERT</SMALL>s</li>
	<li>Agrupamento de m&uacute;ltiplos comandos em uma &uacute;nica transa&ccedil;&atilde;o para diminuir
	a despesa com efetiva&ccedil;&otilde;es (commit)</li>
	<li>Utiliza&ccedil;&atilde;o do <SMALL>CLUSTER</SMALL> quando recuperar v&aacute;rios registros de
	um &iacute;ndice</li>
	<li>Utiliza&ccedil;&atilde;o do <SMALL>LIMIT</SMALL> para retornar um subconjunto da sa&iacute;da
	da consulta</li>
	<li>Utiliza&ccedil;&atilde;o de Consultas preparadas</li>
	<li>Utiliza&ccedil;&atilde;o de <SMALL>ANALYZE</SMALL> para manter as estat&iacute;sticas do
	otimizador corretas</li>
	<li>Utiliza&ccedil;&atilde;o regular do <SMALL>VACUUM</SMALL> ou <I>pg_autovacuum</I></li>
	<li>Remo&ccedil;&atilde;o de &iacute;ndices durante grande mudan&ccedil;a de dados</li>
	</ul><BR>
	<BR>
	</DD>

	<DT><B>Configura&ccedil;&atilde;o do Servidor</B></DT>

	<DD>Um grande n&uacute;mero de configura&ccedil;&otilde;es que afetam a performance.
	Para obter detalhes adicionais, veja <a href=
	"http://www.postgresql.org/docs/current/static/runtime.html">
    Administration Guide/Server Run-time Environment/Run-time
	Configuration</a> para listagem completa, e para
	coment&aacute;rios veja <a href=
	"http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html">
    http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html</a>
    e <a href="http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html">
    http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html</a>.
    <BR>
    <BR>
    </DD>

	<DT><B>Sele&ccedil;&atilde;o do Hardware</B></DT>

	<DD>O efeito do hardware na performance &eacute; detalhado em
    <a href="http://www.powerpostgresql.com/PerfList/">
    http://www.powerpostgresql.com/PerfList/</a> e <a
    href="http://momjian.us/main/writings/pgsql/hw_performance/index.html">
    http://momjian.us/main/writings/pgsql/hw_performance/index.html</a>.
    <BR>
    <BR>
    </DD>
    </DL>

    <H3 id="item3.4">3.4) Quais caracter&iacute;sticas de depura&ccedil;&atilde;o est&atilde;o dispon&iacute;veis?</H3>

	<P>H&aacute; muitas vari&aacute;veis de configura&ccedil;&atilde;o do servidor <CODE>log_*</CODE>
	que habilitam a exibi&ccedil;&atilde;o de consultas e estat&iacute;sticas que podem ser
	muito &uacute;teis para depura&ccedil;&atilde;o e medidas de performance.</P>

    <H3 id="item3.5">3.5) Por que eu recebo <I>"Sorry, too many clients"</I> quando eu tento conectar?</H3>

	<P>Voc&ecirc; atingiu o limite padr&atilde;o que &eacute; de 100 sess&otilde;es. Voc&ecirc;
	precisa aumentar o limite do <I>postmaster</I>, que diz
	quantos processos servidor concorrentes ele pode iniciar, alterando
	o valor <I>max_connections</I> no <I>postgresql.conf</I> e
	reiniciando o <I>postmaster</I>.</P>

	<H3 id="item3.6">3.6) Qual &eacute; o processo de atualiza&ccedil;&atilde;o do PostgreSQL?</H3>

	<P>Veja <a
	href="http://www.postgresql.org/support/versioning">http://www.postgresql.org/support/versioning</a>
	para discussão geral sobre atualizações e <a href=
	"http://www.postgresql.org/docs/current/static/install-upgrading.html">
	http://www.postgresql.org/docs/current/static/install-upgrading.html</a>
	para instru&ccedil;&otilde;es espec&iacute;ficas.</P>

    <H3 id="item3.7">3.7) Que tipo de hardware eu devo usar?</H3>

    <P>Por causa do hardware de PC ser em sua maioria compat&iacute;vel, pessoas tendem a acreditar que todos os hardwares de PC s&atilde;o de mesma qualidade. N&atilde;o &eacute; verdade. ECC RAM, SCSI e placas m&atilde;e de qualidade s&atilde;o mais confi&aacute;veis e t&ecirc;m uma melhor performance do que hardwares mais baratos. O PostgreSQL executar&aacute; em quase todo hardware, mas se a confiabilidade e a performance forem importantes &eacute; prudente pesquisar sobre as op&ccedil;&otilde;es de hardware. Nossas listas de discuss&atilde;o podem ser usadas para discutir op&ccedil;&otilde;es de hardware e dilemas.</P>

    <HR>

    <H2 align="center">Perguntas Operacionais</H2>

    <H3 id="item4.1">4.1) Como eu fa&ccedil;o um <SMALL>SELECT</SMALL> somente dos primeiros registros de uma consulta? Um registro rand&ocirc;mico?</H3>

	<P>Para obter somente alguns registros, se voc&ecirc; sabe o n&uacute;mero de
	registros necess&aacute;rios ao executar o <SMALL>SELECT</SMALL> utilize
	o <SMALL>LIMIT</SMALL>. Se um &iacute;ndice corresponde no <SMALL>ORDER
	BY</SMALL> &eacute; poss&iacute;vel que a consulta toda n&atilde;o tenha que ser
	executada. Se voc&ecirc; n&atilde;o sabe o n&uacute;mero de registros ao executar o
	<SMALL>SELECT</SMALL>, utilize um cursor e o <SMALL>FETCH</SMALL>.</P>
	
	<P>Para <SMALL>obter</SMALL> um registro rand&ocirc;mico, utilize:</P>
<PRE>
    SELECT col
    FROM tab
    ORDER BY random()
    LIMIT 1;
</PRE>

	 <H3 id="item4.2">4.2) Como eu descubro quais tabelas, &iacute;ndices, bancos de dados e usu&aacute;rios est&atilde;o definidos? Como eu vejo as consultas utilizadas pelo <I>psql</I> para mostr&aacute;-los?</H3>

	 <P>Utilize o comando \dt para ver tabelas no <I>psql</I>. Para obter
	 uma lista completa dos comandos no psql voc&ecirc; pode utilizar \?.
	 Alternativamente, voc&ecirc; pode ler o c&oacute;digo-fonte do <I>psql</I> no arquivo
	 <I>pgsql/src/bin/psql/describe.c</I>, ele cont&eacute;m os comandos <SMALL>SQL</SMALL>
	 que geram a sa&iacute;da para os comandos de contrabarra do <I>psql</I>. Voc&ecirc;
	 tamb&eacute;m pode iniciar o <I>psql</I> com a op&ccedil;&atilde;o <I>-E</I> para que as consultas
	 utilizadas para executar os comandos que voc&ecirc; informou seja exibida.
	 O PostgreSQL tamb&eacute;m fornece uma inteface compat&iacute;vel com <SMALL>SQL</SMALL> do
	 INFORMATION SCHEMA que voc&ecirc; pode consultar para obter informa&ccedil;&atilde;o sobre o
	 banco de dados.</P>

	 <P>H&aacute; tamb&eacute;m tabelas do sistema que come&ccedil;am com <I>pg_</I> que os descrevem
	 tamb&eacute;m.</P>

	 <P>Utilizando o <I>psql -l</I> listar&aacute; todos os bancos de dados.</P>

	 <P>Veja tamb&eacute;m o arquivo <I>pgsql/src/tutorial/syscat.source</I>. Ele
	 ilustra muitos dos comandos <SMALL>SELECT</SMALL>s necess&aacute;rios para obter
	 informa&ccedil;&atilde;o das tabelas de sistema do banco de dados.</P>

	 <H3 id="item4.3">4.3) Como voc&ecirc; muda o tipo de dado de uma coluna?</H3>

	 <P>Mudar o tipo de dado de uma coluna pode ser feito facilmente na vers&atilde;o 8.0
	 ou superior com <SMALL>ALTER TABLE ALTER COLUMN TYPE</SMALL>.</P>

	 <P>Em vers&otilde;es anteriores, fa&ccedil;a isso:</P>
<PRE>
    BEGIN;
    ALTER TABLE tab ADD COLUMN col_nova <i>novo_tipo_dado</i>;
    UPDATE tab SET col_nova = CAST(col_antiga AS <i>novo_tipo_dado</i>);
    ALTER TABLE tab DROP COLUMN col_antiga;
    COMMIT;
</PRE>
	 <P>Voc&ecirc; pode ent&atilde;o querer fazer um <I>VACUUM FULL tab</I> para recuperar
	 o espa&ccedil;o em disco utilizado pelos registros expirados.</P>

    <H3 id="item4.4">4.4) Qual &eacute; o tamanho m&aacute;ximo de um registro, uma tabela e um banco de dados?</H3>

    <P>Estes s&atilde;o os limites:</P>
<BLOCKQUOTE>
<TABLE>
<TR><TD>Tamanho m&aacute;ximo de um banco de dados?</TD><TD>ilimitado (existem bancos de dados de 32 TB)</TD></TR>
<TR><TD>Tamanho m&aacute;ximo de uma tabela?</TD><TD>32 TB</TD></TR>
<TR><TD>Tamanho m&aacute;ximo de um registro?</TD><TD>400 GB</TD></TR>
<TR><TD>Tamanho m&aacute;ximo de um campo?</TD><TD>1 GB</TD></TR>
<TR><TD>N&uacute;mero m&aacute;ximo de registros em uma tabela?</TD><TD>ilimitado</TD></TR>
<TR><TD>N&uacute;mero m&aacute;ximo de colunas em uma tabela?</TD><TD>250-1600 dependendo dos tipos das colunas</TD></TR>
<TR><TD>N&uacute;mero m&aacute;ximo de &iacute;ndices em uma tabela?</TD><TD>ilimitado</TD></TR>
</TABLE>
</BLOCKQUOTE>

	<P>&Eacute; claro, que eles n&atilde;o s&atilde;o ilimitados, mas limitados
	ao espa&ccedil;o em disco dispon&iacute;vel e espa&ccedil;o em mem&oacute;ria/swap.
	A Performance ser&aacute; penalizada quando estes valores se tornarem grandes.</P>

	<P>O tamanho m&aacute;ximo de uma tabela com 32 TB n&atilde;o requer suporte a
	arquivos grandes do sistema operacional. Tabelas grandes s&atilde;o armazenadas
	como m&uacute;ltiplos arquivos de 1 GB ent&atilde;o o limite do sistema de
	arquivos n&atilde;o &eacute; importante.</P>

	<P>O tamanho m&aacute;ximo de uma tabela, o tamanho de um registro e o n&uacute;mero
	m&aacute;ximo de colunas podem ser quadruplicados aumentando-se o tamanho padr&atilde;o
	do bloco para 32k. O tamanho m&aacute;ximo de uma tabela pode tamb&eacute;m ser aumentado utilizando
	particionamento de tabela.</P>

	<P>Uma limita&ccedil;&atilde;o &eacute; que &iacute;ndices n&atilde;o podem ser criados em colunas maiores do que
	2.000 caracteres. Felizmente, tais &iacute;ndices s&atilde;o raramente necess&aacute;rios. Unicidade &eacute;
	melhor garantida por um &iacute;ndice de uma fun&ccedil;&atilde;o de um hash MD5 de uma coluna longa, e
	indexa&ccedil;&atilde;o de texto longo permite a busca de palavras dentro da coluna.</P>

    <H3 id="item4.5">4.5) Quanto espa&ccedil;o em disco &eacute; necess&aacute;rio para armazenar dados de um arquivo texto?</H3>

    <P>Um banco de dados PostgreSQL ir&aacute; requerer at&eacute; cinco vezes a quantidade de espa&ccedil;o requerida para armazenar dados em um arquivo texto.</P>

    <P>Como um exemplo, considere um arquivo com 100.000 linhas contendo um inteiro e uma descri&ccedil;&atilde;o em cada linha. Suponha que o tamanho m&eacute;dio da descri&ccedil;&atilde;o &eacute; de vinte bytes. O arquivo ter&aacute; 2,8 MB. O tamanho do arquivo do banco de dados PostgreSQL que cont&eacute;m esses dados pode ser estimado em 5,2 MB:</P>
<PRE>
    24 bytes: cada cabe&ccedil;alho de registro (aproximadamente)
    24 bytes: um campo int e um campo texto
   + 4 bytes: ponteiro na p&aacute;gina para a tupla
   -------------------------------------------
    52 bytes por registro

   O tamanho de uma p&aacute;gina de dados no Postgres &eacute; 8192 bytes (8 KB), ent&atilde;o:

   8192 bytes por p&aacute;gina
   ------------------------   =  158 registros por p&aacute;gina do banco de dados (arredondado para baixo)
     52 bytes por registro

   100000 registros de dados
   ----------------------------  =  633 p&aacute;ginas do banco de dados (arredondado para cima)
      158 registros por p&aacute;gina

633 p&aacute;ginas do banco de dados * 8192 bytes por p&aacute;gina  =  5.185.536 bytes (5,2 MB)
</PRE>

	<P>&Iacute;ndices n&atilde;o requerem muito espa&ccedil;o, mas cont&eacute;m
	dados que foram indexados, ent&atilde;o eles podem ocupar algum espa&ccedil;o.</P> 

	<P><SMALL>NULL</SMALL>s s&atilde;o armazenados como bitmaps, ent&atilde;o eles
	utilizam muito pouco espa&ccedil;o.</P>

    <H3 id="item4.6">4.6) Por que minhas consultas est&atilde;o lentas? Por que elas n&atilde;o est&atilde;o utilizando meus &iacute;ndices?</H3>

	<P>&Iacute;ndices n&atilde;o s&atilde;o utilizados por toda consulta. &Iacute;ndices s&atilde;o utilizados somente
	se a tabela &eacute; maior do que um tamanho m&iacute;nimo, e a consulta seleciona somente uma
	pequena porcentagem dos registros da tabela. Isto porque o acesso rand&ocirc;mico ao
	disco causado pela busca indexada pode ser mais lento do que uma leitura ao longo
	da tabela ou busca sequencial.</P>

	<P>Para determinar se um &iacute;ndice deveria ser utilizado, o PostgreSQL deve ter
	estat&iacute;sticas sobre a tabela. Estas estat&iacute;sticas s&atilde;o coletadas utilizando o
	<SMALL>VACUUM ANALYZE</SMALL> ou simplesmente o <SMALL>ANALYZE</SMALL>.
	Utilizando estat&iacute;sticas, o otimizador sbae quantos registros est&atilde;o na tabela,
	e pode melhor determinar se &iacute;ndices deveriam ser utilizados.
	Estat&iacute;sticas tamb&eacute;m s&atilde;o &uacute;teis para determinar a ordem de jun&ccedil;&atilde;o &oacute;tima e m&eacute;todos
	de jun&ccedil;&atilde;o. Cole&ccedil;&atilde;o de estat&iacute;sticas deveriam ser feitas periodicamente a
	medida que o conte&uacute;do da tabela muda.</P>

	<P>&Iacute;ndices n&atilde;o s&atilde;o normalmente utilizados para <SMALL>ORDER BY</SMALL> ou para
	fazer jun&ccedil;&otilde;es. Uma busca sequencial seguido por uma ordena&ccedil;&atilde;o expl&iacute;cita &eacute;
	geralmente mais r&aacute;pida do que uma busca indexada em uma tabela grande.
	Contudo, <SMALL>LIMIT</SMALL> combinado com <SMALL>ORDER BY</SMALL>
	frequentemente utilizar&aacute; &iacute;ndice porque somente uma pequena por&ccedil;&atilde;o da tabela
	ser&aacute; retornada.</P>

	<P>Se voc&ecirc; acredita que o otimizador est&aacute; incorreto ao escolher uma busca
	sequencial, utilize <CODE>SET enable_seqscan TO 'off'</CODE> e execute a
	consulta novamente para ver se uma busca indexada &eacute; realmente mais r&aacute;pida.</P>

	<P>Ao utilizar operadores curinga tais como <SMALL>LIKE</SMALL> ou <I>~</I>,
	&iacute;ndices podem ser utilizados somente em algumas condi&ccedil;&otilde;es:</P>
	<UL>
	<LI>O in&iacute;cio da cadeia de caracteres da busca deve ser iniciar com uma
	cadeia de caracteres, i.e.
	<UL>
	<LI>modelos <SMALL>LIKE</SMALL> n&atilde;o devem iniciar com <I>%</I>.</LI>
	<LI>modelos <I>~</I> (express&otilde;es regulares) devem iniciar com <I>^</I>.</LI>
	</UL></LI>
	<LI>A cadeia de caracteres utilizada na busca n&atilde;o pode iniciar com a classe de
	caracteres e.g. [a-e].</LI>
	<LI>Busca que n&atilde;o diferenciam mai&uacute;sculas de min&uacute;sculas tais como <SMALL>ILIKE</SMALL> e 
	<I>~*</I> n&atilde;o utilizam &iacute;ndices. Em vez disso, utilize &iacute;ndice de express&atilde;o, que
	&eacute; descrito na se&ccedil;&atilde;o <a href="#item4.8">4.8</a>.</LI>
	<LI>O idioma padr&ccedil;&atilde;o <I>C</I> deve ser usando durante o <i>initdb</i>
	porque n&atilde;o &eacute; poss&iacute;vel saber o pr&oacute;ximo caracter em idiomas que n&atilde;o sejam o C.
	Voc&ecirc; pode criar um &iacute;ndice especial <CODE>text_pattern_ops</CODE> para tais casos
	que funcionam somente para indexa&ccedil;&atilde;o com <SMALL>LIKE</SMALL>.
	</LI>
	</UL>

	<P>Em vers&otilde;es anteriores a 8.0, &iacute;ndices frequentemente n&atilde;o podem ser utilizados
	a menos que os tipos de dados correspondam aos tipos de coluna do &iacute;ndice. Isto era
	particularmente verdadeiro para &iacute;ndices de coluna int2, int8 e numeric.</P>

    <H3 id="item4.7">4.7) Como eu vejo como o otimizador de consulta est&aacute; avaliando a minha consulta?</H3>

    <P>Veja o comando <SMALL>EXPLAIN</SMALL> no manual.</P>

    <H3 id="item4.8">4.8) Como eu fa&ccedil;o buscas com express&otilde;es regulares
    e buscas com express&otilde;es regulares sem diferenciar mai&uacute;sculas de min&uacute;sculas? Como eu
    utilizo um &iacute;ndice para buscas que n&atilde;o diferenciam mai&uacute;sculas de min&uacute;sculas?</H3>

	<P>O operador <I>~</I> faz avalia&ccedil;&atilde;o de express&otilde;es regulares,
	e <I>~*</I> faz avalia&ccedil;&atilde;o n&atilde;o sens&iacute;vel a mai&uacute;sculas
	de express&otilde;es regulares. A variante n&atilde;o sens&iacute;vel a mai&uacute;sculas
	do <SMALL>LIKE</SMALL> &eacute; chamada de <SMALL>ILIKE</SMALL>.</P>

	<P>Compara&ccedil;&otilde;es de igualdade n&atilde;o sens&iacute;veis a mai&uacute;sculas
	s&atilde;o normalmente expressadas como:</P>
<PRE>
    SELECT *
    FROM tab
    WHERE lower(col) = 'abc';
</PRE>
	Isso n&atilde;o ir&aacute; utilizar o &iacute;ndice padr&atilde;o. Contudo, se
	voc&ecirc; criar um &iacute;ndice de express&atilde;o, ele ser&aacute; utilizado:
<PRE>
    CREATE INDEX tabindex ON tab (lower(col));
</PRE>
	<P>Se o &iacute;ndice acima &eacute; criado como <SMALL>UNIQUE</SMALL>, embora a
	coluna possa armazenar caracteres mai&uacute;sculos e min&uacute;sculos, ele n&atilde;o
	pode ter valores id&ecirc;nticos que diferem apenas em letras mai&uacute;sculas e min&uacute;sculas.
	Para for&ccedil;ar uma letra mai&uacute;scula ou min&uacute;scula a ser armazenada na coluna, utilize
	uma restri&ccedil;&atilde;o <SMALL>CHECK</SMALL> ou um gatilho.</P>

	<H3 id="item4.9">4.9) Em uma consulta, como eu detecto se um campo &eacute; <SMALL>NULL</SMALL>? Como eu posso concatenar poss&iacute;veis <SMALL>NULL</SMALL>s? Como eu posso ordenar por um campo que &eacute; <SMALL>NULL</SMALL> ou n&atilde;o?</H3>

    <P>Voc&ecirc; testa a coluna com <SMALL>IS NULL</SMALL> e <SMALL>IS
    NOT NULL</SMALL>, como a seguir:</P>

<PRE>
   SELECT *
   FROM tab
   WHERE col IS NULL;
</PRE>

	<P>Para concatenar com poss&iacute;veis <SMALL>NULL</SMALL>s, utilize <I>COALESCE()</I>, assim:</P>
<PRE>
   SELECT COALESCE(col1, '') || COALESCE(col2, '')
   FROM tab
</PRE>

	<P>Para ordenar pelo status <SMALL>NULL</SMALL>, utilize os modificadores
	<SMALL>IS NULL</SMALL> e <SMALL>IS NOT NULL</SMALL> na sua cl&aacute;usula
	<SMALL>ORDER BY</SMALL>. Coisas que s&atilde;o <I>verdadeiro</I> ser&atilde;o ordenadas acima
	das coisas que s&atilde;o <I>falso</I>, ent&atilde;o a consulta a seguir ir&aacute; colocar
	entradas NULL no in&iacute;cio da lista de resultados:</P>

<PRE>
   SELECT *
   FROM tab
   ORDER BY (col IS NOT NULL)
</PRE>

    <H3 id="item4.10">4.10) Qual &eacute; a diferen&ccedil;a entre os v&aacute;rios tipos de dado de caracteres?</H3>
<BLOCKQUOTE>
<TABLE>
<TR><TH>Tipo</TH><TH>Nome Interno</TH><TH>Observa&ccedil;&atilde;o</TH></TR>
<TR><TD>VARCHAR(n)</TD><TD>varchar</TD><TD>tamanho especifica o tamanho
m&aacute;ximo, sem preenchimento</TD></TR>
<TR><TD>CHAR(n)</TD><TD>bpchar</TD><TD>preenchimento em branco para
comprimento fixo espec&iacute;fico</TD></TR>
<TR><TD>TEXT</TD><TD>text</TD><TD>nenhum limite superior espec&iacute;fico no
comprimento</TD></TR>
<TR><TD>BYTEA</TD><TD>bytea</TD><TD>vetor de bytes de comprimento vari&aacute;vel
(seguro a byte nulo)</TD></TR>
<TR><TD>"char"</TD><TD>char</TD><TD>um caracter</TD></TR>
</TABLE>
</BLOCKQUOTE>

	<P>Voc&ecirc; ver&aacute; o nome interno quando examinar o cat&aacute;logo do sistema e em algumas mensagens de erro.</P>

	<P>Os primeiros quatro tipos acima s&atilde;o do tipo "varlena" (i.e., os primeiros quatro bytes no disco s&atilde;o o comprimento seguido pelos dados). Consequentemente o espa&ccedil;o atual utilizado &eacute; ligeiramente maior do que o tamanho declarado. Contudo, valores longos s&atilde;o tamb&eacute;m sujeitos a compress&atilde;o, ent&atilde;o o espa&ccedil;o em disco pode tamb&eacute;m ser bem menor do que o esperado.</P>

	<SMALL>VARCHAR(n)</SMALL> &eacute; melhor quando est&aacute; armazenando cadeias de caracteres de comprimento vari&aacute;vel e h&aacute; um limite de tamanho desta cadeia. <SMALL>TEXT</SMALL> &eacute; para cadeias de caracteres de comprimento ilimitado, com o m&aacute;ximo de um gigabyte.
	<P><SMALL>CHAR(n)</SMALL> &eacute; para armazenar cadeias de caracteres que s&atilde;o todas do mesmo tamanho. <SMALL>CHAR(n)</SMALL> preenche com espa&ccedil;os em branco at&eacute; o tamanho especificado, enquanto o <SMALL>VARCHAR(n)</SMALL> armazena somente os caracteres fornecidos. <SMALL>BYTEA</SMALL> &eacute; para armazenar dados bin&aacute;rios, particularmente valores que incluem bytes <SMALL>NULL</SMALL>. Todos os tipos descritos aqui tem caracter&iacute;sticas de performance similares.</P>

    <H3 id="item4.11.1">4.11.1) Como eu crio um campo serial/auto incremento?</H3>

	<P>PostgreSQL suporta o tipo de dados <SMALL>SERIAL</SMALL>. Ele cria
	automaticamente uma sequ&ecirc;ncia. Por exemplo:</P>
<PRE>
    CREATE TABLE pessoa ( 
        id   SERIAL, 
        nome TEXT 
    );
</PRE>

	&eacute; automaticamente traduzido em:
<PRE>
    CREATE SEQUENCE pessoa_id_seq;
    CREATE TABLE pessoa ( 
        id   INT4 NOT NULL DEFAULT nextval('pessoa_id_seq'),
	nome TEXT 
    );
</PRE>

	Veja a p&aacute;gina sobre <I>create_sequence</I> no manual para
	obter informa&ccedil;&otilde;es adicionais sobre sequ&ecirc;ncias.

    <H3 id="item4.11.2">4.11.2) Como eu consigo o valor de um campo
    <SMALL>SERIAL</SMALL>?</H3>

    <P>Uma abordagem &eacute; obter o pr&oacute;ximo valor <SMALL>SERIAL</SMALL>
    de uma sequ&ecirc;ncia com a fun&ccedil;&atilde;o <I>nextval()</I>
    <I>antes</I> de inserir e ent&atilde;o inserir com o valor explicitamente. Utilizando o
    exemplo da tabela em <A href="#item4.11.1">4.11.1</A>, um exemplo em 
    pseudo-linguagem se pareceria com isto:</P>
<PRE>
    novo_id = execute("SELECT nextval('pessoa_id_seq')");
    execute("INSERT INTO pessoa (id, nome) VALUES (novo_id, 'Blaise Pascal')");
</PRE>

    Voc&ecirc; poderia ent&atilde;o ter tamb&eacute;m o novo valor armazenado em
    <CODE>novo_id</CODE> para utilizar em outras consultas (i.e., como uma chave
    estrangeira da tabela <CODE>pessoa</CODE>). Note que o nome da
    <SMALL>SEQUENCE</SMALL> criada automaticamente ser&aacute;
    &lt;<I>tabela</I>&gt;_&lt;<I>coluna</I>&gt;_<I>seq</I>, onde
    <I>tabela</I> e <I>coluna</I> s&atilde;o os nomes da tabela
    e da coluna <SMALL>SERIAL</SMALL>, respectivamente.

    <P>Alternativamente, voc&ecirc; poderia obter o valor <SMALL>SERIAL</SMALL>
    atribu&iacute;do com a fun&ccedil;&atilde;o <I>currval()</I> <I>depois</I>
    de t&ecirc;-lo inserido por padr&atilde;o, i.e.,</P>
<PRE>
    execute("INSERT INTO pessoa (nome) VALUES ('Blaise Pascal')");
    novo_id = execute("SELECT currval('pessoa_id_seq')");
</PRE>

    <H3 id="item4.11.3">4.11.3) <I>currval()</I> n&atilde;o lida com condi&ccedil;&atilde;o de corrida com outros usu&aacute;rios?</H3>

    <P>N&atilde;o. <I>currval()</I> retorna o valor atual atribuido pela sua sess&atilde;o, e n&atilde;o por todas as sess&otilde;es.</P>

    <H3 id="item4.11.4">4.11.4) Por que os n&uacute;meros da minha sequ&ecirc;ncia n&atilde;o s&atilde;o reutilizados quando uma transa&ccedil;&atilde;o &eacute; abortada? Por que h&aacute; intervalos nos n&uacute;meros da minha sequ&ecirc;ncia/coluna SERIAL?</H3>

    <P>Para melhorar a concorr&ecirc;ncia, valores da sequ&ecirc;ncia s&atilde;o atribu&iacute;dos a transa&ccedil;&otilde;es correntes e n&atilde;o s&atilde;o travados at&eacute; que a transa&ccedil;&atilde;o seja finalizada. Isso causa intervalos na numera&ccedil;&atilde;o por causa de transa&ccedil;&otilde;es abortadas.</P>

    <H3 id="item4.12">4.12) O que &eacute; um <SMALL>OID</SMALL>? O que &eacute; um <SMALL>CTID</SMALL>?</H3>

	<P>Se uma tabela &eacute; criada com <SMALL>WITH OIDS</SMALL>, cada registro recebe um <SMALL>OID</SMALL> &uacute;nico.
	O<SMALL>ID</SMALL>s s&atilde;o automaticamente atribu&iacute;dos como inteiros de 4 bytes
	que s&atilde;o &uacute;nicos ao longo de toda instala&ccedil;&atilde;o. Contudo, eles s&atilde;o limitados em
	4 bilh&otilde;es e, ent&atilde;o, os O<SMALL>ID</SMALL>s come&ccedil;am a ser duplicados. O PostgreSQL
	utiliza <SMALL>OID</SMALL>s para ligar as tabelas do sistema.</P>

	<P>Para numerar registros nas tabelas do usu&aacute;rios, &eacute; melhor utilizar
	<SMALL>SERIAL</SMALL> ao inv&eacute;s de O<SMALL>ID</SMALL>s porque
	sequ&ecirc;ncias <SMALL>SERIAL</SMALL> s&atilde;o &uacute;nicas somente em uma tabela; e
	s&atilde;o menos prop&iacute;cias a atingir o limite.
	<SMALL>SERIAL8</SMALL> est&aacute; dispon&iacute;vel para armazenar valores de sequ&ecirc;ncias
	com oito bytes.</P>

	<P>C<SMALL>TID</SMALL>s s&atilde;o utilizados para identificar registros f&iacute;sicos
	espec&iacute;ficos com valores de block e deslocamento. C<SMALL>TID</SMALL>s mudam
	ap&oacute;s registros serem modificados ou recarregados. Eles s&atilde;o utilizados por
	&iacute;ndices para apontar registros f&iacute;sicos.</P>

    <H3 id="item4.13">4.13) Por que eu recebo o erro <I>"ERROR: Memory exhausted in AllocSetAlloc()"</I>?</H3>

    <P>Voc&ecirc; provavelmente est&aacute; sem mem&oacute;ria virtual no seu sistema, ou o seu n&uacute;cleo (kernel) tem um limite baixo para certos recursos. Tente isto antes de iniciar o <I>postmaster</I>:</P>
<PRE>
    ulimit -d 262144
    limit datasize 256m
</PRE>

    Dependendo da sua shell, somente um desses comando ter&aacute; sucesso, mas ele definir&aacute; o segmento de dados do seu processo com um limite maior e talvez permita que a consulta seja feita. Este comando &eacute; aplicado ao processo atual e todos os subprocessos criados depois do comando ser executado. Se voc&ecirc; tiver problemas com o cliente <SMALL>SQL</SMALL> porque o processo servidor retornou muitos dados, tente-o antes de iniciar o cliente.

    <H3 id="item4.14">4.14) Como eu informo qual vers&atilde;o do PostgreSQL eu estou utilizando?</H3>

    <P>No <I>psql</I>, digite <CODE>SELECT version();</CODE></P>

    <H3 id="item4.15">4.15) Como eu crio uma coluna que conter&aacute; por padr&atilde;o a hora atual?</H3>

    <P>Utilize <I>CURRENT_TIMESTAMP</I>:</P>
<PRE>
	CREATE TABLE teste (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
</PRE>

    <H3 id="item4.16">4.16) Como eu fa&ccedil;o uma jun&ccedil;&atilde;o externa (outer join)?</H3>

    <P>PostgreSQL suporta jun&ccedil;&otilde;es externas utilizando a sintaxe padr&atilde;o do SQL. Aqui temos dois exemplos:</P>
<PRE>
    SELECT *
    FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
</PRE>
    or 
<PRE>
    SELECT *
    FROM t1 LEFT OUTER JOIN t2 USING (col);
</PRE>

	<P>Essas duas consultas ind&ecirc;nticas juntam t1.col com t2.col, e tamb&eacute;m
	retornam qualquer registro que n&atilde;o foi juntado em t1 (aqueles que n&atilde;o
	combinaram com t2). Uma jun&ccedil;&atilde;o a direita <SMALL>RIGHT</SMALL>
	adicionaria registros que n&atilde;o foram juntados da tabela t2.
	Uma jun&ccedil;&atilde;o completa (<SMALL>FULL</SMALL>) retornaria os registros
	combinados mais todos os registros n&atilde;o combinados de t1 e t2.
	A palavra <SMALL>OUTER</SMALL> &eacute; opcional e &eacute; assumida nas
	jun&ccedil;&otilde;es <SMALL>LEFT</SMALL>, <SMALL>RIGHT</SMALL> e <SMALL>FULL</SMALL>.
	Jun&ccedil;&otilde;es ordin&aacute;rias s&atilde;o chamadas jun&ccedil;&otilde;es
	internas (<SMALL>INNER</SMALL>).</P>

	<H3 id="item4.17">4.17) Como eu fa&ccedil;o consultas utilizando m&uacute;ltiplos bancos de dados?</H3>

	<P>N&atilde;o h&aacute; outra maneira de consultar um banco de dados caso ele
	n&atilde;o seja o atual. Porque o PostgreSQL carrega cat&aacute;logos do sistema
	espec&iacute;ficos do banco de dados, &eacute; incerto como uma consulta em banco
	de dados distintos pode se comportar.</P>

	<P><I>contrib/dblink</I> permite consultas em bancos de dados distintos utilizando
	chamadas de fun&ccedil;&otilde;es. &Eacute; claro, que um cliente pode fazer
	conex&otilde;es simult&acirc;neas em bancos de dados diferentes e juntar os
	resultados no cliente.</P>

    <H3 id="item4.18">4.18) Como eu retorno m&uacute;ltiplos registros ou colunas de uma fun&ccedil;&atilde;o?</H3>

	<P>&Eacute; f&aacute;cil utilizando fun&ccedil;&otilde;es que retornam conjunto,
	<a href="http://www.postgresql.org/docs/techdocs.17">
	http://www.postgresql.org/docs/techdocs.17</a>.</P>

	<H3 id="item4.19">4.19) Por que eu obtenho erros "relation with OID ######
	does not exist" ao acessar tabelas tempor&aacute;rias em fun&ccedil;&otilde;es PL/PgSQL?</H3>

    <P>PL/PgSQL armazena o conte&uacute;do da fun&ccedil;&atilde;o, e o efeito indesejado &eacute; que se uma fun&ccedil;&atilde;o PL/PgSQL acessa uma tabela tempor&aacute;ria, e aquela tabela &eacute; removida e criada novamente, e a fun&ccedil;&atilde;o &eacute; chamada novamente, a fun&ccedil;&atilde;o ir&aacute; falhar porque o conte&uacute;do armazenado da fun&ccedil;&atilde;o ainda apontar&aacute; para a tabela tempor&aacute;ria antiga. A solu&ccedil;&atilde;o &eacute; utilizar o <SMALL>EXECUTE</SMALL> para acesso a tabelas tempor&aacute;rias no PL/PgSQL. Isto ir&aacute; fazer com que a consulta seja avaliada toda vez.</P>

    <H3 id="item4.20">4.20) Quais solu&ccedil;&otilde;es de replica&ccedil;&atilde;o est&atilde;o dispon&iacute;veis?</H3>

	<P>Embora "replica&ccedil;&atilde;o" seja um termo simples, h&aacute; v&aacute;rias tecnologias para fazer
	replica&ccedil;&atilde;o, com vantagens e desvantagens para cada um.</P>

	<P>Replica&ccedil;&atilde;o mestre/escravo permite que um mestre receba consultas de leitura e
	escrita, enquanto os escravos s&oacute; podem aceitar leitura/consultas <SMALL>SELECT</SMALL>.
	A solu&ccedil;&atilde;o mais popular de replica&ccedil;&atilde;o mestre-escravo para PostgreSQL dispon&iacute;vel livremente
	&eacute; <A href="http://gborg.postgresql.org/project/slony1/projdisplay.php">Slony-I</A>.</P>

	<P>Replica&ccedil;&atilde;o com m&uacute;ltiplos mestres permite que consultas leitura/escrita sejam
	enviadas para m&uacute;ltiplos computadores replicadores. Esta capacidade tamb&eacute;m tem
	um s&eacute;rio impacto na performance por causa da necessidade de sincronizar as mudan&ccedil;as
	entre os servidores. <A href="http://pgfoundry.org/projects/pgcluster/">PGCluster</a>
	&eacute; a solu&ccedil;&atilde;o mais popular dispon&iacute;vel livremente para PostgreSQL.</P>

	<P>H&aacute; tamb&eacute;m solu&ccedil;&otilde;es de replica&ccedil;&atilde;o comerciais e baseadas em hardware dispon&iacute;veis
	que suportam uma variedade de modelos de replica&ccedil;&atilde;o.</P>

	<H3 id="item4.21">4.21) Por que os nomes de minhas tabelas e colunas n&atilde;o
	s&atilde;o reconhecidos em minha consulta? Por que as mai&uacute;sculas n&atilde;o s&atilde;o preservadas?</H3>

	<P>A causa mais comum de nomes desconhecidos &eacute; o uso de aspas ao redor dos nomes da tabela ou coluna
	durante a cria&ccedil;&atilde;o da tabela. Ao utilizar aspas, nomes de tabela e coluna
	(chamados de identificadores) s&atilde;o armazenados <a
	href="http://www.postgresql.org/docs/current/static/sql-syntax.html#SQL-SYNTAX-IDENTIFIERS">
	como especificado</a>, significando que voc&ecirc; deve utilizar aspas quando se
	referir aos nomes na consulta. Algumas interfaces, como pgAdmin,
	automaticamente colocam aspas nos identificadores durante a cria&ccedil;&atilde;o da tabela.
	Ent&atilde;o, para identificadores serem reconhecidos, voc&ecirc; deve:
	<UL>
	<LI>Evitar colocar aspas no identificador ao criar tabelas</LI>
	<LI>Utilizar somente caracteres min&uacute;sculos em identificadores</LI>
	<LI>Colocar aspas em identificadores ao referenci&aacute;-los nas consultas</LI>
	</UL>
  </BODY>
</HTML>