JSONB字段和字符串键

时间:2019-01-13 14:40:22

标签: postgresql jsonb

我有一个JSONB列,内容如下:

{“ ibd”:true,“ participant_id”:“ P016”,“ sample_participant_id”:“ B1”}

如果查询不带双引号的值,则会出现错误:

  

错误:类型json LINE 1的无效输入语法:... ERE   sample_metadata.metadata->'sample_participant_id'='B1'

针对:

WHERE sample_metadata.metadata->'sample_participant_id' = 'B1'

但是

WHERE sample_metadata.metadata->'sample_participant_id' = '"B1"'

它按预期工作。我不明白的是为什么我需要双引号。它们是实际值吗?

谢谢, 伊甸园

1 个答案:

答案 0 :(得分:2)

->上的

jsonb运算符返回jsonb,因此您无法将json与字符串文字('B1')或text类型进行比较。

WHERE sample_metadata.metadata->'sample_participant_id' = '"B1"' 

之所以有效,是因为可以将元素"B1"隐式转换为jsonb进行比较

您应该使用->>运算符进行比较。它返回text

WHERE metadata->>'sample_participant_id' = 'B1'

Demo