A sintaxe da instrução Create Table As SQL é:
CREATE TABLE table_name [ ( column_name [, ...] ) ] AS select [ * ! ( column_name [, ...] ) ] FROM source_table_name
Substitua table_name pelo nome da nova tabela que será criada. O nome da coluna é opcional, onde você pode especificar várias colunas incluindo seus nomes em uma lista delimitada por vírgulas. Caso contrário, a estrutura da nova tabela será baseada nos nomes das colunas, tipos e número de colunas retornadas pela instrução Select, juntamente com os dados da linha. Se você especificar o nome da coluna, observe que deve haver o mesmo número de colunas especificadas que são retornadas por select.
A instrução select no final do comando create table as deve ser válida e tem o número de destinos selecionados correspondente ao número de colunas na lista de colunas opcional que precede a cláusula AS. Pode ser uma instrução select complexa que recupera dados de várias tabelas. Se a lista de colunas opcional for especificada entre parênteses, o asterisco (*) não poderá mais ser usado na instrução select.
Por exemplo,
CREATE TABLE demo_backup AS SELECT * FROM demo;
A instrução SQL acima criará uma tabela de backup de réplica exata chamada demo_backup com dados e estrutura (colunas) da tabela de demonstração.
O erro possível se você especificar a lista de colunas opcional é:
ERRO:CREATE TABLE/AS SELECT tem contagem de colunas incompatíveis
Se você encontrar essa mensagem de erro, isso ocorre porque a lista opcional de colunas entre parênteses contém um número diferente de linhas do que a instrução select retorna. Verifique novamente se o número de colunas especificado é o mesmo com os resultados esperados do conjunto de resultados selecionado.
ObservaçãoAlguns sistemas de banco de dados suportam a sintaxe CREATE TABLE … LIKE que cria uma tabela vazia com base na definição de outra tabela, incluindo quaisquer atributos de coluna e índices definidos na tabela original. A diferença é que a sintaxe CREATE TABLE … SELECT também copia os dados.