<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 é capacitar o aluno a entrar no mercado de trabalho executando as atividades primordiais que são solicitadas no desenvolvimento, manutenção, ou atualização de bancos de dados dos mais diferentes tipos de sistemas.</p>
<p>Focamos na execução, e não em criação de diagramas - atividade essa que é 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 é gratuita e de fácil utilização - entretanto, todo o nosso conteúdo pode ser aplicado em qualquer Gerenciador de Bancos de Dados Relacionais, apenas com algumas mínimas diferenç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ão com um banco e abrir conexã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çã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) é uma recomendação da W3C para gerar linguagens de marcação para necessidades especiais.</p>
<p>É um dos subtipos da SGML (acrônimo de Standard Generalized Markup Language ou Linguagem Padronizada de Marcação Genérica) capaz de descrever diversos tipos de dados. Seu propósito principal é a facilidade de compartilhamento de informações por intermé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>

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