On Wed, May 12, 2021 at 02:33:35PM +0900, Kyotaro Horiguchi wrote:
> At Wed, 12 May 2021 10:42:01 +0800, Julien Rouhaud <rjuju...@gmail.com> wrote 
> in 
> > 
> > I don't think that this approach would cope well for people who want a 
> > queryid
> > without pg_stat_statements or such.  Since the queryid can now be found in
> > pg_stat_activity, EXPLAIN output or the logs I think it's entirely 
> > reasonable
> > to allow users to benefit from that even if they don't install additional
> > module.
> 
> Ah, I missed that case.  And we are wanting to use pg_stat_statements
> with (almost) zero-config?  How about the following behavior?
> 
> Setting query_id_provider to 'none' means we don't calculate query-id
> by default. However, if queryIdWante() is called, the default provider
> is set up and starts calculating query id.

Having "none" meant "not unless someone asks for it" looks like a POLA
violation.

> Setting query_id_provider to something else means the user wants
> query-id calcualted using the provider. Setting 'default' is
> equivalent to setting compute_query_id to 'on'.
> 
> There might be a case where a user sets query_id_provider to
> non-'none' but don't want have query-id calculated, but it can be said
> a kind of mis-configuration?

So if I'm understanding correctly, you're arguing for an approach different to
what Michael stated as the general consensus in [1].  I'm not saying that I
think it's a bad idea (and I actually suggested it before), but we have to
chose an approach and stick with it.

> > I think this would be a mistake to do that, as it would mean that we don't
> > officially support alternative queryid provider.
> 
> Ok, if we want to support alternative providers from the first, we
> need to actually write the loader code for query-id providers.  It
> would not be so hard?, but it might not be suitable to this stage so I
> proposed that to get rid of needing such complexity for now.

I did write a POC extension [2] to demonstrate that moving pg_stat_statement's
queryid calculation in core doesn't mean that we're imposing it to everyone.
And yes this is critical and a must have in the initial implementation.

> (Anyway I prefer to load query-id provider as a dynamically loadable
>  module rather than hook-function.)

I agree that having a specific API (I'm fine with a hook or a dynamically
loaded function) for that would be better, but it doesn't appear to be the
opinion of the majority.

> > The GUC itself may not change, but third-party queryid provider would 
> > probably
> > need changes as the new entry point will be dedicated to compute a queryid
> > only, while third-party plugins may do more than that in their
> > post_parse_analyze_hook.  And also users will have to change their
> 
> I don't think it is not that a problem.

Did you mean "I don't think that it's a problem"?  Otherwise I don't get it.

> Even if any third-party
> extension is having query-id generator by itself, in most cases it
> would be a copy of JumbleQuery in case of pg_stat_statement is not
> loaded and now it is moved in-core as 'default' provider. What the
> exntension needs to be done is just ripping out the copied generator
> code.  I guess...

I don't fully understand, but it seems that you're arguing that the only use
case is to have something similar to pg_stat_statements (say e.g.
pg_store_plans), that always have the same queryid implementation as
pg_stat_statements.  That's not the case, as there already are "clones" of
pg_stat_statements, and the main difference is an alternative queryid
implementation.  So in that case what author would do is to drop everything
*except* the queryid implementation.

And if I'm not mistaken, pg_store_plans also wants a different queryid
implementation, but has to handle a secondary queryid on top of it
(https://github.com/ossc-db/pg_store_plans/blob/master/pg_store_plans.c#L843-L855).
So here again what the extension want is to get rid of pg_stat_statements (and
now core) queryid implementation.

> > configuration to use that new interface, and additionally the module may now
> > have to be removed from shared_preload_libraries.  Overall, it doesn't seem 
> > to
> > me that it would make users' life easier.
> 
> Why the third-party module need to be removed from
> shared_preload_libraries?  The module can stay as a preloaded shared
> library but just no longer need to have its own query-id provider
> since it is provided in-core.  If the extension required a specific
> provider, the developer need to make it a loadable module and users
> need to specify the provider module explicitly.

It's the same misunderstanding here.  Basically people want to benefit from the
whole ecosystem based on a queryid (pg_stat_statements, now
pg_stat_activity.query_id and such) but with another definition of what a
queryid is.  So those people will now only need to implement something like
[2], rather than forking every single extension they want to use.


[1]: https://www.postgresql.org/message-id/yjoexcrwe1edm...@paquier.xyz
[2]: https://github.com/rjuju/pg_queryid


Reply via email to