1) Instale o PostgreSQL no seu computador ou em uma máquina virtual. Versões recomendadas: 9.4, 9.5 ou 9.6. Sistema operacional recomendado: Linux.
2) Baixe o arquivo compras.db e converta este banco de dados de SQLite para PostgreSQL em um banco novo chamado compras. Neste banco, rode as consultas SQL que são as respostas dos exercícios 1 a 12 da Lista 3.3.
3) Baixe o arquivo escola.db e converta este banco de dados de SQLite para PostgreSQL em um banco novo chamado escola. Neste banco, rode as consultas SQL que são as respostas dos exercícios 13 a 24 da Lista 3.3.
4) Crie um banco de dados chamado employees. Baixe o arquivo employees.dmp e use pg_restore para restaurar nesse banco de dados.
5) Crie um script .sh ou .bat para realizar o backup do banco employees com pg_dump. Agende o backup para ser feito todos os dias às 01:00 hrs, e devem ser mantidas cópias dos últimos 30 dias.
6) Execute a consulta abaixo no banco employees:
select dept_name from departments
Usando nesting, converta os valores retornados em uma única string com os valores separados por vírgula.
7) Instale o pg_activity.
8) Instale o pgbench. Crie um banco de dados com 1 milhão de registros na maior tabela. Rode um experimento com 50 conexões simultâneas e 150 transações por conexão.
9) Instale o pgbadger e rode-o. Visualise as consultas do experimento do exercício anterior na página web gerada.
10) Reescreva a consulta abaixo usando CTEs:
select s.from_date,
s.to_date,
s.salary
from departments d
inner join dept_emp de
on de.dept_no = d.dept_no
inner join employees e
on e.emp_no = de.emp_no
inner join salaries s
on s.emp_no = e.emp_no
where d.dept_name = 'Finance'
and e.first_name = 'Georg'
and e.last_name = 'Matzke'
order by s.from_date
11) Dada a consulta do exercício anterior, utilize explain para analisar o plano de execução. Responsa às seguintes perguntas:
12) Crie uma tabela chamada aluno da seguinte maneira:
create table alunos
(
id serial,
nome text,
sexo char,
nasc timestamp
)
Crie uma função em linguagem SQL chamada fnc_insere_aluno, que recebe como parâmetro o nome, o sexo e a data de nascimento. Essa função deve retornar o código do aluno inserido.
13) Altere a função do exercício anterior para ser em linguagem PL/SQL.
14) Crie um procedimento em linguagem PL/SQL chamado prc_remove_aluno.
15) Crie uma função em linguagem PL/SQL chamada fnc_remove_aluno, que recebe como parâmetro o código do aluno. A função deve retornar 0, caso o aluno tenha sido removido, e -1, caso o código passado como parâmetro não exista na tabela de alunos.
16) Crie uma função em linguagem PL/SQL chamada fnc_altera_aluno, que recebe como parâmetro o código do aluno, o novo nome, o novo sexo e a nova data de nascimento. A função deve retornar 0, caso o aluno tenha sido alterado, e -1, caso o código passado como parâmetro não exista na tabela de alunos.
17) Cria uma função em linguagem PL/SQL chamada fnc_idade_aluno, que recebe como parâmetro o código do aluno. A função deve retornar a idade do aluno (integer), ou -1, caso o código passado como parâmetro não exista na tabela de alunos.
18) Conforme vimos em aula, é possível extrair os milisegundos de um timestamp, vide exemplo:
select ((extract(second from '12/11/2016 10:00:30.900150'::timestamp) - floor(extract(second from '12/11/2016 10:00:30.900150'::timestamp))) * 1000) as a
Escreva uma função em linguagem PL/SQL chamada fnc_milisegundos, que recebe como parâmetro uma string representando um timestamp e retorna o valor real em milisegundos.