Re: tableam vs. TOAST
Robert Haas <robertmhaas@gmail.com>
From: Robert Haas <robertmhaas@gmail.com>
To: Peter Eisentraut <peter.eisentraut@2ndquadrant.com>
Cc: Andres Freund <andres@anarazel.de>,
Alvaro Herrera <alvherre@2ndquadrant.com>, Prabhat Sahu <prabhat.sahu@enterprisedb.com>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2019-11-22T15:41:02Z
Lists: pgsql-hackers
Attachments
- v9-0002-Code-cleanup-for-toast_fetch_datum-and-toast_fetc.patch (application/octet-stream) patch v9-0002
- v9-0003-Move-heap-specific-detoasting-logic-into-a-separa.patch (application/octet-stream) patch v9-0003
- v9-0004-tableam-New-callback-relation_fetch_toast_slice.patch (application/octet-stream) patch v9-0004
- v9-0001-tableam-Allow-choice-of-toast-AM.patch (application/octet-stream) patch v9-0001
On Thu, Nov 21, 2019 at 5:37 AM Peter Eisentraut <peter.eisentraut@2ndquadrant.com> wrote: > Partial review: The 0001 patch seems very sensible. Some minor comments > on that: Thanks for the review. Updated patches attached. This version is more complete than the last set of patches I posted. It looks like this: 0001 - Lets a table AM that needs a toast table choose the AM that will be used to implement the toast table. 0002 - Refactoring and code cleanup for TOAST code. 0003 - Move heap-specific portion of logic refactored by previous patch to a separate function. 0004 - Lets a table AM arrange to call a different function when detoasting, instead of the one created by 0003. > Perhaps rename the residx variable (in both functions). You have gotten > rid of all the res* variables except that one. That name as it is right > now isn't very helpful at all. OK, I renamed residx to curchunk and nextidx to expectedchunk. > You have collapsed the error messages for "chunk %d of %d" and "final > chunk %d" and replaced it with just "chunk %d". I think it might be > better to keep the "chunk %d of %d" wording, for more context, or was > there a reason why you wanted to remove the total count from the message? No, not really. Adjusted. > I believe this assertion > > + Assert(endchunk <= totalchunks); > > should be < (strictly less). I think you're right. Fixed. > In the commit message you state that this assertion replaces a run-time > check, but I couldn't quite make out which one you are referring to > because all the existing run-time checks are kept, with slightly > refactored conditions. Pre-patch, there is this condition: - if ((residx != nextidx) || (residx > endchunk) || (residx < startchunk) This checks that the expected chunk number is equal to the one we want, but not greater than the last one we were expecting nor less than the first one we were expecting. The check is redundant if you suppose that we never compute nextidx so that it is outside the bounds of startchunk..endchunk. Since nextidx (or expectedchunk as these patches now call it) is initialized to startchunk and then only incremented, it seems impossible for the first condition to ever fail, so it is no longer tested there. The latter chunk is also no longer tested there; instead, we do this: + Assert(endchunk < totalchunks); That's what the commit message is on about. -- Robert Haas EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company
Commits
-
tableam: New callback relation_fetch_toast_slice.
- ce242ae154dd 13.0 landed
-
tableam: Allow choice of toast AM.
- 83322e38da1a 13.0 landed
-
Move heap-specific detoasting logic into a separate function.
- e9fd0415e6e2 13.0 landed
-
Code cleanup for toast_fetch_datum and toast_fetch_datum_slice.
- d5406dea25b6 13.0 landed
-
Rename some toasting functions based on whether they are heap-specific.
- 2e8b6bfa90b2 13.0 landed
-
Create an API for inserting and deleting rows in TOAST tables.
- bd124996ef0d 13.0 landed
-
Split tuptoaster.c into three separate files.
- 8b94dab06617 13.0 landed
-
tableam: Move heap-specific logic from needs_toast_table below tableam.
- 1171d7d58545 12.0 cited