PostgreSQL 9.5 テーブルには、integer
列がありますsocial
。
in_users
type の変数に次の JSON データ (それぞれが「social」キーを持つ 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
次に、次のコードは失敗します。
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 数値型に自動変換されるという印象を受けました。