Um
serial
a coluna só desenha o próximo número de uma sequência por padrão . Se você escrever um valor nele, o padrão não será ativado. Você pode apenas COPY
para a mesa (veja a resposta do @Saravanan
) e, em seguida, atualize a sequência de acordo. Um maneira de fazer isso:SELECT setval('tbl_tbl_id_seq', max(tbl_id)) FROM tbl;
tbl_id
sendo a coluna serial da tabela tbl
, tirando da sequência tbl_tbl_id_seq
(nome padrão). Melhor em uma transação única em caso de carga concorrente.
Observe que não há erro off-by-1 aqui. Por documentação:
Minha ênfase em negrito.