2013-02-19 4 views
0

Я нахожусь в версии postgresql, которая была построена с 8.3. Я бегу тонны запросов на основе конкретного адреса Ip и хотел создать функцию, я могу передать IP-адрес в качестве параметра аналогично:Параметризация вывода оператора select PSQL

$$ LANGUAGE SQL;

Проблема заключается в том, что указанный выше запрос не возвращает вывод оператора select в формате таблицы, к которому я привык. Как получить скрипт, который я написал выше, чтобы вести себя как оператор select ниже, если я передаю 10.10.0.1 в качестве IP-адреса, введенного в функцию?

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». Вы можете попробовать изменить его и посмотреть, получит ли он вас больше того, что вы ищете. –

ответ

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 
    );