pgsql: The GiST scan algorithm uses LSNs to detect concurrent pages spl - Mailing list pgsql-committers

From Heikki Linnakangas
Subject pgsql: The GiST scan algorithm uses LSNs to detect concurrent pages spl
Date
Msg-id E1PII3g-0002Yz-Js@gemulon.postgresql.org
Whole thread Raw
List pgsql-committers
The GiST scan algorithm uses LSNs to detect concurrent pages splits, but
temporary indexes are not WAL-logged. We used a constant LSN for temporary
indexes, on the assumption that we don't need to worry about concurrent page
splits in temporary indexes because they're only visible to the current
session. But that assumption is wrong, it's possible to insert rows and
split pages in the same session, while a scan is in progress. For example,
by opening a cursor and fetching some rows, and INSERTing new rows before
fetching some more.

Fix by generating fake increasing LSNs, used in place of real LSNs in
temporary GiST indexes.

Branch
------
REL9_0_STABLE

Details
-------
http://git.postgresql.org/gitweb?p=postgresql.git;a=commitdiff;h=821bb177227be9287f8fd50c2398c7bc5c3929e3

Modified Files
--------------
src/backend/access/gist/gist.c       |   10 ++++------
src/backend/access/gist/gistutil.c   |   21 +++++++++++++++++++++
src/backend/access/gist/gistvacuum.c |    2 +-
src/include/access/gist_private.h    |    3 ++-
4 files changed, 28 insertions(+), 8 deletions(-)


pgsql-committers by date:

Previous
From: Heikki Linnakangas
Date:
Subject: pgsql: The GiST scan algorithm uses LSNs to detect concurrent pages spl
Next
From: Heikki Linnakangas
Date:
Subject: pgsql: The GiST scan algorithm uses LSNs to detect concurrent pages spl