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();

results matching ""

    No results matching ""