sql >> Database >  >> RDS >> PostgreSQL

Het bijwerken van de integer-kolom van het jsonb-lid mislukt met:de kolom is van het type integer, maar de expressie is van het type jsonb

Een op een enkele set gebaseerde SQL-opdracht is veel efficiënter dan lussen:

UPDATE words_social w
SET    social = (iu->>'social')::int
FROM   JSONB_ARRAY_ELEMENTS(in_users) iu  -- in_user = function variable
WHERE  w.sid = iu->>'sid';                -- type of sid?

Om je oorspronkelijke vraag te beantwoorden:

Omdat u de jsonb . probeerde te converteren waarde naar integer . In je oplossing heb je al gevonden dat je de ->> . nodig hebt operator in plaats van -> om text te extraheren , die kan worden gecast naar integer .

Uw tweede poging heeft een tweede fout toegevoegd:

t->'social'::int

In aanvulling op het bovenstaande:operatorprioriteit . De cast-operator :: bindt sterker dan de json-operator -> . Zoals je jezelf al hebt gevonden, wil je echt:

(t->>'social')::int

Zeer vergelijkbaar geval op dba.SE:



  1. SQL-instructie om dubbele records te selecteren die meer dan 2 keer voorkomen

  2. Java-ondersteuning voor persistentie begrijpen met JPA

  3. VB6-toepassing Oracle 12 64-bits verbinding

  4. Hoe de stuff-functie in Oracle te gebruiken?