Mon*_*ods 9 mysql postgresql activerecord pg ruby-on-rails-3
我正在将rails应用程序从使用mysql(mysql2 gem)转换为postgres(pg gem).
使用mysql,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
Run Code Online (Sandbox Code Playgroud)
但是,使用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"
Run Code Online (Sandbox Code Playgroud)
这打破了一些单元测试,虽然这些是可修复的,但我确定我们还有其他依赖这些返回值的代码.有没有办法connection.select_value
在使用postgres时获得正确输入的返回值?
最简洁的答案是不。“pg”驱动程序有意在本机“libpq”驱动程序之上提供尽可能薄的层。它不进行类型转换,因为这是高级库的责任,这些库对使用结果的领域有一定的了解。这个决定的基本原理记录在 PostgreSQL Wiki 上,我很乐意在邮件列表上与您进一步讨论。