Сброс счетчика автоматического приращения в postgres - PullRequest
181 голосов
/ 17 марта 2011

Я хотел бы принудительно установить поле автоинкремента таблицы в какое-то значение, я пробовал с этим:

ALTER TABLE product AUTO_INCREMENT = 1453

AND

ALTER SEQUENCE product  RESTART WITH 1453;
ERROR:  relation "your_sequence_name" does not exist

Я новичок в postgres:(

У меня есть таблица product с Id и name, поле

Ответы [ 10 ]

229 голосов
/ 17 марта 2011

Если вы создали таблицу product со столбцом id, последовательность будет называться не просто product, а product_id_seq (то есть ${table}_${column}_seq).

Вам нужна команда ALTER SEQUENCE:

ALTER SEQUENCE product_id_seq RESTART WITH 1453

Вы можете увидеть последовательности в вашей базе данных, используя команду \ds в psql. Если вы выполните \d product и посмотрите ограничение по умолчанию для вашего столбца, вызов nextval(...) также определит имя последовательности.

140 голосов
/ 07 февраля 2013

Вот команда, которую вы ищете, предполагая, что ваша последовательность для таблицы продуктов равна product_id_seq:

ALTER SEQUENCE product_id_seq ПЕРЕЗАГРУЗИТЬ С 1453;

111 голосов
/ 05 августа 2013

Следующая команда делает это автоматически для вас: Это также удалит все данные в таблице. Так что будьте осторожны.

TRUNCATE TABLE someTable RESTART IDENTITY;
52 голосов
/ 17 марта 2011

Чтобы установить счетчик последовательности:

setval('product_id_seq', 1453);

Если вы не знаете имя последовательности, используйте функцию pg_get_serial_sequence:

select pg_get_serial_sequence('product', 'id');
 pg_get_serial_sequence 
------------------------
 public.product_id_seq

Параметрами являются имя таблицы и имя столбца.

Или просто введите \d product в приглашении psql:

=> \d product
                         Table "public.product"
 Column |  Type   |                      Modifiers                       
--------+---------+------------------------------------------------------
 id     | integer | not null default nextval('product_id_seq'::regclass)
 name   | text    | 
12 голосов
/ 10 ноября 2015

Преобразовано из комментария для удобства посетителя

Из этого сообщения не ясно, каков правильный синтаксис.Это:

ALTER SEQUENCE product_id_seq RESTART WITH 1453;
3 голосов
/ 06 марта 2019

- Изменить начальное значение последовательности

ALTER SEQUENCE project_id_seq RESTART 3000;

То же, но динамическое:

SELECT SETVAL('project_id_seq', (SELECT MAX(id) + 1 FROM project));

Я согласен, использование SELECT вызывает беспокойство, но работает.

Источник: https://kylewbanks.com/blog/Adding-or-Modifying-a-PostgreSQL-Sequence-Auto-Increment

3 голосов
/ 28 марта 2018

, если вы хотите Сбросить автоинкремент из графического интерфейса, затем выполните следующие действия.

  1. Перейти к вашей базе данных
  2. Нажмите Публичный
  3. на странице списка таблиц вы можете увидеть TABS , например, «Таблицы», «Представления», «Последовательности».
  4. Нажмите Последовательности
  5. Когда вы нажимаете «Последовательности», вы можете увидеть все списки последовательностей, нажмите на любой, который вы хотите Сбросить
  6. После этого вы можете видеть множественный выбор, например «Изменить», «Установить значение», «Перезагрузить», «Сбросить» и т. Д. *
  7. , затем нажмите Сброс , затем добавьте одну новую строку.
2 голосов
/ 10 октября 2018

Если у вас есть таблица со столбцом IDENTITY, для которой вы хотите сбросить следующее значение, вы можете использовать следующую команду:

ALTER TABLE <table name> 
    ALTER COLUMN <column name> 
        RESTART WITH <new value to restart with>;
2 голосов
/ 01 декабря 2016

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

Синтаксис:

SELECT pg_get_serial_sequence(‘tablename’, ‘ columnname‘);

Пример:

SELECT pg_get_serial_sequence('demo', 'autoid');

Запрос вернет имя последовательности autoid как "Demo_autoid_seq" Затем используйте следующий запрос для сброса autoid

Синтаксис:

ALTER SEQUENCE sequenceName RESTART WITH value;

Пример:

ALTER SEQUENCE "Demo_autoid_seq" RESTART WITH 1453;
0 голосов
/ 03 июля 2019

Для получения идентификатора последовательности используйте

SELECT pg_get_serial_sequence('tableName', 'ColumnName');

Это даст вам идентификатор секвестра как tableName_ColumnName_seq

Для получения последнего номера семян используйте

select currval(pg_get_serial_sequence('tableName', 'ColumnName'));

или если вы знаете идентификатор последовательности, используйте его напрямую.

select currval(tableName_ColumnName_seq);

Это даст вам последний номер семени

Для сброса номера семян используйте

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