В postgresql: Как мне создать простой счетчик, который я могу сбросить? - PullRequest
6 голосов
/ 15 декабря 2008

Я хочу добиться следующего:

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

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

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

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

РЕДАКТИРОВАТЬ: Уточнение Я получаю список пользователей в CSV, который моя программа обрабатывает несколько раз в день (новый CSV несколько раз в день). Затем, в зависимости от того, отправил ли пользователь сообщение сегодня (например), я увеличиваю счетчик для группы, к которой принадлежит этот пользователь. Теперь в определенный момент я хочу извлечь группы (которые могут быть динамическими, это зависит от того, что я получил в течение дня) и получить число, которое я увеличил, и сбросить его. Надеюсь, это объясняет это больше: D

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

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

Ответы [ 3 ]

8 голосов
/ 15 декабря 2008

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

Increment

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

Сброс

UPDATE Table SET Counter = 0 WHERE ID = 1
7 голосов
/ 15 декабря 2008

ОБНОВЛЕНИЕ таблицы SET Counter = Counter + 1 ГДЕ ID =: ID;

(где «Таблица» - это, конечно, таблица со счетчиком, а параметр «: ID» - это идентификатор счетчика)

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

Так что ответчикам здесь может быть необходимо знать, какова цель счетчиков.

0 голосов
/ 15 декабря 2008

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...