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
если вы хотите сбросить автоинкремент из графического интерфейса, выполните следующие действия.
- Перейти к вашей базе данных
- Нажмите на общедоступный
- на странице списка таблиц вы можете видеть TABS, такие как "Таблицы", "Представления", "Последовательности" и тому подобное.
- Нажмите на последовательности
- Когда вы нажимаете "Последовательности", вы можете увидеть все списки последовательностей, нажмите на любой, который вы хотите сбросить
- После этого вы можете увидеть множественный выбор, например "Изменить", "Установить значение", "Перезагрузить", "Сбросить" и т.д.
- затем нажмите 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