Thread

Commits

  1. PL/Perl: Add event trigger support

  2. PL/Tcl: Add event trigger support

  1. Question: what is proper way to define python function as event_trigger?

    Andrei Pozolotin <andrei.pozolotin@gmail.com> — 2019-12-22T22:27:02Z

    Hello. 
    
    Problem: 
    
    1. any attempt to define python function as an event_trigger, i.e.: 
    
    CREATE FUNCTION public.verify()
    RETURNS event_trigger
    LANGUAGE 'plpython3u'
    AS $$ print("hello-kitty") $$; 
    
    2. fails with message: 
    
    ERROR: trigger functions can only be called as triggers 
    
    SQL state: 0A000 
    
    3. here in the source: 
    
    https://github.com/postgres/postgres/blob/master/src/pl/plpython/plpy_procedure.c#L226
    
    
    Question: 
    
    what is proper way to define python function as event_trigger? 
    
    Thank you.
  2. Re: Question: what is proper way to define python function as event_trigger?

    Jeff Ross <jross@openvistas.net> — 2019-12-22T23:07:13Z

    On 2019-12-22 15:27, Andrei Pozolotin wrote:
    >
    > Hello.
    >
    > Problem:
    >
    > 1. any attempt to define python function as an event_trigger, i.e.:
    >
    > CREATE FUNCTION public.verify()
    > RETURNS event_trigger
    > LANGUAGE 'plpython3u'
    > AS $$ print("hello-kitty") $$;
    >
    > 2. fails with message:
    >
    > ERROR: trigger functions can only be called as triggers
    >
    > SQL state: 0A000
    >
    > 3. here in the source:
    >
    > https://github.com/postgres/postgres/blob/master/src/pl/plpython/plpy_procedure.c#L226
    >
    > Question:
    >
    > what is proper way to define python function as event_trigger?
    >
    > Thank you.
    >
    >
    Just do
    
    "create function public.verify() as trigger..."
    
    https://www.postgresql.org/docs/10/plpython-trigger.html
    
    TD["event"] contains the type of event as a string and I routinely do 
    things like
    
         if TD["event"] == "UPDATE":
             #do update stuff
         elif TD["event'} == "INSERT":
             #do insert related stuff
    
    Jeff
    
    
    
    
    
  3. Re: Question: what is proper way to define python function as event_trigger?

    Jeff Ross <jross@openvistas.net> — 2019-12-22T23:20:51Z

    On 2019-12-22 16:07, Jeff Ross wrote:
    > On 2019-12-22 15:27, Andrei Pozolotin wrote:
    >>
    >> Hello.
    >>
    >> Problem:
    >>
    >> 1. any attempt to define python function as an event_trigger, i.e.:
    >>
    >> CREATE FUNCTION public.verify()
    >> RETURNS event_trigger
    >> LANGUAGE 'plpython3u'
    >> AS $$ print("hello-kitty") $$;
    >>
    >> 2. fails with message:
    >>
    >> ERROR: trigger functions can only be called as triggers
    >>
    >> SQL state: 0A000
    >>
    >> 3. here in the source:
    >>
    >> https://github.com/postgres/postgres/blob/master/src/pl/plpython/plpy_procedure.c#L226 
    >>
    >>
    >> Question:
    >>
    >> what is proper way to define python function as event_trigger?
    >>
    >> Thank you.
    >>
    >>
    > Just do
    >
    > "create function public.verify() as trigger..."
    >
    My bad--that should be "create function public.verify() returns trigger... "
    
    Jeff
    
    
    
    
    
  4. Re: Question: what is proper way to define python function as event_trigger?

    Tom Lane <tgl@sss.pgh.pa.us> — 2019-12-22T23:40:06Z

    Andrei Pozolotin <andrei.pozolotin@gmail.com> writes:
    > 1. any attempt to define python function as an event_trigger, i.e.: 
    
    AFAICS, there's not really any event trigger support in plpython.
    That feature has only been built out in the other three PLs.
    
    Somebody oughta fix this sometime, I guess, but it evidently hasn't
    been high priority.  If you feel like working on it, you could look
    at commits e5dc4cc24d2e1e94ac572a2c64103710bf15d21e (for plperl)
    and/or a5036ca998a6058f60913d43a80badfcbb65f5bb (for pltcl).
    
    			regards, tom lane
    
    
    
    
  5. Re: Question: what is proper way to define python function as event_trigger?

    Andrei Pozolotin <andrei.pozolotin@gmail.com> — 2019-12-23T02:52:23Z

    Jeff, hi:
    
    1. my concern is global "event_trigger" for DDL, not per-table "trigger" 
    for DML
    
    2. regardless - thank you for the link, I found it helpful
    
    3. Tom Lane says event_trigger is just not implemented in plpython
    
    Andrei.
    
    On 2019-12-22 17:20, Jeff Ross wrote:
    > On 2019-12-22 16:07, Jeff Ross wrote:
    >> On 2019-12-22 15:27, Andrei Pozolotin wrote:
    >>> 
    >>> Hello.
    >>> 
    >>> Problem:
    >>> 
    >>> 1. any attempt to define python function as an event_trigger, i.e.:
    >>> 
    >>> CREATE FUNCTION public.verify()
    >>> RETURNS event_trigger
    >>> LANGUAGE 'plpython3u'
    >>> AS $$ print("hello-kitty") $$;
    >>> 
    >>> 2. fails with message:
    >>> 
    >>> ERROR: trigger functions can only be called as triggers
    >>> 
    >>> SQL state: 0A000
    >>> 
    >>> 3. here in the source:
    >>> 
    >>> https://github.com/postgres/postgres/blob/master/src/pl/plpython/plpy_procedure.c#L226 
    >>> Question:
    >>> 
    >>> what is proper way to define python function as event_trigger?
    >>> 
    >>> Thank you.
    >>> 
    >>> 
    >> Just do
    >> 
    >> "create function public.verify() as trigger..."
    >> 
    > My bad--that should be "create function public.verify() returns 
    > trigger... "
    > 
    > Jeff
    
    
    
    
  6. Re: Question: what is proper way to define python function as event_trigger?

    Andrei Pozolotin <andrei.pozolotin@gmail.com> — 2019-12-23T02:53:20Z

    Tom, hi:
    
    1. actual use case has to do with:
    BUG #16177: pg_event_trigger_ddl_commands() returns empty set for 
    ddl_command_start and "drop table"
    https://www.postgresql.org/message-id/16177-053a34714817c3e1%40postgresql.org
    
    2. I was merely hoping to re-implement pg_event_trigger_ddl_commands as 
    part of python event_trigger
    
    3. do you think "pg_event_trigger_ddl_commands" is any easier to fix 
    then "support event_trigger in python"?
    
    Thank you,
    
    Andrei
    
    On 2019-12-22 17:40, Tom Lane wrote:
    > Andrei Pozolotin <andrei.pozolotin@gmail.com> writes:
    >> 1. any attempt to define python function as an event_trigger, i.e.:
    > 
    > AFAICS, there's not really any event trigger support in plpython.
    > That feature has only been built out in the other three PLs.
    > 
    > Somebody oughta fix this sometime, I guess, but it evidently hasn't
    > been high priority.  If you feel like working on it, you could look
    > at commits e5dc4cc24d2e1e94ac572a2c64103710bf15d21e (for plperl)
    > and/or a5036ca998a6058f60913d43a80badfcbb65f5bb (for pltcl).
    > 
    > 			regards, tom lane