PostgreSQL
www.postgresql.org
Andr Luiz Fortunato da Silva
Analista de Sistemas
CIRP / USP
[email protected]Caractersticas
Licena BSD (aberto, permite uso comercial)
Multi-plataforma (Unix, GNU/Linux, Windows...)
Transaes e savepoints
Herana de tabelas
ndices
Tipo Serial (SEQUENCE simula auto-incremento)
Backup online e recovery
Tabelas temporrias
Controle de acesso (usurio, banco e host)
Caractersticas
Suporte a idiomas (no initdb)
Objetos grandes (imagens, vdeos, etc.)
Sub-consultas
Integridade referencial
Funes armazenadas
Gatilhos
Novos tipos de dados
Esquemas (encapsula objetos em namespaces)
Regras (rules, aes alternativas)
Caractersticas
Tablespaces (outro local no sistema de arq.)
Limpeza e otimizao de consultas (VACCUM)
Vises ( possvel simular vises atualizveis)
Recuperao a partir de logs de transao
(Point in Time Recovery)
DB Link (contrib, comunicao entre servidores)
Replicao (projetos Slony-I, pgPool e
pgCluster)
Limites ???
Tamanhos mximos:
banco de dados: ilimitado
tabela: 32 TB
Uma linha: 1,6 TB
Um campo: 1 GB
Quantidades mximas:
linhas por tabela: ilimitado
colunas por tabela: de 250 a 1600 (depende
do tipo)
ndices por tabela: ilimitado
Aprofundando
Apoio:
www.postgresql.org/docs
www.postgresql.org.br
pgfoundry.org
gborg.postgresql.org
Treinamento:
www.centercursos.com.br (Ribeiro Preto)
www.dbexperts.com.br (So Paulo)
Vamos praticar um
pouco ??? ...
Interface modo texto psql:
psql -l (mostra os bancos)
psql template1 (acessa o banco)
Dentro do psql:
\? (help dos comandos internos do psql)
\h (comandos SQL disponveis)
\h create database (sintaxe de um comando SQL)
Criando um banco de dados:
create database empresa
with encoding='LATIN1';
\l
\c empresa
Criando uma tabela:
create table funcs (
id serial primary key not null,
nome varchar(50) not null,
tipo varchar(20) not null default 'junior',
salario numeric(7,2) default 0
);
\dt
\d funcs
insert into funcs (tipo) values ('senior');
insert into funcs (nome) values ('Joo');
Criando uma tabela relacionada:
create table fones (
tipo char(3),
nro varchar(8) not null,
func integer references funcs (id)
on delete restrict on update cascade
);
\d fones
insert into funcs (nome) values ('Fulano');
insert into funcs (nome) values ('Beltrano');
insert into fones values ('res','12345',1);
delete from funcs where id=1;
delete from funcs where id=2;
Transao:
begin;
update funcs set nome='Juca' where id=1;
insert into funcs(nome) values ('Maria');
commit;
(Se algum erro ocorrer antes do commit, o
que foi feito a partir do begin desfeito)
Tabela temporria:
create temporary table funcs2 as
select nome, tipo from funcs;
\dt
select * from funcs2;
\q
psql empresa
\dt (tabela funcs2 no existe mais)
Vises:
create view vfunc as
select id,nome from funcs;
\dv
select * from vfunc;
update vfunc set nome='Rita' where id=3;
create rule atualiza as
on update to vfunc do instead
update funcs set nome=new.nome
where id=new.id;
update vfunc set nome='Rita' where id=3;
Funes armazenadas:
create language plpgsql;
create function resultado (integer) returns text as
'
begin
if ($1 > 7) then
return ''Aprovado'';
else
return ''Reprovado'';
end if;
end;
'
LANGUAGE plpgsql;
select resultado(8);
Gatilhos:
create function insfone() returns trigger as
'
begin
insert into fones values (''---'',''111'',new.id);
return new;
end;
'
language plpgsql;
create trigger tr_insfone
after insert on funcs
for each row execute procedure insfone();
Backup, faxina e anlise:
~postgres/.pgpass
*:*:*:postgres:senha123
(formato: hostname:port:database:username:password)
No cron:
pg_dumpall -U postgres > meubkp.sql
vacuumdb -a -f -z -U postgres
(para nico banco pg_dump...)
Restaurao:
psql template1 < meubkp.sql
Segurana (grant):
create group gerentes;
create group vendas;
create user fulano with password '123'
in group gerentes;
create user siclano with password '456'
in group vendas;
grant all on funcs to group gerentes;
grant select, insert on funcs to group vendas;
revoke all on funcs from group vendas;
\z (visualiza as permisses)
Segurana (acesso remoto):
/etc/postgresql/8.1/main/pg_hba.conf
# TYPE
local
trust
local
md5
host
md5
host
DATABASE USER CIDR-ADDRESS METHOD
all
postgres
all
all
all
all
empresa
127.0.0.1/32
+gr1 143.10.20.0/24 md5
PostgreSQL
www.postgresql.org
Obrigado !!!
Andr Luiz Fortunato da Silva
Analista de Sistemas
CIRP / USP
[email protected]