Seite 1 von 1

(gelöst) Index löschen bei gesplitteter HSQL-Datenbank?

Verfasst: Di 15. Aug 2017, 09:58
von Freischreiber
Hallo,

weiß jemand, wie man überflüssige Indizes aus einer gesplitteten HSQL-Datenbank entfernen kann?

In der Base-Tabellenbearbeitung werden die Indizes zwar angezeigt, aber ich kann sie nicht löschen. Es kommt immer die Fehlermeldung
unexpected token: ON
.

Auch manche Versuche, einen neuen Index anzulegen, scheitern. Beispiel:
object name already exists: Index1 in statement [CREATE INDEX "Index1" ON "t-adressen" ( "Erfasszeit" ASC)]
Das, obwohl noch gar kein Index1 angezeigt wird in der Übersicht.

Gruß
Freischreiber

Re: Index löschen bei gesplitteter HSQL-Datenbank?

Verfasst: Di 15. Aug 2017, 10:53
von RobertG
Hallo Freischreiber,

sobald Du einen Primärschlüssel für eine Tabelle definierst erstellst Du einen Index. Lass einmal

Code: Alles auswählen

SELECT "INDEX_NAME" FROM "INFORMATION_SCHEMA"."SYSTEM_INDEXINFO"
ablaufen. Funktioniert zumindest bei der internen HSQLDB 1.8 so.

Mit

Code: Alles auswählen

DROP INDEX <index> [IF EXISTS];
kannst Du (hoffentlich) einen Index entfernen, von dem Du den Namen weißt - vorausgesetzt, der Index wird nicht irgendwo für irgendwelche Beziehungen gesperrt.

Vielleicht kann die Indizierung über die GUI tatsächlich nur ordnungsgemäß mit der internen Datenbank HSQLDB 1.8 zusammen arbeiten. Mit

Code: Alles auswählen

CREATE [UNIQUE] INDEX <index> ON <table> (<column> [DESC] [, ...]) [DESC];
müsste ein Index dort erstellt werden.

Das gilt so auch wohl für die aktuelle HSQLDB. Schau einmal hier: http://hsqldb.org/doc/2.0/guide/databas ... chapt.html

Gruß

Robert

Re: Index löschen bei gesplitteter HSQL-Datenbank?

Verfasst: Di 15. Aug 2017, 11:21
von Freischreiber
Hallo Robert,

hab vorhin vergessen, den Screenshot hochzuladen:
hsql-index-löschen-fehlermeldung.png
hsql-index-löschen-fehlermeldung.png (9.86 KiB) 3742 mal betrachtet

Mit

Code: Alles auswählen

DROP INDEX PUBLIC.Vorname IF EXISTS; 
kommt zwar ein "Befehl erfolgreich ausgeführt", aber der Index bleibt. Schon seltsam, das scheint von Base aus nicht zu gehen.

Kann es sein, daß ein Index wie "Vorname" für eine Beziehung gesperrt ist, obwohl zu dem Feld gar keine Beziehungen bestehen, sondern nur zur ID dieser Adresstabelle?

Gruß
Freischreiber

Re: Index löschen bei gesplitteter HSQL-Datenbank?

Verfasst: Di 15. Aug 2017, 11:30
von Freischreiber
Ich verstehe schon diese Syntax nicht ganz:
DROP INDEX
drop index statement
<drop index statement> ::= DROP INDEX [ IF EXISTS ] <index name> [ IF EXISTS ]
Destroy an index.
IF EXISTS führt dazu, daß ich keine Fehlermeldung bekomme, wenn der Name falsch ist. Wenn ich es weglasse, bekomme ich
user lacks privilege or object not found: VORNAME in statement [DROP INDEX PUBLIC.Vorname]
,
obwohl der Name angezeigt wurde nach der von dir beschriebenen Select-Anweisung.

Mit oder ohne PUBLIC dieselbe Fehlermeldung. Seltsam

Gruß
Freischreiber

Re: Index löschen bei gesplitteter HSQL-Datenbank?

Verfasst: Di 15. Aug 2017, 12:16
von RobertG
Hallo Freischreiber,
user lacks privilege or object not found: VORNAME in statement [DROP INDEX PUBLIC.Vorname]
zeigt für mich, dass in SQL der "Vorname" zu VORNAME wird.

Code: Alles auswählen

DROP INDEX PUBLIC."Vorname"
... hilft vielleicht.

Gruß

Robert

Re: Index löschen bei gesplitteter HSQL-Datenbank?

Verfasst: Di 15. Aug 2017, 12:22
von Pit Zyclade
Bin nur Laie, aber m.W. muß man beim Index-löschen per GUI erst einen neuen anlegen, bevor man gut löschen kann.
Experimentell geht folgendes: Tabelle kopieren und einfügen mit neuem Namen. Da wird man gefragt, ob man einen neuen Index anlegen will. Hernach kann man diese neue Tabelle bearbeiten und den alten Index löschen. Man merkt auch, dass der neue Schlüssel, egal wie man ihn benennt, auch "Vorname" ist möglich, integer ist.
Ein bereits vorgefundener "Index" namens "Vorname" läßt vermuten, dass der nie integer oder tinyinteger war...
(Hoffentlich nicht zu ungebildeter Beitrag)
Gruß
Pit

Re: Index löschen bei gesplitteter HSQL-Datenbank?

Verfasst: Di 15. Aug 2017, 14:49
von Freischreiber
Hallo Robert,

Danke, JETZT verstehe ich: die Anführungszeichen braucht es, damit im Kommando aus der kombinierten Groß-/Kleinschreibung keine reinen Großbuchstaben werden - die in der DB nicht vorkommen. Es klappt mit Anführungszeichen! Und für den zweiten Vornamenindex offenbar tatsächlich
DROP INDEX PUBLIC."PUBLIC.Vorname"
In der GUI sehen kann man es wie üblich erst nach einem Neustart von Base.

:?: Kann ich davon ausgehen, daß die von der Datenbank selbst angelegten Indizes alle "...SYS_IDX_SYS_PK..." etc heißen? Und somit sinnvoll sind? Und ich die handangelegten und -getauften Indizes lieber lösche? Davon habe ich nämlich einige.

Hallo Pit,

das Kopieren der Tabelle wollte ich unbedingt vermeiden. Das ist bei einer gesplitteten DB nämlich auch ein ziemlicher Act: Kopieren, Beziehungen raus, Löschen, Beziehungen an die neue Tabelle ran, und dazwischen diverse Neustarts. So ist es mir wesentlich lieber.

Gruß
Freischreiber

Re: Index löschen bei gesplitteter HSQL-Datenbank?

Verfasst: Di 15. Aug 2017, 16:12
von RobertG
Hallo Freischreiber,

die von der Datenbank angelegten Indices enthalten die Primärschlüssel und die Verbindungen von einer Tabelle zur anderen (Primärschlüssel > Fremdschlüssel). Die lass ruhig da stehen, wenn Du nicht größere Probleme bekommen willst.

Gruß

Robert

Re: Index löschen bei gesplitteter HSQL-Datenbank?

Verfasst: Mi 16. Aug 2017, 10:28
von Freischreiber
Hallo Robert,

alles klar. So, die Aktion war nötig, da ich auf manchen Spalten mehrere gleiche Indizes hatte.
Vielen Dank!

Gruß
Freischreiber