Tôi đã có một người trợ giúp tạo ra một số mã để thực hiện cập nhật hàng loạt cho tôi và tạo SQL giống như thế này:
(Cả hai trường hoạt động và cốt lõi đều thuộc loại 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;
Tuy nhiên, nó thất bại với:
ERROR: column "core" is of type boolean but expression is of type text
Tôi có thể làm cho nó hoạt động bằng cách thêm ::boolean
vào null, nhưng điều đó có vẻ kỳ lạ, tại sao NULL được coi là loại TEXT
?
Ngoài ra, có một chút khó khăn khi sử dụng vì nó sẽ yêu cầu khá nhiều mã phải làm lại để biết nên sử dụng kiểu NULL nào (danh sách các cột và giá trị hiện đang được tự động tạo từ một mảng các đối tượng JSON đơn giản) .
Tại sao điều này lại cần thiết và có một giải pháp thanh lịch hơn không yêu cầu mã tạo để biết loại NULL?
Nếu nó có liên quan, tôi đang sử dụng sequelize qua Node.js để làm điều này, nhưng cũng đang nhận được kết quả tương tự trong dòng lệnh client Postgres.
Cannot cast type boolean to bigint in column 1
(các điểm lỗi tại :: giữa câu lệnh trường đầu tiên)