| // 一次性建表脚本:本地用 direct connection 连 Supabase,跑 supabase-schema.sql。 | |
| // 运行:node scripts/supabase-init.mjs (读取 .env 的 SUPABASE_DB_URL) | |
| import { readFileSync } from "node:fs"; | |
| import { fileURLToPath } from "node:url"; | |
| import { dirname, join } from "node:path"; | |
| import pg from "pg"; | |
| import "dotenv/config"; | |
| const here = dirname(fileURLToPath(import.meta.url)); | |
| const sql = readFileSync(join(here, "supabase-schema.sql"), "utf8"); | |
| const connectionString = process.env.SUPABASE_DB_URL; | |
| if (!connectionString) { | |
| console.error("SUPABASE_DB_URL is required in .env"); | |
| process.exit(1); | |
| } | |
| const client = new pg.Client({ connectionString, ssl: { rejectUnauthorized: false } }); | |
| await client.connect(); | |
| console.log("connected to Supabase, applying schema..."); | |
| await client.query(sql); | |
| const tables = await client.query( | |
| "select table_name from information_schema.tables where table_schema = 'public' order by table_name" | |
| ); | |
| console.log("public tables:", tables.rows.map((r) => r.table_name).join(", ")); | |
| const rls = await client.query( | |
| "select relname, relrowsecurity from pg_class where relname in ('app_settings','mailboxes','mails','attachments') order by relname" | |
| ); | |
| console.log("RLS:", rls.rows.map((r) => `${r.relname}=${r.relrowsecurity}`).join(", ")); | |
| await client.end(); | |
| console.log("done"); | |