Ошибка MySQL при создании таблиц через liquibase - PullRequest
0 голосов
/ 06 июля 2011

Я использую Grails 1.3.7 + MySQL 5.5 + Liquibase через плагин переноса базы данных 0.2.1.

Когда я в своей среде разработки, я настроил Hibernate на использование «create-drop», но в моей среде 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"        
        }
    }
 ...
}

Когда я запускаю приложение в режиме разработки, таблицы базы данных создаются нормально.Для создания журнала изменений я делаю следующее:

$ 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)

Когда я копирую / вставляю оператор create в MySQL, я получаю ту же ошибку.Я даже снял ДВИГАТЕЛЬ = InnoDB, чтобы увидеть, если это имеет значение, но это не так.Есть идеи?

К вашему сведению: я установил MySQL с помощью HomeBrew на моем Mac.

1 Ответ

2 голосов
/ 06 июля 2011

Я предполагаю, что ваша база данных QA не знает, что такое тип данных double precision(19).
Попробуйте изменить его на double precision.

Если это не удастся, рассмотрите возможность использования другого типа данных: doc говорит, что двойная точность - это "нестандартная вариация"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...