Postgresql - Использование подзапросов с выражениями изменения последовательности - PullRequest
37 голосов
/ 07 января 2010

Мой вопрос довольно прост.

Можно ли использовать подзапросы в выражениях изменения в PostgreSQL?

Я хочу изменить значение последовательности на основе значения столбца первичного ключа.

Я попытался использовать следующее выражение, но оно не будет выполнено.

изменить последовательность public.sequenceX перезапустить с помощью (выберите max (table_id) +1 из таблицы)

Заранее спасибо

Ответы [ 2 ]

67 голосов
/ 07 января 2010

Я не верю, что вы можете сделать это так, но вы должны быть в состоянии использовать направление функции setval, которое и делает alter.

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

При значении false будет возвращен следующий порядковый номер в точности как указано.

5 голосов
/ 01 марта 2013

Кроме того, если у вас смешанные имена объектов регистра и вы получаете сообщение об ошибке, подобное этому:

ERROR: relation "public.mytable_id_seq" does not exist

... следующая версия с использованием regclass должна быть полезна:

select setval('"public"."MyTable_Id_seq"'::regclass, (select MAX("Id") FROM "public"."MyTable"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...