Хорошо, я посмотрел, но не нашел ничего, что помогло бы мне. Если бы вы могли указать мне на что-нибудь или помочь мне найти решение, это было бы здорово.
Допустим, у меня есть таблица "users" (столбцы: id, имя пользователя и имя) и таблица "users_items" (столбцы: id_item, id_user, оба Foreign Keys)
Что я хочу сделать: Я хочу вставить нового пользователя и назначить ему элемент по умолчанию, который должен иметь каждый. Для этого я хочу создать транзакцию, в которой все или ничего не сохраняется. Поэтому, если (по какой-либо причине) я не могу дать ему этот предмет, я хочу, чтобы создание пользователя завершилось неудачей.
Как мне это сделать:
const pgp = require('pg-promise')(
{
capSQL: true // generate capitalized SQL
});
const db = pgp(configuration);
saveUser = (username, name) =>
db.tx (t =>
t.one('INSERT INTO users (username, name) VALUES $1, $2 RETURNING *', [username, name]).then(user =>
t.none ('INSERT INTO users_items (id_user, id_item) VALUES $1, 1', [user.id]).then(()=>
console.log('Everything\'s alright :)');
)
);
Что я ожидаю: все работает отлично, и мы все счастливы:).
Что на самом деле происходит: Первая инструкция в порядке, и корректно возвращает пользователя с идентификатором. Тем не менее, второй говорит мне, что ограничение fk_id_user нарушается, и выполните ROLLBACK.
Часть, не передающая первую вставку, работает правильно. Однако не должна ли работать вторая вставка? Я правильно понял что-то неправильно или pg-promise
работает не так, как ожидалось? Или, может быть, мне нужно сделать что-то другое .. Любая помощь будет оценена.