logo
Free, unlimited AI code reviews that run on commit
git-lrc git-lrc GitHub Install Now We'd appreciate a star git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt

SELECT_INTO - define a new table from the results of a query

Compatibility

       The SQL standard uses SELECTINTO to represent selecting values into scalar variables of a host program,
       rather than creating a new table. This indeed is the usage found in ECPG (see Chapter 34) and PL/pgSQL
       (see Chapter 41). The PostgreSQL usage of SELECTINTO to represent table creation is historical. Some
       other SQL implementations also use SELECTINTO in this way (but most SQL implementations support CREATETABLEAS instead). Apart from such compatibility considerations, it is best to use CREATETABLEAS for
       this purpose in new code.

Description

SELECTINTO creates a new table and fills it with data computed by a query. The data is not returned to
       the client, as it is with a normal SELECT. The new table's columns have the names and data types
       associated with the output columns of the SELECT.

Examples

       Create a new table films_recent consisting of only recent entries from the table films:

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

Name

       SELECT_INTO - define a new table from the results of a query

Notes

CREATETABLEAS is functionally similar to SELECTINTO.  CREATETABLEAS is the recommended syntax, since
       this form of SELECTINTO is not available in ECPG or PL/pgSQL, because they interpret the INTO clause
       differently. Furthermore, CREATETABLEAS offers a superset of the functionality provided by SELECTINTO.

       In contrast to CREATETABLEAS, SELECTINTO does not allow specifying properties like a table's access
       method with USING method or the table's tablespace with TABLESPACE tablespace_name. Use CREATETABLEAS
       if necessary. Therefore, the default table access method is chosen for the new table. See
       default_table_access_method for more information.

Parameters

       TEMPORARY or TEMP
           If specified, the table is created as a temporary table. Refer to CREATE TABLE (CREATE_TABLE(7)) for
           details.

       UNLOGGED
           If specified, the table is created as an unlogged table. Refer to CREATE TABLE (CREATE_TABLE(7)) for
           details.

       new_table
           The name (optionally schema-qualified) of the table to be created.

       All other parameters are described in detail under SELECT(7).

See Also

       CREATE TABLE AS (CREATE_TABLE_AS(7))

PostgreSQL 17.5                                       2025                                        SELECTINTO(7)

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 ] [...] ]

See Also