PostgreSQL — как сбросить очередь

Admin PostgreSQL

Сбрасываем ID очереди у главного ключа в базе данных PostgreSQL.

В консоль SQL вводим две команды:

ALTER SEQUENCE operations_id_seq RESTART WITH 1;
UPDATE operations SET id=nextval('operations_id_seq');

где:
operations — название таблицы в которой будем менять;
id — название колонки, которую хотим сбросить;
seq — это оставляем как есть.

Ошибки

На тот случай когда возникают такие ошибки:

psycopg2.errors.UniqueViolation: duplicate key value violates unique constraint «portfolio_pk»
DETAIL: Key (id)=(2) already exists.

psycopg2.errors.NotNullViolation: null value in column «id» violates not-null constraint
DETAIL: Failing row contains

[2020-10-09 19:54:42] [23505] ERROR: duplicate key value violates unique constraint «operations_id_key»
[2020-10-09 19:54:42] Detail: Key (id)=(1) already exists.

sqlalchemy.orm.exc.FlushError: Instance has a NULL identity key. If this is an auto-generated value, check that the database table allows generation of new primary key values, and that the mapped Column object is configured to expect these generated values. Ensure also that this flush() is not occurring at an inappropriate time, such as within a load() event.

Для решение этих проблем сбросим идентификаторы иначе. Зададим высокое значение, чтобы исключить дублирование, а затем сбросим по нормальному:

ALTER SEQUENCE operations_id_seq RESTART WITH 1;
UPDATE operations SET id = 10000000 + NEXTVAL ('operations_id_seq');

ALTER SEQUENCE operations_id_seq RESTART WITH 1;
UPDATE operations SET id=NEXTVAL('operations_id_seq');

Если вам пригодилась информация, вы можете поблагодарить автора сайта символическим пожертвованием:

Добавить комментарий

Напишите свой комментарий, если вам есть что добавить/поправить/спросить по теме текущей статьи:
"PostgreSQL — как сбросить очередь"