2013-03-28 2 views
34

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

$ 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.
Не могли бы вы рассказать мне, что не так в запросе?

+0

Я использую другую таблицу с именем rawdata.egauge фактически – user1970850

+10

* не работает * не является допустимым сообщение об ошибке Postgres. Вам не хватает ключевого слова 'AS', выбор не должен находиться в паратенсисе, и у вас нет точки с запятой ('; ') для прекращения оператора. –

ответ

70

Вы, вероятно, хотите 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 указывает таблицу, из которой новая таблица автоматически копирует все имена столбцов, их типы данных и их ненулевые ограничения .


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

+2

Не знал, что 'select in' обескуражен .... – Xin

Смежные вопросы