表laodonghetong,已经保存了一些数据,其ID字段为integer类型,现在要把ID字段改成serial类型,但怎么将新建的laodonghetong_id_seq的开始值改成laodonghetong表的ID字段的最大值加一?create sequence laodonghetong_id_seq;
alter table laodonghetong alter column id set default nextval('laodonghetong_id_seq');
alter sequence laodonghetong_id_seq owned by laodonghetong.id;
alter sequence laodonghetong_id_seq restart with (select max(id) from laodonghetong)+1;
最后一句出错了,是什么原因?

解决方案 »

  1.   

    (select max(id)+1 from laodonghetong);
     或则你重新START 最大的+1
    可以不
      

  2.   

    也不行,只有with后面是数字时可以
    但我要改好几个表,希望能自动把sequence改为ID的最大值
      

  3.   

    不能这样用,
    必须这样的:
    select setval('laodonghetong_id_seq', max(id))   from laodonghetong;
     setval
    --------
          3
    (1 row)
      

  4.   

    可能alter sequence laodonghetong_id_seq restart with 后面不能跟SQL语句
    用函数 setval()吧