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我编辑了答案。希望它现在对你有用。如果不给一个标志。