Mi chiedo se sia possibile ottenere il massimo valore di colonna da una determinata tabella e impostarlo come valore di sequenza iniziale senza sql puro. Il seguente codice non funziona:Imposta il valore massimo della colonna come valore iniziale della sequenza con i tag 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>
ottenuto un errore:
Caused by: liquibase.parser.core.ParsedNodeException: java.lang.NumberFormatException: For input string: "${m"
ho provato senza parentesi attorno select ...
ecc con lo stesso risultato. Quindi non è possibile usare il valore calcolato come valore di sequenza iniziale?
Per Postgres l'unica cosa che mi viene in mente è quello di creare la sequenza, quindi utilizzare un tag '' per eseguire 'selezionare setval ('id_seq' , (seleziona max (id) +1 da some_table)); '. –
Puoi pubblicare il resto del tuo file di configurazione? In che ambiente stai usando il liquibase? –
Norbert, Java8, Spring-boot 1.2.6, Liquibase 3.4.1, Postgres (9.3-1102-jdbc41) per l'esecuzione e H2 per i test. – dfche