JSONB 字段和字符串键

JSONB fields and string keys

我有一个包含以下内容的 JSONB 列:

{"ibd":正确,"participant_id":"P016","sample_participant_id":"B1"}

如果我查询不带双引号的值,我会得到一个错误:

ERROR: invalid input syntax for type 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"'

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

谢谢, 伊甸园

-> 运算符在 jsonb returns jsonb 上,因此您无法将 json 与字符串文字('B1') 或 text 类型。

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

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

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

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

Demo