在 Postgres 中使用子查询更改表

问题描述 投票:0回答:1

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

这有效:

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')
,而是一个标识列,因此直接更新序列不是一个选项。

postgresql subquery alter-table
1个回答
0
投票

您不能在该位置使用子查询。最简单的解决方案是首先运行查询,然后运行适当的

ALTER TABLE
。如果您坚持在单个语句中执行此操作,请使用类似

SELECT setval(
          pg_get_serial_sequence(
             '"ApiResourceScopes"',
             'Id'
          ),
          (select coalesce(max("Id"), '0')
           FROM public."ApiResourceScopes")
       );
© www.soinside.com 2019 - 2024. All rights reserved.