Увеличьте значение в Postgres

108

Я немного новичок в postgres. Я хочу взять значение (которое является целым числом) в поле в таблице postgres и увеличить его на единицу. Например, если в таблице «Итоги» было 2 столбца, «имя» и «Итого», а у Билла было всего 203, какой SQL-оператор я бы использовал, чтобы переместить общее количество Билла до 204?

Greatwitenorth
источник

Ответы:

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

Если вы хотите убедиться, что текущее значение действительно 203 (а не случайно снова увеличить его), вы также можете добавить еще одно условие:

UPDATE totals 
   SET total = total + 1
WHERE name = 'bill'
  AND total = 203;
a_horse_with_no_name
источник
1
Я пытался увеличить нецелочисленный тип данных и получил: ERROR: operator does not exist: character varying + integer LINE 2: SET total = total + 1 Решено путем преобразования значения в целое число, как этоSET total = total::int + 1
Stew-au
33
@ Stew-au: не храните числа в столбцах varchar. Это доставит вам проблемы в долгосрочной перспективе. Используйте целое число (или bigint, или другое подходящее), но не используйте символьный тип данных.
a_horse_with_no_name
4
Является ли этот оператор атомарным или мне сначала потребуется пессимистическая блокировка таблицы для записи? (Я опасаюсь, что в промежутке между присвоением итога и получением итога для итога + 1 в таблицу были внесены какие-то записи.)
miho
9
Одиночный оператор всегда атомарен в реляционной базе данных. Однако запуск обновления не помешает другим читать старые значения, пока ваша транзакция не будет зафиксирована
a_horse_with_no_name
3
Дополнительную информацию см. На dba.stackexchange.com/questions/161127/…
iElectric 02