我想更新Postgres中的序列,我可以用半手动方式进行,如下所示:
SELECT MAX(id) as highest_id FROM users;
ALTER SEQUENCE users_id_seq RESTART WITH 11071;在本例中,我必须将第一个查询的结果(结果为11070 )插入到下一个查询中,由1递增。我宁愿只需要一个查询就可以一举完成所有这些。
如果成功的话,“两次俯冲”的方法会是这样的,但这是失败的:
ALTER SEQUENCE users_id_seq RESTART WITH (SELECT MAX(id) as highest_id FROM users);
ALTER SEQUENCE users_id_seq INCREMENT BY 1;如果我可以在第一个+ 1语句中使用ALTER SEQUENCE语句并跳过第二个语句,那就更好了。
有什么办法能解决这个问题吗?(不是两步就是一步,但没有我的人工干预。)
发布于 2021-01-06 04:50:22
您可以很容易地通过以下方法完成这一任务:
SELECT setval('users_id_seq',(SELECT max(id) FROM users));这将序列设置为当前值,因此当调用nextval()时,您将得到下一个值:
edb=# create table foo (id serial primary key, name text);
CREATE TABLE
edb=# insert into foo values (generate_series(1,10000),'johndoe');
INSERT 0 10000
edb=# select * from foo_id_seq ;
last_value | log_cnt | is_called
------------+---------+-----------
1 | 0 | f
(1 row)
edb=# select setval('foo_id_seq',(SELECT max(id) FROM foo));
setval
--------
10000
(1 row)
edb=# select * from foo_id_seq ;
last_value | log_cnt | is_called
------------+---------+-----------
10000 | 0 | t
(1 row)
edb=# insert into foo values (default,'bob');
INSERT 0 1
edb=# select * from foo order by id desc limit 1;
id | name
-------+------
10001 | bob
(1 row)https://stackoverflow.com/questions/65590197
复制相似问题