Задать вопрос
@User99

Как сделать RETURNING id с блокировкой?

При вставке данных в БД возвращается ID с помощью встроенной функции RETURNING id;
Но получилось так что, вставили запись сразу около 50 чел одновременно. И соответственно половине возвратился ID того самого кто последний вставил запись.
Это наверное единичный случай. Но конфиденциальный материал получил другой человек.
Как это можно исправить? Как возвращать ID только того кто вставил запись, а не последнюю запись?
Пример:
spoiler

Маша вставил в базу запись: "Привет, я Маша!" ->ID: 1
Саша вставил в базу запись: "Привет, я Саша!" -> ID: 2
Так получилось что они сохранили одновременно. Но на миллисекунд позже сохранил Саша.

И так получилось что Маше возвращается ID Саши, то есть ID=2;



Как это можно исправить?

Более 3 млн. записей. Одновременных пользователей около 1 тыс. База PostgreSQL
  • Вопрос задан
  • 43 просмотра
Подписаться 2 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 1
@galaxy
И так получилось что Маше возвращается ID Саши, то есть ID=2;

Так не могло получиться. INSERT RETURNING возвращает строго то, что он вставил (а не какую-то "последнюю запись")
Ответ написан
Ваш ответ на вопрос

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

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