Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在带有参数的触发器中设置模式?_Java_Spring_Postgresql_Triggers_Liquibase - Fatal编程技术网

Java 如何在带有参数的触发器中设置模式?

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

在这里,我设置了在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>

在更新或删除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>