try { const { Pool, Client } = require('pg') const path = require('path') const fs = require("fs"); //! 定义变更数据 数据为想要达到的结果 //! 只筛选 管廊 结构物 //! projectId 是目标结构物 //! points 是要归属到这个结构物下的点位 id const resetBing = [ { projectId: 1, points: [1, 2, 3] } ] // 测试环境 const pool = new Pool({ user: 'FashionAdmin', host: '10.8.30.39', database: 'Inspection_20231016', password: '123456', port: 5432, }) // 商用环境 // const pool = new Pool({ // user: '', // host: '', // database: '', // password: '', // port: 5432, // }) const fun = async () => { // note: we don't try/catch this because if connecting throws an exception // we don't need to dispose of the client (it will be undefined) const client = await pool.connect() client.on('error', err => { console.error(err); }) try { await client.query('BEGIN') console.log(`开始`); let index = 0 for (let r of resetBing) { if (!r.projectId || !r.points || !r.points.length) { throw `参数错误 index=${index}`; } for (let i = index + 1; i < resetBing.length; i++) { if (resetBing[i].projectId == r.projectId) { throw `重复项目 index= ${index} / ${i} `; } for (let j = 0; j < r.points.length; j++) { if (resetBing[i].points.some(item => item == r.points[j])) { throw `重复点位 pointIndex= ${j} / project ${i} `; } } } const targetProject = (await client.query(` SELECT * FROM project WHERE id=$1; `, [r.projectId] )).rows[0] if (!targetProject) { throw `目标项目不存在 index= ${index} `; } if (targetProject.type != '管廊') { throw `目标项目不是管廊 index= ${index} `; } console.log(targetProject); let updatePointSql = `UPDATE point SET project_id=${r.projectId} WHERE id IN (${r.points.join(',')},-1);` console.log(updatePointSql); // 变更点位 await client.query(updatePointSql) index++ } // await client.query('ROLLBACK') await client.query('COMMIT') console.log('执行完毕~') } catch (e) { await client.query('ROLLBACK') console.log('执行错误~') throw e } finally { client.release(); } } fun() } catch (error) { console.error(error) }