2

Postgres 扩展开发

我正在使用从 ubuntu 可信赖的主仓库安装的postgres-9.4的 C API。这可能是一个愚蠢的问题,但请耐心等待。

我想使用一个函数将 a 转换cstringJsonb*定义的结构

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

已经在

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

即 function Datum jsonb_in ( PG_FUNCTION_ARGS ),但是我不确定是否可以以可移植且安全的方式从 C API 调用此函数。乍一看,它似乎是为了被 postgres 调用。

我也可以使用该功能jsonb_from_cstring

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

但它是在 json.h 中声明和定义的,jsonb.c而不是在 json.h 中声明的,因此与此函数链接不是一个非常干净的解决方案。我尝试在 libpq.so 中找到符号jsonb_from_cstring,但是没有。我猜我需要一个非标准的 postgres 版本?

所以问题是,从 C API中将 a 转换cstring为结构的最佳方法是什么?Jsonb*

编辑:

该扩展从外部源获取 json 数据作为字符串,并且应该能够将该字符串存储在一个Jsonb类型中

4

1 回答 1

2

这在 postgres 邮件列表中得到了回答

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

Quote: 你可以调用“输入函数” - jsonb_in

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

于 2015-02-13T18:58:50.943 回答