PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como posso encaminhar uma sequência de chave primária no Django com segurança?


Como ainda não encontrei uma maneira "automatizada" de fazer isso, estou pensando na seguinte solução alternativa - seria viável para minha situação específica:
  1. Defina a sequência com um MAXVALUE 49999 NO CYCLE
  2. Quando 49999 for alcançado, o próximo save() irá se deparar com um erro postgres
  3. Pegue essa exceção e aumente novamente como um erro de formulário "você ficou sem números, redefina para o próximo bloco e tente novamente"
  4. Forneça uma visualização onde o usuário possa ativar o próximo bloco, ou seja, execute "ALTER SEQUENCE my_seq RESTART WITH 70000 MAXVALUE 89999"

Estou desconfortável em fazer a reinicialização automaticamente ao capturar a exceção:
try:
    instance.save()
except RunOutOfIdsException:
    restart_id_sequence()
    instance.save()

como temo que dois save() simultâneos ficando sem ids levarão a duas reinicializações separadas e a uma violação subsequente da restrição exclusiva. (basicamente o mesmo conceito do problema original)