На данный момент переделал функции
function createValuesTemplate(length) {
const numColumns = 9;
const placeholders = [];
let placeholderIndex = 1;
for (let i = 0; i < length; i++) {
let rowPlaceholders = [];
for (let j = 0; j < numColumns; j++) {
rowPlaceholders.push('$' + placeholderIndex++);
}
placeholders.push('(' + rowPlaceholders.join(', ') + ')');
}
return placeholders.join(', ');
}
async function accepting_expenses_array(req, res) {
const expenses_array = req.body;
const expenses_as_numbers = expenses_array.map(Number);
console.log("expenses_as_numbers",expenses_as_numbers)
try {
// Первое число - id_order. Ищем максимальный id_work
const results = await pool.query('SELECT id_work FROM "works" WHERE id_order = $1', [expenses_as_numbers[0]]);
const work_id_array = results.rows.map(row => row.id_work);
const work_id_max = Math.max(...work_id_array);
console.log("work_id_max",work_id_max)
const expensesWithoutFirst = expenses_as_numbers.slice(1); // Игнорируем первый элемент, id_order
const newExpensesArray = [];
for (let i = 0; i < expensesWithoutFirst.length; i += 8) {
// Добавляем work_id_max в начало каждой строки значений
newExpensesArray.push(work_id_max, ...expensesWithoutFirst.slice(i, i + 8));
}
console.log("newExpensesArray",newExpensesArray)
if (newExpensesArray.length % 9 !== 0) {
return res.status(400).json({
success: false,
error: 'Количество элементов в массиве расходов должно быть кратным числу столбцов таблицы (включая work_id_max).'
});
}
// Подготовка SQL запроса на вставку
const insertQuery = `INSERT INTO "expenses" (
n_plan,
type_work_id,
printer_id,
material_id,
format_id,
performer_id,
n_sheets,
n_page,
n_ruined
) VALUES ${createValuesTemplate(newExpensesArray.length / 9)};;`
console.log("createValuesTemplate(newExpensesArray.length / 9)",createValuesTemplate(newExpensesArray.length / 9))
// Выполняем запрос на вставку с newExpensesArray
const insertResult = await pool.query(insertQuery, newExpensesArray);
console.log("insertResult",insertResult);
// Отправляем успешный ответ
return res.json({ success: true, message: 'Данные успешно добавлены.' });
} catch (error) {
// Логирование ошибки и отправка ошибочного ответа
console.error('Error during query execution:', error.stack);
return res.status(500).json({
success: false,
error: error.message
});
}
}
выяснил что пакетная вставка быстрее
Добил до конца, то что хотел. Работает как задумано