在postgresql中:如何创建一个可以重置的简单计数器?

时间:2008-12-15 09:08:05

标签: postgresql

我想实现以下目标:

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

现在说我要更新ID 1的计数器,,,最简单的方法是什么?我使用序列吗?我只是读取值并更新?它有什么特殊类型吗?

我正在考虑使用序列但是我必须为每个ID创建一个(可能超过1000个。我也将面临我不知道需要多少序列的问题所以我会有检查是否存在该ID等的序列......我不希望这样。

假设这些数字是属于某个组的用户,那么我想到的另一种选择是为每个计数输入一行,当我想要获取数字时,我会通过id或者某事执行选择组并获得行数。

编辑:澄清 我收到了一个csv中的用户列表,我的程序每天处理几次(新的csv一天几次)。然后,根据用户今天是否已发送消息(例如),我增加该用户所属组的计数器。现在在某一点上我想要提取组(它可以是动态的,它取决于我在白天得到的)并获得我增加的数字并重置它。 希望这能解释得更多:D

感谢您的帮助到目前为止,我将进行实验:D

您怎么看?

3 个答案:

答案 0 :(得分:8)

这看起来很简单。

增量

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

复位

UPDATE Table SET Counter = 0 WHERE ID = 1

答案 1 :(得分:7)

更新表 SET Counter = Counter + 1 WHERE ID =:ID;

(其中'Table'当然是带有计数器的表,参数':ID'是计数器的id)

序列主要用于顺序自动生成ID值,并且可能有间隙。上面的update语句是原子的,因为update是一个原子操作。但是,如果您之后发出选择权,则表示计数器仍然是相同的值。如果你想要,你需要序列,但是你有可能存在差距。

因此,这里的回答者可能有必要知道计数器的用途是什么。

答案 2 :(得分:0)

听起来就像你需要的是完全按照以下方式创建视图

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