Re: Aggregate functions with FROM clause and ROW_COUNT diagnostics
От | David G. Johnston |
---|---|
Тема | Re: Aggregate functions with FROM clause and ROW_COUNT diagnostics |
Дата | |
Msg-id | CAKFQuwaQ_jGJF5OZEvfz=J99BS5i6BeBZO+35RQnK-foBo1EPQ@mail.gmail.com обсуждение исходный текст |
Ответ на | Aggregate functions with FROM clause and ROW_COUNT diagnostics (Alexey Dokuchaev <danfe@nsu.ru>) |
Ответы |
Re: Aggregate functions with FROM clause and ROW_COUNT diagnostics
|
Список | pgsql-general |
result := json_agg(_) FROM (
SELECT foo, bar, baz ...
FROM t1, t2, t3 WHERE ...) AS _; -- this works fine
GET DIAGNOSTICS retcode = ROW_COUNT; -- always returns 1
I'd expected `retcode' to contain the number of SELECT'ed rows, but it
is something else (always 1). Apparently, aggregation functions like
json_agg()/array_agg() mangle the ROW_COUNT from the inner SELECT (the
one I'm interested in).
Is this expected and correct behavior?
Yes, the query returned only one row, with a single json column. You wrote the equivalent of:
SELECT json_agg(...) FROM ... INTO result;
And you are getting the count of the top-most select (which is implied in the syntax that you used).
Is it possible to obtain the
first ROW_COUNT (after SELECT) without performing it twice?
Not directly, no. You should execute the inner query to a temporary table than perform your counting and json_agg from that.
David J.
В списке pgsql-general по дате отправления: