1

:id列を主キーとして使用するために次のコードを変更するauto_increment方法:limit => 8

def change
  create_table :companies, :id => false do |t|
    t.integer :id, :limit => 8
    t.string :name

    t.timestamps
  end
end

このコードは、:id列を主キーとして作成せず、自動インクリメントのシーケンスを作成しません。

PostgreSQL 8.4、レール 3.2.11

4

1 に答える 1

1

移行で列の長さやデータ型を変更すると、主キーとしての列が無効になります。むしろ、サイトのデフォルトの主キー データ型をオーバーライドするイニシャライザを作成すると、実装しようとしている動作が提供されます。

# config/initializers/change_primary_key_datatype.rb
require 'active_record/connection_adapters/postgresql_adapter'
ActiveRecord::ConnectionAdapters::PostgreSQLAdapter::NATIVE_DATABASE_TYPES[:primary_key] = "bigserial primary key"

イニシャライザを保存したら、忘れずにサーバーを再起動してください。

于 2013-03-09T00:10:08.770 に答える