43 lines
1.6 KiB
JavaScript
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();
|