我找不到任何有关使用 C 库访问 HSTORE 数据的文档。目前我正在考虑在查询中将 HSTORE 列转换为数组,但有没有办法避免这种转换?
最佳答案
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_array
或 hstore_to_matrix
。
要创建 hstore 值,您可以使用采用数组的 hstore 构造函数。如果您不想在代码中处理 PostgreSQL 的数组表示形式,则可以通过 VALUES
子句使用 array_agg
创建这些数组。
所有这些困惑将来都会消失,因为 PostgreSQL 9.4 可能在 hstore 和 json 类型之间有更好的互操作性,允许您在与 hstore 交互时只使用 json 表示。
关于postgresql - 如何使用 PostgreSQL C 库 (libpq) 访问 HSTORE 列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22537431/