Postgresql - 使用改变序列表达式的子查询。

问题描述 投票:43回答:3

我的问题有点简单。

在PostgreSQL中,是否可以在alter表达式中使用子查询?

我想根据一个主键列的值来改变一个序列值。

我试着使用下面的表达式,但它无法执行。

alter sequence public.sequenceX restart with (select max(table_id)+1 from table)

先谢谢你

sql postgresql subquery sequence alter
3个回答
81
投票

我不相信你可以这样做,但你应该可以使用setval函数的方向,这就是alter的作用。

select setval('sequenceX', (select max(table_id)+1 from table), false)

false会使它返回下一个序列号,因为正是给定的。


7
投票

此外,如果你有混合大小写的对象名,并且你得到了这样的错误。

ERROR: relation "public.mytable_id_seq" does not exist

...下面这个使用regclass的版本应该是有用的:

select setval('"public"."MyTable_Id_seq"'::regclass, (select MAX("Id") FROM "public"."MyTable"))
© www.soinside.com 2019 - 2024. All rights reserved.