I was thinking that perhaps an updatable view might do the trick?
Interesting idea! Are you able to get it to work? I keep getting 'ERROR: cannot copy to view "view_ts_test"' even before my trigger fires. Inserting, though, works fine.
Still curious why the triggers I'm writing won't fire before my statement errors out on copying to a view, or inserting an out-of-range timestamp, when the trigger would resolve all the illegal operations if it just fired first.