我正在尝试使用 liquibase 并传递 schemaName 在 Postgres 中创建一个存储过程,但它总是在公共模式下创建存储过程。
我的变更集看起来像
> <createProcedure relativeToChangelogFile="true"
> dbms="postgresql"
> path="storedProcedures/cirrus_UTC_Timestamp.sql"
> schemaName="cirrusdb"
> procedureName="cirrus_UTC_Timestamp">
> </createProcedure>
来自 Liquibase 命令的调试日志
C:/views/P4V/cirrus_dev/cirrus/main/build/package/src/main/resources/scripts/MasterDBChangeLogs.xml:
C:/views/P4V/cirrus_dev/cirrus/main/build/package/src/main/resources/scripts/MasterDBChangeLogs.xml::8.2.0.0-1::guptaa8:
Computed checksum for create Procedure:[
dbms="postgresql"
path="storedProcedures/cirrus_UTC_Timestamp.sql"
procedureName="cirrus_UTC_Timestamp"
relativeToChangelogFile="true"
schemaName="cirrusdb" ] as 75cfb2062231cfb7a0813a82a4f62764 DEBUG 11/18/15 2:38 PM: liquibase:
C:/views/P4V/cirrus_dev/cirrus/main/build/package/src/main/resources/scripts/MasterDBChangeLogs.xml:
C:/views/P4V/cirrus_dev/cirrus/main/build/package/src/main/resources/scripts/MasterDBChangeLogs.xml::8.2.0.0-1::guptaa8:
Computed checksum for 7:75cf
b2062231cfb7a0813a82a4f62764:7:0a8a327c03ced9a7b29acb65fee085b9 as
0591c7cae23e75e7ea48680d9e7fb742 DEBUG 11/18/15 2:38 PM: liquibase:
C:/views/P4V/cirrus_dev/cirrus/main/build/package/src/main/resources/scripts/MasterDBChangeLogs.xml:
C:/views/P4V/cirrus_dev/cirrus/main/build/package/src/main/resources/scripts/MasterDBChangeLogs.xml::8.2.0.0-1::guptaa8:
Computed checksum for 7:0591 c7cae23e75e7ea48680d9e7fb742: as
ae8a55a46214d182fab4b59f8765b90d DEBUG 11/18/15 2:38 PM: liquibase:
Release Database Lock DEBUG 11/18/15 2:38 PM: liquibase: Executing
UPDATE database command: UPDATE cirrusdb.databasechangeloglock SET
LOCKED = FALSE, LOCKEDBY = NULL, LOCKGRANTED = NULL WHERE ID = 1 INFO
11/18/15 2:38 PM: liquibase: Successfully released change log lock
Liquibase Update Successful
Liquibase 版本:3.4.1,Postgres 版本 9.3
经过一些研究,我发现 liquibase(最高 3.4.2)不支持 createProcedure 标记上的 schemaName,其“信息性”仅:
来源:https://liquibase.jira.com/browse/CORE-2626
门票说明:
目前createProcedure schemaName没有被使用,它只是为了 信息目的。更改 createProcedure 以便如果 schemaName 为 指定时,它将使用 SqlParser 类来查找名称 过程在正文中,并在模式前面添加或替换 具有给定 schemaName 的现有架构。添加新的 liquibase.useProcedureSchema=true|false 标志,如果 false 则不会 进行解析,但添加 ALTER SESSION USE DEFAULT SCHEMA... 创建过程 SQL 之前和之后的语句。