Apostila Do Curso de PostgreSQL - 3 Edicao - Revisado

download Apostila Do Curso de PostgreSQL - 3 Edicao - Revisado

of 100

Transcript of Apostila Do Curso de PostgreSQL - 3 Edicao - Revisado

  • 7/23/2019 Apostila Do Curso de PostgreSQL - 3 Edicao - Revisado

    1/100

    Apostila do Curso deBanco de Dados PostgreSQL

    Aplicado a Sistemas Empresariais

    Organizao

    2010

    3 Edio

  • 7/23/2019 Apostila Do Curso de PostgreSQL - 3 Edicao - Revisado

    2/100Curso de PostgreSQL 2010

    Sumrio

    1. Introduo .........................................................................................................................................................41.1. O que um sistema de banco de dados? ....................................................................................................41.2. O que um Banco de Dados? .....................................................................................................................61.3. Independncia dos Dados ...........................................................................................................................81.4. Banco de Dados Relacional .........................................................................................................................81.5. Comunicao de Dados ...............................................................................................................................81.6. Arquitetura Cliente/Servidor .......................................................................................................................91.7. Banco de Dados PostgreSQL........................................................................................................................91.8. Arquitetura do PostgreSQL .........................................................................................................................10

    2. Modelagem Conceitual do Banco de Dados ........................................................................................................112.1. Abordagem geral ........................................................................................................................................112.2. Modelo de Entidades e Relacionamentos MER .........................................................................................11

    2.2.1.Entidades (Entidades Regulares e Fracas) ............................................................................................112.2.2.Propriedades .......................................................................................................................................122.2.3.Relacionamentos .................................................................................................................................122.2.4.Subtipos e supertipos de entidades .....................................................................................................13

    2.3. Diagramas de Entidades e Relacionamentos DER .....................................................................................132.4. Comparao dos Conceitos .........................................................................................................................14

    3. Tipos de Dados ...................................................................................................................................................143.1. Tipos Numricos (Inteiros e Pontos Flutuantes) ..........................................................................................143.2. Tipo de Cadeia de Caracteres ......................................................................................................................183.3. Tipos de Data e Hora ...................................................................................................................................203.4. Tipo Booleano .............................................................................................................................................263.5. Tipo para Endereo de Rede .......................................................................................................................273.6. Tipos Adicionais ..........................................................................................................................................29

    4. Instalao do Banco de Dados ............................................................................................................................304.1. Instalao no ambiente Windows ...............................................................................................................304.2. Instalao no ambiente Linux ......................................................................................................................35

    5. DDL (Linguagem de Definio de Dados) - Comandos de Criao, Alterao e Excluso de banco dados, de tabelas, de restries, de unicidades, de ndices, de chaves estrangeiras ......................................... ............40

    CREATE DATABASE .............................................................................................................................................40

    ALTER DATABASE ...............................................................................................................................................41

    DROP DATABASE ................................................................................................................................................42

    CREATE SHEMA ..................................................................................................................................................43

    ALTER SHEMA.....................................................................................................................................................45DROP SHEMA .....................................................................................................................................................45

    CREATE TABLE ....................................................................................................................................................46

    ALTER TABLE ......................................................................................................................................................54

    DROP TABLE .......................................................................................................................................................60

    6. DML Linguagem de Manipulao de Dados Comandos de Incluso, Alterao, Excluso de Dados ................61INSERT ...............................................................................................................................................................61

    UPDATE ..............................................................................................................................................................63

    DELETE ...............................................................................................................................................................65

  • 7/23/2019 Apostila Do Curso de PostgreSQL - 3 Edicao - Revisado

    3/100Curso de PostgreSQL 2010

    7. DQL Linguagem de Consulta de Dados Comando de Seleo de Dados .........................................................67SELECT ...............................................................................................................................................................67

    Expresses de tabela ..........................................................................................................................................68

    Listas de seleo .................................................................................................................................................75

    Ordenao de linhas ...........................................................................................................................................77

    8. DCL Linguagem de Controle de Dados Comandos de Criao, Alterao e Excluso de usurios ....................78CREATE USER......................................................................................................................................................78

    ALTER USER ........................................................................................................................................................80DROP USER.........................................................................................................................................................81

    9. Operadores e Funes de Agregao ..................................................................................................................81Operadores lgicos.............................................................................................................................................81

    Operadores de comparao ...............................................................................................................................82

    Funes de Agregao ........................................................................................................................................83

    10.Autenticao de Usurios (arquivo pg_hba.conf) ................................................................................................85O arquivo pg_hba.conf .......................................................................................................................................85

    11.Princpios de administrao do banco de dados (backup e restaurao de dados) ......................... .....................87pg_dump ............................................................................................................................................................87

    pg_restore..........................................................................................................................................................9312.Referncias Bibliogrficas ...................................................................................................................................99

  • 7/23/2019 Apostila Do Curso de PostgreSQL - 3 Edicao - Revisado

    4/100Curso de PostgreSQL 2010

    1. Introduo1.1. O que um sistema de banco de dados?

    Um sistema de banco de dados basicamente um sistema computadorizado de manuteno de registros, cufinalidade geral armazenar informaes e permitir que os usurios busquem e atualizem essas informaquando precisar. O banco de dados, por si s, pode ser considerado como o equivalente eletrnico de uarmrio de arquivamento. Ou seja, ele um repositrio ou recipiente para uma coleo de arquivos de dadcomputadorizados. Os usurios podem solicitar que o sistema realize diversas operaes envolvendo ta

    arquivos, por exemplo:

    Acrescentar novos arquivos ao banco de dados; Inserir dados em arquivos existentes; Buscar dados em arquivos existentes; Excluir dados em arquivos existentes; Alterar dados em arquivos existentes; Remover arquivos existentes do banco de dados.

    Comparao de um sistema de banco de dados com o mundo real.

    Armrio de arquivos Banco de Dados

    Figura 1

    Mundo Real Mundo Digital

    Armrio Metlico Estruturado Sistema Gerenciador de Banco de Dados

    Gavetas grandes Banco de Dados

    Pastas de arquivos Esquemas de objetosArquivos Tabelas

    Informaes nos papis DadosFechaduras Controle de Acesso de Usurios

    Organizao dos Arquivos em Ordem Alfabtica Utilizar o comando de Seleo (SELECT) paraordenar (ORDER BY) crescentemente emordem alfabtica.

  • 7/23/2019 Apostila Do Curso de PostgreSQL - 3 Edicao - Revisado

    5/100Curso de PostgreSQL 2010

    Figura 2

    O sistema de banco de dados envolve cinco componentes principais: dados, hardware, rede, software, usurios.

    Dados

    Existem dois tipos de sistemas para acessar os dados em sistemas de banco de dados:

    Sistema monousurio: um sistema em que no mximo um usurio pode acessar o banco de dados edeterminado momento, este tipo de banco de dados j est fora de uso;

    Sistemas multiusurios: aquele em que muitos usurios podem acessar o banco de dados ao mesmo tempo.A principal caracterstica dos dados em um sistema de banco de dados que os mesmos estaro integradoscompartilhados.

    Integrado: quer dizer que o banco de dados pode ser considerado como uma unificao de vrios arquivos qude outro modo, seriam distintos, com a eliminao de qualquer redundncia (repetio desnecessria) parcial ototal entres esses arquivos;

    Compartilhado: quer dizer que os dados que esto armazenados no banco de dados podem ser compartilhadentre diferentes usurios, no sentido de que diferentes usurios podem ter acesso aos mesmos dadopossivelmente ao mesmo tempo (acesso concorrente), para isto o servidor deve ter alta disponibilidade.

    Hardware

    Volumes de armazenamento secundrio normalmente, discos magnticos -, que so usados para manter dados armazenados, juntamente com os dispositivos de E/S(entrada/sada) associados (unidades de disco etc.);

    Processador (es) de hardware e memria principal associada, que so usados para dar suporte execuo dsoftware do sistema de banco de dados.

    Banco de Dados

    Sistema de gerenciamentode banco de dados (SGBD)

    Programas deaplicao

    Usurios finais

    Controle de acesso aosbancos de dados, tabelas,comandos de alterao nasbases de dados,monitoramente e etc.

  • 7/23/2019 Apostila Do Curso de PostgreSQL - 3 Edicao - Revisado

    6/100Curso de PostgreSQL 2010

    Rede

    A interligao dos computadores com o servidor de banco de dados realizada por meio de uma rede de computadorescabo ou uma rede sem fio. A comunicao dos dados feita de forma digital, por um protocolo de comunicao. O mautilizado o TCP/IP.

    Software

    Entre o banco de dados fsico ou seja, os dados fisicamente armazenados e os usurios do sistema existe uma camade software, conhecida como Gerenciador de Banco de Dados ou Servidor de Banco de Dados ou mais freqentemenchamado de Sistema de Gerenciamento de Banco de Dados (SGBD). Todas as requisies de acesso ao banco de dadso tratadas pelo SGBD; os recursos esboados de acrescentar e remover arquivos (ou tabelas), buscar dados e atualizdados em tais arquivos ou tabelas, e assim por diante, so facilidades fornecidas pelo SGBD. A funo geral fornecida peSGBD , portanto, a de isolar os usurios do banco de dados dos detalhes no nvel de hardware. Algumas observaeadicionais:

    O SGBD o componente de software mais importante de todo o sistema, mas no o nico. Outrcomponentes incluem utilitrios, ferramentas de desenvolvimento de aplicaes, recursos para auxiliar nprojeto, geradores de relatrios e (mais importante) o gerenciador de transaes ou monitor de TP (TransactioProcessing Processamento de Transaes);

    O termo SGBD tambm usado para se referir genericamente a algum produto especfico de algum fornecedem particular por exemplo, SQL NAVIGATOR para o Oracle, EMS Manager para o PostgreSQL.

    Usurios

    Consideramos trs classes gerais de usurios:

    Programadores de Aplicaes: so os responsveis pelas escritas de programas de aplicaes de banco de dadoem alguma linguagem de programao, como Delphi, Java, PHP, Visual Studio, C#, C++. Esses programas acessao banco de dados atravs de uma biblioteca de conexo o qual emite uma requisio necessria ao SGBD. Oprogramas acessam o banco de dados interativamente (por exemplo, a partir de um terminal on-line, ou de udesktop, notebook e etc);

    Usurios finais: temos dois tipos de usurios finais, alguns acessam o banco de dados por meio de uma aplicacomercial. E os outros so os administradores de sistemas que acessam o banco de dados atravs de softwarque interagem diretamente com o SGBD, realizando requisies de busca de dados, por exemplo, para criarerelatrios;

    Administradores de Banco de Dados (DBA): a pessoa que fornece o suporte tcnico necessrio para atributodas as decises estratgicas e normas com relao aos dados da empresa dentro do banco de dados.

    1.2. O que um Banco de Dados?Banco de dados uma coleo de dados persistentes, usado pelos sistemas de aplicao de uma determinadempresa ou instituio. Referimos-nos a eles como dados persistentes, porque uma vez que os dados foraaceitos pelo SGBD para entrada no banco de dados, eles s podem ser removidos do banco de dados mais tardpor alguma requisio explcita ao SGBD, e no de qualquer forma, por exemplo, ao fechar um programa oreiniciar o computador.

  • 7/23/2019 Apostila Do Curso de PostgreSQL - 3 Edicao - Revisado

    7/100Curso de PostgreSQL 2010

    Entidades e relacionamentos

    Em uma Transportadora de Veculos podemos citar as seguintes entidades: Veculos, Motoristas, FreteMercadorias, Rotas e etc, ou seja, entidade qualquer objeto distinguvel que deva ser representado no bande dados, do qual seja necessrio registrar informaes.O relacionamento so as interligaes destas entidades bsicas.

    Propriedades

    De forma simples as propriedades so as informaes detalhadas de uma entidade. Por exemplo: de umentidade veculo podemos ter as seguintes propriedades: placa, marca, modelo, ano, valor, volume. E para cadpropriedade definido um tipo de dado especfico que o mesmo ir armazenar no banco de dados, variandentre numrico, caractere, data, hora dentre outros tipos.

    Modelo de Dados

    O modelo de dados uma definio abstrata, autnoma e lgica dos objetos, operadores e outros elementque, juntos constituem a mquina abstrata com a qual os usurios interagem. Os objetos nos permitem modela estrutura dos dados. Os operadores nos permitem modelar seu comportamento. A estrutura dos dados srepresentados por meio de linhas em tabelas.

    Figura 3

    Vantagens de um banco de dados

    As vantagens de um sistema de bancos de dados em relao aos mtodos tradicionais, baseados em papel, pamanuteno de registros, so:

    Densidade: No h necessidade de arquivos de papel, possivelmente volumosos; Velocidade: A mquina pode obter e atualizar dados com rapidez muito maior que o ser humano; Menos trabalho montono: Grande parte do tdio de manter os arquivos mo eliminada. As taref

    mecnicas so sempre feitas com melhor qualidade por mquinas;

  • 7/23/2019 Apostila Do Curso de PostgreSQL - 3 Edicao - Revisado

    8/100Curso de PostgreSQL 2010

    Atualidade: Informaes precisas e atualizadas esto disponveis a qualquer momento sob consulta; Proteo: Os dados podem ser mais bem protegidos contra perda no intencional e acesso ilegal.

    1.3. Independncia dos DadosA independncia de dados um objetivo importante dos sistemas de bancos de dados, pois pode ser definida comoimunidade das aplicaes a alteraes na representao fsica e na tcnica de acesso o que significa que as aplica

    envolvidas no dependem de qualquer representao fsica ou tcnica de acesso especifico.

    Existem trs termos na independncia de dados que devem ser abordados, so eles:

    Um campo armazenado a menor unidade de dados armazenados. O banco de dados conter muitocorrncias de cada um dos vrios tipos de campos armazenados;

    Um registro armazenado uma coleo de campos armazenados; Um arquivo armazenado uma coleo de registros que contenham os mesmos campos.

    A representao dos dados armazenados esto sujeitos a possveis modificaes. Isto permite que o banco de dadcresa sem prejudicar logicamente as aplicaes existentes uma das razes mais importantes para se exigir

    independncia dos dados em primeiro lugar. Por exemplo, deve ser possvel estender um registro armazenadexistente pela adio de novos campos armazenados, em geral representando informaes adicionais relativasentidade.

    Na figura 3, temos:

    Campos armazenados: codproduto, produto, valor, unidrepasse, codfornecedor, fornecedorSegundo registro armazenado: 83, CARTUCHO DE TINTA HP 96 COLOR 14ML, 71.00, CX, 2,PAPELARIA TRIBUTARIAArquivo armazenado: TABELA PRODUTO

    Com a independncia dos dados possvel adicionar o campo qtestoque no arquivo TABELA PRODUTO, e em seguidadicionar os valores nos registros j armazenados.

    1.4. Banco de Dados Relacional.O tipo de banco de dados relacional recebe esta descrio de relacional devido a que o termo relaoessencialmente apenas um termo matemtico para designar tabela. Ou seja, banco de dados relacional simplesmen um banco de dados estruturado em tabelas.

    1.5. Comunicao de DadosAs requisies a bancos de dados de um usurio final so transmitidas de um computador cliente que pode estfisicamente afastada do prprio sistema de banco de dados at o SGBD, sob forma de mensagens de comunicaDe modo semelhante, as respostas do SGBD para o computador cliente do usurio so transmitidas sob forma dmensagens. Todas essas transmisses de mensagens ocorrem sob o controle de outro componente de software,Gerenciador de Comunicao de Dados (gerenciador DC Data Communications).O gerenciador DC no faz parte do SGBD, mas um sistema autnomo (separado). Porm, como o gerenciador DC eSGBD so claramente obrigados a trabalhar em harmonia. No qual o SGBD toma conta do banco de dados e gerenciador DC manipula todas as mensagens do SGBD e para o SGBD. No PostgreSQL o gerenciador de comunica o postmaster, na seo 1.8 ser explicado o seu funcionamento com mais detalhes.

  • 7/23/2019 Apostila Do Curso de PostgreSQL - 3 Edicao - Revisado

    9/100Curso de PostgreSQL 2010

    1.6. Arquitetura Cliente/ServidorA arquitetura Cliente/Servidor uma estrutura muito simples em duas partes, constituindo um servidor, tambchamado de back end, e um conjunto de clientes, tambm chamadosfront ends.

    Servidor: o prprio SGBD. Ele admite todas as funes do SGBD, de definio de dados, manipulao ddados, segurana e integridade de dados e etc;

    Clientes: so as diversas aplicaes executadas em cima do SGBD, tanto aplicaes escritas em algumlinguagem de programao como Delphi, Java e PHP ou aplicaes fornecidas pelo fabricante do SGBD, pexemplo SQLMaestro, EMS Manager, PgAdmin ou psql (terminal interativo para manipulao direta no bancde dados), todos estes so para PostgreSQL. Veja a seguir um exemplo de uma arquitetura cliente/servidor.

    Figura 4

    1.7. Banco de Dados PostgreSQLO PostgreSQL um SGBD relacional e orientado a objetos. um software de livre distribuio e tem seu cdigo-fontaberto. Oferece suporte linguagem SQL (Structured Query Language Linguagem Estruturada de Consulta) dacordo com os padres SQL92/SQL99, alm de outras caractersticas modernas. Em termos de recursos, pode secomparado aos melhores bancos de dados comerciais existentes, sendo inclusive superior em alguns aspectos.

    PostgreSQL introduziu conceitos do modelo objeto-relacional que hoje esto disponveis em alguns bancos de dadcomerciais.O desenvolvimento do PostgreSQL teve incio no ano de 1985, no departamento de Cincia da Computao dUniversidade da Califrnia, em Berkeley. Hoje mantido pela Internet por um grupo de desenvolvedores. Os termPostgreSQL e Postgres sero usados no decorrer desta apostila, ambos para referenciar esse SGBD, visto quenome do inicial do projeto era Postgres.

    SGBD

    SistemaComercial

    SistemaComercial

    Software Geradorde Relatrios

    Clientes

    Servidor

  • 7/23/2019 Apostila Do Curso de PostgreSQL - 3 Edicao - Revisado

    10/100

    1

    Curso de PostgreSQL 2010

    1.8. Arquitetura do PostgreSQLAntes de comear a utilizar o PostgreSQL, importante que haja a compreenso de sua arquitetura bsica. Quandoaberta uma sesso do PostgreSQL, ou seja uma comunicao de um computador cliente com o servidor. Trprocessos (programas em execuo) trabalham de forma cooperativa, so eles:

    O processo postmaster; Uma aplicao cliente que est acessando o SGBD (por exemplo, o Sistema Comercial); Um ou mais servidores de banco de dados (o prprio processo postgres).

    Um nico processo postmaster gerencia as conexes aos bancos de dados existentes em uma mquina. As aplicacliente que desejam acessar determinado banco de dados fazem chamadas a uma biblioteca (chamada LIBPQ).biblioteca envia a requisio do usurio pela rede para o processo postmaster, que cria um novo processo-servidorconecta o processo-cliente ao servidor criado. A partir da, os processos-cliente e servidor (frontend e backend) comunicam sem a interveno do postmaster. Veja a figura a seguir.

    Figura 5

    SistemaComercial

    Mquina Cliente

    Mquina Servidor

    Biblioteca(LIBPQ)

    postmaster

    Cria a conexocom o servidor

  • 7/23/2019 Apostila Do Curso de PostgreSQL - 3 Edicao - Revisado

    11/100

    1

    Curso de PostgreSQL 2010

    2. Modelagem Conceitual do Banco de Dados2.1. Abordagem geral

    A modelagem do banco de dados comea pelo entendimento da importncia da sua realizao para o projeto dbanco de dados. um processo que decide toda estrutura do banco de dados. Se o mesmo no for realizadaDBA (Administrador de Banco de Dados), no ter uma viso completa de todo o sistema que compem sebanco de dados. A organizao dos dados e a evoluo do sistema de banco de dados dependem exclusivamen

    da realizao de uma boa modelagem. Erros de modelagem ocasionam na inviabilidade da evoluo do sistemPor isto que est tarefa deve ser realizada com muita mais anlise e estudo.

    Para fazermos a modelagem do banco de dados iremos utilizar as tcnicas do Modelo dEntidades/Relacionamentos. A explicao das tcnicas no s definem de modo que seja a nica verdade damesmas, mas sim da suporte a uma flexibilidade de interpretao.

    2.2. Modelo de Entidades e Relacionamentos - MERO Modelo de Entidades e Relacionamentos um modelo abstrato cuja finalidade descrever, de maneiconceitual, os dados a serem utilizados em um Sistema de Informaes. A principal ferramenta do modelo srepresentao grfica, o Diagrama Entidade Relacionamento. Normalmente o modelo conhecido pela sua sigMER e o diagrama pela sigla DER, o diagrama ser abordado com mais detalhes posteriormente.

    2.2.1.Entidades (Entidades Regulares e Fracas)Uma entidade de modo formal um objeto perceptvel, de forma informal podemos dizer que uma coique pode ser identificada distintamente. Juntando as duas definies seria, um objeto que faz parte de usistema, que tem uma identificao distinta e que influencia no processo de um sistema.

    Podemos classificar as entidades como:

    Entidade Fraca: uma entidade cuja existncia depende de alguma outra entidade, no sentido dque ela no pode existir se essa outra entidade tambm no existir. Por exemplo, a entidadDependente s pode existir se a entidade Empregado existir no sistema;

    Entidade Regular (forte): Ao contrrio a entidade regular uma entidade que no fraca, tem a suexistncia por si s.

    Exemplos:

    Tipos de Sistema Entidades Classificao

    Sistema de Indstria de Veculos Fornecedor Veculo Pea

    Sistema de RH Departamento Empregado Dependente

    Sistema de Vendas Pedido de Compra Item Estoque

    http://pt.wikipedia.org/wiki/Sistema_de_informa%C3%A7%C3%A3ohttp://pt.wikipedia.org/wiki/Diagrama_Entidade_Relacionamentohttp://pt.wikipedia.org/wiki/Diagrama_Entidade_Relacionamentohttp://pt.wikipedia.org/wiki/Sistema_de_informa%C3%A7%C3%A3o
  • 7/23/2019 Apostila Do Curso de PostgreSQL - 3 Edicao - Revisado

    12/100

    1

    Curso de PostgreSQL 2010

    2.2.2.PropriedadesPropriedade um item de informao que descreve uma entidade. Para melhorar o entendimento podemvisualizar a propriedade como uma caracterstica que comum para todas as ocorrncias de uma entidade. Poexemplo, em uma entidade EMPREGADO todos os empregados tm uma matricula, um nome, um salrio,assim por diante. E tambm alguns autores utilizam o termo atributo em lugar de propriedade.

    As propriedades podem ser:

    Simples ou compostas: Por exemplo, a propriedade composta nome de empregado poderia sconstituda das propriedades simples primeiro nome, nome do meio, ltimo nome;

    Chave: uma propriedade que exclusiva nos seus valores, por exemplo o CPF, ou um endereo demail, no DER colocamos o smbolo @ para representar uma chave;

    Univalorada ou multivalorada: Univalorada assume somente um valor, multivalorada possui mais de uvalor.

    2.2.3.RelacionamentosUm relacionamento uma associao entre entidades, baseando em fatos do mundo real. As entidadenvolvidas em determinado relacionamento so ditas participantes desse relacionamento. O nmero dparticipantes em determinado relacionamento chamado grau desse relacionamento. Podemos trelacionamentos binrios, tercirios e assim por diante, sendo que quanto mais entidades estivereparticipando no relacionamento mais complexo se torna o entendimento. Denominados os tipos associaentre duas entidades de cardinalidade, elas podem ser:

    Um para um ( 1 : 1 ) Uma instncia de uma entidade se relaciona somente com uma niinstncia de uma outra entidade, por exemplo:

    Um para muitos ( 1 : M ) Uma instncia de uma entidade se relaciona com muitos instncias duma outra entidade, por exemplo:

    Muitos para muitos ( M : M ) Muitas instncias de uma entidade se relaciona com muitinstncias de uma outra entidade, por exemplo:

    USUARIO EMPREGADO MOTORISTAUSU_EMP EMP_MOT1 1 1 1

    DEPATARMENTO EMPREGADODEPTO_EMP1 M

  • 7/23/2019 Apostila Do Curso de PostgreSQL - 3 Edicao - Revisado

    13/100

    1

    Curso de PostgreSQL 2010

    2.2.4.Subtipos e supertipos de entidadesUma entidade subtipo descende de outra entidade. Por exemplo, temos a entidade MOTORISTA que u

    subtipo da entidade EMPREGADO. A entidade EMPREGADO um supertipo da entidade MOTORISTPodemos ter mais dois subtipos de MOTORISTA, sendo eles, MOTORISTA_CARRETA e MOTORISTA_CARRcom isto podemos estabelecer que existe uma hierarquia dos tipos de entidades. Por exemplo:

    2.3. Diagramas de Entidade e Relacionamento - DERDiagramas constituem uma tcnica para representar a estrutura lgica de um banco de dados de modo grfico. diagramao um meio simples e fcil de representar o Modelo de Entidades e Relacionamentos e com isto entendos aspectos principais de um projeto de banco de dados. A seguir explicamos a simbologia utilizada:

    ENTIDADES so os retngulos.ENTIDADE REGULAR:

    ENTIDADE FRACA:

    PROPRIEDADES so as elipses.

    RELACIONAMENTOS so os losangos.RELACIONAMENTOS ENTRE ENTIDADES REGULARES

    RELACIONAMENTO ENTRE UMA ENTIDADE FRACA E UMA REGULAR

    EMPREGADO PROJETOEMP_PROJM M

    EMPREGADO

    MOTORISTA

    MOTORISTA_CARROMOTORISTA_CARRETA

  • 7/23/2019 Apostila Do Curso de PostgreSQL - 3 Edicao - Revisado

    14/100

    1

    Curso de PostgreSQL 2010

    2.4. Comparao dos conceitos

    3. Tipos de dadosOs campos das tabelas precisam ser definidos com tipos de dados especficos. Cada tipo de dado determina quavalores podero ser armazenados nos campos. Por exemplo, numa tabela PRODUTO podemos ter os seguintes tipde dados para cada campo.

    Campo Tipo de Dado Tipo de Dado no SQL Contedo do Campo

    descricao Cadeia de Caracteres VARCHAR(100) ARROZ 5 KG TIPO FINO

    preco Numrico DECIMAL(10,2) 9.56

    status Booleano BOOLEAN 1observacao Texto TEXT DESDE A SAFRA DE 200ESTE PRODUTO ESTA COUMA QUALIDADE INFERIO

    A definio de dados muito importante pelos seguintes motivos:

    Restrio na armazenagem dos dados. Por exemplo, no campo preo do produto, sendo definido comDECIMAL no ser possvel armazenar valores que contenham letras, apenas nmeros inteiros ou decimaSe fosse permitido gravar letras no campo preo o sistema estaria suscetvel a ocasionar erros quando fossefetuar operaes matemticas, como somar todos os preos dos produtos. Caso se em algum registro dproduto, o campo preo tiver armazenado 345.00 reais, a palavra reais no permitiria a concluso operao de soma.

    Economia de espao no banco de dados: Por exemplo, para campos que armazenam nmeros de pequeescala no recomendvel que sejam dos tipos de numricos como INTEGER(4 bytes) ou BIGINT(8 bytemais sim o SMALLINT(2 bytes). Parece ser irrisria a quantia de 2 a 6 bytes de diferena mais se tratando dum banco de dados com mais de 300 Gb, esta regra j surge um grande efeito no desempenho do banco ddados.

    3.1. Tipos Numricos (Inteiros e Pontos Flutuantes);

    Os tipos numricos consistem em inteiros de dois, quatro e oito bytes, nmeros de ponto flutuante de quatro e oibytes, e decimais de preciso selecionvel. A seguir vejamos os tipos disponveis.

    Modelo de Entidade Relacionamento Modelo Conceitual Banco de Dados

    Entidade Arquivo Tabela

    Instncia ou Ocorrncia Registro Linha

    Propriedade Campo Coluna (Campos)Relacionamento Ligao dos Arquivos Relacionamento de chaves estrangeiras

    com chaves primrias

  • 7/23/2019 Apostila Do Curso de PostgreSQL - 3 Edicao - Revisado

    15/100

    1

    Curso de PostgreSQL 2010

    NomeTamanho de

    armazenamentoDescrio Faixa de valores

    SMALLINT 2 bytes inteiro com faixa

    pequena

    -32.768 a +32.767

    INTEGER 4 bytes escolha usual parainteiro

    -2.147.483.648 a+2.147.483.647

    BIGINT 8 bytes inteiro com faixa larga -9.223.372.036.854.775.808 a

    9.223.372.036.854.775.807

    DECIMAL varivel preciso especificada

    pelo usurio, exato

    sem limite

    NUMERIC varivel preciso especificada

    pelo usurio, exato

    sem limite

    REAL 4 bytes preciso varivel,

    inexato

    preciso de 6 dgitos decimais

    DOUBLE

    PRECISION

    8 bytes preciso varivel,

    inexato

    preciso de 15 dgitos decimais

    SERIAL 4 bytes inteiro com auto-

    incremento

    1 a 2.147.483.647

    BIGSERIAL 8 bytes inteiro grande com

    auto-incremento

    1 a 9.223.372.036.854.775.807

    Tipos Inteiros

    Os tipos SMALLINT, INTEGER e BIGINTarmazenam nmeros inteiros, ou seja, nmeros sem a parte fracionria, co

    faixas diferentes. A tentativa de armazenar um valor fora da faixa permitida resulta em erro. O tipo INTEGER a escolusual, porque oferece o melhor equilbrio entre faixa de valores, tamanho de armazenamento e desempenh

    Geralmente o tipo SMALLINTs utilizado quando o espao em disco est muito escasso. O tipo BIGINTsomente de

    ser usado quando a faixa de valores de INTEGER no for suficiente, porque este ltimo bem mais rpido. O tipo BIGINpode no funcionar de modo correto em todas as plataformas, porque depende de suporte no compilador para inteiro

    de oito bytes. Nas mquinas sem este suporte, o BIGINTage do mesmo modo que o INTEGER (mas ainda ocupa oibytes de armazenamento). Entretanto, no de nosso conhecimento nenhuma plataforma razovel onde este caso

    aplique. O padro SQL somente especifica os tipos inteiros INTEGER (ou INT) e SMALLINT. O tipo BIGINT, e os nomes tipo INT2, INT4 e INT8 so extenses, tambm compartilhadas por vrios outros sistemas de banco de dados SQL.

    Nmeros com preciso arbitrria

    O tipo NUMERICpode armazenar nmeros com preciso de at 1.000 dgitos e realizar clculos exatos. recomendadespecialmente, para armazenar quantias monetrias e outras quantidades onde se requeira exatido. Entretanto,

    aritmtica em valores do tipo NUMERIC muito lenta se comparada com os tipos inteiros, ou com os tipos de pont

    flutuante descritos na prxima seo. So utilizados os seguintes termos: A escala do tipo NUMERIC o nmero

    dgitos decimais da parte fracionria, direita do ponto decimal. A preciso do tipo NUMERIC o nmero total de dgit

  • 7/23/2019 Apostila Do Curso de PostgreSQL - 3 Edicao - Revisado

    16/100

    1

    Curso de PostgreSQL 2010

    significativos de todo o nmero, ou seja, o nmero de dgitos nos dois lados do ponto decimal. Portanto, o nmer23.5141 possui preciso igual a 6 e escala igual a 4. Os inteiros podem ser considerados como tendo escala igual a zero.

    Tanto a preciso mxima quanto a escala de uma coluna do tipo NUMERICpodem ser configuradas. Para declarar um

    coluna do tipo NUMERIC utilizada a sintaxe:

    NUMERIC (preciso, escala)

    A preciso deve ser um nmero positivo, enquanto a escala pode ser zero ou positiva. Como forma alternativa,

    NUMERIC(preciso)

    define a escala como sendo igual a 0. Especificando-se

    NUMERIC

    sem qualquer preciso ou escala criada uma coluna onde podem ser armazenados valores numricos com qualqupreciso ou escala, at a preciso limite da implementao. Se a escala do valor a ser armazenado for maior que a escadeclarada para a coluna, o sistema arredonda o valor para o nmero de dgitos fracionrios especificado. Depois, se nmero de dgitos esquerda do ponto decimal exceder a preciso declarada menos a escala declarada, gerado uerro.

    Arredondamento em tipo NUMERIC.

    Abaixo esto mostrados exemplos de insero de dados em um campo do tipo NUMERIC. No terceiro exemploarredondamento faz com que a preciso do campo seja excedida. [6]

    BEGIN;CREATE TEMPORARY TABLE t ( c NUMERIC(6,3)) ON COMMIT DROP;INSERT INTO t VALUES (998.9991);INSERT INTO t VALUES (998.9999);SELECT * FROM t;

    c---------

    998.999999.000(2 linhas)

    INSERT INTO t VALUES (999.9999);

    ERRO: estouro de campo numricoDETALHE: O valor absoluto maior ou igual a 10^3 para campo com preciso 6, escala 3.

    COMMIT;

    http://pgdocptbr.sourceforge.net/pg80/datatype.html#FTN.AEN4885http://pgdocptbr.sourceforge.net/pg80/datatype.html#FTN.AEN4885
  • 7/23/2019 Apostila Do Curso de PostgreSQL - 3 Edicao - Revisado

    17/100

    1

    Curso de PostgreSQL 2010

    ROLLBACK

    Os valores numricos so armazenados fisicamente sem zeros adicionais no incio ou no final. Portanto, a preciso e

    escala declaradas para uma coluna so as alocaes mximas, e no fixas (Sob este aspecto o tipo NUMERIC ma

    semelhante ao tipo VARCHAR(N) do que ao tipo CHAR(N)). Os tipos DECIMAL e NUMERICso equivalentes. Os do

    tipos fazem parte do padro SQL.

    Tipos de ponto flutuante

    Os tipos de dado REAL e DOUBLE PRECISION so tipos numricos no exatos de preciso varivel.

    Se for necessrio armazenamento e clculos exatos (como em quantias monetrias), em vez de tipos de pontflutuante deve ser utilizado o tipo NUMERIC;

    Se for desejado efetuar clculos complicados usando tipos de ponto flutuante para algo importantespecialmente dependendo de certos comportamentos em situaes limites (infinito ou muito prximo de zeroa implementao deve ser avaliada cuidadosamente;

    A comparao de igualdade de dois valores de ponto flutuante pode funcionar conforme o esperado, ou no.Na maioria das plataformas o tipo realpossui uma faixa de pelo menos 1E-37 a 1E+37, com preciso de pelo menos

    dgitos decimais. O tipo double precision normalmente possui uma faixa em torno de 1E-307 a 1E+308 com preciso dpelo menos 15 dgitos. Os valores muito pequenos ou muito grandes causam erro. O arredondamento pode acontecer a preciso do nmero entrado for muito grande. Os nmeros muito prximos de zero, que no podem ser representadde forma distinta de zero, causam erro de underflow.

    Alm dos valores numricos ordinrios, os tipos de ponto flutuante possuem diversos valores especiais:

    INFINITY -INFINITY NAN

    Tipos seriais

    Os tipos de dado SERIAL e BIGSERIAL no so tipos verdadeiros, mas meramente uma notao conveniente para definircolunas identificadoras nicas (semelhante propriedade AUTO_INCREMENTO existente em alguns outros bancos ddados).Por exemplo:

    CREATE TABLE nome_da_tabela (nome_da_coluna SERIAL

    );

    Isto equivale a especificar:

    CREATE SEQUENCE nome_da_tabela_nome_da_coluna_seq;CREATE TABLE nome_da_tabela (

    nome_da_coluna integer DEFAULT NEXTVAL('nome_da_tabela_nome_da_coluna_seq') NOT NULL);

  • 7/23/2019 Apostila Do Curso de PostgreSQL - 3 Edicao - Revisado

    18/100

    1

    Curso de PostgreSQL 2010

    Conforme visto, foi criada uma coluna do tipo inteiro e feito o valor padro ser atribudo a partir de um gerador dseqncia. A restrio NOT NULL aplicada para garantir que no pode ser inserido o valor nulo explicitamente.

    Para inserir o prximo valor da seqncia em uma coluna do tipo serial deve ser especificada a atribuio do valor padr coluna serial, o que pode ser feito omitindo a coluna na lista de colunas no comando INSERT, ou atravs da utilizao palavra chave DEFAULT.

    Os nomes de tipo SERIAL e SERIAL4 so equivalentes: ambos criam colunas do tipo INTEGER. Os nomes de tipo BIGSERIA

    e SERIAL8 funcionam da mesma maneira, exceto por criarem uma coluna BIGINT. Deve ser utilizado BIGSERIAL se foreesperados mais de 231 identificadores durante a existncia da tabela.

    A seqncia criada para a coluna do tipo serial removida automaticamente quando a coluna que a definiu removidaA seqncia criada para a coluna do tipo serial pode ter seus parmetros alterados atravs do comando ALTSEQUENCE, da mesma forma que qualquer outra seqncia criada atravs do comando CREATE SEQUENCE. Este exempmostra como proceder para fazer com que o valor inicial da coluna do tipo serial seja igual a 1000.

    => CREATE TABLE t ( c1 SERIAL, c2 TEXT);

    => ALTER SEQUENCE t_c1_seq RESTART WITH 1000;

    => INSERT INTO t VALUES (DEFAULT, 'Primeira linha');

    => SELECT * FROM t;

    c1 | c2------+----------------1000 | Primeira linha

    Nas pginas 671 e 738 da Documentao do PostgreSQL 8.0.0 fala de todos os parmetros de manipulao de sequncia

    3.2. Tipo de Cadeia de Caracteres;Nome Descrio

    CHARACTER VARYING(N), VARCHAR(N) comprimento varivel com limite

    CHARACTER(N), CHAR(N) comprimento fixo, completado com brancos

    TEXT comprimento varivel no limitado

    O SQL define dois tipos primrios para caracteres: CHARACTER VARYING(N) E CHARACTER(N) , onde n um nmeinteiro positivo. Estes dois tipos podem armazenar cadeias de caracteres com comprimento de at n caracteres.tentativa de armazenar uma cadeia de caracteres mais longa em uma coluna de um destes tipos resulta em erro, a nser que os caracteres excedentes sejam todos espaos; neste caso a cadeia de caracteres ser truncada em se

    comprimento mximo (Esta exceo um tanto bizarra requerida pelo padro SQL). Se a cadeia de caracteres a sarmazenada for mais curta que o comprimento declarado, os valores do tipo CHARACTER so completados com espao

    os valores do tipo CHARACTER VARYING simplesmente armazenam uma cadeia de caracteres mais curta.

    Se um valor for convertido explicitamente (CAST) para CHARACTER VARYING(N), ou para CHARACTER(N), o excesso d

    comprimento ser truncado para n caracteres sem gerar erro (isto tambm requerido pelo padro SQL).

  • 7/23/2019 Apostila Do Curso de PostgreSQL - 3 Edicao - Revisado

    19/100

    1

    Curso de PostgreSQL 2010

    As notaes VARCHAR(N) e CHAR(N) so sinnimos para CHARACTER VARYING(N) e CHARACTER(N

    respectivamente. O uso de CHARACTER sem especificao de comprimento equivale a CHARACTER(1); se for utilizad

    CHARACTER VARYING sem especificador de comprimento, este tipo aceita cadeias de caracteres de qualquer tamanh

    Este ltimo uma extenso do PostgreSQL.

    Alm desses o PostgreSQL disponibiliza o tipo text, que armazena cadeias de caracteres de qualquer comprimentEmbora o tipo textno esteja no padro SQL, vrios outros sistemas gerenciadores de banco de dados SQL tambmpossuem.

    Os valores do tipo CHARACTER so preenchidos fisicamente com espaos at o comprimento n especificado, sendarmazenados e mostrados desta forma. Entretanto, os espaos de preenchimento so tratados como no sendsignificativos semanticamente. Os espaos de preenchimento so desconsiderados ao se comparar dois valores do tip

    CHARACTER, e so removidos ao converter um valor do tipo CHARACTER para um dos outros tipos para cadeia d

    caracteres. Deve ser observado que os espaos no final so significativos semanticamente nos valores dos tipCHARACTER VARYING e TEXT.

    So necessrios para armazenar dados destes tipos 4 bytes mais a prpria cadeia de caracteres e, no caso do tip

    character, mais os espaos para completar o tamanho. As cadeias de caracteres longas so comprimid

    automaticamente pelo sistema e, portanto, o espao fsico necessrio em disco pode ser menor. Os valores longotambm so armazenados em tabelas secundrias, para no interferirem com o acesso rpido aos valores mais curtos dcoluna. De qualquer forma, a cadeia de caracteres mais longa que pode ser armazenada em torno de 1 GB (O val

    mximo permitido para n na declarao do tipo de dado menor que isto. No seria muito til mudar, porque de todjeito nas codificaes de caractere multibyte o nmero de caracteres e de bytes podem ser bem diferentes. Se f

    desejado armazenar cadeias de caracteres longas, sem um limite superior especificado, deve ser utilizado TEXT o

    CHARACTER VARYING sem a especificao de comprimento, em vez de especificar um limite de comprimenarbitrrio).

    Dica: No existe diferena de desempenho entre estes trs tipos, a no ser pelo aumento do tamanho do armazenamen

    quando utilizado o tipo completado com brancos. Enquanto o tipo CHARACTER(N) possui vantagens no desempen

    em alguns outros sistemas gerenciadores de banco de dados, no possui estas vantagens no PostgreSQL. Na maioria dsituaes deve ser utilizado TEXTou CHARACTER VARYING em vez deste tipo.

    Exemplo. Utilizao dos tipos para cadeias de caracteres.

    => CREATE TABLE teste1 (a character(4));=> INSERT INTO teste1 VALUES ('ok');=> SELECT a, char_length(a) FROM teste1; -- (1)

    Resultado

    a | char_length------+-------------ok | 4

    => CREATE TABLE teste2 (b VARCHAR(5));=> INSERT INTO teste2 VALUES ('ok');=> INSERT INTO teste2 VALUES ('bom '); -- (2)

    => INSERT INTO teste2 VALUES ('muito longo');

  • 7/23/2019 Apostila Do Curso de PostgreSQL - 3 Edicao - Revisado

    20/100

    2

    Curso de PostgreSQL 2010

    ERRO: valor muito longo para o tipo character varying(5)=> INSERT INTO teste2 VALUES (CAST('muito longo' AS VARCHAR(5))); -- truncamento explcito=> SELECT b, char_length(b) FROM teste2;

    Resultado

    b | char_length

    --------+-------------ok | 2bom | 5muito | 5

    3.3. Tipos de Data e Hora;

    O PostgreSQL suporta o conjunto completo de tipos para data e hora do SQL.

    NomeTamanho de

    ArmazenamentoDescrio Menor valor Maior valor Resoluo

    TIMESTAMP [ (p) ]

    [ without time

    zone ]

    8 bytes tanto dataquanto hora

    4713 AC 5874897 DC 1 microssegundo/ 14 dgitos

    TIMESTAMP [ (p) ]

    with time zone8 bytes tanto data

    quanto hora,com zona horria

    4713 AC 5874897 DC 1 microssegundo/ 14 dgitos

    INTERVAL [ (p) ] 12 bytes intervalo detempo

    -178000000anos

    178000000anos

    1 microssegundo/ 14 dgitos

    DATE 4 bytes somente data 4713 AC 32767 DC 1 dia

    TIME [ (p) ] [

    without time zone

    ]

    8 bytes somente a horado dia

    00:00:00.00 23:59:59.99 1 microssegundo/ 14 dgitos

    TIME [ (p) ] with

    time zone12 bytes somente a hora

    do dia, com zonahorria

    00:00:00.00+12 23:59:59.99-12

    1 microssegundo/ 14 dgitos

    Os tipos TIME, TIMESTAMP, E INTERVAL aceitam um valor opcional de preciso p, que especifica o nmero de dgitfracionrios mantidos no campo de segundos. Por padro no existe limite explcito para a preciso. O intervalo permitid

    parap de 0 a 6 para os tipos TIMESTAMP e INTERVAL.

    O tipo TIME WITH TIME ZONE definido pelo padro SQL, mas a definio contm propriedades que levam a um

    utilidade duvidosa. Na maioria dos casos, a combinao de DATE, TIME, TIMESTAMP WITHOUT TIME ZONE

    TIMESTAMP WITH TIME ZONEdeve fornecer uma faixa completa de funcionalidades para data e hora requeridas pqualquer aplicativo.

    Entrada de data e hora

  • 7/23/2019 Apostila Do Curso de PostgreSQL - 3 Edicao - Revisado

    21/100

    2

    Curso de PostgreSQL 2010

    A entrada da data e da hora aceita em praticamente todos os formatos razoveis, incluindo o ISO 8601, o SQcompatvel, o POSTGRES tradicional, alm de outros. Para alguns formatos a ordem do dia, ms e ano na entrada da da ambguo e, por isso, existe suporte para especificar a ordem esperada destes campos. Deve ser definido o parmet

    DateStyle como MDY para selecionar a interpretao ms-dia-ano, DMY para selecionar a interpretao dia-ms-ano, oYMD para selecionar a interpretao ano-ms-dia. O PostgreSQL mais flexvel no tratamento da entrada de data e hodo que o requerido pelo padro SQL. A configurao do formato de data e hora pode ser realizado no arquivo dconfigurao postgresql.conf, sua explicao ser abordada mais a frente.

    Lembre-se que qualquer entrada literal de data ou hora necessita estar entre apstrofos, como os textos das cadeias dcaracteres.

    Tabela de Entrada de data

    Exemplo Descrio

    January 8,1999

    no-ambguo em qualquer modo de entrada em datestyle

    1999-01-08 ISO 8601; 8 de janeiro em qualquer modo (formato recomendado)

    1/8/1999 8 de janeiro no modo MDY; 1 de agosto no modo DMY

    1/18/1999 18 de janeiro no modo MDY; rejeitado nos demais modos

    01/02/03 2 de janeiro de 2003 no modo MDY; 1 de fevereiro de 2003 no modo DMY; 3 defevereiro de 2001 no modo YMD

    1999-Jan-08 8 de janeiro e qualquer modo

    Jan-08-1999 January 8 em qualquer modo

    08-Jan-1999 8 de janeiro em qualquer modo

    99-Jan-08 8 de janeiro no modo YMD, caso contrrio errado

    08-Jan-99 8 de janeiro, porm errado no modo YMD

    Jan-08-99 8 de janeiro, porm errado no modo YMD

    19990108 ISO 8601; 8 de janeiro de 1999 em qualquer modo

    990108 ISO 8601; 8 de janeiro de 1999 em qualquer modo

    1999.008 ano e dia do ano

    J2451187 dia juliano

    January 8, 99BC

    ano 99 antes da era comum [a]

    Horas

    Os tipos hora-do-dia so TIME [ (P) ] WITHOUT TIME ZONE E TIME [ (P) ] WITH TIME ZONE. Escrever apenas TIM

    equivale a escrever TIME WITHOUT TIME ZONE.

    Entradas vlidas para estes tipos consistem na hora do dia seguida por uma zona horria opcional. Se for especificada

    zona horria na entrada de TIME WITHOUT TIME ZONE, esta ignorada em silncio.

    Entrada de hora

    http://pgdocptbr.sourceforge.net/pg80/runtime-config.html#GUC-DATESTYLEhttp://pgdocptbr.sourceforge.net/pg80/datatype-datetime.html#FTN.AEN5723http://pgdocptbr.sourceforge.net/pg80/datatype-datetime.html#FTN.AEN5723http://pgdocptbr.sourceforge.net/pg80/runtime-config.html#GUC-DATESTYLE
  • 7/23/2019 Apostila Do Curso de PostgreSQL - 3 Edicao - Revisado

    22/100

    2

    Curso de PostgreSQL 2010

    Exemplo Descrio

    04:05:06.789 ISO 8601

    04:05:06 ISO 8601

    04:05 ISO 8601

    040506 ISO 8601

    04:05 AM o mesmo que 04:05; AM no afeta o valor

    04:05 PM o mesmo que 16:05; a hora entrada deve ser

  • 7/23/2019 Apostila Do Curso de PostgreSQL - 3 Edicao - Revisado

    23/100

    2

    Curso de PostgreSQL 2010

    TIMESTAMP WITH TIME ZONE '2004-10-19 10:23:54+02'

    Se o literal no for informado explicitamente como sendo TIMESTAMP WITH TIME ZONE, o PostgreSQL ignora esilncio qualquer indicao de zona horria no literal. Ou seja, o valor resultante de data e hora derivado dos campodata e hora do valor da entrada, no sendo ajustado conforme a zona horria.

    Para TIMESTAMP WITH TIME ZONE, o valor armazenado internamente est sempre em UTC (Tempo UniversCoordenado, tradicionalmente conhecido por Hora Mdia de Greenwich, GMT [1]). Um valor de entrada possuindozona horria especificada explicitamente convertido em UTC utilizando o deslocamento apropriado para esta zonhorria. Se no for especificada nenhuma zona horria na cadeia de caracteres da entrada, pressupe-se que est nmesma zona horria indicada pelo parmetro do sistema timezone, sendo convertida em UTC utilizando o deslocamen

    da zona em timezone. Quando um valor de TIMESTAMP WITH TIME ZONE enviado para a sada, sempre convertide UTC para a zona horria corrente de TIMEZONE, e mostrado como hora local desta zona.

    Intervalos

    Os valores do tipo intervalpodem ser escritos utilizando uma das seguintes sintaxes:

    [@] quantidadeunidade [quantidadeunidade...] [direo]

    onde: quantidade um nmero (possivelmente com sinal); unidade second, minute, hour, day, week, month, yeadecade, century, millennium, ou abreviaturas ou plurais destas unidades; direo pode ser ago (atrs) ou vazio. O sinde arroba (@) opcional. As quantidades com unidades diferentes so implicitamente adicionadas na conta com o sinadequado.

    As quantidades de dias, horas, minutos e segundos podem ser especificadas sem informar explicitamente as unidade

    Por exemplo, '1 12:59:10' lido do mesmo modo que '1 day 12 hours 59 min 10 sec'.

    Valores especiais

    Por ser conveniente, o PostgreSQL tambm suporta vrios valores especiais para entrada de data e hora, conformmostrado. Os valores INFINITY e -INFINITY possuem representao especial dentro do sistema, sendo mostrados dmesma maneira; porm, os demais so simplesmente notaes abreviadas convertidas para valores comuns de data

    hora ao serem lidos (Em particular, NOW e as cadeias de caracteres relacionadas so convertidas para um valor especfide data e hora to logo so lidas). Todos estes valores devem ser escritos entre apstrofos quando usados comconstantes nos comandos SQL.

    Entradas especiais de data e hora

    Cadeia de caracteresEntrada

    Tipos vlidos Descrio

    EPOCH DATE, TIMESTAMP 1970-01-01 00:00:00+00 (hora zero dosistema Unix)

    INFINITY TIMESTAMP mais tarde que todos os outros carimbos dotempo

    http://pgdocptbr.sourceforge.net/pg80/datatype-datetime.html#FTN.AEN5870http://pgdocptbr.sourceforge.net/pg80/runtime-config.html#GUC-TIMEZONEhttp://pgdocptbr.sourceforge.net/pg80/runtime-config.html#GUC-TIMEZONEhttp://pgdocptbr.sourceforge.net/pg80/datatype-datetime.html#FTN.AEN5870
  • 7/23/2019 Apostila Do Curso de PostgreSQL - 3 Edicao - Revisado

    24/100

    2

    Curso de PostgreSQL 2010

    Cadeia de caracteresEntrada

    Tipos vlidos Descrio

    -INFINITY TIMESTAMP mais cedo que todos os outros carimbos dotempo

    NOW DATE, TIME,TIMESTAMP

    hora de incio da transao corrente

    TODAY DATE, TIMESTAMP meia-noite de hoje

    TOMORROW DATE, TIMESTAMP meia-noite de amanh

    YESTERDAY DATE, TIMESTAMP meia-noite de ontem

    ALLBALLS TIME 00:00:00.00 UTC

    Tambm podem ser utilizadas as seguintes funes, compatveis com o padro SQL, para obter o valor corrente de datahora para o tipo de dado correspondente: CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, LOCALTIMELOCALTIMESTAMP. As ltimas quatro aceitam, opcionalmente, a especificao da preciso. Entretanto, deve sobservado que so funes SQL, no sendo reconhecidas como cadeias de caracteres de entrada de dados.

    Utilizao das entradas especiais de data e hora

    Neste exemplo so mostradas utilizaes das entradas especiais de data e hora para o tipo TIMESTAMP WITH TIM

    ZONE.

    BEGIN;CREATE TEMPORARY TABLE t ( c1 TEXT, c2 TIMESTAMP WITH TIME ZONE ) ON COMMIT DROP;INSERT INTO t VALUES ('epoch', 'epoch');INSERT INTO t VALUES ('infinity', 'infinity');INSERT INTO t VALUES ('-infinity', '-infinity');INSERT INTO t VALUES ('now', 'now');INSERT INTO t VALUES ('today', 'today');INSERT INTO t VALUES ('tomorrow', 'tomorrow');INSERT INTO t VALUES ('yesterday', 'yesterday');INSERT INTO t VALUES ('CURRENT_TIMESTAMP', CURRENT_TIMESTAMP);SELECT * FROM t;COMMIT;

    c1 | c2------------------------------+----------------------------epoch | 1969-12-31 21:00:00-03

    infinity | infinity-infinity | -infinitynow | 2007-03-04 09:10:20.234-03today | 2007-03-04 00:00:00-03tomorrow | 2007-03-05 00:00:00-03yesterday | 2007-03-03 00:00:00-03CURRENT_TIMESTAMP | 2007-03-04 09:10:20.234-03(8 linhas)

  • 7/23/2019 Apostila Do Curso de PostgreSQL - 3 Edicao - Revisado

    25/100

    2

    Curso de PostgreSQL 2010

    Sadas de data e hora

    Utilizando o comando SET datestyle o formato de sada para os tipos de data e hora podem ser definidos como um dquatro estilos ISO 8601, SQL (Ingls), POSTGRES tradicional e German. O padro o formato ISO (o padro SQL requa utilizao do formato ISO 8601; o nome do formato de sada "SQL" um acidente histrico). A Tabela 8-14 mostexemplo de cada um dos estilos de sada. A sada dos tipos date e time obviamente utilizam apenas a parte da data ou hora de acordo com os exemplos fornecidos.

    Estilos de sada de data e hora

    Especificao de estilo Descrio Exemplo

    ISO ISO 8601/padro SQL 2005-04-21 18:39:28.283566-03

    SQL estilo tradicional 04/21/2005 18:39:28.283566 BRT

    POSTGRES estilo original Thu Apr 21 18:39:28.283566 2005 BRT

    German estilo regional 21.04.2005 18:39:28.283566 BRT

    Nos estilos SQL e POSTGRES, o dia vem antes do ms se a ordem de campo DMY tiver sido especificada, seno o mvem antes do dia (veja na Seo 8.5.1 como esta especificao tambm afeta a interpretao dos valores de entrada). A

    Convenes de ordem na data

    Definio de datestyle Ordem de entrada Exemplo de sada

    SQL, DMY dia/ms/ano 21/04/2005 18:39:28.283566 BRT

    SQL, MDY ms/dia/ano 04/21/2005 18:39:28.283566 BRT

    Postgres, DMY dia/ms/ano Thu 21 Apr 18:39:28.283566 2005 BRT

    European, DMY dia/ms/ano 12/11/2005 12:20:00

    A sada do tipo INTERVAL se parece com o formato da entrada, exceto que as unidades como century e week sconvertidas em anos e dias, e que agora convertido no sinal apropriado. No modo ISO a sada se parece com

    [ quantidadeunidade [ ... ] ] [ dias ] [ horas:minutos:segundos ]

    Os estilos de data e hora podem ser selecionados pelo usurio utilizando o comando SET datestyle, o parmetDateStyle no arquivo de configurao postgresql.conf, ou a varivel de ambiente PGDATESTYLE no servidor ou ncliente. A funo de formatao to_char tambm pode ser utilizada como uma forma mais flexvel de formatar a sada d

    data e hora.

    Zonas horrias

    Zonas horrias e convenes de zonas horrias so influenciadas por decises polticas, e no apenas pela geometria dTerra. As zonas horrias em torno do mundo se tornaram um tanto padronizadas durante o sculo XX, mas continuapropensas a mudanas arbitrrias, particularmente com relao a horrios de inverno e de vero. Atualmente

    PostgreSQL suporta as regras de horrio de inverno e vero (daylight-savings rules) no perodo de tempo que vai 1902 at 2038 (correspondendo faixa completa de tempo do sistema Unix convencional). Datas fora desta faixa s

    http://pgdocptbr.sourceforge.net/pg80/datatype-datetime.html#DATATYPE-DATETIME-OUTPUT-TABLEhttp://pgdocptbr.sourceforge.net/pg80/datatype-datetime.html#DATATYPE-DATETIME-INPUThttp://pgdocptbr.sourceforge.net/pg80/runtime-config.html#GUC-DATESTYLEhttp://pgdocptbr.sourceforge.net/pg80/runtime-config.html#GUC-DATESTYLEhttp://pgdocptbr.sourceforge.net/pg80/datatype-datetime.html#DATATYPE-DATETIME-INPUThttp://pgdocptbr.sourceforge.net/pg80/datatype-datetime.html#DATATYPE-DATETIME-OUTPUT-TABLE
  • 7/23/2019 Apostila Do Curso de PostgreSQL - 3 Edicao - Revisado

    26/100

    2

    Curso de PostgreSQL 2010

    consideradas como estando na "hora padro" da zona horria selecionada, sem importar em que parte do ano encontram.

    O PostgreSQL se esfora para ser compatvel com as definies do padro SQL para o uso tpico. Entretanto, o padrSQL possui uma combinao nica de tipos e funcionalidades para data e hora. Os dois problemas bvios so:

    Embora o tipo date no possua zona horria associada, o tipo time pode possuir. As zonas horrias do mundreal possuem pouco significado a menos que estejam associadas a uma data e hora, porque o deslocamento pod

    variar durante o ano devido ao horrio de vero. A zona horria padro especificada como um deslocamento numrico constante em relao ao UTC. No

    possvel, portanto, fazer ajuste devido ao horrio de vero ao se realizar aritmtica de data e hora entrfronteiras do horrio de vero .

    Para superar estas dificuldades, recomenda-se utilizar tipos de data e hora contendo tanto a data quanto a hora quand

    utilizar zonas horrias. Recomenda-se no utilizar o tipo time with time zone (embora seja suportado pelo PostgreSQpara os aplicativos legados e para conformidade com o padro SQL). O PostgreSQL assume a zona horria local paqualquer tipo contendo apenas a data ou a hora.

    Todas as datas e horas com zona horria so armazenadas internamente em UTC. So convertidas para a hora local zona especificada pelo parmetro de configurao timezone antes de serem mostradas ao cliente.

    O parmetro de configurao timezone pode ser definido no arquivo postgresql.conf. Existem, tambm, vrias outrformas especiais de defini-lo:

    Se timezone no for especificada no arquivo de configurao postgresql.conf, nem como uma chave da linha dcomando do postmaster, o servidor tenta utilizar o valor da varivel de ambiente TZ como a zona horria padrSe TZ no estiver definida, ou no contiver nenhum nome de zona horria conhecido pelo PostgreSQL, o servidtenta determinar a zona horria padro do sistema operacional verificando o comportamento da fun

    localtime() da biblioteca C. A zona horria padro selecionada atravs da correspondncia mais prximas entas zonas horrias conhecidas pelo PostgreSQL.

    O comando SQL SET TIME ZONE define a zona horria para a sesso. Esta uma forma alternativa de STIMEZONE TO com uma sintaxe mais compatvel com a especificao SQL.

    Se a varivel de ambiente PGTZ estiver definida no cliente, utilizada pelos aplicativos libpq para enviarcomando SET TIME ZONE para o servidor durante a conexo.

    3.4. Tipo Booleano;O PostgreSQL disponibiliza o tipo SQL padro boolean. O tipo boolean pode possuir apenas um dos dois estado"verdade" ou "falso". O terceiro estado, "desconhecido", representado pelo valor nulo do SQL.

    Valores literais vlidos

    Para o estado Verdade Para o estado Falso

    TRUE FALSE

    't' 'f'

    'true' 'false'

    http://pgdocptbr.sourceforge.net/pg80/runtime-config.html#GUC-TIMEZONEhttp://pgdocptbr.sourceforge.net/pg80/runtime-config.html#GUC-TIMEZONEhttp://pgdocptbr.sourceforge.net/pg80/runtime-config.html#GUC-TIMEZONEhttp://pgdocptbr.sourceforge.net/pg80/runtime-config.html#GUC-TIMEZONE
  • 7/23/2019 Apostila Do Curso de PostgreSQL - 3 Edicao - Revisado

    27/100

    2

    Curso de PostgreSQL 2010

    'y' 'n'

    'yes' 'no'

    '1' '0'

    A utilizao das palavras chave TRUE e FALSE preferida (e em conformidade com o padro SQL).

    Utilizao do tipo boolean

    CREATE TABLE teste1 (a BOOLEAN, b text);INSERT INTO teste1 VALUES (TRUE, 'sim');INSERT INTO teste1 VALUES (FALSE, 'nao');SELECT * FROM teste1;

    a | b---+---------t | sim

    f | nao

    SELECT * FROM teste1 WHERE a;

    a | b---+---------t | sim

    O Exemplo mostra que os valores do tipo BOOLEAN so exibidos utilizando as letras t e f.

    Dica: Os valores do tipo BOOLEAN no podem ser convertidos diretamente em outros tipos (por exemplo, CA(valor_BOOLEANO AS INTEGER) no funciona). A converso pode ser feita utilizando a expresso CASE: CASE WHEvalor_BOOLEANO THEN 'valor se for verdade' ELSE 'valor se for falso' END . O tipo BOOLEAN utiliza 1 byte para sarmazenamento.

    3.5. Tipo para Endereo de Rede;O PostgreSQL disponibiliza tipos de dado para armazenar endereos IPv4, IPv6 e MAC. prefervel utilizar estes tipos evez dos tipos de texto puro, porque estes tipos possuem verificao de erro na entrada, alm de vrios operadores funes especializadas (para mais informaes consulte a pg. 189 da documentao)

    Tipos para endereo de rede

    Nome Tamanho de Armazenamento Descrio

    CIDR 12 ou 24 bytes redes IPv4 e IPv6

    INET 12 ou 24 bytes hospedeiros e redes IPv4 e IPv6

    MACADDR 6 bytes endereo MAC

    http://pgdocptbr.sourceforge.net/pg80/datatype-boolean.html#DATATYPE-BOOLEAN-EXAMPLEhttp://pgdocptbr.sourceforge.net/pg80/datatype-boolean.html#DATATYPE-BOOLEAN-EXAMPLE
  • 7/23/2019 Apostila Do Curso de PostgreSQL - 3 Edicao - Revisado

    28/100

    2

    Curso de PostgreSQL 2010

    Ao ordenar os tipos de dado INET e CIDR, os endereos IPv4 vm sempre na frente dos endereos IPv6, inclusive

    endereos IPv4 encapsulados ou mapeados em endereos IPv6, tais como ::10.2.3.4 ou ::ffff::10.4.3.2.

    INET

    O tipo de dado INETarmazena um endereo de hospedeiro IPv4 ou IPv6 e, opcionalmente, a identificao da sub-redonde se encontra, tudo em um nico campo. A identificao da sub-rede representada declarando quantos bits d

    endereo do hospedeiro representam o endereo de rede (a "mscara de rede"). Se a mscara de rede for 32 e

    endereo for IPv4, ento o valor no indica uma sub-rede, e sim um nico hospedeiro. No IPv6 o comprimento dendereo de 128 bits e, portanto, 128 bits especificam o endereo de um nico hospedeiro. Deve ser observado que

    for desejado aceitar apenas endereos de rede, deve ser utilizado o tipo CIDR em vez do tipo INET.

    O formato de entrada para este tipo endereo/y, onde endereo um endereo IPv4 ou IPv6, e y o nmero de b

    da mscara de rede. Se a parte /yfor deixada de fora, ento a mscara de rede ser 32 para IPv4 e 128 para IPv6, e

    valor representa um nico hospedeiro apenas. Ao ser mostrado, a poro/y suprimida se a mscara de rede especificapenas um nico hospedeiro.

    CIDR

    O tipo CIDR armazena uma especificao de rede IPv4 ou IPv6 sem a especificao da mscara.

    Exemplos de entrada para o tipo CIDR.

    Entrada CIDR Sada CIDR abbrev(CIDR)

    192.168.100.128/25 192.168.100.128/25 192.168.100.128/25

    192.168/24 192.168.0.0/24 192.168.0/24

    192.168/25 192.168.0.0/25 192.168.0.0/25

    192.168.1 192.168.1.0/24 192.168.1/24

    192.168 192.168.0.0/24 192.168.0/24

    128.1 128.1.0.0/16 128.1/16

    128 128.0.0.0/16 128.0/16

    128.1.2 128.1.2.0/24 128.1.2/24

    10.1.2 10.1.2.0/24 10.1.2/24

    10.1 10.1.0.0/16 10.1/16

    10 10.0.0.0/8 10/8

    10.1.2.3/32 10.1.2.3/32 10.1.2.3/32

    2001:4f8:3:ba::/64 2001:4f8:3:ba::/64 2001:4f8:3:ba::/64

    2001:4f8:3:ba:2e0:81ff:fe22:d1f1/128

    2001:4f8:3:ba:2e0:81ff:fe22:d1f1/128

    2001:4f8:3:ba:2e0:81ff:fe22:d1f1

    ::ffff:1.2.3.0/120 ::ffff:1.2.3.0/120 ::ffff:1.2.3/120

    ::ffff:1.2.3.0/128 ::ffff:1.2.3.0/128 ::ffff:1.2.3.0/128

    INET versus CIDR

  • 7/23/2019 Apostila Do Curso de PostgreSQL - 3 Edicao - Revisado

    29/100

    2

    Curso de PostgreSQL 2010

    A diferena essencial entre os tipos de dado inete cidr que inetaceita valores com bits diferente de zero direita d

    mscara de rede, enquanto cidrno aceita.

    Dica: Caso no se goste do formato de sada para os valores de INETou CIDR, deve-se tentar utilizar as funes hosttext() e abbrev().

    MACADDR

    O tipo MACADDR armazena endereos de MAC, ou seja, endereos de hardware da placa Ethernet (embora osendereos de MAC sejam utilizados para outras finalidades tambm). A entrada aceita em vrios formatoshabituais incluindo

    '08002b:010203'

    '08002b-010203'

    '0800.2b01.0203'

    '08-00-2b-01-02-03'

    '08:00:2b:01:02:03'

    sendo que todos especificam o mesmo endereo. Letras maisculas e minsculas so aceitas para os dgitos de a f.sada sempre na ltima forma mostrada.

    Na distribuio do cdigo fonte do PostgreSQL, o diretrio contrib/mac contm ferramentas que podem ser utilizadpara fazer a correspondncia entre endereos de MAC e nomes de fabricantes de hardware.

    3.6. Tipos Adicionais. Tipos Geomtricos;

    Tipos Compostos; Matrizes; Tipos para cadeias de bits.

  • 7/23/2019 Apostila Do Curso de PostgreSQL - 3 Edicao - Revisado

    30/100

    3

    Curso de PostgreSQL 2010

    4. Instalao do Banco de Dados4.1. Instalao no ambiente Windows;

    Clique em Prximo prosseguir a instalao.

    Outra vez clique em Prximo para prosseguir.

  • 7/23/2019 Apostila Do Curso de PostgreSQL - 3 Edicao - Revisado

    31/100

    3

    Curso de PostgreSQL 2010

    Clique com o boto esquerdo do mouse sobre o primeiro item PostgreSQL e marque a opo Todo o recurso seinstalado no disco rgido. E clique em Prximo para prosseguir.

  • 7/23/2019 Apostila Do Curso de PostgreSQL - 3 Edicao - Revisado

    32/100

    3

    Curso de PostgreSQL 2010

    Coloque a senha postgres, e clique a Prximo para prosseguir.

    Ele pergunta se deseja criar o usurio postgres, voc confirma, pois por este usurio que so realizadas atransaes no banco de dados.

    Senha postgres

  • 7/23/2019 Apostila Do Curso de PostgreSQL - 3 Edicao - Revisado

    33/100

    3

    Curso de PostgreSQL 2010

    Em seguida ele perguntar se deseja que o sistema gera uma senha mais difcil, marque que no.

    Marque a opo Aceitar conexes em todos os endereos, e no apenas localhost. E coloque a senha postgres, essenha a de super usurio do banco de dados.

    Clique em OK para continuar a instalao.

  • 7/23/2019 Apostila Do Curso de PostgreSQL - 3 Edicao - Revisado

    34/100

    3

    Curso de PostgreSQL 2010

    Marque a opo Pl/pgsql, e clique em Prximo para continuar a instalao.

    Marque a opo e Funes Criptografia, e clique em Prximo para prosseguir a instalao.

    E por ltimo clique em Prximo para comear a instalao. E pronto.

  • 7/23/2019 Apostila Do Curso de PostgreSQL - 3 Edicao - Revisado

    35/100

    3

    Curso de PostgreSQL 2010

    4.2. Instalao no ambiente Linux.Instalao do PostgreSQL 8.4 no Ubuntu 9.04

    1. Abra o terminal de comandos do linux;2. digite no terminal:$ sudo su (coloque senha)

    3. Depois execute um comando ./nome_progama.bin. Por exemplo:

    root@gabriel-desktop:/home/gabriel# ./postgresql-8.4.0-1b2-linux.bin

    Em seguida ir aparecer a tela de instalao do PostgreSQL.

    Clique em avanar e prossiga a instalao do PostgreSQL.

  • 7/23/2019 Apostila Do Curso de PostgreSQL - 3 Edicao - Revisado

    36/100

    3

    Curso de PostgreSQL 2010

    Informe o diretrio de instalao do banco, por padro de instalao no /opt/PostgreSQL/8.4/, nada impede de vo

    mudar para um diretria de sua melhor preferncia.

    Depois informe o diretrio de dados, lembrando que neste diretrio ser armazenado os dados das tabelas e principais arquivos de configurao do PostgreSQL.

    Informe a senha do super-usurio do banco de dados.

  • 7/23/2019 Apostila Do Curso de PostgreSQL - 3 Edicao - Revisado

    37/100

    3

    Curso de PostgreSQL 2010

    Informe a porta de conexo com o banco de dados. A porta padro a 5432.

  • 7/23/2019 Apostila Do Curso de PostgreSQL - 3 Edicao - Revisado

    38/100

    3

    Curso de PostgreSQL 2010

    Selecione a coleo de dados do sistema, igualmente o que est na imagem logo acima.

    Clique em avanar para iniciar a instalao do PostgreSQL.

  • 7/23/2019 Apostila Do Curso de PostgreSQL - 3 Edicao - Revisado

    39/100

    3

    Curso de PostgreSQL 2010

    Aps concluir esta etapa o banco de dados estar instalado com sucesso.

  • 7/23/2019 Apostila Do Curso de PostgreSQL - 3 Edicao - Revisado

    40/100

    4

    Curso de PostgreSQL 2010

    5. DDL (Linguagem de Definio de Dados) - Comandos de Criao, Alterao e Excluso de banco dados, de tabelade restries, de unicidades, de ndices, de chaves estrangeiras;

    CREATE DATABASE: cria um banco de dados

    Sinopse

    CREATE DATABASE nome

    [ [ WITH ] [ OWNER [=] dono_do_banco_de_dados ][ TEMPLATE [=] modelo ]

    [ ENCODING [=] codificao ]

    [ TABLESPACE [=] espao_de_tabelas ] ]

    Descrio

    O comando CREATE DATABASE cria um banco de dados no PostgreSQL. Para poder criar um banco de dados necessr

    ser um superusurio ou possuir o privilgio especial CREATEDB. Consulte o comando CREATE USER. Normalmente,

    criador se torna o dono do novo banco de dados. Os superusurios podem criar bancos de dados cujos donos so outr

    usurios utilizando a clusula OWNER e, at mesmo, criar bancos de dados cujos donos so usurios sem nenhuprivilgio especial. Usurios comuns com privilgio CREATEDB podem criar apenas bancos de dados cujos donos so el

    mesmos.

    Por padro, o novo banco de dados criado clonando o de banco de dados comum do sistema template1. Um mode

    diferente pode ser especificado escrevendo TEMPLATE modelo. Em particular, escrevendo TEMPLATE template0 pode s

    criado um banco de dados bsico contendo apenas os objetos comuns pr-definidos pela verso do PostgreSQL em us

    Esta forma til quando se deseja evitar a cpia de qualquer objeto da instalao local que possa ter sido adicionado a

    template1.

    Explicao dos Parmetros

    nome

    O nome do banco de dados a ser criado.

    dono_do_banco_de_dados

    O nome do usurio do banco de dados que ser o dono do novo banco de dados, ou DEFAULT para usar o padr

    (ou seja, o usurio que est executando o comando).

    modelo

    Nome do modelo a partir do qual o novo banco de dados ser criado, ou DEFAULT para utilizar o modelo padr

    (template1).

    codificao

    Codificao do conjunto de caracteres a ser utilizado no novo banco de dados. Deve ser especificada uma constant

    cadeia de caracteres (por exemplo, 'SQL_ASCII'), ou o nmero inteiro da codificao, ou DEFAULT para utilizar

    codificao padro. Os conjuntos de caracteres suportados pelo PostgreSQL sero descritos logo a frente.

    espao_de_tabelas

  • 7/23/2019 Apostila Do Curso de PostgreSQL - 3 Edicao - Revisado

    41/100

    4

    Curso de PostgreSQL 2010

    O nome do espao de tabelas associado ao novo banco de dados, ou DEFAULT para utilizar o espao de tabelas d

    banco de dados modelo. Este espao de tabelas o espao de tabelas padro para os objetos criados neste banc

    de dados. Consulte o comando CREATE TABLESPACE para obter informaes adicionais.

    Os parmetros opcionais podem ser escritos em qualquer ordem, e no apenas na ordem mostrada acima.

    Observaes

    O comando CREATE DATABASE no pode ser executado dentro de um bloco de transao.

    Erros contendo could not initialize database directory (no foi possvel inicializar o diretrio do banco de dados) est

    normalmente relacionados com a falta de permisso no diretrio de dados, disco cheio, ou outros problemas no sistem

    de arquivos.

    Deve ser utilizado DROP DATABASE para remover o banco de dados.

    O aplicativo createdb, fornecido por convenincia, um programa em torno deste comando. Embora seja possvel copi

    outro banco de dados em vez do template1 especificando seu nome como modelo, no se pretende (ainda) que esta se

    uma funcionalidade de COPY DATABASE de uso geral. Recomenda-se que os bancos de dados utilizados como mode

    sejam tratados como se fossem somente para leitura.

    Exemplos

    Para criar um banco de dados:

    => CREATE DATABASE lusiadas;

    Para criar o banco de dados vendas pertencendo ao usurio usuvendas com o espao de tabelas padro espvendas:

    =>CREATE DATABASE vendas OWNER usuvendas TABLESPACE espvendas;

    Para criar o banco de dados musica com suporte a conjunto de caracteres ISO-8859-1:

    => CREATE DATABASE musica ENCODING 'LATIN1' TEMPLATE template0;

    Compatibilidade

    No existe o comando CREATE DATABASE no padro SQL. Os bancos de dados so equivalentes aos catlogos, cu

    criao definida pela implementao.

    ALTER DATABASE: altera um banco de dados

    Sinopse

    ALTER DATABASE nome SETparmetro { TO | = } { valor| DEFAULT }ALTER DATABASE nome RESETparmetroALTER DATABASE nome RENAME TO novo_nomeALTER DATABASE nome OWNER TO novo_dono

    Descrio

    O comando ALTER DATABASE altera os atributos de um banco de dados.As duas primeiras formas mudam, para um banco de dados do PostgreSQL, o valor padro para a sesso de uma varivde configurao em tempo de execuo. Depois, sempre que uma nova sesso for iniciada neste banco de dados, o val

  • 7/23/2019 Apostila Do Curso de PostgreSQL - 3 Edicao - Revisado

    42/100

    4

    Curso de PostgreSQL 2010

    especificado se torna o valor padro para a sesso. O padro especfico para o banco de dados substitui qualqu

    definio presente no arquivo postgresql.conf, ou que tenha sido recebida a partir da linha de comando do postmasteSomente o dono do banco de dados ou um superusurio podem mudar os padres para a sesso de um banco de dadoCertas variveis no podem ser definidas desta maneira, ou somente podem ser definidas por um superusurio.

    A terceira forma muda o nome do banco de dados. Somente o dono do banco de dados ou um superusurio pode

    mudar o nome do banco de dados; os donos que no so superusurios devem possuir, tambm, o privilgio CREATEDO banco de dados corrente no pode ter seu nome mudado (Deve-se conectar a um banco de dados diferente se fo

    necessrio realizar esta operao).

    A quarta forma muda o dono do banco de dados. Somente um superusurio pode mudar o dono do banco de dados.

    Parmetros

    NomeO nome do banco de dados cujos atributos esto sendo alterados.

    parmetro

    valor

    Define o padro de sesso deste banco de dados, para o parmetro de configurao especificado, como o valofornecido. Se valorfor DEFAULT ou, de forma equivalente, se RESET for utilizado, a definio especfica parabanco de dados removida, e a definio padro global do sistema passa a ser herdada nas novas sesses. Dev

    ser utilizado RESET ALL para remover todas as definies especficas do banco de dados.

    novo_nome

    O novo nome do banco de dados.

    novo_dono

    O novo dono do banco de dados.

    Exemplos

    Para renomear um banco de dados:

    ALTER DATABASE dbprod RENAME TO dbproducao;

    Compatibilidade

    O comando ALTER DATABASE uma extenso do PostgreSQL.

    DROP DATABASE: remove um banco de dados

    Sinopse

    DROP DATABASE nome

    Descrio

  • 7/23/2019 Apostila Do Curso de PostgreSQL - 3 Edicao - Revisado

    43/100

    4

    Curso de PostgreSQL 2010

    O comando DROP DATABASE remove um banco de dados. Remove as entradas no catlogo para o banco de dadosremove o diretrio contendo os dados. Pode ser executado apenas pelo dono do banco de dados. Tambm, no pode seexecutado se voc ou alguma outra pessoa estiver conectado ao banco de dados a ser removido; se conecte ao templateou a qualquer outro banco de dados para executar este comando.O comando DROP DATABASE no pode ser desfeito. Utilize com cuidado!

    Parmetros

    nomeO nome do banco de dados a ser removido.

    ObservaesO comando DROP DATABASE no pode ser executado dentro de um bloco de transao. Este comando no pode seexecutado enquanto conectado ao banco de dados de destino. Portanto, mais conveniente utilizar o aplicativo dropdque um script englobando este comando.

    CompatibilidadeNo existe o comando DROP DATABASE no padro SQL.

    CREATE SCHEMA: cria um esquema

    Sinopse

    CREATE SCHEMA nome_do_esquema [ AUTHORIZATION nome_do_usurio ] [ elemento_do_esquema [ ... ] ]CREATE SCHEMA AUTHORIZATION nome_do_usurio [ elemento_do_esquema [ ... ] ]

    Descrio

    O comando CREATE SCHEMA cria um esquema no banco de dados corrente. O nome do esquema deve ser distinto dnome de todos os outros esquemas existentes no banco de dados corrente.

    Um esquema essencialmente um espao de nomes: contm objetos com nome (tabelas, tipos de dado, funesoperadores), cujos nomes podem ser iguais aos de outros objetos existentes em outros esquemas. Os objetos com nom

    so acessados "qualificando" seus nomes usando o nome do esquema como prefixo, ou definindo um caminho dprocura que inclua os esquemas desejados. O comando CREATE que especifica um nome de objeto no qualificado criaobjeto no esquema corrente (o primeiro do caminho de procura, que pode ser determinado pela fun

    current_schema).

    Opcionalmente, o comando CREATE SCHEMA pode incluir subcomandos para criar objetos no novo esquema. Estsubcomandos so tratados, essencialmente, da mesma maneira como so tratados os comandos em separad

    submetidos aps a criao do esquema, exceto que, se for utilizada a clusula AUTHORIZATION, todos os objetos criad

    pertencero a este usurio.

    Parmetros

    nome_do_esquema

    O nome do esquema a ser criado. Se for omitido, ser usado o nome do usurio como nome do esquema. O nom

    no pode comear por pg_, porque estes nomes so reservados para os esquemas do sistema.

    nome_do_usurio

  • 7/23/2019 Apostila Do Curso de PostgreSQL - 3 Edicao - Revisado

    44/100

    4

    Curso de PostgreSQL 2010

    O nome do usurio que ser o dono do esquema. Se for omitido, tem como padro o usurio que esexecutando o comando. Somente os superusurios podem criar esquemas pertencentes a outros usurios.

    elemento_do_esquema

    Um comando SQL definindo um objeto a ser criado no esquema. Atualmente, somente CREATE TABLE, CREATVIEW, CREATE INDEX, CREATE SEQUENCE, CREATE TRIGGER e GRANT so aceitos como clusula no comandCREATE SCHEMA. Os objetos de outros tipos podem ser criados por comandos em separado, aps o esquemter sido criado.

    Observaes

    Para criar um esquema o usurio deve possuir o privilgio CREATE no banco de dados corrente ( claro que superusurios no so afetados por esta exigncia).

    Exemplos

    Criar um esquema:

    CREATE SCHEMA meu_esquema;

    Criar um esquema para o usurio antonio; o esquema tambm se chamar antonio:

    CREATE SCHEMA AUTHORIZATION antonio;

    Criar um esquema e criar uma tabela e uma viso nele:

    CREATE SCHEMA hollywoodCREATE TABLE filmes (titulo text, lancamento date, premios text[])CREATE VIEW premiados AS

    SELECT titulo, lancamento FROM filmes WHERE premios IS NOT NULL;

    Deve ser observado que os subcomandos individuais no terminam por ponto-e-vrgula.

    Abaixo est mostrada uma forma equivalente para se obter o mesmo resultado:

    CREATE SCHEMA hollywood;CREATE TABLE hollywood.filmes (titulo text, lancamento date, premios text[]);CREATE VIEW hollywood.premiados AS

    SELECT titulo, lancamento FROM hollywood.filmes WHERE premios IS NOT NULL;

    Compatibilidade

  • 7/23/2019 Apostila Do Curso de PostgreSQL - 3 Edicao - Revisado

    45/100

    4

    Curso de PostgreSQL 2010

    O padro SQL permite a clusula DEFAULT CHARACTER SET no comando CREATE SCHEMA, bem como mais tipos subcomandos que os aceitos atualmente pelo PostgreSQL. O padro SQL especifica que os subcomandos presentes eCREATE SCHEMA podem estar em qualquer ordem. A implementao atual do PostgreSQL no trata todos os casos dreferncia frente nos subcomandos; alguma vezes pode ser necessrio reordenar os subcomandos para evitreferncias frente. De acordo com o padro SQL, o dono do esquema sempre possui todos os objetos que este cont

    O PostgreSQL permite que os esquemas contenham objetos pertencentes a outros usurios. Isto s acontece quandodono do esquema concede o privilgio CREATE em seu esquema para algum outro usurio.

    ALTER SCHEMA: altera a definio de um esquema

    Sinopse

    ALTER SCHEMA nome RENAME TO novo_nomeALTER SCHEMA nome OWNER TO novo_dono

    Descrio

    O comando ALTER SCHEMA altera a definio de um esquema. Para mudar o nome do esquema necessr

    ser o dono do esquema e possuir o privilgio CREATE para o banco de dados. Para mudar o dono do esquemanecessrio ser um superusurio.

    Parmetros

    nome

    O nome de um esquema existente.

    novo_nome

    O novo nome do esquema. O novo nome no pode comear por pg_, porque estes nomes sreservados para os esquemas do sistema.

    novo_dono

    O novo dono do esquema.

    Compatibilidade

    No existe o comando ALTER SCHEMA no padro SQL.

    DROP SCHEMA: remove um esquema

    Sinopse

    DROP SCHEMA nome [, ...] [ CASCADE | RESTRICT ]

    Descrio

    O comando DROP SCHEMA remove esquemas do banco de dados.

  • 7/23/2019 Apostila Do Curso de PostgreSQL - 3 Edicao - Revisado

    46/100

    4

    Curso de PostgreSQL 2010

    O esquema somente pode ser removido pelo seu dono ou por um superusurio. Deve ser observado que o dono podremover o esquema (e, portanto, todos os objetos que este contm), mesmo que no seja o dono de alguns objetocontidos no esquema.

    Parmetros

    nome

    O nome do esquema.

    CASCADERemove automaticamente os objetos (tabelas, funes, etc.) contidos no esquema.

    RESTRICT

    Recusa remover o esquema caso este contenha algum objeto. Este o padro.

    Exemplos

    Para remover do banco de dados o esquema meu_esquema junto com todos os objetos que este contm:

    DROP SCHEMA meu_esquema CASCADE;

    Compatibilidade

    O comando DROP SCHEMA est em conformidade total com o padro SQL, exceto pelo padro permitir remover apenaum esquema por comando.

    CREATE TABLE: cria uma tabela

    Sinopse

    CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } ] TABLE nome_da_tabela ({ nome_da_colunatipo_de_dado [ DEFAULT expresso_padro ] [ restrio_de_coluna [ ... ] ]

    | restrio_de_tabela| LIKE tabela_ancestral[ { INCLUDING | EXCLUDING } DEFAULTS ] } [, ... ]

    )[ INHERITS ( tabela_ancestral[, ... ] ) ][ WITH OIDS | WITHOUT OIDS ][ ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP } ][ TABLESPACE espao_de_tabelas ]

    onde restrio_de_coluna :

    [ CONSTRAINT nome_da_restrio ]{ NOT NULL |NULL |UNIQUE [ USING INDEX TABLESPACE espao_de_tabelas ] |PRIMARY KEY [ USING INDEX TABLESPACE espao_de_tabelas ] |CHECK (expresso) |REFERENCES tabela_referenciada [ ( coluna_referenciada ) ][ MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ][ ON DELETE ao ] [ ON UPDATE ao ] }

  • 7/23/2019 Apostila Do Curso de PostgreSQL - 3 Edicao - Revisado

    47/100

    4

    Curso de PostgreSQL 2010

    [ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ]

    e restrio_de_tabela :

    [ CONSTRAINT nome_da_restrio ]{ UNIQUE ( nome_da_coluna [, ... ] ) [ USING INDEX TABLESPACE espao_de_tabelas ] |PRIMARY KEY ( nome_da_coluna [, ... ] ) [ USING INDEX TABLESPACE espao_de_tabelas ] |CHECK ( expresso ) |

    FOREIGN KEY ( nome_da_coluna [, ... ] )REFERENCES tabela_referenciada [ ( coluna_referenciada [, ... ] ) ][ MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ] [ ON DELETE ao ] [ ON UPDATE ao ] }[ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ]

    Descrio

    O comando CREATE TABLE cria uma tabela, inicialmente vazia, no banco de dados corrente. O usurio que executacomando se torna o dono da tabela. Se for fornecido o nome do esquema (por exemplo, CREATE TABmeu_esquema.minha_tabela ...) ento a tabela ser criada no esquema especificado, seno ser criada no esquemcorrente. As tabelas temporrias so criadas em um esquema especial e, portanto, no pode ser fornecido o nome d

    esquema ao se criar tabelas temporrias. O nome da tabela deve ser distinto do nome de qualquer outra tabeseqncia, ndice ou viso no mesmo esquema. As clusulas opcionais de restrio especificam as restries (testes) qas linhas novas ou modificadas devem satisfazer para a operao de insero ou de modificao ser bem-sucedida. Umrestrio um objeto SQL que ajuda a definir o conjunto de valores vlidos para a tabela de vrias maneiras.

    Existem duas formas para definir restries: restries de tabela e restries de coluna. A restrio de coluna definidcomo parte da definio da coluna. A definio da restrio de tabela no vinculada a uma determinada coluna, e podconter mais de uma coluna. Toda restrio de coluna tambm pode ser escrita como restrio de tabela; a restrio dcoluna somente uma notao conveniente para ser usada quando a restrio afeta apenas uma coluna. [3]

    Parmetros

    TEMPORARY ou TEMP

    Se for especificado, a tabela ser criada como sendo uma tabela temporria. As tabelas temporrias s

    automaticamente removidas no final da sesso ou, opcionalmente, no final da transao corrente (consulte OCOMMIT abaixo). As tabelas permanentes existentes no estaro visveis na sesso corrente enquanto existiretabelas temporrias com o mesmo nome, a no ser que sejam referenciadas por um nome qualificado peesquema. Todo ndice criado em tabela temporria tambm temporrio. Opcionalmente, pode ser escri

    GLOBAL ou LOCAL antes de TEMPORARY ou de TEMP. Isto no faz qualquer diferena no PostgreSQL, mconsulte Compatibilidade.

    nome_da_tabela

    O nome (opcionalmente qualificado pelo esquema) da tabela a ser criada.

    nome_da_coluna

    O nome da coluna a ser criada na nova tabela.

    tipo_de_dado

    http://pgdocptbr.sourceforge.net/pg80/sql-createtable.html#FTN.AEN48928http://pgdocptbr.sourceforge.net/pg80/sql-createtable.html#SQL-CREATETABLE-COMPATIBILITYhttp://pgdocptbr.sourceforge.net/pg80/sql-createtable.html#SQL-CREATETABLE-COMPATIBILITYhttp://pgdocptbr.sourceforge.net/pg80/sql-createtable.html#FTN.AEN48928
  • 7/23/2019 Apostila Do Curso de PostgreSQL - 3 Edicao - Revisado

    48/100

    4

    Curso de PostgreSQL 2010

    O tipo de dado da coluna. Pode incluir especificadores de matriz (array). Para obter informaes adicionais sob

    os tipos de dado suportados pelo PostgreSQL deve ser consultado o captulo dos tipos de dados.

    DEFAULT expresso_padro

    A clusula DEFAULT atribui um valor de dado padro para a coluna em cuja definio est presente. O valor podser qualquer expresso sem varivel (variable-free) (subconsultas e referncia