Escolar Documentos
Profissional Documentos
Cultura Documentos
Apostila PostgreSQL 8.4
Apostila PostgreSQL 8.4
Franco da Rocha
2010
Índice:
Introdução......................................................................................................................... 5
Características................................................................................................................... 5
Recursos Presentes na Versão mais Recente.................................................................... 6
Sobre o PostgreSQL ......................................................................................................... 6
Limite Valor ..................................................................................................................... 6
Um Pouco da História do PostgreSQL............................................................................. 7
Tipos de Dados do PostgreSQL ....................................................................................... 8
Tipos de dados: Caracteres ........................................................................................... 8
Tipos de dados: Numéricos .......................................................................................... 8
Números de precisão fixa ............................................................................................. 8
Tipos de ponto flutuante ............................................................................................... 9
Pseudo tipos seriais....................................................................................................... 9
Uso.................................................................................................................................. 10
Criação de banco de dados no PostgreSQL................................................................ 10
Referências ..................................................................................................................... 49
II
Introdução
O PostgreSQL é um SGBD (Sistema Gerenciador de Banco de Dados) objeto-
relacional de código aberto, com mais de 15 anos de desenvolvimento. É robusto e
confiável, além de ser extremamente flexível e rico em recursos. Um de seus atrativos é
possuir recursos comuns a banco de dados de grande porte (SQL Server), o que o deixa
apto a trabalhar, inclusive, com operações de missão crítica. Além disso, trata-se de um
banco de dados versátil, seguro e gratuito disponível sob uma licença BSD.
O PostgreSQL é considerado objeto-relacional por implementar, além das
características de um SGBD relacional, algumas características de orientação a objetos,
como herança e tipos personalizados com conformidade e padrões. Ele roda em todos os
grandes sistemas operacionais, incluindo GNU/Linux, Unix (AIX, BSD, HP-UX, SGI
IRIX, Mac OS X, Solaris, Tru64), e MS Windows.
Além de tudo é totalmente compatível com ACID, têm suporte completo à
chaves estrangeiras, junções (JOIN), visões, gatilhos e procedimentos armazenados em
múltiplas linguagens. Inclui a maior parte dos tipos de dados do ISO SQL: 1999,
incluindo INTEGER, NUMERIC, BOOLEAN, CHAR, VARCHAR, DATE,
INTERVAL, e TIMESTAMP. Suporta também sons ou vídeos. Possui interfaces
nativas de programação para C/C++, Java, Net, Perl, Python, Ruby, Tcl, ODBC, entre
outros, e uma documentação excepcional.
O PostgreSQL teve patrocínio de diversas empresas, entre as quais se destacam:
Fujitsu, Hub.Org, NTT Group, Red Hat, Skype, SRA e Sun Microsystems. O software
tem adquirido prestígio na comunidade Linux, tendo recebido diversas vezes o prêmio
Linux Journal Editor's Choice de melhor Sistema de Gerenciamento de Banco de
Dados.
A aceitação do PostgreSQL tem se ampliado para além da comunidade de
código aberto. Há entre os seus usuários grandes empresas internacionais, órgãos
governamentais de vários países e universidades de prestígio mundial. Existe uma lista
dos principais usuários no Brasil e no mundo e, também, há alguns estudos de caso de
aplicações que utilizam o PostgreSQL.
Características
Desenvolvedor: PostgreSQL Global Development Group;
Idiomas: 23 idiomas;
Website: http://www.PostgreSQL.org.br;
5
Recursos Presentes na Versão mais Recente
• Consultas complexas
• Chaves Estrangeiras
• Integridade Transacional
• Controle de concorrência multi-versão
• Suporte ao modelo híbrido objeto-relacional
• Gatilhos
• Visões
• Linguagem Procedural em várias linguagens (PL/pgSQL, PL/Python, PL/Java,
PL/Perl) para Procedimentos armazenados
• Indexação por texto
• Estrutura para guardar dados Georeferenciados PostGIS
Sobre o PostgreSQL
Limite Valor
Tamanho Máximo do Banco de Dados Ilimitado
7
Tipos de Dados do PostgreSQL
Inteiros
Esse tipo armazena números sem componentes fracionais. Números inteiros
possuem limites máximos e mínimos, e qualquer tentativa de se armazenar valores fora
dessa faixa irá gerar um erro. Existem os seguintes tipos inteiros:
Na maior parte dos casos, o tipo integer oferece a melhor relação performance
versus capacidade de armazenamento. O tipo bigint, por ser mais pesado e
conseqüentemente mais lento, deve ser usado somente quando a faixa de
armazenamento do integer realmente não for suficiente.
Os números de precisão fixa são criados com o tipo numeric. Seu uso é
recomendado para armazenar valores monetários e outras quantias nas quais a exatidão
é necessária.
8
Tipos de ponto flutuante
Os tipos de dado real e double precision são tipos numéricos não exatos de
precisão variável. Na prática, estes tipos são geralmente implementações do "Padrão
IEEE 754 para Aritmética Binária de Ponto Flutuante" (de precisão simples e dupla,
respectivamente), conforme suportado pelo processador, sistema operacional e
compilador utilizados.
Não exato significa que alguns valores não podem ser convertidos exatamente
para o formato interno, sendo armazenados como aproximações. Portanto, ao se
armazenar e posteriormente imprimir um valor podem ocorrer pequenas discrepâncias.
A gerência destes erros, e como se propagam através dos cálculos como, por exemplo:
Se for necessário armazenamento e cálculos exatos (como em quantias
monetárias), em vez de tipos de ponto flutuante deve ser utilizado o tipo numeric.
9
Uso
Exemplo Biblioteca:
Após instalar o PostgreSQL, clique em iniciar > todos os programas > PostgreSQL >
pgAdmin III
10
Antes de tudo, é necessário conectar-se com o servidor. Clique com o botão
direito no servidor desejado e clique em conectar, ou apenas clique duas vezes no
servidor.
11
Normalmente, o criador se torna o dono do novo banco de dados. Super usuários
podem criar bases de dados detidas por outros usuários, usando a cláusula OWNER.
Eles podem até mesmo criar bancos de dados pertencentes a usuários sem privilégios
especiais. Os usuários comuns com privilégio CREATEDB só podem criar bases de
dados detidas por si próprios.
Por padrão, o novo banco de dados será criado clonando o banco de dados
padrão do sistema template1. Um modelo diferente pode ser especificado por código,
nome do modelo. Em particular, escrevendo TEMPLATE template0, você pode criar
um banco de dados virgem contendo apenas os objetos padrão pré-definidos pela versão
do PostgreSQL. Isso é útil se você deseja evitar a cópia de qualquer objeto da instalação
local que possa ter sido adicionado ao template1.
12
Aparecerá a janela onde se definirá os parâmetros do banco de dados a ser
criado:
• Nome: é definido o nome do banco de dados;
• Dono: O nome do usuário do banco de dados que será o novo banco de dados,
se não for inserido um nome ficará como DEFAULT para utilizar o padrão;
• Connection Limit: Quantas conexões simultâneas podem ser feitas a este banco
de dados. -1 (O padrão) significa sem limite.
13
Após a criação, será possível visualizar o banco de dados que foi criado,
clicando no sinal de “+” em Banco de dados do lado esquerdo da tela, na guia
propriedades no lado direito da tela.
15
Demonstraremos primeiro a criação do banco de dados pela interface:
1. A esquerda da tela, clique no sinal de “+” do banco de dados criado;
2. Clique no sinal de “+” de esquemas;
3. Clique no sinal de “+” de public;
4. Clique com o botão direito em Tabelas e clique em Nova Tabela.
16
Demonstraremos algumas formas de se criar campos, restrições e índices.
A tabela Usuario terá os campos:
• CodUsuario;
• CodTipo;
• Nome;
• Endereco;
• Telefone
Criaremos agora a tabela Usuario:
Se uma tabela é criada com WITH OIDS, cada registro recebe um OID único.
OIDs são automaticamente atribuídos como inteiros de 4 bytes que são únicos ao longo
de toda instalação. Contudo, eles são limitados em 4 bilhões e, então, os OIDs começam
a ser duplicados. O PostgreSQL utiliza OIDs para ligar as tabelas do sistema.
Para numerar registros nas tabelas dos usuários, é melhor utilizar SERIAL ao
invés de OIDs porque seqüências SERIAIS são únicas somente em uma tabela; e são
menos propícias a atingir o limite. SERIAL8 está disponível para armazenar valores de
seqüência com oito bytes.
17
Clique na guia Colunas;
18
Vamos aos campos:
Não é NULL: marque esta opção sempre que o campo (coluna) a ser inserido
não possa ser nulo.
Neste caso, marcaremos essa opção, já que o campo a ser criado se tornará
chave-primária.
Adicione também as colunas nome e endereco, só que esses serão do tipo Text.
19
Agora adicionaremos o campo Telefone. Este campo terá o valor padrão de 11
caracteres. Clique em OK.
20
21
Agora Definiremos a Chave Primária:
22
Aparecerá a janela abaixo:
Clique na guia Colunas na caixa de texto. Na parte inferior da mesma janela terá
todas as colunas que criamos da tabela. Escolha a opção “CodUsuario” , em seguida
clique no botão Adicionar.
23
24
Note que a chave Primária que criamos já está listada.
Observe também que na caixa de texto abaixo não há mais a opção “Chave
Primária”.
Se já houvesse outras tabelas e já existisse o campo para referenciar a chave
estrangeira, poderíamos criar agora, mas como não há, clique em OK.
25
Clicando no sinal de “+” de Tabelas, estará visível a tabela que criamos.
Clicando no sinal de “+” da Tabela criada, estará visível o número de colunas,
restrições, índices, regras, e outros. Se você clicar no sinal de “+” de Colunas verá todas
as colunas criadas, do mesmo jeito no sinal de “+” de restrições verá a chave primária
que criamos, se você adicionar chaves estrangeiras, restrição de verificação ou de
unificação também as encontrará em restrições.
26
27
Criaremos a Tabela Acervo, ela conterá as colunas:
• CodItem
• DataInscricao
• Quantidade
• Paginas
• Observações
Digite o nome da nova tabela, que dessa vez será Acervo, e clique em OK.
28
Clique no sinal de “+” em Acervo clique com o botão direito em Colunas e
clique em Nova Coluna.
29
Repare que este é outro modo de se chegar à mesma janela de definição de
colunas que chegamos antes. CodItem será a chave primária desta tabela, foi criado
apenas para ser chave primária, já que nenhuma das colunas estava apta, por isso, será
definido o tipo de dado serial e não será nulo. Clique em OK.
30
A coluna “CodItem” já está adicionada na tabela Acervo.
Clique novamente em Colunas com o botão direito do mouse >Nova Coluna e
você verá a mesma janela.
A coluna DataInscricao será do tipo date, pois registrará a data de inscrição dos
livros e revistas da biblioteca e não poderá ser nulo.Clique em OK.
Crie a coluna Quantidade como tipo de dado Integer e sendo not null, a coluna
Paginas como Integer também, porém podendo ser nulo e crie também a coluna
Observacoes como tipo de dado Text podendo conter valores nulos.
31
Depois de criados, deverão estar aparecendo assim:
32
Vá para a guia Colunas escolha a coluna CodItem e clique em Adicionar.
33
Agora Clique na guia Propriedades, Digite o nome para a chave primária e
clique em OK.
34
Crie a tabela livro, ela terá as seguintes colunas:
35
Definiremos agora a chave primária que será CodItem e deixaremos o nome
como “PK_Livro”:
36
Na janela que aparece Coloque um nome para a chave estrangeira, nesse caso
colocaremos “fk_CodItem” onde FK vem de Foreign Key. Em referências escolha a
tabela a ser referenciada.
Clique na aba Colunas em Coluna Local escolha a coluna que será chave estrangeira.
Em Referenciado escolha a coluna da tabela referenciada que será a referencia de
chave estrangeira. Clique em Adicionar e em seguida em OK.
37
A chave estrangeira que criamos já aparece em Restrições
38
Defina o nome de índice a ser criado.
Nos campos:
Unicidade: Faz com que o sistema procure por valores duplicados na tabela
quando o índice é criado, se existirem dados na tabela, e sempre que novos dados forem
adicionados. A tentativa de inserir ou de atualizar dados, que produza um valor
duplicado, gera um erro.
39
NOTAS:
• Uma classe de operador pode ser especificada para cada coluna de um índice. A
classe de operador identifica os operadores a serem utilizados pelo índice desta
coluna. Por exemplo, um índice B-tree sobre inteiros de quatro bytes vai utilizar
a classe de operadores int4_ops; esta classe de operadores inclui funções de
comparação para inteiros de quatro bytes. Na prática, a classe de operadores
padrão para o tipo de dado do campo é normalmente suficiente. O ponto
principal em haver classes de operadores é que, para alguns tipos de dado, pode
haver mais de uma ordenação que faça sentido. Por exemplo, pode se desejar
ordenar o tipo de dado do número complexo tanto pelo valor absoluto, quanto
pela parte real, o que pode ser feito definindo-se duas classes de operadores para
o tipo de dado e, então, selecionando-se a classe apropriada para a construção do
índice. Também existem algumas classes de operadores com finalidades
especiais:
40
Clique na guia Colunas escolha a coluna que será o índice, neste caso, a coluna
Titulo clique em adicionar depois clique em OK.
Faça a mesma coisa com Autor e ISBN. Deverá ficar como na figura abaixo:
41
Criaremos agora uma restrição de unicidade para a tabela ISBN.
Clique com o botão direito do mouse em Restrições > Novo Objeto > Nova
Restrição de Unicidade.
42
Clique na guia Colunas escolha a coluna desejada, neste caso a coluna ISBN,
clique em Adicionar e clique em OK.
43
Demonstraremos agora a criação das outras 3 tabelas por código.
44
Quando aparecer a janela da Query, digite o código como na imagem abaixo:
Onde:
• CREATE TABLE: Cria Tabelas;
• Os nomes da tabelas e colunas sendo criadas e referencias são digitadas dentro de aspas (“”);
• Vírgula (,) indica que há mais comando (como se fosse um “e”);
• Ponto e vírgula (;) indica o final do comando;
• O sinal de parêntese [( ] abrindo é como se fosse o “inicio” e o sinal de parêntese fechando [)] é
como se fosse o “fim” do código de um comando;
45
Na figura abaixo estamos adicionando Campos indexados e restrição de
unicidade:
46
Criando a ultima tabela, Emprestimo, adicionando chave primária e índice:
47
Feche a janela da Query, aparecerá uma mensagem perguntando se você quer
salvar a consulta, no nosso caso não salvaremos.
E pronto! Note que as Tabelas que criamos estão listadas, está criado nosso
exemplo de Banco de Dados.
48
Referências
http://www.infowester.com/postgremysql.php
http://www.devmedia.com.br/articles/post-6390-Introducao-ao-PostgreSQL.html
http://wiki.PostgreSQL.org/wiki/Introdu%C3%A7%C3%A3o_e_Hist%C3%B3rico
http://www.youtube.com/watch?v=rPR0NCrO1R4&feature=related
http://www.htmlstaff.org/PostgreSQLmanual/sql-createindex.html
http://pgdocptbr.sourceforge.net/pg74/ddl-constraints.html
http://pt.wikibooks.org/wiki/PostgreSQL_Pr%C3%A1tico/DDL/Cria%C3%A7%C3%
A3o_e_Exclus%C3%A3o_de_Bancos,_Esquemas,_Tabelas,_Views,_Constraints,_e
tc
http://pt.wikipedia.org/wiki/UTF-8
http://pt.wikipedia.org/wiki/PostgreSQL
http://www.PostgreSQL.org.br
http://pgdocptbr.sourceforge.net/pg80/extend-type-system.html
http://www.htmlstaff.org/PostgreSQLmanual/sql-createindex.html
http://www.bau-de-dev.com/banco-de-dados/trabalhando-com-chaves-primarias-
primary-key-no-PostgreSQL
49
50