У меня есть помощник, который генерирует некоторый код для массовых обновлений для меня и генерирует SQL, который выглядит следующим образом:
(И активные, и основные поля имеют тип 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;
Однако это не с:
ERROR: column "core" is of type boolean but expression is of type text
Я могу заставить это работать, добавляя ::boolean
к нулям, но это только кажется странным, почему NULL считается типом TEXT
?
Кроме того, это немного сложно привести, потому что это потребовало бы немного переделки кода, чтобы он знал, к какому типу он должен приводить значения NULL (список столбцов и значений в настоящее время автоматически генерируется из простого массива объектов JSON) ,
Почему это необходимо и есть более элегантное решение, которое не требует, чтобы генерирующий код знал тип NULL?
Если это уместно, я использую sequelize для Node.JS, но также получаю тот же результат в клиенте командной строки Postgres.
источник
Cannot cast type boolean to bigint in column 1
(ошибка указывает на :: между первым полем оператора)fields
имеет 3 столбца,(active, core, id)
с типами boolean, boolean и int / bigint. В вашей таблице больше столбцов или разных типов, или столбцы определены в другом порядке?