Estoy ejecutando este comando SQL en PostgreSQL 11:
CREATE TABLE IF NOT EXISTS my_temp_table AS TABLE my_enormous_table WITH NO DATA;
Se tarda 5 minutos en hacer la nueva tabla.
El EXPLAIN ... es:
Seq Scan on my_enormous_table (cost=0.00..35999196.34 rows=143407234 width=3278) Moviéndose a una consulta como CREATE TABLE ... (SELECT * FROM my_enormous_table WHERE FALSE); es órdenes de magnitud más rápido: no hay escaneo de secuencia y el resultado es el mismo.
¿Alguna idea de qué podría estar causando este problema?
WITH NO DATA aún ejecuta la consulta, simplemente ignora el resultado.
La mejor manera de hacerlo sería evitar CREATE TABLE ... AS :
CREATE TABLE my_temp_table (LIKE my_enormous_table); Eso también le permite usar la cláusula INCLUDING para copiar valores predeterminados, parámetros de almacenamiento, restricciones y otras cosas de la tabla original:
CREATE TABLE my_temp_table (LIKE my_enormous_table INCLUDING CONSTRAINTS INCLUDING DEFAULTS);