gpt4 book ai didi

java - 如何使用参数在触发器中设置模式?

转载 作者:行者123 更新时间:2023-11-29 13:03:11 24 4
gpt4 key购买 nike

我在这里设置在 Java/Spring 中使用 liquibase 变更集的模式。直到它与表/键创建一起工作的那一刻。但它不适用于自定义 SQL。

@Bean
@DependsOn("dataSource")
public SpringLiquibase liquibase() {
SpringLiquibase liquibase = new SpringLiquibase();
liquibase.setDataSource(dataSource);
liquibase.setChangeLog("classpath:META-INF/liquibase/application-changes.xml");
liquibase.setContexts("default");
liquibase.setDefaultSchema(databaseProperties.getJdbcSchema());
return liquibase;
}

现在我需要在 Postgresql 中管理大对象,所以我想添加以下变更集。但是我遇到了问题,因为它没有使用参数,所以我不得不在 SQL 文件中添加“my_schema”。有人知道解决方法或解决方案吗?

<changeSet id="xxx-0.0.1-SNAPSHOT-postgres" runInTransaction="true" failOnError="true"
onValidationFail="HALT" dbms="postgresql">
<sql >
CREATE TRIGGER t_table BEFORE UPDATE OR DELETE ON my_schema.table
FOR EACH ROW EXECUTE PROCEDURE my_schema.lo_manage(content);
</sql>
</changeSet>

最佳答案

正如@pozs 所指出的,这里有一个解决方案: https://forum.liquibase.org/topic/setting-default-schema-working-for-xml-refactorings-but-not-sql

所以使这项工作的代码将是

@Bean
@DependsOn("dataSource")
public SpringLiquibase liquibase() {
SpringLiquibase liquibase = new SpringLiquibase();
liquibase.setDataSource(dataSource);
liquibase.setChangeLog("classpath:META-INF/liquibase/application-changes.xml");
liquibase.setContexts("default");
liquibase.setDefaultSchema(databaseProperties.getJdbcSchema());
liquibase.setChangeLogParameters(createChangeLogParameters());
return liquibase;

private Map<String, String> createChangeLogParameters() {
Map<String, String> map = new HashMap<String, String>();
map.put("defaultSchema", databaseProperties.getJdbcSchema()); // needed on SQL in <sql> tags.
return map;
}

这里是 Liquibase:

<changeSet id="xxx-0.0.1-SNAPSHOT-postgres" runInTransaction="true" failOnError="true"
onValidationFail="HALT" dbms="postgresql">
<sql >
CREATE TRIGGER t_table BEFORE UPDATE OR DELETE ON ${defaultSchema}.table
FOR EACH ROW EXECUTE PROCEDURE ${defaultSchema}.lo_manage(content);
</sql>

关于java - 如何使用参数在触发器中设置模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22838280/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com