Man*_*ngh 20 sql database postgresql json postgresql-9.3
这可能是一个非常基本的问题,但我无法在网上找到任何内容.
如果我创建一个示例表:
create table dummy ( id int not null, data json );
Run Code Online (Sandbox Code Playgroud)
然后,如果我使用以下查询查询表:
select * from dummy where data->'x' = 10;
Run Code Online (Sandbox Code Playgroud)
现在由于表中没有记录,并且在任何记录中都没有'x'这样的属性,它应该返回零结果.
但是我收到以下错误:
postgres=# select * from dummy where data->'x' = 10;
ERROR: operator does not exist: json = integer
LINE 1: select * from dummy where data->'x' = 10;
Run Code Online (Sandbox Code Playgroud)
但是以下查询工作:
select * from dummy where cast(data->>'x' as integer) = 10;
Run Code Online (Sandbox Code Playgroud)
我在这里遗漏了什么或者类型转换是我从json字段获取整数值的唯一方法吗?如果是这种情况,当数据变得非常大时,它是否不会影响性能?
Fuz*_*ree 14
我在这里遗漏了什么或者类型转换是我从json字段获取整数值的唯一方法吗?
你是对的,类型转换是从json字段读取整数值的唯一方法.
如果是这种情况,当数据变得非常大时,它是否不会影响性能?
Postgres允许您索引函数,包括强制转换,因此下面的索引将允许您快速检索数据 - >> x具有某个整数值的所有行
CREATE INDEX dummy_x_idx ON dummy(cast("data"->>'x' AS int))
Run Code Online (Sandbox Code Playgroud)