Обсуждение: pgsql: tableam: New callback relation_fetch_toast_slice.

Поиск
Список
Период
Сортировка

pgsql: tableam: New callback relation_fetch_toast_slice.

От
Robert Haas
Дата:
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(-)


Re: pgsql: tableam: New callback relation_fetch_toast_slice.

От
Michael Paquier
Дата:
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

Вложения

Re: pgsql: tableam: New callback relation_fetch_toast_slice.

От
Robert Haas
Дата:
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



Re: pgsql: tableam: New callback relation_fetch_toast_slice.

От
Michael Paquier
Дата:
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

Вложения