Postgresql
PostgreSQL 資訊模式的意外結果
我編寫了一個簡單的查詢,它應該以人類可讀的格式顯示任何給定模式的所有表大小:
select table_name, pg_relation_size(quote_ident(table_name)) from information_schema.tables where table_schema = 'my_schema' order by 2
當我在 PgAdmin 中執行此查詢時,我收到以下錯誤:
ERROR: relation "my_table" does not exist SQL state: 42P01
這個錯誤怎麼可能發生?我根本沒有更改 information_schema ,如果一個關係首先不存在,為什麼它會在 information_schema 中?知道這怎麼會發生嗎?
我能想到的唯一原因是,如果
my_schema
不是您的search_path
.當您傳遞一個沒有模式限定的表名給函式
pg_relation_size()
時,會在預設的 search_path 中搜尋該表。如果未找到,您將收到該錯誤。請改用完全限定名稱:
pg_relation_size(format('%I.%I', table_schema, table_name))