postgresql - setval 和 alter sequence restart 命令之间的区别
问题描述
将序列的值设置为一个值
这两个命令相同以获得相同的结果
SELECT setval('lcm.samplings_id_seq', 1, false);
ALTER SEQUENCE lcm.samplings_id_seq RESTART WITH 1;
但是要进行更改序列,您似乎需要成为所有者……对于另一个,更新序列授权似乎没问题。
对于这个用例,还有其他理由使用改变序列吗?
解决方案
从文档中ALTER SEQUENCE
:
与 setval 调用相比,序列上的 RESTART 操作是事务性的,并阻止并发事务从同一序列中获取数字。如果这不是所需的操作模式,则应使用 setval。
如果您希望在执行更新时阻止对序列的任何使用,那么您希望使用该ALTER SEQUENCE
方法。如果您只需要重置计数器并且可以使用该序列处理其他事务,那么您可以使用第一个示例使用setval
.
推荐阅读
- dictionary - 在 Go 中修改切片时如何避免竞争条件?
- azure-data-factory-2 - 我们如何在 Azure 数据工厂复制活动映射中传递静态值?
- java - 将对象(通过引用)传递给方法时,对象未更新(通过 Lambdas 过滤器)
- javascript - 如何从 python 到模板每隔 x 秒获取随机数?姜戈
- c++ - 调用运算符++重载没有匹配的函数
- php - 显示在表格中选中的复选框
- generics - 从实施到实施
- python - 我们可以在 Pyomo 的规则中定义约束或扩展约束列表吗?
- android-recyclerview - 每次打开活动时,我的 RecyclerView 都会重复
- flutter - 如何将文本和图标包装在一行中,以使文本恰好位于中心,而图标在颤动中位于右端