Вы, вероятно, хотите 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
Это создает временную таблицу и копирует в него данные. A static snapshot данных, заметьте. Это как обычная таблица, но находится в ОЗУ, если temp_buffers
установлен достаточно высоко, отображается только в текущем сеансе и умирает в конце его. При создании с ON COMMIT DROP
он умирает в конце транзакции .
таблицы Temp приходит первый по умолчанию в схеме пути поиска в, скрывая другие видимые таблицы одного и того же имени, если схемы квалифицированных:
Если вы хотите динамический, вы бы искали CREATE VIEW
- совершенно другая история.
Стандарт SQL также определяет, и Postgres также поддерживает:
SELECT INTO
.
But its use is discouraged:
Лучше использовать CREATE TABLE AS
для этой цели в новом коде.
Там действительно нет необходимости для второго варианта синтаксиса и SELECT INTO
используются для назначения в plpgsql
, где синтаксис SQL является, следовательно, не представляется возможным.
Связанные:
CREATE TABLE LIKE (...)
только копирует структура из другой таблицы и данные:
Предложение LIKE
указывает таблицу, из которой новая таблица автоматически копирует все имена столбцов, их типы данных и их ненулевые ограничения .
Если вам нужен «временный» таблицы только для целей одного запроса (а затем выбросить его) в «производную таблицу» в КТР или подзапрос приходит со значительно меньшими затратами:
Я использую другую таблицу с именем rawdata.egauge фактически – user1970850
* не работает * не является допустимым сообщение об ошибке Postgres. Вам не хватает ключевого слова 'AS', выбор не должен находиться в паратенсисе, и у вас нет точки с запятой ('; ') для прекращения оператора. –