Re: Is a syscache tuple more like an on-disk tuple or a freshly made one?

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: Is a syscache tuple more like an on-disk tuple or a freshly made one?
Дата
Msg-id 526.1460758381@sss.pgh.pa.us
обсуждение исходный текст
Ответ на Is a syscache tuple more like an on-disk tuple or a freshly made one?  (Chapman Flack <chap@anastigmatix.net>)
Список pgsql-hackers
Chapman Flack <chap@anastigmatix.net> writes:
> I am tempted to apply HeapTupleGetDatum to a tuple retrieved from
> the syscache (as I already have code for processing a tuple presented
> as a Datum).

> But I see a comment on HeapTupleHeaderGetDatum: "This must *not* get
> applied to an on-disk tuple; the tuple should be freshly made by
> heap_form_tuple or some wrapper ..."

> ... and here I confess I'm unsure whether a tuple retrieved from
> the syscache is more like an on-disk one, or a freshly-made one,
> for purposes of the warning in that comment.

A tuple from syscache is an on-disk tuple for this purpose; it has
the original catalog row's header fields, not the header fields
appropriate for a Datum.  So no, that will *not* work, even disregarding
the question of whether it'd be safe to pass a pointer into syscache
to some random function.

> Is there a conventional proper way to pass a tuple retrieved from
> syscache to code that accepts a tuple as a Datum?

You could use heap_copy_tuple_as_datum().  See SPI_returntuple()
for an example.
        regards, tom lane



В списке pgsql-hackers по дате отправления:

Предыдущее
От: Alvaro Herrera
Дата:
Сообщение: Re: Is a syscache tuple more like an on-disk tuple or a freshly made one?
Следующее
От: Chapman Flack
Дата:
Сообщение: Re: Is a syscache tuple more like an on-disk tuple or a freshly made one?