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.