Hello,

> On Jul 23, 2025, at 9:43 PM, Michael Paquier <mich...@paquier.xyz> wrote:
> 
> On Tue, Jul 22, 2025 at 01:15:16PM -0500, Sami Imseih wrote:
>> The GUC serves multiple purposes. For example,I can create an index as 
>> invisible
>> and use it in a controlled way, which is helpful for experimenting
>> with a new index.
> 
> An in-core GUC to control the list of indexes that should be allowed
> or disallowed is I think asking for trouble, adding schema-related
> knowledge directly into the GUC machinery.  This does not scale well,
> even if you force all the entries to be specified down to the database
> and the schema.  And it makes harder to control what a "good" behavior
> should be at query-level.
> 
> My 2c.

+1

I wonder if there's a path to simplify things further here while still 
providing a way to gradually build confidence when disabling and then dropping 
an index. As a developer/DBA or person in a similar position, I think my 
journey for dropping an index in this new world would look something like this:

1. Research phase: Use `pg_stat_user_indexes`, query analysis to understand 
index usage
2. Experimentation phase: Use `pg_hint_plan` (or GUC?) for session-level 
testing and slower rollout from applications using feature flags
  - Up until a while ago, this step won't exist because once I had enough 
confidence from step 1, I'd go to step 3. Which is a huge improvement from 
jumping to Step 4 below. But the new discussions have made me think that this 
step is important.
3. Validation phase: Use `ALTER INDEX INVISIBLE` for final system-wide 
confidence building  
4. Cleanup phase: `DROP INDEX` when certain

Per this plan, this would mean that pg_hint_plan would need to support 
index-level hints, and it’s not a massive / impossible task. But it also means 
that both systems aren't fighting/overriding each other or making it difficult 
for users to understand when exactly an index is being used or not. Ultimately, 
this would also mean that `ALTER INDEX INVISIBLE` is a one-way door, and there 
is only one way to control index visibility in core, which makes sense to me.

I think any pitfalls and guarantees can be communicated well through 
documentation both in core and in `pg_hint_plan`. What’s not clear to me here 
is, how common / intuitive of a workflow will this be and if it fits easily in 
the “common use case” path?

There are some aspects of the GUC approach that I'd miss, also because as a 
developer I've used DDLs and GUCs more than pg_hint_plan, but it's probably 
just a tooling exposure thing perhaps. 

Curious what folks think.

P.S. Still very happy to help with patches whenever that is.

Thanks,
Shayon



Reply via email to