Предотвратить использование дубликата ключа - PullRequest
0 голосов
/ 28 октября 2018

База данных Postgresql.Для упрощенного примера я вставлю данные измерений в различные таблицы.Пример DDL для одного примера таблицы выглядит следующим образом:

CREATE TABLE
measurement
(
    id_meas BIGINT NOT NULL,
    ...
    PRIMARY KEY (id_meas)
);

Процесс вставки данных в настоящее время работает следующим образом:

  1. Выбор максимального значения идентификатора из таблицы
  2. Значение идентификатора приращения
  3. Вставить следующую строку данных, используя увеличенное значение идентификатора

Это работает, если только один клиент вставляет данные.Но что, если имеется> 1 клиент для вставки, так что два клиента могут выбрать 567 в качестве значения максимального идентификатора и оба увеличить это значение до 568 в качестве следующего значения идентификатора для вставки.В этом случае второй клиент, выполняющий команду вставки, получит ошибку дублированного ключа.Есть ли способ предотвратить эти ошибки, кроме повторного выполнения процесса вставки после возникновения ошибки?

1 Ответ

0 голосов
/ 28 октября 2018

Вы ищете столбец serial:

CREATE TABLE measurement (
    id_meas bigserial primary key,
    ...
);

bigserial - это bigint, который автоматически увеличивается (см. здесь ).Вы также можете просто использовать serial, если int достаточно большой.

Это дает базе данных ответственность за увеличение значения, а не за приложение.Вам гарантировано, что условия гонки не приведут к одному и тому же значению в разных записях.Возможно, при некоторых обстоятельствах пробелы в значении появятся.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...