Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
CREATE VIEW
CREATE VIEW definiert eine neue persistente Ansicht. Aurora DSQL unterstützt keine temporären Ansichten; nur permanente Ansichten werden unterstützt.
Unterstützte Syntax
CREATE [ OR REPLACE ] [ RECURSIVE ] VIEW name [ ( column_name [, ...] ) ] [ WITH ( view_option_name [= view_option_value] [, ... ] ) ] AS query [ WITH [ CASCADED | LOCAL ] CHECK OPTION ]
Description
CREATE VIEW definiert eine Abfrageansicht. Die Ansicht wird nicht physisch materialisiert. Stattdessen wird die Abfrage jedes Mal ausgeführt, wenn die Ansicht in einer Abfrage referenziert wird.
CREATE or REPLACE VIEW ist ähnlich, wird aber ersetzt, wenn bereits eine Ansicht mit demselben Namen vorhanden ist. Die neue Abfrage muss dieselben Spalten generieren, die von der vorhandenen Ansichtsabfrage generiert wurden (d. h. dieselben Spaltennamen in derselben Reihenfolge und mit denselben Datentypen), kann jedoch zusätzliche Spalten am Ende der Liste hinzufügen. Die Berechnungen, die zu den Ausgabespalten führen, können unterschiedlich sein.
Wenn ein Schemaname angegeben ist (z. B. CREATE VIEW myschema.myview ...), wird die Ansicht im vorgegebenen Schema erstellt. Andernfalls wird die Ansicht im aktuellen Schema erstellt.
Der Name der Ansicht muss sich von den Namen aller anderen Beziehungen (Tabelle, Index, Ansicht) im selben Schema unterscheiden.
Parameters
CREATE VIEW unterstützt verschiedene Parameter, um das Verhalten von automatisch aktualisierbaren Ansichten zu steuern.
RECURSIVE-
Erzeugt eine rekursive Ansicht. Die Syntax:
CREATE RECURSIVE VIEW [ schema . ] view_name (column_names) AS SELECT ...;entsprichtCREATE VIEW [ schema . ] view_name AS WITH RECURSIVE view_name (column_names) AS (SELECT ...) SELECT column_names FROM view_name;.Für eine rekursive Ansicht muss eine Namensliste der Ansichtsspalte angegeben werden.
name-
Der Name der zu erstellenden Ansicht, die optional schemaqualifiziert sein kann. Für eine rekursive Ansicht muss eine Namensliste der Ansichtsspalte angegeben werden.
column_name-
Eine optionale Liste von Namen, die für die Spalten in der Ansicht verwendet werden sollen. Wenn keine Spaltennamen angegeben werden, werden die diese aus der Abfrage abgeleitet.
WITH ( view_option_name [= view_option_value] [, ... ] )-
Diese Klausel gibt optionale Parameter für eine Ansicht an. Die folgenden Parameter werden unterstützt.
-
check_option (enum)– dieser Parameter kann entwederlocalodercascadedsein und entspricht einer Angabe vonWITH [ CASCADED | LOCAL ] CHECK OPTION. -
security_barrier (boolean)– sollte verwendet werden, wenn die Ansicht Sicherheit auf Zeilenebene bieten soll. Aurora DSQL unterstützt derzeit keine Sicherheit auf Zeilenebene, aber diese Option erzwingt dennoch, dass die Bedingungen der Ansicht (und alleWHEREBedingungen, die Operatoren verwenden, die als markiert sindLEAKPROOF) zuerst ausgewertet werden. -
security_invoker (boolean)– diese Option bewirkt, dass die zugrunde liegenden Basisbeziehungen mit den Rechten des Benutzers der Ansicht und nicht denen des Besitzers der Ansicht verglichen werden. Alle Einzelheiten finden Sie in den folgenden Hinweisen.
Alle oben genannten Optionen können in vorhandenen Ansichten mithilfe von
ALTER VIEWgeändert werden. -
query-
Ein
SELECTVALUESOR-Befehl, der die Spalten und Zeilen der Ansicht bereitstellt. WITH [ CASCADED | LOCAL ] CHECK OPTION-
Diese Option steuert das Verhalten von automatisch aktualisierbaren Ansichten. Wenn diese Option angegeben ist, werden die
INSERT- undUPDATE-Befehle in der Ansicht überprüft, um sicherzustellen, dass neue Zeilen die Bedingung erfüllen, die die Ansicht definiert (das heißt, die neuen Zeilen werden auf Sichtbarkeit in der Ansicht überprüft). Sind sie nicht sichtbar, dann wird die Aktualisierung abgelehnt. Wenn keinCHECK OPTIONangegeben ist, dürfen die BefehleINSERTundUPDATEneue Zeilen für die Ansicht erstellen, die in der Ansicht nicht sichtbar sind.LOCAL– neue Zeilen werden nur anhand der Bedingungen geprüft, die direkt in der Ansicht selbst definiert wurden. Alle Bedingungen, die in zugrunde liegenden Basisansichten definiert sind, werden nicht geprüft (es sei denn, sie spezifizieren auch dieCHECK OPTION).CASCADED– neue Zeilen werden anhand der Bedingungen der Ansicht und aller zugrunde liegenden Basisansichten geprüft. Wenn dieCHECK OPTIONangegeben ist und sowohlLOCALals auchCASCADEDnicht angegeben sind, wird vonCASCADEDausgegangen.Anmerkung
Die
CHECK OPTIONdarf inRECURSIVE-Ansichten nicht verwendet werden. DieCHECK OPTIONwird ausschließlich für Ansichten unterstützt, die automatisch aktualisierbar sind.
Hinweise
Verwenden Sie die DROP VIEW-Anweisung, um Ansichten zu löschen.
Die Namen und Datentypen der Ansichtsspalten sollten sorgfältig überlegt werden. Zum Beispiel ist die Anweisung CREATE VIEW vista AS SELECT 'Hello World'; nicht zu empfehlen, da der Spaltenname standardmäßig auf ?column?; gesetzt wird. Außerdem wird der Datentyp der Spalte automatisch auf text festgelegt, was vielleicht nicht in Ihrem Sinne wäre.
Ein besserer Ansatz wäre, den Spaltennamen und den Datentyp explizit anzugeben, zum Beispiel: CREATE VIEW vista AS SELECT text 'Hello World' AS hello;.
Standardmäßig wird der Zugriff auf die zugrunde liegenden Basistabellen, die in der Ansicht referenziert werden, durch die Berechtigungen des Ansichtenbesitzers bestimmt. In einigen Fällen kann auf diese Weise ein sicherer, jedoch eingeschränkter Zugriff auf die zugrunde liegenden Tabellen ermöglicht werden. Allerdings sind nicht alle Ansichten manipulationssicher.
-
Wenn für die Ansicht die
security_invoker-Eigenschaft auf true gesetzt ist, wird der Zugriff auf die zugrunde liegenden Basisbeziehungen durch die Berechtigungen des ausführenden Benutzers bestimmt, und nicht durch den Besitzer der Ansicht. Daher muss ein Benutzer einer Security-Invoker-Ansicht über die entsprechenden Berechtigungen sowohl für die Ansicht als auch für die zugrunde liegenden Basistabellen verfügen. -
Wenn es sich bei einer der zugrunde liegenden Basisbeziehungen um eine Security-Invoker-Ansicht handelt, wird sie so behandelt, als ob direkt von der ursprünglichen Abfrage aus auf sie zugegriffen worden wäre. Daher überprüft eine Security-Invoker-Ansicht ihre zugrunde liegenden Basistabellen stets anhand der Berechtigungen des aktuellen Benutzers, auch wenn sie von einer Ansicht ohne die
security_invoker-Eigenschaft aufgerufen wird. -
In der Ansicht aufgerufene Funktionen werden genauso behandelt, als ob sie direkt von der Abfrage aus aufgerufen worden wären, die die Ansicht verwendet. Daher muss der Benutzer einer Ansicht berechtigt sein, alle von der Ansicht verwendeten Funktionen aufzurufen. Funktionen in der Ansicht werden mit den Rechten des ausführenden Benutzers oder des Funktionsbesitzers der Ansicht ausgeführt, je nachdem, ob die Funktionen als
SECURITY INVOKERoderSECURITY DEFINERdefiniert sind. -
Der Benutzer, der eine View erstellt oder ersetzt, muss über
USAGE-Berechtigungen für alle Schemas verfügen, die in der Ansichtenabfrage referenziert werden, um die darin enthaltenen Objekte auflösen zu können. -
Wenn
CREATE OR REPLACE VIEWfür eine bestehende Ansicht verwendet wird, werden nur die definierendeSELECT-Regel, etwaigeWITH ( ... )-Parameter sowie derenCHECK OPTIONgeändert. Andere Ansichteneigenschaften, einschließlich Besitzrechte, Berechtigungen und non-SELECT-Regeln bleiben unverändert. Um eine Ansicht zu ersetzen, müssen Sie der Ansichtenbesitzer sein (das schließt auch eine Mitgliedschaft in der besitzenden Rolle ein).
Aktualisierbare Ansichten
Einfache Ansichten sind automatisch aktualisierbar: das System erlaugt die Verwendung von INSERT-, UPDATE- und DELETE-Anweisungen auf der Ansicht genau wie bei einer normalen Tabelle. Eine Ansicht ist automatisch aktualisierbar, wenn sie alle der folgenden Bedingungen erfüllt:
-
Die Ansicht muss genau einen Eintrag in ihrer
FROM-Liste enthalten, bei dem es sich um eine Tabelle oder eine andere aktualisierbare Ansicht handeln muss. -
Die Ansichtendefinition darf auf der obersten Ebene keine
WITH-,DISTINCT-,GROUP BY-,HAVING-,LIMIT- oderOFFSET-Klauseln enthalten. -
Die Ansichtendefinition darf auf oberster Ebene keine Mengenoperationen wie
UNION,INTERSECToderEXCEPTenthalten. -
Die Auswahlliste der Ansicht darf keine Aggregate, Fensterfunktionen oder Funktionen zur Rückgabe von Mengen enthalten.
Eine automatisch aktualisierbare Ansicht kann eine Mischung aus aktualisierbaren und nicht aktualisierbaren Spalten enthalten. Eine Spalte ist aktualisierbar, wenn es sich um einen einfachen Verweis auf eine aktualisierbare Spalte der zugrunde liegenden Basisbeziehung handelt. Andernfalls ist die Spalte schreibgeschützt, und es tritt ein Fehler auf, wenn eine INSERT- oder UPDATE-Anweisung versucht, ihr einen Wert zuzuweisen.
Eine komplexere Ansicht, die nicht alle Voraussetzungen für automatische Aktualisierbarkeit erfüllt, ist standardmäßig schreibgeschützt – das heißt, das System erlaubt keine INSERT-, UPDATE- oder DELETE-Operationen auf dieser Ansicht.
Anmerkung
Der Benutzer, der ein INSERT, UPDATE oder DELETE auf einer Ansicht ausführt, muss die entsprechenden Berechtigungen für diese Operationen auf der Ansicht selbst besitzen Standardmäßig muss der Besitzer der Ansicht über die notwendigen Rechte auf die zugrunde liegenden Basistabellen verfügen. Der Benutzer, der die Ansicht verwendet, benötigt keine direkten Berechtigungen für diese Basistabellen. Wenn die Ansicht jedoch mit security_invoker = true definiert ist, muss der Benutzer, der die Aktualisierung ausführt, und nicht der Ansichtenbesitzer die entsprechenden Rechte auf die zugrunde liegenden Basistabellen besitzen.
Beispiele
Erstellen einer Ansicht mit allen Comedy-Filmen
CREATE VIEW comedies AS SELECT * FROM films WHERE kind = 'Comedy';
Erstellen einer Ansicht mit LOCAL CHECK OPTION
CREATE VIEW pg_comedies AS SELECT * FROM comedies WHERE classification = 'PG' WITH CASCADED CHECK OPTION;
Erstellen Sie eine rekursive Ansicht.
CREATE RECURSIVE VIEW public.nums_1_100 (n) AS VALUES (1) UNION ALL SELECT n+1 FROM nums_1_100 WHERE n < 100;
Kompatibilität
CREATE OR REPLACE VIEW ist eine PostgreSQL-Spracherweiterung. Die WITH ( ... )-Klausel ist ebenfalls eine Erweiterung, wie auch die Ansichten Sicherheitsbarriere und Sicherheitsaufrufer. Aurora DSQL unterstützt diese Spracherweiterungen.