Postgresql Postgres json选择不忽略引号

Postgresql Postgres json选择不忽略引号,postgresql,Postgresql,我有下表和设置 create table test ( id serial primary key, name text not null, meta json ); insert into test (name, meta) values ('demo1', '{"name" : "Hello"}') 然而,当我运行这个查询时,这就是结果 select * from test; id | name | meta ----+-------+-----------

我有下表和设置

create table test (
  id serial primary key,
  name text not null,
  meta json
);

insert into test (name, meta) values ('demo1', '{"name" : "Hello"}')
然而,当我运行这个查询时,这就是结果

select * from test;
 id | name  |        meta
----+-------+--------------------
  1 | demo1 | {"name" : "Hello"}
(1 row)
但是

-

这是有效的

select * from test where cast(meta->'name' as text) = '"Hello"';
 id | name  |        meta
----+-------+--------------------
  1 | demo1 | {"name" : "Hello"}
(1 row)

有谁能告诉我这句话的相关性是什么,为什么不进行简单的字符串搜索/比较?或者,这与转换有关吗?

这是因为
->
获取的是字段而不是值,因此您需要添加转换,以向postgresql说明您要使用的数据类型

因此,要像您希望的那样运行查询,您需要使用
->
,它将json元素获取为文本,请参见文档中的此处

因此,您的查询应该如下所示:

select *
  from test 
 where meta->>'name' = 'Hello';
看到它在这里工作:

select * from test where cast(meta->'name' as text) = '"Hello"';
 id | name  |        meta
----+-------+--------------------
  1 | demo1 | {"name" : "Hello"}
(1 row)
select *
  from test 
 where meta->>'name' = 'Hello';