powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / возврат длинного целого из С - функций в ХП постгреса
6 сообщений из 6, страница 1 из 1
возврат длинного целого из С - функций в ХП постгреса
    #33033478
Фотография mef
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос наверное несложный, но что-то я на нём застрял.
Есть функция на С, компилируем-подключаем к постгресу как ХП.
Если возвращаемый тип int в С и int4 в Постгресе - всё ОК.
Если возвращаемый тип long в С и int8 в Постгресе - получаем memory fault.
Вопрос - как бы из С вернуть в постгрес длинное целое (например результат поиска ID в таблице, тип которого - serial)?
Заранее спасибо всем кто помогает.
PS:
может кто ещё поможет с использованием SPI_exec?
она как аргумент принимает const char - строку SQL. Вот как в эту строчку подставить параметры?
то есть ясно, что д.б. что-то типа

sprintf(SQLcmd,"Select .... where ID=%i",param1);
...SPI_exec(SQLcmd)...проблема в том, что SQLcmd - это char *, тогда не работает sprintf, или char[256] (например), тогда не работает SPI_exec. Понятно, что надо типы приводить - но вот как и к чему?
...
Рейтинг: 0 / 0
возврат длинного целого из С - функций в ХП постгреса
    #33033612
Kartas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ежели не ошибаюсь есть в сях такой тип как word и производные
...
Рейтинг: 0 / 0
возврат длинного целого из С - функций в ХП постгреса
    #33034025
Hordi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кидай тело функции с int8.


Это работает однозначно.

char buf[256];
sprintf(buf,"...=%d",param1);
...SPI_exec(buf);

Успехов
...
Рейтинг: 0 / 0
возврат длинного целого из С - функций в ХП постгреса
    #33034517
gamych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mefВопрос наверное несложный, но что-то я на нём застрял.
Есть функция на С, компилируем-подключаем к постгресу как ХП.
Если возвращаемый тип int в С и int4 в Постгресе - всё ОК.
Если возвращаемый тип long в С и int8 в Постгресе - получаем memory fault.
Вопрос - как бы из С вернуть в постгрес длинное целое (например результат поиска ID в таблице, тип которого - serial)?
Заранее спасибо всем кто помогает.
PS:
может кто ещё поможет с использованием SPI_exec?
она как аргумент принимает const char - строку SQL. Вот как в эту строчку подставить параметры?
то есть ясно, что д.б. что-то типа

sprintf(SQLcmd,"Select .... where ID=%i",param1);
...SPI_exec(SQLcmd)...проблема в том, что SQLcmd - это char *, тогда не работает sprintf, или char[256] (например), тогда не работает SPI_exec. Понятно, что надо типы приводить - но вот как и к чему?
Ежели у тебя 32-разр. платформа (а судя по всему так), то long - это никак не int8, а int4. Юзай long long, и будет тебе счастье. Проверено.
...
Рейтинг: 0 / 0
возврат длинного целого из С - функций в ХП постгреса
    #33036637
Фотография mef
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сапасибо всем написавшим.
Действительно, у меня linux 32-x разрядная.
и вчитавшись в доки понял что и вправду long это int4. Так что сам виноват - читаем доки, они рулез.
может я чего не так делаю, но конструкция
char buf[256];
sprintf(buf,"...=%d",param1);
...SPI_exec(buf);
у меня железно вылетает в segmentation fault.
...
Рейтинг: 0 / 0
возврат длинного целого из С - функций в ХП постгреса
    #33040630
Фотография mef
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так, затуп мой. Всё правильно работает как и было указано. Надо лишь делать
Load 'filename' после перекомпилирования .so - иначе connection валится.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / возврат длинного целого из С - функций в ХП постгреса
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]