Oggi aggiungiamo un altro dettaglio magico alle nostre conoscenze: il comando RETURNING. È uno strumento potente che ti permette di ricevere subito i dati che ti servono dopo un'insert, un update o una delete. Immagina di inserire una riga in una tabella e ricevere subito il suo identificatore unico. Comodo, vero? Certo! Impariamo come si fa!
Dopo aver eseguito operazioni INSERT, UPDATE o DELETE a volte serve subito sapere quali dati sono stati toccati. Per esempio, dopo aver inserito una nuova riga in una tabella, ci serve sapere la sua chiave primaria generata automaticamente (identificatore unico). Invece di fare una query separata per ottenere questi dati, possiamo farlo subito durante l'operazione usando RETURNING.
Supponiamo che tu stia aggiungendo un nuovo studente nella tabella students. Ogni studente ha un identificatore unico (tipo student_id) che viene generato in automatico. Dopo aver aggiunto il nuovo record vuoi subito usare questo identificatore per le iscrizioni ai corsi. Senza RETURNING dovresti prima aggiungere lo studente, poi fare una query SELECT separata per trovare il suo id. Con RETURNING fai tutto in una sola query!
Sintassi del comando RETURNING
Il comando RETURNING si mette alla fine delle operazioni INSERT, UPDATE e DELETE. Ecco la sintassi generale:
-- Sintassi INSERT:
INSERT INTO tabella (column1, column2, ...)
VALUES (value1, value2, ...)
RETURNING colonna;
-- Sintassi UPDATE:
UPDATE tabella
SET column1 = value1
WHERE condizione
RETURNING colonna;
-- Sintassi DELETE:
DELETE FROM tabella
WHERE condizione
RETURNING colonna;
RETURNING ti permette di specificare quali colonne delle righe modificate vuoi ricevere indietro. Può essere una colonna specifica (tipo la chiave primaria) o anche più colonne insieme.
Uso di RETURNING con INSERT
Vediamo un esempio di tabella students:
CREATE TABLE students (
student_id SERIAL PRIMARY KEY,
first_name TEXT NOT NULL,
last_name TEXT NOT NULL,
email TEXT UNIQUE
);
Aggiungiamo un nuovo studente e otteniamo subito il suo identificatore:
INSERT INTO students (first_name, last_name, email)
VALUES ('Otto', 'Lin', 'otto.lin@example.com')
RETURNING student_id;
La query restituirà l'identificatore dello studente appena aggiunto:
| student_id |
|---|
| 1 |
Hai appena aggiunto lo studente Otto Lin e PostgreSQL ti ha subito detto il suo student_id. Comodo, no?
Ora vediamo come inserire e ricevere subito più colonne. Se ti servono non solo student_id, ma anche altri dati come nome e cognome, puoi chiederli tramite RETURNING:
INSERT INTO students (first_name, last_name, email)
VALUES ('Alex', 'Ming', 'alex.ming@example.com')
RETURNING student_id, first_name, last_name;
Risultato:
| student_id | first_name | last_name |
|---|---|---|
| 2 | Alex | Ming |
Uso di RETURNING con UPDATE
A volte dopo un update ci serve sapere quali righe sono state modificate. RETURNING è perfetto per questo.
Immagina che lo studente Otto Lin voglia cambiare la sua email. Aggiorniamo i suoi dati e riceviamo subito le info della riga modificata:
UPDATE students
SET email = 'lin.new@example.com'
WHERE student_id = 1
RETURNING student_id, email;
Risultato:
| student_id | |
|---|---|
| 1 | lin.new@example.com |
Ora sai esattamente che l'email dello studente con student_id = 1 è stata aggiornata con successo.
Uso di RETURNING con DELETE
Quando cancelli record da una tabella, può essere utile sapere quali righe sono state eliminate. Con RETURNING puoi ottenere i dati delle righe cancellate.
Facciamo un esempio. Supponiamo che lo studente Peter Ming sia stato espulso. Lo cancelliamo dalla tabella e otteniamo info sulla sua eliminazione:
DELETE FROM students
WHERE student_id = 2
RETURNING student_id, first_name, last_name;
Risultato:
| student_id | first_name | last_name |
|---|---|---|
| 2 | Peter | Ming |
Ora sei sicuro che proprio Peter Ming è stato eliminato.
Consigli pratici
Usa RETURNING ogni volta che ti servono i dati delle righe toccate. Così eviti query inutili al database.
Minimizza la quantità di dati restituiti. Se ti serve solo la chiave primaria, chiedi solo quella.
In combinazione con le transazioni RETURNING diventa ancora più potente. Ad esempio, puoi aggiungere dati in più tabelle collegate, passando gli identificatori tramite RETURNING.
Errori tipici con RETURNING
Spesso chi inizia si dimentica che RETURNING funziona solo con le righe effettivamente modificate. Ad esempio, se una query UPDATE o DELETE non trova nessuna riga, RETURNING restituisce un risultato vuoto. Non spaventarti, è normale. Basta controllare che la tua query sia corretta, oppure gestire questo caso nel codice dell'applicazione.
E un altro errore comune: provare a usare RETURNING per colonne che non esistono. Assicurati sempre che tutte le colonne richieste esistano nella tua tabella.
Ora sai come RETURNING può semplificarti la vita con i dati. È uno di quegli strumenti che apprezzerai davvero quando farai applicazioni reali. Avanti verso nuovi orizzonti!
GO TO FULL VERSION