โดยทั่วไปวิธีที่เร็วที่สุดในการทำสำเนาตารางคือ:
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;