> > > Since the merging is a yes/no option (I think there used to be some 
> > > discussions
> > > about having a threshold or some other fancy modes), maybe you could 
> > > instead
> > > differentiate the merged version by have 2 constants rather than this 
> > > "..." or
> > > something like that?
> > >
> > Maybe the representation can be "($1 /*, ... */)" so that it's obvious
> > that the array extends beyond the first element but is still
> > syntactically valid.

> Yeah that works too and it's probably way easier to implement.

+1

Just to throw out an alternate idea using comments. What about
adding a comment at the start to the query "/* query_id_squash_values */"
and keep the parameter symbols as-is. The comment at the start will
indicate that this feature was used.

> > On Thu, Feb 13, 2025 at 05:08:45PM GMT, Sami Imseih wrote:
> > Constants passed as parameters to a prepared statement will not be
> > handled as expected. I did not not test explicit PREPARE/EXECUTE statement,
> > but I assume it will have the same issue.

> This is the same question of supporting various cases. The original
> patch implementation handled Param expressions as well, this part was
> explicitly rejected during review. I think as a first step it's
> important to find a balance between applying this optimization in as
> many cases as possible, and at the same time keep the implementation
> simple to give the patch a chance. So far I'm inclined to leave Param
> for the future work, although of course I'm open to discussion.

I do see the discussion here [1], sorry for not noticing it.

I am not sure about this though. At minimum this needs to be documented,
However, I think the  prepared statement case is too common of a case to
skip for the first release of tis feature, and users that will likely
benefit from this feature are using prepared statements ( i.e. JDBC, etc ).

But, others may disagree.

> > pg_node_attr of query_jumble_merge is doing something
> > very specific to the elements list of an ArrayExpr. The
> > merge code likely cannot be used for other node types.

> It can be, take a look at pg_node_attr commentary. Any node can have a
> field marked with query_jumble_merge attribut and benefit from merging.

I can't think of other cases beyond ArrayExpr where this will be needed.
The node that could use this will need to carry constants, but ArrayExpr
is the only case I can think of in which this will be useful for jumbling.
There should be a really good reason IMO to do something other than the
existing pattern of using custom_query_jumble.

I scanned through the thread and could not find a discussion on this,
but maybe others have an opinion.

> > This case with an array passed to aa function seems to cause a regression
> > in pg_stat_statements query text. As you can see the text is incomplete.

> I've already mentioned that in the previous email. To reiterate, it's
> not a functionality regression, but an incomplete representation of a
> normalized query which turned out to be hard to change. While I'm
> working on that, there is a suggestion that it's not a blocker.

It's not a functionality regression as far as query execution
or pg_stat_statements counters go, but it is a regression as far as
displaying query text in pg_stat_statements. pg_stat_statements, unlike
pg_stat_acitivty, makes a guaranteee not to trim text as stated in the docs [2]
"The representative query texts are kept in an external disk file,
and do not consume shared memory. Therefore,
even very lengthy query texts can be stored successfully."

I don't think any feature that trims text in pg_stat_statements is acceptable,
IMO. Others may disagree.

Regards,

Sami


[1] 
https://www.postgresql.org/message-id/20230211104707.grsicemegr7d3mgh@erthalion.local
[2] https://www.postgresql.org/docs/current/pgstatstatements.html


Reply via email to