postgresql: универсальная хранимая процедура (выдаваемый результат зависит от типа полей таблицы)
есть следующая ситуация:
необходимо для разных полей таблицы выполнять следующий запрос:
select
count(*) as count,
<field> as value
from
table
group by <field>
в текущий момент приходится использовать 2 хранимки для строк и для целых чисел
CREATE OR REPLACE FUNCTION get_stats_by_item_text(
field text,
expr_where text DEFAULT ''::text)
RETURNS TABLE(count bigint, value text)
LANGUAGE 'plpgsql'
COST 100
VOLATILE PARALLEL UNSAFE
ROWS 1000
и
CREATE OR REPLACE FUNCTION get_stats_by_item_int(
field text,
expr_where text DEFAULT ''::text)
RETURNS TABLE(count bigint, value integer)
LANGUAGE 'plpgsql'
COST 100
VOLATILE PARALLEL UNSAFE
ROWS 1000
Вопрос - а можно ли сделать только одну универсальную хранимку? При этом:
- чтобы не передавать тип выбираемых данных в качестве одного из параметров, передаваемых хранимке
- чтобы не было (ну или практически не было) падения производительности относительно специализированной хранимки
Источник: Stack Overflow на русском