開發與生產
本頁解釋瞭如何在開發和生產環境中使用 Prisma Migrate 命令。
開發環境
在開發環境中,使用 migrate dev 命令來生成和應用遷移
npx prisma migrate dev
建立和應用遷移
migrate dev 是一個開發命令,絕不應在生產環境中使用。
此命令
- 重新執行影子資料庫中現有的遷移歷史,以檢測 schema 漂移(已編輯或刪除的遷移檔案,或對資料庫 schema 的手動更改)
- 將待處理的遷移應用於影子資料庫(例如,同事建立的新遷移)
- 如果它檢測到 Prisma schema 的更改,它會根據這些更改生成一個新的遷移
- 將所有未應用的遷移應用於開發資料庫並更新
_prisma_migrations表 - 觸發製品(例如 Prisma Client)的生成
在以下情況下,migrate dev 命令將提示您重置資料庫
- 由已修改或缺失的遷移引起的遷移歷史衝突
- 資料庫 schema 已偏離遷移歷史的最終狀態
重置開發資料庫
您也可以透過執行以下命令來重置資料庫,以撤消手動更改或 db push 實驗
npx prisma migrate reset
migrate reset 是一個開發命令,絕不應在生產環境中使用。
此命令
- 如果可能,刪除資料庫/schema¹,或者如果環境不允許刪除資料庫/schema¹,則執行軟重置
- 如果資料庫/schema¹ 已被刪除,則建立同名的新資料庫/schema¹
- 應用所有遷移
- 執行資料填充指令碼
¹ 對於 MySQL 和 MongoDB,這指的是資料庫;對於 PostgreSQL 和 SQL Server,指的是 schema;對於 SQLite,指的是資料庫檔案。
注意:要以簡單整合的方式在開發資料庫中根據需要頻繁重新建立資料,請檢視我們的資料填充指南。
自定義遷移
有時,您需要在應用遷移之前修改它。例如
- 您想要引入一個重大的重構,例如將部落格文章標籤從
String[]更改為Tag[] - 您想重新命名欄位(預設情況下,Prisma Migrate 將刪除現有欄位)
- 您想更改一對一關係的方向
- 您想新增無法在 Prisma Schema 語言中表示的特性——例如部分索引或儲存過程。
--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 與遷移歷史的最終狀態不同——例如,由於熱修復)
- 不會重置資料庫或生成製品(例如 Prisma Client)
- 不會依賴影子資料庫
另請參閱
諮詢鎖
當您執行生產命令時,Prisma Migrate 會使用諮詢鎖,例如
prisma migrate deployprisma migrate devprisma migrate resolve
此安全措施確保多個命令不能同時執行——例如,如果您快速連續合併兩個拉取請求。
諮詢鎖具有10 秒超時(不可配置),並使用底層提供程式中可用的預設諮詢鎖定機制
Prisma Migrate 對諮詢鎖的實現純粹是為了避免災難性錯誤——如果您的命令超時,您將需要再次執行它。
自 5.3.0 起,可以使用PRISMA_SCHEMA_DISABLE_ADVISORY_LOCK 環境變數停用諮詢鎖。