---
# System prepended metadata

title: "\n BD Essencial - Aula 5\n"

---

<p><img src="https://i.imgur.com/D01Fpky.png" alt="" title="Entre no nosso site e veja nossos cursos"></p>
<h1>
<img class="emoji" alt="" src="https://image.flaticon.com/icons/png/128/2906/2906274.png"> BD Essencial - Aula 5
</h1>

<p>O objetivo desse curso &eacute; capacitar o aluno a entrar no mercado de trabalho executando as atividades primordiais que s&atilde;o solicitadas no desenvolvimento, manuten&ccedil;&atilde;o, ou atualiza&ccedil;&atilde;o de bancos de dados dos mais diferentes tipos de sistemas.</p>
<p>Focamos na execu&ccedil;&atilde;o, e n&atilde;o em cria&ccedil;&atilde;o de diagramas - atividade essa que &eacute; desenvolvida por profissionais mais experientes.</p>
<p>Nas nossas prieiras aulas, utilizamos o Gerenciador de Bancos de Dados Relacionais <strong>MySQL</strong> nesse nosso curso de Banco de Dados Essencial, porque essa ferramenta &eacute; gratuita e de f&aacute;cil utiliza&ccedil;&atilde;o - entretanto, todo o nosso conte&uacute;do pode ser aplicado em qualquer Gerenciador de Bancos de Dados Relacionais, apenas com algumas m&iacute;nimas diferen&ccedil;as.</p>
<p>Na segunda parte do curso, utilizamos o Gerenciador de Bancos de Dados Relacionais <strong>PostgreSQL</strong>.</p>

<blockquote style="border-left-color: red;">
<p><span class="color" data-color="red"></span><span> </span><small><i class="fa fa-user"></i> Prof Fernando Gomes - fernandojnr@gmail.com</small></p></blockquote>


<h2 id="-Tema-da-aula" data-id="-Tema-da-aula"><a class="anchor hidden-xs" href="#-Tema-da-aula" title="-Tema-da-aula"><span class="octicon octicon-link"></span></a><img class="emoji" alt=":book:" src="https://cdn.jsdelivr.net/npm/@hackmd/emojify.js@2.1.0/dist/images/basic/book.png">
<span> Tema da aula:</span></h2><span>
<p>Nessa quinta aula, vamos comaçar a trabalhar com <strong>PostgreSQL</strong>. Vamos falar sobre</p>
<ul>
<li>SERIAL;</li>
<li>INHERITANCE;</li>
<li>\c, \l, \dt, \d</li>
<li>Collation, CTYPE;</li>
<li>datname;</li>
<li>sequence;</li>
<li>nextval, currval;</li>
<li>except;</li>
<li>check [para usar com valores pr&eacute;-definidos];</li>
<li>trigger;</li>
<li>function;</li>
</ul>
<p>&nbsp;</p>

```sql=

create database banco10;
-- use banco10
\c banco10

select current_database();
-- Mostra o banco corrente (banco10)

\l 
-- lista os bancos de dados
-- onde Collation eh um conjunto de regras que diz 
-- ao software gerenciador de banco de dados 
-- como comparar e classificar os dados de caracteres;
-- CTYPE eh um conjunto de regras complementares
-- que tratam de comparacao quando ha letras maiusculas 
-- e minusculas;

-- listando apenas os nomes dos bancos de dados 
-- e listando bancos de dados com nomes contando 'banco'

SELECT datname FROM pg_database;
 datname
-----------
 template1
 template0
 postgres
 banco10
(4 rows)


SELECT datname FROM pg_database 
        where datname like'banco%';
 datname
---------
 banco10
(1 row)

select version();

select version();
            version
--------------------------------------
 PostgreSQL 9.5.25, compiled 
    by Visual C++ build 1800, 64-bit



\dt 
-- mostra as tabelas do banco

create table pessoa(
    id SERIAL primary key,
    nome varchar (50));

create table cliente( 
    email varchar (50),
    sexo varchar (1)) 
    inherits (pessoa);

\d cliente;

 Column |         Type          
--------+-----------------------
 id     | integer               
 nome   | character varying(50) 
 email  | character varying(50) 
 sexo   | character varying(1)  
Inherits: pessoa

insert into pessoa (nome) values 
('luis'),
('Carlos'),
('manoela');

-- inSert INCORRETO
insert into cliente values (3,'manoela','manoela@gmail.com','f');
insert into cliente values (1,'luis','luis@gmail.com','m');

select * from cliente;
 id |  nome   |       email       | sexo
----+---------+-------------------+------
  3 | manoela | manoela@gmail.com | f
  1 | luis    | luis@gmail.com    | m
(2 rows)


select * from pessoa;
 id |  nome
----+---------
  1 | luis
  2 | Carlos
  3 | manoela
  3 | manoela
  1 | luis
(5 rows)

delete from pessoa;
delete from cliente;

-- inserts corretos: "de baixo para cima"
insert into cliente (nome, email, sexo) values 
('manoela','manoela@gmail.com','f'),
('luis','luis@gmail.com','m');



create table pessoa2(
    id int primary key,
    nome varchar (50));

create sequence seq_pessoa2;

insert into pessoa2 values (nextval('seq_pessoa2'),'luis');
insert into pessoa2 values (nextval('seq_pessoa2'),'Carlos');
insert into pessoa2 values (nextval('seq_pessoa2'),'manoela');

select * from pessoa2;

 id |  nome
----+---------
  1 | luis
  2 | Carlos
  3 | manoela
(3 rows)

select currval('seq_pessoa2');
 currval
---------
       3
(1 row)

create table clientePJ(
    cnpj int unique) 
    inherits (cliente);

\d clientePJ

\d clientePJ

 Column |         Type          
--------+-----------------------
 id     | integer               
 nome   | character varying(50) 
 email  | character varying(50) 
 sexo   | character varying(1)  
 cnpj   | integer               

insert into clientePJ values
(40,'lu pinturas','luciana@gmail.com','f',101101);

delete from clientePJ;

insert into clientePJ (nome, email, sexo, cnpj)
values
('lu pinturas','luciana@gmail.com','f',101101);

insert into clientePJ values
 (40,'lu pinturas','luciana@gmail.com','f',101101);

select * from clientePJ;
 id |    nome     |       email       | sexo |  cnpj
----+-------------+-------------------+------+--------
 40 | lu pinturas | luciana@gmail.com | f    | 101101
(1 row)

delete from clientePJ;

insert into clientePJ (nome, email, sexo, cnpj)
    values
    ('lu pinturas','luciana@gmail.com','f',101101);

select * from clientePJ;
 id |    nome     |       email       | sexo |  cnpj
----+-------------+-------------------+------+--------
 12 | lu pinturas | luciana@gmail.com | f    | 101101
(1 row)


select * from cliente;
 id |    nome     |       email       | sexo
----+-------------+-------------------+------
 10 | manoela     | manoela@gmail.com | f
 11 | luis        | luis@gmail.com    | m
 12 | lu pinturas | luciana@gmail.com | f
(3 rows)

select * from pessoa;

 id |    nome
----+-------------
 10 | manoela
 11 | luis
 12 | lu pinturas
(3 rows)


select id, nome, email, sexo from cliente
except
select id, nome, email, sexo from clientePJ;
-- ATENCAO! as colunas precisam ser as mesmas
-- precisa haver uma chave primaria 

select id, nome, email, sexo from clientePJ;
 id |  nome   |       email       | sexo
----+---------+-------------------+------
 11 | luis    | luis@gmail.com    | m
 10 | manoela | manoela@gmail.com | f
(2 rows)




drop database banco20;
create database banco20;
\c banco20;


create table Cliente(idCliente int primary key,
    nome varchar (35),
    email varchar (50) unique,
    sexo varchar (1) 
    check (sexo in ('m','f')));

create table Venda (idVenda int primary key,
    valorVenda float,
    produto varchar (35),
    data  date,
    id_Cliente int,
    foreign key(id_Cliente) 
    references Cliente(idCliente));

create sequence seq_cliente;

create sequence seq_venda;

insert into cliente values 
(nextval('seq_cliente'),'lu','lu@gmail.com','f'),
(nextval('seq_cliente'),'paulo','paulo@gmail.com','m'),
(nextval('seq_cliente'),'wallace','wallace@gmail.com','m');

select * from cliente;
 idcliente |  nome   |       email       | sexo
-----------+---------+-------------------+------
         1 | lu      | lu@gmail.com      | f
         2 | paulo   | paulo@gmail.com   | m
         3 | wallace | wallace@gmail.com | m
(3 rows)

create table log(cod serial primary key,
	data date,
	autor varchar (35),
	alteracao varchar (50),
	codigocliente   int,
	codigoVenda int );  

-- usando Trigger para escrever em uma tabela de log
-- qualquer insert, update ou delete na tabela venda
-- fica registrada no log

-- funcao q executa o registro no log
create function gera_log() returns trigger as
$$
 begin
    insert into log (data ,autor,alteracao,
                codigocliente,codigovenda) 
    values
       (now(), user , TG_OP,  new.id_Cliente, new.idVenda);
    return new;
 end;
$$ language 'plpgsql';   
 
-- trigger q dispara a funcao
create trigger tr_gera_log  
    after insert or update or delete on Venda
    for each row execute procedure gera_log();

insert into venda values 
(nextval('seq_venda'), 1000, 'movel', now(), 3);
-- idVenda, valorVenda, produto, data, id_Cliente

select * from log;


 cod |    data    |  autor   | 
-----+------------+----------+-
   1 | 2021-03-28 | postgres | 

alteracao | codigocliente | codigovenda
----------+---------------+-------------
INSERT    |             3 |           1




```

<!--
<h3>
Tipos de Dados Numéricos do MySQL
</h3>

<p>
Na tabela abaixo vemos os tipos da dados numéricos aceitos no MySQL. Utilizamos, BIT ou TINYINT(1) para armazenar um campo booleano. Além dessa situação, os mais utilizados são TINYINT, INT, e DOUBLE. Por padrão, os campos admitem números com sinal, portanto, o padrão [default] é SIGNED.
</p>

![](https://i.imgur.com/ctbQVW0.png)
-->

<blockquote style="border-left-color: red;">
<p><span class="color" data-color="red"></span><span> </span><small><i class="fa fa-user"></i> Prof Fernando Gomes - fernandojnr@gmail.com</small></p></blockquote>

<br>
<div class="alert alert-info">
<blockquote style="border-left-color: blue;">
<p><span class="color" data-color="blue"></span><span> </span><small><i class="fa fa-user"></i> E.B. Cursos https://www.cursoseb.com.br/</small><br>
<span class="color" data-color="blue"></span><span> </span><small><i class="fa fa-user"></i> E.B. Cursos EAD https://edsonbelemtreinamento.com.br/ead/</small></p>
</blockquote>
</div>




