chore(db): 部署脚本改用通用 SQL 核对段,兼容 DataGrip

psql 的 \echo 是元命令,DataGrip / DBeaver 不认,整份执行会直接报语法错误。
核对段改用 SELECT '常量' AS "核对项" 输出标签行,任何客户端都能跑
(psql 下效果相同)。同步修正头部说明中「需用 psql」的过期表述。

已在临时库重跑验证:零报错、核对结果与改前一致、重跑幂等。
This commit is contained in:
yueli
2026-09-17 10:51:31 +08:00
parent d6234622e8
commit b26b124f8b

View File

@ -6,7 +6,7 @@
-- --
-- 执行 -- 执行
-- docker exec -i <db容器> psql -U <用户> -d <库名> -v ON_ERROR_STOP=1 < 本文件 -- docker exec -i <db容器> psql -U <用户> -d <库名> -v ON_ERROR_STOP=1 < 本文件
-- (含 \echo 核对段,需用 psql其他客户端请删掉 \echo 行) -- 脚本不含 psql 专有元命令psql / DataGrip / DBeaver 均可直接整份执行。
-- --
-- 幂等 -- 幂等
-- 全部 DDL 带 IF NOT EXISTS可重复执行。 -- 全部 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 SELECT column_name, data_type FROM information_schema.columns
WHERE table_name = 'trans_borrow' WHERE table_name = 'trans_borrow'
AND column_name IN ('borrower_id','current_holder_id','current_holder_name','dispatch_operator') AND column_name IN ('borrower_id','current_holder_id','current_holder_name','dispatch_operator')
ORDER BY column_name; ORDER BY column_name;
\echo '=== 2) 两张新表(应 2 行)===' SELECT '=== 2) 两张新表(应 2 行)===' AS "核对项";
SELECT table_name FROM information_schema.tables SELECT table_name FROM information_schema.tables
WHERE table_name IN ('trans_borrow_transfer','trans_borrow_return') ORDER BY table_name; 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 SELECT tablename, count(*) AS FROM pg_indexes
WHERE tablename IN ('trans_borrow_transfer','trans_borrow_return') WHERE tablename IN ('trans_borrow_transfer','trans_borrow_return')
GROUP BY tablename ORDER BY tablename; GROUP BY tablename ORDER BY tablename;
\echo '=== 4) 身份锚点回填覆盖率 ===' SELECT '=== 4) 身份锚点回填覆盖率 ===' AS "核对项";
SELECT count(*) AS , SELECT count(*) AS ,
count(borrower_id) AS , count(borrower_id) AS ,
count(*) FILTER (WHERE is_returned = FALSE) AS , count(*) FILTER (WHERE is_returned = FALSE) AS ,
count(current_holder_id) AS count(current_holder_id) AS
FROM trans_borrow; FROM trans_borrow;
\echo '=== 5) 同单多持有人单数(部分转交的正常形态,无需处理)===' SELECT '=== 5) 同单多持有人单数(部分转交的正常形态,无需处理)===' AS "核对项";
SELECT count(*) AS FROM ( SELECT count(*) AS FROM (
SELECT borrow_no FROM trans_borrow WHERE is_returned = FALSE SELECT borrow_no FROM trans_borrow WHERE is_returned = FALSE
GROUP BY borrow_no HAVING count(DISTINCT current_holder_id) > 1 GROUP BY borrow_no HAVING count(DISTINCT current_holder_id) > 1
) t; ) t;
\echo '=== 6) 遗留拼接痕迹(应为 0===' SELECT '=== 6) 遗留拼接痕迹(应为 0===' AS "核对项";
SELECT count(*) AS FROM trans_borrow_transfer SELECT count(*) AS FROM trans_borrow_transfer
WHERE remark LIKE '%[拒绝原因] %'; WHERE remark LIKE '%[拒绝原因] %';
\echo '=== 7) 待告知发起方的拒绝(存量已标记,应为 0===' SELECT '=== 7) 待告知发起方的拒绝(存量已标记,应为 0===' AS "核对项";
SELECT count(*) AS FROM trans_borrow_transfer SELECT count(*) AS FROM trans_borrow_transfer
WHERE status = 'REJECTED' AND reject_seen_at IS NULL; WHERE status = 'REJECTED' AND reject_seen_at IS NULL;