Thread: plpython trigger code is wrong (Re: [GENERAL] Potential bug -- script that drops postgres server)
plpython trigger code is wrong (Re: [GENERAL] Potential bug -- script that drops postgres server)
From
Tom Lane
Date:
Lance Thomas <LThomas@DevIS.com> writes: > Below is something that may be of interest -- a short, 7-statement script > that seems to drop my postgres server. It appears that the plpython trigger implementation assumes that any given procedure will be used as a trigger for only one relation. The reason it crashes is it's trying to use the rowtype info of the relation it was first compiled for with the other relation. Probably the easiest fix is to include the relation OID as part of the Python name of a trigger procedure, so that a separate copy is compiled for each relation the procedure is used with. Any plpython users want to step forward and fix this? I have other things on my plate ... regards, tom lane PS: I haven't tested, but I wonder whether any of our other PLs have the same bug.
Re: plpython trigger code is wrong (Re: [GENERAL] Potential bug -- script that drops postgres server)
From
Bradley McLean
Date:
* Tom Lane (tgl@sss.pgh.pa.us) [030214 19:35]: > Lance Thomas <LThomas@DevIS.com> writes: > > Below is something that may be of interest -- a short, 7-statement script > > that seems to drop my postgres server. > > It appears that the plpython trigger implementation assumes that any > given procedure will be used as a trigger for only one relation. The > reason it crashes is it's trying to use the rowtype info of the relation > it was first compiled for with the other relation. > > Probably the easiest fix is to include the relation OID as part of the > Python name of a trigger procedure, so that a separate copy is compiled > for each relation the procedure is used with. Interesting idea. I had been taking the approach of applying the cache to just the python compilation, and not the rowtype info. This has a substantial performance penalty, which I'd been addressing by eliminating some unneeded parameter processing that doesn't apply in the trigger case, and considering a separate cache for each rowtype. > Any plpython users want to step forward and fix this? I have other > things on my plate ... I'm looking at the bug right now. Patch in a day or so. -Brad