Reset счетчик автоматического увеличения в postgres

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

ALTER TABLE product AUTO_INCREMENT = 1453

И

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

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

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

Ответ 1

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

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

ALTER SEQUENCE product_id_seq RESTART WITH 1453

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

Ответ 2

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

ALTER SEQUENCE product_id_seq RESTART WITH 1453;

Ответ 3

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

TRUNCATE TABLE someTable RESTART IDENTITY;

Ответ 4

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

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    | 

Ответ 5

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

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

ALTER SEQUENCE product_id_seq RESTART WITH 1453;

Ответ 6

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

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

Ответ 7

В 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;

Ответ 8

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

ALTER TABLE <table name> 
    ALTER COLUMN <column name> 
        RESTART WITH <new value to restart with>;

Ответ 9

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

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

Ответ 10

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

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