Search code examples
pythonpython-3.xpostgresqltriggersplpython

PostgreSQL - Python - Trigger - Access to current_user


I am writing an audit trigger in plPython. I cannot figure out how to get access to the current_user variable. Is it available via plpy somehow?

I would also like to know if it is possible to pass variables into a trigger function? If so how is this done? I tried:

create trigger stock_sys_audit before insert or update or delete on stock_tbl
FOR EACH ROW EXECUTE PROCEDURE sys_audit(current_user);

but it does not work.

Thanks.


Solution

  • You have an access to all Postgres functions and settings only via SQL. Use plpy.execute(), example:

    create or replace function py_current_user()
    returns text language plpython3u
    as $$
        res = plpy.execute("select current_user")
        return res[0]["current_user"]
    $$;
    
    select py_current_user();
    
     py_current_user 
    -----------------
     postgres
    (1 row)