如何使用PostgreSQL C库(libpq)访问HSTORE列?

如何使用PostgreSQL C库(libpq)访问HSTORE列?,postgresql,hstore,libpq,Postgresql,Hstore,Libpq,我找不到任何关于使用C库访问HSTORE数据的文档。目前我正在考虑在查询中只将HSTORE列转换为数组,但有没有办法避免这种转换?似乎对HSTORE有一些支持 另一种选择是避免直接与代码中的hstore交互。您仍然可以从数据库中受益,而无需在客户端处理其文本表示。假设您要获取一个hstore字段;您只需使用: SELECT t.id, k, v FROM thetable t, LATERAL each(t.hstorefield); 或者在旧的PostgreSQL版本上,您可以使用SELEC

我找不到任何关于使用C库访问HSTORE数据的文档。目前我正在考虑在查询中只将HSTORE列转换为数组,但有没有办法避免这种转换?

似乎对
HSTORE
有一些支持

另一种选择是避免直接与代码中的
hstore
交互。您仍然可以从数据库中受益,而无需在客户端处理其文本表示。假设您要获取一个hstore字段;您只需使用:

SELECT t.id, k, v FROM thetable t, LATERAL each(t.hstorefield);
或者在旧的PostgreSQL版本上,您可以使用SELECT表单中的古怪且非标准的集合返回函数:

SELECT t.id, each(t.hstorefield) FROM thetable t;
(但要注意,如果以这种方式从
t
中选择多个记录,您将得到奇怪的结果,而
LATERAL
则可以)

另一个选项是在查询时使用
hstore\u to_数组
hstore\u to_矩阵
,前提是您可以轻松处理PostgreSQL数组表示

要创建hstore值,可以使用接受数组的hstore构造函数。如果您不想在代码中处理PostgreSQL的数组表示,则可以通过
VALUES
子句使用
array\u agg
创建这些数组


所有这些乱七八糟的情况在将来都会消失,因为PostgreSQL 9.4可能在hstore和json类型之间具有更好的互操作性,允许您在与hstore交互时只使用json表示。

谢谢!我认为你的例子中有一个小错误。它应该是
each
,而不是
hstore\each
(至少在9.3中)。我对此进行了测量,至少在我的例子中,数组转换提供了明显更好的性能。@Muton谢谢,更正了。我总是用
json\u把它弄糊涂。