[英]Undefined table: 7 ERROR: relation “V5TableName” does not exist
我正在為我的應用程序使用 MVC 框架(Zend),我想在 PostgreSQL(包括索引)中找到一個表的總大小。 表名是“V5TableName” ——包括引號,因為表名區分大小寫。 我已確保不涉及任何錯字。
我獲取表格大小的代碼如下所示:
public function getMyTableSize()
{
$sql = "SELECT pg_size_pretty(pg_total_relation_size( '\"V5TableName\"' ) );";
/* Custom_Db is a custom library in my application which makes the PostgreSQL connection
and queries the database
*/
$tableSize = Custom_Db::query($sql)->fetchColumn();
return $tableSize;
}
當我的應用程序調用此 function 時,它會在我的日志中返回以下錯誤:
[22-Apr-2020 09:42:37] PID:30849 ERR: SQLSTATE[42P01]: Undefined table: 7 ERROR: relation "V5TableName" does not exist LINE 1: SELECT pg_size_pretty(pg_total_relation_size( '"V5TableName... ^ query was: SELECT pg_size_pretty(pg_total_relation_size( '"V5TableName"' ) );
如果我在 pgAdmin4 中運行相同的查詢,它可以很好地返回表大小(例如:104Mb)。
我努力了:
'public."V5TableName"'
)。以上似乎都不起作用。 我不確定這里出了什么問題。
我還嘗試在我的應用程序中找到總數據庫大小(數據庫名稱: MyDbName
- 混合大小寫),我的查詢如下所示:
$sql = "SELECT pg_size_pretty(pg_database_size('MyDbName'))"; // this DID NOT WORK
所以我將其更改為如下所示的:(它有效)
$sql = "SELECT pg_size_pretty(pg_database_size( current_database() ))"; // this WORKED
我想知道是否有類似的方法可以找到表格大小。
您的查詢應該有效。 雙引號的使用似乎是正確的。
SELECT pg_size_pretty(pg_total_relation_size('"V5TableName"'));
首先確保您連接到正確的數據庫集群(又名“服務器”)。 它由其數據目錄定義,或者由主機名和端口號同樣明確。 在 此處和此處閱讀手冊。
然后確保您連接到該數據庫集群中的正確數據庫。 一個 Postgres 數據庫集群由 1-n 個數據庫組成。 在未指定實際數據庫的情況下進行連接時,默認情況下會進入名為postgres
的維護數據庫。 這是最可能的解釋。 檢查:
SELECT current_database();
然后檢查正確的表和模式名稱:
SELECT * FROM pg_tables
WHERE tablename ~* 'V5TableName'; -- ~* matches case-insensitive
第一個謎應該在這一點上解決。
檢查您的數據庫拼寫和可能的近重復:
SELECT datname FROM pg_database;
該調用沒有雙引號(就像您嘗試正確一樣),但需要正確的大寫:
SELECT pg_size_pretty(pg_database_size('MyDbName'));
請注意細微差別(如手冊中所述):
pg_database_size()
采用oid
或name
。 所以傳遞區分大小寫的數據庫名稱,不要使用雙引號。pg_total_relation_size()
需要regclass
。 因此,如果您需要保留大小寫,請使用雙引號傳遞區分大小寫的關系名稱。 pg_database_size()
必須有所不同,因為數據庫沒有專用的 object 標識符類型(沒有
)。regdatabase
它的要點:盡可能避免在 Postgres 中使用雙引號標識符。 它使您的生活更輕松。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.