Kdyby byl typ record podobnější refernci v Javě nebo ukazateli v C, tak by o tom šlo uvažovat. Ale protože není, tak si myslím, že by to nadělalo větší paseku než užitek. PL/pgSQL vychází s ADY a je snaha, aby potenciálně chybný kód šel napsat hůře i za cenu větší ukecanosti správného kódu.
Pokud Vám vadí nutnost testování TG_OP, tak piště triggery čistě pro jednotlivé události - nemá to žádný vliv na výkon. Musíte napsat víc omáčky :( ale zase kód může být o něco jednodušší a o fous rychlejší. Navíc pokud chcete porovnávat NEW a OLD tak je mnohem lepší tyto hodnoty porovnat mimo trigger - skrze podmíněný trigger. Tím můžete snížit počet volání triggeru (následně počet inicializací plpgsql) a urychlit provádění příkazu.
http://developer.postgresql.org/pgdocs/postgres/sql-createtrigger.html
CREATE TRIGGER log_update AFTER UPDATE ON accounts FOR EACH ROW WHEN (OLD.* IS DISTINCT FROM NEW.*) EXECUTE PROCEDURE log_account_update();