From: | Peter Geoghegan <pg(at)bowt(dot)ie> |
---|---|
To: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
Cc: | Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>, Bruce Momjian <bruce(at)momjian(dot)us>, shangzi(dot)x(at)columbia(dot)edu, Pg Docs <pgsql-docs(at)lists(dot)postgresql(dot)org> |
Subject: | Re: relpages in pg_class |
Date: | 2022-08-19 18:25:52 |
Message-ID: | CAH2-Wz=xFBK69PiXo8aFQhDYvKqVtaVTQfS+LD1aAtacbPfh=w@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-docs |
On Fri, Aug 19, 2022 at 9:40 AM Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> wrote:
> Yeah, we use "blocks" and "pages" interchangeably, which is something
> I don't feel a need to change; but evidently the OP didn't realize that.
> This is a job for the glossary, perhaps?
I think that they're synonyms that can often (but not always) be used
interchangeably. I *think* that this understanding is shared by other
people, though I should check. Here goes:
To me, "block" emphasizes on-disk/relfilenode storage. Something that
exists at a particular physical offset in a particular file (a
BlockNumber + relfilenode). On the other hand, the term "page"
emphasizes the in-memory format, and the indirection provided by the
bufpage.c slotted page format (i.e. line pointer array indirection).
This line pointer indirection is really central to lots of important
things, including (just for example) our "physiological" approach to
WAL logging -- WAL records describe changes in a way that is physical
to a block, logical within a page. Most users don't need to care about
these distinctions, but hackers might find the nuance of it quite
useful. It bleeds into a lot of things, and is quite easy to take for
granted -- which might actually cost you.
--
Peter Geoghegan
From | Date | Subject | |
---|---|---|---|
Next Message | Bruce Momjian | 2022-08-19 19:16:32 | Re: relpages in pg_class |
Previous Message | Tom Lane | 2022-08-19 16:39:55 | Re: relpages in pg_class |