bestehende ich eine HSQL Datenbank 2.2.9 über Frühling bin Initialisierung mitHSQL: Index erstellen, wenn nicht
<jdbc:initialize-database enabled="true">
<jdbc:script execution="INIT" location="classpath:./create-tables.sql" />
</jdbc:initialize-database>
In create-tables.sql Ich benutze
CREATE TABLE IF NOT EXISTS MyTable(...);
Die Tabelle ein auch hat Index. Ich suche nach einem besseren Weg, als immer den Index fallen zu lassen und zu erstellen.
Ich habe versucht:
CREATE INDEX IF NOT EXISTS myIndex ...;
- nicht
ich eine Funktion indexExisting erstellen funktioniert() überprüft die Systemtabellen und Rückkehr count (*)> 0, wenn der Index gefunden wird , aber wenn ich schreibe
IF indexExisting() = 0 THEN ...
direkt in die .SQL-Datei, heißt es
Auch eine gespeicherte Prozedur scheint nicht zu helfen, da sie DROP-Anweisungen möglicherweise nicht enthalten, so weit ich gelesen habe.
Also eine andere Lösung als das Fallenlassen/Erstellen des Index würde geschätzt werden.
Danke
Ich würde eher laufen alle Schema Aussagen Migration ein Tool wie Liquibase oder Flyway verwendet, die Spur hält, was angewendet wurde und Was getan werden muss. –
Danke, ich werde diese Tools überprüfen. Das sql-Skript hat einen weiteren Fehler und löst eine Ausnahme aus, wenn versucht wird, den noch nicht vorhandenen Index zu löschen. Vorläufig habe ich es geändert, um die Tabellen und Indizes über die Klasse zu initialisieren, wo die Ausnahme abgefangen werden kann. – pma
'Drop-Index, wenn vorhanden my_index' funktioniert in der erwarteten Weise. 'Create index if not exists my_index on my_table (my_column)' erstellt einen Index mit dem Namen 'if'. Es wird die genauen Merkmale haben, die Sie beabsichtigt haben, außer dem Namen und der Tatsache, dass es bedingungslos erstellt wurde und bei zweimaliger Ausführung fehlschlägt. Immer noch auf der Suche nach einer Lösung - das Löschen und erneute Erstellen des Index jedes Mal kann in einer großen Datenbank ziemlich teuer werden. – user149408