| From: | Kirill Reshke <reshkekirill(at)gmail(dot)com> |
|---|---|
| To: | o15611(at)gmail(dot)com, pgsql-bugs(at)lists(dot)postgresql(dot)org |
| Subject: | Re: BUG #19473: regression error in dblink: another command is already in progress |
| Date: | 2026-05-08 21:15:48 |
| Message-ID: | CALdSSPjUczDBWeqQioyNLSoGsrNBBi9MaQ_zNtN1X60hkf81tA@mail.gmail.com |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-bugs |
On Sat, 9 May 2026 at 01:24, Kirill Reshke <reshkekirill(at)gmail(dot)com> wrote:
>
> On Sat, 9 May 2026 at 00:43, PG Bug reporting form
> <noreply(at)postgresql(dot)org> wrote:
> >
> > The following bug has been logged on the website:
> >
> > Bug reference: 19473
> > Logged by: Oleg Ivanov
> > Email address: o15611(at)gmail(dot)com
> > PostgreSQL version: 18.3
> > Operating system: Linux
> > Description:
> >
> > Testcase:
> > SELECT * FROM dblink('dbname=postgres user=postgres', $$ select 7; $$ ) as
> > (col1 int);
> > SELECT * FROM dblink_connect('connection1', 'host=/var/run/postgresql
> > port=5432');
> > SELECT * FROM dblink_send_query('connection1', $$ select 8 from pg_sleep(1);
> > $$ );
> > SELECT dblink_is_busy('connection1');
> > SELECT * FROM dblink_get_result('connection1') as t(col1 int);
> > --- SELECT dblink_is_busy('connection1');
> > SELECT * FROM dblink_exec('connection1', $$ CHECKPOINT; $$);
> > SELECT * FROM dblink_disconnect('connection1');
> >
> > col1
> > ------
> > 7
> > (1 row)
> >
> > dblink_connect
> > ----------------
> > OK
> > (1 row)
> >
> > dblink_send_query
> > -------------------
> > 1
> > (1 row)
> >
> > dblink_is_busy
> > ----------------
> > 1
> > (1 row)
> >
> > col1
> > ------
> > 8
> > (1 row)
> >
> > ERROR: another command is already in progress
> > CONTEXT: while executing command on dblink connection named "connection1"
> > dblink_disconnect
> > -------------------
> > OK
> > (1 row)
> >
> > There was no error in 16 version. The error appeared in 17 version. It
> > seems, there is a regression bug.
> > The workaround is to uncomment a commented statement.
> >
> >
> >
> >
>
> Hi! Thank you for this report, I was able to reproduce this behaviour.
> My git bisect shows that first commit where this errors out is d3c5f37
>
> ```
> commit d3c5f37dd543498cc7c678815d3921823beec9e9 (HEAD)
> Author: Noah Misch <noah(at)leadboat(dot)com>
> Date: Mon Jan 8 11:39:56 2024 -0800
>
> Make dblink interruptible, via new libpqsrv APIs.
>
> ```
So, reason is that dblink_get_result calls dblink_record_internal
which in turn read data with
/* async result retrieval, do it the old way */
PGresult *res = libpqsrv_get_result(conn, dblink_we_get_result);
inside, PQgetResult sets connection state to PGASYNC_READY, and then
reads all messages from this connection but not the RFQ.
this pending RFQ causing issues on any subsequent dblink call with
this connection.
I have this "funny" fix by the way. Obviously this is dumb, but I
think we should do something similar
```
reshke(at)reshke:~/pg$ git diff
diff --git a/contrib/dblink/dblink.c b/contrib/dblink/dblink.c
index 19a362526d2..ed3e8023b55 100644
--- a/contrib/dblink/dblink.c
+++ b/contrib/dblink/dblink.c
@@ -812,6 +812,8 @@ dblink_record_internal(FunctionCallInfo fcinfo,
bool is_async)
}
PG_END_TRY();
+ Assert(!PQisBusy(conn));
+
return (Datum) 0;
}
```
--
Best regards,
Kirill Reshke
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Michael Paquier | 2026-05-08 23:07:06 | Re: [BUG] false positive in bt_index_check in case of short 4B varlena datum |
| Previous Message | Kirill Reshke | 2026-05-08 20:24:14 | Re: BUG #19473: regression error in dblink: another command is already in progress |