【问题标题】:Error: no such function: json_each in SQLite with JSON1 installed错误:没有这样的功能:安装了 JSON1 的 SQLite 中的 json_each
【发布时间】:2017-05-09 15:33:10
【问题描述】:

我已经通过 brew 安装了带有 JSON1 的 SQLite3:

brew install sqlite3 --with-json1 --with-fts5

版本:

3.15.2 2016-11-28 19:13:37 bbd85d235f7037c6a033a9690534391ffeacecc8

在运行查询时,某些函数可以正常工作,例如json_extract

sqlite> SELECT json_extract(Body, '$.issue.fields.labels') FROM Event WHERE json_extract(Body, '$.issue.fields.labels') != '[]';

["foo","bar","baz"]

但是,当我尝试使用json_eachjson_tree 时,它会失败:

sqlite> SELECT json_each(Body, '$.issue.fields.labels') FROM Event WHERE json_extract(Body, '$.issue.fields.labels') != '[]';

Error: no such function: json_each

Event 表中的Body 字段是有效的 JSON 字符串:

{"issue":{"fields":{"labels": ["foo","bar","baz"]}}}

labels 的值是一个数组。

我已阅读文档(并查看了json_each examples),搜索了互联网,但找不到任何其他要求来启用此功能。

我做错了什么,或者:我如何从 json_each/json_tree 中获益?

【问题讨论】:

  • 对于现在遇到此问题的任何人,sqlite 公式现在包括 JSON1 和 FTS,因此您不需要标志。那里的当前版本的 sqlite(运行 MacBook Pro 2019)是 3.32.3 2020-06-18。

标签: node.js sqlite sqlite-json1


【解决方案1】:

AFAIK,您不能在查询中使用json_each()json_tree() 作为字段,它们是table-valued functions。您只能像使用表格一样使用它们。

【讨论】:

    【解决方案2】:

    问题在于json_eachjson_tree表值函数,这意味着它们只能用于获取内存中已经存在的虚拟表上的数据,不能用于查询直接从数据库中获取数据。

    见:The Virtual Table Mechanism Of SQLite

    2.1.2。表值函数

    包含隐藏列的虚拟表可以用作 SELECT 语句的 FROM 子句中的表值函数。这 表值函数的参数成为对 隐藏虚拟表的列。

    SELECT json_each(Body, '$.issue.fields.labels') ... sqlite3 找不到与其SELECT 定义匹配的函数并导致您看到的错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-11
      • 2017-02-09
      • 2010-12-29
      • 2015-09-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多