sql - 在 postgres 中使用 select inside alter table 语句的结果

标签 sql postgresql max auto-increment

我有一个定义如下的 postgres 表:

CREATE TABLE public.Table_1
(
  id bigint NOT NULL GENERATED ALWAYS AS IDENTITY ( INCREMENT 1 
  START 1 MINVALUE 1 MAXVALUE 9223372036854775807 CACHE 1 )
) 

由于数据迁移,id 列被弄乱了,在 INSERT 上生成的 id 值不是唯一的。因此,我需要如下重置 id 列

SELECT MAX(id) + 1 From Table_1;
ALTER TABLE Table_1 ALTER COLUMN id RESTART WITH 935074;

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

最佳答案

这是一种方法:

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)

关于sql - 在 postgres 中使用 select inside alter table 语句的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59811082/

相关文章:

mysql - 如何将日期时间设置为零

sql - 如何从SQL Server 2005中减去两个日期时间值来获得小时数

SQL注入(inject)漏洞检查

php - 如何使用 MYSQL 将 Max 函数与组一起使用

sql - 连接的不同组合令人困惑,有人能把它归结一下吗?

mysql - 系统变量 "MESSAGE_TEXT"不适用于 Mysql 5.6 中的 SIGNAL 语句?

java - 这是检查 Postgres 是否提交事务 id 的正确方法吗

postgresql 将特定表中的特定列从数据库导出到另一个数据库的最佳方法是什么

python - 从 CSV 中获取列和关联行的最大值

python - 在没有 if 的循环中查找最大项