Skip to content

Instantly share code, notes, and snippets.

@matthiasguentert
Created December 7, 2021 09:29
Show Gist options
  • Save matthiasguentert/1d1590a774ba21b068957c3ad0fe4ec4 to your computer and use it in GitHub Desktop.
Save matthiasguentert/1d1590a774ba21b068957c3ad0fe4ec4 to your computer and use it in GitHub Desktop.
Postgres & DML Tracing
create table debug.employee_trail (
	id serial PRIMARY KEY, 
	operation varchar(6) not null, 
	employee_id integer not null, 
	timestamp timestamp not null
);

create or replace function debug.f_employee_changed() returns trigger as 
$$
declare 
	arg text; 
begin
	if tg_argv[0] = 'delete' then 
		insert into debug.employee_trail (operation, employee_id, timestamp) values (tg_argv[0], old.id, now());
	else
		insert into debug.employee_trail (operation, employee_id, timestamp) values (tg_argv[0], new.id, now());
	end if;
	
	return new; 
end; 
$$ language plpgsql;

create trigger t_on_insert after insert  
	on employees for each row 
	execute procedure debug.f_employee_changed('insert');
	
create trigger t_on_update after update
	on employees for each row 
	execute procedure debug.f_employee_changed('update');

create trigger t_on_delete after delete  
	on employees for each row 
	execute procedure debug.f_employee_changed('delete');
		
insert into employees (first_name, last_name) values ('klaus', 'bommelmaier');
update employees set last_name = 'Maier' where last_name = 'bommelmaier';
delete from employees where last_name = 'Maier';
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment