Trigger funktion driller med INSERT i QGIS

Integration med QGIS
User avatar
Roman Varinsky
Posts: 32
Joined: Fri 11. Mar 2016 09:47
Location: Munkebo
Contact:

Trigger funktion driller med INSERT i QGIS

Post by Roman Varinsky »

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:

Code: Select all

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
You do not have the required permissions to view the files attached to this post.
GIS-koordinator
Kerteminde Kommune