在postgres中使用内部alter table语句中select的结果

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

我正在尝试寻找一种方法来使Postgres中的以下查询更通用,以便可以将下面SELECT语句的结果直接用于ALTER table语句中。

SELECT MAX(id) + 1 From Table_1;

ALTER TABLE Table_1 ALTER COLUMN id RESTART WITH 935074;

现在,我运行第一个查询以获取Max(id)+1值,然后在ALTER查询中替换它。有没有办法存储SELECT的结果并只在ALTER语句中使用变量?

sql postgresql
1个回答
1
投票

这里是一种方法:

select setval(pg_get_serial_sequence('Table_1', 'id'), coalesce(max(id),0) + 1, false) 
from Table_1;

理论上:

  • [pg_get_serial_sequence()返回给定表和列的序列名称
  • set_val()可用于重置序列
  • 可以包装在select中,该表为您提供表中id的当前最大值(如果表为空,则为1)
© www.soinside.com 2019 - 2024. All rights reserved.