Sommario: questo tutorial mostra passo dopo passo come cambiare il tipo di dati di una colonna usando l’istruzione ALTER TABLE
.
PostgreSQL change column type statement
Per cambiare il tipo di dati di una colonna, si usa l’istruzione ALTER TABLE
come segue:
Code language: CSS (css)ALTER TABLE table_nameALTER COLUMN column_name TYPE new_data_type;
Esaminiamo l’istruzione in modo più dettagliato:
- In primo luogo, specificate il nome della tabella a cui la colonna che volete cambiare dopo le parole chiave
ALTER TABLE
. - In secondo luogo, specificate il nome della colonna di cui volete cambiare il tipo di dati dopo la clausola
ALTER COLUMN
. - In terzo luogo, fornite il nuovo tipo di dati per la colonna dopo la parola chiave
TYPE
. IlSET DATA TYPE
eTYPE
sono equivalenti.
Per cambiare i tipi di dati di più colonne in una singola dichiarazione, si usano più clausole ALTER COLUMN
come questa:
Code language: SQL (Structured Query Language) (sql)ALTER TABLE table_nameALTER COLUMN column_name1 TYPE new_data_type,ALTER COLUMN column_name2 TYPE new_data_type,...;
In questa sintassi, si aggiunge una virgola (,
) dopo ogni clausola ALTER COLUMN
.
PostgreSQL permette di convertire i valori di una colonna in quelli nuovi cambiando il suo tipo di dati aggiungendo una clausola USING
come segue:
Code language: SQL (Structured Query Language) (sql)ALTER TABLE table_nameALTER COLUMN column_name TYPE new_data_type USING expression;
La clausola USING
specifica una espressione che permette di convertire i vecchi valori in quelli nuovi.
Se si omette la clausola USING
, PostgreSQL farà il cast dei valori in quelli nuovi implicitamente. Nel caso in cui il cast fallisca, PostgreSQL emetterà un errore e raccomanda di fornire la clausola USING
con un’espressione per la conversione dei dati.
L’espressione dopo la parola chiave USING
può essere semplice come column_name::new_data_type
come price::numeric
o complessa come una funzione personalizzata.
Esempi di cambio di tipo di colonna in PostgreSQL
Creiamo una nuova tabella chiamata assets
e inseriamo alcune righe nella tabella per la dimostrazione.
Code language: SQL (Structured Query Language) (sql)CREATE TABLE assets ( id serial PRIMARY KEY, name TEXT NOT NULL, asset_no VARCHAR NOT NULL, description TEXT, location TEXT, acquired_date DATE NOT NULL);INSERT INTO assets(name,asset_no,location,acquired_date)VALUES('Server','10001','Server room','2017-01-01'), ('UPS','10002','Server room','2017-01-01');
Per cambiare il tipo di dati della colonna name
in VARCHAR
, si usa la seguente dichiarazione:
Code language: SQL (Structured Query Language) (sql)ALTER TABLE assets ALTER COLUMN name TYPE VARCHAR;
La seguente dichiarazione cambia i tipi di dati delle colonne description
e location
da TEXT
a VARCHAR
:
Code language: SQL (Structured Query Language) (sql)ALTER TABLE assets ALTER COLUMN location TYPE VARCHAR, ALTER COLUMN description TYPE VARCHAR;
Per cambiare il tipo di dati della colonna asset_no
in intero, si usa la seguente istruzione:
Code language: SQL (Structured Query Language) (sql)ALTER TABLE assets ALTER COLUMN asset_no TYPE INT;
PostgreSQL ha rilasciato un errore e un suggerimento molto utile:
Code language: SQL (Structured Query Language) (sql)ERROR: column "asset_no" cannot be cast automatically to type integerHINT: You might need to specify "USING asset_no::integer".
L’istruzione seguente aggiunge la clausola USING
all’istruzione precedente:
Code language: SQL (Structured Query Language) (sql)ALTER TABLE assetsALTER COLUMN asset_no TYPE INT USING asset_no::integer;
Ha funzionato come previsto.
In questo tutorial, avete imparato ad usare l’istruzione ALTER TABLE ALTER COLUMN
per cambiare il tipo di una colonna.
- Questo tutorial è stato utile?
0 commenti