在一个应用程序中,我必须生成永远不会重复的数字,就像序列一样。因此,每次用户请求编号时,应用程序必须返回生成的最后一个值加上一个从不重复值。
序列可以完美地工作,除了每个新的一天生成种子必须再次重置为1的事实。所以,今天应用程序开始从1开始生成数字,无论最后生成的值是什么,明天它将从<1>再次生成值 。
如何做到这一点?
答案 0 :(得分:2)
您可以使用sequence。无需模仿它。
CREATE SEQUENCE my_serial START 1;
然后按
选择值SELECT nextval('my_serial');
然后在中午你alter the sequence。
ALTER SEQUENCE my_serial RESTART WITH 1;
重置可以是cron作业或类似作品。
答案 1 :(得分:1)
您正在寻找SERIAL列。
这些方面的东西。
CREATE TABLE MY_TABLE (
id SERIAL,
MY_COLUMN varchar);
INSERT INTO MY_TABLE (MY_COLUMN) values ('ROW1');
INSERT INTO MY_TABLE (MY_COLUMN) values ('ROW2');
SELECT * FROM MY_TABLE;
1,ROW1
2,ROW2
要每天将SERIAL列重置为1,您需要使用类似
的内容运行(cron?!?)作业SELECT SETVAL((SELECT pg_get_serial_sequence('MY_TABLE', 'id')), 1, false);
如果你正在使用SERIAL字段,PostgreSQL实际上会为你创建一个SEQUENCE,每次插入一行时都会递增。要重置它,您需要知道序列名称是什么。它通常类似于
[表名] _ [serial_field_name] _seq
您可以通过运行pg_get_serial_sequence('[table_name]','[serial_field_name]')找到序列名称。