Postgresql - 使用带有alter sequence表达式的子查询

时间:2010-01-07 18:16:31

标签: sql postgresql subquery sequence alter

我的问题很简单。

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

我想根据主键列值更改序列值。

我尝试使用以下表达式,但它不会执行。

  

使用(从表中选择max(table_id)+1)更改序列public.sequenceX restart

提前致谢

2 个答案:

答案 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"))