QA@IT
«回答へ戻る

回答を投稿

PostgreSQLはid列などの主キーに対しては自動的にインデックスを貼ります。

PostgreSQLのドキュメント
http://www.postgresql.jp/document/9.2/html/indexes-unique.html

index_exists?は内部でindexesを呼んでおり、indexesは各RDBMSごとに定義されています。PostgreSQLの例ではactive_record/connection_adapters/postgresql_adapter.rbで定義されています。

そこで発行されているテーブルのインデックスを求めるSQLにはd.indisprimary = 'f'という条件があるため、主キーは検索の対象外としているようです。

結果、index_exists?には主キーに対するインデックスに対してはfalseを返しています。

MySQLに対しても主キーに対しては自動的にインデックスを貼っていますが、indexesの定義の中で主キーを表すPRIMARYを除外しています。

PostgreSQLはid列などの主キーに対しては自動的にインデックスを貼ります。

PostgreSQLのドキュメント
http://www.postgresql.jp/document/9.2/html/indexes-unique.html

`index_exists?`は内部で`indexes`を呼んでおり、`indexes`は各RDBMSごとに定義されています。PostgreSQLの例ではactive_record/connection_adapters/postgresql_adapter.rbで定義されています。

そこで発行されているテーブルのインデックスを求めるSQLには`d.indisprimary = 'f'`という条件があるため、主キーは検索の対象外としているようです。

結果、`index_exists?`には主キーに対するインデックスに対してはfalseを返しています。

MySQLに対しても主キーに対しては自動的にインデックスを貼っていますが、`indexes`の定義の中で主キーを表すPRIMARYを除外しています。