Java 如何在带有参数的触发器中设置模式?
在这里,我设置了在Java/Spring中使用liquibase变更集的模式。 直到它与表/键创建一起工作。但它在自定义SQL上不起作用Java 如何在带有参数的触发器中设置模式?,java,spring,postgresql,triggers,liquibase,Java,Spring,Postgresql,Triggers,Liquibase,在这里,我设置了在Java/Spring中使用liquibase变更集的模式。 直到它与表/键创建一起工作。但它在自定义SQL上不起作用 @Bean @DependsOn("dataSource") public SpringLiquibase liquibase() { SpringLiquibase liquibase = new SpringLiquibase(); liquibase.setDataSource(dataSource); liquibase.set
@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>
在更新或删除my_schema.table之前创建触发器t_表
对于每一行,执行过程my_schema.lo_manage(内容);
正如@pozs所指出的,这里有一个解决方案:
因此,使这项工作的代码是
@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;
}
私有映射createChangeLogParameters(){
Map Map=newhashmap();
map.put(“defaultSchema”,databaseProperties.getJdbcSchema());//需要在SQL in标记上使用。
返回图;
}
这里是液化者:
<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>
在更新或删除${defaultSchema}.table之前创建触发器t_表
对于每一行,执行过程${defaultSchema}.lou manage(内容);
也许吧?
<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>