Pointers in custom types

Поиск
Список
Период
Сортировка
От Will Harrower
Тема Pointers in custom types
Дата
Msg-id 49A039CA.9080407@doc.ic.ac.uk
обсуждение исходный текст
Ответы Re: Pointers in custom types  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-general
Hi,

I'm writing a custom type in C that needs to manage two byte arrays
(among other things). I have attempted to implement this using something
similar to the following struct (along with corresponding input and
output functions):

typedef struct example {

    bytea* first;
    bytea* second;

} example;

This doesn't seem to work as I was hoping, as I get a segmentation fault
upon attempting to insert into a table column of this type (although a
cast will work fine).

What is the correct way to manage multiple byte arrays within a
datatype? Are pointers not usable within a base-type, because of the way
Postgres persists them? I guess that the above fails because postgres
looks at the size of the struct and simply persists that amount of
memory (or VARSIZE if the datatype is a varlena). Is this correct, or
should the above work in theory, and there must be a problem in other
parts of my implementation? I'm a novice with this stuff, so this is
probably a stupid question.

If pointers are a no-go, then the only other way I can think of is to
maintain one large byte array and an extra index which describes how
long the first array is, allowing the second array to be stored directly
afterwards.

Many thanks for any help,
Will.


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

Предыдущее
От: Tom Lane
Дата:
Сообщение: Re: Fixing invalid owners on pg_toast tables in 8.3.5
Следующее
От: Tom Lane
Дата:
Сообщение: Re: Fixing invalid owners on pg_toast tables in 8.3.5