重启,以便nextval是下一个未使用的id

时间:2011-07-04 01:06:01

标签: sql postgresql sequence

我有一个脚本将表数据从一个数据库复制到另一个数据库,但是ID列由序列支持,因此当新记录插入目标表时,nextval(seq)返回错误的值

我需要更新序列,以便从下一个可用ID开始。

我想做类似的事情:

ALTER SEQUENCE seq_id RESTART WITH
    (SELECT MAX(id) FROM tbl);

然而,上面会产生语法错误。

有人可以提出另一种方法吗?

1 个答案:

答案 0 :(得分:9)

DO $$
  SELECT INTO m MAX(id) FROM tbl;
  EXECUTE 'ALTER SEQUENCE seq_id RESTART WITH ' || m;
END$$;

或者,更好的是,请看这个问题: