SELECT INTO
  SQL - Language Statements
 
 
  SELECT INTO
  define a new table from the results of a query
 
 
  SELECT INTO
 
 
SELECT [ ALL | DISTINCT [ ON ( expression [, ...] ) ] ]
    * | expression [ AS output_name ] [, ...]
    INTO [ TEMPORARY | TEMP ] [ TABLE ] new_table
    [ FROM from_item [, ...] ]
    [ WHERE condition ]
    [ GROUP BY expression [, ...] ]
    [ HAVING condition [, ...] ]
    [ { UNION | INTERSECT | EXCEPT } [ ALL ] select ]
    [ ORDER BY expression [ ASC | DESC | USING operator ] [ NULLS { FIRST | LAST } ] [, ...] ]
    [ LIMIT { count | ALL } ]
    [ OFFSET start ]
    [ FOR { UPDATE | SHARE } [ OF table_name [, ...] ] [ NOWAIT ] [...] ]
 
 
  Description
  
   SELECT INTO 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.
  
 
  
 
  Parameters
  
  
   TEMPORARY or TEMP
   
    
     If specified, the table is created as a temporary table.  Refer
     to  for details.
    
   
  
   
    new_table
    
     
      The name (optionally schema-qualified) of the table to be created.
     
    
   
  
  
   All other parameters are described in detail under .
  
 
 
  Notes
  
    is functionally similar to
   SELECT INTO.  CREATE TABLE AS
   is the recommended syntax, since this form of SELECT
   INTO is not available in ECPG
   or PL/pgSQL, because they interpret the
   INTO clause differently. Furthermore,
   CREATE TABLE AS offers a superset of the
   functionality provided by SELECT INTO.
  
  
   Prior to PostgreSQL> 8.1, the table created by
   SELECT INTO included OIDs by default. In
   PostgreSQL 8.1, this is not the case
   — to include OIDs in the new table, the  configuration variable must be
   enabled. Alternatively, CREATE TABLE AS can be
   used with the WITH OIDS clause.
  
 
 
  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';
  
 
 
  Compatibility
  
   The SQL standard uses SELECT INTO 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 ) and
   PL/pgSQL (see ).
   The PostgreSQL usage of SELECT
   INTO to represent table creation is historical.  It is
   best to use CREATE TABLE AS for this purpose in
   new code.
  
 
 
  See Also