2011-07-06 3 views
0

데이터베이스 마이그레이션 플러그인 0.2.1을 통해 Grails 1.3.7 + MySQL 5.5 + Liquibase를 사용하고 있습니다.liquibase를 통해 테이블을 생성 할 때 MySQL 에러가 발생했습니다.

내가 개발 환경에있을 때, "create-drop"을 사용하도록 Hibernate를 구성했지만, QA 환경에서는 liquibase를 사용하여 테이블을 만들고 싶습니다. 다음은 내 환경 설정입니다.

environments { 
    development { 
     dataSource { 
      configClass = GrailsAnnotationConfiguration.class 
      pooled = false 
      driverClassName = "com.mysql.jdbc.Driver" 
      username = "root" 
      password = "" 
      dialect = "org.hibernate.dialect.MySQL5InnoDBDialect" 
      dbCreate = "create-drop" 
      url = "jdbc:mysql://localhost/dripita_dev"  
     } 
    } 
    localQa { 
     dataSource { 
      configClass=GrailsAnnotationConfiguration.class 
      pooled=false 
      driverClassName="com.mysql.jdbc.Driver" 
      username="root" 
      password="" 
      dialect="org.hibernate.dialect.MySQL5InnoDBDialect" 
      url="jdbc:mysql://localhost/dripita_localqa"   
     } 
    } 
... 
} 

응용 프로그램을 dev 모드로 가져 오면 데이터베이스 테이블이 정상적으로 생성됩니다.

$ grails dbm-generate-gorm-changelog changelog.groovy 

다음과 같습니다 :

changeSet(author: "javidjamae (generated)", id: "1309959832163-2") { 
    createTable(tableName: "payment") { 
     column(autoIncrement: "true", name: "id", type: "bigint") { 
      constraints(nullable: "false", primaryKey: "true", primaryKeyName: "paymentPK") 
     } 

     column(name: "version", type: "bigint") { 
      constraints(nullable: "false") 
     } 

     column(name: "buyer_id", type: "bigint") { 
      constraints(nullable: "false") 
     } 

     column(name: "buyer_information_id", type: "bigint") 

     column(name: "currency", type: "varchar(255)") { 
      constraints(nullable: "false") 
     } 

     column(name: "discount_cart_amount", type: "decimal(19,2)") { 
      constraints(nullable: "false") 
     } 

     column(name: "paypal_transaction_id", type: "varchar(255)") 

     column(name: "status", type: "varchar(9)") { 
      constraints(nullable: "false") 
     } 

     column(name: "tax", type: "double precision(19)") { 
      constraints(nullable: "false") 
     } 

     column(name: "transaction_id", type: "varchar(255)") 
    } 
} 

그런 다음 나는 변경 로그에서 테이블을 만들려고 : 나는 변경 로그 만들기 위해 다음을 수행

$ grails -Dgrails.env=localQa dbm-update 

그러나을 때 dbm-update를 실행하면 다음 오류가 발생합니다.

07/06 08:52:41 INFO [main]: liquibase - Successfully acquired change log lock 
07/06 08:52:42 INFO [main]: liquibase - Reading from `DATABASECHANGELOG` 
07/06 08:52:42 INFO [main]: liquibase - Reading from `DATABASECHANGELOG` 
07/06 08:52:42 ERROR [main]: liquibase - Error executing SQL CREATE TABLE `payment` (`id` BIGINT AUTO_INCREMENT NOT NULL, `version` BIGINT NOT NULL, `buyer_id` BIGINT NOT NULL, `buyer_information_id` BIGINT, `currency` VARCHAR(255) NOT NULL, `discount_cart_amount` decimal(19,2) NOT NULL, `paypal_transaction_id` VARCHAR(255), `status` VARCHAR(9) NOT NULL, `tax` double precision(19) NOT NULL, `transaction_id` VARCHAR(255), CONSTRAINT `paymentPK` PRIMARY KEY (`id`)) ENGINE=InnoDB 
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') NOT NULL, `transaction_id` VARCHAR(255), CONSTRAINT `paymentPK` PRIMARY KEY (`' at line 1 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:406) 
    at com.mysql.jdbc.Util.getInstance(Util.java:381) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1030) 

MySQL에서 create 문을 복사/붙여 넣기 할 때 동일한 오류가 발생합니다. ENGINE = InnoDB를 사용하여 차이가 나는지 여부를 확인하기도했지만 그렇지 않았습니다. 어떤 아이디어?

참고 : Mac에 HomeBrew를 사용하여 MySQL을 설치했습니다.

답변

2

내 생각에 QA db는 데이터 유형 double precision(19)을 알지 못합니다.
double precision으로 변경하십시오. 이것이 실패하면

, 다른 데이터 유형을 사용하여 고려하십시오 doc 배정 밀도가 "비표준 변화"

+0

덕분이라고 말한다! 그것은 MySQL 명령 행에서 작동했습니다. 내 도메인 개체에서 해당 필드는 BigDecimal이므로 버그가 db-migration 플러그인이거나 Liquibase에서 이중 정밀도 (19)로 생성된다고 가정합니다. 나는 버그 보고서를 제출하고 내가 어디서 얻는 지 볼 것이다. –