postgresql – 在Postgres中从JSONB字段中取出的非SELECT值
发布时间:2020-12-13 16:16:44 所属栏目:百科 来源:网络整理
导读:我无法从Postgres 9.5中的 JSONB字段内的属性中选择非空值 SELECT data-’property’FROM mytable WHERE data-’property’IS NOT NULL; 我也尝试过使用NOTNULL. 当我运行其中任何一个时,我收到错误42883. “错误:运算符不存在.JSONB-布尔提示:没有运算符
我无法从Postgres 9.5中的
JSONB字段内的属性中选择非空值
SELECT data->>’property’FROM mytable WHERE data->>’property’IS NOT NULL; 我也尝试过使用NOTNULL. 当我运行其中任何一个时,我收到错误42883. “错误:运算符不存在.JSONB->>布尔提示:没有运算符匹配给定的名称和参数类型.您可能需要添加显式类型转换.”
我很快测试了你的问题,发现没问题:
patrick@brick:~$psql -d test psql (9.5.0) Type "help" for help. test=# CREATE TABLE mytable (id serial PRIMARY KEY,data jsonb); CREATE TABLE test=# INSERT INTO mytable (data) VALUES ('{"ip": "192.168.0.1","property": "router"}'),('{"ip": "127.0.0.1","property": "localhost"}'),('{"ip": "192.168.0.15","property": null}'); INSERT 0 3 test=# SELECT * FROM mytable; id | data ----+---------------------------------------------- 1 | {"ip": "192.168.0.1","property": "router"} 2 | {"ip": "127.0.0.1","property": "localhost"} 3 | {"ip": "192.168.0.15","property": null} (3 rows) test=# SELECT data->>'property' FROM mytable WHERE data->>'property' IS NOT NULL; ?column? ----------- router localhost (2 rows) 请注意,在jsonb中,应该在输入时精确指定NULL值(如上例所示),而不是某些引用版本.如果值不是NULL但是空字符串或类似’< null>‘的值(字符串)然后你应该调整你的测试来寻找:WHERE data->>’property’=”.如果是这种情况,您可以考虑使用jsonb_set()将这些值设置为真正的json null. 顺便说一下,你也可以这样做: SELECT data->>'property' FROM mytable WHERE data->'property' IS NOT NULL; 即测试jsonb值为NULL而不是其强制转换为文本.更高效,当然在更大的桌子上.这显然只适用于真正的空值. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |