Обработка postgresql jsonb с помощью c api

Разработка расширений Postgres

Я работаю с C API для postgres-9.4, установленного из надежного основного репозитория ubuntu. Это может быть глупый вопрос, но, пожалуйста, потерпите меня.

Я хотел бы использовать функцию, которая преобразует структуру cstring в Jsonb*, определенную в

http://doxygen.postgresql.org/jsonb_8h.html

Есть функции, выполняющие именно это, уже определенные в

http://doxygen.postgresql.org/jsonb_8c.html

А именно, функция Datum jsonb_in ( PG_FUNCTION_ARGS ), однако я не уверен, могу ли я вызвать эту функцию из C API переносимым и безопасным способом. На первый взгляд кажется, что он предназначен для вызова postgres.

Я мог бы также использовать функцию jsonb_from_cstring

http://doxygen.postgresql.org/jsonb_8c.html#ab23eca28d5880f86a09

но он объявлен и определен в jsonb.c, а не объявлен в json.h, и, следовательно, связывание с этой функцией не очень чистое решение. Я попытался найти символы для jsonb_from_cstring в libpq.so, но их нет. Полагаю, мне нужна нестандартная сборка postgres?

Итак, вопрос в том, как лучше всего преобразовать структуру cstring в структуру Jsonb* из C API?

Редактировать:

Расширение получает данные json в виде строки из внешнего источника и, как предполагается, может хранить эту строку в типе Jsonb.


person iggy    schedule 11.02.2015    source источник
comment
Вы разрабатываете расширение Postgres? Или пользовательская функция для запуска на сервере? Эти функции не из общедоступного интерфейса, и вы не должны использовать их в противном случае.   -  person Tometzky    schedule 12.02.2015
comment
@Tometzky Я разрабатываю расширение postgres   -  person iggy    schedule 12.02.2015


Ответы (1)


Ответ на этот вопрос был дан в списке рассылки postgres.

http://www.postgresql.org/message-id/CAFj8pRCeGL7q_EGTz2=FyQZ2Qrtn1x_76mz3fuR=b7beEug7Wg@mail.gmail.com

Цитата: вы можете вызвать "функцию ввода" - jsonb_in

Jsonb *targetjsonbvar = DatumGetJsonb(DirectFunctionCall1(jsonb_in, CStringGetDatum(cstrvalue)));

person iggy    schedule 13.02.2015