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