Обработка 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
Цитата: вы можете вызвать "функцию ввода" - jsonb_in
Jsonb *targetjsonbvar = DatumGetJsonb(DirectFunctionCall1(json_in,
CStringGetDatum(cstrvalue)));