Files
openclaw-master-skills/skills/database-admin/scripts/query_helper.js
T

69 lines
1.7 KiB
JavaScript

#!/usr/bin/env node
/**
* 查询辅助工具 - 用于快速编写和执行 SQL 查询
*/
const { Pool } = require('pg');
const pool = new Pool({
host: process.env.DB_HOST || 'localhost',
port: parseInt(process.env.DB_PORT) || 5432,
database: process.env.DB_NAME || 'postgres',
user: process.env.DB_USER || 'postgres',
password: process.env.DB_PASSWORD || '',
});
/**
* 执行 SELECT 查询并格式化输出
*/
async function executeQuery(sql, params = []) {
try {
const result = await pool.query(sql, params);
// 格式化为表格显示
if (result.rows.length > 0) {
const headers = Object.keys(result.rows[0]);
console.log(headers.join('\t'));
result.rows.forEach(row => {
console.log(Object.values(row).map(v => String(v)).join('\t'));
});
} else {
console.log('无数据');
}
return result;
} catch (err) {
console.error(`查询错误:${err.message}`);
throw err;
}
}
/**
* 聚合统计查询生成器
*/
function generateStatsQuery(table, fields = [], where = {}, groupBy = []) {
const conditions = Object.entries(where).map(([k, v]) =>
`WHERE ${k} = '${v}'`
).join(' AND ');
const groupSql = groupBy.length ? `GROUP BY ${groupBy.join(', ')}` : '';
return `SELECT ${fields.join(', ')} FROM ${table} ${conditions} ${groupBy ? groupSql : ''}`;
}
/**
* 分页查询生成器
*/
function generatePagedQuery(table, selectClause = '*', where = {}, page = 1, pageSize = 10) {
const offset = (page - 1) * pageSize;
return `SELECT ${selectClause || '*'} FROM (${generateStatsQuery(table, where)}) AS subquery LIMIT ${pageSize} OFFSET ${offset}`;
}
// CLI
async function main() {
// ... 查询解析和执行逻辑
}
main().catch(console.error);