Errors
如何在 Amazon RDS 上查詢 INFORMATION_SCHEMA.COLUMNS?
我收到了另一個團隊的列名列表。為了確保所有欄位列名在特定模式中都有效,我將它們放入一個臨時表中。我現在想看看它們是否存在。當我嘗試加入時
information_schema.columns
,我收到以下錯誤:ERROR: 0A000: Specified types or functions (one per INFO message) not supported on Redshift tables. Column "c.column_name" has unsupported type "information_schema.sql_identifier". Column "a.*" has unsupported type "pg_attribute". Column "t.*" has unsupported type "pg_type". Function "format_type(oid,integer)" not supported. Function "format_type(oid,integer)" not supported. Function "has_table_privilege(oid,text)" not supported. Function "has_table_privilege(oid,text)" not supported. Function "has_table_privilege(oid,text)" not supported. Function "has_table_privilege(oid,text)" not supported.
我試圖轉換
column_name
成不同的類型,但沒有運氣。誰能告訴我出了什麼問題以及我如何實現這個目標?
PG_TABLE_DEF
亞馬遜考慮
INFORMATION_SCHEMA.COLUMNS
使用Leader-Node Only 函式的內部函式。亞馬遜並沒有明智地重新定義標準化,而是INFORMATION_SCHEMA.COLUMNS
試圖定義自己的專有版本。為此,他們提供了另一個PG_TABLE_DEF
似乎可以滿足相同需求的功能。請注意中心關於將架構添加到search_path
.儲存有關表列的資訊。
PG_TABLE_DEF
僅返回有關使用者可見的表的資訊。如果PG_TABLE_DEF
未返回預期結果,請驗證 search_path 參數是否設置正確以包含相關架構。您可以使用它
SVV_TABLE_INFO
來查看有關表的更全面的資訊,包括數據分佈偏斜、鍵分佈偏斜、表大小和統計資訊。因此,使用您的範常式式碼(
NOT EXISTS
為了清楚起見而重寫),SET SEARCH_PATH to '$user', 'public', 'target_schema'; SELECT "column" FROM dev.fields f WHERE NOT EXISTS ( SELECT 1 FROM PG_TABLE_DEF pgtd WHERE pgtd.column = f.field AND schemaname = 'target_schema' );
也可以看看,
- 查詢 Redshift 系統表的官方文件