Ah, that's exactly what I was looking for. Thanks everyone for the
responses!

- Josh
ᐧ

On Tue, Mar 31, 2015 at 8:54 PM, Tom Lane <t...@sss.pgh.pa.us> wrote:

> Michael Paquier <michael.paqu...@gmail.com> writes:
> > On Wed, Apr 1, 2015 at 9:43 AM, Joshua Ma <j...@benchling.com> wrote:
> >> 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?
>
> > When an index is built with index_build, are included in the index only
> the
> > tuples seen at the start of the first scan. A second scan is needed to
> add
> > in the index entries for the tuples that have been inserted into the
> table
> > during the build phase.
>
> More to the point: Joshua's design supposes that retail insertions into
> an index can happen in parallel with index build.  Or in other words,
> that index build consists of instantaneously creating an empty-but-valid
> index file and then doing a lot of ordinary inserts into it.  That's a
> possible design, but it's not very efficient, and most of our index AMs
> don't do it that way.  btree, for instance, starts by sorting all the
> entries and creating the leaf-level pages.  Then it builds the upper tree
> levels.  It doesn't have a complete tree that could support retail
> insertions until the very end.  Moreover, most of the work is done in
> storage that's local to the backend running CREATE INDEX, and isn't
> accessible to other processes at all.
>
>                         regards, tom lane
>

Reply via email to