LINUX.ORG.RU

PostgreSQL C functions, потеряно соединение с базой данных

 , ,


0

3

Здравствуйте.

Пытаюсь разобраться с 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
★★

из http://www.postgresql.org/docs/9.2/static/xfunc-c.html

Two different calling conventions are currently used for C functions. The newer «version 1» calling convention is indicated by writing a PG_FUNCTION_INFO_V1() macro call for the function, as illustrated below. Lack of such a macro indicates an old-style («version 0») function. The language name specified in CREATE FUNCTION is C in either case. Old-style functions are now deprecated because of portability problems and lack of functionality, but they are still supported for compatibility reasons.

я так понял (хреновый у меня английский...) что «version 0» стиль уже устарел и они во избежание каких то проблем рекомендуют пользовать «version 1»

или у тебя в обоих вариантах такая хня?

Skolotovich ★★★
()
Ответ на: комментарий от Skolotovich

Читал про этот стиль как-то наискосок, подумал, что именно он старый. Буду пробовать завтра. Спасибо.

Y ★★
() автор топика
Ответ на: комментарий от true_admin

Неа. С сервером всё ок.

Y ★★
() автор топика
Ответ на: комментарий от true_admin

В том смысле, что подключения проходят, запросы выполняются.

Y ★★
() автор топика
Ответ на: комментарий от Skolotovich

С V1 работает збс.

Спасибо.

Y ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.