Как я могу установить начальную точку для столбца первичного ключа (ID) в Postgres через рельсовую миграцию - PullRequest
9 голосов
/ 15 сентября 2009

Я развертываю приложение rails на heroku, которое использует PostgreSQL в качестве своего сервера. При переносе базы данных я обычно устанавливаю поле идентификатора для таких отчетов, как отчеты и т. Д., По крайней мере, в 1000, большинству клиентов не нравится начинать с 1.

Обычно я использую mysql и просто добавляю sql, специфичный после создания моей таблицы:

def self.up
    create_table :reports do |t|
       t.references :something
       ...
    end
    execute("ALTER TABLE reports AUTO_INCREMENT = 1000;")
end

Кто-нибудь знает, как я могу добиться того же для PostgreSQL, в идеале я хотел бы, чтобы миграция создала саму таблицу, чтобы она не зависела от БД.

Полагаю, глупым способом достижения моей цели было бы создание и удаление 999 записей в цикле, ой.

Ответы [ 2 ]

16 голосов
/ 15 сентября 2009

Понятия не имею по части рубинов и железных дорог, но вопрос, о котором вы говорите:

ALTER SEQUENCE reports_something_seq RESTART 1000;

Вам нужно будет найти в своей таблице имя последовательности и документацию postgresql для общего образования по этому вопросу; -)

8 голосов
/ 15 сентября 2009

В postgres, как и во многих других базах данных, функция автоинкремента осуществляется через последовательности. Последовательности для каждого Сериала и полей лайков создаются автоматически для вас Postres и дают имя типа TABLENAME _ COLUMNNAME _ seq.

Итак, вам нужно просто изменить соответствующую последовательность, например:

ALTER SEQUENCE example_id_seq RESTART 1000 -- corrected from START
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...