Збільшення значення в Postgres


108

Я трохи новачок у postgres. Я хочу взяти значення (яке є цілим числом) у полі таблиці postgres і збільшити його на одиницю. Наприклад, якщо таблиця "підсумки" мала 2 стовпці, "ім'я" та "загальна кількість", а в Білла 203, що б було за допомогою SQL-оператора, щоб перенести загальну суму Білла на 204?

Відповіді:


209
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
@ Рагу-Пренс: Do НЕ зберігати числа в VARCHAR стовпців. Це доставить вам проблеми в довгостроковій перспективі. Використовуйте ціле число (або bigint або все, що підходить), але не використовуйте тип даних символів.
a_horse_with_no_name

4
Це твердження атомарне чи мені потрібно песимістично заблокувати таблицю для запису спочатку? (Мій страх полягає в тому, що між присвоєнням загальної кількості та отриманням загальної кількості для загальної кількості + 1 до таблиці було зроблено деякі записи.)
miho

9
Одне твердження завжди є атомним у реляційній базі даних. Однак запуск оновлення не завадить іншим читати старі значення, поки ваша транзакція не буде здійснена
a_horse_with_no_name

3
Для запуску дивіться dba.stackexchange.com/questions/161127/…
iElectric
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.