2012-04-19 188 views
57

Soy un poco nuevo en postgres. Quiero tomar un valor (que es un entero) en un campo en una tabla de postgres e incrementarlo en uno. Por ejemplo, si la tabla 'totales' tuviera 2 columnas, 'nombre' y 'total', y Bill tuviera un total de 203, ¿cuál sería la declaración SQL que usaría para mover el total de Bill a 204?Incrementar un valor en Postgres

Respuesta

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

Si desea asegurarse de que el valor actual es de hecho 203 (y no accidentalmente aumentar de nuevo) también se puede añadir otra condición:

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

yo estaba tratando de incrementar ** no entero ** tipo de datos y obtener: 'ERROR: no existe operador: carácter variable + número entero LINE 2: conjunto total = total + 1' Resuelto por colada el valor como número entero como este' conjunto total = Total :: int + 1 ' –

+19

@ Stew-au: Hacer *** no *** almacenar números en columnas varchar. Eso te dará problemas en el largo plazo. Use un entero (o letra grande o lo que sea adecuado) pero no use un tipo de datos de caracteres. –

+2

¿Esta afirmación es atómica o necesitaría un bloqueo pesimista de la tabla para las escrituras primero? (Mi temor es que entre la asignación del total y la obtención del total para un total de + 1, se haya hecho algo de escritura en la tabla.) – miho

Cuestiones relacionadas