Crear, Modificar i Esborrar Views i Rules En Postgres

De FFAWiki
La revisió el 11:36, 14 març 2021 per Mayola (discussió | contribucions)
(dif.) ← Versió més antiga | Versió actual (dif.) | Versió més nova → (dif.)

Postgres

Crear VIsta

Composició:
CREATE VIEW nom_vista [(camp1, camp2...)] AS <sentència_select> [WITH [CASCADED| LOCAL] CHECK option];
WITH CASCADED CHECK OPTION: Control de la integritat de les consultes de modificació per aquesta vista i les seves dependències amb d’altres cistes (verifica la clàusula WHERE de la vista)
WITH LOCAL CHECK OPTION: Control de la integritat de les consultes de modificació només per aquesta vista (verifica la clàusula WHERE de la vista)
Execució:
CREATE VIEW nom AS SELECT a.nom, c.curs FROM alumnes a INNER JOIN curs c WHERE a.curs=c.id;
Creem una vista a on surt el nom de l'alumne i el curs el qual esta apuntat.

Modificar Vista

Composició:
ALTER VIEW nom_vista [(camp1, camp2, …)] AS <sentència_select>;
ALTER VIEW nom_vista ALTER [COLUMN] nom_columna SET DEFAULT expressió;
ALTER VIEW nom_vista RENAME TO nou_nom_vista;
ALTER VIEW nom_vista SET SCHEMA nou_eschema;
ALTER VIEW nom_vista OWNER TO nou_propietari;
DROP VIEW nom_vista [CASCADE|RESTRICT];
Execució:
ALTER VIEW nom RENAME TO alumnes_i_curs

RULES

Crear RULE
Composició:
CREATE RULE nom_rule AS {ON INSERT|ON UPDATE|ON DELETE|ON SELECT} TO nom_vista WHERE condicio_aplicacio DO INSTEAD(consulta1; consulta2; …);
Execució:
CREATE VIEW clients_linies AS SELECT c.client_id, linia_id, nom, numero FROM client c INNER JOIN linies l ON c.client_id=l.client_id;
Crear RULE
Composició:
CREATE RULE nom_rule AS {ON INSERT|ON UPDATE|ON DELETE|ON SELECT} TO nom_vista WHERE condicio_aplicacio DO INSTEAD(consulta1; consulta2; …);
Sempre que creïs una rule has de crear una rule que digui que fer en cas que no complexi cap rule, no fer re.
CREATE RULE nom_rule AS ON INSERT TO nom_vista DO INSTEAD NOTHING;
Execució:
CREATE VIEW clients_linies AS SELECT c.client_id, linia_id, nom, numero FROM client c INNER JOIN linies l ON c.client_id=l.client_id;
CREATE RULE ins_clients_linies AS ON INSERT TO clients_linies WHERE NEW.client_id IS null DO INSTEAD(INSERT INTO clients (nom) VALUES (new.nom); INSERT INTO linies (client_id,numero) VALUES (currval(‘clients_seq’), NEW.numero););
CREATE RULE ins_clients_linies1 AS ON INSERT TO clients_linies WHERE NEW.client_id IS not null DO INSTEAD(INSERT INTO linies (client_id,numero) VALUES (NEW.client_id, NEW.numero););
CREATE RULE ins_clients_linies2 AS ON INSERT TO clients_linies DO INSTEAD NOTHING;
Borrar RULE
Composició:
DROP RULE nom_rule TO nom_vista;
Execució:
DROP RULE ins_clients_linies TO clients_linies;