Listagg Redshift DDL

Jáz*_*zél 4 sql amazon-redshift

我正在尝试在 Redshift 中检索表的 DDL。我发现这个视图可以轻松地为任何表选择定义。但是,我需要在一行中提供此信息,并且我知道有这个 Listagg 函数,但是如果我尝试这样做:

select listagg(ddl, ' ')
from admin.v_generate_tbl_ddl
where schemaname = 'schema'
and tablename = 'orders'
Run Code Online (Sandbox Code Playgroud)

它给了我这个错误:

查询执行失败

原因:SQL 错误 [XX000]:错误:一个或多个使用的函数必须应用于至少一个用户创建的表。仅用户表函数的示例是 LISTAGG、MEDIAN、PERCENTILE_CONT 等

你能帮我解决这个问题吗?

dem*_*glu 6

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