我想让Redshift数据库的特定用户组中的用户运行所有查询。这是我正在运行的查询:
select
q.*,
u.usename,
swq.total_queue_time / 1000000 as queue_time
from stl_query q
inner join pg_user u on q.userid = u.usesysid
inner join pg_group g on u.usesysid = ANY (g.grolist)
inner join stl_wlm_query swq on q.query = swq.query
where q.userid <> 1
AND database = 'mydb'
AND g.groname = 'ops'
order by q.starttime desc;
但是,我得到Column "g.grolist" has unsupported type "integer[]"
。我尝试了其他形式的同一查询(例如,将ANY
条件放在WHERE
中),但我一直遇到相同的错误。如何检查pg_group
的用户ID列表中是否出现用户ID?
答案 0 :(得分:0)
我发现此Redshift guide具有array
类型,这些类型包含在不受支持的PostgresSQL数据类型列表中,这导致您的SQL错误为column has unsupported type
。
Redshift并非完全是Postgres,因此不支持所有Postgres数据类型和功能。因此,最好参考redshift指南以了解您遇到的行为中的任何错误/差异。
在此处查找更多差异:Amazon Redshift and PostgreSQL
对于不受支持的数据类型,它指出:
如果查询尝试使用不受支持的数据类型,包括显式或隐式强制转换,它将返回错误。
但是redshift确实支持某些array
和json-array
函数,您可以使用这些函数来处理数组列类型。如下所示,查询将使用array_to_string
输出您想要的结果。
select
q.*,
u.usename,
swq.total_queue_time / 1000000 as queue_time
from stl_query q
inner join pg_user u on q.userid = u.usesysid
inner join pg_group g on array_to_string(g.grolist,',') like '%' || u.usesysid || '%'
inner join stl_wlm_query swq on q.query = swq.query
where q.userid <> 1
AND database = 'mydb'
AND g.groname = 'ops'
order by q.starttime desc;