pgsql: The GiST scan algorithm uses LSNs to detect concurrent pages spl

From: Heikki Linnakangas <heikki(dot)linnakangas(at)iki(dot)fi>
To: pgsql-committers(at)postgresql(dot)org
Subject: pgsql: The GiST scan algorithm uses LSNs to detect concurrent pages spl
Date: 2010-11-16 09:42:36
Message-ID: E1PII3g-0002Z5-Pg@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: 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
------
REL8_1_STABLE

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

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

Browse pgsql-committers by date

  From Date Subject
Next Message Magnus Hagander 2010-11-16 11:45:12 pgsql: Send paramHandle to subprocesses as 64-bit on Win64
Previous Message User Maosen 2010-11-16 08:29:24 pgexternaltable - src: