CREATE TABLE track_ddl ( event text, command text, ddl_time timestamptz, usr text ); CREATE OR REPLACE FUNCTION track_ddl_function() RETURNS event_trigger AS $$ BEGIN INSERT INTO track_ddl values(tg_tag, tg_event, now(), session_user); RAISE NOTICE 'DDL logged'; END $$ LANGUAGE plpgsql SECURITY DEFINER;
CREATE EVENT TRIGGER track_ddl_event ON ddl_command_start WHEN TAG IN ('CREATE TABLE', 'DROP TABLE', 'ALTER TABLE') EXECUTE PROCEDURE track_ddl_function(); CREATE TABLE event_check(i int); SELECT * FROM track_ddl;
And and drop table is ok. But when i am altering i would like to know new vales and old values like when i am catching DML changes:
CREATE OR REPLACE FUNCTION change_trigger() RETURNS trigger AS $$
BEGIN
IF TG_OP = 'INSERT'
THEN
INSERT INTO logging.t_history (tabname, schemaname, operation, who, new_val)