【问题标题】:Using redshift system views with select pivot使用带有选择枢轴的红移系统视图
【发布时间】:2022-08-04 04:13:50
【问题描述】:

我想转动系统视图 svv__*_privileges 中的值,以显示按对象分配给安全原则的权限。 (对于完整的解决方案,需要合并所有对象的结果并转向所有权限)

作为默认权限的示例:

select * from
(select object_type, grantee_name, grantee_type, privilege_type, 1 as is_priv from pg_catalog.svv_default_privileges where grantee_name = \'abc\' and grantee_type = \'role\')
pivot (max(is_priv) for privilege_type in (\'EXECUTE\', \'INSERT\', \'SELECT\', \'UPDATE\', \'DELETE\', \'RULE\', \'REFERENCES\', \'TRIGGER\', \'DROP\') );

这会产生错误(仅在领导节点上有效?)

[Amazon](500310) 无效操作:由于内部错误,查询不受支持。

然后想尝试一个临时表,枢轴然后在一个红移表上

select * into temp schema_default_priv from pg_catalog.svv_default_privileges where grantee_name = \'abc\' and grantee_type = \'role\'

...与上述相同的错误:-(

有没有办法可以在系统表上使用 SQL 来在 Redshift SQL 中完成此任务????

虽然我可以在 python 中执行枢轴...为什么我应该,它应该是一个 sql db!

  • 有关错误消息的更多信息会有所帮助/您为什么提到领导节点?我的第一个猜测是,这是由于为 is_priv 提供了 SQL(非表数据)。 Redshift 对来自计算节点上使用的领导者的数据有限制。这应该已通过您的临时表方法解决。你能分享你用来做这个的SQL吗?

标签: amazon-redshift


【解决方案1】:

重读您的问题后,问题变得清晰。您正在使用仅领导节点的系统表并希望应用计算节点数据和/或函数。 Redshift 不支持这种数据流路径。我确实对需要计算节点操作的操作有一些疑问,但这不是关键,挖掘需要时间。

如果您需要将领导节点数据获取到计算节点,有几种方法,它们都不是微不足道的。我发现最好的方法是移动需要的数据是使用游标。这个先前的答案概述了这样做的热点

How to join System tables or Information Schema tables with User defined tables in Redshift

【讨论】:

    猜你喜欢
    • 2017-07-30
    • 2022-10-12
    • 2015-02-13
    • 2015-10-20
    • 2017-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多