Re: RowDescription for a function does not include table OID
От | Tom Lane |
---|---|
Тема | Re: RowDescription for a function does not include table OID |
Дата | |
Msg-id | 597261.1718985078@sss.pgh.pa.us обсуждение исходный текст |
Ответ на | RowDescription for a function does not include table OID (Maxwell Dreytser <Maxwell.Dreytser@assistek.com>) |
Ответы |
Re: RowDescription for a function does not include table OID
|
Список | pgsql-general |
Maxwell Dreytser <Maxwell.Dreytser@assistek.com> writes: > I am working on a meta-programming use-case where I need to scrape some detailed information about the results of a functionthat "RETURNS TABLE (LIKE physical_table)", which ends up with prorettype = 'physical_table'::regtype. > The problem is that for the query "SELECT * FROM my_function()" the RowDescription that is sent back shows 0 for TableOID and Column Index. Yes, that's expected. You're selecting from a function, not a table. > I would expect that the Table OID contains the relation OID of this > table, as it would do for a typical statement like "SELECT * FROM > my_table". The PG wire protocol specification [1] defines these fields thus: If the field can be identified as a column of a specific table, the object ID of the table; otherwise zero. If the field can be identified as a column of a specific table, the attribute number of the column; otherwise zero. My reading of that is that we should populate these fields only for the case of direct selection from a table. If you go further than that, then first off you have a ton of definitional issues (should it "look through" views, for example?), and second you probably break applications that are expecting the existing, longstanding definition. regards, tom lane [1] https://www.postgresql.org/docs/current/protocol-message-formats.html
В списке pgsql-general по дате отправления: