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