Обсуждение: BUG #2447: backend crashes when plpgsql functions are used in rules

Поиск
Список
Период
Сортировка

BUG #2447: backend crashes when plpgsql functions are used in rules

От
"michael crozier"
Дата:
The following bug has been logged online:

Bug reference:      2447
Logged by:          michael crozier
Email address:      crozierm@conducivetech.com
PostgreSQL version: 8.0.7 & 8.0.3
Operating system:   solaris 10 and linux
Description:        backend crashes when plpgsql functions are used in rules
Details:

Using a function invocation in the WHERE expression of a RULE causes the
backend to crash.

I could not reproduce the problem on 8.1-beta4/Linux, but could reproduce it
on 8.0.5/Solaris, 8.0.7/Solaris, and 8.0.3/Linux.

Here is an example that can cause the crash:


CREATE TABLE parent ( id integer primary key);

CREATE OR REPLACE FUNCTION rule_condition(parent_row parent )
RETURNS INTEGER AS
$$
BEGIN
  RETURN 0;
END;
$$ LANGUAGE 'plpgsql';

CREATE OR REPLACE RULE parent_rule AS
  ON INSERT TO parent
  WHERE 0=rule_condition(NEW)
  DO INSTEAD ();

Re: BUG #2447: backend crashes when plpgsql functions are used in rules

От
Tom Lane
Дата:
"michael crozier" <crozierm@conducivetech.com> writes:
> Using a function invocation in the WHERE expression of a RULE causes the
> backend to crash.

It's not the function, it's the whole-row Var (ie, unqualified "NEW")
that doesn't work.  Whole-row Vars in rules never worked at all before
8.0, and evidently they don't work in all contexts in 8.0 either :-(.

It's unlikely we'll try to make this actually work in 8.0, but I'll
look into erroring out cleanly instead of crashing.  Unfortunately
it's too late for 8.0.8 :-(

            regards, tom lane