2008-12-15 8 views
5

Я хочу, чтобы достичь следующего:В postgresql: Как создать простой счетчик, который я могу сбросить?

ID | Counter 
------------ 
0 | 343 
1 | 8344 

Теперь говорят, что я хочу, чтобы обновить счетчик для ID 1 ,,, что это самый простой способ сделать это? Я использую последовательности? просто я прочитал значение и обновление? Есть ли для этого какой-то особый тип?

Я думал об использовании последовательности, но затем мне нужно создать один для каждого идентификатора (который потенциально может быть более 1000. Я также столкнусь с проблемой, что я не знаю, сколько последовательностей мне понадобится, чтобы я вам нужно проверить, есть ли последовательность для этого идентификатора и т. д. ... и я не хочу этого.

Предположим, что числа являются пользователями, принадлежащими к определенной группе, тогда альтернатива, о которой я думал, заключалась в том, чтобы ввести строка для каждого подсчета, и когда я хочу получить номер, я выполняю выбранную группу по id или что-то еще и получаю номера строк.

EDIT: Разъяснение Получаю список пользователей в csv, что мой программа обрабатывает несколько раз в день (новые csv несколько раз в день). Затем, в зависимости от того, отправил ли пользователь сообщение сегодня (например), я увеличиваю счетчик для группы, в которую принадлежит этот пользователь. Теперь в какой-то момент я хочу извлечь группы (которые могут быть динамическими, это зависит от того, что я получил в течение дня) и получить число, которое я увеличил и сбросил. Надеюсь, это объясняет больше: D

Спасибо за помощь до сих пор, я буду экспериментировать: D

Что вы думаете?

ответ

6

UPDATE таблицы SET Счетчик = Счетчик + 1 WHERE ID =: ID;

(где «Таблица», конечно, таблица со счетчиком, и параметр «: ИД» является идентификатор счетчика)

Последовательности в основном используются для значений ID автоматической генерации последовательно и может иметь пробелы. Вышеприведенный оператор update является атомарным, так как обновление является атомарным действием. Однако не сказано, что если вы выберете сразу выбор, счетчик останется тем же самым значением. Если вы этого хотите, вам нужны последовательности, но тогда вы рискуете иметь пробелы.

Поэтому, возможно, администраторы должны знать, для чего предназначена цель счетчиков.

+1

Не можете вы используете `ВОЗВРАЩЕНИЕ Counter` если вы хотите атомарности гарантии? – rightfold 2013-12-22 05:59:15

0

Это звучит как то, что вам нужно, чтобы создать вид точно вдоль линий:

select id, count(users) from foo group by id

8

Это может показаться довольно простым.

Increment

UPDATE Table SET Counter = Counter + 1 WHERE ID = 1 

Сброс

UPDATE Table SET Counter = 0 WHERE ID = 1 
+0

Нет ли проблемы с этим, если два пользователя будут увеличиваться параллельно? – Ced 2017-09-05 12:52:19

Смежные вопросы