given the following example: postgres=# create table t2 as select generate_series(1, 100000) as a, generate_series(1, 100000) as b; SELECT 100000 postgres=# create index t2_idx on t2(a); CREATE INDEX postgres=# set enable_seqscan = 0; SET postgres=# select * from t2 where a in (1, 100000); a | b --------+-------- 1 | 1 100000 | 100000 (2 rows)
I can see the plan stores the "1 and 100000" information in IndexScan->indexqual, which is an SCALARARRAYOPEXPR expression. suppose the executor should scan 1 first, If all the tuples for 1 has been scanned, then **it should be reset to 100000** and scan again. however I can't find out the code for that. looks index_rescan is not for this. am I miss something? thanks