2012-06-30 4 views
1

내가 열이 "상"이라고했다 :는 RoR에가 : MySQL의 (개발을위한 MySQL의 Heroku가에, 포스트 그레스)에서, 포스트 그레스에서 잘 change_column 수 없습니다

create_table :contests do |t| 
    t.text :prize 

는 최근이 항상 정수가됩니다 것을 깨달았다 나는

def change 
    change_column :contests, :prize, :integer, :default => 200 

이것은 MySQL 데이터베이스를 사용하는 로컬 컴퓨터에서 정상적으로 작동합니다. 이 글에서

PGError: ERROR: column "prize" cannot be cast to type "pg_catalog.int4" 
: ALTER TABLE "contests" ALTER COLUMN "prize" TYPE integer 

: 나는 (나에게 포스트 그레스 DB를 제공 Heroku가에서 호스팅되는) 내 생산 현장에 밀어 그러나, 나는 다음과 같은 오류가 발생합니다 http://www.postgresonline.com/periodical.php?i_id=3들이 해결하기 위해 사용의 사용을 논의 이 문제. 그러나 나는 내가 어떻게 그것을 할 수 있는지, 그리고 이것이 내가하려고하는 것에 적절한지 여부를 모른다.

이 문제를 파악하는 데 도움이되는 정보는 매우 감사하겠습니다.

감사합니다. Ringo

+0

상금 열의 모든 값이 정수로 변환하는 경우 귀하의 코드에만 작동한다, 또한 [이 답변] (http://stackoverflow.com/questions/3537064/rails-migration-to-convert-string-to- 참조 정수) – gshilin

+1

프로덕션 용으로 개발할 때 동일한 데이터베이스를 사용하지 않는 이유가 있습니까? – sdolan

답변

1

난 당신이 손으로 그것을해야 할 것이다 생각이 예를 참조에

원시 SQL을 실행하려면 :

def up 
    connection.execute(%q{ 
     alter table contests 
     alter column prize type integer using cast(prize as integer), 
     alter column price set default 200 
    }) 
end 

둘 다 MySQL과 PostgreSQL을에 같은 마이그레이션을 실행하려면 다음 :이 문제를 해결 일단

def up 
    case ActiveRecord::Base.connection 
    when ActiveRecord::ConnectionAdapters::PostgreSQLAdapter 
     connection.execute(%q{ 
      alter table contests 
      alter column prize type integer using cast(prize as integer), 
      alter column price set default 200 
     }) 
    when ActiveRecord::ConnectionAdapters::MySQLAdapter 
     # MySQL version... 
    end 
end 

는 다음 작업은 fixi을 시작할 수 있도록하는 PostgreSQL을 통해 개발 환경을 전환하는 것 다른 모든 문제 (예 : GROUP BY 문제, 대소 문자를 구분하는 LIKE, 열 잘림 동작 ...)를 실행하십시오.

+0

이 오류가 발생합니다 : Mysql2 :: 오류 : SQL 구문에 오류가 있습니다. 올바른 구문을 보려면 MySQL 서버 버전에 해당하는 설명서를 확인하십시오. '형용사 (정수형)를 사용하여 정수를 입력하십시오. –

+0

@RingoBlancke : 다른 데이터베이스에 대해 마이그레이션 할 때 다른 작업을 사용해야합니다. 내 업데이트를 확인하십시오. –