私は、8.3 から構築されたバージョンの postgresql を使用しています。特定の IP アドレスに基づいて大量のクエリを実行し、次のようなパラメーターとして IP アドレスを渡すことができる関数を作成したいと考えました。
CREATE OR REPLACE FUNCTION features.src_forensics(text)
RETURNS SETOF rows as
$$
select src, action,
count(distinct date_trunc('day', receive_time) ) n_activeDay,
count(distinct source_IP) n_src,
count(distinct source_IP) / count(distinct date_trunc('day', receive_time)) n_src_per_day,
sum(bytes) as total_bytes,
min(receive_time) minTime,
max(receive_time) maxTime
from table
where src = $1
group by src, action ;
$$ LANGUAGE sql;
問題は、上記のクエリが select ステートメントの出力を私が慣れ親しんだテーブル形式で返さないことです。関数への IP アドレス入力として 10.10.0.1 を渡す場合、上で書いたスクリプトを以下の select ステートメントのように動作させるにはどうすればよいですか?
select src, action,
count(distinct date_trunc('day', receive_time) ) n_activeDay,
count(distinct source_IP) n_src,
count(distinct source_IP) / count(distinct date_trunc('day', receive_time)) n_src_per_day,
sum(bytes) as total_bytes,
min(receive_time) minTime,
max(receive_time) maxTime
from table
where src = '10.10.0.1'
group by src, action;