Re: extensible external toast tuple support - Mailing list pgsql-hackers
From | Hitoshi Harada |
---|---|
Subject | Re: extensible external toast tuple support |
Date | |
Msg-id | CAP7Qgmm4PXENG7mKdOmd1anVCEuxzS7punD70FHu4THa2YzqGw@mail.gmail.com Whole thread Raw |
In response to | Re: extensible external toast tuple support (Andres Freund <andres@2ndquadrant.com>) |
Responses |
Re: extensible external toast tuple support
|
List | pgsql-hackers |
On Tue, Jun 18, 2013 at 1:58 AM, Andres Freund <andres@2ndquadrant.com> wrote:
On 2013-06-18 00:56:17 -0700, Hitoshi Harada wrote:Cool!
> On Fri, Jun 14, 2013 at 4:06 PM, Andres Freund <andres@2ndquadrant.com>wrote:
>
> >
> > Here's the updated version. It shouldn't contain any obvious WIP pieces
> > anymore, although I think it needs some more documentation. I am just
> > not sure where to add it yet, postgres.h seems like a bad place :/
> >
> >
> I have a few comments and questions after reviewing this patch.It calls toast_fetch_datum() for any kind of external datum, so it
> - heap_tuple_fetch_attr doesn't need to be updated to reflect ONDISK macro?
should be fine since ONDISK is handled in there.
toast_fetch_datum doesn't expect the input is INDIRECT. At least I see the code path in the same file around toast_insert_or_update() where we have a chance to (possibly accidentally) try to fetch ONDISK toasted value from non-ONDISK datum.
> - -1 from me to use enum for tag types, as I don't think it needs to be.Well, relkind cannot easily be a enum because it needs to be stored in a
> This looks more like other "kind" macros such as relkind, but I know
> there's pros/cons
char field. I like using enums because it gives you the chance of using
switch()es at some point and getting warned about missed cases.
Why do you dislike it?
I put -1 just because it doesn't have to be now. If you argue relkind is char field, tag is also uint8.
> - don't we need cast for tag value comparison in VARTAG_SIZE macro, sinceI think it should be fine (and the compiler doesn't warn) due to the
> tag is unit8 and enum is signed int?
integer promotion rules.
> - Is there better way to represent ONDISK size, instead of magic numberI explicitly did not want to do that, since the numbers really don't
> 18? I'd suggest constructing it with sizeof(varatt_external).
have anything to do with the struct size anymore. Otherwise the next
person reading that part will be confused because there's a 8byte struct
with the enum value 1. Or somebody will try adding another type of
external tuple that also needs 18 bytes by copying the sizeof(). Which
will fail in ugly, non-obvious ways.
Sounds reasonable. I was just confused when I looked at it first.
> Other than that, the patch applies fine and make check runs, though I don'tYea, I only use the API in the changeset extraction patch. That actually
> think the new code path is exercised well, as no one is creating INDIRECT
> datum yet.
worries me to. But I am not sure where to introduce usage of it in core
without making the patchset significantly larger. I was thinking of
adding an option to heap_form_tuple/heap_fill_tuple to allow it to
reference _4B Datums instead of copying them, but that would require
quite some adjustments on the callsites.
Maybe you can create a user-defined function that creates such datum for testing, just in order to demonstrate it works fine.
> Also, I wonder how we could add more compression in datum, as well as howSeparate patchset by now, yep ;).
> we are going to add more compression options in database. I'd love to see
> pluggability here, as surely the core cannot support dozens of different
> compression algorithms, but because the data on disk is critical and we
> cannot do anything like user defined functions. The algorithms should be
> optional builtin so that once the system is initialized the the plugin
> should not go away. Anyway pluggable compression is off-topic here.
I just found. Will look into it.
Thanks,
pgsql-hackers by date: