Re: Get diagnistic (row_count) 7.3 vs. 7.4 changes - Mailing list pgsql-general

From Rob Long
Subject Re: Get diagnistic (row_count) 7.3 vs. 7.4 changes
Date
Msg-id 41B75109.6040102@micropat.com
Whole thread Raw
In response to Get diagnistic (row_count) 7.3 vs. 7.4 changes  (Maksim Likharev <MLikharev@micropat.com>)
Responses Re: Get diagnistic (row_count) 7.3 vs. 7.4 changes
List pgsql-general
Hello.

Seeking further clarity regarding GET DIAGNOSTICS behavior in 7.4.

As described previously GET DIAGNOSTICS in the following example does not work in 7.4.5:

CREATE OR REPLACE FUNCTION "public"."rowcount_test" () RETURNS bigint AS'
DECLARE
       base_hits bigint;
 BEGIN

     base_hits := 0;

     CREATE TEMP TABLE ltbl_temp AS SELECT 1 AS data;
     GET DIAGNOSTICS base_hits = ROW_COUNT;

     RETURN base_hits;
 END;
'LANGUAGE 'plpgsql' VOLATILE

Base_hits returns 0 and not 1 while 7.3 returns 1.  Without base_hits := 0, null would be returned.

Output:

7.3.3
queriesdbtest=# select * from public.rowcount_test();
 rowcount_test
---------------
             1
(1 row)

7.4.5
queriesdbtest=# select * from public.rowcount_test();
 rowcount_test
---------------
             0
(1 row)

What is the preferred/recommended way for obtaining rows worked with via the last SQL statement?  Can this be a bug in
7.4.5as the documentation indicates that this should work as described? 

Thanks in advance,
Rob



Maksim Likharev <MLikharev@micropat.com> writes:

>> consider following code:
>
>

>> CREATE OR REPLACE FUNCTION rowcount_test() RETURNS bigint AS '
>> DECLARE
>>     base_hits bigint;
>> BEGIN
>>     CREATE TEMP TABLE ltbl_temp AS SELECT 1 AS data;
>>     GET DIAGNOSTICS base_hits = ROW_COUNT;
>
>

>>     RETURN base_hits;
>> END;
>> ' LANGUAGE PLPGSQL VOLATILE;
>
>

>> in 7.3.3 GET DIAGNOSTICS was returning number of selected rows into a temp
>> table
>> in 7.4.5 GET DIAGNOSTICS returns 0
>
>

Hmm.  I'm not sure if that's a bug or an improvement.  The command did
not return any rows to plpgsql, so in that sense row_count = 0 is
correct, but I can see why you feel you've lost some capability.

Anyone else have an opinion about this?

            regards, tom lane


------------------------------------------------------------------------

Subject:
Re: [GENERAL] Get diagnistic (row_count) 7.3 vs. 7.4 changes
From:
"Richard Huxton" <dev@archonet.com>
Date:
Thu, 2 Dec 2004 01:34:37 -0800

To:
"Tom Lane" <tgl@sss.pgh.pa.us>
CC:
<MLikharev@micropat.com>, <pgsql-general@postgresql.org>


Tom Lane wrote:

>> Maksim Likharev <MLikharev@micropat.com> writes:
>>
>
>
>>>> in 7.3.3 GET DIAGNOSTICS was returning number of selected rows into
>>>> a temp table in 7.4.5 GET DIAGNOSTICS returns 0
>>
>>
>>
>>
>> Hmm.  I'm not sure if that's a bug or an improvement.  The command
>> did not return any rows to plpgsql, so in that sense row_count = 0 is
>>  correct, but I can see why you feel you've lost some capability.
>>
>> Anyone else have an opinion about this?
>
>

Well, from the manuals:
"The currently available status items are ROW_COUNT, the number of rows
processed by the last SQL command sent down to the SQL engine"

Nothing there about rows being returned.

And by analogy:
"A PERFORM statement sets FOUND true if it produces (and discards) a
row, false if no row is produced."

If you've FOUND rows then presumably ROW_COUNT should be non-zero. So
set it if rows aren't returned I'd opine.

--
   Richard Huxton
   Archonet Ltd



pgsql-general by date:

Previous
From: Tony Wasson
Date:
Subject: Re: Performance tuning on RedHat Enterprise Linux 3
Next
From: Nageshwar Rao
Date:
Subject: Shared disk