PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Criando tabelas temporárias em SQL


Você provavelmente quer CREATE TABLE AS - também funciona para TEMPORARY (TEMP ) tabelas:
CREATE TEMP TABLE temp1 AS
SELECT dataid
     , register_type
     , timestamp_localtime
     , read_value_avg
FROM   rawdata.egauge
WHERE  register_type LIKE '%gen%'
ORDER  BY dataid, timestamp_localtime;

Isso cria uma tabela temporária e copia os dados para ela. Um instantâneo estático dos dados, lembre-se. É como uma tabela normal, mas reside na RAM se temp_buffers está definido alto o suficiente. Só é visível na sessão atual e morre no final. Quando criado com ON COMMIT DROP ele morre no final da transação .

As tabelas temporárias vêm em primeiro lugar no caminho de pesquisa de esquema padrão , ocultando outras tabelas visíveis com o mesmo nome, a menos que sejam qualificadas pelo esquema:
  • Como o search_path influencia a resolução do identificador e o "esquema atual"

Se você quiser dinâmico , você estaria procurando por CREATE VIEW - uma história completamente diferente.

O padrão SQL também define, e o Postgres também suporta:SELECT INTO . Mas seu uso é desencorajado:

É melhor usar CREATE TABLE AS para este fim no novo código.

Não há necessidade de uma segunda variante de sintaxe e SELECT INTO é usado para atribuição em plpgsql , onde a sintaxe SQL consequentemente não é possível.

Relacionado:
  • Combine duas tabelas em uma nova para que as linhas selecionadas da outra sejam ignoradas
  • ERRO:parâmetros de entrada após um com valor padrão também devem ter padrões no Postgres

CREATE TABLE LIKE (...) copia apenas a estrutura de outra tabela e sem dados:

O LIKE A cláusula especifica uma tabela da qual a nova tabela copia automaticamente todos os nomes de coluna, seus tipos de dados e suas restrições não nulas.

Se você precisar de uma tabela "temporária" apenas para fins de uma única consulta (e depois descartá-la), uma "tabela derivada" em um CTE ou uma subconsulta vem com uma sobrecarga consideravelmente menor:
  • Alterar o plano de execução da consulta no postgresql manualmente?
  • Combine duas consultas SELECT no PostgreSQL
  • Reutilizar valor de seleção calculado
  • Vários CTEs em uma única consulta
  • Atualizar com resultados de outro sql