Re: Record SET session in VariableSetStmt

From: "Drouvot, Bertrand" <bertranddrouvot(dot)pg(at)gmail(dot)com>
To: Julien Rouhaud <rjuju123(at)gmail(dot)com>
Cc: PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org>
Subject: Re: Record SET session in VariableSetStmt
Date: 2022-10-06 12:36:43
Message-ID: 4af8aee4-f39c-9784-e265-28afef930a3f@gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On 10/6/22 2:28 PM, Julien Rouhaud wrote:
> On Thu, Oct 06, 2022 at 02:19:32PM +0200, Drouvot, Bertrand wrote:
>>
>> On 10/6/22 1:18 PM, Julien Rouhaud wrote:
>>
>>> so
>>> nothing should rely on how exactly someone spelled it. This is also the case
>>> for our core jumbling code, where we guarantee (or at least try to) that two
>>> semantically identical statements will get the same queryid, and therefore
>>> don't distinguish eg. LIKE vs ~~.
>>
>> Agree, but on the other hand currently SET and SET SESSION are recorded with
>> distinct queryid:
>>
>> postgres=# select calls, query, queryid from pg_stat_statements;
>> calls | query | queryid
>> -------+---------------------------------------------+----------------------
>> 2 | select calls, query from pg_stat_statements | -6345508659980235519
>> 1 | set session enable_seqscan=1 | -3921418831612111986
>> 1 | create extension pg_stat_statements | -1739183385080879393
>> 1 | set enable_seqscan=1 | 7925920505912025406
>> (4 rows)
>>
>> and this behavior would change with the Jumbling work in progress in [1]
>> (mentioned up-thread) if we don't record "SET SESSION".
>>
>> I think that would make sense to keep the same behavior, what do you think?
>
> It's because until now jumbling of utility statements was just hashing the
> query text, which is quite terrible. This was also implying getting different
> queryids for things like this:
>
> =# select query, queryid from pg_stat_statements where query like '%work_mem%';;
> query | queryid
> -----------------------+----------------------
> SeT work_mem = 123465 | -1114638544275583196
> Set work_mem = 123465 | -1966597613643458788
> SET work_mem = 123465 | 4161441071081149574
> seT work_mem = 123465 | 8327271737593275474
> (4 rows)
>
> If we move to a real jumbling of VariableSetStmt, we should keep the rules
> consistent with the rest of the jumble code and ignore an explicit "SESSION" in
> the original command.

Understood, so I agree that it makes sense to keep the jumbling behavior
consistent and so keep the same queryid for statements that are
semantically identical.

Thanks for your feedback!

Regards,

--
Bertrand Drouvot
PostgreSQL Contributors Team
RDS Open Source Databases
Amazon Web Services: https://aws.amazon.com

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message kuroda.hayato@fujitsu.com 2022-10-06 12:39:35 RE: Perform streaming logical transactions by background workers and parallel apply
Previous Message Julien Rouhaud 2022-10-06 12:28:27 Re: Record SET session in VariableSetStmt