Zwiększ wartość w Postgres

108

Jestem trochę nowy w postgres. Chcę wziąć wartość (która jest liczbą całkowitą) w polu w tabeli postgres i zwiększyć ją o jeden. Na przykład, jeśli tabela „sumy” miała 2 kolumny, „imię” i „suma”, a Bill miał w sumie 203, jakiej instrukcji SQL użyłbym, aby przenieść sumę Billa do 204?

greatwitenorth
źródło

Odpowiedzi:

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

Jeśli chcesz się upewnić, że aktualna wartość to rzeczywiście 203 (i nie zwiększyć jej przypadkowo), możesz również dodać kolejny warunek:

UPDATE totals 
   SET total = total + 1
WHERE name = 'bill'
  AND total = 203;
koń bez imienia
źródło
1
Próbowałem zwiększyć niecałkowity typ danych i otrzymałem: ERROR: operator does not exist: character varying + integer LINE 2: SET total = total + 1 Rozwiązany przez rzutowanie wartości jako liczby całkowitej w ten sposóbSET total = total::int + 1
Stew-au
33
@ Stew-au: Czy nie przechowywać liczb w kolumnach varchar. Na dłuższą metę sprawi ci to kłopoty. Użyj liczby całkowitej (lub biginta lub innego odpowiedniego), ale nie używaj znakowego typu danych.
a_horse_with_no_name
4
Czy to stwierdzenie jest niepodzielne, czy też potrzebowałbym pesymistycznego zablokowania tabeli w pierwszej kolejności? (Obawiam się, że pomiędzy przypisywaniem sumy a pobieraniem sumy dla sumy + 1 do tabeli zostało
napisane
9
W relacyjnej bazie danych pojedyncza instrukcja jest zawsze niepodzielna. Jednak uruchomienie aktualizacji nie uniemożliwi innym odczytywania starych wartości, dopóki transakcja nie zostanie
zatwierdzona
3
Dla upsert patrz dba.stackexchange.com/questions/161127/ ...
iElectric