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:

ALTER TABLE table_nameALTER COLUMN column_name TYPE new_data_type;
Code language: CSS (css)

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. Il SET DATA TYPE e TYPE sono equivalenti.

Per cambiare i tipi di dati di più colonne in una singola dichiarazione, si usano più clausole ALTER COLUMN come questa:

ALTER TABLE table_nameALTER COLUMN column_name1 TYPE new_data_type,ALTER COLUMN column_name2 TYPE new_data_type,...;
Code language: SQL (Structured Query Language) (sql)

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:

ALTER TABLE table_nameALTER COLUMN column_name TYPE new_data_type USING expression;
Code language: SQL (Structured Query Language) (sql)

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.

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');
Code language: SQL (Structured Query Language) (sql)

Per cambiare il tipo di dati della colonna name in VARCHAR, si usa la seguente dichiarazione:

ALTER TABLE assets ALTER COLUMN name TYPE VARCHAR;
Code language: SQL (Structured Query Language) (sql)

La seguente dichiarazione cambia i tipi di dati delle colonne description e location da TEXT a VARCHAR:

ALTER TABLE assets ALTER COLUMN location TYPE VARCHAR, ALTER COLUMN description TYPE VARCHAR;
Code language: SQL (Structured Query Language) (sql)

Per cambiare il tipo di dati della colonna asset_no in intero, si usa la seguente istruzione:

ALTER TABLE assets ALTER COLUMN asset_no TYPE INT;
Code language: SQL (Structured Query Language) (sql)

PostgreSQL ha rilasciato un errore e un suggerimento molto utile:

ERROR: column "asset_no" cannot be cast automatically to type integerHINT: You might need to specify "USING asset_no::integer".
Code language: SQL (Structured Query Language) (sql)

L’istruzione seguente aggiunge la clausola USING all’istruzione precedente:

ALTER TABLE assetsALTER COLUMN asset_no TYPE INT USING asset_no::integer;
Code language: SQL (Structured Query Language) (sql)

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?

Categorie: Articles

0 commenti

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *