Этот синтаксис недопустим в любой версии PostgreSQL:
ALTER SEQUENCE payments_id_seq LASTVALUE 22
Это будет работать:
ALTER SEQUENCE payments_id_seq RESTART WITH 22;
и эквивалентно:
SELECT setval('payments_id_seq', 22, FALSE);
Подробнее в текущем руководстве ALTER SEQUENCEи последовательности функций .
Обратите внимание, что setval()ожидает либо (regclass, bigint)или (regclass, bigint, boolean). В приведенном выше примере я предоставляю нетипизированные литералы . Это тоже работает. Но если вы передаете типизированные переменные в функцию, вам может потребоваться явное приведение типов, чтобы удовлетворить разрешению типа функции. Подобно:
SELECT setval(my_text_variable::regclass, my_other_variable::bigint, FALSE);
Для повторных операций вас могут заинтересовать:
ALTER SEQUENCE payments_id_seq START WITH 22; -- set default
ALTER SEQUENCE payments_id_seq RESTART; -- without value
START [WITH]хранит номер по умолчанию RESTART, который используется для последующих RESTARTвызовов без значения. Для последней части вам нужен Postgres 8.4 или новее.
setval()есть как минимум два аргумента.