【问题标题】:Parametrizing output of a select statement PSQL参数化选择语句 PSQL 的输出
【发布时间】:2013-02-19 18:48:55
【问题描述】:

我使用的是基于 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 ;

$$ 语言 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;

【问题讨论】:

  • 正在输出什么“表格格式”?输出格式高度依赖于您使用的客户端以及该客户端的配置方式。总的来说,我认为我们需要更多关于它到底在做什么的信息是不寻常的。我会继续提到 - 我不确定RETURNS SETOF rows 是否会改变功能。它显然可以保存,但我通常看到RETURNS SETOF record。您可以尝试更改它,看看是否能得到更多您想要的东西。

标签: sql postgresql postgresql-8.3


【解决方案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
    );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-07
    • 2017-12-02
    • 2019-12-28
    • 1970-01-01
    • 2021-08-01
    • 2022-07-07
    相关资源
    最近更新 更多