2012-04-19 11 views
57

Sono un po 'nuovo per Postgres. Voglio prendere un valore (che è un numero intero) in un campo in una tabella postgres e incrementarlo di uno. Per esempio se la tabella 'totali' avesse 2 colonne, 'nome' e 'totale', e Bill avesse un totale di 203, quale sarebbe l'istruzione SQL che userei per spostare il totale di Bill a 204?Incremento di un valore in Postgres

risposta

116
UPDATE totals 
    SET total = total + 1 
WHERE name = 'bill'; 

Se si vuole fare in modo il valore corrente è infatti 203 (e non accidentalmente aumentare di nuovo) si può anche aggiungere un'altra condizione:

UPDATE totals 
    SET total = total + 1 
WHERE name = 'bill' 
    AND total = 203; 
+0

stavo cercando di incrementare ** non intero ** datatype e get: 'ERRORE: l'operatore non esiste: carattere variabile + numero intero LINEA 2: SET totale = totale + 1' Risolto tramite il cast del valore come intero come questo' SET totale = totale :: int + 1 ' –

+19

@ Stew-au: Do *** not *** memorizza i numeri nelle colonne varchar. Ciò ti procurerà problemi a lungo termine. Usa un numero intero (o bigint o qualunque cosa sia adatta) ma non usare un tipo di carattere. –

+2

Questa affermazione è atomica o avrei bisogno di bloccare pessimisticamente la tabella per le scritture prima? (La mia paura è che tra l'assegnazione del totale e il recupero totale per il totale + 1 sia stata fatta qualche scrittura al tavolo.) – miho

Problemi correlati