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


108

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

Ответы:


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

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

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

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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.