Рельсы Очень Большой Стол - PullRequest
1 голос
/ 06 сентября 2011

Rails любит использовать автоинкрементные 32-битные числа в качестве первичных ключей для таблиц.Что делают люди, когда они приближаются к пределам 32-битных int # строк в таблице?

Ответы [ 2 ]

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

Вы могли бы изменить ключ на bigint ? Это 8-байтовое (64-битное) целое число. Это дает вам до 9 квантиллионов вместо 4 миллиардов. Однако нет нативной миграции, вам нужно сделать что-то вроде:

execute("ALTER TABLE massive_table CHANGE id id BIGINT")

РЕДАКТИРОВАТЬ Видимо, указав предел для поля , как предположил Алекс, допускает bigints в обоих PostgreSQL и mySQL .

1 голос
/ 06 сентября 2011

Вы можете использовать 8-байтовые поля идентификатора.Rails не предоставляет типы для создания длинных целочисленных столбцов или столбцов с двойной точностью, однако это можно сделать с помощью параметра: limit:

create_table :my_table do |t|
  t.integer :long_int_column, :limit => 8
  t.float :double_column, :limit => 53
end

8 и 53 являются магическими числами.Это работает для баз данных PostgreSQL и MySQL, но я не пробовал другие.

Если вы изменяете таблицу, вы можете написать

change_column :my_table, :my_col, :integer, :limit => 8

Альтернатива 8-байтовомуПоле id должно обрабатывать опрокидывание идентификатора каким-либо образом.Это будет зависеть от специфики ваших данных и приложения.

...