2008-12-15 8 views
5

ich folgendes erreichen will:In postgresql: Wie erstelle ich einen einfachen Zähler, den ich zurücksetzen kann?

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

Jetzt sagen, dass ich zu aktualisierenden Zähler für ID 1 ,,, was ist der einfachste Weg, es zu tun? Benütze ich Sequenzen? lese ich einfach den Wert und aktualisiere? Gibt es eine spezielle Art dafür?

Ich habe über die Verwendung der Sequenz nachgedacht, aber dann muss ich eine für jede ID erstellen (die möglicherweise über 1000 sein kann. Ich werde auch das Problem haben, dass ich nicht weiß, wie viele Sequenzen ich brauche, also würde ich muss überprüfen, ob es eine Sequenz für diese ID und etc ... gibt und ich will das nicht.

Angenommen, die Nummern sind Benutzer, die zu einer bestimmten Gruppe gehören, dann eine Alternative, über die ich nachdenken wollte eine Reihe für jede Zählung und wenn ich die Nummer bekomme ich eine Auswahlgruppe durch die ID oder etwas und bekomme die Anzahl der Zeilen.

EDIT: Klarstellung Ich bekomme eine Liste von Benutzern in einem csv, dass meine Programm behandelt mehrmals am Tag (neue CSV mehrmals am Tag). Dann, je nachdem, ob der Benutzer heute eine Nachricht gesendet hat (beispielsweise), inkrementiere ich den Zähler für die Gruppe, zu der dieser Benutzer gehört. Jetzt an einem bestimmten Punkt möchte ich die Gruppen extrahieren (was dynamisch sein kann, hängt davon ab, was ich während des Tages bekommen habe) und bekomme die Nummer, die ich inkrementiert habe und setze sie zurück. Hoffentlich erklärt es: D

Danke für die Hilfe so weit, ich will experimentieren: D

Was denken Sie?

Antwort

6

UPDATE Tabelle SET Zähler = + 1 WHERE ID =: ID;

(wobei ‚Tabelle‘ ist natürlich die Tabelle mit dem Zähler und der Parameter ‚: ID‘ ist die ID des Zählers)

Sequences hauptsächlich zum sequentiellen automatischen Erzeugen ID-Werten verwendet werden und kann Lücken. Die obige update-Anweisung ist atomar, da es sich bei update um eine atomare Aktion handelt. Es wird jedoch nicht gesagt, dass der Zähler immer noch den gleichen Wert hat, wenn Sie später eine Auswahl treffen. Wenn Sie das wollen, brauchen Sie Sequenzen, aber dann laufen Sie Gefahr, Lücken zu haben.

So könnte es für die Beantworter hier notwendig sein zu wissen, was der Zweck der Zähler ist.

+1

Können Sie nicht 'verwenden RÜCKKEHR Counter' wenn Sie Unteilbarkeit Garantien wollen? – rightfold

0

Es klingt wie das, was Sie brauchen eine Ansicht genau entlang der Linien zu schaffen ist:

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

8

Dies scheint einfach genug zu sein.

Increment

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

Zurücksetzen

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

Gibt es kein Problem damit, wenn zwei Benutzer parallel inkrementieren? – Ced

Verwandte Themen