From b26b124f8bc0fb78c348d8cb4171cada0d4e4015 Mon Sep 17 00:00:00 2001 From: yueli Date: Thu, 17 Sep 2026 10:51:31 +0800 Subject: [PATCH] =?UTF-8?q?chore(db):=20=E9=83=A8=E7=BD=B2=E8=84=9A?= =?UTF-8?q?=E6=9C=AC=E6=94=B9=E7=94=A8=E9=80=9A=E7=94=A8=20SQL=20=E6=A0=B8?= =?UTF-8?q?=E5=AF=B9=E6=AE=B5=EF=BC=8C=E5=85=BC=E5=AE=B9=20DataGrip?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit psql 的 \echo 是元命令,DataGrip / DBeaver 不认,整份执行会直接报语法错误。 核对段改用 SELECT '常量' AS "核对项" 输出标签行,任何客户端都能跑 (psql 下效果相同)。同步修正头部说明中「需用 psql」的过期表述。 已在临时库重跑验证:零报错、核对结果与改前一致、重跑幂等。 --- db_migrations/deploy_borrow_transfer_all.sql | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/db_migrations/deploy_borrow_transfer_all.sql b/db_migrations/deploy_borrow_transfer_all.sql index 3073663..52d8c15 100644 --- a/db_migrations/deploy_borrow_transfer_all.sql +++ b/db_migrations/deploy_borrow_transfer_all.sql @@ -6,7 +6,7 @@ -- -- 执行 -- docker exec -i psql -U <用户> -d <库名> -v ON_ERROR_STOP=1 < 本文件 --- (含 \echo 核对段,需用 psql;其他客户端请删掉 \echo 行) +-- 脚本不含 psql 专有元命令,psql / DataGrip / DBeaver 均可直接整份执行。 -- -- 幂等 -- 全部 DDL 带 IF NOT EXISTS,可重复执行。 @@ -274,40 +274,43 @@ COMMIT; -- ============================================================================= -- 执行后核对 +-- +-- ★ 这里刻意**不用 psql 的 \echo**(DataGrip / DBeaver 等客户端不认元命令, +-- 会直接报语法错误)。改用 SELECT 输出一行带标签的常量,任何客户端都能跑。 -- ============================================================================= -\echo '=== 1) trans_borrow 四个新列(应 4 行)===' +SELECT '=== 1) trans_borrow 四个新列(应 4 行)===' AS "核对项"; SELECT column_name, data_type FROM information_schema.columns WHERE table_name = 'trans_borrow' AND column_name IN ('borrower_id','current_holder_id','current_holder_name','dispatch_operator') ORDER BY column_name; -\echo '=== 2) 两张新表(应 2 行)===' +SELECT '=== 2) 两张新表(应 2 行)===' AS "核对项"; SELECT table_name FROM information_schema.tables WHERE table_name IN ('trans_borrow_transfer','trans_borrow_return') ORDER BY table_name; -\echo '=== 3) 索引总数(transfer 应 8 个含主键 / return 应 4 个含主键)===' +SELECT '=== 3) 索引总数(transfer 应 8 个含主键 / return 应 4 个含主键)===' AS "核对项"; SELECT tablename, count(*) AS 索引数 FROM pg_indexes WHERE tablename IN ('trans_borrow_transfer','trans_borrow_return') GROUP BY tablename ORDER BY tablename; -\echo '=== 4) 身份锚点回填覆盖率 ===' +SELECT '=== 4) 身份锚点回填覆盖率 ===' AS "核对项"; SELECT count(*) AS 借用总行数, count(borrower_id) AS 已锚定借用人, count(*) FILTER (WHERE is_returned = FALSE) AS 未归还行, count(current_holder_id) AS 已锚定持有人 FROM trans_borrow; -\echo '=== 5) 同单多持有人单数(部分转交的正常形态,无需处理)===' +SELECT '=== 5) 同单多持有人单数(部分转交的正常形态,无需处理)===' AS "核对项"; SELECT count(*) AS 拆分持有单数 FROM ( SELECT borrow_no FROM trans_borrow WHERE is_returned = FALSE GROUP BY borrow_no HAVING count(DISTINCT current_holder_id) > 1 ) t; -\echo '=== 6) 遗留拼接痕迹(应为 0)===' +SELECT '=== 6) 遗留拼接痕迹(应为 0)===' AS "核对项"; SELECT count(*) AS 残留拼接 FROM trans_borrow_transfer WHERE remark LIKE '%[拒绝原因] %'; -\echo '=== 7) 待告知发起方的拒绝(存量已标记,应为 0)===' +SELECT '=== 7) 待告知发起方的拒绝(存量已标记,应为 0)===' AS "核对项"; SELECT count(*) AS 待告知 FROM trans_borrow_transfer WHERE status = 'REJECTED' AND reject_seen_at IS NULL;