【问题标题】:hstore operator precedence changed in between versionshstore 运算符优先级在版本之间更改
【发布时间】:2019-05-03 04:42:36
【问题描述】:

我发现这个查询:

SELECT properties->'somekey' IS NOT DISTINCT FROM 'someValue' FROM myTable;

在 PostgreSQL 9.5 中有效,但在 9.4 中无效,它给出了这个错误:

错误:操作符不存在:hstore -> boolean

因此,-> 运算符的运算符优先级显然在版本之间发生了变化。问题是,我在文档中找不到这个(甚至是什么优先级应该)。

有人能解释一下吗?

【问题讨论】:

  • 虽然没有明确提到hstore操作符,但见页尾注释:postgresql.org/docs/current/static/…release notes for 9.5还包含“调整操作符优先级以匹配SQL标准 i>"
  • @a_horse_with_no_name 所以...根据这个列表,9.4 的行为是一个错误?
  • 是的。旧的行为在你看来是正常的吗?

标签: postgresql hstore


【解决方案1】:

我对同样的错误消息感到困惑。问题是 Postgres 首先评估 'somekey' IS NOT DISTINCT FROM 'somevalue',然后使用从该语句生成的布尔值作为在 properties 中查找的键,从而产生错误。你只需要改变

SELECT properties->'somekey' IS NOT DISTINCT FROM 'someValue' FROM myTable;

SELECT (properties->'somekey') IS NOT DISTINCT FROM 'someValue' FROM myTable;

以便代码根据“SQL 标准”进行评估。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-14
    • 2011-07-07
    • 2021-03-28
    • 1970-01-01
    相关资源
    最近更新 更多