я наткнулся на любопытную функцию подписи в pg_catalog.pg_stat_get_activity
:функция PostgreSQL с повторяющимися параметрами
CREATE OR REPLACE FUNCTION pg_stat_get_activity(
IN pid integer,
OUT datid oid,
OUT pid integer,
-- more parameters...)
RETURNS SETOF record AS 'pg_stat_get_activity'
LANGUAGE internal STABLE
COST 1
ROWS 100;
Эта функция устанавливает такое же имя параметра дважды, также сообщили из information_schema
.
select
parameter_mode,
parameter_name
from information_schema.parameters
where specific_schema = 'pg_catalog'
and specific_name like 'pg_stat_get_activity%'
order by ordinal_position
Вышеуказанные выходы (смотри также этот SQLFiddle):
+--------------+----------------+
|parameter_mode|parameter_name |
+--------------+----------------+
|IN |pid |
|OUT |datid |
|OUT |pid |
|... |... |
+--------------+----------------+
наивности, я попытался создать подобную функцию, без толку:
CREATE FUNCTION f_2647(p1 IN int, p1 OUT int)
AS $$
BEGIN
p1 := p1;
END;
$$ LANGUAGE plpgsql;
Мои вопросы:
- Почему внутренний
pg_stat_get_activity
функция redeclare с тем же именем параметра дважды? Какова цель этого? Например. почему бы просто не использовать параметрINOUT
? - В чем разница между внутренней функцией
pg_stat_get_activity
и моей? Почему я не могу использовать этот синтаксис?
Я знаю, что это скорее академические вопросы, но мне нужно, чтобы правильно понять это, чтобы исправить issue в jOOQ CodeGenerator.
Возможно, вы получите более качественные ответы, если вы разместите это в списке рассылки Postgres. –
@a_horse_with_no_name: Обычно переполнение стека не так уж плохо с такими вопросами. Но вы правы, я мог бы перекрестно опубликовать это в конце концов и, если это применимо, обновить этот вопрос. –
Я думал, что, возможно, параметры 'INOUT' могут быть разделены так же, как в системном каталоге, но это не так. У меня нет объяснений. –