相关疑难解决方法(0)

从 jsonb 成员更新整数列失败:列的类型为整数,但表达式的类型为 jsonb

在 PostgreSQL 9.5 表中,我有一integersocial

当我尝试在存储过程中更新它时,在in_userstype 变量中给出以下 JSON 数据(一个包含 2 个对象的数组,每个对象都有一个“社交”键)jsonb

'[{"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
Run Code Online (Sandbox Code Playgroud)

然后以下代码失败:

    FOR t IN SELECT * FROM JSONB_ARRAY_ELEMENTS(in_users)
    LOOP
            UPDATE words_social SET
                    social = t->'social',
            WHERE sid = t->>'sid';
    END LOOP;
Run Code Online (Sandbox Code Playgroud)

带有错误消息:

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.
Run Code Online (Sandbox Code Playgroud)

我曾尝试将该行更改为:

social = t->'social'::int,
Run Code Online (Sandbox Code Playgroud)

但后来我得到了错误:

ERROR:  invalid …
Run Code Online (Sandbox Code Playgroud)

postgresql json plpgsql postgresql-json postgresql-9.5

3
推荐指数
1
解决办法
1146
查看次数