Re: CommandStatus from insert returning when using a portal. - Mailing list pgsql-hackers

From Dave Cramer
Subject Re: CommandStatus from insert returning when using a portal.
Date
Msg-id CADK3HHK6=gxG8BxReXbGLXuxuMJWLC_dGCyiZCLKq0kMMDu=ew@mail.gmail.com
Whole thread Raw
In response to Re: CommandStatus from insert returning when using a portal.  (chap@anastigmatix.net)
Responses Re: CommandStatus from insert returning when using a portal.
Re: CommandStatus from insert returning when using a portal.
List pgsql-hackers
David, 

I will try to get a tcpdump file. Doing this in libpq seems challenging as I'm not aware of how to create a portal in psql.

Chap

The only difference is one instance uses a portal to fetch the results, the other (correct one) is a normal insert where all of the rows are returned immediately

this is a reproducer in Java

conn.prepareStatement("DROP TABLE IF EXISTS test_table").execute();
conn.prepareStatement("CREATE TABLE IF NOT EXISTS test_table (id SERIAL PRIMARY KEY, cnt INT NOT NULL)").execute();

for (var fetchSize : List.of(0, 1, 2, 3)) {    System.out.println("FetchSize=" + fetchSize);
    try (var stmt = conn.prepareStatement("INSERT INTO test_table (cnt) VALUES (1), (2) RETURNING id", RETURN_GENERATED_KEYS)) {        stmt.setFetchSize(fetchSize);
        var ret = stmt.executeUpdate();        System.out.println("executeUpdate result: " + ret);
        var rs = stmt.getGeneratedKeys();        System.out.print("ids: ");        while (rs.next()) {            System.out.print(rs.getInt(1) + " ");        }        System.out.print("\n\n");    }
}
Dave

On Fri, 14 Jul 2023 at 12:07, <chap@anastigmatix.net> wrote:
On 2023-07-12 20:57, Dave Cramer wrote:
> Without a cursor it returns right away as all of the results are
> returned
> by the server. However with cursor you have to wait until you fetch the
> rows before you can get the CommandComplete message which btw is wrong
> as
> it returns INSERT 0 0 instead of INSERT 2 0

To make sure I am following, was this describing a comparison of
two different ways in Java, using JDBC, to perform the same operation,
one of which behaves as desired while the other doesn't? If so, for
my curiosity, what do both ways look like in Java?

Or was it a comparison of two different operations, say one
an INSERT RETURNING and the other something else?

Regards,
-Chap

pgsql-hackers by date:

Previous
From: chap@anastigmatix.net
Date:
Subject: Re: CommandStatus from insert returning when using a portal.
Next
From: "David G. Johnston"
Date:
Subject: Re: CommandStatus from insert returning when using a portal.