Listagg Redshift DDL

时间:2019-02-27 17:00:59

标签: sql amazon-redshift

我正在尝试在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等

您能帮我实现这个目标吗?

1 个答案:

答案 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