const { Client } = require('pg'); const path = require('path'); require('dotenv').config({ path: path.join(__dirname, '../.env') }); const createDb = async () => { const dbName = process.env.DB_DATABASE || 'stsystem'; // 连接到默认的 postgres 数据库 const client = new Client({ user: process.env.DB_USER, host: process.env.DB_HOST, database: 'postgres', // 连接到默认数据库 password: process.env.DB_PASSWORD, port: process.env.DB_PORT, }); try { await client.connect(); console.log(`已连接到 postgres 数据库,正在检查 ${dbName} 是否存在...`); const res = await client.query(`SELECT 1 FROM pg_database WHERE datname = $1`, [dbName]); if (res.rows.length === 0) { console.log(`数据库 ${dbName} 不存在,正在创建...`); // CREATE DATABASE 不能在事务块中运行,也不能使用参数化查询 await client.query(`CREATE DATABASE "${dbName}"`); console.log(`数据库 ${dbName} 创建成功!`); } else { console.log(`数据库 ${dbName} 已存在,跳过创建。`); } } catch (err) { console.error('创建数据库失败:', err); // 如果是因为 postgres 数据库不存在(极少见)或者密码错误,这里会报错 // 但我们不应该阻塞后续流程,也许用户已经手动创建了 stsystem // 不过为了安全起见,如果这一步失败,通常意味着配置错误,还是退出比较好 process.exit(1); } finally { await client.end(); } }; createDb();