我正在使用动态创建的表分区将事件信息存储在 Postgresql 13 数据库中。子表从中继承其结构的主表包含一个具有自动递增序列的 id 字段。插入的序列、主表和触发器如下所示:
CREATE SEQUENCE event_id_seq
INCREMENT 1
START 1
MINVALUE 1
MAXVALUE 9223372036854775807
CACHE 1;
CREATE TABLE event_master
(
id bigint NOT NULL DEFAULT nextval('event_id_seq'::regclass),
event jsonb,
insert_time as timestamp
)
CREATE TRIGGER insert_event_trigger
BEFORE INSERT
ON event_master
FOR EACH ROW
EXECUTE PROCEDURE event_insert_function();
此外,event_insert_function()
使用以下代码插入发布到主表的新行:
EXECUTE format('INSERT INTO %I (event, insert_time) VALUES($1,$2)', partition_name) using NEW.event, NEW.insert_time);
在查看 id 字段中的序列号时,我只得到每隔一个数字,即 1,3,5,7,...
根据我发现的一些相关信息,我认为这与 Postgresql 将初始插入主表和触发插入子表作为两次出现计数有关。所以我的第一个问题是,这是否正确,如果正确,其背后的原因是什么?为什么不“通过”插入从主人到孩子?
更重要的是,我需要做些什么来设置正确的递增序列(即返回 1,2,3,4 ...)?