跳到主要內容

開發與生產

本頁解釋瞭如何在開發和生產環境中使用 Prisma Migrate 命令。

開發環境

在開發環境中,使用 migrate dev 命令來生成和應用遷移

npx prisma migrate dev

建立和應用遷移

危險

migrate dev 是一個開發命令,絕不應在生產環境中使用。

此命令

  1. 重新執行影子資料庫中現有的遷移歷史,以檢測 schema 漂移(已編輯或刪除的遷移檔案,或對資料庫 schema 的手動更改)
  2. 將待處理的遷移應用於影子資料庫(例如,同事建立的新遷移)
  3. 如果它檢測到 Prisma schema 的更改,它會根據這些更改生成一個新的遷移
  4. 將所有未應用的遷移應用於開發資料庫並更新 _prisma_migrations
  5. 觸發製品(例如 Prisma Client)的生成

在以下情況下,migrate dev 命令將提示您重置資料庫

重置開發資料庫

您也可以透過執行以下命令來重置資料庫,以撤消手動更改或 db push 實驗

npx prisma migrate reset
警告

migrate reset 是一個開發命令,絕不應在生產環境中使用。

此命令

  1. 如果可能,刪除資料庫/schema¹,或者如果環境不允許刪除資料庫/schema¹,則執行軟重置
  2. 如果資料庫/schema¹ 已被刪除,則建立同名的新資料庫/schema¹
  3. 應用所有遷移
  4. 執行資料填充指令碼

¹ 對於 MySQL 和 MongoDB,這指的是資料庫;對於 PostgreSQL 和 SQL Server,指的是 schema;對於 SQLite,指的是資料庫檔案。

注意:要以簡單整合的方式在開發資料庫中根據需要頻繁重新建立資料,請檢視我們的資料填充指南

自定義遷移

有時,您需要在應用遷移之前修改它。例如

  • 您想要引入一個重大的重構,例如將部落格文章標籤從 String[] 更改為 Tag[]
  • 您想重新命名欄位(預設情況下,Prisma Migrate 將刪除現有欄位)
  • 您想更改一對一關係的方向
  • 您想新增無法在 Prisma Schema 語言中表示的特性——例如部分索引或儲存過程。

--create-only 命令允許您在不應用遷移的情況下建立遷移

npx prisma migrate dev --create-only

要應用已編輯的遷移,請再次執行 prisma migrate dev

有關示例,請參閱自定義遷移

團隊開發

參閱:使用 Prisma Migrate 進行團隊開發

生產和測試環境

在生產和測試環境中,使用 migrate deploy 命令來應用遷移

npx prisma migrate deploy

注意migrate deploy 通常應作為自動化 CI/CD 管道的一部分,我們不建議在本地執行此命令以將更改部署到生產資料庫。

此命令

  1. 將已應用的遷移與遷移歷史進行比較,如果任何遷移已被修改,則會發出警告

    WARNING The following migrations have been modified since they were applied:
    20210313140442_favorite_colors
  2. 應用待處理的遷移

migrate deploy 命令

  • 如果遷移歷史中缺少已應用的遷移,則不會發出警告
  • 不會檢測漂移(生產資料庫 schema 與遷移歷史的最終狀態不同——例如,由於熱修復)
  • 不會重置資料庫或生成製品(例如 Prisma Client)
  • 不會依賴影子資料庫

另請參閱

諮詢鎖

當您執行生產命令時,Prisma Migrate 會使用諮詢鎖,例如

  • prisma migrate deploy
  • prisma migrate dev
  • prisma migrate resolve

此安全措施確保多個命令不能同時執行——例如,如果您快速連續合併兩個拉取請求。

諮詢鎖具有10 秒超時(不可配置),並使用底層提供程式中可用的預設諮詢鎖定機制

Prisma Migrate 對諮詢鎖的實現純粹是為了避免災難性錯誤——如果您的命令超時,您將需要再次執行它。

5.3.0 起,可以使用PRISMA_SCHEMA_DISABLE_ADVISORY_LOCK 環境變數停用諮詢鎖。

© . This site is unofficial and not affiliated with Prisma Data, Inc.