Зазвичай найшвидший спосіб копіювання таблиці - це просто:
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;