我对串口有点问题:从一个文件中,我填充了我的数据库,其中我有一个客户端ID(它是一个串口,它是我的主键)。我有300个客户端,所以300个客户端ID(1到300)。现在我的问题是,我有一个新客户的表单。我无法添加它们,因为当我添加客户端时,我的程序添加ID为1的客户端或ID 1已经分配给另一个客户端。
所以我的问题是:是否可以更改序列的起始值以解决此问题?
答案 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');
答案 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以下的表连接起来。