Обсуждение: 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
От
PG Bug reporting form
Дата:
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
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
>>>>> "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)