基本上我想这样做:
begin; lock table a; alter table a rename to b; alter table a1 rename to a; drop table b; commit;
即获得控制并替换我的旧桌子,而没有人可以访问它.
解决方法
更简单:
BEGIN; DROP TABLE a; ALTER TABLE a1 RENAME TO a; COMMIT;
无论如何,DROP TABLE都会在表上获取一个ACCESS EXCLUSIVE锁.显式LOCK命令不是更好.重命名一个死人只是浪费时间.
尝试访问表的并发事务会发生什么?这不是那么简单,请阅读:
> Best way to populate a new column in a large table?
解释为什么您可能会看到如下错误消息:
06001