@kr_ilya

Как несколько запросов в базу преобразовать в 1?

Есть функция добавления пользователя в базу
Actions.addTgUser = async (data) => {
	var exist = await Actions.checkTgUserExist(data.chat.id);
	if(!exist){
		pg.Query('INSERT INTO tg_users (username, is_bot, language_code, first_name, date_start, chat_id) VALUES ($1, $2, $3, $4, $5, $6)', [data.from.username, data.from.is_bot, data.from.language_code, data.from.first_name, data.date, data.chat.id]);
		pg.Query('INSERT INTO tg_users_settings (chat_id, bot_lang) VALUES ($1, $2)', [data.chat.id, data.from.language_code]);
		pg.Query('INSERT INTO tg_users_stats (chat_id, last_active) VALUES ($1, $2)', [data.chat.id, data.date]);
	}else{
		Actions.updateTgUser(data);
		Actions.updateTgUserLastActive(data);
	}
	return true;
};


Я думаю, что будет лучше для производительности, если вместо трех INSERT запросов сделать один общий? Или я не прав?

Вот только как это всё записать одним запросом?

Вот функция query
const Pool = require('pg').Pool
const pool = new Pool({
  user: config.base.user,
  host: config.base.host,
  database: config.base.database,
  password: config.base.password,
  port: config.base.port,
});

	Query: function (sql, values, singleItem) {
	    return new Promise((resolve, reject) => {
	            try {
	                pool.query(sql, values, function (err, result) {
	                    if (err) {
	                        reject(err);
	                    } else {
	                    	// console.log('Результат: ', result)
	                        resolve(singleItem ? result.rows[0] : result);
	                    }
	                });
	            }
	            catch (e) {
	                reject(e);
	            }
	    });
	},
  • Вопрос задан
  • 56 просмотров
Решения вопроса 1
@mrxor
Simple is better than complex
Вы делаете инсерты в разные таблицы, и вы не можете сделать их одним запросом.
Но вы можете завернуть все это в транзакцию, чтобы обеспечить консистентность данных.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы