programing

liquibase가 있는 Java에서 오래된 데이터베이스 스키마를 새 데이터베이스 스키마로 업데이트하는 방법

instargram 2023. 10. 14. 09:32
반응형

liquibase가 있는 Java에서 오래된 데이터베이스 스키마를 새 데이터베이스 스키마로 업데이트하는 방법

저와 저희 팀은 다른 팀과 따로 프로젝트를 진행했습니다.그 팀은 2년 동안 이 프로젝트에 참여했고 이제는 전체 프로젝트를 남겨두고 떠납니다. 지난 2개월 동안 우리는 프로젝트에 대해 배우고 몇 가지 기능(다중 통화, 새로운 온보드 프로세스 등)을 추가해야 했습니다. 이 기능은 데이터베이스의 새로운 열, 새로운 테이블 등을 의미합니다.또한 기존 운영 데이터베이스를 새 데이터베이스로 업데이트해야 합니다. 이 데이터베이스를 그냥 삭제하고 새 스크립트로 새로 시작할 수는 없습니다.향후 Java Spring에서 이 테이블과 다른 마이그레이션을 위해 일반 스크립트를 생성하려고 합니다. "이 테이블을 가져다가 이 열이 없으면 이 열을 추가합니다. 그러나 테이블이 존재하고 비어 있거나 null인 경우 이 데이터를 추가합니다(예: 모든 사용자가 가져야 하는 phone_number, 없는 경우 자동 증분을 추가합니다: 00000).001, 00000002 등이며, 그 후 사용자에게 전화 확인을 요청하고 0000001, 0000002)을 재정의해야 합니다."이를 통해 기존 스키마를 새 스키마와 똑같이 만들 수 있으며 인터페이스 같은 것을 만들어 이러한 마이그레이션을 보다 포괄적으로 수행하고자 합니다.어떻게 해결하는 것이 최선이라고 생각하십니까?

감사해요!

"오래된 스키마"에 필요한 변화가 무엇인지 알고 있으며, 이를 기꺼이 구현할 수 있기 때문에 Liquibase는 편리한 솔루션처럼 보입니다.

스키마를 업데이트하는 데 필요한 changeSets를 작성해야 합니다.

Liquibase는 기본적인 마이그레이션 내용을 스크립트로 작성할 수 있을 만큼 많은 변경 사항을 제공합니다.

새 테이블을 추가하려면 createTable change:

<changeSet id="foo" author="bar">
    <preConditions onFail="MARK_RAN">
        <not>
            <tableExists tableName="your_table"/>
        </not>
    </preConditions>
    <createTable tableName="your_table">
        <!-- your columns here -->
    </createTable>
</changeSet>

열을 추가하는 경우 addColumn change:

<changeSet id="foo2" author="bar">
    <preConditions onFail="MARK_RAN">
        <not>
            <columnExists tableName="your_table" columnName="your_column"/>
        </not>
    </preConditions>
    <addColumn tableName="your_table">
        <column name="your_column" type="integer">
            <constraints nullable="false"/>
        </column>
    </addColumn>
</changeSet>

데이터 업데이트의 경우 다음과 같은 업데이트 변경을 사용할 수 있습니다.

<changeSet id="foo3" author="bar">
    <preConditions onFail="MARK_RAN">
        <columnExists tableName="your_table" columnName="your_column"/>
    </preConditions>
    <update tableName="your_table">
        <column name="your_column" value="123"/>
        <where>your_column IS NULL</where>
    </update>
</changeSet>

기본 SQL 요청의 경우 sql change를 사용할 수 있습니다.

<changeSet id="foo4" author="bar">
    <preConditions onFail="MARK_RAN">
        <sqlCheck expectedResult="1">
            <!-- something like -->
            SELECT * from your_table where your_column = 100;
        </sqlCheck>
    </preConditions>
    <sql>DELETE FROM your_table WHERE your_column=100</sql>
</changeSet>

뭐 이런 거.모든 changeSets를 databaseChangeLog에 묶고 changeLogs를 응용프로그램에 추가하면 "오래된 스키마" 업데이트를 시작할 수 있습니다!

언급URL : https://stackoverflow.com/questions/61246421/how-to-update-old-database-schema-to-new-one-in-java-with-liquibase

반응형