Podmíněný trigger to někdy částečně řeší, jenže...
V definici podmíněného triggeru taktéž můžu použít OLD jen v UPDATE triggeru. Takže sice napíšu jednu proceduru, ale zas místo jednoho triggeru tři. Navíc budu mít podmínku a z ní vyplývající akci na jiném místě, takže se čitelnost zhorší. Kdyby alespoň v postgresql existovali anonymní procedury (něco ve stylu):
CREATE TRIGGER ..... EXECUTE BLOCK $$ $$;
Další problém je v tom, že např. někdy tyto triggery udržují např. nějakou předpočítanou sumu apod. A v tom případě potřebuji vypočíst něco ve stylu
COALESCE(NEW.value) - COALESCE(old.value): takže tady opět i s podmíněným triggerem skončím u tří procedur. Nebo mohu to old.value a new.value předat jako parametr, ale tím se kód stane opět nepřehlednějším.
To, že se PLPGSQL snaží být maximálně bezpečný beru - u DB jazyka je to jen dobře. Ale nezdá se mi, že by explicitní vyžádání toho, aby bylo NEW definované na NULL, když jde o DELETE trigger nějak narušilo bezpečnost jazyka. Nemá to žádné sideefekty, jde pouze o definici jedné proměnné a její inicializaci na NULL. (A také by se sladil skutečný stav s dokumentací, byť uznávám, že opravit dokumentaci je asi snažší... jen to, že se to tam objevilo mi asi zavdalo plané naděje....).
PS: Ale přes ty všechny výhrady na postgresql po přechodu z mysql slintám blahem, to zas jo :-) Abych zas nevypadal jak nějakej nespokojenec.