@r4gn4r0k

TypeORM как лучше сгенерировать уникальный ID только из цифр длиной 6-8 знаков?

Здравствуйте. Работаю над проектом на Nest.js, к СУБД PostgreSQL запросы отправляю при помощи TypeORM. Возникла необходимость генерировать ID некоторых сущностей (Entity) в определенном формате 6ти или 8мизначные и только из цифр.
Мне пришла мысль: чeрез BeforeInsert запускать функцию, которая генерирует случайный ID из 6ти цифр, затем сверят по БД существует ли запись с таким ID, если не существует, то передает этот ID в BeforeInsert. Но я не уверен, что это самое лучшее решение для данной задачи., т.к. создается лишний запрос к БД, который в случае неуникального ID повторяется, пока не станет уникальным. Плюс, когда большая часть ID будет уже занята, это может затянуться на долгое время.
Есть ли еще какие-либо мыли, как это можно сделать лучше?

UPDATE: появилась другая мысль. Давать возможность БД работать по стандарту - генерировать ID по инкременту от предыдущего значения ID, но необходимо будет как-то контролировать, от какого числа начинается этот инкремент. Как в TypeORM с СУБД PostgreSQL это реализовать?
  • Вопрос задан
  • 96 просмотров
Пригласить эксперта
Ответы на вопрос 1
alex_romanov116
@alex_romanov116
Web-developer
как вариант создать sequence в postgres: https://postgrespro.ru/docs/postgresql/9.6/sql-cre...

установить начальное, минимальное и максимальное значение и каждый раз при вставке брать следующие значение

INSERT INTO distributors VALUES (nextval('serial'), 'nothing');
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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