Fix plpgsql's handling of "return simple_record_variable".
Tom Lane <tgl@sss.pgh.pa.us>
Fix plpgsql's handling of "return simple_record_variable". If the variable's value is null, exec_stmt_return() missed filling in estate->rettype. This is a pretty old bug, but we'd managed not to notice because that value isn't consulted for a null result ... unless we have to cast it to a domain. That case led to a failure with "cache lookup failed for type 0". The correct way to assign the data type is known by exec_eval_datum. While we could copy-and-paste that logic, it seems like a better idea to just invoke exec_eval_datum, as the ROW case already does. Reported-by: Pavel Stehule <pavel.stehule@gmail.com> Author: Tom Lane <tgl@sss.pgh.pa.us> Discussion: https://postgr.es/m/CAFj8pRBT_ahexDf-zT-cyH8bMR_qcySKM8D5nv5MvTWPiatYGA@mail.gmail.com Backpatch-through: 14
Files
| Path | Change | +/− |
|---|---|---|
| src/pl/plpgsql/src/expected/plpgsql_domain.out | modified | +13 −0 |
| src/pl/plpgsql/src/pl_exec.c | modified | +3 −17 |
| src/pl/plpgsql/src/sql/plpgsql_domain.sql | modified | +10 −0 |
Discussion
- plpgsql: variables of domain of composite types are not correctly initialized 3 messages · 2026-02-11 → 2026-02-12