Re: [GENERAL] Triggers et clefs primaires

From: Guillaume Lelarge <guillaume(at)lelarge(dot)info>
To: Samuel ROZE <samuel(dot)roze(at)aliceadsl(dot)fr>
Cc: pgsql-fr-generale(at)postgresql(dot)org, Daniel Verite <daniel(at)manitou-mail(dot)org>
Subject: Re: [GENERAL] Triggers et clefs primaires
Date: 2008-08-26 09:26:28
Message-ID: 48B3CC44.1020401@lelarge.info
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-fr-generale

Samuel ROZE a écrit :
> Le mardi 26 août 2008 à 11:06 +0200, Daniel Verite a écrit :
>> Samuel ROZE wrote:
>>
>>> -> 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 ?
>> Oui, le 1er INSERT n'ayant pas été COMMITé, la ligne dans table1
>> n'existe pas encore du point de vue de la connexion qui fait le 2eme
>> INSERT.
>>
>> PS: pgsql-general(at)postgresql(dot)org est une liste anglophone, il faudrait
>> plutôt utiliser pgsql-fr-generale(at)postgresql(dot)org pour des messages en
>> français.
>>
>
> Nous voilà sur la bonne alors ! :)
>
> Donc, si j'ai bien compris, c'est impossible d'ajouter des
> enregistrements comme je le fait..
> Je trouve ça un peu bizare étant donné que le trigger est un trigger
> d'après enregistrement.
>

Je ne trouve pas cela bizarre. Les triggers avant et après font partie
de la transaction (implicite). Si le trigger échoue, l'action doit aussi
échouer. Mais pour savoir s'il échoue, il faut d'abord l'exécuter.

Le problème de ton système, en dehors de passer par autant de fonctions
et de langages de procédures, c'est qu'il va demander deux connexions à
la base de données. S'il n'utilisait qu'une seule connexion, cela
fonctionnerait.

> Il y a-t-il un moyen pour forcer PostgreSQL à "commité" ?
>

Non.

Y a-t-il un moyen pour que ton trigger fonctionne ?

Oui, réécris la procédure PL/php en PL/pgsql.

--
Guillaume.
http://www.postgresqlfr.org
http://dalibo.com

In response to

Browse pgsql-fr-generale by date

  From Date Subject
Next Message BPascal 2008-08-27 07:47:07 postgresql php et Insert
Previous Message Cédric Villemain 2008-08-26 09:19:21 Re: [GENERAL] Triggers et clefs primaires