From: | Adrian Klaver <adrian(dot)klaver(at)aklaver(dot)com> |
---|---|
To: | Alexey Dokuchaev <danfe(at)nsu(dot)ru>, pgsql-general(at)postgresql(dot)org |
Subject: | Re: Aggregate functions with FROM clause and ROW_COUNT diagnostics |
Date: | 2018-05-21 14:35:06 |
Message-ID: | 43a358da-a0a2-9965-c3c6-02a19e0a3561@aklaver.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
On 05/21/2018 05:54 AM, Alexey Dokuchaev wrote:
> Hi,
>
> I'm seeing somewhat confusing results here with 9.6.8, and cannot find
> the answer in the docs or google.
>
> I'm returning JSON array (or any array, it does not make a difference)
> from my plpgsql function like this:
>
> OUT retcode int,
> OUT result json)
> . . .
> 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? Is it possible to obtain the
> first ROW_COUNT (after SELECT) without performing it twice? Thanks,
Off the top of my head:
SELECT count(*) as ct, foo, bar, baz ...
retcode = result ->'ct'
>
> ./danfe
>
>
--
Adrian Klaver
adrian(dot)klaver(at)aklaver(dot)com
From | Date | Subject | |
---|---|---|---|
Next Message | Tom Lane | 2018-05-21 14:45:27 | Re: Aggregate functions with FROM clause and ROW_COUNT diagnostics |
Previous Message | David G. Johnston | 2018-05-21 14:30:44 | Re: Aggregate functions with FROM clause and ROW_COUNT diagnostics |