Как создать схему в БД Postgres, до того как жидкость начнет работать?

2

У меня есть отдельное приложение. Его на java, spring-boot, postgres и у него есть ликбаза.

Мне нужно развернуть мое приложение, и Liquibase должен создать все таблицы и т.д. Но он должен делать это в пользовательской схеме не публично. Все таблицы обслуживания Liquibase (databasechangelog и databasechangeloglock) также должны быть в пользовательской схеме. Как я могу создать свою схему в БД до того, как Liquibase начнет работать? Я должен делать это в своем приложении, когда его развертывание, в конфигурации или что-то вроде. Без ручного вмешательства в БД.

application.properties:

spring.datasource.jndi-name=java:/PostgresDS
spring.jpa.properties.hibernate.default_schema=my_schema
spring.jpa.show-sql = false
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect
spring.datasource.continue-on-error=true
spring.datasource.sql-script-encoding=UTF-8

liquibase.change-log = classpath:liquibase/changelog-master.yaml
liquibase.default-schema = my_schema

UPD:

Когда запускается Liquibase, он создает две таблицы databasechangelogs и еще одну таблицу. После этого липибаза начинает работать. Но я хочу Liquibase в liquibase.default-schema = my_schema, но он не существует, когда Liquibase начинает работать, и это ошибка: исключение - Liquibase.exception.LockException: liquidibase.exception.DatabaseException: ERROR: схема "my_schema" не существует

Я хочу, чтобы Liquibase работала в пользовательской схеме, а не публично:

liquibase.default-schema = my_schema

но до того, как липибаза сможет это сделать, необходимо создать схему. Liquibase не может этого сделать, потому что он еще не начался и для начала ему нужна схема. Порочный круг.

  • 0
    @a_horse_with_no_name Я хочу создать свои таблицы (наборы изменений в liquibase сделают это) в моей пользовательской схеме. Но когда жидкая база начинает работать, моя пользовательская схема еще не создана.
  • 0
    Путать с вашими двумя утверждениями «liquibase должен создать все таблицы» и «Как я могу создать свою схему в БД до того, как liquibase начнет работать?». два утверждения противоречат друг другу
Показать ещё 7 комментариев
Теги:
spring
liquibase

1 ответ

2
Лучший ответ

Я нашел решение с моим application.properties.

org.springframework.jdbc.datasource.init.ScriptUtils работал до использования жидкой базы.

Журналы:

14:11:14,760 INFO  [org.springframework.jdbc.datasource.init.ScriptUtils] 
(ServerService Thread Pool -- 300) Executing SQL script from URL 
[vfs:/content/app.war/WEB-INF/classes/schema.sql]

14:11:14,761 INFO  [org.springframework.jdbc.datasource.init.ScriptUtils] 
(ServerService Thread Pool -- 300) Executed SQL script from URL 
[vfs:/content/app.war/WEB-INF/classes/schema.sql] in 1 ms.

14:11:14,912 ERROR [stderr] (ServerService Thread Pool -- 300) INFO 9/27/18 
2:11 PM: liquibase: Successfully acquired change log lock

14:11:15,292 ERROR [stderr] (ServerService Thread Pool -- 300) INFO 9/27/18 
2:11 PM: liquibase: Reading from my_schema.databasechangelog

14:11:15,320 ERROR [stderr] (ServerService Thread Pool -- 300) INFO 9/27/18 
2:11 PM: liquibase: Successfully released change log lock

Я просто поместил schema.sql с помощью CREATE SCHEMA IF NOT EXISTS my_schema; в ресурсы dir и все работает нормально.

Спасибо всем за помощь.

Обновление: это работает для весны загрузки 1.X. Если вы используете Spring Boot 2, вам следует включить schema.sql в файле свойств, spring.datasource.initialization-mode=always. Больше информации в Spring Boot - загрузка начальных данных

Ещё вопросы

Сообщество Overcoder
Наверх
Меню