| PostgreSQL: Das Offizielle Handbuch | ||||
|---|---|---|---|---|
| Zurück | Schnell zurück | Schnell nach vorne | Nach vorne | |
ALTER TABLE [ ONLY ] tabelle [ * ]
ADD [ COLUMN ] spalte typ [ spalten_constraint [ ... ] ]
ALTER TABLE [ ONLY ] tabelle [ * ]
DROP [ COLUMN ] spalte [ RESTRICT | CASCADE ]
ALTER TABLE [ ONLY ] tabelle [ * ]
ALTER [ COLUMN ] spalte { SET DEFAULT wert | DROP DEFAULT }
ALTER TABLE [ ONLY ] tabelle [ * ]
ALTER [ COLUMN ] spalte { SET | DROP } NOT NULL
ALTER TABLE [ ONLY ] tabelle [ * ]
ALTER [ COLUMN ] spalte SET STATISTICS ganze_zahl
ALTER TABLE [ ONLY ] tabelle [ * ]
ALTER [ COLUMN ] spalte SET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN }
ALTER TABLE [ ONLY ] tabelle [ * ]
RENAME [ COLUMN ] spalte TO neue_spalte
ALTER TABLE tabelle
RENAME TO neue_tabelle
ALTER TABLE [ ONLY ] tabelle [ * ]
ADD tabellen_constraint
ALTER TABLE [ ONLY ] tabelle [ * ]
DROP CONSTRAINT constraint_name [ RESTRICT | CASCADE ]
ALTER TABLE tabelle
OWNER TO neuer_eigentümer ALTER TABLE ändert die Definition einer bestehenden Tabelle. Es gibt mehrere Unterformen:
Diese Form fügt eine neue Spalte zur Tabelle hinzu. Die Syntax ist die selbe wie bei CREATE TABLE.
Diese Form löscht eine Spalte aus einer Tabelle. Indexe und Tabellen-Constraints, die die Spalte verwenden, werden automatisch auch gelöscht. Wenn etwas außerhalb der Tabelle von der Spalte abhängt, wie zum Beispiel Fremdschlüssel oder Sichten, dann müssen Sie CASCADE angeben.
Diese Form stellt den Vorgabewert einer Spalte ein oder löscht einen Vorgabewert. Die Vorgabewerte werden erst bei nachfolgenden INSERT-Befehlen angewendet; die Zeilen, die schon in der Tabelle sind, werden nicht geändert. Vorgabewerte können auch für Sichten gesetzt werden, was dazu führt, dass sie in INSERT-Befehle für die Sicht eingesetzt werden, bevor die ON INSERT-Regel der Sicht angewendet wird.
Diese Formen ändern, ob die Spalte NULL-Werte akzeptiert oder ablehnt. SET NOT NULL können Sie nur verwenden, wenn die Spalte keine NULL-Werte enthält.
Diese Form setzt das spaltenspezifische Statistikziel für nachfolgende ANALYZE-Operationen. Der Wert kann zwischen 0 und 1000 sein, oder -1 um die Standardeinstellung zu verwenden.
Diese Form setzt den Speichermodus einer Spalte. Dieser kontrolliert, ob die Spalte direkt in der Tabelle gespeichert oder in einer Nebentabelle angelegt werden soll und ob die Daten komprimiert werden sollen. PLAIN muss für Werte mit fester Länge, wie integer, verwendet werden und speichert die Werte in der Haupttabelle und unkomprimiert. MAIN speichert die Werte in der Haupttabelle, aber eventuell komprimiert. EXTERNAL ist für externe, unkomprimierte Daten und EXTENDED ist für externe, komprimierte Daten. EXTENDED ist die Voreinstellung für alle Datentypen, die diesen Modus unterstützen. Wenn Sie EXTERNAL verwenden, dann wird zum Beispiel das Abfragen von Teilzeichenketten aus text-Spalten schneller, aber die Speicheranforderungen erhöhen sich.
Die RENAME-Formen ändern den Namen einer Tabelle (oder eines Index, einer Sequenz, einer Sicht) oder den Namen einer einzelnen Spalte in der Tabelle. Sie haben keine Auswirkungen auf die gespeicherten Daten.
Diese Form erzeugt einen neuen Constraint in der Tabelle, mit der gleichen Syntax wie bei CREATE TABLE.
Diese Form löscht Constraints aus einer Tabelle. Gegenwärtig müssen Constraints keine eindeutigen Namen haben, daher könnten mehrere Constraints mit dem angegebenen Namen übereinstimmen. Alle diese Constraints würden dann gelöscht werden.
Diese Form ändert den Eigentümer der Tabelle, des Index, der Sequenz oder der Sicht auf den angegebenen Benutzer.
Sie müssen der Eigentümer der Tabelle sein um ALTER TABLE verwenden zu können, außer für ALTER TABLE OWNER, was nur von Superusern ausgeführt werden kann.
Der Name der zu ändernden Tabelle (möglicherweise mit Schemaqualifikation). Wenn ONLY angegeben wird, dann wird nur diese Tabelle geändert. Wenn ONLY nicht angegeben wird, dann werden die Tabelle und alle Kindtabellen (falls vorhanden) geändert. * kann an den Tabellennamen angehängt werden um anzugeben, dass Kindtabellen geändert werden sollen, aber in der aktuellen Version ist das das Standardverhalten. (In Versionen vor 7.1 war ONLY das Standardverhalten. Das Standardverhalten kann mit dem Konfigurationsparameter sql_inheritance eingestellt werden.)
Name der neuen oder einer bestehenden Spalte.
Datentyp der neuen Spalte.
Neuer Name für eine vorhandene Spalte.
Neuer Name für die Tabelle.
Neuer Tabellen-Constraint für die Tabelle.
Name eines bestehenden Constraints, der gelöscht werden soll.
Der Benutzername des neuen Eigentümers der Tabelle.
Löscht automatisch alle Objekte, die von der gelöschten Spalte bzw. dem gelöschten Constraint abhängen (zum Beispiel Sichten, die die Spalte verwenden).
Weigert sich, die Spalte bzw. den Constraint zu löschen, wenn Objekte davon abhängen. Das ist das Standardverhalten.
Meldung bei erfolgreichem Abschluss der Operation.
Meldung, wenn die Spalte oder die Tabelle nicht existiert.
Das Schlüsselwort COLUMN ist nur Dekoration und kann weggelassen werden.
In der gegenwärtigen Implementierung von ADD COLUMN werden die Klauseln DEFAULT und NOT NULL nicht unterstützt. Die neue Spalte hat immer den NULL-Wert in allen Zeilen. Mit der SET DEFAULT-Form von ALTER TABLE können Sie nachher den Vorgabewert einstellen. (Dann sollten Sie vielleicht auch mit UPDATE den neuen Vorgabewert in die bestehenden Zeilen einsetzen.) Wenn Sie in der Spalte keine NULL-Werte haben wollen, dann verwenden Sie die Form SET NOT NULL, nachdem Sie in allen Zeilen für die Spalte einen richtigen Wert eingefügt haben.
Die DROP COLUMN-Form löscht die Spalte nicht wirklich, sondern macht sie zunächst unsichtbar. Nachfolgende Einfüge- und Aktualisierungsoperationen in der Tabelle werden in der Spalte einen NULL-Wert speichern. Das Löschen einer Spalte ist daher schnell, verringert aber den Speicherplatzbedarf der Tabelle nicht sofort, weil der Speicher der gelöschten Spalte nicht freigegeben wird. Der Platz wird im Verlauf der Zeit beim Aktualisieren der bestehenden Zeilen wiedergewonnen. Um den Platz sofort wiederzugewinnen, führen Sie erst ein UPDATE aus, das alle Zeilen der Tabelle berührt, und dann VACUUM. Zum Beispiel:
UPDATE tabelle SET spalte = spalte; VACUUM FULL tabelle;
Wenn eine Tabelle Kindtabellen hat, dann ist es nicht erlaubt, Spalte in der Elterntabelle hinzuzufügen oder umzubenennen ohne das gleiche auch in den Kindtabellen zu tun. Das heißt, ALTER TABLE ONLY wird nicht erlaubt. Das stellt sicher, dass alle Kindtabellen immer die gleichen Spalten wie die Elterntabelle hat.
Eine rekursive DROP COLUMN-Operation entfernt die Spalte einer Kindtabelle nur, wenn die Kindtabelle diese Spalte nicht von anderen Elterntabellen geerbt hat und nur wenn die Spalte in der Kindtabelle niemals unabhängig definiert worden ist. Ein nicht rekursives DROP COLUMN (d.h. ALTER TABLE ONLY ... DROP COLUMN) löscht niemals Spalten aus Kindtabellen, sondern markiert sie als unabhängig definiert anstatt geerbt.
Änderungen an irgendwelchen Teilen einer Systemkatalogtabelle sind nicht erlaubt.
Weitere Informationen über gültige Parameterwerte finden Sie in der Beschreibung von CREATE TABLE.
Um einer Tabelle eine Spalte vom Typ varchar hinzuzufügen:
ALTER TABLE händler ADD COLUMN adresse varchar(30);
Um eine Spalte aus einer Tabelle zu löschen:
ALTER TABLE händler DROP COLUMN adresse RESTRICT;
Um eine bestehende Spalte umzubenennen:
ALTER TABLE händler RENAME COLUMN adresse TO stadt;
Um eine bestehende Tabelle umzubenennen:
ALTER TABLE händler RENAME TO lieferanten;
Einer Spalte einen NOT-NULL-Constraint hinzuzufügen:
ALTER TABLE händler ALTER COLUMN straße SET NOT NULL;
Um einen NOT-NULL-Constraint von einer Spalte zu entfernen:
ALTER TABLE händler ALTER COLUMN straße DROP NOT NULL;
Um einer Tabelle einen Check-Constraint hinzuzufügen:
ALTER TABLE händler ADD CONSTRAINT plzchk CHECK (char_length(plz) = 5);
Um einen Check-Constraint aus einer Tabelle und allen Kindtabellen zu entfernen:
ALTER TABLE händler DROP CONSTRAINT plzchk;
Um einer Tabelle einen Fremdschlüssel hinzuzufügen:
ALTER TABLE händler ADD CONSTRAINT adrfk FOREIGN KEY (adresse) REFERENCES adressen (adresse) MATCH FULL;
Um einer Tabelle einen (mehrspaltigen) Unique Constraint hinzuzufügen:
ALTER TABLE händler ADD CONSTRAINT hdl_id_plz_schlüssel UNIQUE (hdl_id, plz);
Um einer Tabelle einen automatisch benannten Primärschlüssel-Constraint hinzuzufügen, wobei beachtet werden muss, dass eine Tabelle immer nur einen Primärschlüssel haben kann:
ALTER TABLE händler ADD PRIMARY KEY (hdl_id);
Die Form ADD COLUMN ist mit dem SQL-Standard konform, mit der Ausnahme, dass sie, wie oben beschrieben, keine Vorgabewerte und NOT-NULL-Constraints unterstützt. Die Form ALTER COLUMN ist voll konform.
Die Klauseln um Tabellen, Spalten, Indexe, Sequenzen und Sichten umzubenennen sind PostgreSQL-Erweiterungen.
| Zurück | Zum Anfang | Nach vorne |
| ALTER GROUP | Nach oben | ALTER TRIGGER |