Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
#1 26/07/2017 16:31:50
- Mathieu BOSSAERT
- Membre
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);
Mathieu BOSSAERT
Conservatoire des Espaces Naturels du Languedoc-Roussillon
Responsable du Système d'Information
Hors ligne
#2 26/07/2017 16:56:49
- Mathieu BOSSAERT
- Membre
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.
Mathieu BOSSAERT
Conservatoire des Espaces Naturels du Languedoc-Roussillon
Responsable du Système d'Information
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
Marc.
Hors ligne
#4 27/07/2017 07:54:03
- Mathieu BOSSAERT
- Membre
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.
Mathieu BOSSAERT
Conservatoire des Espaces Naturels du Languedoc-Roussillon
Responsable du Système d'Information
Hors ligne
#5 27/07/2017 11:23:45
- Mathieu BOSSAERT
- Membre
Re : Clause Returning dans une règle d'insertion sur une vue avec jointures
C'est parfait merci !
Mathieu BOSSAERT
Conservatoire des Espaces Naturels du Languedoc-Roussillon
Responsable du Système d'Information
Hors ligne