码桶
发现社区成员的开源项目
index.ts1.4 KB
import { drizzle as drizzleD1 } from 'drizzle-orm/d1';
import { drizzle as drizzlePg } from 'drizzle-orm/postgres-js';
import postgres from 'postgres';
import * as schema from './schema';
export function getDb(env?: { DB?: D1Database }) {
if (env && env.DB) {
return {
type: 'd1' as const,
db: drizzleD1(env.DB, { schema: { meetings: schema.meetingsD1 } }),
table: schema.meetingsD1,
};
}
// VPS PostgreSQL 17 模式 (使用纯 JS 异步连接池库 postgres)
const connectionString = process.env.DATABASE_URL || 'postgres://postgres:postgres@localhost:5432/meeting_forward';
const client = postgres(connectionString);
return {
type: 'pg' as const,
db: drizzlePg(client, { schema: { meetings: schema.meetingsPg } }),
table: schema.meetingsPg,
};
}
// 自动初始化 PG 表结构
export async function initPgTables() {
const connectionString = process.env.DATABASE_URL || 'postgres://postgres:postgres@localhost:5432/meeting_forward';
const sql = postgres(connectionString);
await sql`
CREATE TABLE IF NOT EXISTS meetings (
id TEXT PRIMARY KEY,
slug TEXT NOT NULL UNIQUE,
meeting_id TEXT,
dm_code TEXT,
dedup_hash TEXT NOT NULL UNIQUE,
topic TEXT,
raw_text TEXT NOT NULL,
user_session_id TEXT NOT NULL,
created_at TIMESTAMP NOT NULL,
expires_at TIMESTAMP NOT NULL
);
`;
await sql.end();
}