Rails datetime 형식에서 date 형식으로 마이그레이션을 작성하는 방법
3970 단어 PostgreSQLDBRails
날짜를 맞추기 때문에
datetime
로 했지만, 잘 생각해 보면 「시간」은 필요 없네요가 되었을 때, date
로 변환하고 싶어지네요.이번 목표
datetime
를 가지고 있다 date
로 만들고 싶습니다 환경
change를 사용한 datetime → date 변환
def change
rename_column :books, :released_at, :released_on
change_column :books, :released_on, 'date USING CAST(released_on AS date)'
end
released_at(datetime) 할 수 있습니까?
이것으로 좋아, released_on(date)
마이그레이션은 되감기(rollback)를 고려해 둡시다.
이전 마이그레이션을 롤백할 수 있는지 확인해 봅시다.
$ rails db:rollback
== ..... : reverting ========
rails aborted!
StandardError: An error has occurred, this and all later migrations canceled:
This migration uses change_column, which is not automatically reversible.
To make the migration reversible you can either:
1. Define #up and #down methods in place of the #change method.
2. Use the #reversible method to define reversible behavior.
무엇이 오류가 되었습니까?
def change
rename_column :books, :released_at, :released_on
change_column :books, :released_on, 'date USING CAST(released_on AS date)'
end
이것으로 좋아,
released_on(date)
마이그레이션은 되감기(rollback)를 고려해 둡시다.
이전 마이그레이션을 롤백할 수 있는지 확인해 봅시다.
$ rails db:rollback
== ..... : reverting ========
rails aborted!
StandardError: An error has occurred, this and all later migrations canceled:
This migration uses change_column, which is not automatically reversible.
To make the migration reversible you can either:
1. Define #up and #down methods in place of the #change method.
2. Use the #reversible method to define reversible behavior.
무엇이 오류가 되었습니까?
db:rollback
로 롤백 할 때 이전 유형 정보를 모르기 때문에 되돌릴 수 없으므로 git commi..
로 형식을 변환할 수 있었지만, 「변환 전의 형태의 정보」가 빠져 버렸기 때문에, 롤백에 실패해 버렸습니다.이것을 해결하기 위한 한 가지 방법으로 up/down을 사용한 방법으로 써 봅시다.
up/down을 사용한 방법
def up
rename_column :books, :published_at, :release_on
change_column :books, :release_on, 'date USING CAST(release_on AS date)'
end
def down
rename_column :books, :release_on, :published_at
change_column :books, :published_at, 'timestamp USING CAST(published_at AS timestamp)'
end
이렇게 함으로써,
def up
rename_column :books, :published_at, :release_on
change_column :books, :release_on, 'date USING CAST(release_on AS date)'
end
def down
rename_column :books, :release_on, :published_at
change_column :books, :published_at, 'timestamp USING CAST(published_at AS timestamp)'
end
change_column
에서 'date USING CAST(released_on AS date)'
의 db:migrate
실행 up
에서 datetime -> date
의 db:rollback
실행 덤 : PostgreSQL에서 down이 오류가 발생합니다.
change_column :books, :released_at, 'datetime USING CAST(released_at AS datetime)'
PG::UndefinedObject: ERROR: type "datetime" does not exist
LINE 1: ...released_at" TYPE datetime USING CAST(published_at AS datetime)
Rails 세계의 date -> datetime
는 PostgreSQL 세계에서 datetime USING CAST
가된다는 이야기였습니다
Reference
이 문제에 관하여(Rails datetime 형식에서 date 형식으로 마이그레이션을 작성하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/hirocueki2/items/3a1b54843654900959c8
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
change_column :books, :released_at, 'datetime USING CAST(released_at AS datetime)'
PG::UndefinedObject: ERROR: type "datetime" does not exist
LINE 1: ...released_at" TYPE datetime USING CAST(published_at AS datetime)
Reference
이 문제에 관하여(Rails datetime 형식에서 date 형식으로 마이그레이션을 작성하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/hirocueki2/items/3a1b54843654900959c8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)