Why does CREATE INDEX CONCURRENTLY need two scans? - Mailing list pgsql-general

From Joshua Ma
Subject Why does CREATE INDEX CONCURRENTLY need two scans?
Date
Msg-id CAG9XPVn_oYgssW5W7K5zAq6fa5RiTOGCLMnE7rovW-3fe9a3fw@mail.gmail.com
Whole thread Raw
Responses Re: Why does CREATE INDEX CONCURRENTLY need two scans?
List pgsql-general
Hi all,

I was curious about why CONCURRENTLY needs two scans to complete - from the documentation on HOT (access/heap/README.HOT), it looks like the process is:

1) insert pg_index entry, wait for relevant in-progress txns to finish (before marking index open for inserts, so HOT updates won't write incorrect index entries)
2) build index in 1st snapshot, mark index open for inserts
3) in 2nd snapshot, validate index and insert missing tuples since first snapshot, mark index valid for searches

Why are two scans necessary? What would break if it did something like the following?

1) insert pg_index entry, wait for relevant txns to finish, mark index open for inserts
2) build index in a single snapshot, mark index valid for searches

Wouldn't new inserts update the index correctly? Between the snapshot and index-updating txns afterwards, wouldn't all updates be covered?

To be clear, I'm not trying to suggest any changes, just wondering what's missing from my mental model. :)

Thanks!
Josh

pgsql-general by date:

Previous
From: Andy Colson
Date:
Subject: Re: Partial index-based load balancing
Next
From: Michael Paquier
Date:
Subject: Re: Why does CREATE INDEX CONCURRENTLY need two scans?