我找不到任何关于使用C库进行HSTORE数据访问的文档。目前我考虑在查询中将HSTORE列转换为数组,但有没有办法避免此类转换?
答案 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_array
或hstore_to_matrix
,如果您愿意处理PostgreSQL数组表示。
要创建hstore值,可以使用带有数组的hstore构造函数。如果您不想在代码中处理PostgreSQL的数组表示,那么可以使用array_agg
在VALUES
子句上创建这些数组。
所有这些混乱都将在未来消失,因为PostgreSQL 9.4可能在hstore和json类型之间有更好的互操作性,允许您在与hstore交互时使用json表示。