小编luk*_*kas的帖子

Postgresql:通过带有索引的通配符和比较运算符在JSON数组中查找值

我有一个表,我想搜索JSON数组数据.

CREATE TABLE data (id SERIAL, json JSON);

INSERT INTO data (id, json) 
  VALUES (1, '[{"name": "Value A", "value": 10}]');

INSERT INTO data (id, json) 
  VALUES (2, '[{"name": "Value B1", "value": 5}, {"name": "Value B2", "value": 15}]');
Run Code Online (Sandbox Code Playgroud)

本回答所述,我创建了一个函数,它还允许在数组数据上创建索引(重要).

CREATE OR REPLACE FUNCTION json_val_arr(_j json, _key text)
  RETURNS text[] AS
$$
SELECT array_agg(elem->>_key)
FROM   json_array_elements(_j) AS x(elem)
$$
  LANGUAGE sql IMMUTABLE;
Run Code Online (Sandbox Code Playgroud)

如果我想找到一个完整的值(例如"Value B1"),这很好用:

SELECT *
FROM data
WHERE '{"Value B1"}'::text[] <@ (json_val_arr(json, 'name'));
Run Code Online (Sandbox Code Playgroud)

现在我的问题:

  1. 是否可以使用通配符查找值(例如"Value*")?像以下(天真)方法的东西:

    ...
    WHERE '{"Value%"}'::text[] <@ …
    Run Code Online (Sandbox Code Playgroud)

sql postgresql indexing json

8
推荐指数
1
解决办法
7567
查看次数

标签 统计

indexing ×1

json ×1

postgresql ×1

sql ×1