Amazon Aurora DSQL viene fornito come servizio di anteprima. Per ulteriori informazioni, consulta le versioni beta e le anteprime
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à.
Sottoinsiemi di comandi SQL supportati in Aurora DSQL
Aurora DSQL non supporta tutta la sintassi del linguaggio SQL PostgreSQL supportato. Ad esempio, CREATE TABLE
in PostgreSQL sono presenti un gran numero di clausole e parametri che Aurora DSQL non supporta. Questa sezione descrive la sintassi della sintassi PostgreSQL supportata da Aurora DSQL per questi comandi.
CREATE TABLE
CREATE TABLE
definisce una nuova tabella.
CREATE TABLE [ IF NOT EXISTS ] table_name ( [ { column_name data_type [ column_constraint [ ... ] ] | table_constraint | LIKE source_table [ like_option ... ] } [, ... ] ] ) where column_constraint is: [ CONSTRAINT constraint_name ] { NOT NULL | NULL | CHECK ( expression )| DEFAULT default_expr | GENERATED ALWAYS AS ( generation_expr ) STORED | UNIQUE [ NULLS [ NOT ] DISTINCT ] index_parameters | PRIMARY KEY index_parameters | and table_constraint is: [ CONSTRAINT constraint_name ] { CHECK ( expression ) | UNIQUE [ NULLS [ NOT ] DISTINCT ] ( column_name [, ... ] ) index_parameters | PRIMARY KEY ( column_name [, ... ] ) index_parameters | and like_option is: { INCLUDING | EXCLUDING } { COMMENTS | CONSTRAINTS | DEFAULTS | GENERATED | IDENTITY | INDEXES | STATISTICS | ALL } index_parameters in UNIQUE, and PRIMARY KEY constraints are: [ INCLUDE ( column_name [, ... ] ) ]
ALTER TABLE
ALTER TABLE
modifica la definizione di una tabella.
ALTER TABLE [ IF EXISTS ] [ ONLY ] name [ * ] action [, ... ] ALTER TABLE [ IF EXISTS ] [ ONLY ] name [ * ] RENAME [ COLUMN ] column_name TO new_column_name ALTER TABLE [ IF EXISTS ] [ ONLY ] name [ * ] RENAME CONSTRAINT constraint_name TO new_constraint_name ALTER TABLE [ IF EXISTS ] name RENAME TO new_name ALTER TABLE [ IF EXISTS ] name SET SCHEMA new_schema where action is one of: ADD [ COLUMN ] [ IF NOT EXISTS ] column_name data_type OWNER TO { new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER }
CREATE VIEW
CREATE VIEW
definisce una nuova vista persistente. Aurora DSQL non supporta le visualizzazioni 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 ]
Descrizione
CREATE VIEW
definisce una visualizzazione di un'interrogazione. La vista non è materializzata fisicamente. La query viene invece eseguita ogni volta che viene fatto riferimento alla vista in un'interrogazione.
CREATE or REPLACE VIEW
è simile, ma se esiste già una vista con lo stesso nome, viene sostituita. La nuova query deve generare le stesse colonne generate dalla query di visualizzazione esistente (ovvero gli stessi nomi di colonna nello stesso ordine e con gli stessi tipi di dati), ma può aggiungere colonne aggiuntive alla fine dell'elenco. I calcoli che danno origine alle colonne di output possono essere diversi.
Se viene fornito un nome di schema, ad esempioCREATE VIEW myschema.myview ...
), la vista viene creata nello schema specificato. Altrimenti, viene creata nello schema corrente.
Il nome della vista deve essere distinto dal nome di qualsiasi altra relazione (tabella, indice, vista) nello stesso schema.
Parametri
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;
È necessario specificare un elenco di nomi di colonne di visualizzazione per una vista ricorsiva.
name
-
Il nome della vista da creare, che può essere facoltativamente qualificata dallo schema. È necessario specificare un elenco di nomi di colonna per una vista ricorsiva.
column_name
-
Un elenco opzionale di nomi da utilizzare per le colonne della vista. Se non viene fornito, i nomi delle colonne vengono dedotti 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ò essere uno dei duelocal
ed è equivalente a specificare.cascaded
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 tutteWHERE
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 confrontate con i privilegi dell'utente della vista anziché del proprietario della vista. Per tutti i dettagli, consulta le note riportate di seguito.
Tutte le opzioni precedenti possono essere modificate nelle viste esistenti utilizzando
ALTER VIEW
. -
query
-
Un
VALUES
comandoSELECT
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,INSERT
iUPDATE
comandi 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 nonCHECK OPTION
è specificato,INSERT
iUPDATE
comandi della vista possono creare righe che non sono visibili attraverso la vista. Sono supportate le seguenti opzioni di controllo. -
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 non specifichino anche ilCHECK OPTION
). -
CASCADED
: le nuove righe vengono verificate rispetto alle condizioni della vista e di tutte le viste di base sottostanti. SeCHECK OPTION
viene specificato e non viene specificato né l'unoLOCAL
néCASCADED
l'altro,CASCADED
viene assunto.
Nota
Non
CHECK OPTION
può essere utilizzato con leRECURSIVE
viste.CHECK OPTION
è supportato solo nelle visualizzazioni che sono aggiornabili automaticamente. -
Note
Utilizza l'DROP VIEW
istruzione per eliminare le visualizzazioni. I nomi e i tipi di dati delle colonne della vista devono essere considerati attentamente.
Ad esempio, non CREATE VIEW vista AS SELECT 'Hello World';
è consigliato perché il nome predefinito della colonna è. ?column?;
Inoltre, il tipo di dati predefinito della colonna è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 visualizzazioni sono protette dalla manomissione.
-
Se la
security_invoker
proprietà della vista è impostata su true, l'accesso alle relazioni di base sottostanti è determinato dalle autorizzazioni dell'utente che esegue la query, anziché dal proprietario della vista. Pertanto, l'utente di una vista 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 Security Invoker, verrà trattata come se vi fosse stato effettuato l'accesso direttamente dalla query originale. Pertanto, una vista 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 richiamate nella vista vengono trattate come se fossero state chiamate direttamente dalla query utilizzando la vista. Pertanto, l'utente di una vista deve disporre delle autorizzazioni per richiamare 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
Ad esempio, la chiamataCURRENT_USER
diretta in una vista restituirà sempre l'utente che invoca, non il proprietario della vista. Ciò non è influenzato dall'security_invoker
impostazione della vista, quindi una vistasecurity_invoker
impostata su false non è equivalente a unaSECURITY DEFINER
funzione. -
L'utente che crea o sostituisce una vista deve disporre
USAGE
dei privilegi su tutti gli schemi a cui si fa riferimento nella query di visualizzazione, per cercare gli oggetti a cui si fa riferimento in tali schemi. Si noti, tuttavia, che questa ricerca viene eseguita solo quando la vista viene creata o sostituita. Pertanto, l'utente della vista richiede solo ilUSAGE
privilegio sullo schema che contiene la vista, non sugli schemi a cui si fa riferimento nella query di visualizzazione, anche per una vista Security Invoker. -
Quando
CREATE OR REPLACE VIEW
viene utilizzata in una vista esistente, vengono modificate solo laSELECT
regola di definizione della vista, più eventualiWITH ( ... )
parametri e relativi parametri.CHECK OPTION
Le altre proprietà della vista, tra cui proprietà, autorizzazioni e regole non selezionate, rimangono invariate. Devi essere il proprietario della vista per sostituirla (ciò include essere un membro del ruolo proprietario).
Visualizzazioni aggiornabili
Le viste semplici sono aggiornabili automaticamente: il sistema consentirà INSERT
di utilizzare le DELETE
istruzioni nella vista nello stesso modo in cui si utilizza una tabella normale. UPDATE
Una vista è aggiornabile automaticamente se soddisfa tutte le seguenti condizioni:
-
La vista deve avere esattamente una voce nell'
FROM
elenco, che deve essere una tabella o un'altra vista aggiornabile. -
La definizione della vista non deve contenere
WITH
DISTINCT
,GROUP BY
,HAVING
LIMIT
, oOFFSET
clausole di primo livello. -
La definizione della vista non deve contenere operazioni di set (
UNION
INTERSECT
, oEXCEPT
) al livello superiore. -
L'elenco di selezione della vista non deve contenere aggregati, funzioni di finestra o funzioni di restituzione dei set.
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'UPDATE
istruzione INSERT
or tenta di assegnarle un valore.
Per le viste aggiornabili automaticamente, il sistema converte qualsiasi INSERT
DELETE
istruzione o istruzione sulla vista nell'istruzione corrispondente sulla relazione di base sottostante. UPDATE
INSERT
le istruzioni con una ON CONFLICT UPDATE
clausola sono pienamente supportate.
Se una vista aggiornabile automaticamente contiene una WHERE
condizione, la condizione limita le righe della relazione di base che possono essere modificate UPDATE
e DELETE
le istruzioni sulla vista. Tuttavia, un utente UPDATE
può modificare una riga in modo che non soddisfi più la WHERE
condizione, rendendola invisibile attraverso la vista. Allo stesso modo, un INSERT
comando può potenzialmente inserire righe di relazione di base che non soddisfano la WHERE
condizione, rendendole invisibili attraverso la vista. ON CONFLICT UPDATE
può influire in modo analogo su una riga esistente non visibile attraverso la vista.
Puoi usare il CHECK OPTION
per impedire che INSERT
i UPDATE
comandi creino righe che non sono visibili attraverso la vista.
Se una vista aggiornabile automaticamente è contrassegnata con la proprietà security_barrier, tutte le WHERE
condizioni della vista (e tutte le condizioni che utilizzano gli operatori contrassegnati comeLEAKPROOF
) vengono sempre valutate prima di qualsiasi condizione aggiunta da un utente della vista. Tieni presente che per questo motivo, le righe che alla fine non vengono restituite (perché non soddisfano WHERE
le condizioni dell'utente) potrebbero comunque finire per essere bloccate. Puoi usarlo EXPLAIN
per vedere quali condizioni vengono applicate a livello di relazione (e quindi non bloccano le righe) e quali no.
Una vista più complessa che non soddisfa tutte queste condizioni è di sola lettura per impostazione predefinita: il sistema non consente l'inserimento, l'aggiornamento o l'eliminazione nella 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 security_invoker impostato su true, l'utente che esegue l'aggiornamento, anziché il proprietario della vista, 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';
Questo creerà una vista contenente le colonne presenti nella film
tabella al momento della creazione della vista. Sebbene sia *
stato utilizzato per creare la vista, le colonne aggiunte successivamente alla tabella non faranno parte della vista.
Crea una vista conLOCAL CHECK OPTION
.
CREATE VIEW pg_comedies AS SELECT * FROM comedies WHERE classification = 'PG' WITH CASCADED CHECK OPTION;
Questo creerà una vista che controlla sia la kind
riga che quella classification
delle nuove righe.
Crea una vista con un mix di colonne aggiornabili e non aggiornabili.
CREATE VIEW comedies AS SELECT f.*, country_code_to_name(f.country_code) AS country, (SELECT avg(r.rating) FROM user_ratings r WHERE r.film_id = f.id) AS avg_rating FROM films f WHERE f.kind = 'Comedy';
Questa visualizzazione supporteràINSERT
, eUPDATE
. DELETE
Tutte le colonne della tabella dei film saranno aggiornabili, mentre le colonne calcolate avg_rating
saranno di country
sola lettura.
CREATE RECURSIVE VIEW public.nums_1_100 (n) AS VALUES (1) UNION ALL SELECT n+1 FROM nums_1_100 WHERE n < 100;
Nota
Sebbene il nome della vista ricorsiva sia qualificato in base allo schema, il suo autoreferenziamento interno non è qualificato dallo schema. CREATE
Questo perché il nome di Common Table Expression (CTE) creato implicitamente non può essere qualificato dallo schema.
Compatibilità
CREATE OR REPLACE VIEW
è un'estensione del linguaggio PostgreSQL. Anche la WITH ( ... )
clausola è un'estensione, così come le viste delle barriere di sicurezza e le viste degli invoker di sicurezza. Aurora DSQL supporta queste estensioni linguistiche.
ALTER VIEW
L'ALTER VIEW
istruzione consente di modificare varie proprietà di una vista esistente e Aurora DSQL supporta tutta la sintassi PostgreSQL per questo comando.
Sintassi supportata
ALTER VIEW [ IF EXISTS ] name ALTER [ COLUMN ] column_name SET DEFAULT expression ALTER VIEW [ IF EXISTS ] name ALTER [ COLUMN ] column_name DROP DEFAULT ALTER VIEW [ IF EXISTS ] name OWNER TO { new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER } ALTER VIEW [ IF EXISTS ] name RENAME [ COLUMN ] column_name TO new_column_name ALTER VIEW [ IF EXISTS ] name RENAME TO new_name ALTER VIEW [ IF EXISTS ] name SET SCHEMA new_schema ALTER VIEW [ IF EXISTS ] name SET ( view_option_name [= view_option_value] [, ... ] ) ALTER VIEW [ IF EXISTS ] name RESET ( view_option_name [, ... ] )
Descrizione
ALTER VIEW
modifica varie proprietà ausiliarie di una vista. (Se vuoi modificare la query di definizione della vista, usaCREATE OR REPLACE VIEW
.) È necessario possedere la vista da utilizzareALTER VIEW
. Per modificare lo schema di una vista, devi anche disporre dei CREATE
privilegi sul nuovo schema. Per modificare il proprietario, devi essere in grado di SET ROLE
ricoprire il nuovo ruolo di proprietario e quel ruolo deve avere CREATE
i privilegi sullo schema della vista. Queste restrizioni impongono che la modifica del proprietario non comporti alcun effetto che non si possa fare eliminando e ricreando la visualizzazione.)
Parametri
Parametri ALTER VIEW
name
-
Il nome (facoltativamente qualificato dallo schema) di una vista esistente.
column_name
-
Nuovo nome per una colonna esistente.
IF EXISTS
-
Non generare un errore se la vista non esiste. In questo caso viene emesso un avviso.
SET/DROP DEFAULT
-
Questi moduli impostano o rimuovono il valore predefinito per una colonna. Il valore predefinito di una colonna di visualizzazione viene sostituito in qualsiasi
UPDATE
comandoINSERT
o la cui destinazione è la vista. Il valore predefinito della vista avrà quindi la precedenza su qualsiasi valore predefinito delle relazioni sottostanti. - new_owner
-
Il nome utente del nuovo proprietario della vista.
- new_name
-
Il nuovo nome per la visualizzazione.
- new_schema
-
Il nuovo schema per la vista.
- SET (view_option_name [= view_option_value] [,...])
- RESET (view_option_name [,...])
-
Imposta o ripristina un'opzione di visualizzazione. Le opzioni attualmente supportate sono riportate di seguito.
-
check_option (enum)
: modifica l'opzione di controllo della vista. Il valore deve esserelocal
ocascaded
. -
security_barrier (boolean)
—Modifica la proprietà della barriera di sicurezza della vista. Il valore deve essere un valore booleano, ad esempio o.true
false
-
security_invoker (boolean)
—Modifica la proprietà della barriera di sicurezza della vista. Il valore deve essere un valore booleano, ad esempio o.true
false
-
Note
Per ragioni storiche di PG, ALTER TABLE
può essere utilizzato anche con le viste; ma le uniche varianti consentite con ALTER TABLE
le viste sono equivalenti a quelle mostrate in precedenza.
Esempi
Rinominare la vista foo
in. bar
ALTER VIEW foo RENAME TO bar;
Associare un valore di colonna predefinito a una vista aggiornabile.
CREATE TABLE base_table (id int, ts timestamptz); CREATE VIEW a_view AS SELECT * FROM base_table; ALTER VIEW a_view ALTER COLUMN ts SET DEFAULT now(); INSERT INTO base_table(id) VALUES(1); -- ts will receive a NULL INSERT INTO a_view(id) VALUES(2); -- ts will receive the current time
Compatibilità
ALTER VIEW
è un'estensione PostgreSQL dello standard SQL supportato da Aurora DSQL.
DROP VIEW
L'DROP VIEW
istruzione rimuove una vista esistente. Aurora DSQL supporta la sintassi PostgreSQL completa per questo comando.
Sintassi supportata
DROP VIEW [ IF EXISTS ] name [, ...] [ CASCADE | RESTRICT ]
Descrizione
DROP VIEW
elimina una vista esistente. Per eseguire questo comando devi essere il proprietario della vista.
Parametri
IF EXISTS
-
Non generare un errore se la vista non esiste. In questo caso viene emesso un avviso.
name
-
Il nome (facoltativamente qualificato dallo schema) della vista da rimuovere.
CASCADE
-
Rilascia automaticamente gli oggetti che dipendono dalla vista (come le altre viste) e, a loro volta, tutti gli oggetti che dipendono da tali oggetti.
RESTRICT
-
Rifiuta di eliminare la vista se alcuni oggetti dipendono da essa. Questa è l'impostazione predefinita.
Esempi
DROP VIEW kinds;
Compatibilità
Questo comando è conforme allo standard SQL, tranne per il fatto che lo standard consente di eliminare una sola vista per comando e a parte l'IF EXISTS
opzione, che è un'estensione PostgreSQL supportata da Aurora DSQL.