Vous n'êtes pas identifié(e).

#1 26/07/2017 16:31:50

Clause Returning dans une règle d'insertion sur une vue avec jointures

Bonjour à toutes et tous,

je n'ai pas trouvé de sujet correspondant sur le forum et je cale devant l'aide : https://docs.postgresql.fr/9.2/rules-update.html

J'ai créé une vue avec des jointures sur des tables de référence, sur laquelle je fais des INSERT par l'intermédiaire d'une règle. J'ai besoin d'utiliser la clause RETURNING sur ma règle mais je n'arrive pas à la faire fonctionner.
dans cette phrase de la documentation :

vous devrez faire en sorte que les règles incluent les clauses RETURNING qui calcule les lignes de la vue

je ne comprends pas si je dois retourner l'ensemble des champs de la table, l'ensemble des champs de la vue, un mélange des deux...

J'espère que mon explication est claire...

Merci d'avance pour votre attention.

CREATE OR REPLACE VIEW habitats_naturels.saisie_habitats_avec_ref AS 
 SELECT saisie_habitat.id_obs_habitat,
    saisie_habitat.code_site_n2000,
    saisie_habitat.exploitant,
    saisie_habitat.num_parcelle,
    saisie_habitat.remarque,
    saisie_habitat.facies,
    saisie_habitat.hab_1,
    saisie_habitat.rec_hab_1,
    saisie_habitat.hab_2,
    saisie_habitat.rec_hab_2,
    saisie_habitat.hab_3,
    saisie_habitat.rec_hab_3,
    saisie_habitat.hab_4,
    saisie_habitat.rec_hab_4,
    saisie_habitat.hab_5,
    saisie_habitat.rec_hab_5,
    habitat_1.cd_cb AS "1_cd_cb",
    habitat_2.cd_cb AS "2_cd_cb",
    habitat_3.cd_cb AS "3_cd_cb",
    habitat_4.cd_cb AS "4_cd_cb",
    habitat_5.cd_cb AS "5_cd_cb"
   FROM habitats_naturels.saisie_habitat
     LEFT JOIN habitats_naturels.referentiel_habitats habitat_1 ON saisie_habitat.hab_1 = habitat_1.id
     LEFT JOIN habitats_naturels.referentiel_habitats habitat_2 ON saisie_habitat.hab_2 = habitat_2.id
     LEFT JOIN habitats_naturels.referentiel_habitats habitat_3 ON saisie_habitat.hab_3 = habitat_3.id
     LEFT JOIN habitats_naturels.referentiel_habitats habitat_4 ON saisie_habitat.hab_4 = habitat_4.id
     LEFT JOIN habitats_naturels.referentiel_habitats habitat_5 ON saisie_habitat.hab_5 = habitat_5.id;

la règle ON INSERT :

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

Hors ligne

#2 26/07/2017 16:56:49

Re : Clause Returning dans une règle d'insertion sur une vue avec jointures

J'ai trouvé cette discussion sur le même sujet http://forums.postgresql.fr/viewtopic.php?id=4103

Vous confirmez qu'il vaut mieux que je remplace ma règle ON INSERT par un trigger ?

Merci d'avance.

Hors ligne

#3 26/07/2017 17:49:39

Marc Cousin
Membre

Re : Clause Returning dans une règle d'insertion sur une vue avec jointures

Il vaut mieux oui. Les rules, c'est la meilleure façon d'avoir des ennuis smile


Marc.

Hors ligne

#4 27/07/2017 07:54:03

Re : Clause Returning dans une règle d'insertion sur une vue avec jointures

Merci pour votre réponse. Je m'en vias transformer mes règles en triggers.

Bonne journée.

Hors ligne

#5 27/07/2017 11:23:45

Re : Clause Returning dans une règle d'insertion sur une vue avec jointures

Hors ligne

Pied de page des forums