public inbox for [email protected]  
help / color / mirror / Atom feed
From: Kirill Reshke <[email protected]>
To: [email protected]
To: [email protected]
Subject: Re: BUG #19473: regression error in dblink: another command is already in progress
Date: Sat, 9 May 2026 02:15:48 +0500
Message-ID: <CALdSSPjUczDBWeqQioyNLSoGsrNBBi9MaQ_zNtN1X60hkf81tA@mail.gmail.com> (raw)
In-Reply-To: <CALdSSPi9cGzEza7tK3PQ_=k_e7h3V1j_fUCJXR9-7uwG4YhdkQ@mail.gmail.com>
References: <[email protected]>
	<CALdSSPi9cGzEza7tK3PQ_=k_e7h3V1j_fUCJXR9-7uwG4YhdkQ@mail.gmail.com>

On Sat, 9 May 2026 at 01:24, Kirill Reshke <[email protected]> wrote:
>
> On Sat, 9 May 2026 at 00:43, PG Bug reporting form
> <[email protected]> wrote:
> >
> > The following bug has been logged on the website:
> >
> > Bug reference:      19473
> > Logged by:          Oleg Ivanov
> > Email address:      [email protected]
> > 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 <[email protected]>
> 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@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





reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: [email protected]
  Cc: [email protected], [email protected], [email protected]
  Subject: Re: BUG #19473: regression error in dblink: another command is already in progress
  In-Reply-To: <CALdSSPjUczDBWeqQioyNLSoGsrNBBi9MaQ_zNtN1X60hkf81tA@mail.gmail.com>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox