Re: Protocol question regarding Portal vs Cursor

From: Dave Cramer <davecramer(at)gmail(dot)com>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org>
Subject: Re: Protocol question regarding Portal vs Cursor
Date: 2024-07-25 20:14:24
Message-ID: CADK3HHKa-adGNZK8Ga4QGoXqA+cKAs5O710K-6B-S97BThO2hA@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Hi Tom,

On Wed, 8 Nov 2023 at 06:02, Dave Cramer <davecramer(at)gmail(dot)com> wrote:

>
> Dave Cramer
>
>
> On Tue, 7 Nov 2023 at 10:26, Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> wrote:
>
>> Dave Cramer <davecramer(at)gmail(dot)com> writes:
>> > If we use a Portal it is possible to open the portal and do a describe
>> and
>> > then Fetch N records.
>>
>> > Using a Cursor we open the cursor. Is there a corresponding describe
>> and a
>> > way to fetch N records without getting the fields each time. Currently
>> we
>> > have to send the SQL "fetch <direction> N" and we get the fields and
>> the
>> > rows. This seems overly verbose.
>>
>> Portals and cursors are pretty much the same thing, so why not use
>> the API that suits you better?
>>
>
> So in this case this is a refcursor. Based on above then I should be able
> to do a describe on the refcursor and fetch using the extended query
> protocol
>

Is it possible to describe a CURSOR

Testing out the above hypothesis

2024-07-25 15:55:39 FINEST org.postgresql.core.v3.QueryExecutorImpl
sendSimpleQuery FE=> SimpleQuery(query="declare C_3 CURSOR WITHOUT HOLD
FOR SELECT * FROM testsps WHERE id = 2")
2024-07-25 15:55:39 FINEST org.postgresql.core.v3.QueryExecutorImpl
sendDescribePortal FE=> Describe(portal=C_3)
2024-07-25 15:55:39 FINEST org.postgresql.core.v3.QueryExecutorImpl
sendExecute FE=> Execute(portal=C_3,limit=10)
2024-07-25 15:55:39 FINEST org.postgresql.core.v3.QueryExecutorImpl
sendSync FE=> Sync

gives me the following results

2024-07-25 15:55:39 FINEST org.postgresql.core.v3.QueryExecutorImpl
receiveErrorResponse <=BE ErrorMessage(ERROR: portal "C_3" does not exist
Location: File: postgres.c, Routine: exec_describe_portal_message, Line:
2708
Server SQLState: 34000)

Note Describe portal is really just a DESCRIBE message, the log messages
are misleading

Dave

>

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message David G. Johnston 2024-07-25 20:19:03 Re: Protocol question regarding Portal vs Cursor
Previous Message Robert Haas 2024-07-25 20:12:01 Re: Incremental backup from a streaming replication standby fails