Crear, Modificar i Esborrar Views i Rules En Postgres
De FFAWiki
La revisió el 12:36, 14 març 2021 per Mayola (discussió | contribucions)
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;