首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Postgres手动更改序列

Postgres手动更改序列
EN

Stack Overflow用户
提问于 2012-01-05 23:28:58
回答 5查看 261.1K关注 0票数 267

我正在尝试将序列设置为特定值。

代码语言:javascript
复制
SELECT setval('payments_id_seq'), 21, true

这会给出一个错误:

ERROR: function setval(unknown) does not exist

使用ALTER SEQUENCE似乎也不起作用?

代码语言:javascript
复制
ALTER SEQUENCE payments_id_seq LASTVALUE 22

如何做到这一点?

参考:https://www.postgresql.org/docs/current/static/functions-sequence.html

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-01-05 23:32:00

括号放错了位置:

代码语言:javascript
复制
SELECT setval('payments_id_seq', 21, true);  # next value will be 22

否则,您将使用一个参数调用setval,而它需要两个或三个参数。

这与SELECT setval('payments_id_seq', 21)相同

票数 388
EN

Stack Overflow用户

发布于 2018-03-26 21:53:02

使用select setval('payments_id_seq', 21, true);

setval包含3个参数:

下一个参数是sequence_name

  • 2nd参数,第一个参数是nextval

  • 3rd参数,
  • 参数是可选的。

setval第三个参数中true或false的用法如下:

代码语言:javascript
复制
SELECT setval('payments_id_seq', 21);           // Next nextval will return 22
SELECT setval('payments_id_seq', 21, true);     // Same as above 
SELECT setval('payments_id_seq', 21, false);    // Next nextval will return 21

为了避免sequence name,next sequence value的硬编码,正确处理空列表,您可以使用以下方法:

代码语言:javascript
复制
SELECT setval(pg_get_serial_sequence('table_name', 'id'), coalesce(max(id), 0)+1 , false) FROM table_name;

其中table_name是表的名称,id是表的primary key

票数 52
EN

Stack Overflow用户

发布于 2012-01-05 23:31:17

select设置name(‘sequence_name’,sequence_value)

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8745051

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档