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 < 本文件
-- (含 \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;