しゅがーブログ

技術ネタとか書いていけたらな…

Rails PostgreSQL

Multicolumn(複合インデックス)を作成した時のこと

環境

設定

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バイト以内に指定しましょう。