перезапустите, чтобы nextval был следующим неиспользуемым - PullRequest
12 голосов
/ 04 июля 2011

У меня есть скрипт, который копирует данные таблицы из одной БД в другую, однако столбец ID поддерживается последовательностью, поэтому при вставке новой записи в таблицу назначения nextval(seq) возвращает неправильное значение.

Мне нужно обновить последовательность так, чтобы она начиналась со следующего доступного идентификатора.

Я хочу сделать что-то вроде:

ALTER SEQUENCE seq_id RESTART WITH
    (SELECT MAX(id) FROM tbl);

Приведенное выше вызывает синтаксическую ошибку, однако.

Кто-нибудь может предложить альтернативный подход?

1 Ответ

9 голосов
/ 04 июля 2011
DO $$
  SELECT INTO m MAX(id) FROM tbl;
  EXECUTE 'ALTER SEQUENCE seq_id RESTART WITH ' || m;
END$$;

или, еще лучше, посмотрите этот вопрос:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...