O documento apresenta uma introdução ao PostgreSQL, abordando seu breve histórico, uso no Brasil, recursos como subconsultas e linguagens procedurais, ambientes de gerenciamento, criação de bancos de dados e usuários, tipos de dados, criação de tabelas, inserção de dados, remoção de registros, busca de registros e exercícios de fixação.
Apresentação que mostra as principais features e implementação de TS no React, com exemplos de Hooks, Generics, Tipos x Interfaces, Orientação a Objeto, histórico do JS x TS, uso na comunidade
Apresentação que mostra as principais features e implementação de TS no React, com exemplos de Hooks, Generics, Tipos x Interfaces, Orientação a Objeto, histórico do JS x TS, uso na comunidade
Neste slide iniciamos a programação em C, apresentando a sintaxe, o escopo inicial para iniciar a programação utilizando a ferramenta DevC++ [Aula para curso técnico]
Módulo 9 - Introdução à Programação Orientada a Objectos Luis Ferreira
Características da Programação Orientada por Objetos (POO).
Conceito de Classe, Atributos, Métodos, e Eventos.
Conceito de Objeto.
Conceito de Encapsulamento.
Conceito de Visibilidade de Classes, Métodos e Atributos.
Diagramas de Classe.
O ambiente de trabalho do Visual C#.
Objetos básicos e outras características básicas da linguagem do Visual C# e respetivo ambiente de trabalho.
Nessa aula apresentamos um breve histórico sobre a linguagem, comparando com a linguagem C. O foco deste curso é oferecer novas ferramentas para quem já sabe um pouco de C e POO ( Java .. ).
Antes era uma extensão do Postgres, incorporada ao core desde a versão 8.3, FTS (Full Text Search) é um recurso que agiliza e dá maior precisão em buscas textuais. Nesta apresentação serão mostradas de forma resumida, formas e exemplos de aplicação deste recurso.
Neste slide iniciamos a programação em C, apresentando a sintaxe, o escopo inicial para iniciar a programação utilizando a ferramenta DevC++ [Aula para curso técnico]
Módulo 9 - Introdução à Programação Orientada a Objectos Luis Ferreira
Características da Programação Orientada por Objetos (POO).
Conceito de Classe, Atributos, Métodos, e Eventos.
Conceito de Objeto.
Conceito de Encapsulamento.
Conceito de Visibilidade de Classes, Métodos e Atributos.
Diagramas de Classe.
O ambiente de trabalho do Visual C#.
Objetos básicos e outras características básicas da linguagem do Visual C# e respetivo ambiente de trabalho.
Nessa aula apresentamos um breve histórico sobre a linguagem, comparando com a linguagem C. O foco deste curso é oferecer novas ferramentas para quem já sabe um pouco de C e POO ( Java .. ).
Antes era uma extensão do Postgres, incorporada ao core desde a versão 8.3, FTS (Full Text Search) é um recurso que agiliza e dá maior precisão em buscas textuais. Nesta apresentação serão mostradas de forma resumida, formas e exemplos de aplicação deste recurso.
Criação de log de ações através do banco - PostgreSQLMarcos Thomaz
Esta apresentação foi utilizada na palestra ministrada na Conferência Brasileira de PostgreSQL, realizada na cidade de Porto Velho - Rondônia - Brasil, em 2013. Ela apresenta uma forma simples de se manter o log das ações realizadas no banco de dados, mantendo um histórico de modificações.
Fornece uma completa visão das novas funcionalidades e dos principais benefícios da utilização do PPAS - Postgres Plus Advanced Server 9.4 e do PEM - Postgres Enterprise Manager 5.0.
O PPAS - Postgres Plus Advanced Server auxilia as organizações que buscam economia com de banco de dados, através da implantação de uma alternativa capaz e de baixo custo no lugar de bases de dados proprietárias e caras.
Sua poderosa combinação, de tecnologias de banco de dados não estruturados e relacionais em um único sistema de gerenciamento de banco de dados, fornece a liberdade, flexibilidade e desempenho para a manipulação de dados não estruturados e semi-estruturados.
O PEM - Postgres Enterprise Manager é uma solução que permite que você, monitore, gerencie e consiga ajustar um grande número de servidores de banco de dados Postgres espalhados geograficamente de forma integrada e através de uma console gráfica.
PGDay Campinas 2013 - Implementando o PostgreSQL de maneira escalável e com a...PGDay Campinas
“Implementando o PostgreSQL de maneira escalável e com alta disponibilidade na nuvem da AWS”
Amazon Web Services (AWS) é uma plataforma de cloud computing flexível, elástica e baixo custo. Utilizar PostgreSQL no Amazon Elastic Compute Cloud (EC2) é ideal para quem está acostumado a operar o banco e precisa da flexibilidade que a nuvem traz. Nesta palestra vamos dar dicas e boas práticas de arquitetura para implementar o PostgreSQL na nuvem de uma maneira escalável, pensando também em durabilidade, persistência, alta disponibilidade e tolerança a falhas.
Eduardo HoraiPalestrante: Eduardo Horai é um dos arquitetos de soluções da Amazon Web Services (AWS) com foco na América Latina. Entre suas funções está a de ajudar clientes e parceiros a desenvolver arquiteturas escaláveis, com alta disponibilidade e tolerante a falhas sobre a nuvem da AWS. Ele é graduado em Ciências da Computação na Unicamp e pós em Inovação e Empreendedorismo na Vlerick Management School, na Bélgica.
--
Palestra apresentada no PGDay Campinas 2013
"Postgres XC @ Cloud"
Review sobre a instalação e os recursos necessários que permitem a criação cluster Postgres-XC na Amazon AWS. Permitindo às aplicações que falam PostgreSQL escalar tanto em leitura quanto em escrita, respeitando os padrões ACID, com redundância e escalabilidade horizontal e/ou vertical.
PALESTRANTE:
MATHEUS OLIVEIRA
Matheus de Oliveira: Formado em Ciências de Computação (USP), trabalhou com pesquisa nas áreas de visualização de informação e algoritmos avançados. Domina assuntos relacionados à performance tuning, alta disponibilidade, modelagem e administração.
VINÍCIUS SCHMIDT
br.linkedin.com/in/viniciusschmidt
--
Palestra apresentada no PGDay Campinas 2013 por Matheus Oliviera e Vinícius Schmidt.
PGDay Campinas 2013 - CASE: PostgreSQL no Tribunal de Justiça do ParanáPGDay Campinas
"CASE: PostgreSQL no Tribunal de Justiça do Paraná"
Caso de sucesso na utilização do PostgreSQL no Tribunal de Justiça do Paraná. A palestra irá abordar as soluções utilizadas para atender a demanda dos sistemas de missão crítica, em especial o sistema PROJUDI. O PROJUDI é um software de tramitação de processos judiciais originalmente criado pelo Conselho Nacional de Justiça (CNJ) e utilizado em vários estados do Brasil. O processo judicial digital, também chamado de processo virtual ou de processo eletrônico, tem como premissa, gerenciar e controlar os trâmites de processos judiciais nos Tribunais de forma eletrônica, reduzindo tempo e custos.
PALESTRANTE:
- FABIO CAIUT
Fábio Caiut trabalha com TI há 13 anos, atuando principalmente em Infraestrutura e Suporte ao Desenvolvimento. É DBA PostgreSQL há 3 anos no Tribunal de Justiça do Paraná. Tem experiência como Desenvolvedor Lotus, Microsoft e DBA SQL Server. Formado em Ciência da Computação na UFPR e Especialista em Banco de Dados pela PUC-PR.
- MATHEUS ESPANHOL
Matheus é consultor de banco de dados especialista em PostgreSQL, presta serviços para a Dextra Sistemas na área de consultoria, suporte e treinamento. Trabalha há oito anos com ambientes de banco de dados opensource, tendo dedicado o último ano a ferramenta PgAnalytics.
--
Palestra apresentada no PGDay Campinas 2013 por Fabio Caiut e Matheus Espanhol
Maximizing EC2 and Elastic Block Store Disk Performance (STG302) | AWS re:Inv...Amazon Web Services
Learn tips and techniques that will improve the performance of your applications and databases running on EC2 instance storage and/or Elastic Block Store. This advanced session discusses when to use HI1, HS1, and EBS. It shares an under the hood view on how to tune the performance of Elastic Block Store. The presenter(s) will share best practices on running workloads on EBS such as relational databases (MySQL, Oracle, SQL Server, postgres) and NoSQL data stores such as MongoDB and Riak.
Autor: Professor: Ivon Rodrigues Canedo, da Universidade Católica de Goiás (UCG)´.
Disponível aqui: http://sistemasfafram10.xpg.uol.com.br/Terc.Semestre/BDI/Banco_Dados.pdf
Amazon Elastic Block Store (Amazon EBS) provides persistent block level storage volumes for use with Amazon EC2 instances. In this technical session, we conduct a detailed analysis of the differences among the three types of Amazon EBS block storage: General Purpose (SSD), Provisioned IOPS (SSD), and Magnetic. We discuss how to maximize Amazon EBS performance, with a special eye towards low-latency, high-throughput applications like databases. We discuss Amazon EBS encryption and share best practices for Amazon EBS snapshot management. Throughout, we share tips for success.
Esta apresentação foi desenvolvida para um trabalho da faculdade, onde eu explico um pouco sobre SQL, os subconjuntos (DML, DDL, DCL) e os principais comandos de cada subconjunto.
Hydros - Apresentação para InvestidoresMarcos Thomaz
Apresentação da Empresa e Sistema Hydros, preparada para investidores, criada para o projeto Startup Acre, juntamente com a equipe do Sebrae e Transforma.
Apresentação do Algoritmo Minimax e Corte Alfa-Beta, apresentado na Disciplina de Inteligência Artificial, no Programa de Pós-Graduação em Computação da Universidade Federal do Amazonas.
Apresentação da Palestra sobre o Framework Django, utilizado no desenvolvimento de sites e aplicações web. Na apresentação são mostrados os recursos do Django, citando seu ORM, acesso a bancos de dados, templates, cache, views, urls e diversos outros recursos.
Palestra Apresentando Python e Suas AplicaçõesMarcos Thomaz
Apresentação utilizada na palestra realizada no dia 08/10/2014 na faculdade Meta, contendo uma introdução sobre a linguagem de programação Python, suas aplicações, empresas que utilizam e exemplos de uso aplicado a algumas situações, mostrando o potencial desta linguagem, que vai desde o acesso a bancos de dados, geração de sites, aplicações desktop e web multiplataformas (windows, linux, freebsd, MacOS), web, mineração de dados, inteligência artificial, até o desenvolvimento de aplicações mobile (android, iOS).
MongoDB: Uma forma diferente de pensar no desenvolvimento Marcos Thomaz
Apresentação sobre MongoDB, seus recursos, exemplos de uso e um comparativo de performance. Apresenta modelos e comandos básicos, porém úteis, comparando-os com comandos de bancos de dados relacionais, trazendo um comparativo básico de desempenho.
Apresentação da palestra realizada na Conferência Brasileira de PostgreSQL - PGBR em 2013 na cidade de Porto Velho - Rondônia - Brasil, que apresenta a integração da Linguagem Python com o banco de dados PostgreSQL usando psycopg2.
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;
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;