It seems to be running out of memory. I'm not sure what's eating so much RAM --- the expression isn't that complex. Also it seems that elog.c's ability to handle a shortage of memory has regressed ... 'ERROR: ERRORDATA_STACK_SIZE exceeded' is better than a core dump, I suppose, but it's not supposed to fail at all ...
Anyway, seems we have a couple different bugs to chase in CVS tip.
Another piece of the puzzle -- if the functions are defined: ...language sql IMMUTABLE STRICT; instead of just ...language sql IMMUTABLE; the function returns immediately even with 32 arguments (on 7.4devel):
regression=# explain analyze select concat_ws('~','01','02','03','04','05','06','07','08','09','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28','29','30','31');
QUERY PLAN
----------------------------------------------------------------------------------
Result (cost=0.00..0.01 rows=1 width=0) (actual time=0.00..0.00 rows=1 loops=1)
Total runtime: 0.02 msec
(2 rows)
Also worth noting, without STRICT, even a plain EXPLAIN *without* ANALYZE causes the problem to show itself.
Joe
---------------------------(end of broadcast)--------------------------- TIP 4: Don't 'kill -9' the postmaster