繁体   English   中英

如何将从 PG_TABLE_DEF 中提取的 data.tablenames 存储到表/临时表中

[英]How to store data(tablenames) extracted from PG_TABLE_DEF into a table/temp table

我会告诉你这个请求背后的背景。 这与创建存储过程后 Redshift cursor 不存在相关。 我通过将for 循环row_num window function 一起使用来解决此问题。为此,我需要从PG_TABLE_DEF获取表名列表并将其存储在临时表中,以便通过 Stored Proc 中的 LOOP 进行处理。 挑战是我们不能对表运行某些操作,比如 PG_TABLE_DEF,它只在 LEADER 节点上运行。 因此,当我尝试通过CTAS将数据从PG_TABLE_DEF复制到新的临时表时,出现以下错误。

错误:Redshift 表不支持指定的类型或函数(每个 INFO 消息一个)。

有人可以帮助克服这种情况。

由于您 state pg_table_def 仅存在于领导节点上,而在 Redshift 上,计算节点无法在查询期间访问此信息。 因此,如果您需要有关计算节点的此信息,您需要首先从领导者那里查询它,然后(以某种方式)将其路由回计算节点。 这可以通过多种方式完成,但都需要您首先在领导节点上完全执行查询。

您可以使用 Lambda function 或其他读取 pg_table_def 然后将数据插入(复制)到普通表中的外部执行代码来执行此操作。 或者,您可以对 cursor 执行领导节点查询,然后使用存储过程读取 cursor,将数据存入普通表。 这 2 条路径做的事情基本相同,读取领导节点上的目录表,然后将此查询的结果放入普通表中。 我不知道有其他方法可以做到这一点。

这是我 2 年前写的用于执行此操作的代码的答案: How to join System tables or Information Schema tables with User defined tables in Redshift

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM