2014-04-03 2 views
1

여기에서는 Java/Spring에서 liquibase changeset를 사용하는 스키마를 설정하고 있습니다. 테이블/키 생성 작업이 끝날 때까지는. 그러나 사용자 지정 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"를 추가해야했습니다. 아무도 이것에 대한 해결책이나 해결책을 알고 있습니까? 여기에 해결 방법이 있습니다 @pozs가 지적했듯이

<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> 
+1

어쩌면 http://forum.liquibase.org/topic/setting-default-schema-working-for-xml-refactorings-but-not-sql? – pozs

답변

2

: 이 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 :

,210
<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> 

관련 문제