我正在尝试更新表中的标识序列,但出现语法错误。
这有效:
ALTER TABLE "ApiResourceScopes" ALTER COLUMN "Id"
RESTART SET START 145
这不起作用:
ALTER TABLE "ApiResourceScopes" ALTER COLUMN "Id"
RESTART SET START (
select coalesce(max("Id"), '0') + 1 as "Id"
FROM public."ApiResourceScopes"
)
错误是:
错误:“(”第 3 行:...sourceScopes”处或附近的语法错误 ALTER COLUMN“Id”RESTART SET START(选择 co...^ SQL 状态:42601 字符:71
如何在
ALTER TABLE
语句中使用子查询设置值?
注意:我的表敌人在默认列中没有
nextval('somesequence')
,而是一个标识列,因此直接更新序列不是一个选项。
您不能在该位置使用子查询。最简单的解决方案是首先运行查询,然后运行适当的
ALTER TABLE
。如果您坚持在单个语句中执行此操作,请使用类似
SELECT setval(
pg_get_serial_sequence(
'"ApiResourceScopes"',
'Id'
),
(select coalesce(max("Id"), '0')
FROM public."ApiResourceScopes")
);