Я создал таблицу Product с серийным идентификатором в Postgres:
CREATE TABLE PRODUCTS (
PRODUCT_ID serial PRIMARY KEY,
NAME VARCHAR ( 100 ) NOT NULL );
Если я удалю строку с
DELETE FROM PRODUCTS WHERE PRODUCT_ID = 2
Следующий продукт для вставки будет иметь идентификатор: 3, даже если Product_Id: 2 уже был удален, я хотел бы удалить данные с его последовательностью, чтобы следующая вставка имела идентификатор: 2.
Вы можете прочитать это для фона.
Это вообще плохая идея. Идентификаторы обычно не то место, где вам нужно заполнить пробелы.
Однако, если вы хотите сделать это только вручную, вы можете вставить новую строку, включив значение идентификатора вручную, тогда последовательность не будет использоваться.
Вы можете сбросить последовательность с помощью функций Postgres (например, setval), но вам действительно не следует этого делать, за исключением некоторых случаев восстановления базы данных.
Просто привыкните к тому, что идентификаторы не будут последовательными. Это норма. Если у вас есть время заниматься последовательной нумерацией, возможно, вместо этого вы занимаетесь чем-то продуктивным.
Если вам нужны последовательные идентификаторы для некоторых неизменяемых вещей, таких как категории, просто экспортируйте и заново создайте таблицу после того, как вы вставили все данные, опуская столбец идентификатора при импорте. Но помните, что идентификаторы обычно используются другими таблицами, поэтому вам, возможно, придется обновлять всю базу данных каждый раз, когда вы хотите красиво перенумеровать свои идентификаторы.
sequence(serial/identity)
работает не так.sequence
просто предназначен для генерации последовательных, потенциально с пробелами, чисел. Если вы хотите сделать это, вам нужно будет создать свой собственный метод, скорее всего, с включенной блокировкой.