2015-11-24 15 views
11

特定のテーブルから最大のカラム値を取得し、それを純粋なsqlなしの開始シーケンス値として設定できるかどうか疑問です。次のコードは動作しません:最大カラム値をliquibaseタグでシーケンス開始値として設定

<property name="maxId" value="(select max(id)+1 from some_table)" dbms="h2,mysql,postgres"/> 
    <changeSet author="author (generated)" id="1447943899053-1"> 
     <createSequence sequenceName="id_seq" startValue="${maxId}" incrementBy="1"/> 
    </changeSet> 

エラーを得た:

Caused by: liquibase.parser.core.ParsedNodeException: java.lang.NumberFormatException: For input string: "${m" 

私は同じ結果となどselect ...周りにいない括弧でそれを試してみました。 計算値を開始シーケンス値として使用することはできませんか?

+1

をPostgresのために私は考えることができる唯一のことは、シーケンスを作成し、その後、SETVAL選択 '実行するために' 'タグ(「id_seq」を使用、(select max(id)+1 some_tableから)); '。 –

+0

残りの設定ファイルを投稿できますか?どのような環境であなたはliquibaseを使用していますか? –

+0

Norbert、Java8、Spring-boot 1.2.6、Liquibase 3.4.1、実行のためのPostgres(9.3-1102-jdbc41)、テストのためのH2。 – dfche

答えて

4

ので、このようなソリューションは、私の仕事:

<changeSet author="dfche" id="1448634241199-1"> 
    <createSequence sequenceName="user_id_seq" startValue="1" incrementBy="1"/> 
</changeSet> 
<changeSet author="dfche" id="1448634241199-2"> 
    <sql dbms="postgresql">select setval('user_id_seq', max(id)+1) from jhi_user</sql> 
    <sql dbms="h2">alter sequence user_id_seq restart with (select max(id)+1 from jhi_user)</sql> 
</changeSet> 
関連する問題