SlideShare a Scribd company logo
1 of 54
Introdução ao PostgreSQL: um pouco 
além dos comandos 
MARCOS THOMAZ DA SILVA
Breve Histórico 
Derivado do pacote POSTGRES escrito na 
Universidade da Califórnia em Berkeley; 
Implementação do POSTGRES começou em 1986; 
Em 1994 foi adicionado um interpretador SQL ao 
Postgres (Postgres95, antes usava PostQUEL); 
Deu origem ao Informix da IBM; 
Em 1996 recebeu o nome de PostgreSQL, 
ganhando diversos outros recursos.
No Brasil 
Caixa, BB e Serpro; 
Comunidade PGBR; 
Timbira e EnterpriseDB;
Recursos 
Sub-Consultas; 
Integridade Referencial; 
Linguagem Procedural para Functions e Procedures 
pl/pgsql, pl/python, pl/perl, pl/java, pl/pascal, pl/ruby, pl/C, 
pl/R 
Gatilhos (Triggers); 
Tipos Definidos Por Usuário; 
Esquemas (schemas); 
Áreas de Armazenamento (Tablespaces); 
Savepoints; 
Dados geoespaciais; 
Herança de tabelas;
Ambientes de Gerenciamento 
Modo texto: psql; 
Modo gráfico: 
pgAdmin III; 
EMS PostgreSQL Manager; 
Acqua Studio; 
Web: phpPgAdmin;
Criando o banco de dados 
CREATE DATABASE <Nome_Do_Banco> 
[ WITH 
[ OWNER = <Usuario_Criador_Banco> ] 
[TEMPLATE = <Template> ] 
[ TABLESPACE = <table_space> 
[ ENCODING = <Encoding> ] 
[ LC_COLLATE = <collate> ] 
[ LC_CTYPE = <collate> ] ]; 
Exemplo: 
CREATE DATABASE testeerin 
WITH OWNER=curso_erin 
TEMPLATE = template0 
TABLESPACE = pg_default 
ENCODING = 'UTF8' 
LC_COLLATE = 'Portuguese_Brazil.1252' 
LC_CTYPE = 'Portuguese_Brazil.1252';
Criação de Usuários (Role’s) 
Porque criar: 
Segurança (mesma regra do root); 
Separação de ambientes; 
Controle de acesso e execução; 
O DBA pode realmente gerenciar o banco.
Criação de Usuários (Role’s) 
Comando: 
CREATE ROLE <Seu_Usuario> LOGIN 
PASSWORD <Sua_Senha> 
[SUPERUSER] [INHERIT] 
[CREATEDB/NOCREATEDB] 
[CREATEROLE/NOCREATEROLE] 
[REPLICATION/NOREPLICATION]; 
Exemplo: 
CREATE ROLE cursopgerin LOGIN 
PASSWORD ‘cursopgerin’ 
SUPERUSER INHERIT CREATEDB CREATEROLE 
NOREPLICATION;
Exercício de Fixação 01 
Criar um banco de dados com o template0, 
encoding UTF8, collate (LC_CTYPE e 
LC_COLLATE) Portuguese_Brazil.1252, cujo nome 
seja erin_<seunome>. O usuário (role) criador do 
banco deve ter o seu nome (apenas o primeiro 
nome), deve ser superusuário, poder criar outros 
usuários, criar bancos, mas não deve poder realizar 
replicação. A senha fica a sua escolha.
Tipos de Dados 
char / varchar (character / character varying); 
text; 
integer, smallint, bigint (2, 4 e 8 bytes 
respectivamente); 
decimal, numeric, real e money; 
serial; 
date, time, timestamp (with/without timezone); 
boolean; 
bytea, lo; 
array; 
line, point, polygon; 
json, macaddr;
Tipo de dados – cada um na sua... 
Como armazenar... 
Datas de Nascimento? 
Nomes de pessoas? 
Textos variáveis (observações)? 
Horários? 
Valores monetários? 
Número de CPF? 
Números de Telefone?
Criação de Tabelas 
O que são? Excel???? 
Comando básico... 
CREATE TABLE <tabela> ( 
<campo01> <tipo> [<requerido>] [DEFAULT <def>], 
<campo02> <tipo> [<requerido>] [DEFAULT <def>], 
[CONSTRAINT <nome_constraint> <tipo_constraint> ( 
<campo_constraint> )] 
); 
Exemplo: 
CREATE TABLE categorias( 
id serial NOT NULL, 
descricao character varying(80), 
CONSTRAINT categorias_pk PRIMARY KEY (id) ) 
WITH (OIDS=TRUE);
Exercício de Fixação 02 
No banco criado no exercício 01, crie uma tabela 
chamada contatos com os seguintes campos: 
CAMPO TIPO 
NOME CHARACTER VARYING(80) 
CIDADE CHARACTER VARYING(80) 
TELEFONE CHARACTER VARYING(20) 
VL_ULT_COMPRA NUMERIC(10,2) 
VL_DEBITO MONEY
Inserindo informações nas tabelas 
A instrução utilizada para inserir informações é INSERT 
Permite adicionar (quase) qualquer tipo de dado dentro 
de uma tabela; 
Comando: 
INSERT INTO <Tabela> [ (Campo1, Campo2[, Campo3] ) 
VALUES (<Valor1>,<Valor2>[,<Valor3>]) [ RETURNING 
<campo> ]; 
Exemplo 
INSERT INTO categorias (descricao) VALUES (‘Cerâmicas’); 
Ou 
INSERT INTO categorias (descricao) VALUES 
(‘Cerâmicas’),(‘Roupas’),(‘Frios’),(‘Ferramentas’)
Exercício de Fixação 03 
Usando como base o exercício anterior, insira os 
seguintes registros na tabela criada: 
NOME CIDADE VL_ULT_COMPRA VL_DEBITO 
FULANO RIO BRANCO 100 100 
CICLANO RBCO 80 80 
BELTRANO RIO BRANCO-AC 120.50 20.50 
NOCEGO RIO BRANCO-AC 30 60 
NOCEGO RIO BRANCO-AC 120 120 
Além destes registros, insira mais 5 registros nessa 
tabela, com o VL_DEBITO igual a 0.
Removendo Registros das Tabelas 
Comando DELETE é utilizado; 
Comando: 
DELETE FROM <Tabela> [ WHERE <Condicao>] 
Exemplo 
DELETE FROM categorias; 
DELETE FROM contatos WHERE VL_DEBITO < 10; 
DELETE FROM clientes WHERE nome like 
‘FULANO*’
Exercício de Fixação 04 
Usando como base a tabela utilizada no 
EXERCÍCIO 03, Resolva a seguinte situação: 
O dono da loja quer fazer uma limpeza em seu banco de 
dados e quer remover todos os registros de contatos que 
não possuam débitos. 
Que comando deve ser executado??? 
delete from Contatos where vl_debito=‘0’ 
delete from Contatos where vl_debito=0::money
Constraints / Restrições 
PRIMARY KEY – Chave primária; 
UNIQUE KEY – Chave Única; 
FOREIGN KEY – Chave Estrangeira; 
CHECK – Validação; 
QUAIS AS DIFERENÇAS ENTRE CHAVE PRIMÁRIA E CHAVE 
ÚNICA?
Alterando Estrutura de Uma Tabela 
Mudanças Gerais na Tabela: 
Necessidade de Acréscimo de Campos; 
Necessidade de Retirada de Campos; 
Mudança de Tipos de Campos; 
Acréscimo de Constraints (Primary Key, Foreign 
Key, Unique Key, Check);
Alterando Estrutura de Uma tabela 
Exemplos: 
ALTER TABLE ct DROP COLUMN tipo; 
ALTER TABLE ct ADD COLUMN testes 
character(1); 
ALTER TABLE ct ADD CONSTRAINT ct_chk2 
CHECK (testes = 'S' or testes='N'); 
ALTER TABLE ct ALTER COLUMN valor TYPE 
money; 
ALTER TABLE ct RENAME vlr TO valor;
Estrutura de Tabela – Testando... 
A estrutura apresentada no Exercício 02 atende aos 
dados que persistem nela?? 
Selecione todos os registros que correspondam a Rio 
Branco? 
Existem usuários duplicados na tabela? 
Os valores do campo cidade estão corretos? São 
confiáveis? 
Na tabela existem 2 contatos chamados NOCEGO, 
como ficaria para excluir apenas um deles? 
Execute os seguintes comandos na tabela e veja o que 
ocorre: 
insert into contatos (nome, VL_DEBITO) values (‘Teste 
01’,’1.250,25’);
Exercício de Fixação 05 
Modifique a tabela usada no exercício anterior, 
realizando as seguintes operações: 
Adicionando uma coluna para armazenar o estado (UF); 
Adicionar um campo para armazenar a data de 
nascimento; 
Adicionar um campo do tipo SERIAL com o nome ID e 
torná-lo chave primária; 
Colocar o campo nome como Chave Única (realizando os 
ajustes necessários); 
Modifique o campo VL_ULT_COMPRA para o tipo 
MONEY;
Alterando Registros de Uma Tabela 
Comando: 
UPDATE <Tabela> SET 
<campo1>=<valor_campo_1> [WHERE <condicao>] 
Exemplos: 
UPDATE categorias SET observacao=NULL; 
UPDATE contatos SET VL_DEBITO=0 WHERE 
VL_DEBITO < 10; 
UPDATE clientes SET nome=‘FULANO DE TAL’ 
WHERE nome like ‘FULANO*’; 
UPDATE clientes SET 
VL_DEBITO=VL_DEBITO*1.1 WHERE VL_DEBITO > 
100 AND VL_ULT_COMPRA > 80;
Exercício de Fixação 06 
Com base na tabela existente, altere os registros 
existentes, informando as datas de nascimento dos 
contatos; 
Adicione um juros de 20% para todos os contatos com 
VL_DEBITO maior ou igual a 100; 
Adicione um juros de 10% para todos os contatos com 
VL_DEBITO entre 60 e 100; 
Adicione um juros de 5% para todos com valores 
menores que 60; 
Crie uma tabela chamada cidades com os campos id 
(serial), nome (character varying(80) ) e uf (character(2) 
), adicione as cidades usadas na tabela contatos. Em 
seguida, insira na tabela contatos um campo chamado 
cidade_id. Altere-o para o valor das cidades 
correspondentes. Remova o campo cidade da tabela 
contatos e então defina o campo cidade_id como chave 
estrangeira apontando para a tabela cidades.
Buscando Registros – Parte 01 
Comando: 
SELECT <lista_de_valores> FROM <tabelas> 
[WHERE <condicoes>] 
ONDE: 
<lista_de_valores> - Campos, Expressões ou * 
<tabelas> - Uma ou mais tabelas (separadas por 
vírgula) que terão seus valores representados na 
listagem 
<condicoes> - Restrições de filtragem dos registros. 
Se omitido, exibe todos os registros.
Exemplos Simples 
SELECT * FROM categorias; 
SELECT ID, NOME FROM CIDADES 
SELECT * FROM CIDADES WHERE UF = ‘AC’ 
SELECT nome, vl_debito, 
(vl_debito*1.10) as vl_deb_com_juros 
FROM contatos; 
SELECT upper(a.nome) as contato, 
b.nome||’-’||b.uf as cidade FROM 
contatos a, cidades b WHERE 
a.cidade_id=b.id AND b.uf = ‘AC’;
SELECT.... JOIN... 
O que são os JOIN’s ??? 
Tipos: 
INNER JOIN; 
LEFT / RIGHT 
FULL JOIN;
SELECT ... JOIN .... - EXEMPLOS 
SELECT upper(contatos.nome) as contato, 
cidades.nome||’-’||cidades.uf as cidade 
FROM contatos INNER JOIN cidades ON 
cidade_id=id WHERE b.uf = ‘AC’; 
SELECT * FROM CLIENTES C LEFT OUTER 
JOIN COMPRAS C2 ON C2.ID_CLIENTE = C.ID
SELECT...GROUP BY 
Realiza agrupamento de valores; 
Utiliza funções de agregação: SUM, MAX, MIN, 
COUNT, AVERAGE (AVG); 
As “dimesões” que aparecem na lista do select, 
devem ser adicionadas ao GROUP BY 
Agrupamento aceita funções condicionais (CASE);
SELECT ... GROUP BY - EXEMPLOS 
SELECT COUNT(*) FROM contatos; 
SELECT a.nome as cidade, COUNT(*) FROM cidades 
a, contatos b WHERE A.id=b.cidade_id; 
SELECT a.nome as cidade, COUNT(*) FROM cidades 
a INNER JOIN contatos b WHERE a.id = 
b.cidade_id; 
SELECT a.nome as cidade, COUNT(*) FROM cidades 
a LEFT JOIN contatos b WHERE a.id = 
b.cidade_id; 
SELECT a.nome as cidade, COUNT(*) FROM cidades 
a RIGHT JOIN contatos b WHERE a.id = 
b.cidade_id; 
SELECT a.nome, (select count(*) from contatos 
b WHERE a.id=b.cidade_id) FROM cidades a
SELECT.... E MAIS ALGUNS EXEMPLOS 
Listar a quantidade de pessoas de uma determinada 
cidade, separando por sexo: 
select a.nome, SUM( case b.sexo WHEN ‘M’ then 1 
else 0 end) as M, SUM( case b.sexo WHEN ‘F’ then 1 
else 0 end) as F FROM cidades a LEFT JOIN clientes 
b ON b.cidade_id = a.cidade_id WHERE a.id=1 
Listar os clientes e seu débito total, cujo débito total 
é maior que R$ 1.000,00: 
Select c.nome, sum(vl_debito) from clientes c 
group by c.nome having sum(vl_debito) > 1000
Mais do mesmo??? 
Onde estão Schema’s, Triggers, Procedures, 
Functions, Índices e TableSpaces??? 
Pra que serve cada um???
Cenário 01 
A Universidade Federal do Acre possui um ERP que 
dentre seus módulos podemos destacar: acadêmico, 
financeiro, orçamentário, compras, frotas, RH, 
licitação, almoxarifado, espaço físico e contratos. O 
banco de dados possui cerca de 800 tabelas. 
Como organizar essas tabelas para facilitar a 
manutenção? 
Como não se perder, nem inverter o nome de 
tabelas com um ambiente tão complexo? 
A tabela “estrutura” se refere a parte organizacional 
ou física??? 
SCHEMAS
Schemas 
Os schemas são estruturas lógicas, usadas para 
separar o conteúdo de bancos de dados; 
Podem estar contidos dentro de schemas tables, 
views, procedures, etc; 
Se a tabela está em um schema, esse deve estar no 
path do usuário que acessa o banco de dados. 
Comando: 
Create schema Financeiro; 
Create schema Academico;
Schema’s – select entre schema’s 
Public – Visível automaticamente para todos ; 
<User> - Visível apenas ao usuário (de forma 
explícita); 
Exemplo, se tivermos os schemas academico e rh, 
criação de tabelas: 
Create table academico.pessoas (...); 
Create table rh.pessoas (...); 
Exemplo de select: 
select * from academico.pessoas p1, 
rh.pessoas p2 where p1.id=p2.id
Schema’s 
Perguntas: 
E se eu quiser dar um select sem especificar o schema? 
set search_path=“$user”, public, rh, academico; 
Se eu estiver usando um schema, posso ter chaves 
estrangeiras apontando para uma tabela de outro 
schema? 
Posso ter tabelas com o mesmo nome e estrutura? 
E nesse caso, se eu tenho duas tabelas iguais, adicionei 
ambos os schema’s no search_path, e digitar select * 
from tabela, como saber de qual schema são os dados?
Preparando para as regras de negócio... 
TABELA: categorias 
CAMPO TIPO PK UK FK REF 
ID SERIAL X 
DESCRICAO VARCHAR(80) 
TABELA: clientes 
CAMPO TIPO PK UK FK REF 
ID SERIAL X 
NOME VARCHAR(80) X 
DTN DATE 
ATIVO BOOLEAN 
SEXO CHAR(1)
Preparando para as regras de negócio... 
TABELA: produtos 
CAMPO TIPO PK UK FK REF 
ID SERIAL X 
NOME VARCHAR(80) X 
VL_COMPRA MONEY 
LUCRO NUMERIC(7,3) 
VL_VENDA MONEY 
EST_MINIMO INTEGER 
CATEGORIA_ID INTEGER X CATEGORIAS
Preparando para as regras de negócio... 
TABELA: pedidos 
CAMPO TIPO PK UK FK REF 
ID SERIAL X 
CLIENTE_ID INTEGER X CLIENTES 
VL_COMPRA MONEY 
FPGTO CHAR(1) 
DESCONTO MONEY 
VL_TOTAL MONEY 
FECHADO BOOLEAN
TABELA: pedidos_itens 
CAMPO TIPO PK UK FK REF 
ID SERIAL X 
PEDIDO_ID INTEGER X PEDIDOS 
PRODUTO_ID INTEGER X PRODUTOS 
QTD INTEGER 
VL_UN MONEY
REGRAS ---- 
Tabela categorias 
Não pode ter categorias com descrições iguais; 
Tabela clientes: 
Não podem haver clientes com o mesmo nome, nascidos 
no mesmo dia; 
A data de nascimento não pode ser nem maior nem igual 
a data atual; 
Se um cliente estiver inativo, ele não pode sofrer 
alterações; 
Sexo obrigatoriamente deve ser: M, m, F ou f
REGRAS ---- 
Tabela produtos: 
Não podem haver produtos com o nome repetido; 
Valor da compra deve ser menor ou igual ao valor da 
venda; 
Lucro deve ser maior ou igual a zero; 
Estoque mínimo deve ser maior ou igual a zero; 
Deve ser uma categoria válida; 
Se o valor de venda não for informado, deve ser pego o 
valor de compra e calculado o juros.
REGRAS ----- 
Tabela pedidos: 
Fpagto só pode ser V (a vista) ou P (a prazo); 
Se o pedido estiver fechado é porque foi quitado pelo 
cliente e não pode sofrer alterações; 
Valor total deve ser calculado pegando o valor da 
compra, menos o desconto. 
O desconto deve ser maior ou igual a zero; 
O valor da compra deve ser pego automaticamente, 
conforme são adicionados os itens. 
Tabela pedidos_itens: 
Quantidade deve ser maior que zero; 
Valor Unit. Deve ser pego automaticamente da tabela de 
produtos.
E AGORA??! 
Regras de negócio no banco? Simples... Triggers e 
procedures!
TRIGGER 
São automatizações do banco de dados; 
São disparados a partir de eventos como insert, 
update e delete; 
Permitem a execução de diversas outras operações;
PROCEDURES / FUNCTIONS 
São funções executadas dentro do banco de dados; 
Pode ser desenvolvidas em diversas linguagens 
Por padrão, utilizasse PL/pgsql; 
Linguagem simples com selects dentro dos 
comandos; 
Permite retornos simples ou listas; 
No postgreSQL todos as triggers executam uma 
função especial (trigger functions).
Modelo de Triggers no PostgreSQL 
Tabela 
Comando 
INSERT 
Dispara a 
Trigger OnInsert 
Executa a Trigger 
Function
Functions / Procedures 
Comando: 
CREATE OR REPLACE FUNCTION <SuaFuncao>( 
<parametros> ) RETURNS <retorno> AS 
$BODY$ 
<declaração_de_variáveis>; 
BEGIN 
<codigo> 
END; 
$BODY$ LANGUAGE plpgsql;
Trigger Functions 
Comando: 
CREATE OR REPLACE FUNCTION 
<SuaFuncao>() RETURNS trigger AS 
$BODY$ 
<declaração_de_variáveis>; 
BEGIN 
<codigo> 
RETURN <new_ou_old>; 
END; 
$BODY$ LANGUAGE plpgsql;
Trigger 
CREATE TRIGGER <nome_trigger> 
{AFTER|BEFORE} {INSERT|UPDATE|DELETE} 
ON <suaTabela> FOR EACH 
{ROW|STATEMENT} 
EXECUTE PROCEDURE 
<nome_da_trigger_function>();
Exemplo 
Create table fornecedores( 
id serial not null, 
nome varchar(80), 
saldo money, 
CONSTRAINT pk_forne PRIMARY KEY (id) 
); 
Create table venda( 
id serial not null, 
fornecedor_id integer, 
data date, 
valor money, 
CONSTRAINT pk_venda PRIMARY KEY (id), 
CONSTRAINT fk_venda FOREIGN KEY (fornecedor_id) 
REFERENCES fornecedores (id) ON UPDATE NO ACTION ON 
DELETE CASCADE 
);
Exemplo Continuação 
Create or replace function ajusta_saldo() 
returns trigger AS 
$BODY$ 
BEGIN 
update fornecedor 
set saldo = coalesce(saldo,0)+NEW.valor 
where id = NEW.fornecedor_id; 
RETURN NEW; 
END 
$BODY$ 
AS LANGUAGE plpgsql;
Exemplo – Continuação 
CREATE TRIGGER tr_ajusta_saldo AFTER 
INSERT ON venda FOR EACH ROW EXECUTE 
PROCEDURE ajusta_saldo();
PENSANDO EM DESEMPENHO... 
Criação de tablespaces 
O que são? 
Como criá-las? 
Quais as vantagens? 
Como usá-las? 
Índices: 
Explain; 
Tipos de índice; 
Views: 
Melhorando modelos 
Rules; 
Desempenho ainda incomoda: Particionamento de 
tabelas;

More Related Content

What's hot

LGPD Lei Geral de Proteção de Dados Pessoais
LGPD Lei Geral de Proteção de Dados PessoaisLGPD Lei Geral de Proteção de Dados Pessoais
LGPD Lei Geral de Proteção de Dados PessoaisDouglas Siviotti
 
Banco de Dados - Transações e Controle de Concorrência
Banco de Dados - Transações e Controle de ConcorrênciaBanco de Dados - Transações e Controle de Concorrência
Banco de Dados - Transações e Controle de ConcorrênciaJuliano Padilha
 
Java orientação a objetos (associacao, composicao, agregacao)
Java   orientação a objetos (associacao, composicao, agregacao)Java   orientação a objetos (associacao, composicao, agregacao)
Java orientação a objetos (associacao, composicao, agregacao)Armando Daniel
 
Aula 12 - Diagrama de Atividades.pdf
Aula 12 - Diagrama de Atividades.pdfAula 12 - Diagrama de Atividades.pdf
Aula 12 - Diagrama de Atividades.pdfIvanFontainha
 
Cartilha lgpd anahp
Cartilha lgpd   anahpCartilha lgpd   anahp
Cartilha lgpd anahpJarbasSouza7
 
01 Introdução à programação web
01 Introdução à programação web01 Introdução à programação web
01 Introdução à programação webCentro Paula Souza
 
Aula 1 - 31 Jan 23.pdf
Aula 1 - 31 Jan 23.pdfAula 1 - 31 Jan 23.pdf
Aula 1 - 31 Jan 23.pdfedilson42986
 
Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)
Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)
Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)Leinylson Fontinele
 
Material Modelagem - Prof. Marcos Alexandruk
Material Modelagem - Prof. Marcos AlexandrukMaterial Modelagem - Prof. Marcos Alexandruk
Material Modelagem - Prof. Marcos AlexandrukHebert Alquimim
 
Resumo INSS Informática
Resumo INSS InformáticaResumo INSS Informática
Resumo INSS InformáticaVictor Dalton
 
Direito 1º Período - Marcos Rodrigues Saúde - Informática Aplicada ao Direito...
Direito 1º Período - Marcos Rodrigues Saúde - Informática Aplicada ao Direito...Direito 1º Período - Marcos Rodrigues Saúde - Informática Aplicada ao Direito...
Direito 1º Período - Marcos Rodrigues Saúde - Informática Aplicada ao Direito...Jordano Santos Cerqueira
 
Algoritmos visualg
Algoritmos visualgAlgoritmos visualg
Algoritmos visualgDiego Sales
 
Rafael lima dns04_s1_exercicio5
Rafael lima dns04_s1_exercicio5Rafael lima dns04_s1_exercicio5
Rafael lima dns04_s1_exercicio5Rafael Lima
 

What's hot (20)

Sistema acadêmico
Sistema acadêmicoSistema acadêmico
Sistema acadêmico
 
Aula 6
Aula 6Aula 6
Aula 6
 
PostgreSQL
PostgreSQLPostgreSQL
PostgreSQL
 
LGPD Lei Geral de Proteção de Dados Pessoais
LGPD Lei Geral de Proteção de Dados PessoaisLGPD Lei Geral de Proteção de Dados Pessoais
LGPD Lei Geral de Proteção de Dados Pessoais
 
Banco de Dados - Transações e Controle de Concorrência
Banco de Dados - Transações e Controle de ConcorrênciaBanco de Dados - Transações e Controle de Concorrência
Banco de Dados - Transações e Controle de Concorrência
 
Java orientação a objetos (associacao, composicao, agregacao)
Java   orientação a objetos (associacao, composicao, agregacao)Java   orientação a objetos (associacao, composicao, agregacao)
Java orientação a objetos (associacao, composicao, agregacao)
 
Aula 12 - Diagrama de Atividades.pdf
Aula 12 - Diagrama de Atividades.pdfAula 12 - Diagrama de Atividades.pdf
Aula 12 - Diagrama de Atividades.pdf
 
Curso completo do sus 10
Curso completo do sus 10Curso completo do sus 10
Curso completo do sus 10
 
Cartilha lgpd anahp
Cartilha lgpd   anahpCartilha lgpd   anahp
Cartilha lgpd anahp
 
01 Introdução à programação web
01 Introdução à programação web01 Introdução à programação web
01 Introdução à programação web
 
Aula 1 - 31 Jan 23.pdf
Aula 1 - 31 Jan 23.pdfAula 1 - 31 Jan 23.pdf
Aula 1 - 31 Jan 23.pdf
 
Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)
Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)
Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)
 
Aula 4 banco de dados
Aula 4   banco de dados Aula 4   banco de dados
Aula 4 banco de dados
 
Aula 20
Aula 20Aula 20
Aula 20
 
Material Modelagem - Prof. Marcos Alexandruk
Material Modelagem - Prof. Marcos AlexandrukMaterial Modelagem - Prof. Marcos Alexandruk
Material Modelagem - Prof. Marcos Alexandruk
 
Estrutura de dados
Estrutura de dadosEstrutura de dados
Estrutura de dados
 
Resumo INSS Informática
Resumo INSS InformáticaResumo INSS Informática
Resumo INSS Informática
 
Direito 1º Período - Marcos Rodrigues Saúde - Informática Aplicada ao Direito...
Direito 1º Período - Marcos Rodrigues Saúde - Informática Aplicada ao Direito...Direito 1º Período - Marcos Rodrigues Saúde - Informática Aplicada ao Direito...
Direito 1º Período - Marcos Rodrigues Saúde - Informática Aplicada ao Direito...
 
Algoritmos visualg
Algoritmos visualgAlgoritmos visualg
Algoritmos visualg
 
Rafael lima dns04_s1_exercicio5
Rafael lima dns04_s1_exercicio5Rafael lima dns04_s1_exercicio5
Rafael lima dns04_s1_exercicio5
 

Viewers also liked

Full Text Search - Busca Textual no PostgreSQL
Full Text Search -  Busca Textual no PostgreSQLFull Text Search -  Busca Textual no PostgreSQL
Full Text Search - Busca Textual no PostgreSQLJuliano Atanazio
 
Criação de log de ações através do banco - PostgreSQL
Criação de log de ações através do banco - PostgreSQLCriação de log de ações através do banco - PostgreSQL
Criação de log de ações através do banco - PostgreSQLMarcos Thomaz
 
PostgreSQL: O melhor banco de dados Universo
PostgreSQL: O melhor banco de dados UniversoPostgreSQL: O melhor banco de dados Universo
PostgreSQL: O melhor banco de dados Universoelliando dias
 
Manual PLSQL
Manual PLSQLManual PLSQL
Manual PLSQLUMSA
 
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0Marcos William Valentini
 
PGDay Campinas 2013 - Implementando o PostgreSQL de maneira escalável e com a...
PGDay Campinas 2013 - Implementando o PostgreSQL de maneira escalável e com a...PGDay Campinas 2013 - Implementando o PostgreSQL de maneira escalável e com a...
PGDay Campinas 2013 - Implementando o PostgreSQL de maneira escalável e com a...PGDay Campinas
 
PGDay Campinas 2013 - Postgres XC @ Cloud
PGDay Campinas 2013 - Postgres XC @ CloudPGDay Campinas 2013 - Postgres XC @ Cloud
PGDay Campinas 2013 - Postgres XC @ CloudPGDay Campinas
 
PGDay Campinas 2013 - CASE: PostgreSQL no Tribunal de Justiça do Paraná
PGDay Campinas 2013 - CASE: PostgreSQL no Tribunal de Justiça do ParanáPGDay Campinas 2013 - CASE: PostgreSQL no Tribunal de Justiça do Paraná
PGDay Campinas 2013 - CASE: PostgreSQL no Tribunal de Justiça do ParanáPGDay Campinas
 
Maximizing EC2 and Elastic Block Store Disk Performance (STG302) | AWS re:Inv...
Maximizing EC2 and Elastic Block Store Disk Performance (STG302) | AWS re:Inv...Maximizing EC2 and Elastic Block Store Disk Performance (STG302) | AWS re:Inv...
Maximizing EC2 and Elastic Block Store Disk Performance (STG302) | AWS re:Inv...Amazon Web Services
 
Apostila de Banco dados
Apostila de Banco dadosApostila de Banco dados
Apostila de Banco dadosFernando Palma
 
(SDD416) Amazon EBS Deep Dive | AWS re:Invent 2014
(SDD416) Amazon EBS Deep Dive | AWS re:Invent 2014(SDD416) Amazon EBS Deep Dive | AWS re:Invent 2014
(SDD416) Amazon EBS Deep Dive | AWS re:Invent 2014Amazon Web Services
 
Introdução ao Word
Introdução ao WordIntrodução ao Word
Introdução ao WordArtur Coelho
 
Informática Básica parte 2 - Conhecendo o Word 2010 - Inclusão Digital - In...
Informática Básica parte 2 -  Conhecendo o Word 2010 - Inclusão Digital -  In...Informática Básica parte 2 -  Conhecendo o Word 2010 - Inclusão Digital -  In...
Informática Básica parte 2 - Conhecendo o Word 2010 - Inclusão Digital - In...Maurício V.Pires
 
Aula 1 word
Aula 1 wordAula 1 word
Aula 1 wordWELDES
 
MANUAL COMPLETO DE SQL
MANUAL COMPLETO DE SQLMANUAL COMPLETO DE SQL
MANUAL COMPLETO DE SQLEdgar Sandoval
 

Viewers also liked (18)

Full Text Search - Busca Textual no PostgreSQL
Full Text Search -  Busca Textual no PostgreSQLFull Text Search -  Busca Textual no PostgreSQL
Full Text Search - Busca Textual no PostgreSQL
 
Criação de log de ações através do banco - PostgreSQL
Criação de log de ações através do banco - PostgreSQLCriação de log de ações através do banco - PostgreSQL
Criação de log de ações através do banco - PostgreSQL
 
Exercícios PL/SQL
Exercícios PL/SQLExercícios PL/SQL
Exercícios PL/SQL
 
Arquivos No Banco
Arquivos No BancoArquivos No Banco
Arquivos No Banco
 
PostgreSQL: O melhor banco de dados Universo
PostgreSQL: O melhor banco de dados UniversoPostgreSQL: O melhor banco de dados Universo
PostgreSQL: O melhor banco de dados Universo
 
Manual PLSQL
Manual PLSQLManual PLSQL
Manual PLSQL
 
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0
 
PGDay Campinas 2013 - Implementando o PostgreSQL de maneira escalável e com a...
PGDay Campinas 2013 - Implementando o PostgreSQL de maneira escalável e com a...PGDay Campinas 2013 - Implementando o PostgreSQL de maneira escalável e com a...
PGDay Campinas 2013 - Implementando o PostgreSQL de maneira escalável e com a...
 
PGDay Campinas 2013 - Postgres XC @ Cloud
PGDay Campinas 2013 - Postgres XC @ CloudPGDay Campinas 2013 - Postgres XC @ Cloud
PGDay Campinas 2013 - Postgres XC @ Cloud
 
PGDay Campinas 2013 - CASE: PostgreSQL no Tribunal de Justiça do Paraná
PGDay Campinas 2013 - CASE: PostgreSQL no Tribunal de Justiça do ParanáPGDay Campinas 2013 - CASE: PostgreSQL no Tribunal de Justiça do Paraná
PGDay Campinas 2013 - CASE: PostgreSQL no Tribunal de Justiça do Paraná
 
Maximizing EC2 and Elastic Block Store Disk Performance (STG302) | AWS re:Inv...
Maximizing EC2 and Elastic Block Store Disk Performance (STG302) | AWS re:Inv...Maximizing EC2 and Elastic Block Store Disk Performance (STG302) | AWS re:Inv...
Maximizing EC2 and Elastic Block Store Disk Performance (STG302) | AWS re:Inv...
 
Apostila de Banco dados
Apostila de Banco dadosApostila de Banco dados
Apostila de Banco dados
 
(SDD416) Amazon EBS Deep Dive | AWS re:Invent 2014
(SDD416) Amazon EBS Deep Dive | AWS re:Invent 2014(SDD416) Amazon EBS Deep Dive | AWS re:Invent 2014
(SDD416) Amazon EBS Deep Dive | AWS re:Invent 2014
 
Introdução ao Word
Introdução ao WordIntrodução ao Word
Introdução ao Word
 
Informática Básica parte 2 - Conhecendo o Word 2010 - Inclusão Digital - In...
Informática Básica parte 2 -  Conhecendo o Word 2010 - Inclusão Digital -  In...Informática Básica parte 2 -  Conhecendo o Word 2010 - Inclusão Digital -  In...
Informática Básica parte 2 - Conhecendo o Word 2010 - Inclusão Digital - In...
 
Manual Word 2010
Manual Word 2010Manual Word 2010
Manual Word 2010
 
Aula 1 word
Aula 1 wordAula 1 word
Aula 1 word
 
MANUAL COMPLETO DE SQL
MANUAL COMPLETO DE SQLMANUAL COMPLETO DE SQL
MANUAL COMPLETO DE SQL
 

Similar to Curso de PostgreSQL: Um pouco Além dos Comandos

Aplicativos II - MySQL_part1
Aplicativos II - MySQL_part1Aplicativos II - MySQL_part1
Aplicativos II - MySQL_part1fabriciodenis
 
Fundamentos de SQL - Parte 3 de 8
Fundamentos de SQL - Parte 3 de 8Fundamentos de SQL - Parte 3 de 8
Fundamentos de SQL - Parte 3 de 8Emiliano Barbosa
 
Revisao_SQL_Parte_I.ppt
Revisao_SQL_Parte_I.pptRevisao_SQL_Parte_I.ppt
Revisao_SQL_Parte_I.ppta08008
 
Banco II - PostgreSQL - Filtros
Banco II - PostgreSQL - FiltrosBanco II - PostgreSQL - Filtros
Banco II - PostgreSQL - FiltrosGustavo Sávio
 
Banco de dados aula 4
Banco de dados aula 4Banco de dados aula 4
Banco de dados aula 4Ed W. Jr
 
Funções integradas no sql
Funções integradas no sql Funções integradas no sql
Funções integradas no sql Gelivaldo Filho
 
Passagem de Objetos entre Java e Oracle
Passagem de Objetos entre Java e OraclePassagem de Objetos entre Java e Oracle
Passagem de Objetos entre Java e OracleAndré Reis
 
Unidade4.1 Oracle Or
Unidade4.1 Oracle OrUnidade4.1 Oracle Or
Unidade4.1 Oracle OrUFU
 
Aula7 sql basico_6por_pag
Aula7 sql basico_6por_pagAula7 sql basico_6por_pag
Aula7 sql basico_6por_paganacri
 
Sql - Introdução ao mysql
Sql - Introdução ao mysqlSql - Introdução ao mysql
Sql - Introdução ao mysqlArley Rodrigues
 
[Agile brazil2014] Bad Smells em Bancos de Dados
[Agile brazil2014] Bad Smells em Bancos de Dados[Agile brazil2014] Bad Smells em Bancos de Dados
[Agile brazil2014] Bad Smells em Bancos de DadosWildtech
 

Similar to Curso de PostgreSQL: Um pouco Além dos Comandos (20)

Aplicativos II - MySQL_part1
Aplicativos II - MySQL_part1Aplicativos II - MySQL_part1
Aplicativos II - MySQL_part1
 
Aula 11 banco de dados
Aula 11   banco de dadosAula 11   banco de dados
Aula 11 banco de dados
 
Aula 11 banco de dados
Aula 11   banco de dadosAula 11   banco de dados
Aula 11 banco de dados
 
MYSQL - TLBDII
MYSQL - TLBDIIMYSQL - TLBDII
MYSQL - TLBDII
 
Um pouco sobre sql
Um pouco sobre sqlUm pouco sobre sql
Um pouco sobre sql
 
Fundamentos de SQL - Parte 3 de 8
Fundamentos de SQL - Parte 3 de 8Fundamentos de SQL - Parte 3 de 8
Fundamentos de SQL - Parte 3 de 8
 
Apostila - Banco de Dados
Apostila - Banco de DadosApostila - Banco de Dados
Apostila - Banco de Dados
 
Revisao_SQL_Parte_I.ppt
Revisao_SQL_Parte_I.pptRevisao_SQL_Parte_I.ppt
Revisao_SQL_Parte_I.ppt
 
Banco II - PostgreSQL - Filtros
Banco II - PostgreSQL - FiltrosBanco II - PostgreSQL - Filtros
Banco II - PostgreSQL - Filtros
 
Banco de dados aula 4
Banco de dados aula 4Banco de dados aula 4
Banco de dados aula 4
 
Aula 12 banco de dados
Aula 12   banco de dadosAula 12   banco de dados
Aula 12 banco de dados
 
Funções integradas no sql
Funções integradas no sql Funções integradas no sql
Funções integradas no sql
 
Passagem de Objetos entre Java e Oracle
Passagem de Objetos entre Java e OraclePassagem de Objetos entre Java e Oracle
Passagem de Objetos entre Java e Oracle
 
PROVA SAS
PROVA SASPROVA SAS
PROVA SAS
 
Unidade4.1 Oracle Or
Unidade4.1 Oracle OrUnidade4.1 Oracle Or
Unidade4.1 Oracle Or
 
Basesdedados
BasesdedadosBasesdedados
Basesdedados
 
Aula7 sql basico_6por_pag
Aula7 sql basico_6por_pagAula7 sql basico_6por_pag
Aula7 sql basico_6por_pag
 
Sql - Introdução ao mysql
Sql - Introdução ao mysqlSql - Introdução ao mysql
Sql - Introdução ao mysql
 
Aprofundamento de DDL e DML
Aprofundamento de DDL e DMLAprofundamento de DDL e DML
Aprofundamento de DDL e DML
 
[Agile brazil2014] Bad Smells em Bancos de Dados
[Agile brazil2014] Bad Smells em Bancos de Dados[Agile brazil2014] Bad Smells em Bancos de Dados
[Agile brazil2014] Bad Smells em Bancos de Dados
 

More from Marcos Thomaz

Hibridização de Métodos Exatos e Heurísticos para a Minimização do Atraso Pon...
Hibridização de Métodos Exatos e Heurísticos para a Minimização do Atraso Pon...Hibridização de Métodos Exatos e Heurísticos para a Minimização do Atraso Pon...
Hibridização de Métodos Exatos e Heurísticos para a Minimização do Atraso Pon...Marcos Thomaz
 
Hydros - Apresentação para Investidores
Hydros - Apresentação para InvestidoresHydros - Apresentação para Investidores
Hydros - Apresentação para InvestidoresMarcos Thomaz
 
Minimax e corte alfa beta
Minimax e corte alfa betaMinimax e corte alfa beta
Minimax e corte alfa betaMarcos Thomaz
 
Palestra Apresentando Python e Suas Aplicações
Palestra Apresentando Python e Suas AplicaçõesPalestra Apresentando Python e Suas Aplicações
Palestra Apresentando Python e Suas AplicaçõesMarcos Thomaz
 
MongoDB: Uma forma diferente de pensar no desenvolvimento
MongoDB: Uma forma diferente de pensar no desenvolvimento MongoDB: Uma forma diferente de pensar no desenvolvimento
MongoDB: Uma forma diferente de pensar no desenvolvimento Marcos Thomaz
 
Criação de log de ações através do banco
Criação de log de ações através do bancoCriação de log de ações através do banco
Criação de log de ações através do bancoMarcos Thomaz
 

More from Marcos Thomaz (9)

Hibridização de Métodos Exatos e Heurísticos para a Minimização do Atraso Pon...
Hibridização de Métodos Exatos e Heurísticos para a Minimização do Atraso Pon...Hibridização de Métodos Exatos e Heurísticos para a Minimização do Atraso Pon...
Hibridização de Métodos Exatos e Heurísticos para a Minimização do Atraso Pon...
 
Hydros - Apresentação para Investidores
Hydros - Apresentação para InvestidoresHydros - Apresentação para Investidores
Hydros - Apresentação para Investidores
 
Minimax e corte alfa beta
Minimax e corte alfa betaMinimax e corte alfa beta
Minimax e corte alfa beta
 
Conhecendo o Django
Conhecendo o DjangoConhecendo o Django
Conhecendo o Django
 
Palestra Apresentando Python e Suas Aplicações
Palestra Apresentando Python e Suas AplicaçõesPalestra Apresentando Python e Suas Aplicações
Palestra Apresentando Python e Suas Aplicações
 
MongoDB: Uma forma diferente de pensar no desenvolvimento
MongoDB: Uma forma diferente de pensar no desenvolvimento MongoDB: Uma forma diferente de pensar no desenvolvimento
MongoDB: Uma forma diferente de pensar no desenvolvimento
 
Postgre sql +python
Postgre sql +pythonPostgre sql +python
Postgre sql +python
 
Criação de log de ações através do banco
Criação de log de ações através do bancoCriação de log de ações através do banco
Criação de log de ações através do banco
 
Postgresql +python
Postgresql +pythonPostgresql +python
Postgresql +python
 

Curso de PostgreSQL: Um pouco Além dos Comandos

  • 1. Introdução ao PostgreSQL: um pouco além dos comandos MARCOS THOMAZ DA SILVA
  • 2. Breve Histórico Derivado do pacote POSTGRES escrito na Universidade da Califórnia em Berkeley; Implementação do POSTGRES começou em 1986; Em 1994 foi adicionado um interpretador SQL ao Postgres (Postgres95, antes usava PostQUEL); Deu origem ao Informix da IBM; Em 1996 recebeu o nome de PostgreSQL, ganhando diversos outros recursos.
  • 3. No Brasil Caixa, BB e Serpro; Comunidade PGBR; Timbira e EnterpriseDB;
  • 4. Recursos Sub-Consultas; Integridade Referencial; Linguagem Procedural para Functions e Procedures pl/pgsql, pl/python, pl/perl, pl/java, pl/pascal, pl/ruby, pl/C, pl/R Gatilhos (Triggers); Tipos Definidos Por Usuário; Esquemas (schemas); Áreas de Armazenamento (Tablespaces); Savepoints; Dados geoespaciais; Herança de tabelas;
  • 5. Ambientes de Gerenciamento Modo texto: psql; Modo gráfico: pgAdmin III; EMS PostgreSQL Manager; Acqua Studio; Web: phpPgAdmin;
  • 6. Criando o banco de dados CREATE DATABASE <Nome_Do_Banco> [ WITH [ OWNER = <Usuario_Criador_Banco> ] [TEMPLATE = <Template> ] [ TABLESPACE = <table_space> [ ENCODING = <Encoding> ] [ LC_COLLATE = <collate> ] [ LC_CTYPE = <collate> ] ]; Exemplo: CREATE DATABASE testeerin WITH OWNER=curso_erin TEMPLATE = template0 TABLESPACE = pg_default ENCODING = 'UTF8' LC_COLLATE = 'Portuguese_Brazil.1252' LC_CTYPE = 'Portuguese_Brazil.1252';
  • 7. Criação de Usuários (Role’s) Porque criar: Segurança (mesma regra do root); Separação de ambientes; Controle de acesso e execução; O DBA pode realmente gerenciar o banco.
  • 8. Criação de Usuários (Role’s) Comando: CREATE ROLE <Seu_Usuario> LOGIN PASSWORD <Sua_Senha> [SUPERUSER] [INHERIT] [CREATEDB/NOCREATEDB] [CREATEROLE/NOCREATEROLE] [REPLICATION/NOREPLICATION]; Exemplo: CREATE ROLE cursopgerin LOGIN PASSWORD ‘cursopgerin’ SUPERUSER INHERIT CREATEDB CREATEROLE NOREPLICATION;
  • 9. Exercício de Fixação 01 Criar um banco de dados com o template0, encoding UTF8, collate (LC_CTYPE e LC_COLLATE) Portuguese_Brazil.1252, cujo nome seja erin_<seunome>. O usuário (role) criador do banco deve ter o seu nome (apenas o primeiro nome), deve ser superusuário, poder criar outros usuários, criar bancos, mas não deve poder realizar replicação. A senha fica a sua escolha.
  • 10. Tipos de Dados char / varchar (character / character varying); text; integer, smallint, bigint (2, 4 e 8 bytes respectivamente); decimal, numeric, real e money; serial; date, time, timestamp (with/without timezone); boolean; bytea, lo; array; line, point, polygon; json, macaddr;
  • 11. Tipo de dados – cada um na sua... Como armazenar... Datas de Nascimento? Nomes de pessoas? Textos variáveis (observações)? Horários? Valores monetários? Número de CPF? Números de Telefone?
  • 12. Criação de Tabelas O que são? Excel???? Comando básico... CREATE TABLE <tabela> ( <campo01> <tipo> [<requerido>] [DEFAULT <def>], <campo02> <tipo> [<requerido>] [DEFAULT <def>], [CONSTRAINT <nome_constraint> <tipo_constraint> ( <campo_constraint> )] ); Exemplo: CREATE TABLE categorias( id serial NOT NULL, descricao character varying(80), CONSTRAINT categorias_pk PRIMARY KEY (id) ) WITH (OIDS=TRUE);
  • 13. Exercício de Fixação 02 No banco criado no exercício 01, crie uma tabela chamada contatos com os seguintes campos: CAMPO TIPO NOME CHARACTER VARYING(80) CIDADE CHARACTER VARYING(80) TELEFONE CHARACTER VARYING(20) VL_ULT_COMPRA NUMERIC(10,2) VL_DEBITO MONEY
  • 14. Inserindo informações nas tabelas A instrução utilizada para inserir informações é INSERT Permite adicionar (quase) qualquer tipo de dado dentro de uma tabela; Comando: INSERT INTO <Tabela> [ (Campo1, Campo2[, Campo3] ) VALUES (<Valor1>,<Valor2>[,<Valor3>]) [ RETURNING <campo> ]; Exemplo INSERT INTO categorias (descricao) VALUES (‘Cerâmicas’); Ou INSERT INTO categorias (descricao) VALUES (‘Cerâmicas’),(‘Roupas’),(‘Frios’),(‘Ferramentas’)
  • 15. Exercício de Fixação 03 Usando como base o exercício anterior, insira os seguintes registros na tabela criada: NOME CIDADE VL_ULT_COMPRA VL_DEBITO FULANO RIO BRANCO 100 100 CICLANO RBCO 80 80 BELTRANO RIO BRANCO-AC 120.50 20.50 NOCEGO RIO BRANCO-AC 30 60 NOCEGO RIO BRANCO-AC 120 120 Além destes registros, insira mais 5 registros nessa tabela, com o VL_DEBITO igual a 0.
  • 16. Removendo Registros das Tabelas Comando DELETE é utilizado; Comando: DELETE FROM <Tabela> [ WHERE <Condicao>] Exemplo DELETE FROM categorias; DELETE FROM contatos WHERE VL_DEBITO < 10; DELETE FROM clientes WHERE nome like ‘FULANO*’
  • 17. Exercício de Fixação 04 Usando como base a tabela utilizada no EXERCÍCIO 03, Resolva a seguinte situação: O dono da loja quer fazer uma limpeza em seu banco de dados e quer remover todos os registros de contatos que não possuam débitos. Que comando deve ser executado??? delete from Contatos where vl_debito=‘0’ delete from Contatos where vl_debito=0::money
  • 18. Constraints / Restrições PRIMARY KEY – Chave primária; UNIQUE KEY – Chave Única; FOREIGN KEY – Chave Estrangeira; CHECK – Validação; QUAIS AS DIFERENÇAS ENTRE CHAVE PRIMÁRIA E CHAVE ÚNICA?
  • 19. Alterando Estrutura de Uma Tabela Mudanças Gerais na Tabela: Necessidade de Acréscimo de Campos; Necessidade de Retirada de Campos; Mudança de Tipos de Campos; Acréscimo de Constraints (Primary Key, Foreign Key, Unique Key, Check);
  • 20. Alterando Estrutura de Uma tabela Exemplos: ALTER TABLE ct DROP COLUMN tipo; ALTER TABLE ct ADD COLUMN testes character(1); ALTER TABLE ct ADD CONSTRAINT ct_chk2 CHECK (testes = 'S' or testes='N'); ALTER TABLE ct ALTER COLUMN valor TYPE money; ALTER TABLE ct RENAME vlr TO valor;
  • 21. Estrutura de Tabela – Testando... A estrutura apresentada no Exercício 02 atende aos dados que persistem nela?? Selecione todos os registros que correspondam a Rio Branco? Existem usuários duplicados na tabela? Os valores do campo cidade estão corretos? São confiáveis? Na tabela existem 2 contatos chamados NOCEGO, como ficaria para excluir apenas um deles? Execute os seguintes comandos na tabela e veja o que ocorre: insert into contatos (nome, VL_DEBITO) values (‘Teste 01’,’1.250,25’);
  • 22. Exercício de Fixação 05 Modifique a tabela usada no exercício anterior, realizando as seguintes operações: Adicionando uma coluna para armazenar o estado (UF); Adicionar um campo para armazenar a data de nascimento; Adicionar um campo do tipo SERIAL com o nome ID e torná-lo chave primária; Colocar o campo nome como Chave Única (realizando os ajustes necessários); Modifique o campo VL_ULT_COMPRA para o tipo MONEY;
  • 23. Alterando Registros de Uma Tabela Comando: UPDATE <Tabela> SET <campo1>=<valor_campo_1> [WHERE <condicao>] Exemplos: UPDATE categorias SET observacao=NULL; UPDATE contatos SET VL_DEBITO=0 WHERE VL_DEBITO < 10; UPDATE clientes SET nome=‘FULANO DE TAL’ WHERE nome like ‘FULANO*’; UPDATE clientes SET VL_DEBITO=VL_DEBITO*1.1 WHERE VL_DEBITO > 100 AND VL_ULT_COMPRA > 80;
  • 24. Exercício de Fixação 06 Com base na tabela existente, altere os registros existentes, informando as datas de nascimento dos contatos; Adicione um juros de 20% para todos os contatos com VL_DEBITO maior ou igual a 100; Adicione um juros de 10% para todos os contatos com VL_DEBITO entre 60 e 100; Adicione um juros de 5% para todos com valores menores que 60; Crie uma tabela chamada cidades com os campos id (serial), nome (character varying(80) ) e uf (character(2) ), adicione as cidades usadas na tabela contatos. Em seguida, insira na tabela contatos um campo chamado cidade_id. Altere-o para o valor das cidades correspondentes. Remova o campo cidade da tabela contatos e então defina o campo cidade_id como chave estrangeira apontando para a tabela cidades.
  • 25. Buscando Registros – Parte 01 Comando: SELECT <lista_de_valores> FROM <tabelas> [WHERE <condicoes>] ONDE: <lista_de_valores> - Campos, Expressões ou * <tabelas> - Uma ou mais tabelas (separadas por vírgula) que terão seus valores representados na listagem <condicoes> - Restrições de filtragem dos registros. Se omitido, exibe todos os registros.
  • 26. Exemplos Simples SELECT * FROM categorias; SELECT ID, NOME FROM CIDADES SELECT * FROM CIDADES WHERE UF = ‘AC’ SELECT nome, vl_debito, (vl_debito*1.10) as vl_deb_com_juros FROM contatos; SELECT upper(a.nome) as contato, b.nome||’-’||b.uf as cidade FROM contatos a, cidades b WHERE a.cidade_id=b.id AND b.uf = ‘AC’;
  • 27. SELECT.... JOIN... O que são os JOIN’s ??? Tipos: INNER JOIN; LEFT / RIGHT FULL JOIN;
  • 28. SELECT ... JOIN .... - EXEMPLOS SELECT upper(contatos.nome) as contato, cidades.nome||’-’||cidades.uf as cidade FROM contatos INNER JOIN cidades ON cidade_id=id WHERE b.uf = ‘AC’; SELECT * FROM CLIENTES C LEFT OUTER JOIN COMPRAS C2 ON C2.ID_CLIENTE = C.ID
  • 29. SELECT...GROUP BY Realiza agrupamento de valores; Utiliza funções de agregação: SUM, MAX, MIN, COUNT, AVERAGE (AVG); As “dimesões” que aparecem na lista do select, devem ser adicionadas ao GROUP BY Agrupamento aceita funções condicionais (CASE);
  • 30. SELECT ... GROUP BY - EXEMPLOS SELECT COUNT(*) FROM contatos; SELECT a.nome as cidade, COUNT(*) FROM cidades a, contatos b WHERE A.id=b.cidade_id; SELECT a.nome as cidade, COUNT(*) FROM cidades a INNER JOIN contatos b WHERE a.id = b.cidade_id; SELECT a.nome as cidade, COUNT(*) FROM cidades a LEFT JOIN contatos b WHERE a.id = b.cidade_id; SELECT a.nome as cidade, COUNT(*) FROM cidades a RIGHT JOIN contatos b WHERE a.id = b.cidade_id; SELECT a.nome, (select count(*) from contatos b WHERE a.id=b.cidade_id) FROM cidades a
  • 31. SELECT.... E MAIS ALGUNS EXEMPLOS Listar a quantidade de pessoas de uma determinada cidade, separando por sexo: select a.nome, SUM( case b.sexo WHEN ‘M’ then 1 else 0 end) as M, SUM( case b.sexo WHEN ‘F’ then 1 else 0 end) as F FROM cidades a LEFT JOIN clientes b ON b.cidade_id = a.cidade_id WHERE a.id=1 Listar os clientes e seu débito total, cujo débito total é maior que R$ 1.000,00: Select c.nome, sum(vl_debito) from clientes c group by c.nome having sum(vl_debito) > 1000
  • 32. Mais do mesmo??? Onde estão Schema’s, Triggers, Procedures, Functions, Índices e TableSpaces??? Pra que serve cada um???
  • 33. Cenário 01 A Universidade Federal do Acre possui um ERP que dentre seus módulos podemos destacar: acadêmico, financeiro, orçamentário, compras, frotas, RH, licitação, almoxarifado, espaço físico e contratos. O banco de dados possui cerca de 800 tabelas. Como organizar essas tabelas para facilitar a manutenção? Como não se perder, nem inverter o nome de tabelas com um ambiente tão complexo? A tabela “estrutura” se refere a parte organizacional ou física??? SCHEMAS
  • 34. Schemas Os schemas são estruturas lógicas, usadas para separar o conteúdo de bancos de dados; Podem estar contidos dentro de schemas tables, views, procedures, etc; Se a tabela está em um schema, esse deve estar no path do usuário que acessa o banco de dados. Comando: Create schema Financeiro; Create schema Academico;
  • 35. Schema’s – select entre schema’s Public – Visível automaticamente para todos ; <User> - Visível apenas ao usuário (de forma explícita); Exemplo, se tivermos os schemas academico e rh, criação de tabelas: Create table academico.pessoas (...); Create table rh.pessoas (...); Exemplo de select: select * from academico.pessoas p1, rh.pessoas p2 where p1.id=p2.id
  • 36. Schema’s Perguntas: E se eu quiser dar um select sem especificar o schema? set search_path=“$user”, public, rh, academico; Se eu estiver usando um schema, posso ter chaves estrangeiras apontando para uma tabela de outro schema? Posso ter tabelas com o mesmo nome e estrutura? E nesse caso, se eu tenho duas tabelas iguais, adicionei ambos os schema’s no search_path, e digitar select * from tabela, como saber de qual schema são os dados?
  • 37. Preparando para as regras de negócio... TABELA: categorias CAMPO TIPO PK UK FK REF ID SERIAL X DESCRICAO VARCHAR(80) TABELA: clientes CAMPO TIPO PK UK FK REF ID SERIAL X NOME VARCHAR(80) X DTN DATE ATIVO BOOLEAN SEXO CHAR(1)
  • 38. Preparando para as regras de negócio... TABELA: produtos CAMPO TIPO PK UK FK REF ID SERIAL X NOME VARCHAR(80) X VL_COMPRA MONEY LUCRO NUMERIC(7,3) VL_VENDA MONEY EST_MINIMO INTEGER CATEGORIA_ID INTEGER X CATEGORIAS
  • 39. Preparando para as regras de negócio... TABELA: pedidos CAMPO TIPO PK UK FK REF ID SERIAL X CLIENTE_ID INTEGER X CLIENTES VL_COMPRA MONEY FPGTO CHAR(1) DESCONTO MONEY VL_TOTAL MONEY FECHADO BOOLEAN
  • 40. TABELA: pedidos_itens CAMPO TIPO PK UK FK REF ID SERIAL X PEDIDO_ID INTEGER X PEDIDOS PRODUTO_ID INTEGER X PRODUTOS QTD INTEGER VL_UN MONEY
  • 41. REGRAS ---- Tabela categorias Não pode ter categorias com descrições iguais; Tabela clientes: Não podem haver clientes com o mesmo nome, nascidos no mesmo dia; A data de nascimento não pode ser nem maior nem igual a data atual; Se um cliente estiver inativo, ele não pode sofrer alterações; Sexo obrigatoriamente deve ser: M, m, F ou f
  • 42. REGRAS ---- Tabela produtos: Não podem haver produtos com o nome repetido; Valor da compra deve ser menor ou igual ao valor da venda; Lucro deve ser maior ou igual a zero; Estoque mínimo deve ser maior ou igual a zero; Deve ser uma categoria válida; Se o valor de venda não for informado, deve ser pego o valor de compra e calculado o juros.
  • 43. REGRAS ----- Tabela pedidos: Fpagto só pode ser V (a vista) ou P (a prazo); Se o pedido estiver fechado é porque foi quitado pelo cliente e não pode sofrer alterações; Valor total deve ser calculado pegando o valor da compra, menos o desconto. O desconto deve ser maior ou igual a zero; O valor da compra deve ser pego automaticamente, conforme são adicionados os itens. Tabela pedidos_itens: Quantidade deve ser maior que zero; Valor Unit. Deve ser pego automaticamente da tabela de produtos.
  • 44. E AGORA??! Regras de negócio no banco? Simples... Triggers e procedures!
  • 45. TRIGGER São automatizações do banco de dados; São disparados a partir de eventos como insert, update e delete; Permitem a execução de diversas outras operações;
  • 46. PROCEDURES / FUNCTIONS São funções executadas dentro do banco de dados; Pode ser desenvolvidas em diversas linguagens Por padrão, utilizasse PL/pgsql; Linguagem simples com selects dentro dos comandos; Permite retornos simples ou listas; No postgreSQL todos as triggers executam uma função especial (trigger functions).
  • 47. Modelo de Triggers no PostgreSQL Tabela Comando INSERT Dispara a Trigger OnInsert Executa a Trigger Function
  • 48. Functions / Procedures Comando: CREATE OR REPLACE FUNCTION <SuaFuncao>( <parametros> ) RETURNS <retorno> AS $BODY$ <declaração_de_variáveis>; BEGIN <codigo> END; $BODY$ LANGUAGE plpgsql;
  • 49. Trigger Functions Comando: CREATE OR REPLACE FUNCTION <SuaFuncao>() RETURNS trigger AS $BODY$ <declaração_de_variáveis>; BEGIN <codigo> RETURN <new_ou_old>; END; $BODY$ LANGUAGE plpgsql;
  • 50. Trigger CREATE TRIGGER <nome_trigger> {AFTER|BEFORE} {INSERT|UPDATE|DELETE} ON <suaTabela> FOR EACH {ROW|STATEMENT} EXECUTE PROCEDURE <nome_da_trigger_function>();
  • 51. Exemplo Create table fornecedores( id serial not null, nome varchar(80), saldo money, CONSTRAINT pk_forne PRIMARY KEY (id) ); Create table venda( id serial not null, fornecedor_id integer, data date, valor money, CONSTRAINT pk_venda PRIMARY KEY (id), CONSTRAINT fk_venda FOREIGN KEY (fornecedor_id) REFERENCES fornecedores (id) ON UPDATE NO ACTION ON DELETE CASCADE );
  • 52. Exemplo Continuação Create or replace function ajusta_saldo() returns trigger AS $BODY$ BEGIN update fornecedor set saldo = coalesce(saldo,0)+NEW.valor where id = NEW.fornecedor_id; RETURN NEW; END $BODY$ AS LANGUAGE plpgsql;
  • 53. Exemplo – Continuação CREATE TRIGGER tr_ajusta_saldo AFTER INSERT ON venda FOR EACH ROW EXECUTE PROCEDURE ajusta_saldo();
  • 54. PENSANDO EM DESEMPENHO... Criação de tablespaces O que são? Como criá-las? Quais as vantagens? Como usá-las? Índices: Explain; Tipos de índice; Views: Melhorando modelos Rules; Desempenho ainda incomoda: Particionamento de tabelas;