Amazon redshift 使用临时表缓存查询结果

Amazon redshift 使用临时表缓存查询结果,amazon-redshift,ddl,Amazon Redshift,Ddl,我想缓存大选择查询的结果以供进一步使用。其想法是使用临时表,我相信它在会话或至少在事务中保持不变: CREATE TEMP TABLE cache AS (SELECT * FROM t) 但当缓存已经创建时,我遇到以下错误: Invalid operation: relation "cache" already exists; 创建临时表不存在“如果不存在”条件。。。作为声明。所以问题是,对于这种情况,是否有一些解决方法?若您只想存储会话中最后一个大查询的结果,那个么 Drop table

我想缓存大选择查询的结果以供进一步使用。其想法是使用临时表,我相信它在会话或至少在事务中保持不变:

CREATE TEMP TABLE cache AS (SELECT * FROM t)
但当缓存已经创建时,我遇到以下错误:

Invalid operation: relation "cache" already exists;

创建临时表不存在“如果不存在”条件。。。作为声明。所以问题是,对于这种情况,是否有一些解决方法?

若您只想存储会话中最后一个大查询的结果,那个么

Drop table if exists cache; 
Create temp table cache as 
select * from t where "your's conditions";
在之前删除缓存表不会阻止creating table语句

如果您想存储所有大型查询的结果,那么在缓存的命名中需要一些额外的信息

您可以检查if station中是否已经存在临时表

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;

你在寻找什么样的解决方法?该表已存在,您无法创建另一个同名表。只是不要在一个会话中多次创建它。@zerkms我正在寻找它的替代品,如果不存在,可以避免多次creation@a_horse_with_no_name是的,我使用的是基于Postgres 8.0.2的Amazon红移,你不应该用Postgres标记它。@Panlantic82你的预期结果是什么。您希望在缓存表中存储什么—会话中所有大查询的结果、上一个大查询的结果或其他内容?CześćGrzegorz。您的答案被标记为低质量。因此,请考虑添加一些解释您的答案的文本,以避免删除。您只为一个查询存储结果的目的是什么,这在会话期间是不可能改变的,还是您想为会话中的所有大查询存储结果,还是只为最后一个大查询存储结果?我假设您要存储最后一个大查询的结果,那么为什么会有下降。@Panlantic82 ok。请在您的问题中描述最好的,您如何看待该功能?因为我们不知道查询结果总是相同的结构还是不同的结构。您希望如何将它们回调结果的唯一ID是什么?最重要的是,为什么要将缓存结果存储在DB端,而不是客户端?@Panlantic82-如果这是相同的大型选择,那么物化视图应该是解决问题的完美方案。只要记得每天或经常更新它@Panlantic82我编辑了答案。希望它现在对你有用。如果不给一个标志。