СОЗДАНИЕ ТАБЛИЦЫ БЕЗ ДАННЫХ происходит очень медленно

#postgresql

Вопрос:

Я запускаю эту команду SQL на PostgreSQL 11:

CREATE TABLE IF NOT EXISTS my_temp_table AS TABLE my_enormous_table WITH NO DATA;

Создание новой таблицы занимает 5 минут.

То EXPLAIN ... есть:

 Seq Scan on my_enormous_table (cost=0.00..35999196.34 rows=143407234 width=3278)  

Переход к такому запросу CREATE TABLE ... (SELECT * FROM my_enormous_table WHERE FALSE); происходит на порядки быстрее — нет сканирования seq, и результат тот же.

Есть идеи, что может быть причиной этой проблемы?

Ответ №1:

WITH NO DATA по-прежнему выполняет запрос, он просто игнорирует результат.

Лучший способ сделать это-избежать CREATE TABLE ... AS :

 CREATE TABLE my_temp_table (LIKE my_enormous_table);  

Это также позволяет использовать INCLUDING предложение для копирования значений по умолчанию, параметров хранения, ограничений и прочего из исходной таблицы:

 CREATE TABLE my_temp_table (LIKE my_enormous_table  INCLUDING CONSTRAINTS INCLUDING DEFAULTS);  

Комментарии:

1. Спасибо. Интересно, что я не могу выполнить EXPLAIN этот запрос, но запрос работает хорошо и быстро. Объясните результаты в ERROR: syntax error at or near "LIKE" . Еще многое предстоит узнать!

2. Вы не можете выполнять EXPLAIN большинство инструкций DDL. Поскольку у этих утверждений нет плана выполнения, это не имело бы смысла.