Re: Attribute of type record has wrong type error with MERGE ... WHEN NOT MATCHED BY SOURCE THEN DELETE
От | Tom Lane |
---|---|
Тема | Re: Attribute of type record has wrong type error with MERGE ... WHEN NOT MATCHED BY SOURCE THEN DELETE |
Дата | |
Msg-id | 765994.1741618846@sss.pgh.pa.us обсуждение исходный текст |
Ответ на | Re: Attribute of type record has wrong type error with MERGE ... WHEN NOT MATCHED BY SOURCE THEN DELETE (Tender Wang <tndrwang@gmail.com>) |
Список | pgsql-bugs |
Tender Wang <tndrwang@gmail.com> writes: > When the query has NOT MATCHED BY SOURCE, commit d7d297f84 add "src IS NOT > NULL" join condition. > In this case, the src is view(e.g. subquery), so in makeWholeRowVar(), it > will call below code: > result = makeVar(varno, > InvalidAttrNumber, > RECORDOID, > -1, > InvalidOid, > varlevelsup); > the vartype is RECORDOID, but te reltype of src is not RECORDOID, so > $SUBJECT error reports. Hmm. I tried adjusting the example to make _country_or_region be a materialized view or plain table instead of a view, and those cases did not fail. I wonder why the difference... > I add the below codes to makeWholeRowVar() default branch: > if (rte->relkind == RELKIND_VIEW) > toid = get_rel_type_id(rte->relid); > else > toid = RECORDOID; > It can work. I'm quite uncomfortable with the idea of changing makeWholeRowVar() itself in this way --- the potential blast radius from that seems rather large. A localized fix in transform_MERGE_to_join() might be a wiser answer. regards, tom lane
В списке pgsql-bugs по дате отправления: