Здравствуйте.
Пытаюсь разобраться с C-функциями для PostgreSQL.
Компилирую простой тест:
#include "postgres.h"
#include "utils/geo_decls.h"
#ifdef PG_MODULE_MAGIC
PG_MODULE_MAGIC;
#endif
float8 *
add_one_float8(float8 *arg)
{
float8 *result = (float8 *) palloc(sizeof(float8));
*result = *arg + 1.0;
return result;
}
Компилирую следующим образом:
gcc -I/usr/include/postgresql/server/ -fpic -c program.c && gcc -shared -o program.so program.o
Подключаю:
create or replace function test(double precision) returns double precision as '/full/path/to/program', 'add_one_float8' language C strict;
Вызываю:
# select test(3.0);
Подключение к серверу потеряно. Попытка восстановления неудачна.
!>
Что я делаю не так?
$ gcc --version
gcc (Gentoo 4.6.3 p1.11, pie-0.5.2) 4.6.3
$ psql --version
psql (PostgreSQL) 9.2.3