运算符不存在:json @> 未知

Man*_*Pal 5 postgresql

我有下表,我想要其 userid='user-1' 和 gridname='RT' 的布局名称

| userid |                                                                              defaultdata |
|--------|------------------------------------------------------------------------------------------|
| user-1 | [{"gridname":"RT", "layoutname":"layout-1"},{"gridname":"RT2", "layoutname":"layout-2"}] |
| user-2 | [{"gridname":"RT", "layoutname":"layout-3"},{"gridname":"RT2", "layoutname":"layout-2"}] |
Run Code Online (Sandbox Code Playgroud)

到目前为止,我已经尝试过这个。

 SELECT userid, obj.value->>'gridname' AS gridname
 FROM   col.userdefault t
 JOIN   lateral jsonb_array_elements(t.defaultdata::jsonb) obj(value) ON 
 obj.value->>'_gridname' = 'RT'
 WHERE  defaultdata @> '[{"_gridname":"RT"}]';
Run Code Online (Sandbox Code Playgroud)

但不工作并收到以下错误:

ERROR:  operator does not exist: json @> unknown
LINE 4: WHERE  defaultdata @> '[{"_gridname":"RT"}]::jsonb';
                           ^
HINT:  No operator matches the given name and argument types. You might need to add explicit type casts.
SQL state: 42883
Character: 198
Run Code Online (Sandbox Code Playgroud)

Lau*_*lbe 7

@>运营商不存在json,只为jsonb

您可以使用显式类型转换摆脱即时错误,如错误消息所示:

WHERE defaultdata::jsonb @> '...'
Run Code Online (Sandbox Code Playgroud)

不过,看得更远,我想知道是否json适合您的数据类型。对于要在数据库内部有效操作的数据,jsonb更好。