Listagg Redshift DDL
Posted
技术标签:
【中文标题】Listagg Redshift DDL【英文标题】: 【发布时间】:2019-02-27 17:00:59 【问题描述】:我正在尝试检索 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 等
您能帮我解决一下如何实现吗?
【问题讨论】:
我不知道红移,但尝试嵌套在派生表/公用表表达式中:with cte as (select ddl from admin.v_generate_tbl_ddl where schemaname = 'schema' and tablename = 'orders') select listagg(ddl, ' ') from cte
它给了我同样的错误信息。
【参考方案1】:
listagg
函数是一个仅计算节点函数。
但是您运行以获取表 ddl 的查询仅在领导者上运行,因为它仅指定 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
【讨论】:
以上是关于Listagg Redshift DDL的主要内容,如果未能解决你的问题,请参考以下文章