# PostgreSQL ALTER TABLE: aggiunta o rimozione di colonne

Il comando ALTER TABLE ti permette di modificare le tabelle in PostgreSQL. Il comando è utilizzato con un’azione, ad esempio per aggiungere o modificare le colonne.

## Che cos’è `ALTER TABLE` in PostgreSQL?

Il comando `ALTER TABLE` di [PostgreSQL](https://www.ionos.it/digitalguide/server/know-how/postgresql/) serve a **modificare tabelle** già esistenti. Questa istruzione può essere utilizzata per aggiungere, eliminare o modificare una colonna in base alle tue esigenze. Inoltre `ALTER TABLE` di PostgreSQL serve anche a stabilire o rimuovere vincoli per una tabella nel [sistema di gestione di database](https://www.ionos.it/digitalguide/hosting/tecniche-hosting/sistema-di-gestione-di-base-di-dati-dbms/). Per ottenere il risultato desiderato è necessario **specificare il comando con un’azione**.

## `ALTER TABLE`: la sintassi

Per capire meglio il funzionamento di questo comando vale la pena dare un’occhiata alla sintassi di base di `ALTER TABLE`. Si presenta così:

```postgresql
ALTER TABLE nome_della_tabella azione;
```

Dopo il comando vero e proprio si inserisce il nome della tabella che desideri modificare. A seguire devi specificare il comando PostgreSQL ALTER TABLE con l’azione desiderata.

Consiglio Per creare una nuova tabella in PostgreSQL, utilizza il comando [CREATE TABLE](https://www.ionos.it/digitalguide/server/configurazione/postgresql-create-table/).

## PostgreSQL ALTER TABLE: esempi

Nei paragrafi seguenti trovi una descrizione del funzionamento di `ALTER TABLE` con alcuni esempi pratici. A tal fine creiamo una tabella di esempio denominata “Clienti”, che contiene inizialmente tre colonne e tre righe. La tabella si presenta così:

<table>
  <thead>
    <tr>
      <th>ID</th>
      <th>Nome</th>
      <th>Città</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Rossi</td>
      <td>Roma</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Verdi</td>
      <td>Milano</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Bianchi</td>
      <td>Torino</td>
    </tr>
  </tbody>
</table>

In PostgreSQL possiamo quindi modificare la tabella in diversi modi utilizzando ALTER TABLE.

### Aggiunta di una colonna con `ADD COLUMN` in PostgreSQL

Per aggiungere una nuova colonna in PostgreSQL, utilizza `ALTER TABLE` in combinazione con `ADD COLUMN`. Questa azione dispone di due parametri: il nome della colonna e il tipo di dati della colonna. La sintassi si presenta come segue:

```postgresql
ALTER TABLE nome_della_tabella ADD COLUMN nome_della_colonna tipo_dati;
```

Se desideri aggiungere una colonna per gli indirizzi alla tabella “Clienti”, utilizza ADD COLUMN in PostgreSQL nel modo seguente:

```postgresql
ALTER TABLE Clienti ADD COLUMN Indirizzo VARCHAR(255);
```

La nuova tabella estesa si presenta quindi così:

<table>
  <thead>
    <tr>
      <th>ID</th>
      <th>Nome</th>
      <th>Città</th>
      <th>Indirizzo</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Rossi</td>
      <td>Roma</td>
      <td>NULL</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Verdi</td>
      <td>Milano</td>
      <td>NULL</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Bianchi</td>
      <td>Torino</td>
      <td>NULL</td>
    </tr>
  </tbody>
</table>

### Eliminazione di una colonna con DROP COLUMN

La procedura per eliminare una colonna da una tabella già esistente è molto simile. A tal fine utilizziamo il comando `ALTER TABLE` di PostgreSQL in combinazione con l’azione `DROP COLUMN`. Quest’ultima accetta come unico parametro il nome della colonna. La sintassi è la seguente:

```postgresql
ALTER TABLE nome_della_tabella DROP COLUMN nome_della_colonna;
```

Per rimuovere la colonna “Città”, utilizziamo questo codice:

```postgresql
ALTER TABLE Clienti DROP COLUMN Città;
```

Ora nella tabella rimangono solo tre colonne:

<table>
  <thead>
    <tr>
      <th>ID</th>
      <th>Nome</th>
      <th>Indirizzo</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Rossi</td>
      <td>NULL</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Verdi</td>
      <td>NULL</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Bianchi</td>
      <td>NULL</td>
    </tr>
  </tbody>
</table>

### Modifica del nome delle colonne con RENAME COLUMN

È possibile anche cambiare il nome di una colonna già esistente come valida alternativa all’eliminazione o all’aggiunta di nuove colonne. La sintassi di `RENAME COLUMN` nell’ambito di `ALTER TABLE` si presenta così:

```postgresql
ALTER TABLE nome_della_tabella RENAME COLUMN nome_della_colonna TO nuovo_nome;
```

In questo caso trasformiamo la colonna “Nome” nella colonna “Nome del cliente”:

```postgresql
ALTER TABLE Clienti RENAME COLUMN Nome TO Nome del cliente;
```

Nella nostra tabella cambia quindi solo il nome di questa colonna, come desiderato:

<table>
  <thead>
    <tr>
      <th>ID</th>
      <th>Nome del cliente</th>
      <th>Indirizzo</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Rossi</td>
      <td>NULL</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Verdi</td>
      <td>NULL</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Bianchi</td>
      <td>NULL</td>
    </tr>
  </tbody>
</table>

### Ulteriori azioni di PostgreSQL per ALTER TABLE

Sono disponibili molte altre azioni che puoi utilizzare in combinazione con `ALTER TABLE`. Le principali sono:

Per cambiare il **tipo di dati** di una colonna:

```postgresql
ALTER TABLE nome_della_tabella ALTER TABLE nome_della_colonna TYPE tipo_dati;
```

Per stabilire che a una colonna **deve essere assegnato un valore**:

```postgresql
ALTER TABLE nome_della_tabella ALTER COLONNA nome_della_colonna SET NOT NULL;
```

Per assegnare a una colonna vincoli come UNIQUE o PRIMARY KEY, utilizza ALTER TABLE di PostgreSQL in combinazione con l’azione ADD CONSTRAINT:

```postgresql
ALTER TABLE nome_della_tabella ADD CONSTRAINT nome_del_vincolo definizione_del_vincolo;
```


This is a markdown version of: [https://www.ionos.it/digitalguide/server/configurazione/postgresql-alter-table/](https://www.ionos.it/digitalguide/server/configurazione/postgresql-alter-table/) for AI/LLM consumption.