레일즈 앱을 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
그러나, 포스트 그레스와 함께, 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"
은 테스트가 가능하고 수정이 가능할 때까지는 이러한 반환 값에 의존하는 다른 코드가 있음을 확신합니다. 포스트 그레스를 사용할 때 connection.select_value
에서 올바르게 형식화 된 반환 값을 얻는 방법이 있습니까?
최악의 답변입니다! ;) 감사. –
"네이티브 'libpq'드라이버 위에 가능한 한 얇은 레이어." 문제는, 루비의 문자열 할당은 실제로 꽤 비싸고, 너무 낭비스러운 것 같습니다. –
각 열에 문자열을 할당하거나 PostgreSQL 유형을 루비에 기본적으로 매핑하는 것이 더 낭비가 될지도 모릅니다. 열 유형에 모두 Ruby에서 정확한 Numeric derived (BigNum이 아닌) 값이 있으면 문자열을 모두 표현하는 것이 낭비 일 것입니다. 그러나 비교적 희귀 한 환경에서 잠재적 인 메모리 낭비에 기반하여 부분적으로 완성 된 타입 매핑 시스템이 될 수있는 것을 구현하는 것은 나에게 무책임한 것처럼 보입니다. –