Crear, Modificar i Esborrar Views i Rules En Postgres: diferència entre les revisions

De FFAWiki
(Es crea la pàgina amb «===Postgres=== ===Inserir Dades=== :Composició: ::INSERT INTO nom_taula [ ( nom_columna [, ...] ) ] VALUES ( expressió); ::En cas de que es vulguin emplenar...».)
 
Cap resum de modificació
 
Línia 1: Línia 1:
===[[Postgres]]===
===[[Postgres]]===


===Inserir Dades===
 
===Crear VIsta===


:Composició:
:Composició:


::INSERT INTO nom_taula [ ( nom_columna [, ...] ) ] VALUES ( expressió);
::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;


::En cas de que es vulguin emplenar amb una consulta:
:::Creem una vista a on surt el nom de l'alumne i el curs el qual esta apuntat.


:::INSERT INTO nom_taula [ ( nom_columna [, ...] ) ] SELECT ...;
===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ó:
:Execució:


::En cas de que es vulguin emplenar tots els camps:
::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'''


:::INSERT INTO nom_taula VALUES ('11111111A', 'nom', '1/1/1999', 'DAM1');
::Composició:


::En cas de que es vulguin emplenar alguns camps:
:::CREATE RULE nom_rule AS {ON INSERT|ON UPDATE|ON DELETE|ON SELECT} TO nom_vista WHERE condicio_aplicacio DO INSTEAD(consulta1; consulta2; …);


:::INSERT INTO nom_taula (DNI, nom, data_naix) VALUES ('11111111A', 'nom', '1/1/1999');
:::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.


===Modificar Dades===
::::CREATE RULE nom_rule AS ON INSERT TO nom_vista DO INSTEAD NOTHING;


:Composició:
::Execució:


::UPDATE nom_taula SET col1=val1, col2=val2,... [WHERE <condició>];
:::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;


::UPDATE nom_taula SET col1=(SELECT exp1 FROM ...), SET col2,col3=(SELECT exp2,exp3 FROM ...),... [WHERE <condició>];
:::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););


:Execució:
:::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););


::UPDATE nom taula SET nom_columna='DAM1' WHERE data_naix='1/1/1999';
:::CREATE RULE ins_clients_linies2 AS ON INSERT TO clients_linies DO INSTEAD NOTHING;


===Borrar Dades===
:'''Borrar RULE'''


:Composició:
::Composició:


::DELETE FROM nom_taula [WHERE <condició>];
:::DROP RULE nom_rule TO nom_vista;


:Execució:
::Execució:


::DELETE FROM nom_taula WHERE nom_columna='DAM1';
:::DROP RULE ins_clients_linies TO clients_linies;

Revisió de 11:36, 14 març 2021

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;