Кэширование результатов запроса с использованием временной таблицы - PullRequest
0 голосов
/ 27 августа 2018

Я хочу кешировать результат большого запроса на выборку для дальнейшего использования.Идея состоит в том, чтобы использовать временную таблицу (я считаю, что она сохраняется для сеанса или, по крайней мере, для транзакции):

CREATE TEMP TABLE cache AS (SELECT * FROM t)

, но когда кэш уже создан, я сталкиваюсь со следующей ошибкой:

Invalid operation: relation "cache" already exists;

Нет ЕСЛИ НЕ СУЩЕСТВУЕТ условия для CREATE TEMP TABLE ... AS .Итак, вопрос в том, есть ли обходной путь для этого случая?

1 Ответ

0 голосов
/ 27 августа 2018

Если вы хотите сохранить только результаты для последнего "большого запроса" в сеансе, тогда

Drop table if exists cache; 
Create temp table cache as 
select * from t where "your's conditions";

Удаление таблицы кеша раньше не заблокирует оператор создания таблицы.

Если вы хотитечтобы сохранить результаты для всех ваших «больших запросов», вам понадобится дополнительная информация в именовании вашего кэша.

Вы можете проверить, существует ли временная таблица в if statment

IF (select count(*) 
      from information_schema.tables 
     where table_name'cache' 
       and table_schema like 'pg_temp%')=0 THEN

  create temp table cache as 
  select * from t where "your's conditions";
ELSE
  select * from cache where "your's conditions";
END;
...