Sono estremamente nuovo in PostgreSQL, ma uno degli esempi nella documentazione di PostgreSQL per trigger/programmazione lato server sembra che faccia esattamente quello che stai cercando.
Vedere:http://www.postgresql.org/docs/9.2 /static/trigger-example.html
Snippet dalla pagina:"Quindi il trigger agisce come un vincolo non nullo ma non interrompe la transazione. "