我正在尝试在 Redshift 中检索表的 DDL。我找到了 this View ,我可以在其中轻松选择任何表的定义。但是,我需要在一行中提供此信息,并且我知道有这个 Listagg 函数,但是如果我尝试这样做:
select listagg(ddl, ' ')
from admin.v_generate_tbl_ddl
where schemaname = 'schema'
and tablename = 'orders'
它给了我这个错误:
Query execution failed
Reason: SQL Error [XX000]: ERROR: One or more of the used functions must be applied on at least one user created tables. Examples of user table only functions are LISTAGG, MEDIAN, PERCENTILE_CONT, etc
你能帮我解决这个问题吗?
最佳答案
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
关于sql - Listagg Redshift DDL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54910777/