Skip to main content

delete_unreferenced_locked

Function delete_unreferenced_locked 

Source
async fn delete_unreferenced_locked(
    tx: &Transaction<'_>,
    locked_ids: &[Uuid],
) -> Result<Vec<(String, i64)>, AppError>
Expand description

删除已被本事务 FOR UPDATE 锁住、且此刻仍无引用的素材,返回 (path, size_bytes)。

必须与加锁分成两条语句:READ COMMITTED 下,若加锁语句等待的是并发文章保存 插入 asset_refs 时持有的外键锁,拿到锁后 Postgres 不会重新求值 WHERE, 加锁语句里的 NOT {ASSET_REF_CLAUSE} 仍基于旧快照,会把刚提交的引用随 ON DELETE CASCADE 一起删掉。本语句取新快照复核;锁已持有,之后的新引用 只能在删除提交后因外键失败而报错,不会被静默删除。