Grails Database Migration Plugin에 익숙해지며 this site을 참조하십시오. null이 아닌 제약 조건을 가진 속성을 추가하려고 할 때 문제가 발생했습니다. 내 데이터베이스를 업데이트 할Grails 데이터베이스 마이그레이션 플러그인이 자동으로 null이 아닌 제약 조건을 추가하지 못합니다.
databaseChangeLog = {
changeSet(author: "Ryan (generated)", id: "1340893788251-1") {
addColumn(tableName: "game") {
column(name: "genre", type: "varchar(255)")
}
grailsChange{
change{
sql.executeUpdate("UPDATE game SET genre = 'Other'")
}
}
addNotNullConstraint(tableName: "game", columnName: "genre")
}
}
:이 (다음 컬럼에 널 (NULL) 입력이 불가능한 제약 조건을 추가, 열을 추가 기존 레코드에 대한 기본값을 설정) 사이트에 표시됩니다 나는 내 스크립트 같은 방식으로 모델링 그것은 조용히 실패합니다. 그래서 세 가지 변경 사항을 세 가지 다른 그루비 스크립트로 나눠서 문제를 추적합니다.
databaseChangeLog = {
changeSet(author: "Ryan (generated)", id: "1340893788251-1") {
addColumn(tableName: "game") {
column(name: "genre", type: "varchar(255)")
}
}
}
두 번째 파일 (기존 레코드에 대한 기본 값을 지정) 괜찮 았는데 :
는 는첫 번째 파일 (열을 추가는) 잘 작동
databaseChangeLog = {
changeSet(author: "Ryan (generated)", id: "defaultValue") {
grailsChange{
change{
sql.executeUpdate("UPDATE game SET genre = 'Other'")
}
}
}
}
세 번째 파일 (NOT NULL 제약을 추가) 자동으로 실패 :
databaseChangeLog = {
changeSet(author: "Ryan (generated)", id: "notNull") {
addNotNullConstraint(tableName: "game", columnName: "genre")
}
}
로그 파일에는 플러그인과 관련된 내용 만 표시됩니다.
2012-06-28 10:17:11,694 [main] INFO liquibase - Successfully acquired change log lock
2012-06-28 10:17:11,972 [main] INFO liquibase - Reading fromDATABASECHANGELOG
2012-06-28 10:17:11,980 [main] INFO liquibase - Reading fromDATABASECHANGELOG
2012-06-28 10:17:12,009 [main] INFO liquibase - Successfully released change log lock
databasechangelog 테이블을 검사하면 스크립트가 실행되지 않은 것을 알 수 있습니다.
| Starting dbm-update for database root @ jdbc:mysql://localhost/migration
하지만 성공적인 업데이트를 참조처럼 더
| Finished dbm-update
없다 : 콘솔은 저에게이했다.
참고 : 참고로 사용하고있는 사이트는 버전 1.0을 사용하고 있으며 버전 1.1을 사용하고 있습니다. 나는이 플러그인의 튜토리얼이나 예제를 찾는 데 어려움을 겪고있다. 가장 최근 버전의 정보를 찾기가 더 힘들다.
누구나 not null 제약 조건이 잘못 될 수 있습니까?
제약 조건이 적용되지 않았기 때문에 버그 인 것 같습니다. 실제로 실행중인 SQL이 실패하는지 여부를 알고 있습니까? – cdeszaq
cdexzaq가 말한 것에 약간의 확장을하기 위해'alter table game modify genre varchar (255) not null;'을 MySQL 데이터베이스에 직접 실행하면 에러가 발생합니까? – proflux
@cdeszaq @proflux'테이블 게임 수정 장르 varchar (255) not null;은 아마도 작동했을 것입니다. 다른 방법으로 문제를 디버깅했습니다 (아래 내 답변 참조). – Weezle