2015-11-24 19 views
11

Belli bir tablodan maksimum sütun değeri elde etmenin mümkün olup olmadığını ve hiç bir düz sql olmadan başlatma sırası değeri olarak ayarlanıp ayarlanamayacağını merak ediyorum. Aşağıdaki kod çalışmaz: Maksimum sütun değerini, başlangıç ​​tablo değeri olarak likit başlangıç ​​etiketleriyle ayarlayın

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

bir hata var: Ben aynı sonucu select ... vb etrafında hiçbir parantez ile denedim

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

. Yani, hesaplanan değeri başlangıç ​​dizisi değeri olarak kullanmak mümkün değil mi?

+1

, (some_table öğesinden maks (id) +1'i seçin))). –

+0

Yapılandırma dosyanızın kalanını yükleyebilir misiniz? Hangi ortamda likitibaz kullanıyorsunuz? –

+0

Norbert, Java8, Spring-boot 1.2.6, Liquibase 3.4.1, yürütme için Postgres (9.3-1102-jdbc41) ve testler için H2. – dfche

cevap

4

Yani, böyle bir çözüm benim için çalıştı: Aklıma gelen tek şey setval ('id_seq' seçeneğini `çalıştırmak için bir` `etiketi sonra, diziyi oluşturmak kullanmaktır Postgres için

<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> 
İlgili konular