---
# System prepended metadata

title: "\n BD Essencial - Aula 7\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 7
</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 sétima aula, vamos falar sobre</p>
<ul>
<li>Reiniciar servidor PostgreSQL com <strong>pg_ctl</strong>;</li>
<li>User e Role;</li>
<li>Grant;</li>
<li>Comandos: <strong>\du</strong>, <strong>\dt</strong>;</li>
<li>Encerrar conex&atilde;o com um banco e abrir conex&atilde;o com outro;</li>
<li>Create user;</li>
<li>Commit e Rollback;</li>
<li>Logar num DB no prompt do Windows[cmd.exe];</li>
<li>Criar e restaurar backup de banco de dados com <strong>pg_dump</strong> e <strong>pg_restore</strong>;</li>
<li>timestamp;</li>
<li>function, trigger e registros rotulados com <strong>NEW</strong> e <strong>OLD</strong></li>
</ul>
<p><br />No <strong>MySQL</strong>:</p>
<ul>
<li>Importa&ccedil;&atilde;o de dados de arquivo <strong>XML</strong> para um tabela;</li>
<li>load Data local infile;</li>
<li>extractvalue</li>
</ul>
<p><strong>XML</strong> (Extensible Markup Language) &eacute; uma recomenda&ccedil;&atilde;o da&nbsp;W3C&nbsp;para gerar&nbsp;linguagens de marca&ccedil;&atilde;o&nbsp;para necessidades especiais.</p>
<p>&Eacute; um dos subtipos da SGML (acr&ocirc;nimo de Standard Generalized Markup Language ou Linguagem Padronizada de Marca&ccedil;&atilde;o Gen&eacute;rica) capaz de descrever diversos tipos de dados. Seu prop&oacute;sito principal &eacute; a facilidade de compartilhamento de informa&ccedil;&otilde;es por interm&eacute;dio da internet.</p>

```postgre=

-- C:\Program Files\PostgreSQL\9.5\bin
-- na barra de endereco, digite cmd

-- reiniciando o servidor de BD postgresql no windows
-- comando em uma unica linha
pg_ctl -D "C:\Program Files\PostgreSQL\9.5\data" 
restart -s

\c banco20

drop user aluno;
drop user luciana;
drop role estagio;

 create user aluno;
 alter user aluno with password '123';

 create user luciana;
 alter user luciana with password '123';

create role estagio with user aluno, luciana;
-- grant estagio to aluno;

grant select on veiculo to estagio;

grant select, insert on veiculo to luciana;

-- mostrando os usuarios e grupos
\du
                                   List of roles
 Role name |                         Attributes                         
-----------+----------------------------------------------
 aluno     |                                                            
 estagio   | Cannot login                                               
 luciana   |                                                            
 postgres  | Superuser, Create role, Create DB, Replication,
                            Bypass RLS 

| Member of
+-----------
| {estagio}
| {}
| {estagio}
| {}

-- a qq momento, estando conectado a qq banco
-- podemos mudar o banco e o usuario
\c banco20 luciana 

-- desconectando de todos os bancos e voltando ao estado
-- do postgresql qdo abrimos o sql shell
\c postgres postgres


postgres=# \c banco20 luciana
Password for user luciana:
You are now connected to database "banco20" 
        as user "luciana".
banco20=> select * from veiculo;
 idveiculo |  modelo   | ano  |  valor
-----------+-----------+------+----------
       102 | Eco Sport | 2012 | 25000.00
       103 | palio     | 2015 | 33000.00
       104 | hb20      | 2015 | 45000.00
(3 rows)


banco20=> delete from veiculo;
ERROR:  permission denied for relation veiculo


create database banco30;
\c banco30
create user estudante with password '123456';


create table teste(id int);
-- gravando como numa transacao
begin;
insert into teste values (100);
insert into teste values (101);
insert into teste values (102);
insert into teste values (103);
commit;

begin;
insert into teste values (105);
insert into teste values (106);
insert into teste values (107);
rollback;
-- deu rollback, desfez os 3 ultimos inserts

-- comando p/logar num DB no prompt do windows
psql -d banco30 -U posgres

-- criando e restaurando backup de banco de dados
-- no diretorio C:\Program Files\PostgreSQL\9.5\bin
pg_dump -U postgres -W -F t banco30 > c:\bd\backup.tar
--backup criado

banco30=# drop table teste;
DROP TABLE
banco30=# \dt

-- restaurando backup
pg_restore -U postgres -W -d banco30 c:\bd\backup.tar
-- "-d" conecta-se ao banco especificado e restaura as tabelas


banco30=# \dt
         List of relations
 Schema | Name  | Type  |  Owner
--------+-------+-------+----------
 public | teste | table | postgres
(1 row)


banco30=# select * from teste;
 id
-----
 100
 101
 102
 103
 105
 106
 107
(7 rows)


create table empregado(
nome varchar (50) not null,
salario decimal (15,2) );

create table empregado_audit(
 operacao char(1) not null,
 usuario varchar (50) not null,
 data timestamp not null,
 nome varchar (50) not null,
 salario decimal (15,2) ); 

create or replace function processo_audit() returns
 trigger as 
 $$
 begin
  if (TG_OP='DELETE') then
   insert into empregado_audit select 'D',
	user,now(),OLD.*;
   return OLD;
  elseif (TG_OP='UPDATE') then
   insert into empregado_audit select 'U', 
	user,now(),NEW.*;
   return NEW;
  elseif (TG_OP='INSERT') then
   insert into empregado_audit select 'I', 
	user,now(),NEW.*;
   return NEW;
  end if;
   return null;
 end;
 $$ 
language plpgsql;


create trigger emp_audit 
 after insert or update or delete on empregado
 for each row execute procedure processo_audit();

insert into empregado values ('lu',3000);
insert into empregado values ('sergio',10000);
insert into empregado values ('rodrigo',10000);
insert into empregado values ('marcelo',2500);

update empregado set salario=4000 where nome='marcelo';

delete from empregado where nome='marcelo';

<?xml version="1.0" encoding="UTF-8"?>
<dados>
   <produto>
      <id>10</id>
      <nome>hiphone</nome>
      <preco>400</preco>
      <quantidade>1</quantidade>
   </produto>
   <produto>
      <id>11</id>
      <nome>hipad</nome>
      <preco>400</preco>
      <quantidade>1</quantidade>
   </produto>
   <produto>
      <id>12</id>
      <nome>xanxung</nome>
      <preco>500</preco>
      <quantidade>1</quantidade>
   </produto>
</dados>

drop database if exists banco6;
create database banco6;
use banco6;

-- drop table if exists produto;

create table produto(codigo int primary key, 
    nomeProduto varchar (35),
    preco double,
    quantidade int);


load Data local infile 'C:\\bd\\produto.xml'
into table produto
character set 'utf8'
lines starting by '<produto>' terminated by '</produto>'
(@produto)
set codigo = extractvalue(@produto,'id'),
 nomeProduto= extractvalue(@produto,'nome'),
 preco = extractvalue(@produto,'preco'),
 quantidade = extractvalue(@produto,'quantidade');

MariaDB [banco6]> select * from produto;
+--------+-------------+-------+------------+
| codigo | nomeProduto | preco | quantidade |
+--------+-------------+-------+------------+
|     10 | hiphone     |   400 |          1 |
|     11 | hipad       |   400 |          1 |
|     12 | xanxung     |   500 |          1 |
+--------+-------------+-------+------------+
3 rows in set (0.000 sec)



```

<!--
<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>




