從現有資料庫匯入
本指南提供將資料從現有 MySQL 資料庫匯入 Prisma Postgres 的逐步說明。
您可以透過四個步驟完成此遷移
- 建立新的 Prisma Postgres 資料庫。
- 使用
@prisma/ppg-tunnel
套件 直接連線至 Prisma Postgres 執行個體。 - 使用 pgloader 將您的 MySQL 資料遷移至 Prisma Postgres。
- 為 Prisma Postgres 設定您的 Prisma 專案。
先決條件
- 現有 MySQL 資料庫的連線 URL。
- 一組帳號。
- 已安裝 Node.js 18+。
- 已安裝 pgloader。
我們建議在個別的 git 開發分支中嘗試此遷移。
1. 建立新的 Prisma Postgres 資料庫
依照這些步驟建立新的 Prisma Postgres 資料庫
- 登入並開啟主控台。
- 在您選擇的工作區中,按一下 New project (新專案) 按鈕。
- 在 Name (名稱) 欄位中輸入專案名稱,例如 hello-ppg。
- 在 Prisma Postgres 區段中,按一下 Get started (開始使用) 按鈕。
- 在 Region (區域) 下拉式選單中,選取離您目前位置最近的區域,例如 US East (N. Virginia) (美國東部 (維吉尼亞北部))。
- 按一下 Create project (建立專案) 按鈕。
資料庫佈建完成後,在 Set up database access (設定資料庫存取權) 區段中找到您的 Prisma Postgres 連線 URL 並儲存以供稍後使用,您將在下一步中需要它。
2. 直接連線至 Prisma Postgres 執行個體
在此步驟中,您將使用安全的 TCP 通道 連線至您的 Prisma Postgres 執行個體。
您將需要步驟 1 中的 Prisma Postgres 連線 URL
prisma+postgres://accelerate.prisma-data.net/?api_key=ey...
如果您的目前目錄中已有設定 DATABASE_URL
的 .env
檔案,通道 CLI 將會自動擷取它,無需手動匯出。但是,如果您尚未設定 .env
檔案,則需要明確設定 DATABASE_URL
環境變數。
若要設定環境變數,請開啟您的終端機並將 DATABASE_URL
環境變數設定為您的 Prisma Postgres 資料庫 URL 值 (將 __API_KEY__
預留位置取代為您實際資料庫連線 URL 的 API 金鑰)
export DATABASE_URL="prisma+postgres://accelerate.prisma-data.net/?api_key=__API_KEY__"
如果您在終端機中明確設定 DATABASE_URL
,則該值將優先於 .env
檔案中的值。
接下來,使用 @prisma/ppg-tunnel
套件啟動 TCP 通道,方法是執行以下命令
npx @prisma/ppg-tunnel --host 127.0.0.1 --port 5433
您可以透過使用 --port
和 --host
旗標提供您自己的主機和連接埠值,來指定不同的主機和連接埠。只需確保在整個指南中一致地使用相同的主機和連接埠值即可。
Prisma Postgres auth proxy listening on 127.0.0.1:5433 🚀
Your connection is authenticated using your Prisma Postgres API key.
...
==============================
hostname: 127.0.0.1
port: 5433
username: <anything>
password: <none>
==============================
保持目前的終端機視窗或標籤頁開啟,以便通道程序繼續執行且連線保持開啟。
3. 使用 pgloader 將您的 MySQL 資料遷移至 Prisma Postgres
現在您已與 Prisma Postgres 執行個體建立作用中連線,您將使用 pgloader 將資料從您的 MySQL 資料庫匯出至 Prisma Postgres。
開啟另一個終端機視窗並建立 config.load
檔案
touch config.load
在您偏好的文字編輯器中開啟 config.load
檔案,並複製貼上以下組態
LOAD DATABASE
FROM mysql://username:password@host:PORT/database_name
INTO postgresql://user:password@127.0.0.1:5433/postgres
WITH quote identifiers, -- preserve table/column name case by quoting them
include drop,
create tables,
create indexes,
reset sequences
ALTER SCHEMA 'database_name' RENAME TO 'public';
請務必在 config.load
檔案中更新以下詳細資訊
FROM
url (MySQL 資料庫 URL)- 將
username
、password
、host
、PORT
和database_name
取代為您 MySQL 資料庫的實際連線詳細資訊。 - 如果需要 SSL,請確保您的連線字串包含
useSSL=true
,例如:mysql://username:password@host:PORT/database_name?useSSL=true
。請注意,當使用 PlanetScale 時,附加sslaccept=strict
將不起作用。
- 將
INTO
url (Postgres 資料庫 URL)- 如果您使用自訂
host
和port
,請使用您的 TCP 通道詳細資訊更新此項 (在本範例中,為了保持一致性,它是127.0.0.1
和連接埠5433
)。
- 如果您使用自訂
- 更新
ALTER SCHEMA 'database_name' RENAME TO 'public';
中的database_name
,使其與您 MySQL 連線字串中的database_name
完全相符。
在使用您更新的認證儲存組態檔案後,在同一個終端機視窗中,執行以下命令
pgloader config.load
您應該會看到類似以下的記錄,這確認您的資料已成功遷移
LOG report summary reset
table name errors rows bytes total time
------------------------- --------- --------- --------- --------------
fetch meta data 0 9 2.546s
Create Schemas 0 0 0.325s
Create SQL Types 0 0 0.635s
Create tables 0 6 5.695s
Set Table OIDs 0 3 0.328s
------------------------- --------- --------- --------- --------------
public.post 0 8 0.5 kB 4.255s
public."user" 0 4 0.1 kB 2.775s
public._prisma_migrations 0 1 0.2 kB 4.278s
------------------------- --------- --------- --------- --------------
COPY Threads Completion 0 4 5.095s
Index Build Completion 0 5 9.601s
Create Indexes 0 5 4.116s
Reset Sequences 0 2 4.540s
Primary Keys 0 3 2.917s
Create Foreign Keys 0 1 1.121s
Create Triggers 0 0 0.651s
Install Comments 0 0 0.000s
------------------------- --------- --------- --------- --------------
Total import time ✓ 13 0.8 kB 28.042s
如果您看到像這樣的輸出,表示您的資料已成功匯出至您的 Prisma Postgres 執行個體。
您也可以使用 Prisma Studio 並驗證遷移是否成功
npx prisma studio
4. 為 Prisma Postgres 設定您的 Prisma 專案
遷移資料後,您需要設定您的 Prisma 專案以使用 Prisma Postgres。步驟會因您是否已在使用 Prisma ORM 而異。
如果您先前未使用 Prisma ORM
在您的專案目錄中執行 npx prisma init
,以在您的專案中初始化 Prisma。這會建立一個 prisma
資料夾,其中包含 schema.prisma
檔案和 .env
檔案 (如果尚不存在)。
在產生的 .env
檔案中,更新 DATABASE_URL
以符合您在步驟 1 中收到的 Prisma Postgres 連線字串
DATABASE_URL="prisma+postgres://accelerate.prisma-data.net/?api_key=__API_KEY__"
內省您新遷移的資料庫,方法是執行
npx prisma db pull
此命令會使用代表您遷移表格的模型更新您的 schema.prisma
檔案,以便您可以開始使用 Prisma Client 來查詢您的資料,或使用 Prisma Migrate 來管理未來的變更。
恭喜!您已成功將您的 MySQL 資料庫遷移至 Prisma Postgres 並設定您的 Prisma 專案。您的遷移教學課程現已完成。
如需 Prisma 和 Prisma Postgres 入門的完整指南,請參閱從頭開始使用 Prisma 和 Prisma Postgres。
如果您已在使用 Prisma ORM
在您的 schema.prisma
檔案中,將 datasource
區塊中的 provider
從 mysql
變更為 postgresql
datasource db {
provider = "mysql"
provider = "postgres"
url = env("DATABASE_URL")
}
在產生的 .env
檔案中,更新 DATABASE_URL
以符合您在步驟 1 中收到的新 Prisma Postgres 連線字串
DATABASE_URL="prisma+postgres://accelerate.prisma-data.net/?api_key=__API_KEY__"
內省您新遷移的 Prisma Postgres 資料庫並產生 Prisma Client
npx prisma db pull
此命令會根據新的資料庫結構描述重新整理您的 Prisma 模型。
如果您之前使用 Prisma Migrate
- 刪除
prisma
目錄中現有的migrations
資料夾。 - 為您的資料庫建立基準,以開始建立新的遷移。
恭喜!您已成功將您的 MySQL 資料庫遷移至 Prisma Postgres 並設定您的 Prisma 專案。您的遷移教學課程現已完成。