我第一次使用Postgres,并做了一些实验。我有一个使用此查询创建的表:
CREATE TABLE test(
id SERIAL,
name int NOT NULL,
PRIMARY KEY (id)
);
并且我正在尝试通过此查询重置id
列的顺序(清空所有当前数据表之后):
ALTER SEQUENCE test_id_seq RESTART WITH 1;
但是,当我运行此查询时,它会无限期运行。我运行的所有先前查询都在几毫秒内完成,但是在我杀死它之前已经运行了3分钟以上。我应该怎么做
答案 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上,因此无法为您测试...但是值得一试。