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 aCREATE 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 valorilocalocascadeded è equivalente a specificareWITH [ 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 tutteWHEREle 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
VALUEScomandoSELECTor 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
INSERTeUPDATEsulla 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. SeCHECK OPTIONnon è specificato, i comandiINSERTeUPDATEsulla 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’opzioneCHECK OPTION).CASCADED- Le nuove righe vengono verificate rispetto alle condizioni della vista e di tutte le viste di base sottostanti. Se viene indicatoCHECK OPTIONe non viene specifica l’opzioniLOCALné l’opzioneCASCADED, viene assunto il valoreCASCADED.Nota
CHECK OPTIONpuò essere utilizzato con le visteRECURSIVE.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_invokerdella 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 INVOKERoSECURITY DEFINER. -
L’utente che crea o sostituisce una vista deve disporre dei privilegi
USAGEsu 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 VIEWviene utilizzato su una vista esistente, vengono modificate solo la regola diSELECTdi definizione della vista, più eventuali parametriWITH ( ... )e relativaCHECK 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,LIMIToOFFSETal livello principale. -
La definizione della vista non deve contenere operazioni sugli insiemi (
UNION,INTERSECToEXCEPT) 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.