Сброс счетчика автоинкремента в postgres

113

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

ALTER TABLE product AUTO_INCREMENT = 1453

И

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

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

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

  • 5
    Если новичок, почему бы не использовать pgAdmin и проверить команды, которые он будет генерировать?
  • 1
    Обычно таблицы называются как «продукты», а не как «продукт». В этом случае ваша последовательность будет называться как «products_id_seq». Убедитесь, что вы ищете правильную последовательность.
Теги:
reset
auto-increment

6 ответов

122
Лучший ответ

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

Это команда ALTER SEQUENCE, которая вам нужна:

ALTER SEQUENCE product_id_seq RESTART WITH 1453

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

  • 65
    Из этого сообщения не ясно, каков правильный синтаксис. Это: ALTER SEQUENCE product_id_seq RESTART WITH 1453;
  • 7
    Просто потому, что я плохо разбирал вышесказанное, вот мой способ пересказать то же самое. Синтаксис: ALTER SEQUENCE yourTableName_yourColumnName_seq RESTART WITH # , где "seq" - текст литерала, и вы вводите число для #. Не пренебрегайте подчеркиванием. :-)
Показать ещё 3 комментария
124

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

ALTER SEQUENCE product_id_seq RESTART WITH 1453;

82

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

TRUNCATE TABLE someTable RESTART IDENTITY;
  • 1
    работает отлично и делает свою работу. Спасибо
  • 19
    Осторожно - это также удалит все ваши данные
Показать ещё 5 комментариев
47

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

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    | 
8

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

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

ALTER SEQUENCE product_id_seq RESTART WITH 1453;
2

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

Синтаксис:

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

Пример:

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

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

Синтаксис:

ALTER SEQUENCE sequenceName RESTART WITH value;

Пример:

ALTER SEQUENCE "Demo_autoid_seq" RESTART WITH 1453;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню