TheĀ error message below has been observed while running the following type of queries.
CONTEXT: PL/pgSQL function "is_number" line 2 during statement block entry WARNING: Using too many subtransactions in one transaction. (seg1 slice4 xxx.xxx.xxx.xxx:40001 pid=21515) HINT: Close open transactions soon to avoid wraparound problems.
begin; query ~~~ snip query end;
2020-04-02 08:55:10.286267 XXT,"xxxx","xxxx",p21515,th-216070368,"172.28.8.237","7219",2020-04-02 08:52:00 XXT,12790,con1868,cmd201,seg1,slice4,dx3396,x12790,sx1,"WARNING","01000","Using too many subtransactions in one transaction.",,"Close open transactions soon to avoid wraparound problems.",,,"PL/pgSQL function ""is_number"" line 2 during statement block entry","
pg_log directory, the error message above has been observed while running the below query.
CREATE OR REPLACE FUNCTION schdm.is_number (
num text
)
RETURNS boolean AS
$body$
DECLARE x NUMERIC;
BEGIN
x = num::NUMERIC;
RETURN TRUE;
EXCEPTION WHEN others THEN
RETURN FALSE;
END;
$body$
LANGUAGE 'plpgsql'
IMMUTABLE
CALLED ON NULL INPUT
SECURITY INVOKER
COST 100;
It means the EXCEPTION handing inside the function creates a SUBTRANSACTION for every tuple processed and it's resulted in the iterations on the number of tuples is exceeding the substransaction warning limit.
Increase the value of gp_subtrans_warn_limit or rewrite the query in order to avoid performing both the query and the function in the same outer transaction.