50

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

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

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

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

2 回答 2

88

我不相信你可以那样做,但你应该能够使用 alter 所做的 setval 函数方向。

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

false 将使它返回给定的下一个序列号。

于 2010-01-07T18:56:26.520 回答
8

In addition if you have mixed case object names and you're getting an error like this:

ERROR: relation "public.mytable_id_seq" does not exist

... the following version using regclass should be useful:

select setval('"public"."MyTable_Id_seq"'::regclass, (select MAX("Id") FROM "public"."MyTable"))
于 2013-03-01T16:41:19.953 回答