Sottoinsiemi di comandi SQL supportati in Aurora DSQL - Amazon Aurora DSQL

Amazon Aurora DSQL viene fornito come servizio di anteprima. Per ulteriori informazioni, consulta le versioni beta e le anteprime nei Termini di servizio. AWS

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 TABLEdefinisce 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 TABLEmodifica 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 VIEWdefinisce 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 VIEWdefinisce 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 VIEWsupporta 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 due local 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 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 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 utilizzandoALTER 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, INSERT i UPDATE 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 non CHECK OPTION è specificato, INSERT i UPDATE 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. Se CHECK OPTION viene specificato e non viene specificato né l'uno LOCALCASCADED l'altro, CASCADED viene assunto.

Nota

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

Note

Utilizza l'DROP VIEWistruzione 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 chiamata CURRENT_USER diretta in una vista restituirà sempre l'utente che invoca, non il proprietario della vista. Ciò non è influenzato dall'security_invokerimpostazione della vista, quindi una vista security_invoker impostata su false non è equivalente a una SECURITY 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 il USAGE 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 la SELECT regola di definizione della vista, più eventuali WITH ( ... ) 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'FROMelenco, che deve essere una tabella o un'altra vista aggiornabile.

  • La definizione della vista non deve contenere WITHDISTINCT,GROUP BY, HAVINGLIMIT, o OFFSET clausole di primo livello.

  • La definizione della vista non deve contenere operazioni di set (UNIONINTERSECT, 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'UPDATEistruzione 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 INSERTle 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 UPDATEpuò 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 VIEWistruzione 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 VIEWmodifica 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 comando INSERT 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 essere local o cascaded.

  • 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 VIEWistruzione 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 VIEWelimina 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 EXISTSopzione, che è un'estensione PostgreSQL supportata da Aurora DSQL.