我们有一个基于微服务的系统,其中每个微服务负责在启动时创建和升级其架构。他们所有人都使用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错误/限制吗?