Почему мое предложение liquibase modifySQL не запущено?
Я пытаюсь определить мою схему СУБД с помощью liquibase (в проекте с начальной загрузкой). Соответствующая часть этого проекта - хранилище JSON, которое я пытаюсь настроить.
Даже я знаю, что большинство реляционных СУБД не способны правильно обрабатывать JSON или только начинают (как в мае 2016 года), я хочу иметь своего рода независимую от поставщика схему. Итак, я установил blob (или что-то еще, советую, было бы полезно) в качестве типа данных по умолчанию для любой СУБД, и я специализировал его для тех, кто может иметь дело с: известным JSONB для postgresql или наименьшим JSON для h2 и mysql.
Поскольку я использую Spring-Boot, у меня не так много конфигурации (на самом деле нет;))
Кажется, что предложение modifySQL не сработало. Я использую следующую ревизию.
YAML Liquibase Changeset
databaseChangeLog:
- changeSet:
id: 1
author: jrevy
changes:
- createTable:
tableName: recipe
columns:
- column:
name: id
type: uuid
constraints:
primaryKey: true
nullable: false
- column:
name: name
type: varchar(255)
constraints:
nullable: false
- column:
name: data
type: blob
constraints:
nullable: false
modifySql:
- replace:
dbms: postgresql
replace: blob
with: jsonb
- replace:
dbms: h2,mysql
replace: blob
with: json
Результат
INFO 24/05/16 14:56: liquibase: Successfully acquired change log lock
INFO 24/05/16 14:56: liquibase: Creating database history table with name: public.databasechangelog
INFO 24/05/16 14:56: liquibase: Reading from public.databasechangelog
INFO 24/05/16 14:56: liquibase: classpath:/db/changelog/db.changelog-master.yaml: classpath:/db/changelog/db.changelog-master.yaml::1::jrevy: Table recipe created
INFO 24/05/16 14:56: liquibase: classpath:/db/changelog/db.changelog-master.yaml: classpath:/db/changelog/db.changelog-master.yaml::1::jrevy: ChangeSet classpath:/db/changelog/db.changelog-master.yaml::1::jrevy ran successfully in 46ms
INFO 24/05/16 14:56: liquibase: Successfully released change log lock
[...]
INFO 67628 --- [ main] org.hibernate.Version : HHH000412: Hibernate Core {4.3.11.Final}
2016-05-24 14:56:33.765 INFO 67628 --- [ main] org.hibernate.cfg.Environment : HHH000206: hibernate.properties not found
2016-05-24 14:56:33.765 INFO 67628 --- [ main] org.hibernate.cfg.Environment : HHH000021: Bytecode provider name : javassist
2016-05-24 14:56:34.030 INFO 67628 --- [ main] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {4.0.5.Final}
2016-05-24 14:56:34.280 INFO 67628 --- [ main] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.PostgreSQL9Dialect
->
-- Column: data
-- ALTER TABLE recipe DROP COLUMN data;
ALTER TABLE recipe ADD COLUMN data bytea;
ALTER TABLE recipe ALTER COLUMN data SET NOT NULL;
Тип данных должен быть jsonb, а не bytea (он работает довольно хорошо, если я использую jsbon в качестве типа данных по умолчанию, но только для pgSQL).
Вопрос
- Как я могу узнать, обнаружено или запущено условие modifySQL?
- Вы знаете, почему это не работает, как ожидалось?
1 ответ
Удалить - перед заменой ( https://github.com/liquibase/liquibase/blob/e0badd697d82a87ba868b41e68b659cf8c8e68e8/liquibase-integration-tests/src/test/resources/changelogs/yaml/rollback.tests.changelog.yaml? yll)
Попробуйте изменить SQL без DBMS, чтобы увидеть, если он запущен. И протестируйте с помощью линии liquibase cmd, чтобы исключить ошибку при загрузке.