Answers:
通常,复制表的最快方法是:
CREATE TABLE table2 AS SELECT * FROM table1;
并行INSERT可能更快,但只有在磁盘子系统非常快的情况下(当数据在许多驱动器上交错时)。否则,它会变慢。
修改完后table2
,它可以使用以下新名称:
BEGIN;
DROP TABLE table1;
ALTER TABLE table2 RENAME TO table1;
COMMIT;
该DROP TABLE
命令需要一个排他锁,以您可能希望的方式影响并发阅读器:
DROP
将等待其他事务在表上进行的所有未完成读取。table1
不再存在。该错误看起来像“无法打开与OID oid的关系”为避免出现第二个问题,您可以重命名table1
为old_table1
而不是删除它,然后在这些读取器完成操作后,再将其删除到事务外部。因此,上面的序列将变为:
BEGIN;
ALTER TABLE table1 RENAME TO old_table1;
ALTER TABLE table2 RENAME TO table1;
COMMIT;
...
DROP TABLE old_table1;