使用子查询在 Postgres 中更改 TABLE

ALTER TABLE in Postgres with a subquery

我正在尝试更新我的 table 中的标识序列,但出现语法错误。

这个有效:

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"
   )

如何在 ALTER TABLE 语句中使用子查询设置值?

注意:我的 table 敌人在默认列中没有 nextval('somesequence'),而是标识列,因此直接更新序列不是一个选项。

你不能在那个地方使用子查询。最简单的解决方案是首先 运行 查询,然后是适当的 ALTER TABLE。如果您坚持在一条语句中执行此操作,请使用类似

的内容
SELECT setval(
          pg_get_serial_sequence(
             '"ApiResourceScopes"',
             'Id'
          ),
          (select coalesce(max("Id"), '0')
           FROM public."ApiResourceScopes")
       );