PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

A atualização da coluna inteira do membro jsonb falha com:a coluna é do tipo inteiro, mas a expressão é do tipo jsonb


Um único comando SQL baseado em conjunto é muito mais eficiente do que o loop:
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?

Para responder à sua pergunta original:

Porque você estava tentando converter o jsonb valor para integer . Em sua solução, você já descobriu que precisa do ->> operador em vez de -> para extrair text , que pode ser convertido em integer .

Sua segunda tentativa adicionou um segundo erro:

t->'social'::int

Além do acima:precedência do operador . O operador de conversão :: vincula mais forte que o operador json -> . Como você já se encontrou, você realmente quer:
(t->>'social')::int

Caso muito semelhante no dba.SE: