PostgreSQL-ALTER SEQUENCE查询永远不会完成

时间:2018-09-04 15:52:03

标签: postgresql

我第一次使用Postgres,并做了一些实验。我有一个使用此查询创建的表:

CREATE TABLE test(
id SERIAL,
name int NOT NULL,
PRIMARY KEY (id)
);

并且我正在尝试通过此查询重置id列的顺序(清空所有当前数据表之后):

ALTER SEQUENCE test_id_seq RESTART WITH 1;

但是,当我运行此查询时,它会无限期运行。我运行的所有先前查询都在几毫秒内完成,但是在我杀死它之前已经运行了3分钟以上。我应该怎么做

2 个答案:

答案 0 :(得分:1)

这很可能是由锁引起的。

查看pg_stat_activity中是否存在状态为“空闲时处于空闲状态”的会话。

使用来检查锁

SELECT pid, mode FROM pg_locks WHERE relation = 'test_id_seq'::regclass;

答案 1 :(得分:0)

这可能是Postgres https://www.postgresql-archive.org/Slow-alter-sequence-with-PG10-1-td6002088.html的错误

您可以尝试进行恶意重置,例如将序列增加负数以获得所需的内容:
SELECT * FROM <sequence_name>;

查看“ last_value”列,以确定从当前值减去多少。假设您的序列的last_value是1000:
ALTER SEQUENCE <sequence_name> INCREMENT BY -999;

执行减法
SELECT NEXTVAL('< sequence_name>'); 这应该将序列重置为一个

将序列重置为其原始增量值:
ALTER SEQUENCE <sequence_name_> INCREMENT BY 1

我不在此版本的postgres上,因此无法为您测试...但是值得一试。