Re: Attribute of type record has wrong type error with MERGE ... WHEN NOT MATCHED BY SOURCE THEN DELETE
| От | Dean Rasheed |
|---|---|
| Тема | Re: Attribute of type record has wrong type error with MERGE ... WHEN NOT MATCHED BY SOURCE THEN DELETE |
| Дата | |
| Msg-id | CAEZATCVcQXJ3KQUZyN-2=jzk6U1rByJ74Xfq84zeCGXxPQjEsg@mail.gmail.com обсуждение исходный текст |
| Ответ на | Re: Attribute of type record has wrong type error with MERGE ... WHEN NOT MATCHED BY SOURCE THEN DELETE (Tom Lane <tgl@sss.pgh.pa.us>) |
| Ответы |
Re: Attribute of type record has wrong type error with MERGE ... WHEN NOT MATCHED BY SOURCE THEN DELETE
|
| Список | pgsql-bugs |
On Tue, 11 Mar 2025 at 17:14, Tom Lane <tgl@sss.pgh.pa.us> wrote: > > I wrote: > > Double ugh. I guess we could get preprocess_function_rtes to > > insert the appropriate relid ... > > OK, that was less painful than I feared. makeWholeRowVar has > several different special cases for RTE_FUNCTION, but most of them > don't bear on this problem, because we wouldn't have applied inlining > when they did. It seems sufficient to fetch pg_type.typrelid for > the function's nominal return type and store that if it's not 0. > Hmm, this introduces a new problem. Testing a case with a composite type: create table foo (a int, b int); insert into foo values (1,2); create type t as (a int, b int); create or replace function f() returns setof t as $$ select 1,2 from foo offset 0 $$ language sql stable; then doing update foo set b = f.b from f() where f.a = foo.a returning f; or even just select f from f(); triggers an Assert() in relation_open() from get_relation_data_width(), from set_rel_width() because now that the RTE has a relid, it attempts to open it, without having previously locked it. Maybe we need to not clear rte->functions, and use that instead. Regards, Dean
В списке pgsql-bugs по дате отправления: