Сбой импорта пользовательской функции C в PostgreSQL: «sprintf_chk: символ не найден» - PullRequest
0 голосов
/ 23 сентября 2019

Я хочу использовать функции из библиотеки stdio.h для манипулирования некоторыми строками в функции PostgreSQL C.Проблема: по какой-то причине, когда я пытаюсь импортировать его в базу данных с CREATE EXTENSION, происходит сбой и возвращается: ERROR: could not load library "/usr/local/lib/postgresql/test.so": Error relocating /usr/local/lib/postgresql/test.so: __sprintf_chk: symbol not found.Вот тестовая функция, которую я использую:

#define _XOPEN_SOURCE

#include "postgres.h"
#include "fmgr.h"
#include "funcapi.h"
#include "executor/executor.h"
#include "executor/spi.h"
#include "utils/builtins.h"
#include <stdlib.h>
#include <stdio.h>

PG_FUNCTION_INFO_V1(printTest);
Datum printTest(PG_FUNCTION_ARGS) {
    char str[50];
    int i = 9;
    sprintf(str, "Hello I am PostgreSQL %d ! \n", i);
    PG_RETURN_TEXT_P(cstring_to_text(str));
}

А вот мой Makefile:

PG_CPPFLAGS = -I$(/usr/include)
SHLIB_LINK = $(stdio.h)

EXTENSION = test
DATA = test--0.1.sql
MODULE_big = test
OBJS = test.o

PG_CONFIG = pg_config
PGXS := $(shell $(PG_CONFIG) --pgxs)
include $(PGXS)

Я использую PostgreSQL 9.6 внутри контейнера Docker.

Я ужебыла такая проблема с другой библиотекой, и решением было изменить make-файл.Я пытался сделать это и в этот раз, но это не сработало, и я не знаю, что еще можно изменить.

Если вы знаете, что может быть причиной проблемы, очень рады.

Если вы знаете название книги или веб-сайта, который предлагает хорошую документацию о том, как писать функции C для Postgres, вам даже больше рады.Я постоянно сталкиваюсь с такими глупыми проблемами, потому что официальная документация слишком слабая.

1 Ответ

0 голосов
/ 23 сентября 2019

Ваша функция работает нормально, за исключением того, что вы забыли строку

PG_MODULE_MAGIC;

в начале.

Должна быть проблема с тем, как вы строите общий объект.

Правильно было бы:

PATH=/where/your/postgres/is/bin:$PATH make

Для получения дополнительной информации, пожалуйста, поделитесь своим сценарием расширения SQL, управляющим файлом и точным процессом сборки.

...