jgr*_*cha 3 postgresql sequence identity
对于serial
Postgresql < 10 中使用的列,我们按名称管理序列。我们能够通过以下方式重置序列:
SELECT setval('table_id_seq', (SELECT MAX(id) FROM table));
Run Code Online (Sandbox Code Playgroud)
从版本 10 开始,使用标识列,无需使用序列名称。那很好。
ALTER TABLE table ALTER COLUMN id RESTART WITH 1000;
Run Code Online (Sandbox Code Playgroud)
如何在max(id)
不知道序列名称的情况下将标识列设置为?
就我从ALTER TABLE 语法中看到的而言,没有办法让子查询来计算序列的开始。
我想写一些类似的东西:
ALTER TABLE table ALTER COLUMN id RESTART WITH (SELECT MAX(id) FROM table);
Run Code Online (Sandbox Code Playgroud)
您可以对标识列执行相同的操作 - 它们也使用序列。
您可以使用pg_get_serial_sequence()
来获取序列的名称:
SELECT setval(pg_get_serial_sequence('the_table', 'id'), coalesce(MAX(id), 1))
from the_table;
Run Code Online (Sandbox Code Playgroud)
以上对serial
和identity
列的工作方式相同。
归档时间: |
|
查看次数: |
77 次 |
最近记录: |