我正在尝试在Redshift中检索表的DDL。我找到了this视图,可以在其中轻松地为任何表选择定义。但是我需要一行信息,而且我知道有这个Listagg函数,但是如果我尝试这样做:
select listagg(ddl, ' ')
from admin.v_generate_tbl_ddl
where schemaname = 'schema'
and tablename = 'orders'
这给了我这个错误:
查询执行失败
原因:SQL错误[XX000]:错误:一个或多个已使用的函数 必须应用于至少一个用户创建的表。用户实例 表中唯一的函数是LISTAGG,MEDIAN,PERCENTILE_CONT等
您能帮我实现这个目标吗?
答案 0 :(得分:2)
listagg
函数是仅计算节点函数。
但是您为获取表ddl而运行的查询仅在Leader上运行,因为它仅指定pg_ *表。
根据AWS文档
仅引用目录表(带有PG前缀的表,例如PG_TABLE_DEF)或不引用任何表的查询仅在领导节点上运行。
如果使用计算节点功能的查询未引用用户定义的表或Amazon Redshift系统表,则会返回以下错误。
[Amazon](500310)无效的操作:必须在至少一个用户创建的表上应用一个或多个已使用的函数。
https://docs.aws.amazon.com/redshift/latest/dg/c_SQL_functions_compute_node_only.html
总而言之,由于您的查询未引用任何用户创建的表,因此您不能使用listagg