Я пытаюсь создать миграцию knex. Миграция должна быть транзакцией, которая должна добавить роль и некоторых пользователей в базу данных. Если пользователи уже находятся в базе данных, транзакция должна изменить свой role_id на новый role_id
exports.up = function(knex) {
async function transaction(t) {
await t.raw('INSERT INTO "public"."role" VALUES (3, \'external_support\');');
let i;
for(i = 0; i < newUsers.length; i += 1) {
const result = await t.raw('SELECT id FROM "public"."user" WHERE email = ?;', [
newUsers[i].email
]);
if (result.rowCount === 0) {
await t.raw('INSERT INTO "public"."user" (email, first_name, last_name) VALUES (?, ?, ?);', [
newUsers[i].email,
newUsers[i].firstname,
newUsers[i].lastname
]);
await t.raw('INSERT INTO "public"."users_roles" VALUES ((SELECT id FROM "public"."user" WHERE email = ?) , 3);', [
newUsers[i].email
]);
} else {
await t.raw('UPDATE "public"."users_roles" SET role_id = 3 WHERE user_id = (SELECT id FROM "public"."user" WHERE email = ?);', [
newUsers[i].email
]);
}
}
}
Так что основная логика этого (должна быть)
- добавить новую роль
- проверьте, существуют ли пользователи
- Если не добавить пользователей и установить их role_id для новых
- Если да, то измените их role_id на новый
Итак, я получаю
`error: SAVEPOINT can only be used in transaction blocks`
Почему?