Создание временных таблиц в SQL

Я пытаюсь создать временную таблицу, которая выбирает только данные для определенного типа register_type . Я написал этот запрос, но он не работает:

 $ CREATE TABLE temp1 (Select egauge.dataid, egauge.register_type, egauge.timestamp_localtime, egauge.read_value_avg from rawdata.egauge where register_type like '%gen%' order by dataid, timestamp_localtime ) $ 

Я использую PostgreSQL.
Не могли бы вы рассказать мне, что не так с запросом?

Вероятно, вы хотите, чтобы CREATE TABLE AS – также работает для таблиц TEMPORARY ( TEMP ):

 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 

Это создает временную таблицу и копирует в нее данные. Имейте в виду статический снимок данных. Это как обычная таблица, но находится в ОЗУ, если temp_buffers установлен достаточно высоким, он виден только в текущем сеансе и умирает в конце его. Когда он создается с помощью ON COMMIT DROP он умирает в конце транзакции .

Таблицы Temp сначала идут по пути поиска схемы по умолчанию, скрывая другие видимые таблицы с тем же именем, если только не указано:

  • Как влияет на идентификатор идентификатора поиска и «текущая схема»,

Если вы хотите динамический , вы бы искали CREATE VIEW – совершенно другая история.

Стандарт SQL также определяет, и Postgres также поддерживает: SELECT INTO .
Но его использование не рекомендуется :

Лучше всего использовать CREATE TABLE AS для этой цели в новом коде.

Для второго варианта синтаксиса действительно нет необходимости, а SELECT INTO используется для назначения в plpgsql , где синтаксис SQL, следовательно, невозможен.

Связанный:

  • Объедините две таблицы в новую, чтобы игнорировать строки из другого
  • ОШИБКА: параметры ввода после одного значения по умолчанию также должны иметь значения по умолчанию

CREATE TABLE LIKE (...) копирует структуру только из другой таблицы и без данных:

Предложение LIKE указывает таблицу, из которой новая таблица автоматически копирует все имена столбцов, их типы данных и их ненулевые ограничения.


Если вам нужна «временная» таблица только для одного запроса (а затем отбросить его), «производная таблица» в CTE или подзапросе поставляется со значительно меньшими накладными расходами:

  • Измените план выполнения запроса в postgresql вручную?
  • Объедините два запроса SELECT в PostgreSQL
  • Повторное использование вычисленного значения выбора
  • Несколько CTE в одном запросе
  • Обновление с результатами другого sql