Gerenciamento de views

Projeto de banco de dados

Lis Sulmont

Curriculum Manager

Criando visualizações mais complexas

  • Agregação: SUM(), AVG(), COUNT(), MIN(), MAX(), GROUP BY, etc.
  • Junção completa (FULL JOIN)
  • Condicionais: WHERE, HAVING, UNIQUE, NOT NULL, AND, OR,>,<, etc.
Projeto de banco de dados

Concedendo e cancelando o acesso a uma visualização

GRANT privilege(s) ou REVOKE privilege(s)

ON object

TO role ou FROM role

  • Privilégios: SELECT, INSERT, UPDATE, DELETE, etc.
  • Objetos: tabela, visualização, esquema, etc.
  • Funções: um usuário de banco de dados ou um grupo de usuários de banco de dados
Projeto de banco de dados

Exemplo de concessão e revogação

$$\nsql\nGRANT UPDATE ON ratings TO PUBLIC; \n\n$$\nsql\nREVOKE INSERT ON films FROM db_user;\n\n

Projeto de banco de dados

Atualizando uma visualização

UPDATE films SET kind = 'Dramatic' WHERE kind = 'Drama';

Nem todas as visualizações podem ser atualizadas.

  • A visualização é composta por uma tabela.
  • Não usa uma função de janela ou agregada
1 https://www.postgresql.org/docs/9.5/sql-update.html
Projeto de banco de dados

Inserindo em uma visualização

INSERT INTO films (code, title, did, date_prod, kind)
    VALUES ('T_601', 'Yojimbo', 106, '1961-06-16', 'Drama');

Nem todas as visualizações podem ser inseridas

1 https://www.postgresql.org/docs/9.5/sql-insert.html
Projeto de banco de dados

Inserindo em uma visualização

INSERT INTO films (code, title, did, date_prod, kind)
    VALUES ('T_601', 'Yojimbo', 106, '1961-06-16', 'Drama');

Nem todas as visualizações podem ser inseridas

Conclusão: evite mexer nos dados através das visualizações.

1 https://www.postgresql.org/docs/9.5/sql-insert.html
Projeto de banco de dados

Excluindo uma visualização

DROP VIEW view_name [ CASCADE | RESTRICT ];
  • RESTRICT (padrão): retorna um erro se houver objetos que dependem da visualização
  • CASCADE: elimina a visualização e qualquer objeto que dependa dessa visualização
Projeto de banco de dados

Redefinindo uma view

CREATE OR REPLACE VIEW view_name AS new_query
  • Se existir uma visualização com um view_name, ela será substituída.
  • new_query tem que gerar os mesmos nomes de colunas, ordem e tipos de dados que a consulta antiga
  • A saída da coluna pode ser diferente
  • Novas colunas podem ser adicionadas no final.

Se esses critérios não puderem ser atendidos, descarte a visualização existente e crie uma nova.

1 https://www.postgresql.org/docs/9.2/sql-createview.html
Projeto de banco de dados

Alterando uma visualização

ALTER VIEW [ IF EXISTS ] name ALTER [ COLUMN ] column_name SET DEFAULT expression
ALTER VIEW [ IF EXISTS ] name ALTER [ COLUMN ] column_name DROP DEFAULT
ALTER VIEW [ IF EXISTS ] name OWNER TO new_owner
ALTER VIEW [ IF EXISTS ] name RENAME TO new_name
ALTER VIEW [ IF EXISTS ] name SET SCHEMA new_schema
ALTER VIEW [ IF EXISTS ] name SET ( view_option_name [= view_option_value] [, ... ] )
ALTER VIEW [ IF EXISTS ] name RESET ( view_option_name [, ... ] )
1 https://www.postgresql.org/docs/9.2/sql-alterview.html
Projeto de banco de dados

Vamos praticar!

Projeto de banco de dados

Preparing Video For Download...