Fix dropped object handling in pg_event_trigger_ddl_commands
От | Sven Klemm |
---|---|
Тема | Fix dropped object handling in pg_event_trigger_ddl_commands |
Дата | |
Msg-id | CAMCrgp2R1cEXU53iYKtW6yVEp2_yKUz+z=3-CTrYpPP+xryRtg@mail.gmail.com обсуждение исходный текст |
Ответы |
Re: Fix dropped object handling in pg_event_trigger_ddl_commands
|
Список | pgsql-hackers |
Hello, when creating an event trigger for ddl_command_end that calls pg_event_trigger_ddl_commands certain statements will cause the trigger to fail with a cache lookup error. The error happens on master, 13 and 12 I didnt test any previous versions. trg=# ALTER TABLE t ALTER COLUMN f1 SET DATA TYPE bigint, ALTER COLUMN f1 DROP IDENTITY; ERROR: XX000: cache lookup failed for relation 13476892 CONTEXT: PL/pgSQL function ddl_end() line 5 at FOR over SELECT rows LOCATION: getRelationTypeDescription, objectaddress.c:4178 For the ALTER DATA TYPE we create a command to adjust the sequence which gets recorded in the event trigger commandlist, which leads to the described failure when the sequence is dropped as part of another ALTER TABLE subcommand and information about the sequence can no longer be looked up. To reproduce: CREATE OR REPLACE FUNCTION ddl_end() RETURNS event_trigger AS $$ DECLARE r RECORD; BEGIN FOR r IN SELECT * FROM pg_event_trigger_ddl_commands() LOOP RAISE NOTICE 'ddl_end: % %', r.command_tag, r.object_type; END LOOP; END; $$ LANGUAGE plpgsql; CREATE EVENT TRIGGER ddl_end ON ddl_command_end EXECUTE PROCEDURE ddl_end(); CREATE TABLE t(f1 int NOT NULL GENERATED ALWAYS AS IDENTITY); ALTER TABLE t ALTER COLUMN f1 DROP IDENTITY, ALTER COLUMN f1 SET DATA TYPE bigint; I tried really hard to look for a different way to detect this error earlier but since the subcommands are processed independently i couldnt come up with a non-invasive version. Someone more familiar with this code might have an idea for a better solution. Any thoughts? https://www.postgresql.org/message-id/CAMCrgp39V7JQA_Gc+JaEZV3ALOU1ZG=Pwyk3oDpTq7F6Z0JSmg@mail.gmail.com -- Regards, Sven Klemm
Вложения
В списке pgsql-hackers по дате отправления: