開發與生產
本頁說明如何在開發和生產環境中使用 Prisma Migrate 命令。
開發環境
在開發環境中,使用 migrate dev
命令來產生和套用遷移
npx prisma migrate dev
建立和套用遷移
migrate dev
是一個開發命令,絕不應在生產環境中使用。
此命令會:
- 在 影子資料庫 中重新執行現有的遷移歷史記錄,以偵測 Schema 漂移(已編輯或刪除的遷移檔案,或對資料庫 Schema 的手動變更)
- 將待處理的遷移套用至影子資料庫(例如,同事建立的新遷移)
- 如果偵測到 Prisma Schema 的變更,它會從這些變更產生新的遷移
- 將所有未套用的遷移套用至開發資料庫,並更新
_prisma_migrations
表格 - 觸發 Artifact 的產生(例如,Prisma Client)
在以下情況下,migrate dev
命令會提示您重置資料庫
- 由 修改或遺失的遷移 引起的遷移歷史記錄衝突
- 資料庫 Schema 已從遷移歷史記錄的最終狀態漂移
重置開發資料庫
您也可以透過執行以下命令自行 reset
資料庫,以還原手動變更或 db push
實驗
npx prisma migrate reset
migrate reset
是一個開發命令,絕不應在生產環境中使用。
此命令會:
- 如果可能,則刪除資料庫/Schema¹,或者在環境不允許刪除資料庫/Schema¹ 的情況下執行軟重置
- 如果資料庫/Schema¹ 已刪除,則建立一個具有相同名稱的新資料庫/Schema¹
- 套用所有遷移
- 執行種子腳本
¹ 對於 MySQL 和 MongoDB,這指的是資料庫;對於 PostgreSQL 和 SQL Server,指的是 Schema;對於 SQLite,指的是資料庫檔案。
注意:如需以簡單且整合的方式,根據需要經常重新建立開發資料庫中的資料,請查看我們的 植入種子資料指南。
自訂遷移
有時,您需要在套用遷移之前修改它。例如:
- 您想要引入重大的重構,例如將部落格文章標籤從
String[]
變更為Tag[]
- 您想要 重新命名欄位(預設情況下,Prisma Migrate 將會刪除現有的欄位)
- 您想要 變更 1-1 關係的方向
- 您想要新增 Prisma Schema Language 無法表示的功能 - 例如部分索引或預存程序。
--create-only
命令可讓您建立遷移,而無需套用它
npx prisma migrate dev --create-only
若要套用已編輯的遷移,請再次執行 prisma migrate dev
。
請參閱 自訂遷移 以取得範例。
團隊開發
生產和測試環境
在生產和測試環境中,使用 migrate deploy
命令來套用遷移
npx prisma migrate deploy
注意:
migrate deploy
通常應為自動化 CI/CD 流程的一部分,我們不建議在本機執行此命令以將變更部署到生產資料庫。
此命令會:
-
比較已套用的遷移與遷移歷史記錄,如果任何遷移已修改,則會發出警告
WARNING The following migrations have been modified since they were applied:
20210313140442_favorite_colors -
套用待處理的遷移
migrate deploy
命令:
- 如果已套用的遷移從遷移歷史記錄中遺失,則不會發出警告
- 不會偵測漂移(生產資料庫 Schema 與遷移歷史記錄的最終狀態不同 - 例如,由於 Hotfix)
- 不會重置資料庫或產生 Artifact(例如 Prisma Client)
- 不依賴影子資料庫
另請參閱
諮詢鎖定
當您執行生產命令(例如)時,Prisma Migrate 會使用諮詢鎖定
prisma migrate deploy
prisma migrate dev
prisma migrate resolve
此安全措施可確保多個命令無法同時執行 - 例如,如果您快速連續合併兩個 Pull Request。
諮詢鎖定具有 10 秒逾時(不可設定),並使用基礎提供者中可用的預設諮詢鎖定機制
Prisma Migrate 的諮詢鎖定實作純粹是為了避免災難性錯誤 - 如果您的命令逾時,您將需要再次執行它。
自 5.3.0
起,可以使用 PRISMA_SCHEMA_DISABLE_ADVISORY_LOCK
環境變數 停用諮詢鎖定