Во-первых, вы всегда должны использовать palloc / pfree для управления памятью.PostgreSQL не будет управлять памятью для вас, но каждое соединение обрабатывается независимым процессом, поэтому, если вы потеряете память, оно продлится только срок службы соединения (что может быть достаточно долго).
Обычно данные распределяются как:
void *data = palloc(size_of_your_data + VARHDRSZ);
SET_VARSIZE(data, size_of_your_data + VARHDRSZ);
, а затем доступ к вашим данным осуществляется с помощью:
MyArray *myarr = (MyArray*) VARDATA(data);
По завершении вы можете:
PG_RETURN_POINTER(data);
Есливы возвращаете данные, вы не освобождаете их.Если вы хотите разместить временное хранилище, вы должны освободить его.
Теперь MyArray - это не то, что вы хотите иметь float8[]
.Вам необходимо использовать ArrayType , как описано в 34.9.11.Полиморфные аргументы и возвращаемые типы .