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

时间:2014-03-20 15:18:54

标签: postgresql hstore libpq

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

1 个答案:

答案 0 :(得分:2)

libpqtypes似乎对hstore有所支持。

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

SELECT t.id, k, v FROM thetable t, LATERAL each(t.hstorefield);

或者在旧的PostgreSQL版本上,你可以使用quirky和nonstandard set-returns-function-in-SELECT形式:

SELECT t.id, each(t.hstorefield) FROM thetable t;

(但请注意,如果以这种方式从t选择多个记录,您会得到奇怪的结果,而LATERAL会很好。)

另一种选择是在查询时使用hstore_to_arrayhstore_to_matrix,如果您愿意处理PostgreSQL数组表示。

要创建hstore值,可以使用带有数组的hstore构造函数。如果您不想在代码中处理PostgreSQL的数组表示,那么可以使用array_aggVALUES子句上创建这些数组。

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