Professional Documents
Culture Documents
Introdução ao PostgreSQL
DIMAp/UFRN
Conteúdo
Introdução ao PostgreSQL
Conceitos Básicos
Acessando o Banco de Dados
Linguagem SQL
Definição de Dados
Manipulação de Dados
Consulta aos Dados
Funções e Operadores
Gatilhos e Procedimentos
Administração da Base de Dados
Conceitos Básicos
Desenvolvimento de Aplicativos
Objetivo da Disciplina
Oferecer aos alunos condições de trabalhar
com um Banco de Dados Relacional, deixando-os
aptos a:
Criar uma Base de Dados;
Manipular a Base de Dados;
Consultar a Base de Dados.
Oferecer subsídios ao desenvolvimento de um
aplicativo que acesse o banco de dados e
disponibilize todas as funcionalidades básicas
requeridas de um sistema de BD.
Introdução ao PostgreSQL
Embora o PostgreSQL seja um sistema
gerenciador de banco de dados objeto-
relacional, nesta disciplina iremos abordar
apenas os aspectos relacionais do mesmo.
O PosgreSQL é baseado no POSGRES que foi
pioneiro em muitos conceitos que se tornaram
disponíveis posteriormente em muitos
sistemas de bancos de dados comerciais.
O PosgreSQL é open-source e suporta tanto
o SQL92 como o SQL99, além de oferecer
muitas características modernas, tais como:
Introdução ao PostgreSQL
Características PostgreSQL: PostgreSQL pode ser
Consultas complexas estendido pelo usuário de
Chaves estrangeiras muitas maneiras, por
exemplo, pela adição de
Gatilhos
novos:
Visões
Tipos de dados
Integridade transacional
Funções
Controle de concorrência
Operadores
multiversão
Funções de Agregação
Métodos de Indexação
Linguagens Procedurais
Arquitetura PostgreSQL
O PostgreSQL usa um modelo cliente/servidor. Uma
sessão PostgreSQL consiste dos seguintes programas
que cooperam entre si:
Um processo servidor que gerencia os arquivos de bancos de
dados, aceita as conexões ao banco a partir das aplicações
clientes, e executa ações no banco de dados solicitadas pelos
clientes. O programa servidor de banco de dados é chamado
postmaster.
Cliente(front-end): São as aplicações que precisam acessar ao
banco:
Pode ser ferramentas gráficas, modo texto, via Web,
ferramentas de manutenção e gerenciamento de banco,
ferramentas de programação de triggers e procedures, ou
qualquer outra ferramenta que precise interagir com o
PostgreSQL.
A comunicação entre Cliente e Servidor é feita via TCP/IP.
Arquitetura PostgreSQL
O servidor PostgreSQL pode gerenciar
múltiplas conexões de clientes de modo
concorrente.
Para cada conexão, o servidor inicia um novo
processo servidor para a comunicação com o
cliente (“fork”).
A comunicação entre o servidor e o cliente é
feita sem intervenção do postmaster.
Quando o postmaster recebe um novo pedido de
conexão, ele cria um novo fork que fará a
comunicação entre o cliente e o servidor
PostgreSQL.
Primeiros Passos
Para acessar o PostgreSQL dentro do DIMAp
inicialmente precisa-se acessar a máquina louco
servidora do bd:
ssh nome_da_maquina ou ssh (ip da maquina)
Ou direto, através do psql:
psql meubanco –U nomeusuario –h
nome_da_maquina
Criando um Banco de Dados
Um servidor PostgreSQL pode gerenciar vários bancos.
Normalmente, um banco separado é usado para cada usuário ou
projeto. Para criar um novo banco de dados, que neste exemplo,
estamos chamando de meubanco utiliza-se o seguinte comando:
$ createdb meubanco
Que irá produzir a seguinte resposta:
CREATE DATABASE
Um nome de banco de dados deverá ter um primeiro caractere
alfabético e são limitados a 63 caracteres no máximo. Pode-se
também criar um banco de dados com o mesmo nome no usuário
corrente. Para isso basta digitar:
$ createdb
Para remover um banco de dados, se você for o dono do mesmo,
basta digitar:
$ dropdb meubanco
Acessando um Banco de Dados
$ psql meubanco
treino=#
Acessando o Banco de Dados
Verificando a versão do PostgreSQL:
$ SELECT version();
Help:
\h
Sair do psql:
\q
Comandos Básicos psql
Pode-se criar um arquivo texto com todas as
operações de criação de tabelas e de consultas,
e posteriormente executa-lo da seguinte forma:
\i caminho/nomedoarquivosql
Para ver a descrição da Tabela
\d nomedatabela
Para ver todas as tabelas criadas
\d
PostgreSQL
Linguagem SQL
Introdução
Definição de Dados
Linguagem de Definição de Dados
ON DELETE CASCADE
ON DELETE SET NULL
ON DELETE SET DEFAULT
Adicionar Colunas.
Remover Colunas.
Adicionar Restrições.
Remover Restrições.
Mudar Valor Default.
Renomear Colunas.
Renomear Tabelas.
Adicionando Uma Nova Coluna
Adiciona uma nova coluna em uma tabela existente.
ALTER TABLE pessoa ADD COLUMN email text;
Manipulação de Dados
Inserindo Dados
Forma básica:
UPDATE tabela SET coluna = novo_valor;
UPDATE automovel
SET valor = 10000
WHERE modelo = 'UNO' AND ano = 2001;
Modificando Dados
UPDATE automovel
SET valor = valor*1.1, proprietario = 'JORGE FILHO'
WHERE modelo = 'UNO' AND ano = 2001;
Modificando Dados
UPDATE automovel
SET valor = valor*1.1
WHERE proprietario IN (SELECT nome
FROM pessoa
WHERE cidade = ‘NATAL’);
PostgreSQL
SELECT
Consultando uma Tabela
matricula | media
-----------+------------------
200123810 | 6.79999987284342
200278231 | 3.70000012715658
200144609 | 6.73333358764648
(3 rows)
A Cláusula SELECT
EXEMPLO 2:
SELECT modelo, SUM(valor)
FROM automovel
GROUP BY modelo;
modelo | sum
--------+-------
UNO | 22000
CORSA | 12000
GOL | 23000
PALIO | 21000
(4 rows)
A Cláusula HAVING
SUBQUERIES:
Uma consulta dentro de outra consulta.
O resultado da subquery retorna uma tabela
virtual derivada que será usada pela consulta
principal.
Deve ser escrita entre parênteses.
Deve ser identificada por um alias.
Subqueries
SUBQUERIES - Exemplo:
Retorne todos os modelos de carro que
possuem mais de duas unidades no estoque.
SELECT a.modelo, quantidade
FROM automovel a INNER JOIN (SELECT modelo AS m,
count(*) AS quantidade
FROM automovel
GROUP BY modelo) AS contagem
ON a.modelo = m
WHERE quantidade > 2;
Joined Tables
Joined Tables
Uma joined table é uma tabela derivada de
duas outras (real ou derivada) tabelas.
Os tipos de junção disponíveis no PostgreSQL
são:
Inner Join;
Outer Join;
Cross Join.
Tabelas Exemplo
(SELECT cidade
FROM cidades);
Combinando Consultas
Funções e Operadores
Operadores Lógicos
Os operadores lógicos disponíveis no PostgreSQL são:
AND, OR e NOT.
Operadores de Comparação
Operadores de Comparação
BETWEEN:
a BETWEEN x AND y
Equivalente a: a >= x AND a <= y
NOT BETWEEN
a NOT BETWEEN x AND y
Equivalente a: a < x OR a > y
Operadores de Comparação
IS NULL: Retorna TRUE se o valor da coluna for
nulo.
SELECT nome
FROM pessoa
WHERE cpf IS NULL;
IS NOT NULL: Retorna TRUE se o valor da
coluna não for nulo.
SELECT COUNT(*)
FROM pessoa
WHERE cpf IS NOT NULL;
Operadores e Funções
Matemáticas
Operadores e Funções
Matemáticas
Operadores e Funções
Matemáticas
Operadores e Funções de String
Funções Para Formatação de Datas
Padrões de Template Para Formatação
de Data e Hora
Funções de Agregação
PostgreSQL
Índices
Índices
Usados para melhorar a performance de
consultas ao banco de dados.
Úteis em consultas que retornam linhas
especificas e utilizam na cláusula WHERE a
coluna ou colunas nas quais o índice foi
construído.
Ao se criar um índice, o servidor constrói uma
árvore de busca para a(s) coluna(s) indexada(s).
Inúteis no caso de FULL TABLE SCANS ou
colunas não indexadas na cláusula WHERE.
Índices
EXEMPLO:
SELECT nome FROM pessoa WHERE idpessoa = 3145;
Parâmetros:
1. Temporary: O objeto seqüência é criado
somente para a sessão e apagado no fim da
sessão.
2. Increment by i: Especifica o intervalo entre
números de seqüência onde i é um número
inteiro, o valor default é 1, caso o valor de i
seja negativo a seqüência será
decrementada.
Seqüências
Parâmetros:
3. Minvalue: Especifica o menor valor possível
na seqüência.
4. No Minvalue: Usa o valor default (1 ou-2^63
-1).
5. Maxvalue: Especifica o valor máximo que a
seqüência pode gerar.
6. No Maxvalue: Usa o valor default (2^63 -1
ou -1).
Seqüências
Parâmetros:
7. Start With: Especifica o primeiro número a
ser gerado pela seqüência.
8. Cache: Especifica quantos valores serão
gerados previamente e alocados na memória.
9. Cycle: Especifica o valor máximo que a
seqüência pode gerar (Default 1).
Seqüências
Parâmetros:
10. Cycle: Permite a seqüência continuar a gerar
valores depois de atingir o maxvalue
(ascendente) ou minvalue (descendente).
Caso o limite seja atingido, o próximo
número a ser gerado será o minvalue ou
maxvalue. Deve ser usado com cuidado para
gerar valores de chave primária. O valor
default é No Cycle.
Seqüências
Funções de Manipulação:
nextval: Avança e seqüência e retorna um novo
número.
nextval(‘sequencia’)
currval: Retorna o valor atual da seqüência.
currval(‘sequencia’)
setval: Seta um novo valor atual para a
seqüência.
setval(‘sequencia’,valor)
Seqüências
Para listar todas as seqüências do banco:
\ds
SELECT currval(‘seq_pessoa’);
Seqüência
Para remover uma sequencia:
DROP SEQUENCE sequence_name;
Para alterar uma seqüência: ALTER SEQUENCE.
PostgreSQL
Funções e Triggers
Funções
treino=# \i ‘helloworld.sql’
CREATE FUNCTION
treino=# select helloworld();
helloworld
-------------
Hello World
(1 row)
Funções PL/pgSQL - Estrutura
Declaração:
Todas as variáveis que serão usadas no bloco, devem ser
declaradas no sessão DECLARATION.
A única exceção são as variáveis definidas implicitamente num
loop FOR.
As variáveis podem assumir os mesmos tipos suportados na
linguagem SQL do PostgreSQL, como; integer, varchar,
numeric, float e date.
Funções PL/pgSQL - Estrutura
Declaração:
Quando se quer utilizar o mesmo tipo de uma coluna de uma
tabela, aconselha-se usar o %TYPE. Pois garante a consistência
caso o tipo da coluna venha a mudar.
Ao invés de
v_nome varchar(30);
É melhor usar
v_nome pessoa.nome%TYPE;
Funções PL/pgSQL - Estrutura
Declaração:
Uma variável composta pode ser declarada com todas as
colunas de uma tabela %ROWTYPE (semelhante a um registro).
DECLARE
r_pessoa pessoa%ROWTYPE;
BEGIN
r_pessoa.nome := 'CREMILDA';
Funções PL/pgSQL - Estrutura
Declaração:
Os parâmetros de entrada da função são acessados no corpo
como $1 (parametro1), $2 (parametro2). Pode-se usar
ALIASES para se tornar mais amigável.
CREATE FUNCTION teste(real) RETURNS real AS ‘
DECLARE
v_valor ALIAS FOR $1;
BEGIN
RETURN 10*v_valor;
END; ‘ LANGUAGE plpgsql;
Funções PL/pgSQL - Estrutura
Erros e Mensagens
A instrução RAISE reporta mensagens e erros.
Exemplos:
Revogando um privilégio:
REVOKE ALL ON pessoa FROM maria;
REVOKE INSERT ON pessoa FROM GROUP turma01;
Privilégios
WITH GRANT OPTION permite ao usuário que recebe o privilégio
concedê-lo a outros usuários:
GRANT REFERENCES
ON pessoa TO benedita WITH GRANT OPTION;
Transações em PostgreSQL
Transações
As transações são um conceito fundamental em sistemas
de bancos de dados. Uma transação envolve vários
passos em uma operação de tudo-ou-nada.
Os passos intermediários de uma transação não são
visíveis por outras transações, porque se alguma coisa
falhar, nenhum passo será efetivamente executado.
Transações
Considere um exemplo que se deseja fazer uma
transferência bancária da conta de Alice para a conta
de Bob.
UPDATE conta SET saldo=saldo-100.00
WHERE nome=´Alice´;
UPDATE conta SET saldo=saldo+100.00
WHERE nome=´Bob´;
Desta maneira, não existe nenhuma garantia que as duas operações
serão efetivamente executadas ou nenhuma delas. Isto só é obtido
agrupando-se as duas operações em uma transação.
Transações
Uma transação é atômica: ou ela acontece
completamente ou não acontece.
Quando uma operação é completada ela é efetivamente
percebida pelo sistema de bd e suas alterações são
verdadeiramente armazenadas no bd.
Transações concorrentes não enxergam resultados
parciais umas das outras.
Uma transação em PostgreSQL é denotada pelos
comandos BEGIN e COMMIT.
Transações
A transação bancária pode ser escrita como:
BEGIN;
UPDATE conta SET saldo=saldo-100.00
WHERE nome=´Alice´;
UPDATE conta SET saldo=saldo+100.00
WHERE nome=´Bob´;
COMMIT;
Pode-se desejar que a transação não seja efetivamente executada.
Neste caso, utiliza-se o comando ROLLBACK no lugar do COMMIT.
Manutenção de Rotina
Manutenção de Rotina
No PostgreSQL existem algumas rotinas de manutenção
que devem ser executadas rotineiramente, afim de
manter o servidor rodando eficientemente.
Essas tarefas podem ser agendadas para serem
executadas regulamente através de ferramentas do SO,
como o CRON, por exemplo.
Vacuuming
O comando VACUUM tem a função de:
1. Recuperar espaço em disco ocupador por linhas
apagadas ou atualizadas;
2. Atualizar as estatísticas usadas pelo PostgreSQL
query planner (gerador de planos de consultas do
PostgreSQL).
A freqüência do uso do comando VACUUM vai
depender da necessidade de cada base.
Reindexação