Incrementar un valor en Postgres

108

Soy un poco nuevo en postgres. Quiero tomar un valor (que es un número 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 instrucción SQL que usaría para mover el total de Bill a 204?

greatwitenorth
fuente

Respuestas:

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

Si desea asegurarse de que el valor actual sea 203 (y no volver a aumentarlo accidentalmente), también puede agregar otra condición:

UPDATE totals 
   SET total = total + 1
WHERE name = 'bill'
  AND total = 203;
un caballo sin nombre
fuente
1
Estaba tratando de incrementar el tipo de datos no entero y obteniendo: ERROR: operator does not exist: character varying + integer LINE 2: SET total = total + 1 Resuelto lanzando el valor como un entero como esteSET total = total::int + 1
Stew-au
33
@ Guiso-au: Do no almacenar números en las columnas varchar. Eso le dará problemas a largo plazo. Utilice un número entero (o bigint o lo que sea adecuado) pero no utilice un tipo de datos de carácter.
a_horse_with_no_name
4
¿Es esta declaración atómica o necesitaría bloquear la tabla pesimista para escrituras primero? (Mi temor es que entre la asignación del total y la obtención del total para el total + 1 se haya escrito algo en la mesa).
miho
9
Una sola declaración es siempre atómica en una base de datos relacional. Sin embargo, ejecutar la actualización no evitará que otros lean los valores anteriores hasta que se
confirme
3
Para obtener información adicional, consulte dba.stackexchange.com/questions/161127/…
iElectric