Support of partial decompression for datums
| От | Ildus Kurbangaliev |
|---|---|
| Тема | Support of partial decompression for datums |
| Дата | |
| Msg-id | 20151204154718.48024130@lp обсуждение исходный текст |
| Ответы |
Re: Support of partial decompression for datums
Re: Support of partial decompression for datums |
| Список | pgsql-hackers |
Attached patch adds support of partial decompression for datums.
It will be useful in many cases when extracting part of data is
enough for big varlena structures.
It is especially useful for expanded datums, because it provides
storage for partial results.
I have another patch, which removes the 1 Mb limit on tsvector using
this feature.
Usage:
Assert(VARATT_IS_COMPRESSED(attr));
evh->data = (struct varlena *)
palloc(TOAST_COMPRESS_RAWSIZE(attr) + VARHDRSZ);
SET_VARSIZE(evh->data, TOAST_COMPRESS_RAWSIZE(attr) + VARHDRSZ);
/* Extract size of tsvector */
res = toast_decompress_datum_partial(attr, evh->data,
evh->dcState, sizeof(int32));
if (res == -1)
elog(ERROR, "compressed tsvector is corrupted");
evh->count = TS_COUNT((TSVector) evh->data);
/* Extract entries of tsvector */
res = toast_decompress_datum_partial(attr, evh->data,
evh->dcState, sizeof(int32) + sizeof(WordEntry) * evh->count);
if (res == -1)
elog(ERROR, "compressed tsvector is corrupted");
--
Ildus Kurbangaliev
Postgres Professional: http://www.postgrespro.com
Russian Postgres Company
Вложения
В списке pgsql-hackers по дате отправления: