Subject: pgsql: Fix plpgsql's handling of "return simple_record_variable".

From: Tom Lane <[email-masked]>
Date: Wed, 11 Feb 2026 21:53:34 +0000

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 <[email-masked]>
Author: Tom Lane <[email-masked]>
Discussion: https://postgr.es/m/[email-masked]
Backpatch-through: 14

Branch
------
REL_16_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/c66f4cff1a2e968ff86ffa6608ae8db12f7b1b31

Modified Files
--------------
src/pl/plpgsql/src/expected/plpgsql_domain.out | 13 +++++++++++++
src/pl/plpgsql/src/pl_exec.c                   | 20 +++-----------------
src/pl/plpgsql/src/sql/plpgsql_domain.sql      | 10 ++++++++++
3 files changed, 26 insertions(+), 17 deletions(-)