2013-02-19 123 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 
    );