如何模仿Postgres中的序列?

时间:2016-06-22 02:52:11

标签: postgresql

在一个应用程序中,我必须生成永远不会重复的数字,就像序列一样。因此,每次用户请求编号时,应用程序必须返回生成的最后一个值加上一个从不重复值

序列可以完美地工作,除了每个新的一天生成种子必须再次重置为1的事实。所以,今天应用程序开始从1开始生成数字,无论最后生成的值是什么,明天它将从<1>再次生成值

如何做到这一点?

2 个答案:

答案 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

datatypes SERIAL

要每天将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]')找到序列名称。