Hlavní navigace

Názor k článku PostgreSQL 9.1 aneb stále vpřed od Logik - Podmíněný trigger to někdy částečně řeší, jenže... V definici...

  • Článek je starý, nové názory již nelze přidávat.
  • 2. 5. 2011 17:23

    Logik

    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.va­lue): 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.