Views
Views bruges når man ønsker at "indkapsle" SELECT-statements
CREATE VIEW legeplads.drivhus_vw AS
SELECT
*
FROM
kursus.bygning
WHERE
bygn_type = 'Drivhus';
SELECT
*
FROM
legeplads.drivhus_vw
Det er muligt at views kan fungere ligesom almindelige tabeller. Dvs. med INSERT, UPDATE og DELETE. Det implementeres vha. triggere.
Materialized VIEW
Materialized view anvendes når et view er langsomt pga mange data og stor processering i viewe. Et Materialized view persisterer data som på en tabel. Der kan lægges indexes på. Materialized views kan REFRESHES.
CREATE MATERIALIZED VIEW legeplads.drivhus_vw AS
SELECT
*
FROM
kursus.bygning
WHERE
bygn_type = 'Drivhus';
SELECT
*
FROM
legeplads.drivhus_vw;
REFRESH MATERIALIZED VIEW legeplads.drivhus_vw
Udvid basis tabeller med ekstra kolonner uden at kopiere/ændre tabellen
CREATE TABLE qgisdemo.skovoplysninger AS
SELECT fot_id FROM qgisdemo.skov;
ALTER TABLE qgisdemo.skovoplysninger ADD COLUMN skovnavn varchar(30);
SELECT * FROM qgisdemo.skovoplysninger LIMIT 20;
--Opretteet view hvortabellenmed skovnavnenejoinespåfot-data med skove
DROP VIEW IF EXISTS qgisdemo.skovemednavne;
CREATE VIEW qgisdemo.skovemednavne AS
SELECT
skov.ogc_fid,
skov.fot_id AS fot_id_skov,
skov.wkb_geometry,
skov.feat_type,skovoplysninger.fot_id,
skovoplysninger.skovnavn FROM qgisdemo.skovskov
LEFT JOIN qgisdemo.skovoplysningerskovoplysninger
ON (skov.fot_id= skovoplysninger.fot_id)
SELECT * FROM qgisdemo.skovemednavne LIMIT 20;
--Oprette en trigger-function som opdaterer oplysningerne i tabellen
CREATE OR REPLACE FUNCTION update_skovnavne()RETURNS TRIGGER
LANGUAGE plpgsql
AS $function$
BEGIN
IF TG_OP = 'UPDATE' THEN UPDATE qgisdemo.skovoplysninger SET skovnavn= NEW.skovnavn WHERE fot_id=NEW.fot_id_skov;
RETURN NEW;
END IF;
END;
$function$;
DROP TRIGGER IF EXISTS update_skovnavne_trig ON qgisdemo.skovemednavne;
CREATE TRIGGER update_skovnavne_trig
INSTEAD OF INSERT OR UPDATE ON qgisdemo.skovemednavne
FOR EACH ROW EXECUTE PROCEDURE update_skovnavne();