| From: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
|---|---|
| To: | Chapman Flack <chap(at)anastigmatix(dot)net> |
| Cc: | PostgreSQL Hackers <pgsql-hackers(at)postgresql(dot)org> |
| Subject: | Re: Is a syscache tuple more like an on-disk tuple or a freshly made one? |
| Date: | 2016-04-15 22:13:01 |
| Message-ID: | 526.1460758381@sss.pgh.pa.us |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-hackers |
Chapman Flack <chap(at)anastigmatix(dot)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
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Chapman Flack | 2016-04-15 22:43:28 | Re: Is a syscache tuple more like an on-disk tuple or a freshly made one? |
| Previous Message | Alvaro Herrera | 2016-04-15 22:03:01 | Re: Is a syscache tuple more like an on-disk tuple or a freshly made one? |