Postgresql

在 Postgresql 中重新啟動標識列

  • June 1, 2021

對於serialPostgresql < 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;

以上適用於serialidentity列的方式相同。

引用自:https://dba.stackexchange.com/questions/292617