更改序列的起始值 - Postgresql

afk*_*afk 14 postgresql

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

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

Joa*_*son 27

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

ALTER SEQUENCE test_seq RESTART WITH 300;
Run Code Online (Sandbox Code Playgroud)

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

SELECT adsrc FROM pg_attrdef WHERE adrelid = (SELECT oid FROM pg_class WHERE relname = 'table name goes here'); 
Run Code Online (Sandbox Code Playgroud)

一个要测试的SQLfiddle.

  • `adsrc` 列不再出现在最新的 posgres 中 (3认同)
  • @ user1086267:一个`serial`列**由一个序列填充**.请阅读手册.这些都记录在那里. (2认同)
  • @ user1086267如果使用`serial`关键字创建序列名,请使用`SELECT adsrc FROM pg_attrdef WHERE adrelid =(SELECT oid FROM pg_class WHERE relname ='table name goes here');` (2认同)

小智 8

PostgreSQL

ALTER SEQUENCE tablename_columnname_seq RESTART WITH anynumber;
Run Code Online (Sandbox Code Playgroud)

例子:

ALTER SEQUENCE tablename_columnname_seq RESTART WITH anynumber;
Run Code Online (Sandbox Code Playgroud)


小智 5

如果您的 Postgresql 版本高于上面的答案,您可以尝试使用以下命令获取序列密钥select pg_get_serial_sequence('ingredients', 'id');

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