Trigger funktion driller med INSERT i QGIS

Integration med QGIS
Brugeravatar
Roman Varinsky
Indlæg: 32
Tilmeldt: fre 11. mar 2016 09:47
Geografisk sted: Munkebo
Kontakt:

Trigger funktion driller med INSERT i QGIS

Indlæg af Roman Varinsky » fre 27. mar 2020 07:58

Jeg er i gang med at optimere vores Postgres database og jeg bruger mange gode idéer fra FKG-databasen. Jeg har allerede en del basis-tabeller med tilhørende kode-tabeller, der oversætter koderne i tilsvarende views. Jeg vil gerne udstille views'ene til mine brugere.

De er ikke i sig selv redigerbare, men det kan man løse ved en trigger funktion á la denne:

Kode: Vælg alt

CREATE OR REPLACE FUNCTION administration.skoler_dagtilbud_trg()
    RETURNS trigger AS $$
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
    BEGIN                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
       IF (TG_OP = 'DELETE') THEN                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
                      DELETE FROM administration.skoler_dagtilbud where ogc_fid=OLD.ogc_fid;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
                      RETURN OLD;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
       ELSIF (TG_OP = 'UPDATE') THEN                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
                      UPDATE administration.skoler_dagtilbud set udd_institution_type_kode=NEW.udd_institution_type_kode, ejerstatus_kode=NEW.ejerstatus_kode, udd_institution_navn=NEW.udd_institution_navn, starttrin_kode=NEW.starttrin_kode, sluttrin_kode=NEW.sluttrin_kode, link=NEW.link, geometry=NEW.geometry, senest_opdateret=NEW.senest_opdateret, bruger_id=NEW.bruger_id                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
                      WHERE ogc_fid=OLD.ogc_fid;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
                      RETURN NEW;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             

       ELSIF (TG_OP = 'INSERT') THEN                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
                      NEW.ogc_fid:=nextval('administration.skoler_dagtilbud_id_seq'::regclass);
                      INSERT INTO administration.skoler_dagtilbud VALUES (NEW.ogc_fid,NEW.udd_institution_type_kode, NEW.ejerstatus_kode, NEW.udd_institution_navn, NEW.starttrin_kode, NEW.sluttrin_kode, NEW.link, NEW.geometry, NEW.senest_opdateret, NEW.bruger_id);                                                                                                                                                                                                                                                                                                                                                                                                             
                      RETURN NEW;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
       END IF;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
   END;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
 $$ LANGUAGE plpgsql;
 
 
 CREATE TRIGGER skoler_dagtilbud_v_trg_iud
    INSTEAD OF INSERT OR DELETE OR UPDATE 
    ON administration.skoler_dagtilbud_v
    FOR EACH ROW
    EXECUTE PROCEDURE administration.skoler_dagtilbud_trg(); 

 
Alle funktionerne virker egentlig ok, men jeg har udfordring med INSERT-delen, da QGIS ikke lige godtager ogc_fid-sequencen fra tabelen. Med denne opsætning kan jeg godt tilføje et nyt objekt, men skal manuelt tilføje dets ogc_fid. Dette ville jeg gerne tage fra tabellens sequence. Jeg har googlet, tjekket Postgres-undervisningen og opsætningen af FKG-triggers samt prøvet forskelligt, men kan ikke lige knække den.
qgis INSERT.jpg
Har nogen måske haft den samme udfordring og har en idé?

Mvh Roman
Du har ikke de nødvendige tilladelser til at se vedhæftede filer i dette indlæg.
0 x
GIS-koordinator
Kerteminde Kommune

Besvar

Social Media