Re: pg_stat_activity query_id

From: Erik Wienhold <ewie(at)ewie(dot)name>
To: kaido vaikla <kaido(dot)vaikla(at)gmail(dot)com>
Cc: pgsql-admin(at)postgresql(dot)org
Subject: Re: pg_stat_activity query_id
Date: 2023-05-22 17:43:38
Message-ID: 1391613709.939460.1684777418070@office.mailbox.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-admin

> On 22/05/2023 15:44 CEST kaido vaikla <kaido(dot)vaikla(at)gmail(dot)com> wrote:
>
> I asked from pg jdbc community. Answer was :
> "One thing to note is that the driver uses extended query protocol so the
> queries are not identical.".
> I don't know, is it this now key to understand this issue?
> https://github.com/pgjdbc/pgjdbc/discussions/2902#discussioncomment-5917360

Look's like the extended query protocol is the reason for that. Testing with
psycopg 3.1 (which added pipeline mode to use the extended query protocol)
confirms this:

from psycopg import connect
from psycopg.rows import dict_row

conninfo = 'dbname=postgres'
query = 'SELECT 1'

with connect(conninfo) as con0:
backend_pid = con0.info.backend_pid
server_version = con0.info.server_version

print(f"{backend_pid=} {server_version=}")

con0.execute('SET compute_query_id = on')

print("=> simple query")

con0.execute(query)

with connect(conninfo, row_factory=dict_row) as con1:
with con1.execute('''
SELECT pid, query, query_id
FROM pg_stat_activity
WHERE pid = %s
''', (backend_pid,)) as cur:
for row in cur.fetchall():
print(row)

print("=> extended query")

with con0.pipeline():
con0.execute(query)

with connect(conninfo, row_factory=dict_row) as con1:
with con1.execute('''
SELECT pid, query, query_id
FROM pg_stat_activity
WHERE pid = %s
''', (backend_pid,)) as cur:
for row in cur.fetchall():
print(row)

Gives me:

backend_pid=800121 server_version=150002
=> simple query
{'pid': 800121, 'query': 'SELECT 1', 'query_id': 1147616880456321454}
=> extended query
{'pid': 800121, 'query': 'SELECT 1', 'query_id': None}

I wonder if this is a limitation of the extended query protocol. Computing the
query identifier for a prepared statement with placeholders is not very useful.
But I would think that a useful query identifier can be calculated once the
placeholders are bound to concrete values and the query is executed.

--
Erik

In response to

Responses

Browse pgsql-admin by date

  From Date Subject
Next Message Wells Oliver 2023-05-22 18:01:12 Querying dependencies
Previous Message Tom Lane 2023-05-22 17:19:15 Re: Source code package for libpq