Thread: Triggers et clefs primaires
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.
Samuel ROZE a écrit : > [...] > 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... :( > The row on table1 is inserted at the end of the trigger. > 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. > This is an english channel. If you want a french one, try pgsql-fr-generale (http://archives.postgresql.org/pgsql-fr-generale/). -- Guillaume. http://www.postgresqlfr.org http://dalibo.com
Le mardi 26 août 2008 à 11:01 +0200, Guillaume Lelarge a écrit : > Samuel ROZE a écrit : > > [...] > > 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... :( > > > > The row on table1 is inserted at the end of the trigger. > Yes but... my trigger is a AFTER INSERT trigger... So, data might be insered... no? > > 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. > > > > This is an english channel. If you want a french one, try > pgsql-fr-generale (http://archives.postgresql.org/pgsql-fr-generale/). > Okay :)