postgresql - setval 和 alter sequence restart 命令之间的区别

标签 postgresql

将序列的值设置为一个值

这两个命令相同,结果相同

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

ALTER SEQUENCE lcm.samplings_id_seq RESTART WITH 1;

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

对于这个用例,是否还有其他原因需要使用 alter sequence?

最佳答案

来自documentationALTER 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/

相关文章:

postgresql - 触发函数在 UPDATE 上刷新远程物化 View

postgresql - 无法从客户端连接到 PostgreSQL - 错误超时

postgresql - PostgreSQL是否像Oracle一样缓存Prepared Statements

postgresql - 如何估计 Postgres 表中一列的大小?

postgresql - 如何使用触发器来防止 PostgreSQL 中的重复记录?

database - 如何自动填充 SQLAlchemy 数据库字段? (Flask-SQLAlchemy)

sql - 在 Postgres 中将十六进制字符串转换为 bigint

sql - 添加月份至今 : PostgreSQL vs. Oracle

ruby-on-rails - Ruby 日期时间解析

postgresql - Postgres,排序