Create Table As

Creates a new table built from data retrieved by a SELECT.


CREATE TABLE table [ ( column [, ...] ) ]
             AS select



The name of the new table to be created.


The name of a column to create; you can specify multiple columns by including their names in a comma-delimited list. There should be the same number of columns specified as are returned by select.


A valid SELECT statement. The number of targets selected must match the number of columns in the optional column list preceding the AS clause.



The message returned on successful creation of, and insertion of row data into, table.

ERROR: CREATE TABLE/AS SELECT has mismatched column count

The error returned if the optional list of columns in parentheses contains a different number of rows than the select statement returns.


Use the CREATE TABLE AS command to create a table from the contents of result set, such as a query on a table that already exists within the database. Both the column types, and row data for the new table, come from the SELECT command specified by select.

Note that, as of PostgreSQL 7.1.x, if you specify the optional column list within parentheses, you cannot use the asterisk (*) in the select statement.


The following example creates a backup table (aptly named book_backup) from all of the columns taken from the books table:

booktown=# CREATE TABLE book_backup
booktown-#              AS SELECT * FROM books;

Get Practical PostgreSQL now with the O’Reilly learning platform.

O’Reilly members experience live online training, plus books, videos, and digital content from nearly 200 publishers.