Skip to content

caboteria/rails-bigint-pk

Repository files navigation

rails-bigint-pk Build Status

Overview

rails-bigint-pk is a simple, transparent way to use 64bit primary keys in MySQL and PostgreSQL.

Requirements

rails-bigint-pk has been tested with rails 4.2.5, which at the time of writing is the latest patch version for 4.2. If you use a higher patch version, we recommend that you run the test suite against your version of rails and activerecord.

Installation & Usage

Rails 4

rails-bigint-pk supports Rails 4.2, 4.1, and 4.0. To install, you can either download releases from Rubygems by adding the following to your Gemfile:

gem 'rails-bigint-pk', '~>1.2.0'

... or, if you enjoy being on the bleeding edge, you can install the newest code directly from git:

gem 'rails-bigint-pk', github: 'caboteria/rails-bigint-pk'

Then run the generator: rails generate bigint_pk:install

This will create an initializer that enables 64 bit primary and foreign keys by changing the default primary key type, and using limit: 8 for foreign keys created via references.

It will also create a migration to update all existing primary and foreign keys.

Rails 3

There is a rails3 branch for support of 3.2.x versions of Rails. To install, you can either download 0.0.x releases from Rubygems by adding the following to your Gemfile:

gem 'rails-bigint-pk', '~>0.0.1'

... or you can install the newest rails3 branch code directly from git:

gem 'rails-bigint-pk', github: 'caboteria/rails-bigint-pk', branch: 'rails3'

Then run the generator: rails generate bigint_pk:install

This will create an initializer that enables 64 bit primary and foreign keys by changing the default primary key type, and using limit: 8 for foreign keys created via references.

It will also create a migration to update all existing primary and foreign keys.

Gotchas

When adding foreign key columns, be sure to use references and not add_column.

change_table :my_table do |t|
  t.references :other_table
end

# Doing this will not use 64bit ints
add_column :my_table, :other_table_id, :int

Running Tests Against Later Versions of Rails

git clone git://github.com/caboteria/rails-bigint-pk.git
cd rails-bigint-pk

# edit spec/fixtures/Gemfile to set the version of activerecord to
# the one you are using

# purge the test fixture
rm -rf tmp/test\_rails\_app

# This will run integration specs against all supported database types, and
# requires running servers for postgres and mysql.
bundle exec rake spec

# verify that tmp/test_rails_app/Gemfile.lock's entry for activerecord
# matches the version you wanted to test against.