Thread: Triggers et clefs primaires

Triggers et clefs primaires

From
Samuel ROZE
Date:
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.



Re: Triggers et clefs primaires

From
Guillaume Lelarge
Date:
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

Re: Triggers et clefs primaires

From
Samuel ROZE
Date:
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 :)