Re: BUG #17633: Define rule on views which do insert to another relation trigger cache lookup failed error.

Richard Guo <guofenglinux@gmail.com>

From: Richard Guo <guofenglinux@gmail.com>
To: jiye_sw@126.com, pgsql-bugs@lists.postgresql.org
Date: 2022-10-11T10:05:09Z
Lists: pgsql-bugs
On Tue, Oct 11, 2022 at 5:48 PM PG Bug reporting form <
noreply@postgresql.org> wrote:

> Just execute as follow sql:
>
> drop view v1;
> drop table t1;
> drop table t2;
> create table t1(i int, j int);
> create table t2(a int, b int, c int, d int);
> create or replace rule t1_r as on insert to t1 do also insert into t2(c,d)
> values (new.i, new.j);
> insert into t1 values (1,default);
> insert into t1 values (1,default),(2, default);
> -- create rule on t1 directly no issue
> drop rule t1_r on t1;
> create view v1 as select * from t1;
> — create rule on view query t1 will trigger this issue
> create or replace rule v1_r as on insert to v1 do also insert into t2(c,d)
> values (new.i, new.j);
> insert into v1 values (1,default);
> -- must multi values.
> insert into v1 values (1,default),(2, default);
> => it will trigger cache lookup failed for type.


Thanks for the report! I can reproduce this issue.

Apparently there is something wrong when we process the DEFAULT marker
in rewriteValuesRTE, because the contents inside att_tup are invalid.

    p /x att_tup->atttypid
    $13 = 0x7f7f7f7f

Thanks
Richard

Commits

  1. Yet further fixes for multi-row VALUES lists for updatable views.