postgresql – 在Postgres中从JSONB字段中取出的非SELECT值

postgresql – 在Postgres中从JSONB字段中取出的非SELECT值,第1张

概述我无法从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 testpsql (9.5.0)Type "help" for help.test=# CREATE table mytable (ID serial PRIMARY KEY,data Jsonb);CREATE tabletest=# 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@H_403_13@}');INSERT 0 3test=# 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@H_403_13@}(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'@H_403_13@ IS NOT NulL;

即测试Jsonb值为NulL而不是其强制转换为文本.更高效,当然在更大的桌子上.这显然只适用于真正的空值.

总结

以上是内存溢出为你收集整理的postgresql – 在Postgres中从JSONB字段中取出的非SELECT值全部内容,希望文章能够帮你解决postgresql – 在Postgres中从JSONB字段中取出的非SELECT值所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/1165527.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存