alter table an Bedingung knüpfen

alter table an Bedingung knüpfen

am 22.04.2007 14:45:52 von Thomas Baum

Hallo,

ich möchte einen alter table Befehl an eine Bedingung knüpfen, habe aber
leider keine Idee wie das funktionieren kann. Das ganze sollte unter 4.0.x
laufen, wie auch unter 5.0.x

Ich hatte mir folgendes vorgestellt:

IF Index auf Tabelle existiert nicht THEN
lege Index an
ELSE
tue nichts
ENDIF

Hat einer eine Idee, wie das gehen könnte oder welches die richtigen
Suchwörter für google sind?

Viele Grüße

Thomas

--

Re: alter table an Bedingung knüpfen

am 22.04.2007 15:34:33 von Dominik Echterbruch

Thomas Baum schrieb:
>
> ich möchte einen alter table Befehl an eine Bedingung knüpfen, habe aber
> leider keine Idee wie das funktionieren kann. Das ganze sollte unter 4.0.x
> laufen, wie auch unter 5.0.x

Schade, daß das auf so steinalten Versionen noch lauffähig sein soll.
Sonst gäbe es die Möglichkeit, eine Stored Procedure [1] zu bauen, die
das Vorhandensein prüft und im negativen Fall den Index anlegt.

> Hat einer eine Idee, wie das gehen könnte oder welches die richtigen
> Suchwörter für google sind?

Die einzige Idee, die ich jetzt habe ist, das ALTER TABLE einfach
auszuführen. Existiert bereits ein Index mit dem gleichen Namen, gibt es
eine Fehlermeldung, ansonsten funktioniert es einfach.

Alternativ kannst du natürlich über ein Stück externen Code erst prüfen,
ob das Teil existiert und wenn nicht, das Statement absetzen.

Ebenfalls gerne genutzt: Eine Versionskontrolle innerhalb der DB und
dann alle ausführen, was zwischen der aktuell in der DB vorhandenen
Version und der neuesten verfügbaren liegt. Dann darf halt niemand etwas
manuell ändern...

[1] http://dev.mysql.com/doc/refman/5.0/en/stored-procedures.htm l

Grüße,
Dominik

Re: alter table an Bedingung knüpfen

am 23.04.2007 07:41:10 von Andreas Kretschmer

Andreas
--
Andreas Kretschmer
Linux - weil ich es mir wert bin!
GnuPG-ID 0x3FFF606C http://wwwkeys.de.pgp.net
Deutsche PostgreSQL User Group: http://pgug.de

Re: alter table an Bedingung knüpfen

am 23.04.2007 08:06:46 von Kai Ruhnau

Andreas Kretschmer wrote:
> begin Dominik Echterbruch schrieb:
>>> Hat einer eine Idee, wie das gehen könnte oder welches die richtigen
>>> Suchwörter für google sind?
>> Die einzige Idee, die ich jetzt habe ist, das ALTER TABLE einfach
>> auszuführen. Existiert bereits ein Index mit dem gleichen Namen, gibt es
>> eine Fehlermeldung, ansonsten funktioniert es einfach.
>
> Gibt es denn keine Katalog-Tabellen zum nachguggen?

In 5.0 ja. Der OP fragte aber leider nach Kompatibilität bis 4.0.

Grüße
Kai

--
This signature is left as an exercise for the reader.

Re: alter table an Bedingung knüpfen

am 23.04.2007 16:20:42 von Joachim Durchholz

Kai Ruhnau schrieb:
> Andreas Kretschmer wrote:
>> begin Dominik Echterbruch schrieb:
>>>> Hat einer eine Idee, wie das gehen könnte oder welches die richtigen
>>>> Suchwörter für google sind?
>>> Die einzige Idee, die ich jetzt habe ist, das ALTER TABLE einfach
>>> auszuführen. Existiert bereits ein Index mit dem gleichen Namen, gibt
>>> es eine Fehlermeldung, ansonsten funktioniert es einfach.
>>
>> Gibt es denn keine Katalog-Tabellen zum nachguggen?
>
> In 5.0 ja. Der OP fragte aber leider nach Kompatibilität bis 4.0.

Es gibt doch die SHOW-Befehle; soweit ich das überblicke, kann man damit
so ziemlich alle Metadaten auslesen, und zwar schon aufgeschlüsselt
(z.B. eine Zeile pro Feld des Index, je eine Spalte für Feldname,
Indextyp usw.)

Man kriegt es wahrscheinlich nicht mit einer einzigen Query hin, aber
mit SHOW INDEX FROM kann man auf jeden Fall nachschauen,
welche Indexe es bereits gibt, und ggf. fehlende Indexe mit einem
separaten ALTER TABLE nachrüsten.

Re: alter table an Bedingung knüpfen

am 23.04.2007 19:35:56 von Dominik Echterbruch

Joachim Durchholz schrieb:
>>>> Die einzige Idee, die ich jetzt habe ist, das ALTER TABLE einfach
>>>> auszuführen. Existiert bereits ein Index mit dem gleichen Namen,
>>>> gibt es eine Fehlermeldung, ansonsten funktioniert es einfach.
>
> Es gibt doch die SHOW-Befehle; soweit ich das überblicke, kann man damit
> so ziemlich alle Metadaten auslesen, und zwar schon aufgeschlüsselt
> (z.B. eine Zeile pro Feld des Index, je eine Spalte für Feldname,
> Indextyp usw.)

Sicher gibt es die. Und ich hatte ja auch einen Absatz dazu geschrieben.
Meine Aussage wurde nur leider völlig aus dem Zusammenhang gerissen ;)

> Man kriegt es wahrscheinlich nicht mit einer einzigen Query hin, aber
> mit SHOW INDEX FROM kann man auf jeden Fall nachschauen,
> welche Indexe es bereits gibt, und ggf. fehlende Indexe mit einem
> separaten ALTER TABLE nachrüsten.

Genau so hatte ich mir das vorgestellt. Aber wir wissen ja nicht, ob es
noch eine Anwendung außenrum gibt, die das Ergebnis auswerten würde.
Deshalb habe ich auch die o.g. Option angeführt.

Grüße,
Dominik