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 一起删掉。本语句取新快照复核;锁已持有,之后的新引用
只能在删除提交后因外键失败而报错,不会被静默删除。