Eu quero que a tabela contenha logs e seja em loop, então, quando chegar a última chave na sequência, ela começará de um e reescreverá os logs antigos.
Eu posso fazer isso se eu marcar a sequência como ciclo e fizer solicitações assim:
INSERT INTO logs (initiator_id, target_id, action, message) VALUES ($1, $2, $3, $4)
ON CONFLICT (id) DO UPDATE SET target_id=$2, initiator_id=$1, action=$3, message=$4;
O que eu não gosto, é que eu preciso repetir as mesmas inserções se houver conflito (linha 2)
O que estou curioso, é uma boa maneira de fazer, ou há outras maneiras mais práticas para tabelas que você precisa limpar, digamos, a cada 3 montagens?
Ou talvez haja uma maneira de gerar id exclusivo sem usar sequências?
Por enquanto eu decidi fazer 2 colunas de chave primária (data, initiator_id) como log é sempre 1 ação de cada vez.
você poderia simplesmente usar uma sequência monotônica (sempre contando para cima) e excluir registros com base em sua idade
você pode fazer particionamento de tabela por data e apenas descartar as partições antigas
Postgresql nunca substitui registros, uma atualização sempre cria um novo registro e marca o antigo como não utilizado. O Autovacuum, mais cedo ou mais tarde, disponibilizará o espaço usado pelo antigo para armazenar novos registros. Se você quer algo como RRDB, provavelmente deveria estar usando algo como RRDB em vez de postgresql.