2026/11/3 · AI 上線專家

更新網站後出現資料庫錯誤?搞懂 migration,上線才不會動到正式資料

更新網站後出現資料庫錯誤?搞懂 migration,上線才不會動到正式資料

週五下午的一個欄位,讓會員頁整片報錯

行銷主管希望會員資料多一個「生日」欄位,好在生日月寄優惠券。工程師(或 AI 工具)改完程式,傍晚更新網站。幾分鐘後客人來訊:會員頁一片白,只剩一行英文,寫著找不到某個 column,或是某張 table 不存在。

這種情況在中小企業很常見,原因通常不複雜:程式碼更新了,資料庫的結構卻沒有跟著更新。您能注意到錯誤訊息並想追查原因,已經比多數人踏出了更重要的一步。

Migration 是什麼:資料庫的施工紀錄

網頁程式可以整包換新,但資料庫裡有真實的訂單與會員,不能整個丟掉重來。要加欄位、改欄位型別、新增資料表,只能在原地施工。

Migration(遷移)就是一份有編號的施工單,例如:

  • 001:建立會員表
  • 002:新增訂單表
  • 003:會員表加上生日欄位

系統會在資料庫裡留一張紀錄表,記下「已經做到第幾號」。每次上線,只補做還沒做的編號。這是 Laravel、Django、Rails、Prisma 等主流框架的共通做法,AI 工具產出的專案也多半有這一套。

出事通常是三種情況:

  1. 沒跑:新程式要讀生日欄位,資料庫裡卻還沒有,畫面就報錯。這正是開頭那個情境。
  2. 跑兩次:多半會看到「already exists」這類錯誤。更麻煩的是,如果那份 migration 帶有搬資料的動作,重複執行可能讓資料變成兩倍,或被覆蓋。
  3. 跑一半:施工到一半中斷,結構一半新、一半舊。有些資料庫(例如 MySQL)改結構的指令無法整批復原,要特別留意。

上線流程裡,migration 該放在哪一步

實務上建議用固定順序,每次都照著做:

  1. 先備份,並確認能還原。 備份檔存在,不代表還原得起來。至少要知道還原的步驟寫在哪裡。
  2. 先在測試環境演練。 用正式資料的副本(個資記得遮蔽)把 migration 跑一遍,確認不報錯、資料筆數正確。
  3. 只由一個地方負責執行。 不要讓每台伺服器、每次重啟都各自跑一次,這是「跑兩次」的主因。建議在部署流程中設一個獨立步驟,跑完才往下走。
  4. migration 完成後,再切換新版程式。 如果 migration 失敗,舊版程式仍在線上,客人不受影響。
  5. 上線後驗證。 檢查紀錄表是否已到最新編號,並實際打開會員頁、下單頁各操作一次。

另一個降低風險的習慣是「分兩次改」:這次只新增欄位,下次才改程式去用它,確定沒問題後,再用另一次更新刪除舊欄位。新增是安全的,刪除與改型別則難以反悔。

失敗了,怎麼不讓正式資料受損

看到錯誤時,最容易讓事情變糟的反應是「再按一次更新試試看」。建議改用這個順序:

  • 先停手,不要重跑。 先查看 migration 紀錄表,確認停在第幾號。
  • 先備份目前狀態。 即使狀態不完整,也要留一份,之後才有得比對。
  • 能退回舊版程式,就先退程式。 資料庫則不要急著動,除非確認那一號 migration 可以安全退回,也就是沒有刪過資料。
  • 必要時,把備份還原到另一個環境。 在那裡修好、驗證完,再決定怎麼處理正式環境。

如果您請 AI 工具幫忙產生 migration,可以加一句要求:「請逐項說明每一步能不能退回、會不會刪除或覆蓋現有資料。」這樣得到的說明,比單純一段程式碼有用得多。AI 產出的整體上線前檢查,可以對照這份 AI 寫的程式碼上線檢查清單。如果當初寫系統的人已經聯絡不上,連 migration 紀錄放在哪裡都不知道,可以先看 外包工程師失聯的 5 個步驟,把帳號與備份先掌握在自己手上。

另外補充一點:我們的 免費預覽 只放靜態網站,需要資料庫與後端的專案不會在那裡執行。這類專案的 migration 與備份流程,得在真正的主機上規劃。

下一步可以怎麼做

今天不必處理所有細節,先做兩件事:向負責的人確認「更新前有沒有備份、能不能還原」,並問清楚「migration 是在哪一步、由誰執行」。這兩個問題的答案,就能看出您的上線流程有沒有缺口。

如果答案模糊,或您想請人把流程補齊、寫成每次更新都能照做的文件,可以看看 我們的服務範圍與收費方式。範圍與價格都會先以書面談定,再開始動工。


關於 AI 上線專家

AI 上線專家讓您的 AI 幫您把網站部署上線:把一句話貼給 Claude Code、Cursor 或 Codex,幾分鐘後就有一個 您的名稱.aionline.tw 公開網址,可以直接傳給客戶或同事看。

  • 免費預覽,不需信用卡,到期自動下線、不會扣款;滿意再升級為永久,最低 NT$99 / 月起
  • 靜態網站、Node/Python 等有後端的網站都能部署,需要資料庫時自動配好 Postgres
  • 付費方案可以綁自己的網域;部署不起來或需要客製開發,可以直接聯絡我們

看看怎麼開始 →