2013-02-19 122 views
0

我使用8.3版本构建的postgresql版本。我跑一吨的基础上特定的IP地址查询,并要创造,我可以通过IP地址类似于参数的函数:select语句的参数化输出PSQL

$$语言SQL;

问题是上述查询不会以我习惯的表格格式返回select语句的输出。如果我将10.10.0.1作为输入到该函数的IP地址输入,我如何获得上面编写的脚本的行为如同下面的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; 
+0

正在输出什么“表格格式”?输出格式高度依赖于您使用的客户端和客户端的配置方式。总的来说,我认为我们需要更多的信息,了解它究竟在做什么,这是不寻常的。我会继续提及 - 我不确定'RETURNS SETOF rows'是否会改变功能。它显然可以保存好,但我通常看到'RETURNS SETOF record'。你可以尝试改变它,看看是否让你更多的东西你要找的东西。 – 2013-02-19 19:05:33

回答

1

我一般做这个返回列的任意一组时:

RETURNS TABLE(
    src    text, 
    action   text, 
    n_activeDay  bigint, 
    n_src   bigint, 
    n_src_per_day bigint, 
    total_bytes  bigint, 
    minTime   timestamptz, 
    maxTime   timestamptz 
) AS 

它可能会改变你的查询功能,如果你愿意留下的定义不变:

select * from features.src_forensics("a") AS f(
     src    text, 
     action   text, 
     n_activeDay  bigint, 
     n_src   bigint, 
     n_src_per_day bigint, 
     total_bytes  bigint, 
     minTime   timestamptz, 
     maxTime   timestamptz 
    );