Názor ke článku PostgreSQL: PL/pgSQL – Serverové programování 01 od Pavel Stěhule - Tady si dovolím oponovat - funkce má vrátit...

  • 10. 11. 2016 14:07

    Pavel Stěhule

    Tady si dovolím oponovat - funkce má vrátit hodnotu nebo vyhodit vyjímku - vracet 1 nebo 0 nemá v jazyku, který podporuje obsluhu vyjímek smysl, a je to zrovna hezká ukázka toho, co by se dělat nemělo. V Postgresu se neobsloužená výjimka zapíše do logu - můžete mít log v CSV formátu a pak skrz FDW file se k tomu logu dostat z SQL. Technika, kterou ukazujete vede k dost nečitelnému a zbytečně nafouklému kódu,

    BEGIN, END -- není to Pascal (ale ADA) potažmo ALGOL

    PGAdmin má dost mizerný editor - mnohem praktičtější je psát skripty v klasickém programátorském editoru, a pak je skrz psql naiportovat do databáze. Navíc PGAdmin svádí k direktivním změnám objektů (třeba funkcí), a pak člověk nemá ani ten soubor.

    Konflikty názvů proměnných z PLpgSQL a SQL jsou už pár let ošetřeny (pokud si uživatel nevypne kontrolu, tak se při konfliktu vyhodí vyjímka). Tradičnější je používání "_" pro proměnné plpgsql a aliasy pro SQL identifikátory.

    Bez debuggeru se lze obejít docela dobře - díky ladícímu výstupu - příkaz RAISE NOTICE

    Napsal jste skalární funkci - tj nevrací tabulku (ani kompozit) - měl byste ji volat ve skalárním kontextu

    SELECT fx() nikoliv SELECT * FROM fx()