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
>
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 |