postgresql jsonb 使用 c api 处理

标签 postgresql c-api jsonb

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 邮件列表中得到了回答

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

引用: 您可以调用“输入函数” - jsonb_in

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

关于postgresql jsonb 使用 c api 处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28464007/

相关文章:

performance - 什么 dbus 性能问题会阻止它进入嵌入式系统?

python - 在 python 2 上释放 C 扩展模块时运行函数

sql - 在 PostgreSQL 中直到当前日期的每月工作日

sql - 获得每日错误的百分比

c - 如何找出卡住的 tensorflow 图的正确输入和输出操作?

java - 在 nativeQuery 中注入(inject) JSON 参数

postgresql - 如何从 jsonb 返回对象数组?

postgresql - 有条件地执行 jsonb_array_elements

sql - 在不丢失数据的情况下将列类型字符 varying(3) 更改为 bool 值

sql - 在 PostgreSQL 中没有主键的表用于