で奇妙な関数シグネチャを見つけましたpg_catalog.pg_stat_get_activity
:
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;
この関数は同じパラメータ名を 2 回宣言していますが、これは からも報告されてい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
内部関数が同じパラメーター名を 2 回再宣言するのはなぜですか? これの目的は何ですか?たとえば、なぜINOUT
パラメーターを使用しないのですか?pg_stat_get_activity
内部関数と私の違いは何ですか?この構文を使用できないのはなぜですか?
これらはかなりアカデミックな質問であることは承知していますが、jOOQ codegenerator の問題を修正するには、これを正しく理解する必要があります。