如何将Postgres IDENTITY列重置为初始值1?
重置Postgres IDENTITY列后插入ID为1的解决方法
这不是Postgres的bug,是你使用setval时的默认行为导致的:当执行setval(pg_get_serial_sequence('test', 'id'), 1)时,默认第三个参数is_called为true,这会告诉PostgreSQL值1已经被使用过,所以下一次插入数据生成ID时,会返回2。
要让后续插入生成的ID为1,有两种可行方法:
方法一:调整setval的参数
调用setval时显式将第三个参数设为false,表示值1尚未被使用:
SELECT setval(pg_get_serial_sequence('test', 'id'), 1, false);
方法二:使用IDENTITY列专属的重置命令
针对GENERATED ALWAYS AS IDENTITY类型的列,更规范的方式是用ALTER TABLE命令直接重置序列起始值:
ALTER TABLE test ALTER COLUMN id RESTART WITH 1;
执行上述任意一种操作后,再插入数据,生成的ID就会是1了。
内容的提问来源于stack exchange,提问作者user14381362
相关产品推荐
相关产品推荐

