從現有資料庫匯入資料
本指南提供了將資料從現有 PostgreSQL 資料庫匯入到 Prisma Postgres 的分步說明。
您可以透過三個步驟完成此遷移
- 建立一個新的 Prisma Postgres 資料庫。
- 透過
pg_dump匯出您的現有資料。 - 透過
pg_restore將之前匯出的資料匯入到 Prisma Postgres。
在第三步中,您將使用直接連線在執行 pg_restore 期間安全地連線到您的 Prisma Postgres 資料庫。
先決條件
- 現有 PostgreSQL 資料庫的連線 URL
- 一個賬戶
- 已安裝 Node.js 18+
- PostgreSQL CLI 工具(
pg_dump、pg_restore),用於建立和恢復備份
1. 建立一個新的 Prisma Postgres 資料庫
按照以下步驟建立一個新的 Prisma Postgres 資料庫
- 登入到並開啟控制檯。
- 在您選擇的工作區中,點選新建專案按鈕。
- 在名稱欄位中輸入您的專案名稱,例如hello-ppg。
- 在Prisma Postgres部分,點選開始使用按鈕。
- 在區域下拉選單中,選擇離您當前位置最近的區域,例如美國東部(北弗吉尼亞)。
- 點選建立專案按鈕。
您的 Prisma Postgres 例項建立完成後,您可以進入下一步。
2. 從現有資料庫匯出資料
在此步驟中,您將從現有資料庫匯出資料,並將其儲存在本地計算機上的 .bak 檔案中。
確保您已準備好現有資料庫的連線 URL,其結構應如下所示
postgresql://USER:PASSWORD@HOST:PORT/DATABASE
展開下方以檢視提供商特定的說明,幫助您確定正確的連線字串
Neon
- 確保透過關閉連線池開關來選擇非池化連線字串。
sslmode必須設定為require並附加到您的 Neon 資料庫 URL,命令才能生效。- 連線 URL 應類似於這樣
postgresql://USER:PASSWORD@YOUR-NEON-HOST/DATABASE?sslmode=require
Supabase
- 使用採用 Supavisor 會話模式 的資料庫連線 URL。
- 連線 URL 應類似於這樣
postgres://postgres.apbkobhfnmcqqzqeeqss:[YOUR-PASSWORD]@aws-0-ca-central-1.pooler.supabase.com:5432/postgres
接下來,執行以下命令匯出 PostgreSQL 資料庫的資料(將 `__DATABASE_URL__` 佔位符替換為您的實際資料庫連線 URL)
pg_dump \
-Fc \
-v \
-d __DATABASE_URL__ \
-n public \
-f db_dump.bak
以下是此命令使用的 CLI 選項的快速概述
-Fc: 使用自定義備份格式,推薦用於pg_restore-v: 以詳細模式執行pg_dump-d: 指定資料庫連線字串-n: 指定目標 PostgreSQL schema-f: 指定備份檔案的輸出名稱
執行此命令將建立一個名為 db_dump.bak 的備份檔案,您將在下一步中使用它將資料恢復到您的 Prisma Postgres 資料庫中。
3. 將資料匯入 Prisma Postgres
在本節中,您將使用TCP 隧道連線到您的 Prisma Postgres 例項,並透過 `pg_restore` 匯入資料。
3.1. 使用 @prisma/ppg-tunnel 連線到 Prisma Postgres 資料庫
開啟一個新終端並設定您的 Prisma Postgres 資料庫連線 URL 的環境變數。
export DATABASE_URL="prisma+postgres://accelerate.prisma-data.net/?api_key=eyJhbGciOiJIUzI..."
執行隧道
npx @prisma/ppg-tunnel --host 127.0.0.1 --port 5432
您應該看到類似於以下內容的輸出
Prisma Postgres auth proxy listening on 127.0.0.1:52604 🚀
Your connection is authenticated using your Prisma Postgres API key.
...
==============================
hostname: 127.0.0.1
port: 52604
username: <anything>
password: <none>
==============================
保持此隧道程序執行以維持連線!
3.2. 使用 pg_restore 恢復備份
使用第 2 步中的備份檔案,透過執行此命令,使用 pg_restore 將資料恢復到 Prisma Postgres 資料庫中
PGSSLMODE=disable \
pg_restore \
-h 127.0.0.1 \
-p 5432 \
-v \
-d postgres \
./db_dump.bak \
&& echo "-complete-"
命令執行完成後,您將成功地將資料從現有 PostgreSQL 資料庫匯入到 Prisma Postgres 🎉
要驗證匯入是否成功,您可以使用Prisma Studio。您可以在您的專案中點選左側導航欄中的Studio選項卡開啟它,或者執行此命令在本地啟動 Prisma Studio
npx prisma studio
4. 更新您的應用程式程式碼以查詢 Prisma Postgres
場景 A:您已在使用 Prisma ORM
如果您已經在使用 Prisma ORM,您只需執行以下操作:
- 將 Prisma Accelerate 擴充套件新增到您的專案
- 更新資料庫連線 URL 並重新生成 Prisma Client
4.A.1. 新增 Prisma Accelerate 擴充套件
使用 Prisma Postgres 時,Prisma Accelerate 擴充套件是必需的。如果您目前尚未將 Prisma Accelerate 與 Prisma ORM 結合使用,請按照以下步驟使 Prisma ORM 與 Prisma Postgres 協同工作。
首先,在您的專案中安裝 `@prisma/extension-accelerate` 包
npm install @prisma/extension-accelerate
然後,將此擴充套件新增到您的 Prisma Client 例項中
import { withAccelerate } from '@prisma/extension-accelerate'
const prisma = new PrismaClient().$extends(withAccelerate())
4.A.2. 更新資料庫連線 URL
資料庫連線 URL 是透過 `schema.prisma` 檔案中 `datasource` 塊的 `url` 配置的。通常,它透過一個名為 `DATABASE_URL` 的環境變數設定
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
接下來的步驟假設您使用 `.env` 檔案來設定 `DATABASE_URL` 環境變數(如果不是這種情況,您可以按您偏好的方式設定環境變數)。
開啟 `.env` 檔案並更新 `DATABASE_URL` 環境變數的值,使其與您的 Prisma Postgres 連線 URL 匹配,類似於這樣
DATABASE_URL="prisma+postgres://accelerate.prisma-data.net/?api_key=__API_KEY__"
最後一步,您需要重新生成 Prisma Client,以便更新的環境變數生效,並且您的查詢將指向 Prisma Postgres
npx prisma generate --no-engine
完成後,您可以執行您的應用程式,它應該像以前一樣工作。
場景 B:您尚未開始使用 Prisma ORM
如果您尚未開始使用 Prisma ORM,您需要執行以下步驟才能從應用程式中使用 Prisma Postgres
- 在您的專案中安裝 Prisma CLI
- 內省資料庫以生成 Prisma schema
- 生成 Prisma Client
- 更新應用程式中的查詢以使用 Prisma ORM
您可以在本指南中找到此過程的詳細分步說明:將 Prisma ORM 新增到現有專案。