You are on page 1of 36

Tutorial do PostgreSQL 7.3.

The PostgreSQL Global Development Group

Tutorial do PostgreSQL 7.3.2 por The PostgreSQL Global Development Group Copyright 1996-2002 The PostgreSQL Global Development Group Legal Notice
PostgreSQL is Copyright 1996-2002 by the PostgreSQL Global Development Group and is distributed under the terms of the license of the University of California below. Postgres95 is Copyright 1994-5 by the Regents of the University of California. 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. 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. 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.

ndice
Prefcio ....................................................................................................................................................................i 1. O que o PostgreSQL? ...............................................................................................................................i 2. Uma breve histria do PostgreSQL.............................................................................................................i 2.1. O projeto POSTGRES de Berkeley ...............................................................................................ii 2.2. O Postgres95..................................................................................................................................ii 2.3. O PostgreSQL...............................................................................................................................iii 3. O que est contido neste manual ...............................................................................................................iii 4. Reviso dos recursos de documentao .................................................................................................... iv 5. Terminologia e notao .............................................................................................................................. v 6. Guia para relatar erros ...............................................................................................................................vi 6.1. Identicando erros ........................................................................................................................vi 6.2. O que relatar .................................................................................................................................vi 6.3. Aonde relatar os erros.................................................................................................................viii 1. Iniciando ............................................................................................................................................................. 1 1.1. Instalao................................................................................................................................................. 1 1.2. Fundamentos da Arquitetura ................................................................................................................... 1 1.3. Criando um banco de dados .................................................................................................................... 2 1.4. Acessando um banco de dados................................................................................................................ 3 2. A linguagem SQL............................................................................................................................................... 5 2.1. Introduo................................................................................................................................................ 5 2.2. Conceitos................................................................................................................................................. 5 2.3. Criando uma nova tabela ......................................................................................................................... 5 2.4. Povoando uma tabela com linhas ............................................................................................................ 6 2.5. Consultando uma tabela .......................................................................................................................... 7 2.6. Junes entre tabelas ............................................................................................................................... 8 2.7. Funes de agregao............................................................................................................................ 10 2.8. Atualizaes .......................................................................................................................................... 12 2.9. Excluses............................................................................................................................................... 12 3. Funcionalidades avanadas............................................................................................................................. 14 3.1. Introduo.............................................................................................................................................. 14 3.2. Vises .................................................................................................................................................... 14 3.3. Chaves estrangeiras ............................................................................................................................... 14 3.4. Transaes ............................................................................................................................................. 15 3.5. Herana.................................................................................................................................................. 16 3.6. Concluso .............................................................................................................................................. 18 Bibliograa ........................................................................................................................................................... 19 Index...................................................................................................................................................................... 21

iii

Prefcio
1. O que o PostgreSQL?
O PostgreSQL um sistema de gerenciamento de banco de dados objeto-relacional (SGBDOR) baseado no POSTGRES, Verso 4.21, desenvolvido no Departamento de Cincia da Computao da Universidade da Califrnia em Berkeley. O projeto POSTGRES, liderado pelo Professor Michael Stonebraker, foi patrocinado pelas seguintes instituies: Defense Advanced Research Projects Agency (DARPA); Army Research Ofce (ARO); National Science Foundation (NSF); e ESL, Inc. O PostgreSQL descende deste cdigo original de Berkeley, possuindo o cdigo fonte aberto. Fornece suporte s linguagens SQL92/SQL99 alm de outras funcionalidades modernas. O POSTGRES foi o pioneiro em muitos conceitos objeto-relationais que agora esto se tornando disponveis em alguns bancos de dados comerciais. Os Sistemas de Gerenciamento de Bancos de Dados Relacionais (SGBDR) tradicionais suportam um modelo de dados que consiste em uma coleo de relaes com nome, contendo atributos de um tipo especco. Nos sistemas comerciais em uso, os tipos possveis incluem nmero de ponto utuante, inteiro, cadeia de caracteres, monetrio e data. largamente reconhecido que este modelo no adequado para aplicaes futuras de processamento de dados. O modelo relacional substituiu com sucesso os modelos anteriores em parte devido sua simplicidade Espartana. Entretanto, esta simplicidade tornou a implementao de certas aplicaes muito difcil. O PostgreSQL oferece um substancial poder adicional, devido incorporao dos conceitos mostrados abaixo de uma forma que os usurios podem facilmente estender o sistema:

herana tipos de dados funes

Outras funcionalidades fornecem poder e exibilidade adicionais:


restries gatilhos regras integridade da transao

Estas funcionalidades colocam o PostgreSQL dentro da categoria de bancos de dados referida como objetorelacional. Repare que isto diferente daqueles referidos como orientados a objetos que, em geral, no so muito adequados para dar suporte s linguagens de banco de dados relacionais tradicionais. Portanto, embora o PostgreSQL possua algumas funcionalidades de orientao a objetos, est rmemente ligado ao mundo dos bancos de dados relacionais. Na verdade, alguns bancos de dados comerciais incorporaram recentemente funcionalidades nas quais o PostgreSQL foi o pioneiro.

2. Uma breve histria do PostgreSQL


O sistema de gerenciamento de banco de dados objeto-relacional hoje em dia conhecido por PostgreSQL (e por um breve perodo de tempo chamado Postgres95) derivado do pacote POSTGRES escrito na Universidade da Califrnia em Berkeley. Com mais de uma dcada de desenvolvimento por trs, o PostgreSQL o mais avanado
1. http://s2k-ftp.CS.Berkeley.EDU:8000/postgres/postgres.html

Prefcio banco de dados de cdigo aberto disponvel em qualquer lugar, oferecendo controle de concorrncia multi-verso, suportando praticamente todas as construes do SQL (incluindo subconsultas, transaes, tipos denidos pelo usurio e funes), e dispondo de um amplo conjunto de ligaes com linguagens procedurais (incluindo C, C++, Java, Perl, Tcl e Python).

2.1. O projeto POSTGRES de Berkeley


A implementao do SGBD POSTGRES comeou em 1986. Os conceitos iniciais para o sistema foram apresentados em The design of POSTGRES, e a denio do modelo de dados inicial apareceu em The POSTGRES data model. O projeto do sistema de regras nesta poca foi descrito em The design of the POSTGRES rules system. Os princpios bsicos e a arquitetura do gerenciador de armazenamento foram detalhados em The design of the POSTGRES storage system. O Postgres passou por vrias verses desde ento. A primeira verso de demonstrao do sistema se tornou operacional em 1987, e foi exibida em 1988 na Conferncia ACM-SIGMOD. A verso 1, descrita em The implementation of POSTGRES, foi liberada para alguns poucos usurios externos em junho de 1989. Em resposta crtica ao primeiro sistema de regras (A commentary on the POSTGRES rules system), o sistema de regras foi re-projetado (On Rules, Procedures, Caching and Views in Database Systems) e a verso 2 foi liberada em junho de 1990, contendo um novo sistema de regras. A verso 3 surgiu em 1991 adicionando suporte a mltiplos gerenciadores de armazenamento, um executor de consultas melhorado, e um sistema de regras de reescrita reescrito. Para a maior parte, as verses seguintes at o Postgres95 (veja abaixo) focaram a portabilidade e a conabilidade. O POSTGRES tem sido usado para implementar muitas aplicaes diferentes de pesquisa e produo, incluindo: sistema de anlise de dados nanceiros, pacote de monitoramento de desempenho de turbina a jato, banco de dados de acompanhamento de asterides, banco de dados de informaes mdicas, alm de vrios sistemas de informaes geogrcas. O POSTGRES tambm tem sido usado como uma ferramenta educacional em diversas universidades. Finalmente, a Illustra Information Technologies (posteriormente incorporada pela Informix2, que agora pertence IBM3) pegou o cdigo e comercializou. O POSTGRES se tornou o gerenciador de dados primrio para o projeto de computao cientca Sequoia 20004 nos ns de 1992. O tamanho da comunidade de usurios externos praticamente dobrou durante o ano de 1993. Comeou a se tornar cada vez mais bvio que a manuteno do cdigo do prottipo e seu suporte estava consumindo uma grande quantidade de tempo que deveria ser dedicado a pesquisas sobre bancos de dados. Em um esforo para reduzir esta sobrecarga de suporte, o projeto do POSTGRES de Berkeley terminou ocialmente com a verso 4.2.

2.2. O Postgres95
Em 1994, Andrew Yu e Jolly Chen adicionaram um interpretador da linguagem SQL ao POSTGRES. O Postgres95 foi em seguida liberado para a Web para encontrar seu caminho no mundo como um descendente de cdigo aberto do cdigo original do POSTGRES de Berkeley. O cdigo do Postgres95 era totalmente escrito em ANSI C e reduzido em tamanho em 25%. Muitas mudanas internas melhoraram o desempenho e a facilidade de manuteno. O Postgres95 release 1.0.x era 30-50% mais rpido em comparao com o POSTGRES verso 4.2, utilizando o Wisconsin Benchmark. Alm da correo de erros, as melhorias principais foram as seguintes:

A linguagem de consultas PostQUEL foi substituda pelo SQL (implementado no servidor). As subconsultas no foram suportadas at o PostgreSQL (veja abaixo), mas podiam ser imitadas no Postgres95 atravs de funes SQL denidas pelo usurio. As agregaes foram re-implementadas. O suporte para a clusula GROUP
http://www.informix.com/ http://www.ibm.com/ http://meteora.ucsd.edu/s2k/s2k_home.html

2. 3. 4.

ii

Prefcio BY das consultas tambm foi adicionado. A interface da libpq permaneceu disponvel para os programas escritos na linguagem C.

Adicionalmente ao programa monitor, um novo programa (psql) foi fornecido para consultas SQL interativas utilizando o Readline do GNU. Uma nova biblioteca cliente, libpgtcl, suportava clientes baseados no Tcl. Uma shell, pgtclsh, permitia que os novos comandos Tcl zessem uma interface entre os programas Tcl e o servidor Postgres95. A interface para objetos grandes foi refeita. A Inverso de objetos grandes era o nico mecanismo para armazen-los (O sistema de arquivos Inverso foi removido). O sistema de regras no nvel de instncia foi removido. As regras ainda estavam disponveis atravs de regras de reescrita. Um breve tutorial introduzindo as funcionalidades regulares da linguagem SQL, assim como as do Postgres95, foi distribudo junto com o cdigo fonte. O utilitrio make do GNU (no lugar do make do BSD) foi utilizado para a gerao. Alm disso, o Postgres95 podia ser compilado com o GCC sem correes (alinhamento de dados para a preciso dupla foi corrigido).

2.3. O PostgreSQL
Em 1996 se tornou claro que o nome Postgres95 no resistiria ao teste do tempo. Foi escolhido ento um novo nome, PostgreSQL, para reetir o relacionamento entre o POSTGRES original e as verses mais recentes com funcionalidade SQL. Ao mesmo tempo, foi mudado o nmero da verso para comear em 6.0, colocando os nmeros de volta na seqncia original comeada pelo projeto POSTGRES de Berkeley. A nfase durante o desenvolvimento do Postgres95 era identicar e compreender os problemas existentes no cdigo do servidor. Com o PostgreSQL, a nfase foi mudada para a melhoria das funcionalidades e dos recursos, embora o trabalho continuasse em todas as reas. As principais melhorias no PostgreSQL incluem:

O bloqueio no nvel de tabela foi substitudo por um sistema de concorrncia multi-verso, que permite aos que esto lendo continuarem a ler dados consistentes durante a atividade de escrita, e permite efetuar cpias de segurana atravs do pg_dump enquanto o banco de dados se mantm disponvel para consultas. A implementao de funcionalidades importantes no servidor, incluindo subconsultas, padres, restries e gatilhos. A incorporao de funcionalidades adicionais compatveis com a linguagem SQL92, incluindo chaves primrias, identicadores entre aspas, converso implcita de tipo de cadeias de caracteres literais, converso explcita de tipos e inteiros binrios e hexadecimais. Os tipos nativos foram aperfeioados, incluindo uma grande variedade de tipos para data e hora e suporte adicional para tipo geomtrico. A velocidade geral do cdigo do servidor foi melhorada em aproximadamente 20-40%, e o tempo de inicializao do servidor foi reduzido em 80% desde que a verso 6.0 foi liberada.

iii

Prefcio

3. O que est contido neste manual


Seja bem-vindo ao PostgreSQL e ao Tutorial do PostgreSQL. Os poucos captulos que se seguem tm por objetivo fornecer uma breve introduo ao PostgreSQL, aos conceitos de banco de dados relacional e linguagem SQL, para os que so iniciantes em qualquer um destes tpicos. Somente assume-se um conhecimento geral sobre a utilizao de computadores. Nenhuma experincia particular com Unix ou em programao requerida. Este tutorial tem por objetivo principal fornecer experincia prtica com relao aos aspectos importantes do PostgreSQL. No existe nenhuma inteno em se dar um tratamento completo ou abrangente dos tpicos cobertos. Aps ler este tutorial pode-se prosseguir atravs da leitura do Guia do Usurio do PostgreSQL para obter mais conhecimento formal sobre a linguagem SQL, ou o Guia do Programador do PostgreSQL para obter informaes sobre o desenvolvimento de aplicaes para o PostgreSQL. Os que instalam e gerenciam seus prprios servidores tambm devem ler o Guia do Administrador do PostgreSQL.

4. Reviso dos recursos de documentao


A documentao do PostgreSQL est organizada em diversos livros: Tutorial do PostgreSQL Uma introduo informal para os novos usurios. Guia do Usurio do PostgreSQL Documenta o ambiente da linguagem de consulta SQL, incluindo tipos de dados e funes, assim como o ajuste do desempenho no nvel de usurio. Todo usurio do PostgreSQL deve l-lo. Guia do Administrador do PostgreSQL Informaes sobre a instalao e a administrao do servidor. Todos os que administram um servidor PostgreSQL, tanto para uso pessoal quanto para uso por outras pessoas, devem l-lo. Guia do Programador do PostgreSQL Informaes avanadas para programadores de aplicativos. Os tpicos incluem a extensibilidade de tipo e de funo, interfaces com bibliotecas e questes relativas ao projeto de aplicativos. Manual de Referncia do PostgreSQL Pginas de referncia contendo a sintaxe para os comandos SQL, programas para a estao cliente e servidor. Este manual um auxlio aos Guias do Usurio, do Administrador e do Programador. Guia do Desenvolvedor do PostgreSQL Informaes para os desenvolvedores do PostgreSQL. Feito para queles que esto contribuindo para o projeto PostgreSQL. As informaes sobre o desenvolvimento de aplicativos esto mostradas no Guia do Programador.

Alm deste conjunto de manuais, existem outros recursos para ajudar na instalao e uso do PostgreSQL: man pages As pginas do Manual de Referncia no formato tradicional man do Unix. No existe diferena no contedo.

iv

Prefcio FAQs As listas de perguntas freqentemente formuladas (Frequently Asked Questions - FAQ) documentam tanto questes gerais como algumas questes especcas para uma plataforma. READMEs Os arquivos README (leia-me) esto disponveis em alguns pacotes contribudos. Stio na Web O stio na Web do PostgreSQL 5 possui detalhes sobre sobre a ltima verso, funcionalidades a serem incorporadas, e outras informaes para tornar o trabalho ou a diverso com o PostgreSQL mais produtiva. Listas de discusso As listas de discusso so um bom lugar para se conseguir ter as perguntas respondidas, para trocar experincia com outros usurios, e para fazer contato com os desenvolvedores. Consulte a seo Users Lounge6 do stio na Web do PostgreSQL para obter mais informaes. Voc mesmo! O PostgreSQL um trabalho de cdigo aberto e, por isso, depende do apoio permanente da comunidade de usurios. Quando comeamos a utilizar o PostgreSQL dependemos da ajuda de outros, tanto atravs da documentao quanto das listas de discusso. Considere ento em retribuir seus conhecimentos. Se voc aprender alguma coisa que no faz parte da documentao, escreva e contribua. Se voc adicionar funcionalidades ao cdigo, contribua com estas funcionalidades. Mesmo queles que no possuem muita experincia podem fazer correes e pequenas alteraes na documentao, e esta uma boa maneira de se comear. A lista de discusso <pgsql-docs@postgresql.org> um lugar para se visitar com freqncia (N.T. - No Brasil veja PostgreSQL Brasil7).

5. Terminologia e notao
Um administrador normalmente a pessoa responsvel pela instalao e funcionamento do servidor. Um usurio pode ser qualquer um usando, ou querendo usar, qualquer parte do sistema PostgreSQL. Estes termos no devem ser interpretados ao p da letra; este conjunto de documentos no estabelece premissas sobre os procedimentos do administrador do sistema. utilizado /usr/local/pgsql/ como sendo o diretrio raiz da instalao e /usr/local/pgsql/data como o diretrio contendo os arquivos dos banco de dados. Estes diretrios podem ser outros em sua mquina, os detalhes podem ser vistos no Guia do Administrador (N.T. /var/lib/pgsql/ e /var/lib/pgsql/data no Mandrake Linux). Na sinopse dos comandos os colchetes ([]) indicam uma frase ou palavra chave opcional. Qualquer coisa entre chaves ({}) contendo, tambm, barras verticais (|), indica que uma das alternativas deve ser escolhida. Os exemplos mostram comandos executados a partir de vrias contas e programas. Os comandos executados a partir de uma shell do Unix podem estar precedidos por um caractere de cifro ($). Os comandos executados a partir da conta de um usurio, tal como root ou postgres, so especialmente sinalizados e explicados. Os comandos SQL podem estar precedidos por => ou no ter nada os precedendo, dependendo do contexto.
5. 6. 7. http://www.postgresql.org http://www.postgresql.org/users-lounge/ http://br.groups.yahoo.com/group/postgresql-br/

Prefcio
Nota: A notao para sinalizadores de comandos no totalmente consistente atravs do conjunto de documentos. Por favor relate os problemas encontrados para a lista de discusso da documentao em <pgsql-docs@postgresql.org>.

6. Guia para relatar erros


Quando encontrado algum erro no PostgreSQL ns desejamos conhec-lo. Seus relatrios de erros so uma parte importante para tornar o PostgreSQL mais convel, porque mesmo o mais extremo cuidado no pode garantir que todas as partes do PostgreSQL vo funcionar em todas as plataformas sob qualquer circunstncia. As sugestes abaixo tm por objetivo ajud-lo a preparar seu relatrio de erro, para que este possa ser tratado de uma maneira efetiva. Ningum obrigado a segui-las, mas so feitas para ser uma vantagem para todos. Ns no podemos prometer corrigir todos os erros imediatamente. Se o erro for bvio, crtico, ou afetar muitos usurios, existe uma boa chance de que algum vai olh-lo. Pode acontecer, tambm, ns solicitarmos a atualizao para uma nova verso, para ver se o erro tambm acontece na nova verso. Tambm podemos decidir que o erro no poder ser corrigido antes de uma grande reescrita que planejamos fazer. Ou, talvez, simplesmente muito difcil corrigi-lo e existem coisas mais importantes na agenda. Se for necessria ajuda imediata, deve ser levada em considerao a contratao de um suporte comercial.

6.1. Identicando erros


Antes de relatar um erro, por favor leia e releia a documentao para vericar se realmente pode ser feito o que est se tentando fazer. Se no est claro na documentao que algo pode ou no ser feito, por favor informe isto tambm; um erro da documentao. Se acontecer do programa fazer algo diferente do que est escrito na documentao, isto tambm um erro. Pode incluir, mas no se restringe, s seguintes circunstncias:

O programa termina com um erro fatal, ou com uma mensagem de erro do sistema operacional que aponta para um erro no programa (um exemplo oposto seria uma mensagem de disco cheio, uma vez que o prprio usurio deve corrigir este problema). O programa produz uma sada errada para uma entrada especca. O programa se recusa a aceitar uma entrada vlida (conforme denido na documentao). O programa aceita uma entrada invlida sem enviar uma mensagem de erro. Porm, tenha em mente que a sua idia de entrada errada pode ser a nossa idia de uma extenso, ou a compatibilidade com a prtica tradicional. O PostgreSQL falha ao compilar, montar ou instalar de acordo com as instrues, em uma plataforma suportada.

Aqui programa se refere a qualquer executvel, e no apenas ao processo servidor. Estar lento ou consumir muitos recursos no necessariamente um erro. Leia a documentao ou faa perguntas em alguma lista de discusso para pedir ajuda para ajustar seus aplicativos. No agir de acordo com o padro SQL tambm no necessariamente um erro, a menos que a aderncia com a funcionalidade especca esteja explicitamente declarada. Antes de prosseguir, verique a lista TODO (a fazer) e a FAQ para ver se o seu erro j no conhecido. Se voc no conseguir decodicar a informao da lista TODO, relate seu problema. O mnimo que podemos fazer tornar a lista TODO mais clara.

vi

Prefcio

6.2. O que relatar


A coisa mais importante a ser lembrada quando vamos relatar erros declarar todos os fatos, e somente os fatos. No especule sobre o que voc acha que est certo ou errado, o que parece que deva ser feito, ou qual parte do programa est falhando. Se voc no est familiarizado com a implementao voc provavelmente vai supor errado, e no vai nos ajudar nem um pouco. E, mesmo que voc esteja familiarizado, uma explanao educada um grande suplemento, mas no substitui os fatos. Se ns formos corrigir o erro, ns temos que v-lo acontecer primeiro. Informar fatos cruamente relativamente direto (provavelmente pode ser copiado e colado a partir da tela), mas geralmente detalhes importantes so deixados de fora porque algum pensou que no tinha importncia, ou que o relatrio seria entendido de qualquer maneira. Os seguintes itens devem estar contidos em todo relatrio de erro:

A seqncia exata dos passos, desde o incio do programa, necessrios para reproduzir o problema. Isto deve estar autocontido; no suciente enviar apenas um comando SELECT sem enviar os comandos CREATE TABLE e INSERT que os precederam, se a sada depender dos dados contidos nas tabelas. Ns no temos tempo para realizar a engenharia reversa do esquema do seu banco de dados e, se ns tivermos que criar os nossos prprios dados, ns provavelmente no vamos conseguir reproduzir o problema. O melhor formato para realizar um caso de teste, para problemas relacionados com a linguagem de consulta, um arquivo que possa ser executado a partir do aplicativo psql e que mostre o problema (certique-se de que no exista nada em seu arquivo de inicializao ~/.psqlrc). Uma maneira fcil de comear este arquivo usar o pg_dump para gerar as declaraes da tabela e dos dados necessrios para montar o cenrio, e depois incluir a consulta problemtica. Encorajamos voc a minimizar o tamanho de seu exemplo, mas isto no absolutamente necessrio. Se o erro for reproduzvel, ns o encontraremos de qualquer forma. Se o seu aplicativo utiliza alguma outra interface no cliente tal como o PHP ento, por favor, tente isolar a consulta problemtica. Provavelmente ns no vamos congurar um servidor Web para reproduzir o seu problema. De qualquer maneira lembre-se de fornecer os arquivos de entrada exatos, e no suponha que o problema acontea com arquivos grandes ou bancos de dados de tamanho mdio, etc... uma vez que estas informaes so muito imprecisas para que possam ser utilizadas.

A sada produzida. Por favor, no diga que no funcionou ou que deu pau. Se houver uma mensagem de erro mostre-a, mesmo que voc no consiga entend-la. Se o programa terminar com um erro do sistema operacional, diga qual. Se nada acontecer, informe. Mesmo que o resultado do seu caso de teste seja o trmino anormal do programa, ou seja bvio de alguma outra maneira, pode ser que isto no acontea em nossa plataforma. A coisa mais fcil a ser feita copiar a sada do terminal, se for possvel.
Nota: No caso de erros fatais a mensagem de erro informada pelo cliente pode no conter toda a informao disponvel. Por favor, olhe tambm o log produzido no servidor de banco de dados. Se voc no mantm a sada do log do servidor, esta uma boa hora para comear a faz-lo.

A sada esperada uma informao importante a ser declarada. Se voc escreve apenas Este comando produz esta sada. ou Isto no o que eu esperava., ns podemos executar, olhar a sada, e achar que est tudo correto e exatamente o que ns espervamos que fosse. Ns no temos que perder tempo para decodicar a semntica exata por trs de seus comandos. Abstenha-se especialmente de dizer meramente Isto no o que o SQL diz ou o que o Oracle faz. Pesquisar o comportamento correto do SQL no uma tarefa divertida, nem ns sabemos como todos os outros bancos de dados relacionais existentes se comportam (se o seu problema o trmino anormal de seu programa, este item obviamente pode ser omitido). Qualquer opo de linha de comando e outras opes de inicializao, incluindo as variveis de ambiente relacionadas ou arquivos de congurao que foram mudados com relao ao padro. Novamente, seja exato.

vii

Prefcio Se estiver sendo utilizada uma distribuio pr-congurada que inicializa o servidor de banco de dados durante o boot, deve-se tentar descobrir como isto feito.

Qualquer coisa feita que seja diferente das instrues de instalao. A verso do PostgreSQL. Pode-se executar o comando SELECT version(); para descobrir a verso do servidor ao qual se est conectado. A maioria dos programas executveis suporta a opo --version; ao menos postmaster --version e psql --version devem funcionar. Se a funo ou as opes no existirem, ento a verso sendo usada muito antiga e merece ser atualizada. Tambm pode ser visto o arquivo README no diretrio fonte, ou o arquivo com o nome da distribuio ou o nome do pacote. Se a verso for pr-congurada, como RPMs, informe, incluindo qualquer sub-verso que o pacote possa ter. Se estiver se referindo a uma verso do CVS isto deve ser mencionado, incluindo a data e a hora. Se a sua verso for anterior a 7.3.2 provavelmente ns lhe pediremos que atualize. Existem toneladas de correes de erro a cada nova liberao, sendo este o motivo das novas liberaes.

Informaes da plataforma. Isto inclui o nome do ncleo e a verso, a biblioteca C, o processador e a memria. Na maioria dos casos suciente informar o fornecedor e a verso, mas no se deve assumir que todo mundo sabe exatamente o que o Debian contm, ou que todo mundo use Pentium. Se houver problemas de instalao ento as informaes sobre compilador, make, etc... tambm so necessrias.

No tenha medo que seu relatrio de erro se torne muito longo. Este um fato da vida. melhor relatar tudo da primeira vez do que ns termos que extrair os fatos de voc. Por outro lado, se os seus arquivos de entrada so enormes, justo perguntar primeiro se algum est interessado em v-los. No perca todo o seu tempo tentando descobrir que mudanas na sua entrada fazem o problema desaparecer. Isto provavelmente no vai ajudar a resolver o problema. Se for visto que o erro no pode ser corrigido imediatamente, voc ainda vai ter tempo para compartilhar sua descoberta com os outros. Tambm, novamente, no perca seu tempo advinhando porque o erro existe. Ns o encontraremos brevemente. Ao escrever o relatrio de erro, por favor escolha uma terminologia que no confunda. O pacote de software em seu todo chamado de PostgreSQL e, algumas vezes, de Postgres para abreviar. Se estiver se referindo especicamente ao processo servidor mencione isto, no diga apenas que o PostgreSQL caiu. A queda de um nico processo do servidor bem diferente da queda do processo postmaster pai; por favor no diga o postmaster caiu quando um nico processo servidor caiu, nem o contrrio. Alm disso os programas cliente, como o terminal interativo psql, so completamente separados do servidor. Por favor, tente especicar se o problema est no lado do cliente ou no lado do servidor.

6.3. Aonde relatar os erros


De uma maneira geral os relatrios de erro devem ser enviados para a lista de discusso de relatrios de erros em <pgsql-bugs@postgresql.org>. necessria a utilizao de um assunto descritivo para a mensagem de correio eletrnico, talvez uma parte da prpria mensagem de erro. Outro mtodo preencher o relatrio de erro disponvel no stio do projeto na Web em http://www.postgresql.org/. O preenchimento desta forma faz com que este seja enviado para a lista de discusso <pgsql-bugs@postgresql.org>. No envie o relatrio de erro para nenhuma lista de discusso dos usurios, tal como <pgsql-sql@postgresql.org> ou <pgsql-general@postgresql.org>. Estas listas de discusso so para responder perguntas dos usurios, e seus subscritores normalmente no desejam receber relatrios de erro. Mais importante ainda, eles provavelmente no vo conseguir corrigir o erro. Por favor, tambm no envie relatrios para a lista de discusso dos desenvolvedores em <pgsql-hackers@postgresql.org>. Esta lista para discutir o desenvolvimento do PostgreSQL e ns

viii

Prefcio gostamos de manter os relatrios de erro em separado. Ns podemos decidir discutir o seu relatrio de erro em pgsql-hackers, se o problema necessitar uma maior averiguao. Se voc tiver problema com a documentao, o melhor lugar para relatar na lista de discusso da documentao em <pgsql-docs@postgresql.org>. Por favor, seja especco sobre qual parte da documentao voc est descontente. (N.T. Informe os erros encontrados na traduo deste manual a <halleypo@yahoo.com.br>) Se o seu erro for algum problema de portabilidade ou uma plataforma no suportada, envie uma mensagem de correio eletrnico para <pgsql-ports@postgresql.org>, para que ns (e voc) possamos trabalhar para portar o PostgreSQL para esta plataforma.
Nota: Devido grande quantidade de spam na Internet, todos os endereos de correio eletrnico acima so de listas de discusso fechadas. Ou seja, voc precisa subscrever a lista primeiro para depois poder enviar mensagens (entretanto, voc no precisa subscrever para utilizar o formulrio de relatrio de erro da Web). Se voc deseja enviar uma mensagem de correio eletrnico, mas no deseja receber o trfego da lista, voc pode subscrever e congurar sua opo de subscrio com nomail. Para maiores informaes envie uma mensagem para <majordomo@postgresql.org> contendo apenas a palavra help no corpo da mensagem.

ix

Captulo 1. Iniciando
1.1. Instalao
Antes de poder usar o PostgreSQL este deve estar instalado, claro. possvel que o PostgreSQL j esteja instalado em sua mquina, seja porque est includo na distribuio do sistema operacional, ou porque o administrador do sistema fez a instalao. Se este for o caso, deve-se obter informaes na documentao do sistema operacional ou com o administrador do sistema sobre como acessar o PostgreSQL. Se voc no tiver certeza que o PostgreSQL est disponvel, ou que pode ser usado para os seus experimentos, voc poder fazer a instalao por si mesmo. Proceder desta maneira no difcil e pode ser um bom exerccio. O PostgreSQL pode ser instalado por qualquer usurio sem privilgios, porque nenhum acesso de super-usurio (root) necessrio. Se voc for instalar o PostgreSQL por si mesmo, ento consulte o Guia do Administrador do PostgreSQL para ler as instrues de instalao, e depois retorne para este manual quando a instalao estiver completa. Certique-se de seguir de perto a seo relativa congurao das variveis de ambiente apropriadas. Se o administrador do sistema no fez a congurao conforme o padro, talvez algum trabalho adicional deva ser feito. Por exemplo, se a mquina servidora de banco de dados for uma mquina remota, ser necessrio denir a varivel de ambiente PGHOST com o nome da mquina servidora de banco de dados. A varivel de ambiente PGPORT talvez tambm tenha que ser denida. A regra bsica esta: se voc tentar iniciar um programa aplicativo e este informar que no pode se conectar ao banco de dados, voc deve consultar o administrador do servidor ou, caso seja voc mesmo, a documentao para ter certeza de que o seu ambiente est corretamente congurado. Se voc no entendeu o pargrafo anterior ento, por favor, leia a prxima seo.

1.2. Fundamentos da Arquitetura


Antes de prosseguirmos, voc deve entender as bases da arquitetura de sistema do PostgreSQL. Compreendendo como as partes do PostgreSQL interagem entre si torna este captulo mais claro. No jargo de banco de dados, o PostgreSQL utiliza o modelo cliente-servidor. Uma sesso do PostgreSQL consiste dos seguintes processos (programas) cooperando entre si:

Um processo servidor, o qual gerencia os arquivos do banco de dados, aceita as conexes dos aplicativos cliente com o banco de dados, e executa as aes no banco de dados em nome dos clientes. O programa servidor de banco de dados chama-se postmaster. O aplicativo cliente do usurio (frontend) que deseja executar operaes de banco de dados. Os aplicativos cliente podem ter naturezas muito diversas: o cliente pode ser uma ferramenta no modo caractere, um aplicativo grco, um servidor Web que acessa o banco de dados para mostrar pginas da Web, ou uma ferramenta especializada para manuteno do banco de dados. Alguns aplicativos cliente so fornecidos junto com a distribuio do PostgreSQL, sendo a maioria desenvolvida pelos usurios.

tpico em aplicativos cliente-servidor o cliente e o servidor estarem em mquinas diferentes. Neste caso eles se comunicam atravs de uma conexo de rede TCP/IP. Deve-se ter isto em mente, porque arquivos que podem ser acessados na mquina cliente podem no ser acessveis (ou podem somente ser acessveis usando um nome de arquivo diferente) pela mquina servidora. O servidor PostgreSQL pode tratar mltiplas conexes concorrentes dos clientes. Para esta nalidade iniciado (fork) um novo processo para cada conexo. Deste ponto em diante, o cliente e o novo processo servidor passam

Captulo 1. Iniciando a se comunicar sem a interveno do processo original postmaster. Portanto, o postmaster est sempre executando aguardando por novas conexes dos clientes, enquanto os processos servidores associados aos clientes surgem e desaparecem (tudo isso, obviamente, invisvel para o usurio sendo somente mencionado para car completo).

1.3. Criando um banco de dados


O primeiro teste a ser feito para ver se possvel acessar o servidor de banco de dados tentar criar um banco de dados. Um servidor PostgreSQL pode gerenciar muitos bancos de dados. Tipicamente, um banco de dados em separado usado para cada projeto ou para cada usurio. Possivelmente o administrador j criou um banco de dados para o seu uso. Ele deve ter dito qual o nome de seu banco de dados. Neste caso esta etapa pode ser pulada, indo-se direto para a prxima seo. para criar um novo banco de dados chamado meu_bd deve ser usado o seguinte comando:
$ createdb meu_bd

O que deve produzir a resposta:


CREATE DATABASE

Se isto acontecer, esta etapa foi executada com sucesso e o resto da seo pode ser saltada. Se aparecer uma mensagem parecida com
createdb: command not found

ento o PostgreSQL no foi instalado adequadamente. Ou no foi instalado, ou o caminho de procura no est correto. Tente executar o comando utilizando o caminho absoluto:
$ /usr/local/pgsql/bin/createdb meu_bd

O caminho na sua mquina pode ser diferente (N.T. /usr/bin/createdb no Mandrake Linux). Faa contato com o administrador ou verique novamente as instrues de instalao para corrigir a situao. Outra resposta pode ser esta:
psql: could not connect to server: Connection refused Is the server running locally and accepting connections on Unix domain socket "/tmp/.s.PGSQL.5432"? createdb: database creation failed

Isto indica que o servidor no foi inicializado, ou que no foi inicializado aonde o createdb esperava que estivesse. Novamente, verique as instrues de instalao ou consulte o administrador. Se voc no possuir o privilgio necessrio para criar bancos de dados, a seguinte mensagem ser exibida:
ERROR: CREATE DATABASE: permission denied createdb: database creation failed

Nem todo usurio possui autorizao para criar novos bancos de dados. Se o PostgreSQL recusar a criao do banco de dados, ento o administrador deve conceder a permisso para criar bancos de dados para voc. Consulte

Captulo 1. Iniciando o administrador caso isto ocorra. Se voc instalou o PostgreSQL por si mesmo, ento voc deve se logar usando a mesma conta utilizada para inicializar o servidor para poder usar este tutorial. 1 Voc tambm pode criar bancos de dados com outros nomes. O PostgreSQL permite a criao de qualquer nmero de bancos de dados em uma instalao. Os nomes dos bancos de dados devem ter um primeiro caractere alfabtico, estando limitados a um comprimento de 63 caracteres. Uma escolha conveniente criar o banco de dados com o mesmo nome de seu usurio corrente. Muitas ferramentas assumem este nome de banco de dados como sendo o padro, evitando a necessidade de digit-lo. Para criar este banco de dados digite simplesmente
$ createdb

Se voc no deseja mais utilizar o seu banco de dados voc pode remov-lo. Por exemplo, se voc for o dono (criador) do banco de dados meu_bd, voc poder remov-lo utilizando o seguinte comando:
$ dropdb meu_bd

Para este comando o nome da conta no utilizado como o nome padro do banco de dados, o nome sempre deve ser especicado. Esta ao remove sicamente todos os arquivos associados ao banco de dados e no pode ser desfeita, portanto esta operao somente deve ser feita aps um longo perodo de reexo.

1.4. Acessando um banco de dados


Aps o banco de dados ter sido criado, este pode ser acessado pela:

Execuo do programa de terminal interativo do PostgreSQL chamado psql, que permite a entrada, edio e execuo de comandos SQL interativos. Utilizao de uma ferramenta cliente grca existente como o PgAccess, ou de um pacote de automao de escritrios com suporte a ODBC para criar e manusear bancos de dados. Estas possibilidades no esto cobertas neste tutorial. Criao de aplicativos personalizados, usando uma das vrias ligaes com linguagens disponveis. Estas possibilidades so discutidas com mais detalhe no Guia do Programador do PostgreSQL.

Voc provavelmente deseja iniciar o psql para executar os exemplos deste tutorial. O psql pode ser ativado para usar o banco de dados meu_bd digitando o seguinte comando:
$ psql meu_bd

Se o nome do banco de dados for omitido, ento o padro ca sendo o nome da conta de seu usurio. Voc j viu este esquema na seo anterior. No psql voc vai ser saudado com a seguinte mensagem:
Welcome to psql 7.3.2, the PostgreSQL interactive terminal. Type: \copyright for distribution terms

1. Uma explicao de porque isto funciona: Os nomes dos usurios do PostgreSQL so distintos dos nomes das contas do sistema operacional. Ao se conectar com um banco de dados pode ser escolhido o nome do usurio do PostgreSQL que deseja se conectar como; Se isto no for feito isto, o padro utilizar o mesmo nome da conta atual do sistema operacional. Como isto ocorre, sempre existir uma conta de usurio do PostgreSQL que possui o mesmo nome do usurio do sistema operacional que inicializou o servidor e acontece, tambm, que este usurio sempre tem permisso para criar bancos de dados. Em vez de se logar como o usurio pode ser especicada a opo -U em todos os aplicativos para escolher o nome do usurio do PostgreSQL que se deseja conectar como.

Captulo 1. Iniciando
\h \? \g \q meu_bd=> for help with SQL commands for help on internal slash commands or terminate with semicolon to execute query to quit

A ltima linha tambm pode ser


meu_bd=#

Isto signica que voc um super-usurio do banco de dados, o que acontece geralmente quando voc instala o PostgreSQL por si mesmo. Sendo um super-usurio signica que voc no est sujeito a controles de acesso. Para as nalidades deste tutorial isto no tem importncia. Se voc teve problemas ao inicializar o psql, ento retorne seo anterior. Os diagnsticos do psql e do createdb so similares, e se um funcionou o outro deve funcionar tambm. A ltima linha exibida pelo psql o prompt, indicando que o psql est aguardando voc, e que voc pode digitar comandos SQL dentro do espao de trabalho mantido pelo psql. Tente usar estes comando:
meu_bd=> SELECT version();

version ---------------------------------------------------------------PostgreSQL 7.3devel on i586-pc-linux-gnu, compiled by GCC 2.96 (1 row)


meu_bd=> SELECT current_date;

date -----------2002-08-31 (1 row)


meu_bd=> SELECT 2 + 2;

?column? ---------4 (1 row)

O programa psql possui vrios comandos internos que no so comandos SQL. Eles comeam pelo caractere de contrabarra, \. Alguns destes comandos so mostrados na mensagem de boas vindas. Por exemplo, pode ser obtida ajuda na sintaxe de vrios comandos SQL do PostgreSQL digitando-se:
meu_bd=> \h

Para sair do psql digite


meu_bd=> \q

e o psql vai terminar e retornar para a linha de comando do sistema operacional (para conhecer outros comandos internos digite \? no prompt do psql). Todas as funcionalidades do psql esto documentadas no Manual de Referncia do PostgreSQL. Se o PostgreSQL estiver instalado corretamente, voc tambm poder digitar man psql na linha de comando do sistema operacional para ver a documentao. Neste tutorial ns no vamos utilizar estas funcionalidades explicitamente, mas voc poder us-las por si prprio quando julgar adequado.

Captulo 2. A linguagem SQL


2.1. Introduo
Este captulo contm uma reviso sobre como utilizar a linguagem SQL para realizar operaes simples. Este tutorial tem apenas o propsito de fazer uma introduo e, de forma alguma, um tutorial completo sobre a linguagem SQL. Muitos livros foram escritos sobre o SQL, incluindo o Understanding the New SQL e A Guide to the SQL Standard. Voc deve car ciente de que alguma funcionalidades da linguagem no PostgreSQL so extenses ao padro. Nos exemplos a seguir assumido que voc tenha criado o banco de dados chamado meu_bd, conforme descrito no captulo anterior, e que tenha ativado o psql. Os exemplos presentes neste manual tambm podem ser encontrados no fonte da distribuio do PostgreSQL no diretrio src/tutorial/. Consulte o arquivo README neste diretrio para saber como us-los. Para iniciar o tutorial (em ingls) faa o seguinte:
$ cd ..../src/tutorial $ psql -s mydb ... mydb=> \i basics.sql

O comando \i l os comandos no arquivo especicado. A opo -s ativa o modo passo a passo, que faz uma pausa antes de enviar cada comando para o servidor. Os comandos utilizados nesta seo esto no arquivo basics.sql.

2.2. Conceitos
O PostgreSQL um sistema de gerenciamento de banco de dados relacional (SGBDR). Isto signica que um sistema para gerenciar dados armazenados em relaes. Uma relao essencialmente um termo matemtico para tabela. A noo de armazenar dados em tabelas um lugar to comum hoje em dia que pode parecer totalmente bvio, mas existem vrias outras maneiras de se organizar bancos de dados. Arquivos e diretrios em sistemas operacionais tipo Unix so um exemplo de banco de dados hierrquico. Um desenvolvimento mais moderno so os bancos de dados orientados a objeto. Cada tabela uma coleo nomeada de linhas. Cada linha de uma determinada tabela possui o mesmo conjunto de colunas nomeadas, e cada coluna de um tipo de dado especco. Enquanto as colunas possuem uma ordem xa em cada linha, importante lembrar que o SQL no garante a ordem das linhas dentro de uma tabela (embora as linhas possam ser explicitamente ordenadas para a exibio). As tabelas so agrupadas em bancos de dados, e uma coleo de bancos de dados gerenciada por uma nica instncia do servidor PostgreSQL constitui um agrupamento de bancos de dados.

2.3. Criando uma nova tabela


Uma nova tabela pode ser criada especicando-se o seu nome juntamente com os nomes das colunas e seus tipos:
CREATE TABLE clima ( cidade varchar(80), temp_min int,

-- temperatura mnima

Captulo 2. A linguagem SQL


temp_max prcp data ); int, real, date -- temperatura mxima -- precipitao

O comando pode ser digitado no psql com as quebras de linha. O psql vai reconhecer que o comando ainda no terminou at encontrar o ponto-e-vrgula. Espaos em branco (ou seja, espaos, tabulaes e novas linhas) podem ser utilizadas livremente nos comandos SQL. Isto signica que o comando pode ser digitado com um alinhamento diferente do mostrado acima, ou mesmo todo em uma nica linha. Dois hfens (--) introduzem um comentrio. Tudo que segui-los ignorado at o nal da linha. O SQL no diferencia letras maisculas e minsculas nas palavras e nos identicadores, a no ser quando os identicadores esto entre aspas (") para preservar letras maisculas e minsculas (o que no foi feito acima). O varchar(80) especica um tipo de dado que pode armazenar cadeias de caracteres arbitrrias com um comprimento de at 80 caracteres; O int o tipo inteiro normal; O real um tipo para armazenar nmeros de ponto utuante de preciso simples; date para armazenar data e hora (a coluna do tipo date poderia se chamar date, o que tanto pode ser conveniente quanto pode causar confuso). O PostgreSQL suporta os tipos SQL usuais int, smallint, real, double precision, char(N ), varchar(N ), date, time, timestamp e interval, assim bem como outros tipos de utilidade geral e um abrangente conjunto de tipos geomtricos. O PostgreSQL pode ser personalizado com um nmero arbitrrio de tipos denidos pelo usurio. Como conseqncia os nomes dos tipos no so sintaticamente palavras chaves, exceto onde for requerido para suportar casos especiais no padro SQL. No segundo exemplo so armazenadas as cidades e suas localizaes geogrcas:
CREATE TABLE cidades ( nome varchar(80), localizacao point );

O tipo point um exemplo de tipo especco do PostgreSQL. Finalmente, deve ser mencionado que se a tabela no for mais necessria, ou se deseja recri-la de uma forma diferente, esta pode ser removida atravs do seguinte comando:
DROP TABLE nome_da_tabela;

2.4. Povoando uma tabela com linhas


O comando INSERT utilizado para povoar uma tabela com linhas:
INSERT INTO clima VALUES (So Francisco, 46, 50, 0.25, 1994-11-27);

Repare que todos os tipos de dados usam formatos de entrada de dados bastante bvios. As constantes, que no so apenas valores numricos, geralmente devem estar entre apstrofos (), como no exemplo acima. O tipo date na verdade muito exvel com relao aos dados que aceita, mas para este tutorial ser utilizado o formato mostrado acima porque no possui ambigidade. O tipo point requer um par de coordenadas como entrada, como mostrado abaixo:
INSERT INTO cidades VALUES (So Francisco, (-194.0, 53.0));

Captulo 2. A linguagem SQL

A sintaxe usada anteriormente requer que seja lembrada a ordem das colunas. Uma sintaxe alternativa permite relacionar as colunas explicitamente:
INSERT INTO clima (cidade, temp_min, temp_max, prcp, data) VALUES (So Francisco, 43, 57, 0.0, 1994-11-29);

As colunas podem ser listadas em uma ordem diferente se for desejado, ou at mesmo omitir algumas colunas. Por exemplo, se a precipitao for desconhecida:
INSERT INTO clima (data, cidade, temp_max, temp_min) VALUES (1994-11-29, Hayward, 54, 37);

Muitos desenvolvedores consideram relacionar explicitamente as colunas um estilo melhor do que conar na ordem implcita. Por favor, entre todos os comando mostrados acima para ter alguns dados com que trabalhar nas prximas sees. Tambm pode ser utilizado o comando COPY para carregar uma grande quantidade de dados a partir de arquivos de texto. Geralmente isto mais rpido porque o comando COPY otimizado para esta nalidade, embora possua menos exibilidade do que o comando INSERT. Um exemplo poderia ser:
COPY clima FROM /home/user/clima.txt;

onde o arquivo de origem deve poder ser acessado pelo servidor e no pelo o cliente, uma vez que o servidor l o arquivo diretamente. Pode-se obter mais informaes sobre o comando COPY no Manual de Referncia do PostgreSQL.

2.5. Consultando uma tabela


Para obter os dados de uma tabela, a tabela deve ser consultada. O comando SELECT do SQL utilizado para esta funo. O comando dividido em lista de seleo (a parte que relaciona as colunas a serem retornadas), lista de tabelas (a parte que relaciona as tabelas de onde os dados vo ser extrados), e uma qualicao opcional (a parte em que so especicadas as restries). Por exemplo, para ver todas as linhas da tabela clima digite:
SELECT * FROM clima;

(aqui o * signica todas as colunas) e a sada deve ser:


cidade | temp_min | temp_max | prcp | data -----------------+----------+----------+------+-----------So Francisco | 46 | 50 | 0.25 | 1994-11-27 So Francisco | 43 | 57 | 0 | 1994-11-29 Hayward | 37 | 54 | | 1994-11-29 (3 rows)

Pode ser especicada qualquer expresso arbitrria na lista de seleo. Por exemplo, pode-se escrever:
SELECT cidade, (temp_max+temp_min)/2 AS temp_media, data FROM clima;

O que deve produzir:


cidade | temp_media | data -----------------+------------+------------

Captulo 2. A linguagem SQL


So Francisco So Francisco Hayward (3 rows) | | | 48 | 1994-11-27 50 | 1994-11-29 45 | 1994-11-29

Perceba que a clusula AS foi utilizada para mudar o nome da coluna de sada ( opcional). Operadores booleanos arbitrrios (AND, OR e NOT) so permitidos na qualicao da consulta. Por exemplo, o comando abaixo obtm o clima de So Francisco nos dias de chuva:
SELECT * FROM clima WHERE cidade = So Francisco AND prcp > 0.0;

Resultado:
cidade | temp_min | temp_max | prcp | data -----------------+----------+----------+------+-----------So Francisco | 46 | 50 | 0.25 | 1994-11-27 (1 row)

Como nota nal, pode-se desejar que os resultados de uma seleo retornem em uma determinada ordem, ou com as linhas duplicadas removidas:
SELECT DISTINCT cidade FROM clima ORDER BY cidade; cidade --------------Hayward So Francisco (2 rows)

As clusulas DISTINCT e ORDER BY podem ser usadas separadamente, claro.

2.6. Junes entre tabelas


At agora nossas consultas somente acessaram uma tabela de cada vez. As consultas podem acessar vrias tabelas de uma vez, ou acessar a mesma tabela de uma maneira que vrias linhas da tabela so processadas ao mesmo tempo. Uma consulta que acessa vrias linhas da mesma tabela ou de tabelas diferentes de uma vez chamada de consulta de juno. Como exemplo, digamos que se deseja listar todos os registros de clima junto com a localizao da cidade associada. Para fazer isto, necessitamos comparar a coluna cidade de cada linha da tabela clima com a coluna nome de todas as linhas da tabela cidades, e selecionar os pares de linha onde estes valores so correspondentes.
Nota: Este apenas um modelo conceitual, a juno real pode ser realizada de uma maneira mais eciente, mas isto no visvel para o usurio.

Esta operao pode ser efetuada atravs da seguinte consulta:


SELECT * FROM clima, cidades WHERE cidade = nome;

Captulo 2. A linguagem SQL


cidade | temp_min | temp_max | prcp | data | nome | localizacao -----------------+----------+----------+------+------------+---------------+------------So Francisco | 46 | 50 | 0.25 | 1994-11-27 | So Francisco | (-194,53) So Francisco | 43 | 57 | 0 | 1994-11-29 | So Francisco | (-194,53) (2 rows)

Observe duas coisas no resultado produzido:

No existe nenhuma linha para a cidade Hayward. Isto porque no existe entrada correspondente na tabela cidades para Hayward, portanto a juno ignora as linhas da tabela clima sem correspondncia. Ns veremos em breve como isto pode ser mudado. Existem duas colunas contendo o nome da cidade. Isto est correto porque a relao de colunas das tabelas clima e cidades esto concatenadas. Na prtica isto no o que se deseja e, portanto, prefervel escrever a lista das colunas de sada explicitamente em vez de utilizar o *:
SELECT cidade, temp_min, temp_max, prcp, data, localizacao FROM clima, cidades WHERE cidade = nome;

Exerccio: Tente descobrir a semntica desta consulta quando a clusula WHERE omitida. Uma vez que todas as colunas possuem nomes diferentes, o analisador encontra automaticamente a tabela que a coluna pertence, mas um bom estilo qualicar completamente os nomes das colunas nas consultas de juno:
SELECT clima.cidade, clima.temp_min, clima.temp_max, clima.prcp, clima.data, cidades.localizacao FROM clima, cidades WHERE cidades.nome = clima.cidade;

As consultas de juno do tipo visto at agora tambm poderiam ser escritas da seguinte forma alternativa:
SELECT * FROM clima INNER JOIN cidades ON (clima.cidade = cidades.nome);

A utilizao desta sintaxe no to comum quanto das demais acima, mas mostrada aqui para que sejam entendidos os prximos tpicos. Agora ns vamos descobrir como se faz para obter os registros de Hayward. O que ns queremos que seja feito varrer a tabela clima, e para cada linha encontrar a linha correspondente em cidades. Se nenhuma linha for encontrada, ns queremos que algum valor vazio seja colocado nas colunas da tabela cidades. Este tipo de consulta chamado de juno externa (outer join). As consultas vistas at agora so junes internas (inner join). O comando ento ca assim:
SELECT * FROM clima LEFT OUTER JOIN cidades ON (clima.cidade = cidades.nome); cidade | temp_min | temp_max | prcp | data | nome | localizacao -----------------+----------+----------+------+------------+---------------+-----------Hayward | 37 | 54 | | 1994-11-29 | | So Francisco | 46 | 50 | 0.25 | 1994-11-27 | So Francisco | (-194,53) So Francisco | 43 | 57 | 0 | 1994-11-29 | So Francisco | (-194,53) (3 rows)

Captulo 2. A linguagem SQL Esta consulta chamada de juno externa esquerda (left outer join) porque a tabela mencionada esquerda do operador de juno ter cada uma de suas linhas aparecendo na sada ao menos uma vez, enquanto que a tabela direita vai ter somente as linhas que correspondem a alguma linha da tabela esquerda aparecendo. Ao listar uma linha da tabela esquerda, para a qual no existe nenhuma linha correspondente na tabela direita, valores vazios (null) so colocados nas colunas da tabela direita. Exerccio: Existe tambm a juno externa direita (right outer join) e a juno externa completa (full outer join). Tente descobrir o que fazem. Tambm possvel fazer a juno da tabela com si mesma. Isto chamado de autojuno (self join). Como exemplo, suponha que ns desejamos descobrir todos os registro de clima que esto no intervalo de temperatura de outros registros de clima. Portanto, ns precisamos comparar as colunas temp_min e temp_max de cada linha de clima com as colunas temp_min e temp_max de todas as outras linhas da tabela clima. Ns podemos fazer isto utilizando a seguinte consulta:
SELECT C1.cidade, C1.temp_min AS menor, C1.temp_max AS maior, C2.cidade, C2.temp_min AS menor, C2.temp_max AS maior FROM clima C1, clima C2 WHERE C1.temp_min < C2.temp_min AND C1.temp_max > C2.temp_max; cidade | menor | maior | cidade | menor | maior -----------------+-------+-------+---------------+-------+------So Francisco | 43 | 57 | So Francisco | 46 | 50 Hayward | 37 | 54 | So Francisco | 46 | 50 (2 rows)

A tabela clima teve o seu nome mudado para C1 e C2 para que se possa distinguir o lado esquerdo e o direito da juno. Estes aliases tambm podem ser utilizados em outras consultas para reduzir a digitao como, por exemplo:
SELECT * FROM clima w, cidades c WHERE w.cidade = c.nome;

Ser encontrada esta forma de abreviar com bastante freqncia.

2.7. Funes de agregao


Como a maioria dos produtos de banco de dados relacional, o PostgreSQL suporta funes de agregao. Uma funo de agregao calcula um nico resultado para vrias linhas de entrada. Por exemplo, existem funes de agregao para contar (count), somar (sum), calcular a mdia (avg), o valor mximo (max) e o valor mnimo (min) para um conjunto de linhas. Como exemplo podemos obter a maior temperatura mnima ocorrida em qualquer lugar com
SELECT max(temp_min) FROM clima; max ----46 (1 row)

Se desejarmos saber em que cidade (ou cidades) esta leitura ocorreu, podemos tentar

10

Captulo 2. A linguagem SQL


SELECT cidade FROM clima WHERE temp_min = max(temp_min); ERRADO

mas no vai funcionar porque a funo de agregao max no pode ser usada na clusula WHERE (Esta restrio existe porque a clusula WHERE determina as linhas que passaro para o estgio de agregao; portanto tem que ser avaliada antes das funes de agregao serem computadas). Entretanto, como geralmente o caso, a consulta pode ser reformulada para obter o resultado pretendido, o que ser feito aqui atravs de uma subconsulta:
SELECT cidade FROM clima WHERE temp_min = (SELECT max(temp_min) FROM clima); cidade --------------So Francisco (1 row)

Isto est correto porque a subconsulta uma ao independente, que calcula a sua prpria agregao separadamente do que est acontecendo na consulta externa. As agregaes tambm so muito teis quando combinadas com a clusula GROUP BY. Por exemplo, pode ser obtida a maior temperatura mnima observada em cada cidade com
SELECT cidade, max(temp_min) FROM clima GROUP BY cidade; cidade | max -----------------+----Hayward | 37 So Francisco | 46 (2 rows)

o que produz uma linha de sada para cada cidade. Cada resultado da agregao calculado sobre as linhas da tabela que correspondem a uma cidade. Estas linhas agrupadas podem ser ltradas utilizando a clusula HAVING:
SELECT cidade, max(temp_min) FROM clima GROUP BY cidade HAVING max(temp_min) < 40; cidade | max -----------+----Hayward | 37 (1 row)

que nos fornece o mesmo resultado apenas para as cidades que possuam todos os valores de temp_min abaixo de 40. Finalmente, se ns desejamos somente as cidade que comeam com a letra S, podemos escrever
SELECT cidade, max(temp_min) FROM clima WHERE cidade LIKE S% GROUP BY cidade HAVING max(temp_min) < 40;

O operador LIKE faz correspondncia de padro e explicado no Guia do Usurio do PostgreSQL.

11

Captulo 2. A linguagem SQL importante compreender a interao entre as agregaes e as clusulas WHERE e HAVING do SQL. A diferena fundamental entre WHERE e HAVING esta: o WHERE seleciona as linhas de entrada antes dos grupos e agregaes serem computados (portanto, controla quais linhas iro para o computo da agregao), enquanto que o HAVING seleciona grupos de linhas aps os grupos e agregaes serem computados. Portanto, a clusula WHERE no pode conter funes de agregao; no faz sentido tentar utilizar uma agregao para determinar quais linhas sero a entrada da agregao. Por outro lado, a clusula HAVING sempre possui funo de agregao (Falando estritamente, permitido escrever uma clusula HAVING que no possua agregao, mas desperdcio: A mesma condio poderia ser utilizada de forma mais eciente no estgio do WHERE). Observe que a restrio do nome da cidade poderia ser colocada na clusula WHERE, uma vez que no necessita de nenhuma agregao. Isto mais eciente do que colocar a restrio na clusula HAVING, porque evita que sejam feitos os procedimentos de agrupamento e agregao para todas as linhas que no atendem a clusula WHERE.

2.8. Atualizaes
As linhas existentes podem ser atualizadas usando-se o comando UPDATE. Suponha que seja descoberto que as leituras de temperatura estejam todas 2 graus acima aps 28 de Novembro de 1994. Estes dados podem ser corrigidos da seguinte maneira:
UPDATE clima SET temp_max = temp_max - 2, WHERE data > 1994-11-28;

temp_min = temp_min - 2

Agora vejamos o novo estado dos dados:


SELECT * FROM clima; cidade | temp_min | temp_max | prcp | data -----------------+----------+----------+------+-----------So Francisco | 46 | 50 | 0.25 | 1994-11-27 So Francisco | 41 | 55 | 0 | 1994-11-29 Hayward | 35 | 52 | | 1994-11-29 (3 rows)

2.9. Excluses
Suponha que ns no estamos mais interessados nos dados do clima em Hayward. Ento precisamos excluir estas linhas da tabela. As excluses so realizadas atravs do comando DELETE:
DELETE FROM clima WHERE cidade = Hayward;

Todos os registros de clima pertencentes a Hayward so removidos.


SELECT * FROM clima; cidade | temp_min | temp_max | prcp | data ---------------+----------+----------+------+-----------So Francisco | 46 | 50 | 0.25 | 1994-11-27 So Francisco | 41 | 55 | 0 | 1994-11-29

12

Captulo 2. A linguagem SQL


(2 rows)

Deve-se tomar cuidado com a forma


DELETE FROM nome_da_tabela;

Sem uma qualicao, o comando DELETE remove todas as linhas de uma dada tabela, deixando-a vazia. O sistema no vai solicitar uma conrmao antes de realizar esta operao!

13

Captulo 3. Funcionalidades avanadas


3.1. Introduo
Nos captulos anteriores foram descritas funcionalidade bsicas da utilizao do SQL para armazenamento e acesso aos dados no PostgreSQL. Agora sero discutidas funcionalidades mais avanadas do SQL que simplicam a gerncia e evitam a perda e a corrupo dos dados. Ao nal sero vistas algumas extenses do PostgreSQL. Este captulo em certas ocasies faz referncia aos exemplos encontrados no Captulo 2 para modic-los ou melhor-los, portanto aconselhvel que voc j tenha lido este captulo. Alguns exemplos deste captulo tambm podem ser encontrados no arquivo advanced.sql no diretrio do tutorial. Este arquivo tambm contm alguns dados de exemplo a serem carregados, que no sero repetidos aqui (consulte a Seo 2.1 para saber como usar este arquivo).

3.2. Vises
Reveja as consultas na Seo 2.6. Suponha que a consulta combinando os registros de clima e de localizao das cidades seja de particular interesse para o seu aplicativo, mas que voc no deseja digitar esta consulta toda vez que necessitar dela. Pode-se ento criar uma viso baseada na consulta, a qual d um nome consulta, atravs do qual pode ser feita referncia como se fosse uma tabela comum.
CREATE VIEW minha_visao AS SELECT cidade, temp_min, temp_max, prcp, data, localizacao FROM clima, cidades WHERE cidade = nome; SELECT * FROM minha_visao;

Fazer livre uso de vises um aspecto chave de um bom projeto de banco de dados SQL. As vises permitem encapsular os detalhes da estrutura das tabelas, que podem mudar na medida em que os aplicativos evoluem, atrs de interfaces consistentes. As vises podem ser utilizadas em praticamente todos os lugares em que uma tabela pode ser utilizada. Construir vises baseadas em vises no raro.

3.3. Chaves estrangeiras


Reveja as tabelas clima e cidades no Captulo 2. Considere o seguinte problema: Desejamos ter certeza que no sero inseridas linhas na tabela clima sem que haja uma entrada correspondente na tabela cidades. Isto chamado de manter a integridade referencial dos dados. Em sistemas de banco de dados muito simples isto poderia ser implementado (caso fosse) primeiro olhando-se a tabela cidades para ver se um registro correspondente existe, e depois inserindo ou rejeitando o novo registro de clima. Esta abordagem possui vrios problemas e muito inconveniente, portanto o PostgreSQL pode realizar esta operao por voc. As novas declaraes para as tabelas cariam assim:
CREATE TABLE cidades ( cidade varchar(80) primary key,

14

Captulo 3. Funcionalidades avanadas


localizacao point ); CREATE TABLE clima ( cidade varchar(80) references cidades, temp_min int, temp_max int, prcp real, data date );

Agora ao se tentar inserir um registro invlido:


INSERT INTO clima VALUES (Berkeley, 45, 53, 0.0, 1994-11-28);

ERROR: <unnamed> referential integrity violation - key referenced from clima not found in cid

O comportamento das chaves estrangeiras pode receber um ajuste no na aplicao. No iremos alm deste exemplo simples neste tutorial, mas consulte o Guia do Usurio do PostgreSQL para obter mais informaes. Usar corretamente as chaves estrangeiras com certeza vai melhorar a qualidade dos seus aplicativos de banco de dados, portanto encorajamos muito que este tpico seja aprendido.

3.4. Transaes
Transao um conceito fundamental de todo o sistema de banco de dados. O ponto essencial de uma transao que esta engloba vrios passos em uma nica operao de tudo ou nada. Os estados dos passos intermedirios no so visveis para as outras transaes concorrentes e, se alguma falha ocorrer que impea a transao de chegar at o m, ento nenhum dos passos intermedirios ir afetar o banco de dados de nenhuma forma. Por exemplo, considere um banco de dados de uma instituio nanceira que contm o saldo da conta corrente de vrios clientes, assim como o saldo total dos depsitos de cada agncia. Suponha que se deseje transferir $100.00 da conta da Alice para a conta do Bob. Simplicando barbaramente, os comandos SQL para esta operao seriam:
UPDATE conta_corrente SET saldo = saldo WHERE nome = Alice; UPDATE filiais SET saldo = saldo - 100.00 WHERE nome = (SELECT nome_filial FROM UPDATE conta_corrente SET saldo = saldo + WHERE nome = Bob; UPDATE filiais SET saldo = saldo + 100.00 WHERE nome = (SELECT nome_filial FROM 100.00

conta_corrente WHERE nome = Alice); 100.00

conta_corrente WHERE nome = Bob);

Os detalhes destes comandos no so importantes aqui; o importante que existem vrias atualizaes separadas envolvidas para realizar esta operao bem simples. A contabilidade do banco quer ter certeza que todas as atualizaes so realizadas, ou que nenhuma delas acontece. No interessante uma falha no sistema fazer com que Bob receba $100.00 que no foi debitado da Alice. A Alice tambm no vai continuar sendo uma cliente satisfeita se o dinheiro for debitado da conta dela e no for creditado na de Bob. necessrio garantir que se algo der errado no meio da operao, nenhum dos passos executados at ento surtam efeito. Agrupando-se estas atualizaes em uma transao nos d esta garantia. Uma transao dita como sendo atmica: do ponto de vista das outras transaes, ou ela acontece plenamente ou nada acontece.

15

Captulo 3. Funcionalidades avanadas Desejamos tambm a garantia de uma vez que a transao esteja completa e aceita pelo sistema de banco de dados, que que permanentemente gravada e no seja perdida mesmo no caso de uma pane acontecer logo em seguida. Por exemplo, se estiver sendo registrado um saque em dinheiro pelo Bob, no desejado de forma alguma que o dbito em sua conta corrente desaparea devido a uma pane ocorrida logo depois dele sair do banco. Um banco de dados transacional garante que todas as atualizaes feitas por uma transao esto registradas em um meio de armazenamento permanente (ou seja, em disco) antes da transao ser considerada completa. Uma outra propriedade importante dos bancos de dados transacionais est muito ligada noo de atualizaes atmicas: quando vrias transaes esto executando ao mesmo tempo, cada uma delas no deve enxergar as mudanas intermedirias efetuadas pelas outras. Por exemplo, se uma transao est ocupada totalizando o saldo de todas as agncias, no pode ser visto o dbito efetuado na agncia da Alice mas ainda no creditado na agncia do Bob, nem o contrrio. Portanto, as transaes no devem ser tudo ou nada apenas em termos de seu efeito permanente no banco de dados, mas tambm em termos de visibilidade durante o processamento. As atualizaes feitas por uma transao no podem ser vistas pelas outras transaes enquanto esta no terminar, quando todas as atualizaes se tornam visveis ao mesmo tempo. No PostgreSQL uma transao denida cercando-se os comandos SQL da transao com os comandos BEGIN e COMMIT. Sendo assim, a nossa transao bancria caria:
BEGIN; UPDATE conta_corrente SET saldo = saldo - 100.00 WHERE nome = Alice; -- etc etc COMMIT;

Se no meio da transao for decidido que esta no deve ser concluda (talvez porque foi visto que o saldo da Alice se tornou negativo), pode ser executado o comando ROLLBACK em vez do COMMIT, fazendo com que todas as atualizaes sejam canceladas. O PostgreSQL na verdade trata todo comando SQL como sendo executado dentro de uma transao. Se no for utilizado o comando BEGIN, ento cada comando possui individualmente um BEGIN e um (se der tudo certo) COMMIT em torno dele. Um grupo de comandos envolvidos por um BEGIN e um COMMIT algumas vezes chamado de bloco de transao.
Nota: Algumas bibliotecas cliente emitem um comando BEGIN e um comando COMMIT automaticamente, fazendo com que se obtenha o efeito de um bloco de transao sem que seja perguntado. Verique a documentao da interface sendo utilizada.

3.5. Herana
Herana um conceito de banco de dados orientado a objeto que abre novas possibilidades interessantes ao projeto de bancos de dados. Criemos duas tabelas: uma tabela cidades e outra tabela capitais. Naturalmente as capitais tambm so cidades e, portanto, deve existir alguma maneira de se mostrar implicitamente as capitais quando todas as cidades so mostradas. Sendo bastante perspicaz pode-se criar um esquema como este:
CREATE TABLE nome populacao altitude capitais ( text, real, int, -- (em ps)

16

Captulo 3. Funcionalidades avanadas


estado ); CREATE TABLE nome populacao altitude ); interior ( text, real, int -- (em ps) char(2)

CREATE VIEW cidades AS SELECT nome, populacao, altitude FROM capitais UNION SELECT nome, populacao, altitude FROM interior;

Este esquema funciona bem para as consultas, mas no bom quando necessrio atualizar vrias linhas, entre outras coisas. Uma soluo melhor esta:
CREATE TABLE nome populacao altitude ); cidades ( text, real, int -- (em ps)

CREATE TABLE capitais ( estado char(2) ) INHERITS (cidades);

Neste caso, uma linha de capitais herda todas as colunas (nome, populacao e altitude) de seu ancestral cidades. O tipo da coluna nome text, um tipo nativo do PostgreSQL para cadeias de caracteres de tamanho varivel. As capitais dos estados tm uma coluna a mais chamada estado, que guarda a sigla do estado. No PostgreSQL uma tabela pode herdar de nenhuma ou de vrias tabelas. Por exemplo, a consulta abaixo lista os nomes de todas as cidades, incluindo as capitais dos estados, que esto localizadas a uma altitude superior a 500 ps:
SELECT name, altitude FROM cities WHERE altitude > 500;

o que retorna:
nome | altitude -----------+---------Las Vegas | 2174 Mariposa | 1953 Madison | 845 (3 rows)

Por outro lado, a consulta abaixo lista todas as cidades que no so capitais e esto situadas a uma altitude superior a 500 ps:
SELECT nome, altitude

17

Captulo 3. Funcionalidades avanadas


FROM ONLY cidades WHERE altitude > 500; name | altitude -----------+---------Las Vegas | 2174 Mariposa | 1953 (2 rows)

Nesta consulta a palavra ONLY antes de cidades indica que a consulta deve ser efetuada somente na tabela cidades, e no nas tabelas hierarquicamente abaixo de cidades em termos de herana. Muitos comandos discutidos at agora -- SELECT, UPDATE e DELETE -- permitem usar a notao do ONLY.

3.6. Concluso
O PostgreSQL possui muitas funcionalidades no descritas neste tutorial introdutrio, o qual est orientado para os usurios novatos em SQL. Estas funcionalidades esto discutidas com mais detalhes no Guia do Usurio do PostgreSQL e no Guia do Programador do PostgreSQL. Se voc achar que necessita de mais material introdutrio, por favor visite o stio do PostgreSQL na Web1 para obter mais informaes.

1.

http://www.postgresql.org

18

Bibliograa
Referncias e artigos selecionados para o SQL e para o PostgreSQL. Alguns relatrios ociais e tcnicos da equipe original de desenvolvimento do POSTGRES esto disponveis no stio na Web do Departamento de Cincia da Computao da Universidade da Califrnia em Berkeley.1

Livros de Referncia sobre o SQL


Judith Bowman, Sandra Emerson, e Marcy Darnovsky, The Practical SQL Handbook: Using Structured Query Language, Third Edition, Addison-Wesley, ISBN 0-201-44787-8, 1996. C. J. Date e Hugh Darwen, A Guide to the SQL Standard: A users guide to the standard database language SQL, Fourth Edition, Addison-Wesley, ISBN 0-201-96426-0, 1997. C. J. Date, An Introduction to Database Systems, Volume 1, Sixth Edition, Addison-Wesley, 1994. Ramez Elmasri e Shamkant Navathe, Fundamentals of Database Systems, 3rd Edition, Addison-Wesley, ISBN 0-805-31755-4, August 1999. Jim Melton e Alan R. Simon, Understanding the New SQL: A complete guide, Morgan Kaufmann, ISBN 1-55860245-3, 1993. Jeffrey D. Ullman, Principles of Database and Knowledge: Base Systems, Volume 1, Computer Science Press, 1988.

Documentao especca do PostgreSQL


Stefan Simkovics, Enhancement of the ANSI SQL Implementation of PostgreSQL, Department of Information Systems, Vienna University of Technology, November 29, 1998. Discusses SQL history and syntax, and describes the addition of INTERSECT and EXCEPT constructs into PostgreSQL. Prepared as a Masters Thesis with the support of O. Univ. Prof. Dr. Georg Gottlob and Univ. Ass. Mag. Katrin Seyr at Vienna University of Technology.

A. Yu e J. Chen, The POSTGRES Group, The Postgres95 User Manual, University of California, Sept. 5, 1995. Zelaine Fong, The design and implementation of the POSTGRES query optimizer2, University of California, Berkeley, Computer Science Department.

1. 2.

http://s2k-ftp.CS.Berkeley.EDU:8000/postgres/papers/ http://s2k-ftp.CS.Berkeley.EDU:8000/postgres/papers/UCB-MS-zfong.pdf

19

Bibliograa

Conferncias e Artigos
Nels Olson, Partial indexing in POSTGRES: research project, University of California, UCB Engin T7.49.1993 O676, 1993. L. Ong e J. Goh, A Unied Framework for Version Modeling Using Production Rules in a Database System, ERL Technical Memorandum M90/33, University of California, April, 1990. L. Rowe e M. Stonebraker, The POSTGRES data model3, Proc. VLDB Conference, Sept. 1987. P. Seshadri e A. Swami, Generalized Partial Indexes4 , Proc. Eleventh International Conference on Data Engineering, 6-10 March 1995, IEEE Computer Society Press, Cat. No.95CH35724, 1995, p. 420-7. M. Stonebraker e L. Rowe, The design of POSTGRES5, Proc. ACM-SIGMOD Conference on Management of Data, May 1986. M. Stonebraker, E. Hanson, e C. H. Hong, The design of the POSTGRES rules system, Proc. IEEE Conference on Data Engineering, Feb. 1987. M. Stonebraker, The design of the POSTGRES storage system6, Proc. VLDB Conference, Sept. 1987. M. Stonebraker, M. Hearst, e S. Potamianos, A commentary on the POSTGRES rules system7, SIGMOD Record 18(3), Sept. 1989. M. Stonebraker, The case for partial indexes8, SIGMOD Record 18(4), Dec. 1989, p. 4-11. M. Stonebraker, L. A. Rowe, e M. Hirohama, The implementation of POSTGRES9, Transactions on Knowledge and Data Engineering 2(1), IEEE, March 1990. M. Stonebraker, A. Jhingran, J. Goh, e S. Potamianos, On Rules, Procedures, Caching and Views in Database Systems10, Proc. ACM-SIGMOD Conference on Management of Data, June 1990.

3. 4. 5. 6. 7. 8. 9. 10.

http://s2k-ftp.CS.Berkeley.EDU:8000/postgres/papers/ERL-M87-13.pdf http://simon.cs.cornell.edu/home/praveen/papers/partindex.de95.ps.Z http://s2k-ftp.CS.Berkeley.EDU:8000/postgres/papers/ERL-M85-95.pdf http://s2k-ftp.CS.Berkeley.EDU:8000/postgres/papers/ERL-M87-06.pdf http://s2k-ftp.CS.Berkeley.EDU:8000/postgres/papers/ERL-M89-82.pdf http://s2k-ftp.CS.Berkeley.EDU:8000/postgres/papers/ERL-M89-17.pdf http://s2k-ftp.CS.Berkeley.EDU:8000/postgres/papers/ERL-M90-34.pdf http://s2k-ftp.CS.Berkeley.EDU:8000/postgres/papers/ERL-M90-36.pdf

20

Index
A
aggregate functions, ? alias (Ver label) all, ? and operator, ? any, ?, ? anyarray, ? arrays, ? constants, ? auto-increment (Ver serial) average function, ?

length, ? cid, ? cidr, ? circle, ? columns system columns, ? col_description, ? comments in SQL, ? comparison operators, ? concurrency, ? conditionals, ? constants, ? cstring, ? currval, ?

B
B-tree (Ver indexes) between, ? bigint, ? bigserial, ? binary strings concatenation, ? length, ? bit strings constants, ? data type, ? Boolean data type, ? operators (Ver operators, logical) box (data type), ?

D
data types, ? constants, ? numeric, ? type casts, ? date constants, ? current, ? data type, ? output format, ? (Ver Tambm Formatting) decimal (Ver numeric) dirty read, ? distinct, ?

C
case, ? case sensitivity SQL commands, ? character strings concatenation, ? constants, ? data types, ?

double precision, ?

E
except, ? exists, ?

21

Index

F
false, ? oat4 (Ver real) oat8 (Ver double precision) oating point, ? formatting, ? functions, ?

intersection, ? interval, ? isolation levels, ? read committed, ? read serializable, ?

J
joins, ? cross, ? left, ? natural, ? outer, ?

G
get_bit, ? get_byte, ? group, ?

H
hash (Ver indexes) has_database_privilege, ? has_function_privilege, ? has_language_privilege, ? has_schema_privilege, ? has_table_privilege, ?

K
key words list of, ? syntax, ?

L
label column, ? table, ? language_handler, ? length binary strings (Ver binary strings, length) character strings (Ver character strings, length) like, ? limit, ? line, ? locking, ?

I
identiers, ? in, ? indexes, ? B-tree, ? hash, ? multicolumn, ? on functions, ? partial, ? R-tree, ? unique, ? inet (data type), ? int2 (Ver smallint) int4 (Ver integer) int8 (Ver bigint) integer, ? internal, ?

M
MAC address (Ver macaddr) macaddr (data type), ?

22

Index

N
names qualied, ? unqualied, ? namespaces, ? network addresses, ? nextval, ? nonrepeatable read, ? not operator, ? not in, ? nullif, ? numeric constants, ? numeric (data type), ?

point, ? polygon, ?

Q
qualied names, ? quotes and identiers, ? escaping, ?

R
R-tree (Ver indexes) real, ? record, ? regclass, ? regoper, ? regoperator, ? regproc, ? regprocedure, ? regtype, ? regular expressions, ?, ? (Ver Tambm pattern matching)

O
object identier data type, ? obj_description, ? offset with query results, ? OID, ?, ? opaque, ? operators, ? logical, ? precedence, ? syntax, ? or operator, ? overlay, ?

S
schema current, ? schemas, ? search path, ? changing at runtime, ? current, ? select select list, ? sequences, ? and serial type, ? serial, ? serial4, ? serial8, ? setting current, ? set, ? setval, ? set_bit, ? set_byte, ? similar to, ? sintaxe

P
path (data type), ? pg_function_is_visible, ? pg_get_constraintdef, ? pg_get_indexdef, ? pg_get_ruledef, ? pg_get_userbyid, ? pg_get_viewdef, ? pg_opclass_is_visible, ? pg_operator_is_visible, ? pg_table_is_visible, ? pg_type_is_visible, ? phantom read, ?

23

Index
SQL, ? smallint, ? some, ? sorting query results, ? standard deviation, ? strings (Ver character strings) subqueries, ?, ? substring, ?, ?, ? variance, ? version, ? void, ?

W
where, ?

T
text (Ver character strings) tid, ? time constants, ? current, ? data type, ? output format, ? (Ver Tambm Formatting) time with time zone data type, ? time without time zone time, ? time zones, ?, ? timestamp data type, ? timestamp with time zone data type, ? timestamp without time zone data type, ? timezone conversion, ? trigger, ? true, ? types (Ver data types)

X
xid, ?

U
union, ? unqualied names, ? user current, ?

24

You might also like