[英]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.