我正在尝试检索Redshift中的一个表的DDL。我找到了这视图,可以轻松地为任何表选择定义。但是,我需要在一行中提供这些信息,并且我知道有这个Listagg函数,但是如果我尝试这样做的话:
select listagg(ddl, ' ')
from admin.v_generate_tbl_ddl
where schemaname = 'schema'
and tablename = 'orders'它给了我这个错误:
查询执行失败 原因: SQL XX000: ERROR:必须对至少一个用户创建的表应用一个或多个已使用的函数。仅使用用户表函数的例子有LISTAGG、中位数、PERCENTILE_CONT等。
你能帮我解决这个问题吗?
发布于 2019-02-27 18:04:15
listagg函数是一个计算节点函数.
但是,为了获取表ddl而运行的查询只运行于领导者,因为它只指定pg_*表。
根据AWS文件
只引用目录表(带有PG前缀的表,如PG_TABLE_DEF)或不引用任何表的查询,只在领导节点上运行。
如果使用计算节点函数的查询不引用用户定义的表或Amazon系统表,则返回以下错误。
亚马逊无效操作:必须将一个或多个已使用的函数应用于至少一个用户创建的表.
总之,由于查询没有引用任何用户创建的表,所以不能使用listagg。
https://stackoverflow.com/questions/54910777
复制相似问题