Postgresql
在 Postgresql 中重新啟動標識列
對於
serial
Postgresql < 10 中使用的列,我們按其名稱管理序列。我們能夠通過以下方式重置序列:SELECT setval('table_id_seq', (SELECT MAX(id) FROM table));
從版本 10 開始,使用標識列,無需使用序列名稱。那很好。
ALTER TABLE table ALTER COLUMN id RESTART WITH 1000;
如何在
max(id)
不知道序列名稱的情況下將標識列設置為?據我從ALTER TABLE 語法中可以看出,沒有辦法讓子查詢來計算序列的開始。
我想寫一些類似的東西:
ALTER TABLE table ALTER COLUMN id RESTART WITH (SELECT MAX(id) FROM table);
您可以對標識列執行相同的操作 - 它們也使用序列。
您可以使用
pg_get_serial_sequence()
來獲取序列的名稱:SELECT setval(pg_get_serial_sequence('the_table', 'id'), coalesce(MAX(id), 1)) from the_table;
以上適用於
serial
和identity
列的方式相同。