更改序列的起始值 - Postgresql

时间:2013-05-03 15:50:38

标签: postgresql

我对串口有点问题:从一个文件中,我填充了我的数据库,其中我有一个客户端ID(它是一个串口,它是我的主键)。我有300个客户端,所以300个客户端ID(1到300)。现在我的问题是,我有一个新客户的表单。我无法添加它们,因为当我添加客户端时,我的程序添加ID为1的客户端或ID 1已经分配给另一个客户端。

所以我的问题是:是否可以更改序列的起始值以解决此问题?

4 个答案:

答案 0 :(得分:23)

您可以使用RESTART WITH更改序列以更改当前序列号;

ALTER SEQUENCE test_seq RESTART WITH 300;

要使用serial关键字创建序列名称,请使用

SELECT adsrc FROM pg_attrdef WHERE adrelid = (SELECT oid FROM pg_class WHERE relname = 'table name goes here'); 

An SQLfiddle to test with

答案 1 :(得分:3)

PostgreSQL

ALTER SEQUENCE tablename_columnname_seq RESTART WITH anynumber;

示例:

ALTER SEQUENCE test_table_rec_id_seq RESTART WITH 4615793;

答案 2 :(得分:0)

如果您的Postgresql版本高于最高答案,则可以尝试使用select pg_get_serial_sequence('ingredients', 'id');获得序列号

SELECT adsrc FROM pg_attrdef WHERE adrelid = (SELECT oid FROM pg_class WHERE relname = 'ingredients');

答案 3 :(得分:-1)

上述解决方案无法满足我的需求。

我需要一个序列ID用作从1000(而不是1)开始的主键。

为此,我创建了一个标准的串行列:

ALTER table my_table ADD COLUMN new_id SERIAL PRIMARY KEY;

然后更新该列:

UPDATE my_table set new_id = new_id + 1000;

然后,我将该表与现有的非连续ID编号在1000以下的表连接起来。