How to cleanup transaction after statement_timeout aborts a query?

From: Istvan Soos <istvan(dot)soos(at)gmail(dot)com>
To: pgsql-general(at)lists(dot)postgresql(dot)org
Subject: How to cleanup transaction after statement_timeout aborts a query?
Date: 2024-09-08 10:56:33
Message-ID: CALdQGgv_an=JdfkomND7sJcuAS1L5OmbFzhQa9qcW48syTXyKg@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

I'm one of the developers of the Dart-language Postgresql client
package. I am working on adding a feature that may set the
statement_timeout value before a session or a query as the client
requests it, however, I'm stuck with the following error:

setup:
CREATE TABLE t (id INT PRIMARY KEY);
INSERT INTO t (id) values (1);

client-1:
BEGIN;
SELECT * FROM t WHERE id=1 FOR UPDATE;
<client sleeps for a while>

client-2:
BEGIN;
SET statement_timeout TO 1000;
SELECT * FROM t WHERE id=1 FOR UPDATE;
<server sends error message with the timeout>

After that any query I send through client-2 will get me the following error:

Severity.error 25P02: current transaction is aborted, commands ignored
until end of transaction block

Not even ROLLBACK or COMMIT is working. It is the same for both simple
and extended query protocol. Does the client need to send a non-query
message to cleanup the transaction state? Or is this connection now
gone for good?

Thanks,
Istvan

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Laurenz Albe 2024-09-08 11:18:28 Re: How to cleanup transaction after statement_timeout aborts a query?
Previous Message sud 2024-09-07 09:29:37 How effectively do the indexing in postgres in such cases