資料修正 · SQL

客服說「有些客戶沒狀態」:別急著補值。

這篇用一個常見的修正單走一遍:營運發現一批 customers 的 status 是空的,想補成 active。先把會改到誰、改完怎麼確認講清楚,才輪到 SQL。

這次要處理的事:週一早上,客服把 12 筆訂單卡在後台,原因是客戶沒有狀態。工程師提出把空值補成 active。在送出變更前,審查者要看到三件事:沒有碰到受保護欄位、條件真的只選空值、寫入後空值歸零。

這張修正單怎麼走

先看不能碰什麼

工程師先查黑名單。如果 customers 或 status 被保護,這張單要回到權限與資料政策,不能改個 SQL 寫法硬闖。

dbcli blacklist list

確認資料庫裡真的叫這個名字

需求單寫「客戶狀態」,資料庫不一定就叫 status。先讀正式 schema,順便確認型別;這一步能擋掉最常見的欄位猜錯。

dbcli schema customers --format json

把寫入條件和驗收條件一起送審

這個預檢不會 UPDATE。它檢查目標表、WHERE 條件與回讀 SELECT,並印出寫入後可直接使用的驗證命令。審查者看到的不是一句「應該沒問題」,而是具體條件。

dbcli verify safe-backfill \
  --table customers \
  --query "UPDATE customers SET status = 'active' WHERE status IS NULL" \
  --verify-query "SELECT count(*)::int AS n FROM customers WHERE status IS NULL" \
  --expect "value == 0"

核准的寫入在團隊流程內執行,然後回讀

核准後才由既有流程執行 UPDATE。接著加上 --after-write 回讀:如果還有空值,結果不會被包裝成成功;如果歸零,會留下可檢視的驗證文物。

dbcli verify safe-backfill ... --after-write
dbcli verification list