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

Criação de objetos Django e sequências Postgres


tudo funciona bem. O create() do django não tem nada a ver com a incimentação de sequência diretamente. brevemente:
  • postgresql auto increment (tipo 'serial') é apenas um atalho de 'criar sequência + criar campo inteiro com valor de sequência como padrão'
  • a chave primária de autofield do django (identeger se não for especificada por você) apenas cria um campo serial
  • quando você especifica o id manualmente, o postgres insere o valor no banco de dados. quando você especifica um valor, ele omite o parâmetro 'default', que é um comportamento adequado.

então, se você quiser que suas inserções incrementem a sequência de uma forma de sua escolha, você precisa alterar manualmente o valor da sequência usando SELECT setval('sequence_name', int_value); caso contrário, deixe-o nulo e ele será incrementado automaticamente - selecione o valor atual e incremente-o +1 (se não for especificado de forma diferente na definição da sequência).

outra ideia é você criar o objeto e depois atualizar o id (claro que já não pode ser usado) e no final definir o valor da sequência para o id máximo.