Как возобновить подсчет идентификаторов для таблицы в PostgreSQL после удаления некоторых предыдущих данных? - PullRequest
8 голосов
/ 30 сентября 2011

Я использую базу данных PostgreSQL на Rails 2.3.8, и мне нужно перезапустить идентификатор автоинкремента в моей таблице.Как я могу это сделать?

Ответы [ 7 ]

12 голосов
/ 30 сентября 2011

Если вы усекаете таблицу, вы можете использовать предложение RESTART IDENTITY в конце.

Пример:

TRUNCATE TABLE foo RESTART IDENTITY;

TRUNCATE DOCUMENTATION

9 голосов
/ 18 декабря 2014

Вы можете сделать это следующим образом:

ActiveRecord::Base.connection.execute("TRUNCATE TABLE your_table_name RESTART IDENTITY")

5 голосов
/ 30 сентября 2011

Вы можете сделать это непосредственно в PostgreSQL, используя «alter sequence»: http://www.postgresql.org/docs/current/static/sql-altersequence.html

В частности, «перезапустить» с помощью

Я не знаю, как бы вы сделали это через абстракцию rails.

3 голосов
/ 17 января 2014

Попробуйте:

ActiveRecord::Base.connection.reset_pk_sequence!(table_name)

и проверьте этот ответ для более подробной информации: https://stackoverflow.com/a/7814519/1392282

3 голосов
/ 30 сентября 2011

Выезд setval

SELECT setval('foo', 42);           Next nextval will return 43
SELECT setval('foo', 42, true);     Same as above
SELECT setval('foo', 42, false);    Next nextval will return 42
2 голосов
/ 31 августа 2017

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

ActiveRecord :: Base.connection.execute ("TRUNCATE TABLE your_table_name RESTART IDENTITY")

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

ActiveRecord :: Base.connection.execute ("TRUNCATE TABLE your_table_name RESTART IDENTITY CASCADE")

Спасибо и, пожалуйста, предложите, если необходимо исправить.

2 голосов
/ 17 ноября 2016

Вы также можете использовать ActiveRecord в Rails.

Вы можете легко сделать это из консоли rails, выполнив следующую команду:

Table_name.reset_primary_key
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...