I've had pretty much the exact same problem and what I went for in my low-volume case was to simply add advisory locks such that I can guarantee the transaction start times provide correct ordering.
Set the trigger to add the primary key + change time to a separate table, then scan/truncate that table to poll changes.