Scenario: Someone creates a function named "foo" in a PostgreSQL database. Next, someone modifies the inner workings of function "foo".
Question: Does PostgreSQL offer a means to know who modified function "foo" and when "foo" was modified?
Database Administrators Stack Exchange is a question and answer site for database professionals who wish to improve their database skills and learn from others in the community. It only takes a minute to sign up.
Sign up to join this communitySure, you can use EVENT TRIGGERS and you can create them on any of these DDL events listed here
CREATE OR REPLACE FUNCTION abort_any_command()
RETURNS event_trigger
LANGUAGE plpgsql
AS $$
BEGIN
RAISE EXCEPTION '[%] user % attempt command % which disabled',
current_timestamp,
current_user,
tg_tag;
END;
$$;
CREATE EVENT TRIGGER abort_ddl ON ddl_command_start
WHEN TAG IN ('DROP FUNCTION', 'CREATE FUNCTION')
EXECUTE PROCEDURE abort_any_command();
You can create the EVENT TRIGGER
on ddl_command_end
if you want an event to trigger ONLY after the operation has completed successfully. After you create an EVENT TRIGGER
, you can try to drop the function and you'll see.
DROP FUNCTION abort_any_command();
ERROR: [2017-01-09 20:27:33.843529-06] user ecarroll attempt command DROP FUNCTION which disabled
If you just want it in the logs, rather than to raise the exception then use a different level than RAISE EXCEPTION
. You should also easily be able to make this INSERT
into a table if you'd like.