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

pst*_*ton 12 sql postgresql sequence

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

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

我想做的事情如下:

ALTER SEQUENCE seq_id RESTART WITH
    (SELECT MAX(id) FROM tbl);
Run Code Online (Sandbox Code Playgroud)

但是上面会产生语法错误.

任何人都可以提出替代方法吗?

J-1*_*DiZ 9

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

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