Postgresql

PostgreSQL 資訊模式的意外結果

  • February 13, 2021

我編寫了一個簡單的查詢,它應該以人類可讀的格式顯示任何給定模式的所有表大小:

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))

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