基本上我想这样做:
begin;
lock table a;
alter table a rename to b;
alter table a1 rename to a;
drop table b;
commit;
即获得控制权并替换我的旧桌子,而没有人可以访问它。
Simpler:
BEGIN;
DROP TABLE a;
ALTER TABLE a1 RENAME TO a;
COMMIT;
DROP TABLE
获得一个ACCESS EXCLUSIVE
无论如何都要锁定桌子。明确的LOCK
命令也好不到哪儿去。给一个死人重新命名只是浪费时间。
您可能想要对旧表进行写锁定准备新的,以防止之间写入。然后您可以在此过程的早期发出这样的锁:
LOCK TABLE a IN SHARE MODE;
尝试访问表的并发事务会发生什么情况?事情没那么简单,请阅读以下内容:
- 在大表中填充新列的最佳方法? https://dba.stackexchange.com/a/52531/3684
解释为什么您可能会看到如下错误消息:
ERROR: could not open relation with OID 123456
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)