sql - Listagg Redshift DDL

标签 sql amazon-redshift

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

相关文章:

csv - 使用标题将 CSV 加载到 Redshift 中?

sql - 在 PostgreSQL 中实现没有触发器的复杂引用

python - 如何在 MonetDB 中调试 SQL/Python UDF

boto - 使用 boto 查找最后一个快照

python - 如何有效地将数据从 Postgres 传输到 Amazon Redshift?

amazon-web-services - 如何在 AWS Redshift 集群中查找数据库列表

amazon-s3 - 将 s3 的 pg_dump 加载到 redshift 中

sql - 如何识别具有重复条目的列(使用 SQL)?

sql - 查看oracle关于主/外键约束的元数据

c# - 如何在c#中编写SQL命令