ADD COLUMN
Dieses Formular fügt eine neue Spalte zur Tabelle hinzu, wobei die gleiche Syntax wie bei CREATE TABLE verwendet wird.
DROP COLUMN
Dieses Formular löscht eine Spalte aus einer Tabelle. Indizes und Tabellenbeschränkungen, die die Spalte betreffen, werden automatisch gelöscht. Sie müssen CASCADE sagen, wenn irgendetwas außerhalb der Tabelle von der Spalte abhängt, zum Beispiel Fremdschlüsselreferenzen oder Views. Wenn IF EXISTS angegeben ist und die Spalte nicht existiert, wird kein Fehler ausgelöst. In diesem Fall wird stattdessen ein Hinweis ausgegeben.
SET DATA TYPE
Dieses Formular ändert den Typ einer Spalte einer Tabelle. Indizes und einfache Tabellenbeschränkungen, die die Spalte betreffen, werden automatisch konvertiert, um den neuen Spaltentyp zu verwenden, indem der ursprünglich gelieferte Ausdruck repariert wird. Die optionale COLLATE-Klausel gibt eine Sortierung für die neue Spalte an; wenn sie weggelassen wird, ist die Sortierung der Standard für den neuen Spaltentyp. Die optionale USING-Klausel gibt an, wie der neue Spaltenwert aus dem alten berechnet werden soll; wenn sie weggelassen wird, ist die Standardkonvertierung die gleiche wie ein Zuweisungs-Cast vom alten zum neuen Datentyp. Eine USING-Klausel muss angegeben werden, wenn es keinen impliziten oder Zuweisungs-Cast vom alten zum neuen Typ gibt.
SET/DROP DEFAULT
Diese Formulare setzen oder entfernen den Standardwert für eine Spalte. Die Standardwerte gelten nur für nachfolgende INSERT-Befehle; sie führen nicht dazu, dass sich Zeilen, die sich bereits in der Tabelle befinden, ändern. In diesem Fall werden sie in INSERT-Anweisungen für den View eingefügt, bevor die ON INSERT-Regel des Views angewendet wird.
SET/DROP NOT NULL
Diese Formulare ändern, ob eine Spalte so markiert ist, dass sie Nullwerte zulässt oder Nullwerte zurückweist. Sie können SET NOT NULL nur dann verwenden, wenn die Spalte keine Nullwerte enthält.
SET STATISTICS
Dieses Formular legt das Ziel für das Sammeln von Statistiken pro Spalte für nachfolgende ANALYZE-Operationen fest. Das Ziel kann im Bereich von 0 bis 10000 gesetzt werden; alternativ können Sie es auf -1 setzen, um das Standardstatistikziel des Systems (default_statistics_target) zu verwenden. Weitere Informationen über die Verwendung von Statistiken durch den PostgreSQL Query Planner finden Sie in Abschnitt 14.2.
SET ( attribute_option = value )
RESET ( attribute_option )
Dieses Formular setzt oder setzt Optionen pro Attribut zurück. Gegenwärtig sind die einzigen definierten Optionen pro Attribut n_distinct und n_distinct_inherited, die die Schätzungen der Anzahl der unterscheidbaren Werte überschreiben, die durch nachfolgende ANALYZE-Operationen vorgenommen werden. n_distinct betrifft die Statistiken für die Tabelle selbst, während n_distinct_inherited die Statistiken betrifft, die für die Tabelle und ihre Vererbungskinder gesammelt werden. Bei einem positiven Wert geht ANALYZE davon aus, dass die Spalte genau die angegebene Anzahl eindeutiger Nicht-Null-Werte enthält. Bei einem negativen Wert, der größer oder gleich -1 sein muss, geht ANALYZE davon aus, dass die Anzahl der eindeutigen Nicht-Null-Werte in der Spalte linear mit der Größe der Tabelle ist; die genaue Anzahl ist durch Multiplikation der geschätzten Tabellengröße mit dem absoluten Wert der angegebenen Zahl zu berechnen. Ein Wert von -1 bedeutet zum Beispiel, dass alle Werte in der Spalte eindeutig sind, während ein Wert von -0,5 bedeutet, dass jeder Wert im Durchschnitt zweimal vorkommt. Dies kann nützlich sein, wenn sich die Größe der Tabelle im Laufe der Zeit ändert, da die Multiplikation mit der Anzahl der Zeilen in der Tabelle erst zur Abfrageplanungszeit durchgeführt wird. Geben Sie einen Wert von 0 an, um zur normalen Schätzung der Anzahl der eindeutigen Werte zurückzukehren. Weitere Informationen über die Verwendung von Statistiken durch den PostgreSQL Query Planner finden Sie in Abschnitt 14.2.
SET STORAGE
Dieses Formular setzt den Speichermodus für eine Spalte. Dies steuert, ob diese Spalte inline oder in einer sekundären TOAST-Tabelle gehalten wird, und ob die Daten komprimiert werden sollen oder nicht. PLAIN muss für Werte mit fester Länge wie Integer verwendet werden und ist inline, unkomprimiert. MAIN ist für Inline-Daten, die komprimiert werden können. EXTERNAL ist für externe, unkomprimierte Daten, und EXTENDED ist für externe, komprimierte Daten. EXTENDED ist die Standardeinstellung für die meisten Datentypen, die eine Nicht-PLAIN-Speicherung unterstützen. Die Verwendung von EXTERNAL führt dazu, dass Teilstring-Operationen auf sehr großen Text- und Bytewerten schneller ablaufen, allerdings auf Kosten eines größeren Speicherplatzes. Beachten Sie, dass SET STORAGE selbst nichts an der Tabelle ändert, sondern nur die Strategie festlegt, die bei zukünftigen Tabellenaktualisierungen verfolgt werden soll. Siehe Abschnitt 55.2 für weitere Informationen.
ADD table_constraint
Dieses Formular fügt eine neue Einschränkung zu einer Tabelle hinzu, indem es die gleiche Syntax wie CREATE TABLE verwendet, plus die Option NOT VALID, die derzeit nur für Fremdschlüssel-Einschränkungen erlaubt ist. Wenn die Einschränkung als NOT VALID markiert ist, wird die potentiell langwierige anfängliche Prüfung, ob alle Zeilen in der Tabelle die Einschränkung erfüllen, übersprungen. Die Einschränkung wird immer noch gegen nachfolgende Einfügungen oder Aktualisierungen durchgesetzt (d.h. sie schlagen fehl, wenn es keine passende Zeile in der referenzierten Tabelle gibt). Die Datenbank geht jedoch nicht davon aus, dass die Einschränkung für alle Zeilen in der Tabelle gilt, bis sie mit der Option VALIDATE CONSTRAINT validiert wird.
ADD table_constraint_using_index
Dieses Formular fügt eine neue PRIMARY KEY- oder UNIQUE-Einschränkung zu einer Tabelle hinzu, die auf einem vorhandenen eindeutigen Index basiert. Alle Spalten des Indexes werden in die Einschränkung einbezogen.
Der Index kann weder Ausdrucksspalten haben noch ein Teilindex sein. Außerdem muss es sich um einen B-Tree-Index mit Standardsortierreihenfolge handeln. Diese Einschränkungen stellen sicher, dass der Index einem Index entspricht, der durch einen regulären ADD PRIMARY KEY- oder ADD UNIQUE-Befehl erstellt werden würde.
Wenn PRIMARY KEY angegeben wird und die Spalten des Index nicht bereits mit NOT NULL markiert sind, versucht dieser Befehl, ALTER COLUMN SET NOT NULL für jede dieser Spalten auszuführen. Dies erfordert einen vollständigen Tabellenscan, um zu überprüfen, dass die Spalte(n) keine Nullen enthalten. In allen anderen Fällen ist dies eine schnelle Operation.
Wenn ein Constraint-Name angegeben wird, wird der Index umbenannt, um dem Constraint-Namen zu entsprechen.
Nach der Ausführung dieses Befehls ist der Index „im Besitz“ des Constraints, so als ob der Index durch einen regulären ADD PRIMARY KEY oder ADD UNIQUE Befehl erstellt worden wäre. Insbesondere verschwindet der Index, wenn die Einschränkung gelöscht wird.
Hinweis: Das Hinzufügen einer Einschränkung mit Hilfe eines bestehenden Index kann in Situationen hilfreich sein, in denen eine neue Einschränkung hinzugefügt werden muss, ohne dass Tabellenaktualisierungen für eine lange Zeit blockiert werden. Um dies zu tun, erstellen Sie den Index mit CREATE INDEX CONCURRENTLY und installieren Sie ihn dann als offizielle Einschränkung mit dieser Syntax. Siehe das Beispiel unten.
VALIDATE CONSTRAINT
Dieses Formular validiert eine Fremdschlüssel-Beschränkung, die zuvor als NOT VALID erstellt wurde, indem die Tabelle gescannt wird, um sicherzustellen, dass es keine nicht übereinstimmenden Zeilen gibt. Es geschieht nichts, wenn die Einschränkung bereits als gültig markiert ist.
Die Validierung kann bei größeren Tabellen ein langer Prozess sein und erfordert derzeit eine ACCESS EXCLUSIVE-Sperre. Der Wert der Trennung der Validierung von der anfänglichen Erstellung besteht darin, dass Sie die Validierung auf weniger ausgelastete Zeiten verschieben können oder dass Sie zusätzliche Zeit erhalten, um bereits vorhandene Fehler zu korrigieren und gleichzeitig neue Fehler zu verhindern.
DROP CONSTRAINT
Dieses Formular löscht die angegebene Einschränkung in einer Tabelle. Wenn IF EXISTS angegeben ist und die Einschränkung nicht existiert, wird kein Fehler ausgelöst. In diesem Fall wird stattdessen ein Hinweis ausgegeben.
DISABLE/ENABLE TRIGGER
Diese Formulare konfigurieren das Auslösen von Triggern, die zu der Tabelle gehören. Ein deaktivierter Trigger ist dem System weiterhin bekannt, wird aber nicht ausgeführt, wenn sein auslösendes Ereignis eintritt. Bei einem verzögerten Trigger wird der Aktivierungsstatus beim Eintreten des Ereignisses geprüft, nicht bei der tatsächlichen Ausführung der Triggerfunktion. Sie können einen einzelnen, namentlich angegebenen Trigger, alle Trigger der Tabelle oder nur Benutzer-Trigger deaktivieren oder aktivieren (diese Option schließt intern generierte Constraint-Trigger aus, wie z. B. solche, die zur Implementierung von Fremdschlüssel-Beschränkungen oder aufschiebbaren Eindeutigkeits- und Ausschluss-Beschränkungen verwendet werden). Das Deaktivieren oder Aktivieren von intern generierten Constraint-Triggern erfordert Superuser-Rechte; es sollte mit Vorsicht getan werden, da die Integrität des Constraints natürlich nicht garantiert werden kann, wenn die Trigger nicht ausgeführt werden. Der Auslösemechanismus wird auch durch die Konfigurationsvariable session_replication_role beeinflusst. Einfach aktivierte Trigger werden ausgelöst, wenn die Replikationsrolle „origin“ (der Standard) oder „local“ ist. Trigger, die als ENABLE REPLICA konfiguriert sind, werden nur ausgelöst, wenn sich die Sitzung im Replikationsmodus befindet, und Trigger, die als ENABLE ALWAYS konfiguriert sind, werden unabhängig vom aktuellen Replikationsmodus ausgelöst.
DISABLE/ENABLE RULE
Diese Formulare konfigurieren das Auslösen von Rewrite-Regeln, die zur Tabelle gehören. Eine deaktivierte Regel ist dem System immer noch bekannt, wird aber beim Umschreiben von Abfragen nicht angewendet. Die Semantik ist die gleiche wie bei deaktivierten/aktivierten Triggern. Diese Konfiguration wird für ON SELECT-Regeln ignoriert, die immer angewendet werden, damit Ansichten auch dann funktionieren, wenn sich die aktuelle Sitzung in einer nicht standardmäßigen Replikationsrolle befindet.
CLUSTER
Dieses Formular wählt den Standardindex für zukünftige CLUSTER-Operationen aus. Die Tabelle wird nicht neu geclustert.
SET WITHOUT CLUSTER
Dieses Formular entfernt die zuletzt verwendete CLUSTER-Indexspezifikation aus der Tabelle. Dies wirkt sich auf zukünftige Cluster-Operationen aus, die keinen Index angeben.
SET WITH OIDS
Dieses Formular fügt eine oid-Systemspalte zur Tabelle hinzu (siehe Abschnitt 5.4). Es bewirkt nichts, wenn die Tabelle bereits OIDs hat.
Beachten Sie, dass dies nicht gleichbedeutend mit ADD COLUMN oid oid ist; das würde eine normale Spalte hinzufügen, die zufällig oid heißt, nicht eine Systemspalte.
SET WITHOUT OIDS
Dieses Formular entfernt die oid-Systemspalte aus der Tabelle. Dies entspricht genau DROP COLUMN oid RESTRICT, außer dass es sich nicht beschwert, wenn es bereits keine oid-Spalte gibt.
SET ( storage_parameter = value )
Dieses Formular ändert einen oder mehrere Speicherparameter für die Tabelle. Siehe Speicherparameter für Details zu den verfügbaren Parametern. Beachten Sie, dass der Tabelleninhalt durch diesen Befehl nicht sofort geändert wird; je nach Parameter müssen Sie die Tabelle möglicherweise neu schreiben, um die gewünschten Auswirkungen zu erzielen. Das kann mit VACUUM FULL, CLUSTER oder einer der Formen von ALTER TABLE geschehen, die ein Neuschreiben der Tabelle erzwingen.
Hinweis: Während CREATE TABLE die Angabe von OIDS in der WITH (storage_parameter) Syntax erlaubt, behandelt ALTER TABLE OIDS nicht als Speicherparameter. Verwenden Sie stattdessen die Formulare SET WITH OIDS und SET WITHOUT OIDS, um den OID-Status zu ändern.
RESET ( storage_parameter )
Dieses Formular setzt einen oder mehrere Speicherparameter auf ihre Standardwerte zurück. Wie bei SET ist möglicherweise ein Tabellen-Rewrite erforderlich, um die Tabelle vollständig zu aktualisieren.
INHERIT parent_table
Dieses Formular fügt die Zieltabelle als neues Kind der angegebenen Elterntabelle hinzu. In der Folge werden Abfragen gegen die Elterntabelle Datensätze der Zieltabelle enthalten. Um als Kind hinzugefügt zu werden, muss die Zieltabelle bereits die gleichen Spalten wie die Elterntabelle enthalten (sie kann auch zusätzliche Spalten haben). Die Spalten müssen übereinstimmende Datentypen haben, und wenn sie NOT NULL-Beschränkungen in der Elterntabelle haben, müssen sie auch NOT NULL-Beschränkungen in der Kindtabelle haben.
Es muss auch übereinstimmende Kindtabellenbeschränkungen für alle CHECK-Beschränkungen der Elterntabelle geben. Derzeit werden UNIQUE-, PRIMARY KEY- und FOREIGN KEY-Beschränkungen nicht berücksichtigt, aber das könnte sich in Zukunft ändern.
NO INHERIT parent_table
Dieses Formular entfernt die Zieltabelle aus der Liste der Kinder der angegebenen Elterntabelle. Abfragen gegen die Elterntabelle enthalten keine Datensätze mehr, die aus der Zieltabelle stammen.
OF type_name
Dieses Formular verknüpft die Tabelle mit einem zusammengesetzten Typ, als ob CREATE TABLE OF sie gebildet hätte. Die Liste der Spaltennamen und -typen der Tabelle muss genau mit der des zusammengesetzten Typs übereinstimmen; das Vorhandensein einer oid-Systemspalte darf abweichen. Die Tabelle darf von keiner anderen Tabelle erben. Diese Einschränkungen stellen sicher, dass CREATE TABLE OF eine gleichwertige Tabellendefinition zulässt.
NOT OF
Dieses Formular trennt eine typisierte Tabelle von ihrem Typ.
OWNER
Dieses Formular ändert den Eigentümer der Tabelle, Sequenz oder Ansicht auf den angegebenen Benutzer.
SET TABLESPACE
Dieses Formular ändert den Tablespace der Tabelle auf den angegebenen Tablespace und verschiebt die mit der Tabelle verbundene(n) Datendatei(en) in den neuen Tablespace. Indizes auf der Tabelle, falls vorhanden, werden nicht verschoben; sie können jedoch mit zusätzlichen SET TABLESPACE-Befehlen separat verschoben werden. Siehe auch CREATE TABLESPACE.
RENAME
Die RENAME-Formulare ändern den Namen einer Tabelle (oder eines Index, einer Sequenz oder eines Views) oder den Namen einer einzelnen Spalte in einer Tabelle. Es gibt keine Auswirkungen auf die gespeicherten Daten.
SET SCHEMA
Dieses Formular verschiebt die Tabelle in ein anderes Schema. Zugehörige Indizes, Beschränkungen und Sequenzen, die den Tabellenspalten gehören, werden ebenfalls verschoben.