0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Rails&heroku】MySQLで出来てた「あいまい検索」がPostgreSQLで出来ない場合にやること

Last updated at Posted at 2021-03-25

AWSでコード完成、いざherokuへデプロイ!・・・したけどエラー。
調べてみると、あいまい検索の部分がおかしいらしい。

####【ページ内リンク】
0.環境
1.ソースコード
2.そもそもあいまい検索部分が原因だと分かった経緯
3.解決策

#0.環境
・AWS
・heroku/7.48.0 linux-x64 node-v12.16.2
・Rails 5.2.4.5
・ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-linux]
・MySQL 5.7.31
・PostgreSQL 9.2.24

#1.ソースコード

Example.rb
@teams = Team.where("#{key} like ?", "%#{value}%")

・いたって普通のあいまい検索。keyがキー、valueが値。
【例:key = "id"、`value = "(検索用に入力した値)"】
・MySQLだと上手くいったのに、PostgreSQLだとエラーが生じた。

※ちなみに、下記に2通り完全一致検索方法を書いたが、方法1はどちらでも作動し、方法2PostgreSQLでは作動しなかった。

Example2.rb
@teams = Team.where("#{key} = #{value}")   #方法1
@teams = Team.where("#{key} like ?", "#{value}")   #方法2

たぶん「like」が悪そう。

ページ内リンクへ戻る

#2.そもそもあいまい検索部分が原因だと分かった経緯

$ heroku logs -t

heroku logs --tailの略。これを打てば、どこでエラーが出たか一発で分かる。

ページ内リンクへ戻る

#3.解決策
調べてみると、keyvalueの型が違うのが原因らしい。

Example.rb
@teams = Team.where("cast(#{key} as text) like ?", "%#{value}%")

PostgreSQLなら、これで良い。cast、RubyやRailsというよりSQL寄り?
でもMySQLだとこれはエラーとなった。絶対何か他にいい方法あるよなぁ。

ページ内リンクへ戻る

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?