Liquibase (changeLogSync, update, changeLogSyncSQL) не создает таблицы и не вставляет данные

Я следил за этой страницей парней, чтобы получить установку Liquibase ( http://bytefilia.com/managing-database-schema-changes-liquibase-existing-schema/ ) по крайней мере с моими базовыми таблицами и данными. я успешно побежал

./liquibase --driver=com.mysql.jdbc.Driver \
--classpath=lib/mysql-connector-java-5.1.34-bin.jar \
--changeLogFile="../data/database/boot.json" \
--url="jdbc:mysql://localhost/tester" \
--username=root \
--password=password \
--logLevel=debug \
generateChangeLog

Я делаю это два раза: один для структуры таблицы и один для данных.

./liquibase --driver=com.mysql.jdbc.Driver \
--classpath=lib/mysql-connector-java-5.1.34-bin.jar \
--changeLogFile="../data/database/base-data.json" \
--url="jdbc:mysql://localhost/tester" \
--username=root \
--password=password \
--logLevel=debug \
--diffTypes="data"  
generateChangeLog

Он генерирует оба файла boot.json и base-data.json. Файлы кажутся хорошими, по крайней мере, по сравнению с другими веб-сайтами и файлами liquibase. Единственная проблема, которую я обнаружил, заключается в том, что в файле данных штампы даты и времени генерируют ошибку о ":" , но если я заключаю их в кавычки, liquibase запускается и syas делает это успешно. Хотя, когда я проверял базу данных, у меня было только 2 таблицы.

DATABASECHANGELOG
DATABASECHANGELOGLOCK

Если я загляну внутрь DATABASECHANGELOG, там будут все коммиты из обоих файлов после выполнения команды синхронизации. Но в нем нет ни одной из нужных мне таблиц и, конечно же, никаких данных. Я подумал, что, возможно, он не будет отображать таблицы, являющиеся контролем версий, и все такое, поэтому я попробовал обычный оператор выбора.

select * from ua_auth_user;
ERROR 1146 (42S02): Table 'tester.ua_auth_user' doesn't exist

Любая помощь прекрасна. Что мне нужно сделать, чтобы Liquibase сгенерировала мои схемы из свежей базы данных с данными, которые я экспортировал. Если я сделал что-то не так при получении данных и структуры таблицы, я это изменю. Я только следовал инструкциям, чтобы запустить рабочий пример, прежде чем приступить к серьезной разработке.

--- Обновление (после предложений Натана Воксланда)

Я удалил все таблицы, кроме одной таблицы для начала. Я удалил базу данных и создал новую. Затем я выполнил команду ниже.

boot.json

{ "databaseChangeLog": [
  {
    "changeSet": {
      "id": "1",
      "author": "lumberjacked",
      "changes": [
        {
          "createTable": {
            "columns": [
              {
                "column": {
                  "autoIncrement": true,
                  "constraints": {
                  "constraints": {
                      "primaryKey": true
                }
              },
              "name": "id",
              "type": "INT"
            }
          },
          {
            "column": {
              "name": "subject_category_id",
              "type": "INT"
            }
          },
          {
            "column": {
              "name": "subject",
              "type": "VARCHAR(50)"
            }
          },
          {
            "column": {
              "name": "label",
              "type": "VARCHAR(50)"
            }
          }]
        ,
        "tableName": "common__subjects"
      }
    }]

    }
  }

]}

Команда

➜  liquibase-bin git:(test) ✗ ./liquibase
   --driver=com.mysql.jdbc.Driver 
   --classpath=lib/mysql-connector-java-5.1.34-bin.jar 
   --changeLogFile="../data/database/boot.json" 
   --url="jdbc:mysql://localhost/tester" 
   --username=root 
   --password=password 
   --logLevel=debug update

Сообщение об ошибке

Unexpected error running Liquibase:
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Incorrect
table definition; there can be only one auto column and it must be
defined as a key

SEVERE 1/18/15 4:05 PM: liquibase:
../data/database/boot.json::1::lumberjacked:
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Incorrect
table definition; there can be only one auto column and it must be
defined as a key       

person lumberjacked    schedule 14.01.2015    source источник
comment
Странно, что changeSets будут помечены как выполненные, хотя таблиц там нет. Любые исключения при создании таблиц должны предотвратить вставку журнала изменений базы данных. Есть ли какие-либо ошибки при запуске liquibase update?   -  person Nathan Voxland    schedule 16.01.2015
comment
Я собираюсь попробовать ваши предложения сегодня и собрать результат.   -  person lumberjacked    schedule 18.01.2015


Ответы (2)


Вам нужно проверить файлы, которые создаются. По какой-то причине liquibase неправильно сгенерировала ваш json. После просмотра вашего файла вот что вам нужно сделать:

оригинальный

"column": {
    "autoIncrement": true,
    "constraints": {
        "constraints": {
            "primaryKey": true
        }
    }
} 

исправленный

"column": {
    "autoIncrement": true,
    "constraints": {
        "primaryKey": true
    }
}
person gmaniac    schedule 19.01.2015

Когда я экспортировал данные по какой-то причине, liquibase сгенерировала json неправильно, но это не недопустимый json, просто неправильно и дважды обернул ограничения. Я не знаю, так ли это, но после удаления второго ограничения он сгенерировал все таблицы. Мой файл таблиц составляет около 4000 строк после удаления уникальных и внешних ограничений внизу. Поэтому я не совсем уверен, что в json больше нет ошибок.

сгенерирован неправильно

"column": {
    "autoIncrement": true,
    "constraints": {
        "constraints": {
            "primaryKey": true
        }
    } 

исправленный

"column": {
    "autoIncrement": true,
    "constraints": {
        "primaryKey": true
    }
}
person lumberjacked    schedule 19.01.2015
comment
Чтобы отдать должное, мой приятель @gmaniac решил проблему, его предложение - это исправление. Я просто медленно смотрел на то, как сложить два и два, прежде чем пойти и решить это. - person lumberjacked; 19.01.2015