2012-01-05 70 views

回答

64

括号是放错了地方:

setval('payments_id_seq', 21, true) 

否则你调用setval带一个参数,而它需要两个或三个。

+0

你说得对,谢谢 – stef 2012-01-05 15:35:27

+1

最后一个参数“true”是什么意思? – inafalcao 2017-09-27 12:16:55

+1

'true'表示下一个值将是提供的数字+ 1,在本例中为22.'false'表示下一个值将是提供的数字,或21.默认情况下,setval的行为就像'true'被选中。更多详情:https://www.postgresql.org/docs/9.6/static/functions-sequence.html – 2017-11-07 20:11:42

8
setval('sequence_name', sequence_value) 
97

我假设你实际上并没有使用过时的PostgreSQL版本7.4,而只是错误地引用了这个版本的手册。

此语法是无效的任何版本的PostgreSQL:


             
  
    ALTER SEQUENCE payments_id_seq LASTVALUE 22 
  

这会工作:

ALTER SEQUENCE payments_id_seq RESTART WITH 22; 

,等同于:

SELECT setval('payments_id_seq', 22, FALSE); 

目前manual has more


一个重复的操作你可能感兴趣的:

ALTER SEQUENCE payments_id_seq START WITH 22; -- set default 
ALTER SEQUENCE payments_id_seq RESTART;  -- without value 

START [WITH]存储默认RESTART号,用于后续RESTART调用没有价值。最后一部分需要Postgres 8.4或更高版本。