由于某些原因,我们想要重命名生产数据库中的某些序列。
有没有一种方法可以在生产中安全地执行此操作,而不必先关闭与数据库的所有连接?
如果我们在 ID 序列中出现间隙(例如,它从 ID 123 跳到 ID 200 或其他),那很好,但我们显然不希望长锁导致延迟/错误,也不希望有任何重复 ID 和类似的风险。
我们在 Heroku 上使用 PostgreSQL 9.5.21。
我们已经查看了文档,但仍然不确定运行的后果
ALTER SEQUENCE old_id_seq RENAME TO new_id_seq;
ALTER TABLE mytable ALTER COLUMN id SET DEFAULT nextval('new_id_seq');
Run Code Online (Sandbox Code Playgroud)
在生产中。我想一个风险是如果mytable
这两个命令之间发生了事情。但如果我们这样做怎么办:
-- Starting at a much higher value than the currently highest ID.
CREATE SEQUENCE new_id_seq START 200;
ALTER TABLE mytable ALTER COLUMN id SET DEFAULT nextval('new_id_seq');
DROP SEQUENCE old_id_seq;
Run Code Online (Sandbox Code Playgroud)
这样做有什么风险?