限制與已知問題
以下限制適用於 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
區塊的provider
和url
參數 - 封存或移除您現有的遷移歷史記錄 - 不得有
./prisma/migrations
資料夾 - 執行
prisma migrate dev
以開始新的遷移歷史記錄
最後一步會建立一個新的初始遷移,從空的資料庫到您目前的 schema.prisma
。請注意
- 此遷移 僅 包含您
schema.prisma
中反映的內容。如果您手動編輯了先前的遷移檔案以新增自訂 SQL,您將需要再次自行新增。 - 使用新供應商新建立的資料庫將不包含任何資料。
重設資料庫時的資料遺失
在開發環境中,Prisma Migrate 有時會提示您重設資料庫。重設會捨棄並重新建立資料庫,這會導致資料遺失。在以下情況下會重設資料庫
- 您明確呼叫
prisma migrate reset
- 您呼叫
prisma migrate dev
且 Prisma Migrate 偵測到資料庫中的漂移或遷移歷史記錄衝突
prisma migrate dev
和 prisma 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