From: | Thom Brown <thom(at)linux(dot)com> |
---|---|
To: | Dimitri Fontaine <dimitri(at)2ndquadrant(dot)fr> |
Cc: | Robert Haas <robertmhaas(at)gmail(dot)com>, Alvaro Herrera <alvherre(at)2ndquadrant(dot)com>, PostgreSQL Hackers <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: Event Triggers: adding information |
Date: | 2013-01-22 16:28:07 |
Message-ID: | CAA-aLv5S+uooLiv6w5CQZ4TzUSL0hFaDeF5OBRBt=8WMx0DTBg@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
On 22 January 2013 14:47, Thom Brown <thom(at)linux(dot)com> wrote:
> On 22 January 2013 14:45, Dimitri Fontaine <dimitri(at)2ndquadrant(dot)fr> wrote:
>> Thom Brown <thom(at)linux(dot)com> writes:
>>> Ah, in that case, the docs are wrong:
>>> http://www.postgresql.org/docs/devel/static/sql-createeventtrigger.html
>>
>> Oh. It's missing the comma and applying the AND at the wrong level,
>> here's a fix:
>>
>> diff --git a/doc/src/sgml/ref/create_event_trigger.sgml b/doc/src/sgml/ref/create_event_trigger.sgml
>> index 040df11..3088ffa 100644
>> --- a/doc/src/sgml/ref/create_event_trigger.sgml
>> +++ b/doc/src/sgml/ref/create_event_trigger.sgml
>> @@ -23,7 +23,7 @@ PostgreSQL documentation
>> <synopsis>
>> CREATE EVENT TRIGGER <replaceable class="PARAMETER">name</replaceable>
>> ON <replaceable class="PARAMETER">event</replaceable>
>> - [ WHEN <replaceable class="PARAMETER">filter_variable</replaceable> IN (filter_value [ AND ... ] ) ]
>> + [ WHEN <replaceable class="PARAMETER">filter_variable</replaceable> IN (filter_value [, ... ]) [ AND ... ] ]
>> EXECUTE PROCEDURE <replaceable class="PARAMETER">function_name</replaceable>()
>> </synopsis>
>> </refsynopsisdiv>
>
> Okay, that makes sense now. :)
ALTER INDEX is missing from the event trigger matrix.
When renaming a column on a foreign table, tg_tag reports 'ALTER
TABLE' instead of 'ALTER FOREIGN TABLE'. It doesn't do this for any
other ALTER FOREIGN TABLE operation, including altering, adding or
dropping a column.
DROP OWNED BY doesn't fire any type of event trigger. Is this right?
And also I can't get ddl_command_end to do anything:
test=# CREATE OR REPLACE FUNCTION public.cmd_trg_info()
test-# RETURNS event_trigger
test-# LANGUAGE plpgsql
test-# AS $function$
test$# BEGIN
test$# RAISE NOTICE E'Command trigger: tg_event=\'%\' tg_tag=\'%\'',
tg_event, tg_tag;
test$# END; $function$;
CREATE FUNCTION
test=# CREATE EVENT TRIGGER cmd_trg_before_create_table ON
ddl_command_end WHEN TAG IN ('CREATE TABLE') EXECUTE PROCEDURE
cmd_trg_info();
CREATE EVENT TRIGGER
test=# CREATE TABLE test4 AS SELECT 1::int id, ''::text test;
SELECT 1
test=#
Tried this with every possible command and the corresponding trigger
never fires. Was this actually tested or am I missing something? :S
Also, I'm assuming the 'ANY COMMAND' special tag is supposed to be removed?
postgres=# CREATE EVENT TRIGGER cmd_trg_before_any_command ON
ddl_command_start WHEN TAG IN ('ANY COMMAND') EXECUTE PROCEDURE
cmd_trg_info_any();
ERROR: filter value "ANY COMMAND" not recognized for filter variable "tag"
... but it lets me use it for ddl_command_end triggers:
postgres=# CREATE EVENT TRIGGER cmd_trg_after_any_command ON
ddl_command_end WHEN TAG IN ('ANY COMMAND') EXECUTE PROCEDURE
cmd_trg_info();
CREATE EVENT TRIGGER
This doesn't actually fire anyway due to the issue I mentioned above
where ddl_command_end doesn't appear to be functional.
However, I *can* get ddl_command_end to run on any command by omitting
the WHEN clause, but this is the only scenario where I can get a
trigger firing when using ddl_command_end:
postgres=# CREATE EVENT TRIGGER cmd_trg_after_any_command_all ON
ddl_command_end EXECUTE PROCEDURE cmd_trg_info();
CREATE EVENT TRIGGER
postgres=# CREATE TABLE moooo2(id serial);
NOTICE: Command trigger: tg_event='ddl_command_end' tg_tag='CREATE TABLE'
CREATE TABLE
--
Thom
From | Date | Subject | |
---|---|---|---|
Next Message | Andres Freund | 2013-01-22 16:30:58 | Re: logical changeset generation v4 |
Previous Message | Fujii Masao | 2013-01-22 14:54:56 | Re: Re: Proposal for Allow postgresql.conf values to be changed via SQL [review] |