From: | Sandro Santilli <strk(at)keybit(dot)net> |
---|---|
To: | pgsql-bugs(at)postgresql(dot)org |
Cc: | andres(at)2ndquadrant(dot)com |
Subject: | cache lookup failed from empty plpythonu function |
Date: | 2013-01-24 14:03:36 |
Message-ID: | 20130124140336.GJ3157@gnash |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-bugs |
I've found a bug in plpythonu resulting in a "cache lookup" failure.
Here's the SQL to reproduce (thanks Andres):
CREATE EXTENSION plpythonu;
CREATE OR REPLACE FUNCTION t() RETURNS trigger AS 'pass' LANGUAGE 'plpythonu';
CREATE TABLE a();
CREATE TABLE b();
CREATE TRIGGER check_quota AFTER INSERT ON a FOR EACH ROW EXECUTE PROCEDURE t();
INSERT INTO a DEFAULT VALUES;
DROP TABLE a;
CREATE TRIGGER check_quota
AFTER INSERT ON b FOR EACH ROW EXECUTE PROCEDURE t();
INSERT INTO b DEFAULT VALUES;
--ERROR: cache lookup failed for relation 20200
--Time: 0.570 ms
-- cleanup with DROP TABLE b; DROP FUNCTION t();
Logs show:
ERROR: XX000: cache lookup failed for relation 3694414
LOCATION: PLy_procedure_argument_valid, plpython.c:1469
Andres (in IRC #postgresql) said:
<andres> hm, I think I see the problem. The caching there looks pretty
broken to me.
<andres> i.e. the caching doesn't work *at all* if a function is used
as a trigger for more than one table and this is just fallout
of that.
<andres> Looks like a typo to me, procedure_get should use the table's
oid instead of fn_oid when doing lookups in PLy_trigger_cache.
Tested on:
PostgreSQL 9.1.7 on x86_64-unknown-linux-gnu, compiled by gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3, 64-bit
It was probably also present in the stable version as of one year
ago ( see https://github.com/Vizzuality/cartodb/issues/173 )
--strk;
From | Date | Subject | |
---|---|---|---|
Next Message | Andres Freund | 2013-01-24 14:17:51 | Re: cache lookup failed from empty plpythonu function |
Previous Message | Andrew Dunstan | 2013-01-24 13:50:36 | Re: BUG #6510: A simple prompt is displayed using wrong charset |