nepster-web
@nepster-web

Как сделать один идентификатор на 2 таблицы?

Задачка сделать один идентификатор (авто инкремент) на 2 таблицы.
Собственно есть данные и демо данные, они должны залетать в 2 разные таблицы, но при этом для корректного обращения на фронте у них не должны пересекаться айдишники.

Тоесть, если залетает 3 демо записи в одну таблицу, то не демо запись залитает в следующую с идентификатором 4.

Как я понял вариант - партиции, однако не совсем понятно, как создать подобное правило.
  • Вопрос задан
  • 131 просмотр
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега PostgreSQL
Седой и строгий
Идея дурацкая, если честно, но сделать можно:

create sequence shared_sequence;
create table production_data(id bigint default nextval('shared_sequence'), value text);
create table demo_data(id bigint default nextval('shared_sequence'), value text);
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@Akela_wolf
Extreme Programmer
В Postgresql нет автоинкремента, в postgresql есть последовательности (sequence).
Собственно берите значение (nextval) из одного и того же сиквенса при вставке записи в обе таблицы - получите то что вам нужно.
Ответ написан
Комментировать
@nApoBo3
Вам в любом случае поддерживать логику этого ключа за пределами базы.
Можно сделать не пересекающиеся инкримент( один от 1 до 100, второй со 101 до 200, типа того ) можно внешнюю таблицу, можно отказаться от числового ключа и использовать uuid.
Ответ написан
@Myclass
А я-бы с id на key перешёл. Тогда не только две таблицы но десять nodes смогут одно и тоже параллельно обрабатывать и сохранять. Те. Key описывает record, а не какое-то случайно генерированное id.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы