Hi, hackers! Currently, GiST stores each attribute in a compressed form. That is, each time attribute is written it's calling compress function, and when the attribute is accessed the decompress functions is called. Some types can't get any advantage out of this technique since the context of one value is not enough for seeding effective compression algorithm. And we have some of the compress functions like this Datum gist_box_compress(PG_FUNCTION_ARGS) { PG_RETURN_POINTER(PG_GETARG_POINTER(0)); } https://github.com/postgres/postgres/blob/master/src/backend/access/gist/gistproc.c#L195 https://github.com/postgres/postgres/blob/master/src/backend/utils/adt/rangetypes_gist.c#L221 https://github.com/postgres/postgres/blob/master/contrib/seg/seg.c#L255 https://github.com/postgres/postgres/blob/master/contrib/cube/cube.c#L384 Maybe we should make compress\decompress functions optional? Also, this brings some bit of performance. For the attached test I observe 6% faster GiST build and 4% faster scans. Not a big deal, but something. How do you think? In some cases, there are strange things in the code of compress\decompress. E.g. cube's decompress function is detoasting entry twice, to be very sure :) Best regards, Andrey Borodin, Octonica. -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers
pgsql-hackers by date:
Соглашаюсь с условиями обработки персональных данных