Thread: BUG #15359: event_trigger via pg_event_trigger_ddl_commands() notreturning "CREATE SEQUENCE" command
BUG #15359: event_trigger via pg_event_trigger_ddl_commands() notreturning "CREATE SEQUENCE" command
From
PG Bug reporting form
Date:
The following bug has been logged on the website: Bug reference: 15359 Logged by: Tarek Heiland Email address: tarek_heiland@debortoli.com.au PostgreSQL version: 9.6.9 Operating system: windows/linux Description: 1) Event Trigger Function (redacted to raise notice only for proscribed events) CREATE OR REPLACE FUNCTION admin.trg_create_set_owner() RETURNS event_trigger AS $BODY$ DECLARE obj record; BEGIN FOR obj IN SELECT * FROM pg_event_trigger_ddl_commands() WHERE command_tag in ('CREATE TABLE','CREATE TABLE AS','CREATE SEQUENCE') LOOP RAISE NOTICE 'event % for object %',obj.command_tag, obj.object_identity; END LOOP; END; $BODY$ LANGUAGE plpgsql VOLATILE COST 100; ALTER FUNCTION admin.trg_create_set_owner() OWNER TO postgres; GRANT EXECUTE ON FUNCTION admin.trg_create_set_owner() TO public; 2) Test with CREATE TABLE CREATE TABLE test (id integer); NOTICE: event CREATE TABLE for object historian.test CONTEXT: PL/pgSQL function admin.trg_create_set_owner() line 7 at RAISE Query returned successfully with no result in 11 msec 3) Test with CREATE SEQUENCE CREATE SEQUENCE test_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; Query returned successfully with no result in 11 msec. No event raised. 4) https://www.postgresql.org/docs/9.6/static/event-trigger-matrix.html indicates the CREATE SEQUENCE is supported in this context and https://www.postgresql.org/docs/9.6/static/event-trigger-definition.html indicates pg_event_trigger_ddl_commands() is the correct function to call. Regards Tarek
Re: BUG #15359: event_trigger via pg_event_trigger_ddl_commands()not returning "CREATE SEQUENCE" command
From
Alvaro Herrera
Date:
On 2018-Aug-30, PG Bug reporting form wrote: > 3) Test with CREATE SEQUENCE > > CREATE SEQUENCE test_seq > START WITH 1 > INCREMENT BY 1 > NO MINVALUE > NO MAXVALUE > CACHE 1; > > Query returned successfully with no result in 11 msec. > > No event raised. Works for me, after adding the CREATE EVENT TRIGGER command that you did not list. (Without it, it doesn't emit the notice for CREATE TABLE either, obviously.) -- Álvaro Herrera https://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
Re: BUG #15359: event_trigger via pg_event_trigger_ddl_commands() not returning "CREATE SEQUENCE" command
From
Andrew Gierth
Date:
>>>>> "PG" == PG Bug reporting form <noreply@postgresql.org> writes: PG> 1) Event Trigger Function (redacted to raise notice only for PG> proscribed events) I don't see the CREATE EVENT TRIGGER command included in your test case? When I do your test with the addition of: CREATE EVENT TRIGGER foo ON ddl_command_end EXECUTE PROCEDURE admin.trg_create_set_owner(); then I see the NOTICE message for both table and sequence creation: postgres=# CREATE SEQUENCE test_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; NOTICE: event CREATE SEQUENCE for object public.test_seq CREATE SEQUENCE -- Andrew (irc:RhodiumToad)