Re: CommandStatus from insert returning when using a portal.
От | Dave Cramer |
---|---|
Тема | Re: CommandStatus from insert returning when using a portal. |
Дата | |
Msg-id | CADK3HHK6=gxG8BxReXbGLXuxuMJWLC_dGCyiZCLKq0kMMDu=ew@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: CommandStatus from insert returning when using a portal. (chap@anastigmatix.net) |
Ответы |
Re: CommandStatus from insert returning when using a portal.
Re: CommandStatus from insert returning when using a portal. |
Список | 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 по дате отправления: