One drawback of these kinds of solutions is their complexity. There is no easy way to customize the triggers for one or more tables.
I created a similar procedure a few years ago. The bad thing is that I dont completely understand the logic behind this procedure without investing a lot of time into it.
Nowadays I use the simple approach of having an audit trail table or each single table to be audited. This keeps the process simple - just insert the old record into the audit trail table. And best: Other programmers will understand what is happening in case the need to modify the code in any way.
Anyways: good work!
Best Regards,
Chris Büttner