PL/pgSQLの構造
エラーの捕捉
をざっと読んだ限りでは、関数はBEGIN~ENDの外側でトランザクションが働いているようで、何かトラブルがあるとそちらで対処してくれるようです。

一時テーブルを作るときは下記のように書く。 


CREATE TEMPORARY TABLE IF NOT EXISTS temp_table (LIKE t1) ON COMMIT DELETE ROWS;

これで関数の終了時に一時テーブルが空になってメモリ消費量を抑えられる(はず)。