Vous n'avez pas mentionné votre version de PostgreSQL, ce qui est très important lors de la rédaction de réponses à des questions comme celle-ci.
Si vous utilisez PostgreSQL 9.0 ou une version plus récente (ou si vous pouvez effectuer une mise à niveau), vous pouvez utiliser cette approche telle que documentée par Pavel :
http://okbob.blogspot.com /2009/10/dynamic-access-to-record-fields-in.html
En général, ce que vous voulez, c'est référencer un champ nommé dynamiquement dans une variable PL/PgSQL de type enregistrement comme 'NEW' ou 'OLD'. Cela a toujours été extrêmement difficile et reste gênant, mais c'est au moins possible dans la version 9.0.
Votre autre alternative - qui peut être plus simple - est d'écrire vos déclencheurs d'audit en plperlu, où les références de champs dynamiques sont triviales.