CREATE VIEW - Amazon Aurora DSQL

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 ...; entspricht CREATE 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 entweder local oder cascaded sein und entspricht einer Angabe von WITH [ 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 alle WHERE Bedingungen, 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 VIEW geändert werden.

query

Ein SELECT VALUES OR-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- und UPDATE-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 kein CHECK OPTION angegeben ist, dürfen die Befehle INSERT und UPDATE neue 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 die CHECK OPTION).

CASCADED – neue Zeilen werden anhand der Bedingungen der Ansicht und aller zugrunde liegenden Basisansichten geprüft. Wenn die CHECK OPTION angegeben ist und sowohl LOCAL als auch CASCADED nicht angegeben sind, wird von CASCADED ausgegangen.

Anmerkung

Die CHECK OPTION darf in RECURSIVE-Ansichten nicht verwendet werden. Die CHECK OPTION wird 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 INVOKER oder SECURITY DEFINER definiert 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 VIEW für eine bestehende Ansicht verwendet wird, werden nur die definierende SELECT-Regel, etwaige WITH ( ... )-Parameter sowie deren CHECK OPTION geä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- oder OFFSET-Klauseln enthalten.

  • Die Ansichtendefinition darf auf oberster Ebene keine Mengenoperationen wie UNION, INTERSECT oder EXCEPT enthalten.

  • 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.