On 05/02/2023 06:09, jacktby@gmail.com wrote:
> I'm doing research on heap_am, and for heap_beginscan func, I find
> out that there is a arg called nkeys, I use some sqls as examples like
> 'select * from t;' and 'select * from t where a = 1', but it is always
> zero,
> can you give me some descriptions for this? what's it used for?
The executor evaluates table scan quals in the SeqScan node itself, in
ExecScan function. It doesn't use the heap_beginscan scankeys.
There has been some discussion on changing that, as some table access
methods might be able to filter rows more efficiently using the scan
keys than the executor node. But that's how it currently works.
I think the heap scankeys are used by catalog accesses, though, so it's
not completely dead code.
- Heikki