I did some additional testing with this command within transactions. I had the "BEGIN; ALTER INDEX; EXPLAIN; ROLLBACK;" scenario in mind, but didn't realise we acquire an AccessExclusiveLock on the index. Therefore, it's not possible to change the visibility within a single transaction.... unless you don’t mind blocking all access to the relation.
I read the comments at the top of "AlterTableGetLockLevel" and in the documentation and I understand that this behavior seems unavoidable. I suppose this is what was meant by the "globally visible effects" of an ALTER INDEX in the old discussion ? [1] Being able to rollback the changes is nice, but in this case there is not much to alter back anyway. This is probably not the intended use case (hence the discussion about GUCs and hints). [1] https://www.postgresql.org/message-id/30558.1529359929%40sss.pgh.pa.us