Параметризация возвращающей множество функции со столбцом в том же запросе - PullRequest
2 голосов
/ 07 сентября 2011

По сути, я хочу сделать следующее:

SELECT set_returning_func(id) FROM my_table;

Тем не менее, результатом будет один столбец в синтаксисе записи, например,

             set_returning_func              
---------------------------------------------
 (old,17,"August    2, 2011 at 02:54:59 PM")
 (old,28,"August    4, 2011 at 08:03:12 AM")
(2 rows)

Я хочу, чтобы он был распакованв столбцы.Если я напишу запрос следующим образом:

SELECT srf.* FROM my_table, set_returning_func(my_table.id);

Я получу сообщение об ошибке:

ERROR:  function expression in FROM cannot refer to other relations of same query level

Как же тогда получить набор результатов, одновременно предоставив наборвозвращать функцию с аргументом?

1 Ответ

6 голосов
/ 07 сентября 2011

Синтаксис, который я искал:

SELECT (set_returning_func(id)).* FROM my_table;

Подробнее

set_returning_func(id) составного типа. Так же, как синтаксис * может использоваться в таблицах:

SELECT my_table.* FROM my_table, my_other_table

Может также использоваться для составных значений (хотя они должны быть заключены в скобки). Интуитивно понятно, что можно также выбрать отдельные столбцы из составной возвращающей функции:

SELECT (set_returning_func(id)).time FROM my_table;

Некоторые функции, возвращающие множество, имеют скалярный, а не составной тип возвращаемого значения. В этих случаях синтаксис (expr).* не имеет смысла и выдает ошибку:

> SELECT (generate_series(1,5)).*;
ERROR:  type integer is not composite

Правильный синтаксис просто:

> SELECT generate_series(1,5);
 generate_series 
-----------------
               1
               2
               3
               4
               5
(5 rows)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...