当前位置: 首页 > 知识库问答 >
问题:

在liquibase开始工作之前,如何在Postgres DB中创建模式?

王成化
2023-03-14

我有独立应用程序。它是在java,spring-boot,postgres,它有LiquiBase。

我需要部署我的应用程序和liquibase应该创建所有的表,等等,但它应该在自定义模式中做,而不是公开的。liquibase的所有服务表(databasechangelog和databasechangeloglock)也应该在自定义模式中。在liquibase开始工作之前,我如何在DB中创建模式?我必须在我的应用程序部署的时候,在html" target="_blank">配置或其他类似的情况下这样做。而不需要对数据库进行任何人工干预。

应用程序.属性:

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
liquibase.default-schema = my_schema

但在liquibase能够做到这一点之前,必须先创建模式。Liquibase不能这样做,因为它还没有启动,而启动它需要Schema。恶性循环。

共有1个答案

楚昊明
2023-03-14

我用我的application.properties找到了一个解决方案。

org.springframework.jdbc.datasource.init.scriptutils在LiquiBase之前工作。

日志:

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
 类似资料:
  • 问题内容: 我需要在构建开始之前清除工作空间。我尝试分阶段使用,但在声明性管道中,检出首先发生,而在运行阶段时,检出的代码也会被清除,这是不希望的。在声明式管道中签出之前,我们如何清除工作空间? 问题答案: 在Git运行时使用VCS的方法

  • 我无法使用 apache poi eclipse 在我创建的 java excel 中创建工作表

  • 假设我有一个表'some-table',我想在多个模式中创建它。名为“create-some-table.yaml”的文件 最后一个是changelog-master,它非常简单 有什么办法我可以做类似这样的事情吗,谢谢:)

  • 我正在使用Liquibase 3.3.2并尝试实现一个Web服务,该服务接受许多变更日志,根据上下文查找特定的数据源,并将该数据源与Liquibase变更日志一起使用以执行数据库更新。 我使用PostgreSQL作为数据库。 不知何故,来自webservice端的liquibase日志表明根本没有问题,似乎都在正确执行。但是,数据库中没有任何表,甚至没有Liquibase自己的锁/状态表。。 这是

  • 问题内容: 我有一个要尝试导入的DBF文件,然后将其写入SQL表。我遇到的问题是,如果我使用SqlBulkCopy,它需要我提前创建表,但是在我的情况下这是不可能的,因为dbf文件不断变化。 到目前为止,这是我的代码: 它总是无法说明它无法访问目标表。 C#中是否可以选择在写入表之前即时创建表? 问题答案: 此方法可以帮助您: 您可以像这样使用它:

  • 有一个创建工作流的指南,但老实说没有那么大的帮助。 https://www.jetbrains.com/help/youtrack/standalone/workflow-guide.html 它创建问题实体,但不创建sprint。我找不到,我如何添加属性(日期-范围,名称,板)到新的sprint。