Do user-defined functions need to check palloc()'s return value, or does return guarantee success? The latter appears to be the case: Datum palloctest(PG_FUNCTION_ARGS) { int32 nbytes = PG_GETARG_INT32(0); char *p; ereport(INFO, (errmsg("calling palloc"))); p = palloc(nbytes); ereport(INFO, (errmsg("palloc returned"))); PG_RETURN_INT32(nbytes); } SELECT palloctest(1000); INFO: calling palloc INFO: palloc returned palloctest ------------ 1000 (1 row) \set VERBOSITY verbose SELECT palloctest(1000000000); INFO: 00000: calling palloc LOCATION: palloctest, palloctest.c:34 ERROR: 53200: out of memory DETAIL: Failed on request of size 1000000000. LOCATION: AllocSetAlloc, aset.c:505 Control doesn't return to the user-defined function if the allocation fails, so checking palloc()'s return value seems superfluous. Is it safe to rely on this behavior? -- Michael Fuhr http://www.fuhr.org/~mfuhr/ ---------------------------(end of broadcast)--------------------------- TIP 8: explain analyze is your friend