QGIS 2.18 : saisir sur une vue PostgreSQL

Avec l'arrivée de QGIS 2.18 j'ai été confronté à ceci :
http://osgeo-org.1560.x6.nabble.com/QGIS-Developer-REGRESSION-Error-inserting-in-a-PostGIS-view-td5320202.html

Ce problème est remonté par QGIS avec le message d'erreur suivant :
ERROR: cannot perform INSERT RETURNING on relation xxx
HINT: You need an unconditional ON INSERT DO INSTEAD rule with a RETURNING clause.

J'ai appris qu'il est déconseiller d'utiliser les règles pour écrire sur des vues et de favoriser les trigger :
http://forums.postgresql.fr/viewtopic.php?id=4330

J'ai donc réécrit ma règle :

CREATE OR REPLACE RULE rule_insert AS
ON INSERT TO habitats_naturels.saisie_habitats_avec_ref 
DO INSTEAD INSERT INTO habitats_naturels.saisie_habitat (
	id_obs_habitat, code_site_n2000, exploitant, num_parcelle, remarque, facies, hab_1, rec_hab_1, 
	hab_2, rec_hab_2, hab_3, rec_hab_3, hab_4, rec_hab_4, hab_5, rec_hab_5, date_obs, date_imprecise, 
	etat_de_conservation, dynamique, origine_evolution, preconisation_agro, preconiastion_maet, 
	interet_pat, id_observateur, id_etude, identifiant, geom, especes, date_saisie
	)
VALUES (
	new.id_obs_habitat, new.code_site_n2000, new.exploitant, new.num_parcelle, new.remarque, new.facies, 
	new.hab_1, new.rec_hab_1, new.hab_2, new.rec_hab_2, new.hab_3, new.rec_hab_3, new.hab_4, new.rec_hab_4, 
	new.hab_5, new.rec_hab_5, new.date_obs, new.date_imprecise, COALESCE(new.etat_de_conservation, 'Indéterminé'::text), 
	new.dynamique, new.origine_evolution, new.preconisation_agro, new.preconiastion_maet, new.interet_pat, 
	new.id_observateur, new.id_etude, new.identifiant, new.geom, new.especes, new.date_saisie
	);

en trigger et ça fonctionne parfaitement :

 CREATE OR REPLACE FUNCTION habitats_naturels.saisie_habitat_insert()
RETURNS trigger AS
$BODY$
BEGIN
	INSERT INTO habitats_naturels.saisie_habitat (
		id_obs_habitat, code_site_n2000, exploitant, num_parcelle, remarque, facies, hab_1, rec_hab_1, hab_2, 
		rec_hab_2, hab_3, rec_hab_3, hab_4, rec_hab_4, hab_5, rec_hab_5, date_obs, date_imprecise, 
		etat_de_conservation, dynamique, origine_evolution, preconisation_agro, preconiastion_maet, interet_pat, 
		id_observateur, id_etude, identifiant, geom, especes, date_saisie
	)
	VALUES (
		new.id_obs_habitat, new.code_site_n2000, new.exploitant, new.num_parcelle, new.remarque, new.facies, 
		new.hab_1, new.rec_hab_1, new.hab_2, new.rec_hab_2, new.hab_3, new.rec_hab_3, new.hab_4, new.rec_hab_4, 
		new.hab_5, new.rec_hab_5, new.date_obs, new.date_imprecise, COALESCE(new.etat_de_conservation, 'Indéterminé'::text), 
		new.dynamique, new.origine_evolution, new.preconisation_agro, new.preconiastion_maet, new.interet_pat, 
		new.id_observateur, new.id_etude, new.identifiant, new.geom, new.especes, new.date_saisie
		);
	RETURN NEW;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
 
CREATE TRIGGER saisie_habitat_ON_INSERT 
INSTEAD OF INSERT ON habitats_naturels.saisie_habitats_avec_ref
FOR EACH ROW EXECUTE PROCEDURE habitats_naturels.saisie_habitat_insert();

Tags: 

Les contenus des sites sig.cenlr.org et si.cenlr.org sont mis à disposition selon
les termes de la licence Creative Commons Attribution 3.0 France

Licence Creative Commons