MCPcopy Create free account
hub / github.com/aaPanel/BaoTa / GetInfo

Method GetInfo

class/databaseModel/pgsqlModel.py:1247–1328  ·  view source on GitHub ↗
(self, get)

Source from the content-addressed store, hash-verified

1245
1246 # 获取当前数据库信息
1247 def GetInfo(self, get):
1248 db_name = get.db_name
1249
1250 pgsql_obj = panelPgsql()
1251 db_find = public.M('databases').where("name=? AND LOWER(type)=LOWER('PgSql')", db_name).find()
1252 if not db_find:
1253 return public.returnMsg(False, '数据库不存在!')
1254 if db_find['sid']:
1255 db_find = public.M('database_servers').where("id=? AND LOWER(db_type)=LOWER('pgsql')", db_find['sid']).find()
1256 else:
1257 path = os.path.join(public.get_panel_path(), "data/postgresAS.json")
1258 if not os.path.isfile(path):
1259 return public.returnMsg(False, "请先设置管理员密码!")
1260
1261 db_find = {
1262 "db_host": "127.0.0.1",
1263 "db_port": panelPgsql.get_config_options("port", int, 5432),
1264 "db_user": "postgres",
1265 "db_password": json.loads(public.readFile(path))['password'],
1266 }
1267
1268 pgsql_obj.set_host(host=db_find['db_host'], port=db_find['db_port'], database=db_name, user=db_find['db_user'], password=db_find['db_password'])
1269 status, err_msg = pgsql_obj.connect()
1270 if status is False:
1271 return public.returnMsg(False, "连接数据库失败!")
1272
1273 database_list = pgsql_obj.query(f"select datname from pg_database where datname='{db_name}';")
1274 database_list = [database[0] for database in database_list]
1275 if not database_list:
1276 return public.returnMsg(False, '数据库不存在!')
1277
1278 collation = pgsql_obj.query(f"select pg_encoding_to_char(encoding) from pg_database where datname='{db_name}';")[0][0]
1279 result = {
1280 "database": db_name,
1281 "total_size": 0,
1282 "table_list": [],
1283 }
1284
1285 temp_list = pgsql_obj.query("""
1286 select schemaname, tablename
1287 from pg_tables
1288 where schemaname NOT IN ('pg_catalog', 'information_schema');
1289 """)
1290
1291 for table in temp_list:
1292 schema_name = table[0]
1293 table_name = table[1]
1294 full_table_name = f'"{schema_name}"."{table_name}"' # 注意加引号防止大小写或特殊字符问题
1295
1296 temp_data = pgsql_obj.query(f"select count(*) from {full_table_name};")
1297 if not isinstance(temp_data, list): continue
1298 if len(temp_data) == 0: continue
1299 rows_count = temp_data[0][0]
1300
1301 data_size = pgsql_obj.query(f"""
1302 select pg_size_pretty(pg_table_size('{full_table_name}')) AS table_size,
1303 pg_size_pretty(pg_indexes_size('{full_table_name}')) AS indexes_size,
1304 pg_size_pretty(pg_total_relation_size('{full_table_name}')) AS total_size,

Callers 3

check_mysql_filesMethod · 0.45
backup_mysql_dataMethod · 0.45
reduction_mysql_dataMethod · 0.45

Calls 14

panelPgsqlClass · 0.85
returnMsgMethod · 0.80
readFileMethod · 0.80
findMethod · 0.45
whereMethod · 0.45
MMethod · 0.45
joinMethod · 0.45
get_config_optionsMethod · 0.45
loadsMethod · 0.45
set_hostMethod · 0.45
connectMethod · 0.45
queryMethod · 0.45

Tested by

no test coverage detected