Zasadniczo najszybszym sposobem na zduplikowanie tabeli jest po prostu:
CREATE TABLE table2 AS SELECT * FROM table1;
Równoległe WSTAWKI mogą być szybsze, ale tylko z bardzo szybkim podsystemem dyskowym (gdy dane są przeplatane na wielu dyskach). W przeciwnym razie będzie to wolniejsze.
Po zakończeniu modyfikacji table2
może przyjąć nową nazwę z:
BEGIN;
DROP TABLE table1;
ALTER TABLE table2 RENAME TO table1;
COMMIT;
DROP TABLE
Komenda musi wyłączną blokadę, która wpływa współbieżnych czytelników w sposób może chcesz przewidywać:
DROP
będzie czekać na zakończenie wszelkich oczekujących odczytów na stole z innych transakcji.
- Każda nowa transakcja próbująca w międzyczasie odczytać tę tabelę, spowoduje, że będzie czekać, a następnie zawiedzie, ponieważ oryginał
table1
już nie istnieje. Błąd wyglądałby tak: „nie można otworzyć relacji z OID oid ”
Aby uniknąć drugiego problemu, możesz zmienić nazwę table1
na old_table1
zamiast go upuszczać, a następnie upuścić dopiero później poza transakcją, gdy czytniki te skończą. Tak więc powyższa sekwencja wyglądałaby następująco:
BEGIN;
ALTER TABLE table1 RENAME TO old_table1;
ALTER TABLE table2 RENAME TO table1;
COMMIT;
...
DROP TABLE old_table1;