SELECT INTO

SELECT INTO — define uma nova tabela a partir dos resultados de uma consulta

Sinopse

[ WITH [ RECURSIVE ] consulta_WITH [, ...] ]
SELECT [ ALL | DISTINCT [ ON ( expressão [, ...] ) ] ]
    [ { *
      | expressão [ [ AS ] nome_de_saída ]
      }
      [, ...]
    ]
    INTO [ TEMPORARY | TEMP | UNLOGGED ] [ TABLE ] nova_tabela
    [ FROM item_FROM [, ...] ]
    [ WHERE condição ]
    [ GROUP BY expressão [, ...] ]
    [ HAVING condição ]
    [ WINDOW nome_da_janela
        AS ( definição_da_janela )
        [, ...]
    ]
    [ { UNION | INTERSECT | EXCEPT } [ ALL | DISTINCT ] select ]
    [ ORDER BY expressão
        [ ASC | DESC | USING operador ]
        [ NULLS { FIRST | LAST } ]
        [, ...]
    ]
    [ LIMIT { contador | ALL } ]
    [ OFFSET início [ ROW | ROWS ] ]
    [ FETCH { FIRST | NEXT } [ contador ] { ROW | ROWS } ONLY ]
    [ FOR { UPDATE | SHARE }
        [ OF nome_da_tabela [, ...] ]
        [ NOWAIT ]
        [...]
    ]

Descrição

O comando SELECT INTO define uma nova tabela e a preenche com dados computados por uma consulta. Os dados não são retornados para o cliente, como acontece com um comando SELECT normal. As colunas da nova tabela têm os nomes e tipos de dados associados às colunas de saída do comando SELECT.

Parâmetros

TEMPORARY ou TEMP

Se especificado, a tabela é criada como uma tabela temporária. Veja CREATE TABLE para obter detalhes.

UNLOGGED

Se especificado, a tabela é criada como uma tabela sem registro de transações. Veja CREATE TABLE para obter detalhes.

nova_tabela

O nome (opcionalmente qualificado pelo esquema) da tabela a ser definida.

Todos os outros parâmetros são descritos em detalhes no comando SELECT.

Notas

O comando CREATE TABLE AS é funcionalmente semelhante ao comando SELECT INTO. CREATE TABLE AS é a sintaxe recomendada, já que a forma SELECT INTO não está disponível no ECPG, nem no PL/pgSQL, porque interpretam a cláusula INTO de forma diferente. Além disso, o comando CREATE TABLE AS oferece um conjunto maior de funcionalidades do que o comando SELECT INTO.

Contrastando com o comando CREATE TABLE AS, o comando SELECT INTO não permite especificar propriedades como o método de acesso de uma tabela com USING, ou o espaço de tabelas da tabela com TABLESPACE. Deve ser usado CREATE TABLE AS se for necessário. Portanto, o método de acesso à tabela padrão é escolhido para a nova tabela. Veja default_table_access_method para obter mais informações.

Exemplos

Criação da tabela filmes_recentes consistindo apenas em entradas recentes da tabela filmes:

SELECT * INTO filmes_recentes
    FROM filmes WHERE data_filme >= '2020-01-01';

Conformidade

O padrão SQL usa o comando SELECT INTO para representar a seleção de valores em variáveis escalares de um programa hospedeiro, em vez de definir uma nova tabela. Este é de fato o uso encontrado no ECPG e no PL/pgSQL. O uso de SELECT INTO para representar a criação de tabelas no PostgreSQL é histórico. Algumas outras implementações do padrão SQL também usam SELECT INTO dessa forma (mas a maioria das implementações do padrão SQL oferece suporte ao comando CREATE TABLE AS em seu lugar). Além dessas considerações de compatibilidade, é melhor usar o comando CREATE TABLE AS para este propósito nos novos códigos.

Veja também

CREATE TABLE AS