在触发器函数中重置PostgreSQL序列

时间:2016-06-29 02:01:47

标签: sql postgresql database-trigger database-sequence

我有一个表counter_registry,其列priority_number的默认值来自nextval('counter_registry_priority_number_seq'::regclass)。我的触发器功能(在插入之前运行)有一个片段,当插入日期没有现有事务时重置序列:

-- Restart the priority number sequence if current day is a new day
IF (SELECT CASE WHEN NOT EXISTS ( SELECT * FROM counter_registry WHERE transaction_date = now()::date ) THEN true ELSE false END) = true
    THEN PERFORM setval('counter_registry_priority_number_seq', 1);
END IF;

当我在新的一天从客户端应用程序向表中插入新记录时,priority_number列从重置之前的序列的nextval获取其值,即使它已经被重置。后续插入遵循新重置的序列,从1开始。

如何正确地重置序列,之后,当我第一次插入时,我会得到更改序列的nextval?

0 个答案:

没有答案