SELECT INTO — define uma nova tabela a partir dos resultados de uma consulta
[ WITH [ RECURSIVE ]consulta_WITH[, ...] ] SELECT [ ALL | DISTINCT [ ON (expressão[, ...] ) ] ] [ { * |expressão[ [ AS ]nome_de_saída] } [, ...] ] INTO [ TEMPORARY | TEMP | UNLOGGED ] [ TABLE ]nova_tabela[ FROMitem_FROM[, ...] ] [ WHEREcondição] [ GROUP BYexpressão[, ...] ] [ HAVINGcondição] [ WINDOWnome_da_janelaAS (definição_da_janela) [, ...] ] [ { UNION | INTERSECT | EXCEPT } [ ALL | DISTINCT ]select] [ ORDER BYexpressão[ ASC | DESC | USINGoperador] [ NULLS { FIRST | LAST } ] [, ...] ] [ LIMIT {contador| ALL } ] [ OFFSETinício[ ROW | ROWS ] ] [ FETCH { FIRST | NEXT } [contador] { ROW | ROWS } ONLY ] [ FOR { UPDATE | SHARE } [ OFnome_da_tabela[, ...] ] [ NOWAIT ] [...] ]
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.
TEMPORARY ou TEMPSe especificado, a tabela é criada como uma tabela temporária. Veja CREATE TABLE para obter detalhes.
UNLOGGEDSe especificado, a tabela é criada como uma tabela sem registro de transações. Veja CREATE TABLE para obter detalhes.
nova_tabelaO nome (opcionalmente qualificado pelo esquema) da tabela a ser definida.
Todos os outros parâmetros são descritos em detalhes no comando SELECT.
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.
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';
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.