使用 Accelerate 連線池設定 Supabase
簡介
本指南將教您如何使用 Prisma Accelerate 為託管在 Supabase 上的 PostgreSQL 資料庫新增連線池。
Prisma Accelerate 是一個強大且成熟的連線池管理器,能讓您的資料庫在流量尖峰和高負載情況下正常運作。請查看此 影片,了解其在負載測試中的表現,或 了解為什麼連線池很重要。
先決條件
若要順利完成本指南,您需要託管在 Supabase 上的 PostgreSQL 實例連線字串。它通常看起來像這樣:
postgresql://postgres:[YOUR-PASSWORD]@db.nzpppscrldfwlzfalbrf.supabase.co:5432/postgres
如果您已經有使用 Prisma ORM 的專案,可以跳過前兩個步驟,直接前往 步驟 3. 安裝 Accelerate 擴充功能。
1. 設定 Prisma ORM
首先,在您的專案中安裝 Prisma CLI:
npm install prisma --save-dev
然後,執行以下指令來初始化一個新專案:
npx prisma init
這將建立一個包含 schema.prisma 檔案的 prisma 目錄,並新增一個包含 DATABASE_URL 環境變數的 .env 檔案。
更新該檔案並將 DATABASE_URL 設定為您的 Supabase 連線字串:
DATABASE_URL="postgresql://postgres:[YOUR-PASSWORD]@db.nzpppscrldfwlzfalbrf.supabase.co:5432/postgres"
建立 prisma.config.ts 檔案以設定 Prisma:
import 'dotenv/config'
import { defineConfig, env } from 'prisma/config';
export default defineConfig({
schema: 'prisma/schema.prisma',
migrations: {
path: 'prisma/migrations',
},
datasource: {
url: env('DATABASE_URL'),
},
});
您需要安裝 dotenv 套件來載入環境變數:
npm install dotenv
2. 內省 (Introspect) 您的資料庫
接下來,執行以下指令來內省您的資料庫並建立資料模型:
npx prisma db pull
此指令會讀取您的資料庫結構描述,並在 schema.prisma 檔案中建立與資料庫中資料表相符的新模型。
如果您未來想使用 Prisma Migrate,也需要 為您的資料庫建立基準 (baseline)。
3. 安裝 Accelerate 擴充功能
安裝用於 Accelerate 的 Prisma Client 擴充功能:
npm install @prisma/extension-accelerate
這是存取 Prisma Accelerate 連線池所必需的。
4. 在 Prisma Console 中設定 Accelerate
要在 Prisma Console 中設定 Accelerate,請遵循以下步驟:
- 登入.
- 選擇 New project (新專案)
- 為您的專案選擇一個 Name (名稱)
- 在 Choose your starting product (選擇您的入門產品) 區段中,找到 Accelerate 卡片並點擊 Get started (開始使用)
- 在 Database connection string (資料庫連線字串) 欄位中,貼上您的 Supabase 連線字串
- 選擇最靠近您資料庫的 Region (區域)
- 點擊 Create project (建立專案)
- 在下一個畫面中,點擊 Enable Accelerate (啟用 Accelerate)
完成這些步驟後,您將被重新導向至另一個頁面,並需要點擊 Generate API key (產生 API 金鑰) 按鈕。
接著您會看到一個新的連線 URL,這能讓您連線到 Prisma Accelerate 的連線池。您需要將其設定為 .env 檔案中新的 DATABASE_URL。
DATABASE_URL="prisma://accelerate.prisma-data.net/?api_key=ey..."
如果您想將 Prisma Migrate 與 Prisma Accelerate 一起使用,您需要在 prisma.config.ts 檔案中提供直接的資料庫 URL。以 prisma:// 開頭的 Accelerate URL 用於透過 PrismaClient 進行查詢,而直接資料庫 URL 則用於遷移。
更新您的 prisma.config.ts:
import 'dotenv/config'
import { defineConfig, env } from 'prisma/config';
export default defineConfig({
schema: 'prisma/schema.prisma',
migrations: {
path: 'prisma/migrations',
},
datasource: {
url: env('DIRECT_URL'), // Direct database URL for migrations
},
});
並在您的 .env 檔案中加入 DIRECT_URL:
DATABASE_URL="prisma://accelerate.prisma-data.net/?api_key=ey..."
DIRECT_URL="postgresql://postgres:[YOUR-PASSWORD]@db.nzpppscrldfwlzfalbrf.supabase.co:5432/postgres"
5. 產生 Prisma Client
完成 Prisma Schema 後,您可以繼續產生 Prisma Client:
npx prisma generate
在 Prisma 7 中,使用 Prisma Accelerate 時不再需要 --no-engine 旗標。過去您需要執行 prisma generate --no-engine,但現在標準的 prisma generate 指令適用於所有使用情境。
6. 透過連線池發送查詢
現在,您需要在應用程式程式碼中將 Accelerate 擴充功能套用到您的 Prisma Client 實例:
import { PrismaClient } from "./generated/prisma/client"
import { withAccelerate } from "@prisma/extension-accelerate"
const prisma = new PrismaClient({
accelerateUrl: process.env.DATABASE_URL,
}).$extends(withAccelerate())
此時,您就可以開始發送查詢,這些查詢將透過連線池路由至您的資料庫。
與 Prisma 保持聯繫
透過以下方式與我們聯繫,繼續您的 Prisma 旅程: 我們的活躍社群。保持資訊靈通、參與其中,並與其他開發者合作
- 在 X 上關注我們 以獲取公告、現場活動和實用技巧。
- 加入我們的 Discord 提出問題、與社群對話,並透過對話獲得積極支援。
- 在 YouTube 上訂閱 查看教學、演示和直播。
- 在 GitHub 上交流 透過為存放庫加星標、報告問題或為 issue 做出貢獻。