Secara umum cara tercepat untuk menduplikasi tabel adalah:
CREATE TABLE table2 AS SELECT * FROM table1;
INSERT paralel mungkin lebih cepat, tetapi hanya dengan subsistem disk yang sangat cepat (ketika data disisipkan pada banyak drive). Kalau tidak, ini akan lebih lambat.
Setelah selesai memodifikasi table2
, Anda dapat menggunakan nama baru dengan:
BEGIN;
DROP TABLE table1;
ALTER TABLE table2 RENAME TO table1;
COMMIT;
The DROP TABLE
perintah membutuhkan kunci eksklusif, yang mempengaruhi pembaca bersamaan dengan cara Anda mungkin ingin mengantisipasi:
DROP
akan menunggu pembacaan yang tertunda di meja dari transaksi lain selesai.
- Setiap transaksi baru yang mencoba membaca tabel itu sementara itu akan menunggu, dan kemudian gagal karena aslinya
table1
tidak ada lagi. Kesalahan akan terlihat seperti "tidak dapat membuka hubungan dengan OID oid "
Untuk menghindari masalah kedua, Anda dapat mengganti nama table1
menjadi old_table1
alih-alih menjatuhkannya, dan kemudian membuangnya nanti di luar transaksi, saat pembaca selesai melakukannya. Jadi urutan di atas akan menjadi:
BEGIN;
ALTER TABLE table1 RENAME TO old_table1;
ALTER TABLE table2 RENAME TO table1;
COMMIT;
...
DROP TABLE old_table1;