2

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

4

1 回答 1

2

libpqtypes似乎对hstore.

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

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

或者在旧 PostgreSQL 版本上,您可以使用古怪和非标准的 set-returning-function-in-SELECT 形式:

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

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

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

要创建 hstore 值,您可以使用带数组的 hstore 构造函数。如果您不想在代码中处理 PostgreSQL 的数组表示,则可以依次使用array_aggover子句创建这些数组。VALUES

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

于 2014-03-21T01:51:45.577 回答