I proposed just ignoring those new indexes because it seems much simpler than alternative solutions that I can think of, and it's not like those other solutions don't have other issues.
+1.
I complete the implementation of this feature.
When a session x create an index idx_a on GTT A then
For session x, idx_a is valid when after create index.
For session y, before session x create index done, GTT A has some data, then index_a is invalid.
For session z, before session x create index done, GTT A has no data, then index_a is valid.
For example, I've looked at the "on demand" building as implemented in global_private_temp-8.patch, I kinda doubt adding a bunch of index build calls into various places in index code seems somewht suspicious.
+1. I can't imagine that's a safe or sane thing to do.
+ rel->rd_islocaltemp = true; <<<<<<< if this is valid, then the name of field "rd_islocaltemp" is not probably best
I renamed rd_islocaltemp
I don't see any change?
Rename rd_islocaltemp to rd_istemp in global_temporary_table_v8-pg13.patch
ok :)
I found a bug
postgres=# create global temp table x(a int); CREATE TABLE postgres=# insert into x values(1); INSERT 0 1 postgres=# create index on x (a); CREATE INDEX postgres=# create index on x((a + 1)); CREATE INDEX postgres=# analyze x; WARNING: oid 16468 not a relation ANALYZE
The bug has been fixed in the global_temporary_table_v9-pg13.patch