#postgresql
Вопрос:
У меня есть функция, которая использует секционированный список таблиц. Чтобы все было просто:
CREATE FUNCTION "test_func_params"(
"_ts_from" TIMESTAMP,
"_ts_to" TIMESTAMP
)
RETURNS UNKNOWN
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
$
SELECT date_from, date_to, name FROM master_table where date_from <= $1 and date_to >= $2;
$
Теперь я могу сделать запрос следующим образом:
select * from test_func_params(date_from , date_to) where name = "foo";
К сожалению, мое внешнее программное обеспечение не может выбирать функции, но только для таблиц/представлений.
Я могу создать представление об этой функции, но я хочу иметь возможность фильтровать представление, передавая параметр функции.
CREATE VIEW "view_test" as SELECT * FROM test_func_params() as inner_table;
Я хочу иметь возможность фильтровать вид, например:
SELECT * FROM view_test WHERE test_func_params._ts_from = "....." and inner_table.name = "foo";
Фильтр «_ts_from» действует не на таблицу РЕЗУЛЬТАТОВ функции, а непосредственно как ПАРАМЕТР функции, создающей таблицу.
Возможно ли это?
Комментарии:
1. Это
CREATE FUNCTION
утверждение синтаксически неверно. Если ваш инструмент не может использовать функцию, почему вы хотите заставить его использовать функцию?2. Тот код этой функции был только примером. Мое средство (Microsoft Power BI) не может получить доступ к функции. Мне нужна функция, а не таблица/представление, потому что мне нужно сделать сводную таблицу (перекрестную таблицу) для секционированных таблиц с метками времени, которые указаны в этой функции (в моем примере это не указано, потому что вопрос не в том, ЗАЧЕМ мне это нужно).
3. Спасибо за разъяснение. Я только спросил «почему», чтобы понять, может ли быть обходной путь. Я думаю, что тогда для вас нет решения: вам нужны функции, но вы используете инструмент, который не может вызывать функции.