одновременная ошибка «создать таблицу, если она не существует» в postgres с ошибкой «последовательность уже существует» - PullRequest
1 голос
/ 23 марта 2019

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

По сути, каждый сервис выполняет простой скрипт при запуске; например:

CREATE TABLE IF NOT EXISTS SERVICE_TABLE (
    ID bigserial primary key,
    DATA JSONB
)

Проблема в том, что когда служба развернута с коэффициентом репликации выше 1, поэтому одновременно запускается больше экземпляров, например, в kubernates, мы часто видим ошибки такого рода в журналах:

код ошибки 23505 двойное значение ключа нарушает уникальное ограничение Деталь "pg_type_typname_nsp_index": (SERVICE_TABLE_id_seq, 2200) уже существует

Сценарии выполняются в транзакции.

Кажется, что Postgres правильно обрабатывает создание самой таблицы только один раз, но каким-то образом запускает создание связанной последовательности, даже если это не нужно.

Мы что-то упустили? Это ошибка / ограничение Postgres?

...