IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PostgreSQL Discussion :

Triggers et clefs étrangères


Sujet :

PostgreSQL

  1. #1
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 22
    Par défaut Triggers et clefs étrangères
    Bonjour,

    J'ai un trigger (AFTER FOR EACH ROW) sur une table qui à chaque fois qu'il y a un enregistrement sur cette même table, exécute une fonction pgplsql qui éxécute elle-même une fonction PL/sh qui exécute un script PHP.

    Dans ce script PHP, je créer 10 enregistrements dans une autre tables où il y a un champ qui fait référence à la table sur laquelle il y a le trigger.

    Exemple d'application:

    INSERT INTO table1 (champ2, champ3) VALUES ('salut', 'samuel');
    (la table1 as un champ1 (alias id) qui est un serial en clef primaire)

    -> La fonction pgplsql (appelée par le trigger) récupère l'ID de l'enregistrement (NEW.id), le donne à la fonction pl/sh qui le donne au script PHP.

    J'enregistre des données dans la table2, avec un champ qui fait référence à l'id de la table1. Des données avec comme id de table1, l'ID qui vient juste d'être enregistré...

    ERREUR de clef étrangère...

    Note: Les deux tables sont dans deux schémas différents, avec deux utilisateurs différents. Cependant, aucun problème de droit a priori (GRANT USAGE ON SCHEMA... GRANT REFERENCES ON TABLES...)

    Avez-vous une idée ?

    Merci à vous,
    Cordialement, Samuel.

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 998
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 998
    Billets dans le blog
    6
    Par défaut
    Dans un trigger vous êtes dans une transaction. Or en appelant votre chaine de programme dont l'un est externe à cette transaction car non SQL, vous tentez d'accéder à des données qui ne sont pas encore validée. En effet le COMMIT n'a lieu qu'après que le trigger ait produit son effet.

    C'est d'ailleurs une totale hérésie d'un point de vue transactionnelle comme au niveau des performances de faire un tel enchaînement :
    1) for each row
    2) exécute une fonction pgplsql
    3) éxécute elle-même une fonction PL/sh
    4) exécute un script PHP.
    !!!
    Pourquoi pas aussi lui faire faire le café et la vaisselle ?
    Le code dans un trigger participe à l'atomicité du traitement... votre script PHP contribue t-il franchement à l'atomicité de l'unité de code ???

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. Cascade de clefs étrangères et triggers
    Par CinePhil dans le forum Langage SQL
    Réponses: 3
    Dernier message: 23/11/2012, 13h28
  2. [trigger] pour supprimer une clef étrangère
    Par Espinosa dans le forum Requêtes
    Réponses: 9
    Dernier message: 03/06/2010, 22h04
  3. 5 clefs étrangères?
    Par P@t dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 15/05/2005, 16h52
  4. [wamp5] [Relations] Clefs étrangéres
    Par nebule dans le forum Outils
    Réponses: 6
    Dernier message: 05/10/2004, 11h17
  5. [SQL SERVER 2000] Problème clef étrangére
    Par Tankian dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 11/05/2004, 10h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo