несоответствие отличительного блока (PG_MODULE_MAGIC)

inforse
Дата: 04.12.2014 18:42:29
Доброго всем вечера! Прошу помощи, поскольку заколебался уже. Заранее прошу прощения, может это где то уже обсуждалось. Не нашел.

Написал простенькую функцию на С, для того что бы подхватить на сервере. Так сказать проверить возможности.
Соответственно порылся в мануалах, сделал как описано все.

Код прогрулины:
#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 там последовательность этих же действий привела к успеху..

Может что подскажете?
Ёш
Дата: 04.12.2014 19:35:13
inforse,

покажите: aptitude search ~ipostgres
inforse
Дата: 05.12.2014 09:29:34
Ёш
inforse,

покажите: aptitude search ~ipostgres


root@astra-repl:~# aptitude search ~ipostgres
i   fly-admin-postgres                                                           - PostgreSQL administration tool
i   postgresql                                                                   - object-relational SQL database (supported version)
i A postgresql-9.1                                                               - object-relational SQL database, version 9.1 server
i   postgresql-client                                                            - front-end programs for PostgreSQL (supported version)
i A postgresql-client-9.1                                                        - front-end programs for PostgreSQL 9.1
i A postgresql-client-common                                                     - manager for multiple PostgreSQL client versions
i A postgresql-common                                                            - PostgreSQL database-cluster manager
i   postgresql-contrib                                                           - additional facilities for PostgreSQL (supported version)
i A postgresql-contrib-9.1                                                       - additional facilities for PostgreSQL
i   postgresql-doc                                                               - documentation for the PostgreSQL database management system
i A postgresql-doc-9.1                                                           - documentation for the PostgreSQL database management system
i   postgresql-server-dev-9.1                                                    - development files for PostgreSQL 9.1 server-side programming
Гость_0
Дата: 05.12.2014 10:54:43
inforse, вроде всё верно, покажите ещё версии:
aptitude -F'%v %p' search ~ipostgres
inforse
Дата: 05.12.2014 11:20:17
Гость_0
inforse, вроде всё верно, покажите ещё версии:
aptitude -F'%v %p' search ~ipostgres


root@astra-repl:/opt# aptitude -F'%v %p' search ~ipostgres
1.0.9-7        fly-admin-postgres
9.1+130astra.s postgresql
9.1.6-astra.se postgresql-9.1
9.1+130astra.s postgresql-client
9.1.6-astra.se postgresql-client-9.1
130astra.se1   postgresql-client-common
130astra.se1   postgresql-common
9.1+130astra.s postgresql-contrib
9.1.6-astra.se postgresql-contrib-9.1
9.1+130astra.s postgresql-doc
9.1.6-astra.se postgresql-doc-9.1
9.1.11-1       postgresql-server-dev-9.1
Ёш
Дата: 05.12.2014 11:57:06
inforse,

о, вот и проблема:
9.1.6-astra.se postgresql-9.1
9.1.11-1 postgresql-server-dev-9.1
видимо они по разному собраны, вам нужно где-то найти пакет postgresql-server-dev-9.1 для вашей сборки postgresql-9.1 9.1.6-astra.se
inforse
Дата: 05.12.2014 15:22:01
Ёш
inforse,

о, вот и проблема:
9.1.6-astra.se postgresql-9.1
9.1.11-1 postgresql-server-dev-9.1
видимо они по разному собраны, вам нужно где-то найти пакет postgresql-server-dev-9.1 для вашей сборки postgresql-9.1 9.1.6-astra.se


Спасибо за наводку!! Взял другую версию linuxa, там все пакеты 9.1.7, скомпилировал на ней, в базе подхватило все. Перекинул so шник на изначальный сервер, та же ошибка... (((

В связи с этим вопрос. Получается при переходе на следующую версию postgresa, все Сишные "свои" функции надо будет пересобирать???

P.S. нашел аналогичный пакет postgresql-server-dev-9.1_9.1.6-0ubuntu11.10_amd64.deb
Но это не помогло, ошибка сохранилась.
Maxim Boguk
Дата: 05.12.2014 15:33:58
inforse
Ёш
inforse,

о, вот и проблема:
9.1.6-astra.se postgresql-9.1
9.1.11-1 postgresql-server-dev-9.1
видимо они по разному собраны, вам нужно где-то найти пакет postgresql-server-dev-9.1 для вашей сборки postgresql-9.1 9.1.6-astra.se


Спасибо за наводку!! Взял другую версию linuxa, там все пакеты 9.1.7, скомпилировал на ней, в базе подхватило все. Перекинул so шник на изначальный сервер, та же ошибка... (((

В связи с этим вопрос. Получается при переходе на следующую версию postgresa, все Сишные "свои" функции надо будет пересобирать???

P.S. нашел аналогичный пакет postgresql-server-dev-9.1_9.1.6-0ubuntu11.10_amd64.deb
Но это не помогло, ошибка сохранилась.


-astra postgres он патченый и не совместимый с обычным... поэтому модули и не цепляются вне зависимости от версий
вам -astra надо dev версию а не просто от обычного postgresql

PS: нет между минорными версиями модули пересобирать не обязательно.
inforse
Дата: 09.12.2014 10:09:17
Maxim Boguk,

Спасибо жаль что я пакет для своей версии найти не смогу. Ну хоть буду знать.