私は、レールアプリをmysql(mysql2 gem)からpostgres(pg gem)に変換しています。 MySQLでconnection.select_valueは、pg gemを持つpostgresの文字列のみを返します
、ActiveRecord::Base.connection.select_value
呼び出しは、たとえば、データに基づいて入力された値を返します。
> ActiveRecord::Base.connection.select_value("SELECT COUNT(*) FROM errors")
=> 86
> ActiveRecord::Base.connection.select_value("SELECT exception FROM errors where id=565")
=> "TechTalk.Genome.SqlExecutionException"
> ActiveRecord::Base.connection.select_value("SELECT id FROM errors where id=565")
=> 565
しかし、postgresので、connection.select_value
は常に文字列を返します。これは、いくつかのユニットを破った
> ActiveRecord::Base.connection.select_value("SELECT COUNT(*) FROM errors")
=> "1"
> ActiveRecord::Base.connection.select_value("SELECT id FROM errors")
=> "1"
> ActiveRecord::Base.connection.select_value("SELECT source FROM errors limit 1")
=> "webapp"
は、これらの戻り値に依存する他のコードがあることは確かです。 postgresを使用するときに、connection.select_value
から正しく型付けされた戻り値を取得する方法はありますか?
最悪の最善の答え! ;)ありがとう。 –
"ネイティブの 'libpq'ドライバの上にできるだけ薄いレイヤーを作成してください。"問題は、Rubyの文字列割り当ては実際には非常に高価で、無駄だと思う。 –
各列に文字列を割り当てたり、PostgreSQLの型をデフォルトでRubyにマップするのは無駄だと思う。列の型がすべてRubyで正確な数値派生(BigNum以外)のものであれば、それらをすべてStringとして表すのは無駄でしょう。しかし、比較的まれな状況の中で潜在的なメモリの無駄に基づいて部分的に完全な型マッピングシステムにしかならないものを実装するのは無責任なようです。 –