From 8f75a64bfd73d8ba421eeda38657e1b7c2a5fc15 Mon Sep 17 00:00:00 2001 From: xfy Date: Fri, 24 Jul 2026 16:50:30 +0800 Subject: [PATCH] =?UTF-8?q?fix(assets):=20SUM(size=5Fbytes)=20=E6=98=BE?= =?UTF-8?q?=E5=BC=8F=E8=BD=AC=20bigint=20=E4=BF=AE=E5=A4=8D=E5=88=97?= =?UTF-8?q?=E8=A1=A8=20500?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Postgres 的 SUM(bigint) 返回 NUMERIC,tokio-postgres 反序列化为 i64 时类型不匹配,row.get(3) 直接 panic(release 的 panic=abort 下会崩掉整个进程)。COALESCE(..., 0)::bigint 修正。 --- src/api/assets/list.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/api/assets/list.rs b/src/api/assets/list.rs index 0c22a3e..8eaa0fe 100644 --- a/src/api/assets/list.rs +++ b/src/api/assets/list.rs @@ -116,7 +116,7 @@ pub async fn list_assets( COUNT(*) FILTER (WHERE NOT EXISTS (SELECT 1 FROM asset_refs r WHERE r.asset_id = a.id) \ AND a.created_at < NOW() - make_interval(days => $1)), \ COALESCE(SUM(a.size_bytes) FILTER (WHERE NOT EXISTS (SELECT 1 FROM asset_refs r WHERE r.asset_id = a.id) \ - AND a.created_at < NOW() - make_interval(days => $1)), 0) \ + AND a.created_at < NOW() - make_interval(days => $1)), 0)::bigint \ FROM assets a", &[&PURGE_GRACE_DAYS], )