sto inizializzazione di una banca dati HSQL 2.2.9 tramite Spring utilizzaHSQL: creazione dell'indice se non esistenti
<jdbc:initialize-database enabled="true">
<jdbc:script execution="INIT" location="classpath:./create-tables.sql" />
</jdbc:initialize-database>
Nel creare-tables.sql utilizzare
CREATE TABLE IF NOT EXISTS MyTable(...);
Il tavolo ha anche una indice. Sto cercando un modo migliore di perdere sempre e creare l'indice.
ho provato:
CREATE INDEX IF NOT EXISTS myIndex ...;
- non funziona
posso creare una funzione indexExisting() controllando le tabelle di sistema e il ritorno count (*)> 0 se viene rilevato l'indice , ma se scrivo
IF indexExisting() = 0 THEN ...
direttamente nel file .sql, si dice
java.sql.SQLSyntaxErrorException: unexcepted token: IF
Anche una procedura memorizzata non sembra essere d'aiuto, in quanto potrebbero non contenere istruzioni DROP, per quanto ho letto.
Sarebbe gradita una soluzione diversa dall'abbandonare/creare l'indice.
Grazie
preferirei correre tutte le dichiarazioni di migrazione dello schema utilizzando uno strumento come Liquibase o Flyway che tiene traccia di ciò che è stato applicato e cosa deve essere fatto –
Grazie, controllerò questi strumenti. Lo script sql ha un altro difetto, generando un'eccezione quando si tenta di eliminare l'indice non ancora esistente. Per ora, l'ho modificato per inizializzare le tabelle e gli indici tramite la classe, in cui è possibile rilevare l'eccezione. – pma
'drop index se esiste my_index' funzionerà nel modo previsto. Tuttavia, 'crea indice se non esiste my_index su my_table (my_column)' creerà un indice chiamato 'if'. Avrà le caratteristiche esatte che hai inteso, ad eccezione del nome e del fatto che è stato creato incondizionatamente e fallirà se eseguito due volte. Ancora alla ricerca di una soluzione da solo - il calo e la ricomposizione dell'indice ogni volta possono diventare piuttosto costosi su un DB di grandi dimensioni. – user149408