首页 > 解决方案 > setval 和 alter sequence restart 命令之间的区别

问题描述

将序列的值设置为一个值

这两个命令相同以获得相同的结果

SELECT setval('lcm.samplings_id_seq', 1, false); 

ALTER SEQUENCE lcm.samplings_id_seq RESTART WITH 1;

但是要进行更改序列,您似乎需要成为所有者……对于另一个,更新序列授权似乎没问题。

对于这个用例,还有其他理由使用改变序列吗?

标签: postgresql

解决方案


文档ALTER SEQUENCE

与 setval 调用相比,序列上的 RESTART 操作是事务性的,并阻止并发事务从同一序列中获取数字。如果这不是所需的操作模式,则应使用 setval。

如果您希望在执行更新时阻止对序列的任何使用,那么您希望使用该ALTER SEQUENCE方法。如果您只需要重置计数器并且可以使用该序列处理其他事务,那么您可以使用第一个示例使用setval.


推荐阅读