2008-12-15 25 views
5

que quiero lograr lo siguiente:En postgresql: ¿Cómo creo un contador simple que puedo restablecer?

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

Ahora dicen que quiero actualizar contador para ID 1 ,,, ¿cuál es la forma más fácil de hacerlo? ¿Uso secuencias? ¿simplemente leo el valor y la actualizo? ¿Hay algún tipo especial para eso?

Estaba pensando en usar la secuencia, pero luego tengo que crear una para cada ID (que potencialmente puede ser más de 1000. También enfrentaré el problema de que no sé cuántas secuencias necesitaré, así que lo haría tengo que verificar si hay una secuencia para ese ID y etc ... y no quiero eso.

Supongamos que los números son usuarios que pertenecen a un grupo determinado, entonces una alternativa en la que estaba pensando era ingresar una fila por cada cargo y cuando quiero obtener el número realizo un grupo selecto por el id o algo y obtener el número de filas

EDIT:. Aclaración que recibo una lista de usuarios en un csv que mi programa maneja varias veces al día (nueva csv varias veces al día). Luego, dependiendo de si el usuario ha enviado un mensaje hoy (por ejemplo), incremente el contador para el grupo al que pertenece este usuario. Ahora, en cierto punto, quiero extraer los grupos (que pueden ser dinámicos, depende de lo que obtuve durante el día) y obtener el número que incremente y restablecer. Esperamos que esto lo explica más: D

Gracias por la ayuda hasta el momento, voy a experimentar: D

¿Qué opinas?

Respuesta

6

tabla de actualización SET Contador = Contador + 1 donde id =: Identificación;

(donde 'Tabla' es, por supuesto la mesa con el contador, y el parámetro ': ID' es el ID del contador)

Las secuencias se utiliza principalmente para valores de ID de generación de auto secuencialmente y pueden tener brechas. La declaración de actualización anterior es atómica, ya que la actualización es una acción atómica. Sin embargo, no se dice que si emite una selección justo después, el contador sigue teniendo el mismo valor. Si quieres eso, necesitas secuencias, pero luego corres el riesgo de tener vacíos.

Por lo tanto, puede ser necesario que los respondedores aquí sepan cuál es el propósito de los contadores.

+1

¿No puedes usar 'DEVOLUCIÓN Counter' si desea que garantiza la atomicidad? – rightfold

0

Se suena como lo que se necesita es crear una vista exactamente a lo largo de las líneas de:

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

8

Esto parece bastante simple.

Incremento

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

Restablecer

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

¿No hay un problema con esto si dos usuarios se incrementan en paralelo? – Ced

Cuestiones relacionadas