Доброго всем вечера! Прошу помощи, поскольку заколебался уже. Заранее прошу прощения, может это где то уже обсуждалось. Не нашел.
Написал простенькую функцию на С, для того что бы подхватить на сервере. Так сказать проверить возможности.
Соответственно порылся в мануалах, сделал как описано все.
Код прогрулины:
#include "postgres.h"
#include "fmgr.h"
#include "utils/geo_decls.h"
#ifdef PG_MODULE_MAGIC
PG_MODULE_MAGIC;
#endif
PG_FUNCTION_INFO_V1(add_one_float8);
Datum
add_one_float8(PG_FUNCTION_ARGS)
{
float8 arg = PG_GETARG_FLOAT8(0);
PG_RETURN_FLOAT8(arg + 1.0);
}
затем соответсвенно скомпилировал:
либо так
cc -I/usr/include/postgresql/9.1/server -fpic -c test.c
cc -shared -lpq -o test.so test.o
либо так
gcc -I/usr/include/postgresql/9.1/server -fpic -lpq test.c -o test.so
затем скопировал файлик в usr/lib/postgresql/9.1/lib
И соответственно поменял права на postgres у файлика
Затем иду в pgadmin и
CREATE OR REPLACE FUNCTION test_float(float)
RETURNS float AS
'$libdir/test', 'add_one_float8'
LANGUAGE c VOLATILE STRICT
COST 1;
И возникает ошибка..
postgresql |
---|
ОШИБКА: несовместимая библиотека "/usr/lib/postgresql/9.1/lib/test.so": несоответствие отличительного блока DETAIL: В сервере NAMEDATALEN = 256, в библиотеке: 64. ********** Ошибка **********
ОШИБКА: несовместимая библиотека "/usr/lib/postgresql/9.1/lib/test.so": несоответствие отличительного блока SQL-состояние: XX000 Подробности: В сервере NAMEDATALEN = 256, в библиотеке: 64.
|
Может кто сталкивался? Я так понимаю ошибка в PG_MODULE_MAGIC, что при проверке версий, что то не совпадает. Может нужно при компиляции что то дописывать?
Linux на основе Debian, x64. Компилирую на машине с базой.
P.S. пробовал на redhat стареньком x32 там последовательность этих же действий привела к успеху..
Может что подскажете?