获取ormlite中磁盘上的postgresql表大小(字节)

wbgh16ku  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(282)

为了处理postgresql数据库,我在java应用程序中使用了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)我得到一个强制转换异常;
我使用命令行命令'pg\u relation\u size'或'pg\u table\u size'(linux-by psql提示符),它可以正常工作。
我怎么了?谢谢您
更新-工作解决方案:
现在成功了!根据以下公认答案,解决方案是:

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
laik7k3q

laik7k3q1#

int result = OGGETTO_DAO.executeRaw(SQL); 是的,那不对。查看executeraw的javadocs(…),他们说它返回受影响的行数,而不是结果。
sql=“选择pg_table_size('”+table_name+“');”;genericrawresults数组=oggetto_dao.queryraw(sql);string result=array.getfirstresult();
查看javadocs queryRaw(...) ,这里的问题是它返回一个 GenericRawResults<String[]> 而不是 <String> . 它返回原始结果的集合,每一行由一个字符串数组表示。我真的很惊讶你的代码竟然能编译。
应该是:

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

也许最好的方法就是使用 queryRawValue(...) 它执行原始查询并返回单个值。

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

相关问题