AUSLÄNDISCHE TABELLE ERSTELLEN
AUSLÄNDISCHE TABELLE ERSTELLEN – Definieren Sie eine neue Fremdtabelle
Zusammenfassung
AUSLÄNDISCHE TABELLE ERSTELLEN [FALLS NICHT EXISTIERT]Tabellenname
( [ {Spaltenname
Datentyp
[ OPTIONEN (Möglichkeit
'Wert
' [, ... ] ) ] [ SORTIERENKollation
] [Column_Constraint
[ ... ] ] |table_constraint
} [, ... ]] )[ ERBT (parent_table
[, ... ] ) ] SERVERServername
[ OPTIONEN (Möglichkeit
'Wert
' [, ... ] ) ]FREMDE TABELLE ERSTELLEN [ WENN NICHT EXISTIERT ]Tabellenname
PARTITION VONparent_table
[ ( {Spaltenname
[ MIT OPTIONEN ] [Column_Constraint
[ ... ] ] |table_constraint
} [, ... ]) ]{ FÜR WERTEpartition_bound_spec
| STANDARD} SERVERServername
[ OPTIONEN (Möglichkeit
'Wert
' [, ... ] ) ]WoColumn_Constraint
Ist:[ EINSCHRÄNKUNGEinschränkungsname
]{ NICHT NULL | NULL | ÜBERPRÜFEN (Ausdruck
) [KEIN ERBEN] | STANDARDdefault_expr
| IMMER ERZEUGT ALS (generation_expr
) GELAGERT }Undtable_constraint
Ist:[ EINSCHRÄNKUNGEinschränkungsname
]ÜBERPRÜFEN (Ausdruck
) [KEIN ERBEN]Undpartition_bound_spec
Ist:IN (partition_bound_expr
[, ...] ) |FROM ( {partition_bound_expr
| MINWERT | MAXVALUE } [, ...] ) TO ( {partition_bound_expr
| MINWERT | MAXVALUE } [, ...] ) |WITH ( MODULUSnumerisches_Literal
, RESTnumerisches_Literal
)
Beschreibung
AUSLÄNDISCHE TABELLE ERSTELLEN
Erstellt eine neue Fremdtabelle in der aktuellen Datenbank. Die Tabelle gehört dem Benutzer, der den Befehl ausgibt.
Wenn ein Schemaname angegeben wird (z. B.ERSTELLEN SIE EINE AUSLÄNDISCHE TABELLE myschema.mytable ...
), dann wird die Tabelle im angegebenen Schema erstellt. Andernfalls wird es im aktuellen Schema erstellt. Der Name der Fremdtabelle muss sich vom Namen einer anderen Beziehung (Tabelle, Sequenz, Index, Ansicht, materialisierte Ansicht oder Fremdtabelle) im selben Schema unterscheiden.
AUSLÄNDISCHE TABELLE ERSTELLEN
erstellt außerdem automatisch einen Datentyp, der den zusammengesetzten Typ darstellt, der einer Zeile der Fremdtabelle entspricht. Daher können Fremdtabellen nicht denselben Namen wie ein vorhandener Datentyp im selben Schema haben.
WennPARTITION VON
Wenn die Klausel angegeben wird, wird die Tabelle als Partition von erstelltparent_table
mit vorgegebenen Grenzen.
Um eine Fremdtabelle erstellen zu können, müssen Sie Folgendes habenVERWENDUNG
Privileg auf dem fremden Server, sowieVERWENDUNG
Berechtigung für alle in der Tabelle verwendeten Spaltentypen.
Parameter
WENN NICHT EXISTIERT
-
Geben Sie keinen Fehler aus, wenn bereits eine Beziehung mit demselben Namen vorhanden ist. In diesem Fall erfolgt ein Bescheid. Beachten Sie, dass es keine Garantie dafür gibt, dass die bestehende Beziehung auch nur annähernd der entspricht, die erstellt worden wäre.
Tabellenname
-
Der Name (optional schemaqualifiziert) der zu erstellenden Tabelle.
Spaltenname
-
Der Name einer Spalte, die in der neuen Tabelle erstellt werden soll.
Datentyp
-
Der Datentyp der Spalte. Dies kann Array-Bezeichner umfassen. Weitere Informationen zu den von unterstützten DatentypenPostgreSQL, beziehen aufKapitel 8.
SORTIEREN
Kollation
-
Der
SORTIEREN
Die Klausel weist der Spalte eine Sortierung zu (die einen sortierbaren Datentyp haben muss). Wenn nicht angegeben, wird die Standardsortierung des Spaltendatentyps verwendet. ERBT (
parent_table
[, ... ] )-
Die Wahl
ERBT
Die Klausel gibt eine Liste von Tabellen an, von denen die neue Fremdtabelle automatisch alle Spalten erbt. Übergeordnete Tabellen können einfache Tabellen oder Fremdtabellen sein. Siehe die ähnliche Form vonTABELLE ERSTELLENfür mehr Details. PARTITION VON
parent_table
{ FÜR WERTEpartition_bound_spec
| STANDARD }-
Dieses Formular kann verwendet werden, um die Fremdtabelle als Partition der angegebenen übergeordneten Tabelle mit angegebenen Partitionsgrenzwerten zu erstellen. Siehe die ähnliche Form vonTABELLE ERSTELLENfür mehr Details. Beachten Sie, dass es derzeit nicht zulässig ist, die Fremdtabelle als Partition der übergeordneten Tabelle zu erstellen, falls vorhanden
EINZIGARTIG
Indizes für die übergeordnete Tabelle. (Siehe auchALTER TABLE ATTACH PARTITION.) ZWANG
Einschränkungsname
-
Ein optionaler Name für eine Spalten- oder Tabelleneinschränkung. Wenn gegen die Einschränkung verstoßen wird, ist der Name der Einschränkung in den Fehlermeldungen enthalten, sodass Einschränkungsnamen wie
col muss positiv sein
kann verwendet werden, um hilfreiche Einschränkungsinformationen an Clientanwendungen zu übermitteln. (Für die Angabe von Einschränkungsnamen, die Leerzeichen enthalten, sind doppelte Anführungszeichen erforderlich.) Wenn kein Einschränkungsname angegeben wird, generiert das System einen Namen. NICHT NULL
-
Die Spalte darf keine Nullwerte enthalten.
NULL
-
Die Spalte darf Nullwerte enthalten. Dies ist die Standardeinstellung.
Diese Klausel dient nur der Kompatibilität mit nicht standardmäßigen SQL-Datenbanken. Von der Verwendung in neuen Anwendungen wird abgeraten.
ÜBERPRÜFEN (
Ausdruck
) [KEIN ERBEN]-
Der
ÜBERPRÜFEN
Die Klausel gibt einen Ausdruck an, der ein boolesches Ergebnis erzeugt, das jede Zeile in der Fremdtabelle erfüllen soll. Das heißt, der Ausdruck sollte für alle Zeilen in der Fremdtabelle WAHR oder UNBEKANNT, niemals FALSCH, ergeben. Eine als Spalteneinschränkung angegebene Check-Einschränkung sollte nur auf den Wert dieser Spalte verweisen, während ein Ausdruck, der in einer Tabelleneinschränkung erscheint, auf mehrere Spalten verweisen kann.Momentan,
ÜBERPRÜFEN
Ausdrücke dürfen weder Unterabfragen enthalten noch auf andere Variablen als die Spalten der aktuellen Zeile verweisen. Die SystemspalteTableoid
darf referenziert werden, jedoch keine andere Systemspalte.Eine mit gekennzeichnete Einschränkung
KEIN ERBEN
wird nicht an untergeordnete Tabellen weitergegeben. STANDARD
default_expr
-
Der
STANDARD
Die Klausel weist der Spalte, in deren Spaltendefinition sie erscheint, einen Standarddatenwert zu. Der Wert ist ein beliebiger variablenfreier Ausdruck (Unterabfragen und Querverweise auf andere Spalten in der aktuellen Tabelle sind nicht zulässig). Der Datentyp des Standardausdrucks muss mit dem Datentyp der Spalte übereinstimmen.Der Standardausdruck wird bei allen Einfügevorgängen verwendet, die keinen Wert für die Spalte angeben. Wenn es für eine Spalte keinen Standardwert gibt, ist der Standardwert null.
IMMER ERZEUGT ALS (
generation_expr
) GELAGERT-
Diese Klausel erstellt die Spalte alsgenerierte Spalte. In die Spalte kann nicht geschrieben werden und beim Lesen wird das Ergebnis des angegebenen Ausdrucks zurückgegeben.
Das Schlüsselwort
GELAGERT
ist erforderlich, um anzugeben, dass die Spalte beim Schreiben berechnet wird. (Der berechnete Wert wird dem Fremddaten-Wrapper zur Speicherung vorgelegt und muss beim Lesen zurückgegeben werden.)Der Generierungsausdruck kann auf andere Spalten in der Tabelle verweisen, jedoch nicht auf andere generierte Spalten. Alle verwendeten Funktionen und Operatoren müssen unveränderlich sein. Verweise auf andere Tabellen sind nicht zulässig.
Servername
-
Der Name eines vorhandenen Fremdservers, der für die Fremdtabelle verwendet werden soll. Einzelheiten zum Definieren eines Servers finden Sie unterSERVER ERSTELLEN.
OPTIONEN (
Möglichkeit
'Wert
' [, ...] )-
Optionen, die der neuen Fremdtabelle oder einer ihrer Spalten zugeordnet werden sollen. Die zulässigen Optionsnamen und -werte sind für jeden Fremddaten-Wrapper spezifisch und werden mithilfe der Validierungsfunktion des Fremddaten-Wrappers validiert. Doppelte Optionsnamen sind nicht zulässig (obwohl es in Ordnung ist, wenn eine Tabellenoption und eine Spaltenoption denselben Namen haben).
Anmerkungen
Einschränkungen für Fremdtabellen (z. BÜBERPRÜFEN
oderNICHT NULL
Klauseln) werden vom Kern nicht erzwungenPostgreSQLSystem, und die meisten ausländischen Datenwrapper versuchen auch nicht, sie durchzusetzen; das heißt, es wird einfach angenommen, dass die Einschränkung wahr ist. Eine solche Durchsetzung hätte wenig Sinn, da sie nur für Zeilen gelten würde, die über die Fremdtabelle eingefügt oder aktualisiert werden, und nicht für Zeilen, die auf andere Weise, beispielsweise direkt auf dem Remote-Server, geändert wurden. Stattdessen sollte eine an eine Fremdtabelle angehängte Einschränkung eine Einschränkung darstellen, die vom Remote-Server erzwungen wird.
Einige spezielle Fremddaten-Wrapper sind möglicherweise der einzige Zugriffsmechanismus für die Daten, auf die sie zugreifen. In diesem Fall kann es sinnvoll sein, dass der Fremddaten-Wrapper selbst die Durchsetzung von Einschränkungen durchführt. Sie sollten jedoch nicht davon ausgehen, dass ein Wrapper dies tut, es sei denn, die Dokumentation besagt dies.
ObwohlPostgreSQLversucht nicht, Einschränkungen für fremde Tabellen durchzusetzen, sondern geht davon aus, dass diese zum Zweck der Abfrageoptimierung korrekt sind. Wenn in der Fremdtabelle Zeilen sichtbar sind, die eine deklarierte Einschränkung nicht erfüllen, können Abfragen in der Tabelle zu Fehlern oder falschen Antworten führen. Es liegt in der Verantwortung des Benutzers sicherzustellen, dass die Einschränkungsdefinition mit der Realität übereinstimmt.
Vorsicht
Wenn eine Fremdtabelle als Partition einer partitionierten Tabelle verwendet wird, gibt es eine implizite Einschränkung, dass ihr Inhalt die Partitionierungsregel erfüllen muss. Auch hier liegt es in der Verantwortung des Benutzers, sicherzustellen, dass dies der Fall ist. Dies geschieht am besten durch die Installation einer passenden Einschränkung auf dem Remote-Server.
Innerhalb einer partitionierten Tabelle, die Fremdtabellenpartitionen enthält, wird eineAKTUALISIEREN
Dadurch wird der Wert des Partitionsschlüssels geändert. Dies kann dazu führen, dass eine Zeile von einer lokalen Partition in eine Fremdtabellenpartition verschoben wird, sofern der Fremddaten-Wrapper Tupel-Routing unterstützt. Derzeit ist es jedoch nicht möglich, eine Zeile von einer Fremdtabellenpartition in eine andere Partition zu verschieben. EinAKTUALISIEREN
Dies würde aufgrund der Partitionierungsbeschränkung fehlschlagen, vorausgesetzt, dass dies vom Remote-Server ordnungsgemäß durchgesetzt wird.
Ähnliche Überlegungen gelten für generierte Spalten. Gespeicherte generierte Spalten werden beim Einfügen oder Aktualisieren lokal berechnetPostgreSQLServer und zum Schreiben in den Fremddatenspeicher an den Fremddaten-Wrapper übergeben, es wird jedoch nicht erzwungen, dass eine Abfrage der Fremdtabelle Werte für gespeicherte generierte Spalten zurückgibt, die mit dem Generierungsausdruck konsistent sind. Auch dies könnte zu falschen Abfrageergebnissen führen.
Beispiele
Fremdtabelle erstellenFilme
, auf die über den Server zugegriffen wirdfilm_server
:
CREATE FOREIGN TABLE movies ( code char(5) NOT NULL, title varchar(40) NOT NULL, did integer NOT NULL, date_prod date, kind varchar(10), len Interval Hour to Minute)SERVER film_server;
Fremdtabelle erstellenMessung_y2016m07
, auf die über den Server zugegriffen wirdserver_07
, als Partition der bereichspartitionierten TabelleMessung
:
ERSTELLEN SIE EINE AUSLÄNDISCHE TABELLE „measurement_y2016m07“-TEILUNG DER Messung FÜR WERTE VON ('2016-07-01') BIS ('2016-08-01') SERVER server_07;
Kompatibilität
DerAUSLÄNDISCHE TABELLE ERSTELLEN
Der Befehl entspricht weitgehend demSQLStandard; jedoch ähnlich wie beiTABELLE ERSTELLEN,NULL
Einschränkungen und Nullspalten-Fremdtabellen sind zulässig. Die Möglichkeit, Spaltenstandardwerte anzugeben, ist ebenfalls vorhandenPostgreSQLVerlängerung. Tabellenvererbung in der durch definierten FormPostgreSQL, ist nicht standardmäßig.
Siehe auch
ÄNDERN SIE DIE AUSLÄNDISCHE TABELLE,AUSLÄNDISCHE TABELLE TROPFEN,TABELLE ERSTELLEN,SERVER ERSTELLEN,AUSLÄNDISCHES SCHEMA IMPORTIEREN