我的问题有点简单。
在PostgreSQL中,是否可以在alter表达式中使用子查询?
我想根据一个主键列的值来改变一个序列值。
我试着使用下面的表达式,但它无法执行。
alter sequence public.sequenceX restart with (select max(table_id)+1 from table)
先谢谢你
我不相信你可以这样做,但你应该可以使用setval函数的方向,这就是alter的作用。
select setval('sequenceX', (select max(table_id)+1 from table), false)
false会使它返回下一个序列号,因为正是给定的。
此外,如果你有混合大小写的对象名,并且你得到了这样的错误。
ERROR: relation "public.mytable_id_seq" does not exist
...下面这个使用regclass的版本应该是有用的:
select setval('"public"."MyTable_Id_seq"'::regclass, (select MAX("Id") FROM "public"."MyTable"))