我的问题很简单。
是否可以在PostgreSQL的alter表达式中使用子查询?
我想根据主键列值更改序列值。
我尝试使用以下表达式,但它不会执行。
使用(从表中选择max(table_id)+1)更改序列public.sequenceX restart
提前致谢
答案 0 :(得分:66)
我不相信你可以这样做,但你应该能够使用set的功能方向,这就是alter所做的。
select setval('sequenceX', (select max(table_id)+1 from table), false)
false会使它返回下一个序列号,正如给出的那样。
答案 1 :(得分:5)
此外,如果您有混合的案例对象名称,并且您收到如下错误:
ERROR: relation "public.mytable_id_seq" does not exist
...使用regclass的以下版本应该是有用的:
select setval('"public"."MyTable_Id_seq"'::regclass, (select MAX("Id") FROM "public"."MyTable"))