2017-03-03 5 views
1

여러 스키마가 있습니다 (2). 테이블을 생성 할 때 테이블간에 FK를 생성 할 수 없습니다. 모든 FK는 하나의 스키마 내에 있습니다. FK를 제거하면 잘 생성됩니다.liqubase에 여러 스키마가있는 외래 키를 생성 할 수 없습니다.

는 내가 무엇을 시도했다

mvn clean liquibase:update -Dt1Schema=t1 -Dt2Schema=t2 

로 실행

<changeSet id="0" author="admin"> 
    <createTable tableName="t1" remarks="t1" schemaName="${t1Schema}"> 
     <column name="id" type="BIGINT" autoIncrement="true" remarks="id"> 
      <constraints primaryKey="true" nullable="false"/> 
     </column> 
    </createTable> 

    <createTable tableName="t2" remarks="t2" schemaName="${t1Schema}"> 
     <column name="id" type="BIGINT" autoIncrement="true" remarks="id"> 
      <constraints primaryKey="true" nullable="false"/> 
     </column> 
     <column name="t1_id" type="BIGINT" remarks="t1 id"> 
      <constraints nullable="true" deferrable="true" foreignKeyName="fk_t1_t2" referencedTableName="${t1Schema}.t1" referencedColumnNames="id"/> 
     </column> 
    </createTable> 
</changeSet> 

내가 얻을 :

ERROR: relation "teeregister.t1" does not exist [Failed SQL: CREATE TABLE teeregister.t2 ...

<changeSet id="0" author="admin"> 
    <createTable tableName="t1" remarks="t1" schemaName="${t1Schema}"> 
     <column name="id" type="BIGINT" autoIncrement="true" remarks="id"> 
      <constraints primaryKey="true" nullable="false"/> 
     </column> 
    </createTable> 

    <createTable tableName="t2" remarks="t2" schemaName="${t1Schema}"> 
     <column name="id" type="BIGINT" autoIncrement="true" remarks="id"> 
      <constraints primaryKey="true" nullable="false"/> 
     </column> 
     <column name="t1_id" type="BIGINT" remarks="t1 id"> 
      <constraints nullable="true"/> 
     </column> 
    </createTable> 
</changeSet> 

<changeSet id="1" author="admin"> 
    <addForeignKeyConstraint baseColumnNames="t1_id" baseTableName="${t1Schema}.t2" constraintName="fk_t1_t2" referencedColumnNames="id" referencedTableName="${t1Schema}.t1"/> 
</changeSet> 

내가 얻을 :

ERROR: relation "teeregister.t2" does not exist [Failed SQL: ALTER TABLE "teeregister.t2" ADD CONSTRAINT ...

이 잘 작동

내가 할 필요가 모든 몇 가지 문서를 읽어

<plugin> 
    <groupId>org.liquibase</groupId> 
    <artifactId>liquibase-maven-plugin</artifactId> 
    <version>3.5.1</version> 
    <configuration> 
     <changeLogFile>src/main/resources/schema1.xml</changeLogFile> 
     <changeLogFile>src/main/resources/schema2.xml</changeLogFile> 
     <driver>org.postgresql.Driver</driver> 
     <url>jdbc:postgresql://localhost:5432/postgres</url> 
     <username>postgres</username> 
     <password>postgres</password> 
    </configuration> 
</plugin> 

답변

1

의 pom.xml 구성 ...

<addForeignKeyConstraint baseColumnNames="t1_id" baseTableSchemaName="${t1Schema}" baseTableName="t2" constraintName="fk_t1_t2" referencedColumnNames="id" referencedTableSchemaName="${t1Schema}" referencedTableName="t1"/>