ADD COLUMN
Questa forma aggiunge una nuova colonna alla tabella, usando la stessa sintassi di CREATE TABLE.
DROP COLUMN
Questa forma elimina una colonna da una tabella. Anche gli indici e i vincoli di tabella che coinvolgono la colonna saranno automaticamente eliminati. Avrete bisogno di dire CASCADE se qualcosa al di fuori della tabella dipende dalla colonna, per esempio, riferimenti a chiavi esterne o viste. Se IF EXISTS è specificato e la colonna non esiste, non viene lanciato alcun errore. In questo caso viene invece emesso un avviso.
SET DATA TYPE
Questa forma cambia il tipo di una colonna di una tabella. Gli indici e i semplici vincoli di tabella che coinvolgono la colonna saranno automaticamente convertiti per usare il nuovo tipo di colonna riparando l’espressione originariamente fornita. La clausola opzionale COLLATE specifica un ordinamento per la nuova colonna; se omessa, l’ordinamento è quello predefinito per il nuovo tipo di colonna. La clausola opzionale USING specifica come calcolare il valore della nuova colonna dal vecchio; se omessa, la conversione predefinita è la stessa di un cast di assegnazione dal vecchio tipo di dati al nuovo. Una clausola USING deve essere fornita se non c’è un cast implicito o di assegnazione dal vecchio al nuovo tipo.
SET/DROP DEFAULT
Queste forme impostano o rimuovono il valore di default per una colonna. I valori di default si applicano solo ai successivi comandi INSERT; non causano il cambiamento delle righe già presenti nella tabella. I valori predefiniti possono anche essere creati per le viste, nel qual caso vengono inseriti nelle istruzioni di INSERT sulla vista prima che venga applicata la regola ON INSERT della vista stessa.
SET/DROP NOT NULL
Queste forme cambiano se una colonna è contrassegnata per consentire valori nulli o per rifiutare valori nulli. Potete usare SET NOT NULL solo quando la colonna non contiene valori nulli.
SET STATISTICS
Questa forma imposta il target di raccolta delle statistiche per colonna per le successive operazioni ANALYZE. L’obiettivo può essere impostato nell’intervallo da 0 a 10000; in alternativa, impostatelo a -1 per tornare a usare l’obiettivo statistico di default del sistema (default_statistics_target). Per maggiori informazioni sull’uso delle statistiche da parte del pianificatore di query PostgreSQL, fare riferimento alla Sezione 14.2.
SET ( attribute_option = value )
RESET ( attribute_option )
Questa forma imposta o resetta opzioni per attributo. Attualmente, le uniche opzioni definite per attributo sono n_distinct e n_distinct_inherited, che sovrascrivono le stime del numero di valori distinti fatte dalle successive operazioni ANALYZE. n_distinct influenza le statistiche per la tabella stessa, mentre n_distinct_inherited influenza le statistiche raccolte per la tabella più i suoi figli ereditari. Quando è impostato a un valore positivo, ANALYZE assume che la colonna contenga esattamente il numero specificato di valori distinti non nulli. Quando è impostato a un valore negativo, che deve essere maggiore o uguale a -1, ANALYZE assume che il numero di valori distinti non nulli nella colonna sia lineare nella dimensione della tabella; il conteggio esatto deve essere calcolato moltiplicando la dimensione stimata della tabella per il valore assoluto del numero dato. Per esempio, un valore di -1 implica che tutti i valori nella colonna sono distinti, mentre un valore di -0,5 implica che ogni valore appare due volte nella media. Questo può essere utile quando la dimensione della tabella cambia nel tempo, poiché la moltiplicazione per il numero di righe nella tabella non viene eseguita fino al momento della pianificazione della query. Specificate un valore di 0 per tornare a stimare il numero di valori distinti normalmente. Per maggiori informazioni sull’uso delle statistiche da parte del pianificatore di query PostgreSQL, fate riferimento alla Sezione 14.2.
SET STORAGE
Questa forma imposta la modalità di memorizzazione per una colonna. Questo controlla se questa colonna è tenuta in linea o in una tabella TOAST secondaria, e se i dati devono essere compressi o meno. PLAIN deve essere usato per valori a lunghezza fissa come gli interi ed è in linea, non compresso. MAIN è per dati in linea, comprimibili. EXTERNAL è per dati esterni, non compressi, e EXTENDED è per dati esterni, compressi. EXTENDED è l’impostazione predefinita per la maggior parte dei tipi di dati che supportano la memorizzazione non-PLAIN. L’uso di EXTERNAL renderà le operazioni di sottostringa su valori di testo e bytea molto grandi più veloci, a scapito di un maggiore spazio di memorizzazione. Si noti che SET STORAGE non cambia nulla nella tabella, imposta solo la strategia da perseguire durante i futuri aggiornamenti della tabella. Vedere la Sezione 55.2 per maggiori informazioni.
ADD table_constraint
Questa forma aggiunge un nuovo vincolo a una tabella usando la stessa sintassi di CREATE TABLE, più l’opzione NOT VALID, che attualmente è permessa solo per i vincoli a chiave esterna. Se il vincolo è marcato NOT VALID, il controllo iniziale potenzialmente lungo per verificare che tutte le righe della tabella soddisfino il vincolo viene saltato. Il vincolo sarà ancora applicato contro i successivi inserimenti o aggiornamenti (cioè, falliranno a meno che non ci sia una riga corrispondente nella tabella di riferimento). Ma il database non assumerà che il vincolo sia valido per tutte le righe della tabella, finché non sarà convalidato usando l’opzione VALIDATE CONSTRAINT.
ADD table_constraint_using_index
Questo modulo aggiunge un nuovo vincolo PRIMARY KEY o UNIQUE a una tabella basato su un indice unico esistente. Tutte le colonne dell’indice saranno incluse nel vincolo.
L’indice non può avere colonne di espressione né essere un indice parziale. Inoltre, deve essere un indice b-tree con ordinamento predefinito. Queste restrizioni assicurano che l’indice sia equivalente a uno che verrebbe costruito da un normale comando ADD PRIMARY KEY o ADD UNIQUE.
Se viene specificata la PRIMARY KEY e le colonne dell’indice non sono già contrassegnate come NOT NULL, allora questo comando tenterà di eseguire ALTER COLUMN SET NOT NULL per ogni colonna. Questo richiede una scansione completa della tabella per verificare che la colonna (o le colonne) non contengano null. In tutti gli altri casi, questa è un’operazione veloce.
Se viene fornito il nome di un vincolo, l’indice verrà rinominato per corrispondere al nome del vincolo. Altrimenti il vincolo avrà lo stesso nome dell’indice.
Dopo l’esecuzione di questo comando, l’indice è “di proprietà” del vincolo, come se l’indice fosse stato costruito con un normale comando ADD PRIMARY KEY o ADD UNIQUE. In particolare, l’abbandono del vincolo farà scomparire anche l’indice.
Nota: Aggiungere un vincolo usando un indice esistente può essere utile in situazioni in cui un nuovo vincolo deve essere aggiunto senza bloccare gli aggiornamenti della tabella per molto tempo. Per farlo, create l’indice usando CREATE INDEX CONCURRENTLY, e poi installatelo come un vincolo ufficiale usando questa sintassi. Vedere l’esempio qui sotto.
VALIDATE CONSTRAINT
Questa forma convalida un vincolo a chiave esterna che è stato precedentemente creato come NOT VALID, scansionando la tabella per assicurarsi che non ci siano righe non abbinate. Non succede nulla se il vincolo è già contrassegnato come valido.
La validazione può essere un processo lungo su tabelle più grandi e attualmente richiede un blocco ACCESS EXCLUSIVE. Il valore di separare la convalida dalla creazione iniziale è che si può rimandare la convalida a tempi meno impegnativi, o può essere usata per dare tempo aggiuntivo per correggere errori preesistenti mentre si prevengono nuovi errori.
DROP CONSTRAINT
Questa forma elimina il vincolo specificato su una tabella. Se è specificato IF EXISTS e il vincolo non esiste, non viene lanciato alcun errore. In questo caso viene invece emesso un avviso.
DISABLE/ENABLE TRIGGER
Queste forme configurano l’attivazione dei trigger appartenenti alla tabella. Un trigger disabilitato è ancora noto al sistema, ma non viene eseguito quando si verifica il suo evento scatenante. Per un trigger differito, lo stato di abilitazione viene controllato quando si verifica l’evento, non quando la funzione di trigger viene effettivamente eseguita. Si può disabilitare o abilitare un singolo trigger specificato per nome, o tutti i trigger della tabella, o solo i trigger utente (questa opzione esclude i trigger di vincoli generati internamente come quelli che sono usati per implementare i vincoli di chiave esterna o i vincoli di unicità ed esclusione differibili). Disabilitare o abilitare i trigger di vincoli generati internamente richiede i privilegi di superutente; dovrebbe essere fatto con cautela poiché ovviamente l’integrità del vincolo non può essere garantita se i trigger non vengono eseguiti. Il meccanismo di sparo dei trigger è anche influenzato dalla variabile di configurazione session_replication_role. I trigger semplicemente abilitati si attivano quando il ruolo di replicazione è “origin” (il default) o “local”. I trigger configurati come ENABLE REPLICA si attivano solo se la sessione è in modalità “replica”, e i trigger configurati come ENABLE ALWAYS si attivano indipendentemente dalla modalità di replica corrente.
DISABLE/ENABLE RULE
Queste forme configurano l’attivazione delle regole di riscrittura appartenenti alla tabella. Una regola disabilitata è ancora nota al sistema, ma non viene applicata durante la riscrittura della query. La semantica è quella dei trigger disabilitati/abilitati. Questa configurazione è ignorata per le regole ON SELECT, che sono sempre applicate per mantenere le viste funzionanti anche se la sessione corrente è in un ruolo di replica non predefinito.
CLUSTER
Questa forma seleziona l’indice predefinito per le future operazioni CLUSTER. In realtà non riclustera la tabella.
SET WITHOUT CLUSTER
Questa forma rimuove la specifica dell’indice CLUSTER usato più recentemente dalla tabella. Questo influenza le future operazioni di cluster che non specificano un indice.
SET WITH OIDS
Questa forma aggiunge una colonna di sistema oid alla tabella (vedi Sezione 5.4). Non fa nulla se la tabella ha già degli OID.
Nota che questo non è equivalente a ADD COLUMN oid oid; questo aggiungerebbe una colonna normale che si chiama oid, non una colonna di sistema.
SET WITHOUT OIDS
Questa forma rimuove la colonna di sistema oid dalla tabella. Questo è esattamente equivalente a DROP COLUMN oid RESTRICT, eccetto che non si lamenterà se non c’è già una colonna oid.
SET ( storage_parameter = value )
Questa forma cambia uno o più parametri di storage per la tabella. Vedere Parametri di memorizzazione per i dettagli sui parametri disponibili. Si noti che il contenuto della tabella non verrà modificato immediatamente da questo comando; a seconda del parametro potrebbe essere necessario riscrivere la tabella per ottenere gli effetti desiderati. Questo può essere fatto con VACUUM FULL, CLUSTER o una delle forme di ALTER TABLE che forza una riscrittura della tabella.
Nota: Mentre CREATE TABLE permette di specificare OIDS nella sintassi WITH (storage_parameter), ALTER TABLE non tratta OIDS come un parametro di storage. Usate invece le forme SET WITH OIDS e SET WITHOUT OIDS per cambiare lo stato dell’OID.
RESET ( storage_parameter )
Questa forma riporta uno o più parametri di archiviazione ai loro valori predefiniti. Come con SET, potrebbe essere necessaria una riscrittura della tabella per aggiornarla completamente.
INHERIT parent_table
Questa forma aggiunge la tabella di destinazione come nuovo figlio della tabella padre specificata. Successivamente, le query contro il genitore includeranno i record della tabella di destinazione. Per essere aggiunta come figlia, la tabella di destinazione deve già contenere tutte le stesse colonne del genitore (potrebbe anche avere colonne aggiuntive). Le colonne devono avere i tipi di dati corrispondenti, e se hanno vincoli NOT NULL nel genitore allora devono avere anche vincoli NOT NULL nel figlio.
Ci devono essere anche vincoli corrispondenti nella tabella figlia per tutti i vincoli CHECK del genitore. Attualmente i vincoli UNIQUE, PRIMARY KEY e FOREIGN KEY non sono considerati, ma questo potrebbe cambiare in futuro.
NO INHERIT parent_table
Questa forma rimuove la tabella di destinazione dalla lista dei figli della tabella padre specificata. Le query contro la tabella padre non includeranno più i record tratti dalla tabella di destinazione.
OF type_name
Questa forma collega la tabella a un tipo composito come se CREATE TABLE OF l’avesse formata. L’elenco dei nomi delle colonne e dei tipi della tabella deve corrispondere esattamente a quello del tipo composito; la presenza di una colonna di sistema oid può differire. La tabella non deve ereditare da nessun’altra tabella. Queste restrizioni assicurano che CREATE TABLE OF permetta una definizione equivalente della tabella.
NOT OF
Questa forma dissocia una tabella tipizzata dal suo tipo.
OWNER
Questa forma cambia il proprietario della tabella, sequenza o vista all’utente specificato.
SET TABLESPACE
Questa forma cambia il tablespace della tabella nel tablespace specificato e sposta i file di dati associati alla tabella nel nuovo tablespace. Gli indici sulla tabella, se presenti, non vengono spostati; ma possono essere spostati separatamente con ulteriori comandi SET TABLESPACE. Vedi anche CREATE TABLESPACE.
RENAME
I moduli RENAME cambiano il nome di una tabella (o un indice, una sequenza o una vista) o il nome di una singola colonna in una tabella. Non ci sono effetti sui dati memorizzati.
SET SCHEMA
Questa forma sposta la tabella in un altro schema. Anche gli indici associati, i vincoli e le sequenze possedute dalle colonne della tabella vengono spostati.