雖然 remix 預設 sqlite 是鼓勵快速開發
但我覺得 還是需要管理面板 不然做客服會很麻煩
嘗試把 driver 改成 supabase
只要在 table 看到 session 資料就算連線成功
避免混淆 直接把 prisma/dev.sqlite 檔案刪掉
另外 prisma/migration 裡面會有 create session 的 sql 檔案
這 sql 檔案格式是給 sqlite 的 不能用在 postgresql 所以也給刪掉 比較清楚
然後把 prisma/schema.prisma 內容修改
datasource db {
// provider = "sqlite"
// url = "file:dev.sqlite"
provider = "postgresql"
url = env("DATABASE_URL")
directUrl = env("DIRECT_URL")
}
我本以為 database url 就夠 但發現還需要 direct url 不太知道原理
總之在 supabase 面板點 connect -> ORMs 底下就有資訊
然後建立 .env 檔 把兩個值放進去
跑 npm run prisma generate 產出必要的 js client 檔案
然後跑 npm run prisma migrate dev 產出 migration 檔案、把資料庫整個刷新
其實 postgresql 版本的 sql 跟 sqlite 的版本只差一點點而已
列出來會像這樣 sqlite vs postgresql
-- CreateTable
CREATE TABLE "Session" (
"id" TEXT NOT NULL PRIMARY KEY,
"shop" TEXT NOT NULL,
"state" TEXT NOT NULL,
"isOnline" BOOLEAN NOT NULL DEFAULT false,
"scope" TEXT,
"expires" DATETIME,
"accessToken" TEXT NOT NULL,
"userId" BIGINT,
"firstName" TEXT,
"lastName" TEXT,
"email" TEXT,
"accountOwner" BOOLEAN NOT NULL DEFAULT false,
"locale" TEXT,
"collaborator" BOOLEAN DEFAULT false,
"emailVerified" BOOLEAN DEFAULT false
);
-- CreateTable
CREATE TABLE "Session" (
"id" TEXT NOT NULL,
"shop" TEXT NOT NULL,
"state" TEXT NOT NULL,
"isOnline" BOOLEAN NOT NULL DEFAULT false,
"scope" TEXT,
"expires" TIMESTAMP(3),
"accessToken" TEXT NOT NULL,
"userId" BIGINT,
"firstName" TEXT,
"lastName" TEXT,
"email" TEXT,
"accountOwner" BOOLEAN NOT NULL DEFAULT false,
"locale" TEXT,
"collaborator" BOOLEAN DEFAULT false,
"emailVerified" BOOLEAN DEFAULT false,
CONSTRAINT "Session_pkey" PRIMARY KEY ("id")
);
然後重新跑一次 npm run dev 重新打開商店後台
會在 supabase 看到 Session 資料表裡面有值囉!
成功把已授權商店的 token 狀態紀錄 從 sqlite 轉移到 supabase 囉!
我留意到還有多了一個檔案 prisma/migrations/migration_lock.toml
不知道功能是什麼