簡體   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