Обсуждение: pgsql: tableam: New callback relation_fetch_toast_slice.
tableam: New callback relation_fetch_toast_slice. Instead of always calling heap_fetch_toast_slice during detoasting, invoke a table AM callback which, when the toast table is a heap table, will be heap_fetch_toast_slice. This makes it possible for a table AM other than heap to be used as a TOAST table. It also completes the series of commits intended to improve the interaction of tableam with TOAST that began with commit 8b94dab06617ef80a0901ab103ebd8754427ef5a; detoast.c is now, hopefully, fully AM-independent. Patch by me, reviewed by Andres Freund and Peter Eisentraut. Discussion: http://postgr.es/m/CA+TgmoZv-=2iWM4jcw5ZhJeL18HF96+W1yJeYrnGMYdkFFnEpQ@mail.gmail.com Branch ------ master Details ------- https://git.postgresql.org/pg/commitdiff/ce242ae154dde3217971c6f262705d80999f4e00 Modified Files -------------- src/backend/access/common/detoast.c | 199 +------------------------------ src/backend/access/heap/heapam_handler.c | 1 + src/backend/access/heap/heaptoast.c | 182 ++++++++++++++++++++++++++++ src/include/access/heaptoast.h | 10 ++ src/include/access/tableam.h | 46 +++++++ 5 files changed, 245 insertions(+), 193 deletions(-)
Hi Robert, On Tue, Jan 07, 2020 at 07:37:20PM +0000, Robert Haas wrote: > tableam: New callback relation_fetch_toast_slice. > > Instead of always calling heap_fetch_toast_slice during detoasting, > invoke a table AM callback which, when the toast table is a heap > table, will be heap_fetch_toast_slice. > > This makes it possible for a table AM other than heap to be used > as a TOAST table. It also completes the series of commits intended > to improve the interaction of tableam with TOAST that began with > commit 8b94dab06617ef80a0901ab103ebd8754427ef5a; detoast.c is > now, hopefully, fully AM-independent. > > Patch by me, reviewed by Andres Freund and Peter Eisentraut. anole does not compile after this commit: https://buildfarm.postgresql.org/cgi-bin/show_log.pl?nm=anole&dt=2020-01-08%2001%3A54%3A11 From the logs: make[4]: Entering directory `/home/pgbfarm/buildroot/HEAD/pgsql.build/src/backend/access/brin' cc +Olibmerrno -g +DD64 -I../../../../src/include -D_XOPEN_SOURCE_EXTENDED -I/opt/packages/libxml2-2.7.8/inst/include/libxml2 -I/opt/packages/zlib-1.2.5/inst/include -I/opt/packages/libxslt-1.1.26/inst/include -I/opt/packages/libxml2-2.7.8/inst/include -c -o brin.o brin.c "../../../../src/include/access/tableam.h", line 1662: error #2118: a void function may not return a value return toastrel->rd_tableam->relation_fetch_toast_slice(toastrel, valueid, ^ "brin.c", line 87: warning #4232-D: conversion from "Node *" to a more strictly aligned type "IndexAmRoutine *" may cause misaligned access IndexAmRoutine *amroutine = makeNode(IndexAmRoutine); ^ -- Michael
Вложения
On Tue, Jan 7, 2020 at 10:27 PM Michael Paquier <michael@paquier.xyz> wrote: > anole does not compile after this commit: > https://buildfarm.postgresql.org/cgi-bin/show_log.pl?nm=anole&dt=2020-01-08%2001%3A54%3A11 > > From the logs: > make[4]: Entering directory > `/home/pgbfarm/buildroot/HEAD/pgsql.build/src/backend/access/brin' > cc +Olibmerrno -g +DD64 -I../../../../src/include > -D_XOPEN_SOURCE_EXTENDED > -I/opt/packages/libxml2-2.7.8/inst/include/libxml2 > -I/opt/packages/zlib-1.2.5/inst/include > -I/opt/packages/libxslt-1.1.26/inst/include > -I/opt/packages/libxml2-2.7.8/inst/include -c -o brin.o brin.c > "../../../../src/include/access/tableam.h", line 1662: error #2118: a > void function may not return a value > return > toastrel->rd_tableam->relation_fetch_toast_slice(toastrel, > valueid, > ^ Huh, I'm surprised that didn't break everywhere. Pushed a fix. -- Robert Haas EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company
On Thu, Jan 09, 2020 at 09:12:48AM -0500, Robert Haas wrote: > Huh, I'm surprised that didn't break everywhere. Pushed a fix. Thanks. -- Michael