在 ORMlite 中获取磁盘上的 PostgreSql table 大小(字节)

Get PostgreSql table size on disk (byte) in ORMlite

我在 Java 应用程序中使用 ORMLite,以便处理 PostgreSql 数据库。 我想获取 table 数据库使用的光盘上的 space。 OrmLite好像没有具体的获取方法,所以我试了没有成功:

final String TABLE_NAME = "a_table_name_of_db";

//1)
String SQL = "SELECT pg_relation_size('" + TABLE_NAME + "');"  ;
int result = OGGETTO_DAO.executeRaw(SQL); 

//2)
String SQL = "SELECT pg_table_size('" + TABLE_NAME + "');"  ;
int result = OGGETTO_DAO.executeRaw(SQL); 

//3 - it was just a try...)
SQL = "SELECT pg_table_size('" + TABLE_NAME + "');"  ;
GenericRawResults<String> ARRAY = OGGETTO_DAO.queryRaw(SQL);
String result= ARRAY.getFirstResult();

对于 1) 和 2) 我总是得到 -1,对于 3) 我得到一个转换异常;

我通过命令行(linux - 通过 psql 提示)使用命令 'pg_relation_size' 或 'pg_table_size',它工作正常。

我哪里错了? 谢谢

更新 - 工作解决方案:

现在可以了!根据下面接受的答案,解决方案是:

final String TABLE_NAME = "a_table_name_of_db";
String SQL = "SELECT pg_table_size('" + TABLE_NAME  + "');"  
final long RESULT = OGGETTO_DAO.queryRawValue(SQL); //in bytes

int result = OGGETTO_DAO.executeRaw(SQL);

是的,这是不对的。查看 javadocs for executeRaw(...) 他们说 returns 影响的行数 而不是 结果。

SQL = "SELECT pg_table_size('" + TABLE_NAME + "');" ; GenericRawResults ARRAY = OGGETTO_DAO.queryRaw(SQL); String result= ARRAY.getFirstResult();

查看 javadocs for queryRaw(...),这里的问题是 returns 一个 GenericRawResults<String[]> 而不是 <String>。它 returns 原始结果的集合,每一行都由一个字符串数组表示。我真的很惊讶你的代码甚至可以编译。

应该是:

GenericRawResults<String[]> ARRAY = OGGETTO_DAO.queryRaw(SQL);
String result= ARRAY.getFirstResult()[0];

可能最好的方法是使用 queryRawValue(...) 执行原始查询和 returns 单个值。

// throws an exception if there are no results or if the first one isn't a number
long size = OGGETTO_DAO.queryRawValue(SQL);