A row-level trigger for TRUNCATE does not really make sense, as it would mean that TRUNCATE needs to scan each tuple of the table it needs to interact with to fire its trigger, so it would more or less achieve the same performance as a plain "DELETE FROM table;".
TRUNCATE is performant because it only removes the tuples, and does not care about scanning. I am also not sure it is meant for scanning (btw there are discussions about TRUNCATE these days so I might be missing something). So, what you are looking for can be simply solved with row-level triggers on DELETE, so why not using that and avoid reinventing the wheel? -- Michael Paquier http://michael.otacoo.com