Hi Manu, v6 looks good to me. The child CHECK case, VALIDATE CONSTRAINT and sql_drop all leave 0 stale entries now. One small thing.
ATSetTableSpaceCopyIndexes() also runs for ALTER INDEX, so a plain ALTER INDEX SET TABLESPACE in a pipeline now commits on its own. Maybe only call it for tables and matviews. I recently got interested in replication lag with physical replication, so I also looked at the replay side on a standby. A plain top-level ALTER costs the same as master. In a transaction block it costs more. WAL size. The index copy is logged page by page, so the extra WAL is the size of the indexes. Given they are mostly FPI, I think it is okay for replicas to quickly catch up. AccessExclusiveLock. Each index now gets one too, so one more lock record per index goes to the standby. I think that is okay. The table already has that lock, and queries lock the table before its indexes, so nobody new is blocked. Thanks, Shihao
