【问题标题】:Liquibase: How to change default postgresql schemaLiquibase:如何更改默认 postgresql 架构
【发布时间】:2020-03-10 14:18:16
【问题描述】:

默认情况下,liquibase 在公共架构上创建所有对象。但是我创建了另一个架构,我希望 liquibase 使用它。

我通过附加 searchpath=mySchema 更改了数据库 URL

jdbc:postgresql://${host}:${db.port}/${db.name}?searchpath=mySchema

我也尝试用 currentSchema=mySchema 附加它

jdbc:postgresql://${dbhost}:${db.port}/${db.name}?currentSchema=mySchema

但 liquibase 仍然指向公共架构。

任何帮助表示赞赏..

【问题讨论】:

    标签: postgresql database-schema liquibase


    【解决方案1】:

    您可以尝试更改 PG 用户帐户,以便在数据库连接时设置正确的默认架构,例如:

    alter role r in database b set search_path='s';
    

    【讨论】:

    • 执行后,我面临新错误:无法更新数据库。 liquibase.exception.LockException: liquibase.exception.DatabaseException: 错误: 没有选择在位置创建模式: 14 [失败的 SQL: CREATE TABLE databasechangeloglock.....
    • 您是否授予用户帐户使用架构的权限:“将架构 s 上的所有权限授予 r;” ?
    • 它运行良好,但仍然面临问题!一旦我将连接字符串中的 search_path 更改为另一个模式,liquibase 就能够在新的选定模式上创建所有对象,但是在我查询选定模式的表的任何地方,它说关系不存在,尽管它存在。似乎它是在所选模式上创建表,但仍然使用原始模式与它们相关! (我认为问题的一部分是仅在第一个模式上创建的 databasechangelog 表,而第二个模式仍在使用它)!
    • 访问新架构中的新表时,您需要提供类似“s.t”的架构名称(用于架构 s 中的表 t)或将架构“s”添加到 search_path 设置。
    • 我不想给出模式名称,我只想在我的连接字符串中包含模式名称,它应该处理它:jdbc:postgresql://${host}:${ db.port}/${db.name}?searchpath=mySchema... 但它始终指向我直接在 postgres 上设置的架构,不受连接字符串中包含的搜索路径的影响
    【解决方案2】:

    您还必须指示 Liquibase 在您的架构中创建其元表 DATABASECHANGELOGDATABASECHANGELOCK。只需将以下行放入您的 Liquibase 属性文件:

    liquibaseSchemaName=mySchema
    

    另见https://docs.liquibase.com/workflows/liquibase-community/creating-config-properties.html

    【讨论】:

      猜你喜欢
      • 2018-01-25
      • 2011-04-09
      • 1970-01-01
      • 2013-06-28
      • 2019-06-14
      • 2014-05-11
      • 2013-03-30
      • 2017-12-27
      • 1970-01-01
      相关资源
      最近更新 更多