| PostgreSQL: Das Offizielle Handbuch | ||||
|---|---|---|---|---|
| Zurück | Schnell zurück | Schnell nach vorne | Nach vorne | |
REINDEX baut einen Index anhand der Daten in der Tabelle neu auf und ersetzt die alte Version des Index. Es gibt zwei hauptsächliche Gründe, warum man REINDEX verwenden würde:
Ein Index wurde zerstört oder verfälscht und enthält keine gültigen Daten mehr. Obwohl das theoretisch nie passieren sollte, kann es aufgrund von Software- oder Hardwarefehlern vorkommen. REINDEX ist eine Methode um solche Situationen zu bereinigen.
Der betroffene Index enthält viele tote Indexseiten, die nicht wiederverwendet werden können. Das kann bei B-Tree-Indexen in PostgreSQL bei bestimmten Zugriffsmustern auftreten. Mit REINDEX kann der Platzverbrauch eines Index verringert werden, weil eine neue Version des Index ohne die toten Seiten geschrieben wird. Weitere Informationen dazu finden Sie in Abschnitt 21.2.
Wenn Sie einen verfälschten Index für eine Benutzertabelle vermuten, dann können Sie diesen Index oder alle Indexe der Tabelle einfach mit REINDEX INDEX oder REINDEX TABLE neu aufbauen lassen. Eine andere Möglichkeit ist, den Index einfach zu löschen und neu zu erzeugen. Das ist eigentlich auch besser, wenn Sie die Tabelle währenddessen einigermaßen normal weiterverwenden wollen. REINDEX sperrt die Tabelle exklusiv, während CREATE INDEX nur Schreibvorgänge, aber keine Lesevorgänge aussperrt.
Etwas schwieriger wird es bei einem verfälschten Systemindex. In dem Fall ist es wichtig, dass das System den in Frage stehenden Index nicht selbst schon verwendet hat. (In solchen Fällen kann es sein, dass Serverprozesse beim Start sofort abstürzen, weil Sie verfälschte Systemindexe zu verwenden versuchen.) Um das System sicher zu reparieren muss der Server heruntergefahren werden und eine Sitzung im Einzelbenutzermodus mit den Kommandozeilenoptionen -O und -P gestartet werden. (Diese Optionen erlauben Veränderungen an den Systemtabellen bzw. unterbinden die Verwendung der Systemindexe.) Dann kann man REINDEX DATABASE, REINDEX TABLE oder REINDEX INDEX ausführen, je nachdem, wie viel man reparieren muss. Im Zweifelsfall verwenden Sie REINDEX DATABASE FORCE um alle Systemindexe in der Datenbank neu aufzubauen. Danach verlassen Sie die Einzelbenutzersitzung und starten den richtigen Server neu.
Informationen über die Verwendung des Einzelbenutzerservers finden Sie unter postgres.
Baut alle Systemindexe in der angegebenen Datenbank neu auf. Indexe für Benutzertabellen sind nicht betroffen. Diese Form von REINDEX kann nur im Einzelbenutzermodus ausgeführt werden (siehe oben).
Baut alle Index der angegebenen Tabelle neu auf.
Baut den angegebenen Index neu auf.
Der Name der bestimmten Datenbank, Tabelle oder des Index, der neu indiziert werden soll. Tabellen- und Indexnamen können eine Schemaqualifikation haben.
Erzwingt die Erneuerung von Systemindexen. Ohne dieses Schlüsselwort überspringt REINDEX Systemindexe, die nicht als ungültig markiert worden sind. FORCE hat keine Bedeutung bei REINDEX INDEX oder wenn Benutzerindexe erneuert werden.
Baue alle Index für die Tabelle meine_tabelle neu auf:
REINDEX TABLE meine_tabelle;
Baue einen einzelnen Index neu auf:
REINDEX INDEX mein_index;
Baue alle Systemindexe neu auf (das funktioniert nur im Einzelbenutzermodus):
REINDEX DATABASE meine_datenbank FORCE;
| Zurück | Zum Anfang | Nach vorne |
| PREPARE | Nach oben | RESET |