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

标签 postgresql hstore libpq

我找不到任何有关使用 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_arrayhstore_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/

相关文章:

sql - Django prefetch_related 与限制

javascript - 在 Sequelize 中将 varchar 列转换为日期

php - 这个 PostgreSQL 查询容易受到攻击吗?

ruby-on-rails - Postgres hstore 和 rails 的无效语句

sql - 在 Rails 中对部分字符串字段的 SQL 查询结果进行排序的最简单方法是什么?

arrays - 将 HSTORE 数组值转换为 JSONB 中的列

python - 使用 SQLAlchemy ORM (0.8) 搜索 HSTORE 列的正确语法是什么?

c - 从 PQexec 流式传输 libpq 结果

c++ - libpq 错误消息释放

c++ - 使用 libpq/libpqxx 进行输入清理