cache lookup failed from empty plpythonu function

Поиск
Список
Период
Сортировка
От Sandro Santilli
Тема cache lookup failed from empty plpythonu function
Дата
Msg-id 20130124140336.GJ3157@gnash
обсуждение исходный текст
Ответы Re: cache lookup failed from empty plpythonu function  (Andres Freund <andres@2ndquadrant.com>)
Список 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;

В списке pgsql-bugs по дате отправления:

Предыдущее
От: Alvaro Herrera
Дата:
Сообщение: Re: Re: BUG #7748: "drop owned by" fails with error message: "unrecognized object class: 1262"
Следующее
От: Andres Freund
Дата:
Сообщение: Re: cache lookup failed from empty plpythonu function