Re: pg_stat_statements and "IN" conditions
Dmitry Dolgov <9erthalion6@gmail.com>
From: Dmitry Dolgov <9erthalion6@gmail.com>
To: Yasuo Honda <yasuo.honda@gmail.com>
Cc: Tom Lane <tgl@sss.pgh.pa.us>, Peter Smith <smithpb2250@gmail.com>, vignesh C <vignesh21@gmail.com>, Michael Paquier <michael@paquier.xyz>, Nathan Bossart <nathandbossart@gmail.com>, "Gregory Stark (as CFM)" <stark.cfm@gmail.com>, David Geier <geidav.pg@gmail.com>, Sergei Kornilov <sk@zsrv.org>, Alvaro Herrera <alvherre@alvh.no-ip.org>, Marcos Pegoraro <marcos@f10.com.br>, Robert Haas <robertmhaas@gmail.com>, David Steele <david@pgmasters.net>, PostgreSQL-development <pgsql-hackers@postgresql.org>, Pavel Trukhanov <pavel.trukhanov@gmail.com>
Date: 2024-03-26T20:59:16Z
Lists: pgsql-hackers
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Introduce squashing of constant lists in query jumbling
- 62d712ecfd94 18.0 landed
-
Make documentation builds reproducible
- b0f0a9432d0b 17.0 cited
-
Include values of A_Const nodes in query jumbling
- 9ba37b2cb6a1 16.0 cited
-
Teach planner about more monotonic window functions
- 456fa635a909 16.0 cited
-
Split up guc.c for better build speed and ease of maintenance.
- 0a20ff54f5e6 16.0 cited
> On Tue, Mar 26, 2024 at 04:21:46PM +0900, Yasuo Honda wrote: > Yes. The script uses prepared statements because Ruby on Rails enables > prepared statements by default for PostgreSQL databases. > > Then I tested this branch > https://github.com/yahonda/postgres/tree/pg_stat_statements without > using prepared statements as follows and all of them do not normalize > in clause values. > > - Disabled prepared statements by setting `prepared_statements: false` > https://gist.github.com/yahonda/2c2d6ac7a955886a305750eecfd07c5e > > - Use ruby-pg > https://gist.github.com/yahonda/2f0efb11ae888d8f6b27a07e0b833fdf > > - Use psql > https://gist.github.com/yahonda/c830379b33d66a743aef159aa03d7e49 > > I do not know why even if I use psql, the query column at > pg_stat_sql_statement shows it is like a prepared statement "IN ($1, > $2)". It's a similar case: the column is defined as bigint, thus PostgreSQL has to wrap every constant expression in a function expression that converts its type to bigint. The current patch version doesn't try to reduce a FuncExpr into Const (event if the wrapped value is a Const), thus this array is not getting merged. If you replace bigint with an int, no type conversion would be required and merging logic will kick in. Again, the original version of the patch was able to handle this case, but it was stripped away to make the patch smaller in hope of moving forward. Anyway, thanks for reminding about how annoying the current handling of constant arrays can look like in practice!