Re: Transactions and indexes - Mailing list pgsql-hackers

From Peter Geoghegan
Subject Re: Transactions and indexes
Date
Msg-id CAH2-Wz=6ecGQ8wnwj=au9_+CLw4m9K4nsfBLnuPxGrn6u+9ySg@mail.gmail.com
Whole thread Raw
In response to Transactions and indexes  (Chris Cleveland <ccleveland@dieselpoint.com>)
Responses Re: Transactions and indexes  (Chris Cleveland <ccleveland@dieselpoint.com>)
List pgsql-hackers
On Mon, Jul 19, 2021 at 4:31 PM Chris Cleveland
<ccleveland@dieselpoint.com> wrote:
> I'm confused on how to handle transactions and visibility.

In Postgres, indexes are not considered to be part of the logical
database. They're just data structures that point to TIDs in the
table. To an index, each TID is just another object -- it doesn't
possess any built-in idea about MVCC.

In practice the indexes may be able to surmise certain things about
MVCC and versioning, as an optimization -- but that is all speculative
and relies on cooperation from the table AM side. Also, the
implementation of unique indexes knows more than zero about versions,
since that's just necessary. These two cases may or may not be
considered exceptions to the general rule. I suppose that it's a
matter of perspective.

> So... how do I handle this? Is there some way for me to implement my own storage manager that manages visibility?

This is the responsibility of a table AM, not any one index AM. In
general we assume that each table AM implements something very much
like heapam's VACUUM implementation. Index AMs may also have
opportunistic cleanup of their own, as an optimization (actually this
is what I was referring to).

Theoretically index AMs and table AMs are orthogonal things. How true
that will be in a world with more than one mature table AM remains to
be seen.

-- 
Peter Geoghegan



pgsql-hackers by date:

Previous
From: Andres Freund
Date:
Subject: Re: [PoC] Improve dead tuple storage for lazy vacuum
Next
From: Andres Freund
Date:
Subject: Re: [PoC] Improve dead tuple storage for lazy vacuum