Обработка postgresql jsonb с помощью 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

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

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

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

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

1 ответ

На этот вопрос ответили в списке рассылки postgres

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

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

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

Другие вопросы по тегам