【问题标题】:Update unique values into Postgres Array将唯一值更新到 Postgres 数组中
【发布时间】:2018-11-16 09:19:14
【问题描述】:
我有一种情况,我更新了bigint[] 类型的Postgres 表列。每当触发 update 查询时,该数组内部应该有唯一的数字。
查询如下
UPDATE book_shelf
SET book_id = book_id || array[CAST(:bookID AS BIGINT)], updated_at = now()
WHERE user_id = :userID AND shelf_name = :shelfName
当上述查询被触发时,它只是将数字添加到我不想发生的数组中。它应该只包含唯一值。请帮帮我。
【问题讨论】:
标签:
spring
postgresql
hibernate
spring-data-jpa
【解决方案1】:
你可以在添加之前检查它是否存在于数组中:
UPDATE book_shelf
SET book_id = CASE WHEN CAST(:bookID AS BIGINT) = ANY(book_id) THEN book_id ELSE ARRAY_APPEND(book_id, CAST(:bookID AS BIGINT)) END, updated_at = now()
WHERE user_id = :userID AND shelf_name = :shelfName
当然,如果updated_at 应该只在book_id 实际更新时才设置,然后将检查放在 WHERE 子句中,这样就不会不必要地更新:
UPDATE book_shelf
SET book_id = ARRAY_APPEND(book_id, CAST(:bookID AS BIGINT)), updated_at = now()
WHERE user_id = :userID
AND shelf_name = :shelfName
AND NOT CAST(:bookID AS BIGINT) = ANY(book_id)