Re: Combining scalar and row types in RETURNING

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: "Ray O'Donnell" <ray(at)rodonnell(dot)ie>
Cc: "'PostgreSQL'" <pgsql-general(at)postgresql(dot)org>
Subject: Re: Combining scalar and row types in RETURNING
Date: 2025-06-03 16:53:58
Message-ID: 858949.1748969638@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

"Ray O'Donnell" <ray(at)rodonnell(dot)ie> writes:
> Can you combine scalar and row types in a RETURNING clause?

I think so.

> declare
>     m_action text;
>     m_new_data record;
> begin
>     merge into my_table t
>     using (
>         ....
>     ) s
>     on (t.id = s.id)
>     when matched then
>         update .....
>     when not matched then
>         insert .....
>     returning
>         merge_action(), t.*
>     into
>        m_action, m_new_data;

I think the problem here is that "t.*" gets expanded into a list of
all of t's columns, just as would happen in a SELECT's output list.
Try

returning merge_action(), t

It might also be necessary to declare the target variable
"m_new_data" as being of type my_table rather than generic
"record"; not sure about that.

regards, tom lane

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Ray O'Donnell 2025-06-03 18:18:51 Re: Combining scalar and row types in RETURNING
Previous Message Ray O'Donnell 2025-06-03 16:23:15 Combining scalar and row types in RETURNING