Skip to content

查看 plan check 結果

何時用這份文件 你剛提交 Plan,畫面顯示了一些 plan check warning / error,想知道每一項是什麼意思 + 該不該管。

前置條件

看哪裡

Plans → <你的 Plan>Checks tab。

每筆 PlanCheckRun 顯示:

欄位含意
Type檢查類別(Plan Check
Statussuccess / warning / error
Details具體掃出的條目(行號 / 對象 / 建議)
Started / Finished時間戳

檢查類別速查

Type看什麼常見問題
SyntaxSQL 能否 parsetypo、missing semicolon
Statement type與宣告類型是否相符宣告 DDL 但含 DML 等
Schema impact受影響的 table / column大表全表掃描
Naming convention命名規則snake_case、長度限制
Statement advisor各家 lint 規則缺索引、缺 WHERE、explicit type、deprecated syntax
Statement compatibility與目標 schema 衝突型別不相容、PK 衝突
Risk高風險動作drop / truncate / 全表 update

怎麼處理

Success(綠色)

繼續建 Issue。

Warning(黃色)

不會阻擋你建 Issue,但會在審批者 UI 上顯示。建議的處理順序:

  1. 點開 warning 細節
  2. 判斷是否可接受:
    • 可接受 → 在 Issue 描述補上理由(主動說明,不要等審批者問)
    • 不可接受 → 改 SQL 重跑 check

範例 warning + 建議處理:

Warning含意建議
CREATE INDEX without CONCURRENTLY on large table大表加索引會鎖表改用 CONCURRENTLY
UPDATE without LIMIT on large table全表掃描WHERE 或分批
Statement uses deprecated syntax某種寫法即將不支援改成新語法
Naming convention: index name exceeds 63 chars超 PG 識別字長度縮短

Error(紅色)

阻擋 Issue 建立。處理:

  1. 修正 SQL(最常見)
  2. 改完 → 自動觸發新的 PlanCheckRun
  3. 全綠後再建 Issue

如果你確信 error 是誤判,且 workspace 開啟「allow override」:

  • 提供具體理由(不是「等不及」「先這樣」)
  • 寫進 Issue 描述
  • 預期被審批者特別仔細看
  • override 紀錄會永久留在 audit log

同一 Plan 多次跑 Check

修改 SQL 後新的 check 會自動觸發;舊的紀錄保留。你會看到歷史 timeline:

text
Run #3  2026-05-24 09:15  ✅ all checks passed
Run #2  2026-05-24 09:10  ⚠ 1 warning, 0 errors
Run #1  2026-05-24 09:05  ❌ 1 error

點 Run #1 仍可看到當時的內容(debug 用)。

看不懂某個 check 結果?

  • 點 check type → 文件連結(連到 Plan Check 概念
  • Details 看完整 server 端 message
  • 找 DBA / 平台 admin 釐清;不要為了趕時間 override

不要做的事

反模式為什麼
直接 override 所有 error違反零信任原則;累積技術債
看不懂就 ignore warningwarning 是 plan check 對你說「請看一下」
Plan check 失敗就改去 SQL Editor 直接執行繞過審批 + 稽核軌跡;應該修 Plan
為了讓 check 過,故意把 SQL 拆碎不會通過 schema impact 檢查;只是給審批者增加負擔

相關

Argus — 公司內部資料庫變更審計平台