Ho un aiutante che sta generando del codice per eseguire aggiornamenti in blocco per me e genera SQL che assomiglia a questo:
(Entrambi i campi attivo e core sono di tipo boolean
)
UPDATE fields as t set "active" = new_values."active","core" = new_values."core"
FROM (values
(true,NULL,3419),
(false,NULL,3420)
) as new_values("active","core","id") WHERE new_values.id = t.id;
Tuttavia non riesce con:
ERROR: column "core" is of type boolean but expression is of type text
Posso farlo funzionare aggiungendo ::boolean
ai null, ma sembra strano, perché NULL è considerato di tipo TEXT
?
Inoltre, è un po 'complicato eseguire il cast perché richiederebbe un po' di rielaborazione del codice per sapere a quale tipo dovrebbe essere eseguito il NULL (l'elenco di colonne e valori è attualmente generato automaticamente da un semplice array di oggetti JSON) .
Perché è necessario ed esiste una soluzione più elegante che non richiede al codice di generazione di conoscere il tipo di NULL?
Se è pertinente, sto usando sequelize su Node.JS per fare questo, ma sto ottenendo anche lo stesso risultato nel client della riga di comando di Postgres.
Cannot cast type boolean to bigint in column 1
(l'errore indica la frase :: tra la prima dichiarazione dei campi)