On Mon, Apr 26, 2021 at 11:37:45AM -0700, Andres Freund wrote: > Hi, > > On 2021-04-26 14:21:00 -0400, Tom Lane wrote: > > Andres Freund <and...@anarazel.de> writes: > > That's sounding like a pretty sane design, actually. Not sure about > > the shared-library-name-with-fixed-function-name detail, but certainly > > it seems to be useful to separate "I need a query-id" from the details > > of the ID calculation. > > > > Rather than a GUC per se for the ID provider, maybe we could have a > > function hook that defaults to pointing at the in-core computation, > > and then a module wanting to override that just gets into the hook. > > I have a preference to determining the provider via GUC instead of a > hook because it is both easier to introspect and easier to configure.
In any case, having a different provider would greatly simplify third-party queryid lib authors and users life. For now the core queryid is computed before post_parse_analyze_hook, but any third party plugin would have to do it as a post_parse_analyze_hook, so you have to make sure that the lib is at the right position in shared_preload_libraries to have it work, eg. [1], depending on how pg_stat_statements and other similar module call prev_post_parse_analyze_hook, which is a pretty bad thing. > If the provider is loaded via a hook, and the shared library is loaded > via shared_preload_libraries, one can't easily just turn that off in a > single session, but needs to restart or explicitly load a different > library (that can't already be loaded). On the other hand we *don't* want to dynamically change the provider. Temporarily enabling/disabling queryid calculation is ok, but generating different have for the same query isn't. > We also don't have any way to show what's hooking into a hook. If we had a dedicated query_id hook, then plugins should error out if users configured multiple plugins to calculate a query_id, so it should be easy to know which plugin is responsible for it without knowing who hooked into the hook. [1] https://github.com/rjuju/pg_queryid/blob/master/pg_queryid.c#L116-L117