sql >> Database teknologi >  >> RDS >> PostgreSQL

Opdatering af heltalskolonne fra jsonb-medlem mislykkes med:kolonne er af typen heltal, men udtryk er af typen jsonb

En enkelt sæt-baseret SQL-kommando er langt mere effektiv end looping:

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?

Sådan besvarer du dit oprindelige spørgsmål:

Fordi du prøvede at konvertere jsonb værdi til heltal . I din løsning har du allerede fundet ud af, at du har brug for ->> operator i stedet for -> for at udtrække tekst , som kan castes til heltal .

Dit andet forsøg tilføjede en anden fejl:

t->'social'::int

Ud over ovenstående:operatørpræference . Cast-operatøren :: binder stærkere end json-operatoren -> . Som du allerede har fundet dig selv, ønsker du virkelig:

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

Meget lignende sag på dba.SE:



  1. Fandt en svag escape-funktion til MySql, hvordan udnytter man den?

  2. Konfigurer SQL-job i SQL Server ved hjælp af T-SQL

  3. MariaDB kan ikke starte efter opdatering:[Advarsel] Kan ikke oprette testfil /home/mysql/beta.lower-test

  4. Hvordan finder jeg det mest almindelige resultat i en kolonne i min MySQL-tabel