Multicolumn(複合インデックス)を作成した時のこと
環境
- Rails
- PostgreSQL
設定
migrationファイルに以下を記述
add_index :xxxxxxxxxxx_xxxxxxx, [:xxxxxxxx_id, :xxxxxxxxxx_id]
Railsでよくあるindexの追記設定です。
記述後のmigrate
bundle exec rake db:migrate:up VERSION=xxxxxxxxxxxxxxxxxxxxxxxxx
上記コマンドでrailsのmigrateを実行
特にエラーも出力されず、無事にmigrationが完了
indexが無事にできているか確認
SELECT tablename, indexname FROM pg_indexes;
select * from pg_indexes where indexname = 'インデックス名';
上記コマンドを実施しても追加したはずのindexが表示されず
解決方法
PostgreSQlの識別子の長さは63バイトまでと判明
実際に自動生成される文字数を数えて見るとオーバーしてました。
[https://www.postgresql.jp/document/9.2/html/sql-syntax-lexical.html]
今回はたまたまテーブル名とカラム名が長くうまく生成されなかったみたいです。
migrate実行時にエラー出すとかこけて欲しかった。
オプションで**:name**を指定して63バイト以内に指定しましょう。
add_index :xxxxxxxxxxx_xxxxxxx, [:xxxxxxxx_id, :xxxxxxxxxx_id], :name => 'original_name'