У нас есть микросервисная система, где каждый микросервис отвечает за создание и обновление своей схемы при запуске. Все они используют 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?