跳到主要內容

限制與已知問題

以下限制適用於 Prisma Migrate。

不支援 MongoDB 連接器

Prisma Migrate 目前不支援 MongoDB 連接器。

您無法自動切換資料庫供應商

Prisma Migrate 會產生特定於您供應商的 SQL 檔案。這表示您不能在生產環境的 PostgreSQL 和開發環境的 SQLite 中使用相同的遷移檔案,因為遷移中的語法會不相容。

2.15.0 及更高版本中,Prisma Migrate 會偵測到遷移與設定的供應商不符時,並印出有用的錯誤訊息。例如,如果您的遷移是針對 PostgreSQL 資料庫,但您使用的 provider 設定為 mysql

Error: P3014

The datasource provider `postgresql` specified in your schema does not match the one specified in the migration_lock.toml, mysql. Please remove your current migration directory and start a new migration history with prisma migrate dev.

為了手動切換資料庫供應商,您必須

  • 變更您 schema 中 datasource 區塊的 providerurl 參數
  • 封存或移除您現有的遷移歷史記錄 - 不得有 ./prisma/migrations 資料夾
  • 執行 prisma migrate dev 以開始新的遷移歷史記錄

最後一步會建立一個新的初始遷移,從空的資料庫到您目前的 schema.prisma。請注意

  • 此遷移 包含您 schema.prisma 中反映的內容。如果您手動編輯了先前的遷移檔案以新增自訂 SQL,您將需要再次自行新增。
  • 使用新供應商新建立的資料庫將不包含任何資料。

重設資料庫時的資料遺失

在開發環境中,Prisma Migrate 有時會提示您重設資料庫。重設會捨棄並重新建立資料庫,這會導致資料遺失。在以下情況下會重設資料庫

  • 您明確呼叫 prisma migrate reset
  • 您呼叫 prisma migrate dev 且 Prisma Migrate 偵測到資料庫中的漂移或遷移歷史記錄衝突

prisma migrate devprisma migrate reset 命令設計為 僅在開發環境中使用,且不應影響生產資料。

當資料庫重設時,如果 Prisma Migrate 在 package.json 中偵測到 seed script,它將觸發 seeding。

注意:如需在重設資料庫時重新建立資料的簡單且整合方式,請查看我們的seeding 指南

Prisma Migrate 和 PgBouncer

如果您嘗試在使用 PgBouncer 進行連線集區的環境中執行 Prisma Migrate 命令,您可能會看到以下錯誤

Error: undefined: Database error
Error querying the database: db error: ERROR: prepared statement "s0" already exists

請參閱 Prisma Migrate 和 PgBouncer 解決方案 以取得更多資訊和解決方案。追蹤 GitHub issue #6485 以取得更新。

非互動環境中的 Prisma Migrate

當您在非互動環境(例如 Docker、Node 腳本或 bash shell)中執行 CLI 命令時,Prisma ORM 會偵測到。當發生這種情況時,會顯示警告,指出環境為非互動式,且不支援 migrate dev 命令。

為了確保 Docker 環境擷取到命令,請在 interactive 模式下執行映像檔,使其對 migrate dev 命令做出反應。

docker run --interactive --tty <image name>
# or
docker -it <image name>

# Example usage
docker run -it node