Re: enable/disable broken for statement triggers on partitioned tables

Поиск
Список
Период
Сортировка
От Dmitry Koval
Тема Re: enable/disable broken for statement triggers on partitioned tables
Дата
Msg-id ea25d7d5-0454-8d09-9936-12ee9bddf942@postgrespro.ru
обсуждение исходный текст
Ответ на Re: enable/disable broken for statement triggers on partitioned tables  (Amit Langote <amitlangote09@gmail.com>)
Ответы Re: enable/disable broken for statement triggers on partitioned tables  (Amit Langote <amitlangote09@gmail.com>)
Список pgsql-hackers
Hi!

I've looked through the code and everything looks good.
But there is one thing I doubt.
Patch changes result of test:
----

create function trig_nothing() returns trigger language plpgsql
   as $$ begin return null; end $$;
create table parent (a int) partition by list (a);
create table child1 partition of parent for values in (1);

create trigger tg after insert on parent
   for each row execute procedure trig_nothing();
select tgrelid::regclass, tgname, tgenabled from pg_trigger
   where tgrelid in ('parent'::regclass, 'child1'::regclass)
   order by tgrelid::regclass::text;
alter table only parent enable always trigger tg; -- no recursion
select tgrelid::regclass, tgname, tgenabled from pg_trigger
   where tgrelid in ('parent'::regclass, 'child1'::regclass)
   order by tgrelid::regclass::text;
alter table parent enable always trigger tg; -- recursion
select tgrelid::regclass, tgname, tgenabled from pg_trigger
   where tgrelid in ('parent'::regclass, 'child1'::regclass)
   order by tgrelid::regclass::text;

drop table parent, child1;
drop function trig_nothing();

----
Results of vanilla + patch:
----
CREATE FUNCTION
CREATE TABLE
CREATE TABLE
CREATE TRIGGER
  tgrelid | tgname | tgenabled
---------+--------+-----------
  child1  | tg     | O
  parent  | tg     | O
(2 rows)

ALTER TABLE
  tgrelid | tgname | tgenabled
---------+--------+-----------
  child1  | tg     | O
  parent  | tg     | A
(2 rows)

ALTER TABLE
  tgrelid | tgname | tgenabled
---------+--------+-----------
  child1  | tg     | O
  parent  | tg     | A
(2 rows)

DROP TABLE
DROP FUNCTION

----
Results of vanilla:
----
CREATE FUNCTION
CREATE TABLE
CREATE TABLE
CREATE TRIGGER
  tgrelid | tgname | tgenabled
---------+--------+-----------
  child1  | tg     | O
  parent  | tg     | O
(2 rows)

ALTER TABLE
  tgrelid | tgname | tgenabled
---------+--------+-----------
  child1  | tg     | O
  parent  | tg     | A
(2 rows)

ALTER TABLE
  tgrelid | tgname | tgenabled
---------+--------+-----------
  child1  | tg     | A
  parent  | tg     | A
(2 rows)

DROP TABLE
DROP FUNCTION
----
The patch doesn't start recursion in case 'tgenabled' flag of parent 
table is not changes.
Probably vanilla result is more correct.

-- 
With best regards,
Dmitry Koval

Postgres Professional: http://postgrespro.com



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

Предыдущее
От: Justin Pryzby
Дата:
Сообщение: Re: pg15b2: large objects lost on upgrade
Следующее
От: Justin Pryzby
Дата:
Сообщение: Re: [PATCH] fix wait_event of pg_stat_activity in case of high amount of connections