Re: pg_restore with --disable-triggers discards ENABLE ALWAYS
От | Duncan Sands |
---|---|
Тема | Re: pg_restore with --disable-triggers discards ENABLE ALWAYS |
Дата | |
Msg-id | dd4e17f5-0c42-49ac-92e9-2db648bb55b9@deepbluecap.com обсуждение исходный текст |
Ответ на | Re: pg_restore with --disable-triggers discards ENABLE ALWAYS (Laurenz Albe <laurenz.albe@cybertec.at>) |
Список | pgsql-bugs |
Hi Laurenz, On 12/09/2024 22:02, Laurenz Albe wrote: > On Thu, 2024-09-12 at 10:27 +0200, Duncan Sands wrote: >> CREATE TABLE test_table(x int); >> CREATE FUNCTION test_function() RETURNS trigger AS $$ BEGIN RETURN NULL; END; $$ >> LANGUAGE plpgsql; >> CREATE TRIGGER test_trigger AFTER UPDATE ON test_table FOR EACH ROW EXECUTE >> FUNCTION test_function(); >> ALTER TABLE test_table ENABLE ALWAYS TRIGGER test_trigger; >> >> Checking the table: >> >> duncan=> \d test_table >> Table "public.test_table" >> Column | Type | Collation | Nullable | Default >> --------+---------+-----------+----------+--------- >> x | integer | | | >> Triggers firing always: >> test_trigger AFTER UPDATE ON test_table FOR EACH ROW EXECUTE FUNCTION >> test_function() >> >> ^ Observe "Triggers firing always". >> >> >> Now for the dump + restore: >> >> pg_dump -f dump.custom -Fc --table test_table >> pg_restore --data-only --disable-triggers --dbname duncan dump.custom >> >> Checking the table: >> >> duncan=> \d test_table >> Table "public.test_table" >> Column | Type | Collation | Nullable | Default >> --------+---------+-----------+----------+--------- >> x | integer | | | >> Triggers: >> test_trigger AFTER UPDATE ON test_table FOR EACH ROW EXECUTE FUNCTION >> test_function() >> >> ^ Observe that "Triggers firing always" has disappeared. > > This looks like a user error to me. > If you restore with --data-only, the table and constraint definitions > are not restored at all. So the table "test_table" in database "duncan" > must already have existed before the restore, and the trigger was already > defined like that. No, the trigger was ENABLE ALWAYS when dumped, and restoring zapped that. To confirm that it was ENABLE ALWAYS when dumped: $ pg_restore -f - dump.custom | grep 'ENABLE ALWAYS' ALTER TABLE public.test_table ENABLE ALWAYS TRIGGER test_trigger; To summarize: the table existed before the restore, and the trigger was ENABLE ALWAYS at the moment it was dumped as shown in the steps to reproduce above: I create the table, make an ENABLE ALWAYS trigger, then dump the table, then restore the dump with --data-only and --disable-triggers. At which point (in spite of --data-only) the table has been modified: the trigger is no longer an ENABLE ALWAYS trigger. Best wishes, Duncan.
В списке pgsql-bugs по дате отправления: