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 TYPEeTYPEsono 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