![](/img/trans.png)
[英]Why are my tables not listed in the Redshift pg_table_def system table?
[英]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.