Подтвердить что ты не робот

Postgres вручную изменяют последовательность

Я пытаюсь установить последовательность на определенное значение.

SELECT setval('payments_id_seq'), 21, true

Это дает ошибку:

ERROR: function setval(unknown) does not exist

Использование ALTER SEQUENCE тоже не работает?

ALTER SEQUENCE payments_id_seq LASTVALUE 22

Как это можно сделать?

Ссылка: http://www.postgresql.org/docs/7.4/interactive/functions-sequence.html

4b9b3361

Ответ 1

Скобки скорректированы:

setval('payments_id_seq', 21, true)

В противном случае вы вызываете setval с одним аргументом, тогда как для этого требуется два или три.

Ответ 2

Я предполагаю, что вы на самом деле не используете безнадежно устаревшую версию PostgreSQL 7.4 и ошибочно ссылаетесь только на эту версию руководства.

Этот синтаксис недействителен в любой версии 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 payments_id_seq START WITH 22; -- set default
ALTER SEQUENCE payments_id_seq RESTART;       -- without value

START [WITH] хранит номер по умолчанию RESTART, который используется для последующих вызовов RESTART без значения. Для последней части вам нужны Postgres 8.4 или новее.

Ответ 3

setval('sequence_name', sequence_value)