CREATE VIEW - Amazon Aurora DSQL

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

CREATE VIEW

CREATE VIEW definisce una nuova vista persistente. Aurora DSQL non supporta le viste temporanee, sono supportate solo le viste permanenti.

Sintassi supportata

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 definisce una vista basata su una query. La vista non è materializzata fisicamente. Al contrario, la query viene eseguita ogni volta che si fa riferimento alla vista in una query.

CREATE or REPLACE VIEW è simile, ma se esiste già una vista con lo stesso nome, questa viene sostituita. La nuova query deve generare le stesse colonne generate dalla query della vista esistente (ovvero gli stessi nomi di colonna nello stesso ordine e con gli stessi tipi di dati), ma può aggiungere ulteriori colonne alla fine dell’elenco. I calcoli che danno origine alle colonne di output possono essere diversi.

Se viene specificato un nome di schema (come CREATE VIEW myschema.myview ...), la vista viene creata utilizzando lo schema specificato. In caso contrario la vista viene creata nello schema corrente.

Il nome della vista deve essere distinto dal nome di qualsiasi altra relazione (tabella, indice, vista) nello stesso schema.

Parameters

CREATE VIEW supporta vari parametri per controllare il comportamento delle viste aggiornabili automaticamente.

RECURSIVE

Crea una vista ricorsiva. La sintassi: CREATE RECURSIVE VIEW [ schema . ] view_name (column_names) AS SELECT ...; è equivalente a CREATE VIEW [ schema . ] view_name AS WITH RECURSIVE view_name (column_names) AS (SELECT ...) SELECT column_names FROM view_name;.

Per una vista ricorsiva è necessario specificare un elenco di nomi di colonne della vista.

name

Il nome della vista da creare, che può essere facoltativamente accompagnato dallo schema. Per una vista ricorsiva è necessario specificare un elenco di nomi di colonne.

column_name

Un elenco facoltativo di nomi da utilizzare per le colonne nella vista. Se non vengono specificati nomi di colonne, questi ricavati dalla query.

WITH ( view_option_name [= view_option_value] [, ... ] )

Questa clausola specifica i parametri opzionali per una vista. Sono supportati i seguenti parametri.

  • check_option (enum) - Questo parametro può assumere i valori local o cascaded ed è equivalente a specificare WITH [ CASCADED | LOCAL ] CHECK OPTION.

  • security_barrier (boolean) - Deve essere usato se la vista è destinata a fornire una sicurezza a livello di riga. Aurora DSQL attualmente non supporta la sicurezza a livello di riga, ma questa opzione forzerà comunque la valutazione delle condizioni della vista (e di tutte WHERE le condizioni che utilizzano operatori contrassegnati comeLEAKPROOF) a essere valutate per prime.

  • security_invoker (boolean) - Questa opzione fa sì che le relazioni di base sottostanti vengano verificate con i privilegi dell’utente della vista anziché con quelli del proprietario della vista. Per dettagli completi, consulta le note riportate di seguito.

Tutte le opzioni precedenti possono essere modificate nelle viste esistenti utilizzando ALTER VIEW.

query

Un VALUES comando SELECT or che fornirà le colonne e le righe della vista.

WITH [ CASCADED | LOCAL ] CHECK OPTION

Questa opzione controlla il comportamento delle viste aggiornabili automaticamente. Quando viene specificata questa opzione, i comandi INSERT e UPDATE sulla vista verranno controllati per garantire che le nuove righe soddisfino la condizione di definizione della vista (ovvero, le nuove righe vengono controllate per garantire che siano visibili attraverso la vista). In caso contrario, l’aggiornamento verrà rifiutato. Se CHECK OPTION non è specificato, i comandi INSERT e UPDATE sulla vista possono creare righe che non sono visibili attraverso la vista stessa.

LOCAL - Le nuove righe vengono verificate solo in base alle condizioni definite direttamente nella vista stessa. Qualsiasi condizione definita nelle viste di base sottostanti non viene verificata (a meno che anch’esse non specifichino l’opzione CHECK OPTION).

CASCADED - Le nuove righe vengono verificate rispetto alle condizioni della vista e di tutte le viste di base sottostanti. Se viene indicato CHECK OPTION e non viene specifica l’opzioni LOCAL né l’opzione CASCADED, viene assunto il valore CASCADED.

Nota

CHECK OPTION può essere utilizzato con le viste RECURSIVE. CHECK OPTION è supportato solo nelle viste aggiornabili automaticamente.

Note

Utilizzare l’istruzione DROP VIEW per eliminare le viste.

I nomi e i tipi di dati delle colonne della vista devono essere considerati attentamente. Ad esempio, CREATE VIEW vista AS SELECT ’Hello World’; non è consigliato perché il nome della colonna predefinito è ?column?;. Inoltre, il tipo di dati della colonna predefinito è text, il che potrebbe non essere quello desiderato.

Un approccio migliore consiste nello specificare esplicitamente il nome della colonna e il tipo di dati, ad esempio: CREATE VIEW vista AS SELECT text 'Hello World' AS hello;.

Per impostazione predefinita, l’accesso alle relazioni di base sottostanti a cui si fa riferimento nella vista è determinato dalle autorizzazioni del proprietario della vista. In alcuni casi, questo può essere utilizzato per fornire un accesso sicuro ma limitato alle tabelle sottostanti. Tuttavia, non tutte le viste sono protette dalla manomissione.

  • Se la proprietà security_invoker della vista è impostata su true, l’accesso alle relazioni di base sottostanti è determinato dalle autorizzazioni dell’utente che esegue la query, anziché su quelle del proprietario della vista. Pertanto, l’utente di una vista con l’opzione Security Invoker deve disporre delle autorizzazioni pertinenti sulla vista e sulle relative relazioni di base sottostanti.

  • Se una delle relazioni di base sottostanti è una vista con l’opzione Security Invoker, verrà trattata come se vi fosse stato effettuato l’accesso direttamente dalla query originale. Pertanto, una vista con l’opzione Security Invoker verificherà sempre le relazioni di base sottostanti utilizzando le autorizzazioni dell’utente corrente, anche se vi si accede da una vista senza la proprietà security_invoker.

  • Le funzioni chiamate nella vista vengono trattate come se fossero state chiamate direttamente dalla query che utilizza la vista. Pertanto, l’utente di una vista deve disporre delle autorizzazioni per chiamare tutte le funzioni utilizzate dalla vista. Le funzioni nella vista vengono eseguite con i privilegi dell’utente che esegue la query o del proprietario della funzione, a seconda che le funzioni siano definite come SECURITY INVOKER o SECURITY DEFINER.

  • L’utente che crea o sostituisce una vista deve disporre dei privilegi USAGE su tutti gli schemi a cui si fa riferimento nella query della vista, al fine di poter accedere agli oggetti a cui si fa riferimento in tali schemi.

  • Quando CREATE OR REPLACE VIEW viene utilizzato su una vista esistente, vengono modificate solo la regola di SELECT di definizione della vista, più eventuali parametri WITH ( ... ) e relativa CHECK OPTION. Le altre caratteristiche della vista, tra cui proprietà, autorizzazioni e regole non selezionate, rimangono invariate. Per sostituire una vista è necessario esserne proprietari (ciò include essere un membro del ruolo proprietario).

Viste aggiornabili

Le viste semplici sono aggiornabili automaticamente: il sistema consentirà alle istruzioni INSERT, UPDATE e DELETE di operare sulla vista allo stesso modo in cui avrebbe fatto su una normale tabella. Una vista è aggiornabile automaticamente se soddisfa tutte le seguenti condizioni:

  • La vista deve avere esattamente una voce nell’elenco della clausola FROM, e tale elemento deve essere una tabella o un’altra vista aggiornabile.

  • La definizione della vista non deve contenere clausole WITH, DISTINCT, GROUP BY, HAVING, LIMIT o OFFSET al livello principale.

  • La definizione della vista non deve contenere operazioni sugli insiemi (UNION, INTERSECT oEXCEPT) al livello principale.

  • L’elenco di selezione della vista non deve contenere aggregati, funzioni finestra o funzioni che restituiscono insiemi.

Una vista aggiornabile automaticamente può contenere una combinazione di colonne aggiornabili e non aggiornabili. Una colonna è aggiornabile se è un semplice riferimento a una colonna aggiornabile della relazione di base sottostante. In caso contrario, la colonna è di sola lettura e si verifica un errore se un’istruzione INSERT o UPDATE tenta di assegnarle un valore.

Una vista più complessa che non soddisfa tutte queste condizioni è di sola lettura per impostazione predefinita: il sistema non consente inserimenti, aggiornamento o eliminazioni sulla vista.

Nota

L’utente che esegue l’inserimento, l’aggiornamento o l’eliminazione sulla vista deve disporre del privilegio di inserimento, aggiornamento o eliminazione corrispondente sulla vista. Per impostazione predefinita, il proprietario della vista deve disporre dei privilegi pertinenti sulle relazioni di base sottostanti, mentre l’utente che esegue l’aggiornamento non necessita di alcuna autorizzazione sulle relazioni di base sottostanti. Tuttavia, se la vista ha l’opzione security_invoker impostata su true, è l’utente che esegue l’aggiornamento, anziché il proprietario della vista, che deve disporre dei privilegi pertinenti sulle relazioni di base sottostanti.

Esempi

Per creare una visualizzazione composta da tutti i film comici.

CREATE VIEW comedies AS SELECT * FROM films WHERE kind = 'Comedy';

Creazione di una vista con LOCAL CHECK OPTION.

CREATE VIEW pg_comedies AS SELECT * FROM comedies WHERE classification = 'PG' WITH CASCADED CHECK OPTION;

Crea una vista ricorsiva.

CREATE RECURSIVE VIEW public.nums_1_100 (n) AS VALUES (1) UNION ALL SELECT n+1 FROM nums_1_100 WHERE n < 100;

Compatibilità

CREATE OR REPLACE VIEW è un’estensione del linguaggio PostgreSQL. Anche la WITH ( ... ) clausola è un’estensione, così come le viste con guardabarriere e le viste con security invoker. Aurora DSQL supporta queste estensioni del linguaggio.