Files
2026-04-19 14:05:40 +08:00

43 lines
1.6 KiB
JavaScript

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();