Какой способ сброса ключа БД при очистке всех строк? - PullRequest
1 голос
/ 11 декабря 2011

Я использую datamapper для хранения большого количества данных, извлеченных из нокогири, в строки

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

Внутри метода post '/ purge' do (sinatra) У меня есть следующее

Post.all.destroy

Проблема в том, чтооставляет ключ на автоматически увеличенной величине.Хотя этот набор данных связан с другими таблицами, эти другие данные также удаляются, поэтому я знаю, что ключи не будут иметь проблем с соответствием.После каждой очистки мои ключи становятся огромными (40 000) через некоторое время.

Причина, по которой я не использую DataMapper.auto_migrage! , заключается в том, что существует одна конкретная таблица (без ассоциаций), которые я не хочу касаться (таблица настроек).

PS.Я пометил activerecord, хотя я использую datamapper, потому что я предполагаю, что процесс очень похож, просто синтаксически отличается.

1 Ответ

2 голосов
/ 11 декабря 2011

Ответственность за значения AUTO INCREMENT принадлежит ядру БД, а не ORM.Итак, если вы хотите сбросить его значение, вы должны выполнить запрос вроде:

ALTER TABLE theTableInQuestion AUTO_INCREMENT=desired_value

Возможно, у вас будет что-то вроде:

adapter = DataMapper.repository(:default).adapter
adapter.execute('ALTER TABLE theTableInQuestion AUTO_INCREMENT= ? ', desired_value);
...