PostgreSQL hstore 串联

PostgreSQL hstore concatenation

根据 TFM (Postgres docs),您使用普通连接运算符连接两个 HSTORE:

SELECT 'a=>b, c=>d'::hstore || 'c=>x, d=>q'::hstore

结果:

"a"=>"b", "c"=>"x", "d"=>"q"

但是,当 运行 完全相同的命令时,我收到错误消息:

[42883] ERROR: operator does not exist: hstore || hstore Hint: No operator matches the given name and argument type(s). You might need to add explicit type casts.

我能得到想要的结果的唯一方法是做一些让我想哭的骇人听闻的事情:首先将我拥有的任何 HSTORE 转换为文本,然后连接文本并转换回 HSTORE。当然,这并不好,因为文档还指出,如果存在重复的键,则无法保证哪个键会在连接后存活下来。

在我向 Postgres 人员提交错误之前,其他人可以复制这个吗?版本信息:

select version();
PostgreSQL 9.4.5 on x86_64-unknown-linux-gnu, compiled by gcc (Debian 4.7.2-5) 4.7.2, 64-bit
select extname,extversion from pg_catalog.pg_extension;
hstore  1.3

解决了问题。 HSTORE 扩展被安装到一个单独的模式中;我能够通过识别它来调用该模式 (sys.hstore),但它仍然不喜欢运算符 ||。修复实际上非常简单:我将 sys 添加到 search_path.