Postgres 扩展开发
我正在使用从 ubuntu trusty 主存储库安装的 postgres-9.4 C API。这可能是一个愚蠢的问题,但请耐心等待。
我想使用一个函数将 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#ab23eca28d5880f86a0943d71c90d6654
但它是在 jsonb.c 中声明和定义的,而不是在 json.h 中声明的,因此与此函数链接并不是一个非常干净的解决方案。我尝试在 libpq.so 中查找 jsonb_from_cstring
的符号,但是没有。我猜我需要一个非标准的 postgres 版本?
所以问题是,从 C API 中将 cstring
转换为 Jsonb*
结构的最佳方法是什么?
编辑:
该扩展从外部源获取 json 数据作为字符串,并且应该能够将该字符串存储在 Jsonb
类型中
最佳答案
这个问题在 postgres 邮件列表中得到了回答
引用: 您可以调用“输入函数” - jsonb_in
Jsonb *targetjsonbvar = DatumGetJsonb(DirectFunctionCall1(jsonb_in,
CStringGetDatum(cstrvalue)));
关于postgresql jsonb 使用 c api 处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28464007/