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  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-general
On Mon, May 21, 2018 at 5:54 AM, Alexey Dokuchaev <danfe@nsu.ru> wrote:
    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 по дате отправления:

Предыдущее
От: Thiagarajan Lakshminarayanan
Дата:
Сообщение: Installing PostgreSQL as non-root by Extracting the binaries from RPMs
Следующее
От: Adrian Klaver
Дата:
Сообщение: Re: Aggregate functions with FROM clause and ROW_COUNT diagnostics