Errors

如何在 Amazon RDS 上查詢 INFORMATION_SCHEMA.COLUMNS?

  • January 15, 2018

我收到了另一個團隊的列名列表。為了確保所有欄位列名在特定模式中都有效,我將它們放入一個臨時表中。我現在想看看它們是否存在。當我嘗試加入時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'
);

也可以看看,

引用自:https://dba.stackexchange.com/questions/195387