Redshift pg_user表在JOIN上抛出无效操作错误

时间:2017-07-06 18:31:25

标签: amazon-redshift

当我运行以下查询时,

select * from stl_query q
join pg_user u on q.userid = u.usesysid
where u.usename = 'admin';

我收到以下错误:

SQL Error [500310] [0A000]: [Amazon](500310) Invalid operation: Specified types or functions (one per INFO message) not supported on Redshift tables.;

查询在领导节点上运行。我做错了什么?

1 个答案:

答案 0 :(得分:2)

pg_user是Leader Node-Only功能,不能与非Leader Node-only的功能混合使用。

来自文档:

  

只有领导者才支持某些Amazon Redshift SQL功能   节点,计算节点不支持。使用a的查询   leader-node函数必须专门在leader节点上执行,而不是   在计算节点上,否则它将返回错误。

     

每个仅限节点的节点功能的文档包括一个注释   声明函数会在引用时返回错误   用户定义的表或Amazon Redshift系统表

来源:http://docs.aws.amazon.com/redshift/latest/dg/c_SQL_functions_leader_node_only.html

作为场景中的解决方法,您可以使用所需的pg_user数据子集生成临时表,然后加入该临时表。

select usesysid 
into temp table tmp_user
from pg_user
where usename = 'admin';

select * from stl_query q
inner join tmp_user u on q.userid = u.usesysid;