Para serial
colunas usadas no Postgresql < 10, gerenciamos a sequência pelo nome. Conseguimos redefinir uma sequência com:
SELECT setval('table_id_seq', (SELECT MAX(id) FROM table));
A partir da versão 10, usando colunas de identidade, não há necessidade de usar o nome da sequência. Muito legal.
ALTER TABLE table ALTER COLUMN id RESTART WITH 1000;
Como defino a coluna de identidade para ser a max(id)
sem saber o nome da sequência?
Tanto quanto posso ver na sintaxe ALTER TABLE , não há como ter uma subconsulta para calcular o início da sequência.
Eu gostaria de escrever algo como:
ALTER TABLE table ALTER COLUMN id RESTART WITH (SELECT MAX(id) FROM table);
Você pode fazer o mesmo com colunas de identidade - elas também usam uma sequência.
Você pode usar
pg_get_serial_sequence()
para obter o nome da sequência:O acima funciona para
serial
eidentity
colunas da mesma maneira.