2016-04-05 3 views
2

Я использую Dropwizard (1.0.0) и Liquibase для создания базы данных, если она не существует.Liquibase create Schema for postgres

Проблема заключается в том, что я использую другую схему Postgres (не общедоступную). Кажется, что Liquibase не может создать эту схему раньше, не так ли? Я ожидал, что Liquibase создаст эту схему, но при попытке создать базу данных она всегда выбрасывает «Схему с именем xx not found».

+1

LiquiBase ничего не создает без вас говорю это, чтобы сделать это. Вам нужно включить 'create schema' в ваш журнал изменений –

+1

Я действительно создал дамп перед использованием Liquibase (с -схемой xx) и ожидал, что он воссоздает схему/целое db. похоже, что это не так – Christian

+0

Опять же: Liquibase запускает только утверждения, которые являются результатом определения в вашем журнале изменений. Он не сделает никакой магии или не угадает, какие объекты вам не хватает. Это не более чем структурированный способ написания инструкции SQL. Он ничего не знает о вашей дампе. –

ответ

3

Даже если LiquiBase не CREATE SCHEMA в его изменения в комплектных/рефакторинга (и, следовательно, не создает один во время dropwizard db dump), еще можно было включить это как ревизией в ваших миграциях CHANGELOG используя sql tag, следующим образом:

<changeSet author="christian" id="1"> 
    <sql dbms="postgresql" endDelimiter=";"> 
     CREATE SCHEMA foo 
    </sql> 
</changeSet> 

Обратите внимание, что LiquiBase создаст это собственных таблиц вPUBLICсхемы, независимо - перед применением какой-либо ревизии:
Если запустить db migrate --dry-run в dropwizard, вы увидите, что LiquiBase будет первым выполнить

CREATE TABLE PUBLIC.DATABASECHANGELOGLOCK ... 
CREATE TABLE PUBLIC.DATABASECHANGELOG ... 

перед запуском

CREATE SCHEMA foo; 
+1

Вы можете сказать, что Liquibase использует другую схему для собственных таблиц через параметр '--defaultSchemaName'. –

+1

Сначала должна существовать схема, чтобы работать. Эквивалентная команда dropwizard 'db migrate --schema foo' терпит неудачу с _« недопустимым именем схемы »_ при попытке создания таблиц Liquibase – fspinnenhirn

+0

Если мы решили использовать файл журнала изменений для нескольких баз данных, например SQL Server и Postgres, это будет все еще работают??? Имея 2 штуки для тех же самых изменений, дифференцируя свойство dbms ??? –