O problema é escrever a requisição "ADD-VALUE" definida abaixo.
Para cada valor " cat " da tabela abaixo, mantenha apenas 3 registros. Figura esta tabela:
Eu iria | gato | valor | atualizado em |
---|---|---|---|
1 | gato1 | v1 | 01/06/2021 00:00:01 |
2 | gato1 | v2 | 01/06/2021 00:00:02 |
3 | gato1 | v3 | 01/06/2021 00:00:03 (o ponteiro cat1 está aqui) |
4 | gato2 | v1 | 01/06/2021 00:01:01 |
5 | gato2 | v2 | 01/06/2021 00:01:02 (o ponteiro cat2 está aqui) |
Caso INSERT : Chamar "ADD-VALUE(cat= cat2 , value=v3)" produzirá o resultado em negrito:
Eu iria | gato | valor | atualizado em |
---|---|---|---|
1 | gato1 | v1 | 01/06/2021 00:00:01 |
2 | gato1 | v2 | 01/06/2021 00:00:02 |
3 | gato1 | v3 | 01/06/2021 00:00:03 (o ponteiro cat1 está aqui) |
4 | gato2 | v1 | 01/06/2021 00:01:01 |
5 | gato2 | v2 | 01/06/2021 00:01:02 |
6 | gato2 | v3 | 01/06/2021 00:01:02 (apontador cat2 agora está aqui) |
UPDATE case : Chamar "ADD-VALUE(cat= cat1 , value=v4)" produzirá o resultado em negrito:
Eu iria | gato | valor | atualizado em |
---|---|---|---|
1 | gato1 | v4 | 01/07/2021 00:00:04 (o ponteiro cat1 agora está aqui) |
2 | gato1 | v2 | 01/06/2021 00:00:02 |
3 | gato1 | v3 | 01/06/2021 00:00:03 |
4 | gato2 | v1 | 01/06/2021 00:01:01 |
5 | gato2 | v2 | 01/06/2021 00:01:02 (o ponteiro cat2 está aqui) |
Qualquer conselho é bem-vindo. UPDATE ou INSERT em um pedido talvez seja impossível? Eu penso em usar row-num para ter a contagem por categoria.
Sua ideia seria difícil de aplicar sob carga simultânea. Em vez disso, continue adicionando novas linhas (
INSERT
somente). Existem consultas simples e rápidas para obter a(s) linha(s) atual(is) para cada gato.Certifique-se, que
updated_at
é atual. Eu adicionei um padrão de coluna e um gatilho para isso. Para descartar entradas duplicadas para o mesmo cat e o mesmo timestamp, adicione uma restrição UNIQUE.Ou, para ter certeza absoluta, faça isso:
O valor padrão normalmente cuida das inserções de forma barata, mas pode ser anulado com a inserção explícita de um valor. O gatilho anula, não importa o quê.
Para obter a linha "atual" para um determinado gato:
Isso é extremamente rápido enquanto você tem um índice correspondente :
Nas versões modernas do Postgres, você pode usar um índice de cobertura exclusivo para substituir o índice e
UNIQUE
a restrição. Ver:Para obter as últimas três linhas (ao vivo), use a mesma consulta com
LIMIT 3
:De tempos em tempos (conforme seu db carregar e agendar permitir/exigir), exclua linhas obsoletas:
db<>fique aqui