2013-03-20 1 views
4

이 문제는 다른 개발자와 작업 할 때 항상 발생하는 것으로 보인다. 갈퀴 DB를 실행 한 후 미래의 시간에 겉으로는 임의의 지점에서 다음레일즈가 schema.rb 타임 스탬프를 datetimes로 바꾼다

create_table :subscription_events do |t| 
    t.integer :subscriber_id 
    t.text :source_url 
    t.text :params 
    t.text :session 

    t.timestamps 
end 

: 우리는 그래서 같은 마이그레이션에서 만든 테이블 (포스트 그레스의 지원)가 마이그레이션, 레일에 schema.rb 파일을 업데이트하려고합니다 뿐만 아니라 전체 CREATE_TABLE 통화의 추가 혼란 reindentation를 일으키는 대신 timestampdatetime를 사용이 원인이 무엇

create_table "subscription_events", :force => true do |t| 
- t.integer "subscriber_id" 
- t.text  "source_url" 
- t.text  "params" 
- t.text  "session" 
- t.timestamp "created_at", :limit => 6, :null => false 
- t.timestamp "updated_at", :limit => 6, :null => false 
+ t.integer "subscriber_id" 
+ t.text  "source_url" 
+ t.text  "params" 
+ t.text  "session" 
+ t.datetime "created_at", :null => false 
+ t.datetime "updated_at", :null => false 
    end 

? 이 수정 된 파일을 체크인해야합니까? 매번 재설정해야합니까?

답변

10

:datetime:timestamp 마이그레이션 유형이 둘 다 PostgreSQL의 TIMESTAMP 데이터 유형에 매핑되므로 '다시 색인'이 발생해서는 안됩니다.

이것은 기본적으로 표준 해시로 정의 된 ActiveRecord::ConnectionAdapters::PostgreSQLAdapter::NATIVE_DATABASE_TYPES 상수의 결과로 인해 발생합니다. ActiveRecord가 'TIMESTAMP'에 대한 첫 번째 적합한 일치 항목을 검색 할 때 :datetime 또는 :timestamp이 예기치 않게 (둘 모두 일치하므로) 찾을 수 있습니다.

요약하면 데이터 또는 스키마에 최소한 영향을 미치지 않아야하므로 걱정하지 마십시오.

UPDATE

다음은 덤프 사용 레일 '데이터 유형'는 타임 스탬프에 대한 데이터 유형 :datetime를 리턴 할 simplified_type 방법을 사용하여 발견된다. 이전 버전에서 데이터 유형을 결정하는 다른 방법이있는 Rails 버전을 업그레이드했을 가능성이 큽니다. 이유가 무엇이든간에, 이것은 어떤 방식 으로든 당신에게 영향을 미치지 않아야합니다.

+0

위대한 답변! 그 쪽이 맞는 거 같아요. [postgresql_adapter.rb] (https://github.com/rails/rails/blob/master/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb#L359)는 둘 다 타임 스탬프 데이터 유형에 매핑되므로 역순으로 사용할 수 없습니다 원본이 무엇인지 엔지니어. 마이그레이션은 원래 3.2.6 이었으므로 (https://github.com/rails/rails/blob/v3.2.6/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb#L359) 매핑은 변경되지 않았습니다. 생성되었으므로 둘 사이에서 무작위로 선택해야합니다. –