【发布时间】:2016-05-15 15:48:20
【问题描述】:
在 PostgreSQL 9.5 表中,我有一个 integer 列 social。
当我尝试在存储过程中更新它时,在 in_users 类型为 jsonb 的变量中给定以下 JSON 数据(一个包含 2 个对象的数组,每个对象都有一个“社交”键):
'[{"sid":"12345284239407942","auth":"ddddc1808197a1161bc22dc307accccc",**"social":3**,"given":"Alexander1","family":"Farber","photo":"https:\/\/graph.facebook.com\/1015428423940942\/picture?type=large","place":"Bochum, Germany","female":0,"stamp":1450102770}, {"sid":"54321284239407942","auth":"ddddc1808197a1161bc22dc307abbbbb",**"social":4**,"given":"Alxander2","family":"Farber","photo":null,"place":"Bochum, Germany","female":0,"stamp":1450102800}]'::jsonb
那么下面的代码就失败了:
FOR t IN SELECT * FROM JSONB_ARRAY_ELEMENTS(in_users)
LOOP
UPDATE words_social SET
social = t->'social',
WHERE sid = t->>'sid';
END LOOP;
带有错误信息:
ERROR: column "social" is of type integer but expression is of type jsonb
LINE 3: social = t->'social',
^
HINT: You will need to rewrite or cast the expression.
我已尝试将该行更改为:
social = t->'social'::int,
然后我得到错误:
ERROR: invalid input syntax for integer: "social"
LINE 3: social = t->'social'::int,
^
为什么 PostgreSQL 不能识别数据是integer?
从JSON-TYPE-MAPPING-TABLE 我得到的印象是 JSON 数字会自动转换为 PostgreSQL 数字类型。
【问题讨论】:
-
我回滚了您上次有效添加新问题的编辑。如果仍然不清楚,请发布一个新问题。
标签: json postgresql plpgsql postgresql-9.5 postgresql-json