Re: A row-level trigger on a partitioned table is not created on asub-partition created later

Поиск
Список
Период
Сортировка
От Amit Langote
Тема Re: A row-level trigger on a partitioned table is not created on asub-partition created later
Дата
Msg-id CA+HiwqFM2=i+uHB9o4OkLbE2S3sjPHoVe2wXuAD1GLJ4+Pk9eg@mail.gmail.com
обсуждение исходный текст
Ответ на A row-level trigger on a partitioned table is not created on asub-partition created later  (Petr Fedorov <petr.fedorov@phystech.edu>)
Ответы Re: A row-level trigger on a partitioned table is not created on asub-partition created later  (Alvaro Herrera <alvherre@2ndquadrant.com>)
Список pgsql-bugs
Hello,

On Thu, Dec 5, 2019 at 4:24 PM Petr Fedorov <petr.fedorov@phystech.edu> wrote:
> create table level1 (id1 integer not null, id2 integer not null, id3 integer not null) partition by list (id2);
> create or replace function trigger_func() returns trigger language 'plpgsql' as $body$ begin raise exception 'fired';
returnnull; end $body$;
 
> create trigger test_trigger after insert on level1 for each row execute procedure trigger_func();
>
> create table level2 partition of level1 for values in (1) partition by list (id3);
> create table level3 partition of level2 for values in (1);
>
> insert into level1 values (1,1,1); -- row inserted
>
> psql \d+ shows that level3 does not have row level trigger while level2 and level1 have.

That is a bug. :(

Alvaro, isn't marking triggers cloned to partitions "internal"
unnecessary?  Because the cloned trigger on partition (level2 in above
example) is marked internal, CloneRowTriggersToPartition() skips it
when called on a sub-partition (level3 in above example).

Attached patch to fix that passes make check, although a bit surprised
that it does.

Thanks,
Amit

Вложения

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

Предыдущее
От: Amit Langote
Дата:
Сообщение: Re: BUG #16163: Seq scan through all the partitions on a partitionedtable when joined small, dictionary table.
Следующее
От: Kyotaro Horiguchi
Дата:
Сообщение: Re: BUG #16161: pg_ctl stop fails sometimes (on Windows)