SELECT INTO

SELECT INTO — define una nueva tabla a partir de los resultados de una consulta

Synopsis

[ WITH [ RECURSIVE ] with_query [, ...] ]
SELECT [ ALL | DISTINCT [ ON ( expression [, ...] ) ] ]
    [ { * | expression [ [ AS ] output_name ] } [, ...] ]
    INTO [ TEMPORARY | TEMP | UNLOGGED ] [ TABLE ] new_table
    [ FROM from_item [, ...] ]
    [ WHERE condition ]
    [ GROUP BY expression [, ...] ]
    [ HAVING condition ]
    [ WINDOW window_name AS ( window_definition ) [, ...] ]
    [ { UNION | INTERSECT | EXCEPT } [ ALL | DISTINCT ] select ]
    [ ORDER BY expression [ ASC | DESC | USING operator ] [ NULLS { FIRST | LAST } ] [, ...] ]
    [ LIMIT { count | ALL } ]
    [ OFFSET start [ ROW | ROWS ] ]
    [ FETCH { FIRST | NEXT } [ count ] { ROW | ROWS } ONLY ]
    [ FOR { UPDATE | SHARE } [ OF table_name [, ...] ] [ NOWAIT ] [...] ]

Descripción

SELECT INTO crea una nueva tabla y la llena con los datos devueltos por una consulta. Los datos no se devuelven al cliente, a diferencia de lo que ocurre con un SELECT normal. Las columnas de la nueva tabla tienen los nombres y tipos de datos asociados con las columnas de salida de SELECT.

Parámetros

TEMPORARY o TEMP

Si se especifica, la tabla se crea como una tabla temporal. Consulta CREATE TABLE para obtener más detalles.

UNLOGGED

Si se especifica, la tabla se crea como una tabla no registrada («unlogged»). Consulta CREATE TABLE para obtener más detalles.

new_table

El nombre (opcionalmente calificado por esquema) de la tabla que se va a crear.

Todos los demás parámetros se describen en detalle en SELECT.

Notas

CREATE TABLE AS es funcionalmente similar a SELECT INTO. Se recomienda usar la sintaxis CREATE TABLE AS, ya que esta forma de SELECT INTO no está disponible en ECPG ni en PL/pgSQL, porque interpretan la cláusula INTO de manera diferente. Además, CREATE TABLE AS ofrece un superconjunto de la funcionalidad provista por SELECT INTO.

A diferencia de CREATE TABLE AS, SELECT INTO no permite especificar propiedades como el método de acceso de una tabla con USING método o el tablespace de la tabla con TABLESPACE nombre_tablespace. Usa CREATE TABLE AS si es necesario. Por lo tanto, se elige el método de acceso de tabla predeterminado para la nueva tabla. Consulta default_table_access_method para obtener más información.

Ejemplos

Crea una nueva tabla films_recent que contenga solo las entradas recientes de la tabla films:

SELECT * INTO films_recent FROM films WHERE date_prod >= '2002-01-01';

Compatibilidad

El estándar SQL usa SELECT INTO para representar la selección de valores en variables escalares de un programa anfitrión, en lugar de crear una nueva tabla. Este es de hecho el uso que se encuentra en ECPG (consulta la Chapter 34) y PL/pgSQL (consulta la Chapter 41). El uso en PostgreSQL de SELECT INTO para representar la creación de tablas es histórico. Algunas otras implementaciones de SQL también usan SELECT INTO de esta manera (pero la mayoría de las implementaciones de SQL admiten CREATE TABLE AS en su lugar). Aparte de estas consideraciones de compatibilidad, es mejor usar CREATE TABLE AS para este propósito en el código nuevo.

Véase también

CREATE TABLE AS