Ответ 1
Вероятно, вы хотите 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
указывается таблица, из которой новая таблица автоматически копирует все имена столбцов, их типы данных и их не-null.
Если вам нужна "временная" таблица только для одного запроса (а затем отбросить его), то "производная таблица" в CTE или в подзапросе происходит со значительно меньшими накладными расходами: