将序列的值设置为一个值
这两个命令相同,结果相同
SELECT setval('lcm.samplings_id_seq', 1, false);
ALTER SEQUENCE lcm.samplings_id_seq RESTART WITH 1;
但要执行更改序列,您似乎需要成为所有者... 对于另一个,按顺序更新授权似乎没问题。
对于这个用例,是否还有其他原因需要使用 alter sequence?
最佳答案
来自documentation在 ALTER SEQUENCE
上:
In contrast to a setval call, a RESTART operation on a sequence is transactional and blocks concurrent transactions from obtaining numbers from the same sequence. If that's not the desired mode of operation, setval should be used.
如果您希望在执行更新时阻止对序列的任何使用,那么您需要使用 ALTER SEQUENCE
方法。如果您只需要重置计数器并且对使用该序列的其他交易没问题,那么您可以使用 setval
来使用您的第一个示例。
关于postgresql - setval 和 alter sequence restart 命令之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53447552/