Отсюда: Как запустить первичный ключ с 1000? Кажется, мне нужно выполнить команду SQL: ALTER TABLE tbl AUTO_INCREMENT = 1000;
Но я имел дело только с базой данных через абстракцию ActiveRecord. Есть ли способ добиться этого с помощью активной записи? Либо во время миграции, либо на лету при создании новой записи в базе данных?
Я попробовал следующее и потерпел неудачу:
@record= myRecord.new
while @record.id < 1000 do
@record= myRecord.new
end
Это неэффективно, но это может произойти только один раз, однако Rails сообщает, что @ record.id равен nil, поэтому не может выполнить <сравнение
и поэтому я пытаюсь сначала сохранить @record, а затем посмотреть, какому значению id (первичного ключа) он был присвоен базой данных </p>
@record.save
if @record.id <1000
@record.id = 1000 + @record.id
@record.save!
end
Каким-то образом rails сообщает, что одно из уникальных полей в @record уже существует, поэтому не может снова сохранить @record.
РЕДАКТИРОВАТЬ: мой плохой, выше, это команда MySQL ... для PostgreSQL, это похоже на что-то вроде (http://archives.postgresql.org/pgsql-general/2006-10/msg01417.php):
SELECT setval('id_seq',100111);
Однако я попытался запустить его на консоли Ruby моей среды развертывания (общая база данных на Heroku), и я только что получил! Внутренняя ошибка сервера вернулась :-(
мой рубиновый класс называется:
class Mytable < ActiveRecord::Base
поэтому я запускаю эту команду:
Mytable.connection.execute('SELECT setval('id_seq', 1000)')
и получил внутреннюю ошибку сервера (попытался использовать и 'id', и 'id_seq' в приведенной выше команде)
Но это может быть какая-то проблема с Ruby для конкретной проблемы Heroku, которая вызывает проблему, поэтому я бы занялся расследованием и отправил другой вопрос вместо того, чтобы изменить его. Спасибо!
Дополнительные материалы, относящиеся к командам PostgreSQL:
http://pointbeing.net/weblog/2008/03/mysql-versus-postgresql-adding-an-auto-increment-column-to-a-table.html
http://archives.postgresql.org/pgsql-general/2006-10/msg01417.php
Как сбросить последовательность первичных ключей postgres, если они не синхронизированы?